{"version":3,"sources":["../node_modules/react/index.js","../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/index.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/popper.js","../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../src/constants.ts","../../src/utils.ts","../../src/dom-utils.ts","../../src/bindGlobalEventListeners.ts","../../src/browser.ts","../../src/props.ts","../../src/template.ts","../../src/createTippy.ts","../../src/index.ts","../../build/base.js","../../src/utils.js","../../src/util-hooks.js","../../src/forwardRef.js","../node_modules/@moai/core/dist/index.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../../libs/node_modules/@popperjs/core/lib/enums.js","../../../libs/node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../../libs/node_modules/@popperjs/core/lib/utils/debounce.js","../../../libs/node_modules/@popperjs/core/lib/index.js","../../../libs/node_modules/@popperjs/core/lib/utils/mergeByName.js","../../../libs/node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../../libs/node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../../libs/node_modules/@popperjs/core/lib/utils/getVariation.js","../../../libs/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../../libs/node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../../libs/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../../libs/node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../../libs/node_modules/@popperjs/core/lib/modifiers/offset.js","../../../libs/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../../libs/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/contains.js","../../../libs/node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../../libs/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../../libs/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../../libs/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../../libs/node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../../libs/node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../../libs/node_modules/@popperjs/core/lib/utils/within.js","../../../libs/node_modules/@popperjs/core/lib/modifiers/hide.js","../../../libs/node_modules/@popperjs/core/lib/popper.js","../../../libs/node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../libs/node_modules/@popperjs/core/lib/modifiers/flip.js","../../../libs/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../../libs/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../../libs/node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../../libs/node_modules/@popperjs/core/lib/modifiers/arrow.js","../../src/className-plugin.js","../../src/Tippy.js","../../../libs/node_modules/@moai/core/dist/index.js","../../src/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/webpack/buildin/module.js","../node_modules/react-dom/index.js","../node_modules/ace-builds/src-noconflict/ace.js","../../DT.ts","../../clipboard-polyfill.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/object-assign/index.js","../node_modules/webpack/buildin/amd-options.js","../node_modules/webpack/buildin/global.js","../node_modules/webpack/buildin/amd-define.js","../../../libs/node_modules/lodash.throttle/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/ace-builds/src-noconflict/ext-statusbar.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../../src/FileSaver.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/scheduler/index.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../../../libs/node_modules/prop-types/index.js","../../../libs/node_modules/prop-types/factoryWithThrowingShims.js","../../../libs/node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/ace-builds/src-noconflict/keybinding-sublime.js","../node_modules/ace-builds/src-noconflict/ext-prompt.js","../node_modules/ace-builds/src-noconflict/ext-searchbox.js","../node_modules/prop-types/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/ace-builds/src-noconflict/mode-json.js","../node_modules/ace-builds/src-noconflict/worker-json.js"],"names":["module","exports","require","getBoundingClientRect","element","rect","width","height","top","right","bottom","left","x","y","getWindow","node","toString","ownerDocument","defaultView","window","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","isElement","Element","isHTMLElement","HTMLElement","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","test","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","scroll","offsets","getNodeScroll","clientLeft","clientTop","getLayoutRect","offsetLeft","offsetTop","offsetWidth","offsetHeight","getParentNode","assignedSlot","parentNode","host","listScrollParents","list","scrollParent","getScrollParent","indexOf","body","isBody","target","concat","visualViewport","updatedList","isTableElement","getTrueOffsetParent","position","getOffsetParent","currentNode","css","transform","perspective","willChange","getContainingBlock","basePlacements","variationPlacements","reduce","acc","placement","placements","modifierPhases","order","modifiers","map","Map","visited","Set","result","forEach","modifier","set","name","has","sort","add","requires","requiresIfExists","dep","depModifier","get","push","debounce","fn","pending","Promise","resolve","then","undefined","DEFAULT_OPTIONS","strategy","areValidElements","_len","arguments","length","args","Array","_key","some","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","reference","popper","options","state","orderedModifiers","Object","assign","modifiersData","elements","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","cleanupModifierEffects","scrollParents","contextElement","phase","filter","orderModifiers","merged","current","existing","data","keys","key","mergeByName","m","enabled","_ref3","_ref3$options","effect","cleanupFn","update","forceUpdate","_state$elements","rects","reset","index","_state$orderedModifie","_state$orderedModifie2","_options","destroy","onFirstUpdate","passive","getBasePlacement","split","getVariation","getMainAxisFromPlacement","computeOffsets","_ref","basePlacement","variation","commonX","commonY","mainAxis","len","Math","floor","ceil","unsetSides","mapToStyles","_ref2","_Object$assign2","popperRect","gpuAcceleration","adaptive","_roundOffsets","dpr","devicePixelRatio","round","roundOffsets","hasX","hasOwnProperty","hasY","sideX","sideY","clientHeight","clientWidth","_Object$assign","commonStyles","hash","getOppositePlacement","replace","matched","start","end","getOppositeVariationPlacement","contains","parent","child","isShadow","Boolean","getRootNode","next","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","html","navigator","userAgent","getViewportRect","getInnerBoundingClientRect","winScroll","max","scrollWidth","scrollHeight","direction","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","min","mergePaddingObject","paddingObject","expandToHashMap","value","hashMap","detectOverflow","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","padding","altContext","referenceElement","clippingClientRect","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","offset","multiply","axis","within","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","createPopper","_options$scroll","_options$resize","resize","addEventListener","removeEventListener","_options$gpuAccelerat","_options$adaptive","arrow","style","removeAttribute","setAttribute","initialStyles","margin","property","attribute","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","_options$allowedAutoP","allPlacements","overflows","a","b","computeAutoPlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","find","slice","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_mainSide","_altSide","_offset","_preventedOffset","_state$modifiersData$","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","querySelector","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","TOUCH_OPTIONS","capture","getValueAtIndexOrReturn","v","defaultValue","isType","str","call","type","invokeWithArgsOrReturn","ms","clearTimeout","timeout","setTimeout","normalizeToArray","pushIfUnique","arr","arrayFrom","div","isMouseEvent","isReferenceElement","getArrayOfElements","isNodeList","setTransitionDuration","els","el","setVisibilityState","getOwnerDocument","updateTransitionEndListener","method","action","box","currentInput","isTouch","lastMouseMoveTime","onDocumentTouchStart","onDocumentMouseMove","now","performance","onWindowBlur","activeElement","ua","isIE","pluginProps","animateFill","followCursor","inlinePositioning","sticky","defaultProps","appendTo","aria","content","expanded","delay","duration","getReferenceClientRect","hideOnClick","ignoreAttributes","interactive","interactiveBorder","interactiveDebounce","moveTransition","onAfterUpdate","onBeforeUpdate","onCreate","onDestroy","onHidden","onHide","onMount","onShow","onShown","onTrigger","onUntrigger","onClickOutside","plugins","popperOptions","render","showOnCreate","touch","trigger","triggerTarget","allowHTML","animation","inertia","maxWidth","role","theme","zIndex","defaultKeys","getExtendedPassedProps","passedProps","plugin","evaluateProps","out","props","valueAsString","JSON","e","getDataAttributeProps","dangerouslySetInnerHTML","createArrowElement","getChildren","boxChildren","backdrop","nextProps","prevProps","setContent","onUpdate","idCounter","mouseMoveListeners","mountedInstances","createTippy","isVisibleFromClick","didHideDueToDocumentMouseDown","didTouchMove","ignoreOnFirstUpdate","listeners","debouncedOnMouseMove","onMouseMove","doc","id","popperInstance","isEnabled","isVisible","isMounted","isShown","clearDelayTimeouts","cancelAnimationFrame","setProps","invokeHook","removeListeners","addListeners","cleanupInteractiveMouseListeners","handleAriaExpandedAttribute","handleStyles","createPopperInstance","getNestedPopperTree","requestAnimationFrame","nestedPopper","show","isAlreadyVisible","isDisabled","isTouchAndTouchDisabled","getCurrentTarget","getIsDefaultRenderFn","addDocumentPress","getDefaultTemplateChildren","handleAriaContentAttribute","onTransitionEnd","onTransitionedIn","mount","hide","isAlreadyHidden","removeDocumentPress","callback","onTransitionedOut","hideWithInteractivity","enable","disable","unmount","destroyPopperInstance","pluginsHooks","hasAriaExpanded","scheduleShow","getNormalizedTouchSettings","currentTarget","lastTriggerEvent","isShow","shouldInvokePropsHook","pluginHooks","attr","nodes","currentValue","nextValue","listener","event","currentTransitionEndListener","eventType","handler","getIsCustomTouchBehavior","on","onMouseLeave","splitBySpaces","shouldScheduleClickHide","isEventListenerStopped","wasFocused","scheduleHide","isCursorOverReferenceOrPopper","clientX","clientY","popperTreeData","popperState","topDistance","bottomDistance","leftDistance","rightDistance","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","isCursorOutsideInteractiveBorder","computedReference","getDelay","touchValue","touchDelay","showTimeout","hideTimeout","scheduleHideAnimationFrame","optionalProps","instances","tippy","partialProps","isBrowser","factory","styleInject","ref","insertAt","head","getElementsByTagName","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","applyFocusVisiblePolyfill","scope","hadKeyboardEvent","hadFocusVisibleRecently","hadFocusVisibleRecentlyTimeout","inputTypesWhitelist","text","search","url","tel","email","password","number","date","month","week","time","datetime","isValidFocusTarget","classList","addFocusVisibleClass","onPointerDown","addInitialPointerMoveListeners","onInitialPointerMove","metaKey","altKey","ctrlKey","visibilityState","tagName","readOnly","isContentEditable","focusTriggersKeyboardModality","hasAttribute","remove","nodeType","Node","DOCUMENT_FRAGMENT_NODE","DOCUMENT_NODE","CustomEvent","error","createEvent","initCustomEvent","dispatchEvent","define","validateStyles","obj","Error","s","background","primary","secondary","inverse","s$1","borderColor","strong","weak","s$2","Icon","_a","path","size","React","className","xmlns","viewBox","d","s$3","outline","inner","outer","s$4","DivPx","DivGrow","s$5","flat","outset","getClass","highlight","selected","isFullWidth","classes","main","join","Button","icon","children","onClick","t","p","prototype","getOwnPropertySymbols","propertyIsEnumerable","__rest","iconSize","medium","small","s$6","renderOption","label","ButtonMenu","container","select","onChange","actions","disabled","s$9","s$a","muted","Paragraph","getClass$1","_b","Input","input","onChange$1","setValue","isNumber","valueAsNumber","getType","Fragment","onBlur","onFocus","values","scrollbar","custom","s$e","renderOption$1","onChange$2","option","o","Select","cls","fullWidth","widthFull","widthContent","getClassNames","flatContainer","mediumSelect","mediumIcon","smallSelect","smallIcon","onDocumentPress","onTouchMove","onTouchStart","onBlurOrFocusOut","preserveRef","ssrSafeCreateDiv","deepPreserveProps","instanceProps","componentProps","useIsomorphicLayoutEffect","useMutableBox","initialValue","useRef","updateClassName","classNames","classNamePlugin","isDefaultRenderFn","TippyGenerator","visible","singleton","restOfNativeProps","__source","__self","isControlledMode","isSingletonMode","useState","attrs","setAttrs","mounted","setMounted","singletonContent","setSingletonContent","mutableBox","renders","computedProps","deps","hideData","referenceHidden","escaped","cloneElement","createPortal","dataAttrs","toDataAttributes","Tippy","forwardRef","DivEm","Strong","MutedDiv","Pop","s$f","getClassName","curr","Switcher","_slicedToArray","isArray","Symbol","iterator","_arr","_n","_d","_e","_s","done","err","unsupportedIterableToArray","TypeError","_defineProperty","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","apply","_objectSpread2","source","getOwnPropertyDescriptors","defineProperties","webpackPolyfill","deprecate","paths","l","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","process","console","global","this","payload","modules","payloads","original","trace","_require","parentId","lookup","params","packagedModule","moduleName","normalizeModule","chunks","charAt","previous","mod","uri","packaged","ns","root","exportAce","ace","real","exec","RegExp","match","String","compliantExecNpcg","compliantLastIndexIncrement","lastIndex","getNativeFlags","regex","ignoreCase","multiline","extended","array","item","from","r2","_xregexp","captureNames","Empty","Function","bind","that","bound","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","prototypeOfArray","prototypeOfObject","_toString","owns","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","splice","makeArray","lengthBefore","array_splice","deleteCount","pos","removeCount","removed","insert","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","createEmpty","freezeObject","boxedString","splitString","fun","toObject","self","thisp","reduceRight","sought","toInteger","lastIndexOf","abs","getPrototypeOf","__proto__","constructor","descriptor","getter","setter","getOwnPropertyNames","create","empty","isPrototypeOf","toLocaleString","valueOf","properties","Type","doesDefinePropertyWork","exception","definePropertyWorksOnObject","definePropertyWorksOnDom","definePropertyFallback","seal","freeze","preventExtensions","isSealed","isFrozen","isExtensible","returnValue","hasDontEnumBug","dontEnums","dontEnumsLength","ii","dontEnum","Date","getTime","ws","trim","trimBeginRegexp","trimEndRegexp","n","removeChild","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","os","platform","appName","isWin","parseFloat","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","MSStream","isMobile","useragent","buildDom","refs","txt","ch","childIndex","val","getDocumentHead","tag","createElementNS","removeChildren","innerHTML","textContent","createFragment","createDocumentFragment","hasCssClass","addCssClass","removeCssClass","toggleCssClass","setCssClass","include","hasCssString","sheets","querySelectorAll","importCssString","importCssStylsheet","rel","href","scrollbarWidth","minWidth","display","noScrollbar","withScrollbar","computedStyle","setStyle","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","animationName","translate","tx","ty","inherits","ctor","superCtor","super_","mixin","implement","proto","oop","Keys","ret","MODIFIER_KEYS","16","17","18","224","91","92","93","KEY_MODS","FUNCTION_KEYS","8","9","13","19","27","32","33","34","35","36","37","38","39","40","44","45","46","96","97","98","99","100","101","102","103","104","105","112","113","114","115","116","117","118","119","120","121","122","123","144","145","PRINTABLE_KEYS","48","49","50","51","52","53","54","55","56","57","59","61","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","107","109","110","186","187","188","189","190","191","192","219","220","221","222","111","106","parseInt","enter","escape","esc","del","mods","pow","keyCodeToString","keyCode","keyString","fromCharCode","activeListenerOptions","pressedKeys","ts","getListenerOptions","createComment","detectListenerOptionsSupport","EventListener","elem","removeListener","addListener","destroyer","$toDestroy","stopEvent","stopPropagation","preventDefault","getButton","shiftKey","button","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","wheelDeltaX","wheelX","wheelY","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","timeouts","callbackName","startX","startY","timer","clicks","eventNames","2","3","4","onMousedown","isNewClick","_clicks","getModifierHash","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","defaultPrevented","resetPressedKeys","getModifierString","addCommandKeyListener","isOldGecko","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","postMessageId","nextTick","messageName","$idleBlocked","onIdle","cb","$idleBlockId","blockIdle","nextFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","Range","startRow","startColumn","endRow","endColumn","row","column","isEqual","range","compare","compareRange","cmp","comparePoint","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","isEmpty","clone","collapseRows","toScreenRange","session","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","last","stringReverse","string","reverse","stringRepeat","count","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","deepCopy","arrayToMap","createMap","arrayRemove","escapeRegExp","escapeHTML","getMatchOffsets","regExp","matches","deferredCall","fcn","deferred","cancel","schedule","isPending","delayedCall","defaultTimeout","_self","$cancelT","lineMode","pasteCancelled","dom","lang","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","KEYS","MODS","valueResetRegex","TextInput","opacity","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","isFocused","hasFocus","resetSelection","$focusScroll","focus","preventScroll","isTransformed","ancestors","parentElement","blur","curOp","commandName","command","isUserAction","docChanged","selectionChanged","onCompositionEnd","newValue","selectionEnd","selection","setSelectionRange","afterContextMenu","selectionStart","line","getRange","cursor","getLine","prevLine","nextLine","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","onTextInput","onInput","onCompositionUpdate","inputType","execCommand","MAX_LINE_LENGTH","handleClipboardData","forceIEMime","clipboardData","mime","setData","getData","doCopy","isCut","getCopyText","onCut","onCopy","onCommandKey","isAllSelected","selectAll","$readOnly","cancelComposition","useTextareaForIME","markerRange","context","compositionStartOffset","off","closeTimeout","syncComposition","onContextMenuClose","renderer","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","_signal","getSelectionRange","msGetInputContext","getInputContext","getElement","setCommandMode","setReadOnly","setCopyWithEmptySelection","onContextMenu","_emit","domEvent","moveToMouse","bringToFront","characterWidth","borderTopWidth","borderLeftWidth","maxTop","move","textInput","scroller","typingResetTimeout","typing","detectArrowKeys","$mouseHandler","isMousePressed","up","home","down","shift","commands","findKeyCommand","addIosSelectionHandler","$setUserAgentForTests","_isMobile","_isIOS","DefaultHandlers","mouseHandler","$clickSelection","editor","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","selectByLines","extendSelectionBy","selectByWords","calcRangeOrientation","anchor","ev","inSelection","getDocumentPosition","mousedownEvent","moveToPosition","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","setCapture","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","ax","ay","bx","by","sqrt","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","dt","canScroll","isScrollableBy","speed","scrollBy","stop","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","setPosition","setClassName","getHeight","getWidth","GutterTooltip","windowWidth","innerWidth","windowHeight","innerHeight","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","hideTooltip","moveTooltip","getRegion","selectTo","srcElement","$tooltipFollowsMouse","annotation","$annotations","getLength","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","showTooltip","$gutter","MouseEvent","$inSelection","propagationStopped","selectionRange","DragdropHandler","blankImage","src","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","lineHeight","layerConfig","editorRect","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","addMarker","getSelectionStyle","clearSelection","$cursorLayer","setBlinking","clearInterval","setInterval","clearDragMarker","removeMarker","fromOrientedRange","$resetCursorStyle","onDragStart","cancelDrag","draggable","dataTransfer","effectAllowed","getReadOnly","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","types","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","dragDrop","$dragEnabled","eventTarget","unselectable","addTouchListeners","touchStartT","lastT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","clickCount","vX","vY","createContextMenu","handleClick","getAttribute","hasUndo","getUndoManager","replaceChild","class","updateMenu","readText","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","textToScreenCoordinates","pageY","hideContextMenu","handleLongTap","selectWord","touches","h","w","touchObj","setRange","switchToSelectionMode","cursorPos","getPixelPosition","anchorPos","weightedDistance","diff1","diff2","oldScrollTop","getScrollTop","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","onload","_","isAbort","qualifyURL","EventEmitter","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","defaultHandler","once","newCallback","handlers","_disabled_","old","removeDefaultHandler","pop","capturing","removeAllListeners","optionsProvider","optList","setOption","getOptions","optionNames","$options","hidden","getOption","opt","warn","forwardTo","handlesSet","message","reportError","msg","AppConfig","$defaultOptions","defineOptions","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","all","$modes","moduleUrl","component","parts","sep","base","re","setModuleUrl","subst","$loading","loadModule","onLoad","moduleType","afterLoad","reportErrorIfPathIsNotConfigured","init","scriptOptions","scriptUrl","currentScript","_currentScript","scripts","script","j","m1","toUpperCase","version","DefaultGutterHandler","config","MouseHandler","focusEditor","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","gutterEl","$dragDelay","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","endOperation","startOperation","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","passEvent","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","UnicodeTBL00","UnicodeTBL20","_invertLevel","lev","levels","_array","lo","hi","tmp","_getCharClass","chars","ix","wType","nType","cType","c","rtlCandidate","_getCharacterType","uc","charCodeAt","L","R","EN","ON_R","AN","R_H","B","RLE","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","charTypes","impTab","prevState","newClass","newLevel","newState","condPos","_computeLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","getValue","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","delta","lines","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","endOfLine","$useWrapMode","splits","$wrapData","indent","substring","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getCursorPosition","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","lead","createAnchor","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","getAnchor","getSelectionLead","isBackwards","$setSelection","Number","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveCursorTo","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","screenPos","lineWidgets","widget","rowsAbove","rowCount","docPos","keepDesiredColumn","moveCursorToScreen","desiredColumn","r","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","rules","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","flag","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","token","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","tokens","stack","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","consumeLineEnd","merge","unshift","TextHighlightRules","$rules","addRules","prefix","nextState","getRules","embedRules","HighlightRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","processed","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","splitChar","keywords","$keywordList","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","CstyleBehaviour","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","quote","leftChar","rightChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","charBefore","$matchTokenType","iterator2","bracket","wordChars","code","unicode","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","minEmptyLength","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","autoOutdent","createWorker","createModeDelegates","$id","delegations","functionName","$delegator","language","transformAction","param","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","word","score","meta","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$clipPositionToDocument","$insertRight","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$getTransformedPoint","noClip","Document","textOrLines","$lines","insertMergedLines","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","to","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","getState","SearchHighlight","clazz","setRegexp","MAX_RANGES","cache","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","$bias","pointIndex","excludeEdges","startIndex","addList","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","restorePoint","subFold","collapseChildren","addSubFold","afterStart","firstConsumed","consumedFolds","k","restoreRange","Folding","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","depth","getFoldWidget","getFoldWidgetRange","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","setMode","bgTokenizer","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","getSelection","undoManager","addSession","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","undo","redo","hasRedo","addSelection","startNewGroup","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markerId","getMarkers","$searchHighlight","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","getMode","$scrollTop","setScrollTop","isNaN","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","selectionBefore","$getUndoSelection","redoChanges","selectionAfter","setUndoSelect","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","diff","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","setUseWrapMode","useWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","indentation","getWrapIndent","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","wrap","$wrap","firstLineNumber","useSoftTabs","foldStyle","Search","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","wholeWord","wordBoundary","addWordBoundary","caseSensitive","$assembleMultilineRegExp","backwards","forEachInLine","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","bindKey","isDefault","addCommand","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","removeCommands","bindKeys","keyList","$keyChain","CommandManager","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","showSettingsMenu","showErrorMarker","scrollIntoView","description","centerSelection","gotoLine","prompt","$type","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","textarea","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","$opResetTimer","$lastSel","prevOp","commandEvent","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeableCommands","$mergeUndoDeltas","prev","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldEditor","getSession","onResize","setTheme","getTheme","getFontSize","setFontSize","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","getMatching","markerType","$highlightTags","$highlightTagPending","$tagHighlight","prevToken","sbm","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","inVirtualSelectionMode","isFullLine","getBehavioursEnabled","lineState","shouldOutdent","$enableAutoIndent","lineIndent","selectedRange","currIndent","prevLineState","composition","applyComposition","forEachSelection","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","$toggleWordPairs","currWordStart","wordParts","curLength","itLength","reg","wordPairs","negate","firstCondition","res","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","animate","alignCursor","getCursorPositionScreen","expand","matchType","bracketType","found","brackets","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","$composition","placeholderNode","$placeholder","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","getText","lastLineNumber","$renderer","UndoManager","$maxRev","allowMerge","$lastDelta","$keepRedoStack","$redoStack","lastDeltas","$undoStack","$rev","rev","markIgnored","ignore","getRevision","getDeltas","getChangedRanges","getChangedLines","deltaSet","swapped","swapGroups","rearrangeUndoStack","$redoStackBaseRev","undoSelectionRange","$syncRev","redoStack","deltaSets","moveDeltasByOne","rebaseRedoStack","redoSelectionRange","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","isClean","markClean","$prettyPrint","stringifyDelta","stringifyRange","d1","d2","i1","i2","ds1","ds2","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","cloneDelta","xformed","Lines","canvasHeight","cells","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","computeLineHeight","$cacheCell","cell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","onCreateCell","textNode","foldWidget","rowInfo","annoText","gutterOffset","oldLastRow","$updateCursorRow","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","$padding","$computePadding","$highlightGutterLine","$cursorRow","updateLineHighlight","$cursorCell","scrollLines","$renderLines","childNodes","breakpoints","decorations","foldHeight","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","setPadding","setMarkers","markers","elt","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","lineRange","range1","drawBidiSingleLineMarker","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$tabStrings","tabStr","span","$indentGuideRe","spaceClass","spaceContent","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","lineElement","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$textToken","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","com","renderIndentGuide","cols","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","renderTokens","addTokens","Cursor","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$stopCssAnimation","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","blink","onScreen","isCursorInView","pixelPos","maxHeight","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","ScrollBar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","$scrollbarWidth","$minWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","changes","$recursionLimit","_flush","change","clear","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","disconnect","$getZoom","getZoom","zoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","u","f","GutterLayer","MarkerLayer","TextLayer","CursorLayer","editorCss","HIDE_TEXTAREA","VirtualRenderer","onGutterResize","$markerBack","textLayer","$textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","$renderChanges","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","unfreeze","st","$updateLines","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","x_min","steps","initialScroll","oldSteps","$timer","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","pageX","$useTextareaForIME","addToken","removeExtraToken","newToken","$themeId","cssClass","$theme","isDark","setMouseCursor","attachToShadowRoot","workerUrl","Worker","blob","Blob","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","$workerBlob","blobURL","URL","webkitURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","$doc","cmd","emit","ex","attachToDocument","q","UIWorkerClient","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","other","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onSelectionInterval","selectMoreLines","selectMore","joinSelections","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","cmdResult","anim","buf","skip","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","oldWidget","gutterAnno","comparator","binarySearch","findAnnotations","onmousedown","Renderer","edit","_id","getElementById","env","oldNode","createEditSession","dataTypes","showWarnings","DT","debugLog","TEXT_PLAIN","write","seemToBeInIE","execCopy","copyUsingTempSelection","tempElem","spanParent","attachShadow","innerText","selectionSet","selectionClear","DTFromText","tracker","FallbackTracker","createRange","selectNodeContents","removeAllRanges","ClipboardEvent","_arrayLikeToArray","arr2","_unsupportedIterableToArray","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","__webpack_amd_options__","g","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","freeSelf","objectToString","nativeMax","nativeMin","wait","lastArgs","lastThis","maxWait","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","remainingWait","debounced","isInvoking","toNumber","isObject","flush","isObjectLike","isSymbol","isBinary","_classCallCheck","Constructor","_defineProperties","_createClass","protoProps","staticProps","StatusBar","statusUpdate","updateStatus","status","separator","_createForOfIteratorHelper","F","it","normalCompletion","didErr","step","_e2","HTMLAnchorElement","autoBom","saveAs","z","A","C","encodeURIComponent","D","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","E","updater","G","H","isReactComponent","I","isPureReactComponent","J","K","M","$$typeof","_owner","O","P","Q","keyPrefix","S","V","T","U","W","aa","X","N","Y","Z","ba","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","ReactCurrentOwner","IsSomeRendererActing","Children","toArray","only","Component","Profiler","PureComponent","StrictMode","Suspense","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","createContext","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","createFactory","createRef","isValidElement","lazy","_ctor","_status","_result","memo","useCallback","useContext","useDebugValue","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useReducer","onError","da","ea","fa","ha","ia","ja","la","ma","na","oa","ka","pa","qa","ra","sa","extractEvents","eventTypes","ta","phasedRegistrationNames","registrationName","va","wa","dependencies","xa","ya","za","Aa","Ba","Ca","stateNode","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","Ua","Va","xlinkHref","Wa","Xa","Sa","Ta","Ra","setAttributeNS","Ya","Za","$a","ab","bb","db","eb","fb","gb","hb","ib","jb","lb","mb","nb","pb","displayName","qb","_debugOwner","_debugSource","fileName","rb","sb","xb","_valueTracker","stopTracking","tb","yb","checked","zb","defaultChecked","_wrapperState","initialChecked","Ab","controlled","Bb","Cb","Db","Eb","Gb","Fb","Hb","defaultSelected","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","MSApp","execUnsafeLocalFunction","namespaceURI","Rb","nodeValue","Sb","Tb","animationend","animationiteration","animationstart","transitionend","Ub","Vb","Wb","transition","Xb","Yb","Zb","$b","ac","bc","WeakMap","cc","dc","alternate","effectTag","memoizedState","dehydrated","fc","hc","sibling","gc","ic","jc","kc","lc","_dispatchListeners","_dispatchInstances","isPropagationStopped","isPersistent","release","mc","nc","correspondingUseElement","oc","pc","qc","topLevelType","nativeEvent","targetInst","rc","eventSystemFlags","containerInfo","tc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Kc","blockedOn","Lc","pointerId","Mc","Nc","Pc","unstable_runWithPriority","priority","hydrate","Qc","Rc","Sc","Tc","Uc","unstable_scheduleCallback","unstable_NormalPriority","Vc","Wc","Yc","Zc","$c","ad","bubbled","captured","eventPriority","bd","cd","dd","unstable_UserBlockingPriority","ed","gd","hd","Oc","jd","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","lineClamp","orphans","widows","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","kd","ld","md","setProperty","nd","menuitem","area","br","embed","hr","img","keygen","link","track","wbr","od","pd","is","qd","rd","sd","td","ud","vd","nextSibling","xd","HTMLIFrameElement","contentWindow","yd","contentEditable","Dd","Ed","Fd","autoFocus","Gd","__html","Hd","Id","Jd","Kd","previousSibling","Ld","random","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","dispatchConfig","Ud","_targetInst","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","Interface","isDefaultPrevented","ee","eventPool","fe","destructor","de","getPooled","cancelBubble","persist","eventPhase","bubbles","cancelable","isTrusted","ge","he","ie","je","ke","documentMode","le","me","ne","oe","beforeInput","compositionEnd","compositionStart","compositionUpdate","pe","qe","se","ve","locale","te","ue","we","color","xe","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","detachEvent","He","Ie","attachEvent","Je","Ke","Le","Me","_isInputEventSupported","Ne","view","Oe","Alt","Control","Meta","Shift","Pe","Qe","Re","Se","Te","Ue","Ve","screenX","screenY","buttons","relatedTarget","fromElement","toElement","movementX","movementY","We","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Xe","mouseEnter","mouseLeave","pointerEnter","pointerLeave","Ye","parentWindow","$e","af","bf","cf","df","ef","ff","gf","hf","jf","anchorNode","anchorOffset","focusNode","focusOffset","kf","onSelect","lf","elapsedTime","pseudoElement","mf","nf","of","charCode","pf","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","qf","12","20","rf","repeat","sf","tf","targetTouches","changedTouches","uf","vf","deltaZ","wf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","yf","zf","Af","Bf","Cf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","childContextTypes","Df","Ef","Ff","getChildContext","Gf","__reactInternalMemoizedMergedChildContext","Hf","If","Jf","Kf","unstable_cancelCallback","Lf","unstable_requestPaint","Mf","unstable_now","Nf","unstable_getCurrentPriorityLevel","Of","unstable_ImmediatePriority","Pf","Qf","Rf","unstable_LowPriority","Sf","unstable_IdlePriority","Tf","Uf","unstable_shouldYield","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","childExpirationTime","qg","firstContext","expirationTime","rg","sg","observedBits","responders","tg","ug","updateQueue","baseState","baseQueue","shared","effects","vg","wg","suspenseConfig","xg","yg","zg","ca","Ag","Bg","Cg","Dg","Eg","Fg","Jg","_reactInternalFiber","Gg","Hg","Ig","Kg","shouldComponentUpdate","Lg","contextType","Mg","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ng","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Og","Pg","_stringRef","Qg","Rg","lastEffect","nextEffect","firstEffect","Sg","Tg","elementType","Ug","implementation","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","dh","eh","fh","gh","hh","memoizedProps","revealOrder","ih","responder","jh","kh","lh","mh","nh","oh","ph","qh","rh","sh","th","queue","uh","vh","wh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","dispatch","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","readContext","useResponder","useDeferredValue","useTransition","Oh","Ph","Qh","Rh","Sh","Th","pendingProps","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","ei","fi","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","gi","getDerivedStateFromError","pendingContext","ni","pi","qi","retryTime","ji","fallback","unstable_avoidThisFallback","ki","li","rendering","renderingStartTime","tail","tailExpiration","tailMode","mi","ri","si","wasMultiple","multiple","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","WeakSet","Ci","Fi","Ei","Gi","__reactInternalSnapshotBeforeUpdate","Hi","Ii","Ji","Ki","Li","componentWillUnmount","Di","Mi","Ni","Oi","Pi","Qi","_reactRootContainer","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","componentDidCatch","aj","componentStack","Rj","bj","cj","dj","kj","lj","mj","nj","oj","qj","rj","sj","tj","uj","vj","wj","timeoutMs","xj","yj","zj","lastExpiredTime","Aj","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Bj","Cj","Dj","Ej","Fj","Gj","Hj","finishedWork","finishedExpirationTime","lastSuspendedTime","Ij","timeoutHandle","Jj","busyMinDurationMs","busyDelayMs","Kj","Mj","Nj","pingCache","Oj","ub","Pj","Xc","Qj","Sj","firstSuspendedTime","wb","activeElementDetached","focusedElem","Tj","wd","compareDocumentPosition","vb","Uj","Vj","Wj","ob","Xj","unstable_observedBits","Zj","pendingChildren","ak","bk","ck","dk","ek","fk","Jc","_internalRoot","gk","ik","hk","jk","kk","stringify","form","Lj","lk","Events","findFiberByHostInstance","supportsFiber","inject","onCommitFiberRoot","onCommitFiberUnmount","Yj","overrideHookState","overrideProps","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","bundleType","rendererPackageName","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","MessageChannel","unstable_forceFrameRate","port2","port1","sortIndex","startTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_wrapCallback","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bool","symbol","any","arrayOf","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","moveBySubWords","linux","getEditorKeybordShortcuts","keybindings","commandMap","$singleLineEditor","AcePopup","popup","lastMouseEvent","noop","selectionMarker","hoverMarker","setSelectOnHover","setRow","setHoverMarker","getRow","selectedNode","hideHoverMarker","suppressRedraw","getHoveredRow","caption","lower","filterText","lastI","matchMask","isTopdown","autoSelect","topdownOnly","screenHeight","maxH","$borderSize","goTo","where","getTextLeftOffset","$imageSize","parForEach","completed","arLength","ID_REGEX","retrievePrecedingIdentifier","retrieveFollowingIdentifier","getCompletionPrefix","completers","completer","identifierRegexps","identifierRegex","VARIABLES","CURRENT_WORD","SELECTION","CURRENT_LINE","PREV_LINE","LINE_INDEX","LINE_NUMBER","SOFT_TABS","TAB_SIZE","CLIPBOARD","FILENAME","FILEPATH","FILENAME_BASE","DIRECTORY","WORKSPACE_NAME","FULLNAME","BLOCK_COMMENT_START","BLOCK_COMMENT_END","LINE_COMMENT","CURRENT_YEAR","year","CURRENT_YEAR_SHORT","CURRENT_MONTH","CURRENT_MONTH_NAME","CURRENT_MONTH_NAME_SHORT","CURRENT_DATE","day","CURRENT_DAY_NAME","weekday","CURRENT_DAY_NAME_SHORT","CURRENT_HOUR","hour","hour12","CURRENT_MINUTE","minute","CURRENT_SECOND","second","dateFormat","SELECTED_TEXT","SnippetManager","snippetMap","snippetNameMap","createTokenizer","TabstopToken","tabstopId","formatMatcher","fmtString","guard","snippetVar","choices","operator","formatString","expectElse","ifEnd","elseEnd","changeCase","local","formatStringVar","formatFunction","tokenizeTmSnippet","getVariableValue","variables","__","tmStrFormat","fmt","fmtTokens","oldArgs","fmtParts","resolveVariables","gChangeCase","tmFormatFunction","snippet","afterNewLine","gotoNext","insertSnippetForSelection","snippetText","tabString","tabstops","parents","expanding","copyValue","tabstopManager","TabstopManager","selectionId","addTabstops","insertSnippet","tabNext","$getScope","inlinePhp","getActiveScopes","scopes","includeScopes","expandWithTab","expandSnippetForSelection","snippets","findMatchingSnippet","dryRun","replaceBefore","replaceAfter","M__","matchBefore","T__","matchAfter","snippetList","startRe","endRe","triggerRe","endTriggerRe","register","wrapRegexp","guardedRegexp","addSnippet","unregister","tabTrigger","endTrigger","endGuard","removeSnippet","nameMap","parseSnippetFile","parse","guardRe","getSnippetByName","$onChangeSelection","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","$openTabstops","selectedTabstop","removeTabstopMarkers","isRemove","active","parentActive","removeRange","$inChange","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","snippetManager","containsLead","containsAnchor","selectTabstop","addTabstopMarkers","useLink","moveRelative","arg","dest","movePoint","tabstop","expandSnippet","util","Autocomplete","autoInsert","exactMatch","gatherCompletionsId","blurListener","mousedownListener","mousewheelListener","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","insertMatch","getPopup","openPopup","keepPopupPosition","completions","filtered","hideDocTooltip","activated","fromTooltip","tooltipNode","deleteSuffix","gatherCompletions","total","results","finished","showPopup","setFilter","FilteredList","detachIfFinished","getDocTooltip","docText","docHTML","showDocTooltip","pointerEvents","tabIndex","onblur","onTooltipClick","$shared","$sharedInstance","startCommand","filterCompletions","$score","localeCompare","items","upper","loop","penalty","fullMatchIndex","overlayPage","contentElement","closer","ignoreFocusOut","documentEscListener","close","setIgnoreFocusOut","modes","extensions","extRe","supportsFile","filename","supportedModes","ABAP","ABC","ActionScript","ADA","Alda","Apache_Conf","Apex","AQL","AsciiDoc","ASL","Assembly_x86","AutoHotKey","BatchFile","C_Cpp","C9Search","Cirru","Clojure","Cobol","coffee","ColdFusion","Crystal","CSharp","Csound_Document","Csound_Orchestra","Csound_Score","CSS","Curly","Dart","Diff","Dockerfile","Dot","Drools","Edifact","Eiffel","EJS","Elixir","Elm","Erlang","Forth","Fortran","FSharp","FSL","FTL","Gcode","Gherkin","Gitignore","Glsl","Gobstones","golang","GraphQLSchema","Groovy","HAML","Handlebars","Haskell","Haskell_Cabal","haXe","Hjson","HTML","HTML_Elixir","HTML_Ruby","INI","Io","Jack","Jade","Java","JavaScript","JSON5","JSONiq","JSP","JSSM","JSX","Julia","Kotlin","LaTeX","LESS","Liquid","Lisp","LiveScript","LogiQL","LSL","Lua","LuaPage","Lucene","Makefile","Markdown","Mask","MATLAB","Maze","MediaWiki","MEL","MIXAL","MUSHCode","MySQL","Nginx","Nim","Nix","NSIS","Nunjucks","ObjectiveC","OCaml","Pascal","Perl","Perl6","pgSQL","PHP","PHP_Laravel_blade","Pig","Powershell","Praat","Prisma","Prolog","Properties","Protobuf","Puppet","Python","QML","Razor","RDoc","Red","RHTML","RST","Ruby","Rust","SASS","SCAD","Scala","Scheme","SCSS","SH","SJS","Slim","Smarty","Soy_Template","Space","SQL","SQLServer","Stylus","SVG","Swift","Tcl","Terraform","Tex","Textile","Toml","TSX","Twig","Typescript","Vala","VBScript","Velocity","Verilog","VHDL","Visualforce","Wollok","XML","XQuery","YAML","Zeek","Django","nameOverrides","modesByName","getModeForPath","openPrompt","modelist","lastPrompt","cmdLine","hasDescription","overlay","marginTop","accept","promptTextContainer","valueFromRecentList","curData","onAccept","onCancel","getPrefix","_history","readPosition","history","shortcutsArray","excludeCommands","commandsByName","cbn","getEditorCommandsByName","maxHistoryCount","addToHistory","currentPos","getFilteredCompletions","resultCommands","recentlyUsedCommands","otherCommands","usedCommands","getUniqueCommandList","modesArray","modeName","searchboxCss","SearchBox","showReplaceForm","spellcheck","title","setEditor","searchRange","$syncOptions","$initElements","replaceBox","searchOption","replaceOption","regExpOption","caseSensitiveOption","wholeWordOption","searchInput","replaceInput","searchCounter","_this","activeInput","$searchBarKb","$closeSearchBarKb","isReplace","findPrev","setSearchRange","searchRangeMarker","noMatch","updateCounter","MAX_COUNT","replaceAndFindNext","JsonHighlightRules","MatchingBraceOutdent","BaseFoldMode","commentRegex","singleLineBlockCommentRe","tripleStarBlockCommentRe","startRegionRe","_getFoldWidgetBase","forceMultiline","getCommentRegionBlock","getSectionRange","startIndent","subRange","CStyleFoldMode","$outdent"],"mappings":"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,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG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","file":"static/js/2.d9fa3838.chunk.js","sourcesContent":["'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","export default function getBoundingClientRect(element) {\n var rect = element.getBoundingClientRect();\n return {\n width: rect.width,\n height: rect.height,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n y: rect.top\n };\n}","/*:: import type { Window } from '../types'; */\n\n/*:: declare function getWindow(node: Node | Window): Window; */\nexport default function getWindow(node) {\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getWindow from \"./getWindow.js\";\n/*:: declare function isElement(node: mixed): boolean %checks(node instanceof\n Element); */\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n/*:: declare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n HTMLElement); */\n\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nexport { isElement, isHTMLElement };","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe: assume body is always available\n return (isElement(element) ? element.ownerDocument : element.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\"; // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement);\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element) {\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// $FlowFixMe: this is a quicker (but less type safe) way to save quite some bytes from the bundle\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || // DOM Element detected\n // $FlowFixMe: need a better way to handle this...\n element.host || // ShadowRoot detected\n // $FlowFixMe: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the \nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = getNodeName(scrollParent) === 'body';\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var currentNode = getParentNode(element);\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.willChange !== 'auto') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static') {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nexport * from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign(Object.assign({}, DEFAULT_OPTIONS), defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(options) {\n cleanupModifierEffects();\n state.options = Object.assign(Object.assign(Object.assign({}, defaultOptions), state.options), options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator();","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign(Object.assign(Object.assign({}, existing), current), {}, {\n options: Object.assign(Object.assign({}, existing.options), current.options),\n data: Object.assign(Object.assign({}, existing.data), current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = Math.floor(offsets[mainAxis]) - Math.floor(reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = Math.floor(offsets[mainAxis]) + Math.ceil(reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsets(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: Math.round(x * dpr) / dpr || 0,\n y: Math.round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive;\n\n var _roundOffsets = roundOffsets(offsets),\n x = _roundOffsets.x,\n y = _roundOffsets.y;\n\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n } // $FlowFixMe: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n /*:: offsetParent = (offsetParent: Element); */\n\n\n if (placement === top) {\n sideY = bottom;\n y -= offsetParent.clientHeight - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left) {\n sideX = right;\n x -= offsetParent.clientWidth - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign(Object.assign({}, commonStyles), {}, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign(Object.assign({}, commonStyles), {}, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref3) {\n var state = _ref3.state,\n options = _ref3.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign(Object.assign({}, state.styles.popper), mapToStyles(Object.assign(Object.assign({}, commonStyles), {}, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign(Object.assign({}, state.styles.arrow), mapToStyles(Object.assign(Object.assign({}, commonStyles), {}, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false\n })));\n }\n\n state.attributes.popper = Object.assign(Object.assign({}, state.attributes.popper), {}, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\";\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign(Object.assign({}, rects), {}, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","export default function contains(parent, child) {\n // $FlowFixMe: hasOwnProperty doesn't seem to work in tests\n var isShadow = Boolean(child.getRootNode && child.getRootNode().host); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (isShadow) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign(Object.assign({}, rect), {}, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport contains from \"./contains.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(element);\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement);\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = Math.max(rect.top, accRect.top);\n accRect.right = Math.min(rect.right, accRect.right);\n accRect.bottom = Math.min(rect.bottom, accRect.bottom);\n accRect.left = Math.max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = element.ownerDocument.body;\n var width = Math.max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = Math.max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += Math.max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign(Object.assign({}, getFreshSideObject()), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var referenceElement = state.elements.reference;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(referenceElement);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign(Object.assign({}, popperRect), popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","export default function within(min, value, max) {\n return Math.max(min, Math.min(value, max));\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign(Object.assign({}, state.attributes.popper), {}, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator } from \"./index.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\n\n/*:: type OverflowsMap = { [ComputedPlacement]: number }; */\n\n/*;; type OverflowsMap = { [key in ComputedPlacement]: number }; */\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = (variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements).filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n }); // $FlowFixMe: Flow seems to have problems with two array unions...\n\n var overflows = placements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport within from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign(Object.assign({}, state.rects), {}, {\n placement: state.placement\n })) : tetherOffset;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = popperOffsets[mainAxis] + overflow[mainSide];\n var max = popperOffsets[mainAxis] - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? Math.min(min, tetherMin) : min, offset, tether ? Math.max(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var _preventedOffset = within(_min, _offset, _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport within from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = state.modifiersData[name + \"#persistent\"].padding;\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element,\n _options$padding = options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n state.modifiersData[name + \"#persistent\"] = {\n padding: mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements))\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export const ROUND_ARROW =\n '';\n\nexport const BOX_CLASS = `__NAMESPACE_PREFIX__-box`;\nexport const CONTENT_CLASS = `__NAMESPACE_PREFIX__-content`;\nexport const BACKDROP_CLASS = `__NAMESPACE_PREFIX__-backdrop`;\nexport const ARROW_CLASS = `__NAMESPACE_PREFIX__-arrow`;\nexport const SVG_ARROW_CLASS = `__NAMESPACE_PREFIX__-svg-arrow`;\n\nexport const TOUCH_OPTIONS = {passive: true, capture: true};\n","import {BasePlacement, Placement} from './types';\n\nexport function hasOwnProperty(obj: object, key: string): boolean {\n return {}.hasOwnProperty.call(obj, key);\n}\n\nexport function getValueAtIndexOrReturn(\n value: T | [T | null, T | null],\n index: number,\n defaultValue: T | [T, T]\n): T {\n if (Array.isArray(value)) {\n const v = value[index];\n return v == null\n ? Array.isArray(defaultValue)\n ? defaultValue[index]\n : defaultValue\n : v;\n }\n\n return value;\n}\n\nexport function isType(value: any, type: string): boolean {\n const str = {}.toString.call(value);\n return str.indexOf('[object') === 0 && str.indexOf(`${type}]`) > -1;\n}\n\nexport function invokeWithArgsOrReturn(value: any, args: any[]): any {\n return typeof value === 'function' ? value(...args) : value;\n}\n\nexport function debounce(\n fn: (arg: T) => void,\n ms: number\n): (arg: T) => void {\n // Avoid wrapping in `setTimeout` if ms is 0 anyway\n if (ms === 0) {\n return fn;\n }\n\n let timeout: any;\n\n return (arg): void => {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n fn(arg);\n }, ms);\n };\n}\n\nexport function removeProperties(obj: T, keys: string[]): Partial {\n const clone = {...obj};\n keys.forEach((key) => {\n delete (clone as any)[key];\n });\n return clone;\n}\n\nexport function splitBySpaces(value: string): string[] {\n return value.split(/\\s+/).filter(Boolean);\n}\n\nexport function normalizeToArray(value: T | T[]): T[] {\n return ([] as T[]).concat(value);\n}\n\nexport function pushIfUnique(arr: T[], value: T): void {\n if (arr.indexOf(value) === -1) {\n arr.push(value);\n }\n}\n\nexport function appendPxIfNumber(value: string | number): string {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function unique(arr: T[]): T[] {\n return arr.filter((item, index) => arr.indexOf(item) === index);\n}\n\nexport function getNumber(value: string | number): number {\n return typeof value === 'number' ? value : parseFloat(value);\n}\n\nexport function getBasePlacement(placement: Placement): BasePlacement {\n return placement.split('-')[0] as BasePlacement;\n}\n\nexport function arrayFrom(value: ArrayLike): any[] {\n return [].slice.call(value);\n}\n","import {ReferenceElement, Targets} from './types';\nimport {PopperTreeData} from './types-internal';\nimport {arrayFrom, isType, normalizeToArray, getBasePlacement} from './utils';\n\nexport function div(): HTMLDivElement {\n return document.createElement('div');\n}\n\nexport function isElement(value: unknown): value is Element | DocumentFragment {\n return ['Element', 'Fragment'].some((type) => isType(value, type));\n}\n\nexport function isNodeList(value: unknown): value is NodeList {\n return isType(value, 'NodeList');\n}\n\nexport function isMouseEvent(value: unknown): value is MouseEvent {\n return isType(value, 'MouseEvent');\n}\n\nexport function isReferenceElement(value: any): value is ReferenceElement {\n return !!(value && value._tippy && value._tippy.reference === value);\n}\n\nexport function getArrayOfElements(value: Targets): Element[] {\n if (isElement(value)) {\n return [value];\n }\n\n if (isNodeList(value)) {\n return arrayFrom(value);\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return arrayFrom(document.querySelectorAll(value));\n}\n\nexport function setTransitionDuration(\n els: (HTMLDivElement | null)[],\n value: number\n): void {\n els.forEach((el) => {\n if (el) {\n el.style.transitionDuration = `${value}ms`;\n }\n });\n}\n\nexport function setVisibilityState(\n els: (HTMLDivElement | null)[],\n state: 'visible' | 'hidden'\n): void {\n els.forEach((el) => {\n if (el) {\n el.setAttribute('data-state', state);\n }\n });\n}\n\nexport function getOwnerDocument(\n elementOrElements: Element | Element[]\n): Document {\n const [element] = normalizeToArray(elementOrElements);\n return element ? element.ownerDocument || document : document;\n}\n\nexport function isCursorOutsideInteractiveBorder(\n popperTreeData: PopperTreeData[],\n event: MouseEvent\n): boolean {\n const {clientX, clientY} = event;\n\n return popperTreeData.every(({popperRect, popperState, props}) => {\n const {interactiveBorder} = props;\n const basePlacement = getBasePlacement(popperState.placement);\n const offsetData = popperState.modifiersData.offset;\n\n if (!offsetData) {\n return true;\n }\n\n const topDistance = basePlacement === 'bottom' ? offsetData.top!.y : 0;\n const bottomDistance = basePlacement === 'top' ? offsetData.bottom!.y : 0;\n const leftDistance = basePlacement === 'right' ? offsetData.left!.x : 0;\n const rightDistance = basePlacement === 'left' ? offsetData.right!.x : 0;\n\n const exceedsTop =\n popperRect.top - clientY + topDistance > interactiveBorder;\n const exceedsBottom =\n clientY - popperRect.bottom - bottomDistance > interactiveBorder;\n const exceedsLeft =\n popperRect.left - clientX + leftDistance > interactiveBorder;\n const exceedsRight =\n clientX - popperRect.right - rightDistance > interactiveBorder;\n\n return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n });\n}\n\nexport function updateTransitionEndListener(\n box: HTMLDivElement,\n action: 'add' | 'remove',\n listener: (event: TransitionEvent) => void\n): void {\n const method = `${action}EventListener` as\n | 'addEventListener'\n | 'removeEventListener';\n\n // some browsers apparently support `transition` (unprefixed) but only fire\n // `webkitTransitionEnd`...\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n box[method](event, listener as EventListener);\n });\n}\n","import {TOUCH_OPTIONS} from './constants';\nimport {isReferenceElement} from './dom-utils';\n\nexport const currentInput = {isTouch: false};\nlet lastMouseMoveTime = 0;\n\n/**\n * When a `touchstart` event is fired, it's assumed the user is using touch\n * input. We'll bind a `mousemove` event listener to listen for mouse input in\n * the future. This way, the `isTouch` property is fully dynamic and will handle\n * hybrid devices that use a mix of touch + mouse input.\n */\nexport function onDocumentTouchStart(): void {\n if (currentInput.isTouch) {\n return;\n }\n\n currentInput.isTouch = true;\n\n if (window.performance) {\n document.addEventListener('mousemove', onDocumentMouseMove);\n }\n}\n\n/**\n * When two `mousemove` event are fired consecutively within 20ms, it's assumed\n * the user is using mouse input again. `mousemove` can fire on touch devices as\n * well, but very rarely that quickly.\n */\nexport function onDocumentMouseMove(): void {\n const now = performance.now();\n\n if (now - lastMouseMoveTime < 20) {\n currentInput.isTouch = false;\n\n document.removeEventListener('mousemove', onDocumentMouseMove);\n }\n\n lastMouseMoveTime = now;\n}\n\n/**\n * When an element is in focus and has a tippy, leaving the tab/window and\n * returning causes it to show again. For mouse users this is unexpected, but\n * for keyboard use it makes sense.\n * TODO: find a better technique to solve this problem\n */\nexport function onWindowBlur(): void {\n const activeElement = document.activeElement as HTMLElement | null;\n\n if (isReferenceElement(activeElement)) {\n const instance = activeElement._tippy!;\n\n if (activeElement.blur && !instance.state.isVisible) {\n activeElement.blur();\n }\n }\n}\n\nexport default function bindGlobalEventListeners(): void {\n document.addEventListener('touchstart', onDocumentTouchStart, TOUCH_OPTIONS);\n window.addEventListener('blur', onWindowBlur);\n}\n","export const isBrowser =\n typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst ua = isBrowser ? navigator.userAgent : '';\n\nexport const isIE = /MSIE |Trident\\//.test(ua);\n","import {DefaultProps, Plugin, Props, ReferenceElement, Tippy} from './types';\nimport {\n hasOwnProperty,\n removeProperties,\n invokeWithArgsOrReturn,\n} from './utils';\nimport {warnWhen} from './validation';\n\nconst pluginProps = {\n animateFill: false,\n followCursor: false,\n inlinePositioning: false,\n sticky: false,\n};\n\nconst renderProps = {\n allowHTML: false,\n animation: 'fade',\n arrow: true,\n content: '',\n inertia: false,\n maxWidth: 350,\n role: 'tooltip',\n theme: '',\n zIndex: 9999,\n};\n\nexport const defaultProps: DefaultProps = {\n appendTo: () => document.body,\n aria: {\n content: 'auto',\n expanded: 'auto',\n },\n delay: 0,\n duration: [300, 250],\n getReferenceClientRect: null,\n hideOnClick: true,\n ignoreAttributes: false,\n interactive: false,\n interactiveBorder: 2,\n interactiveDebounce: 0,\n moveTransition: '',\n offset: [0, 10],\n onAfterUpdate() {},\n onBeforeUpdate() {},\n onCreate() {},\n onDestroy() {},\n onHidden() {},\n onHide() {},\n onMount() {},\n onShow() {},\n onShown() {},\n onTrigger() {},\n onUntrigger() {},\n onClickOutside() {},\n placement: 'top',\n plugins: [],\n popperOptions: {},\n render: null,\n showOnCreate: false,\n touch: true,\n trigger: 'mouseenter focus',\n triggerTarget: null,\n ...pluginProps,\n ...renderProps,\n};\n\nconst defaultKeys = Object.keys(defaultProps);\n\nexport const setDefaultProps: Tippy['setDefaultProps'] = (partialProps) => {\n /* istanbul ignore else */\n if (__DEV__) {\n validateProps(partialProps, []);\n }\n\n const keys = Object.keys(partialProps) as Array;\n keys.forEach((key) => {\n (defaultProps as any)[key] = partialProps[key];\n });\n};\n\nexport function getExtendedPassedProps(\n passedProps: Partial & Record\n): Partial {\n const plugins = passedProps.plugins || [];\n const pluginProps = plugins.reduce>((acc, plugin) => {\n const {name, defaultValue} = plugin;\n\n if (name) {\n acc[name] =\n passedProps[name] !== undefined ? passedProps[name] : defaultValue;\n }\n\n return acc;\n }, {});\n\n return {\n ...passedProps,\n ...pluginProps,\n };\n}\n\nexport function getDataAttributeProps(\n reference: ReferenceElement,\n plugins: Plugin[]\n): Record {\n const propKeys = plugins\n ? Object.keys(getExtendedPassedProps({...defaultProps, plugins}))\n : defaultKeys;\n\n const props = propKeys.reduce(\n (acc: Partial & Record, key) => {\n const valueAsString = (\n reference.getAttribute(`data-tippy-${key}`) || ''\n ).trim();\n\n if (!valueAsString) {\n return acc;\n }\n\n if (key === 'content') {\n acc[key] = valueAsString;\n } else {\n try {\n acc[key] = JSON.parse(valueAsString);\n } catch (e) {\n acc[key] = valueAsString;\n }\n }\n\n return acc;\n },\n {}\n );\n\n return props;\n}\n\nexport function evaluateProps(\n reference: ReferenceElement,\n props: Props\n): Props {\n const out = {\n ...props,\n content: invokeWithArgsOrReturn(props.content, [reference]),\n ...(props.ignoreAttributes\n ? {}\n : getDataAttributeProps(reference, props.plugins)),\n };\n\n out.aria = {\n ...defaultProps.aria,\n ...out.aria,\n };\n\n out.aria = {\n expanded:\n out.aria.expanded === 'auto' ? props.interactive : out.aria.expanded,\n content:\n out.aria.content === 'auto'\n ? props.interactive\n ? null\n : 'describedby'\n : out.aria.content,\n };\n\n return out;\n}\n\nexport function validateProps(\n partialProps: Partial = {},\n plugins: Plugin[] = []\n): void {\n const keys = Object.keys(partialProps) as Array;\n keys.forEach((prop) => {\n const nonPluginProps = removeProperties(\n defaultProps,\n Object.keys(pluginProps)\n );\n\n let didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop);\n\n // Check if the prop exists in `plugins`\n if (didPassUnknownProp) {\n didPassUnknownProp =\n plugins.filter((plugin) => plugin.name === prop).length === 0;\n }\n\n warnWhen(\n didPassUnknownProp,\n [\n `\\`${prop}\\``,\n \"is not a valid prop. You may have spelled it incorrectly, or if it's\",\n 'a plugin, forgot to pass it in an array as props.plugins.',\n '\\n\\n',\n 'All props: https://atomiks.github.io/tippyjs/v6/all-props/\\n',\n 'Plugins: https://atomiks.github.io/tippyjs/v6/plugins/',\n ].join(' ')\n );\n });\n}\n","import {\n ARROW_CLASS,\n BACKDROP_CLASS,\n BOX_CLASS,\n CONTENT_CLASS,\n SVG_ARROW_CLASS,\n} from './constants';\nimport {div, isElement} from './dom-utils';\nimport {Instance, PopperElement, Props} from './types';\nimport {PopperChildren} from './types-internal';\nimport {arrayFrom} from './utils';\n\n// Firefox extensions don't allow .innerHTML = \"...\" property. This tricks it.\nconst innerHTML = (): 'innerHTML' => 'innerHTML';\n\nfunction dangerouslySetInnerHTML(element: Element, html: string): void {\n element[innerHTML()] = html;\n}\n\nfunction createArrowElement(value: Props['arrow']): HTMLDivElement {\n const arrow = div();\n\n if (value === true) {\n arrow.className = ARROW_CLASS;\n } else {\n arrow.className = SVG_ARROW_CLASS;\n\n if (isElement(value)) {\n arrow.appendChild(value);\n } else {\n dangerouslySetInnerHTML(arrow, value as string);\n }\n }\n\n return arrow;\n}\n\nexport function setContent(content: HTMLDivElement, props: Props): void {\n if (isElement(props.content)) {\n dangerouslySetInnerHTML(content, '');\n content.appendChild(props.content);\n } else if (typeof props.content !== 'function') {\n if (props.allowHTML) {\n dangerouslySetInnerHTML(content, props.content);\n } else {\n content.textContent = props.content;\n }\n }\n}\n\nexport function getChildren(popper: PopperElement): PopperChildren {\n const box = popper.firstElementChild as HTMLDivElement;\n const boxChildren = arrayFrom(box.children);\n\n return {\n box,\n content: boxChildren.find((node) => node.classList.contains(CONTENT_CLASS)),\n arrow: boxChildren.find(\n (node) =>\n node.classList.contains(ARROW_CLASS) ||\n node.classList.contains(SVG_ARROW_CLASS)\n ),\n backdrop: boxChildren.find((node) =>\n node.classList.contains(BACKDROP_CLASS)\n ),\n };\n}\n\nexport function render(\n instance: Instance\n): {\n popper: PopperElement;\n onUpdate?: (prevProps: Props, nextProps: Props) => void;\n} {\n const popper = div();\n\n const box = div();\n box.className = BOX_CLASS;\n box.setAttribute('data-state', 'hidden');\n box.setAttribute('tabindex', '-1');\n\n const content = div();\n content.className = CONTENT_CLASS;\n content.setAttribute('data-state', 'hidden');\n\n setContent(content, instance.props);\n\n popper.appendChild(box);\n box.appendChild(content);\n\n onUpdate(instance.props, instance.props);\n\n function onUpdate(prevProps: Props, nextProps: Props): void {\n const {box, content, arrow} = getChildren(popper);\n\n if (nextProps.theme) {\n box.setAttribute('data-theme', nextProps.theme);\n } else {\n box.removeAttribute('data-theme');\n }\n\n if (typeof nextProps.animation === 'string') {\n box.setAttribute('data-animation', nextProps.animation);\n } else {\n box.removeAttribute('data-animation');\n }\n\n if (nextProps.inertia) {\n box.setAttribute('data-inertia', '');\n } else {\n box.removeAttribute('data-inertia');\n }\n\n box.style.maxWidth =\n typeof nextProps.maxWidth === 'number'\n ? `${nextProps.maxWidth}px`\n : nextProps.maxWidth;\n\n if (nextProps.role) {\n box.setAttribute('role', nextProps.role);\n } else {\n box.removeAttribute('role');\n }\n\n if (\n prevProps.content !== nextProps.content ||\n prevProps.allowHTML !== nextProps.allowHTML\n ) {\n setContent(content, instance.props);\n }\n\n if (nextProps.arrow) {\n if (!arrow) {\n box.appendChild(createArrowElement(nextProps.arrow));\n } else if (prevProps.arrow !== nextProps.arrow) {\n box.removeChild(arrow);\n box.appendChild(createArrowElement(nextProps.arrow));\n }\n } else if (arrow) {\n box.removeChild(arrow!);\n }\n }\n\n return {\n popper,\n onUpdate,\n };\n}\n\n// Runtime check to identify if the render function is the default one; this\n// way we can apply default CSS transitions logic and it can be tree-shaken away\nrender.$$tippy = true;\n","import {createPopper, StrictModifiers, Modifier} from '@popperjs/core';\nimport {currentInput} from './bindGlobalEventListeners';\nimport {isIE} from './browser';\nimport {TOUCH_OPTIONS} from './constants';\nimport {\n div,\n getOwnerDocument,\n isCursorOutsideInteractiveBorder,\n isMouseEvent,\n setTransitionDuration,\n setVisibilityState,\n updateTransitionEndListener,\n} from './dom-utils';\nimport {defaultProps, evaluateProps, getExtendedPassedProps} from './props';\nimport {getChildren} from './template';\nimport {\n Content,\n Instance,\n LifecycleHooks,\n PopperElement,\n Props,\n ReferenceElement,\n} from './types';\nimport {ListenerObject, PopperTreeData, PopperChildren} from './types-internal';\nimport {\n arrayFrom,\n debounce,\n getValueAtIndexOrReturn,\n invokeWithArgsOrReturn,\n normalizeToArray,\n pushIfUnique,\n splitBySpaces,\n unique,\n} from './utils';\nimport {createMemoryLeakWarning, errorWhen, warnWhen} from './validation';\n\nlet idCounter = 1;\nlet mouseMoveListeners: ((event: MouseEvent) => void)[] = [];\n\n// Used by `hideAll()`\nexport let mountedInstances: Instance[] = [];\n\nexport default function createTippy(\n reference: ReferenceElement,\n passedProps: Partial\n): Instance {\n const props = evaluateProps(reference, {\n ...defaultProps,\n ...getExtendedPassedProps(passedProps),\n });\n\n // ===========================================================================\n // 🔒 Private members\n // ===========================================================================\n let showTimeout: any;\n let hideTimeout: any;\n let scheduleHideAnimationFrame: number;\n let isVisibleFromClick = false;\n let didHideDueToDocumentMouseDown = false;\n let didTouchMove = false;\n let ignoreOnFirstUpdate = false;\n let lastTriggerEvent: Event | undefined;\n let currentTransitionEndListener: (event: TransitionEvent) => void;\n let onFirstUpdate: () => void;\n let listeners: ListenerObject[] = [];\n let debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);\n let currentTarget: Element;\n const doc = getOwnerDocument(props.triggerTarget || reference);\n\n // ===========================================================================\n // 🔑 Public members\n // ===========================================================================\n const id = idCounter++;\n const popperInstance = null;\n const plugins = unique(props.plugins);\n\n const state = {\n // Is the instance currently enabled?\n isEnabled: true,\n // Is the tippy currently showing and not transitioning out?\n isVisible: false,\n // Has the instance been destroyed?\n isDestroyed: false,\n // Is the tippy currently mounted to the DOM?\n isMounted: false,\n // Has the tippy finished transitioning in?\n isShown: false,\n };\n\n const instance: Instance = {\n // properties\n id,\n reference,\n popper: div(),\n popperInstance,\n props,\n state,\n plugins,\n // methods\n clearDelayTimeouts,\n setProps,\n setContent,\n show,\n hide,\n hideWithInteractivity,\n enable,\n disable,\n unmount,\n destroy,\n };\n\n // TODO: Investigate why this early return causes a TDZ error in the tests —\n // it doesn't seem to happen in the browser\n /* istanbul ignore if */\n if (!props.render) {\n if (__DEV__) {\n errorWhen(true, 'render() function has not been supplied.');\n }\n\n return instance;\n }\n\n // ===========================================================================\n // Initial mutations\n // ===========================================================================\n const {popper, onUpdate} = props.render(instance);\n\n popper.setAttribute('data-__NAMESPACE_PREFIX__-root', '');\n popper.id = `__NAMESPACE_PREFIX__-${instance.id}`;\n\n instance.popper = popper;\n reference._tippy = instance;\n popper._tippy = instance;\n\n const pluginsHooks = plugins.map((plugin) => plugin.fn(instance));\n const hasAriaExpanded = reference.hasAttribute('aria-expanded');\n\n addListeners();\n handleAriaExpandedAttribute();\n handleStyles();\n\n invokeHook('onCreate', [instance]);\n\n if (props.showOnCreate) {\n scheduleShow();\n }\n\n // Prevent a tippy with a delay from hiding if the cursor left then returned\n // before it started hiding\n popper.addEventListener('mouseenter', () => {\n if (instance.props.interactive && instance.state.isVisible) {\n instance.clearDelayTimeouts();\n }\n });\n\n popper.addEventListener('mouseleave', (event) => {\n if (\n instance.props.interactive &&\n instance.props.trigger.indexOf('mouseenter') >= 0\n ) {\n doc.addEventListener('mousemove', debouncedOnMouseMove);\n debouncedOnMouseMove(event);\n }\n });\n\n return instance;\n\n // ===========================================================================\n // 🔒 Private methods\n // ===========================================================================\n function getNormalizedTouchSettings(): [string | boolean, number] {\n const {touch} = instance.props;\n return Array.isArray(touch) ? touch : [touch, 0];\n }\n\n function getIsCustomTouchBehavior(): boolean {\n return getNormalizedTouchSettings()[0] === 'hold';\n }\n\n function getIsDefaultRenderFn(): boolean {\n // @ts-ignore\n return !!instance.props.render?.$$tippy;\n }\n\n function getCurrentTarget(): Element {\n return currentTarget || reference;\n }\n\n function getDefaultTemplateChildren(): PopperChildren {\n return getChildren(popper);\n }\n\n function getDelay(isShow: boolean): number {\n // For touch or keyboard input, force `0` delay for UX reasons\n // Also if the instance is mounted but not visible (transitioning out),\n // ignore delay\n if (\n (instance.state.isMounted && !instance.state.isVisible) ||\n currentInput.isTouch ||\n (lastTriggerEvent && lastTriggerEvent.type === 'focus')\n ) {\n return 0;\n }\n\n return getValueAtIndexOrReturn(\n instance.props.delay,\n isShow ? 0 : 1,\n defaultProps.delay\n );\n }\n\n function handleStyles(): void {\n popper.style.pointerEvents =\n instance.props.interactive && instance.state.isVisible ? '' : 'none';\n popper.style.zIndex = `${instance.props.zIndex}`;\n }\n\n function invokeHook(\n hook: keyof LifecycleHooks,\n args: [Instance, any?],\n shouldInvokePropsHook = true\n ): void {\n pluginsHooks.forEach((pluginHooks) => {\n if (pluginHooks[hook]) {\n pluginHooks[hook]!(...args);\n }\n });\n\n if (shouldInvokePropsHook) {\n instance.props[hook](...args);\n }\n }\n\n function handleAriaContentAttribute(): void {\n const {aria} = instance.props;\n\n if (!aria.content) {\n return;\n }\n\n const attr = `aria-${aria.content}`;\n const id = popper.id;\n const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n nodes.forEach((node) => {\n const currentValue = node.getAttribute(attr);\n\n if (instance.state.isVisible) {\n node.setAttribute(attr, currentValue ? `${currentValue} ${id}` : id);\n } else {\n const nextValue = currentValue && currentValue.replace(id, '').trim();\n\n if (nextValue) {\n node.setAttribute(attr, nextValue);\n } else {\n node.removeAttribute(attr);\n }\n }\n });\n }\n\n function handleAriaExpandedAttribute(): void {\n if (hasAriaExpanded || !instance.props.aria.expanded) {\n return;\n }\n\n const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n nodes.forEach((node) => {\n if (instance.props.interactive) {\n node.setAttribute(\n 'aria-expanded',\n instance.state.isVisible && node === getCurrentTarget()\n ? 'true'\n : 'false'\n );\n } else {\n node.removeAttribute('aria-expanded');\n }\n });\n }\n\n function cleanupInteractiveMouseListeners(): void {\n doc.body.removeEventListener('mouseleave', scheduleHide);\n doc.removeEventListener('mousemove', debouncedOnMouseMove);\n mouseMoveListeners = mouseMoveListeners.filter(\n (listener) => listener !== debouncedOnMouseMove\n );\n }\n\n function onDocumentPress(event: MouseEvent | TouchEvent): void {\n // Moved finger to scroll instead of an intentional tap outside\n if (currentInput.isTouch) {\n if (didTouchMove || event.type === 'mousedown') {\n return;\n }\n }\n\n // Clicked on interactive popper\n if (\n instance.props.interactive &&\n popper.contains(event.target as Element)\n ) {\n return;\n }\n\n // Clicked on the event listeners target\n if (getCurrentTarget().contains(event.target as Element)) {\n if (currentInput.isTouch) {\n return;\n }\n\n if (\n instance.state.isVisible &&\n instance.props.trigger.indexOf('click') >= 0\n ) {\n return;\n }\n } else {\n invokeHook('onClickOutside', [instance, event]);\n }\n\n if (instance.props.hideOnClick === true) {\n isVisibleFromClick = false;\n instance.clearDelayTimeouts();\n instance.hide();\n\n // `mousedown` event is fired right before `focus` if pressing the\n // currentTarget. This lets a tippy with `focus` trigger know that it\n // should not show\n didHideDueToDocumentMouseDown = true;\n setTimeout(() => {\n didHideDueToDocumentMouseDown = false;\n });\n\n // The listener gets added in `scheduleShow()`, but this may be hiding it\n // before it shows, and hide()'s early bail-out behavior can prevent it\n // from being cleaned up\n if (!instance.state.isMounted) {\n removeDocumentPress();\n }\n }\n }\n\n function onTouchMove(): void {\n didTouchMove = true;\n }\n\n function onTouchStart(): void {\n didTouchMove = false;\n }\n\n function addDocumentPress(): void {\n doc.addEventListener('mousedown', onDocumentPress, true);\n doc.addEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n doc.addEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n doc.addEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n }\n\n function removeDocumentPress(): void {\n doc.removeEventListener('mousedown', onDocumentPress, true);\n doc.removeEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n doc.removeEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n doc.removeEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n }\n\n function onTransitionedOut(duration: number, callback: () => void): void {\n onTransitionEnd(duration, () => {\n if (\n !instance.state.isVisible &&\n popper.parentNode &&\n popper.parentNode.contains(popper)\n ) {\n callback();\n }\n });\n }\n\n function onTransitionedIn(duration: number, callback: () => void): void {\n onTransitionEnd(duration, callback);\n }\n\n function onTransitionEnd(duration: number, callback: () => void): void {\n const box = getDefaultTemplateChildren().box;\n\n function listener(event: TransitionEvent): void {\n if (event.target === box) {\n updateTransitionEndListener(box, 'remove', listener);\n callback();\n }\n }\n\n // Make callback synchronous if duration is 0\n // `transitionend` won't fire otherwise\n if (duration === 0) {\n return callback();\n }\n\n updateTransitionEndListener(box, 'remove', currentTransitionEndListener);\n updateTransitionEndListener(box, 'add', listener);\n\n currentTransitionEndListener = listener;\n }\n\n function on(\n eventType: string,\n handler: EventListener,\n options: boolean | object = false\n ): void {\n const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n nodes.forEach((node) => {\n node.addEventListener(eventType, handler, options);\n listeners.push({node, eventType, handler, options});\n });\n }\n\n function addListeners(): void {\n if (getIsCustomTouchBehavior()) {\n on('touchstart', onTrigger, {passive: true});\n on('touchend', onMouseLeave as EventListener, {passive: true});\n }\n\n splitBySpaces(instance.props.trigger).forEach((eventType) => {\n if (eventType === 'manual') {\n return;\n }\n\n on(eventType, onTrigger);\n\n switch (eventType) {\n case 'mouseenter':\n on('mouseleave', onMouseLeave as EventListener);\n break;\n case 'focus':\n on(isIE ? 'focusout' : 'blur', onBlurOrFocusOut as EventListener);\n break;\n case 'focusin':\n on('focusout', onBlurOrFocusOut as EventListener);\n break;\n }\n });\n }\n\n function removeListeners(): void {\n listeners.forEach(({node, eventType, handler, options}: ListenerObject) => {\n node.removeEventListener(eventType, handler, options);\n });\n listeners = [];\n }\n\n function onTrigger(event: Event): void {\n let shouldScheduleClickHide = false;\n\n if (\n !instance.state.isEnabled ||\n isEventListenerStopped(event) ||\n didHideDueToDocumentMouseDown\n ) {\n return;\n }\n\n const wasFocused = lastTriggerEvent?.type === 'focus';\n\n lastTriggerEvent = event;\n currentTarget = event.currentTarget as Element;\n\n handleAriaExpandedAttribute();\n\n if (!instance.state.isVisible && isMouseEvent(event)) {\n // If scrolling, `mouseenter` events can be fired if the cursor lands\n // over a new target, but `mousemove` events don't get fired. This\n // causes interactive tooltips to get stuck open until the cursor is\n // moved\n mouseMoveListeners.forEach((listener) => listener(event));\n }\n\n // Toggle show/hide when clicking click-triggered tooltips\n if (\n event.type === 'click' &&\n (instance.props.trigger.indexOf('mouseenter') < 0 ||\n isVisibleFromClick) &&\n instance.props.hideOnClick !== false &&\n instance.state.isVisible\n ) {\n shouldScheduleClickHide = true;\n } else {\n scheduleShow(event);\n }\n\n if (event.type === 'click') {\n isVisibleFromClick = !shouldScheduleClickHide;\n }\n\n if (shouldScheduleClickHide && !wasFocused) {\n scheduleHide(event);\n }\n }\n\n function onMouseMove(event: MouseEvent): void {\n const target = event.target as Node;\n const isCursorOverReferenceOrPopper =\n reference.contains(target) || popper.contains(target);\n\n if (event.type === 'mousemove' && isCursorOverReferenceOrPopper) {\n return;\n }\n\n const popperTreeData = getNestedPopperTree()\n .concat(popper)\n .map((popper) => {\n const instance = popper._tippy!;\n const state = instance.popperInstance?.state;\n\n if (state) {\n return {\n popperRect: popper.getBoundingClientRect(),\n popperState: state,\n props,\n };\n }\n\n return null;\n })\n .filter(Boolean) as PopperTreeData[];\n\n if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {\n cleanupInteractiveMouseListeners();\n scheduleHide(event);\n }\n }\n\n function onMouseLeave(event: MouseEvent): void {\n const shouldBail =\n isEventListenerStopped(event) ||\n (instance.props.trigger.indexOf('click') >= 0 && isVisibleFromClick);\n\n if (shouldBail) {\n return;\n }\n\n if (instance.props.interactive) {\n instance.hideWithInteractivity(event);\n return;\n }\n\n scheduleHide(event);\n }\n\n function onBlurOrFocusOut(event: FocusEvent): void {\n if (\n instance.props.trigger.indexOf('focusin') < 0 &&\n event.target !== getCurrentTarget()\n ) {\n return;\n }\n\n // If focus was moved to within the popper\n if (\n instance.props.interactive &&\n event.relatedTarget &&\n popper.contains(event.relatedTarget as Element)\n ) {\n return;\n }\n\n scheduleHide(event);\n }\n\n function isEventListenerStopped(event: Event): boolean {\n return currentInput.isTouch\n ? getIsCustomTouchBehavior() !== event.type.indexOf('touch') >= 0\n : false;\n }\n\n function createPopperInstance(): void {\n destroyPopperInstance();\n\n const {\n popperOptions,\n placement,\n offset,\n getReferenceClientRect,\n moveTransition,\n } = instance.props;\n\n const arrow = getIsDefaultRenderFn() ? getChildren(popper).arrow : null;\n\n const computedReference = getReferenceClientRect\n ? {\n getBoundingClientRect: getReferenceClientRect,\n contextElement:\n getReferenceClientRect.contextElement || getCurrentTarget(),\n }\n : reference;\n\n const tippyModifier: Modifier<'$$tippy', {}> = {\n name: '$$tippy',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['computeStyles'],\n fn({state}) {\n if (getIsDefaultRenderFn()) {\n const {box} = getDefaultTemplateChildren();\n\n ['placement', 'reference-hidden', 'escaped'].forEach((attr) => {\n if (attr === 'placement') {\n box.setAttribute('data-placement', state.placement);\n } else {\n if (state.attributes.popper[`data-popper-${attr}`]) {\n box.setAttribute(`data-${attr}`, '');\n } else {\n box.removeAttribute(`data-${attr}`);\n }\n }\n });\n\n state.attributes.popper = {};\n }\n },\n };\n\n type TippyModifier = Modifier<'$$tippy', {}>;\n type ExtendedModifiers = StrictModifiers | Partial;\n\n const modifiers: Array = [\n {\n name: 'offset',\n options: {\n offset,\n },\n },\n {\n name: 'preventOverflow',\n options: {\n padding: {\n top: 2,\n bottom: 2,\n left: 5,\n right: 5,\n },\n },\n },\n {\n name: 'flip',\n options: {\n padding: 5,\n },\n },\n {\n name: 'computeStyles',\n options: {\n adaptive: !moveTransition,\n },\n },\n tippyModifier,\n ];\n\n if (getIsDefaultRenderFn() && arrow) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrow,\n padding: 3,\n },\n });\n }\n\n modifiers.push(...(popperOptions?.modifiers || []));\n\n instance.popperInstance = createPopper(\n computedReference,\n popper,\n {\n ...popperOptions,\n placement,\n onFirstUpdate,\n modifiers,\n }\n );\n }\n\n function destroyPopperInstance(): void {\n if (instance.popperInstance) {\n instance.popperInstance.destroy();\n instance.popperInstance = null;\n }\n }\n\n function mount(): void {\n const {appendTo} = instance.props;\n\n let parentNode: any;\n\n // By default, we'll append the popper to the triggerTargets's parentNode so\n // it's directly after the reference element so the elements inside the\n // tippy can be tabbed to\n // If there are clipping issues, the user can specify a different appendTo\n // and ensure focus management is handled correctly manually\n const node = getCurrentTarget();\n\n if (\n (instance.props.interactive && appendTo === defaultProps.appendTo) ||\n appendTo === 'parent'\n ) {\n parentNode = node.parentNode;\n } else {\n parentNode = invokeWithArgsOrReturn(appendTo, [node]);\n }\n\n // The popper element needs to exist on the DOM before its position can be\n // updated as Popper needs to read its dimensions\n if (!parentNode.contains(popper)) {\n parentNode.appendChild(popper);\n }\n\n createPopperInstance();\n\n /* istanbul ignore else */\n if (__DEV__) {\n // Accessibility check\n warnWhen(\n instance.props.interactive &&\n appendTo === defaultProps.appendTo &&\n node.nextElementSibling !== popper,\n [\n 'Interactive tippy element may not be accessible via keyboard',\n 'navigation because it is not directly after the reference element',\n 'in the DOM source order.',\n '\\n\\n',\n 'Using a wrapper
or tag around the reference element',\n 'solves this by creating a new parentNode context.',\n '\\n\\n',\n 'Specifying `appendTo: document.body` silences this warning, but it',\n 'assumes you are using a focus management solution to handle',\n 'keyboard navigation.',\n '\\n\\n',\n 'See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity',\n ].join(' ')\n );\n }\n }\n\n function getNestedPopperTree(): PopperElement[] {\n return arrayFrom(\n popper.querySelectorAll('[data-__NAMESPACE_PREFIX__-root]')\n );\n }\n\n function scheduleShow(event?: Event): void {\n instance.clearDelayTimeouts();\n\n if (event) {\n invokeHook('onTrigger', [instance, event]);\n }\n\n addDocumentPress();\n\n let delay = getDelay(true);\n const [touchValue, touchDelay] = getNormalizedTouchSettings();\n\n if (currentInput.isTouch && touchValue === 'hold' && touchDelay) {\n delay = touchDelay;\n }\n\n if (delay) {\n showTimeout = setTimeout(() => {\n instance.show();\n }, delay);\n } else {\n instance.show();\n }\n }\n\n function scheduleHide(event: Event): void {\n instance.clearDelayTimeouts();\n\n invokeHook('onUntrigger', [instance, event]);\n\n if (!instance.state.isVisible) {\n removeDocumentPress();\n\n return;\n }\n\n // For interactive tippies, scheduleHide is added to a document.body handler\n // from onMouseLeave so must intercept scheduled hides from mousemove/leave\n // events when trigger contains mouseenter and click, and the tip is\n // currently shown as a result of a click.\n if (\n instance.props.trigger.indexOf('mouseenter') >= 0 &&\n instance.props.trigger.indexOf('click') >= 0 &&\n ['mouseleave', 'mousemove'].indexOf(event.type) >= 0 &&\n isVisibleFromClick\n ) {\n return;\n }\n\n const delay = getDelay(false);\n\n if (delay) {\n hideTimeout = setTimeout(() => {\n if (instance.state.isVisible) {\n instance.hide();\n }\n }, delay);\n } else {\n // Fixes a `transitionend` problem when it fires 1 frame too\n // late sometimes, we don't want hide() to be called.\n scheduleHideAnimationFrame = requestAnimationFrame(() => {\n instance.hide();\n });\n }\n }\n\n // ===========================================================================\n // 🔑 Public methods\n // ===========================================================================\n function enable(): void {\n instance.state.isEnabled = true;\n }\n\n function disable(): void {\n // Disabling the instance should also hide it\n // https://github.com/atomiks/tippy.js-react/issues/106\n instance.hide();\n instance.state.isEnabled = false;\n }\n\n function clearDelayTimeouts(): void {\n clearTimeout(showTimeout);\n clearTimeout(hideTimeout);\n cancelAnimationFrame(scheduleHideAnimationFrame);\n }\n\n function setProps(partialProps: Partial): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('setProps'));\n }\n\n if (instance.state.isDestroyed) {\n return;\n }\n\n invokeHook('onBeforeUpdate', [instance, partialProps]);\n\n removeListeners();\n\n const prevProps = instance.props;\n const nextProps = evaluateProps(reference, {\n ...instance.props,\n ...partialProps,\n ignoreAttributes: true,\n });\n\n instance.props = nextProps;\n\n addListeners();\n\n if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {\n cleanupInteractiveMouseListeners();\n debouncedOnMouseMove = debounce(\n onMouseMove,\n nextProps.interactiveDebounce\n );\n }\n\n // Ensure stale aria-expanded attributes are removed\n if (prevProps.triggerTarget && !nextProps.triggerTarget) {\n normalizeToArray(prevProps.triggerTarget).forEach((node) => {\n node.removeAttribute('aria-expanded');\n });\n } else if (nextProps.triggerTarget) {\n reference.removeAttribute('aria-expanded');\n }\n\n handleAriaExpandedAttribute();\n handleStyles();\n\n if (onUpdate) {\n onUpdate(prevProps, nextProps);\n }\n\n if (instance.popperInstance) {\n createPopperInstance();\n\n // Fixes an issue with nested tippies if they are all getting re-rendered,\n // and the nested ones get re-rendered first.\n // https://github.com/atomiks/tippyjs-react/issues/177\n // TODO: find a cleaner / more efficient solution(!)\n getNestedPopperTree().forEach((nestedPopper) => {\n // React (and other UI libs likely) requires a rAF wrapper as it flushes\n // its work in one\n requestAnimationFrame(nestedPopper._tippy!.popperInstance!.forceUpdate);\n });\n }\n\n invokeHook('onAfterUpdate', [instance, partialProps]);\n }\n\n function setContent(content: Content): void {\n instance.setProps({content});\n }\n\n function show(): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('show'));\n }\n\n // Early bail-out\n const isAlreadyVisible = instance.state.isVisible;\n const isDestroyed = instance.state.isDestroyed;\n const isDisabled = !instance.state.isEnabled;\n const isTouchAndTouchDisabled =\n currentInput.isTouch && !instance.props.touch;\n const duration = getValueAtIndexOrReturn(\n instance.props.duration,\n 0,\n defaultProps.duration\n );\n\n if (\n isAlreadyVisible ||\n isDestroyed ||\n isDisabled ||\n isTouchAndTouchDisabled\n ) {\n return;\n }\n\n // Normalize `disabled` behavior across browsers.\n // Firefox allows events on disabled elements, but Chrome doesn't.\n // Using a wrapper element (i.e. ) is recommended.\n if (getCurrentTarget().hasAttribute('disabled')) {\n return;\n }\n\n invokeHook('onShow', [instance], false);\n if (instance.props.onShow(instance) === false) {\n return;\n }\n\n instance.state.isVisible = true;\n\n if (getIsDefaultRenderFn()) {\n popper.style.visibility = 'visible';\n }\n\n handleStyles();\n addDocumentPress();\n\n if (!instance.state.isMounted) {\n popper.style.transition = 'none';\n }\n\n // If flipping to the opposite side after hiding at least once, the\n // animation will use the wrong placement without resetting the duration\n if (getIsDefaultRenderFn()) {\n const {box, content} = getDefaultTemplateChildren();\n setTransitionDuration([box, content], 0);\n }\n\n onFirstUpdate = (): void => {\n if (!instance.state.isVisible || ignoreOnFirstUpdate) {\n return;\n }\n\n ignoreOnFirstUpdate = true;\n\n // reflow\n void popper.offsetHeight;\n\n popper.style.transition = instance.props.moveTransition;\n\n if (getIsDefaultRenderFn() && instance.props.animation) {\n const {box, content} = getDefaultTemplateChildren();\n setTransitionDuration([box, content], duration);\n setVisibilityState([box, content], 'visible');\n }\n\n handleAriaContentAttribute();\n handleAriaExpandedAttribute();\n\n pushIfUnique(mountedInstances, instance);\n\n instance.state.isMounted = true;\n invokeHook('onMount', [instance]);\n\n if (instance.props.animation && getIsDefaultRenderFn()) {\n onTransitionedIn(duration, () => {\n instance.state.isShown = true;\n invokeHook('onShown', [instance]);\n });\n }\n };\n\n mount();\n }\n\n function hide(): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hide'));\n }\n\n // Early bail-out\n const isAlreadyHidden = !instance.state.isVisible;\n const isDestroyed = instance.state.isDestroyed;\n const isDisabled = !instance.state.isEnabled;\n const duration = getValueAtIndexOrReturn(\n instance.props.duration,\n 1,\n defaultProps.duration\n );\n\n if (isAlreadyHidden || isDestroyed || isDisabled) {\n return;\n }\n\n invokeHook('onHide', [instance], false);\n if (instance.props.onHide(instance) === false) {\n return;\n }\n\n instance.state.isVisible = false;\n instance.state.isShown = false;\n ignoreOnFirstUpdate = false;\n\n if (getIsDefaultRenderFn()) {\n popper.style.visibility = 'hidden';\n }\n\n cleanupInteractiveMouseListeners();\n removeDocumentPress();\n handleStyles();\n\n if (getIsDefaultRenderFn()) {\n const {box, content} = getDefaultTemplateChildren();\n\n if (instance.props.animation) {\n setTransitionDuration([box, content], duration);\n setVisibilityState([box, content], 'hidden');\n }\n }\n\n handleAriaContentAttribute();\n handleAriaExpandedAttribute();\n\n if (instance.props.animation) {\n if (getIsDefaultRenderFn()) {\n onTransitionedOut(duration, instance.unmount);\n }\n } else {\n instance.unmount();\n }\n }\n\n function hideWithInteractivity(event: MouseEvent): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(\n instance.state.isDestroyed,\n createMemoryLeakWarning('hideWithInteractivity')\n );\n }\n\n doc.body.addEventListener('mouseleave', scheduleHide);\n doc.addEventListener('mousemove', debouncedOnMouseMove);\n pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);\n debouncedOnMouseMove(event);\n }\n\n function unmount(): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('unmount'));\n }\n\n if (instance.state.isVisible) {\n instance.hide();\n }\n\n if (!instance.state.isMounted) {\n return;\n }\n\n destroyPopperInstance();\n\n // If a popper is not interactive, it will be appended outside the popper\n // tree by default. This seems mainly for interactive tippies, but we should\n // find a workaround if possible\n getNestedPopperTree().forEach((nestedPopper) => {\n nestedPopper._tippy!.unmount();\n });\n\n if (popper.parentNode) {\n popper.parentNode.removeChild(popper);\n }\n\n mountedInstances = mountedInstances.filter((i) => i !== instance);\n\n instance.state.isMounted = false;\n invokeHook('onHidden', [instance]);\n }\n\n function destroy(): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('destroy'));\n }\n\n if (instance.state.isDestroyed) {\n return;\n }\n\n instance.clearDelayTimeouts();\n instance.unmount();\n\n removeListeners();\n\n delete reference._tippy;\n\n instance.state.isDestroyed = true;\n\n invokeHook('onDestroy', [instance]);\n }\n}\n","import bindGlobalEventListeners, {\n currentInput,\n} from './bindGlobalEventListeners';\nimport createTippy, {mountedInstances} from './createTippy';\nimport {getArrayOfElements, isElement, isReferenceElement} from './dom-utils';\nimport {defaultProps, setDefaultProps, validateProps} from './props';\nimport {HideAll, HideAllOptions, Instance, Props, Targets} from './types';\nimport {validateTargets, warnWhen} from './validation';\n\nfunction tippy(\n targets: Targets,\n optionalProps: Partial = {}\n): Instance | Instance[] {\n const plugins = defaultProps.plugins.concat(optionalProps.plugins || []);\n\n /* istanbul ignore else */\n if (__DEV__) {\n validateTargets(targets);\n validateProps(optionalProps, plugins);\n }\n\n bindGlobalEventListeners();\n\n const passedProps: Partial = {...optionalProps, plugins};\n\n const elements = getArrayOfElements(targets);\n\n /* istanbul ignore else */\n if (__DEV__) {\n const isSingleContentElement = isElement(passedProps.content);\n const isMoreThanOneReferenceElement = elements.length > 1;\n warnWhen(\n isSingleContentElement && isMoreThanOneReferenceElement,\n [\n 'tippy() was passed an Element as the `content` prop, but more than',\n 'one tippy instance was created by this invocation. This means the',\n 'content element will only be appended to the last tippy instance.',\n '\\n\\n',\n 'Instead, pass the .innerHTML of the element, or use a function that',\n 'returns a cloned version of the element instead.',\n '\\n\\n',\n '1) content: element.innerHTML\\n',\n '2) content: () => element.cloneNode(true)',\n ].join(' ')\n );\n }\n\n const instances = elements.reduce(\n (acc, reference): Instance[] => {\n const instance = reference && createTippy(reference, passedProps);\n\n if (instance) {\n acc.push(instance);\n }\n\n return acc;\n },\n []\n );\n\n return isElement(targets) ? instances[0] : instances;\n}\n\ntippy.defaultProps = defaultProps;\ntippy.setDefaultProps = setDefaultProps;\ntippy.currentInput = currentInput;\n\nexport default tippy;\n\nexport const hideAll: HideAll = ({\n exclude: excludedReferenceOrInstance,\n duration,\n}: HideAllOptions = {}) => {\n mountedInstances.forEach((instance) => {\n let isExcluded = false;\n\n if (excludedReferenceOrInstance) {\n isExcluded = isReferenceElement(excludedReferenceOrInstance)\n ? instance.reference === excludedReferenceOrInstance\n : instance.popper === (excludedReferenceOrInstance as Instance).popper;\n }\n\n if (!isExcluded) {\n const originalDuration = instance.props.duration;\n\n instance.setProps({duration});\n instance.hide();\n\n if (!instance.state.isDestroyed) {\n instance.setProps({duration: originalDuration});\n }\n }\n });\n};\n","import tippy from '../src';\nimport {render} from '../src/template';\n\ntippy.setDefaultProps({render});\n\nexport {default, hideAll} from '../src';\nexport {default as createSingleton} from '../src/addons/createSingleton';\nexport {default as delegate} from '../src/addons/delegate';\nexport {default as animateFill} from '../src/plugins/animateFill';\nexport {default as followCursor} from '../src/plugins/followCursor';\nexport {default as inlinePositioning} from '../src/plugins/inlinePositioning';\nexport {default as sticky} from '../src/plugins/sticky';\nexport {ROUND_ARROW as roundArrow} from '../src/constants';\n","export const isBrowser =\n typeof window !== 'undefined' && typeof document !== 'undefined';\n\nexport function preserveRef(ref, node) {\n if (ref) {\n if (typeof ref === 'function') {\n ref(node);\n }\n if ({}.hasOwnProperty.call(ref, 'current')) {\n ref.current = node;\n }\n }\n}\n\nexport function ssrSafeCreateDiv() {\n return isBrowser && document.createElement('div');\n}\n\nexport function toDataAttributes(attrs) {\n const dataAttrs = {\n 'data-placement': attrs.placement,\n };\n\n if (attrs.referenceHidden) {\n dataAttrs['data-reference-hidden'] = '';\n }\n\n if (attrs.escaped) {\n dataAttrs['data-escaped'] = '';\n }\n\n return dataAttrs;\n}\n\nexport function deepPreserveProps(instanceProps, componentProps) {\n return {\n ...componentProps,\n popperOptions: {\n ...instanceProps.popperOptions,\n ...componentProps.popperOptions,\n modifiers: [\n // Preserve tippy's internal + plugin modifiers\n ...(instanceProps.popperOptions?.modifiers || []).filter(\n modifier => modifier.name.indexOf('tippy') >= 0,\n ),\n ...(componentProps.popperOptions?.modifiers || []),\n ],\n },\n };\n}\n","import {isBrowser} from './utils';\nimport {useLayoutEffect, useEffect, useRef} from 'react';\n\nexport const useIsomorphicLayoutEffect = isBrowser\n ? useLayoutEffect\n : useEffect;\n\nexport function useMutableBox(initialValue) {\n // Using refs instead of state as it's recommended to not store imperative\n // values in state due to memory problems in React(?)\n const ref = useRef();\n\n if (!ref.current) {\n ref.current =\n typeof initialValue === 'function' ? initialValue() : initialValue;\n }\n\n return ref.current;\n}\n","import React, {cloneElement, forwardRef} from 'react';\nimport {preserveRef} from './utils';\n\nexport default (Tippy, defaultProps) =>\n forwardRef(function TippyWrapper({children, ...props}, ref) {\n return (\n // If I spread them separately here, Babel adds the _extends ponyfill for\n // some reason\n \n {children\n ? cloneElement(children, {\n ref(node) {\n preserveRef(ref, node);\n preserveRef(children.ref, node);\n },\n })\n : null}\n \n );\n });\n","import React from 'react';\nimport Tippy from '@tippyjs/react';\nimport { roundArrow } from 'tippy.js';\nimport 'tippy.js/dist/tippy.css';\nimport 'tippy.js/dist/svg-arrow.css';\nimport 'tippy.js/animations/shift-away.css';\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(undefined, (function () {\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesWhitelist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. ¯\\_(ツ)_/¯\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z = \"@import url(\\\"https://rsms.me/inter/inter.css\\\");\\n*,\\n*::after,\\n*::before {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n border: none;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n font: inherit;\\n color: inherit;\\n background: none;\\n list-style-type: none; }\\n\\n:root {\\n --accent-0: hsl(211, 61%, 43%);\\n --accent-1: hsl(209, 62%, 50%);\\n --accent-2: hsl(207, 73%, 57%);\\n --accent-3: hsl(205, 79%, 60%);\\n --light-gray-0: hsl(00, 00%, 100%);\\n --light-gray-1: hsl(240, 20%, 98%);\\n --light-gray-2: hsl(240, 09%, 93%);\\n --light-gray-3: hsl(240, 05%, 88%);\\n --light-gray-4: hsl(218, 11%, 81%);\\n --light-gray-5: hsl(210, 04%, 53%);\\n --light-gray-6: hsl(202, 11%, 15%);\\n --dark-gray-0: hsl(230, 00%, 00%);\\n --dark-gray-1: hsl(229, 10%, 09%);\\n --dark-gray-2: hsl(235, 09%, 14%);\\n --dark-gray-3: hsl(233, 09%, 19%);\\n --dark-gray-4: hsl(229, 11%, 25%);\\n --dark-gray-5: hsl(230, 08%, 43%);\\n --dark-gray-6: hsl(215, 08%, 56%);\\n --dark-gray-7: hsl(173, 10%, 98%);\\n --font-mono: SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\",\\n\\t\\t\\\"Courier New\\\", monospace; }\\n\\nbody {\\n font-family: \\\"Inter\\\", sans-serif;\\n font-size: 14px;\\n line-height: 16px;\\n font-weight: 425; }\\n @supports (font-variation-settings: normal) {\\n body {\\n font-family: \\\"Inter var\\\", sans-serif; } }\\n html.theme-light body {\\n background-color: var(--light-gray-0);\\n color: var(--light-gray-6); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto body {\\n background-color: var(--light-gray-0);\\n color: var(--light-gray-6); } }\\n html.theme-dark body {\\n background-color: var(--dark-gray-3);\\n color: var(--dark-gray-7); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto body {\\n background-color: var(--dark-gray-3);\\n color: var(--dark-gray-7); } }\\n\";\nstyleInject(css_248z);\n\n// Validate\nvar validateStyles = function (obj) {\n Object.keys(obj).forEach(function (key) {\n var value = obj[key];\n if (value === undefined)\n throw Error(key + \" is undefined\");\n });\n};\n\nvar css_248z$1 = \"html.theme-light .background-module_primary__2OLUI {\\n background-color: var(--light-gray-0);\\n color: var(--light-gray-6); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .background-module_primary__2OLUI {\\n background-color: var(--light-gray-0);\\n color: var(--light-gray-6); } }\\n\\nhtml.theme-dark .background-module_primary__2OLUI {\\n background-color: var(--dark-gray-3);\\n color: var(--dark-gray-7); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .background-module_primary__2OLUI {\\n background-color: var(--dark-gray-3);\\n color: var(--dark-gray-7); } }\\n\\nhtml.theme-light .background-module_secondary__1v5Xr {\\n background-color: var(--light-gray-1);\\n color: var(--light-gray-6); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .background-module_secondary__1v5Xr {\\n background-color: var(--light-gray-1);\\n color: var(--light-gray-6); } }\\n\\nhtml.theme-dark .background-module_secondary__1v5Xr {\\n background-color: var(--dark-gray-2);\\n color: var(--dark-gray-7); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .background-module_secondary__1v5Xr {\\n background-color: var(--dark-gray-2);\\n color: var(--dark-gray-7); } }\\n\\nhtml.theme-light .background-module_inverse__1IttB {\\n background-color: var(--light-gray-6);\\n color: var(--light-gray-0); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .background-module_inverse__1IttB {\\n background-color: var(--light-gray-6);\\n color: var(--light-gray-0); } }\\n\\nhtml.theme-dark .background-module_inverse__1IttB {\\n background-color: var(--dark-gray-4);\\n color: var(--dark-gray-7); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .background-module_inverse__1IttB {\\n background-color: var(--dark-gray-4);\\n color: var(--dark-gray-7); } }\\n\";\nvar s = {\"primary\":\"background-module_primary__2OLUI\",\"secondary\":\"background-module_secondary__1v5Xr\",\"inverse\":\"background-module_inverse__1IttB\"};\nstyleInject(css_248z$1);\n\nvar primary = s.primary, secondary = s.secondary, inverse = s.inverse;\nvar background = { primary: primary, secondary: secondary, inverse: inverse };\nvalidateStyles(background);\nvar Background = function (_a) {\n var color = _a.color, children = _a.children;\n return (React.createElement(\"div\", { className: s[color] }, children));\n};\n\nvar css_248z$2 = \"html.theme-light .border-module_weak__COJkl {\\n border-color: var(--light-gray-3); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .border-module_weak__COJkl {\\n border-color: var(--light-gray-3); } }\\n\\nhtml.theme-dark .border-module_weak__COJkl {\\n border-color: var(--dark-gray-4); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .border-module_weak__COJkl {\\n border-color: var(--dark-gray-4); } }\\n\\nhtml.theme-light .border-module_strong__2GLpE {\\n border-color: var(--light-gray-4); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .border-module_strong__2GLpE {\\n border-color: var(--light-gray-4); } }\\n\\nhtml.theme-dark .border-module_strong__2GLpE {\\n border-color: var(--dark-gray-5); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .border-module_strong__2GLpE {\\n border-color: var(--dark-gray-5); } }\\n\";\nvar s$1 = {\"weak\":\"border-module_weak__COJkl\",\"strong\":\"border-module_strong__2GLpE\"};\nstyleInject(css_248z$2);\n\nvar borderColor = {\n strong: s$1.strong,\n weak: s$1.weak\n};\n\n/*! *****************************************************************************\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\r\nvar __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\nfunction __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}\n\nvar css_248z$3 = \".icon-module_icon__dknVP {\\n display: block; }\\n\\n.icon-module_icon__dknVP path {\\n fill: currentColor;\\n fill-rule: evenodd;\\n clip-rule: evenodd; }\\n\";\nvar s$2 = {\"icon\":\"icon-module_icon__dknVP\"};\nstyleInject(css_248z$3);\n\nvar Icon = function (_a) {\n var path = _a.path, size = _a.size;\n return (React.createElement(\"svg\", { className: s$2.icon, xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 16 16\", width: size !== null && size !== void 0 ? size : 16, height: size !== null && size !== void 0 ? size : 16 },\n React.createElement(\"path\", { d: path })));\n};\n\nvar css_248z$4 = \".outline-module_inner__3xr6y::-moz-focus-inner,\\n.outline-module_outer__29g_-::-moz-focus-inner {\\n border: none; }\\n\\n.outline-module_inner__3xr6y,\\n.outline-module_outer__29g_- {\\n outline: solid 8px transparent; }\\n\\n.outline-module_outer__29g_- {\\n outline-offset: 4px; }\\n\\n.outline-module_inner__3xr6y {\\n outline-offset: -2px; }\\n\\n.outline-module_inner__3xr6y.focus-visible,\\n.outline-module_outer__29g_-.focus-visible {\\n outline-width: 2px;\\n position: relative;\\n z-index: 1; }\\n html.theme-light .outline-module_inner__3xr6y.focus-visible, html.theme-light\\n .outline-module_outer__29g_-.focus-visible {\\n outline-color: var(--accent-2); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .outline-module_inner__3xr6y.focus-visible, html.theme-auto\\n .outline-module_outer__29g_-.focus-visible {\\n outline-color: var(--accent-2); } }\\n html.theme-dark .outline-module_inner__3xr6y.focus-visible, html.theme-dark\\n .outline-module_outer__29g_-.focus-visible {\\n outline-color: var(--accent-2); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .outline-module_inner__3xr6y.focus-visible, html.theme-auto\\n .outline-module_outer__29g_-.focus-visible {\\n outline-color: var(--accent-2); } }\\n\";\nvar s$3 = {\"inner\":\"outline-module_inner__3xr6y\",\"outer\":\"outline-module_outer__29g_-\"};\nstyleInject(css_248z$4);\n\nvar outline = {\n inner: s$3.inner,\n outer: s$3.outer\n};\n\nvar css_248z$5 = \".div-module_line__36o_6 {\\n border-top: solid 1px transparent;\\n border-left: solid 1px transparent; }\\n\\n.div-module_px__3z4gD {\\n display: block;\\n flex: 0 0 auto; }\\n\\n.div-module_grow__1QGnl {\\n display: block;\\n flex: 1 0 0px; }\\n\";\nvar s$4 = {\"line\":\"div-module_line__36o_6\",\"px\":\"div-module_px__3z4gD\",\"grow\":\"div-module_grow__1QGnl\"};\nstyleInject(css_248z$5);\n\nvar DivEm = function () { return React.createElement(\"span\", null, \"\\u2003\"); };\nvar DivLine = function () { return React.createElement(\"hr\", { className: s$4.line + \" \" + borderColor.weak }); };\nvar DivPx = function (_a) {\n var size = _a.size;\n return (React.createElement(\"span\", { className: s$4.px, style: { width: size, height: size } }));\n};\nvar DivGrow = function () { return React.createElement(\"span\", { className: s$4.grow }); };\n\nvar css_248z$6 = \".button-module_button__2B2gl {\\n cursor: pointer;\\n display: flex;\\n justify-content: center; }\\n\\n.button-module_fullWidth__1VujK {\\n width: 100%; }\\n\\n.button-module_medium__2WeoF {\\n padding: 8px 12px;\\n line-height: 16px; }\\n\\n.button-module_small__2cHz6 {\\n padding: 6px 8px;\\n line-height: 12px; }\\n\\n.button-module_outset__uWf3S {\\n border-radius: 3px; }\\n\\n.button-module_text__14ulv {\\n flex: 0 0 auto;\\n display: flex; }\\n\\n.button-module_icon__bVrLM {\\n flex: 0 0 auto; }\\n\";\nvar s$5 = {\"button\":\"button-module_button__2B2gl\",\"fullWidth\":\"button-module_fullWidth__1VujK\",\"medium\":\"button-module_medium__2WeoF\",\"small\":\"button-module_small__2cHz6\",\"outset\":\"button-module_outset__uWf3S\",\"text\":\"button-module_text__14ulv\",\"icon\":\"button-module_icon__bVrLM\"};\nstyleInject(css_248z$6);\n\nvar css_248z$7 = \".flat-module_main__1JmVH {\\n transition: background-color 0.1s, outline 0.2s ease-out;\\n text-decoration: inherit; }\\n html.theme-light .flat-module_main__1JmVH:hover {\\n background-color: var(--light-gray-2); }\\n html.theme-light .flat-module_main__1JmVH:active {\\n background-color: var(--light-gray-3); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .flat-module_main__1JmVH:hover {\\n background-color: var(--light-gray-2); }\\n html.theme-auto .flat-module_main__1JmVH:active {\\n background-color: var(--light-gray-3); } }\\n html.theme-dark .flat-module_main__1JmVH:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .flat-module_main__1JmVH:active {\\n background-color: var(--dark-gray-2); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .flat-module_main__1JmVH:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .flat-module_main__1JmVH:active {\\n background-color: var(--dark-gray-2); } }\\n\\nhtml.theme-light .flat-module_selected__2X5iZ, html.theme-light\\n.flat-module_selected__2X5iZ:hover, html.theme-light\\n.flat-module_selected__2X5iZ:active {\\n background-color: var(--light-gray-2); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .flat-module_selected__2X5iZ, html.theme-auto\\n .flat-module_selected__2X5iZ:hover, html.theme-auto\\n .flat-module_selected__2X5iZ:active {\\n background-color: var(--light-gray-2); } }\\n\\nhtml.theme-dark .flat-module_selected__2X5iZ, html.theme-dark\\n.flat-module_selected__2X5iZ:hover, html.theme-dark\\n.flat-module_selected__2X5iZ:active {\\n background-color: var(--dark-gray-2); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .flat-module_selected__2X5iZ, html.theme-auto\\n .flat-module_selected__2X5iZ:hover, html.theme-auto\\n .flat-module_selected__2X5iZ:active {\\n background-color: var(--dark-gray-2); } }\\n\";\nvar flat = {\"main\":\"flat-module_main__1JmVH\",\"selected\":\"flat-module_selected__2X5iZ\"};\nstyleInject(css_248z$7);\n\nvar css_248z$8 = \".outset-module_main__1qyLU {\\n transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n border: solid 1px transparent;\\n font-weight: 450;\\n --main-shadow: 0px 1px 2px;\\n --inset-shadow: inset 0px 1px 0px; }\\n html.theme-light .outset-module_main__1qyLU {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-light .outset-module_main__1qyLU:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .outset-module_main__1qyLU:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .outset-module_main__1qyLU {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-auto .outset-module_main__1qyLU:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .outset-module_main__1qyLU:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; } }\\n html.theme-dark .outset-module_main__1qyLU {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-dark .outset-module_main__1qyLU:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .outset-module_main__1qyLU:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .outset-module_main__1qyLU {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-auto .outset-module_main__1qyLU:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .outset-module_main__1qyLU:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; } }\\n\\n.outset-module_highlight__2d1Rz {\\n font-weight: 500; }\\n html.theme-light .outset-module_highlight__2d1Rz {\\n color: var(--light-gray-0);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow) var(--light-gray-4), var(--inset-shadow) var(--accent-3);\\n border-color: var(--accent-0); }\\n html.theme-light .outset-module_highlight__2d1Rz:hover {\\n background-color: var(--accent-3); }\\n html.theme-light .outset-module_highlight__2d1Rz:active {\\n background-color: var(--accent-1); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .outset-module_highlight__2d1Rz {\\n color: var(--light-gray-0);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow) var(--light-gray-4), var(--inset-shadow) var(--accent-3);\\n border-color: var(--accent-0); }\\n html.theme-auto .outset-module_highlight__2d1Rz:hover {\\n background-color: var(--accent-3); }\\n html.theme-auto .outset-module_highlight__2d1Rz:active {\\n background-color: var(--accent-1); } }\\n html.theme-dark .outset-module_highlight__2d1Rz {\\n color: var(--dark-gray-7);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--accent-3); }\\n html.theme-dark .outset-module_highlight__2d1Rz:hover {\\n background-color: var(--accent-3); }\\n html.theme-dark .outset-module_highlight__2d1Rz:active {\\n background-color: var(--accent-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .outset-module_highlight__2d1Rz {\\n color: var(--dark-gray-7);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--accent-3); }\\n html.theme-auto .outset-module_highlight__2d1Rz:hover {\\n background-color: var(--accent-3); }\\n html.theme-auto .outset-module_highlight__2d1Rz:active {\\n background-color: var(--accent-1);\\n box-shadow: none; } }\\n\\nhtml.theme-light .outset-module_selected__3z-ru, html.theme-light\\n.outset-module_selected__3z-ru:hover, html.theme-light\\n.outset-module_selected__3z-ru:active {\\n background-color: var(--light-gray-2);\\n box-shadow: 0px 0px 0px var(--light-gray-2); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .outset-module_selected__3z-ru, html.theme-auto\\n .outset-module_selected__3z-ru:hover, html.theme-auto\\n .outset-module_selected__3z-ru:active {\\n background-color: var(--light-gray-2);\\n box-shadow: 0px 0px 0px var(--light-gray-2); } }\\n\\nhtml.theme-dark .outset-module_selected__3z-ru, html.theme-dark\\n.outset-module_selected__3z-ru:hover, html.theme-dark\\n.outset-module_selected__3z-ru:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: 0px 0px 0px var(--dark-gray-1); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .outset-module_selected__3z-ru, html.theme-auto\\n .outset-module_selected__3z-ru:hover, html.theme-auto\\n .outset-module_selected__3z-ru:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: 0px 0px 0px var(--dark-gray-1); } }\\n\";\nvar outset = {\"main\":\"outset-module_main__1qyLU\",\"highlight\":\"outset-module_highlight__2d1Rz\",\"selected\":\"outset-module_selected__3z-ru\"};\nstyleInject(css_248z$8);\n\nvar getClass = function (props) {\n var highlight = props.highlight, selected = props.selected, size = props.size, style = props.style, isFullWidth = props.isFullWidth;\n if (highlight === true && selected === true)\n throw Error(\"Button cannot have both highlight and selected (yet).\");\n var classes = [s$5.button, size.main, style.main];\n if (isFullWidth)\n classes.push(s$5.fullWidth);\n if (selected)\n classes.push(style.selected);\n if (highlight)\n classes.push(style.highlight);\n return classes.join(\" \");\n};\nvar Button = function (_a) {\n var icon = _a.icon, children = _a.children, onClick = _a.onClick, style = __rest(_a, [\"icon\", \"children\", \"onClick\"]);\n return (React.createElement(\"button\", { onClick: onClick, className: getClass(style) },\n icon && (React.createElement(\"span\", { className: s$5.icon },\n React.createElement(Icon, { size: style.size.iconSize, path: icon }))),\n icon && children && React.createElement(DivPx, { size: 8 }),\n children && React.createElement(\"span\", { className: s$5.text }, children)));\n};\nButton.style = {\n outset: {\n main: s$5.outset + \" \" + outset.main + \" \" + outline.outer,\n selected: outset.selected,\n highlight: outset.highlight\n },\n flat: {\n main: flat.main + \" \" + outline.inner,\n selected: flat.selected,\n highlight: \"\"\n }\n};\nButton.size = {\n medium: {\n main: s$5.medium,\n iconSize: 16\n },\n small: {\n main: s$5.small,\n iconSize: 12\n }\n};\nButton.defaultProps = {\n selected: false,\n highlight: false,\n style: Button.style.outset,\n size: Button.size.medium,\n isFullWidth: false\n};\n\nvar css_248z$9 = \".button-menu-module_container__2h_wk {\\n position: relative; }\\n\\n.button-menu-module_select__31uuH {\\n cursor: pointer;\\n color: transparent;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%; }\\n\\n.button-menu-module_select__31uuH:not(#button-menu-module_foo__1PzWK) {\\n position: absolute;\\n z-index: 1; }\\n\\n.button-menu-module_icon__2FOBx {\\n position: relative;\\n z-index: 2;\\n pointer-events: none; }\\n\";\nvar s$6 = {\"container\":\"button-menu-module_container__2h_wk\",\"select\":\"button-menu-module_select__31uuH\",\"foo\":\"button-menu-module_foo__1PzWK\",\"icon\":\"button-menu-module_icon__2FOBx\"};\nstyleInject(css_248z$9);\n\nvar renderOption = function (_a) {\n var label = _a.label;\n return (React.createElement(\"option\", { key: label, value: label }, label));\n};\nvar onChange = function (actions) { return function (event) {\n var label = event.target.value;\n var action = actions.find(function (action) { return action.label === label; });\n if (action === undefined)\n throw Error(\"Action not found: \\\"\" + label + \"\\\"\");\n action.fn();\n}; };\nvar morePath = \"M2 10.03a2 2 0 100-4 2 2 0 000 4zM14 10.03a2 2 0 100-4 2 2 0 000 4zM8 10.03a2 2 0 100-4 2 2 0 000 4z\";\nvar ButtonMenu = function (props) { return (React.createElement(\"div\", { className: s$6.container },\n React.createElement(\"select\", { value: \"fake\", className: [props.style.main, s$6.select].join(\" \"), onChange: onChange(props.actions) },\n React.createElement(\"option\", { value: \"fake\", disabled: true }),\n props.actions.map(renderOption)),\n React.createElement(\"div\", { className: props.size.main + \" \" + s$6.icon },\n React.createElement(Icon, { path: morePath, size: props.size.iconSize })))); };\nButtonMenu.defaultProps = {\n size: Button.size.medium,\n style: Button.style.outset\n};\nButtonMenu.size = Button.size;\nButtonMenu.style = Button.style;\n\nvar css_248z$a = \".checkbox-module_container__2FFaf {\\n cursor: pointer;\\n display: flex;\\n align-items: flex-start;\\n line-height: 20px;\\n position: relative;\\n width: -webkit-max-content;\\n width: -moz-max-content;\\n width: max-content; }\\n\\n.checkbox-module_input__37Iyw {\\n flex: 0 0 auto;\\n width: 20px;\\n height: 20px;\\n border-radius: 3px; }\\n\\n.checkbox-module_tick__3qh5x {\\n position: absolute;\\n z-index: 1;\\n top: 2px;\\n left: 2px;\\n pointer-events: none; }\\n html.theme-light .checkbox-module_tick__3qh5x {\\n color: var(--light-gray-6); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .checkbox-module_tick__3qh5x {\\n color: var(--light-gray-6); } }\\n html.theme-dark .checkbox-module_tick__3qh5x {\\n color: var(--dark-gray-7); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .checkbox-module_tick__3qh5x {\\n color: var(--dark-gray-7); } }\\n\\n.checkbox-module_label__PYaj3 {\\n flex: 1 1 0px;\\n margin-left: 8px; }\\n\";\nvar s$7 = {\"container\":\"checkbox-module_container__2FFaf\",\"input\":\"checkbox-module_input__37Iyw\",\"tick\":\"checkbox-module_tick__3qh5x\",\"label\":\"checkbox-module_label__PYaj3\"};\nstyleInject(css_248z$a);\n\nvar tickPath = \"M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z\";\nvar Checkbox = function (_a) {\n var value = _a.value, setValue = _a.setValue, children = _a.children;\n return (React.createElement(\"label\", { className: s$7.container },\n value && (React.createElement(\"span\", { className: s$7.tick },\n React.createElement(Icon, { path: tickPath }))),\n React.createElement(\"input\", { type: \"checkbox\", className: s$7.input + \" \" + outset.main + \" \" + outline.outer, checked: value, onChange: function (e) { return setValue(e.target.checked); } }),\n React.createElement(\"span\", { className: s$7.label }, children)));\n};\n\nvar css_248z$b = \".field-module_container__1iKj1 {\\n display: flex;\\n align-items: flex-start; }\\n\\n.field-module_label__14v-g {\\n flex: 0 0 auto;\\n padding: calc(8px + 9px) 8px;\\n margin: -8px; }\\n\\n.field-module_input__2uPH3 {\\n flex: 1 1 0px;\\n overflow: hidden;\\n padding: 8px;\\n margin: -8px; }\\n\";\nvar s$8 = {\"container\":\"field-module_container__1iKj1\",\"label\":\"field-module_label__14v-g\",\"input\":\"field-module_input__2uPH3\"};\nstyleInject(css_248z$b);\n\nvar FormField = function (props) {\n var label = props.label, children = props.children, useLabelTag = props.useLabelTag, labelWidth = props.labelWidth;\n var labelStyle = { width: labelWidth !== null && labelWidth !== void 0 ? labelWidth : \"auto\" };\n return React.createElement(useLabelTag ? \"label\" : \"div\", { className: s$8.container }, React.createElement(\"span\", { className: s$8.label, style: labelStyle }, label), React.createElement(DivPx, { size: 8 }), React.createElement(\"span\", { className: s$8.input }, children));\n};\n\nvar css_248z$c = \".input-module_input__1hD1m {\\n width: 100%;\\n transition: background-color 0.1s, outline 0.2s ease-out;\\n line-height: 16px; }\\n\\n.input-module_flat__3tjZV {\\n text-align: inherit;\\n text-decoration: inherit; }\\n html.theme-light .input-module_flat__3tjZV:hover:not([readonly]):not([disabled]) {\\n background-color: var(--light-gray-2); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .input-module_flat__3tjZV:hover:not([readonly]):not([disabled]) {\\n background-color: var(--light-gray-2); } }\\n html.theme-dark .input-module_flat__3tjZV:hover:not([readonly]):not([disabled]) {\\n background-color: var(--dark-gray-4); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .input-module_flat__3tjZV:hover:not([readonly]):not([disabled]) {\\n background-color: var(--dark-gray-4); } }\\n html.theme-light .input-module_flat__3tjZV:focus:not([readonly]):not([disabled]) {\\n background-color: var(--light-gray-0); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .input-module_flat__3tjZV:focus:not([readonly]):not([disabled]) {\\n background-color: var(--light-gray-0); } }\\n html.theme-dark .input-module_flat__3tjZV:focus:not([readonly]):not([disabled]) {\\n background-color: var(--dark-gray-3); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .input-module_flat__3tjZV:focus:not([readonly]):not([disabled]) {\\n background-color: var(--dark-gray-3); } }\\n\\n.input-module_outset__Zfkxq {\\n border-width: 1px;\\n border-style: solid;\\n border-radius: 3px; }\\n\\n.input-module_medium__v9rrX {\\n padding: 8px; }\\n\\n.input-module_small__YypLW {\\n padding: 4px 8px; }\\n\";\nvar s$9 = {\"input\":\"input-module_input__1hD1m\",\"flat\":\"input-module_flat__3tjZV\",\"outset\":\"input-module_outset__Zfkxq\",\"medium\":\"input-module_medium__v9rrX\",\"small\":\"input-module_small__YypLW\"};\nstyleInject(css_248z$c);\n\nvar css_248z$d = \".text-module_p__xohxx {\\n line-height: 1.5; }\\n\\n.text-module_strong__2NNKK {\\n font-weight: 600; }\\n\\nhtml.theme-light .text-module_highlight__kcHKf {\\n color: var(--accent-1); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .text-module_highlight__kcHKf {\\n color: var(--accent-1); } }\\n\\nhtml.theme-dark .text-module_highlight__kcHKf {\\n color: var(--accent-2); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .text-module_highlight__kcHKf {\\n color: var(--accent-2); } }\\n\\nhtml.theme-light .text-module_muted__2_xvz {\\n color: var(--light-gray-5); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .text-module_muted__2_xvz {\\n color: var(--light-gray-5); } }\\n\\nhtml.theme-dark .text-module_muted__2_xvz {\\n color: var(--dark-gray-6); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .text-module_muted__2_xvz {\\n color: var(--dark-gray-6); } }\\n\";\nvar s$a = {\"p\":\"text-module_p__xohxx\",\"strong\":\"text-module_strong__2NNKK\",\"highlight\":\"text-module_highlight__kcHKf\",\"muted\":\"text-module_muted__2_xvz\"};\nstyleInject(css_248z$d);\n\nvar text = {\n muted: s$a.muted\n};\nvar Paragraph = function (_a) {\n var children = _a.children;\n return (React.createElement(\"p\", { className: s$a.p }, children));\n};\nvar Strong = function (_a) {\n var children = _a.children;\n return (React.createElement(\"strong\", { className: s$a.strong }, children));\n};\nvar MutedDiv = function (_a) {\n var children = _a.children;\n return (React.createElement(\"div\", { className: s$a.muted }, children));\n};\nvar MutedSpan = function (_a) {\n var children = _a.children;\n return (React.createElement(\"span\", { className: s$a.muted }, children));\n};\nvar Highlight = function (_a) {\n var children = _a.children;\n return (React.createElement(\"span\", { className: s$a.highlight }, children));\n};\n\nvar getClass$1 = function (props) {\n var _a, _b;\n var style = (_a = props.style) !== null && _a !== void 0 ? _a : Input.style.outset;\n var size = (_b = props.size) !== null && _b !== void 0 ? _b : Input.size.medium;\n var disabled = props.disabled ? style.disabled : \"\";\n return [s$9.input, outline.inner, style.main, size, disabled].join(\" \");\n};\nvar onChange$1 = function (props) { return function (e) {\n if (props.setValue === undefined || props.value === undefined)\n return;\n var target = e.currentTarget;\n var isNumber = typeof props.value === \"number\";\n props.setValue(isNumber ? target.valueAsNumber : target.value);\n}; };\nvar getType = function (props) {\n var _a;\n var target = (_a = props.value) !== null && _a !== void 0 ? _a : props.defaultValue;\n switch (typeof target) {\n case \"string\":\n return \"text\";\n case \"number\":\n return \"number\";\n default:\n throw Error(\"Unknown input type: \\\"\" + typeof target + \"\\\"\");\n }\n};\nvar Input = function (props) {\n var _a, _b;\n return (React.createElement(React.Fragment, null,\n React.createElement(\"input\", { \n // value\n type: getType(props), defaultValue: props.defaultValue, value: props.value, onChange: onChange$1(props), \n // event handlers\n onBlur: props.onBlur, onFocus: props.onFocus, \n // properties\n className: getClass$1(props), list: (_b = (_a = props.list) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : undefined, readOnly: props.readOnly, disabled: props.disabled }),\n props.list && (React.createElement(\"datalist\", { id: props.list.id }, props.list.values.map(function (value) { return (React.createElement(\"option\", { key: value, value: value })); })))));\n};\nInput.style = {\n outset: {\n main: [s$9.outset, borderColor.strong, background.primary].join(\" \"),\n disabled: \"\"\n },\n flat: {\n main: s$9.flat,\n disabled: text.muted\n }\n};\nInput.size = {\n medium: s$9.medium,\n small: s$9.small\n};\n\nvar css_248z$e = \".radio-module_container__1F3Q8 {\\n cursor: pointer;\\n display: flex;\\n align-items: flex-start;\\n line-height: 20px;\\n position: relative;\\n width: -webkit-max-content;\\n width: -moz-max-content;\\n width: max-content; }\\n\\n.radio-module_input__wMzYY {\\n flex: 0 0 auto;\\n width: 20px;\\n height: 20px;\\n border-radius: 20px; }\\n\\n.radio-module_dot__3a8IR {\\n position: absolute;\\n z-index: 1;\\n top: 6px;\\n left: 6px;\\n width: 8px;\\n height: 8px;\\n border-radius: 10px;\\n pointer-events: none; }\\n html.theme-light .radio-module_dot__3a8IR {\\n background-color: var(--light-gray-6); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .radio-module_dot__3a8IR {\\n background-color: var(--light-gray-6); } }\\n html.theme-dark .radio-module_dot__3a8IR {\\n background-color: var(--dark-gray-7); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .radio-module_dot__3a8IR {\\n background-color: var(--dark-gray-7); } }\\n\\n.radio-module_label__1ia82 {\\n flex: 1 1 0px;\\n margin-left: 8px; }\\n\";\nvar s$b = {\"container\":\"radio-module_container__1F3Q8\",\"input\":\"radio-module_input__wMzYY\",\"dot\":\"radio-module_dot__3a8IR\",\"label\":\"radio-module_label__1ia82\"};\nstyleInject(css_248z$e);\n\nvar Radio = function (props) {\n var name = props.name, value = props.value, setValue = props.setValue, checked = props.checked, label = props.label;\n return (React.createElement(\"label\", { className: s$b.container },\n checked && React.createElement(\"span\", { className: s$b.dot }),\n React.createElement(\"input\", { className: s$b.input + \" \" + outset.main + \" \" + outline.outer, type: \"radio\", name: name, checked: checked, value: value, onChange: function () { return setValue(); } }),\n React.createElement(\"span\", { className: s$b.label }, label)));\n};\n\nvar css_248z$f = \".range-module_main__3KAGe {\\n transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n border: solid 1px transparent;\\n font-weight: 450;\\n --main-shadow: 0px 1px 2px;\\n --inset-shadow: inset 0px 1px 0px; }\\n html.theme-light .range-module_main__3KAGe {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-light .range-module_main__3KAGe:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .range-module_main__3KAGe:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_main__3KAGe {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-auto .range-module_main__3KAGe:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .range-module_main__3KAGe:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; } }\\n html.theme-dark .range-module_main__3KAGe {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-dark .range-module_main__3KAGe:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .range-module_main__3KAGe:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_main__3KAGe {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-auto .range-module_main__3KAGe:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .range-module_main__3KAGe:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; } }\\n\\n.range-module_highlight__JDWbz {\\n font-weight: 500; }\\n html.theme-light .range-module_highlight__JDWbz {\\n color: var(--light-gray-0);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow) var(--light-gray-4), var(--inset-shadow) var(--accent-3);\\n border-color: var(--accent-0); }\\n html.theme-light .range-module_highlight__JDWbz:hover {\\n background-color: var(--accent-3); }\\n html.theme-light .range-module_highlight__JDWbz:active {\\n background-color: var(--accent-1); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_highlight__JDWbz {\\n color: var(--light-gray-0);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow) var(--light-gray-4), var(--inset-shadow) var(--accent-3);\\n border-color: var(--accent-0); }\\n html.theme-auto .range-module_highlight__JDWbz:hover {\\n background-color: var(--accent-3); }\\n html.theme-auto .range-module_highlight__JDWbz:active {\\n background-color: var(--accent-1); } }\\n html.theme-dark .range-module_highlight__JDWbz {\\n color: var(--dark-gray-7);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--accent-3); }\\n html.theme-dark .range-module_highlight__JDWbz:hover {\\n background-color: var(--accent-3); }\\n html.theme-dark .range-module_highlight__JDWbz:active {\\n background-color: var(--accent-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_highlight__JDWbz {\\n color: var(--dark-gray-7);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--accent-3); }\\n html.theme-auto .range-module_highlight__JDWbz:hover {\\n background-color: var(--accent-3); }\\n html.theme-auto .range-module_highlight__JDWbz:active {\\n background-color: var(--accent-1);\\n box-shadow: none; } }\\n\\nhtml.theme-light .range-module_selected__19T6K, html.theme-light\\n.range-module_selected__19T6K:hover, html.theme-light\\n.range-module_selected__19T6K:active {\\n background-color: var(--light-gray-2);\\n box-shadow: 0px 0px 0px var(--light-gray-2); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_selected__19T6K, html.theme-auto\\n .range-module_selected__19T6K:hover, html.theme-auto\\n .range-module_selected__19T6K:active {\\n background-color: var(--light-gray-2);\\n box-shadow: 0px 0px 0px var(--light-gray-2); } }\\n\\nhtml.theme-dark .range-module_selected__19T6K, html.theme-dark\\n.range-module_selected__19T6K:hover, html.theme-dark\\n.range-module_selected__19T6K:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: 0px 0px 0px var(--dark-gray-1); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_selected__19T6K, html.theme-auto\\n .range-module_selected__19T6K:hover, html.theme-auto\\n .range-module_selected__19T6K:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: 0px 0px 0px var(--dark-gray-1); } }\\n\\n.range-module_input__1LNg2 {\\n display: block;\\n width: 100%;\\n transition: outline 0.2s ease-out; }\\n\\n.range-module_input__1LNg2::-webkit-slider-runnable-track {\\n height: 2px; }\\n html.theme-light .range-module_input__1LNg2::-webkit-slider-runnable-track {\\n background-color: var(--light-gray-4); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-runnable-track {\\n background-color: var(--light-gray-4); } }\\n html.theme-dark .range-module_input__1LNg2::-webkit-slider-runnable-track {\\n background-color: var(--dark-gray-0); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-runnable-track {\\n background-color: var(--dark-gray-0); } }\\n\\n.range-module_input__1LNg2::-moz-range-track {\\n height: 2px; }\\n html.theme-light .range-module_input__1LNg2::-moz-range-track {\\n background-color: var(--light-gray-4); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-moz-range-track {\\n background-color: var(--light-gray-4); } }\\n html.theme-dark .range-module_input__1LNg2::-moz-range-track {\\n background-color: var(--dark-gray-0); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-moz-range-track {\\n background-color: var(--dark-gray-0); } }\\n\\n.range-module_input__1LNg2::-ms-track {\\n height: 2px; }\\n html.theme-light .range-module_input__1LNg2::-ms-track {\\n background-color: var(--light-gray-4); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-ms-track {\\n background-color: var(--light-gray-4); } }\\n html.theme-dark .range-module_input__1LNg2::-ms-track {\\n background-color: var(--dark-gray-0); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-ms-track {\\n background-color: var(--dark-gray-0); } }\\n\\n.range-module_input__1LNg2::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n appearance: none;\\n width: 20px;\\n height: 20px;\\n border-radius: 20px;\\n -webkit-transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n border: solid 1px transparent;\\n font-weight: 450;\\n --main-shadow: 0px 1px 2px;\\n --inset-shadow: inset 0px 1px 0px;\\n cursor: -webkit-grab;\\n cursor: grab;\\n margin-top: -8px; }\\n html.theme-light .range-module_input__1LNg2::-webkit-slider-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-light .range-module_input__1LNg2::-webkit-slider-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .range-module_input__1LNg2::-webkit-slider-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; } }\\n html.theme-dark .range-module_input__1LNg2::-webkit-slider-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-dark .range-module_input__1LNg2::-webkit-slider-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .range-module_input__1LNg2::-webkit-slider-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; } }\\n\\n.range-module_input__1LNg2::-moz-range-thumb {\\n -moz-appearance: none;\\n appearance: none;\\n width: 20px;\\n height: 20px;\\n border-radius: 20px;\\n -moz-transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n border: solid 1px transparent;\\n font-weight: 450;\\n --main-shadow: 0px 1px 2px;\\n --inset-shadow: inset 0px 1px 0px;\\n cursor: grab;\\n margin-top: -8px; }\\n html.theme-light .range-module_input__1LNg2::-moz-range-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-light .range-module_input__1LNg2::-moz-range-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .range-module_input__1LNg2::-moz-range-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; } }\\n html.theme-dark .range-module_input__1LNg2::-moz-range-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-dark .range-module_input__1LNg2::-moz-range-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .range-module_input__1LNg2::-moz-range-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; } }\\n\\n.range-module_input__1LNg2::-ms-thumb {\\n appearance: none;\\n width: 20px;\\n height: 20px;\\n border-radius: 20px;\\n -ms-transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n border: solid 1px transparent;\\n font-weight: 450;\\n --main-shadow: 0px 1px 2px;\\n --inset-shadow: inset 0px 1px 0px;\\n cursor: grab;\\n margin-top: -8px; }\\n html.theme-light .range-module_input__1LNg2::-ms-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-light .range-module_input__1LNg2::-ms-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .range-module_input__1LNg2::-ms-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; } }\\n html.theme-dark .range-module_input__1LNg2::-ms-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-dark .range-module_input__1LNg2::-ms-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .range-module_input__1LNg2::-ms-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; } }\\n\";\nvar s$c = {\"main\":\"range-module_main__3KAGe\",\"highlight\":\"range-module_highlight__JDWbz\",\"selected\":\"range-module_selected__19T6K\",\"input\":\"range-module_input__1LNg2\"};\nstyleInject(css_248z$f);\n\nvar RangeInput = function (props) {\n var _a, _b;\n return (React.createElement(React.Fragment, null,\n React.createElement(\"input\", { className: s$c.input + \" \" + outline.outer, type: \"range\", value: props.value, onChange: function (e) { return props.setValue(e.target.valueAsNumber); }, list: (_b = (_a = props.list) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : undefined, min: props.min, max: props.max, step: props.step }),\n props.list && (React.createElement(\"datalist\", { id: props.list.id }, props.list.numbers.map(function (num) { return (React.createElement(\"option\", { key: num, value: num })); })))));\n};\n\nvar css_248z$g = \".tippy-box {\\n font-weight: 500;\\n border-radius: 0px; }\\n html.theme-light .tippy-box {\\n background-color: var(--light-gray-6);\\n color: var(--light-gray-0);\\n box-shadow: 0 1px 3px var(--light-gray-4); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .tippy-box {\\n background-color: var(--light-gray-6);\\n color: var(--light-gray-0);\\n box-shadow: 0 1px 3px var(--light-gray-4); } }\\n html.theme-dark .tippy-box {\\n background-color: var(--dark-gray-4);\\n color: var(--dark-gray-7);\\n box-shadow: 0 1px 3px var(--dark-gray-1); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .tippy-box {\\n background-color: var(--dark-gray-4);\\n color: var(--dark-gray-7);\\n box-shadow: 0 1px 3px var(--dark-gray-1); } }\\n\\n.tippy-content {\\n padding: 12px 16px; }\\n\\nhtml.theme-light .tippy-box > .tippy-svg-arrow {\\n fill: var(--light-gray-6); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .tippy-box > .tippy-svg-arrow {\\n fill: var(--light-gray-6); } }\\n\\nhtml.theme-dark .tippy-box > .tippy-svg-arrow {\\n fill: var(--dark-gray-4); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .tippy-box > .tippy-svg-arrow {\\n fill: var(--dark-gray-4); } }\\n\";\nstyleInject(css_248z$g);\n\nvar Pop = function (_a) {\n var _b;\n var children = _a.children, content = _a.content, visible = _a.visible;\n return (React.createElement(Tippy, { content: content, animation: \"shift-away\", arrow: roundArrow, duration: 100, visible: (_b = visible === null || visible === void 0 ? void 0 : visible.value) !== null && _b !== void 0 ? _b : undefined, onClickOutside: visible ? function () { return visible.setValue(false); } : undefined, placement: \"bottom\" }, children));\n};\n// export { usePopAutohide } from \"./use-pop-autohide\";\n\nvar css_248z$h = \".scrollbar-module_custom__359d6 ::-webkit-scrollbar {\\n width: 16px;\\n height: 16px; }\\n\\n.scrollbar-module_custom__359d6 ::-webkit-scrollbar-track {\\n background-color: transparent; }\\n\\nhtml.theme-light .scrollbar-module_custom__359d6 ::-webkit-scrollbar-thumb {\\n background-color: var(--light-gray-4); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .scrollbar-module_custom__359d6 ::-webkit-scrollbar-thumb {\\n background-color: var(--light-gray-4); } }\\n\\nhtml.theme-dark .scrollbar-module_custom__359d6 ::-webkit-scrollbar-thumb {\\n background-color: var(--dark-gray-5); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .scrollbar-module_custom__359d6 ::-webkit-scrollbar-thumb {\\n background-color: var(--dark-gray-5); } }\\n\";\nvar s$d = {\"custom\":\"scrollbar-module_custom__359d6\"};\nstyleInject(css_248z$h);\n\nvar custom = s$d.custom;\nvar scrollbar = { custom: custom };\nvalidateStyles(scrollbar);\n\nvar css_248z$i = \".select-module_container__2jGvN {\\n position: relative; }\\n\\n.select-module_content__3jqku {\\n width: -webkit-fit-content;\\n width: -moz-fit-content;\\n width: fit-content; }\\n\\n.select-module_full__2qMdM {\\n width: 100%; }\\n\\n.select-module_select__1cSJZ {\\n width: 100%;\\n text-align: left; }\\n\\n.select-module_outset__vDV4p {\\n border-radius: 3px; }\\n\\n.select-module_icon__2qA_P {\\n position: absolute;\\n margin: auto;\\n top: 0px;\\n bottom: 0px;\\n height: 16px;\\n pointer-events: none;\\n z-index: 1; }\\n\\n.select-module_mediumSelect__dpHyT {\\n padding: 8px 32px 8px 12px; }\\n\\n.select-module_mediumIcon__3lBgZ {\\n right: 8px; }\\n\\n.select-module_smallSelect__2eWiC {\\n padding: 4px 24px 4px 8px; }\\n\\n.select-module_smallIcon__1tdIr {\\n right: 4px; }\\n\\n.select-module_flatContainer__3hZSE {\\n text-decoration: inherit; }\\n\";\nvar s$e = {\"container\":\"select-module_container__2jGvN\",\"content\":\"select-module_content__3jqku\",\"full\":\"select-module_full__2qMdM\",\"select\":\"select-module_select__1cSJZ\",\"outset\":\"select-module_outset__vDV4p\",\"icon\":\"select-module_icon__2qA_P\",\"mediumSelect\":\"select-module_mediumSelect__dpHyT\",\"mediumIcon\":\"select-module_mediumIcon__3lBgZ\",\"smallSelect\":\"select-module_smallSelect__2eWiC\",\"smallIcon\":\"select-module_smallIcon__1tdIr\",\"flatContainer\":\"select-module_flatContainer__3hZSE\"};\nstyleInject(css_248z$i);\n\nvar getClassNames = function (props) {\n var _a, _b;\n var style = (_a = props.style) !== null && _a !== void 0 ? _a : Select.style.outset;\n var size = (_b = props.size) !== null && _b !== void 0 ? _b : Select.size.medium;\n var width = props.fullWidth ? s$e.widthFull : s$e.widthContent;\n var disabled = props.disabled ? style.disabled : \"\";\n return {\n select: [s$e.select, style.select, disabled, size.select].join(\" \"),\n container: [s$e.container, style.container, width].join(\" \"),\n icon: [s$e.icon, size.icon, disabled].join(\" \")\n };\n};\nvar caret = \"M12 6.5c0-.28-.22-.5-.5-.5h-7c-.28 0-.5.22-.5.5 0 .13.05.24.13.33l3.5 4c.09.1.22.17.37.17s.28-.07.37-.17l3.5-4c.08-.09.13-.2.13-.33z\";\nvar renderOption$1 = function (_a) {\n var label = _a.label, disabled = _a.disabled;\n return (React.createElement(\"option\", { key: label, value: label, disabled: disabled }, label));\n};\nvar onChange$2 = function (props) { return function (event) {\n var label = event.target.value;\n var option = props.options.find(function (o) { return o.label === label; });\n if (!option)\n throw Error(\"Option not found: \\\"\" + label + \"\\\"\");\n props.setValue(option.value);\n}; };\nvar Select = function (props) {\n var _a;\n var cls = getClassNames(props);\n var value = (_a = props.options.find(function (o) { return o.value === props.value; })) === null || _a === void 0 ? void 0 : _a.label;\n return (React.createElement(\"div\", { className: cls.container },\n React.createElement(\"select\", { className: cls.select, value: value, onChange: onChange$2(props), disabled: props.disabled }, props.options.map(renderOption$1)),\n React.createElement(\"span\", { className: cls.icon },\n React.createElement(Icon, { path: caret }))));\n};\nSelect.style = {\n outset: {\n select: outset.main + \" \" + outline.outer + \" \" + s$e.outset,\n disabled: \"\",\n container: \"\"\n },\n flat: {\n select: flat.main + \" \" + outline.inner,\n disabled: \"\" + text.muted,\n container: s$e.flatContainer\n }\n};\nSelect.size = {\n medium: {\n select: s$e.mediumSelect,\n icon: s$e.mediumIcon\n },\n small: {\n select: s$e.smallSelect,\n icon: s$e.smallIcon\n }\n};\n\nvar css_248z$j = \".switcher-module_container__3pDYG {\\n display: flex;\\n border: solid 1px transparent;\\n border-radius: 3px; }\\n html.theme-light .switcher-module_container__3pDYG {\\n background-color: var(--light-gray-1);\\n border-color: var(--light-gray-4);\\n box-shadow: 0px 1px 2px var(--light-gray-2); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .switcher-module_container__3pDYG {\\n background-color: var(--light-gray-1);\\n border-color: var(--light-gray-4);\\n box-shadow: 0px 1px 2px var(--light-gray-2); } }\\n html.theme-dark .switcher-module_container__3pDYG {\\n background-color: var(--dark-gray-3);\\n border-color: var(--dark-gray-0);\\n box-shadow: 0px 1px 2px var(--dark-gray-1); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .switcher-module_container__3pDYG {\\n background-color: var(--dark-gray-3);\\n border-color: var(--dark-gray-0);\\n box-shadow: 0px 1px 2px var(--dark-gray-1); } }\\n\\n.switcher-module_button__3QI6I {\\n flex: 1 1 0px;\\n padding: 8px 12px;\\n text-align: center;\\n transition: background-color 0.1s, outline 0.2s ease-out; }\\n .switcher-module_button__3QI6I:last-child {\\n border-top-right-radius: 3px;\\n border-bottom-right-radius: 3px; }\\n .switcher-module_button__3QI6I:first-child {\\n border-top-left-radius: 3px;\\n border-bottom-left-radius: 3px; }\\n\\n.switcher-module_button__3QI6I.switcher-module_soft__3PM3F {\\n cursor: pointer; }\\n html.theme-light .switcher-module_button__3QI6I.switcher-module_soft__3PM3F {\\n box-shadow: inset 0 1px 0 var(--light-gray-0); }\\n html.theme-light .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:active {\\n background-color: var(--light-gray-3);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F {\\n box-shadow: inset 0 1px 0 var(--light-gray-0); }\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:active {\\n background-color: var(--light-gray-3);\\n box-shadow: none; } }\\n html.theme-dark .switcher-module_button__3QI6I.switcher-module_soft__3PM3F {\\n box-shadow: inset 0 1px 0 var(--dark-gray-4); }\\n html.theme-dark .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:active {\\n background-color: var(--dark-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F {\\n box-shadow: inset 0 1px 0 var(--dark-gray-4); }\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:active {\\n background-color: var(--dark-gray-2);\\n box-shadow: none; } }\\n\\nhtml.theme-light .switcher-module_button__3QI6I.switcher-module_bold__ABA9T {\\n background-color: var(--light-gray-2); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_bold__ABA9T {\\n background-color: var(--light-gray-2); } }\\n\\nhtml.theme-dark .switcher-module_button__3QI6I.switcher-module_bold__ABA9T {\\n background-color: var(--dark-gray-1); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_bold__ABA9T {\\n background-color: var(--dark-gray-1); } }\\n\\n.switcher-module_button__3QI6I + .switcher-module_button__3QI6I {\\n border-left: solid 1px transparent; }\\n html.theme-light .switcher-module_button__3QI6I + .switcher-module_button__3QI6I {\\n border-left-color: var(--light-gray-4); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .switcher-module_button__3QI6I + .switcher-module_button__3QI6I {\\n border-left-color: var(--light-gray-4); } }\\n html.theme-dark .switcher-module_button__3QI6I + .switcher-module_button__3QI6I {\\n border-left-color: var(--dark-gray-0); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .switcher-module_button__3QI6I + .switcher-module_button__3QI6I {\\n border-left-color: var(--dark-gray-0); } }\\n\";\nvar s$f = {\"container\":\"switcher-module_container__3pDYG\",\"button\":\"switcher-module_button__3QI6I\",\"soft\":\"switcher-module_soft__3PM3F\",\"bold\":\"switcher-module_bold__ABA9T\"};\nstyleInject(css_248z$j);\n\nvar getClassName = function (value, option) {\n var curr = value === option.value ? s$f.bold : s$f.soft;\n return s$f.button + \" \" + curr + \" \" + outline.outer;\n};\n// @TODO: not a11y ready\nvar Switcher = function (_a) {\n var value = _a.value, setValue = _a.setValue, options = _a.options;\n return (React.createElement(\"div\", { className: s$f.container }, options.map(function (option) { return (React.createElement(\"button\", { key: option.label, className: getClassName(value, option), onClick: function () { return setValue(option.value); } }, option.label)); })));\n};\n\nvar css_248z$k = \".tab-module_panel__3sCiY {\\n padding: 16px; }\\n\\n.tab-module_titles__VnYSE {\\n padding: 0 16px;\\n margin-bottom: -1px; }\\n\\n.tab-module_title__1HJRf {\\n padding: 8px 12px;\\n cursor: pointer;\\n border-style: solid;\\n border-width: 1px;\\n border-bottom: none;\\n transition: outline 0.2s; }\\n\\n.tab-module_nonactive__k-jrC {\\n border-color: transparent; }\\n\";\nvar s$g = {\"panel\":\"tab-module_panel__3sCiY\",\"titles\":\"tab-module_titles__VnYSE\",\"title\":\"tab-module_title__1HJRf\",\"nonactive\":\"tab-module_nonactive__k-jrC\"};\nstyleInject(css_248z$k);\n\nvar renderTab = function (state) { return function (tab) {\n var active = state[0], setActive = state[1];\n var activeCls = active === tab.title\n ? borderColor.weak + \" \" + background.primary\n : \"\" + s$g.nonactive;\n var className = [s$g.title, outline.outer, activeCls].join(\" \");\n var onClick = function () { return setActive(tab.title); };\n return (React.createElement(\"button\", __assign({ key: tab.title }, { className: className, onClick: onClick }), tab.title));\n}; };\nvar Tabs = function (_a) {\n var tabs = _a.tabs;\n if (tabs.length < 1)\n throw Error(\"Tabs must have at least one tab\");\n var activeState = React.useState(tabs[0].title);\n var active = activeState[0];\n var activeTab = tabs.find(function (tab) { return tab.title === active; });\n if (activeTab === undefined)\n throw Error(\"Tab \\\"\" + active + \"\\\" is not defined\");\n return (React.createElement(\"div\", null,\n React.createElement(\"div\", { className: s$g.titles }, tabs.map(renderTab(activeState))),\n React.createElement(DivLine, null),\n React.createElement(Background, { color: \"primary\" },\n React.createElement(\"div\", { className: s$g.panel }, activeTab.panel()))));\n};\n\nexport { Background, Button, ButtonMenu, Checkbox, DivEm, DivGrow, DivLine, DivPx, FormField, Highlight, Icon, Input, MutedDiv, MutedSpan, Paragraph, Pop, Radio, RangeInput, Select, Strong, Switcher, Tabs, background, borderColor, outline, scrollbar, text };\n","export default function getBoundingClientRect(element) {\n var rect = element.getBoundingClientRect();\n return {\n width: rect.width,\n height: rect.height,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n y: rect.top\n };\n}","/*:: import type { Window } from '../types'; */\n\n/*:: declare function getWindow(node: Node | Window): Window; */\nexport default function getWindow(node) {\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getWindow from \"./getWindow.js\";\n/*:: declare function isElement(node: mixed): boolean %checks(node instanceof\n Element); */\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n/*:: declare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n HTMLElement); */\n\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nexport { isElement, isHTMLElement };","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe: assume body is always available\n return (isElement(element) ? element.ownerDocument : element.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\"; // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement);\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element) {\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// $FlowFixMe: this is a quicker (but less type safe) way to save quite some bytes from the bundle\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || // DOM Element detected\n // $FlowFixMe: need a better way to handle this...\n element.host || // ShadowRoot detected\n // $FlowFixMe: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the \nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = getNodeName(scrollParent) === 'body';\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var currentNode = getParentNode(element);\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.willChange !== 'auto') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static') {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nexport * from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign(Object.assign({}, DEFAULT_OPTIONS), defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(options) {\n cleanupModifierEffects();\n state.options = Object.assign(Object.assign(Object.assign({}, defaultOptions), state.options), options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator();","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign(Object.assign(Object.assign({}, existing), current), {}, {\n options: Object.assign(Object.assign({}, existing.options), current.options),\n data: Object.assign(Object.assign({}, existing.data), current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = Math.floor(offsets[mainAxis]) - Math.floor(reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = Math.floor(offsets[mainAxis]) + Math.ceil(reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsets(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: Math.round(x * dpr) / dpr || 0,\n y: Math.round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive;\n\n var _roundOffsets = roundOffsets(offsets),\n x = _roundOffsets.x,\n y = _roundOffsets.y;\n\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n } // $FlowFixMe: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n /*:: offsetParent = (offsetParent: Element); */\n\n\n if (placement === top) {\n sideY = bottom;\n y -= offsetParent.clientHeight - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left) {\n sideX = right;\n x -= offsetParent.clientWidth - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign(Object.assign({}, commonStyles), {}, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign(Object.assign({}, commonStyles), {}, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref3) {\n var state = _ref3.state,\n options = _ref3.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign(Object.assign({}, state.styles.popper), mapToStyles(Object.assign(Object.assign({}, commonStyles), {}, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign(Object.assign({}, state.styles.arrow), mapToStyles(Object.assign(Object.assign({}, commonStyles), {}, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false\n })));\n }\n\n state.attributes.popper = Object.assign(Object.assign({}, state.attributes.popper), {}, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\";\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign(Object.assign({}, rects), {}, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","export default function contains(parent, child) {\n // $FlowFixMe: hasOwnProperty doesn't seem to work in tests\n var isShadow = Boolean(child.getRootNode && child.getRootNode().host); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (isShadow) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign(Object.assign({}, rect), {}, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport contains from \"./contains.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(element);\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement);\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = Math.max(rect.top, accRect.top);\n accRect.right = Math.min(rect.right, accRect.right);\n accRect.bottom = Math.min(rect.bottom, accRect.bottom);\n accRect.left = Math.max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = element.ownerDocument.body;\n var width = Math.max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = Math.max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += Math.max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign(Object.assign({}, getFreshSideObject()), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var referenceElement = state.elements.reference;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(referenceElement);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign(Object.assign({}, popperRect), popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","export default function within(min, value, max) {\n return Math.max(min, Math.min(value, max));\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign(Object.assign({}, state.attributes.popper), {}, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator } from \"./index.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\n\n/*:: type OverflowsMap = { [ComputedPlacement]: number }; */\n\n/*;; type OverflowsMap = { [key in ComputedPlacement]: number }; */\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = (variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements).filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n }); // $FlowFixMe: Flow seems to have problems with two array unions...\n\n var overflows = placements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport within from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign(Object.assign({}, state.rects), {}, {\n placement: state.placement\n })) : tetherOffset;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = popperOffsets[mainAxis] + overflow[mainSide];\n var max = popperOffsets[mainAxis] - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? Math.min(min, tetherMin) : min, offset, tether ? Math.max(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var _preventedOffset = within(_min, _offset, _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport within from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = state.modifiersData[name + \"#persistent\"].padding;\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element,\n _options$padding = options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n state.modifiersData[name + \"#persistent\"] = {\n padding: mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements))\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","function updateClassName(box, action, classNames) {\n classNames.split(/\\s+/).forEach(name => {\n if (name) {\n box.classList[action](name);\n }\n });\n}\n\nexport const classNamePlugin = {\n name: 'className',\n defaultValue: '',\n fn(instance) {\n const box = instance.popper.firstElementChild;\n const isDefaultRenderFn = () => !!instance.props.render?.$$tippy;\n\n function add() {\n if (instance.props.className && !isDefaultRenderFn()) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n [\n '@tippyjs/react: Cannot use `className` prop in conjunction with',\n '`render` prop. Place the className on the element you are',\n 'rendering.',\n ].join(' '),\n );\n }\n\n return;\n }\n\n updateClassName(box, 'add', instance.props.className);\n }\n\n function remove() {\n if (isDefaultRenderFn()) {\n updateClassName(box, 'remove', instance.props.className);\n }\n }\n\n return {\n onCreate: add,\n onBeforeUpdate: remove,\n onAfterUpdate: add,\n };\n },\n};\n","import React, {cloneElement, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {createPortal} from 'react-dom';\nimport {\n preserveRef,\n ssrSafeCreateDiv,\n toDataAttributes,\n deepPreserveProps,\n} from './utils';\nimport {useMutableBox, useIsomorphicLayoutEffect} from './util-hooks';\nimport {classNamePlugin} from './className-plugin';\n\nexport default function TippyGenerator(tippy) {\n function Tippy({\n children,\n content,\n visible,\n singleton,\n render,\n disabled = false,\n ignoreAttributes = true,\n // Filter React development reserved props\n // added by babel-preset-react dev plugins:\n // transform-react-jsx-self and transform-react-jsx-source\n __source,\n __self,\n ...restOfNativeProps\n }) {\n const isControlledMode = visible !== undefined;\n const isSingletonMode = singleton !== undefined;\n\n const [attrs, setAttrs] = useState({});\n const [mounted, setMounted] = useState(false);\n const [singletonContent, setSingletonContent] = useState();\n const mutableBox = useMutableBox(() => ({\n container: ssrSafeCreateDiv(),\n renders: 1,\n }));\n\n const props = {\n ignoreAttributes,\n ...restOfNativeProps,\n content: mutableBox.container,\n };\n\n if (isControlledMode) {\n if (process.env.NODE_ENV !== 'production') {\n ['trigger', 'hideOnClick', 'showOnCreate'].forEach(nativeStateProp => {\n if (props[nativeStateProp] !== undefined) {\n console.warn(\n [\n `@tippyjs/react: Cannot specify \\`${nativeStateProp}\\` prop in`,\n `controlled mode (\\`visible\\` prop)`,\n ].join(' '),\n );\n }\n });\n }\n\n props.trigger = 'manual';\n props.hideOnClick = false;\n }\n\n if (isSingletonMode) {\n disabled = true;\n }\n\n let computedProps = props;\n const plugins = props.plugins || [];\n\n if (render) {\n computedProps = {\n ...props,\n plugins: isSingletonMode\n ? [\n ...plugins,\n {\n fn: () => ({\n onTrigger(_, event) {\n const {content} = singleton.data.children.find(\n ({instance}) =>\n instance.reference === event.currentTarget,\n );\n setSingletonContent(content);\n },\n }),\n },\n ]\n : plugins,\n render: () => ({popper: mutableBox.container}),\n };\n }\n\n const deps = children ? [children.type] : [];\n\n // CREATE\n useIsomorphicLayoutEffect(() => {\n const instance = tippy(mutableBox.ref || ssrSafeCreateDiv(), {\n ...computedProps,\n plugins: [classNamePlugin, ...(props.plugins || [])],\n });\n\n mutableBox.instance = instance;\n\n if (disabled) {\n instance.disable();\n }\n\n if (visible) {\n instance.show();\n }\n\n if (isSingletonMode) {\n singleton.hook({\n instance,\n content,\n props: computedProps,\n });\n }\n\n setMounted(true);\n\n return () => {\n instance.destroy();\n singleton?.cleanup(instance);\n };\n }, deps);\n\n // UPDATE\n useIsomorphicLayoutEffect(() => {\n // Prevent this effect from running on 1st render\n if (mutableBox.renders === 1) {\n mutableBox.renders++;\n return;\n }\n\n const {instance} = mutableBox;\n\n instance.setProps(deepPreserveProps(instance.props, props));\n\n if (disabled) {\n instance.disable();\n } else {\n instance.enable();\n }\n\n if (isControlledMode) {\n if (visible) {\n instance.show();\n } else {\n instance.hide();\n }\n }\n\n if (isSingletonMode) {\n singleton.hook({\n instance,\n content,\n props,\n });\n }\n });\n\n useIsomorphicLayoutEffect(() => {\n if (!render) {\n return;\n }\n\n const {instance} = mutableBox;\n\n instance.setProps({\n popperOptions: {\n ...instance.props.popperOptions,\n modifiers: [\n ...(instance.props.popperOptions?.modifiers || []),\n {\n name: '$$tippyReact',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['computeStyles'],\n fn({state}) {\n const hideData = state.modifiersData?.hide;\n\n // WARNING: this is a high-risk path that can cause an infinite\n // loop. This expression _must_ evaluate to false when required\n if (\n attrs.placement !== state.placement ||\n attrs.referenceHidden !== hideData?.isReferenceHidden ||\n attrs.escaped !== hideData?.hasPopperEscaped\n ) {\n setAttrs({\n placement: state.placement,\n referenceHidden: hideData?.isReferenceHidden,\n escaped: hideData?.hasPopperEscaped,\n });\n }\n\n state.attributes.popper = {};\n },\n },\n ],\n },\n });\n }, [attrs.placement, attrs.referenceHidden, attrs.escaped, ...deps]);\n\n return (\n <>\n {children\n ? cloneElement(children, {\n ref(node) {\n mutableBox.ref = node;\n preserveRef(children.ref, node);\n },\n })\n : null}\n {mounted &&\n createPortal(\n render\n ? render(toDataAttributes(attrs), singletonContent)\n : content,\n mutableBox.container,\n )}\n \n );\n }\n\n if (process.env.NODE_ENV !== 'production') {\n const ContentType = PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string,\n PropTypes.element,\n ]);\n\n Tippy.propTypes = {\n children: PropTypes.element,\n content: PropTypes.oneOfType([\n ContentType,\n PropTypes.arrayOf(ContentType),\n ]),\n render: PropTypes.func,\n visible: PropTypes.bool,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n singleton: PropTypes.object,\n };\n }\n\n return Tippy;\n}\n","import React from 'react';\nimport Tippy from '@tippyjs/react';\nimport { roundArrow } from 'tippy.js';\nimport 'tippy.js/dist/tippy.css';\nimport 'tippy.js/dist/svg-arrow.css';\nimport 'tippy.js/animations/shift-away.css';\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(undefined, (function () {\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesWhitelist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. ¯\\_(ツ)_/¯\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z = \"@import url(\\\"https://rsms.me/inter/inter.css\\\");\\n*,\\n*::after,\\n*::before {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n border: none;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n font: inherit;\\n color: inherit;\\n background: none;\\n list-style-type: none; }\\n\\n:root {\\n --accent-0: hsl(211, 61%, 43%);\\n --accent-1: hsl(209, 62%, 50%);\\n --accent-2: hsl(207, 73%, 57%);\\n --accent-3: hsl(205, 79%, 60%);\\n --light-gray-0: hsl(00, 00%, 100%);\\n --light-gray-1: hsl(240, 20%, 98%);\\n --light-gray-2: hsl(240, 09%, 93%);\\n --light-gray-3: hsl(240, 05%, 88%);\\n --light-gray-4: hsl(218, 11%, 81%);\\n --light-gray-5: hsl(210, 04%, 53%);\\n --light-gray-6: hsl(202, 11%, 15%);\\n --dark-gray-0: hsl(230, 00%, 00%);\\n --dark-gray-1: hsl(229, 10%, 09%);\\n --dark-gray-2: hsl(235, 09%, 14%);\\n --dark-gray-3: hsl(233, 09%, 19%);\\n --dark-gray-4: hsl(229, 11%, 25%);\\n --dark-gray-5: hsl(230, 08%, 43%);\\n --dark-gray-6: hsl(215, 08%, 56%);\\n --dark-gray-7: hsl(173, 10%, 98%);\\n --font-mono: SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\",\\n\\t\\t\\\"Courier New\\\", monospace; }\\n\\nbody {\\n font-family: \\\"Inter\\\", sans-serif;\\n font-size: 14px;\\n line-height: 16px;\\n font-weight: 425; }\\n @supports (font-variation-settings: normal) {\\n body {\\n font-family: \\\"Inter var\\\", sans-serif; } }\\n html.theme-light body {\\n background-color: var(--light-gray-0);\\n color: var(--light-gray-6); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto body {\\n background-color: var(--light-gray-0);\\n color: var(--light-gray-6); } }\\n html.theme-dark body {\\n background-color: var(--dark-gray-3);\\n color: var(--dark-gray-7); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto body {\\n background-color: var(--dark-gray-3);\\n color: var(--dark-gray-7); } }\\n\";\nstyleInject(css_248z);\n\n// Validate\nvar validateStyles = function (obj) {\n Object.keys(obj).forEach(function (key) {\n var value = obj[key];\n if (value === undefined)\n throw Error(key + \" is undefined\");\n });\n};\n\nvar css_248z$1 = \"html.theme-light .background-module_primary__2OLUI {\\n background-color: var(--light-gray-0);\\n color: var(--light-gray-6); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .background-module_primary__2OLUI {\\n background-color: var(--light-gray-0);\\n color: var(--light-gray-6); } }\\n\\nhtml.theme-dark .background-module_primary__2OLUI {\\n background-color: var(--dark-gray-3);\\n color: var(--dark-gray-7); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .background-module_primary__2OLUI {\\n background-color: var(--dark-gray-3);\\n color: var(--dark-gray-7); } }\\n\\nhtml.theme-light .background-module_secondary__1v5Xr {\\n background-color: var(--light-gray-1);\\n color: var(--light-gray-6); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .background-module_secondary__1v5Xr {\\n background-color: var(--light-gray-1);\\n color: var(--light-gray-6); } }\\n\\nhtml.theme-dark .background-module_secondary__1v5Xr {\\n background-color: var(--dark-gray-2);\\n color: var(--dark-gray-7); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .background-module_secondary__1v5Xr {\\n background-color: var(--dark-gray-2);\\n color: var(--dark-gray-7); } }\\n\\nhtml.theme-light .background-module_inverse__1IttB {\\n background-color: var(--light-gray-6);\\n color: var(--light-gray-0); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .background-module_inverse__1IttB {\\n background-color: var(--light-gray-6);\\n color: var(--light-gray-0); } }\\n\\nhtml.theme-dark .background-module_inverse__1IttB {\\n background-color: var(--dark-gray-4);\\n color: var(--dark-gray-7); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .background-module_inverse__1IttB {\\n background-color: var(--dark-gray-4);\\n color: var(--dark-gray-7); } }\\n\";\nvar s = {\"primary\":\"background-module_primary__2OLUI\",\"secondary\":\"background-module_secondary__1v5Xr\",\"inverse\":\"background-module_inverse__1IttB\"};\nstyleInject(css_248z$1);\n\nvar primary = s.primary, secondary = s.secondary, inverse = s.inverse;\nvar background = { primary: primary, secondary: secondary, inverse: inverse };\nvalidateStyles(background);\nvar Background = function (_a) {\n var color = _a.color, children = _a.children;\n return (React.createElement(\"div\", { className: s[color] }, children));\n};\n\nvar css_248z$2 = \"html.theme-light .border-module_weak__COJkl {\\n border-color: var(--light-gray-3); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .border-module_weak__COJkl {\\n border-color: var(--light-gray-3); } }\\n\\nhtml.theme-dark .border-module_weak__COJkl {\\n border-color: var(--dark-gray-4); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .border-module_weak__COJkl {\\n border-color: var(--dark-gray-4); } }\\n\\nhtml.theme-light .border-module_strong__2GLpE {\\n border-color: var(--light-gray-4); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .border-module_strong__2GLpE {\\n border-color: var(--light-gray-4); } }\\n\\nhtml.theme-dark .border-module_strong__2GLpE {\\n border-color: var(--dark-gray-5); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .border-module_strong__2GLpE {\\n border-color: var(--dark-gray-5); } }\\n\";\nvar s$1 = {\"weak\":\"border-module_weak__COJkl\",\"strong\":\"border-module_strong__2GLpE\"};\nstyleInject(css_248z$2);\n\nvar borderColor = {\n strong: s$1.strong,\n weak: s$1.weak\n};\n\n/*! *****************************************************************************\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\r\nvar __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\nfunction __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}\n\nvar css_248z$3 = \".icon-module_icon__dknVP {\\n display: block; }\\n\\n.icon-module_icon__dknVP path {\\n fill: currentColor;\\n fill-rule: evenodd;\\n clip-rule: evenodd; }\\n\";\nvar s$2 = {\"icon\":\"icon-module_icon__dknVP\"};\nstyleInject(css_248z$3);\n\nvar Icon = function (_a) {\n var path = _a.path, size = _a.size;\n return (React.createElement(\"svg\", { className: s$2.icon, xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 16 16\", width: size !== null && size !== void 0 ? size : 16, height: size !== null && size !== void 0 ? size : 16 },\n React.createElement(\"path\", { d: path })));\n};\n\nvar css_248z$4 = \".outline-module_inner__3xr6y::-moz-focus-inner,\\n.outline-module_outer__29g_-::-moz-focus-inner {\\n border: none; }\\n\\n.outline-module_inner__3xr6y,\\n.outline-module_outer__29g_- {\\n outline: solid 8px transparent; }\\n\\n.outline-module_outer__29g_- {\\n outline-offset: 4px; }\\n\\n.outline-module_inner__3xr6y {\\n outline-offset: -2px; }\\n\\n.outline-module_inner__3xr6y.focus-visible,\\n.outline-module_outer__29g_-.focus-visible {\\n outline-width: 2px;\\n position: relative;\\n z-index: 1; }\\n html.theme-light .outline-module_inner__3xr6y.focus-visible, html.theme-light\\n .outline-module_outer__29g_-.focus-visible {\\n outline-color: var(--accent-2); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .outline-module_inner__3xr6y.focus-visible, html.theme-auto\\n .outline-module_outer__29g_-.focus-visible {\\n outline-color: var(--accent-2); } }\\n html.theme-dark .outline-module_inner__3xr6y.focus-visible, html.theme-dark\\n .outline-module_outer__29g_-.focus-visible {\\n outline-color: var(--accent-2); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .outline-module_inner__3xr6y.focus-visible, html.theme-auto\\n .outline-module_outer__29g_-.focus-visible {\\n outline-color: var(--accent-2); } }\\n\";\nvar s$3 = {\"inner\":\"outline-module_inner__3xr6y\",\"outer\":\"outline-module_outer__29g_-\"};\nstyleInject(css_248z$4);\n\nvar outline = {\n inner: s$3.inner,\n outer: s$3.outer\n};\n\nvar css_248z$5 = \".div-module_line__36o_6 {\\n border-top: solid 1px transparent;\\n border-left: solid 1px transparent; }\\n\\n.div-module_px__3z4gD {\\n display: block;\\n flex: 0 0 auto; }\\n\\n.div-module_grow__1QGnl {\\n display: block;\\n flex: 1 0 0px; }\\n\";\nvar s$4 = {\"line\":\"div-module_line__36o_6\",\"px\":\"div-module_px__3z4gD\",\"grow\":\"div-module_grow__1QGnl\"};\nstyleInject(css_248z$5);\n\nvar DivEm = function () { return React.createElement(\"span\", null, \"\\u2003\"); };\nvar DivLine = function () { return React.createElement(\"hr\", { className: s$4.line + \" \" + borderColor.weak }); };\nvar DivPx = function (_a) {\n var size = _a.size;\n return (React.createElement(\"span\", { className: s$4.px, style: { width: size, height: size } }));\n};\nvar DivGrow = function () { return React.createElement(\"span\", { className: s$4.grow }); };\n\nvar css_248z$6 = \".button-module_button__2B2gl {\\n cursor: pointer;\\n display: flex;\\n justify-content: center; }\\n\\n.button-module_fullWidth__1VujK {\\n width: 100%; }\\n\\n.button-module_medium__2WeoF {\\n padding: 8px 12px;\\n line-height: 16px; }\\n\\n.button-module_small__2cHz6 {\\n padding: 6px 8px;\\n line-height: 12px; }\\n\\n.button-module_outset__uWf3S {\\n border-radius: 3px; }\\n\\n.button-module_text__14ulv {\\n flex: 0 0 auto;\\n display: flex; }\\n\\n.button-module_icon__bVrLM {\\n flex: 0 0 auto; }\\n\";\nvar s$5 = {\"button\":\"button-module_button__2B2gl\",\"fullWidth\":\"button-module_fullWidth__1VujK\",\"medium\":\"button-module_medium__2WeoF\",\"small\":\"button-module_small__2cHz6\",\"outset\":\"button-module_outset__uWf3S\",\"text\":\"button-module_text__14ulv\",\"icon\":\"button-module_icon__bVrLM\"};\nstyleInject(css_248z$6);\n\nvar css_248z$7 = \".flat-module_main__1JmVH {\\n transition: background-color 0.1s, outline 0.2s ease-out;\\n text-decoration: inherit; }\\n html.theme-light .flat-module_main__1JmVH:hover {\\n background-color: var(--light-gray-2); }\\n html.theme-light .flat-module_main__1JmVH:active {\\n background-color: var(--light-gray-3); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .flat-module_main__1JmVH:hover {\\n background-color: var(--light-gray-2); }\\n html.theme-auto .flat-module_main__1JmVH:active {\\n background-color: var(--light-gray-3); } }\\n html.theme-dark .flat-module_main__1JmVH:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .flat-module_main__1JmVH:active {\\n background-color: var(--dark-gray-2); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .flat-module_main__1JmVH:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .flat-module_main__1JmVH:active {\\n background-color: var(--dark-gray-2); } }\\n\\nhtml.theme-light .flat-module_selected__2X5iZ, html.theme-light\\n.flat-module_selected__2X5iZ:hover, html.theme-light\\n.flat-module_selected__2X5iZ:active {\\n background-color: var(--light-gray-2); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .flat-module_selected__2X5iZ, html.theme-auto\\n .flat-module_selected__2X5iZ:hover, html.theme-auto\\n .flat-module_selected__2X5iZ:active {\\n background-color: var(--light-gray-2); } }\\n\\nhtml.theme-dark .flat-module_selected__2X5iZ, html.theme-dark\\n.flat-module_selected__2X5iZ:hover, html.theme-dark\\n.flat-module_selected__2X5iZ:active {\\n background-color: var(--dark-gray-2); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .flat-module_selected__2X5iZ, html.theme-auto\\n .flat-module_selected__2X5iZ:hover, html.theme-auto\\n .flat-module_selected__2X5iZ:active {\\n background-color: var(--dark-gray-2); } }\\n\";\nvar flat = {\"main\":\"flat-module_main__1JmVH\",\"selected\":\"flat-module_selected__2X5iZ\"};\nstyleInject(css_248z$7);\n\nvar css_248z$8 = \".outset-module_main__1qyLU {\\n transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n border: solid 1px transparent;\\n font-weight: 450;\\n --main-shadow: 0px 1px 2px;\\n --inset-shadow: inset 0px 1px 0px; }\\n html.theme-light .outset-module_main__1qyLU {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-light .outset-module_main__1qyLU:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .outset-module_main__1qyLU:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .outset-module_main__1qyLU {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-auto .outset-module_main__1qyLU:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .outset-module_main__1qyLU:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; } }\\n html.theme-dark .outset-module_main__1qyLU {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-dark .outset-module_main__1qyLU:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .outset-module_main__1qyLU:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .outset-module_main__1qyLU {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-auto .outset-module_main__1qyLU:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .outset-module_main__1qyLU:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; } }\\n\\n.outset-module_highlight__2d1Rz {\\n font-weight: 500; }\\n html.theme-light .outset-module_highlight__2d1Rz {\\n color: var(--light-gray-0);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow) var(--light-gray-4), var(--inset-shadow) var(--accent-3);\\n border-color: var(--accent-0); }\\n html.theme-light .outset-module_highlight__2d1Rz:hover {\\n background-color: var(--accent-3); }\\n html.theme-light .outset-module_highlight__2d1Rz:active {\\n background-color: var(--accent-1); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .outset-module_highlight__2d1Rz {\\n color: var(--light-gray-0);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow) var(--light-gray-4), var(--inset-shadow) var(--accent-3);\\n border-color: var(--accent-0); }\\n html.theme-auto .outset-module_highlight__2d1Rz:hover {\\n background-color: var(--accent-3); }\\n html.theme-auto .outset-module_highlight__2d1Rz:active {\\n background-color: var(--accent-1); } }\\n html.theme-dark .outset-module_highlight__2d1Rz {\\n color: var(--dark-gray-7);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--accent-3); }\\n html.theme-dark .outset-module_highlight__2d1Rz:hover {\\n background-color: var(--accent-3); }\\n html.theme-dark .outset-module_highlight__2d1Rz:active {\\n background-color: var(--accent-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .outset-module_highlight__2d1Rz {\\n color: var(--dark-gray-7);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--accent-3); }\\n html.theme-auto .outset-module_highlight__2d1Rz:hover {\\n background-color: var(--accent-3); }\\n html.theme-auto .outset-module_highlight__2d1Rz:active {\\n background-color: var(--accent-1);\\n box-shadow: none; } }\\n\\nhtml.theme-light .outset-module_selected__3z-ru, html.theme-light\\n.outset-module_selected__3z-ru:hover, html.theme-light\\n.outset-module_selected__3z-ru:active {\\n background-color: var(--light-gray-2);\\n box-shadow: 0px 0px 0px var(--light-gray-2); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .outset-module_selected__3z-ru, html.theme-auto\\n .outset-module_selected__3z-ru:hover, html.theme-auto\\n .outset-module_selected__3z-ru:active {\\n background-color: var(--light-gray-2);\\n box-shadow: 0px 0px 0px var(--light-gray-2); } }\\n\\nhtml.theme-dark .outset-module_selected__3z-ru, html.theme-dark\\n.outset-module_selected__3z-ru:hover, html.theme-dark\\n.outset-module_selected__3z-ru:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: 0px 0px 0px var(--dark-gray-1); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .outset-module_selected__3z-ru, html.theme-auto\\n .outset-module_selected__3z-ru:hover, html.theme-auto\\n .outset-module_selected__3z-ru:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: 0px 0px 0px var(--dark-gray-1); } }\\n\";\nvar outset = {\"main\":\"outset-module_main__1qyLU\",\"highlight\":\"outset-module_highlight__2d1Rz\",\"selected\":\"outset-module_selected__3z-ru\"};\nstyleInject(css_248z$8);\n\nvar getClass = function (props) {\n var highlight = props.highlight, selected = props.selected, size = props.size, style = props.style, isFullWidth = props.isFullWidth;\n if (highlight === true && selected === true)\n throw Error(\"Button cannot have both highlight and selected (yet).\");\n var classes = [s$5.button, size.main, style.main];\n if (isFullWidth)\n classes.push(s$5.fullWidth);\n if (selected)\n classes.push(style.selected);\n if (highlight)\n classes.push(style.highlight);\n return classes.join(\" \");\n};\nvar Button = function (_a) {\n var icon = _a.icon, children = _a.children, onClick = _a.onClick, style = __rest(_a, [\"icon\", \"children\", \"onClick\"]);\n return (React.createElement(\"button\", { onClick: onClick, className: getClass(style) },\n icon && (React.createElement(\"span\", { className: s$5.icon },\n React.createElement(Icon, { size: style.size.iconSize, path: icon }))),\n icon && children && React.createElement(DivPx, { size: 8 }),\n children && React.createElement(\"span\", { className: s$5.text }, children)));\n};\nButton.style = {\n outset: {\n main: s$5.outset + \" \" + outset.main + \" \" + outline.outer,\n selected: outset.selected,\n highlight: outset.highlight\n },\n flat: {\n main: flat.main + \" \" + outline.inner,\n selected: flat.selected,\n highlight: \"\"\n }\n};\nButton.size = {\n medium: {\n main: s$5.medium,\n iconSize: 16\n },\n small: {\n main: s$5.small,\n iconSize: 12\n }\n};\nButton.defaultProps = {\n selected: false,\n highlight: false,\n style: Button.style.outset,\n size: Button.size.medium,\n isFullWidth: false\n};\n\nvar css_248z$9 = \".button-menu-module_container__2h_wk {\\n position: relative; }\\n\\n.button-menu-module_select__31uuH {\\n cursor: pointer;\\n color: transparent;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%; }\\n\\n.button-menu-module_select__31uuH:not(#button-menu-module_foo__1PzWK) {\\n position: absolute;\\n z-index: 1; }\\n\\n.button-menu-module_icon__2FOBx {\\n position: relative;\\n z-index: 2;\\n pointer-events: none; }\\n\";\nvar s$6 = {\"container\":\"button-menu-module_container__2h_wk\",\"select\":\"button-menu-module_select__31uuH\",\"foo\":\"button-menu-module_foo__1PzWK\",\"icon\":\"button-menu-module_icon__2FOBx\"};\nstyleInject(css_248z$9);\n\nvar renderOption = function (_a) {\n var label = _a.label;\n return (React.createElement(\"option\", { key: label, value: label }, label));\n};\nvar onChange = function (actions) { return function (event) {\n var label = event.target.value;\n var action = actions.find(function (action) { return action.label === label; });\n if (action === undefined)\n throw Error(\"Action not found: \\\"\" + label + \"\\\"\");\n action.fn();\n}; };\nvar morePath = \"M2 10.03a2 2 0 100-4 2 2 0 000 4zM14 10.03a2 2 0 100-4 2 2 0 000 4zM8 10.03a2 2 0 100-4 2 2 0 000 4z\";\nvar ButtonMenu = function (props) { return (React.createElement(\"div\", { className: s$6.container },\n React.createElement(\"select\", { value: \"fake\", className: [props.style.main, s$6.select].join(\" \"), onChange: onChange(props.actions) },\n React.createElement(\"option\", { value: \"fake\", disabled: true }),\n props.actions.map(renderOption)),\n React.createElement(\"div\", { className: props.size.main + \" \" + s$6.icon },\n React.createElement(Icon, { path: morePath, size: props.size.iconSize })))); };\nButtonMenu.defaultProps = {\n size: Button.size.medium,\n style: Button.style.outset\n};\nButtonMenu.size = Button.size;\nButtonMenu.style = Button.style;\n\nvar css_248z$a = \".checkbox-module_container__2FFaf {\\n cursor: pointer;\\n display: flex;\\n align-items: flex-start;\\n line-height: 20px;\\n position: relative;\\n width: -webkit-max-content;\\n width: -moz-max-content;\\n width: max-content; }\\n\\n.checkbox-module_input__37Iyw {\\n flex: 0 0 auto;\\n width: 20px;\\n height: 20px;\\n border-radius: 3px; }\\n\\n.checkbox-module_tick__3qh5x {\\n position: absolute;\\n z-index: 1;\\n top: 2px;\\n left: 2px;\\n pointer-events: none; }\\n html.theme-light .checkbox-module_tick__3qh5x {\\n color: var(--light-gray-6); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .checkbox-module_tick__3qh5x {\\n color: var(--light-gray-6); } }\\n html.theme-dark .checkbox-module_tick__3qh5x {\\n color: var(--dark-gray-7); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .checkbox-module_tick__3qh5x {\\n color: var(--dark-gray-7); } }\\n\\n.checkbox-module_label__PYaj3 {\\n flex: 1 1 0px;\\n margin-left: 8px; }\\n\";\nvar s$7 = {\"container\":\"checkbox-module_container__2FFaf\",\"input\":\"checkbox-module_input__37Iyw\",\"tick\":\"checkbox-module_tick__3qh5x\",\"label\":\"checkbox-module_label__PYaj3\"};\nstyleInject(css_248z$a);\n\nvar tickPath = \"M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z\";\nvar Checkbox = function (_a) {\n var value = _a.value, setValue = _a.setValue, children = _a.children;\n return (React.createElement(\"label\", { className: s$7.container },\n value && (React.createElement(\"span\", { className: s$7.tick },\n React.createElement(Icon, { path: tickPath }))),\n React.createElement(\"input\", { type: \"checkbox\", className: s$7.input + \" \" + outset.main + \" \" + outline.outer, checked: value, onChange: function (e) { return setValue(e.target.checked); } }),\n React.createElement(\"span\", { className: s$7.label }, children)));\n};\n\nvar css_248z$b = \".field-module_container__1iKj1 {\\n display: flex;\\n align-items: flex-start; }\\n\\n.field-module_label__14v-g {\\n flex: 0 0 auto;\\n padding: calc(8px + 9px) 8px;\\n margin: -8px; }\\n\\n.field-module_input__2uPH3 {\\n flex: 1 1 0px;\\n overflow: hidden;\\n padding: 8px;\\n margin: -8px; }\\n\";\nvar s$8 = {\"container\":\"field-module_container__1iKj1\",\"label\":\"field-module_label__14v-g\",\"input\":\"field-module_input__2uPH3\"};\nstyleInject(css_248z$b);\n\nvar FormField = function (props) {\n var label = props.label, children = props.children, useLabelTag = props.useLabelTag, labelWidth = props.labelWidth;\n var labelStyle = { width: labelWidth !== null && labelWidth !== void 0 ? labelWidth : \"auto\" };\n return React.createElement(useLabelTag ? \"label\" : \"div\", { className: s$8.container }, React.createElement(\"span\", { className: s$8.label, style: labelStyle }, label), React.createElement(DivPx, { size: 8 }), React.createElement(\"span\", { className: s$8.input }, children));\n};\n\nvar css_248z$c = \".input-module_input__1hD1m {\\n width: 100%;\\n transition: background-color 0.1s, outline 0.2s ease-out;\\n line-height: 16px; }\\n\\n.input-module_flat__3tjZV {\\n text-align: inherit;\\n text-decoration: inherit; }\\n html.theme-light .input-module_flat__3tjZV:hover:not([readonly]):not([disabled]) {\\n background-color: var(--light-gray-2); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .input-module_flat__3tjZV:hover:not([readonly]):not([disabled]) {\\n background-color: var(--light-gray-2); } }\\n html.theme-dark .input-module_flat__3tjZV:hover:not([readonly]):not([disabled]) {\\n background-color: var(--dark-gray-4); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .input-module_flat__3tjZV:hover:not([readonly]):not([disabled]) {\\n background-color: var(--dark-gray-4); } }\\n html.theme-light .input-module_flat__3tjZV:focus:not([readonly]):not([disabled]) {\\n background-color: var(--light-gray-0); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .input-module_flat__3tjZV:focus:not([readonly]):not([disabled]) {\\n background-color: var(--light-gray-0); } }\\n html.theme-dark .input-module_flat__3tjZV:focus:not([readonly]):not([disabled]) {\\n background-color: var(--dark-gray-3); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .input-module_flat__3tjZV:focus:not([readonly]):not([disabled]) {\\n background-color: var(--dark-gray-3); } }\\n\\n.input-module_outset__Zfkxq {\\n border-width: 1px;\\n border-style: solid;\\n border-radius: 3px; }\\n\\n.input-module_medium__v9rrX {\\n padding: 8px; }\\n\\n.input-module_small__YypLW {\\n padding: 4px 8px; }\\n\";\nvar s$9 = {\"input\":\"input-module_input__1hD1m\",\"flat\":\"input-module_flat__3tjZV\",\"outset\":\"input-module_outset__Zfkxq\",\"medium\":\"input-module_medium__v9rrX\",\"small\":\"input-module_small__YypLW\"};\nstyleInject(css_248z$c);\n\nvar css_248z$d = \".text-module_p__xohxx {\\n line-height: 1.5; }\\n\\n.text-module_strong__2NNKK {\\n font-weight: 600; }\\n\\nhtml.theme-light .text-module_highlight__kcHKf {\\n color: var(--accent-1); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .text-module_highlight__kcHKf {\\n color: var(--accent-1); } }\\n\\nhtml.theme-dark .text-module_highlight__kcHKf {\\n color: var(--accent-2); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .text-module_highlight__kcHKf {\\n color: var(--accent-2); } }\\n\\nhtml.theme-light .text-module_muted__2_xvz {\\n color: var(--light-gray-5); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .text-module_muted__2_xvz {\\n color: var(--light-gray-5); } }\\n\\nhtml.theme-dark .text-module_muted__2_xvz {\\n color: var(--dark-gray-6); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .text-module_muted__2_xvz {\\n color: var(--dark-gray-6); } }\\n\";\nvar s$a = {\"p\":\"text-module_p__xohxx\",\"strong\":\"text-module_strong__2NNKK\",\"highlight\":\"text-module_highlight__kcHKf\",\"muted\":\"text-module_muted__2_xvz\"};\nstyleInject(css_248z$d);\n\nvar text = {\n muted: s$a.muted\n};\nvar Paragraph = function (_a) {\n var children = _a.children;\n return (React.createElement(\"p\", { className: s$a.p }, children));\n};\nvar Strong = function (_a) {\n var children = _a.children;\n return (React.createElement(\"strong\", { className: s$a.strong }, children));\n};\nvar MutedDiv = function (_a) {\n var children = _a.children;\n return (React.createElement(\"div\", { className: s$a.muted }, children));\n};\nvar MutedSpan = function (_a) {\n var children = _a.children;\n return (React.createElement(\"span\", { className: s$a.muted }, children));\n};\nvar Highlight = function (_a) {\n var children = _a.children;\n return (React.createElement(\"span\", { className: s$a.highlight }, children));\n};\n\nvar getClass$1 = function (props) {\n var _a, _b;\n var style = (_a = props.style) !== null && _a !== void 0 ? _a : Input.style.outset;\n var size = (_b = props.size) !== null && _b !== void 0 ? _b : Input.size.medium;\n var disabled = props.disabled ? style.disabled : \"\";\n return [s$9.input, outline.inner, style.main, size, disabled].join(\" \");\n};\nvar onChange$1 = function (props) { return function (e) {\n if (props.setValue === undefined || props.value === undefined)\n return;\n var target = e.currentTarget;\n var isNumber = typeof props.value === \"number\";\n props.setValue(isNumber ? target.valueAsNumber : target.value);\n}; };\nvar getType = function (props) {\n var _a;\n var target = (_a = props.value) !== null && _a !== void 0 ? _a : props.defaultValue;\n switch (typeof target) {\n case \"string\":\n return \"text\";\n case \"number\":\n return \"number\";\n default:\n throw Error(\"Unknown input type: \\\"\" + typeof target + \"\\\"\");\n }\n};\nvar Input = function (props) {\n var _a, _b;\n return (React.createElement(React.Fragment, null,\n React.createElement(\"input\", { \n // value\n type: getType(props), defaultValue: props.defaultValue, value: props.value, onChange: onChange$1(props), \n // event handlers\n onBlur: props.onBlur, onFocus: props.onFocus, \n // properties\n className: getClass$1(props), list: (_b = (_a = props.list) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : undefined, readOnly: props.readOnly, disabled: props.disabled }),\n props.list && (React.createElement(\"datalist\", { id: props.list.id }, props.list.values.map(function (value) { return (React.createElement(\"option\", { key: value, value: value })); })))));\n};\nInput.style = {\n outset: {\n main: [s$9.outset, borderColor.strong, background.primary].join(\" \"),\n disabled: \"\"\n },\n flat: {\n main: s$9.flat,\n disabled: text.muted\n }\n};\nInput.size = {\n medium: s$9.medium,\n small: s$9.small\n};\n\nvar css_248z$e = \".radio-module_container__1F3Q8 {\\n cursor: pointer;\\n display: flex;\\n align-items: flex-start;\\n line-height: 20px;\\n position: relative;\\n width: -webkit-max-content;\\n width: -moz-max-content;\\n width: max-content; }\\n\\n.radio-module_input__wMzYY {\\n flex: 0 0 auto;\\n width: 20px;\\n height: 20px;\\n border-radius: 20px; }\\n\\n.radio-module_dot__3a8IR {\\n position: absolute;\\n z-index: 1;\\n top: 6px;\\n left: 6px;\\n width: 8px;\\n height: 8px;\\n border-radius: 10px;\\n pointer-events: none; }\\n html.theme-light .radio-module_dot__3a8IR {\\n background-color: var(--light-gray-6); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .radio-module_dot__3a8IR {\\n background-color: var(--light-gray-6); } }\\n html.theme-dark .radio-module_dot__3a8IR {\\n background-color: var(--dark-gray-7); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .radio-module_dot__3a8IR {\\n background-color: var(--dark-gray-7); } }\\n\\n.radio-module_label__1ia82 {\\n flex: 1 1 0px;\\n margin-left: 8px; }\\n\";\nvar s$b = {\"container\":\"radio-module_container__1F3Q8\",\"input\":\"radio-module_input__wMzYY\",\"dot\":\"radio-module_dot__3a8IR\",\"label\":\"radio-module_label__1ia82\"};\nstyleInject(css_248z$e);\n\nvar Radio = function (props) {\n var name = props.name, value = props.value, setValue = props.setValue, checked = props.checked, label = props.label;\n return (React.createElement(\"label\", { className: s$b.container },\n checked && React.createElement(\"span\", { className: s$b.dot }),\n React.createElement(\"input\", { className: s$b.input + \" \" + outset.main + \" \" + outline.outer, type: \"radio\", name: name, checked: checked, value: value, onChange: function () { return setValue(); } }),\n React.createElement(\"span\", { className: s$b.label }, label)));\n};\n\nvar css_248z$f = \".range-module_main__3KAGe {\\n transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n border: solid 1px transparent;\\n font-weight: 450;\\n --main-shadow: 0px 1px 2px;\\n --inset-shadow: inset 0px 1px 0px; }\\n html.theme-light .range-module_main__3KAGe {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-light .range-module_main__3KAGe:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .range-module_main__3KAGe:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_main__3KAGe {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-auto .range-module_main__3KAGe:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .range-module_main__3KAGe:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; } }\\n html.theme-dark .range-module_main__3KAGe {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-dark .range-module_main__3KAGe:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .range-module_main__3KAGe:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_main__3KAGe {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-auto .range-module_main__3KAGe:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .range-module_main__3KAGe:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; } }\\n\\n.range-module_highlight__JDWbz {\\n font-weight: 500; }\\n html.theme-light .range-module_highlight__JDWbz {\\n color: var(--light-gray-0);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow) var(--light-gray-4), var(--inset-shadow) var(--accent-3);\\n border-color: var(--accent-0); }\\n html.theme-light .range-module_highlight__JDWbz:hover {\\n background-color: var(--accent-3); }\\n html.theme-light .range-module_highlight__JDWbz:active {\\n background-color: var(--accent-1); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_highlight__JDWbz {\\n color: var(--light-gray-0);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow) var(--light-gray-4), var(--inset-shadow) var(--accent-3);\\n border-color: var(--accent-0); }\\n html.theme-auto .range-module_highlight__JDWbz:hover {\\n background-color: var(--accent-3); }\\n html.theme-auto .range-module_highlight__JDWbz:active {\\n background-color: var(--accent-1); } }\\n html.theme-dark .range-module_highlight__JDWbz {\\n color: var(--dark-gray-7);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--accent-3); }\\n html.theme-dark .range-module_highlight__JDWbz:hover {\\n background-color: var(--accent-3); }\\n html.theme-dark .range-module_highlight__JDWbz:active {\\n background-color: var(--accent-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_highlight__JDWbz {\\n color: var(--dark-gray-7);\\n background-color: var(--accent-2);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--accent-3); }\\n html.theme-auto .range-module_highlight__JDWbz:hover {\\n background-color: var(--accent-3); }\\n html.theme-auto .range-module_highlight__JDWbz:active {\\n background-color: var(--accent-1);\\n box-shadow: none; } }\\n\\nhtml.theme-light .range-module_selected__19T6K, html.theme-light\\n.range-module_selected__19T6K:hover, html.theme-light\\n.range-module_selected__19T6K:active {\\n background-color: var(--light-gray-2);\\n box-shadow: 0px 0px 0px var(--light-gray-2); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_selected__19T6K, html.theme-auto\\n .range-module_selected__19T6K:hover, html.theme-auto\\n .range-module_selected__19T6K:active {\\n background-color: var(--light-gray-2);\\n box-shadow: 0px 0px 0px var(--light-gray-2); } }\\n\\nhtml.theme-dark .range-module_selected__19T6K, html.theme-dark\\n.range-module_selected__19T6K:hover, html.theme-dark\\n.range-module_selected__19T6K:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: 0px 0px 0px var(--dark-gray-1); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_selected__19T6K, html.theme-auto\\n .range-module_selected__19T6K:hover, html.theme-auto\\n .range-module_selected__19T6K:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: 0px 0px 0px var(--dark-gray-1); } }\\n\\n.range-module_input__1LNg2 {\\n display: block;\\n width: 100%;\\n transition: outline 0.2s ease-out; }\\n\\n.range-module_input__1LNg2::-webkit-slider-runnable-track {\\n height: 2px; }\\n html.theme-light .range-module_input__1LNg2::-webkit-slider-runnable-track {\\n background-color: var(--light-gray-4); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-runnable-track {\\n background-color: var(--light-gray-4); } }\\n html.theme-dark .range-module_input__1LNg2::-webkit-slider-runnable-track {\\n background-color: var(--dark-gray-0); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-runnable-track {\\n background-color: var(--dark-gray-0); } }\\n\\n.range-module_input__1LNg2::-moz-range-track {\\n height: 2px; }\\n html.theme-light .range-module_input__1LNg2::-moz-range-track {\\n background-color: var(--light-gray-4); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-moz-range-track {\\n background-color: var(--light-gray-4); } }\\n html.theme-dark .range-module_input__1LNg2::-moz-range-track {\\n background-color: var(--dark-gray-0); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-moz-range-track {\\n background-color: var(--dark-gray-0); } }\\n\\n.range-module_input__1LNg2::-ms-track {\\n height: 2px; }\\n html.theme-light .range-module_input__1LNg2::-ms-track {\\n background-color: var(--light-gray-4); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-ms-track {\\n background-color: var(--light-gray-4); } }\\n html.theme-dark .range-module_input__1LNg2::-ms-track {\\n background-color: var(--dark-gray-0); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-ms-track {\\n background-color: var(--dark-gray-0); } }\\n\\n.range-module_input__1LNg2::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n appearance: none;\\n width: 20px;\\n height: 20px;\\n border-radius: 20px;\\n -webkit-transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n border: solid 1px transparent;\\n font-weight: 450;\\n --main-shadow: 0px 1px 2px;\\n --inset-shadow: inset 0px 1px 0px;\\n cursor: -webkit-grab;\\n cursor: grab;\\n margin-top: -8px; }\\n html.theme-light .range-module_input__1LNg2::-webkit-slider-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-light .range-module_input__1LNg2::-webkit-slider-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .range-module_input__1LNg2::-webkit-slider-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; } }\\n html.theme-dark .range-module_input__1LNg2::-webkit-slider-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-dark .range-module_input__1LNg2::-webkit-slider-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .range-module_input__1LNg2::-webkit-slider-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-webkit-slider-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; } }\\n\\n.range-module_input__1LNg2::-moz-range-thumb {\\n -moz-appearance: none;\\n appearance: none;\\n width: 20px;\\n height: 20px;\\n border-radius: 20px;\\n -moz-transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n border: solid 1px transparent;\\n font-weight: 450;\\n --main-shadow: 0px 1px 2px;\\n --inset-shadow: inset 0px 1px 0px;\\n cursor: grab;\\n margin-top: -8px; }\\n html.theme-light .range-module_input__1LNg2::-moz-range-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-light .range-module_input__1LNg2::-moz-range-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .range-module_input__1LNg2::-moz-range-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; } }\\n html.theme-dark .range-module_input__1LNg2::-moz-range-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-dark .range-module_input__1LNg2::-moz-range-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .range-module_input__1LNg2::-moz-range-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-moz-range-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; } }\\n\\n.range-module_input__1LNg2::-ms-thumb {\\n appearance: none;\\n width: 20px;\\n height: 20px;\\n border-radius: 20px;\\n -ms-transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n transition: background-color 0.1s, box-shadow 0.1s, outline 0.2s ease-out;\\n border: solid 1px transparent;\\n font-weight: 450;\\n --main-shadow: 0px 1px 2px;\\n --inset-shadow: inset 0px 1px 0px;\\n cursor: grab;\\n margin-top: -8px; }\\n html.theme-light .range-module_input__1LNg2::-ms-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-light .range-module_input__1LNg2::-ms-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .range-module_input__1LNg2::-ms-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb {\\n background-color: var(--light-gray-1);\\n box-shadow: var(--main-shadow) var(--light-gray-2), var(--inset-shadow) var(--light-gray-0);\\n border-color: var(--light-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb:active {\\n background-color: var(--light-gray-2);\\n box-shadow: none; } }\\n html.theme-dark .range-module_input__1LNg2::-ms-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-dark .range-module_input__1LNg2::-ms-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .range-module_input__1LNg2::-ms-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb {\\n --main-shadow-full: var(--main-shadow) var(--dark-gray-2);\\n background-color: var(--dark-gray-3);\\n box-shadow: var(--main-shadow-full), var(--inset-shadow) var(--dark-gray-4);\\n border-color: var(--dark-gray-0); }\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .range-module_input__1LNg2::-ms-thumb:active {\\n background-color: var(--dark-gray-1);\\n box-shadow: none; } }\\n\";\nvar s$c = {\"main\":\"range-module_main__3KAGe\",\"highlight\":\"range-module_highlight__JDWbz\",\"selected\":\"range-module_selected__19T6K\",\"input\":\"range-module_input__1LNg2\"};\nstyleInject(css_248z$f);\n\nvar RangeInput = function (props) {\n var _a, _b;\n return (React.createElement(React.Fragment, null,\n React.createElement(\"input\", { className: s$c.input + \" \" + outline.outer, type: \"range\", value: props.value, onChange: function (e) { return props.setValue(e.target.valueAsNumber); }, list: (_b = (_a = props.list) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : undefined, min: props.min, max: props.max, step: props.step }),\n props.list && (React.createElement(\"datalist\", { id: props.list.id }, props.list.numbers.map(function (num) { return (React.createElement(\"option\", { key: num, value: num })); })))));\n};\n\nvar css_248z$g = \".tippy-box {\\n font-weight: 500;\\n border-radius: 0px; }\\n html.theme-light .tippy-box {\\n background-color: var(--light-gray-6);\\n color: var(--light-gray-0);\\n box-shadow: 0 1px 3px var(--light-gray-4); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .tippy-box {\\n background-color: var(--light-gray-6);\\n color: var(--light-gray-0);\\n box-shadow: 0 1px 3px var(--light-gray-4); } }\\n html.theme-dark .tippy-box {\\n background-color: var(--dark-gray-4);\\n color: var(--dark-gray-7);\\n box-shadow: 0 1px 3px var(--dark-gray-1); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .tippy-box {\\n background-color: var(--dark-gray-4);\\n color: var(--dark-gray-7);\\n box-shadow: 0 1px 3px var(--dark-gray-1); } }\\n\\n.tippy-content {\\n padding: 12px 16px; }\\n\\nhtml.theme-light .tippy-box > .tippy-svg-arrow {\\n fill: var(--light-gray-6); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .tippy-box > .tippy-svg-arrow {\\n fill: var(--light-gray-6); } }\\n\\nhtml.theme-dark .tippy-box > .tippy-svg-arrow {\\n fill: var(--dark-gray-4); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .tippy-box > .tippy-svg-arrow {\\n fill: var(--dark-gray-4); } }\\n\";\nstyleInject(css_248z$g);\n\nvar Pop = function (_a) {\n var _b;\n var children = _a.children, content = _a.content, visible = _a.visible;\n return (React.createElement(Tippy, { content: content, animation: \"shift-away\", arrow: roundArrow, duration: 100, visible: (_b = visible === null || visible === void 0 ? void 0 : visible.value) !== null && _b !== void 0 ? _b : undefined, onClickOutside: visible ? function () { return visible.setValue(false); } : undefined, placement: \"bottom\" }, children));\n};\n// export { usePopAutohide } from \"./use-pop-autohide\";\n\nvar css_248z$h = \".scrollbar-module_custom__359d6 ::-webkit-scrollbar {\\n width: 16px;\\n height: 16px; }\\n\\n.scrollbar-module_custom__359d6 ::-webkit-scrollbar-track {\\n background-color: transparent; }\\n\\nhtml.theme-light .scrollbar-module_custom__359d6 ::-webkit-scrollbar-thumb {\\n background-color: var(--light-gray-4); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .scrollbar-module_custom__359d6 ::-webkit-scrollbar-thumb {\\n background-color: var(--light-gray-4); } }\\n\\nhtml.theme-dark .scrollbar-module_custom__359d6 ::-webkit-scrollbar-thumb {\\n background-color: var(--dark-gray-5); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .scrollbar-module_custom__359d6 ::-webkit-scrollbar-thumb {\\n background-color: var(--dark-gray-5); } }\\n\";\nvar s$d = {\"custom\":\"scrollbar-module_custom__359d6\"};\nstyleInject(css_248z$h);\n\nvar custom = s$d.custom;\nvar scrollbar = { custom: custom };\nvalidateStyles(scrollbar);\n\nvar css_248z$i = \".select-module_container__2jGvN {\\n position: relative; }\\n\\n.select-module_content__3jqku {\\n width: -webkit-fit-content;\\n width: -moz-fit-content;\\n width: fit-content; }\\n\\n.select-module_full__2qMdM {\\n width: 100%; }\\n\\n.select-module_select__1cSJZ {\\n width: 100%;\\n text-align: left; }\\n\\n.select-module_outset__vDV4p {\\n border-radius: 3px; }\\n\\n.select-module_icon__2qA_P {\\n position: absolute;\\n margin: auto;\\n top: 0px;\\n bottom: 0px;\\n height: 16px;\\n pointer-events: none;\\n z-index: 1; }\\n\\n.select-module_mediumSelect__dpHyT {\\n padding: 8px 32px 8px 12px; }\\n\\n.select-module_mediumIcon__3lBgZ {\\n right: 8px; }\\n\\n.select-module_smallSelect__2eWiC {\\n padding: 4px 24px 4px 8px; }\\n\\n.select-module_smallIcon__1tdIr {\\n right: 4px; }\\n\\n.select-module_flatContainer__3hZSE {\\n text-decoration: inherit; }\\n\";\nvar s$e = {\"container\":\"select-module_container__2jGvN\",\"content\":\"select-module_content__3jqku\",\"full\":\"select-module_full__2qMdM\",\"select\":\"select-module_select__1cSJZ\",\"outset\":\"select-module_outset__vDV4p\",\"icon\":\"select-module_icon__2qA_P\",\"mediumSelect\":\"select-module_mediumSelect__dpHyT\",\"mediumIcon\":\"select-module_mediumIcon__3lBgZ\",\"smallSelect\":\"select-module_smallSelect__2eWiC\",\"smallIcon\":\"select-module_smallIcon__1tdIr\",\"flatContainer\":\"select-module_flatContainer__3hZSE\"};\nstyleInject(css_248z$i);\n\nvar getClassNames = function (props) {\n var _a, _b;\n var style = (_a = props.style) !== null && _a !== void 0 ? _a : Select.style.outset;\n var size = (_b = props.size) !== null && _b !== void 0 ? _b : Select.size.medium;\n var width = props.fullWidth ? s$e.widthFull : s$e.widthContent;\n var disabled = props.disabled ? style.disabled : \"\";\n return {\n select: [s$e.select, style.select, disabled, size.select].join(\" \"),\n container: [s$e.container, style.container, width].join(\" \"),\n icon: [s$e.icon, size.icon, disabled].join(\" \")\n };\n};\nvar caret = \"M12 6.5c0-.28-.22-.5-.5-.5h-7c-.28 0-.5.22-.5.5 0 .13.05.24.13.33l3.5 4c.09.1.22.17.37.17s.28-.07.37-.17l3.5-4c.08-.09.13-.2.13-.33z\";\nvar renderOption$1 = function (_a) {\n var label = _a.label, disabled = _a.disabled;\n return (React.createElement(\"option\", { key: label, value: label, disabled: disabled }, label));\n};\nvar onChange$2 = function (props) { return function (event) {\n var label = event.target.value;\n var option = props.options.find(function (o) { return o.label === label; });\n if (!option)\n throw Error(\"Option not found: \\\"\" + label + \"\\\"\");\n props.setValue(option.value);\n}; };\nvar Select = function (props) {\n var _a;\n var cls = getClassNames(props);\n var value = (_a = props.options.find(function (o) { return o.value === props.value; })) === null || _a === void 0 ? void 0 : _a.label;\n return (React.createElement(\"div\", { className: cls.container },\n React.createElement(\"select\", { className: cls.select, value: value, onChange: onChange$2(props), disabled: props.disabled }, props.options.map(renderOption$1)),\n React.createElement(\"span\", { className: cls.icon },\n React.createElement(Icon, { path: caret }))));\n};\nSelect.style = {\n outset: {\n select: outset.main + \" \" + outline.outer + \" \" + s$e.outset,\n disabled: \"\",\n container: \"\"\n },\n flat: {\n select: flat.main + \" \" + outline.inner,\n disabled: \"\" + text.muted,\n container: s$e.flatContainer\n }\n};\nSelect.size = {\n medium: {\n select: s$e.mediumSelect,\n icon: s$e.mediumIcon\n },\n small: {\n select: s$e.smallSelect,\n icon: s$e.smallIcon\n }\n};\n\nvar css_248z$j = \".switcher-module_container__3pDYG {\\n display: flex;\\n border: solid 1px transparent;\\n border-radius: 3px; }\\n html.theme-light .switcher-module_container__3pDYG {\\n background-color: var(--light-gray-1);\\n border-color: var(--light-gray-4);\\n box-shadow: 0px 1px 2px var(--light-gray-2); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .switcher-module_container__3pDYG {\\n background-color: var(--light-gray-1);\\n border-color: var(--light-gray-4);\\n box-shadow: 0px 1px 2px var(--light-gray-2); } }\\n html.theme-dark .switcher-module_container__3pDYG {\\n background-color: var(--dark-gray-3);\\n border-color: var(--dark-gray-0);\\n box-shadow: 0px 1px 2px var(--dark-gray-1); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .switcher-module_container__3pDYG {\\n background-color: var(--dark-gray-3);\\n border-color: var(--dark-gray-0);\\n box-shadow: 0px 1px 2px var(--dark-gray-1); } }\\n\\n.switcher-module_button__3QI6I {\\n flex: 1 1 0px;\\n padding: 8px 12px;\\n text-align: center;\\n transition: background-color 0.1s, outline 0.2s ease-out; }\\n .switcher-module_button__3QI6I:last-child {\\n border-top-right-radius: 3px;\\n border-bottom-right-radius: 3px; }\\n .switcher-module_button__3QI6I:first-child {\\n border-top-left-radius: 3px;\\n border-bottom-left-radius: 3px; }\\n\\n.switcher-module_button__3QI6I.switcher-module_soft__3PM3F {\\n cursor: pointer; }\\n html.theme-light .switcher-module_button__3QI6I.switcher-module_soft__3PM3F {\\n box-shadow: inset 0 1px 0 var(--light-gray-0); }\\n html.theme-light .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-light .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:active {\\n background-color: var(--light-gray-3);\\n box-shadow: none; }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F {\\n box-shadow: inset 0 1px 0 var(--light-gray-0); }\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:hover {\\n background-color: var(--light-gray-0); }\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:active {\\n background-color: var(--light-gray-3);\\n box-shadow: none; } }\\n html.theme-dark .switcher-module_button__3QI6I.switcher-module_soft__3PM3F {\\n box-shadow: inset 0 1px 0 var(--dark-gray-4); }\\n html.theme-dark .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-dark .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:active {\\n background-color: var(--dark-gray-2);\\n box-shadow: none; }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F {\\n box-shadow: inset 0 1px 0 var(--dark-gray-4); }\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:hover {\\n background-color: var(--dark-gray-4); }\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_soft__3PM3F:active {\\n background-color: var(--dark-gray-2);\\n box-shadow: none; } }\\n\\nhtml.theme-light .switcher-module_button__3QI6I.switcher-module_bold__ABA9T {\\n background-color: var(--light-gray-2); }\\n\\n@media (prefers-color-scheme: light) {\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_bold__ABA9T {\\n background-color: var(--light-gray-2); } }\\n\\nhtml.theme-dark .switcher-module_button__3QI6I.switcher-module_bold__ABA9T {\\n background-color: var(--dark-gray-1); }\\n\\n@media (prefers-color-scheme: dark) {\\n html.theme-auto .switcher-module_button__3QI6I.switcher-module_bold__ABA9T {\\n background-color: var(--dark-gray-1); } }\\n\\n.switcher-module_button__3QI6I + .switcher-module_button__3QI6I {\\n border-left: solid 1px transparent; }\\n html.theme-light .switcher-module_button__3QI6I + .switcher-module_button__3QI6I {\\n border-left-color: var(--light-gray-4); }\\n @media (prefers-color-scheme: light) {\\n html.theme-auto .switcher-module_button__3QI6I + .switcher-module_button__3QI6I {\\n border-left-color: var(--light-gray-4); } }\\n html.theme-dark .switcher-module_button__3QI6I + .switcher-module_button__3QI6I {\\n border-left-color: var(--dark-gray-0); }\\n @media (prefers-color-scheme: dark) {\\n html.theme-auto .switcher-module_button__3QI6I + .switcher-module_button__3QI6I {\\n border-left-color: var(--dark-gray-0); } }\\n\";\nvar s$f = {\"container\":\"switcher-module_container__3pDYG\",\"button\":\"switcher-module_button__3QI6I\",\"soft\":\"switcher-module_soft__3PM3F\",\"bold\":\"switcher-module_bold__ABA9T\"};\nstyleInject(css_248z$j);\n\nvar getClassName = function (value, option) {\n var curr = value === option.value ? s$f.bold : s$f.soft;\n return s$f.button + \" \" + curr + \" \" + outline.outer;\n};\n// @TODO: not a11y ready\nvar Switcher = function (_a) {\n var value = _a.value, setValue = _a.setValue, options = _a.options;\n return (React.createElement(\"div\", { className: s$f.container }, options.map(function (option) { return (React.createElement(\"button\", { key: option.label, className: getClassName(value, option), onClick: function () { return setValue(option.value); } }, option.label)); })));\n};\n\nvar css_248z$k = \".tab-module_panel__3sCiY {\\n padding: 16px; }\\n\\n.tab-module_titles__VnYSE {\\n padding: 0 16px;\\n margin-bottom: -1px; }\\n\\n.tab-module_title__1HJRf {\\n padding: 8px 12px;\\n cursor: pointer;\\n border-style: solid;\\n border-width: 1px;\\n border-bottom: none;\\n transition: outline 0.2s; }\\n\\n.tab-module_nonactive__k-jrC {\\n border-color: transparent; }\\n\";\nvar s$g = {\"panel\":\"tab-module_panel__3sCiY\",\"titles\":\"tab-module_titles__VnYSE\",\"title\":\"tab-module_title__1HJRf\",\"nonactive\":\"tab-module_nonactive__k-jrC\"};\nstyleInject(css_248z$k);\n\nvar renderTab = function (state) { return function (tab) {\n var active = state[0], setActive = state[1];\n var activeCls = active === tab.title\n ? borderColor.weak + \" \" + background.primary\n : \"\" + s$g.nonactive;\n var className = [s$g.title, outline.outer, activeCls].join(\" \");\n var onClick = function () { return setActive(tab.title); };\n return (React.createElement(\"button\", __assign({ key: tab.title }, { className: className, onClick: onClick }), tab.title));\n}; };\nvar Tabs = function (_a) {\n var tabs = _a.tabs;\n if (tabs.length < 1)\n throw Error(\"Tabs must have at least one tab\");\n var activeState = React.useState(tabs[0].title);\n var active = activeState[0];\n var activeTab = tabs.find(function (tab) { return tab.title === active; });\n if (activeTab === undefined)\n throw Error(\"Tab \\\"\" + active + \"\\\" is not defined\");\n return (React.createElement(\"div\", null,\n React.createElement(\"div\", { className: s$g.titles }, tabs.map(renderTab(activeState))),\n React.createElement(DivLine, null),\n React.createElement(Background, { color: \"primary\" },\n React.createElement(\"div\", { className: s$g.panel }, activeTab.panel()))));\n};\n\nexport { Background, Button, ButtonMenu, Checkbox, DivEm, DivGrow, DivLine, DivPx, FormField, Highlight, Icon, Input, MutedDiv, MutedSpan, Paragraph, Pop, Radio, RangeInput, Select, Strong, Switcher, Tabs, background, borderColor, outline, scrollbar, text };\n","import tippy, {createSingleton} from 'tippy.js';\nimport TippyGenerator from './Tippy';\nimport useSingletonGenerator from './useSingleton';\nimport forwardRef from './forwardRef';\n\nconst useSingleton = useSingletonGenerator(createSingleton);\n\nexport default forwardRef(TippyGenerator(tippy));\nexport {useSingleton, tippy};\n","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\n var real = {\n exec: RegExp.prototype.exec,\n test: RegExp.prototype.test,\n match: String.prototype.match,\n replace: String.prototype.replace,\n split: String.prototype.split\n },\n compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n compliantLastIndexIncrement = function () {\n var x = /^/g;\n real.test.call(x, \"\");\n return !x.lastIndex;\n }();\n\n if (compliantLastIndexIncrement && compliantExecNpcg)\n return;\n RegExp.prototype.exec = function (str) {\n var match = real.exec.apply(this, arguments),\n name, r2;\n if ( typeof(str) == 'string' && match) {\n if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n real.replace.call(str.slice(match.index), r2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined)\n match[i] = undefined;\n }\n });\n }\n if (this._xregexp && this._xregexp.captureNames) {\n for (var i = 1; i < match.length; i++) {\n name = this._xregexp.captureNames[i - 1];\n if (name)\n match[name] = match[i];\n }\n }\n if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n this.lastIndex--;\n }\n return match;\n };\n if (!compliantLastIndexIncrement) {\n RegExp.prototype.test = function (str) {\n var match = real.exec.call(this, str);\n if (match && this.global && !match[0].length && (this.lastIndex > match.index))\n this.lastIndex--;\n return !!match;\n };\n }\n\n function getNativeFlags (regex) {\n return (regex.global ? \"g\" : \"\") +\n (regex.ignoreCase ? \"i\" : \"\") +\n (regex.multiline ? \"m\" : \"\") +\n (regex.extended ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n (regex.sticky ? \"y\" : \"\");\n }\n\n function indexOf (array, item, from) {\n if (Array.prototype.indexOf) // Use the native array method if available\n return array.indexOf(item, from);\n for (var i = from || 0; i < array.length; i++) {\n if (array[i] === item)\n return i;\n }\n return -1;\n }\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) { // .length is 1\n var target = this;\n if (typeof target != \"function\") {\n throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n }\n var args = slice.call(arguments, 1); // for normal call\n var bound = function () {\n\n if (this instanceof bound) {\n\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n\n }\n\n };\n if(target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n return bound;\n };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n if(function() { // test IE < 9 to splice bug - see issue #138\n function makeArray(l) {\n var a = new Array(l+2);\n a[0] = a[1] = 0;\n return a;\n }\n var array = [], lengthBefore;\n \n array.splice.apply(array, makeArray(20));\n array.splice.apply(array, makeArray(26));\n\n lengthBefore = array.length; //46\n array.splice(5, 0, \"XXX\"); // add one element\n\n lengthBefore + 1 == array.length\n\n if (lengthBefore + 1 == array.length) {\n return true;// has right splice implementation without bugs\n }\n }()) {//IE 6/7\n var array_splice = Array.prototype.splice;\n Array.prototype.splice = function(start, deleteCount) {\n if (!arguments.length) {\n return [];\n } else {\n return array_splice.apply(this, [\n start === void 0 ? 0 : start,\n deleteCount === void 0 ? (this.length - start) : deleteCount\n ].concat(slice.call(arguments, 2)))\n }\n };\n } else {//IE8\n Array.prototype.splice = function(pos, removeCount){\n var length = this.length;\n if (pos > 0) {\n if (pos > length)\n pos = length;\n } else if (pos == void 0) {\n pos = 0;\n } else if (pos < 0) {\n pos = Math.max(length + pos, 0);\n }\n\n if (!(pos+removeCount < length))\n removeCount = length - pos;\n\n var removed = this.slice(pos, pos+removeCount);\n var insert = slice.call(arguments, 2);\n var add = insert.length; \n if (pos === length) {\n if (add) {\n this.push.apply(this, insert);\n }\n } else {\n var remove = Math.min(removeCount, length - pos);\n var tailOldPos = pos + remove;\n var tailNewPos = tailOldPos + add - remove;\n var tailCount = length - tailOldPos;\n var lengthAfterRemove = length - remove;\n\n if (tailNewPos < tailOldPos) { // case A\n for (var i = 0; i < tailCount; ++i) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } else if (tailNewPos > tailOldPos) { // case B\n for (i = tailCount; i--; ) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } // else, add == remove (nothing to do)\n\n if (add && pos === lengthAfterRemove) {\n this.length = lengthAfterRemove; // truncate array\n this.push.apply(this, insert);\n } else {\n this.length = lengthAfterRemove + add; // reserves space\n for (i = 0; i < add; ++i) {\n this[pos+i] = insert[i];\n }\n }\n }\n return removed;\n };\n }\n}\nif (!Array.isArray) {\n Array.isArray = function isArray(obj) {\n return _toString(obj) == \"[object Array]\";\n };\n}\nvar boxedString = Object(\"a\"),\n splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n fun.call(thisp, self[i], i, object);\n }\n }\n };\n}\nif (!Array.prototype.map) {\n Array.prototype.map = function map(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n result = Array(length),\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self)\n result[i] = fun.call(thisp, self[i], i, object);\n }\n return result;\n };\n}\nif (!Array.prototype.filter) {\n Array.prototype.filter = function filter(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n result = [],\n value,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n if (fun.call(thisp, value, i, object)) {\n result.push(value);\n }\n }\n }\n return result;\n };\n}\nif (!Array.prototype.every) {\n Array.prototype.every = function every(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !fun.call(thisp, self[i], i, object)) {\n return false;\n }\n }\n return true;\n };\n}\nif (!Array.prototype.some) {\n Array.prototype.some = function some(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && fun.call(thisp, self[i], i, object)) {\n return true;\n }\n }\n return false;\n };\n}\nif (!Array.prototype.reduce) {\n Array.prototype.reduce = function reduce(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n\n var i = 0;\n var result;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n if (++i >= length) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n }\n\n return result;\n };\n}\nif (!Array.prototype.reduceRight) {\n Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n\n var result, i = length - 1;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n if (--i < 0) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n } while (true);\n }\n\n do {\n if (i in this) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n var self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = 0;\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n i = i >= 0 ? i : Math.max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n return -1;\n };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n var self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n var i = length - 1;\n if (arguments.length > 1) {\n i = Math.min(i, toInteger(arguments[1]));\n }\n i = i >= 0 ? i : length - Math.abs(i);\n for (; i >= 0; i--) {\n if (i in self && sought === self[i]) {\n return i;\n }\n }\n return -1;\n };\n}\nif (!Object.getPrototypeOf) {\n Object.getPrototypeOf = function getPrototypeOf(object) {\n return object.__proto__ || (\n object.constructor ?\n object.constructor.prototype :\n prototypeOfObject\n );\n };\n}\nif (!Object.getOwnPropertyDescriptor) {\n var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n \"non-object: \";\n Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT + object);\n if (!owns(object, property))\n return;\n\n var descriptor, getter, setter;\n descriptor = { enumerable: true, configurable: true };\n if (supportsAccessors) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n\n var getter = lookupGetter(object, property);\n var setter = lookupSetter(object, property);\n object.__proto__ = prototype;\n\n if (getter || setter) {\n if (getter) descriptor.get = getter;\n if (setter) descriptor.set = setter;\n return descriptor;\n }\n }\n descriptor.value = object[property];\n return descriptor;\n };\n}\nif (!Object.getOwnPropertyNames) {\n Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n return Object.keys(object);\n };\n}\nif (!Object.create) {\n var createEmpty;\n if (Object.prototype.__proto__ === null) {\n createEmpty = function () {\n return { \"__proto__\": null };\n };\n } else {\n createEmpty = function () {\n var empty = {};\n for (var i in empty)\n empty[i] = null;\n empty.constructor =\n empty.hasOwnProperty =\n empty.propertyIsEnumerable =\n empty.isPrototypeOf =\n empty.toLocaleString =\n empty.toString =\n empty.valueOf =\n empty.__proto__ = null;\n return empty;\n }\n }\n\n Object.create = function create(prototype, properties) {\n var object;\n if (prototype === null) {\n object = createEmpty();\n } else {\n if (typeof prototype != \"object\")\n throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n var Type = function () {};\n Type.prototype = prototype;\n object = new Type();\n object.__proto__ = prototype;\n }\n if (properties !== void 0)\n Object.defineProperties(object, properties);\n return object;\n };\n}\n\nfunction doesDefinePropertyWork(object) {\n try {\n Object.defineProperty(object, \"sentinel\", {});\n return \"sentinel\" in object;\n } catch (exception) {\n }\n}\nif (Object.defineProperty) {\n var definePropertyWorksOnObject = doesDefinePropertyWork({});\n var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n doesDefinePropertyWork(document.createElement(\"div\"));\n if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n var definePropertyFallback = Object.defineProperty;\n }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n \"on this javascript engine\";\n\n Object.defineProperty = function defineProperty(object, property, descriptor) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n if (definePropertyFallback) {\n try {\n return definePropertyFallback.call(Object, object, property, descriptor);\n } catch (exception) {\n }\n }\n if (owns(descriptor, \"value\")) {\n\n if (supportsAccessors && (lookupGetter(object, property) ||\n lookupSetter(object, property)))\n {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n delete object[property];\n object[property] = descriptor.value;\n object.__proto__ = prototype;\n } else {\n object[property] = descriptor.value;\n }\n } else {\n if (!supportsAccessors)\n throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n if (owns(descriptor, \"get\"))\n defineGetter(object, property, descriptor.get);\n if (owns(descriptor, \"set\"))\n defineSetter(object, property, descriptor.set);\n }\n\n return object;\n };\n}\nif (!Object.defineProperties) {\n Object.defineProperties = function defineProperties(object, properties) {\n for (var property in properties) {\n if (owns(properties, property))\n Object.defineProperty(object, property, properties[property]);\n }\n return object;\n };\n}\nif (!Object.seal) {\n Object.seal = function seal(object) {\n return object;\n };\n}\nif (!Object.freeze) {\n Object.freeze = function freeze(object) {\n return object;\n };\n}\ntry {\n Object.freeze(function () {});\n} catch (exception) {\n Object.freeze = (function freeze(freezeObject) {\n return function freeze(object) {\n if (typeof object == \"function\") {\n return object;\n } else {\n return freezeObject(object);\n }\n };\n })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n Object.preventExtensions = function preventExtensions(object) {\n return object;\n };\n}\nif (!Object.isSealed) {\n Object.isSealed = function isSealed(object) {\n return false;\n };\n}\nif (!Object.isFrozen) {\n Object.isFrozen = function isFrozen(object) {\n return false;\n };\n}\nif (!Object.isExtensible) {\n Object.isExtensible = function isExtensible(object) {\n if (Object(object) === object) {\n throw new TypeError(); // TODO message\n }\n var name = '';\n while (owns(object, name)) {\n name += '?';\n }\n object[name] = true;\n var returnValue = owns(object, name);\n delete object[name];\n return returnValue;\n };\n}\nif (!Object.keys) {\n var hasDontEnumBug = true,\n dontEnums = [\n \"toString\",\n \"toLocaleString\",\n \"valueOf\",\n \"hasOwnProperty\",\n \"isPrototypeOf\",\n \"propertyIsEnumerable\",\n \"constructor\"\n ],\n dontEnumsLength = dontEnums.length;\n\n for (var key in {\"toString\": null}) {\n hasDontEnumBug = false;\n }\n\n Object.keys = function keys(object) {\n\n if (\n (typeof object != \"object\" && typeof object != \"function\") ||\n object === null\n ) {\n throw new TypeError(\"Object.keys called on a non-object\");\n }\n\n var keys = [];\n for (var name in object) {\n if (owns(object, name)) {\n keys.push(name);\n }\n }\n\n if (hasDontEnumBug) {\n for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n var dontEnum = dontEnums[i];\n if (owns(object, dontEnum)) {\n keys.push(dontEnum);\n }\n }\n }\n return keys;\n };\n\n}\nif (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u2000\\u2001\\u2002\\u2003\" +\n \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n \"\\u2029\\uFEFF\";\nif (!String.prototype.trim) {\n ws = \"[\" + ws + \"]\";\n var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n trimEndRegexp = new RegExp(ws + ws + \"*$\");\n String.prototype.trim = function trim() {\n return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n };\n}\n\nfunction toInteger(n) {\n n = +n;\n if (n !== n) { // isNaN\n n = 0;\n } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n}\n\nfunction isPrimitive(input) {\n var type = typeof input;\n return (\n input === null ||\n type === \"undefined\" ||\n type === \"boolean\" ||\n type === \"number\" ||\n type === \"string\"\n );\n}\n\nfunction toPrimitive(input) {\n var val, valueOf, toString;\n if (isPrimitive(input)) {\n return input;\n }\n valueOf = input.valueOf;\n if (typeof valueOf === \"function\") {\n val = valueOf.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n toString = input.toString;\n if (typeof toString === \"function\") {\n val = toString.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n throw new TypeError();\n}\nvar toObject = function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \"+o+\" to object\");\n }\n return Object(o);\n};\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./regexp\");\nrequire(\"./es5-shim\");\nif (typeof Element != \"undefined\" && !Element.prototype.remove) {\n Object.defineProperty(Element.prototype, \"remove\", {\n enumerable: false,\n writable: true,\n configurable: true,\n value: function() { this.parentNode && this.parentNode.removeChild(this); }\n });\n}\n\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\n\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"./useragent\"); \nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n \n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n \n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function(n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n } else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n } else if (n === \"ref\") {\n if (refs) refs[val] = el;\n } else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\n\nexports.getDocumentHead = function(doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\n\nexports.removeChildren = function(element) {\n element.innerHTML = \"\";\n};\n\nexports.createTextNode = function(textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\n\nexports.createFragment = function(element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\n\nexports.hasCssClass = function(el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function(node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n};\n\nexports.hasCssString = function(id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length)\n if (sheets[index++].id === id)\n return true;\n }\n};\n\nexports.importCssString = function importCssString(cssText, id, target) {\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n } else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n \n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n \n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n \n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n};\n\nexports.importCssStylsheet = function(uri, doc) {\n exports.buildDom([\"link\", {rel: \"stylesheet\", href: uri}], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function(document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n\n outer.appendChild(inner);\n\n var body = document.documentElement;\n body.appendChild(outer);\n\n var noScrollbar = inner.offsetWidth;\n\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n\n return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n exports.importCssString = function() {};\n}\n\nexports.computedStyle = function(element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\n\nexports.setStyle = function(styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\n\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\n\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\n\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function(element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) +\"px)\";\n };\n} else {\n exports.translate = function(element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\n\nexports.mixin = function(obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\n\nexports.implement = function(proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./oop\");\nvar Keys = (function() {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8, \n \"control\": 1\n },\n\n FUNCTION_KEYS : {\n 8 : \"Backspace\",\n 9 : \"Tab\",\n 13 : \"Return\",\n 19 : \"Pause\",\n 27 : \"Esc\",\n 32 : \"Space\",\n 33 : \"PageUp\",\n 34 : \"PageDown\",\n 35 : \"End\",\n 36 : \"Home\",\n 37 : \"Left\",\n 38 : \"Up\",\n 39 : \"Right\",\n 40 : \"Down\",\n 44 : \"Print\",\n 45 : \"Insert\",\n 46 : \"Delete\",\n 96 : \"Numpad0\",\n 97 : \"Numpad1\",\n 98 : \"Numpad2\",\n 99 : \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n \n (function() {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) { \n ret.KEY_MODS[i] = mods.filter(function(x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n\n return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function() {}, { \n get passive() { \n activeListenerOptions = {passive: false};\n }\n });\n } catch(e) {}\n}\n\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\n\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function() {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\n\nvar addListener = exports.addListener = function(elem, type, callback, destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\n\nvar removeListener = exports.removeListener = function(elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function(e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\n\nexports.stopPropagation = function(e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\n\nexports.preventDefault = function(e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function(e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n\n removeListener(document, \"mousemove\", eventHandler);\n removeListener(document, \"mouseup\", onMouseUp);\n removeListener(document, \"dragstart\", onMouseUp);\n }\n\n addListener(document, \"mousemove\", eventHandler);\n addListener(document, \"mouseup\", onMouseUp);\n addListener(document, \"dragstart\", onMouseUp);\n \n return onMouseUp;\n};\n\nexports.addMouseWheelListener = function(el, callback, destroyer) {\n if (\"onmousewheel\" in el) {\n addListener(el, \"mousewheel\", function(e) {\n var factor = 8;\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n callback(e);\n }, destroyer);\n } else if (\"onwheel\" in el) {\n addListener(el, \"wheel\", function(e) {\n var factor = 0.35;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n \n callback(e);\n }, destroyer);\n } else {\n addListener(el, \"DOMMouseScroll\", function(e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n callback(e);\n }, destroyer);\n }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer; \n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n } else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n \n e._clicks = clicks;\n\n eventHandler[callbackName](\"mousedown\", e);\n\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function(el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\n\nvar getModifierHash = function(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n};\n\nexports.getModifierString = function(e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n \n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n \n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n \n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n \n return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback, destroyer) {\n if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function(e) {\n lastKeyDownKeyCode = e.keyCode;\n }, destroyer);\n addListener(el, \"keypress\", function(e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n }, destroyer);\n } else {\n var lastDefaultPrevented = null;\n\n addListener(el, \"keydown\", function(e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n\n addListener(el, \"keypress\", function(e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n\n addListener(el, \"keyup\", function(e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function(callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n \n var listener = function(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n \n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\n\nexports.$idleBlocked = false;\nexports.onIdle = function(cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n } else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\n\nexports.$idleBlockId = null;\nexports.blockIdle = function(delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n \n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function() {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function(callback) {\n setTimeout(callback, 17);\n };\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n\n this.end = {\n row: endRow,\n column: endColumn\n };\n};\n\n(function() {\n this.isEqual = function(range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n this.toString = function() {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n\n this.contains = function(row, column) {\n return this.compare(row, column) == 0;\n };\n this.compareRange = function(range) {\n var cmp,\n end = range.end,\n start = range.start;\n\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n this.comparePoint = function(p) {\n return this.compare(p.row, p.column);\n };\n this.containsRange = function(range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n this.intersects = function(range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n this.isEnd = function(row, column) {\n return this.end.row == row && this.end.column == column;\n };\n this.isStart = function(row, column) {\n return this.start.row == row && this.start.column == column;\n };\n this.setStart = function(row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n this.setEnd = function(row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n this.inside = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideStart = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideEnd = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.compare = function(row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n\n if (row < this.start.row)\n return -1;\n\n if (row > this.end.row)\n return 1;\n\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n\n return 0;\n };\n this.compareStart = function(row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareEnd = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareInside = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.clipRows = function(firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = {row: lastRow + 1, column: 0};\n else if (this.end.row < firstRow)\n var end = {row: firstRow, column: 0};\n\n if (this.start.row > lastRow)\n var start = {row: lastRow + 1, column: 0};\n else if (this.start.row < firstRow)\n var start = {row: firstRow, column: 0};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n this.extend = function(row, column) {\n var cmp = this.compare(row, column);\n\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = {row: row, column: column};\n else\n var end = {row: row, column: column};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function() {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n this.isMultiLine = function() {\n return (this.start.row !== this.end.row);\n };\n this.clone = function() {\n return Range.fromPoints(this.start, this.end);\n };\n this.collapseRows = function() {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n this.toScreenRange = function(session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n\n return new Range(\n screenPosStart.row, screenPosStart.column,\n screenPosEnd.row, screenPosEnd.column\n );\n };\n this.moveBy = function(row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n\n if (count >>= 1)\n string += string;\n }\n return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\n\nexports.copyArray = function(array){\n var copy = [];\n for (var i=0, l=array.length; i Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function() {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\n\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\n\nvar TextInput = function(parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n \n if (!isMobile)\n text.style.fontSize = \"1px\";\n\n var commandMode = false;\n var ignoreFocusEvents = false;\n \n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n \n event.addListener(text, \"blur\", function(e) {\n if (ignoreFocusEvents) return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function(e) {\n if (ignoreFocusEvents) return;\n isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n } catch(e) {}\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(resetSelection);\n else\n resetSelection();\n }, host);\n this.$focusScroll = false;\n this.focus = function() {\n if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return text.focus({ preventScroll: true });\n\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n try {\n var isTransformed = text.getBoundingClientRect().top != 0;\n } catch(e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", true);\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode().host;\n else\n t = t.parentElement;\n }\n }\n text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function(p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function() {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function() {\n text.blur();\n };\n this.isFocused = function() {\n return isFocused;\n };\n \n host.on(\"beforeEndOperation\", function() {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (inComposition && isUserAction) {\n lastValue = text.value = \"\";\n onCompositionEnd();\n }\n resetSelection();\n });\n \n var resetSelection = isIOS\n ? function(value) {\n if (!isFocused || (copied && !value) || sendingText) return;\n if (!value) \n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != text.value)\n text.value = lastValue = newValue;\n \n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n\n if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n text.setSelectionRange(selectionStart, selectionEnd);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n : function() {\n if (inComposition || sendingText)\n return;\n if (!isFocused && !afterContextMenu)\n return;\n inComposition = true;\n \n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n\n if (host.session) {\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n selectionStart = range.start.column;\n selectionEnd = range.end.column;\n line = host.session.getLine(row);\n\n if (range.start.row != row) {\n var prevLine = host.session.getLine(row - 1);\n selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row != row) {\n var nextLine = host.session.getLine(row + 1);\n selectionEnd = range.end.row > row + 1 ? nextLine.length : selectionEnd;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n } else {\n line = \"\\n\";\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n\n var newValue = line + \"\\n\\n\";\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n if (\n lastSelectionEnd != selectionEnd \n || lastSelectionStart != selectionStart \n || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n } catch(e){}\n }\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n\n if (isFocused)\n host.onFocus();\n\n\n var isAllSelected = function(text) {\n return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n && text.value === lastValue && lastValue\n && text.selectionEnd !== lastSelectionEnd;\n };\n\n var onSelect = function(e) {\n if (inComposition)\n return;\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n \n var sendText = function(value, fromInput) {\n if (afterContextMenu)\n afterContextMenu = false;\n if (pasted) {\n resetSelection();\n if (value)\n host.onPaste(value);\n pasted = false;\n return \"\";\n } else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n \n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n \n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n \n var i = 0;\n while (extendLeft > 0 && lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i-1;\n restoreEnd -= i-1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n } \n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n sendingText = true;\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n } else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n sendingText = false;\n \n lastValue = value;\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n lastRestoreEnd = restoreEnd;\n return inserted;\n }\n };\n var onInput = function(e) {\n if (inComposition)\n return onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\") return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\") return host.execCommand(\"redo\");\n }\n var data = text.value;\n var inserted = sendText(data, true);\n if (\n data.length > MAX_LINE_LENGTH + 100 \n || valueResetRegex.test(inserted)\n || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd\n ) {\n resetSelection();\n }\n };\n \n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (isIOS) {\n resetSelection(data);\n copied = data;\n setTimeout(function () {\n copied = false;\n }, 10);\n }\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function(){\n copied = false;\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n \n var onCut = function(e) {\n doCopy(e, true);\n };\n \n var onCopy = function(e) {\n doCopy(e, false);\n };\n \n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host), host);\n\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n\n event.addListener(text, \"cut\", onCut, host);\n event.addListener(text, \"copy\", onCopy, host);\n event.addListener(text, \"paste\", onPaste, host);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function(e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n }, host);\n }\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) \n return;\n \n inComposition = {};\n\n if (commandMode)\n return;\n \n if (e.data)\n inComposition.useTextareaForIME = false;\n \n setTimeout(onCompositionUpdate, 0);\n host._signal(\"compositionStart\");\n host.on(\"mousedown\", cancelComposition);\n \n var range = host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n inComposition.markerRange = range;\n inComposition.selectionStart = lastSelectionStart;\n host.onCompositionStart(inComposition);\n \n if (inComposition.useTextareaForIME) {\n lastValue = text.value = \"\";\n lastSelectionStart = 0;\n lastSelectionEnd = 0;\n }\n else {\n if (text.msGetInputContext)\n inComposition.context = text.msGetInputContext();\n if (text.getInputContext)\n inComposition.context = text.getInputContext();\n }\n };\n\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n if (commandMode)\n return cancelComposition();\n \n if (inComposition.useTextareaForIME) {\n host.onCompositionUpdate(text.value);\n }\n else {\n var data = text.value;\n sendText(data);\n if (inComposition.markerRange) {\n if (inComposition.context) {\n inComposition.markerRange.start.column = inComposition.selectionStart\n = inComposition.context.compositionStartOffset;\n }\n inComposition.markerRange.end.column = inComposition.markerRange.start.column\n + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n }\n }\n };\n\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e) onInput();\n };\n \n\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n \n function onKeyup(e) {\n if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n if (!inComposition)\n lastValue = text.value;\n lastSelectionStart = lastSelectionEnd = -1;\n resetSelection();\n }\n syncComposition();\n }\n\n event.addListener(text, \"compositionstart\", onCompositionStart, host);\n event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n event.addListener(text, \"keyup\", onKeyup, host);\n event.addListener(text, \"keydown\", syncComposition, host);\n event.addListener(text, \"compositionend\", onCompositionEnd, host);\n\n this.getElement = function() {\n return text;\n };\n this.setCommandMode = function(value) {\n commandMode = value;\n text.readOnly = false;\n };\n \n this.setReadOnly = function(readOnly) {\n if (!commandMode)\n text.readOnly = readOnly;\n };\n\n this.setCopyWithEmptySelection = function(value) {\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection();\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n \n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n }; \n move(e);\n\n if (e.type != \"mousedown\")\n return;\n\n host.renderer.$isMousePressed = true;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n host.renderer.$isMousePressed = false;\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n\n var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu, host);\n event.addListener(text, \"mousedown\", function(e) {\n e.preventDefault();\n onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n event.addListener(text, \"contextmenu\", onContextMenu, host);\n \n if (isIOS)\n addIosSelectionHandler(parentNode, host, text);\n\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n \n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function(e) {\n if (document.activeElement !== text) return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed) return;\n\n if (copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n \n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n } else if (selectionStart == 1) {\n key = KEYS.home;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n } else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n } else if (\n selectionStart < lastSelectionStart\n || (\n selectionStart == lastSelectionStart \n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd\n )\n ) {\n key = KEYS.left;\n } else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n } else if (\n selectionEnd > lastSelectionEnd\n || (\n selectionEnd == lastSelectionEnd \n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd\n )\n ) {\n key = KEYS.right;\n }\n \n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function() {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n};\n\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function(_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n this.onMouseDown = function(ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function(pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent) return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n\n this.select = function() {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function(unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function() {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function() {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n\n this.onQuadClick = function(ev) {\n var editor = this.editor;\n\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function(ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n \n var editor = this.editor;\n \n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n \n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n \n var direction = Math.abs(vx / vy);\n \n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n \n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n \n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n if (cmp < 0)\n return {cursor: range.start, anchor: range.end};\n else\n return {cursor: range.end, anchor: range.start};\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n\n(function() {\n this.$init = function() {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n this.getElement = function() {\n return this.$element || this.$init();\n };\n this.setText = function(text) {\n this.getElement().textContent = text;\n };\n this.setHtml = function(html) {\n this.getElement().innerHTML = html;\n };\n this.setPosition = function(x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n this.setClassName = function(className) {\n dom.addCssClass(this.getElement(), className);\n };\n this.show = function(text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function() {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n this.getHeight = function() {\n return this.getElement().offsetHeight;\n };\n this.getWidth = function() {\n return this.getElement().offsetWidth;\n };\n \n this.destroy = function() {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\")\n return;\n\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n\n\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\n\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"
\");\n\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n\n event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n \n editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n this.setPosition = function(x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n \n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n\n this.$pos = null;\n this.$inSelection = null;\n \n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n\n(function() { \n \n this.stopPropagation = function() {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n \n this.preventDefault = function() {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n \n this.stop = function() {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function() {\n if (this.$pos)\n return this.$pos;\n \n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n this.inSelection = function() {\n if (this.$inSelection !== null)\n return this.$inSelection;\n \n var editor = this.editor;\n \n\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n\n return this.$inSelection;\n };\n this.getButton = function() {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function() {\n return this.domEvent.shiftKey;\n };\n \n this.getAccelKey = useragent.isMac\n ? function() { return this.domEvent.metaKey; }\n : function() { return this.domEvent.ctrlKey; };\n \n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n var editor = mouseHandler.editor;\n\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera)\n blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function(e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function(){\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n if (useragent.isOpera) {\n editor.container.appendChild(blankImage);\n blankImage.scrollTop = 0;\n }\n dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n if (useragent.isOpera) {\n editor.container.removeChild(blankImage);\n }\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function(e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function(e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function(e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {x: x, y: y};\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {row: cursor.row, column: cursor.column};\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function() {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function(type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var dropEffect = \"none\";\n\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n\n return dropEffect;\n }\n}\n\n(function() {\n\n this.dragWait = function() {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n\n this.dragWaitEnd = function() {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function(e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function(){\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function(e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function(e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\n\nexports.addTouchListeners = function(el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n \n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function() {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(\n dom.buildDom(isOpen ? [\"span\",\n !selected && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPallete\" }, \"Pallete\"]\n ] : [\"span\"]),\n contextMenu.firstChild\n );\n };\n var handleClick = function(e) {\n var action = e.target.getAttribute(\"action\");\n\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPallete\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function(e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function(e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!contextMenu) createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n contextMenu.style.right = \"10px\";\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n } else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function(e) {\n if (!pressed) return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n \n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n \n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n \n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n } else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n \n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var weightedDistance = function(x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n \n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n \n var diff1 = weightedDistance(\n e.clientX - rect.left - cursorPos.left,\n e.clientY - rect.top - cursorPos.top\n );\n var diff2 = weightedDistance(\n e.clientX - rect.left - anchorPos.left,\n e.clientY - rect.top - anchorPos.top\n );\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n \n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer) clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n } else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n } else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n } else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\") return;\n\n var touchObj = touches[0];\n\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY)) wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX)) wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function() {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01) vX = 0;\n if (Math.abs(vY) < 0.01) vY = 0;\n if (animationSteps < 20) vX = 0.9 * vX;\n if (animationSteps < 20) vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"./dom\");\n\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function(_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function(url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n\n if (typeof e != \"object\" || !e)\n e = {};\n\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n\n listeners = listeners.slice();\n for (var i=0; i 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = require(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n\n exports.$loading[moduleName].push(onLoad);\n\n if (exports.$loading[moduleName].length > 1)\n return;\n\n var afterLoad = function() {\n require([moduleName], function(module) {\n exports._emit(\"load.module\", {name: moduleName, module: module});\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function(onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\"))\n return afterLoad();\n \n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n};\n\nvar reportErrorIfPathIsNotConfigured = function() {\n if (\n !options.basePath && !options.workerPath \n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length\n ) {\n console.error(\n \"Unable to infer path to ace from script src,\",\n \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\n \"or with webpack use ace/webpack-resolver\"\n );\n reportErrorIfPathIsNotConfigured = function() {};\n }\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged);\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\t\t\t\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\t\t\t\t\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\t\t\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\t\n\tif (hi == 0) {\t\t\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\t\t\t\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\t\t\n\treturn ON;\t\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\n\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\t\t\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = []; \n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) \n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\t\t\t\t\n\tif (chars[0] === '\\u202B')\n\t\tlevels[0] = exports.RLE;\n\t\t\t\t\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\t\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = function(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n};\n\n(function() {\n this.isBidiRow = function(screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function(delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n } \n else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function() {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function() {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n\n prevIndex = currentIndex;\n splitIndex++;\n }\n } else {\n splitIndex = this.currentRow;\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function(docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n \n var isLastRow = (docRow === this.session.getLength() - 1),\n endOfLine = isLastRow ? this.EOF : this.EOL;\n\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n\n if(splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n if (splitIndex == splits.length)\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n } else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function(ch, i){\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n \n this.updateBidiMap = function() {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n } else {\n this.bidiMap = {};\n }\n };\n this.markAsDirty = function() {\n this.currentRow = null;\n };\n this.updateCharacterWidths = function(fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n\n this.currentRow = null;\n };\n\n this.setShowInvisibles = function(showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function(eolChar) {\n this.EOL = eolChar; \n };\n\n this.setContentWidth = function(width) {\n this.contentWidth = width;\n };\n\n this.isRtlLine = function(row) {\n if (this.$isRtl) return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir; \n };\n\n this.setRtlDirection = function(editor, isRtlDir) {\n var cursor = editor.getCursorPosition(); \n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({column: 0, row: row}, editor.session.$bidiHandler.RLE);\n }\n };\n this.getPosLeft = function(col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap),\n levels = this.bidiMap.bidiLevels, left = 0;\n\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n \n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n\n return left;\n };\n this.getSelections = function(startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0,\n selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false, isSelectedPrev = false, selectionStart = 0;\n \n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && (visIdx === levels.length)) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n\n if(this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n this.offsetToCol = function(posX) {\n if(this.isRtlDir)\n posX -= this.rtlLineOffset;\n\n var logicalIdx = 0, posX = Math.max(posX, 0),\n offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n \n while(posX > offset + charWidth/2) {\n offset += charWidth;\n if(visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n \n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)){\n if(posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n\n } else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)){\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n\n } else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))){\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n\n return (logicalIdx + this.wrapIndent);\n };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = function(session) {\n this.session = session;\n this.doc = session.getDocument();\n\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n\n var self = this;\n this.cursor.on(\"change\", function(e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n\n this.anchor.on(\"change\", function() {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.isEmpty = function() {\n return this.$isEmpty || (\n this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column\n );\n };\n this.isMultiLine = function() {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n this.getCursor = function() {\n return this.lead.getPosition();\n };\n this.setSelectionAnchor = function(row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n this.getAnchor = \n this.getSelectionAnchor = function() {\n if (this.$isEmpty)\n return this.getSelectionLead();\n \n return this.anchor.getPosition();\n };\n this.getSelectionLead = function() {\n return this.lead.getPosition();\n };\n this.isBackwards = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n this.getRange = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n this.clearSelection = function() {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function() {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n this.setRange =\n this.setSelectionRange = function(range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n\n this.$setSelection = function(anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n\n this.$moveSelection = function(mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n\n mover.call(this);\n };\n this.selectTo = function(row, column) {\n this.$moveSelection(function() {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function(pos) {\n this.$moveSelection(function() {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function(row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function(pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function() {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function() {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function() {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function() {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function() {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function() {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function() {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function() {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function() {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function() {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.getWordRange = function(row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n this.selectWord = function() {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function() {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function(row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n this.selectLine = function() {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function() {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function() {\n this.moveCursorBy(1, 0);\n };\n this.wouldMoveIntoSoftTab = function(cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length-1 == tabSize;\n };\n this.moveCursorLeft = function() {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n this.moveCursorRight = function() {\n var cursor = this.lead.getPosition(),\n fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n this.moveCursorLineStart = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(\n row, null, firstColumnPosition.row,\n firstColumnPosition.column\n );\n\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n this.moveCursorLineEnd = function() {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n this.moveCursorFileEnd = function() {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function() {\n this.moveCursorTo(0, 0);\n };\n this.moveCursorLongWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n this.moveCursorLongWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function(rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index ++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n\n return index;\n };\n\n this.moveCursorShortWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.moveCursorBy = function(rows, chars) {\n var screenPos = this.session.documentToScreenPosition(\n this.lead.row,\n this.lead.column\n );\n\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n \n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n \n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n \n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n \n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n this.moveCursorToPosition = function(position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.moveCursorTo = function(row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function() {\n this.lead.detach();\n this.anchor.detach();\n this.session = this.doc = null;\n };\n\n this.fromOrientedRange = function(range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function(range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n this.getRangeOfMovements = function(func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n } catch(e) {\n return Range.fromPoints(start, start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function() {\n if (this.rangeCount) {\n var data = this.ranges.map(function(r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n\n this.fromJSON = function(data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--; ) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n } else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function(data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--; ) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n this.states = rules;\n\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n var flag = \"g\";\n\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive)\n flag = \"gi\";\n if (rule.regex == null)\n continue;\n\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", { \n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n \n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n \n splitterRurles.forEach(function(rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n};\n\n(function() {\n this.$setMaxTokenCount = function(m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n \n this.$applyToken = function(str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{type: types, value: str}];\n\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n\n this.$arrayTokens = function(str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n\n this.removeCapturingGroups = function(src) {\n var r = src.replace(\n /\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!]|(\\()/g,\n function(x, y) {return y ? \"(?:\" : x;}\n );\n return r;\n };\n\n this.createSplitterRegexp = function(src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n m, esc, parenOpen, parenClose, square, index\n ) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index+1;\n lastCapture.stack = -1;\n }\n stack--;\n } else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n \n return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n };\n this.getLineTokens = function(line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else\n var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n\n var token = {type: null, value: \"\"};\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: skipped};\n }\n }\n\n for (var i = 0; i < match.length-2; i++) {\n if (match[i + 1] === undefined)\n continue;\n\n rule = state[mapping[i]];\n\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n \n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: value};\n }\n } else if (type) {\n if (token.type)\n tokens.push(token);\n token = {type: null, value: \"\"};\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n\n if (lastIndex == line.length)\n break;\n\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type)\n tokens.push(token);\n \n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens : tokens,\n state : stack.length ? stack : currentState\n };\n };\n \n this.reportError = config.reportError;\n \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n this.$rules = {\n \"start\" : [{\n token : \"empty_line\",\n regex : '^$'\n }, {\n defaultToken : \"text\"\n }]\n };\n};\n\n(function() {\n\n this.addRules = function(rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function() {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n } else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function() {\n return this.$embeds;\n };\n\n var pushState = function(currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function() {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (Array.isArray(includeName))\n toInsert = includeName.map(function(x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function(x) {return !x.next;});\n state.splice.apply(state, args);\n i--;\n }\n \n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(\n rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n );\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n Object.keys(map).forEach(function(className) {\n var a = map[className];\n if (ignoreCase)\n a = a.toLowerCase();\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--; )\n keywords[list[i]] = className;\n });\n if (Object.getPrototypeOf(keywords)) {\n keywords.__proto__ = null;\n }\n this.$keywordList = Object.keys(keywords);\n map = null;\n return ignoreCase\n ? function(value) {return keywords[value.toLowerCase()] || defaultToken; }\n : function(value) {return keywords[value] || defaultToken; };\n };\n\n this.getKeywords = function() {\n return this.$keywords;\n };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n this.$behaviours = {};\n};\n\n(function () {\n\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n \n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n \n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n \n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n \n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar TokenIterator = function(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n this.stepBackward = function() {\n this.$tokenIndex -= 1;\n \n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n \n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.stepForward = function() {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentTokenRow = function () {\n return this.$row;\n }; \n this.getCurrentTokenColumn = function() {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n \n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n \n return column; \n };\n this.getCurrentTokenPosition = function() {\n return {row: this.$row, column: this.getCurrentTokenColumn()};\n };\n this.getCurrentTokenRange = function() {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n \n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\nvar initContext = function(editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = {rangeCount: editor.multiSelect.rangeCount};\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\n\nvar CstyleBehaviour = function(options) {\n this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n\n this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n\n this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) \n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column-1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n \n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n \n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n \n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n } else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1,1]\n };\n }\n }\n });\n\n this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n\n};\n\n \nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar wordChars = [48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2];\n\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\n\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar config = require(\"../config\");\n\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n this.$defaultBehaviour = new CstyleBehaviour();\n\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n\n this.getTokenizer = function() {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function(state, session, startRow, endRow) {\n var doc = session.doc;\n\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function(line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n\n var uncomment = function(line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function(line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n \n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n else\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n var testRemove = function(line, i) {\n return regexpStart.test(line);\n };\n \n var shouldInsertSpace = function(line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n\n\n var minEmptyLength = Infinity;\n iter(function(line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function(state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function(state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n\n this.autoOutdent = function(state, doc, row) {\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function(session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function(scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function() {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\n }\n };\n\n this.$delegator = function(method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n \n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function(state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n \n this.getKeywords = function(append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n \n this.$createKeywordList = function() {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function(state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function(word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n \n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(\n row, endRow - row + 1,\n line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n );\n }\n break;\n }\n};\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n \n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function() {\n return this.document;\n };\n this.$insertRight = false;\n this.onChange = function(delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n\n if (delta.start.row > this.row)\n return;\n \n var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n \n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n }\n \n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n \n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column)\n return;\n\n var old = {\n row: this.row,\n column: this.column\n };\n\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n this.detach = function() {\n this.document.off(\"change\", this.$onChange);\n };\n this.attach = function(doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0)\n pos.column = 0;\n\n return pos;\n };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({row: 0, column: 0}, textOrLines);\n } else {\n this.insert({row: 0, column:0}, textOrLines);\n }\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setValue = function(text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({row: 0, column: 0}, text);\n };\n this.getValue = function() {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function(row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function(text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function(text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineCharacter = function() {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function(newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function() {\n return this.$newLineMode;\n };\n this.isNewLine = function(text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function(row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function(firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function() {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function() {\n return this.$lines.length;\n };\n this.getTextRange = function(range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.getLinesForRange = function(range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n this.insertLines = function(row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n this.removeLines = function(firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n this.insertNewLine = function(position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function(position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n \n return this.insertMergedLines(position, this.$split(text));\n };\n this.insertInLine = function(position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n \n return this.clonePos(end);\n };\n \n this.clippedPos = function(row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {row: row, column: column};\n };\n \n this.clonePos = function(pos) {\n return {row: pos.row, column: pos.column};\n };\n \n this.pos = function(row, column) {\n return {row: row, column: column};\n };\n \n this.$clipPosition = function(position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n this.insertFullLines = function(row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({row: row, column: column}, lines);\n }; \n this.insertMergedLines = function(position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n \n return this.clonePos(end);\n };\n this.remove = function(range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n });\n return this.clonePos(start);\n };\n this.removeInLine = function(row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n }, true);\n \n return this.clonePos(start);\n };\n this.removeFullLines = function(firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\n var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\n var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\n var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n \n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n this.removeNewLine = function(row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n this.replace = function(range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n \n return end;\n };\n this.applyDeltas = function(deltas) {\n for (var i=0; i=0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.applyDelta = function(delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n \n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n \n this.$safeApplyDelta = function(delta) {\n var docLength = this.$lines.length;\n if (\n delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength\n ) {\n this.applyDelta(delta);\n }\n };\n \n this.$splitAndapplyLargeDelta = function(delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row; \n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n this.revertDelta = function(delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n this.indexToPosition = function(index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return {row: i, column: index + lines[i].length + newlineLength};\n }\n return {row: l-1, column: index + lines[l-1].length + newlineLength};\n };\n this.positionToIndex = function(pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n\n return index + pos.column;\n };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n\n var self = this;\n\n this.$worker = function() {\n if (!self.running) { return; }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n \n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines ++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n \n if (endLine == -1)\n endLine = currentLine;\n \n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n this.setTokenizer = function(tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n\n this.start(0);\n };\n this.setDocument = function(doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n\n this.stop();\n };\n this.fireUpdateEvent = function(firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", {data: data});\n };\n this.start = function(startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n \n this.scheduleStart = function() {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function(delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n this.stop();\n };\n this.stop = function() {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function(row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function(row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function(row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n\n(function() {\n this.MAX_RANGES = 500;\n \n this.setRegexp = function(regExp) {\n if (this.regExp+\"\" == regExp+\"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function(html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function(match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j --; ) {\n markerLayer.drawSingleLineMarker(\n html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [ folds ];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column,\n last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n\n this.folds.forEach(function(fold) {\n fold.setFoldLine(this);\n }, this);\n}\n\n(function() {\n this.shiftRow = function(shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function(fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function(fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function(a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n\n this.containsRow = function(row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function(callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp, stop, isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function(row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n\n this.addRemoveChars = function(row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row)\n {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n\n this.split = function(row, column) {\n var pos = this.getNextFoldTo(row, column);\n \n if (!pos || pos.kind == \"inside\")\n return null;\n \n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n \n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function(foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function() {\n var ret = [this.range.toString() + \": [\" ];\n\n this.folds.forEach(function(fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function(idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n this.ranges = [];\n this.$bias = 1;\n};\n\n(function() {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function(pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n\n return -i-1;\n }\n return -i - 1;\n };\n\n this.add = function(range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function(list) {\n var removed = [];\n for (var i = list.length; i--; ) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n\n this.substractPoint = function(pos) {\n var i = this.pointIndex(pos);\n\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.merge = function() {\n var removed = [];\n var list = this.ranges;\n \n list = list.sort(function(a, b) {\n return comparePoints(a.start, b.start);\n });\n \n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n \n this.ranges = list;\n\n return removed;\n };\n\n this.contains = function(row, column) {\n return this.pointIndex({row: row, column: column}) >= 0;\n };\n\n this.containsPoint = function(pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function(pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n\n\n this.clipRows = function(startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n\n var startIndex = this.pointIndex({row: startRow, column: 0});\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n\n this.removeAll = function() {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function(session) {\n if (this.session)\n this.detach();\n\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n\n this.session.on('change', this.onChange);\n };\n\n this.detach = function() {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function(delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n \n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n \n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n } else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n } else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n \n if (r.start.row > endRow)\n break;\n \n if (r.end.row < endRow\n && (\n startRow < r.end.row \n || startRow == r.end.row && start.column < r.end.column\n )\n ) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n \n if (r.start.row < endRow\n && (\n startRow < r.start.row \n || startRow == r.start.row && start.column < r.start.column\n )\n ) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\");\nvar Fold = exports.Fold = function(range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n this.toString = function() {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function(foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function(fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function() {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function(subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function(fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0) j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n\n return fold;\n };\n \n this.restoreRange = function(range) {\n return restoreRange(range, this.start);\n };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n this.getFoldAt = function(row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n } else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function(range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else\n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function(ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function(range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function() {\n var folds = [];\n var foldLines = this.$foldData;\n \n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n\n return folds;\n };\n this.getFoldStringAt = function(row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n\n this.getFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n\n this.getFoldedRowCount = function(first, last) {\n var foldData = this.$foldData, rowCount = last-first+1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last-start;\n else\n rowCount = 0; // in one fold\n }\n break;\n } else if (end >= first){\n if (start >= first) // fold inside range\n rowCount -= end-start;\n else\n rowCount -= end-first+1;\n }\n }\n return rowCount;\n };\n\n this.$addFoldLine = function(foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function(a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function(placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n \n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n \n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n folds.forEach(function(subFold) {\n fold.addSubFold(subFold);\n });\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n return fold;\n };\n\n this.addFolds = function(folds) {\n folds.forEach(function(fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function(fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else\n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else\n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else\n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else\n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n\n this.removeFolds = function(folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function(fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function(fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function(subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n }\n fold.subFolds = [];\n };\n\n this.expandFolds = function(folds) {\n folds.forEach(function(fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function(location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n expandInner = true;\n } else if (typeof location == \"number\")\n range = new Range(location, 0, location, this.getLine(location).length);\n else if (\"row\" in location)\n range = Range.fromPoints(location, location);\n else\n range = location;\n \n folds = this.getFoldsInRangeList(range);\n if (expandInner) {\n this.removeFolds(folds);\n } else {\n var subFolds = folds;\n while (subFolds.length) {\n this.expandFolds(subFolds);\n subFolds = this.getFoldsInRangeList(range);\n }\n }\n if (folds.length)\n return folds;\n };\n this.isRowFolded = function(docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(\n foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function() {\n var fd = [];\n fd = this.$foldData.map(function(foldLine) {\n var folds = foldLine.folds.map(function(fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n\n return fd;\n };\n\n this.toggleFold = function(tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1 ) {\n fold = folds[0];\n }\n }\n\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function(row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n iterator.stepForward();\n }\n \n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n iterator = new TokenIterator(this, row, column);\n \n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state))\n lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n } else\n token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function(startRow, endRow, depth) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow\n ) {\n row = range.end.row;\n try {\n var fold = this.addFold(\"...\", range);\n if (fold)\n fold.collapseChildren = depth;\n } catch(e) {}\n }\n }\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function(style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n \n if (this.$foldStyle == style)\n return;\n\n this.$foldStyle = style;\n \n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function(foldMode) {\n if (this.$foldMode == foldMode)\n return;\n \n this.$foldMode = foldMode;\n \n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n \n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n \n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n \n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function(row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n \n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n \n this.$toggleFoldWidget = function(row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n \n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) \n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n \n return range;\n };\n \n \n \n this.toggleFoldWidget = function(toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n \n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n \n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function(delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function(e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\n\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n this.findMatchingBracket = function(position, chr) {\n if (position.column == 0) return null;\n\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n if (charBeforeCursor == \"\") return null;\n\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n \n this.getBracketRange = function(pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n \n return range;\n };\n this.getMatchingBracketRanges = function(pos) {\n var line = this.getLine(pos.row);\n\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n }\n\n if (!match)\n return null;\n\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n\n return [startRange, endRange];\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n\n this.$findOpeningBracket = function(bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n \n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n \n while (true) {\n \n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n \n value = token.value;\n valueIndex = value.length - 1;\n }\n \n return null;\n };\n\n this.$findClosingBracket = function(bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n\n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n\n valueIndex = 0;\n }\n \n return null;\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function() {\n return this.join(\"\\n\");\n };\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setDocument = function(doc) {\n if (this.doc)\n this.doc.removeListener(\"change\", this.$onChange);\n\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n\n if (this.bgTokenizer)\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.resetCaches();\n };\n this.getDocument = function() {\n return this.doc;\n };\n this.$resetRowCache = function(docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function(cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n\n return low -1;\n };\n\n this.resetCaches = function() {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer)\n this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function(e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function(delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n \n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n this.setValue = function(text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue =\n this.toString = function() {\n return this.doc.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.getState = function(row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function(row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.getTokenAt = function(row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n this.setUndoManager = function(undoManager) {\n this.$undoManager = undoManager;\n \n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n \n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function() {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n } else {\n this.$syncInformUndoManager = function() {};\n }\n };\n this.markUndoGroup = function() {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n \n this.$defaultUndoManager = {\n undo: function() {},\n redo: function() {},\n hasUndo: function() {},\n hasRedo: function() {},\n reset: function() {},\n add: function() {},\n addSelection: function() {},\n startNewGroup: function() {},\n addSession: function() {}\n };\n this.getUndoManager = function() {\n return this.$undoManager || this.$defaultUndoManager;\n };\n this.getTabString = function() {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n this.setUseSoftTabs = function(val) {\n this.setOption(\"useSoftTabs\", val);\n };\n this.getUseSoftTabs = function() {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function(tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n this.getTabSize = function() {\n return this.$tabSize;\n };\n this.isTabStop = function(position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n this.getNavigateWithinSoftTabs = function() {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n this.setOverwrite = function(overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function() {\n return this.$overwrite;\n };\n this.toggleOverwrite = function() {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function(row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function(row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function() {\n return this.$breakpoints;\n };\n this.setBreakpoints = function(rows) {\n this.$breakpoints = [];\n for (var i=0; i 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n\n var start = column;\n if (start > 0) {\n do {\n start--;\n }\n while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n this.getAWordRange = function(row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n this.setNewLineMode = function(newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function() {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function() { return this.$useWorker; };\n this.onReloadTokenizer = function(e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = config.$modes;\n this.$mode = null;\n this.$modeId = null;\n this.setMode = function(mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function(m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function(mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode) \n return;\n \n var oldMode = this.$mode;\n this.$mode = mode;\n\n this.$stopWorker();\n\n if (this.$useWorker)\n this.$startWorker();\n\n var tokenizer = mode.getTokenizer();\n\n if(tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n var _self = this;\n this.bgTokenizer.on(\"update\", function(e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n \n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", {oldMode: oldMode, mode: mode});\n }\n };\n\n this.$stopWorker = function() {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function() {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n this.getMode = function() {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n this.setScrollTop = function(scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function() {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n this.setScrollLeft = function(scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function() {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function() {\n this.$computeWidth();\n if (this.lineWidgets) \n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n \n this.getLineWidgetMaxWidth = function() {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function(w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function(force) {\n if (this.$modified || force) {\n this.$modified = false;\n\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n this.getLine = function(row) {\n return this.doc.getLine(row);\n };\n this.getLines = function(firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function() {\n return this.doc.getLength();\n };\n this.getTextRange = function(range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function(position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function(range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function(firstRow, lastRow){\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.undoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n } else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n this.redoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n this.setUndoSelect = function(enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function(deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var range, point;\n\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start) continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n \n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n } else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n this.replace = function(range, text) {\n return this.doc.replace(range, text);\n };\n this.moveText = function(fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function(x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n this.indentRows = function(startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row=startRow; row<=endRow; row++)\n this.doc.insertInLine({row: row, column: 0}, indentString);\n };\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function(firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row-firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength()-1) return 0;\n var diff = row-lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function(x){\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n \n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow+diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n this.moveLinesUp = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n\n this.$clipRowToDocument = function(row) {\n return Math.max(0, Math.min(row, this.doc.getLength()-1));\n };\n\n this.$clipColumnToRow = function(row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n\n this.$clipPositionToDocument = function(row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len-1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function(range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(\n range.start.row,\n range.start.column\n );\n }\n\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(\n range.end.row,\n range.end.column\n );\n }\n return range;\n };\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min : null,\n max : null\n };\n this.setUseWrapMode = function(useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n this.getUseWrapMode = function() {\n return this.$useWrapMode;\n };\n this.setWrapLimitRange = function(min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = {min: $printMargin, max: $printMargin};\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n\n this.$constrainWrapLimit = function(wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n\n return wrapLimit;\n };\n this.getWrapLimit = function() {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function() {\n return {\n min : this.$wrapLimitRange.min,\n max : this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function(delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n \n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else\n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function(firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row ++;\n } else {\n tokens = [];\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(\n placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(\n lines[row].substring(lastColumn, column),\n tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this),\n foldLine.end.row,\n lines[foldLine.end.row].length + 1\n );\n\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n\n this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n\n var isCode = this.$wrapAsCode;\n\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2) len -= 1;\n }\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split --;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split --;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n this.$getDisplayTokens = function(str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n this.getRowLength = function(row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n \n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n this.getRowLineCount = function(row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function(screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n this.getScreenLastRowColumn = function(screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function(row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function(screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n\n\n this.screenToDocumentRow = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n\n this.screenToDocumentColumn = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return {row: 0, column: 0};\n\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row+1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if(splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n\n return {row: docRow, column: docColumn};\n };\n this.documentToScreenPosition = function(docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(docRow, docColumn);\n\n docRow = pos.row;\n docColumn = pos.column;\n\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd, row = 0;\n\n\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ?foldLine.start.row :Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow ++;\n screenRowOffset++;\n }\n textLine = textLine.substring(\n wrapRow[screenRowOffset - 1] || 0, textLine.length\n );\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n \n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n this.documentToScreenColumn = function(row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function(docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.getScreenLength = function() {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row :Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row ++;\n if (row > foldStart) {\n row = fold.end.row+1;\n fold = this.$foldData[i++];\n foldStart = fold ?fold.start.row :Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n\n return screenRows;\n };\n this.$setFontMetrics = function(fm) {\n if (!this.$enableVarChar) return;\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n \n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n \n return [screenColumn, column];\n };\n };\n \n this.destroy = function() {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n this.$stopWorker();\n this.removeAllListeners();\n this.selection.detach();\n };\n\n this.isFullWidth = isFullWidth;\n function isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n }\n\n}).call(EditSession.prototype);\n\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function(value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n }, \n wrapMethod: {\n set: function(val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function() {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true \n },\n firstLineNumber: {\n set: function() {this._signal(\"changeBreakpoint\");},\n initialValue: 1\n },\n useWorker: {\n set: function(useWorker) {\n this.$useWorker = useWorker;\n\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {initialValue: true},\n tabSize: {\n set: function(tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {initialValue: false},\n foldStyle: {\n set: function(val) {this.setFoldStyle(val);},\n handlesSet: true\n },\n overwrite: {\n set: function(val) {this._signal(\"changeOverwrite\");},\n initialValue: false\n },\n newLineMode: {\n set: function(val) {this.doc.setNewLineMode(val);},\n get: function() {return this.doc.getNewLineMode();},\n handlesSet: true\n },\n mode: {\n set: function(val) { this.setMode(val); },\n get: function() { return this.$modeId; },\n handlesSet: true\n }\n});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar Search = function() {\n this.$options = {};\n};\n\n(function() {\n this.set = function(options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function() {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function(options) {\n this.$options = options;\n };\n this.find = function(session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n\n var firstRange = null;\n iterator.forEach(function(sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)\n ) {\n firstRange = null;\n return false;\n }\n \n return true;\n });\n\n return firstRange;\n };\n this.findAll = function(session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n \n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n \n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex\n ) {\n continue;\n }\n ranges.push(prevRange = new Range(\n row, startIndex, row + len - 1, endIndex\n ));\n if (len > 2)\n row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n i++;\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n j--;\n \n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n this.replace = function(input, replacement) {\n var options = this.$options;\n\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n\n if (!re)\n return;\n\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n \n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--; ) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n \n return replacement;\n };\n\n this.$assembleRegExp = function(options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n\n var needle = options.needle;\n\n if (!options.needle)\n return options.re = false;\n\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch(e) {\n re = false;\n }\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function(needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++) try {\n re.push(new RegExp(parts[i], modifier));\n } catch(e) {\n return false;\n }\n return re;\n };\n\n this.$matchIterator = function(session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n \n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n \n if (backwards) {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n \n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function(row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row,last + length))\n return true;\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n return {forEach: forEach};\n };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n \n\n this.addCommand = function(command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n\n this.commands[command.name] = command;\n\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n\n this.removeCommand = function(command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function(key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n \n key.split(\"|\").forEach(function(keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function(keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n \n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position \n || (command.isDefault ? -100 : 0);\n }\n this._addCommandToBinding = function(keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n \n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function(commands) {\n commands && Object.keys(commands).forEach(function(name) {\n var command = commands[name];\n if (!command)\n return;\n \n if (typeof command === \"string\")\n return this.bindKey(command, name);\n\n if (typeof command === \"function\")\n command = { exec: command };\n\n if (typeof command !== \"object\")\n return;\n\n if (!command.name)\n command.name = name;\n\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function(commands) {\n Object.keys(commands).forEach(function(name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function(keyList) {\n Object.keys(keyList).forEach(function(key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function(command) {\n this.bindKey(command.bindKey, command);\n };\n this.parseKeys = function(keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n var key = parts.pop();\n\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return {key: key, hashId: -1};\n else if (parts.length == 1 && parts[0] == \"shift\")\n return {key: key.toUpperCase(), hashId: -1};\n\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return {key: key, hashId: hashId};\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n \n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {command: \"null\"};\n }\n }\n \n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return {command: command};\n };\n \n this.getStatusText = function(editor, data) {\n return data.$keyChain || \"\";\n };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function(e) {\n return e.command.exec(e.editor, e.args || {});\n });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.exec = function(command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--; ) {\n if (this.exec(command[i], editor, args)) return true;\n }\n return false;\n }\n\n if (typeof command === \"string\")\n command = this.commands[command];\n\n if (!command)\n return false;\n\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n\n var e = {editor: editor, command: command, args: args};\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function(editor) {\n if (this.$inReplay)\n return;\n\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n\n if (!this.macro.length)\n this.macro = this.oldMacro;\n\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function(e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function(editor) {\n if (this.$inReplay || !this.macro)\n return;\n\n if (this.recording)\n return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function(x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function(m) {\n return m.map(function(x){\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n return {win: win, mac: mac};\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function(module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n}, {\n name: \"goToNextError\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function(editor) {\n config.loadModule(\"./ext/error_marker\", function(module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"goToPreviousError\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function(editor) {\n config.loadModule(\"./ext/error_marker\", function(module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function(editor) { editor.selectAll(); },\n readOnly: true\n}, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function(editor) { editor.centerSelection(); },\n readOnly: true\n}, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function(editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n}, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function(editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function(editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleFoldWidget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleParentFoldWidget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function(editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function(editor) { \n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function(editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function(editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function(editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function(editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext(); \n },\n readOnly: true\n}, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function(editor) { \n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n}, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor);});\n },\n readOnly: true\n}, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function(editor) { editor.toggleOverwrite(); },\n readOnly: true\n}, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function(editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function(editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function(editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function(editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function(editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function(editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function(editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function(editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function(editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function(editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function(editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function(editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function(editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function(editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function(editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function(editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function(editor) { editor.selectPageDown(); },\n readOnly: true\n}, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function(editor) { editor.scrollPageDown(); },\n readOnly: true\n}, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function(editor) { editor.gotoPageDown(); },\n readOnly: true\n}, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function(editor) { editor.selectPageUp(); },\n readOnly: true\n}, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function(editor) { editor.scrollPageUp(); },\n readOnly: true\n}, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function(editor) { editor.gotoPageUp(); },\n readOnly: true\n}, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function(editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n}, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function(editor) { editor.commands.replay(editor); },\n readOnly: true\n}, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function(editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function(editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function(editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function() {},\n passEvent: true,\n readOnly: true\n}, {\n name: \"copy\",\n description: \"Copy\",\n exec: function(editor) {\n },\n readOnly: true\n},\n{\n name: \"cut\",\n description: \"Cut\",\n exec: function(editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"paste\",\n description: \"Paste\",\n exec: function(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n}, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function(editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function(editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function(editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function(editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function(editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function(editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function(editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true);});\n }\n}, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function(editor) { editor.undo(); }\n}, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function(editor) { editor.redo(); }\n}, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function(editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function(editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function(editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function(editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function(editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\n \"Shift-Backspace|Backspace\",\n \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n ),\n exec: function(editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function(editor) { \n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function(editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function(editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function(editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function(editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function(editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function(editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function(editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function(editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function(editor) { editor.transposeLetters(); },\n multiSelectAction: function(editor) {editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function(editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function(editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function(editor) { editor.autoIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"animate\"\n}, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function(editor) {\n var range = editor.selection.getRange();\n\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n}, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for(var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n}, {\n name: \"addLineAfter\",\n exec: function(editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"addLineBefore\",\n exec: function(editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0) editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"openCommandPallete\",\n description: \"Open command pallete\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function(editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n}, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n}];\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\n\nvar clipboard = require(\"./clipboard\");\nvar Editor = function(renderer, session, options) {\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n\n this.$search = new Search().set({\n wrap: true\n });\n\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n\n this.$initOperationListeners();\n \n this._$emitInputEvent = lang.delayedCall(function() {\n this._signal(\"input\", {});\n if (this.session && this.session.bgTokenizer)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n \n this.on(\"change\", function(_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n};\n\nEditor.$uid = 0;\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function() {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n this.on(\"change\", function() {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.docChanged = true;\n }.bind(this), true);\n \n this.on(\"changeSelection\", function() {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n this.startOperation = function(commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n\n this.endOperation = function(e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session)\n return (this.curOp = null);\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n return;\n this._signal(\"beforeEndOperation\");\n if (!this.curOp) return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n this.$historyTracker = function(e) {\n if (!this.$mergeUndoDeltas)\n return;\n\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (\n this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000\n ) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n this.setKeyboardHandler = function(keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n this.getKeyboardHandler = function() {\n return this.keyBinding.getKeyboardHandler();\n };\n this.setSession = function(session) {\n if (this.session == session)\n return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n \n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n \n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n \n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n \n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n \n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n \n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n \n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n \n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n \n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n \n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n \n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n \n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n \n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n \n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n \n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n \n this.onChangeMode();\n \n this.onCursorChange();\n \n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n \n this.curOp = null;\n \n oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n session && session._signal(\"changeEditor\", {editor: this});\n \n if (session && session.bgTokenizer)\n session.bgTokenizer.scheduleStart();\n };\n this.getSession = function() {\n return this.session;\n };\n this.setValue = function(val, cursorPos) {\n this.session.doc.setValue(val);\n\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n\n return val;\n };\n this.getValue = function() {\n return this.session.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.resize = function(force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function(theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function() {\n return this.renderer.getTheme();\n };\n this.setStyle = function(style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function(style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n this.setFontSize = function(size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function() {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function(id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var ranges = session.getMatchingBracketRanges(self.getCursorPosition());\n if (!ranges && session.$mode.getMatching) \n ranges = session.$mode.getMatching(self.session);\n if (!ranges)\n return;\n\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n } else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function(range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n }, 50);\n };\n this.$highlightTags = function() {\n if (this.$highlightTagPending)\n return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function() {\n self.$highlightTagPending = false;\n \n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n \n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n \n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n if (token.type.indexOf(\"tag-open\") != -1) {\n token = iterator.stepForward();\n if (!token)\n return;\n }\n \n var tag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n \n if (prevToken.value == '<'){\n do {\n prevToken = token;\n token = iterator.stepForward();\n \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<'){\n depth++;\n } else if (prevToken.value === '= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === ' 1))\n highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function(e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function() {\n var session = this.session;\n\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n \n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n \n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n \n return re;\n };\n\n\n this.onChangeFrontMarker = function() {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function() {\n this.renderer.updateBackMarkers();\n };\n\n\n this.onChangeBreakpoint = function() {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function() {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n\n this.onChangeMode = function(e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n\n\n this.onChangeWrapLimit = function() {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function() {\n this.renderer.onResize(true);\n };\n\n\n this.onChangeFold = function() {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function() {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.getCopyText = function() {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine= false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = {text: text};\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : \"\";\n return e.text;\n };\n this.onCopy = function() {\n this.commands.exec(\"copy\", this);\n };\n this.onCut = function() {\n this.commands.exec(\"cut\", this);\n };\n this.onPaste = function(text, event) {\n var e = {text: text, event: event};\n this.commands.exec(\"paste\", this, e);\n };\n \n this.$handlePaste = function(e) {\n if (typeof e == \"string\") \n e = {text: e};\n this._signal(\"paste\", e);\n var text = e.text;\n\n var lineMode = text == clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n } else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function(range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n \n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n \n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n \n session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function(command, args) {\n return this.commands.exec(command, this, args);\n };\n this.insert = function(text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n\n }\n }\n \n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(\n new Range(cursor.row, start + transform.selection[0],\n cursor.row, start + transform.selection[1]));\n } else { // Transform relative to the current row.\n this.selection.setSelectionRange(\n new Range(cursor.row + transform.selection[0],\n transform.selection[1],\n cursor.row + transform.selection[2],\n transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n session.insert({row: cursor.row+1, column: 0}, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n\n this.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n\n var startRow, endRow;\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n } else {\n var selectedRange = this.getSelectionRange();\n\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\n\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n\n line = session.getLine(row);\n currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({row: row, column: 0}, lineIndent);\n }\n }\n\n mode.autoOutdent(prevLineState, session, row);\n }\n };\n\n\n this.onTextInput = function(text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n \n this.startOperation({command: { name: \"insertstring\" }});\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n \n this.applyComposition = function(text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n this.setOverwrite = function(overwrite) {\n this.session.setOverwrite(overwrite);\n };\n this.getOverwrite = function() {\n return this.session.getOverwrite();\n };\n this.toggleOverwrite = function() {\n this.session.toggleOverwrite();\n };\n this.setScrollSpeed = function(speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n this.getScrollSpeed = function() {\n return this.getOption(\"scrollSpeed\");\n };\n this.setDragDelay = function(dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n this.getDragDelay = function() {\n return this.getOption(\"dragDelay\");\n };\n this.setSelectionStyle = function(val) {\n this.setOption(\"selectionStyle\", val);\n };\n this.getSelectionStyle = function() {\n return this.getOption(\"selectionStyle\");\n };\n this.setHighlightActiveLine = function(shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n this.getHighlightActiveLine = function() {\n return this.getOption(\"highlightActiveLine\");\n };\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function(shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function() {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function(shouldAnimate){\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function(){\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function() {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function(readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function() {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function(show) {\n this.setOption(\"showFoldWidgets\", show);\n\n };\n this.getShowFoldWidgets = function() {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function() {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.remove = function(dir) {\n if (this.selection.isEmpty()){\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineStart = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineEnd = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.splitLine = function() {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n this.transposeLetters = function() {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column-1);\n range = new Range(cursor.row, column-1, cursor.row, column+1);\n }\n else {\n swap = line.charAt(column-1) + line.charAt(column-2);\n range = new Range(cursor.row, column-2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n this.toLowerCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.toUpperCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.indent = function() {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n \n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n this.blockIndent = function() {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function() {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.sortLines = function() {\n var rows = this.$getSelectedRows();\n var session = this.session;\n\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n\n lines.sort(function(a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i-rows.first]);\n }\n };\n this.toggleCommentLines = function() {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function() {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n this.getNumberAt = function(row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if(m.index <= column && m.index+m[0].length >= column){\n var number = {\n value: m[0],\n start: m.index,\n end: m.index+m[0].length\n };\n return number;\n }\n }\n return null;\n };\n this.modifyNumber = function(amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column-1, row, column);\n\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n\n if(fp !== nr.end && column < fp){\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n }\n } else {\n this.toggleWord();\n }\n };\n\n this.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n ];\n\n this.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0) delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n } else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n this.removeLines = function() {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function() {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function() {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function() {\n this.$moveLines(-1, false);\n };\n this.moveText = function(range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function() {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function() {\n this.$moveLines(1, true);\n };\n this.$moveLines = function(dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n \n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n \n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n this.$getSelectedRows = function(range) {\n range = (range || this.getSelectionRange()).collapseRows();\n\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function(compositionState) {\n this.renderer.showComposition(compositionState);\n };\n\n this.onCompositionUpdate = function(text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function() {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function() {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function() {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function(row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function(row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function() {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function(dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n\n if (select === true) {\n this.selection.$moveSelection(function(){\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n\n var scrollTop = renderer.scrollTop;\n\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n\n renderer.animateScrolling(scrollTop);\n };\n this.selectPageDown = function() {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function() {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function() {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function() {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function() {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function() {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function(row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function(line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.centerSelection = function() {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n this.getCursorPosition = function() {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function() {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function() {\n return this.selection.getRange();\n };\n this.selectAll = function() {\n this.selection.selectAll();\n };\n this.clearSelection = function() {\n this.selection.clearSelection();\n };\n this.moveCursorTo = function(row, column) {\n this.selection.moveCursorTo(row, column);\n };\n this.moveCursorToPosition = function(pos) {\n this.selection.moveCursorToPosition(pos);\n };\n this.jumpToMatching = function(select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n \n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n \n if (prevToken.value === '<') {\n depth[token.value]++;\n }\n else if (prevToken.value === '= 0; --i) {\n if(this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n\n return replaced;\n };\n\n this.$tryReplace = function(range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n this.getLastSearchOptions = function() {\n return this.$search.getOptions();\n };\n this.find = function(needle, options, animate) {\n if (!options)\n options = {};\n\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({needle: needle});\n }\n\n this.$search.set(options);\n if (!options.start)\n this.$search.set({start: range});\n\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n this.findNext = function(options, animate) {\n this.find({skipCurrent: true, backwards: false}, options, animate);\n };\n this.findPrevious = function(options, animate) {\n this.find(options, {skipCurrent: true, backwards: true}, animate);\n };\n\n this.revealRange = function(range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n this.undo = function() {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function() {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.destroy = function() {\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function(el) {\n el.destroy();\n });\n this.$toDestroy = null;\n }\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n this.setAutoScrollEditorIntoView = function(enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function() {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function() {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())\n ) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function(enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n\n this.$resetCursorStyle = function() {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n this.prompt = function(message, options, callback) {\n var editor = this;\n config.loadModule(\"./ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function(style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", {data: style});\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function() {this.$updateHighlightActiveLine();},\n initialValue: true\n },\n highlightSelectedWord: {\n set: function(shouldHighlight) {this.$onSelectionChange();},\n initialValue: true\n },\n readOnly: {\n set: function(readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle(); \n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function(value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function(val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {initialValue: true},\n wrapBehavioursEnabled: {initialValue: true},\n enableAutoIndent: {initialValue: true},\n autoScrollEditorIntoView: {\n set: function(val) {this.setAutoScrollEditorIntoView(val);}\n },\n keyboardHandler: {\n set: function(val) { this.setKeyboardHandler(val); },\n get: function() { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function(val) { this.session.setValue(val); },\n get: function() { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function(val) { this.setSession(val); },\n get: function() { return this.session; },\n handlesSet: true,\n hidden: true\n },\n \n showLineNumbers: {\n set: function(show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function(value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function(message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function() {\n var value = this.session && (this.renderer.$composition || this.getValue());\n if (value && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n } else if (!value && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n } else if (!value && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\n\n\nvar relativeNumberRenderer = {\n getText: function(session, row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function(session, lastLineNumber, config) {\n return Math.max(\n lastLineNumber.toString().length,\n (config.lastRow + 1).toString().length,\n 2\n ) * config.characterWidth;\n },\n update: function(e, editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function(editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function(editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\n\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.reset();\n};\n\n(function() {\n \n this.addSession = function(session) {\n this.$session = session;\n };\n this.add = function(delta, allowMerge, session) {\n if (this.$fromUndo) return;\n if (delta == this.$lastDelta) return;\n if (!this.$keepRedoStack) this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n \n this.addSelection = function(selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n \n this.startNewGroup = function() {\n this.lastDeltas = null;\n return this.$rev;\n };\n \n this.markIgnored = function(from, to) {\n if (to == null) to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n \n this.getSelection = function(rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n \n this.getRevision = function() {\n return this.$rev;\n };\n \n this.getDeltas = function(from, to) {\n if (to == null) to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i+1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n \n this.getChangedRanges = function(from, to) {\n if (to == null) to = this.$rev + 1;\n \n };\n \n this.getChangedLines = function(from, to) {\n if (to == null) to = this.$rev + 1;\n \n };\n this.undo = function(session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n \n if (!rearrangeUndoStack(stack, stack.length))\n return;\n \n if (!session)\n session = this.$session;\n \n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n \n this.$fromUndo = true;\n \n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n \n this.$fromUndo = false;\n\n return undoSelectionRange;\n };\n this.redo = function(session, dontSelect) {\n this.lastDeltas = null;\n \n if (!session)\n session = this.$session;\n \n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function(x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n \n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n \n return redoSelectionRange;\n };\n \n this.$syncRev = function() {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n this.reset = function() {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n this.canUndo = function() {\n return this.$undoStack.length > 0;\n };\n this.canRedo = function() {\n return this.$redoStack.length > 0;\n };\n this.bookmark = function(rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n this.isAtBookmark = function() {\n return this.$rev === this.mark;\n };\n \n this.toJSON = function() {\n \n };\n \n this.fromJSON = function() {\n \n };\n \n this.hasUndo = this.canUndo;\n this.hasRedo = this.canRedo;\n this.isClean = this.isAtBookmark;\n this.markClean = this.bookmark;\n \n this.$prettyPrint = function(delta) {\n if (delta) return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n}).call(UndoManager.prototype);\n\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--; ) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while(i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\n\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\n\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert) end = start;\n\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\n\n\n\nfunction clonePos(pos) {\n return {row: pos.row,column: pos.column};\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n } else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n } else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column \n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\n\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n \n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n } else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--; ) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n } \n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore = \n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n \n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n } else {\n shift(d1, c1, 1);\n }\n } else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n } else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n } else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n } else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n } else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n } else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n } else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\n \nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos); \n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n \n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col) ; \n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\n\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n } else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1); \n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\n\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Lines = function(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n \n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n};\n\n(function() {\n \n this.moveContainer = function(config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n }; \n \n this.pageChanged = function(oldConfig, newConfig) {\n return (\n Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight)\n );\n };\n \n this.computeLineTop = function(row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n \n this.computeLineHeight = function(row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n \n this.getLength = function() {\n return this.cells.length;\n };\n \n this.get = function(index) {\n return this.cells[index];\n };\n \n this.shift = function() {\n this.$cacheCell(this.cells.shift());\n };\n \n this.pop = function() {\n this.$cacheCell(this.cells.pop());\n };\n \n this.push = function(cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i=0; i foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n \n break;\n }\n\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n } else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n \n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n\n this.$updateGutterWidth = function(config) {\n var session = this.session;\n \n var gutterRenderer = session.gutterRenderer || this.$renderer;\n \n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n \n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n\n var gutterWidth = gutterRenderer \n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n \n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.parentNode.style.width = \n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n \n this.$updateCursorRow = function() {\n if (!this.$highlightGutterLine)\n return;\n \n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n \n this.$cursorRow = position.row;\n };\n \n this.updateLineHighlight = function() {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n \n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n \n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n \n this.$lines.moveContainer(config);\n\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n \n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n this.$lines.shift();\n\n if (oldLastRow > lastRow)\n for (var row=this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row>0; row--)\n this.$lines.pop();\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n \n this.updateLineHighlight();\n \n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n\n this.$renderLines = function(config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n\n row++;\n }\n return fragment;\n };\n \n this.$renderCell = function(cell, config, fold, row) {\n var element = cell.element;\n \n var session = this.session;\n \n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n\n var firstLineNumber = session.$firstLineNumber;\n \n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n \n var className = \"ace_gutter-cell \";\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n \n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row])\n className += this.$annotations[row].className;\n if (element.className != className)\n element.className = className;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (foldWidget.className != className)\n foldWidget.className = className;\n\n var foldHeight = config.lineHeight + \"px\";\n dom.setStyle(foldWidget.style, \"height\", foldHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n } else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n \n var text = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n \n if (text !== textNode.data) {\n textNode.data = text;\n }\n \n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n \n cell.text = text;\n return cell;\n };\n\n this.$fixedWidth = false;\n \n this.$highlightGutterLine = true;\n this.$renderer = \"\";\n this.setHighlightGutterLine = function(highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n \n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function(show) {\n this.$renderer = !show && {\n getWidth: function() {return 0;},\n getText: function() {return \"\";}\n };\n };\n \n this.getShowLineNumbers = function() {\n return this.$showLineNumbers;\n };\n \n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function(show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n \n this.getShowFoldWidgets = function() {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function() {\n if (!this.element.firstChild)\n return {left: 0, right: 0};\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n\n this.getRegion = function(point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n\n}).call(Gutter.prototype);\n\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n \n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n \n return element;\n}\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n\n(function() {\n\n this.$padding = 0;\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n this.setSession = function(session) {\n this.session = session;\n };\n \n this.setMarkers = function(markers) {\n this.markers = markers;\n };\n \n this.elt = function(className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n } else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n\n this.update = function(config) {\n if (!config) return;\n\n this.config = config;\n\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i !=-1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n\n this.$getTop = function(row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0; \n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, \n clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\n layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n } else {\n this.elt(\n clazz + \" ace_br1 ace_start\",\n \"height:\"+ height+ \"px;\"+ \"right:0;\"+ \"top:\"+top+ \"px;left:\"+ left+ \"px;\" + (extraStyle || \"\")\n );\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n } else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n\n this.elt(\n clazz + \" ace_br12\",\n \"height:\"+ height+ \"px;\"+\n \"width:\"+ width+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n );\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n \n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n this.elt(\n clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"),\n \"height:\"+ height+ \"px;\"+\n \"right:0;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n );\n };\n this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"width:\"+ width+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ left+ \"px;\"+ (extraStyle || \"\")\n );\n };\n this.drawBidiSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n\n selections.forEach(function(selection) {\n this.elt(\n clazz,\n \"height:\" + height + \"px;\" +\n \"width:\" + selection.width + (extraLength || 0) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\")\n );\n }, this);\n };\n\n this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:0;right:0;\"+ (extraStyle || \"\")\n );\n };\n \n this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:0;right:0;\"+ (extraStyle || \"\")\n );\n };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n this.dom = dom; \n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n this.MAX_LINE_LENGTH = 10000;\n\n this.$updateEolChar = function() {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function() {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function() {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n \n this.$setFontMetrics = function(measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n\n this.checkForSizeChanges = function() {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function() {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function(session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n\n this.showInvisibles = false;\n this.showSpaces = false;\n this.showTabs = false;\n this.showEOL = false;\n this.setShowInvisibles = function(showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n } else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function(display) {\n if (this.displayIndentGuides == display)\n return false;\n\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$computeTabString = function() {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n } else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs \n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n \n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n\n this.updateLines = function(config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n \n this.config = config;\n\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n } else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx ++;\n }\n\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > last)\n break;\n\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(\n lineElement, row, row == foldStart ? foldLine : false\n );\n\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n\n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n \n this.$lines.moveContainer(config);\n \n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n this.$lines.shift();\n\n if (oldConfig.lastRow > config.lastRow)\n for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n this.$lines.pop();\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n };\n\n this.$renderLinesFragment = function(config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var line = this.$lines.createCell(row, config, this.session);\n \n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n } else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n\n row++;\n }\n return fragment;\n };\n\n this.update = function(config) {\n this.$lines.moveContainer(config);\n \n this.config = config;\n\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n \n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n\n this.$renderToken = function(parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n \n var valueFragment = this.dom.createFragment(this.element);\n\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n \n if (!self.showSpaces && simpleSpace)\n continue;\n\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n\n i = m.index + m[0].length;\n \n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n \n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n } else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n } else {\n valueFragment.appendChild(this.com.createTextNode(simpleSpace, this.element));\n }\n } else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n } else if (cjkSpace) {\n screenColumn += 1;\n \n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n } else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n \n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\")\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n \n span.className = classes;\n span.appendChild(valueFragment);\n \n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n \n return screenColumn + value.length;\n };\n\n this.renderIndentGuide = function(parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols/this.tabSize;\n for (var i=0; i= splitChars) {\n screenColumn = this.$renderToken(\n lineEl, screenColumn,\n token, value.substring(0, splitChars - chars)\n );\n value = value.substring(splitChars - chars);\n chars = splitChars;\n\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n\n split ++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(\n lineEl, screenColumn, token, value\n );\n }\n }\n }\n \n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n\n this.$renderSimpleLine = function(parent, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides)\n value = this.renderIndentGuide(parent, value);\n if (value)\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n \n this.$renderOverflowMessage = function(parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token,\n value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n \n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"\" : \"\";\n \n parent.appendChild(overflowEl); \n };\n this.$renderLine = function(parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n } else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n } else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n \n lastLineEl.appendChild(invisibleEl);\n }\n };\n\n this.$getFoldLineTokens = function(row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n\n col = from + value.length;\n idx += 1;\n }\n\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n } else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n\n var tokens = session.getTokens(row);\n foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n } else {\n if (isNewRow)\n tokens = session.getTokens(row);\n\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n return renderTokens;\n };\n\n this.$useLineGroups = function() {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function() {};\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Cursor = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n \n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n};\n\n(function() {\n \n this.$updateOpacity = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n\n this.$startCssAnimation = function() {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n\n setTimeout(function() {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }.bind(this));\n };\n \n this.$stopCssAnimation = function() {\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n\n this.$padding = 0;\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n\n this.setSession = function(session) {\n this.session = session;\n };\n\n this.setBlinking = function(blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function(blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.setSmoothBlinking = function(smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n\n this.addCursor = function() {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n\n this.removeCursor = function() {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n\n this.hideCursor = function() {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function() {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function() {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n\n if (this.smoothBlinking) {\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n \n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n\n if (this.smoothBlinking) {\n setTimeout(function(){\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }.bind(this));\n }\n \n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n } else {\n var blink = function(){\n this.timeoutId = setTimeout(function() {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n \n this.intervalId = setInterval(function() {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n\n this.getPixelPosition = function(position, onScreen) {\n if (!this.config || !this.session)\n return {left : 0, top : 0};\n\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n\n return {left : cursorLeft, top : cursorTop};\n };\n\n this.isCursorInView = function(pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n\n this.update = function(config) {\n this.config = config;\n\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0){\n selections = [{cursor: null}];\n }\n\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n \n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n } else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n } else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n \n this.drawCursor = null;\n\n this.$setOverwrite = function(overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n\n this.destroy = function() {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n\n parent.appendChild(this.element);\n\n this.setVisible(false);\n this.skipEvent = false;\n\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function(isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = \n this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width =\n this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-v';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", {data: this.scrollTop});\n }\n this.skipEvent = false;\n };\n this.getWidth = function() {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function(height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight = \n this.setScrollHeight = function(height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n } else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n this.setScrollTop = function(scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height =\n this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-h';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", {data: this.scrollLeft});\n }\n this.skipEvent = false;\n };\n this.getHeight = function() {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function(width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function(scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function(ts) {\n _self.pending = false;\n var changes = _self.changes;\n\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n \n if (_self.changes) {\n if (_self.$recursionLimit-- < 0) return;\n _self.schedule();\n } else {\n _self.$recursionLimit = 2;\n }\n };\n};\n\n(function() {\n\n this.schedule = function(change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n\n this.clear = function(change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 256;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n \n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n \n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n \n \n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n \n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n \n this.$characterSize = {width: 0, height: 0};\n \n \n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n \n this.$characterSize = {width: 0, height: 0};\n \n this.$setMeasureNodeStyles = function(style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.checkForSizeChanges = function(size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", {data: size});\n }\n };\n \n this.$addObserver = function() {\n var self = this;\n this.$observer = new window.ResizeObserver(function(e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n\n this.$pollSizeChanges = function() {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n \n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n \n this.setPolling = function(val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$measureSizes = function(node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n\n this.$measureCharWidth = function(ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n \n this.getCharacterWidth = function(ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n\n \n this.$getZoom = function getZoom(element) {\n if (!element) return 1;\n return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n };\n this.$initTransformMeasureNodes = function() {\n var t = function(t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n this.transformCoordinates = function(clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n\n if (!this.els)\n this.$initTransformMeasureNodes();\n \n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n \n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n \n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \"\\\n.ace_br1 {border-top-left-radius : 3px;}\\\n.ace_br2 {border-top-right-radius : 3px;}\\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\npadding: 0;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\ncontain: style size layout;\\\nfont-variant-ligatures: no-common-ligatures;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncontain: style size layout;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\ncontain: strict;\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ncontain: strict;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: transparent;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\n}\\\n.ace_composition_placeholder { color: transparent }\\\n.ace_composition_marker { \\\nborder-bottom: 1px solid;\\\nposition: absolute;\\\nborder-radius: 0;\\\nmargin-top: 1px;\\\n}\\\n[ace_nocontext=true] {\\\ntransform: none!important;\\\nfilter: none!important;\\\nclip-path: none!important;\\\nmask : none!important;\\\ncontain: none!important;\\\nperspective: none!important;\\\nmix-blend-mode: initial!important;\\\nz-index: auto;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\nheight: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\nposition: absolute;\\\nheight: 1000000px;\\\nwidth: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\\ncontain: style size layout;\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_hidpi .ace_text-layer,\\\n.ace_hidpi .ace_gutter-layer,\\\n.ace_hidpi .ace_content,\\\n.ace_hidpi .ace_gutter {\\\ncontain: strict;\\\nwill-change: transform;\\\n}\\\n.ace_hidpi .ace_text-layer > .ace_line, \\\n.ace_hidpi .ace_text-layer > .ace_line_group {\\\ncontain: strict;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\\nopacity: 0;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_animate-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: step-end;\\\nanimation-name: blink-ace-animate;\\\nanimation-iteration-count: infinite;\\\n}\\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: ease-in-out;\\\nanimation-name: blink-ace-animate-smooth;\\\n}\\\n@keyframes blink-ace-animate {\\\nfrom, to { opacity: 1; }\\\n60% { opacity: 0; }\\\n}\\\n@keyframes blink-ace-animate-smooth {\\\nfrom, to { opacity: 1; }\\\n45% { opacity: 1; }\\\n60% { opacity: 0; }\\\n85% { opacity: 0; }\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_error_bracket {\\\nposition: absolute;\\\nborder-bottom: 1px solid #DE5555;\\\nborder-radius: 0;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block; \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_inline_button {\\\nborder: 1px solid lightgray;\\\ndisplay: inline-block;\\\nmargin: -1px 8px;\\\npadding: 0 5px;\\\npointer-events: auto;\\\ncursor: pointer;\\\n}\\\n.ace_inline_button:hover {\\\nborder-color: gray;\\\nbackground: rgba(200,200,200,0.2);\\\ndisplay: inline-block;\\\npointer-events: auto;\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_mobile-menu {\\\nposition: absolute;\\\nline-height: 1.5;\\\nborder-radius: 4px;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\nbackground: white;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #dcdcdc;\\\ncolor: black;\\\n}\\\n.ace_dark > .ace_mobile-menu {\\\nbackground: #333;\\\ncolor: #ccc;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #444;\\\n}\\\n.ace_mobile-button {\\\npadding: 2px;\\\ncursor: pointer;\\\noverflow: hidden;\\\n}\\\n.ace_mobile-button:hover {\\\nbackground-color: #eee;\\\nopacity:1;\\\n}\\\n.ace_mobile-button:active {\\\nbackground-color: #ddd;\\\n}\\\n.ace_placeholder {\\\nfont-family: arial;\\\ntransform: scale(0.9);\\\ntransform-origin: left;\\\nwhite-space: pre;\\\nopacity: 0.7;\\\nmargin: 0 10px;\\\n}\";\n\nvar useragent = require(\"./lib/useragent\");\nvar HIDE_TEXTAREA = useragent.isIE;\n\ndom.importCssString(editorCss, \"ace_editor.css\");\n\nvar VirtualRenderer = function(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI) dom.addCssClass(this.container, \"ace_hidpi\");\n\n this.setTheme(theme);\n\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n \n this.container.appendChild(this.scroller);\n\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n this.$markerBack = new MarkerLayer(this.content);\n\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n\n this.$markerFront = new MarkerLayer(this.content);\n\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n\n this.scrollBar = \n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n\n this.scrollTop = 0;\n this.scrollLeft = 0;\n\n this.cursorPos = {\n row : 0,\n column : 0\n };\n\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function(e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n\n this.layerConfig = {\n width : 1,\n padding : 0,\n firstRow : 0,\n firstRowScreen: 0,\n lastRow : 0,\n lineHeight : 0,\n characterWidth : 0,\n minHeight : 1,\n maxHeight : 1,\n offset : 0,\n height : 1,\n gutterOffset: 1\n };\n \n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n \n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n \n this.$keepTextAreaAtCursor = !useragent.isIOS;\n\n this.$loop = new RenderLoop(\n this.$renderChanges.bind(this),\n this.container.ownerDocument.defaultView\n );\n this.$loop.schedule(this.CHANGE_FULL);\n\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n};\n\n(function() {\n\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function() {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n this.setSession = function(session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n \n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n \n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n \n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n this.updateLines = function(firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n\n this.onChangeNewLineMode = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n \n this.onChangeTabSize = function() {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function(force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function() {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n this.$updateSizeAsync = function() {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.onResize = function(force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n \n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n\n if (force)\n this.$gutterLayer.$padding = null;\n\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n \n this.$updateCachedSize = function(force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n \n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n \n this.gutterWidth = gutterWidth;\n \n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n \n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n \n size.$dirty = !width || !height;\n\n if (changes)\n this._signal(\"resize\", oldSize);\n\n return changes;\n };\n\n this.onGutterResize = function(width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n }\n };\n this.adjustWrapLimit = function() {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n this.setAnimatedScroll = function(shouldAnimate){\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n this.getAnimatedScroll = function() {\n return this.$animatedScroll;\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.getOption(\"showInvisibles\");\n };\n this.getDisplayIndentGuides = function() {\n return this.getOption(\"displayIndentGuides\");\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function(){\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function(show){\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function(){\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$updatePrintMargin = function() {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n \n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n this.getContainerElement = function() {\n return this.container;\n };\n this.getMouseEventTarget = function() {\n return this.scroller;\n };\n this.getTextAreaContainer = function() {\n return this.container;\n };\n this.$moveTextAreaToCursor = function() {\n if (this.$isMousePressed) return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n \n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n\n var h = composition && composition.useTextareaForIME ? this.lineHeight : HIDE_TEXTAREA ? 0 : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n \n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n\n posLeft += this.gutterWidth + this.margin.left;\n\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n this.getFirstVisibleRow = function() {\n return this.layerConfig.firstRow;\n };\n this.getFirstFullyVisibleRow = function() {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n this.getLastFullyVisibleRow = function() {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n this.getLastVisibleRow = function() {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n \n this.setScrollMargin = function(top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n \n this.setMargin = function(top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n this.getHScrollBarAlwaysVisible = function() {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function() {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$updateScrollBarV = function() {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n this.$updateScrollBarH = function() {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n \n this.$frozen = false;\n this.freeze = function() {\n this.$frozen = true;\n };\n \n this.unfreeze = function() {\n this.$frozen = false;\n };\n\n this.$renderChanges = function(changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return; \n } \n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n \n this._signal(\"beforeRender\", changes);\n \n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL\n ) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n \n dom.translate(this.content, -this.scrollLeft, -config.offset);\n \n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n \n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\", changes);\n };\n\n \n this.$autosize = function() {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, \n Math.max((this.$minLines || 1) * this.lineHeight, height)\n ) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n \n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n \n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n \n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n \n this._signal(\"autosize\");\n }\n };\n \n this.$computeLayerConfig = function() {\n var session = this.session;\n var size = this.$size;\n \n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n\n var longestLine = this.$getLongestLine();\n \n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n\n var minHeight = size.scrollerHeight + this.lineHeight;\n \n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n \n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top,\n Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n \n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n\n offset = this.scrollTop - firstRowScreen * lineHeight;\n\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged) \n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n \n this.layerConfig = {\n width : longestLine,\n padding : this.$padding,\n firstRow : firstRow,\n firstRowScreen: firstRowScreen,\n lastRow : lastRow,\n lineHeight : lineHeight,\n characterWidth : this.characterWidth,\n minHeight : minHeight,\n maxHeight : maxHeight,\n offset : offset,\n gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height : this.$size.scrollerHeight\n };\n\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n\n return changes;\n };\n\n this.$updateLines = function() {\n if (!this.$changedLines) return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) { return; }\n if (lastRow < layerConfig.firstRow) { return; }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n\n this.$getLongestLine = function() {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n \n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n this.updateFrontMarkers = function() {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function() {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function(row, className){\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function(row, className){\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function(rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function(annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function() {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function() {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function() {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function(anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n var left = pos.left;\n var top = pos.top;\n \n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n \n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n \n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight)\n top -= offset * this.$size.scrollerHeight;\n if (top === 0)\n top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function() {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function() {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function() {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function() {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function(row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function(cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = {row: cursor, column: 0};\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n this.$calcSteps = function(fromValue, toValue){\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n return steps;\n };\n this.scrollToLine = function(line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function(fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n \n if (fromValue == toValue)\n return;\n \n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n \n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function() {\n if (!_self.session) \n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n this.scrollToY = function(scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function(scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function(x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(y);\n };\n this.scrollBy = function(deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.isScrollableBy = function(deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n\n this.pixelToScreenCoordinates = function(x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = {top:0, left: 0};\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n \n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n\n return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX};\n };\n\n this.screenToTextCoordinates = function(x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = {top:0, left: 0};\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n this.textToScreenCoordinates = function(row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n \n var y = pos.row * this.lineHeight;\n\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n this.visualizeFocus = function() {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function() {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.showComposition = function(composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n \n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n this.setCompositionText = function(text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n this.hideComposition = function() {\n if (!this.$composition)\n return;\n \n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n \n this.addToken = function(text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = {type: type, value: text};\n var tokens = session.getTokens(row);\n if (column == null) {\n tokens.push(newToken);\n } else {\n var l = 0;\n for (var i =0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n \n tokens.splice(i, 1, {type: token.type, value: before}, newToken, {type: token.type, value: after});\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n\n this.removeExtraToken = function(row, column) {\n this.updateLines(row, row);\n };\n this.setTheme = function(theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange',{theme:theme});\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\n\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(\n module.cssText,\n module.cssClass,\n _self.container\n );\n\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n var padding = \"padding\" in module ? module.padding \n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n\n _self._dispatchEvent('themeLoaded', {theme:module});\n cb && cb();\n }\n };\n this.getTheme = function() {\n return this.$themeId;\n };\n this.setStyle = function(style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function(style) {\n dom.removeCssClass(this.container, style);\n };\n \n this.setCursorStyle = function(style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n this.setMouseCursor = function(cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n \n this.attachToShadowRoot = function() {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n this.destroy = function() {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {initialValue: false},\n showInvisibles: {\n set: function(value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function(val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function() {\n return this.$showPrintMargin && this.$printMarginColumn; \n }\n },\n showGutter: {\n set: function(show){\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function(show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function(show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function(show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function(shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function(size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function(name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function(val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function(val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function(val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function(val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n theme: {\n set: function(val) { this.setTheme(val); },\n get: function() { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {\n },\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate);\n this.$others = others;\n \n this.$onCursorChange = function() {\n setTimeout(function() {\n _self.onCursorChange();\n });\n };\n \n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n this.$undoStackDepth = undoStack.length;\n this.setup();\n\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setup = function() {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n \n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function(other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n this.showOtherMarkers = function() {\n if (this.othersActive) return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function(anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n });\n };\n this.hideOtherMarkers = function() {\n if (!this.othersActive) return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n this.onUpdate = function(delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n \n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n \n this.updateAnchors(delta);\n \n if (inMainRange)\n this.length += lengthDiff;\n\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n } else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n \n this.$updating = false;\n this.updateMarkers();\n };\n \n this.updateAnchors = function(delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n \n this.updateMarkers = function() {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function(pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n\n this.onCursorChange = function(event) {\n if (this.$updating || !this.session) return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n } else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n }; \n this.detach = function() {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n this.cancel = function() {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n \n if (ctrl && useragent.isMac)\n button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n \n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n \n if (button !== 0)\n return;\n\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n \n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n \n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n \n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n \n editor.inVirtualSelectionMode = true;\n \n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function() {\n var tmpSel = selection.toOrientedRange();\n\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n } else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n\n } else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true; \n var initialRange;\n var rectSel = [];\n var blockSelect = function() {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n \n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n \n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead); \n else\n selection.moveToPosition(pos);\n \n screenCursor = {row: -1, column: -1};\n\n var onMouseSelectionEnd = function(e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n\n var onSelectionInterval = blockSelect;\n\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n return e.preventDefault();\n }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module) {\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function(editor) { editor.selectMoreLines(-1); },\n bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function(editor) { editor.selectMoreLines(1); },\n bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function(editor) { editor.selectMoreLines(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function(editor) { editor.selectMoreLines(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function(editor) { editor.selectMore(-1); },\n bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function(editor) { editor.selectMore(1); },\n bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function(editor) { editor.selectMore(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function(editor) { editor.selectMore(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function(editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n readOnly: true\n}, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n}, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function(editor) { editor.alignCursors(); },\n bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n scrollIntoView: \"cursor\"\n}, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function(editor) { editor.findAll(); },\n bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function(editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function(editor) {return editor && editor.inMultiSelectMode;}\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function() {\n this.getSelectionMarkers = function() {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function() {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function(range, $blockChangeEvents) {\n if (!range)\n return;\n\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n\n if (!range.cursor)\n range.cursor = range.end;\n\n var removed = this.rangeList.add(range);\n\n this.$onAddRange(range);\n\n if (removed.length)\n this.$onRemoveRange(removed);\n\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function(range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function(pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function() {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n\n this.$onAddRange = function(range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", {range: range});\n };\n\n this.$onRemoveRange = function(removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n\n for (var i = removed.length; i--; ) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {ranges: removed});\n\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function() {\n if (this.rangeList)\n return;\n\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function() {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n } else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n \n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n\n if (startRow == endRow)\n includeEmptyLines = true;\n\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(\n this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n );\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n\n if (yBackwards)\n rectSel.reverse();\n\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function() {\n this.updateSelectionMarkers = function() {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function(orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function(range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n\n this.removeSelectionMarkers = function(ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--; ) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n\n this.$onAddRange = function(e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function(e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function(e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function(e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n\n this.$onMultiSelectExec = function(e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n } else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n }; \n this.forEachSelection = function(cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n \n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n \n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n \n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n \n return result;\n };\n this.exitMultiSelectMode = function() {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n\n this.getSelectedText = function() {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n \n this.$checkMultiselectChange = function(e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row \n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function(needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n } \n this.$search.set(options);\n \n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n\n var selection = this.multiSelect;\n\n if (!additive)\n selection.toSingleRange(ranges[0]);\n\n for (var i = ranges.length; i--; )\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n \n return ranges.length;\n };\n this.selectMoreLines = function(dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip)\n var toRemove = range.cursor;\n }\n\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function(dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n\n var words = [];\n for (var i = all.length; i--; ) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function(dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function() {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function(r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n \n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n \n if (fr < 0) fr = 0;\n if (lr >= max) lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n } else {\n sameRowRanges.forEach(function(r) {\n sel.substractPoint(r.cursor);\n });\n\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function(r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function(r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n\n this.$reAlignText = function(lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n\n return lines.map(function(line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n\n addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n if (!editor.textInput) return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function(e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n } else if (altCursor) {\n reset();\n }\n }, editor);\n\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function(val) {\n MultiSelect(this);\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function(val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n return null;\n };\n\n this.indentationBlock = function(session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n\n if (level == -1)\n continue;\n\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n\n this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n var start = {row: row, column: column + 1};\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n\n if (fw == \"start\" && end.row > start.row) {\n end.row --;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n\n this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n var end = {row: row, column: column};\n var start = session.$findOpeningBracket(bracket, end);\n\n if (!start)\n return;\n\n start.column++;\n end.column--;\n\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"./lib/dom\");\n\nfunction LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n \n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n this.getRowLength = function(row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$getWidgetScreenLength = function() {\n var screenRows = 0;\n this.lineWidgets.forEach(function(w){\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n }; \n \n this.$onChangeEditor = function(e) {\n this.attach(e.editor);\n };\n \n this.attach = function(editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n\n if (this.editor == editor)\n return;\n\n this.detach();\n this.editor = editor;\n \n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n this.detach = function(e) {\n var editor = this.editor;\n if (!editor)\n return;\n \n this.editor = null;\n editor.widgetManager = null;\n \n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function(w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n\n this.updateOnFold = function(e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n \n this.updateOnChange = function(delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n \n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n } else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function(w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n } else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n \n this.$updateRows = function() {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var noWidgets = true;\n lineWidgets.forEach(function(w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n\n this.$registerLineWidget = function(w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n \n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n \n this.session.lineWidgets[w.row] = w;\n return w;\n };\n \n this.addLineWidget = function(w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n \n if (!this.editor) return w;\n \n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n \n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n \n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n \n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n \n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n \n this.removeLineWidget = function(w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy) try {\n w.editor.destroy();\n } catch(e){}\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n } else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n this.$updateRows();\n };\n \n this.getWidgetsAtRow = function(row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n \n this.onWidgetChanged = function(w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n \n this.measureWidgets = function(e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n \n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n \n w.h = w.el.offsetHeight;\n \n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n \n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n \n this.renderWidgets = function(e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n \n while (first > 0 && !lineWidgets[first])\n first--;\n \n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n \n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n \n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n \n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n \n var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n \n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n \n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n \n \n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n \n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n } else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n \n var w = {\n row: pos.row, \n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n \n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n \n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"
\");\n \n el.appendChild(dom.createElement(\"div\"));\n \n var kb = function(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {command: \"null\"};\n }\n };\n \n w.destroy = function() {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n \n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n \n editor.session.widgetManager.addLineWidget(w);\n \n w.el.onmousedown = editor.focus.bind(editor);\n \n editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n .error_widget_wrapper {\\\n background: inherit;\\\n color: inherit;\\\n border:none\\\n }\\\n .error_widget {\\\n border-top: solid 2px;\\\n border-bottom: solid 2px;\\\n margin: 5px 0;\\\n padding: 10px 40px;\\\n white-space: pre-wrap;\\\n }\\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n border-color: #ff5a5a\\\n }\\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n border-color: #F1D817\\\n }\\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n border-color: #5a5a5a\\\n }\\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n border-color: #5aaa5a\\\n }\\\n .error_widget_arrow {\\\n position: absolute;\\\n border: solid 5px;\\\n border-top-color: transparent!important;\\\n border-right-color: transparent!important;\\\n border-left-color: transparent!important;\\\n top: -5px;\\\n }\\\n\", \"\");\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\n\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\n\nexports.config = require(\"./config\");\nexports.require = require;\n\nif (typeof define === \"function\")\n exports.define = define;\nexports.edit = function(el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n } else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n\n var editor = new Editor(new Renderer(el), doc, options);\n\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function() {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function(text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = exports.config.version;\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n window.ace[\"default\"] = window.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = window.ace;\n }\n });\n })();\n ","const dataTypes = [\n \"text/plain\",\n \"text/html\",\n];\n\n// TODO: Dedup with main file?\nfunction warnOrLog() {\n // tslint:disable-next-line: no-console\n (console.warn || console.log).call(arguments);\n} // IE9 workaround (can't bind console functions).\nconst warn = warnOrLog.bind(console, \"[clipboard-polyfill]\");\nlet showWarnings = true;\nexport function suppressDTWarnings() {\n showWarnings = false;\n}\n\nexport class DT {\n private m: {[key: string]: string} = {};\n\n public setData(type: string, value: string): void {\n if (showWarnings && dataTypes.indexOf(type) === -1) {\n warn(\"Unknown data type: \" + type, \"Call clipboard.suppressWarnings() \" +\n \"to suppress this warning.\");\n }\n\n this.m[type] = value;\n }\n\n public getData(type: string): string | undefined {\n return this.m[type];\n }\n\n // TODO: Provide an iterator consistent with DataTransfer.\n public forEach(f: (value: string, key: string) => void): void {\n // tslint:disable-next-line: forin\n for (const k in this.m) {\n f(this.m[k], k);\n }\n }\n}\n","import {DT, suppressDTWarnings} from \"./DT\";\n\n// Debug log strings should be short, since they are compiled into the production build.\n// TODO: Compile debug logging code out of production builds?\n// tslint:disable-next-line: no-empty\nlet debugLog: (s: string) => void = (s: string) => {};\nlet showWarnings = true;\n// Workaround for:\n// - IE9 (can't bind console functions directly), and\n// - Edge Issue #14495220 (referencing `console` without F12 Developer Tools can cause an exception)\nfunction warnOrLog() {\n // tslint:disable-next-line: no-console\n (console.warn || console.log).apply(console, arguments);\n}\nconst warn = warnOrLog.bind(\"[clipboard-polyfill]\");\n\nconst TEXT_PLAIN = \"text/plain\";\n\nexport {DT};\n\nexport function setDebugLog(f: (s: string) => void): void {\n debugLog = f;\n}\n\nexport function suppressWarnings() {\n showWarnings = false;\n suppressDTWarnings();\n}\n\nexport async function write(data: DT): Promise {\n if (showWarnings && !data.getData(TEXT_PLAIN)) {\n warn(\"clipboard.write() was called without a \" +\n \"`text/plain` data type. On some platforms, this may result in an \" +\n \"empty clipboard. Call clipboard.suppressWarnings() \" +\n \"to suppress this warning.\");\n }\n\n // Internet Explorer\n if (seemToBeInIE()) {\n if (writeIE(data)) {\n return;\n } else {\n throw new Error(\"Copying failed, possibly because the user rejected it.\");\n }\n }\n\n if (execCopy(data)) {\n debugLog(\"regular execCopy worked\");\n return;\n }\n\n // Success detection on Edge is not possible, due to bugs in all 4\n // detection mechanisms we could try to use. Assume success.\n if (navigator.userAgent.indexOf(\"Edge\") > -1) {\n debugLog(\"UA \\\"Edge\\\" => assuming success\");\n return;\n }\n\n // Fallback 1 for desktop Safari.\n if (copyUsingTempSelection(document.body, data)) {\n debugLog(\"copyUsingTempSelection worked\");\n return;\n }\n\n // Fallback 2 for desktop Safari.\n if (copyUsingTempElem(data)) {\n debugLog(\"copyUsingTempElem worked\");\n return;\n }\n\n // Fallback for iOS Safari.\n const text = data.getData(TEXT_PLAIN);\n if (text !== undefined && copyTextUsingDOM(text)) {\n debugLog(\"copyTextUsingDOM worked\");\n return;\n }\n\n throw new Error(\"Copy command failed.\");\n}\n\nexport async function writeText(s: string): Promise {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n debugLog(\"Using `navigator.clipboard.writeText()`.\");\n return navigator.clipboard.writeText(s);\n }\n return write(DTFromText(s));\n}\n\nexport async function read(): Promise
{\n return DTFromText(await readText());\n}\n\nexport async function readText(): Promise {\n if (navigator.clipboard && navigator.clipboard.readText) {\n debugLog(\"Using `navigator.clipboard.readText()`.\");\n return navigator.clipboard.readText();\n }\n if (seemToBeInIE()) {\n debugLog(\"Reading text using IE strategy.\");\n return readIE();\n }\n throw new Error(\"Read is not supported in your browser.\");\n}\n\nlet useStarShown = false;\nfunction useStar(): void {\n if (useStarShown) {\n return;\n }\n if (showWarnings) {\n warn(\"The deprecated default object of `clipboard-polyfill` was called. Please switch to `import * as clipboard from \\\"clipboard-polyfill\\\"` and see https://github.com/lgarron/clipboard-polyfill/issues/101 for more info.\");\n }\n useStarShown = true;\n}\n\nconst ClipboardPolyfillDefault = {\n DT,\n setDebugLog(f: (s: string) => void): void {\n useStar();\n return setDebugLog(f);\n },\n suppressWarnings() {\n useStar();\n return suppressWarnings();\n },\n async write(data: DT): Promise {\n useStar();\n return write(data);\n },\n async writeText(s: string): Promise {\n useStar();\n return writeText(s);\n },\n async read(): Promise
{\n useStar();\n return read();\n },\n async readText(): Promise {\n useStar();\n return readText();\n },\n};\n\nexport default ClipboardPolyfillDefault;\n\n/******** Implementations ********/\n\nclass FallbackTracker {\n public success: boolean = false;\n}\n\nfunction copyListener(tracker: FallbackTracker, data: DT, e: ClipboardEvent): void {\n debugLog(\"listener called\");\n tracker.success = true;\n data.forEach((value: string, key: string) => {\n const clipboardData = e.clipboardData!;\n clipboardData.setData(key, value);\n if (key === TEXT_PLAIN && clipboardData.getData(key) !== value) {\n debugLog(\"setting text/plain failed\");\n tracker.success = false;\n }\n });\n e.preventDefault();\n}\n\nfunction execCopy(data: DT): boolean {\n const tracker = new FallbackTracker();\n const listener = copyListener.bind(this, tracker, data);\n\n document.addEventListener(\"copy\", listener);\n try {\n // We ignore the return value, since FallbackTracker tells us whether the\n // listener was called. It seems that checking the return value here gives\n // us no extra information in any browser.\n document.execCommand(\"copy\");\n } finally {\n document.removeEventListener(\"copy\", listener);\n }\n return tracker.success;\n}\n\n// Temporarily select a DOM element, so that `execCommand()` is not rejected.\nfunction copyUsingTempSelection(e: HTMLElement, data: DT): boolean {\n selectionSet(e);\n const success = execCopy(data);\n selectionClear();\n return success;\n}\n\n// Create a temporary DOM element to select, so that `execCommand()` is not\n// rejected.\nfunction copyUsingTempElem(data: DT): boolean {\n const tempElem = document.createElement(\"div\");\n // Setting an individual property does not support `!important`, so we set the\n // whole style instead of just the `-webkit-user-select` property.\n tempElem.setAttribute(\"style\", \"-webkit-user-select: text !important\");\n // Place some text in the elem so that Safari has something to select.\n tempElem.textContent = \"temporary element\";\n document.body.appendChild(tempElem);\n\n const success = copyUsingTempSelection(tempElem, data);\n\n document.body.removeChild(tempElem);\n return success;\n}\n\n// Uses shadow DOM.\nfunction copyTextUsingDOM(str: string): boolean {\n debugLog(\"copyTextUsingDOM\");\n\n const tempElem = document.createElement(\"div\");\n // Setting an individual property does not support `!important`, so we set the\n // whole style instead of just the `-webkit-user-select` property.\n tempElem.setAttribute(\"style\", \"-webkit-user-select: text !important\");\n // Use shadow DOM if available.\n let spanParent: Node = tempElem;\n if (tempElem.attachShadow) {\n debugLog(\"Using shadow DOM.\");\n spanParent = tempElem.attachShadow({mode: \"open\"});\n }\n\n const span = document.createElement(\"span\");\n span.innerText = str;\n\n spanParent.appendChild(span);\n document.body.appendChild(tempElem);\n selectionSet(span);\n\n const result = document.execCommand(\"copy\");\n\n selectionClear();\n document.body.removeChild(tempElem);\n\n return result;\n}\n\n/******** Selection ********/\n\nfunction selectionSet(elem: Element): void {\n const sel = document.getSelection();\n if (sel) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n}\n\nfunction selectionClear(): void {\n const sel = document.getSelection();\n if (sel) {\n sel.removeAllRanges();\n }\n}\n\n/******** Convenience ********/\n\nfunction DTFromText(s: string): DT {\n const dt = new DT();\n dt.setData(TEXT_PLAIN, s);\n return dt;\n}\n\n/******** Internet Explorer ********/\n\ninterface IEWindow extends Window {\n clipboardData: {\n setData: (key: string, value: string) => boolean;\n // Always results in a string: https://msdn.microsoft.com/en-us/library/ms536436(v=vs.85).aspx\n getData: (key: string) => string;\n };\n}\n\nfunction seemToBeInIE(): boolean {\n return typeof ClipboardEvent === \"undefined\" &&\n typeof (window as IEWindow).clipboardData !== \"undefined\" &&\n typeof (window as IEWindow).clipboardData.setData !== \"undefined\";\n}\n\nfunction writeIE(data: DT): boolean {\n // IE supports text or URL, but not HTML: https://msdn.microsoft.com/en-us/library/ms536744(v=vs.85).aspx\n // TODO: Write URLs to `text/uri-list`? https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types\n const text = data.getData(TEXT_PLAIN);\n if (text !== undefined) {\n return (window as IEWindow).clipboardData.setData(\"Text\", text);\n }\n\n throw new Error((\"No `text/plain` value was specified.\"));\n}\n\n// Returns \"\" if the read failed, e.g. because the user rejected the permission.\nasync function readIE(): Promise {\n const text = (window as IEWindow).clipboardData.getData(\"Text\");\n if (text === \"\") {\n throw new Error(\"Empty clipboard or could not read plain text from clipboard\");\n }\n return text;\n}\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\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/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\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\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 objectToString = objectProto.toString;\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 * 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\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 result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\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 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 * 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 */\nfunction 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 * 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 && (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 */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\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 */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\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 */\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 = value.replace(reTrim, '');\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\nmodule.exports = throttle;\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","ace.define(\"ace/ext/statusbar\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\n\nvar StatusBar = function(editor, parentNode) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_status-indicator\";\n this.element.style.cssText = \"display: inline-block;\";\n parentNode.appendChild(this.element);\n\n var statusUpdate = lang.delayedCall(function(){\n this.updateStatus(editor);\n }.bind(this)).schedule.bind(null, 100);\n \n editor.on(\"changeStatus\", statusUpdate);\n editor.on(\"changeSelection\", statusUpdate);\n editor.on(\"keyboardActivity\", statusUpdate);\n};\n\n(function(){\n this.updateStatus = function(editor) {\n var status = [];\n function add(str, separator) {\n str && status.push(str, separator || \"|\");\n }\n\n add(editor.keyBinding.getStatusText(editor));\n if (editor.commands.recording)\n add(\"REC\");\n \n var sel = editor.selection;\n var c = sel.lead;\n \n if (!sel.isEmpty()) {\n var r = editor.getSelectionRange();\n add(\"(\" + (r.end.row - r.start.row) + \":\" +(r.end.column - r.start.column) + \")\", \" \");\n }\n add(c.row + \":\" + c.column, \" \"); \n if (sel.rangeCount)\n add(\"[\" + sel.rangeCount + \"]\", \" \");\n status.pop();\n this.element.textContent = status.join(\"\");\n };\n}).call(StatusBar.prototype);\n\nexports.StatusBar = StatusBar;\n\n}); (function() {\n ace.require([\"ace/ext/statusbar\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","import unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nexport default function _createForOfIteratorHelper(o) {\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (o = unsupportedIterableToArray(o))) {\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var it,\n normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile)\n : 'download' in HTMLAnchorElement.prototype\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari)) && typeof FileReader === 'object') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n","/** @license React v16.13.1\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;kb}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;dpc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;gzf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(gl&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;by?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;yy?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;cf))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(lN.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;hd.tailExpiration&&1b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTimea?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10 component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){awi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;cb||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime screenHeight / 2 && !topdownOnly;\n if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n el.style.top = \"\";\n el.style.bottom = screenHeight - top + \"px\";\n popup.isTopdown = false;\n } else {\n top += lineHeight;\n renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n el.style.top = top + \"px\";\n el.style.bottom = \"\";\n popup.isTopdown = true;\n }\n\n el.style.display = \"\";\n\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth)\n left = screenWidth - el.offsetWidth;\n\n el.style.left = left + \"px\";\n\n this._signal(\"show\");\n lastMouseEvent = null;\n popup.isOpen = true;\n };\n\n popup.goTo = function(where) {\n var row = this.getRow();\n var max = this.session.getLength() - 1;\n\n switch(where) {\n case \"up\": row = row <= 0 ? max : row - 1; break;\n case \"down\": row = row >= max ? -1 : row + 1; break;\n case \"start\": row = 0; break;\n case \"end\": row = max; break;\n }\n\n this.setRow(row);\n };\n\n\n popup.getTextLeftOffset = function() {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n\n return popup;\n};\n\ndom.importCssString(\"\\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n background-color: #CAD6FA;\\\n z-index: 1;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n background-color: #3a674e;\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n border: 1px solid #abbffe;\\\n margin-top: -1px;\\\n background: rgba(233,233,253,0.4);\\\n position: absolute;\\\n z-index: 2;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\\n border: 1px solid rgba(109, 150, 13, 0.8);\\\n background: rgba(58, 103, 78, 0.62);\\\n}\\\n.ace_completion-meta {\\\n opacity: 0.5;\\\n margin: 0.9em;\\\n}\\\n.ace_completion-message {\\\n color: blue;\\\n}\\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n color: #2d69c7;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n color: #93ca12;\\\n}\\\n.ace_editor.ace_autocomplete {\\\n width: 300px;\\\n z-index: 200000;\\\n border: 1px lightgray solid;\\\n position: fixed;\\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n line-height: 1.4;\\\n background: #fefefe;\\\n color: #111;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete {\\\n border: 1px #484747 solid;\\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\\n line-height: 1.4;\\\n background: #25282c;\\\n color: #c1c1c1;\\\n}\", \"autocompletion.css\");\n\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.parForEach = function(array, fn, callback) {\n var completed = 0;\n var arLength = array.length;\n if (arLength === 0)\n callback();\n for (var i = 0; i < arLength; i++) {\n fn(array[i], function(result, err) {\n completed++;\n if (completed === arLength)\n callback(result, err);\n });\n }\n};\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\n\nexports.retrievePrecedingIdentifier = function(text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos-1; i >= 0; i--) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf.reverse().join(\"\");\n};\n\nexports.retrieveFollowingIdentifier = function(text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos; i < text.length; i++) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf;\n};\n\nexports.getCompletionPrefix = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var prefix;\n editor.completers.forEach(function(completer) {\n if (completer.identifierRegexps) {\n completer.identifierRegexps.forEach(function(identifierRegex) {\n if (!prefix && identifierRegex)\n prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n }.bind(this));\n }\n }.bind(this));\n return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n\nace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/lib/dom\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\n\nvar VARIABLES = {\n CURRENT_WORD: function(editor) {\n return editor.session.getTextRange(editor.session.getWordRange());\n },\n SELECTION: function(editor, name, indentation) {\n var text = editor.session.getTextRange();\n if (indentation)\n return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n return text;\n },\n CURRENT_LINE: function(editor) {\n return editor.session.getLine(editor.getCursorPosition().row);\n },\n PREV_LINE: function(editor) {\n return editor.session.getLine(editor.getCursorPosition().row - 1);\n },\n LINE_INDEX: function(editor) {\n return editor.getCursorPosition().row;\n },\n LINE_NUMBER: function(editor) {\n return editor.getCursorPosition().row + 1;\n },\n SOFT_TABS: function(editor) {\n return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n },\n TAB_SIZE: function(editor) {\n return editor.session.getTabSize();\n },\n CLIPBOARD: function(editor) {\n return clipboard.getText && clipboard.getText();\n },\n FILENAME: function(editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n },\n FILENAME_BASE: function(editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n },\n DIRECTORY: function(editor) {\n return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n },\n FILEPATH: function(editor) { return \"/not implemented.txt\"; },\n WORKSPACE_NAME: function() { return \"Unknown\"; },\n FULLNAME: function() { return \"Unknown\"; },\n BLOCK_COMMENT_START: function(editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.start || \"\";\n },\n BLOCK_COMMENT_END: function(editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.end || \"\";\n },\n LINE_COMMENT: function(editor) {\n var mode = editor.session.$mode || {};\n return mode.lineCommentStart || \"\";\n },\n CURRENT_YEAR: date.bind(null, {year: \"numeric\"}),\n CURRENT_YEAR_SHORT: date.bind(null, {year: \"2-digit\"}),\n CURRENT_MONTH: date.bind(null, {month: \"numeric\"}),\n CURRENT_MONTH_NAME: date.bind(null, {month: \"long\"}),\n CURRENT_MONTH_NAME_SHORT: date.bind(null, {month: \"short\"}),\n CURRENT_DATE: date.bind(null, {day: \"2-digit\"}),\n CURRENT_DAY_NAME: date.bind(null, {weekday: \"long\"}),\n CURRENT_DAY_NAME_SHORT: date.bind(null, {weekday: \"short\"}),\n CURRENT_HOUR: date.bind(null, {hour: \"2-digit\", hour12: false}),\n CURRENT_MINUTE: date.bind(null, {minute: \"2-digit\"}),\n CURRENT_SECOND: date.bind(null, {second: \"2-digit\"})\n};\n\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\n\nfunction date(dateFormat) {\n var str = new Date().toLocaleString(\"en-us\", dateFormat);\n return str.length == 1 ? \"0\" + str : str;\n}\n\nvar SnippetManager = function() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n \n this.getTokenizer = function() {\n return SnippetManager.$tokenizer || this.createTokenizer();\n };\n \n this.createTokenizer = function() {\n function TabstopToken(str) {\n str = str.substr(1);\n if (/^\\d+$/.test(str))\n return [{tabstopId: parseInt(str, 10)}];\n return [{text: str}];\n }\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n var formatMatcher = {\n regex: \"/(\" + escape(\"/\") + \"+)/\", \n onMatch: function(val, state, stack) {\n var ts = stack[0];\n ts.fmtString = true;\n ts.guard = val.slice(1, -1);\n ts.flag = \"\";\n return \"\";\n },\n next: \"formatString\"\n };\n \n SnippetManager.$tokenizer = new Tokenizer({\n start: [\n {regex: /\\\\./, onMatch: function(val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) {\n val = ch;\n } else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n }\n return [val];\n }},\n {regex: /}/, onMatch: function(val, state, stack) {\n return [stack.length ? stack.shift() : val];\n }},\n {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n var t = TabstopToken(str.substr(1));\n stack.unshift(t[0]);\n return t;\n }, next: \"snippetVar\"},\n {regex: /\\n/, token: \"newline\", merge: false}\n ],\n snippetVar: [\n {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function(operator) {\n return operator.length == 2 ? operator[1] : \"\\x00\";\n }).split(\"\\x00\");\n stack[0].choices = choices;\n return [choices[0]];\n }, next: \"start\"},\n formatMatcher,\n {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n ],\n formatString: [\n {regex: /:/, onMatch: function(val, state, stack) {\n if (stack.length && stack[0].expectElse) {\n stack[0].expectElse = false;\n stack[0].ifEnd = {elseEnd: stack[0]};\n return [stack[0].ifEnd];\n }\n return \":\";\n }},\n {regex: /\\\\./, onMatch: function(val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length)\n val = ch;\n else if (\"`$\\\\\".indexOf(ch) != -1)\n val = ch;\n else if (ch == \"n\")\n val = \"\\n\";\n else if (ch == \"t\")\n val = \"\\t\";\n else if (\"ulULE\".indexOf(ch) != -1)\n val = {changeCase: ch, local: ch > \"a\"};\n return [val];\n }},\n {regex: \"/\\\\w*}\", onMatch: function(val, state, stack) {\n var next = stack.shift();\n if (next)\n next.flag = val.slice(1, -1);\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\"},\n {regex: /\\$(?:\\d+|\\w+)/, onMatch: function(val, state, stack) {\n return [{text: val.slice(1)}];\n }},\n {regex: /\\${\\w+/, onMatch: function(val, state, stack) {\n var token = {text: val.slice(2)};\n stack.unshift(token);\n return [token];\n }, next: \"formatStringVar\"},\n {regex: /\\n/, token: \"newline\", merge: false},\n {regex: /}/, onMatch: function(val, state, stack) {\n var next = stack.shift();\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\"}\n ],\n formatStringVar: [\n {regex: /:\\/\\w+}/, onMatch: function(val, state, stack) {\n var ts = stack[0];\n ts.formatFunction = val.slice(2, -1);\n return [stack.shift()];\n }, next: \"formatString\"},\n formatMatcher,\n {regex: /:[\\?\\-+]?/, onMatch: function(val, state, stack) {\n if (val[1] == \"+\")\n stack[0].ifEnd = stack[0];\n if (val[1] == \"?\")\n stack[0].expectElse = true;\n }, next: \"formatString\"},\n {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\"}\n ]\n });\n return SnippetManager.$tokenizer;\n };\n\n this.tokenizeTmSnippet = function(str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n return x.value || x;\n });\n };\n \n this.getVariableValue = function(editor, name, indentation) {\n if (/^\\d+$/.test(name))\n return (this.variables.__ || {})[name] || \"\";\n if (/^[A-Z]\\d+$/.test(name))\n return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n \n name = name.replace(/^TM_/, \"\");\n if (!this.variables.hasOwnProperty(name))\n return \"\";\n var value = this.variables[name];\n if (typeof value == \"function\")\n value = this.variables[name](editor, name, indentation);\n return value == null ? \"\" : value;\n };\n \n this.variables = VARIABLES;\n this.tmStrFormat = function(str, ch, editor) {\n if (!ch.fmt) return str;\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n var _self = this;\n var formatted = str.replace(re, function() {\n var oldArgs = _self.variables.__;\n _self.variables.__ = [].slice.call(arguments);\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n var gChangeCase = \"E\";\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n if (typeof ch == \"object\") {\n fmtParts[i] = \"\";\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\")\n fmtParts[i] = next[0].toUpperCase();\n else\n fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n } else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n } else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n } else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n _self.variables.__ = oldArgs;\n return fmtParts.join(\"\");\n });\n return formatted;\n };\n \n this.tmFormatFunction = function(str, ch, editor) {\n if (ch.formatFunction == \"upcase\")\n return str.toUpperCase();\n if (ch.formatFunction == \"downcase\")\n return str.toLowerCase();\n return str;\n };\n\n this.resolveVariables = function(snippet, editor) {\n var result = [];\n var indentation = \"\";\n var afterNewLine = true;\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n if (typeof ch == \"string\") {\n result.push(ch);\n if (ch == \"\\n\") {\n afterNewLine = true;\n indentation = \"\";\n }\n else if (afterNewLine) {\n indentation = /^\\t*/.exec(ch)[0];\n afterNewLine = /\\S/.test(ch);\n }\n continue;\n }\n if (!ch) continue;\n afterNewLine = false;\n \n if (ch.fmtString) {\n var j = snippet.indexOf(ch, i + 1);\n if (j == -1) j = snippet.length;\n ch.fmt = snippet.slice(i + 1, j);\n i = j;\n }\n \n if (ch.text) {\n var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n if (ch.fmtString)\n value = this.tmStrFormat(value, ch, editor);\n if (ch.formatFunction)\n value = this.tmFormatFunction(value, ch, editor);\n \n if (value && !ch.ifEnd) {\n result.push(value);\n gotoNext(ch);\n } else if (!value && ch.ifEnd) {\n gotoNext(ch.ifEnd);\n }\n } else if (ch.elseEnd) {\n gotoNext(ch.elseEnd);\n } else if (ch.tabstopId != null) {\n result.push(ch);\n } else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1)\n i = i1;\n }\n return result;\n };\n\n this.insertSnippetForSelection = function(editor, snippetText) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n \n if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\n\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function(x) {\n if (x == \"\\n\")\n return x + indentString;\n if (typeof x == \"string\")\n return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function(p, i) {\n if (typeof p != \"object\")\n return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n ts.parents = {};\n }\n if (ts.indexOf(p) !== -1)\n return;\n if (p.choices && !ts.choices)\n ts.choices = p.choices;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1)\n return;\n\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function(t) {return typeof t === \"object\";});\n if (isNested && !ts.value) {\n ts.value = value;\n } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function(ts) {ts.length = 0;});\n var expanding = {};\n function copyValue(val) {\n var copy = [];\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n if (typeof p == \"object\") {\n if (expanding[p.tabstopId])\n continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || {tabstopId: p.tabstopId};\n }\n copy[i] = p;\n }\n return copy;\n }\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (typeof p != \"object\")\n continue;\n var id = p.tabstopId;\n var ts = tabstops[id];\n var i1 = tokens.indexOf(p, i + 1);\n if (expanding[id]) {\n if (expanding[id] === p) {\n delete expanding[id];\n Object.keys(expanding).forEach(function(parentId) {\n ts.parents[parentId] = true;\n });\n }\n continue;\n }\n expanding[id] = p;\n var value = ts.value;\n if (typeof value !== \"string\")\n value = copyValue(value);\n else if (p.fmt)\n value = this.tmStrFormat(value, p, editor);\n tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n\n if (ts.indexOf(p) === -1)\n ts.push(p);\n }\n var row = 0, column = 0;\n var text = \"\";\n tokens.forEach(function(t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n if (lines.length > 1){\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n } else\n column += t.length;\n text += t;\n } else if (t) {\n if (!t.start)\n t.start = {row: row, column: column};\n else\n t.end = {row: row, column: column};\n }\n });\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, text);\n\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n };\n \n this.insertSnippet = function(editor, snippetText) {\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText);\n \n editor.forEachSelection(function() {\n self.insertSnippetForSelection(editor, snippetText);\n }, null, {keepOrder: true});\n \n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n\n this.$getScope = function(editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n if (typeof state === \"object\") {\n state = state[0];\n }\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\")\n scope = \"javascript\";\n else if (state.substring(0, 4) == \"css-\")\n scope = \"css\";\n else if (state.substring(0, 4) == \"php-\")\n scope = \"php\";\n }\n }\n \n return scope;\n };\n\n this.getActiveScopes = function(editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n scopes.push(\"_\");\n return scopes;\n };\n\n this.expandWithTab = function(editor, options) {\n var self = this;\n var result = editor.forEachSelection(function() {\n return self.expandSnippetForSelection(editor, options);\n }, null, {keepOrder: true});\n if (result && editor.tabstopManager)\n editor.tabstopManager.tabNext();\n return result;\n };\n \n this.expandSnippetForSelection = function(editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function(scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet)\n return false;\n if (options && options.dryRun)\n return true;\n editor.session.doc.removeInLine(cursor.row,\n cursor.column - snippet.replaceBefore.length,\n cursor.column + snippet.replaceAfter.length\n );\n\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n\n this.findMatchingSnippet = function(snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before))\n continue;\n if (s.endRe && !s.endRe.test(after))\n continue;\n if (!s.startRe && !s.endRe)\n continue;\n\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n\n this.snippetMap = {};\n this.snippetNameMap = {};\n this.register = function(snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n \n if (!snippets) \n snippets = [];\n \n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\n\n return src || \"\";\n }\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\")\n re = re + \"$\";\n } else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\n }\n\n function addSnippet(s) {\n if (!s.scope)\n s.scope = scope || \"_\";\n scope = s.scope;\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n\n var map = snippetNameMap[scope];\n if (s.name) {\n var old = map[s.name];\n if (old)\n self.unregister(old);\n map[s.name] = s;\n }\n snippetMap[scope].push(s);\n\n if (s.prefix)\n s.tabTrigger = s.prefix;\n\n if (!s.content && s.body)\n s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger))\n s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n \n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n \n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger);\n\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger);\n }\n\n if (Array.isArray(snippets)) {\n snippets.forEach(addSnippet);\n } else {\n Object.keys(snippets).forEach(function(key) {\n addSnippet(snippets[key]);\n });\n }\n \n this._signal(\"registerSnippets\", {scope: scope});\n };\n this.unregister = function(snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope||scope];\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope||scope];\n var i = map && map.indexOf(s);\n if (i >= 0)\n map.splice(i, 1);\n }\n }\n if (snippets.content)\n removeSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(removeSnippet);\n };\n this.parseSnippetFile = function(str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n } catch (e) {}\n } if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n } else {\n var key = m[2], val = m[3];\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n } else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n } else if (key) {\n snippet[key] = val;\n }\n }\n }\n return list;\n };\n this.getSnippetByName = function(name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function(scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n if (editor.tabstopManager)\n return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n};\n(function() {\n this.attach = function(editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n this.$openTabstops = null;\n this.selectedTabstop = null;\n\n this.editor = editor;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n this.detach = function() {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges = null;\n this.tabstops = null;\n this.selectedTabstop = null;\n this.editor.removeListener(\"change\", this.$onChange);\n this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.editor = null;\n };\n\n this.onChange = function(delta) {\n var isRemove = delta.action[0] == \"r\";\n var selectedTabstop = this.selectedTabstop || {};\n var parents = selectedTabstop.parents || {};\n var tabstops = (this.tabstops || []).slice();\n for (var i = 0; i < tabstops.length; i++) {\n var ts = tabstops[i];\n var active = ts == selectedTabstop || parents[ts.index];\n ts.rangeList.$bias = active ? 0 : 1;\n \n if (delta.action == \"remove\" && ts !== selectedTabstop) {\n var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n for (var j = 0; j < toRemove.length; j++)\n this.removeRange(toRemove[j]);\n }\n ts.rangeList.$onChange(delta);\n }\n var session = this.editor.session;\n if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n this.detach();\n };\n this.updateLinkedFields = function() {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n return;\n this.$inChange = true;\n var session = this.editor.session;\n var text = session.getTextRange(ts.firstNonLinked);\n for (var i = 0; i < ts.length; i++) {\n var range = ts[i];\n if (!range.linked)\n continue;\n var original = range.original;\n var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n session.replace(range, fmt);\n }\n this.$inChange = false;\n };\n this.onAfterExec = function(e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n this.onChangeSelection = function() {\n if (!this.editor)\n return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n for (var i = 0; i < this.ranges.length; i++) {\n if (this.ranges[i].linked)\n continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor)\n return;\n }\n this.detach();\n };\n this.onChangeSession = function() {\n this.detach();\n };\n this.tabNext = function(dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max)\n index = 0;\n this.selectTabstop(index);\n if (index === 0)\n this.detach();\n };\n this.selectTabstop = function(index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts)\n this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length)\n return;\n \n this.selectedTabstop = ts;\n var range = ts.firstNonLinked || ts;\n if (!this.editor.inVirtualSelectionMode) {\n var sel = this.editor.multiSelect;\n sel.toSingleRange(range.clone());\n for (var i = 0; i < ts.length; i++) {\n if (ts.hasLinkedRanges && ts[i].linked)\n continue;\n sel.addRange(ts[i].clone(), true);\n }\n if (sel.ranges[0])\n sel.addRange(sel.ranges[0].clone());\n } else {\n this.editor.selection.setRange(range);\n }\n \n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n if (this.selectedTabstop && this.selectedTabstop.choices)\n this.editor.execCommand(\"startAutocomplete\", {matches: this.selectedTabstop.choices});\n };\n this.addTabstops = function(tabstops, start, end) {\n var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n \n if (!this.$openTabstops)\n this.$openTabstops = [];\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n tabstops.forEach(function(ts, index) {\n var dest = this.$openTabstops[index] || ts;\n \n for (var i = 0; i < ts.length; i++) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts)\n dest.unshift(range);\n else\n dest[i] = range;\n if (p.fmtString || (dest.firstNonLinked && useLink)) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n } else if (!dest.firstNonLinked)\n dest.firstNonLinked = range;\n }\n if (!dest.firstNonLinked)\n dest.hasLinkedRanges = false;\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n this.addTabstopMarkers(dest);\n dest.rangeList = dest.rangeList || new RangeList();\n dest.rangeList.$bias = 0;\n dest.rangeList.addList(dest);\n }, this);\n \n if (arg.length > 2) {\n if (this.tabstops.length)\n arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n\n this.addTabstopMarkers = function(ts) {\n var session = this.editor.session;\n ts.forEach(function(range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n this.removeTabstopMarkers = function(ts) {\n var session = this.editor.session;\n ts.forEach(function(range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n this.removeRange = function(range) {\n var i = range.tabstop.indexOf(range);\n if (i != -1) range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n if (i != -1) this.ranges.splice(i, 1);\n i = range.tabstop.rangeList.ranges.indexOf(range);\n if (i != -1) range.tabstop.splice(i, 1);\n this.editor.session.removeMarker(range.markerId);\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1)\n this.tabstops.splice(i, 1);\n if (!this.tabstops.length)\n this.detach();\n }\n };\n\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys({\n \"Tab\": function(editor) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n return;\n editor.tabstopManager.tabNext(1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Shift-Tab\": function(editor) {\n editor.tabstopManager.tabNext(-1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Esc\": function(editor) {\n editor.tabstopManager.detach();\n }\n });\n}).call(TabstopManager.prototype);\n\n\n\nvar movePoint = function(point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\n};\n\n\nrequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n -moz-box-sizing: border-box;\\\n box-sizing: border-box;\\\n background: rgba(194, 193, 208, 0.09);\\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\\n position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n this.insertSnippet = function(content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n this.expandSnippet = function(options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\n\nvar Autocomplete = function() {\n this.autoInsert = false;\n this.autoSelect = true;\n this.exactMatch = false;\n this.gatherCompletionsId = 0;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\n\n this.blurListener = this.blurListener.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n this.mousewheelListener = this.mousewheelListener.bind(this);\n\n this.changeTimer = lang.delayedCall(function() {\n this.updateCompletions(true);\n }.bind(this));\n\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n\n(function() {\n\n this.$init = function() {\n this.popup = new AcePopup(document.body || document.documentElement);\n this.popup.on(\"click\", function(e) {\n this.insertMatch();\n e.stop();\n }.bind(this));\n this.popup.focus = this.editor.focus.bind(this.editor);\n this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n return this.popup;\n };\n\n this.getPopup = function() {\n return this.popup || this.$init();\n };\n\n this.openPopup = function(editor, prefix, keepPopupPosition) {\n if (!this.popup)\n this.$init();\n\n this.popup.autoSelect = this.autoSelect;\n\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n \n var renderer = editor.renderer;\n this.popup.setRow(this.autoSelect ? 0 : -1);\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\n\n var lineHeight = renderer.layerConfig.lineHeight;\n\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\n\n var rect = editor.container.getBoundingClientRect();\n pos.top += rect.top - renderer.layerConfig.offset;\n pos.left += rect.left - editor.renderer.scrollLeft;\n pos.left += renderer.gutterWidth;\n\n this.popup.show(pos, lineHeight);\n } else if (keepPopupPosition && !prefix) {\n this.detach();\n }\n };\n\n this.detach = function() {\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.off(\"changeSelection\", this.changeListener);\n this.editor.off(\"blur\", this.blurListener);\n this.editor.off(\"mousedown\", this.mousedownListener);\n this.editor.off(\"mousewheel\", this.mousewheelListener);\n this.changeTimer.cancel();\n this.hideDocTooltip();\n\n this.gatherCompletionsId += 1;\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completions = this.base = null;\n };\n\n this.changeListener = function(e) {\n var cursor = this.editor.selection.lead;\n if (cursor.row != this.base.row || cursor.column < this.base.column) {\n this.detach();\n }\n if (this.activated)\n this.changeTimer.schedule();\n else\n this.detach();\n };\n\n this.blurListener = function(e) {\n var el = document.activeElement;\n var text = this.editor.textInput.getElement();\n var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n var container = this.popup && this.popup.container;\n if (el != text && el.parentNode != container && !fromTooltip\n && el != this.tooltipNode && e.relatedTarget != text\n ) {\n this.detach();\n }\n };\n\n this.mousedownListener = function(e) {\n this.detach();\n };\n\n this.mousewheelListener = function(e) {\n this.detach();\n };\n\n this.goTo = function(where) {\n this.popup.goTo(where);\n };\n\n this.insertMatch = function(data, options) {\n if (!data)\n data = this.popup.getData(this.popup.getRow());\n if (!data)\n return false;\n\n this.editor.startOperation({command: {name: \"insertMatch\"}});\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(this.editor, data);\n } else {\n if (this.completions.filterText) {\n var ranges = this.editor.selection.getAllRanges();\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= this.completions.filterText.length;\n this.editor.session.remove(range);\n }\n }\n if (data.snippet)\n snippetManager.insertSnippet(this.editor, data.snippet);\n else\n this.editor.execCommand(\"insertstring\", data.value || data);\n }\n this.detach();\n this.editor.endOperation();\n };\n\n\n this.commands = {\n \"Up\": function(editor) { editor.completer.goTo(\"up\"); },\n \"Down\": function(editor) { editor.completer.goTo(\"down\"); },\n \"Ctrl-Up|Ctrl-Home\": function(editor) { editor.completer.goTo(\"start\"); },\n \"Ctrl-Down|Ctrl-End\": function(editor) { editor.completer.goTo(\"end\"); },\n\n \"Esc\": function(editor) { editor.completer.detach(); },\n \"Return\": function(editor) { return editor.completer.insertMatch(); },\n \"Shift-Return\": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); },\n \"Tab\": function(editor) {\n var result = editor.completer.insertMatch();\n if (!result && !editor.tabstopManager)\n editor.completer.goTo(\"down\");\n else\n return result;\n },\n\n \"PageUp\": function(editor) { editor.completer.popup.gotoPageUp(); },\n \"PageDown\": function(editor) { editor.completer.popup.gotoPageDown(); }\n };\n\n this.gatherCompletions = function(editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n\n var prefix = util.getCompletionPrefix(editor);\n\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n\n var matches = [];\n var total = editor.completers.length;\n editor.completers.forEach(function(completer, i) {\n completer.getCompletions(editor, session, pos, prefix, function(err, results) {\n if (!err && results)\n matches = matches.concat(results);\n callback(null, {\n prefix: util.getCompletionPrefix(editor),\n matches: matches,\n finished: (--total === 0)\n });\n });\n });\n return true;\n };\n\n this.showPopup = function(editor, options) {\n if (this.editor)\n this.detach();\n\n this.activated = true;\n\n this.editor = editor;\n if (editor.completer != this) {\n if (editor.completer)\n editor.completer.detach();\n editor.completer = this;\n }\n\n editor.on(\"changeSelection\", this.changeListener);\n editor.on(\"blur\", this.blurListener);\n editor.on(\"mousedown\", this.mousedownListener);\n editor.on(\"mousewheel\", this.mousewheelListener);\n\n this.updateCompletions(false, options);\n };\n\n this.updateCompletions = function(keepPopupPosition, options) {\n if (keepPopupPosition && this.base && this.completions) {\n var pos = this.editor.getCursorPosition();\n var prefix = this.editor.session.getTextRange({start: this.base, end: pos});\n if (prefix == this.completions.filterText)\n return;\n this.completions.setFilter(prefix);\n if (!this.completions.filtered.length)\n return this.detach();\n if (this.completions.filtered.length == 1\n && this.completions.filtered[0].value == prefix\n && !this.completions.filtered[0].snippet)\n return this.detach();\n this.openPopup(this.editor, prefix, keepPopupPosition);\n return;\n }\n \n if (options && options.matches) {\n var pos = this.editor.getSelectionRange().start;\n this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n this.base.$insertRight = true;\n this.completions = new FilteredList(options.matches);\n return this.openPopup(this.editor, \"\", keepPopupPosition);\n }\n var _id = this.gatherCompletionsId;\n this.gatherCompletions(this.editor, function(err, results) {\n var detachIfFinished = function() {\n if (!results.finished) return;\n return this.detach();\n }.bind(this);\n\n var prefix = results.prefix;\n var matches = results && results.matches;\n\n if (!matches || !matches.length)\n return detachIfFinished();\n if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n return;\n\n this.completions = new FilteredList(matches);\n\n if (this.exactMatch)\n this.completions.exactMatch = true;\n\n this.completions.setFilter(prefix);\n var filtered = this.completions.filtered;\n if (!filtered.length)\n return detachIfFinished();\n if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n return detachIfFinished();\n if (this.autoInsert && filtered.length == 1 && results.finished)\n return this.insertMatch(filtered[0]);\n\n this.openPopup(this.editor, prefix, keepPopupPosition);\n }.bind(this));\n };\n\n this.cancelContextMenu = function() {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n\n this.updateDocTooltip = function() {\n var popup = this.popup;\n var all = popup.data;\n var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n var doc = null;\n if (!selected || !this.editor || !this.popup.isOpen)\n return this.hideDocTooltip();\n this.editor.completers.some(function(completer) {\n if (completer.getDocTooltip)\n doc = completer.getDocTooltip(selected);\n return doc;\n });\n if (!doc && typeof selected != \"string\")\n doc = selected;\n\n if (typeof doc == \"string\")\n doc = {docText: doc};\n if (!doc || !(doc.docHTML || doc.docText))\n return this.hideDocTooltip();\n this.showDocTooltip(doc);\n };\n\n this.showDocTooltip = function(item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n this.tooltipNode.style.margin = 0;\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n }\n\n var tooltipNode = this.tooltipNode;\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n } else if (item.docText) {\n tooltipNode.textContent = item.docText;\n }\n\n if (!tooltipNode.parentNode)\n document.body.appendChild(tooltipNode);\n var popup = this.popup;\n var rect = popup.container.getBoundingClientRect();\n tooltipNode.style.top = popup.container.style.top;\n tooltipNode.style.bottom = popup.container.style.bottom;\n\n tooltipNode.style.display = \"block\";\n if (window.innerWidth - rect.right < 320) {\n if (rect.left < 320) {\n if(popup.isTopdown) {\n tooltipNode.style.top = rect.bottom + \"px\";\n tooltipNode.style.left = rect.left + \"px\";\n tooltipNode.style.right = \"\";\n tooltipNode.style.bottom = \"\";\n } else {\n tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n tooltipNode.style.left = rect.left + \"px\";\n tooltipNode.style.right = \"\";\n tooltipNode.style.bottom = \"\";\n }\n } else {\n tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n tooltipNode.style.left = \"\";\n }\n } else {\n tooltipNode.style.left = (rect.right + 1) + \"px\";\n tooltipNode.style.right = \"\";\n }\n };\n\n this.hideDocTooltip = function() {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode) return;\n var el = this.tooltipNode;\n if (!this.editor.isFocused() && document.activeElement == el)\n this.editor.focus();\n this.tooltipNode = null;\n if (el.parentNode)\n el.parentNode.removeChild(el);\n };\n \n this.onTooltipClick = function(e) {\n var a = e.target;\n while (a && a != this.tooltipNode) {\n if (a.nodeName == \"A\" && a.href) {\n a.rel = \"noreferrer\";\n a.target = \"_blank\";\n break;\n }\n a = a.parentNode;\n }\n };\n\n this.destroy = function() {\n this.detach();\n if (this.popup) {\n this.popup.destroy();\n var el = this.popup.container;\n if (el && el.parentNode)\n el.parentNode.removeChild(el);\n }\n if (this.editor && this.editor.completer == this)\n this.editor.completer == null;\n this.popup = null;\n };\n\n}).call(Autocomplete.prototype);\n\n\nAutocomplete.for = function(editor) {\n if (editor.completer) {\n return editor.completer;\n }\n if (config.get(\"sharedPopups\")) {\n if (!Autocomplete.$shared)\n Autocomplete.$sharedInstance = new Autocomplete();\n editor.completer = Autocomplete.$sharedInstance;\n } else {\n editor.completer = new Autocomplete();\n editor.once(\"destroy\", function(e, editor) {\n editor.completer.destroy();\n });\n }\n return editor.completer;\n};\n\nAutocomplete.startCommand = {\n name: \"startAutocomplete\",\n exec: function(editor, options) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.autoSelect = true;\n completer.showPopup(editor, options);\n completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\n\nvar FilteredList = function(array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n};\n(function(){\n this.setFilter = function(str) {\n if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n var matches = this.filtered;\n else\n var matches = this.all;\n\n this.filterText = str;\n matches = this.filterCompletions(matches, this.filterText);\n matches = matches.sort(function(a, b) {\n return b.exactMatch - a.exactMatch || b.$score - a.$score \n || (a.caption || a.value).localeCompare(b.caption || b.value);\n });\n var prev = null;\n matches = matches.filter(function(item){\n var caption = item.snippet || item.caption || item.value;\n if (caption === prev) return false;\n prev = caption;\n return true;\n });\n\n this.filtered = matches;\n };\n this.filterCompletions = function(items, needle) {\n var results = [];\n var upper = needle.toUpperCase();\n var lower = needle.toLowerCase();\n loop: for (var i = 0, item; item = items[i]; i++) {\n var caption = item.caption || item.value || item.snippet;\n if (!caption) continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length))\n continue loop;\n } else {\n var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n if (fullMatchIndex > -1) {\n penalty = fullMatchIndex;\n } else {\n for (var j = 0; j < needle.length; j++) {\n var i1 = caption.indexOf(lower[j], lastIndex + 1);\n var i2 = caption.indexOf(upper[j], lastIndex + 1);\n index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n if (index < 0)\n continue loop;\n distance = index - lastIndex - 1;\n if (distance > 0) {\n if (lastIndex === -1)\n penalty += 10;\n penalty += distance;\n matchMask = matchMask | (1 << j);\n }\n lastIndex = index;\n }\n }\n }\n item.matchMask = matchMask;\n item.exactMatch = penalty ? 0 : 1;\n item.$score = (item.score || 0) - penalty;\n results.push(item);\n }\n return results;\n };\n}).call(FilteredList.prototype);\n\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = \"#ace_settingsmenu, #kbshortcutmenu {\\\nbackground-color: #F7F7F7;\\\ncolor: black;\\\nbox-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\\npadding: 1em 0.5em 2em 1em;\\\noverflow: auto;\\\nposition: absolute;\\\nmargin: 0;\\\nbottom: 0;\\\nright: 0;\\\ntop: 0;\\\nz-index: 9991;\\\ncursor: default;\\\n}\\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\\nbox-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\\nbackground-color: rgba(255, 255, 255, 0.6);\\\ncolor: black;\\\n}\\\n.ace_optionsMenuEntry:hover {\\\nbackground-color: rgba(100, 100, 100, 0.1);\\\ntransition: all 0.3s\\\n}\\\n.ace_closeButton {\\\nbackground: rgba(245, 146, 146, 0.5);\\\nborder: 1px solid #F48A8A;\\\nborder-radius: 50%;\\\npadding: 7px;\\\nposition: absolute;\\\nright: -8px;\\\ntop: -8px;\\\nz-index: 100000;\\\n}\\\n.ace_closeButton{\\\nbackground: rgba(245, 146, 146, 0.9);\\\n}\\\n.ace_optionsMenuKey {\\\ncolor: darkslateblue;\\\nfont-weight: bold;\\\n}\\\n.ace_optionsMenuCommand {\\\ncolor: darkcyan;\\\nfont-weight: normal;\\\n}\\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\\nvertical-align: middle;\\\n}\\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\\nbackground: #e7e7e7;\\\nbox-shadow: 1px 0px 2px 0px #adadad inset;\\\nborder-color: #adadad;\\\n}\\\n.ace_optionsMenuEntry button {\\\nbackground: white;\\\nborder: 1px solid lightgray;\\\nmargin: 0px;\\\n}\\\n.ace_optionsMenuEntry button:hover{\\\nbackground: #f0f0f0;\\\n}\";\ndom.importCssString(cssText);\n\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, callback) {\n var closer = document.createElement('div');\n var ignoreFocusOut = false;\n\n function documentEscListener(e) {\n if (e.keyCode === 27) {\n close();\n }\n }\n\n function close() {\n if (!closer) return;\n document.removeEventListener('keydown', documentEscListener);\n closer.parentNode.removeChild(closer);\n if (editor) {\n editor.focus();\n }\n closer = null;\n callback && callback();\n }\n function setIgnoreFocusOut(ignore) {\n ignoreFocusOut = ignore;\n if (ignore) {\n closer.style.pointerEvents = \"none\";\n contentElement.style.pointerEvents = \"auto\";\n }\n }\n\n closer.style.cssText = 'margin: 0; padding: 0; ' +\n 'position: fixed; top:0; bottom:0; left:0; right:0;' +\n 'z-index: 9990; ' +\n (editor ? 'background-color: rgba(0, 0, 0, 0.3);' : '');\n closer.addEventListener('click', function(e) {\n if (!ignoreFocusOut) {\n close();\n }\n });\n document.addEventListener('keydown', documentEscListener);\n\n contentElement.addEventListener('click', function (e) {\n e.stopPropagation();\n });\n\n closer.appendChild(contentElement);\n document.body.appendChild(closer);\n if (editor) {\n editor.blur();\n }\n return {\n close: close,\n setIgnoreFocusOut: setIgnoreFocusOut\n };\n};\n\n});\n\nace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar modes = [];\nfunction getModeForPath(path) {\n var mode = modesByName.text;\n var fileName = path.split(/[\\/\\\\]/).pop();\n for (var i = 0; i < modes.length; i++) {\n if (modes[i].supportsFile(fileName)) {\n mode = modes[i];\n break;\n }\n }\n return mode;\n}\n\nvar Mode = function(name, caption, extensions) {\n this.name = name;\n this.caption = caption;\n this.mode = \"ace/mode/\" + name;\n this.extensions = extensions;\n var re;\n if (/\\^/.test(extensions)) {\n re = extensions.replace(/\\|(\\^)?/g, function(a, b){\n return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n }) + \"$\";\n } else {\n re = \"^.*\\\\.(\" + extensions + \")$\";\n }\n\n this.extRe = new RegExp(re, \"gi\");\n};\n\nMode.prototype.supportsFile = function(filename) {\n return filename.match(this.extRe);\n};\nvar supportedModes = {\n ABAP: [\"abap\"],\n ABC: [\"abc\"],\n ActionScript:[\"as\"],\n ADA: [\"ada|adb\"],\n Alda: [\"alda\"],\n Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n Apex: [\"apex|cls|trigger|tgr\"],\n AQL: [\"aql\"],\n AsciiDoc: [\"asciidoc|adoc\"],\n ASL: [\"dsl|asl\"],\n Assembly_x86:[\"asm|a\"],\n AutoHotKey: [\"ahk\"],\n BatchFile: [\"bat|cmd\"],\n C_Cpp: [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n C9Search: [\"c9search_results\"],\n Cirru: [\"cirru|cr\"],\n Clojure: [\"clj|cljs\"],\n Cobol: [\"CBL|COB\"],\n coffee: [\"coffee|cf|cson|^Cakefile\"],\n ColdFusion: [\"cfm\"],\n Crystal: [\"cr\"],\n CSharp: [\"cs\"],\n Csound_Document: [\"csd\"],\n Csound_Orchestra: [\"orc\"],\n Csound_Score: [\"sco\"],\n CSS: [\"css\"],\n Curly: [\"curly\"],\n D: [\"d|di\"],\n Dart: [\"dart\"],\n Diff: [\"diff|patch\"],\n Dockerfile: [\"^Dockerfile\"],\n Dot: [\"dot\"],\n Drools: [\"drl\"],\n Edifact: [\"edi\"],\n Eiffel: [\"e|ge\"],\n EJS: [\"ejs\"],\n Elixir: [\"ex|exs\"],\n Elm: [\"elm\"],\n Erlang: [\"erl|hrl\"],\n Forth: [\"frt|fs|ldr|fth|4th\"],\n Fortran: [\"f|f90\"],\n FSharp: [\"fsi|fs|ml|mli|fsx|fsscript\"],\n FSL: [\"fsl\"],\n FTL: [\"ftl\"],\n Gcode: [\"gcode\"],\n Gherkin: [\"feature\"],\n Gitignore: [\"^.gitignore\"],\n Glsl: [\"glsl|frag|vert\"],\n Gobstones: [\"gbs\"],\n golang: [\"go\"],\n GraphQLSchema: [\"gql\"],\n Groovy: [\"groovy\"],\n HAML: [\"haml\"],\n Handlebars: [\"hbs|handlebars|tpl|mustache\"],\n Haskell: [\"hs\"],\n Haskell_Cabal: [\"cabal\"],\n haXe: [\"hx\"],\n Hjson: [\"hjson\"],\n HTML: [\"html|htm|xhtml|vue|we|wpy\"],\n HTML_Elixir: [\"eex|html.eex\"],\n HTML_Ruby: [\"erb|rhtml|html.erb\"],\n INI: [\"ini|conf|cfg|prefs\"],\n Io: [\"io\"],\n Jack: [\"jack\"],\n Jade: [\"jade|pug\"],\n Java: [\"java\"],\n JavaScript: [\"js|jsm|jsx\"],\n JSON: [\"json\"],\n JSON5: [\"json5\"],\n JSONiq: [\"jq\"],\n JSP: [\"jsp\"],\n JSSM: [\"jssm|jssm_state\"],\n JSX: [\"jsx\"],\n Julia: [\"jl\"],\n Kotlin: [\"kt|kts\"],\n LaTeX: [\"tex|latex|ltx|bib\"],\n LESS: [\"less\"],\n Liquid: [\"liquid\"],\n Lisp: [\"lisp\"],\n LiveScript: [\"ls\"],\n LogiQL: [\"logic|lql\"],\n LSL: [\"lsl\"],\n Lua: [\"lua\"],\n LuaPage: [\"lp\"],\n Lucene: [\"lucene\"],\n Makefile: [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n Markdown: [\"md|markdown\"],\n Mask: [\"mask\"],\n MATLAB: [\"matlab\"],\n Maze: [\"mz\"],\n MediaWiki: [\"wiki|mediawiki\"],\n MEL: [\"mel\"],\n MIXAL: [\"mixal\"],\n MUSHCode: [\"mc|mush\"],\n MySQL: [\"mysql\"],\n Nginx: [\"nginx|conf\"],\n Nim: [\"nim\"],\n Nix: [\"nix\"],\n NSIS: [\"nsi|nsh\"],\n Nunjucks: [\"nunjucks|nunjs|nj|njk\"],\n ObjectiveC: [\"m|mm\"],\n OCaml: [\"ml|mli\"],\n Pascal: [\"pas|p\"],\n Perl: [\"pl|pm\"],\n Perl6: [\"p6|pl6|pm6\"],\n pgSQL: [\"pgsql\"],\n PHP: [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n PHP_Laravel_blade: [\"blade.php\"],\n Pig: [\"pig\"],\n Powershell: [\"ps1\"],\n Praat: [\"praat|praatscript|psc|proc\"],\n Prisma: [\"prisma\"],\n Prolog: [\"plg|prolog\"],\n Properties: [\"properties\"],\n Protobuf: [\"proto\"],\n Puppet: [\"epp|pp\"],\n Python: [\"py\"],\n QML: [\"qml\"],\n R: [\"r\"],\n Razor: [\"cshtml|asp\"],\n RDoc: [\"Rd\"],\n Red: [\"red|reds\"],\n RHTML: [\"Rhtml\"],\n RST: [\"rst\"],\n Ruby: [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n Rust: [\"rs\"],\n SASS: [\"sass\"],\n SCAD: [\"scad\"],\n Scala: [\"scala|sbt\"],\n Scheme: [\"scm|sm|rkt|oak|scheme\"],\n SCSS: [\"scss\"],\n SH: [\"sh|bash|^.bashrc\"],\n SJS: [\"sjs\"],\n Slim: [\"slim|skim\"],\n Smarty: [\"smarty|tpl\"],\n snippets: [\"snippets\"],\n Soy_Template:[\"soy\"],\n Space: [\"space\"],\n SQL: [\"sql\"],\n SQLServer: [\"sqlserver\"],\n Stylus: [\"styl|stylus\"],\n SVG: [\"svg\"],\n Swift: [\"swift\"],\n Tcl: [\"tcl\"],\n Terraform: [\"tf\", \"tfvars\", \"terragrunt\"],\n Tex: [\"tex\"],\n Text: [\"txt\"],\n Textile: [\"textile\"],\n Toml: [\"toml\"],\n TSX: [\"tsx\"],\n Twig: [\"latte|twig|swig\"],\n Typescript: [\"ts|typescript|str\"],\n Vala: [\"vala\"],\n VBScript: [\"vbs|vb\"],\n Velocity: [\"vm\"],\n Verilog: [\"v|vh|sv|svh\"],\n VHDL: [\"vhd|vhdl\"],\n Visualforce: [\"vfp|component|page\"],\n Wollok: [\"wlk|wpgm|wtest\"],\n XML: [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n XQuery: [\"xq\"],\n YAML: [\"yaml|yml\"],\n Zeek: [\"zeek|bro\"],\n Django: [\"html\"]\n};\n\nvar nameOverrides = {\n ObjectiveC: \"Objective-C\",\n CSharp: \"C#\",\n golang: \"Go\",\n C_Cpp: \"C and C++\",\n Csound_Document: \"Csound Document\",\n Csound_Orchestra: \"Csound\",\n Csound_Score: \"Csound Score\",\n coffee: \"CoffeeScript\",\n HTML_Ruby: \"HTML (Ruby)\",\n HTML_Elixir: \"HTML (Elixir)\",\n FTL: \"FreeMarker\",\n PHP_Laravel_blade: \"PHP (Blade Template)\",\n Perl6: \"Perl 6\",\n AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n var data = supportedModes[name];\n var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n var filename = name.toLowerCase();\n var mode = new Mode(filename, displayName, data[0]);\n modesByName[filename] = mode;\n modes.push(mode);\n}\n\nmodule.exports = {\n getModeForPath: getModeForPath,\n modes: modes,\n modesByName: modesByName\n};\n\n});\n\nace.define(\"ace/ext/prompt\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\",\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",\"ace/autocomplete\",\"ace/autocomplete/popup\",\"ace/autocomplete/popup\",\"ace/undomanager\",\"ace/tokenizer\",\"ace/ext/menu_tools/overlay_page\",\"ace/ext/modelist\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar shortcuts = require(\"../ext/menu_tools/get_editor_keyboard_shortcuts\");\nvar FilteredList= require(\"../autocomplete\").FilteredList;\nvar AcePopup = require('../autocomplete/popup').AcePopup;\nvar $singleLineEditor = require('../autocomplete/popup').$singleLineEditor;\nvar UndoManager = require(\"../undomanager\").UndoManager;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar overlayPage = require(\"./menu_tools/overlay_page\").overlayPage;\nvar modelist = require(\"./modelist\");\nvar openPrompt;\n\nfunction prompt(editor, message, options, callback) {\n if (typeof message == \"object\") {\n return prompt(editor, \"\", message, options);\n }\n if (openPrompt) {\n var lastPrompt = openPrompt;\n editor = lastPrompt.editor;\n lastPrompt.close();\n if (lastPrompt.name && lastPrompt.name == options.name)\n return;\n }\n if (options.$type)\n return prompt[options.$type](editor, callback);\n\n var cmdLine = $singleLineEditor();\n cmdLine.session.setUndoManager(new UndoManager());\n\n var el = dom.buildDom([\"div\", {class: \"ace_prompt_container\" + (options.hasDescription ? \" input-box-with-description\" : \"\")}]);\n var overlay = overlayPage(editor, el, done);\n el.appendChild(cmdLine.container);\n\n if (editor) {\n editor.cmdLine = cmdLine;\n cmdLine.setOption(\"fontSize\", editor.getOption(\"fontSize\"));\n }\n if (message) {\n cmdLine.setValue(message, 1);\n }\n if (options.selection) {\n cmdLine.selection.setRange({\n start: cmdLine.session.doc.indexToPosition(options.selection[0]),\n end: cmdLine.session.doc.indexToPosition(options.selection[1])\n });\n }\n\n if (options.getCompletions) {\n var popup = new AcePopup();\n popup.renderer.setStyle(\"ace_autocomplete_inline\");\n popup.container.style.display = \"block\";\n popup.container.style.maxWidth = \"600px\";\n popup.container.style.width = \"100%\";\n popup.container.style.marginTop = \"3px\";\n popup.renderer.setScrollMargin(2, 2, 0, 0);\n popup.autoSelect = false;\n popup.renderer.$maxLines = 15;\n popup.setRow(-1);\n popup.on(\"click\", function(e) {\n var data = popup.getData(popup.getRow());\n if (!data.error) {\n cmdLine.setValue(data.value || data.name || data);\n accept();\n e.stop();\n }\n });\n el.appendChild(popup.container);\n updateCompletions();\n }\n\n if (options.$rules) {\n var tokenizer = new Tokenizer(options.$rules);\n cmdLine.session.bgTokenizer.setTokenizer(tokenizer);\n }\n\n if (options.placeholder) {\n cmdLine.setOption(\"placeholder\", options.placeholder);\n }\n\n if (options.hasDescription) {\n var promptTextContainer = dom.buildDom([\"div\", {class: \"ace_prompt_text_container\"}]);\n dom.buildDom(options.prompt || \"Press 'Enter' to confirm or 'Escape' to cancel\", promptTextContainer);\n el.appendChild(promptTextContainer);\n }\n\n overlay.setIgnoreFocusOut(options.ignoreFocusOut);\n\n function accept() {\n var val;\n if (popup && popup.getCursorPosition().row > 0) {\n val = valueFromRecentList();\n } else {\n val = cmdLine.getValue();\n }\n var curData = popup ? popup.getData(popup.getRow()) : val;\n if (curData && !curData.error) {\n done();\n options.onAccept && options.onAccept({\n value: val,\n item: curData\n }, cmdLine);\n }\n }\n\n var keys = {\n \"Enter\": accept,\n \"Esc|Shift-Esc\": function() {\n options.onCancel && options.onCancel(cmdLine.getValue(), cmdLine);\n done();\n }\n };\n\n if (popup) {\n Object.assign(keys, {\n \"Up\": function(editor) { popup.goTo(\"up\"); valueFromRecentList();},\n \"Down\": function(editor) { popup.goTo(\"down\"); valueFromRecentList();},\n \"Ctrl-Up|Ctrl-Home\": function(editor) { popup.goTo(\"start\"); valueFromRecentList();},\n \"Ctrl-Down|Ctrl-End\": function(editor) { popup.goTo(\"end\"); valueFromRecentList();},\n \"Tab\": function(editor) {\n popup.goTo(\"down\"); valueFromRecentList();\n },\n \"PageUp\": function(editor) { popup.gotoPageUp(); valueFromRecentList();},\n \"PageDown\": function(editor) { popup.gotoPageDown(); valueFromRecentList();}\n });\n }\n\n cmdLine.commands.bindKeys(keys);\n\n function done() {\n overlay.close();\n callback && callback();\n openPrompt = null;\n }\n\n cmdLine.on(\"input\", function() {\n options.onInput && options.onInput();\n updateCompletions();\n });\n\n function updateCompletions() {\n if (options.getCompletions) {\n var prefix;\n if (options.getPrefix) {\n prefix = options.getPrefix(cmdLine);\n }\n\n var completions = options.getCompletions(cmdLine);\n popup.setData(completions, prefix);\n popup.resize(true);\n }\n }\n\n function valueFromRecentList() {\n var current = popup.getData(popup.getRow());\n if (current && !current.error)\n return current.value || current.caption || current;\n }\n\n cmdLine.resize(true);\n if (popup) {\n popup.resize(true);\n }\n cmdLine.focus();\n\n openPrompt = {\n close: done,\n name: options.name,\n editor: editor\n };\n}\n\nprompt.gotoLine = function(editor, callback) {\n function stringifySelection(selection) {\n if (!Array.isArray(selection))\n selection = [selection];\n return selection.map(function(r) {\n var cursor = r.isBackwards ? r.start: r.end;\n var anchor = r.isBackwards ? r.end: r.start;\n var row = anchor.row;\n var s = (row + 1) + \":\" + anchor.column;\n\n if (anchor.row == cursor.row) {\n if (anchor.column != cursor.column)\n s += \">\" + \":\" + cursor.column;\n } else {\n s += \">\" + (cursor.row + 1) + \":\" + cursor.column;\n }\n return s;\n }).reverse().join(\", \");\n }\n\n prompt(editor, \":\" + stringifySelection(editor.selection.toJSON()), {\n name: \"gotoLine\",\n selection: [1, Number.MAX_VALUE],\n onAccept: function(data) {\n var value = data.value;\n var _history = prompt.gotoLine._history;\n if (!_history)\n prompt.gotoLine._history = _history = [];\n if (_history.indexOf(value) != -1)\n _history.splice(_history.indexOf(value), 1);\n _history.unshift(value);\n if (_history.length > 20) _history.length = 20;\n \n \n var pos = editor.getCursorPosition();\n var ranges = [];\n value.replace(/^:/, \"\").split(/,/).map(function(str) {\n var parts = str.split(/([<>:+-]|c?\\d+)|[^c\\d<>:+-]+/).filter(Boolean);\n var i = 0;\n function readPosition() {\n var c = parts[i++];\n if (!c) return;\n if (c[0] == \"c\") {\n var index = parseInt(c.slice(1)) || 0;\n return editor.session.doc.indexToPosition(index);\n }\n var row = pos.row;\n var column = 0;\n if (/\\d/.test(c)) {\n row = parseInt(c) - 1;\n c = parts[i++];\n }\n if (c == \":\") {\n c = parts[i++];\n if (/\\d/.test(c)) {\n column = parseInt(c) || 0;\n }\n }\n return {row: row, column: column};\n }\n pos = readPosition();\n var range = Range.fromPoints(pos, pos);\n if (parts[i] == \">\") {\n i++;\n range.end = readPosition();\n }\n else if (parts[i] == \"<\") {\n i++;\n range.start = readPosition();\n }\n ranges.unshift(range);\n });\n editor.selection.fromJSON(ranges);\n var scrollTop = editor.renderer.scrollTop;\n editor.renderer.scrollSelectionIntoView(\n editor.selection.anchor, \n editor.selection.cursor, \n 0.5\n );\n editor.renderer.animateScrolling(scrollTop);\n },\n history: function() {\n var undoManager = editor.session.getUndoManager();\n if (!prompt.gotoLine._history)\n return [];\n return prompt.gotoLine._history;\n\n },\n getCompletions: function(cmdLine) {\n var value = cmdLine.getValue();\n var m = value.replace(/^:/, \"\").split(\":\");\n var row = Math.min(parseInt(m[0]) || 1, editor.session.getLength()) - 1;\n var line = editor.session.getLine(row);\n var current = value + \" \" + line;\n return [current].concat(this.history());\n },\n $rules: {\n start: [{\n regex: /\\d+/,\n token: \"string\"\n }, {\n regex: /[:,><+\\-c]/,\n token: \"keyword\"\n }]\n }\n });\n};\n\nprompt.commands = function(editor, callback) {\n function normalizeName(name) {\n return (name || \"\").replace(/^./, function(x) {\n return x.toUpperCase(x);\n }).replace(/[a-z][A-Z]/g, function(x) {\n return x[0] + \" \" + x[1].toLowerCase(x);\n });\n }\n function getEditorCommandsByName(excludeCommands) {\n var commandsByName = [];\n var commandMap = {};\n editor.keyBinding.$handlers.forEach(function(handler) {\n var platform = handler.platform;\n var cbn = handler.byName;\n for (var i in cbn) {\n var key;\n if (cbn[i].bindKey && cbn[i].bindKey[platform] !== null) {\n key = cbn[i].bindKey[\"win\"];\n } else {\n key = \"\";\n }\n\n var commands = cbn[i];\n var description = commands.description || normalizeName(commands.name);\n if (!Array.isArray(commands))\n commands = [commands];\n commands.forEach(function(command) {\n if (typeof command != \"string\")\n command = command.name;\n var needle = excludeCommands.find(function(el) {\n return el === command;\n });\n if (!needle) {\n if (commandMap[command]) {\n commandMap[command].key += \"|\" + key;\n } else {\n commandMap[command] = {key: key, command: command, description: description};\n commandsByName.push(commandMap[command]);\n }\n }\n });\n }\n });\n return commandsByName;\n }\n var excludeCommandsList = [\"insertstring\", \"inserttext\", \"setIndentation\", \"paste\"];\n var shortcutsArray = getEditorCommandsByName(excludeCommandsList);\n shortcutsArray = shortcutsArray.map(function(item) {\n return {value: item.description, meta: item.key, command: item.command};\n });\n prompt(editor, \"\", {\n name: \"commands\",\n selection: [0, Number.MAX_VALUE],\n maxHistoryCount: 5,\n onAccept: function(data) {\n if (data.item) {\n var commandName = data.item.command;\n this.addToHistory(data.item);\n\n editor.execCommand(commandName);\n }\n },\n addToHistory: function(item) {\n var history = this.history();\n history.unshift(item);\n delete item.message;\n for (var i = 1; i < history.length; i++) {\n if (history[i][\"command\"] == item.command ) {\n history.splice(i, 1);\n break;\n }\n }\n if (this.maxHistoryCount > 0 && history.length > this.maxHistoryCount) {\n history.splice(history.length - 1, 1);\n }\n prompt.commands.history = history;\n },\n history: function() {\n return prompt.commands.history || [];\n },\n getPrefix: function(cmdLine) {\n var currentPos = cmdLine.getCursorPosition();\n var filterValue = cmdLine.getValue();\n return filterValue.substring(0, currentPos.column);\n },\n getCompletions: function(cmdLine) {\n function getFilteredCompletions(commands, prefix) {\n var resultCommands = JSON.parse(JSON.stringify(commands));\n\n var filtered = new FilteredList(resultCommands);\n return filtered.filterCompletions(resultCommands, prefix);\n }\n\n function getUniqueCommandList(commands, usedCommands) {\n if (!usedCommands || !usedCommands.length) {\n return commands;\n }\n var excludeCommands = [];\n usedCommands.forEach(function(item) {\n excludeCommands.push(item.command);\n });\n\n var resultCommands = [];\n\n commands.forEach(function(item) {\n if (excludeCommands.indexOf(item.command) === -1) {\n resultCommands.push(item);\n }\n });\n\n return resultCommands;\n }\n\n var prefix = this.getPrefix(cmdLine);\n var recentlyUsedCommands = getFilteredCompletions(this.history(), prefix);\n var otherCommands = getUniqueCommandList(shortcutsArray, recentlyUsedCommands);\n otherCommands = getFilteredCompletions(otherCommands, prefix);\n\n if (recentlyUsedCommands.length && otherCommands.length) {\n recentlyUsedCommands[0][\"message\"] = \" Recently used\";\n otherCommands[0][\"message\"] = \" Other commands\";\n }\n\n var completions = recentlyUsedCommands.concat(otherCommands);\n return completions.length > 0 ? completions : [{\n value: \"No matching commands\",\n error: 1\n }];\n }\n });\n};\n\nprompt.modes = function(editor, callback) {\n var modesArray = modelist.modes;\n modesArray = modesArray.map(function(item) {\n return {value: item.caption, mode: item.name};\n });\n prompt(editor, \"\", {\n name: \"modes\",\n selection: [0, Number.MAX_VALUE],\n onAccept: function(data) {\n if (data.item) {\n var modeName = \"ace/mode/\" + data.item.mode;\n editor.session.setMode(modeName);\n }\n },\n getPrefix: function(cmdLine) {\n var currentPos = cmdLine.getCursorPosition();\n var filterValue = cmdLine.getValue();\n return filterValue.substring(0, currentPos.column);\n },\n getCompletions: function(cmdLine) {\n function getFilteredCompletions(modes, prefix) {\n var resultCommands = JSON.parse(JSON.stringify(modes));\n\n var filtered = new FilteredList(resultCommands);\n return filtered.filterCompletions(resultCommands, prefix);\n }\n\n var prefix = this.getPrefix(cmdLine);\n var completions = getFilteredCompletions(modesArray, prefix);\n return completions.length > 0 ? completions : [{\n \"caption\": \"No mode matching\",\n \"value\": \"No mode matching\",\n \"error\": 1\n }];\n }\n });\n};\n\ndom.importCssString(\".ace_prompt_container {\\\n max-width: 600px;\\\n width: 100%;\\\n margin: 20px auto;\\\n padding: 3px;\\\n background: white;\\\n border-radius: 2px;\\\n box-shadow: 0px 2px 3px 0px #555;\\\n}\");\n\n\nexports.prompt = prompt;\n\n}); (function() {\n ace.require([\"ace/ext/prompt\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar searchboxCss = \"\\\n.ace_search {\\\nbackground-color: #ddd;\\\ncolor: #666;\\\nborder: 1px solid #cbcbcb;\\\nborder-top: 0 none;\\\noverflow: hidden;\\\nmargin: 0;\\\npadding: 4px 6px 0 4px;\\\nposition: absolute;\\\ntop: 0;\\\nz-index: 99;\\\nwhite-space: normal;\\\n}\\\n.ace_search.left {\\\nborder-left: 0 none;\\\nborder-radius: 0px 0px 5px 0px;\\\nleft: 0;\\\n}\\\n.ace_search.right {\\\nborder-radius: 0px 0px 0px 5px;\\\nborder-right: 0 none;\\\nright: 0;\\\n}\\\n.ace_search_form, .ace_replace_form {\\\nmargin: 0 20px 4px 0;\\\noverflow: hidden;\\\nline-height: 1.9;\\\n}\\\n.ace_replace_form {\\\nmargin-right: 0;\\\n}\\\n.ace_search_form.ace_nomatch {\\\noutline: 1px solid red;\\\n}\\\n.ace_search_field {\\\nborder-radius: 3px 0 0 3px;\\\nbackground-color: white;\\\ncolor: black;\\\nborder: 1px solid #cbcbcb;\\\nborder-right: 0 none;\\\noutline: 0;\\\npadding: 0;\\\nfont-size: inherit;\\\nmargin: 0;\\\nline-height: inherit;\\\npadding: 0 6px;\\\nmin-width: 17em;\\\nvertical-align: top;\\\nmin-height: 1.8em;\\\nbox-sizing: content-box;\\\n}\\\n.ace_searchbtn {\\\nborder: 1px solid #cbcbcb;\\\nline-height: inherit;\\\ndisplay: inline-block;\\\npadding: 0 6px;\\\nbackground: #fff;\\\nborder-right: 0 none;\\\nborder-left: 1px solid #dcdcdc;\\\ncursor: pointer;\\\nmargin: 0;\\\nposition: relative;\\\ncolor: #666;\\\n}\\\n.ace_searchbtn:last-child {\\\nborder-radius: 0 3px 3px 0;\\\nborder-right: 1px solid #cbcbcb;\\\n}\\\n.ace_searchbtn:disabled {\\\nbackground: none;\\\ncursor: default;\\\n}\\\n.ace_searchbtn:hover {\\\nbackground-color: #eef1f6;\\\n}\\\n.ace_searchbtn.prev, .ace_searchbtn.next {\\\npadding: 0px 0.7em\\\n}\\\n.ace_searchbtn.prev:after, .ace_searchbtn.next:after {\\\ncontent: \\\"\\\";\\\nborder: solid 2px #888;\\\nwidth: 0.5em;\\\nheight: 0.5em;\\\nborder-width: 2px 0 0 2px;\\\ndisplay:inline-block;\\\ntransform: rotate(-45deg);\\\n}\\\n.ace_searchbtn.next:after {\\\nborder-width: 0 2px 2px 0 ;\\\n}\\\n.ace_searchbtn_close {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\\nborder-radius: 50%;\\\nborder: 0 none;\\\ncolor: #656565;\\\ncursor: pointer;\\\nfont: 16px/16px Arial;\\\npadding: 0;\\\nheight: 14px;\\\nwidth: 14px;\\\ntop: 9px;\\\nright: 7px;\\\nposition: absolute;\\\n}\\\n.ace_searchbtn_close:hover {\\\nbackground-color: #656565;\\\nbackground-position: 50% 100%;\\\ncolor: white;\\\n}\\\n.ace_button {\\\nmargin-left: 2px;\\\ncursor: pointer;\\\n-webkit-user-select: none;\\\n-moz-user-select: none;\\\n-o-user-select: none;\\\n-ms-user-select: none;\\\nuser-select: none;\\\noverflow: hidden;\\\nopacity: 0.7;\\\nborder: 1px solid rgba(100,100,100,0.23);\\\npadding: 1px;\\\nbox-sizing: border-box!important;\\\ncolor: black;\\\n}\\\n.ace_button:hover {\\\nbackground-color: #eee;\\\nopacity:1;\\\n}\\\n.ace_button:active {\\\nbackground-color: #ddd;\\\n}\\\n.ace_button.checked {\\\nborder-color: #3399ff;\\\nopacity:1;\\\n}\\\n.ace_search_options{\\\nmargin-bottom: 3px;\\\ntext-align: right;\\\n-webkit-user-select: none;\\\n-moz-user-select: none;\\\n-o-user-select: none;\\\n-ms-user-select: none;\\\nuser-select: none;\\\nclear: both;\\\n}\\\n.ace_search_counter {\\\nfloat: left;\\\nfont-family: arial;\\\npadding: 0 8px;\\\n}\";\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar keyUtil = require(\"../lib/keys\");\n\nvar MAX_COUNT = 999;\n\ndom.importCssString(searchboxCss, \"ace_searchbox\");\n\nvar SearchBox = function(editor, range, showReplaceForm) {\n var div = dom.createElement(\"div\");\n dom.buildDom([\"div\", {class:\"ace_search right\"},\n [\"span\", {action: \"hide\", class: \"ace_searchbtn_close\"}],\n [\"div\", {class: \"ace_search_form\"},\n [\"input\", {class: \"ace_search_field\", placeholder: \"Search for\", spellcheck: \"false\"}],\n [\"span\", {action: \"findPrev\", class: \"ace_searchbtn prev\"}, \"\\u200b\"],\n [\"span\", {action: \"findNext\", class: \"ace_searchbtn next\"}, \"\\u200b\"],\n [\"span\", {action: \"findAll\", class: \"ace_searchbtn\", title: \"Alt-Enter\"}, \"All\"]\n ],\n [\"div\", {class: \"ace_replace_form\"},\n [\"input\", {class: \"ace_search_field\", placeholder: \"Replace with\", spellcheck: \"false\"}],\n [\"span\", {action: \"replaceAndFindNext\", class: \"ace_searchbtn\"}, \"Replace\"],\n [\"span\", {action: \"replaceAll\", class: \"ace_searchbtn\"}, \"All\"]\n ],\n [\"div\", {class: \"ace_search_options\"},\n [\"span\", {action: \"toggleReplace\", class: \"ace_button\", title: \"Toggle Replace mode\",\n style: \"float:left;margin-top:-2px;padding:0 5px;\"}, \"+\"],\n [\"span\", {class: \"ace_search_counter\"}],\n [\"span\", {action: \"toggleRegexpMode\", class: \"ace_button\", title: \"RegExp Search\"}, \".*\"],\n [\"span\", {action: \"toggleCaseSensitive\", class: \"ace_button\", title: \"CaseSensitive Search\"}, \"Aa\"],\n [\"span\", {action: \"toggleWholeWords\", class: \"ace_button\", title: \"Whole Word Search\"}, \"\\\\b\"],\n [\"span\", {action: \"searchInSelection\", class: \"ace_button\", title: \"Search In Selection\"}, \"S\"]\n ]\n ], div);\n this.element = div.firstChild;\n \n this.setSession = this.setSession.bind(this);\n\n this.$init();\n this.setEditor(editor);\n dom.importCssString(searchboxCss, \"ace_searchbox\", editor.container);\n};\n\n(function() {\n this.setEditor = function(editor) {\n editor.searchBox = this;\n editor.renderer.scroller.appendChild(this.element);\n this.editor = editor;\n };\n \n this.setSession = function(e) {\n this.searchRange = null;\n this.$syncOptions(true);\n };\n\n this.$initElements = function(sb) {\n this.searchBox = sb.querySelector(\".ace_search_form\");\n this.replaceBox = sb.querySelector(\".ace_replace_form\");\n this.searchOption = sb.querySelector(\"[action=searchInSelection]\");\n this.replaceOption = sb.querySelector(\"[action=toggleReplace]\");\n this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\n this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\n this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\n this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\n this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\n this.searchCounter = sb.querySelector(\".ace_search_counter\");\n };\n \n this.$init = function() {\n var sb = this.element;\n \n this.$initElements(sb);\n \n var _this = this;\n event.addListener(sb, \"mousedown\", function(e) {\n setTimeout(function(){\n _this.activeInput.focus();\n }, 0);\n event.stopPropagation(e);\n });\n event.addListener(sb, \"click\", function(e) {\n var t = e.target || e.srcElement;\n var action = t.getAttribute(\"action\");\n if (action && _this[action])\n _this[action]();\n else if (_this.$searchBarKb.commands[action])\n _this.$searchBarKb.commands[action].exec(_this);\n event.stopPropagation(e);\n });\n\n event.addCommandKeyListener(sb, function(e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\n if (command && command.exec) {\n command.exec(_this);\n event.stopEvent(e);\n }\n });\n\n this.$onChange = lang.delayedCall(function() {\n _this.find(false, false);\n });\n\n event.addListener(this.searchInput, \"input\", function() {\n _this.$onChange.schedule(20);\n });\n event.addListener(this.searchInput, \"focus\", function() {\n _this.activeInput = _this.searchInput;\n _this.searchInput.value && _this.highlight();\n });\n event.addListener(this.replaceInput, \"focus\", function() {\n _this.activeInput = _this.replaceInput;\n _this.searchInput.value && _this.highlight();\n });\n };\n this.$closeSearchBarKb = new HashHandler([{\n bindKey: \"Esc\",\n name: \"closeSearchBar\",\n exec: function(editor) {\n editor.searchBox.hide();\n }\n }]);\n this.$searchBarKb = new HashHandler();\n this.$searchBarKb.bindKeys({\n \"Ctrl-f|Command-f\": function(sb) {\n var isReplace = sb.isReplace = !sb.isReplace;\n sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\n sb.replaceOption.checked = false;\n sb.$syncOptions();\n sb.searchInput.focus();\n },\n \"Ctrl-H|Command-Option-F\": function(sb) {\n if (sb.editor.getReadOnly())\n return;\n sb.replaceOption.checked = true;\n sb.$syncOptions();\n sb.replaceInput.focus();\n },\n \"Ctrl-G|Command-G\": function(sb) {\n sb.findNext();\n },\n \"Ctrl-Shift-G|Command-Shift-G\": function(sb) {\n sb.findPrev();\n },\n \"esc\": function(sb) {\n setTimeout(function() { sb.hide();});\n },\n \"Return\": function(sb) {\n if (sb.activeInput == sb.replaceInput)\n sb.replace();\n sb.findNext();\n },\n \"Shift-Return\": function(sb) {\n if (sb.activeInput == sb.replaceInput)\n sb.replace();\n sb.findPrev();\n },\n \"Alt-Return\": function(sb) {\n if (sb.activeInput == sb.replaceInput)\n sb.replaceAll();\n sb.findAll();\n },\n \"Tab\": function(sb) {\n (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\n }\n });\n\n this.$searchBarKb.addCommands([{\n name: \"toggleRegexpMode\",\n bindKey: {win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\"},\n exec: function(sb) {\n sb.regExpOption.checked = !sb.regExpOption.checked;\n sb.$syncOptions();\n }\n }, {\n name: \"toggleCaseSensitive\",\n bindKey: {win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\"},\n exec: function(sb) {\n sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\n sb.$syncOptions();\n }\n }, {\n name: \"toggleWholeWords\",\n bindKey: {win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\"},\n exec: function(sb) {\n sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\n sb.$syncOptions();\n }\n }, {\n name: \"toggleReplace\",\n exec: function(sb) {\n sb.replaceOption.checked = !sb.replaceOption.checked;\n sb.$syncOptions();\n }\n }, {\n name: \"searchInSelection\",\n exec: function(sb) {\n sb.searchOption.checked = !sb.searchRange;\n sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());\n sb.$syncOptions();\n }\n }]);\n \n this.setSearchRange = function(range) {\n this.searchRange = range;\n if (range) {\n this.searchRangeMarker = this.editor.session.addMarker(range, \"ace_active-line\");\n } else if (this.searchRangeMarker) {\n this.editor.session.removeMarker(this.searchRangeMarker);\n this.searchRangeMarker = null;\n }\n };\n\n this.$syncOptions = function(preventScroll) {\n dom.setCssClass(this.replaceOption, \"checked\", this.searchRange);\n dom.setCssClass(this.searchOption, \"checked\", this.searchOption.checked);\n this.replaceOption.textContent = this.replaceOption.checked ? \"-\" : \"+\";\n dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\n dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\n dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\n var readOnly = this.editor.getReadOnly();\n this.replaceOption.style.display = readOnly ? \"none\" : \"\";\n this.replaceBox.style.display = this.replaceOption.checked && !readOnly ? \"\" : \"none\";\n this.find(false, false, preventScroll);\n };\n\n this.highlight = function(re) {\n this.editor.session.highlight(re || this.editor.$search.$options.re);\n this.editor.renderer.updateBackMarkers();\n };\n this.find = function(skipCurrent, backwards, preventScroll) {\n var range = this.editor.find(this.searchInput.value, {\n skipCurrent: skipCurrent,\n backwards: backwards,\n wrap: true,\n regExp: this.regExpOption.checked,\n caseSensitive: this.caseSensitiveOption.checked,\n wholeWord: this.wholeWordOption.checked,\n preventScroll: preventScroll,\n range: this.searchRange\n });\n var noMatch = !range && this.searchInput.value;\n dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n this.editor._emit(\"findSearchBox\", { match: !noMatch });\n this.highlight();\n this.updateCounter();\n };\n this.updateCounter = function() {\n var editor = this.editor;\n var regex = editor.$search.$options.re;\n var all = 0;\n var before = 0;\n if (regex) {\n var value = this.searchRange\n ? editor.session.getTextRange(this.searchRange)\n : editor.getValue();\n \n var offset = editor.session.doc.positionToIndex(editor.selection.anchor);\n if (this.searchRange)\n offset -= editor.session.doc.positionToIndex(this.searchRange.start);\n \n var last = regex.lastIndex = 0;\n var m;\n while ((m = regex.exec(value))) {\n all++;\n last = m.index;\n if (last <= offset)\n before++;\n if (all > MAX_COUNT)\n break;\n if (!m[0]) {\n regex.lastIndex = last += 1;\n if (last >= value.length)\n break;\n }\n }\n }\n this.searchCounter.textContent = before + \" of \" + (all > MAX_COUNT ? MAX_COUNT + \"+\" : all);\n };\n this.findNext = function() {\n this.find(true, false);\n };\n this.findPrev = function() {\n this.find(true, true);\n };\n this.findAll = function(){\n var range = this.editor.findAll(this.searchInput.value, { \n regExp: this.regExpOption.checked,\n caseSensitive: this.caseSensitiveOption.checked,\n wholeWord: this.wholeWordOption.checked\n });\n var noMatch = !range && this.searchInput.value;\n dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n this.editor._emit(\"findSearchBox\", { match: !noMatch });\n this.highlight();\n this.hide();\n };\n this.replace = function() {\n if (!this.editor.getReadOnly())\n this.editor.replace(this.replaceInput.value);\n }; \n this.replaceAndFindNext = function() {\n if (!this.editor.getReadOnly()) {\n this.editor.replace(this.replaceInput.value);\n this.findNext();\n }\n };\n this.replaceAll = function() {\n if (!this.editor.getReadOnly())\n this.editor.replaceAll(this.replaceInput.value);\n };\n\n this.hide = function() {\n this.active = false;\n this.setSearchRange(null);\n this.editor.off(\"changeSession\", this.setSession);\n \n this.element.style.display = \"none\";\n this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\n this.editor.focus();\n };\n this.show = function(value, isReplace) {\n this.active = true;\n this.editor.on(\"changeSession\", this.setSession);\n this.element.style.display = \"\";\n this.replaceOption.checked = isReplace;\n \n if (value)\n this.searchInput.value = value;\n \n this.searchInput.focus();\n this.searchInput.select();\n\n this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\n \n this.$syncOptions(true);\n };\n\n this.isFocused = function() {\n var el = document.activeElement;\n return el == this.searchInput || el == this.replaceInput;\n };\n}).call(SearchBox.prototype);\n\nexports.SearchBox = SearchBox;\n\nexports.Search = function(editor, isReplace) {\n var sb = editor.searchBox || new SearchBox(editor);\n sb.show(editor.session.getTextRange(), isReplace);\n};\n\n}); (function() {\n ace.require([\"ace/ext/searchbox\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsonHighlightRules = function() {\n this.$rules = {\n \"start\" : [\n {\n token : \"variable\", // single line\n regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n }, {\n token : \"string\", // single line\n regex : '\"',\n next : \"string\"\n }, {\n token : \"constant.numeric\", // hex\n regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n }, {\n token : \"constant.numeric\", // float\n regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token : \"constant.language.boolean\",\n regex : \"(?:true|false)\\\\b\"\n }, {\n token : \"text\", // single quoted strings are not allowed\n regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n }, {\n token : \"comment\", // comments are not allowed, but who cares?\n regex : \"\\\\/\\\\/.*$\"\n }, {\n token : \"comment.start\", // comments are not allowed, but who cares?\n regex : \"\\\\/\\\\*\",\n next : \"comment\"\n }, {\n token : \"paren.lparen\",\n regex : \"[[({]\"\n }, {\n token : \"paren.rparen\",\n regex : \"[\\\\])}]\"\n }, {\n token : \"text\",\n regex : \"\\\\s+\"\n }\n ],\n \"string\" : [\n {\n token : \"constant.language.escape\",\n regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n }, {\n token : \"string\",\n regex : '\"|$',\n next : \"start\"\n }, {\n defaultToken : \"string\"\n }\n ],\n \"comment\" : [\n {\n token : \"comment.end\", // comments are not allowed, but who cares?\n regex : \"\\\\*\\\\/\",\n next : \"start\"\n }, {\n defaultToken: \"comment\"\n }\n ]\n };\n \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n this.checkOutdent = function(line, input) {\n if (! /^\\s+$/.test(line))\n return false;\n\n return /^\\s*\\}/.test(input);\n };\n\n this.autoOutdent = function(doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n\n if (!match) return 0;\n\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n if (!openBracePos || openBracePos.row == row) return 0;\n\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column-1), indent);\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(\n this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n );\n this.foldingStopMarker = new RegExp(\n this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n );\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n \n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n \n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n \n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n \n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n \n return fw;\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n \n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n \n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n \n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n \n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n } else if (foldStyle != \"all\")\n range = null;\n }\n \n return range;\n }\n\n if (foldStyle === \"markbegin\")\n return;\n\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n \n this.getSectionRange = function(session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n \n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n } else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n } else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n \n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function(session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n \n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m) continue;\n if (m[1]) depth--;\n else depth++;\n\n if (!depth) break;\n }\n\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n this.HighlightRules = HighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.lineCommentStart = \"//\";\n this.blockComment = {start: \"/*\", end: \"*/\"};\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n\n return indent;\n };\n\n this.checkOutdent = function(state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function(state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.createWorker = function(session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n worker.attachToDocument(session.getDocument());\n\n worker.on(\"annotate\", function(e) {\n session.setAnnotations(e.data);\n });\n\n worker.on(\"terminate\", function() {\n session.clearAnnotations();\n });\n\n return worker;\n };\n\n\n this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n}); (function() {\n ace.require([\"ace/mode/json\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","module.exports = __webpack_public_path__ + \"25ad3bfae6e67715015dcf654c357ed3.js\";"],"sourceRoot":""}