{"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/xmlbuilder/lib/NodeType.js","../node_modules/xmlbuilder/lib/XMLNode.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/regenerator/index.js","../node_modules/xmlbuilder/lib/Utility.js","../node_modules/webpack/buildin/global.js","../node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/xml2js/lib/xml2js.js","../node_modules/webpack/buildin/module.js","../node_modules/inherits/inherits_browser.js","../node_modules/react-dom/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/core-util-is/lib/util.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/xmlbuilder/lib/XMLCharacterData.js","../node_modules/xmlbuilder/lib/WriterState.js","../node_modules/events/events.js","../node_modules/process/browser.js","../node_modules/process-nextick-args/index.js","../node_modules/safe-buffer/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/xml2js/lib/defaults.js","../node_modules/xmlbuilder/lib/XMLElement.js","../node_modules/xmlbuilder/lib/XMLNamedNodeMap.js","../node_modules/xmlbuilder/lib/XMLCData.js","../node_modules/xmlbuilder/lib/XMLComment.js","../node_modules/xmlbuilder/lib/XMLDeclaration.js","../node_modules/xmlbuilder/lib/XMLDocType.js","../node_modules/xmlbuilder/lib/XMLDTDAttList.js","../node_modules/xmlbuilder/lib/XMLDTDEntity.js","../node_modules/xmlbuilder/lib/XMLDTDElement.js","../node_modules/xmlbuilder/lib/XMLDTDNotation.js","../node_modules/xmlbuilder/lib/XMLRaw.js","../node_modules/xmlbuilder/lib/XMLText.js","../node_modules/xmlbuilder/lib/XMLProcessingInstruction.js","../node_modules/xmlbuilder/lib/XMLStringWriter.js","../node_modules/buffer/index.js","../node_modules/readable-stream/readable-browser.js","../node_modules/readable-stream/lib/_stream_writable.js","../node_modules/string_decoder/lib/string_decoder.js","../node_modules/object-assign/index.js","../node_modules/webpack/buildin/amd-options.js","../node_modules/webpack/buildin/amd-define.js","../node_modules/xmlbuilder/lib/XMLDOMImplementation.js","../node_modules/xmlbuilder/lib/XMLDocument.js","../node_modules/xmlbuilder/lib/XMLAttribute.js","../node_modules/xmlbuilder/lib/XMLDummy.js","../node_modules/xmlbuilder/lib/XMLStringifier.js","../node_modules/xmlbuilder/lib/XMLWriterBase.js","../node_modules/isarray/index.js","../node_modules/readable-stream/lib/_stream_readable.js","../node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/timers-browserify/main.js","../node_modules/readable-stream/lib/_stream_transform.js","../node_modules/xml2js/lib/processors.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/regenerator-runtime/runtime.js","../node_modules/ace-builds/src-noconflict/mode-xml.js","../node_modules/xml2js/lib/builder.js","../node_modules/xmlbuilder/lib/index.js","../node_modules/xmlbuilder/lib/XMLDOMConfiguration.js","../node_modules/xmlbuilder/lib/XMLDOMErrorHandler.js","../node_modules/xmlbuilder/lib/XMLDOMStringList.js","../node_modules/xmlbuilder/lib/XMLNodeList.js","../node_modules/xmlbuilder/lib/DocumentPosition.js","../node_modules/xmlbuilder/lib/XMLDocumentCB.js","../node_modules/xmlbuilder/lib/XMLStreamWriter.js","../node_modules/xml2js/lib/parser.js","../node_modules/sax/lib/sax.js","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/stream-browserify/index.js","../node_modules/readable-stream/lib/internal/streams/BufferList.js","../node_modules/setimmediate/setImmediate.js","../node_modules/util-deprecate/browser.js","../node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/readable-stream/writable-browser.js","../node_modules/readable-stream/duplex-browser.js","../node_modules/readable-stream/transform.js","../node_modules/readable-stream/passthrough.js","../node_modules/xml2js/lib/bom.js","../node_modules/ace-builds/src-noconflict/worker-xml.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","Attribute","Text","CData","EntityReference","EntityDeclaration","ProcessingInstruction","Comment","Document","DocType","DocumentFragment","NotationDeclaration","Declaration","Raw","AttributeDeclaration","ElementDeclaration","Dummy","this","DocumentPosition","NodeType","XMLCData","XMLComment","XMLDeclaration","XMLDocType","XMLDummy","XMLElement","XMLNodeList","XMLProcessingInstruction","XMLRaw","XMLText","getValue","isEmpty","isFunction","isObject","ref1","hasProp","XMLNode","parent1","stringify","baseURI","defineProperty","childNodeList","j","ref2","textContent","debugInfo","setParent","results","childNode","item","k","lastChild","len1","ref3","val","apply","ignoreDecorators","convertAttKey","substr","separateArrayItems","dummy","keepNullNodes","convertTextKey","convertCDataKey","cdata","convertCommentKey","comment","convertRawKey","raw","convertPIKey","instruction","newChild","refChild","removed","splice","isRoot","insertAfter","commentBefore","commentAfter","insTarget","insValue","instructionBefore","instructionAfter","declaration","version","encoding","standalone","xmldec","unshift","root","dtd","pubID","sysID","doctype","up","rootObject","prev","importDocument","clonedRoot","clone","ele","nod","txt","dat","com","ins","dec","n","c","r","u","importXMLBuilder","replaceChild","oldChild","removeChild","hasChildNodes","cloneNode","deep","normalize","isSupported","feature","hasAttributes","attribs","compareDocumentPosition","other","res","Disconnected","ImplementationSpecific","random","Preceding","Following","isAncestor","Contains","isDescendant","isPreceding","lookupPrefix","namespaceURI","isDefaultNamespace","lookupNamespaceURI","prefix","isEqualNode","getFeature","setUserData","getUserData","nodePos","thisPos","treePosition","isFollowing","found","pos","foreachTreeNode","func","ownKeys","object","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","enumerable","_objectSpread2","source","getOwnPropertyDescriptors","defineProperties","isPlainObject","sources","ctor","proto","getPrototypeOf","constructor","Function","valueOf","g","pna","objectKeys","Duplex","util","create","inherits","Readable","Writable","readable","writable","allowHalfOpen","once","onend","_writableState","ended","nextTick","onEndNT","self","highWaterMark","_readableState","destroyed","_destroy","cb","builder","defaults","parser","processors","ValidationError","superClass","message","__super__","extend","Builder","Parser","parseString","parseStringPromise","webpackPolyfill","deprecate","paths","l","superCtor","super_","configurable","TempCtor","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","process","console","asyncGeneratorStep","gen","reject","_next","_throw","arg","info","_asyncToGenerator","objectToString","isBoolean","isNull","isNullOrUndefined","isString","isSymbol","isUndefined","isRegExp","re","isDate","isError","isPrimitive","isBuffer","Buffer","_defineProperty","XMLCharacterData","substringData","count","appendData","insertData","deleteData","replaceData","None","OpenTag","InsideTag","CloseTag","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","getOwnPropertyNames","NumberIsNaN","Number","isNaN","EventEmitter","init","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","that","_addListener","prepend","events","warning","newListener","emit","warned","w","String","emitter","warn","onceWrapper","fired","removeListener","wrapFn","_onceWrap","wrapped","bind","_listeners","unwrap","evlistener","ret","unwrapListeners","arrayClone","listenerCount","copy","RangeError","setMaxListeners","getMaxListeners","doError","er","context","addListener","prependListener","prependOnceListener","originalListener","shift","pop","spliceOne","off","removeAllListeners","rawListeners","eventNames","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","array","noop","title","browser","env","argv","versions","binding","cwd","chdir","dir","umask","arg1","arg2","arg3","buffer","copyProps","src","dst","SafeBuffer","encodingOrOffset","from","alloc","allocUnsafe","allocUnsafeSlow","fill","buf","SlowBuffer","global","payload","modules","payloads","original","trace","_require","parentId","lookup","params","packagedModule","moduleName","normalizeModule","chunks","charAt","previous","mod","uri","packaged","ns","exportAce","ace","real","exec","RegExp","match","compliantExecNpcg","compliantLastIndexIncrement","lastIndex","getNativeFlags","regex","ignoreCase","multiline","extended","r2","_xregexp","captureNames","Empty","bound","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","prototypeOfArray","prototypeOfObject","_toString","owns","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","makeArray","lengthBefore","array_splice","deleteCount","removeCount","insert","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","createEmpty","freezeObject","boxedString","splitString","toObject","thisp","reduceRight","sought","toInteger","lastIndexOf","abs","__proto__","descriptor","getter","setter","empty","isPrototypeOf","toLocaleString","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","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","ch","childIndex","getDocumentHead","tag","createElementNS","removeChildren","innerHTML","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","mixin","implement","oop","Keys","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","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","2","3","4","onMousedown","isNewClick","_clicks","getModifierHash","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","defaultPrevented","resetPressedKeys","getModifierString","addCommandKeyListener","isOldGecko","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","postMessageId","messageName","$idleBlocked","onIdle","$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","collapseRows","toScreenRange","session","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","last","stringReverse","string","reverse","stringRepeat","stringTrimLeft","stringTrimRight","copyObject","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","compositionStartOffset","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","home","down","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","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","class","updateMenu","readText","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","textToScreenCoordinates","pageY","hideContextMenu","handleLongTap","selectWord","touches","h","touchObj","setRange","switchToSelectionMode","cursorPos","getPixelPosition","anchorPos","weightedDistance","diff1","diff2","oldScrollTop","getScrollTop","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","onload","_","isAbort","qualifyURL","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","defaultHandler","newCallback","handlers","_disabled_","old","removeDefaultHandler","capturing","optionsProvider","optList","setOption","getOptions","optionNames","$options","hidden","getOption","opt","forwardTo","handlesSet","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","setModuleUrl","subst","$loading","loadModule","onLoad","moduleType","afterLoad","reportErrorIfPathIsNotConfigured","scriptOptions","scriptUrl","currentScript","_currentScript","scripts","script","m1","toUpperCase","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","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","rtlCandidate","_getCharacterType","uc","charCodeAt","L","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","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","delta","lines","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","endOfLine","$useWrapMode","splits","$wrapData","indent","substring","getScreenTabSize","$main","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","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","getRangeOfMovements","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","TextHighlightRules","$rules","addRules","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","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","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","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","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","$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","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","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","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","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","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","stringBuilder","extraStyle","lineRange","range1","drawBidiSingleLineMarker","radiusClass","extraLength","$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","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","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","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","ex","attachToDocument","q","UIWorkerClient","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","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","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","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","explicitCharkey","normalizeTags","attrkey","charkey","explicitArray","ignoreAttrs","mergeAttrs","explicitRoot","validator","explicitChildren","childkey","charsAsChildren","includeWhiteChars","async","strict","attrNameProcessors","attrValueProcessors","tagNameProcessors","valueProcessors","emptyTag","preserveChildrenOrder","rootName","renderOpts","headless","chunkSize","XMLAttribute","XMLNamedNodeMap","schemaTypeInfo","documentObject","attributeMap","att","attName","clonedSelf","clonedChild","attValue","keepNullAttributes","writer","filterOptions","getAttributeNode","setAttributeNode","newAttr","removeAttributeNode","oldAttr","getAttributeNS","localName","setAttributeNS","qualifiedName","removeAttributeNS","getAttributeNodeNS","setAttributeNodeNS","getElementsByTagNameNS","hasAttributeNS","setIdAttribute","isId","setIdAttributeNS","setIdAttributeNode","idAttr","tagname","getElementsByClassName","getNamedItem","setNamedItem","removeNamedItem","getNamedItemNS","setNamedItemNS","removeNamedItemNS","xmlVersion","xmlEncoding","xmlStandalone","XMLDTDAttList","XMLDTDElement","XMLDTDEntity","XMLDTDNotation","dtdPubID","dtdSysID","pe","attList","elementName","attributeName","attributeType","defaultValueType","entity","pEntity","notation","docType","ent","pent","not","publicId","systemId","dtdAttType","dtdAttDefault","dtdAttList","internal","nData","dtdNData","dtdEntityValue","dtdEntity","dtdElementValue","dtdElement","dtdNotation","previousSibling","nextSibling","splitText","replaceWholeText","processingInstruction","XMLWriterBase","XMLStringWriter","writeChildNode","pretty","newline","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","Uint8Array","ArrayBuffer","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","isEncoding","actual","fromString","checked","fromObject","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","_isBuffer","swap16","swap32","swap64","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","Stream","Transform","PassThrough","CorkedRequest","_this","entry","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","setImmediate","WritableState","internalUtil","OurUint8Array","realHasInstance","destroyImpl","nop","stream","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","finished","noDecode","decodeStrings","defaultEncoding","writing","corked","sync","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","getBuffer","hasInstance","pipe","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","StringDecoder","nb","enc","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","total","utf8CheckIncomplete","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","__webpack_amd_options__","XMLDOMImplementation","hasFeature","createDocumentType","createDocument","createHTMLDocument","XMLDOMConfiguration","XMLStringifier","XMLDocument","documentURI","domConfig","writerOptions","createCDATASection","createProcessingInstruction","createAttribute","createEntityReference","importNode","importedNode","createAttributeNS","elementId","adoptNode","normalizeDocument","renameNode","eventInterface","createNodeIterator","whatToShow","createTreeWalker","me","assertLegalName","assertLegalChar","noValidation","textEscape","attEscape","ampregex","noDoubleEncoding","WriterState","filteredOptions","ref4","ref5","ref6","allowEmpty","dontPrettyTextNodes","dontprettytextnodes","spaceBeforeSlash","spacebeforeslash","suppressPrettyCount","user","indentLevel","endline","openAttribute","closeAttribute","openNode","closeNode","childNodeCount","firstChildNode","prettySuppressed","ReadableState","EElistenerCount","debugUtil","debug","debuglog","BufferList","kProxyEvents","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","endEmitted","reading","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","addChunk","maybeReadMore","needMoreData","isPaused","setEncoding","howMuchToRead","computeNewHighWaterMark","emitReadable_","flow","maybeReadMore_","nReadingNextTick","resume_","fromList","hasStrings","tail","copyFromBufferString","copyFromBuffer","fromListPartial","endReadable","endReadableNT","xs","nOrig","doRead","dest","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","pipeOnDrain","increasedAwaitDrain","pause","resume","dests","paused","_fromList","emitErrorNT","readableDestroyed","writableDestroyed","Timeout","clearFn","_clearFn","close","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","clearImmediate","afterTransform","_transformState","transforming","writechunk","rs","needTransform","writeencoding","_transform","flush","_this2","err2","prefixMatch","firstCharLowerCase","stripPrefix","parseNumbers","parseBooleans","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","freeSelf","nativeMax","nativeMin","wait","lastArgs","lastThis","maxWait","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","remainingWait","debounced","isInvoking","toNumber","isObjectLike","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","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","Ua","Va","xlinkHref","Wa","Xa","Sa","Ta","Ra","Ya","Za","$a","ab","bb","db","eb","fb","gb","hb","ib","jb","lb","mb","pb","displayName","qb","_debugOwner","_debugSource","fileName","rb","sb","xb","_valueTracker","stopTracking","tb","yb","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","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","xd","HTMLIFrameElement","contentWindow","yd","contentEditable","Dd","Ed","Fd","autoFocus","Gd","__html","Hd","Id","Jd","Kd","Ld","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","ne","oe","beforeInput","compositionEnd","compositionStart","compositionUpdate","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","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","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","vb","Uj","Vj","Wj","ob","Xj","unstable_observedBits","Zj","pendingChildren","ak","bk","ck","dk","ek","fk","Jc","_internalRoot","gk","ik","hk","jk","kk","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","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","parentActive","removeRange","$inChange","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","snippetManager","containsLead","containsAnchor","selectTabstop","addTabstopMarkers","useLink","moveRelative","movePoint","tabstop","expandSnippet","Autocomplete","autoInsert","exactMatch","gatherCompletionsId","blurListener","mousedownListener","mousewheelListener","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","insertMatch","getPopup","openPopup","keepPopupPosition","completions","filtered","hideDocTooltip","activated","fromTooltip","tooltipNode","deleteSuffix","gatherCompletions","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","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","setEditor","searchRange","$syncOptions","$initElements","replaceBox","searchOption","replaceOption","regExpOption","caseSensitiveOption","wholeWordOption","searchInput","replaceInput","searchCounter","activeInput","$searchBarKb","$closeSearchBarKb","isReplace","findPrev","setSearchRange","searchRangeMarker","noMatch","updateCounter","MAX_COUNT","replaceAndFindNext","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","isGeneratorFunction","genFun","setPrototypeOf","awrap","skipTempReset","rootRecord","rval","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","XmlHighlightRules","tagRegex","processing_instruction","int_subset","attr_reference","tag_whitespace","whitespace","attribute_value","embedTagRules","XmlBehaviour","rightSpace","tokenEndColumn","nextToken","tokenRow","tokenColumn","voidElements","nextIndent","BaseFoldMode","optionalEndTags","Tag","selfClosing","_getFirstTagInLine","_findEndTagInLine","getCommentFoldWidget","_readTagForward","_readTagBackward","_pop","firstTag","XmlFoldMode","escapeCDATA","requiresCDATA","wrapCDATA","buildObject","rootObj","rootElement","allowSurrogateChars","XMLDocumentCB","XMLStreamWriter","begin","onData","onEnd","stringWriter","streamWriter","writerState","XMLDOMErrorHandler","XMLDOMStringList","defaultParams","getParameter","canSetParameter","setParameter","handleError","ContainedBy","onDataCallback","onEndCallback","currentLevel","openTags","documentStarted","documentCompleted","createChildNode","openCurrent","oldValidationFlag","rootNodeName","isClosed","isLastRootNode","bom","processItem","sax","thing","assignOrPush","processAsync","xmlnskey","saxParser","error1","errThrown","ontext","resultObject","EXPLICIT_CHARKEY","onopentag","processedKey","onclosetag","emptyStr","objClone","xpath","charChild","oncdata","stripBOM","SAXParser","SAXStream","createStream","MAX_BUFFER_LENGTH","buffers","clearBuffers","bufferCheckPosition","lowercase","lowercasetags","looseCase","tags","closed","closedRoot","sawRoot","noscript","BEGIN","strictEntities","ENTITIES","XML_ENTITIES","attribList","rootNS","trackPosition","EVENTS","BEGIN_WHITESPACE","beginWhiteSpace","TEXT","starti","isWhitespace","strictFail","TEXT_ENTITY","OPEN_WAKA","startTagPosition","SCRIPT","SCRIPT_ENDING","CLOSE_TAG","SGML_DECL","sgmlDecl","isMatch","nameStart","OPEN_TAG","PROC_INST","procInstName","procInstBody","pad","emitNode","CDATA","COMMENT","DOCTYPE","isQuote","SGML_DECL_QUOTED","DOCTYPE_DTD","DOCTYPE_QUOTED","DOCTYPE_DTD_QUOTED","COMMENT_ENDING","COMMENT_ENDED","textopts","CDATA_ENDING","CDATA_ENDING_2","PROC_INST_ENDING","PROC_INST_BODY","nameBody","newTag","openTag","OPEN_TAG_SLASH","ATTRIB","closeTag","attribName","attribValue","ATTRIB_NAME","ATTRIB_VALUE","attrib","ATTRIB_NAME_SAW_WHITE","ATTRIB_VALUE_QUOTED","ATTRIB_VALUE_UNQUOTED","ATTRIB_VALUE_ENTITY_Q","ATTRIB_VALUE_CLOSED","isAttribEnd","ATTRIB_VALUE_ENTITY_U","CLOSE_TAG_SAW_WHITE","notMatch","returnState","parseEntity","entityBody","entityStart","maxAllowed","maxActual","closeText","checkBufferLength","streamWraps","_parser","_decoder","SD","XML_NAMESPACE","xml","STATE","COMMENT_STARTING","qname","qualName","qn","nv","isSelfClosing","closeTo","num","entityLC","numStr","fromCodePoint","stringFromCharCode","highSurrogate","lowSurrogate","MAX_SIZE","codeUnits","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","output","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","EE","_isStdio","didOnEnd","cleanup","registerImmediate","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","runIfPresent","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","messagePrefix","onGlobalMessage","installPostMessageImplementation","channel","installMessageChannelImplementation","installReadyStateChangeImplementation","task","localStorage"],"mappings":"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EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,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,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","file":"static/js/2.ff5d9a25.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}","// Generated by CoffeeScript 1.12.7\n(function() {\n module.exports = {\n Element: 1,\n Attribute: 2,\n Text: 3,\n CData: 4,\n EntityReference: 5,\n EntityDeclaration: 6,\n ProcessingInstruction: 7,\n Comment: 8,\n Document: 9,\n DocType: 10,\n DocumentFragment: 11,\n NotationDeclaration: 12,\n Declaration: 201,\n Raw: 202,\n AttributeDeclaration: 203,\n ElementDeclaration: 204,\n Dummy: 205\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var DocumentPosition, NodeType, XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLNamedNodeMap, XMLNode, XMLNodeList, XMLProcessingInstruction, XMLRaw, XMLText, getValue, isEmpty, isFunction, isObject, ref1,\n hasProp = {}.hasOwnProperty;\n\n ref1 = require('./Utility'), isObject = ref1.isObject, isFunction = ref1.isFunction, isEmpty = ref1.isEmpty, getValue = ref1.getValue;\n\n XMLElement = null;\n\n XMLCData = null;\n\n XMLComment = null;\n\n XMLDeclaration = null;\n\n XMLDocType = null;\n\n XMLRaw = null;\n\n XMLText = null;\n\n XMLProcessingInstruction = null;\n\n XMLDummy = null;\n\n NodeType = null;\n\n XMLNodeList = null;\n\n XMLNamedNodeMap = null;\n\n DocumentPosition = null;\n\n module.exports = XMLNode = (function() {\n function XMLNode(parent1) {\n this.parent = parent1;\n if (this.parent) {\n this.options = this.parent.options;\n this.stringify = this.parent.stringify;\n }\n this.value = null;\n this.children = [];\n this.baseURI = null;\n if (!XMLElement) {\n XMLElement = require('./XMLElement');\n XMLCData = require('./XMLCData');\n XMLComment = require('./XMLComment');\n XMLDeclaration = require('./XMLDeclaration');\n XMLDocType = require('./XMLDocType');\n XMLRaw = require('./XMLRaw');\n XMLText = require('./XMLText');\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n XMLDummy = require('./XMLDummy');\n NodeType = require('./NodeType');\n XMLNodeList = require('./XMLNodeList');\n XMLNamedNodeMap = require('./XMLNamedNodeMap');\n DocumentPosition = require('./DocumentPosition');\n }\n }\n\n Object.defineProperty(XMLNode.prototype, 'nodeName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'nodeType', {\n get: function() {\n return this.type;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'nodeValue', {\n get: function() {\n return this.value;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'parentNode', {\n get: function() {\n return this.parent;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'childNodes', {\n get: function() {\n if (!this.childNodeList || !this.childNodeList.nodes) {\n this.childNodeList = new XMLNodeList(this.children);\n }\n return this.childNodeList;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'firstChild', {\n get: function() {\n return this.children[0] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'lastChild', {\n get: function() {\n return this.children[this.children.length - 1] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'previousSibling', {\n get: function() {\n var i;\n i = this.parent.children.indexOf(this);\n return this.parent.children[i - 1] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'nextSibling', {\n get: function() {\n var i;\n i = this.parent.children.indexOf(this);\n return this.parent.children[i + 1] || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'ownerDocument', {\n get: function() {\n return this.document() || null;\n }\n });\n\n Object.defineProperty(XMLNode.prototype, 'textContent', {\n get: function() {\n var child, j, len, ref2, str;\n if (this.nodeType === NodeType.Element || this.nodeType === NodeType.DocumentFragment) {\n str = '';\n ref2 = this.children;\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n if (child.textContent) {\n str += child.textContent;\n }\n }\n return str;\n } else {\n return null;\n }\n },\n set: function(value) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n XMLNode.prototype.setParent = function(parent) {\n var child, j, len, ref2, results;\n this.parent = parent;\n if (parent) {\n this.options = parent.options;\n this.stringify = parent.stringify;\n }\n ref2 = this.children;\n results = [];\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n results.push(child.setParent(this));\n }\n return results;\n };\n\n XMLNode.prototype.element = function(name, attributes, text) {\n var childNode, item, j, k, key, lastChild, len, len1, ref2, ref3, val;\n lastChild = null;\n if (attributes === null && (text == null)) {\n ref2 = [{}, null], attributes = ref2[0], text = ref2[1];\n }\n if (attributes == null) {\n attributes = {};\n }\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref3 = [attributes, text], text = ref3[0], attributes = ref3[1];\n }\n if (name != null) {\n name = getValue(name);\n }\n if (Array.isArray(name)) {\n for (j = 0, len = name.length; j < len; j++) {\n item = name[j];\n lastChild = this.element(item);\n }\n } else if (isFunction(name)) {\n lastChild = this.element(name.apply());\n } else if (isObject(name)) {\n for (key in name) {\n if (!hasProp.call(name, key)) continue;\n val = name[key];\n if (isFunction(val)) {\n val = val.apply();\n }\n if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {\n lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);\n } else if (!this.options.separateArrayItems && Array.isArray(val) && isEmpty(val)) {\n lastChild = this.dummy();\n } else if (isObject(val) && isEmpty(val)) {\n lastChild = this.element(key);\n } else if (!this.options.keepNullNodes && (val == null)) {\n lastChild = this.dummy();\n } else if (!this.options.separateArrayItems && Array.isArray(val)) {\n for (k = 0, len1 = val.length; k < len1; k++) {\n item = val[k];\n childNode = {};\n childNode[key] = item;\n lastChild = this.element(childNode);\n }\n } else if (isObject(val)) {\n if (!this.options.ignoreDecorators && this.stringify.convertTextKey && key.indexOf(this.stringify.convertTextKey) === 0) {\n lastChild = this.element(val);\n } else {\n lastChild = this.element(key);\n lastChild.element(val);\n }\n } else {\n lastChild = this.element(key, val);\n }\n }\n } else if (!this.options.keepNullNodes && text === null) {\n lastChild = this.dummy();\n } else {\n if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {\n lastChild = this.text(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {\n lastChild = this.cdata(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {\n lastChild = this.comment(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {\n lastChild = this.raw(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && name.indexOf(this.stringify.convertPIKey) === 0) {\n lastChild = this.instruction(name.substr(this.stringify.convertPIKey.length), text);\n } else {\n lastChild = this.node(name, attributes, text);\n }\n }\n if (lastChild == null) {\n throw new Error(\"Could not create any elements with: \" + name + \". \" + this.debugInfo());\n }\n return lastChild;\n };\n\n XMLNode.prototype.insertBefore = function(name, attributes, text) {\n var child, i, newChild, refChild, removed;\n if (name != null ? name.type : void 0) {\n newChild = name;\n refChild = attributes;\n newChild.setParent(this);\n if (refChild) {\n i = children.indexOf(refChild);\n removed = children.splice(i);\n children.push(newChild);\n Array.prototype.push.apply(children, removed);\n } else {\n children.push(newChild);\n }\n return newChild;\n } else {\n if (this.isRoot) {\n throw new Error(\"Cannot insert elements at root level. \" + this.debugInfo(name));\n }\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i);\n child = this.parent.element(name, attributes, text);\n Array.prototype.push.apply(this.parent.children, removed);\n return child;\n }\n };\n\n XMLNode.prototype.insertAfter = function(name, attributes, text) {\n var child, i, removed;\n if (this.isRoot) {\n throw new Error(\"Cannot insert elements at root level. \" + this.debugInfo(name));\n }\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i + 1);\n child = this.parent.element(name, attributes, text);\n Array.prototype.push.apply(this.parent.children, removed);\n return child;\n };\n\n XMLNode.prototype.remove = function() {\n var i, ref2;\n if (this.isRoot) {\n throw new Error(\"Cannot remove the root element. \" + this.debugInfo());\n }\n i = this.parent.children.indexOf(this);\n [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref2 = [])), ref2;\n return this.parent;\n };\n\n XMLNode.prototype.node = function(name, attributes, text) {\n var child, ref2;\n if (name != null) {\n name = getValue(name);\n }\n attributes || (attributes = {});\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref2 = [attributes, text], text = ref2[0], attributes = ref2[1];\n }\n child = new XMLElement(this, name, attributes);\n if (text != null) {\n child.text(text);\n }\n this.children.push(child);\n return child;\n };\n\n XMLNode.prototype.text = function(value) {\n var child;\n if (isObject(value)) {\n this.element(value);\n }\n child = new XMLText(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.cdata = function(value) {\n var child;\n child = new XMLCData(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.comment = function(value) {\n var child;\n child = new XMLComment(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.commentBefore = function(value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i);\n child = this.parent.comment(value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.commentAfter = function(value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i + 1);\n child = this.parent.comment(value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.raw = function(value) {\n var child;\n child = new XMLRaw(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.dummy = function() {\n var child;\n child = new XMLDummy(this);\n return child;\n };\n\n XMLNode.prototype.instruction = function(target, value) {\n var insTarget, insValue, instruction, j, len;\n if (target != null) {\n target = getValue(target);\n }\n if (value != null) {\n value = getValue(value);\n }\n if (Array.isArray(target)) {\n for (j = 0, len = target.length; j < len; j++) {\n insTarget = target[j];\n this.instruction(insTarget);\n }\n } else if (isObject(target)) {\n for (insTarget in target) {\n if (!hasProp.call(target, insTarget)) continue;\n insValue = target[insTarget];\n this.instruction(insTarget, insValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n instruction = new XMLProcessingInstruction(this, target, value);\n this.children.push(instruction);\n }\n return this;\n };\n\n XMLNode.prototype.instructionBefore = function(target, value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i);\n child = this.parent.instruction(target, value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.instructionAfter = function(target, value) {\n var child, i, removed;\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i + 1);\n child = this.parent.instruction(target, value);\n Array.prototype.push.apply(this.parent.children, removed);\n return this;\n };\n\n XMLNode.prototype.declaration = function(version, encoding, standalone) {\n var doc, xmldec;\n doc = this.document();\n xmldec = new XMLDeclaration(doc, version, encoding, standalone);\n if (doc.children.length === 0) {\n doc.children.unshift(xmldec);\n } else if (doc.children[0].type === NodeType.Declaration) {\n doc.children[0] = xmldec;\n } else {\n doc.children.unshift(xmldec);\n }\n return doc.root() || doc;\n };\n\n XMLNode.prototype.dtd = function(pubID, sysID) {\n var child, doc, doctype, i, j, k, len, len1, ref2, ref3;\n doc = this.document();\n doctype = new XMLDocType(doc, pubID, sysID);\n ref2 = doc.children;\n for (i = j = 0, len = ref2.length; j < len; i = ++j) {\n child = ref2[i];\n if (child.type === NodeType.DocType) {\n doc.children[i] = doctype;\n return doctype;\n }\n }\n ref3 = doc.children;\n for (i = k = 0, len1 = ref3.length; k < len1; i = ++k) {\n child = ref3[i];\n if (child.isRoot) {\n doc.children.splice(i, 0, doctype);\n return doctype;\n }\n }\n doc.children.push(doctype);\n return doctype;\n };\n\n XMLNode.prototype.up = function() {\n if (this.isRoot) {\n throw new Error(\"The root node has no parent. Use doc() if you need to get the document object.\");\n }\n return this.parent;\n };\n\n XMLNode.prototype.root = function() {\n var node;\n node = this;\n while (node) {\n if (node.type === NodeType.Document) {\n return node.rootObject;\n } else if (node.isRoot) {\n return node;\n } else {\n node = node.parent;\n }\n }\n };\n\n XMLNode.prototype.document = function() {\n var node;\n node = this;\n while (node) {\n if (node.type === NodeType.Document) {\n return node;\n } else {\n node = node.parent;\n }\n }\n };\n\n XMLNode.prototype.end = function(options) {\n return this.document().end(options);\n };\n\n XMLNode.prototype.prev = function() {\n var i;\n i = this.parent.children.indexOf(this);\n if (i < 1) {\n throw new Error(\"Already at the first node. \" + this.debugInfo());\n }\n return this.parent.children[i - 1];\n };\n\n XMLNode.prototype.next = function() {\n var i;\n i = this.parent.children.indexOf(this);\n if (i === -1 || i === this.parent.children.length - 1) {\n throw new Error(\"Already at the last node. \" + this.debugInfo());\n }\n return this.parent.children[i + 1];\n };\n\n XMLNode.prototype.importDocument = function(doc) {\n var clonedRoot;\n clonedRoot = doc.root().clone();\n clonedRoot.parent = this;\n clonedRoot.isRoot = false;\n this.children.push(clonedRoot);\n return this;\n };\n\n XMLNode.prototype.debugInfo = function(name) {\n var ref2, ref3;\n name = name || this.name;\n if ((name == null) && !((ref2 = this.parent) != null ? ref2.name : void 0)) {\n return \"\";\n } else if (name == null) {\n return \"parent: <\" + this.parent.name + \">\";\n } else if (!((ref3 = this.parent) != null ? ref3.name : void 0)) {\n return \"node: <\" + name + \">\";\n } else {\n return \"node: <\" + name + \">, parent: <\" + this.parent.name + \">\";\n }\n };\n\n XMLNode.prototype.ele = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLNode.prototype.nod = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLNode.prototype.txt = function(value) {\n return this.text(value);\n };\n\n XMLNode.prototype.dat = function(value) {\n return this.cdata(value);\n };\n\n XMLNode.prototype.com = function(value) {\n return this.comment(value);\n };\n\n XMLNode.prototype.ins = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLNode.prototype.doc = function() {\n return this.document();\n };\n\n XMLNode.prototype.dec = function(version, encoding, standalone) {\n return this.declaration(version, encoding, standalone);\n };\n\n XMLNode.prototype.e = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLNode.prototype.n = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLNode.prototype.t = function(value) {\n return this.text(value);\n };\n\n XMLNode.prototype.d = function(value) {\n return this.cdata(value);\n };\n\n XMLNode.prototype.c = function(value) {\n return this.comment(value);\n };\n\n XMLNode.prototype.r = function(value) {\n return this.raw(value);\n };\n\n XMLNode.prototype.i = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLNode.prototype.u = function() {\n return this.up();\n };\n\n XMLNode.prototype.importXMLBuilder = function(doc) {\n return this.importDocument(doc);\n };\n\n XMLNode.prototype.replaceChild = function(newChild, oldChild) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.removeChild = function(oldChild) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.appendChild = function(newChild) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.hasChildNodes = function() {\n return this.children.length !== 0;\n };\n\n XMLNode.prototype.cloneNode = function(deep) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.normalize = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.isSupported = function(feature, version) {\n return true;\n };\n\n XMLNode.prototype.hasAttributes = function() {\n return this.attribs.length !== 0;\n };\n\n XMLNode.prototype.compareDocumentPosition = function(other) {\n var ref, res;\n ref = this;\n if (ref === other) {\n return 0;\n } else if (this.document() !== other.document()) {\n res = DocumentPosition.Disconnected | DocumentPosition.ImplementationSpecific;\n if (Math.random() < 0.5) {\n res |= DocumentPosition.Preceding;\n } else {\n res |= DocumentPosition.Following;\n }\n return res;\n } else if (ref.isAncestor(other)) {\n return DocumentPosition.Contains | DocumentPosition.Preceding;\n } else if (ref.isDescendant(other)) {\n return DocumentPosition.Contains | DocumentPosition.Following;\n } else if (ref.isPreceding(other)) {\n return DocumentPosition.Preceding;\n } else {\n return DocumentPosition.Following;\n }\n };\n\n XMLNode.prototype.isSameNode = function(other) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.lookupPrefix = function(namespaceURI) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.isDefaultNamespace = function(namespaceURI) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.lookupNamespaceURI = function(prefix) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.isEqualNode = function(node) {\n var i, j, ref2;\n if (node.nodeType !== this.nodeType) {\n return false;\n }\n if (node.children.length !== this.children.length) {\n return false;\n }\n for (i = j = 0, ref2 = this.children.length - 1; 0 <= ref2 ? j <= ref2 : j >= ref2; i = 0 <= ref2 ? ++j : --j) {\n if (!this.children[i].isEqualNode(node.children[i])) {\n return false;\n }\n }\n return true;\n };\n\n XMLNode.prototype.getFeature = function(feature, version) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.setUserData = function(key, data, handler) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.getUserData = function(key) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLNode.prototype.contains = function(other) {\n if (!other) {\n return false;\n }\n return other === this || this.isDescendant(other);\n };\n\n XMLNode.prototype.isDescendant = function(node) {\n var child, isDescendantChild, j, len, ref2;\n ref2 = this.children;\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n if (node === child) {\n return true;\n }\n isDescendantChild = child.isDescendant(node);\n if (isDescendantChild) {\n return true;\n }\n }\n return false;\n };\n\n XMLNode.prototype.isAncestor = function(node) {\n return node.isDescendant(this);\n };\n\n XMLNode.prototype.isPreceding = function(node) {\n var nodePos, thisPos;\n nodePos = this.treePosition(node);\n thisPos = this.treePosition(this);\n if (nodePos === -1 || thisPos === -1) {\n return false;\n } else {\n return nodePos < thisPos;\n }\n };\n\n XMLNode.prototype.isFollowing = function(node) {\n var nodePos, thisPos;\n nodePos = this.treePosition(node);\n thisPos = this.treePosition(this);\n if (nodePos === -1 || thisPos === -1) {\n return false;\n } else {\n return nodePos > thisPos;\n }\n };\n\n XMLNode.prototype.treePosition = function(node) {\n var found, pos;\n pos = 0;\n found = false;\n this.foreachTreeNode(this.document(), function(childNode) {\n pos++;\n if (!found && childNode === node) {\n return found = true;\n }\n });\n if (found) {\n return pos;\n } else {\n return -1;\n }\n };\n\n XMLNode.prototype.foreachTreeNode = function(node, func) {\n var child, j, len, ref2, res;\n node || (node = this.document());\n ref2 = node.children;\n for (j = 0, len = ref2.length; j < len; j++) {\n child = ref2[j];\n if (res = func(child)) {\n return res;\n } else {\n res = this.foreachTreeNode(child, func);\n if (res) {\n return res;\n }\n }\n }\n };\n\n return XMLNode;\n\n })();\n\n}).call(this);\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 = require(\"regenerator-runtime\");\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var assign, getValue, isArray, isEmpty, isFunction, isObject, isPlainObject,\n slice = [].slice,\n hasProp = {}.hasOwnProperty;\n\n assign = function() {\n var i, key, len, source, sources, target;\n target = arguments[0], sources = 2 <= arguments.length ? slice.call(arguments, 1) : [];\n if (isFunction(Object.assign)) {\n Object.assign.apply(null, arguments);\n } else {\n for (i = 0, len = sources.length; i < len; i++) {\n source = sources[i];\n if (source != null) {\n for (key in source) {\n if (!hasProp.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n };\n\n isFunction = function(val) {\n return !!val && Object.prototype.toString.call(val) === '[object Function]';\n };\n\n isObject = function(val) {\n var ref;\n return !!val && ((ref = typeof val) === 'function' || ref === 'object');\n };\n\n isArray = function(val) {\n if (isFunction(Array.isArray)) {\n return Array.isArray(val);\n } else {\n return Object.prototype.toString.call(val) === '[object Array]';\n }\n };\n\n isEmpty = function(val) {\n var key;\n if (isArray(val)) {\n return !val.length;\n } else {\n for (key in val) {\n if (!hasProp.call(val, key)) continue;\n return false;\n }\n return true;\n }\n };\n\n isPlainObject = function(val) {\n var ctor, proto;\n return isObject(val) && (proto = Object.getPrototypeOf(val)) && (ctor = proto.constructor) && (typeof ctor === 'function') && (ctor instanceof ctor) && (Function.prototype.toString.call(ctor) === Function.prototype.toString.call(Object));\n };\n\n getValue = function(obj) {\n if (isFunction(obj.valueOf)) {\n return obj.valueOf();\n } else {\n return obj;\n }\n };\n\n module.exports.assign = assign;\n\n module.exports.isFunction = isFunction;\n\n module.exports.isObject = isObject;\n\n module.exports.isArray = isArray;\n\n module.exports.isEmpty = isEmpty;\n\n module.exports.isPlainObject = isPlainObject;\n\n module.exports.getValue = getValue;\n\n}).call(this);\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","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var builder, defaults, parser, processors,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n defaults = require('./defaults');\n\n builder = require('./builder');\n\n parser = require('./parser');\n\n processors = require('./processors');\n\n exports.defaults = defaults.defaults;\n\n exports.processors = processors;\n\n exports.ValidationError = (function(superClass) {\n extend(ValidationError, superClass);\n\n function ValidationError(message) {\n this.message = message;\n }\n\n return ValidationError;\n\n })(Error);\n\n exports.Builder = builder.Builder;\n\n exports.Parser = parser.Parser;\n\n exports.parseString = parser.parseString;\n\n exports.parseStringPromise = parser.parseStringPromise;\n\n}).call(this);\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","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (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 };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\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","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\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}","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLCharacterData, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLCharacterData = (function(superClass) {\n extend(XMLCharacterData, superClass);\n\n function XMLCharacterData(parent) {\n XMLCharacterData.__super__.constructor.call(this, parent);\n this.value = '';\n }\n\n Object.defineProperty(XMLCharacterData.prototype, 'data', {\n get: function() {\n return this.value;\n },\n set: function(value) {\n return this.value = value || '';\n }\n });\n\n Object.defineProperty(XMLCharacterData.prototype, 'length', {\n get: function() {\n return this.value.length;\n }\n });\n\n Object.defineProperty(XMLCharacterData.prototype, 'textContent', {\n get: function() {\n return this.value;\n },\n set: function(value) {\n return this.value = value || '';\n }\n });\n\n XMLCharacterData.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLCharacterData.prototype.substringData = function(offset, count) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.appendData = function(arg) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.insertData = function(offset, arg) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.deleteData = function(offset, count) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.replaceData = function(offset, count, arg) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLCharacterData.prototype.isEqualNode = function(node) {\n if (!XMLCharacterData.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.data !== this.data) {\n return false;\n }\n return true;\n };\n\n return XMLCharacterData;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n module.exports = {\n None: 0,\n OpenTag: 1,\n InsideTag: 2,\n CloseTag: 3\n };\n\n}).call(this);\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\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}","// Generated by CoffeeScript 1.12.7\n(function() {\n exports.defaults = {\n \"0.1\": {\n explicitCharkey: false,\n trim: true,\n normalize: true,\n normalizeTags: false,\n attrkey: \"@\",\n charkey: \"#\",\n explicitArray: false,\n ignoreAttrs: false,\n mergeAttrs: false,\n explicitRoot: false,\n validator: null,\n xmlns: false,\n explicitChildren: false,\n childkey: '@@',\n charsAsChildren: false,\n includeWhiteChars: false,\n async: false,\n strict: true,\n attrNameProcessors: null,\n attrValueProcessors: null,\n tagNameProcessors: null,\n valueProcessors: null,\n emptyTag: ''\n },\n \"0.2\": {\n explicitCharkey: false,\n trim: false,\n normalize: false,\n normalizeTags: false,\n attrkey: \"$\",\n charkey: \"_\",\n explicitArray: true,\n ignoreAttrs: false,\n mergeAttrs: false,\n explicitRoot: true,\n validator: null,\n xmlns: false,\n explicitChildren: false,\n preserveChildrenOrder: false,\n childkey: '$$',\n charsAsChildren: false,\n includeWhiteChars: false,\n async: false,\n strict: true,\n attrNameProcessors: null,\n attrValueProcessors: null,\n tagNameProcessors: null,\n valueProcessors: null,\n rootName: 'root',\n xmldec: {\n 'version': '1.0',\n 'encoding': 'UTF-8',\n 'standalone': true\n },\n doctype: null,\n renderOpts: {\n 'pretty': true,\n 'indent': ' ',\n 'newline': '\\n'\n },\n headless: false,\n chunkSize: 10000,\n emptyTag: '',\n cdata: false\n }\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLAttribute, XMLElement, XMLNamedNodeMap, XMLNode, getValue, isFunction, isObject, ref,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, getValue = ref.getValue;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n XMLAttribute = require('./XMLAttribute');\n\n XMLNamedNodeMap = require('./XMLNamedNodeMap');\n\n module.exports = XMLElement = (function(superClass) {\n extend(XMLElement, superClass);\n\n function XMLElement(parent, name, attributes) {\n var child, j, len, ref1;\n XMLElement.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing element name. \" + this.debugInfo());\n }\n this.name = this.stringify.name(name);\n this.type = NodeType.Element;\n this.attribs = {};\n this.schemaTypeInfo = null;\n if (attributes != null) {\n this.attribute(attributes);\n }\n if (parent.type === NodeType.Document) {\n this.isRoot = true;\n this.documentObject = parent;\n parent.rootObject = this;\n if (parent.children) {\n ref1 = parent.children;\n for (j = 0, len = ref1.length; j < len; j++) {\n child = ref1[j];\n if (child.type === NodeType.DocType) {\n child.name = this.name;\n break;\n }\n }\n }\n }\n }\n\n Object.defineProperty(XMLElement.prototype, 'tagName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'namespaceURI', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'prefix', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'localName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'id', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'className', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'classList', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLElement.prototype, 'attributes', {\n get: function() {\n if (!this.attributeMap || !this.attributeMap.nodes) {\n this.attributeMap = new XMLNamedNodeMap(this.attribs);\n }\n return this.attributeMap;\n }\n });\n\n XMLElement.prototype.clone = function() {\n var att, attName, clonedSelf, ref1;\n clonedSelf = Object.create(this);\n if (clonedSelf.isRoot) {\n clonedSelf.documentObject = null;\n }\n clonedSelf.attribs = {};\n ref1 = this.attribs;\n for (attName in ref1) {\n if (!hasProp.call(ref1, attName)) continue;\n att = ref1[attName];\n clonedSelf.attribs[attName] = att.clone();\n }\n clonedSelf.children = [];\n this.children.forEach(function(child) {\n var clonedChild;\n clonedChild = child.clone();\n clonedChild.parent = clonedSelf;\n return clonedSelf.children.push(clonedChild);\n });\n return clonedSelf;\n };\n\n XMLElement.prototype.attribute = function(name, value) {\n var attName, attValue;\n if (name != null) {\n name = getValue(name);\n }\n if (isObject(name)) {\n for (attName in name) {\n if (!hasProp.call(name, attName)) continue;\n attValue = name[attName];\n this.attribute(attName, attValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n if (this.options.keepNullAttributes && (value == null)) {\n this.attribs[name] = new XMLAttribute(this, name, \"\");\n } else if (value != null) {\n this.attribs[name] = new XMLAttribute(this, name, value);\n }\n }\n return this;\n };\n\n XMLElement.prototype.removeAttribute = function(name) {\n var attName, j, len;\n if (name == null) {\n throw new Error(\"Missing attribute name. \" + this.debugInfo());\n }\n name = getValue(name);\n if (Array.isArray(name)) {\n for (j = 0, len = name.length; j < len; j++) {\n attName = name[j];\n delete this.attribs[attName];\n }\n } else {\n delete this.attribs[name];\n }\n return this;\n };\n\n XMLElement.prototype.toString = function(options) {\n return this.options.writer.element(this, this.options.writer.filterOptions(options));\n };\n\n XMLElement.prototype.att = function(name, value) {\n return this.attribute(name, value);\n };\n\n XMLElement.prototype.a = function(name, value) {\n return this.attribute(name, value);\n };\n\n XMLElement.prototype.getAttribute = function(name) {\n if (this.attribs.hasOwnProperty(name)) {\n return this.attribs[name].value;\n } else {\n return null;\n }\n };\n\n XMLElement.prototype.setAttribute = function(name, value) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getAttributeNode = function(name) {\n if (this.attribs.hasOwnProperty(name)) {\n return this.attribs[name];\n } else {\n return null;\n }\n };\n\n XMLElement.prototype.setAttributeNode = function(newAttr) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.removeAttributeNode = function(oldAttr) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagName = function(name) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getAttributeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.removeAttributeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setAttributeNodeNS = function(newAttr) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.hasAttribute = function(name) {\n return this.attribs.hasOwnProperty(name);\n };\n\n XMLElement.prototype.hasAttributeNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setIdAttribute = function(name, isId) {\n if (this.attribs.hasOwnProperty(name)) {\n return this.attribs[name].isId;\n } else {\n return isId;\n }\n };\n\n XMLElement.prototype.setIdAttributeNS = function(namespaceURI, localName, isId) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.setIdAttributeNode = function(idAttr, isId) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagName = function(tagname) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.getElementsByClassName = function(classNames) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLElement.prototype.isEqualNode = function(node) {\n var i, j, ref1;\n if (!XMLElement.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.namespaceURI !== this.namespaceURI) {\n return false;\n }\n if (node.prefix !== this.prefix) {\n return false;\n }\n if (node.localName !== this.localName) {\n return false;\n }\n if (node.attribs.length !== this.attribs.length) {\n return false;\n }\n for (i = j = 0, ref1 = this.attribs.length - 1; 0 <= ref1 ? j <= ref1 : j >= ref1; i = 0 <= ref1 ? ++j : --j) {\n if (!this.attribs[i].isEqualNode(node.attribs[i])) {\n return false;\n }\n }\n return true;\n };\n\n return XMLElement;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLNamedNodeMap;\n\n module.exports = XMLNamedNodeMap = (function() {\n function XMLNamedNodeMap(nodes) {\n this.nodes = nodes;\n }\n\n Object.defineProperty(XMLNamedNodeMap.prototype, 'length', {\n get: function() {\n return Object.keys(this.nodes).length || 0;\n }\n });\n\n XMLNamedNodeMap.prototype.clone = function() {\n return this.nodes = null;\n };\n\n XMLNamedNodeMap.prototype.getNamedItem = function(name) {\n return this.nodes[name];\n };\n\n XMLNamedNodeMap.prototype.setNamedItem = function(node) {\n var oldNode;\n oldNode = this.nodes[node.nodeName];\n this.nodes[node.nodeName] = node;\n return oldNode || null;\n };\n\n XMLNamedNodeMap.prototype.removeNamedItem = function(name) {\n var oldNode;\n oldNode = this.nodes[name];\n delete this.nodes[name];\n return oldNode || null;\n };\n\n XMLNamedNodeMap.prototype.item = function(index) {\n return this.nodes[Object.keys(this.nodes)[index]] || null;\n };\n\n XMLNamedNodeMap.prototype.getNamedItemNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLNamedNodeMap.prototype.setNamedItemNS = function(node) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLNamedNodeMap.prototype.removeNamedItemNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n return XMLNamedNodeMap;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCData, XMLCharacterData,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLCData = (function(superClass) {\n extend(XMLCData, superClass);\n\n function XMLCData(parent, text) {\n XMLCData.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing CDATA text. \" + this.debugInfo());\n }\n this.name = \"#cdata-section\";\n this.type = NodeType.CData;\n this.value = this.stringify.cdata(text);\n }\n\n XMLCData.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLCData.prototype.toString = function(options) {\n return this.options.writer.cdata(this, this.options.writer.filterOptions(options));\n };\n\n return XMLCData;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCharacterData, XMLComment,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLComment = (function(superClass) {\n extend(XMLComment, superClass);\n\n function XMLComment(parent, text) {\n XMLComment.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing comment text. \" + this.debugInfo());\n }\n this.name = \"#comment\";\n this.type = NodeType.Comment;\n this.value = this.stringify.comment(text);\n }\n\n XMLComment.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLComment.prototype.toString = function(options) {\n return this.options.writer.comment(this, this.options.writer.filterOptions(options));\n };\n\n return XMLComment;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDeclaration, XMLNode, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isObject = require('./Utility').isObject;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDeclaration = (function(superClass) {\n extend(XMLDeclaration, superClass);\n\n function XMLDeclaration(parent, version, encoding, standalone) {\n var ref;\n XMLDeclaration.__super__.constructor.call(this, parent);\n if (isObject(version)) {\n ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone;\n }\n if (!version) {\n version = '1.0';\n }\n this.type = NodeType.Declaration;\n this.version = this.stringify.xmlVersion(version);\n if (encoding != null) {\n this.encoding = this.stringify.xmlEncoding(encoding);\n }\n if (standalone != null) {\n this.standalone = this.stringify.xmlStandalone(standalone);\n }\n }\n\n XMLDeclaration.prototype.toString = function(options) {\n return this.options.writer.declaration(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDeclaration;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLNamedNodeMap, XMLNode, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isObject = require('./Utility').isObject;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLNamedNodeMap = require('./XMLNamedNodeMap');\n\n module.exports = XMLDocType = (function(superClass) {\n extend(XMLDocType, superClass);\n\n function XMLDocType(parent, pubID, sysID) {\n var child, i, len, ref, ref1, ref2;\n XMLDocType.__super__.constructor.call(this, parent);\n this.type = NodeType.DocType;\n if (parent.children) {\n ref = parent.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if (child.type === NodeType.Element) {\n this.name = child.name;\n break;\n }\n }\n }\n this.documentObject = parent;\n if (isObject(pubID)) {\n ref1 = pubID, pubID = ref1.pubID, sysID = ref1.sysID;\n }\n if (sysID == null) {\n ref2 = [pubID, sysID], sysID = ref2[0], pubID = ref2[1];\n }\n if (pubID != null) {\n this.pubID = this.stringify.dtdPubID(pubID);\n }\n if (sysID != null) {\n this.sysID = this.stringify.dtdSysID(sysID);\n }\n }\n\n Object.defineProperty(XMLDocType.prototype, 'entities', {\n get: function() {\n var child, i, len, nodes, ref;\n nodes = {};\n ref = this.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if ((child.type === NodeType.EntityDeclaration) && !child.pe) {\n nodes[child.name] = child;\n }\n }\n return new XMLNamedNodeMap(nodes);\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'notations', {\n get: function() {\n var child, i, len, nodes, ref;\n nodes = {};\n ref = this.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if (child.type === NodeType.NotationDeclaration) {\n nodes[child.name] = child;\n }\n }\n return new XMLNamedNodeMap(nodes);\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'publicId', {\n get: function() {\n return this.pubID;\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'systemId', {\n get: function() {\n return this.sysID;\n }\n });\n\n Object.defineProperty(XMLDocType.prototype, 'internalSubset', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n XMLDocType.prototype.element = function(name, value) {\n var child;\n child = new XMLDTDElement(this, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n var child;\n child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.entity = function(name, value) {\n var child;\n child = new XMLDTDEntity(this, false, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.pEntity = function(name, value) {\n var child;\n child = new XMLDTDEntity(this, true, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.notation = function(name, value) {\n var child;\n child = new XMLDTDNotation(this, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.toString = function(options) {\n return this.options.writer.docType(this, this.options.writer.filterOptions(options));\n };\n\n XMLDocType.prototype.ele = function(name, value) {\n return this.element(name, value);\n };\n\n XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);\n };\n\n XMLDocType.prototype.ent = function(name, value) {\n return this.entity(name, value);\n };\n\n XMLDocType.prototype.pent = function(name, value) {\n return this.pEntity(name, value);\n };\n\n XMLDocType.prototype.not = function(name, value) {\n return this.notation(name, value);\n };\n\n XMLDocType.prototype.up = function() {\n return this.root() || this.documentObject;\n };\n\n XMLDocType.prototype.isEqualNode = function(node) {\n if (!XMLDocType.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.name !== this.name) {\n return false;\n }\n if (node.publicId !== this.publicId) {\n return false;\n }\n if (node.systemId !== this.systemId) {\n return false;\n }\n return true;\n };\n\n return XMLDocType;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDAttList, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDAttList = (function(superClass) {\n extend(XMLDTDAttList, superClass);\n\n function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n XMLDTDAttList.__super__.constructor.call(this, parent);\n if (elementName == null) {\n throw new Error(\"Missing DTD element name. \" + this.debugInfo());\n }\n if (attributeName == null) {\n throw new Error(\"Missing DTD attribute name. \" + this.debugInfo(elementName));\n }\n if (!attributeType) {\n throw new Error(\"Missing DTD attribute type. \" + this.debugInfo(elementName));\n }\n if (!defaultValueType) {\n throw new Error(\"Missing DTD attribute default. \" + this.debugInfo(elementName));\n }\n if (defaultValueType.indexOf('#') !== 0) {\n defaultValueType = '#' + defaultValueType;\n }\n if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) {\n throw new Error(\"Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. \" + this.debugInfo(elementName));\n }\n if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) {\n throw new Error(\"Default value only applies to #FIXED or #DEFAULT. \" + this.debugInfo(elementName));\n }\n this.elementName = this.stringify.name(elementName);\n this.type = NodeType.AttributeDeclaration;\n this.attributeName = this.stringify.name(attributeName);\n this.attributeType = this.stringify.dtdAttType(attributeType);\n if (defaultValue) {\n this.defaultValue = this.stringify.dtdAttDefault(defaultValue);\n }\n this.defaultValueType = defaultValueType;\n }\n\n XMLDTDAttList.prototype.toString = function(options) {\n return this.options.writer.dtdAttList(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDAttList;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDEntity, XMLNode, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isObject = require('./Utility').isObject;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDEntity = (function(superClass) {\n extend(XMLDTDEntity, superClass);\n\n function XMLDTDEntity(parent, pe, name, value) {\n XMLDTDEntity.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing DTD entity name. \" + this.debugInfo(name));\n }\n if (value == null) {\n throw new Error(\"Missing DTD entity value. \" + this.debugInfo(name));\n }\n this.pe = !!pe;\n this.name = this.stringify.name(name);\n this.type = NodeType.EntityDeclaration;\n if (!isObject(value)) {\n this.value = this.stringify.dtdEntityValue(value);\n this.internal = true;\n } else {\n if (!value.pubID && !value.sysID) {\n throw new Error(\"Public and/or system identifiers are required for an external entity. \" + this.debugInfo(name));\n }\n if (value.pubID && !value.sysID) {\n throw new Error(\"System identifier is required for a public external entity. \" + this.debugInfo(name));\n }\n this.internal = false;\n if (value.pubID != null) {\n this.pubID = this.stringify.dtdPubID(value.pubID);\n }\n if (value.sysID != null) {\n this.sysID = this.stringify.dtdSysID(value.sysID);\n }\n if (value.nData != null) {\n this.nData = this.stringify.dtdNData(value.nData);\n }\n if (this.pe && this.nData) {\n throw new Error(\"Notation declaration is not allowed in a parameter entity. \" + this.debugInfo(name));\n }\n }\n }\n\n Object.defineProperty(XMLDTDEntity.prototype, 'publicId', {\n get: function() {\n return this.pubID;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'systemId', {\n get: function() {\n return this.sysID;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'notationName', {\n get: function() {\n return this.nData || null;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'inputEncoding', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'xmlEncoding', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDTDEntity.prototype, 'xmlVersion', {\n get: function() {\n return null;\n }\n });\n\n XMLDTDEntity.prototype.toString = function(options) {\n return this.options.writer.dtdEntity(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDEntity;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDElement, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDElement = (function(superClass) {\n extend(XMLDTDElement, superClass);\n\n function XMLDTDElement(parent, name, value) {\n XMLDTDElement.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing DTD element name. \" + this.debugInfo());\n }\n if (!value) {\n value = '(#PCDATA)';\n }\n if (Array.isArray(value)) {\n value = '(' + value.join(',') + ')';\n }\n this.name = this.stringify.name(name);\n this.type = NodeType.ElementDeclaration;\n this.value = this.stringify.dtdElementValue(value);\n }\n\n XMLDTDElement.prototype.toString = function(options) {\n return this.options.writer.dtdElement(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDElement;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDTDNotation, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDTDNotation = (function(superClass) {\n extend(XMLDTDNotation, superClass);\n\n function XMLDTDNotation(parent, name, value) {\n XMLDTDNotation.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing DTD notation name. \" + this.debugInfo(name));\n }\n if (!value.pubID && !value.sysID) {\n throw new Error(\"Public or system identifiers are required for an external entity. \" + this.debugInfo(name));\n }\n this.name = this.stringify.name(name);\n this.type = NodeType.NotationDeclaration;\n if (value.pubID != null) {\n this.pubID = this.stringify.dtdPubID(value.pubID);\n }\n if (value.sysID != null) {\n this.sysID = this.stringify.dtdSysID(value.sysID);\n }\n }\n\n Object.defineProperty(XMLDTDNotation.prototype, 'publicId', {\n get: function() {\n return this.pubID;\n }\n });\n\n Object.defineProperty(XMLDTDNotation.prototype, 'systemId', {\n get: function() {\n return this.sysID;\n }\n });\n\n XMLDTDNotation.prototype.toString = function(options) {\n return this.options.writer.dtdNotation(this, this.options.writer.filterOptions(options));\n };\n\n return XMLDTDNotation;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLNode, XMLRaw,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLRaw = (function(superClass) {\n extend(XMLRaw, superClass);\n\n function XMLRaw(parent, text) {\n XMLRaw.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing raw text. \" + this.debugInfo());\n }\n this.type = NodeType.Raw;\n this.value = this.stringify.raw(text);\n }\n\n XMLRaw.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLRaw.prototype.toString = function(options) {\n return this.options.writer.raw(this, this.options.writer.filterOptions(options));\n };\n\n return XMLRaw;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCharacterData, XMLText,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLText = (function(superClass) {\n extend(XMLText, superClass);\n\n function XMLText(parent, text) {\n XMLText.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing element text. \" + this.debugInfo());\n }\n this.name = \"#text\";\n this.type = NodeType.Text;\n this.value = this.stringify.text(text);\n }\n\n Object.defineProperty(XMLText.prototype, 'isElementContentWhitespace', {\n get: function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n }\n });\n\n Object.defineProperty(XMLText.prototype, 'wholeText', {\n get: function() {\n var next, prev, str;\n str = '';\n prev = this.previousSibling;\n while (prev) {\n str = prev.data + str;\n prev = prev.previousSibling;\n }\n str += this.data;\n next = this.nextSibling;\n while (next) {\n str = str + next.data;\n next = next.nextSibling;\n }\n return str;\n }\n });\n\n XMLText.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLText.prototype.toString = function(options) {\n return this.options.writer.text(this, this.options.writer.filterOptions(options));\n };\n\n XMLText.prototype.splitText = function(offset) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLText.prototype.replaceWholeText = function(content) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n return XMLText;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLCharacterData, XMLProcessingInstruction,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLCharacterData = require('./XMLCharacterData');\n\n module.exports = XMLProcessingInstruction = (function(superClass) {\n extend(XMLProcessingInstruction, superClass);\n\n function XMLProcessingInstruction(parent, target, value) {\n XMLProcessingInstruction.__super__.constructor.call(this, parent);\n if (target == null) {\n throw new Error(\"Missing instruction target. \" + this.debugInfo());\n }\n this.type = NodeType.ProcessingInstruction;\n this.target = this.stringify.insTarget(target);\n this.name = this.target;\n if (value) {\n this.value = this.stringify.insValue(value);\n }\n }\n\n XMLProcessingInstruction.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLProcessingInstruction.prototype.toString = function(options) {\n return this.options.writer.processingInstruction(this, this.options.writer.filterOptions(options));\n };\n\n XMLProcessingInstruction.prototype.isEqualNode = function(node) {\n if (!XMLProcessingInstruction.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {\n return false;\n }\n if (node.target !== this.target) {\n return false;\n }\n return true;\n };\n\n return XMLProcessingInstruction;\n\n })(XMLCharacterData);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLStringWriter, XMLWriterBase,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLWriterBase = require('./XMLWriterBase');\n\n module.exports = XMLStringWriter = (function(superClass) {\n extend(XMLStringWriter, superClass);\n\n function XMLStringWriter(options) {\n XMLStringWriter.__super__.constructor.call(this, options);\n }\n\n XMLStringWriter.prototype.document = function(doc, options) {\n var child, i, len, r, ref;\n options = this.filterOptions(options);\n r = '';\n ref = doc.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n r += this.writeChildNode(child, options, 0);\n }\n if (options.pretty && r.slice(-options.newline.length) === options.newline) {\n r = r.slice(0, -options.newline.length);\n }\n return r;\n };\n\n return XMLStringWriter;\n\n })(XMLWriterBase);\n\n}).call(this);\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\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","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMImplementation;\n\n module.exports = XMLDOMImplementation = (function() {\n function XMLDOMImplementation() {}\n\n XMLDOMImplementation.prototype.hasFeature = function(feature, version) {\n return true;\n };\n\n XMLDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLDOMImplementation.prototype.createDocument = function(namespaceURI, qualifiedName, doctype) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLDOMImplementation.prototype.createHTMLDocument = function(title) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n XMLDOMImplementation.prototype.getFeature = function(feature, version) {\n throw new Error(\"This DOM method is not implemented.\");\n };\n\n return XMLDOMImplementation;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDOMConfiguration, XMLDOMImplementation, XMLDocument, XMLNode, XMLStringWriter, XMLStringifier, isPlainObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n isPlainObject = require('./Utility').isPlainObject;\n\n XMLDOMImplementation = require('./XMLDOMImplementation');\n\n XMLDOMConfiguration = require('./XMLDOMConfiguration');\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n XMLStringifier = require('./XMLStringifier');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n module.exports = XMLDocument = (function(superClass) {\n extend(XMLDocument, superClass);\n\n function XMLDocument(options) {\n XMLDocument.__super__.constructor.call(this, null);\n this.name = \"#document\";\n this.type = NodeType.Document;\n this.documentURI = null;\n this.domConfig = new XMLDOMConfiguration();\n options || (options = {});\n if (!options.writer) {\n options.writer = new XMLStringWriter();\n }\n this.options = options;\n this.stringify = new XMLStringifier(options);\n }\n\n Object.defineProperty(XMLDocument.prototype, 'implementation', {\n value: new XMLDOMImplementation()\n });\n\n Object.defineProperty(XMLDocument.prototype, 'doctype', {\n get: function() {\n var child, i, len, ref;\n ref = this.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n if (child.type === NodeType.DocType) {\n return child;\n }\n }\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'documentElement', {\n get: function() {\n return this.rootObject || null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'inputEncoding', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'strictErrorChecking', {\n get: function() {\n return false;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'xmlEncoding', {\n get: function() {\n if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {\n return this.children[0].encoding;\n } else {\n return null;\n }\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'xmlStandalone', {\n get: function() {\n if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {\n return this.children[0].standalone === 'yes';\n } else {\n return false;\n }\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'xmlVersion', {\n get: function() {\n if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {\n return this.children[0].version;\n } else {\n return \"1.0\";\n }\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'URL', {\n get: function() {\n return this.documentURI;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'origin', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'compatMode', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'characterSet', {\n get: function() {\n return null;\n }\n });\n\n Object.defineProperty(XMLDocument.prototype, 'contentType', {\n get: function() {\n return null;\n }\n });\n\n XMLDocument.prototype.end = function(writer) {\n var writerOptions;\n writerOptions = {};\n if (!writer) {\n writer = this.options.writer;\n } else if (isPlainObject(writer)) {\n writerOptions = writer;\n writer = this.options.writer;\n }\n return writer.document(this, writer.filterOptions(writerOptions));\n };\n\n XMLDocument.prototype.toString = function(options) {\n return this.options.writer.document(this, this.options.writer.filterOptions(options));\n };\n\n XMLDocument.prototype.createElement = function(tagName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createDocumentFragment = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createTextNode = function(data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createComment = function(data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createCDATASection = function(data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createProcessingInstruction = function(target, data) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createAttribute = function(name) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createEntityReference = function(name) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementsByTagName = function(tagname) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.importNode = function(importedNode, deep) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createElementNS = function(namespaceURI, qualifiedName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createAttributeNS = function(namespaceURI, qualifiedName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementById = function(elementId) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.adoptNode = function(source) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.normalizeDocument = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.renameNode = function(node, namespaceURI, qualifiedName) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.getElementsByClassName = function(classNames) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createEvent = function(eventInterface) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createRange = function() {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createNodeIterator = function(root, whatToShow, filter) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n XMLDocument.prototype.createTreeWalker = function(root, whatToShow, filter) {\n throw new Error(\"This DOM method is not implemented.\" + this.debugInfo());\n };\n\n return XMLDocument;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLAttribute, XMLNode;\n\n NodeType = require('./NodeType');\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLAttribute = (function() {\n function XMLAttribute(parent, name, value) {\n this.parent = parent;\n if (this.parent) {\n this.options = this.parent.options;\n this.stringify = this.parent.stringify;\n }\n if (name == null) {\n throw new Error(\"Missing attribute name. \" + this.debugInfo(name));\n }\n this.name = this.stringify.name(name);\n this.value = this.stringify.attValue(value);\n this.type = NodeType.Attribute;\n this.isId = false;\n this.schemaTypeInfo = null;\n }\n\n Object.defineProperty(XMLAttribute.prototype, 'nodeType', {\n get: function() {\n return this.type;\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'ownerElement', {\n get: function() {\n return this.parent;\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'textContent', {\n get: function() {\n return this.value;\n },\n set: function(value) {\n return this.value = value || '';\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'namespaceURI', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'prefix', {\n get: function() {\n return '';\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'localName', {\n get: function() {\n return this.name;\n }\n });\n\n Object.defineProperty(XMLAttribute.prototype, 'specified', {\n get: function() {\n return true;\n }\n });\n\n XMLAttribute.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLAttribute.prototype.toString = function(options) {\n return this.options.writer.attribute(this, this.options.writer.filterOptions(options));\n };\n\n XMLAttribute.prototype.debugInfo = function(name) {\n name = name || this.name;\n if (name == null) {\n return \"parent: <\" + this.parent.name + \">\";\n } else {\n return \"attribute: {\" + name + \"}, parent: <\" + this.parent.name + \">\";\n }\n };\n\n XMLAttribute.prototype.isEqualNode = function(node) {\n if (node.namespaceURI !== this.namespaceURI) {\n return false;\n }\n if (node.prefix !== this.prefix) {\n return false;\n }\n if (node.localName !== this.localName) {\n return false;\n }\n if (node.value !== this.value) {\n return false;\n }\n return true;\n };\n\n return XMLAttribute;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, XMLDummy, XMLNode,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n XMLNode = require('./XMLNode');\n\n NodeType = require('./NodeType');\n\n module.exports = XMLDummy = (function(superClass) {\n extend(XMLDummy, superClass);\n\n function XMLDummy(parent) {\n XMLDummy.__super__.constructor.call(this, parent);\n this.type = NodeType.Dummy;\n }\n\n XMLDummy.prototype.clone = function() {\n return Object.create(this);\n };\n\n XMLDummy.prototype.toString = function(options) {\n return '';\n };\n\n return XMLDummy;\n\n })(XMLNode);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLStringifier,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n hasProp = {}.hasOwnProperty;\n\n module.exports = XMLStringifier = (function() {\n function XMLStringifier(options) {\n this.assertLegalName = bind(this.assertLegalName, this);\n this.assertLegalChar = bind(this.assertLegalChar, this);\n var key, ref, value;\n options || (options = {});\n this.options = options;\n if (!this.options.version) {\n this.options.version = '1.0';\n }\n ref = options.stringify || {};\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this[key] = value;\n }\n }\n\n XMLStringifier.prototype.name = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalName('' + val || '');\n };\n\n XMLStringifier.prototype.text = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar(this.textEscape('' + val || ''));\n };\n\n XMLStringifier.prototype.cdata = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n val = val.replace(']]>', ']]]]>');\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.comment = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (val.match(/--/)) {\n throw new Error(\"Comment text cannot contain double-hypen: \" + val);\n }\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.raw = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return '' + val || '';\n };\n\n XMLStringifier.prototype.attValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar(this.attEscape(val = '' + val || ''));\n };\n\n XMLStringifier.prototype.insTarget = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.insValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (val.match(/\\?>/)) {\n throw new Error(\"Invalid processing instruction value: \" + val);\n }\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.xmlVersion = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (!val.match(/1\\.[0-9]+/)) {\n throw new Error(\"Invalid version number: \" + val);\n }\n return val;\n };\n\n XMLStringifier.prototype.xmlEncoding = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n val = '' + val || '';\n if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/)) {\n throw new Error(\"Invalid encoding: \" + val);\n }\n return this.assertLegalChar(val);\n };\n\n XMLStringifier.prototype.xmlStandalone = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n if (val) {\n return \"yes\";\n } else {\n return \"no\";\n }\n };\n\n XMLStringifier.prototype.dtdPubID = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdSysID = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdElementValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdAttType = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdAttDefault = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdEntityValue = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.dtdNData = function(val) {\n if (this.options.noValidation) {\n return val;\n }\n return this.assertLegalChar('' + val || '');\n };\n\n XMLStringifier.prototype.convertAttKey = '@';\n\n XMLStringifier.prototype.convertPIKey = '?';\n\n XMLStringifier.prototype.convertTextKey = '#text';\n\n XMLStringifier.prototype.convertCDataKey = '#cdata';\n\n XMLStringifier.prototype.convertCommentKey = '#comment';\n\n XMLStringifier.prototype.convertRawKey = '#raw';\n\n XMLStringifier.prototype.assertLegalChar = function(str) {\n var regex, res;\n if (this.options.noValidation) {\n return str;\n }\n regex = '';\n if (this.options.version === '1.0') {\n regex = /[\\0-\\x08\\x0B\\f\\x0E-\\x1F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n if (res = str.match(regex)) {\n throw new Error(\"Invalid character in string: \" + str + \" at index \" + res.index);\n }\n } else if (this.options.version === '1.1') {\n regex = /[\\0\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n if (res = str.match(regex)) {\n throw new Error(\"Invalid character in string: \" + str + \" at index \" + res.index);\n }\n }\n return str;\n };\n\n XMLStringifier.prototype.assertLegalName = function(str) {\n var regex;\n if (this.options.noValidation) {\n return str;\n }\n this.assertLegalChar(str);\n regex = /^([:A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF])([\\x2D\\.0-:A-Z_a-z\\xB7\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF])*$/;\n if (!str.match(regex)) {\n throw new Error(\"Invalid character in name\");\n }\n return str;\n };\n\n XMLStringifier.prototype.textEscape = function(str) {\n var ampregex;\n if (this.options.noValidation) {\n return str;\n }\n ampregex = this.options.noDoubleEncoding ? /(?!&\\S+;)&/g : /&/g;\n return str.replace(ampregex, '&').replace(//g, '>').replace(/\\r/g, ' ');\n };\n\n XMLStringifier.prototype.attEscape = function(str) {\n var ampregex;\n if (this.options.noValidation) {\n return str;\n }\n ampregex = this.options.noDoubleEncoding ? /(?!&\\S+;)&/g : /&/g;\n return str.replace(ampregex, '&').replace(/ 0) {\n return new Array(indentLevel).join(options.indent);\n }\n }\n return '';\n };\n\n XMLWriterBase.prototype.endline = function(node, options, level) {\n if (!options.pretty || options.suppressPrettyCount) {\n return '';\n } else {\n return options.newline;\n }\n };\n\n XMLWriterBase.prototype.attribute = function(att, options, level) {\n var r;\n this.openAttribute(att, options, level);\n r = ' ' + att.name + '=\"' + att.value + '\"';\n this.closeAttribute(att, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.cdata = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.comment = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.declaration = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '';\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.docType = function(node, options, level) {\n var child, i, len, r, ref;\n level || (level = 0);\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level);\n r += ' 0) {\n r += ' [';\n r += this.endline(node, options, level);\n options.state = WriterState.InsideTag;\n ref = node.children;\n for (i = 0, len = ref.length; i < len; i++) {\n child = ref[i];\n r += this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n r += ']';\n }\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '>';\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.element = function(node, options, level) {\n var att, child, childNodeCount, firstChildNode, i, j, len, len1, name, prettySuppressed, r, ref, ref1, ref2;\n level || (level = 0);\n prettySuppressed = false;\n r = '';\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r += this.indent(node, options, level) + '<' + node.name;\n ref = node.attribs;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n r += this.attribute(att, options, level);\n }\n childNodeCount = node.children.length;\n firstChildNode = childNodeCount === 0 ? null : node.children[0];\n if (childNodeCount === 0 || node.children.every(function(e) {\n return (e.type === NodeType.Text || e.type === NodeType.Raw) && e.value === '';\n })) {\n if (options.allowEmpty) {\n r += '>';\n options.state = WriterState.CloseTag;\n r += '' + this.endline(node, options, level);\n } else {\n options.state = WriterState.CloseTag;\n r += options.spaceBeforeSlash + '/>' + this.endline(node, options, level);\n }\n } else if (options.pretty && childNodeCount === 1 && (firstChildNode.type === NodeType.Text || firstChildNode.type === NodeType.Raw) && (firstChildNode.value != null)) {\n r += '>';\n options.state = WriterState.InsideTag;\n options.suppressPrettyCount++;\n prettySuppressed = true;\n r += this.writeChildNode(firstChildNode, options, level + 1);\n options.suppressPrettyCount--;\n prettySuppressed = false;\n options.state = WriterState.CloseTag;\n r += '' + this.endline(node, options, level);\n } else {\n if (options.dontPrettyTextNodes) {\n ref1 = node.children;\n for (i = 0, len = ref1.length; i < len; i++) {\n child = ref1[i];\n if ((child.type === NodeType.Text || child.type === NodeType.Raw) && (child.value != null)) {\n options.suppressPrettyCount++;\n prettySuppressed = true;\n break;\n }\n }\n }\n r += '>' + this.endline(node, options, level);\n options.state = WriterState.InsideTag;\n ref2 = node.children;\n for (j = 0, len1 = ref2.length; j < len1; j++) {\n child = ref2[j];\n r += this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n r += this.indent(node, options, level) + '';\n if (prettySuppressed) {\n options.suppressPrettyCount--;\n }\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n }\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.writeChildNode = function(node, options, level) {\n switch (node.type) {\n case NodeType.CData:\n return this.cdata(node, options, level);\n case NodeType.Comment:\n return this.comment(node, options, level);\n case NodeType.Element:\n return this.element(node, options, level);\n case NodeType.Raw:\n return this.raw(node, options, level);\n case NodeType.Text:\n return this.text(node, options, level);\n case NodeType.ProcessingInstruction:\n return this.processingInstruction(node, options, level);\n case NodeType.Dummy:\n return '';\n case NodeType.Declaration:\n return this.declaration(node, options, level);\n case NodeType.DocType:\n return this.docType(node, options, level);\n case NodeType.AttributeDeclaration:\n return this.dtdAttList(node, options, level);\n case NodeType.ElementDeclaration:\n return this.dtdElement(node, options, level);\n case NodeType.EntityDeclaration:\n return this.dtdEntity(node, options, level);\n case NodeType.NotationDeclaration:\n return this.dtdNotation(node, options, level);\n default:\n throw new Error(\"Unknown XML node type: \" + node.constructor.name);\n }\n };\n\n XMLWriterBase.prototype.processingInstruction = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '';\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.raw = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level);\n options.state = WriterState.InsideTag;\n r += node.value;\n options.state = WriterState.CloseTag;\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.text = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level);\n options.state = WriterState.InsideTag;\n r += node.value;\n options.state = WriterState.CloseTag;\n r += this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdAttList = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdElement = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdEntity = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.dtdNotation = function(node, options, level) {\n var r;\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n r = this.indent(node, options, level) + '' + this.endline(node, options, level);\n options.state = WriterState.None;\n this.closeNode(node, options, level);\n return r;\n };\n\n XMLWriterBase.prototype.openNode = function(node, options, level) {};\n\n XMLWriterBase.prototype.closeNode = function(node, options, level) {};\n\n XMLWriterBase.prototype.openAttribute = function(att, options, level) {};\n\n XMLWriterBase.prototype.closeAttribute = function(att, options, level) {};\n\n return XMLWriterBase;\n\n })();\n\n}).call(this);\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var prefixMatch;\n\n prefixMatch = new RegExp(/(?!xmlns)^.*:/);\n\n exports.normalize = function(str) {\n return str.toLowerCase();\n };\n\n exports.firstCharLowerCase = function(str) {\n return str.charAt(0).toLowerCase() + str.slice(1);\n };\n\n exports.stripPrefix = function(str) {\n return str.replace(prefixMatch, '');\n };\n\n exports.parseNumbers = function(str) {\n if (!isNaN(str)) {\n str = str % 1 === 0 ? parseInt(str, 10) : parseFloat(str);\n }\n return str;\n };\n\n exports.parseBooleans = function(str) {\n if (/^(?:true|false)$/i.test(str)) {\n str = str.toLowerCase() === 'true';\n }\n return str;\n };\n\n}).call(this);\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","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","ace.define(\"ace/mode/xml_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 XmlHighlightRules = function(normalize) {\n var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n this.$rules = {\n start : [\n {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n {\n token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n },\n {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n {\n token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n },\n {include : \"tag\"},\n {token : \"text.end-tag-open.xml\", regex: \"\",\n next : \"start\"\n }],\n\n doctype : [\n {include : \"whitespace\"},\n {include : \"string\"},\n {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n ],\n\n int_subset : [{\n token : \"text.xml\",\n regex : \"\\\\s+\"\n }, {\n token: \"punctuation.int-subset.xml\",\n regex: \"]\",\n next: \"pop\"\n }, {\n token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n regex : \"(<\\\\!)(\" + tagRegex + \")\",\n push : [{\n token : \"text\",\n regex : \"\\\\s+\"\n },\n {\n token : \"punctuation.markup-decl.xml\",\n regex : \">\",\n next : \"pop\"\n },\n {include : \"string\"}]\n }],\n\n cdata : [\n {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n {token : \"text.xml\", regex : \"\\\\s+\"},\n {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n ],\n\n comment : [\n {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n {defaultToken : \"comment.xml\"}\n ],\n\n reference : [{\n token : \"constant.language.escape.reference.xml\",\n regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }],\n\n attr_reference : [{\n token : \"constant.language.escape.reference.attribute-value.xml\",\n regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }],\n\n tag : [{\n token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n regex : \"(?:(<)|(\", next : \"start\"}\n ]\n }],\n\n tag_whitespace : [\n {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n ],\n whitespace : [\n {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n ],\n string: [{\n token : \"string.xml\",\n regex : \"'\",\n push : [\n {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n {defaultToken : \"string.xml\"}\n ]\n }, {\n token : \"string.xml\",\n regex : '\"',\n push : [\n {token : \"string.xml\", regex: '\"', next: \"pop\"},\n {defaultToken : \"string.xml\"}\n ]\n }],\n\n attributes: [{\n token : \"entity.other.attribute-name.xml\",\n regex : tagRegex\n }, {\n token : \"keyword.operator.attribute-equals.xml\",\n regex : \"=\"\n }, {\n include: \"tag_whitespace\"\n }, {\n include: \"attribute_value\"\n }],\n\n attribute_value: [{\n token : \"string.attribute-value.xml\",\n regex : \"'\",\n push : [\n {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n {include : \"attr_reference\"},\n {defaultToken : \"string.attribute-value.xml\"}\n ]\n }, {\n token : \"string.attribute-value.xml\",\n regex : '\"',\n push : [\n {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n {include : \"attr_reference\"},\n {defaultToken : \"string.attribute-value.xml\"}\n ]\n }]\n };\n\n if (this.constructor === XmlHighlightRules)\n this.normalizeRules();\n};\n\n\n(function() {\n\n this.embedTagRules = function(HighlightRules, prefix, tag){\n this.$rules.tag.unshift({\n token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n next: [\n {include : \"attributes\"},\n {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n ]\n });\n\n this.$rules[tag + \"-end\"] = [\n {include : \"attributes\"},\n {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next: \"start\",\n onMatch : function(value, currentState, stack) {\n stack.splice(0);\n return this.token;\n }}\n ];\n\n this.embedRules(HighlightRules, prefix, [{\n token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n regex : \"(|$))\",\n next: tag + \"-end\"\n }, {\n token: \"string.cdata.xml\",\n regex : \"<\\\\!\\\\[CDATA\\\\[\"\n }, {\n token: \"string.cdata.xml\",\n regex : \"\\\\]\\\\]>\"\n }]);\n };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"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\nfunction is(token, type) {\n return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '\"' || text == \"'\") {\n var quote = text;\n var selected = session.doc.getTextRange(editor.getSelectionRange());\n if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n return {\n text: quote + selected + quote,\n selection: false\n };\n }\n\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n return {\n text: \"\",\n selection: [1, 1]\n };\n }\n\n if (!token)\n token = iterator.stepBackward();\n\n if (!token)\n return;\n\n while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n token = iterator.stepBackward();\n }\n var rightSpace = !rightChar || rightChar.match(/\\s/);\n if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n return {\n text: 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 selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\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 this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '>') {\n var position = editor.getSelectionRange().start;\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken() || iterator.stepBackward();\n if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n return;\n if (is(token, \"reference.attribute-value\"))\n return;\n if (is(token, \"attribute-value\")) {\n var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n if (position.column < tokenEndColumn)\n return;\n if (position.column == tokenEndColumn) {\n var nextToken = iterator.stepForward();\n if (nextToken && is(nextToken, \"attribute-value\"))\n return;\n iterator.stepBackward();\n }\n }\n \n if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n return;\n while (!is(token, \"tag-name\")) {\n token = iterator.stepBackward();\n if (token.value == \"<\") {\n token = iterator.stepForward();\n break;\n }\n }\n\n var tokenRow = iterator.getCurrentTokenRow();\n var tokenColumn = iterator.getCurrentTokenColumn();\n if (is(iterator.stepBackward(), \"end-tag-open\"))\n return;\n\n var element = token.value;\n if (tokenRow == position.row)\n element = element.substring(0, position.column - tokenColumn);\n\n if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n return;\n\n return {\n text: \">\" + \"\",\n selection: [1, 1]\n };\n }\n });\n\n this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n if (text == \"\\n\") {\n var cursor = editor.getCursorPosition();\n var line = session.getLine(cursor.row);\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n if (token && token.type.indexOf(\"tag-close\") !== -1) {\n if (token.value == \"/>\")\n return;\n while (token && token.type.indexOf(\"tag-name\") === -1) {\n token = iterator.stepBackward();\n }\n\n if (!token) {\n return;\n }\n\n var tag = token.value;\n var row = iterator.getCurrentTokenRow();\n token = iterator.stepBackward();\n if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n return;\n }\n\n if (this.voidElements && !this.voidElements[tag]) {\n var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n var line = session.getLine(row);\n var nextIndent = this.$getIndent(line);\n var indent = nextIndent + session.getTabString();\n\n if (nextToken && nextToken.value === \" -1;\n}\n\n(function() {\n\n this.getFoldWidget = function(session, foldStyle, row) {\n var tag = this._getFirstTagInLine(session, row);\n\n if (!tag)\n return this.getCommentFoldWidget(session, row);\n\n if (tag.closing || (!tag.tagName && tag.selfClosing))\n return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n return \"\";\n\n if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n return \"\";\n\n return \"start\";\n };\n \n this.getCommentFoldWidget = function(session, row) {\n if (/comment/.test(session.getState(row)) && /';\n break;\n }\n }\n return tag;\n } else if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == '/>';\n return tag;\n }\n tag.start.column += token.value.length;\n }\n\n return null;\n };\n\n this._findEndTagInLine = function(session, row, tagName, startColumn) {\n var tokens = session.getTokens(row);\n var column = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n column += token.value.length;\n if (column < startColumn)\n continue;\n if (is(token, \"end-tag-open\")) {\n token = tokens[i + 1];\n if (token && token.value == tagName)\n return true;\n }\n }\n return false;\n };\n this._readTagForward = function(iterator) {\n var token = iterator.getCurrentToken();\n if (!token)\n return null;\n\n var tag = new Tag();\n do {\n if (is(token, \"tag-open\")) {\n tag.closing = is(token, \"end-tag-open\");\n tag.start.row = iterator.getCurrentTokenRow();\n tag.start.column = iterator.getCurrentTokenColumn();\n } else if (is(token, \"tag-name\")) {\n tag.tagName = token.value;\n } else if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == \"/>\";\n tag.end.row = iterator.getCurrentTokenRow();\n tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n iterator.stepForward();\n return tag;\n }\n } while(token = iterator.stepForward());\n\n return null;\n };\n \n this._readTagBackward = function(iterator) {\n var token = iterator.getCurrentToken();\n if (!token)\n return null;\n\n var tag = new Tag();\n do {\n if (is(token, \"tag-open\")) {\n tag.closing = is(token, \"end-tag-open\");\n tag.start.row = iterator.getCurrentTokenRow();\n tag.start.column = iterator.getCurrentTokenColumn();\n iterator.stepBackward();\n return tag;\n } else if (is(token, \"tag-name\")) {\n tag.tagName = token.value;\n } else if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == \"/>\";\n tag.end.row = iterator.getCurrentTokenRow();\n tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n }\n } while(token = iterator.stepBackward());\n\n return null;\n };\n \n this._pop = function(stack, tag) {\n while (stack.length) {\n \n var top = stack[stack.length-1];\n if (!tag || top.tagName == tag.tagName) {\n return stack.pop();\n }\n else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n stack.pop();\n continue;\n } else {\n return null;\n }\n }\n };\n \n this.getFoldWidgetRange = function(session, foldStyle, row) {\n var firstTag = this._getFirstTagInLine(session, row);\n \n if (!firstTag) {\n return this.getCommentFoldWidget(session, row)\n && session.getCommentFoldRange(row, session.getLine(row).length);\n }\n \n var isBackward = firstTag.closing || firstTag.selfClosing;\n var stack = [];\n var tag;\n \n if (!isBackward) {\n var iterator = new TokenIterator(session, row, firstTag.start.column);\n var start = {\n row: row,\n column: firstTag.start.column + firstTag.tagName.length + 2\n };\n if (firstTag.start.row == firstTag.end.row)\n start.column = firstTag.end.column;\n while (tag = this._readTagForward(iterator)) {\n if (tag.selfClosing) {\n if (!stack.length) {\n tag.start.column += tag.tagName.length + 2;\n tag.end.column -= 2;\n return Range.fromPoints(tag.start, tag.end);\n } else\n continue;\n }\n \n if (tag.closing) {\n this._pop(stack, tag);\n if (stack.length == 0)\n return Range.fromPoints(start, tag.start);\n }\n else {\n stack.push(tag);\n }\n }\n }\n else {\n var iterator = new TokenIterator(session, row, firstTag.end.column);\n var end = {\n row: row,\n column: firstTag.start.column\n };\n \n while (tag = this._readTagBackward(iterator)) {\n if (tag.selfClosing) {\n if (!stack.length) {\n tag.start.column += tag.tagName.length + 2;\n tag.end.column -= 2;\n return Range.fromPoints(tag.start, tag.end);\n } else\n continue;\n }\n \n if (!tag.closing) {\n this._pop(stack, tag);\n if (stack.length == 0) {\n tag.start.column += tag.tagName.length + 2;\n if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n tag.start.column = tag.end.column;\n return Range.fromPoints(tag.start, end);\n }\n }\n else {\n stack.push(tag);\n }\n }\n }\n \n };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n this.HighlightRules = XmlHighlightRules;\n this.$behaviour = new XmlBehaviour();\n this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.voidElements = lang.arrayToMap([]);\n\n this.blockComment = {start: \"\"};\n\n this.createWorker = function(session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n worker.attachToDocument(session.getDocument());\n\n worker.on(\"error\", 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 this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n}); (function() {\n ace.require([\"ace/mode/xml\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var builder, defaults, escapeCDATA, requiresCDATA, wrapCDATA,\n hasProp = {}.hasOwnProperty;\n\n builder = require('xmlbuilder');\n\n defaults = require('./defaults').defaults;\n\n requiresCDATA = function(entry) {\n return typeof entry === \"string\" && (entry.indexOf('&') >= 0 || entry.indexOf('>') >= 0 || entry.indexOf('<') >= 0);\n };\n\n wrapCDATA = function(entry) {\n return \"\";\n };\n\n escapeCDATA = function(entry) {\n return entry.replace(']]>', ']]]]>');\n };\n\n exports.Builder = (function() {\n function Builder(opts) {\n var key, ref, value;\n this.options = {};\n ref = defaults[\"0.2\"];\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this.options[key] = value;\n }\n for (key in opts) {\n if (!hasProp.call(opts, key)) continue;\n value = opts[key];\n this.options[key] = value;\n }\n }\n\n Builder.prototype.buildObject = function(rootObj) {\n var attrkey, charkey, render, rootElement, rootName;\n attrkey = this.options.attrkey;\n charkey = this.options.charkey;\n if ((Object.keys(rootObj).length === 1) && (this.options.rootName === defaults['0.2'].rootName)) {\n rootName = Object.keys(rootObj)[0];\n rootObj = rootObj[rootName];\n } else {\n rootName = this.options.rootName;\n }\n render = (function(_this) {\n return function(element, obj) {\n var attr, child, entry, index, key, value;\n if (typeof obj !== 'object') {\n if (_this.options.cdata && requiresCDATA(obj)) {\n element.raw(wrapCDATA(obj));\n } else {\n element.txt(obj);\n }\n } else if (Array.isArray(obj)) {\n for (index in obj) {\n if (!hasProp.call(obj, index)) continue;\n child = obj[index];\n for (key in child) {\n entry = child[key];\n element = render(element.ele(key), entry).up();\n }\n }\n } else {\n for (key in obj) {\n if (!hasProp.call(obj, key)) continue;\n child = obj[key];\n if (key === attrkey) {\n if (typeof child === \"object\") {\n for (attr in child) {\n value = child[attr];\n element = element.att(attr, value);\n }\n }\n } else if (key === charkey) {\n if (_this.options.cdata && requiresCDATA(child)) {\n element = element.raw(wrapCDATA(child));\n } else {\n element = element.txt(child);\n }\n } else if (Array.isArray(child)) {\n for (index in child) {\n if (!hasProp.call(child, index)) continue;\n entry = child[index];\n if (typeof entry === 'string') {\n if (_this.options.cdata && requiresCDATA(entry)) {\n element = element.ele(key).raw(wrapCDATA(entry)).up();\n } else {\n element = element.ele(key, entry).up();\n }\n } else {\n element = render(element.ele(key), entry).up();\n }\n }\n } else if (typeof child === \"object\") {\n element = render(element.ele(key), child).up();\n } else {\n if (typeof child === 'string' && _this.options.cdata && requiresCDATA(child)) {\n element = element.ele(key).raw(wrapCDATA(child)).up();\n } else {\n if (child == null) {\n child = '';\n }\n element = element.ele(key, child.toString()).up();\n }\n }\n }\n }\n return element;\n };\n })(this);\n rootElement = builder.create(rootName, this.options.xmldec, this.options.doctype, {\n headless: this.options.headless,\n allowSurrogateChars: this.options.allowSurrogateChars\n });\n return render(rootElement, rootObj).end(this.options.renderOpts);\n };\n\n return Builder;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLDOMImplementation, XMLDocument, XMLDocumentCB, XMLStreamWriter, XMLStringWriter, assign, isFunction, ref;\n\n ref = require('./Utility'), assign = ref.assign, isFunction = ref.isFunction;\n\n XMLDOMImplementation = require('./XMLDOMImplementation');\n\n XMLDocument = require('./XMLDocument');\n\n XMLDocumentCB = require('./XMLDocumentCB');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n XMLStreamWriter = require('./XMLStreamWriter');\n\n NodeType = require('./NodeType');\n\n WriterState = require('./WriterState');\n\n module.exports.create = function(name, xmldec, doctype, options) {\n var doc, root;\n if (name == null) {\n throw new Error(\"Root element needs a name.\");\n }\n options = assign({}, xmldec, doctype, options);\n doc = new XMLDocument(options);\n root = doc.element(name);\n if (!options.headless) {\n doc.declaration(options);\n if ((options.pubID != null) || (options.sysID != null)) {\n doc.dtd(options);\n }\n }\n return root;\n };\n\n module.exports.begin = function(options, onData, onEnd) {\n var ref1;\n if (isFunction(options)) {\n ref1 = [options, onData], onData = ref1[0], onEnd = ref1[1];\n options = {};\n }\n if (onData) {\n return new XMLDocumentCB(options, onData, onEnd);\n } else {\n return new XMLDocument(options);\n }\n };\n\n module.exports.stringWriter = function(options) {\n return new XMLStringWriter(options);\n };\n\n module.exports.streamWriter = function(stream, options) {\n return new XMLStreamWriter(stream, options);\n };\n\n module.exports.implementation = new XMLDOMImplementation();\n\n module.exports.nodeType = NodeType;\n\n module.exports.writerState = WriterState;\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMConfiguration, XMLDOMErrorHandler, XMLDOMStringList;\n\n XMLDOMErrorHandler = require('./XMLDOMErrorHandler');\n\n XMLDOMStringList = require('./XMLDOMStringList');\n\n module.exports = XMLDOMConfiguration = (function() {\n function XMLDOMConfiguration() {\n var clonedSelf;\n this.defaultParams = {\n \"canonical-form\": false,\n \"cdata-sections\": false,\n \"comments\": false,\n \"datatype-normalization\": false,\n \"element-content-whitespace\": true,\n \"entities\": true,\n \"error-handler\": new XMLDOMErrorHandler(),\n \"infoset\": true,\n \"validate-if-schema\": false,\n \"namespaces\": true,\n \"namespace-declarations\": true,\n \"normalize-characters\": false,\n \"schema-location\": '',\n \"schema-type\": '',\n \"split-cdata-sections\": true,\n \"validate\": false,\n \"well-formed\": true\n };\n this.params = clonedSelf = Object.create(this.defaultParams);\n }\n\n Object.defineProperty(XMLDOMConfiguration.prototype, 'parameterNames', {\n get: function() {\n return new XMLDOMStringList(Object.keys(this.defaultParams));\n }\n });\n\n XMLDOMConfiguration.prototype.getParameter = function(name) {\n if (this.params.hasOwnProperty(name)) {\n return this.params[name];\n } else {\n return null;\n }\n };\n\n XMLDOMConfiguration.prototype.canSetParameter = function(name, value) {\n return true;\n };\n\n XMLDOMConfiguration.prototype.setParameter = function(name, value) {\n if (value != null) {\n return this.params[name] = value;\n } else {\n return delete this.params[name];\n }\n };\n\n return XMLDOMConfiguration;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMErrorHandler;\n\n module.exports = XMLDOMErrorHandler = (function() {\n function XMLDOMErrorHandler() {}\n\n XMLDOMErrorHandler.prototype.handleError = function(error) {\n throw new Error(error);\n };\n\n return XMLDOMErrorHandler;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLDOMStringList;\n\n module.exports = XMLDOMStringList = (function() {\n function XMLDOMStringList(arr) {\n this.arr = arr || [];\n }\n\n Object.defineProperty(XMLDOMStringList.prototype, 'length', {\n get: function() {\n return this.arr.length;\n }\n });\n\n XMLDOMStringList.prototype.item = function(index) {\n return this.arr[index] || null;\n };\n\n XMLDOMStringList.prototype.contains = function(str) {\n return this.arr.indexOf(str) !== -1;\n };\n\n return XMLDOMStringList;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var XMLNodeList;\n\n module.exports = XMLNodeList = (function() {\n function XMLNodeList(nodes) {\n this.nodes = nodes;\n }\n\n Object.defineProperty(XMLNodeList.prototype, 'length', {\n get: function() {\n return this.nodes.length || 0;\n }\n });\n\n XMLNodeList.prototype.clone = function() {\n return this.nodes = null;\n };\n\n XMLNodeList.prototype.item = function(index) {\n return this.nodes[index] || null;\n };\n\n return XMLNodeList;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n module.exports = {\n Disconnected: 1,\n Preceding: 2,\n Following: 4,\n Contains: 8,\n ContainedBy: 16,\n ImplementationSpecific: 32\n };\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocument, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, getValue, isFunction, isObject, isPlainObject, ref,\n hasProp = {}.hasOwnProperty;\n\n ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue;\n\n NodeType = require('./NodeType');\n\n XMLDocument = require('./XMLDocument');\n\n XMLElement = require('./XMLElement');\n\n XMLCData = require('./XMLCData');\n\n XMLComment = require('./XMLComment');\n\n XMLRaw = require('./XMLRaw');\n\n XMLText = require('./XMLText');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n XMLDeclaration = require('./XMLDeclaration');\n\n XMLDocType = require('./XMLDocType');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLAttribute = require('./XMLAttribute');\n\n XMLStringifier = require('./XMLStringifier');\n\n XMLStringWriter = require('./XMLStringWriter');\n\n WriterState = require('./WriterState');\n\n module.exports = XMLDocumentCB = (function() {\n function XMLDocumentCB(options, onData, onEnd) {\n var writerOptions;\n this.name = \"?xml\";\n this.type = NodeType.Document;\n options || (options = {});\n writerOptions = {};\n if (!options.writer) {\n options.writer = new XMLStringWriter();\n } else if (isPlainObject(options.writer)) {\n writerOptions = options.writer;\n options.writer = new XMLStringWriter();\n }\n this.options = options;\n this.writer = options.writer;\n this.writerOptions = this.writer.filterOptions(writerOptions);\n this.stringify = new XMLStringifier(options);\n this.onDataCallback = onData || function() {};\n this.onEndCallback = onEnd || function() {};\n this.currentNode = null;\n this.currentLevel = -1;\n this.openTags = {};\n this.documentStarted = false;\n this.documentCompleted = false;\n this.root = null;\n }\n\n XMLDocumentCB.prototype.createChildNode = function(node) {\n var att, attName, attributes, child, i, len, ref1, ref2;\n switch (node.type) {\n case NodeType.CData:\n this.cdata(node.value);\n break;\n case NodeType.Comment:\n this.comment(node.value);\n break;\n case NodeType.Element:\n attributes = {};\n ref1 = node.attribs;\n for (attName in ref1) {\n if (!hasProp.call(ref1, attName)) continue;\n att = ref1[attName];\n attributes[attName] = att.value;\n }\n this.node(node.name, attributes);\n break;\n case NodeType.Dummy:\n this.dummy();\n break;\n case NodeType.Raw:\n this.raw(node.value);\n break;\n case NodeType.Text:\n this.text(node.value);\n break;\n case NodeType.ProcessingInstruction:\n this.instruction(node.target, node.value);\n break;\n default:\n throw new Error(\"This XML node type is not supported in a JS object: \" + node.constructor.name);\n }\n ref2 = node.children;\n for (i = 0, len = ref2.length; i < len; i++) {\n child = ref2[i];\n this.createChildNode(child);\n if (child.type === NodeType.Element) {\n this.up();\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.dummy = function() {\n return this;\n };\n\n XMLDocumentCB.prototype.node = function(name, attributes, text) {\n var ref1;\n if (name == null) {\n throw new Error(\"Missing node name.\");\n }\n if (this.root && this.currentLevel === -1) {\n throw new Error(\"Document can only have one root node. \" + this.debugInfo(name));\n }\n this.openCurrent();\n name = getValue(name);\n if (attributes == null) {\n attributes = {};\n }\n attributes = getValue(attributes);\n if (!isObject(attributes)) {\n ref1 = [attributes, text], text = ref1[0], attributes = ref1[1];\n }\n this.currentNode = new XMLElement(this, name, attributes);\n this.currentNode.children = false;\n this.currentLevel++;\n this.openTags[this.currentLevel] = this.currentNode;\n if (text != null) {\n this.text(text);\n }\n return this;\n };\n\n XMLDocumentCB.prototype.element = function(name, attributes, text) {\n var child, i, len, oldValidationFlag, ref1, root;\n if (this.currentNode && this.currentNode.type === NodeType.DocType) {\n this.dtdElement.apply(this, arguments);\n } else {\n if (Array.isArray(name) || isObject(name) || isFunction(name)) {\n oldValidationFlag = this.options.noValidation;\n this.options.noValidation = true;\n root = new XMLDocument(this.options).element('TEMP_ROOT');\n root.element(name);\n this.options.noValidation = oldValidationFlag;\n ref1 = root.children;\n for (i = 0, len = ref1.length; i < len; i++) {\n child = ref1[i];\n this.createChildNode(child);\n if (child.type === NodeType.Element) {\n this.up();\n }\n }\n } else {\n this.node(name, attributes, text);\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.attribute = function(name, value) {\n var attName, attValue;\n if (!this.currentNode || this.currentNode.children) {\n throw new Error(\"att() can only be used immediately after an ele() call in callback mode. \" + this.debugInfo(name));\n }\n if (name != null) {\n name = getValue(name);\n }\n if (isObject(name)) {\n for (attName in name) {\n if (!hasProp.call(name, attName)) continue;\n attValue = name[attName];\n this.attribute(attName, attValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n if (this.options.keepNullAttributes && (value == null)) {\n this.currentNode.attribs[name] = new XMLAttribute(this, name, \"\");\n } else if (value != null) {\n this.currentNode.attribs[name] = new XMLAttribute(this, name, value);\n }\n }\n return this;\n };\n\n XMLDocumentCB.prototype.text = function(value) {\n var node;\n this.openCurrent();\n node = new XMLText(this, value);\n this.onData(this.writer.text(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.cdata = function(value) {\n var node;\n this.openCurrent();\n node = new XMLCData(this, value);\n this.onData(this.writer.cdata(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.comment = function(value) {\n var node;\n this.openCurrent();\n node = new XMLComment(this, value);\n this.onData(this.writer.comment(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.raw = function(value) {\n var node;\n this.openCurrent();\n node = new XMLRaw(this, value);\n this.onData(this.writer.raw(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.instruction = function(target, value) {\n var i, insTarget, insValue, len, node;\n this.openCurrent();\n if (target != null) {\n target = getValue(target);\n }\n if (value != null) {\n value = getValue(value);\n }\n if (Array.isArray(target)) {\n for (i = 0, len = target.length; i < len; i++) {\n insTarget = target[i];\n this.instruction(insTarget);\n }\n } else if (isObject(target)) {\n for (insTarget in target) {\n if (!hasProp.call(target, insTarget)) continue;\n insValue = target[insTarget];\n this.instruction(insTarget, insValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n node = new XMLProcessingInstruction(this, target, value);\n this.onData(this.writer.processingInstruction(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n }\n return this;\n };\n\n XMLDocumentCB.prototype.declaration = function(version, encoding, standalone) {\n var node;\n this.openCurrent();\n if (this.documentStarted) {\n throw new Error(\"declaration() must be the first node.\");\n }\n node = new XMLDeclaration(this, version, encoding, standalone);\n this.onData(this.writer.declaration(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.doctype = function(root, pubID, sysID) {\n this.openCurrent();\n if (root == null) {\n throw new Error(\"Missing root node name.\");\n }\n if (this.root) {\n throw new Error(\"dtd() must come before the root node.\");\n }\n this.currentNode = new XMLDocType(this, pubID, sysID);\n this.currentNode.rootNodeName = root;\n this.currentNode.children = false;\n this.currentLevel++;\n this.openTags[this.currentLevel] = this.currentNode;\n return this;\n };\n\n XMLDocumentCB.prototype.dtdElement = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDElement(this, name, value);\n this.onData(this.writer.dtdElement(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n var node;\n this.openCurrent();\n node = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n this.onData(this.writer.dtdAttList(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.entity = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDEntity(this, false, name, value);\n this.onData(this.writer.dtdEntity(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.pEntity = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDEntity(this, true, name, value);\n this.onData(this.writer.dtdEntity(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.notation = function(name, value) {\n var node;\n this.openCurrent();\n node = new XMLDTDNotation(this, name, value);\n this.onData(this.writer.dtdNotation(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);\n return this;\n };\n\n XMLDocumentCB.prototype.up = function() {\n if (this.currentLevel < 0) {\n throw new Error(\"The document node has no parent.\");\n }\n if (this.currentNode) {\n if (this.currentNode.children) {\n this.closeNode(this.currentNode);\n } else {\n this.openNode(this.currentNode);\n }\n this.currentNode = null;\n } else {\n this.closeNode(this.openTags[this.currentLevel]);\n }\n delete this.openTags[this.currentLevel];\n this.currentLevel--;\n return this;\n };\n\n XMLDocumentCB.prototype.end = function() {\n while (this.currentLevel >= 0) {\n this.up();\n }\n return this.onEnd();\n };\n\n XMLDocumentCB.prototype.openCurrent = function() {\n if (this.currentNode) {\n this.currentNode.children = true;\n return this.openNode(this.currentNode);\n }\n };\n\n XMLDocumentCB.prototype.openNode = function(node) {\n var att, chunk, name, ref1;\n if (!node.isOpen) {\n if (!this.root && this.currentLevel === 0 && node.type === NodeType.Element) {\n this.root = node;\n }\n chunk = '';\n if (node.type === NodeType.Element) {\n this.writerOptions.state = WriterState.OpenTag;\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '<' + node.name;\n ref1 = node.attribs;\n for (name in ref1) {\n if (!hasProp.call(ref1, name)) continue;\n att = ref1[name];\n chunk += this.writer.attribute(att, this.writerOptions, this.currentLevel);\n }\n chunk += (node.children ? '>' : '/>') + this.writer.endline(node, this.writerOptions, this.currentLevel);\n this.writerOptions.state = WriterState.InsideTag;\n } else {\n this.writerOptions.state = WriterState.OpenTag;\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '';\n }\n chunk += this.writer.endline(node, this.writerOptions, this.currentLevel);\n }\n this.onData(chunk, this.currentLevel);\n return node.isOpen = true;\n }\n };\n\n XMLDocumentCB.prototype.closeNode = function(node) {\n var chunk;\n if (!node.isClosed) {\n chunk = '';\n this.writerOptions.state = WriterState.CloseTag;\n if (node.type === NodeType.Element) {\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '' + this.writer.endline(node, this.writerOptions, this.currentLevel);\n } else {\n chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + ']>' + this.writer.endline(node, this.writerOptions, this.currentLevel);\n }\n this.writerOptions.state = WriterState.None;\n this.onData(chunk, this.currentLevel);\n return node.isClosed = true;\n }\n };\n\n XMLDocumentCB.prototype.onData = function(chunk, level) {\n this.documentStarted = true;\n return this.onDataCallback(chunk, level + 1);\n };\n\n XMLDocumentCB.prototype.onEnd = function() {\n this.documentCompleted = true;\n return this.onEndCallback();\n };\n\n XMLDocumentCB.prototype.debugInfo = function(name) {\n if (name == null) {\n return \"\";\n } else {\n return \"node: <\" + name + \">\";\n }\n };\n\n XMLDocumentCB.prototype.ele = function() {\n return this.element.apply(this, arguments);\n };\n\n XMLDocumentCB.prototype.nod = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.txt = function(value) {\n return this.text(value);\n };\n\n XMLDocumentCB.prototype.dat = function(value) {\n return this.cdata(value);\n };\n\n XMLDocumentCB.prototype.com = function(value) {\n return this.comment(value);\n };\n\n XMLDocumentCB.prototype.ins = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocumentCB.prototype.dec = function(version, encoding, standalone) {\n return this.declaration(version, encoding, standalone);\n };\n\n XMLDocumentCB.prototype.dtd = function(root, pubID, sysID) {\n return this.doctype(root, pubID, sysID);\n };\n\n XMLDocumentCB.prototype.e = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.n = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLDocumentCB.prototype.t = function(value) {\n return this.text(value);\n };\n\n XMLDocumentCB.prototype.d = function(value) {\n return this.cdata(value);\n };\n\n XMLDocumentCB.prototype.c = function(value) {\n return this.comment(value);\n };\n\n XMLDocumentCB.prototype.r = function(value) {\n return this.raw(value);\n };\n\n XMLDocumentCB.prototype.i = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocumentCB.prototype.att = function() {\n if (this.currentNode && this.currentNode.type === NodeType.DocType) {\n return this.attList.apply(this, arguments);\n } else {\n return this.attribute.apply(this, arguments);\n }\n };\n\n XMLDocumentCB.prototype.a = function() {\n if (this.currentNode && this.currentNode.type === NodeType.DocType) {\n return this.attList.apply(this, arguments);\n } else {\n return this.attribute.apply(this, arguments);\n }\n };\n\n XMLDocumentCB.prototype.ent = function(name, value) {\n return this.entity(name, value);\n };\n\n XMLDocumentCB.prototype.pent = function(name, value) {\n return this.pEntity(name, value);\n };\n\n XMLDocumentCB.prototype.not = function(name, value) {\n return this.notation(name, value);\n };\n\n return XMLDocumentCB;\n\n })();\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var NodeType, WriterState, XMLStreamWriter, XMLWriterBase,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NodeType = require('./NodeType');\n\n XMLWriterBase = require('./XMLWriterBase');\n\n WriterState = require('./WriterState');\n\n module.exports = XMLStreamWriter = (function(superClass) {\n extend(XMLStreamWriter, superClass);\n\n function XMLStreamWriter(stream, options) {\n this.stream = stream;\n XMLStreamWriter.__super__.constructor.call(this, options);\n }\n\n XMLStreamWriter.prototype.endline = function(node, options, level) {\n if (node.isLastRootNode && options.state === WriterState.CloseTag) {\n return '';\n } else {\n return XMLStreamWriter.__super__.endline.call(this, node, options, level);\n }\n };\n\n XMLStreamWriter.prototype.document = function(doc, options) {\n var child, i, j, k, len, len1, ref, ref1, results;\n ref = doc.children;\n for (i = j = 0, len = ref.length; j < len; i = ++j) {\n child = ref[i];\n child.isLastRootNode = i === doc.children.length - 1;\n }\n options = this.filterOptions(options);\n ref1 = doc.children;\n results = [];\n for (k = 0, len1 = ref1.length; k < len1; k++) {\n child = ref1[k];\n results.push(this.writeChildNode(child, options, 0));\n }\n return results;\n };\n\n XMLStreamWriter.prototype.attribute = function(att, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.attribute.call(this, att, options, level));\n };\n\n XMLStreamWriter.prototype.cdata = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.cdata.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.comment = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.comment.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.declaration = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.declaration.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.docType = function(node, options, level) {\n var child, j, len, ref;\n level || (level = 0);\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n this.stream.write(this.indent(node, options, level));\n this.stream.write(' 0) {\n this.stream.write(' [');\n this.stream.write(this.endline(node, options, level));\n options.state = WriterState.InsideTag;\n ref = node.children;\n for (j = 0, len = ref.length; j < len; j++) {\n child = ref[j];\n this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n this.stream.write(']');\n }\n options.state = WriterState.CloseTag;\n this.stream.write(options.spaceBeforeSlash + '>');\n this.stream.write(this.endline(node, options, level));\n options.state = WriterState.None;\n return this.closeNode(node, options, level);\n };\n\n XMLStreamWriter.prototype.element = function(node, options, level) {\n var att, child, childNodeCount, firstChildNode, j, len, name, prettySuppressed, ref, ref1;\n level || (level = 0);\n this.openNode(node, options, level);\n options.state = WriterState.OpenTag;\n this.stream.write(this.indent(node, options, level) + '<' + node.name);\n ref = node.attribs;\n for (name in ref) {\n if (!hasProp.call(ref, name)) continue;\n att = ref[name];\n this.attribute(att, options, level);\n }\n childNodeCount = node.children.length;\n firstChildNode = childNodeCount === 0 ? null : node.children[0];\n if (childNodeCount === 0 || node.children.every(function(e) {\n return (e.type === NodeType.Text || e.type === NodeType.Raw) && e.value === '';\n })) {\n if (options.allowEmpty) {\n this.stream.write('>');\n options.state = WriterState.CloseTag;\n this.stream.write('');\n } else {\n options.state = WriterState.CloseTag;\n this.stream.write(options.spaceBeforeSlash + '/>');\n }\n } else if (options.pretty && childNodeCount === 1 && (firstChildNode.type === NodeType.Text || firstChildNode.type === NodeType.Raw) && (firstChildNode.value != null)) {\n this.stream.write('>');\n options.state = WriterState.InsideTag;\n options.suppressPrettyCount++;\n prettySuppressed = true;\n this.writeChildNode(firstChildNode, options, level + 1);\n options.suppressPrettyCount--;\n prettySuppressed = false;\n options.state = WriterState.CloseTag;\n this.stream.write('');\n } else {\n this.stream.write('>' + this.endline(node, options, level));\n options.state = WriterState.InsideTag;\n ref1 = node.children;\n for (j = 0, len = ref1.length; j < len; j++) {\n child = ref1[j];\n this.writeChildNode(child, options, level + 1);\n }\n options.state = WriterState.CloseTag;\n this.stream.write(this.indent(node, options, level) + '');\n }\n this.stream.write(this.endline(node, options, level));\n options.state = WriterState.None;\n return this.closeNode(node, options, level);\n };\n\n XMLStreamWriter.prototype.processingInstruction = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.processingInstruction.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.raw = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.raw.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.text = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.text.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdAttList = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdAttList.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdElement = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdElement.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdEntity = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdEntity.call(this, node, options, level));\n };\n\n XMLStreamWriter.prototype.dtdNotation = function(node, options, level) {\n return this.stream.write(XMLStreamWriter.__super__.dtdNotation.call(this, node, options, level));\n };\n\n return XMLStreamWriter;\n\n })(XMLWriterBase);\n\n}).call(this);\n","// Generated by CoffeeScript 1.12.7\n(function() {\n \"use strict\";\n var bom, defaults, events, isEmpty, processItem, processors, sax, setImmediate,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n sax = require('sax');\n\n events = require('events');\n\n bom = require('./bom');\n\n processors = require('./processors');\n\n setImmediate = require('timers').setImmediate;\n\n defaults = require('./defaults').defaults;\n\n isEmpty = function(thing) {\n return typeof thing === \"object\" && (thing != null) && Object.keys(thing).length === 0;\n };\n\n processItem = function(processors, item, key) {\n var i, len, process;\n for (i = 0, len = processors.length; i < len; i++) {\n process = processors[i];\n item = process(item, key);\n }\n return item;\n };\n\n exports.Parser = (function(superClass) {\n extend(Parser, superClass);\n\n function Parser(opts) {\n this.parseStringPromise = bind(this.parseStringPromise, this);\n this.parseString = bind(this.parseString, this);\n this.reset = bind(this.reset, this);\n this.assignOrPush = bind(this.assignOrPush, this);\n this.processAsync = bind(this.processAsync, this);\n var key, ref, value;\n if (!(this instanceof exports.Parser)) {\n return new exports.Parser(opts);\n }\n this.options = {};\n ref = defaults[\"0.2\"];\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n this.options[key] = value;\n }\n for (key in opts) {\n if (!hasProp.call(opts, key)) continue;\n value = opts[key];\n this.options[key] = value;\n }\n if (this.options.xmlns) {\n this.options.xmlnskey = this.options.attrkey + \"ns\";\n }\n if (this.options.normalizeTags) {\n if (!this.options.tagNameProcessors) {\n this.options.tagNameProcessors = [];\n }\n this.options.tagNameProcessors.unshift(processors.normalize);\n }\n this.reset();\n }\n\n Parser.prototype.processAsync = function() {\n var chunk, err;\n try {\n if (this.remaining.length <= this.options.chunkSize) {\n chunk = this.remaining;\n this.remaining = '';\n this.saxParser = this.saxParser.write(chunk);\n return this.saxParser.close();\n } else {\n chunk = this.remaining.substr(0, this.options.chunkSize);\n this.remaining = this.remaining.substr(this.options.chunkSize, this.remaining.length);\n this.saxParser = this.saxParser.write(chunk);\n return setImmediate(this.processAsync);\n }\n } catch (error1) {\n err = error1;\n if (!this.saxParser.errThrown) {\n this.saxParser.errThrown = true;\n return this.emit(err);\n }\n }\n };\n\n Parser.prototype.assignOrPush = function(obj, key, newValue) {\n if (!(key in obj)) {\n if (!this.options.explicitArray) {\n return obj[key] = newValue;\n } else {\n return obj[key] = [newValue];\n }\n } else {\n if (!(obj[key] instanceof Array)) {\n obj[key] = [obj[key]];\n }\n return obj[key].push(newValue);\n }\n };\n\n Parser.prototype.reset = function() {\n var attrkey, charkey, ontext, stack;\n this.removeAllListeners();\n this.saxParser = sax.parser(this.options.strict, {\n trim: false,\n normalize: false,\n xmlns: this.options.xmlns\n });\n this.saxParser.errThrown = false;\n this.saxParser.onerror = (function(_this) {\n return function(error) {\n _this.saxParser.resume();\n if (!_this.saxParser.errThrown) {\n _this.saxParser.errThrown = true;\n return _this.emit(\"error\", error);\n }\n };\n })(this);\n this.saxParser.onend = (function(_this) {\n return function() {\n if (!_this.saxParser.ended) {\n _this.saxParser.ended = true;\n return _this.emit(\"end\", _this.resultObject);\n }\n };\n })(this);\n this.saxParser.ended = false;\n this.EXPLICIT_CHARKEY = this.options.explicitCharkey;\n this.resultObject = null;\n stack = [];\n attrkey = this.options.attrkey;\n charkey = this.options.charkey;\n this.saxParser.onopentag = (function(_this) {\n return function(node) {\n var key, newValue, obj, processedKey, ref;\n obj = {};\n obj[charkey] = \"\";\n if (!_this.options.ignoreAttrs) {\n ref = node.attributes;\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n if (!(attrkey in obj) && !_this.options.mergeAttrs) {\n obj[attrkey] = {};\n }\n newValue = _this.options.attrValueProcessors ? processItem(_this.options.attrValueProcessors, node.attributes[key], key) : node.attributes[key];\n processedKey = _this.options.attrNameProcessors ? processItem(_this.options.attrNameProcessors, key) : key;\n if (_this.options.mergeAttrs) {\n _this.assignOrPush(obj, processedKey, newValue);\n } else {\n obj[attrkey][processedKey] = newValue;\n }\n }\n }\n obj[\"#name\"] = _this.options.tagNameProcessors ? processItem(_this.options.tagNameProcessors, node.name) : node.name;\n if (_this.options.xmlns) {\n obj[_this.options.xmlnskey] = {\n uri: node.uri,\n local: node.local\n };\n }\n return stack.push(obj);\n };\n })(this);\n this.saxParser.onclosetag = (function(_this) {\n return function() {\n var cdata, emptyStr, key, node, nodeName, obj, objClone, old, s, xpath;\n obj = stack.pop();\n nodeName = obj[\"#name\"];\n if (!_this.options.explicitChildren || !_this.options.preserveChildrenOrder) {\n delete obj[\"#name\"];\n }\n if (obj.cdata === true) {\n cdata = obj.cdata;\n delete obj.cdata;\n }\n s = stack[stack.length - 1];\n if (obj[charkey].match(/^\\s*$/) && !cdata) {\n emptyStr = obj[charkey];\n delete obj[charkey];\n } else {\n if (_this.options.trim) {\n obj[charkey] = obj[charkey].trim();\n }\n if (_this.options.normalize) {\n obj[charkey] = obj[charkey].replace(/\\s{2,}/g, \" \").trim();\n }\n obj[charkey] = _this.options.valueProcessors ? processItem(_this.options.valueProcessors, obj[charkey], nodeName) : obj[charkey];\n if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {\n obj = obj[charkey];\n }\n }\n if (isEmpty(obj)) {\n obj = _this.options.emptyTag !== '' ? _this.options.emptyTag : emptyStr;\n }\n if (_this.options.validator != null) {\n xpath = \"/\" + ((function() {\n var i, len, results;\n results = [];\n for (i = 0, len = stack.length; i < len; i++) {\n node = stack[i];\n results.push(node[\"#name\"]);\n }\n return results;\n })()).concat(nodeName).join(\"/\");\n (function() {\n var err;\n try {\n return obj = _this.options.validator(xpath, s && s[nodeName], obj);\n } catch (error1) {\n err = error1;\n return _this.emit(\"error\", err);\n }\n })();\n }\n if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') {\n if (!_this.options.preserveChildrenOrder) {\n node = {};\n if (_this.options.attrkey in obj) {\n node[_this.options.attrkey] = obj[_this.options.attrkey];\n delete obj[_this.options.attrkey];\n }\n if (!_this.options.charsAsChildren && _this.options.charkey in obj) {\n node[_this.options.charkey] = obj[_this.options.charkey];\n delete obj[_this.options.charkey];\n }\n if (Object.getOwnPropertyNames(obj).length > 0) {\n node[_this.options.childkey] = obj;\n }\n obj = node;\n } else if (s) {\n s[_this.options.childkey] = s[_this.options.childkey] || [];\n objClone = {};\n for (key in obj) {\n if (!hasProp.call(obj, key)) continue;\n objClone[key] = obj[key];\n }\n s[_this.options.childkey].push(objClone);\n delete obj[\"#name\"];\n if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {\n obj = obj[charkey];\n }\n }\n }\n if (stack.length > 0) {\n return _this.assignOrPush(s, nodeName, obj);\n } else {\n if (_this.options.explicitRoot) {\n old = obj;\n obj = {};\n obj[nodeName] = old;\n }\n _this.resultObject = obj;\n _this.saxParser.ended = true;\n return _this.emit(\"end\", _this.resultObject);\n }\n };\n })(this);\n ontext = (function(_this) {\n return function(text) {\n var charChild, s;\n s = stack[stack.length - 1];\n if (s) {\n s[charkey] += text;\n if (_this.options.explicitChildren && _this.options.preserveChildrenOrder && _this.options.charsAsChildren && (_this.options.includeWhiteChars || text.replace(/\\\\n/g, '').trim() !== '')) {\n s[_this.options.childkey] = s[_this.options.childkey] || [];\n charChild = {\n '#name': '__text__'\n };\n charChild[charkey] = text;\n if (_this.options.normalize) {\n charChild[charkey] = charChild[charkey].replace(/\\s{2,}/g, \" \").trim();\n }\n s[_this.options.childkey].push(charChild);\n }\n return s;\n }\n };\n })(this);\n this.saxParser.ontext = ontext;\n return this.saxParser.oncdata = (function(_this) {\n return function(text) {\n var s;\n s = ontext(text);\n if (s) {\n return s.cdata = true;\n }\n };\n })(this);\n };\n\n Parser.prototype.parseString = function(str, cb) {\n var err;\n if ((cb != null) && typeof cb === \"function\") {\n this.on(\"end\", function(result) {\n this.reset();\n return cb(null, result);\n });\n this.on(\"error\", function(err) {\n this.reset();\n return cb(err);\n });\n }\n try {\n str = str.toString();\n if (str.trim() === '') {\n this.emit(\"end\", null);\n return true;\n }\n str = bom.stripBOM(str);\n if (this.options.async) {\n this.remaining = str;\n setImmediate(this.processAsync);\n return this.saxParser;\n }\n return this.saxParser.write(str).close();\n } catch (error1) {\n err = error1;\n if (!(this.saxParser.errThrown || this.saxParser.ended)) {\n this.emit('error', err);\n return this.saxParser.errThrown = true;\n } else if (this.saxParser.ended) {\n throw err;\n }\n }\n };\n\n Parser.prototype.parseStringPromise = function(str) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.parseString(str, function(err, value) {\n if (err) {\n return reject(err);\n } else {\n return resolve(value);\n }\n });\n };\n })(this));\n };\n\n return Parser;\n\n })(events);\n\n exports.parseString = function(str, a, b) {\n var cb, options, parser;\n if (b != null) {\n if (typeof b === 'function') {\n cb = b;\n }\n if (typeof a === 'object') {\n options = a;\n }\n } else {\n if (typeof a === 'function') {\n cb = a;\n }\n options = {};\n }\n parser = new exports.Parser(options);\n return parser.parseString(str, cb);\n };\n\n exports.parseStringPromise = function(str, a) {\n var options, parser;\n if (typeof a === 'object') {\n options = a;\n }\n parser = new exports.Parser(options);\n return parser.parseStringPromise(str);\n };\n\n}).call(this);\n",";(function (sax) { // wrapper for non-node envs\n sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n 'procInstName', 'procInstBody', 'entity', 'attribName',\n 'attribValue', 'cdata', 'script'\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace'\n ]\n\n function SAXParser (strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F () {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength (parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers (parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers (parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () { end(this) },\n write: write,\n resume: function () { this.error = null; return this },\n close: function () { return this.write(null) },\n flush: function () { flushBuffers(this) }\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream (strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function SAXStream (strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream\n }\n })\n\n SAXStream.prototype.write = function (data) {\n if (typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)) {\n if (!this._decoder) {\n var SD = require('string_decoder').StringDecoder\n this._decoder = new SD('utf8')\n }\n data = this._decoder.write(data)\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace (c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote (c) {\n return c === '\"' || c === '\\''\n }\n\n function isAttribEnd (c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch (regex, c) {\n return regex.test(c)\n }\n\n function notMatch (regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // & and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // \n SCRIPT: S++, //