{"version":3,"sources":["webpack:///./node_modules/dojo/ready.js","webpack:///./node_modules/dojo/_base/lang.js","webpack:///./node_modules/dojo/_base/array.js","webpack:///./node_modules/dojo/_base/kernel.js","webpack:///./node_modules/dojo/on.js","webpack:///./node_modules/dojo/dom.js","webpack:///./node_modules/@syncfusion/ej2-base/src/util.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/hijri-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/observer.js","webpack:///./node_modules/@syncfusion/ej2-base/src/internationalization.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/ajax.js","webpack:///./node_modules/@syncfusion/ej2-base/src/browser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/event-handler.js","webpack:///./node_modules/@syncfusion/ej2-base/src/template.js","webpack:///./node_modules/@syncfusion/ej2-base/src/template-engine.js","webpack:///./node_modules/@syncfusion/ej2-base/src/virtual-dom.js","webpack:///./node_modules/@syncfusion/ej2-base/src/dom.js","webpack:///./node_modules/@syncfusion/ej2-base/src/base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/notify-property-change.js","webpack:///./node_modules/@syncfusion/ej2-base/src/animation.js","webpack:///./node_modules/@syncfusion/ej2-base/src/module-loader.js","webpack:///./node_modules/@syncfusion/ej2-base/src/component.js","webpack:///./node_modules/@syncfusion/ej2-base/src/child-property.js","webpack:///./node_modules/@syncfusion/ej2-base/src/draggable.js","webpack:///./node_modules/@syncfusion/ej2-base/src/droppable.js","webpack:///./node_modules/@syncfusion/ej2-base/src/keyboard.js","webpack:///./node_modules/@syncfusion/ej2-base/src/l10n.js","webpack:///./node_modules/@syncfusion/ej2-base/src/touch.js","webpack:///./node_modules/@syncfusion/ej2-base/src/sanitize-helper.js","webpack:///./node_modules/dojo/has.js","webpack:///./node_modules/dojo/sniff.js","webpack:///./node_modules/dojo/dom-style.js","webpack:///./node_modules/dojo/_base/window.js","webpack:///./node_modules/dojo/dom-class.js","webpack:///./node_modules/dojo/_base/config.js","webpack:///./node_modules/dojo/aspect.js","webpack:///./node_modules/ol/extent.js","webpack:///./node_modules/dojo/domReady.js","webpack:///./node_modules/ol/style/Style.js","webpack:///./node_modules/ol/proj/epsg3857.js","webpack:///./node_modules/ol/proj/epsg4326.js","webpack:///./node_modules/ol/proj/projections.js","webpack:///./node_modules/ol/proj.js","webpack:///./node_modules/ol/geom/GeometryType.js","webpack:///./node_modules/date-fns/_lib/requiredArgs/index.js","webpack:///./node_modules/ol/Feature.js","webpack:///./node_modules/dojo/Deferred.js","webpack:///./node_modules/dojo/Evented.js","webpack:///./node_modules/ol/style/Circle.js","webpack:///./node_modules/ol/layer/BaseVector.js","webpack:///./node_modules/ol/render/canvas/Instruction.js","webpack:///./node_modules/ol/render/VectorContext.js","webpack:///./node_modules/ol/render/canvas/Builder.js","webpack:///./node_modules/ol/render/canvas/ImageBuilder.js","webpack:///./node_modules/ol/render/canvas/LineStringBuilder.js","webpack:///./node_modules/ol/render/canvas/PolygonBuilder.js","webpack:///./node_modules/ol/geom/flat/straightchunk.js","webpack:///./node_modules/ol/render/canvas/TextBuilder.js","webpack:///./node_modules/ol/render/canvas/BuilderGroup.js","webpack:///./node_modules/ol/render/canvas/BuilderType.js","webpack:///./node_modules/ol/geom/flat/textpath.js","webpack:///./node_modules/ol/render/canvas/Executor.js","webpack:///./node_modules/ol/render/canvas/ExecutorGroup.js","webpack:///./node_modules/ol/render/canvas/Immediate.js","webpack:///./node_modules/ol/renderer/vector.js","webpack:///./node_modules/ol/renderer/canvas/VectorLayer.js","webpack:///./node_modules/ol/render/canvas/hitdetect.js","webpack:///./node_modules/ol/layer/Vector.js","webpack:///./node_modules/ol/geom/Polygon.js","webpack:///./node_modules/ol/geom/Point.js","webpack:///./node_modules/date-fns/toDate/index.js","webpack:///./node_modules/ol/featureloader.js","webpack:///./node_modules/ol/source/Vector.js","webpack:///./node_modules/ol/util.js","webpack:///./node_modules/ol/style/IconImage.js","webpack:///./node_modules/ol/style/IconOrigin.js","webpack:///./node_modules/ol/style/Icon.js","webpack:///./node_modules/ol/events/EventType.js","webpack:///./node_modules/dojo/request/xhr.js","webpack:///./node_modules/dojo/json.js","webpack:///./node_modules/ol/style/Fill.js","webpack:///./node_modules/ol/style/Stroke.js","webpack:///./node_modules/ol/obj.js","webpack:///./node_modules/ol/color.js","webpack:///./node_modules/ol/math.js","webpack:///./node_modules/ol/array.js","webpack:///./node_modules/dojo/io-query.js","webpack:///./node_modules/ol/asserts.js","webpack:///./node_modules/lit-html/lib/default-template-processor.js","webpack:///./node_modules/lit-html/lit-html.js","webpack:///./node_modules/ol/events.js","webpack:///./node_modules/ol/Object.js","webpack:///./node_modules/ol/functions.js","webpack:///./node_modules/ol/interaction/Pointer.js","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///./node_modules/ol/dom.js","webpack:///./node_modules/ol/events/condition.js","webpack:///./node_modules/dojo/promise/Promise.js","webpack:///./node_modules/ol/Collection.js","webpack:///./node_modules/ol/events/Event.js","webpack:///./node_modules/ol/style/RegularShape.js","webpack:///./node_modules/dojo/errors/CancelError.js","webpack:///./node_modules/dojo/_base/fx.js","webpack:///./node_modules/lit-html/lib/parts.js","webpack:///./node_modules/ol/style/Text.js","webpack:///./node_modules/ol/coordinate.js","webpack:///./node_modules/dojo/request/util.js","webpack:///./node_modules/ol/proj/Units.js","webpack:///./node_modules/ol/transform.js","webpack:///./node_modules/ol/render/canvas.js","webpack:///./node_modules/dojo/request.js","webpack:///./node_modules/dojo/request/watch.js","webpack:///./node_modules/ol/interaction/Interaction.js","webpack:///./node_modules/lit-html/lib/template.js","webpack:///./node_modules/ol/CollectionEventType.js","webpack:///./node_modules/ol/MapBrowserEventType.js","webpack:///./node_modules/ol/geom/flat/deflate.js","webpack:///./node_modules/ol/geom/SimpleGeometry.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/ol/Observable.js","webpack:///./node_modules/ol/css.js","webpack:///./node_modules/ol/easing.js","webpack:///./node_modules/ol/has.js","webpack:///./node_modules/ol/TileState.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lit-html/lib/dom.js","webpack:///./node_modules/ol/ImageState.js","webpack:///./node_modules/ol/geom/flat/inflate.js","webpack:///./node_modules/ol/geom/GeometryLayout.js","webpack:///./node_modules/ol/geom/flat/transform.js","webpack:///./node_modules/dojo-webpack-plugin/lib/NoModule.js","webpack:///./node_modules/ol/events/Target.js","webpack:///./node_modules/ol/layer/Layer.js","webpack:///./node_modules/ol/source/State.js","webpack:///./node_modules/ol/proj/Projection.js","webpack:///./node_modules/ol/geom/flat/simplify.js","webpack:///./node_modules/ol/size.js","webpack:///./node_modules/ol/structs/RBush.js","webpack:///./node_modules/ol/source/VectorEventType.js","webpack:///./node_modules/ol/tilecoord.js","webpack:///./node_modules/ol/ObjectEventType.js","webpack:///./node_modules/ol/MapEventType.js","webpack:///./node_modules/ol/geom/flat/closest.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lit-html/lib/template-result.js","webpack:///./node_modules/lit-html/lib/template-factory.js","webpack:///./node_modules/ol/reproj/common.js","webpack:///./node_modules/ol/tilegrid/TileGrid.js","webpack:///./node_modules/ol/tilegrid.js","webpack:///./node_modules/dojo/global.js","webpack:///./node_modules/ol/render/EventType.js","webpack:///./node_modules/ol/geom/flat/contains.js","webpack:///./node_modules/ol/geom/LinearRing.js","webpack:///./node_modules/ol/geom/flat/intersectsextent.js","webpack:///./node_modules/ol/MapBrowserEvent.js","webpack:///./node_modules/ol/ViewHint.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lit-html/lib/render.js","webpack:///./node_modules/lit-html/lib/directive.js","webpack:///./node_modules/lit-html/lib/part.js","webpack:///./node_modules/lit-html/lib/template-instance.js","webpack:///./node_modules/ol/colorlike.js","webpack:///./node_modules/dojo/regexp.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/slider/slider.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/common/common.js","webpack:///./node_modules/ol/Disposable.js","webpack:///./node_modules/ol/rotationconstraint.js","webpack:///./node_modules/ol/geom/flat/area.js","webpack:///./node_modules/ol/geom/Geometry.js","webpack:///./node_modules/ol/proj/transforms.js","webpack:///./node_modules/ol/tilegrid/common.js","webpack:///./node_modules/lodash/forIn.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/isArrayLike.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/dojo/errors/create.js","webpack:///./node_modules/dojo/errors/RequestError.js","webpack:///./node_modules/ol/Image.js","webpack:///./node_modules/ol/loadingstrategy.js","webpack:///./node_modules/ol/source/Source.js","webpack:///./node_modules/ol/source/common.js","webpack:///./node_modules/date-fns/isValid/index.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/common/position.js","webpack:///./node_modules/@syncfusion/ej2-data/src/query.js","webpack:///./node_modules/@syncfusion/ej2-data/src/util.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/v-scroll.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/menu-scroll.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/menu-base.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/context-menu/context-menu.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/treeview/treeview.js","webpack:///./node_modules/ol/geom/flat/reverse.js","webpack:///./node_modules/ol/geom/flat/orient.js","webpack:///./node_modules/ol/renderer/Layer.js","webpack:///./node_modules/ol/renderer/canvas/Layer.js","webpack:///./node_modules/ol/AssertionError.js","webpack:///./node_modules/ol/layer/Property.js","webpack:///./node_modules/ol/layer/Base.js","webpack:///./node_modules/ol/interaction/Property.js","webpack:///./node_modules/ol/extent/Relationship.js","webpack:///./node_modules/ol/extent/Corner.js","webpack:///./node_modules/ol/geom/flat/interiorpoint.js","webpack:///./node_modules/ol/sphere.js","webpack:///./node_modules/ol/geom/flat/segments.js","webpack:///./node_modules/ol/render/Event.js","webpack:///./node_modules/ol/style/IconImageCache.js","webpack:///./node_modules/ol/MapEvent.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/isLength.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/set.js","webpack:///./node_modules/dojo/_base/Color.js","webpack:///./node_modules/ol/style/IconAnchorUnits.js","webpack:///./node_modules/ol/ImageBase.js","webpack:///./node_modules/ol/style/Image.js","webpack:///./node_modules/ol/style/TextPlacement.js","webpack:///./node_modules/ol/geom/flat/length.js","webpack:///./node_modules/rbush/rbush.min.js","webpack:///./node_modules/ol/format/FormatType.js","webpack:///./node_modules/ol/TileRange.js","webpack:///./node_modules/ol/reproj.js","webpack:///./node_modules/ol/reproj/Triangulation.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/common/collision.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/input/input.js","webpack:///./node_modules/ol/Tile.js","webpack:///./node_modules/ol/ImageTile.js","webpack:///./node_modules/ol/reproj/Tile.js","webpack:///./node_modules/ol/structs/LRUCache.js","webpack:///./node_modules/ol/TileCache.js","webpack:///./node_modules/ol/source/TileEventType.js","webpack:///./node_modules/ol/source/Tile.js","webpack:///./node_modules/ol/tileurlfunction.js","webpack:///./node_modules/ol/source/UrlTile.js","webpack:///./node_modules/ol/source/TileImage.js","webpack:///./node_modules/ol/source/XYZ.js","webpack:///./node_modules/ol/ViewProperty.js","webpack:///./node_modules/ol/centerconstraint.js","webpack:///./node_modules/ol/resolutionconstraint.js","webpack:///./node_modules/ol/View.js","webpack:///./node_modules/ol/ol.css?bd93","webpack:///./node_modules/lodash/_baseFor.js","webpack:///./node_modules/lodash/_createBaseFor.js","webpack:///./node_modules/lodash/_castFunction.js","webpack:///./node_modules/lodash/identity.js","webpack:///./node_modules/lodash/keysIn.js","webpack:///./node_modules/lodash/_arrayLikeKeys.js","webpack:///./node_modules/lodash/_baseTimes.js","webpack:///./node_modules/lodash/isArguments.js","webpack:///./node_modules/lodash/_baseIsArguments.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isBuffer.js","webpack:///./node_modules/lodash/stubFalse.js","webpack:///./node_modules/lodash/isTypedArray.js","webpack:///./node_modules/lodash/_baseIsTypedArray.js","webpack:///./node_modules/lodash/_baseUnary.js","webpack:///./node_modules/lodash/_nodeUtil.js","webpack:///./node_modules/lodash/_baseKeysIn.js","webpack:///./node_modules/lodash/_isPrototype.js","webpack:///./node_modules/lodash/_nativeKeysIn.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/dojo/promise/instrumentation.js","webpack:///./node_modules/dojo/promise/tracer.js","webpack:///./node_modules/dojo/errors/RequestTimeoutError.js","webpack:///./node_modules/dojo/request/handlers.js","webpack:///./node_modules/lit-html/directives/unsafe-html.js","webpack:///./node_modules/ol/source/OSM.js","webpack:///./node_modules/date-fns/max/index.js","webpack:///./node_modules/dojo/cookie.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/popup/popup.js","webpack:///./node_modules/ol/renderer/Map.js","webpack:///./node_modules/ol/renderer/Composite.js","webpack:///./node_modules/ol/layer/Group.js","webpack:///./node_modules/ol/pointer/EventType.js","webpack:///./node_modules/ol/MapBrowserEventHandler.js","webpack:///./node_modules/ol/MapProperty.js","webpack:///./node_modules/ol/structs/PriorityQueue.js","webpack:///./node_modules/ol/TileQueue.js","webpack:///./node_modules/ol/PluggableMap.js","webpack:///./node_modules/ol/control/Control.js","webpack:///./node_modules/ol/control/Attribution.js","webpack:///./node_modules/ol/control/Rotate.js","webpack:///./node_modules/ol/control/Zoom.js","webpack:///./node_modules/ol/interaction/DoubleClickZoom.js","webpack:///./node_modules/ol/interaction/DragPan.js","webpack:///./node_modules/ol/interaction/DragRotate.js","webpack:///./node_modules/ol/render/Box.js","webpack:///./node_modules/ol/interaction/DragBox.js","webpack:///./node_modules/ol/interaction/DragZoom.js","webpack:///./node_modules/ol/events/KeyCode.js","webpack:///./node_modules/ol/interaction/KeyboardPan.js","webpack:///./node_modules/ol/interaction/KeyboardZoom.js","webpack:///./node_modules/ol/Kinetic.js","webpack:///./node_modules/ol/interaction/MouseWheelZoom.js","webpack:///./node_modules/ol/interaction/PinchRotate.js","webpack:///./node_modules/ol/interaction/PinchZoom.js","webpack:///./node_modules/ol/Map.js","webpack:///./node_modules/ol/control.js","webpack:///./node_modules/ol/interaction.js","webpack:///./node_modules/lit-html/lib/modify-template.js","webpack:///./node_modules/lit-html/lib/shady-render.js","webpack:///./node_modules/lit-element/lib/updating-element.js","webpack:///./node_modules/lit-element/lib/decorators.js","webpack:///./node_modules/lit-element/lib/css-tag.js","webpack:///./node_modules/lit-element/lit-element.js","webpack:///./node_modules/ol/layer/BaseTile.js","webpack:///./node_modules/ol/layer/TileProperty.js","webpack:///./node_modules/ol/renderer/canvas/TileLayer.js","webpack:///./node_modules/ol/layer/Tile.js","webpack:///./node_modules/ol/reproj/Image.js","webpack:///./node_modules/ol/source/Image.js","webpack:///./node_modules/ol/source/ImageArcGISRest.js","webpack:///./node_modules/ol/uri.js","webpack:///./node_modules/ol/layer/BaseImage.js","webpack:///./node_modules/ol/renderer/canvas/ImageLayer.js","webpack:///./node_modules/ol/layer/Image.js","webpack:///./node_modules/@syncfusion/ej2-data/src/adaptors.js","webpack:///./node_modules/@syncfusion/ej2-data/src/manager.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","webpack:///./node_modules/@syncfusion/ej2-lists/src/common/list-base.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js"],"names":["dojo","has","require","domReady","lang","isDomReady","loadQ","onLoadRecursiveGuard","handleDomReady","_postLoad","config","afterOnLoad","onEvent","_Q","length","idle","f","shift","e","info","message","signal","on","_onQEmpty","ready","addOnLoad","priority","context","callback","hitchArgs","_toArray","arguments","hitch","apply","i","splice","add","dca","isArray","parseOnLoad","isAsync","parser","deprecated","toString","_extraNames","split","_extraLen","getProp","parts","create","scopeMap","global","p","opts","Object","prototype","efficient","obj","offset","startWith","concat","Array","slice","call","_pattern","_mixin","dest","source","copyFunc","name","s","empty","mixin","sources","l","setObject","value","pop","undefined","getObject","exists","isString","it","String","isFunction","isObject","isArrayLike","tagName","toLowerCase","isFinite","isAlien","test","extend","ctor","props","_hitchArgs","scope","method","pre","named","args","this","join","delegate","TMP","tmp","slow","arr","x","push","partial","clone","src","nodeType","cloneNode","Date","getTime","RegExp","r","constructor","trim","str","replace","tmpl","map","pattern","_","k","cache","buildFn","fn","Function","everyOrSome","some","every","a","o","result","index","up","delta","lOver","uOver","from","last","array","lastIndexOf","end","u","indexOf","forEach","thisObject","Ctr","out","filter","clearCache","module","item","dijit","dojox","packageMap","id","match","_scopeName","noGlobals","baseUrl","async","locale","rev","version","major","minor","patch","flag","revision","NaN","v","exit","exitcode","quit","bind","console","log","tn","cn","tcn","unshift","_fake","isDebug","experimental","behaviour","extra","removal","warn","moduleName","modulePaths","paths","moduleUrl","url","toUrl","_hasResource","aspect","window","ScriptEngineMajorVersion","ScriptEngineMinorVersion","Event","stopImmediatePropagation","doc","element","EventDelegate","document","createEvent","eventDelegate","target","type","listener","dontFix","parse","addListener","pausable","paused","pause","resume","once","remove","matchesTarget","events","eventName","handles","touchEvents","selector","fixTouchListener","addStopImmediate","addEventListener","capture","captures","adjustedType","removeEventListener","fixAttach","attachEvent","Error","syntheticPreventDefault","cancelable","defaultPrevented","syntheticStopPropagation","bubbles","matches","node","children","query","parentNode","eventType","bubble","select","eventTarget","event","selectorTarget","syntheticDispatch","emit","newEvent","preventDefault","stopPropagation","focusin","focusout","immediatelyStopped","modified","dispatchEvent","ownerDocument","nativeEvent","initEvent","_fixEvent","evt","sender","parentWindow","lastEvent","srcElement","currentTarget","relatedTarget","fromElement","toElement","c","charCode","keyCode","_setKeyChar","IESignal","handle","_dojoIEListeners_","setTimeout","fixListener","top","emitter","listeners","oldListener","after","keyChar","fromCharCode","charOrCode","cancelBubble","_preventDefault","bubbledKeyCode","ctrlKey","returnValue","windowOrientation","orientation","originalEvent","corrected","rotation","scale","TouchEvent","firstChangeTouch","changedTouches","win","kernel","execCommand","dom","byId","_d","te","getElementById","attributes","eles","all","nodeName","contains","isDescendant","ancestor","style","prefixes","cssUserSelect","setSelectable","selectable","nodes","getElementsByTagName","removeAttribute","setAttribute","instances","uid","isBlazorPlatform","createInstance","classFunction","params","arrayParam","getValue","nameSpace","splits","isUndefined","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","merge","destination","temrObj","tempProp","_i","keys_1","copied","first","second","deep","_loop_1","arguments_1","obj1","copy","isArrayChanged","blazorEventExtend","isBlazor","hasOwnProperty","getUniqueID","definedName","compareElementParent","child","parent","throwError","stack","formatUnit","getElement","Node","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","getInstance","component","elem","querySelector","_a","inst","HijriParser","defaultNumberingSystem","defaultNumberSymbols","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","prop","res","propKeys_1","getSymbolRegex","regexStr","getSymbolMatch","ret","matchKeys_1","constructRegex","val","len","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","blazorMode","cur","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","mapper","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","blazorCurrencyData","dateCorrection","getHijriDate","gDate","day","getDate","month","getMonth","year","getFullYear","tMonth","tYear","yPrefix","Math","floor","julilanOffset","julianNumber","b","d","tempMonth","modifiedJulianDate","z","cyc","j","iy","im","tempDay","iln","ii","hYear","hmonth","hDate","date","toGregorian","julianDate","gDay","gMonth","gYear","abbreviateRegexGlobal","weekdayKey","timeSetter","m","h","H","datePartMatcher","DateFormat","dateFormat","culture","option","cldr","_this","dependable","getDependables","calendar","numObject","dateObject","formatOptions","isIslamic","islamicRegex","isServerRendered","compareBlazorDateFormats","resPattern","format","getResultantPattern","skeleton","dateSeperator","getDateSeparator","ConvertDateToWeekFormat","numMapper","parserObject","patternMatch_1","char","weekday","monthIndex","days","designator","eText","era","timeZone","isNaN","intDateFormatter","options","dateParseRegex","dObject","getCurrentDateValue","matches_1","length_1","curval","curvalstr","processNumber","curstr","getDay","curlength","substring","substr","desig","getHours","dec","retu","timezone","getTimezoneOffset","pattern_1","hourFormat","gmtZeroFormat","getTimeZoneValue","gmtFormat","getWeekOfYear","checkTwodigitNumber","latnParseRegex","tVal","curPattern","no","abs","ishour","errorText","NumberFormat","numberFormatter","symbolPattern","fOptions","cOptions","dOptions","numericObject","numberMapper","currencySymbol","getCurrencySymbol","currency","defaultCurrencyCode","altSymbol","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","getSymbolPattern","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","useGrouping","defaultCurrency","nData","pData","replaceBlazorCurrency","getFormatData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","intNumberFormatter","negativeDataRegex","temp","primary","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","text","range","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","toExponential","groupNumbers","nlead","nend","min","max","toPrecision","level1","sep","decimalSymbol","level2","prefix","toFixed","lead","minute","hour","milliseconds","DateParser","dateParser","numOptions","parseOptions","hourOnly","regexString","evalposition","patternMatch","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","numbers","canUpdate","charKey","optional","weekData","weekObject","monthData","hour12","periodValur","tzone","hpattern","parseTimeZoneRegx","pos","parserRegex","parsedDateParts","internalDateParse","dobj","tDate","ystrig","is2DigitYear","parseInt","getDateObject","setMilliseconds","y","setFullYear","tKeys_1","tValue","setDate","pDate","lDate","lastDay","setHours","tzValue","setMinutes","getMinutes","num","retOptions","props_1","curObject","matchString","internalNumberParser","toUpperCase","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","custom","symbolpattern","symbolRegex","infinity","getParsedNumber","isNegative","tempValue","Infinity","exponent","parseFloat","convertMaxFracDigits","decimalSplitValue","Observer","ranArray","boundedEvents","property","handler","cntxt","notExist","isHandlerPresent","off","indexLocation","notify","argument","successHandler","errorHandler","blazorCallback","curObject_1","objs","isTrigger","obj_1","promise","then","data","isJson","JSON","dateReviver","catch","destroy","boundedEvents_1","onIntlChange","rightToLeft","cldrData","defaultCulture","Internationalization","cultureName","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","isExcelFormat","getActualDateTimeFormat","getNumberPattern","isExcel","getActualNumberFormat","getFirstDayOfWeek","getWeekData","getNumericObject","numSystem","symbPattern","getDefaultDateObject","mode","blazorCultureFormats","IntlBase","customRegex","fractionRegex","patternRegex","'","dateConverterMapper","firstDayMapper","currencyFormatRegex","curWithoutNumberRegex","typeMapper","0","1","blazorCulture","iType","basicPatterns","dPattern","tPattern","calendartype","blazorDefaultObject","defaultObject","dateString","convertMapper","tempString","curFormatMapper","patternMatcher","needFraction","cSymbol","fractionOnly","changeCurrencySymbol","groupPattern","fraction","fmatch","sym","currencyCode","customNumberFormat","integerPart","fractionPart","isCurrencyPercent","actual","symbol","part","loc","3","4","5","C","P","N","A","E","formatSplit","dateObj","actualPattern","tLength","timeZonePattern","options_1","minFrac","numrericObject","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","diff","fractionDigitsPattern","integer","minimumIntegerPattern","groupingPattern","cPattern","processSymbol","firstDay","iCulture","aCurrency","rCurrency","iCurrency","pData_1","weeknum","newYear","daynum","nday","headerRegex","Ajax","contentType","emitError","send","eventArgs","cancel","httpRequest","Promise","resolve","reject","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","open","setRequestHeader","beforeSend","onSuccess","failureHandler","reason","onFailure","responseText","dataType","error","readyState","status","statusText","getResponseHeader","responseHeaders","header","headers","exec","getAllResponseHeaders","REGX_MOBILE","REGX_IE","REGX_IE11","REGX_IOS","REGX_IOS7","REGX_ANDROID","REGX_WINDOWS","REGX_VERSION","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","Browser","extractBrowserDetail","browserInfo","clientInfo","userAgent","language","navigator","getEvent","isPointer","isTouch","isDevice","move","isWindows","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","regX","defineProperty","get","uA","set","enumerable","configurable","maxTouchPoints","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","EventHandler","addOrGetEventData","__eventList","bindTo","intDebounce","debounceListener","eventFunction","delay","eventData","later","clearTimeout","debounce","isIE","passive","clearEvents","copyData","trigger","eventProp","eventData_1","event_1","LINES","QUOTES","IF_STMT","ELSEIF_STMT","ELSE_STMT","FOR_STMT","IF_OR_FOR","CALL_FUNCTION","NOT_NUMBER","WORD","DBL_QUOTED_STR","WORDIF","exp","ARR_OBJ","SINGLE_SLASH","DOUBLE_SLASH","WORDFUNC","WINDOWFUNC","compile","template","helper","evalExpResult","varCOunt","localKeys","isClass","singleSpace","cnt","matchStr","rlStr","addNameSpace","strs","HandleSpecialCharArrObj","rlStr_1","mtc","fnStr","fNameSpace","ftArray","SlashReplace","NameSpaceForspecialChar","evalExp","addNS","ignoreList","emptyStrCheck","tempStr","nameSpaceNew","quotes","NameSpaceArrObj","HAS_ROW","HAS_SVG","blazorTemplates","getRandomId","random","templateString","compiler","engineObj","propName","templateId","isStringTemplate","blazorId","className","innerHTML","childNodes","updateBlazorTemplate","templateName","comp","isEmpty","callBack","updateTemplate","resetBlazorTemplate","templateDiv","innerTemplates","getElementsByClassName","tempId","getAttribute","tempElement","appendChild","setTemplateEngine","classObj","getTemplateEngine","Engine","simpleRegex","multipleSplitRegex","idClassSelector","selectMapper","assigner","emptyElements","blockElements","inlineElement","selfClosingElements","fillAttrs","cspElement","nameMapper","startRegex","endRegex","attributeRegex","VirtualDOM","assignParent","childrens","detach","processSelector","curMapper","canPush","existValue","accessElement","ele","selectAll","immediateParent","temp_1","matched","mapper_1","expected","actualValue","ConvertHTMLToJSon","htmlString","isText","results","tagArray","nodeArray","lastVal","getLastValue","iterateText","iterateEndTag","iterateStartTag","tagIndex","rest","isSelfTag","attrs","names","valArr","vObj","length_3","cVal","styleSplit","tagObject","parent_3","parent_4","parent_5","createElement","properties","extended","styles","append","fromElements","prepend","vDomSelector","iSelector","curColl","length_2","parent_2","curSelector","splitSelector_1","dParent","descendent","_b","dSelector_1","sel","descendentChild","_c","dParent_1","iCurSelector","parent_1","curParent","setStyleAttribute","SVG_REG","createElementNS","addClass","elements","classes","classList","getClassList","classList_1","curClass","removeClass","classList_2","classArr","isVisible","visibility","offsetWidth","isEval","docFrag","createDocumentFragment","insertBefore","firstElementChild","executeScript","querySelectorAll","script","head","removeChild","iKey","needsVDOM","querySelectId","charRegex","idList","list","splitId","setId","closest","el","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","isColEName","Base","isRendered","isComplexArraySetter","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","ignoreCollectionWatch","finalUpdate","childChangedProperties","modelObserver","addInstance","setProperties","isDestroyed","muteOnChange","prevDetection","dataBind","serverDataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","updateModel","saveChanges","newValue","oldValue","unbind","Uint16Array","msCrypto","crypto","getRandomValues","secret","combineArray","messageHandler","postMessage","setImmediate","moduleClass","getModuleName","ej2_instances","instance","curKey","defaultValue","getObjectArray","isSetter","isFactory","curType","propertyGetter","propertySetter","oldVal","complexGetter","complexSetter","complexArrayGetter","defCollection","ignore","controlParent","extendFunc","descriptor","complexArrayDefinedCallback","complexArraySetter","oldValueCollection","newValCollection","dFunc","keyString","getParentKey","model_1","getArrayModel","model","ejsAction","isControlParent","arrayFunction","modelObject","Property","propertyDescriptor","addPropertyCollection","Complex","Collection","eventDescriptor","finalContext","getParentContext","curText","NotifyPropertyChanges","classConstructor","propertyType","propList","complexProps","colProps","propNames","complexPropNames","colPropNames","eventNames","propertyName","extendStatics","__extends","setPrototypeOf","__proto__","__","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","_super","Animation","easing","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","animate","getModel","elements_1","element_1","delayAnimation","stop","animation","animationId","frameId","cancelAnimationFrame","applyAnimation","timeStamp","step","timerId","prevTimeStamp","duration","startAnimation","begin","avg","timingFunction","progress","requestAnimationFrame","performance","now","fail","newProp","oldProp","rippleEffect","rippleOptions","done","rippleModel","rippleFlag","isCenterRipple","getRippleModel","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","left","right","bottom","radius","sqrt","diameter","rippleElement","getComputedStyle","getPropertyValue","transform","removeRipple","rippleElements","opacity","lastPageID","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","modules","usedModules","arg","removableModule_1","mod","ChildProperty","parentObj","isParentArray","updateChange","updateTimeOut","changeTime_1","curIndex","restrictServerDataBind","isSaveChanges","action","parentKey","complexKeys","isFinal","valueLength","componentCount","lastHistoryLen","versionBasedStatePersistence","Component","randomId","uniqueID","needsID","isReactHybrid","enableRtl","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","localStorage","getItem","ej2StatePersistenceVersion","mergePersistData","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","setItem","getPersistData","renderReactTemplates","clearTemplate","isHistoryChanged","pageID","location","href","history","hash","charCodeAt","addOnPersist","persistObj","objValue","getActualProperties","stringify","ignoreOnPersist","iterateJsonProperties","newObj","newList","this_1","defaultPosition","isDraggedObject","isDragged","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","borderWidth","padding","diffX","prevLeft","prevTop","dragProcessStarted","tapHoldTimer","externalInitialize","diffY","parentScrollX","parentScrollY","droppables","toggleEvents","isUnWire","enableTapHold","mobileInitialize","initialize","removeTapholdTimer","tapHoldThreshold","getScrollableParent","axis","tempScrollHeight","scrollHeight","tempScrollWidth","scrollWidth","getScrollableValues","curTarget","currentStateTarget","isDragStarted","abort","abortSelectors","intCoord","getCoordinates","initialPosition","clientX","clientY","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isPreventSelect","isChangeTouch","intCordinate","styleProp","margin","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","isReplaceDragEle","currentStateCheck","calculateParentPosition","position","getMousePosition","isDragScroll","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","offsetParent","dragStart","getProperTargetElement","bindEvents","bindDragEvents","dragElement","dragArea","setDragArea","enableTailMode","posValue","getProcessedPositionValue","dragElePosition","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","offsetTop","offsetLeft","width","height","offsetHeight","pageYOffset","pageXOffset","innerHeight","innerWidth","queryPositionInfo","rect","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","hoverObject","triggerOutFunction","dragData","intOver","tLeft","tTop","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","draEleTop","draEleLeft","iTop","iLeft","tempDraEleTop","dragValue","enableAutoScroll","scrollIntoView","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","change","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","pointerEvents","elementFromPoint","oldEle","isdragscroll","dragEle","isOffsetParent","cursorAt","reset","draggable","draggedElement","dropIns","getDropInstance","parentElement","drop","eleInst","eleInst_1","Droppable","mouseOver","wireEvents","area","accept","isDrag","isDropArea","canDrop","droppedElement","display","coord","KeyboardEvents","keyPressHandler","isAltKey","altKey","isCtrlKey","isShiftKey","shiftKey","curkeyCode","which","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","keyAction","unwireEvents","configCache","keyData","Number","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","getConstant","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","point","updateChangeTouches","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","timeOutTapHold","tapHoldEvent","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","startX","startY","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","endPoint","calcPoints","swipeArgs","swipeDirection","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","moved","checkSwipe","modeClear","lastTapTime","eleStyle","overflow","overflowX","overflowY","eTapArgs","pnt","newX","newY","newT","xDist","yDist","interval","removeTags","removeAttrs","attribute","jsEvents","SanitizeHtmlHelper","beforeSanitize","selectors","tags","sanitize","serializeValue","wrapElement","removeXssTags","removeJsEvents","removeXssAttrs","tempEleValue","removeElement","localName","attr","hasAttribute","isBrowser","force","process","versions","v8","Packages","msMaxTouchPoints","pointerEnabled","msPointerEnabled","screen","availWidth","form","clearElement","normalize","toAbsMid","tokens","skip","term","parentRequire","loaded","n","dua","dav","appVersion","tv","compatMode","$1","os","SVGAngle","documentMode","opera","wiiremote","toPixel","dv","defaultView","currentStyle","opener","avalue","rs","runtimeStyle","cs","sLeft","rsLeft","pixelLeft","toPixelValue","astr","af","filters","_getOpacity","Opacity","_setOpacity","ov","zoom","Enabled","td","firstChild","nextSibling","_pixelNamesCache","_pixelRegExp","_toStyleValue","_floatAliases","cssFloat","styleFloat","op","setContext","globalObject","globalDocument","withGlobal","cbArguments","oldGlob","withDoc","documentObject","pwin","oldDoc","oldQ","oldIE","isQuirks","cls","spaces","a1","str2array","fakeNode","classStr","oldLen","addClassStr","removeClassStr","toggle","condition","rawConfig","adviseHas","featureSet","booting","dojoConfig","djConfig","languages","userLanguage","methodName","advice","receiveArguments","dispatcher","existing","executionId","nextId","before","next","around","newResults","previous","advised","advise","boundingExtent","coordinates","extent","createEmpty","extendCoordinate","buffer","opt_extent","closestSquaredDistanceXY","dx","dy","containsCoordinate","coordinate","containsXY","containsExtent","extent1","extent2","coordinateRelationship","minX","minY","maxX","maxY","relationship","UNKNOWN","LEFT","RIGHT","BELOW","ABOVE","INTERSECTING","createOrUpdate","createOrUpdateEmpty","createOrUpdateFromCoordinate","createOrUpdateFromCoordinates","extendCoordinates","createOrUpdateFromFlatCoordinates","flatCoordinates","stride","extendFlatCoordinates","createOrUpdateFromRings","rings","extendRings","equals","approximatelyEquals","tolerance","extendXY","forEachCorner","getBottomLeft","getBottomRight","getTopRight","getTopLeft","getArea","getWidth","getHeight","getCenter","getCorner","corner","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","getEnlargedArea","getForViewAndSize","center","resolution","size","cosRotation","cos","sinRotation","sin","xCos","xSin","yCos","ySin","x0","x1","x2","x3","y0","y1","y2","y3","getIntersectionArea","getIntersection","intersection","intersects","getMargin","getSize","returnOrUpdate","scaleFromCenter","deltaX","deltaY","intersectsSegment","startRel","endRel","endX","endY","slope","applyTransform","transformFn","opt_stops","xs","ys","_boundingExtentXYs","wrapX","projection","projectionExtent","getExtent","canWrapX","worldWidth","recursiveGuard","readyStates","fixReadyState","readyQ","processQ","err","req","tests","detectReady","detachEvent","div","doScroll","frameElement","poller","Style","opt_options","geometry_","geometryFunction_","defaultGeometryFunction","geometry","setGeometry","fill_","fill","image_","image","renderer_","renderer","stroke_","stroke","text_","zIndex_","zIndex","getGeometry","getFill","getImage","getStroke","getText","getZIndex","getRenderer","setRenderer","getGeometryFunction","setFill","setImage","setStroke","setText","feature","setZIndex","toFunction","styleFunction","styles_1","defaultStyles","createDefaultStyle","color","createEditingStyle","white","blue","POLYGON","MULTI_POLYGON","LINE_STRING","MULTI_LINE_STRING","CIRCLE","POINT","MULTI_POINT","GEOMETRY_COLLECTION","HALF_SIZE","PI","EXTENT","WORLD_EXTENT","MAX_SAFE_Y","tan","EPSG3857Projection","code","units","Units","METERS","worldExtent","getPointResolution","Projection","PROJECTIONS","fromEPSG4326","input","opt_output","opt_dimension","dimension","output","toEPSG4326","atan","METERS_PER_UNIT","EPSG4326Projection","opt_axisOrientation","DEGREES","axisOrientation","metersPerUnit","cloneTransform","identityTransform","addProjection","getCode","addProjections","projections","projectionLike","opt_units","pointResolution","getter","getPointResolutionFunc","getUnits","getMetersPerUnit","toEPSG4326_1","getTransformFromProjections","vertices","addEquivalentProjections","addEquivalentTransforms","projections1","projections2","forwardTransform","inverseTransform","projection1","projection2","clearAllProjections","createProjection","defaultCode","createTransformFromCoordinateTransform","coordTransform","addCoordinateTransforms","forward","inverse","sourceProj","destProj","fromLonLat","opt_projection","toLonLat","lonLat","lon","equivalent","equalUnits","sourceProjection","destinationProjection","sourceCode","destinationCode","transformFunc","getTransform","transformExtent","transformWithProjections","userProjection","setUserProjection","clearUserProjection","getUserProjection","useGeographic","toUserCoordinate","fromUserCoordinate","destProjection","toUserExtent","fromUserExtent","createSafeCoordinateTransform","transformed","worldsAway","sourceX","sourceY","sourceExtent","sourceExtentWidth","addCommon","LINEAR_RING","exports","default","required","TypeError","Feature","opt_geometryOrProperties","id_","geometryName_","style_","styleFunction_","geometryChangeKey_","handleGeometryChanged_","hasProperties","getProperties","setGeometryName","getGeometryName","getStyle","setStyle","getId","getStyleFunction","handleGeometryChange_","changed","CHANGE","opt_style","createStyleFunction","CancelError","instrumentation","FULFILLED_ERROR_MESSAGE","freezeObject","freeze","signalWaiting","waiting","rejection","deferred","Deferred","instrumentRejected","signalListener","func","newResult","signalDeferred","makeDeferredSignaler","isCanceled","canceler","fulfilled","canceled","captureStackTrace","isResolved","isRejected","isFulfilled","update","strict","errback","progback","returnedReason","Evented","CircleStyle","points","rotateWithView","displacement","getScale","getRadius","getRotation","getRotateWithView","getDisplacement","setOpacity","getOpacity","setRadius","radius_","BaseVector","BaseVectorLayer","baseOptions","renderBuffer","updateWhileAnimating","updateWhileInteracting","declutter_","declutter","renderBuffer_","updateWhileAnimating_","updateWhileInteracting_","getDeclutter","getFeatures","pixel","getRenderBuffer","getRenderOrder","getUpdateWhileAnimating","getUpdateWhileInteracting","renderDeclutter","frameState","declutterTree","setRenderOrder","renderOrder","Layer","Instruction","BEGIN_GEOMETRY","BEGIN_PATH","CLOSE_PATH","CUSTOM","DRAW_CHARS","DRAW_IMAGE","END_GEOMETRY","FILL","MOVE_TO_LINE_TO","SET_FILL_STYLE","SET_STROKE_STYLE","STROKE","beginPathInstruction","closePathInstruction","VectorContext","drawCustom","drawGeometry","drawCircle","circleGeometry","drawFeature","drawGeometryCollection","geometryCollectionGeometry","drawLineString","lineStringGeometry","drawMultiLineString","multiLineStringGeometry","drawMultiPoint","multiPointGeometry","drawMultiPolygon","multiPolygonGeometry","drawPoint","pointGeometry","drawPolygon","polygonGeometry","drawText","setFillStrokeStyle","fillStyle","strokeStyle","setImageStyle","imageStyle","opt_declutterImageWithText","setTextStyle","textStyle","CanvasBuilder","maxExtent","pixelRatio","maxLineWidth","beginGeometryInstruction1_","beginGeometryInstruction2_","bufferedMaxExtent_","instructions","tmpCoordinate_","hitDetectionInstructions","state","applyPixelRatio","dashArray","dash","appendFlatPointCoordinates","getBufferedMaxExtent","tmpCoord","myEnd","appendFlatLineCoordinates","closed","skipFirst","lastRel","nextRel","lastXCoord","lastYCoord","nextCoord","skipped","Relationship","drawCustomCoordinates_","ends","builderEnds","builderEnd","beginGeometry","builderEndss","getType","getStride","builderBegin","GeometryType","getOrientedFlatCoordinates","endss","getEndss","myEnds","inflate","getFlatCoordinates","getEnds","endGeometry","finish","reverseHitDetectionInstructions","reverse","instruction","fillStyleColor","getColor","strokeStyleColor","strokeStyleLineCap","getLineCap","lineCap","strokeStyleLineDash","getLineDash","lineDash","strokeStyleLineDashOffset","getLineDashOffset","lineDashOffset","strokeStyleLineJoin","getLineJoin","lineJoin","strokeStyleWidth","lineWidth","strokeStyleMiterLimit","getMiterLimit","miterLimit","createFill","fillInstruction","applyStroke","createStroke","updateFillStyle","currentFillStyle","updateStrokeStyle","currentStrokeStyle","currentLineCap","currentLineDash","currentLineDashOffset","currentLineJoin","currentLineWidth","currentMiterLimit","endGeometryInstruction","CanvasImageBuilder","hitDetectionImage_","imagePixelRatio_","anchorX_","anchorY_","height_","opacity_","originX_","originY_","rotateWithView_","rotation_","scale_","width_","declutterImageWithText_","myBegin","ceil","opt_sharedData","anchor","getAnchor","hitDetectionImage","getHitDetectionImage","origin","getOrigin","getPixelRatio","getScaleArray","CanvasLineStringBuilder","drawFlatCoordinates_","moveToLineToInstruction","lastStroke","CanvasPolygonBuilder","drawFlatCoordinatess_","numEnds","setFillStrokeStyles_","circleInstruction","matchingChunk","maxAngle","m12","m23","x12","y12","x23","y23","chunkStart","chunkEnd","chunkM","acos","TEXT_ALIGN","BATCH_CONSTRUCTORS","PolygonBuilder","Builder","ImageBuilder","LineStringBuilder","CanvasTextBuilder","labels_","textOffsetX_","textOffsetY_","textRotateWithView_","textRotation_","textFillState_","fillStates","textStrokeState_","strokeStates","textState_","textStates","textKey_","fillKey_","strokeKey_","fillState","strokeState","textState","geometryType","placement","TextPlacement","LINE","geometryWidths","getFlatMidpoint","getFlatMidpoints","getFlatInteriorPoint","interiorPoints","getFlatInteriorPoints","saveTextStates_","backgroundFill","backgroundStroke","p0","p1","p2","p3","pixelRatio_1","textAlign","flatOffset","flatEnd","oo","drawChars_","strokeKey","textKey","font","textBaseline","fillKey","baseline","strokeWidth","textFillStyle","textStrokeStyle","getFont","textScale","getOverflow","getMaxAngle","getPlacement","getTextAlign","getTextBaseline","getBackgroundFill","getBackgroundStroke","getPadding","textOffsetX","getOffsetX","textOffsetY","getOffsetY","textRotateWithView","textRotation","BuilderGroup","tolerance_","maxExtent_","pixelRatio_","resolution_","buildersByZIndex_","builderInstructions","zKey","builders","builderKey","builderInstruction","getBuilder","builderType","zIndexKey","replays","replay","Constructor","drawTextOnPath","startM","measureAndCacheTextWidth","segmentLength","segmentM","advance","interpolate","beginX","beginY","startOffset","startLength","endM","flat","previousAngle","singleSegment","previousAngle_1","atan2","angle","iStart","charLength","chars","tmpExtent","p4","getDeclutterBox","replayImageOrLabelArgs","declutterBox","rtlRegEx","horizontalTextAlign","align","Executor","overlaps","alignFill_","coordinateCache_","renderedTransform_","pixelCoordinates_","viewRotation_","widths_","createLabel","lines","numLines","widths","lineHeight","renderWidth","contextInstructions","w","label","OffscreenCanvasRenderingContext2D","CanvasRenderingContext2D","setLineDash","leftRight","replayTextBackground_","strokeInstruction","beginPath","moveTo","lineTo","setStrokeStyle_","calculateImageOrLabelDimensions_","sheetWidth","sheetHeight","centerX","centerY","anchorX","anchorY","originX","originY","snapToPixel","fillStroke","boxW","boxH","boxX","boxY","round","drawImageX","drawImageY","drawImageW","drawImageH","canvasTransform","replayImageOrLabel_","contextScale","imageOrLabel","dimensions","box","canvas","strokePadding","origin_1","repeatSize","save","translate","rotate","restore","drawLabelWithPointPlacement_","execute_","opt_featureCallback","opt_hitExtent","opt_declutterTree","pixelCoordinates","dd","prevX","prevY","roundX","roundY","currentGeometry","pendingFill","pendingStroke","lastFillInstruction","lastStrokeInstruction","coordinateCache","viewRotation","viewRotationFromTransform","batchSize","arc","closePath","coords","declutterImageWithText","labelWithAnchor","widthIndex","imageArgs","imageDeclutterBox","collides","insert","measurePixelRatio","pixelRatioScale","cachedWidths","pathLength","textLength","drawChars","cc","i_1","ii_1","execute","executeHitDetection","ORDER","BuilderType","ExecutorGroup","allInstructions","opt_renderBuffer","overlaps_","executorsByZIndex_","hitDetectionContext_","hitDetectionTransform_","createExecutors_","clip","flatClipCoords","getClipCoords","executors","instructionByZindex","hasExecutors","candidates","forEachFeatureAtCoordinate","hitTolerance","declutteredFeatures","contextSize","newContext","hitExtent","clearRect","indexes","circlePixelIndexArrayCache","maxDistanceSq","distances","distanceSq","pixelIndex","getPixelIndexArray","featureCallback","imageData","getImageData","idx","result_1","executor","zs","sort","opt_builderTypes","jj","builderTypes","CanvasImmediateRenderer","opt_squaredTolerance","opt_userTransform","context_","extent_","transform_","squaredTolerance_","userTransform_","contextFillState_","contextStrokeState_","contextTextState_","fillState_","strokeState_","imageAnchorX_","imageAnchorY_","imageHeight_","imageOpacity_","imageOriginX_","imageOriginY_","imageRotateWithView_","imageRotation_","imageScale_","imageWidth_","textScale_","tmpLocalTransform_","drawImages_","localTransform","alpha","globalAlpha","setTransform","drawImage","drawText_","setContextFillState_","setContextStrokeState_","setContextTextState_","strokeText","fillText","moveToLineTo_","close","drawRings_","geometries","getGeometriesArray","simplifyTransformed","flatMidpoint","geometryExtent","flatMidpoints","flatInteriorPoint","flatInteriorPoints","contextFillState","contextStrokeState","contextTextState","imageSize","imageAnchor","imageImage","imageOrigin","imageScale","textFillStyleColor","textStrokeStyleColor","textStrokeStyleLineCap","textStrokeStyleLineDash","textStrokeStyleLineDashOffset","textStrokeStyleLineJoin","textStrokeStyleWidth","textStrokeStyleMiterLimit","textFont","textText","textTextAlign","textTextBaseline","GEOMETRY_RENDERERS","builderGroup","opt_declutterBuilderGroup","getImageState","ImageState","LOADED","imageReplay","textReplay","lineStringReplay","polygonReplay","replayGroup","geometryRenderer","circleReplay","defaultOrder","feature1","feature2","getTolerance","renderFeature","squaredTolerance","opt_transform","loading","imageState","ERROR","unlistenImageChange","IDLE","listenImageChange","simplifiedGeometry","renderGeometry","getGeometries","renderFeatureInternal","CanvasVectorLayerRenderer","vectorLayer","boundHandleStyleImageChange_","handleStyleImageChange_","animatingOrInteracting_","dirty_","hitDetectionImageData_","renderedFeatures_","renderedRevision_","renderedResolution_","renderedExtent_","renderedRotation_","renderedCenter_","renderedProjection_","renderedRenderOrder_","replayGroup_","replayGroupChanged","declutterExecutorGroup","clipping","useContainer","renderWorlds","executorGroup","viewState","vectorSource","getLayer","getSource","viewHints","ViewHint","ANIMATING","INTERACTING","multiWorld","getWrapX","endWorld","world","getRenderTransform","renderFrame","layerState","layerStatesArray","layerIndex","pixelTransform","inversePixelTransform","containerReused","container","clipped","layerExtent","clipUnrotated","postRender","layer","transforms","features","imageSmoothingEnabled","featureCount","indexFactor","featuresByZIndex","featureStyleFunction","originalStyle","setColor","imgSize","getImageSize","canvas_1","imgContext","getContext","img","fillRect","width_1","height_1","Icon","anchorXUnits","IconAnchorUnits","PIXELS","anchorYUnits","byGeometryType","zIndexKeys","geomAndStyle","kk","createHitDetectionImageData","resultFeatures","g","hitDetect","executorGroups","handleFontsChanged","getVisible","renderIfReadyAndVisible","prepareFrame","animating","interacting","frameStateExtent","vectorLayerRevision","getRevision","vectorLayerRenderBuffer","vectorLayerRenderOrder","loadExtents","gutter","loadExtent","declutterBuilderGroup","userTransform","loadFeatures","dirty","userExtent","getFeaturesInExtent","replayGroupInstructions","getOverlaps","VectorLayer","createRenderer","Polygon","opt_layout","opt_ends","ends_","flatInteriorPointRevision_","flatInteriorPoint_","maxDelta_","maxDeltaRevision_","orientedRevision_","orientedFlatCoordinates_","setFlatCoordinates","setCoordinates","appendLinearRing","linearRing","polygon","layout","applyProperties","closestPointXY","closestPoint","minSquaredDistance","opt_right","flatCenter","getInteriorPoint","XYM","getLinearRingCount","getLinearRing","getLinearRings","linearRings","getSimplifiedGeometryInternal","simplifiedFlatCoordinates","simplifiedEnds","XY","intersectsExtent","setLayout","circular","opt_n","opt_sphereRadius","fromExtent","fromCircle","circle","opt_sides","opt_angle","sides","getLayout","arrayLength","makeRegular","startAngle","Point","squaredDistance","computeExtent","_index","argStr","__esModule","withCredentials","success","failure","xhr","FormatType","ARRAY_BUFFER","responseType","TEXT","XML","responseXML","DOMParser","parseFromString","readFeatures","featureProjection","readProjection","loadFeaturesXhr","dataProjection","addFeatures","VectorSourceEvent","opt_feature","opt_features","VectorSource","attributions","READY","loader_","format_","url_","loader","strategy_","strategy","collection","useSpatialIndex","featuresRtree_","RBush","loadedExtentsRtree_","nullGeometryFeatures_","idIndex_","uidIndex_","featureChangeKeys_","featuresCollection_","getArray","addFeaturesInternal","bindFeaturesCollection_","addFeature","addFeatureInternal","featureKey","addToIndex_","setupChangeEvents_","VectorEventType","ADDFEATURE","EventType","handleFeatureChange_","ObjectEventType","PROPERTYCHANGE","valid","extents","newFeatures","geometryFeatures","modifyingCollection","REMOVEFEATURE","CollectionEventType","ADD","REMOVE","removeFeature","clear","opt_fast","featureId","removeFeatureInternal","clearEvent","CLEAR","forEachFeature","forEachFeatureAtCoordinateDirect","forEachFeatureInExtent","intersectsCoordinate","forEachInExtent","forEachFeatureIntersectingExtent","getFeaturesCollection","getAll","getFeaturesAtCoordinate","getInExtent","getClosestFeatureToCoordinate","opt_filter","closestFeature","previousMinSquaredDistance","minDistance","getFeatureById","getFeatureByUid","getFormat","getUrl","sid","removeFromIdIndex_","CHANGEFEATURE","hasFeature","loadedExtentsRtree","extentsToLoad","extentToLoad","object","FEATURESLOADSTART","FEATURESLOADEND","FEATURESLOADERROR","removeLoadedExtent","removed","setLoader","setUrl","Source","abstract","uidCounter_","getUid","ol_uid","VERSION","taintedTestContext","IconImage","crossOrigin","Image","canvas_","color_","unlisten_","imageState_","size_","src_","tainted_","isTainted_","dispatchChangeEvent_","handleImageError_","unlistenImage_","handleImageLoad_","replaceColor_","getSrc","LOADING","ctx","globalCompositeOperation","imgData","putImageData","anchor_","normalizedAnchor_","anchorOrigin_","anchorOrigin","IconOrigin","anchorXUnits_","FRACTION","anchorYUnits_","crossOrigin_","iconImage_","iconImage","offset_","offsetOrigin_","offsetOrigin","origin_","setAnchor","getHitDetectionImageSize","iconImageSize","BLUR","CONTEXTMENU","CLICK","DBLCLICK","DRAGENTER","DRAGOVER","DROP","FOCUS","KEYDOWN","KEYPRESS","LOAD","RESIZE","TOUCHMOVE","WHEEL","RequestError","watch","handlers","util","protocol","FormData","Blob","ArrayBuffer","isValid","isReady","addListeners","nativeResponseTypes","handleResponse","response","handleError","_xhr","handleAs","checkStatus","getHeader","headerName","dfd","uploadProgress","transferType","lengthComputable","total","onDownloadProgress","_at","defaultOptions","sync","returnDeferred","isFormData","parseArgs","deepCreate","hasNoData","remover","_create","user","password","hdr","ActiveXObject","addCommonMethods","hasJSON","escapeString","SyntaxError","eval","replacer","spacer","indent","objtype","toJSON","t","plus","valueOf","nextIndent","newLine","itl","keyStr","Fill","Stroke","lineCap_","lineDash_","lineDashOffset_","lineJoin_","miterLimit_","setLineCap","setLineDashOffset","setLineJoin","setMiterLimit","setWidth","assign","var_sources","getValues","values","HEX_COLOR_RE_","NAMED_COLOR_RE_","asString","fromNamed","rgb","cacheSize","fromString","hasAlpha","fromStringInternal_","asArray","isStringColor","clamp","cosh","log2","LOG2E","squaredSegmentDistance","solveLinearSystem","mat","maxRow","maxEl","absValue","coef","toDegrees","angleInRadians","toRadians","angleInDegrees","modulo","lerp","binarySearch","haystack","needle","opt_comparator","mid","cmp","comparator","numberSafeCompareFunction","low","high","found","linearFindNearest","direction","reverseSubArray","extension","arr1","arr2","len1","isSorted","opt_func","opt_strict","compare","currentVal","backstop","objectToQuery","enc","encodeURIComponent","pairs","queryToObject","decodeURIComponent","qp","assert","assertion","errorCode","strings","eventContext","defaultTemplateProcessor","html","svg","listen","opt_this","opt_once","originalListener_1","eventsKey","listenOnce","unlistenByKey","ObjectEvent","BaseObject","opt_values","values_","getKeys","getChangeEventType","opt_silent","unset","changeEventTypeCache","TRUE","FALSE","VOID","memoizeOne","lastResult","lastArgs","lastThis","called","nextArgs","PointerInteraction","handleDownEvent","handleDragEvent","handleMoveEvent","handleUpEvent","stopDown","handlingDownUpSequence","trackedPointers_","targetPointers","getPointerCount","mapBrowserEvent","handleEvent","stopEvent","updateTrackedPointers_","POINTERDRAG","POINTERUP","handledUp","POINTERDOWN","handled","POINTERMOVE","isPointerDraggingEvent","pointerId","centroid","memo","isOldIE","Boolean","atob","getTarget","styleTarget","HTMLIFrameElement","contentDocument","stylesInDom","getIndexByIdentifier","identifier","modulesToDom","idCountMap","identifiers","base","count","css","media","sourceMap","references","updater","addStyle","insertStyleElement","nonce","textStore","replaceText","replacement","applyToSingletonTag","styleSheet","cssText","cssNode","createTextNode","applyToTag","btoa","unescape","singleton","singletonCounter","styleIndex","removeStyleElement","lastIdentifiers","newLastIdentifiers","createCanvasContext2D","opt_width","opt_height","opt_canvasPool","OffscreenCanvas","outerWidth","outerHeight","replaceNode","newNode","oldNode","replaceChild","removeNode","removeChildren","lastChild","replaceChildren","oldChildren","oldChild","newChild","var_args","conditions","pass","altKeyOnly","metaKey","altShiftKeysOnly","focus","getTargetElement","activeElement","focusWithTabindex","always","click","mouseActionButton","button","never","pointerMove","singleClick","SINGLECLICK","doubleClick","noModifierKeys","platformModifierKeyOnly","shiftKeyOnly","targetNotEditable","mouseOnly","pointerEvent","pointerType","touchOnly","pointerEvt","penOnly","primaryAction","isPrimary","throwAbstract","valueOrPromise","callbackOrErrback","otherwise","trace","traceRejected","CollectionEvent","opt_element","opt_index","opt_array","unique_","unique","array_","assertUnique_","updateLength_","getLength","insertAt","removeAt","prev","setAt","opt_except","BaseEvent","propagationStopped","RegularShape","hitDetectionCanvas_","points_","radius1","radius2_","radius2","angle_","imageSize_","hitDetectionImageSize_","getPoints","getRadius2","getAngle","renderOptions","createRenderOptions","createHitDetectionCanvas_","draw_","angle0","radiusC","drawHitDetectionCanvas_","dojoType","Color","basefx","_Line","curve","repeat","rate","_percent","_startRepeatCount","_getStep","_p","_e","_fire","debugAtAllCosts","play","gotoStart","_t","_delayTimer","_clearTimer","_stopTimer","_active","_paused","de","_play","_startTime","_cycle","gotoPercent","percent","andPlay","gotoEnd","_timer","curr","_startTimer","ctr","timer","runner","run","setInterval","clearInterval","_makeFadeable","ns","_fade","fArgs","anim","animateProperty","fadeIn","fadeOut","_defaultEasing","PropLine","_properties","tempColor","blendColors","toCss","pm","isColor","onEnd","_Animation","isPrimitive","isIterable","Symbol","iterator","AttributeCommitter","_createPart","AttributePart","_getValue","committer","directive","commit","NodePart","__pendingValue","startNode","endNode","ref","__insert","__commitText","__commitTemplateResult","__commitNode","__commitIterable","valueAsString","previousSibling","templateFactory","processor","fragment","_clone","itemParts","itemPart","partIndex","appendIntoPart","insertAfterPart","BooleanAttributePart","PropertyCommitter","super","single","PropertyPart","eventOptionsSupported","EventPart","__boundHandleEvent","newListener","shouldRemoveListener","shouldAddListener","__options","getOptions","Text","font_","scaleArray_","textAlign_","textBaseline_","maxAngle_","placement_","overflow_","offsetX_","offsetY_","backgroundFill_","backgroundStroke_","padding_","setOverflow","setFont","setMaxAngle","setOffsetX","setOffsetY","setPlacement","setRotateWithView","setRotation","setScale","setTextAlign","setTextBaseline","setBackgroundFill","setBackgroundStroke","setPadding","closestOnCircle","closestOnSegment","segment","along","coordinate1","coordinate2","cosAngle","sinAngle","coord1","coord2","squaredDistanceToSegment","getWorldsAway","opt_sourceExtentWidth","ioQuery","isArrayBuffer","isBlob","shouldDeepCopy","Element","isElement","deepCopy","tval","sval","deepCopyArray","clonedArray","svalItem","okHandler","dataHandler","def","responsePromise","dataPromise","provider","methods","skipData","preventCache","stat","FEET","TILE_PIXELS","USFEET","setFromArray","transform1","transform2","makeScale","compose","dx1","dy1","sx","sy","dx2","dy2","makeInverse","det","defaultFont","defaultFillStyle","defaultLineCap","defaultLineDash","defaultLineDashOffset","defaultLineJoin","defaultMiterLimit","defaultStrokeStyle","defaultTextAlign","defaultTextBaseline","defaultPadding","defaultLineWidth","checkedFonts","setSize","measureFont","measureContext","textHeights","registerFont","referenceWidth","referenceFonts","isAvailable","fontStyle","fontWeight","fontFamily","available","referenceFont","measureTextWidth","check","fonts","fontSpec","families","family","weight","measureTextHeight","metrics","measureText","actualBoundingBoxAscent","actualBoundingBoxDescent","measureTextWidths","currentWidth","rotateAtOffset","drawImageOrLabel","labelOrImage","executeLabelInstructions","createTransformStringCanvas","createTransformString","request","RequestTimeoutError","_inFlightIntvl","_inFlight","watchInFlight","_onAction","startTime","timeout","_onInFlight","cancelAll","Interaction","map_","setActive","getActive","ACTIVE","getMap","active","setMap","pan","view","opt_duration","currentCenter","getCenterInternal","animateInternal","getConstrainedCenter","zoomByDelta","opt_anchor","currentZoom","getZoom","newZoom","getConstrainedZoom","newResolution","getResolutionForZoom","getAnimating","cancelAnimations","marker","nodeMarker","markerRegex","boundAttributeSuffix","Template","nodesToRemove","walker","createTreeWalker","content","lastPartIndex","nextNode","hasAttributes","endsWith","stringForPart","lastAttributeNameRegex","attributeLookupName","attributeValue","statics","currentNode","lastIndex","createMarker","suffix","isTemplatePartActive","createComment","POINTEROVER","POINTEROUT","POINTERENTER","POINTERLEAVE","POINTERCANCEL","deflateCoordinate","deflateCoordinates","deflateCoordinatesArray","coordinatess","deflateMultiCoordinatesArray","coordinatesss","opt_endss","SimpleGeometry","getFirstCoordinate","getLastCoordinate","getSimplifiedGeometry","simplifiedGeometryRevision","simplifiedGeometryMaxMinSquaredTolerance","getStrideForLayout","nesting","XYZ","XYZM","getLayoutForStride","opt_sy","transformGeom2D","simpleGeometry","opt_dest","webpackPolyfill","deprecate","Observable","revision_","ol_key","un","unByKey","CLASS_HIDDEN","CLASS_SELECTABLE","CLASS_UNSELECTABLE","CLASS_CONTROL","CLASS_COLLAPSED","fontRegEx","fontRegExMatchIndex","getFontParameters","variant","pow","inAndOut","ua","FIREFOX","MAC","DEVICE_PIXEL_RATIO","devicePixelRatio","WORKER_OFFSCREEN_CANVAS","WorkerGlobalScope","self","IMAGE_DECODE","decode","PASSIVE_EVENT_LISTENERS","EMPTY","isCEPolyfill","customElements","polyfillWrapFlushCallback","reparentNodes","removeNodes","inflateCoordinates","opt_coordinates","inflateCoordinatesArray","opt_coordinatess","inflateMultiCoordinatesArray","opt_coordinatesss","transform2D","Target","opt_target","eventTarget_","pendingRemovals_","dispatching_","listeners_","listenersForType","propagate","dispatching","pendingRemovals","pr","disposeInternal","getListeners","hasListener","opt_type","mapPrecomposeKey_","mapRenderKey_","sourceChangeKey_","SOURCE","handleSourcePropertyChange_","setSource","getLayersArray","getLayerStatesArray","opt_states","states","getLayerState","getSourceState","getState","UNDEFINED","handleSourceChange_","layerRenderer","PRECOMPOSE","arrayLayerState","hasRenderer","inView","visible","minResolution","maxResolution","minZoom","maxZoom","code_","units_","worldExtent_","axisOrientation_","global_","canWrapX_","getPointResolutionFunc_","defaultTileGrid_","metersPerUnit_","getWorldExtent","getAxisOrientation","isGlobal","setGlobal","getDefaultTileGrid","setDefaultTileGrid","tileGrid","setExtent","setWorldExtent","setGetPointResolution","douglasPeucker","simplifiedOffset","markers","maxSquaredDistance","squaredDistance_1","douglasPeuckerArray","snap","quantize","quantizeArray","quantizeMultiArray","simplifiedEndss","hasArea","ratio","opt_size","toSize","opt_maxEntries","rbush_","items_","items","bbox","search","forEach_","rbush","opt_tileCoord","getKeyZXY","getKey","tileCoord","fromKey","withinExtentAndZ","getMinZoom","getMaxZoom","tileRange","getFullTileRange","POSTRENDER","MOVESTART","MOVEEND","assignClosest","offset1","offset2","maxSquaredDelta","squaredDelta","arrayMaxSquaredDelta","multiArrayMaxSquaredDelta","assignClosestPoint","maxDelta","isRing","opt_tmpPoint","tmpPoint","assignClosestArrayPoint","assignClosestMultiArrayPoint","baseGetTag","isObjectLike","policy","trustedTypes","createPolicy","createHTML","commentMarker","TemplateResult","isCommentBinding","commentOpen","attributeMatch","getHTML","SVGTemplateResult","getTemplateElement","svgElement","templateCache","templateCaches","stringsArray","WeakMap","Map","ERROR_THRESHOLD","ENABLE_RASTER_REPROJECTION","tmpTileCoord","TileGrid","zoomFactor","resolutions_","resolutions","origins","zoomFactor_","origins_","tileSizes_","tileSizes","tileSize_","tileSize","fullTileRanges_","tmpSize_","sizes","TileRange","restrictedTileRange","getTileRangeForExtentAndZ","calculateTileRanges_","forEachTileCoord","forEachTileCoordParentTileRange","opt_tileRange","tileCoordExtent","getTileCoordExtent","getResolution","getResolutions","getTileCoordChildTileRange","getTileRangeExtent","getTileSize","getTileCoordForXYAndZ_","getTileCoordCenter","getTileCoordForCoordAndResolution","getTileCoordForXYAndResolution_","reverseIntersectionPolicy","getZForResolution","adjustX","adjustY","xFromOrigin","yFromOrigin","tileCoordX","tileCoordY","getTileCoordForCoordAndZ","getTileCoordResolution","opt_direction","fullTileRanges","getForProjection","createForProjection","extentFromProjection","createForExtent","opt_maxZoom","opt_tileSize","opt_corner","Corner","resolutionsFromExtent","createXYZ","xyzOptions","gridOptions","opt_maxResolution","half","PRERENDER","POSTCOMPOSE","RENDERCOMPLETE","linearRingContainsExtent","linearRingContainsXY","wn","linearRingsContainsXY","linearRingssContainsXY","LinearRing","intersectsLineString","coordinatesExtent","point1","point2","intersectsLineStringArray","intersectsLinearRingArray","intersectsLinearRing","intersectsLinearRingMultiArray","MapBrowserEvent","opt_dragging","opt_frameState","pixel_","coordinate_","dragging","getEventPixel","getCoordinateFromPixel","getRawTag","objectToString","symToStringTag","toStringTag","freeGlobal","freeSelf","root","reIsUint","nativeCreate","getNative","eq","other","isKeyable","__data__","appendInto","directives","isDirective","noChange","nothing","TemplateInstance","__parts","importNode","nodeIndex","handleTextExpression","insertAfterNode","handleAttributeExpressions","adoptNode","upgrade","asColorLike","regexp","except","ch","buildGroupRE","re","nonCapture","group","expression","TicksData","ColorRangeData","LimitData","TooltipData","classNames","Slider","horDir","verDir","transition","rangeBar","transitionOnMaterialTooltip","scaleTransform","customAriaText","initialTooltip","l10n","incrementTitle","decrementTitle","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","initCultureInfo","initCultureFunc","formChecker","formElement","isForm","formResetValue","internationalization","tooltip","ticks","formatString","formatInfo","formatValue","numberOfDecimals","makeRoundNumber","elementVal","decimalPart","precision","decimals","fractionalToInteger","noOfDecimals","tens","initRender","setZindex","setCSSClass","setElementWidth","sliderContainer","oldCSSClass","cssClass","setEnabled","enabled","tooltipElement","showOn","getTheme","sliderTrack","hiddenInput","tabIndex","getThemeInitialization","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","class","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","renderScale","renderTooltip","readonly","isMaterial","isBootstrap","isBootstrap4","isMaterialTooltip","limitBarFirst","limitBarSecond","firstElementClassName","firstHandle","secondHandle","setAriaAttributes","customValues","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setBarColor","tooltipValue","formatContent","setTooltipContent","tooltipObj","observedArgs","addTooltipClass","setAriaAttrValue","setPreviousVal","ariaContent","handle1","handleVal1","handle2","handleVal2","oldCss","newCss","getTooltipTransformProperties","previousTooltipClass","tooltipPlacement","tooltipBeforeOpen","setTooltipTransform","tooltipCollision","tooltipOffsetValue","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","clientHeight","clientWidth","openMaterialTooltip","refreshTooltip","tooltipContentElement","cursor","innerText","closeMaterialTooltip","tooltipTarget","checkTooltipPosition","tooltipClass","collidedPosition","tooltipCollidedPosition","showTipPointer","effect","opensOn","beforeOpen","beforeCollision","beforeClose","tooltipBeforeClose","enableHtmlSanitizer","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","title","buttonFocusOut","repeatButton","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","liElementPosition","orien","ul","role","isAndroid","smallStep","showSmallTicks","largeStep","li","steps","customStep","islargeTick","tickWidth","largestep","startValue","createTick","updateTicksValues","formatTicksValue","decimalPoints","ticksAlignment","liElement","childElementCount","blazortTicksValue","span","tickText","tickElement","triggerEvent","lastElementChild","ticksWrapper","tickElements","scaleAlignment","spanElement","renderingTicks","tickValuePosition","otherChild","firstTickPostion","otherTicksPosition","interopAdaptor","invokeMethodAsync","ariaValueText","isTickFormatted","valuenow","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","minValue","maxValue","limitBar","preHandlePos1","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","removeProperty","updateRangeValue","changeEventArgs","previousValue","isInteracted","rtl","preHandlePos2","values_1","tempStartEnd","reposition","startHandleFixed","endHandleFixed","xyToPosition","top_1","stepValueCalculation","percentStep","remain","addition","positionToValue","handlepos","handleVal","focusedElement","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","xPostion","yPostion","rangeBarDragged","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","keyDown","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","keyUp","hover","formResetHandler","blur","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","setReadOnly","trackPosition","trackClassName","colorRange","startingPosition","endPosition","trackContainer","backgroundColor","border","getTextNode","childnode","createCheckBox","enableRipple","wrapper","rippleSpan","frameSpan","checked","labelSpan","rippleMouseHandler","Disposable","disposed","dispose","disable","none","createSnapToN","theta","opt_isMoving","createSnapToZero","opt_tolerance","twiceArea","linearRingss","tmpTransform","Geometry","extentRevision_","simplifyTransformedInternal","getClosestPoint","opt_closestPoint","simplify","inCoordinates","outCoordinates","pixelExtent","projectedExtent","DEFAULT_MAX_ZOOM","DEFAULT_TILE_SIZE","baseFor","castFunction","keysIn","iteratee","isLength","baseGet","path","baseIsNative","ErrorCtor","ImageWrapper","imageLoadFunction","imageLoadFunction_","listenImage","loadHandler","listening_1","listenerKeys","tile","projection_","attributions_","adaptAttributions","attributionsCollapsible_","attributionsCollapsible","state_","wrapX_","getAttributions","getAttributionsCollapsible","getProjection","getContextOptions","setAttributions","attributionLike","IMAGE_SMOOTHING_DISABLED","msImageSmoothingEnabled","dirtyDate","_index2","_interopRequireDefault","elementRect","popupRect","parentDocument","fixedParent","calculateRelativeBasedPosition","fixedElement","anchorPos","tempAnchor","calculatePosition","currentElement","positionX","positionY","targetValues","posX","posY","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","getBodyScrollTop","getBodyScrollLeft","Query","subQuery","isChild","distincts","queries","fKey","fromTable","lookups","expands","sortedColumns","groupedColumns","lazyLoad","setKey","field","using","dataManager","executeQuery","executeLocal","cloned","subQuerySelector","isCountRequired","tableName","addParams","distinct","fields","expand","tables","where","fieldName","operator","ignoreCase","ignoreAccent","predicate","Predicate","searchKey","fieldNames","comparer","fnOperators","sortBy","isFromGroup","sortByForeignKey","sorts","order","fnSort","filterQueries","sortByDesc","page","pageIndex","pageSize","take","nos","hierarchy","selectorFn","foreignKey","requiresCount","aggregate","q","filterQueryLists","singles","filtered","isComplex","processOperator","predicates","and","combinePredicates","combine","or","fromJson","json","fromJSONData","pred","validate","record","isAnd","toJson","preds","consts","GroupGuid","DataUtil","startsWith","fnAscending","fnDescending","localeCompare","extractFields","jsonArray","newData","aggregates","level","groupDs","isLazyLoad","jsonData","indx","childLevels","grouped","groupedArray","records","_loop_2","this_2","getVal","tempObj","_loop_3","aggs","buildHierarchy","lookup","pKey","grp","fKeyData","getFieldList","copyObj","ds","middle","ignoreDiacritics","diacritics","current","callAdaptorFunction","adaptor","fnName","param1","param2","getAddParams","adp","dm","reqParams","isPlainObject","isCors","getGuid","rand","Uint8Array","isNull","getItemFromComparer","castRequired","requiresCompleteRecord","serverTimezoneOffset","timeZoneHandling","sum","average","truecount","falsecount","operatorSymbols","odBiOperator","odUniOperator","odv4UniOperator","equal","notequal","lessthan","greaterthan","lessthanorequal","greaterthanorequal","notnull","isnull","startswith","endswith","processSymbols","parseJson","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","keys_2","ms","offSet","dateParse","toTimeZone","isUTC","utcFormat","hrs","mins","addSelfOffset","isGuid","jsonReplacer","arrayReplacer","keys_3","jsonDateReplacer","toUTC","utc","unix","toLocalTime","datefn","differenceString","localtimefn","norm","getSeconds","HScroll","browser","browserCheck","ieCheck","uniqueId","touchModule","scroll","touchHandler","swipe","swipeHandler","scrollEle","scrollHandler","createOverlay","createNavIcon","setScrollState","scrollStep","scrollDiv","innerEle_1","ele_1","scrollItems","nav","overlay","navEles","rightOverlayEle","CLS_OVERLAY","clsRight","rightEle","navItem","CLS_NAVRIGHTARROW","leftEle","eventBinding","clsLeft","navEle","navLeftItem","CLS_NAVLEFTARROW","onKeyPress","keyTimer","keyTimeout","eleScrolling","onKeyUp","tapHold","tabHoldHandler","repeatScroll","clickEventHandler","trgt","scrollDis","isContinuous","rootEle","frameScrollRequest","swipeEle","scrollUpdating","scrollVal","scrollValue","arrowDisabling","addDisable","removeDisable","arrowIcon","navLeftEle","navRightEle","leftOverlay","rightOverlay","disEle","VScroll","scrollEventHandler","createOverlayElement","wheelEventHandler","scrollCnt","scrollBar","navs","overlays","downOverlayEle","clsDown","downEle","CLS_NAVDOWNARROW","upEle","clsUp","navElement","navUpItem","CLS_NAVUPARROW","ev","swipeElement","addDisableCls","removeDisableCls","navUpEle","navDownEle","upOverlay","downOverlay","addScrolling","scrollType","containerOffset","contentOffset","maxHeight","destroyScroll","scrollObj","skipEle","menu","FOCUSED","HEADER","SELECTED","ITEM","HIDE","POPUP","FieldSettings","MenuItem","MenuAnimationSettings","MenuBase","navIdx","isTapHold","tempItem","isMenu","ejInst","clonedElement","refEle","nextElementSibling","ejInstance","nodeValue","renderItems","menuTemplateId","getWrapper","hamburgerMode","createHeaderContainer","createJsonFromElement","removeChildElement","createItems","setBlankIconStyle","enableScrolling","targetElems","menuHeaderClickHandler","isIos","cmenuHandler","targetElement","delegateMoverHandler","moverHandler","delegateMouseDownHandler","mouseDownHandler","delegateClickHandler","clickHandler","wireKeyboardEvent","rippleFn","downarrow","uparrow","enter","leftarrow","rightarrow","escape","home","keyBoardHandler","closeMenu","actionName","actionNeeded","removeLIStateByClass","upDownKeyHandler","rightEnterKeyHandler","leftEscKeyHandler","cul","getUlByNavIdx","defaultIdx","fliIdx","fli","getLIByClass","getIdx","cli","isValidLI","navIdxLen","popup","keyType","openMenu","isCMenu","canOpen","ulIndex","isIterated","isMenuVisible","ul_1","item_1","items_1","sli","beforeCloseArgs","popups","getPopups","isClose","liElem_1","getLI","parentItem","getMenuItemModel","isFocused","observedCloseArgs","popupEle","closeArgs","popupObj","trgtliId","closedLi","trgtLi","popupId","isOpen","minHeight","unWireKeyboardEvent","hide","toggleAnimation","updateReactTemplate","trgtpopUp","submenus","afterCloseMenu","showItemOnClick","getIndex","isMenusClosed","sli_1","cliIdx","item_2","removeStateWrapper","isReact","portals","getFields","separator","iconCss","lItem","elemId","uList","getField","ICONS","hdata","hli","popupWrapper","isNestedOrVertical","generatePopup","calculateIndentSize","triggerBeforeOpen","itemFromBlazorTemplate","liStyle","liIndent","textIndent","blankIconElem","menuIconElem","menuIconElemStyle","blankIconIndent","actionOnScroll","relateTo","collision","X","Y","targetType","triggerOpen","spanElem","tempTitle","spanTitle","spanIcon","openHamburgerMenu","closeHamburgerMenu","observedHamburgerCloseArgs","callFit","collide","menuType","observedOpenArgs","checkScrollOffset","refreshPosition","offWidth","animationOptions","animationSettings","show","setPosition","eventArgs_1","blankIconList","iconLi","icon","cssProp","iconCssProps","iconSize","fontSize","offsetRight","offsetEle","toggleVisiblity","newTop","xCollision","itemsObj_1","showIcon","hasField","listBaseOptions","itemNavigable","itemCreating","htmlAttributes","tabindex","itemCreated","templateID","createList","liTrgt","hdrWrapper","isDifferentElem","isClosed","cliWrapper","isInstLI","cliWrapperId","setLISelected","showSubMenu","culIdx","cIdx","isHeader","classname","getItemIndex","isUniqueId","newItem","getItems","setItems","newItems","skipHdr","updateItemsByNavIdx","updateItem","unWireEvents","ul_2","ul_3","getChangedItemIndex","insertAfter","removeItem","popStr","uls","targetSelctor","keyboardModule","isMenuOpen","pUlHeight","pElement","nIndex","isCallBack","enableItems","enable","skipItem","disabled","showItems","showHideItems","hideItems","ishide","removeItems","iitems","insertItems","isAfter","menuitem","removeAttributes","itemId","parentId","ContextMenu","ROOT","COLLAPSIBLE","EXPANDABLE","LISTITEM","LISTTEXT","PARENTITEM","HOVER","PROCESS","ICON","TEXTWRAP","SIBLING","DROPNEXT","FULLROW","CHECK","CHECKBOXWRAP","treeAriaAttr","treeRole","itemRole","listRole","itemText","wrapperRole","FieldsSettings","ActionSettings","NodeAnimationSettings","TreeView","isRefreshed","preventExpand","checkedElement","disableNode","validArr","expandChildren","isFieldChange","changeDataSource","isBlazorExpandedNodes","mouseDownStatus","TreeView_1","checkActionNodes","parentNodeCheck","dragStartAction","isAnimate","f2","moveDown","moveLeft","moveRight","moveUp","ctrlDown","ctrlUp","ctrlEnter","ctrlHome","ctrlEnd","ctrlA","shiftDown","shiftUp","shiftEnter","shiftHome","shiftEnd","csDown","csUp","csEnter","csHome","csEnd","space","listBaseOption","expandCollapse","expandIconClass","ariaAttributes","expandIconPosition","beforeNodeCreate","fullRowNavigable","updateListProp","aniObj","treeList","isLoaded","isInitalExpand","setTouchClass","selectedNodes","checkedNodes","expandedNodes","initialRender","blazorInitialRender","setDataBinding","setDisabledMode","setExpandOnType","setRipple","wireEditingEvents","allowEditing","setDragAndDrop","allowDragAndDrop","setCssClass","setEnableRtl","setFullRow","fullRowSelect","nodeTemplateFn","templateComplier","nodeTemplate","iconModel","rippleIconFn","isEnabled","setMultiSelect","firstUl","dataSource","isOffline","offline","treeData","isNumberTypeId","setRootData","finalize","getQuery","rootData","columns","col","addSorting","sortOrder","parentID","getDataType","groupedData","getGroupedData","rootItems","getChildNodes","adaptorName","sortedData","getSortedData","ulElement","rootNodes","loadOnDemand","renderChildNodes","finalizeNode","updateTemplateForBlazor","parentCheckData","updateCheckedStateFromDS","autoCheck","showCheckBox","updateParentCheckState","resultData","isChecked","resultId","hasChildren","id_1","childData","childId","checkState","getCheckedNodeDetails","checkIndeterminateState","checkedData","checkedId","fieldId","childItems","updateChildCheckState","checkNodes","parentEle","changeState","preElement","childCheckedElement","indeterminate","nodeId","nodeCheck","checkedParent","checkedChild","subChildItems","checkboxEle","touchClass","checkValue","addCheck","frame","frameMouseHandler","createFullRow","allowMultiSelection","addActionClass","selected","expanded","textEle","dataId","renderNodeTemplate","nodeData","actionValue","groupBy","cusQuery","getDataSource","grpItem","itemObj","iNodes","sNodes","selectNode","cNodes","disableExpandAttr","eNodes","updateList","updateCheckedProp","ensureIndeterminate","ensureParentCheckState","ensureChildCheckState","indeterminateNodes","checkBoxEle","parentUL","currentParent","childElement","checkBoxes","parentCheck","childCheck","checkedState","currentLoadData","isNodeChecked","doCheckBoxAction","doCheck","updateFieldChecked","liEle","setValidCheckedNode","dynamicCheckState","updateField","checkBox","validateCheckNode","checkbox","currLi","getNodeData","updateIndeterminate","subChild","updateChildIndeterminate","indeterminateData","getTreeData","subId","childElementCheck","innerChild","isPrevent","isAdd","nodeCheckAction","getCheckEvent","ariaState","removeCheck","ensureStateChange","updateServerProperties","firstNode","updateIdAttr","hasPid","doExpandAction","eUids","expandGivenNodes","eNode","expandAction","afterFinalized","proxy","expandCallback","eUid","doSelectionAction","setCheckedNodes","updateInstance","sUids","sNode","selectGivenNodes","preventContextMenu","rippleIcons","removeHover","setFocusElement","checkWrapper","checkElement","triggerClickEvent","collapseNode","toggleSelect","nodeCheckedEvent","isCheck","expandNode","hideSpinner","start_1","end_1","proxy_1","liEle_1","setHeight","activeElement_1","HTMLElement","animateHeight","expandedNode","addExpand","expandArgs","getExpandEvent","colArgs","nodeCollapseAction","collapse","collapsedNode","removeExpand","toRemove","currentHeight","parentLi","expandChild","eicon","showSpinner","parents","mapper_2","getChildFields","loadChild","setSelectionForChildNodes","ensureCheckNode","disableTreeNodes","renderSubChild","getNodeObject","doDisableAction","nodeLevel","dataLevel","getChildMapper","isRoot","getChildGroup","objlen","cIcons","curLi","multiSelect","isActive","unselectNode","getSelectEvent","nodeSelectAction","removeSelectAll","startIndex","liList","endIndex","currNode","addSelect","nodeUnselectAction","removeSelect","focusedNode","getFocusedNode","selectedLI","selectedLI_1","expandOnType","expandOn","expandHandler","expandCollapseAction","nodeExpandAction","liEles","icon_1","keyActionHandler","inpEle","oldText","checkNode","openNode","shiftKeySelect","navigateNode","navigateRootNode","createTextbox","navigateToFocus","isUp","focusNode","getScrollParent","parentPos","isVisibleInViewport","txtWrap","isTowards","getNextNode","getPrevNode","checkWrap","nodeCheckingAction","allCheckNode","parentIndex","getChildItems","childStateChange","childIsCheck","newCheck","validateCheck","childId_1","toBeOpened","focusNextNode","setFocus","isBackwards","rootNode","getRootNode","getEndNode","selectedItem","fNode","prevNode","preNode","focusIn","focusOut","onMouseOver","currentLi","setHover","onMouseLeave","hoveredNode","fromDS","pNode","pid","nodeFields","textContent","tempArr","destroyTemplate","reRenderNodes","oldClass","newClass","editingHandler","oldInpEle","updateOldText","innerEle","getEditEvent","outerHTML","innerHtml","inputObj","createInput","inputEle","setSelectionRange","wireInputEvents","editData","editFields","inputFocusOut","newText","txtEle","crudOperation","appendNewText","isInput","updateText","getChildNodeObject","toBind","initializeDrag","destroyDrag","virtualEle","dragObj","dragRoot","dragWrap","dragLi","isSameNode","cloneEle","DRAGITEM","nLen","cNode","listItem","getDragEvent","draggedNode","dragCancelAction","targetTouches","dragAction","removeVirtualEle","dropTarget","dropRoot","isHelperElement","preventTargetExpand","dragParent","draggedParentNode","dropAction","dropObj","over","dropWrap","dropLi","virEle","renderVirtualEle","dropIndicator","isBlazorDrop","dragInstance","appendNode","dropAsChildNode","dropAsSiblingNode","dropUl","dragParentUl","dragParentLi","moveData","updateElement","updateAriaLevel","dropParentUl","expandParent","childLi","dropParentLi","removedData","updateChildField","refId","getDataPos","currPid","removeChildNodes","addChildData","dropIcon","generateIcon","generateUL","dragIcon","updateChildAriaLevel","sibEle","dragNode","dropData","draggedNodeData","newParent","dragLiParent","targetParent","indexValue","iconClass","dropTar","clonedNode","droppedNode","droppedNodeData","dropIndex","dropLevel","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeData","updateSelectedNodes","updateExpandedNodes","newId","currId","doGivenAction","toExpand","addGivenNodes","isRemote","dropEle","updateMapper","createListItemFromJson","refNode","navigateUrl","updated","childObj","validNodes","validID","checkValidId","doEnableAction","strNodes","filterNestedChild","updatePersistProp","removeField","sleNodes","slelen","enodes","nodelen","cnodes","getMapperProp","clientUpdateInitial","proxy_2","touchEditObj","isDoubleTapped","wireClickEvent","proxy_3","touchClickObj","wireExpandOnEvent","proxy_4","touchExpandObj","secondTap","firstTap","uncheckAll","setIndeterminate","checkAll","setChildCheckState","isRefreshChild","childValue","updateChildPosition","currID","dynamicState","operation","prevent","crud","matchedArr","changes","addedRecords","deletedRecords","changedRecords","nodesID","deleteSuccess","dmFailure","editSucess","addSuccess","updatePreviousText","collapseAll","onLoaded","addNodes","beginEdit","disableNodes","enableNodes","ensureVisible","expandAll","getAllCheckedNodes","getDisabledNodes","getNode","moveNodes","sourceNodes","refreshNode","updatedChildValue","newNodeData","parentData","refreshData","newliEle","newTextEle","newIcon","fullEle","updateNode","linearRingIsClockwise","edge","linearRingsAreOriented","isClockwise","linearRingssAreOriented","orientLinearRings","orientLinearRingsArray","LayerRenderer","boundHandleImageChange_","handleImageChange_","layer_","loadedTileCallback","tiles","createLoadedTileFinder","forEachLoadedTile","getDataAtPixel","loadImage","CanvasLayerRenderer","renderedResolution","tempTransform","layerClassName","getClassName","HTMLCanvasElement","transformOrigin","halfWidth","halfHeight","topLeft","topRight","bottomRight","bottomLeft","coordinateToPixelTransform","inverted","dispatchRenderEvent_","renderPixel","renderCoordinate","pixelToCoordinateTransform","newCanvas","AssertionError","OPACITY","VISIBLE","Z_INDEX","MAX_RESOLUTION","MIN_RESOLUTION","MAX_ZOOM","MIN_ZOOM","BaseLayer","className_","opt_managed","managed","sourceState","getMaxResolution","getMinResolution","setMaxResolution","setMinResolution","setMaxZoom","setMinZoom","setVisible","zindex","getInteriorPointOfArray","flatCenters","flatCentersOffset","intersections","rr","pointX","maxSegmentLength","getInteriorPointsOfMultiArray","getDistance","c1","c2","opt_radius","lat1","lat2","deltaLatBy2","deltaLonBy2","bearing","lon1","dByR","lat","asin","RenderEvent","opt_inversePixelTransform","opt_context","IconImageCache","cache_","cacheSize_","maxCacheSize_","canExpireCache","expire","maxCacheSize","shared","MapEvent","tag","isKey","stringToPath","isSymbol","baseSet","ArrayUtil","transparentColor","_set","fromArray","toRgb","toRgba","toHex","includeAlpha","fromRgb","colorFromRgb","fromHex","colorFromHex","bits","mask","colorFromArray","colorFromString","ImageBase","ImageStyle","displacement_","lineStringLength","_maxEntries","_minEntries","leaf","_all","toBBox","_build","_splitRoot","_insert","_condense","compareMinX","compareMinY","fromJSON","_chooseSubtree","_split","_adjustParentBBoxes","_chooseSplitAxis","_chooseSplitIndex","M","_allDistMargin","containsTileRange","brokenDiagonalRendering_","drawTestTriangle","u1","v1","u2","v2","verifyBrokenDiagonalRendering","calculateSourceResolution","targetProj","targetCenter","targetResolution","sourceCenter","sourceResolution","targetMetersPerUnit","sourceMetersPerUnit","compensationFactor","calculateSourceExtentResolution","targetExtent","triangulation","opt_renderEdges","opt_contextOptions","pixelRound","sourceDataExtent","canvasWidthInUnits","canvasHeightInUnits","stitchContext","stitchScale","xPos","yPos","srcWidth","srcHeight","targetTopLeft","getTriangles","triangle","u0","v0","sourceNumericalShiftX","sourceNumericalShiftY","augmentedMatrix","affineCoefs","isBrokenDiagonalRendering","ud","vd","Triangulation","maxSourceExtent","errorThreshold","opt_destinationResolution","sourceProj_","targetProj_","transformInvCache","transformInv","transformInv_","maxSourceExtent_","errorThresholdSquared_","triangles_","wrapsXInSource_","canWrapXInSource_","sourceWorldWidth_","targetWorldWidth_","destinationTopLeft","destinationTopRight","destinationBottomRight","destinationBottomLeft","sourceTopLeft","sourceTopRight","sourceBottomRight","sourceBottomLeft","maxSubdivision","addQuad_","leftBound_1","newTriangle","addTriangle_","aSrc","bSrc","cSrc","dSrc","sourceQuadExtent","sourceCoverageX","sourceWorldWidth","wrapsX","needsSubdivision","targetQuadExtent","isNotFinite","centerSrc","bc","bcSrc","da","daSrc","ab","abSrc","cd","cdSrc","calculateSourceExtent","targetContainer","fit","viewPortElement","elemData","containerWidth","getTargetContainerWidth","getViewPortWidth","containerLeft","ContainerLeft","containerRight","ContainerRight","overLeft","overRight","containerHeight","getTargetContainerHeight","getViewPortHeight","containerTop","ContainerTop","containerBottom","ContainerBottom","overTop","overBottom","isCollide","elemOffset","yAxis","topCollideCheck","xAxis","leftCollideCheck","topSide","rightSide","leftSide","bottomSide","flip","tEdge","TL","TR","BL","BR","eEdge","oldVisibility","updateElementData","leftFlip","deepCheck","collideSide","topFlip","setPopup","eStatus","getTargetContainerLeft","getTargetContainerTop","windowWidth","Input","CLASSNAMES","floatType","bindInitialEvent","checkInputValue","floatLabelType","getParentNode","inputElement","inputValue","_focusFn","_blurFn","wireFloatingEvents","createFloatingInput","inputObject","internalCreateElement","floatLinelement","floatLabelElement","makeElement","createInputContainer","customTag","placeholder","encodePlaceHolder","inputWrap","updateLabelState","checkFloatLabelType","updateIconState","wireClearBtnEvents","readOnly","validateLabel","tagClass","spanEle","setPlaceholder","setReadonly","isReadonly","isRtl","isEnable","inputContainer","disabledAttrs","considerWrapper","addAttributes","setClearButton","isClear","initial","clearButton","insertAdjacentElement","createClearButton","_internalRipple","isRipple","argsButton","buttons","_onMouseDownRipple","_onMouseUpRipple","createIconEle","prependSpan","innerWrapper","appendSpan","validateInputType","containerElement","showClearButton","setPropertyValue","removeFloating","addFloating","iconEle","isPrependIcon","floatLine","floatText","addIcon","icons","internalCreate","result_2","Tile","interimTile","hifi","transition_","transitionStarts_","release","getInterimTile","TileState","refreshInterimChain","getTileCoord","getAlpha","time","inTransition","endTransition","ImageTile","tileLoadFunction","tileLoadFunction_","naturalWidth","naturalHeight","ReprojTile","sourceTileGrid","targetTileGrid","wrappedTileCoord","getTileFunction","opt_errorThreshold","renderEdges_","contextOptions_","gutter_","sourceTileGrid_","targetTileGrid_","wrappedTileCoord_","sourceTiles_","sourcesListenerKeys_","sourceZ_","maxTargetExtent","limitedTargetExtent","sourceProjExtent","errorThresholdInPixels","triangulation_","sourceRange","srcX","srcY","reproject_","leftToLoad_1","sourceListenKey_1","unlistenSources_","LRUCache","opt_highWaterMark","highWaterMark","count_","entries_","oldest_","newest_","getCount","containsKey","entry","value_","key_","newer","older","peekLast","peekLastKey","peekFirstKey","TileCache","expireCache","usedTiles","pruneExceptNewestZ","TileSource","opaque_","opaque","tilePixelRatio_","tilePixelRatio","tileCache","tmpSize","tileOptions","zDirection","getTileCacheForProjection","tileCoordKey","covered","getGutterForProjection","getOpaque","getTile","getTileGrid","getTileGridForProjection","getTilePixelRatio","getTilePixelSize","getTileCoordForTileUrlFunction","updateCacheSize","tileCount","useTile","TileSourceEvent","createFromTemplate","zRegEx","xRegEx","yRegEx","dashYRegEx","createFromTemplates","templates","tileUrlFunctions","createFromTileUrlFunctions","UrlTile","generateTileUrlFunction_","tileUrlFunction","urls","setUrls","tileLoadingKeys_","getTileLoadFunction","getTileUrlFunction","getPrototypeOf","getUrls","handleTileChange","tileState","TileEventType","setTileLoadFunction","setTileUrlFunction","startCharCode","stopCharCode","stop_1","expandUrl","defaultTileLoadFunction","imageTile","TileImage","tileClass","tileCacheForProjection","tileGridForProjection","reprojectionErrorThreshold_","reprojectionErrorThreshold","imageSmoothing","renderReprojectionEdges_","usedTileCache","getGutter","thisProj","projKey","createTile_","urlTileCoord","tileUrl","newTile","getTileInternal","setRenderReprojectionEdges","setTileGridForProjection","tilegrid","proj","createExtent","onlyCenter","smooth","opt_centerShift","viewWidth","viewHeight","shiftX","shiftY","getViewportClampedResolution","viewportSize","showFullExtent","xResolution","yResolution","getSmoothClampedResolution","createMinMaxResolution","opt_smooth","opt_maxExtent","opt_showFullExtent","cappedMaxRes","View","hints_","animations_","updateAnimationKey_","viewportSize_","targetCenter_","targetResolution_","targetRotation_","cancelAnchor_","applyOptions_","resolutionConstraintInfo","createResolutionConstraint","maxResolution_","minResolution_","minZoom_","centerConstraint","createCenterConstraint","resolutionConstraint","constraint","rotationConstraint","createRotationConstraint","constraints_","setCenterInternal","setResolution","setZoom","options_","getUpdatedOptions_","newOptions","isDef","resolveConstraints","animationCount","animationCallback","series","complete","sourceRotation","targetRotation","isNoopAnimation","setHint","updateAnimations_","getInteracting","more","seriesComplete","elapsed","getViewportSize_","constrainedResolution","calculateCenterZoom","applyTargetState_","constrainedRotation","calculateCenterRotate","currentResolution","opt_rotation","setViewportSize","ViewProperty","getConstraints","getConstrainResolution","constrainResolution","getHints","opt_hints","calculateExtent","calculateExtentInternal","getZoomForResolution","setConstrainResolution","getResolutionForExtent","getResolutionForExtentInternal","getResolutionForValueFunction","opt_power","power","getConstrainedResolution","getValueForResolutionFunction","logPower","getViewportSizeMinusPadding_","reducedSize","calculateCenterOn","nearest","baseLevel","geometryOrExtent","fitInternal","minRotX","minRotY","maxRotX","maxRotY","rotX","rotY","centerRotX","centerRotY","centerOn","centerOnInternal","calculateCenterShift","centerShift","shiftedCenter","adjustCenter","deltaCoordinates","setCenter","adjustCenterInternal","adjustResolution","adjustResolutionInternal","isMoving","adjustZoom","adjustRotation","adjustRotationInternal","newRotation","hint","opt_doNotCancelAnims","opt_forceMoving","newCenter","opt_resolutionDirection","beginInteraction","endInteraction","endInteractionInternal","opt_targetResolution","targetZoom","targetRes","smoothExtentConstraint","constrainOnlyCenter","smoothResolutionConstraint","projExtent","capped","createSnapToResolutions","defaultMaxResolution","defaultMinResolution","defaultMaxZoom","opt_minResolution","minZoomLevel","cappedZoomLevel","zoomLevel","createSnapToPower","enableRotation","constrainRotation","api","locals","createBaseFor","fromRight","keysFunc","iterable","identity","arrayLikeKeys","baseKeysIn","baseTimes","isArguments","isBuffer","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","baseIsArguments","objectProto","propertyIsEnumerable","nativeObjectToString","isOwn","unmasked","stubFalse","freeExports","freeModule","Buffer","baseIsTypedArray","baseUnary","nodeUtil","nodeIsTypedArray","typedArrayTags","freeProcess","types","binding","isPrototype","nativeKeysIn","isProto","Ctor","castPath","toKey","reIsDeepProp","reIsPlainProp","memoizeCapped","rePropName","reEscapeChar","string","number","quote","subString","memoize","MapCache","resolver","memoized","Cache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","entries","Hash","ListCache","hashClear","hashDelete","hashGet","hashHas","hashSet","isMasked","toSource","reIsHostCtor","funcProto","funcToString","reIsNative","coreJsData","maskSrcKey","IE_PROTO","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","assocIndexOf","getMapData","baseToString","arrayMap","symbolProto","symbolToString","customizer","nested","baseAssignValue","tracer","arrayUtil","logError","reportRejections","errors","activeTimeout","unhandledWait","trackUnhandledRejections","timestamp","logRejected","reportBefore","usage","evented","emitAsync","handleXML","lastParser","dp","createDocument","loadXML","handleNativeResponse","register","previousValues","unsafeHTML","ATTRIBUTION","OSM","dirtyDatesArray","datesArray","currentDate","cookie","expires","setTime","toUTCString","updatedCookie","propValue","isSupported","cookieEnabled","PositionData","Popup","setContent","wireScrollEvents","unwireScrollEvents","resolveCollision","checkCollision","orientationOnChange","getRelateToElement","scrollRefresh","relateToElement","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","scrollParents","isElementVisible","checkGetBoundingClientRect","windowView","scrollY","scrollX","elementView","checkFixedParent","parentDisplay","getAnchorPosition","anchorEle","eleRect","anchorRect","callFlip","param","viewPortRect","horz","vert","relativeElement","zIndexElement","getZindexPartial","showAnimation","hideAnimation","parentStyle","overflowRegex","parentZindex","childrenZindex","isEqualNode","siblingsZindex","finalValue","currentZindexValue","expireIconCache","MapRenderer","dispatchRenderEvent","calculateMatrices2D","checkWrapped","thisArg","layerFilter","thisArg2","translatedCoordinate","offsets","layerStates","numLayers","callback_1","forEachLayerAtPixel","hasFeatureAtCoordinate","scheduleExpireIconCache","postRenderFunctions","Composite","CompositeMapRenderer","fontChangeListenerKey_","redrawText","element_","getViewport","children_","renderedVisible_","declutterLayers","previousElement","LayerGroup","layers","layersListenerKeys_","listenerKeys_","handleLayersChanged_","setLayers","handleLayerChange_","getLayers","handleLayersAdd_","handleLayersRemove_","layersArray","collectionEvent","ownLayerState","MapBrowserEventHandler","moveTolerance","clickTimeoutId_","emulateClicks_","dragging_","dragListenerKeys_","moveTolerance_","down_","activePointers_","trackedTouches_","pointerdownListenerKey_","handlePointerDown_","originalPointerMoveEvent_","relayedListenerKey_","relayEvent_","boundHandleTouchMove_","handleTouchMove_","emulateClick_","MapBrowserEventType","updateActivePointers_","handlePointerUp_","isMouseActionButton_","getOwnerDocument","handlePointerMove_","isMoving_","PriorityQueue","priorityFunction","keyFunction","priorityFunction_","keyFunction_","elements_","priorities_","queuedElements_","dequeue","priorities","siftUp_","elementKey","enqueue","siftDown_","getLeftChildIndex_","getRightChildIndex_","getParentIndex_","heapify_","isKeyQueued","isQueued","lIndex","rIndex","smallerChildIndex","reprioritize","TileQueue","tilePriorityFunction","tileChangeCallback","boundHandleTileChange_","tileChangeCallback_","tilesLoading_","tilesLoadingKeys_","added","getTilesLoading","tileKey","loadMoreTiles","maxTotalLoading","maxNewLoads","newLoads","PluggableMap","optionsInternal","keyboardEventTarget","controls","interactions","layerGroup","MapProperty","createOptionsInternal","boundHandleBrowserEvent_","handleBrowserEvent","maxTilesLoading_","maxTilesLoading","postRenderTimeoutHandle_","animationDelayKey_","animationDelay_","renderFrame_","coordinateToPixelTransform_","pixelToCoordinateTransform_","frameIndex_","frameState_","previousExtent_","viewPropertyListenerKey_","viewChangeListenerKey_","layerGroupPropertyListenerKeys_","viewport_","overlayContainer_","overlayContainerStopEvent_","mapBrowserEventHandler_","keyboardEventTarget_","keyHandlerKeys_","overlays_","overlayIdIndex_","handleResize_","postRenderFunctions_","tileQueue_","getTilePriority","handleTileChange_","handleLayerGroupChanged_","handleViewChanged_","handleSizeChanged_","handleTargetChanged_","control","interaction","addOverlayInternal_","addControl","getControls","addInteraction","getInteractions","addLayer","getLayerGroup","addOverlay","getOverlays","setTarget","forEachFeatureAtPixel","getCoordinateFromPixelInternal","getFeaturesAtPixel","hasFeatureAtPixel","getEventCoordinate","getEventCoordinateInternal","viewportPosition","eventPosition","getView","getOverlayById","getLoading","getPixelFromCoordinate","viewCoordinate","getPixelFromCoordinateInternal","getOverlayContainer","getOverlayContainerStopEvent","tileSourceKey","tileCenter","tileResolution","wantedTiles","browserEvent","handleMapBrowserEvent","interactionsArray","handlePostRender","tileQueue","hints","lowOnFrameBudget","updateSize","handleViewPropertyChanged_","updateViewportSize_","renderSync","removeControl","removeInteraction","removeLayer","removeOverlay","previousFrameState","MapEventType","setLayerGroup","setView","computedStyle","Control","target_","mapEvent","Attribution","ulElement_","collapsed_","collapsed","userCollapsed_","overrideCollapsible_","collapsible","collapsible_","tipLabel","expandClassName","collapseLabel","collapseClassName","collapseLabel_","label_","activeLabel","handleClick_","cssClasses","renderedAttributions_","collectSourceAttributions_","visibleAttributions","attributionGetter","setCollapsible","updateElement_","handleToggle_","getCollapsible","setCollapsed","getCollapsed","Rotate","compassClassName","callResetNorth_","resetNorth","duration_","autoHide_","autoHide","resetNorth_","Zoom","zoomInClassName","zoomOutClassName","zoomInLabel","zoomOutLabel","zoomInTipLabel","zoomOutTipLabel","inElement","outElement","zoomByDelta_","DoubleClickZoom","delta_","DragPan","kinetic_","kinetic","lastCentroid","lastPointersCount_","panning_","condition_","onFocusOnly","noKinetic_","centerpx","Pointer","DragRotate","lastAngle_","RenderBox","startPixel_","endPixel_","render_","startPixel","endPixel","setPixels","createOrUpdateGeometry","DragBoxEventType","DragBoxEvent","DragBox","box_","minArea_","minArea","onBoxEnd","boxEndCondition_","boxEndCondition","defaultBoxEndCondition","completeBox","DragZoom","out_","mapExtent","boxPixelExtent","factor","KeyboardPan","defaultCondition_","pixelDelta_","pixelDelta","keyEvent","KeyCode","mapUnitsDelta","KeyboardZoom","Kinetic","decay","minVelocity","decay_","minVelocity_","delay_","initialVelocity_","firstIndex","Mode","MouseWheelZoom","totalDelta_","lastDelta_","timeout_","useAnchor_","useAnchor","constrainResolution_","lastAnchor_","startTime_","timeoutId_","mode_","trackpadEventGap_","trackpadTimeoutId_","deltaPerZoom_","endInteraction_","wheelEvent","deltaMode","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_LINE","timeLeft","handleWheelZoom_","setMouseAnchor","PinchRotate","pointerOptions","rotating_","rotationDelta_","threshold_","threshold","rotationDelta","touch0","touch1","PinchZoom","lastDistance_","lastScaleDelta_","scaleDelta","zoomOptions","rotateOptions","attribution","attributionOptions","altShiftDragRotate","doubleClickZoom","zoomDelta","zoomDuration","dragPan","pinchRotate","pinchZoom","keyboard","mouseWheelZoom","shiftDragZoom","removeNodesFromTemplate","nextActiveIndexInTemplateParts","removeCount","nodesToRemoveInTemplate","currentRemovingNode","countNodes","getTemplateCacheKey","scopeName","compatibleShadyCSSVersion","ShadyCSS","prepareTemplateDom","shadyTemplateFactory","cacheKey","TEMPLATE_TYPES","shadyRenderSet","Set","prepareTemplateStyles","renderedDOM","templateElement","condensedStyle","removeStylesFromLitTemplates","insertCount","walkerIndex","insertNodeIntoTemplate","nativeShadow","removes","JSCompiler_renameProperty","_obj","defaultConverter","notEqual","old","defaultPropertyDeclaration","converter","reflect","hasChanged","UpdatingElement","_classProperties","_attributeNameForProperty","_attributeToPropertyMap","superProperties","_ensureClassProperties","noAccessor","getPropertyDescriptor","requestUpdateInternal","superCtor","propKeys","getOwnPropertySymbols","createProperty","fromAttribute","toAttribute","_updateState","_updatePromise","_enableUpdatingResolver","_changedProperties","_saveInstanceProperties","_v","_instanceProperties","enableUpdating","_attributeToProperty","attrValue","_propertyValueToAttribute","getPropertyOptions","_propertyValueFromAttribute","shouldRequestUpdate","_valueHasChanged","_reflectingProperties","_hasRequestedUpdate","_enqueueUpdate","updateComplete","performUpdate","_applyInstanceProperties","shouldUpdate","_markUpdated","firstUpdated","_getUpdateComplete","_propertyToAttribute","customElement","classOrDescriptor","clazz","define","legacyCustomElement","kind","standardCustomElement","standardProperty","initializer","protoOrDescriptor","proto","legacyProperty","internalProperty","renderRoot","legacyQuery","standardQuery","queryAsync","queryAll","eventOptions","legacyEventOptions","standardEventOptions","ElementProto","legacyMatches","queryAssignedNodes","slotName","flatten","slotSelector","slot","assignedNodes","ELEMENT_NODE","supportsAdoptingStyleSheets","Document","CSSStyleSheet","constructionToken","CSSResult","safeToken","_styleSheet","replaceSync","unsafeCSS","reduce","acc","textFromCSSResult","renderNotImplemented","userStyles","getStyles","addStyles","reduceRight","_styles","cssRules","rule","_getUniqueStyles","createRenderRoot","ShadowRoot","adoptStyles","attachShadow","adoptedStyleSheets","_needsShimAdoptedStyleSheets","ScopingShim","prepareAdoptedCssText","connectedCallback","hasUpdated","styleElement","templateResult","hasRendered","needsScoping","host","firstScopeRender","renderContainer","delete","BaseTile","BaseTileLayer","preload","useInterimTilesOnError","setPreload","setUseInterimTilesOnError","getPreload","TileProperty","getUseInterimTilesOnError","CanvasTileLayerRenderer","tileLayer","extentChanged","renderedPixelRatio","renderedProjection","renderedRevision","renderedTiles","newTiles_","tmpTileRange_","isDrawableTile","viewResolution","viewCenter","tileSource","sourceRevision","canvasExtent","tilesToDrawByZ","findLoadedTiles","tmpTileRange","childTileRange","canvasScale","clips","clipZs","currentClip","currentZ","currentTilePixelSize","currentScale","dx_1","dy_1","originTileCoord","originTileExtent","tileGutter","tilesToDraw","floatX","nextX","floatY","nextY","drawTileImage","updateUsedTiles","manageTilePyramid","scheduleExpireCache","getTileImage","tileAlpha","alphaChanged","postRenderFunction","opt_tileCallback","TileLayer","ReprojImage","getImageFunction","sourceImage","sourcePixelRatio","targetExtent_","sourceImage_","sourcePixelRatio_","sourceListenerKey_","unlistenSource_","ImageSourceEventType","ImageSourceEvent","defaultImageLoadFunction","ImageSource","reprojectedImage_","reprojectedRevision_","findNearestResolution","getImageInternal","handleImageChange","ImageArcGISRest","hidpi_","hidpi","params_","ratio_","getParams","imageResolution","getRequestUrl_","getImageLoadFunction","srid","modifiedUrl","uri","keyParams","qs","appendParams","setImageLoadFunction","updateParams","BaseImage","BaseImageLayer","CanvasImageLayerRenderer","imageLayer","imageSource","renderedExtent","imageExtent","imagePixelRatio","size_1","dw","dh","previousAlpha","ImageLayer","Adaptor","requestType","pvt","processResponse","JsonAdaptor","processQuery","countFlg","keyCount","agg","lazyLoadData","lazyLoadGroup","getAggregate","onDemandGroupInfo","onPage","formGroupResult","onWhere","aggQuery","batchRequest","deletedRecordsLen","onAggregates","onSearch","onSortBy","fnCompare","onGroup","onRange","onTake","onSkip","onSelect","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","groups","searches","getFiltersFrom","getRequestQuery","pvtData","convertToQueryString","request1","selects","handleTimeZone","requests","isExpand","formRemoteGroupedData","getAggregateResult","childLevel","getGroupedRecords","hasRecords","childGroupedRecords","original","batchUrl","crudUrl","removeUrl","deleted","table","insertUrl","keyColumn","updateUrl","predicats","aggregateData","isServerGrouping","groupQuery","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","contentId","batchContent","changeSetContent","batchChangeSetContentType","updateType","onPredicate","requiresCast","guid","onComplexPredicate","onEachWhere","onEachSearch","onEachSort","onCount","settings","overrideMimeType","rootUrl","dataUrls","resourceTableName","dataCopy","emptyAndBatch","processBatchResponse","versionCheck","requiresFormat","keys_4","localTimeReplacer","convertObj","localTime","compareAndRemove","initialGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","generateBodyContent","org","jsonObj","exVal","changeGuid","ODataV4Adaptor","isDate","onExpand","exArr","ex","onDistinct","distinctFields","dataUrl","WebApiAdaptor","Count","Items","WebMethodAdaptor","RemoteSaveAdaptor","updateKey","AjaxAdaptor","getData","addRecord","updateRecord","deleteRecord","batchUpdate","CacheAdaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","forDel","currentTime","requestTime","generateKey","currentFilter","newQuery","cachedItems","crossDomain","DataManager","timeTillExpiration","cachingPageSize","enableCaching","jsonp","defaultQuery","isDataAvailable","setDefaultQuery","deffered","isAjaxAdaptor","makeRequest","getDeferedArgs","nextTick","extendRequest","fnSuccess","fnFail","processData","isSelector","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","subUrl","childReq","subData","ajaxReqOption","virtualRecords","ajax_1","pResult","cResult","doAjaxRequest","deff_1","ajax_2","successFunc","ajaxDeffered","failureFunc","ajaxFunc","ajax_3","Tooltip","isBlazorTooltip","contentTargetValue","contentEvent","contentAnimation","formatPosition","isServerRender","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","tooltipEle","tipClass","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","renderPopup","elePos","mouseTrail","getTooltipPosition","openPopupHandler","closePopupHandler","offsetPos","calculateTooltipOffset","collisionFlipFit","needTemplateReposition","findTarget","tooltipEventArgs","tooltipEleWidth","tooltipEleHeight","arrowEle","tipWidth","tipHeight","tipAdjust","tipHeightAdjust","tipWidthAdjust","updateTipPosition","selEle","removeList","adjustArrow","leftValue","topValue","tipPosExclude","tooltipWidth","tooltipHeight","arrowInnerELe","tipPointerPosition","POINTER_ADJUST","renderContent","tooltipContent","enableHtmlParse","templateFunction","isBlazorTemplate","renderCloseIcon","isSticky","tipClose","onStickyClose","addDescribedBy","describedby","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","closeDelay","targetList_1","ctrlId","target_1","restoreElement","showTooltip","showTimer","hideTimer","beforeRenderArgs","beforeRenderCallback","isBlazorTooltipRendered","isHidden","TOOLTIP_WRAP","beforeRenderBlazor","afterRenderBlazor","contentUpdated","ctrlObj","maxWidth","beforeOpenCallback","openAnimation_1","openDelay","onMouseMove","wireMouseEvents","viewContainerRef","horizontal","vertical","affectedPos","checkCollideTarget","newpos","eleOffset","arrowleft","windowCollision","isTooltipOpen","tooltipHide","blazorHide","popupHide","closeAnimation","unwireMouseEvents","tooltipHover","tooltipMouseOut","onMouseOut","enteredElement","checkForTooltipElement","tooltipElementMouseOut","eventPageX","eventPageY","touches","colpos","touchEnd","triggerList_1","getTriggerList","wireFocusEvents","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","ListBase","hasChild","iconWrapper","anchorWrap","navigable","getFieldValues","dataItem","fieldData","dataField","defaultMappedFields","urlAttributes","imageAttributes","imageUrl","defaultAriaAttributes","groupItemRole","defaultListBaseOptions","listClass","itemClass","processSubChild","groupTemplate","headerTemplate","createListFromArray","isSingleLevel","componentInstance","createListItemFromArray","curOpt","getModuleClass","generateId","generateSingleLevelLI","generateLI","checkboxElement","anchorElement","typeofData","curItem","imageElemnt","iconElement","createListFromJson","elementArray","typeof","elementAttributes","getAllAttributes","subDS","subLi","innerElements","grpLI","elementID","anchorTag","isFullNavigation","anchorWrapper","uID","removeBlazorID","compiledString","groupTemplateID","innerDiv","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","groupDataSource","curFields","newtext","_id","curEle","jsonAr","childs","hasChildNodes","attributes_1","renderContentTemplate","liCollection","currentID","renderGroupTemplate","headerItems","category","headerItems_1","headerData","globalTimeOut","spinTemplate","spinCSSClass","createSpinner","spinnerContainer","spinnerInnerContainer","wrap","inner_wrap","create_spinner_container","theme","defaultSize","calculateRadius","setTheme","labelEle","replaceContent","innerContainer","random_generator","timeOut","create_material_element","mat_calculate_attributes","createMaterialSpinner","create_fabric_element","fb_calculate_attributes","createFabricSpinner","svgBoot","bootCircle","CLS_SPINCIRCLE","defaultRadius","create_bootstrap_element","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","createHighContrastSpinner","createBootstrap4Spinner","charAt","innerCon","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","svgMaterial","matCirclePath","animateMaterial","spinnerInfo","globalInfo","previousId","strokeSize","getStrokeSize","mat_animation","getDashOffset","updatePath","createCircle","easeAnimation","drawArc","timecount","innerConainer","trgClass","defineCircle","endArc","defineArc","radians","showHideSpinner","isHide","spinnerWrap","inner","svgEle","globalVariables","timeOutVar","startMatAnimate","increment","formSeries","boot_animate","animateBootstrap"],"mappings":"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,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,OACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,OACP,IAAO,IACP,IAAO,IACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,IACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,MACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,OACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,OACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,MACP,IAAO,IACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,OACP,IAAO,OACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,OACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,MACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,KACP,IAAO,OACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,MACP,IAAO,OACP,IAAO,OACP,IAAO,MACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,QC3UX,SAAW7C,GAEP,IAAI8C,EAAiB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvJ,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MA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CAAC,WACZ,UACA,cACA,aACA,YACA,SACA,UACA,SACA,UACA,eACA,iBACA,UACA,WACA,eACA,iBACA,gBACA,SACA,YACA,mBACA,WACA,UACA,gBACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,UACA,UACA,UACA,eACA,cACA,cACA,UACA,YACA,YACA,aACA,UACA,SACA,eACA,mBACA,cACA,YACA,cACA,cACA,aACA,cACA,YACA,eACA,YACA,SACA,WACA,aACA,aACA,UACA,SACA,YACA,aACA,aACA,eACA,qBACA,SACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,YACA,eACA,SACA,WACA,iBACA,YACA,eACA,eACA,eACA,UACA,oBAEA,GAAoC,WACpC,SAASC,KA2ET,OAzEAA,EAAmBC,eAAiB,WAChC,MAAO,CACHC,UAAW,CACPC,KAAMP,GACN52C,WAAY62C,MAKxBG,EAAmBI,SAAW,SAAUvmD,GACpC,IAAIiF,EAAOxD,KAAK2kD,iBAEhB,OADa3kD,KAAK+kD,eAAevhD,EAAMjF,IAG3CmmD,EAAmBK,eAAiB,SAAUvhD,EAAMjF,GAChDyB,KAAKukD,YAAc/gD,EAAKohD,UAAUl3C,WAClC1N,KAAKskD,WAAa9gD,EAAKohD,UAAUC,KACjC7kD,KAAKglD,YAAcn+C,SAAS23B,cAAc,OAC1Cx+B,KAAKglD,YAAYrrB,UAAYp7B,EAC7ByB,KAAKilD,gBACLjlD,KAAKklD,iBACLllD,KAAKmlD,iBACL,IAAIC,EAAeplD,KAAKglD,YAAYrrB,UAEpC,OADA35B,KAAKqlD,gBACED,GAEXV,EAAmBW,cAAgB,WAG/B,IADA,IAAI/2C,EAAQtO,KAAKglD,YAAY77C,SACpBmN,EAAI,EAAGA,EAAIhI,EAAM7T,OAAQ6b,IAE9B,IADA,IAAIkuC,EAAYl2C,EAAMgI,GAAG5I,WAChB7R,EAAI,EAAGA,EAAI2oD,EAAU/pD,OAAQoB,IAClCmE,KAAKglD,YAAY77C,SAASmN,GAAG9H,gBAAgBg2C,EAAU3oD,GAAGypD,YAItEZ,EAAmBO,cAAgB,WAC/B,IAAI5kB,EAAWrgC,KAAKglD,YAAYzjB,iBAAiBvhC,KAAKskD,WAAWrkD,KAAK,MAClEogC,EAAS5lC,OAAS,GAClB4lC,EAASp9B,SAAQ,SAAU0D,GACvB,GAAOA,OAOnB+9C,EAAmBQ,eAAiB,WAChC,IAAI7kB,EAAWrgC,KAAKglD,YAAYzjB,iBAAiB,IAAMkjB,GAASxkD,KAAK,OAAS,KAC1EogC,EAAS5lC,OAAS,GAClB4lC,EAASp9B,SAAQ,SAAU0D,GACvB89C,GAASxhD,SAAQ,SAAUsiD,GACnB5+C,EAAQ6+C,aAAaD,IACrB5+C,EAAQ6H,gBAAgB+2C,UAS5Cb,EAAmBS,eAAiB,WAChC,IAAIltC,EAAQjY,KACZA,KAAKukD,YAAYthD,SAAQ,SAAUO,EAAMnB,GACrC,IAAIg+B,EAAWpoB,EAAM+sC,YAAYzjB,iBAAiB/9B,EAAKyE,UACnDo4B,EAAS5lC,OAAS,GAClB4lC,EAASp9B,SAAQ,SAAU0D,GACvBA,EAAQ6H,gBAAgBhL,EAAKghD,kBAKtCE,EA5E4B,I,iBChHvC,UAAO,CAAC,OAAY,YAAW,gBAiM9B,KAjMyC,EAAF,SAAW5nD,EAAQjD,EAAS0J,GAiBnE,IAAI3J,EAAMC,EAAQD,KAAO,aACzB,IAAIA,EAAI,gBAAgB,CACvB,IACC6rD,EAEkB,oBAAVp/C,QACY,oBAAZ2sC,UACY,oBAAZnsC,UACPR,OAAO2sC,UAAYA,UAAY3sC,OAAOQ,UAAYA,SAGnDH,EAAM++C,GAAa5+C,SACnBF,EAAUD,GAAOA,EAAI83B,cAAc,OACnC78B,EAAS4B,EAAOlJ,QAAUkJ,EAAOlJ,UAAa,IAE/CT,EAAM,SAASoE,GAWd,MAA6B,mBAAf2D,EAAM3D,GAAuB2D,EAAM3D,GAAQ2D,EAAM3D,GAAMlB,EAAQ4J,EAAKC,GAAYhF,EAAM3D,KAGjG2D,MAAQA,EAEZ/H,EAAImC,IAAM,SAASiC,EAAMsB,EAAMisC,EAAKma,GAoCnC,YADqB,IAAb/jD,EAAM3D,IAAsB0nD,KAAW/jD,EAAM3D,GAAOsB,GACrDisC,GAAO3xC,EAAIoE,IAMnBpE,EAAImC,IAAI,eAAgB0pD,GACxB7rD,EAAImC,IAAI,YAAgC,iBAAX4pD,SAAuBA,QAAQC,UAAYD,QAAQC,SAAS18C,MAAQy8C,QAAQC,SAASC,IAClHjsD,EAAImC,IAAI,aAA8B,mBAARmkD,OAA0C,mBAAZ4F,UAA6C,iBAAZA,WAC7FlsD,EAAImC,IAAI,MAAO0pD,GACf7rD,EAAImC,IAAI,qBAAsB,GAC9BnC,EAAImC,IAAI,aAAc,GAGvB,GAAGnC,EAAI,gBAAgB,CAEtBA,EAAImC,IAAI,yBAA0B8K,SAASuB,kBAG3CxO,EAAImC,IAAI,QAAS,iBAAkB8K,UAC9B,kBAAmBA,UAAYisB,UAAUkB,eAAiB,GAC3D3tB,OAAOysB,UAAUizB,kBAGrBnsD,EAAImC,IAAI,eAAgB,iBAAkB8K,UAM1CjN,EAAImC,IAAI,iBAAkB,mBAAoBsK,OAAOysB,UACnDzsB,OAAOysB,UAAUkzB,eAAiB,iBAAkB3/C,QACtDzM,EAAImC,IAAI,YAAasK,OAAOysB,UAAUmzB,kBAItCrsD,EAAImC,IAAI,eAAgBnC,EAAI,UAAYA,EAAI,mBAG5CA,EAAImC,IAAI,eAAgBmqD,OAAOC,YAAcrM,YAM7C,IAAIsM,EAAOv/C,SAAS23B,cAAc,QAClC5kC,EAAImC,IAAI,0BAAqD,GAA1BqqD,EAAK14C,WAAWjT,QACnDb,EAAImC,IAAI,gCAAiCqqD,EAAK14C,WAAWjT,OAAS,GAAK2rD,EAAK14C,WAAWjT,OAAS,IA6DjG,OA1DAb,EAAIysD,aAAe,SAAS1/C,GAI3B,OADAA,EAAQgzB,UAAW,GACZhzB,GAGR/M,EAAI0sD,UAAY,SAAS1iD,EAAI2iD,GAM5B,IACCC,EAAS5iD,EAAGC,MAAM,kBAAmBhI,EAAI,EACzC83B,EAAM,SAAS8yB,GACd,IAAIC,EAAOF,EAAO3qD,KAClB,MAAW,KAAR6qD,EAEK,EAGW,KAAfF,EAAO3qD,MACL4qD,GAAQ7sD,EAAI8sD,GAER/yB,KAGPA,GAAI,GACGA,EAAI8yB,IAINC,GAAQ,GAIlB,OADA9iD,EAAK+vB,MACQ4yB,EAAS3iD,IAGvBhK,EAAIsmD,KAAO,SAASt8C,EAAI+iD,EAAeC,GAWnChjD,EACF+iD,EAAc,CAAC/iD,GAAKgjD,GAEpBA,KAIKhtD,GACP,+B,gBCjMD,UAAO,CAAC,aA2FP,KA3FiB,EAAF,SAAWA,GAY1B,GAAGA,EAAI,gBAAgB,CACtB,IAAIitD,EAAI/zB,UACPg0B,EAAMD,EAAEj0B,UACRm0B,EAAMF,EAAEG,WACRC,EAAKlhC,WAAWghC,GAoBjB,GAnBAntD,EAAImC,IAAI,MAAO+qD,EAAI9jD,QAAQ,aAAe,GAC1CpJ,EAAImC,IAAI,KAAMgqB,WAAW+gC,EAAItqD,MAAM,iBAAiB,UAAOiC,GAC3D7E,EAAImC,IAAI,QAASgqB,WAAW+gC,EAAItqD,MAAM,cAAc,UAAOiC,GAC3D7E,EAAImC,IAAI,QAASgrD,EAAI/jD,QAAQ,cAAgB,EAAIikD,OAAKxoD,GACtD7E,EAAImC,IAAI,OAAQgqB,WAAW+gC,EAAItqD,MAAM,SAAS,UAAOiC,GACrD7E,EAAImC,IAAI,MAAOgqB,WAAW+gC,EAAItqD,MAAM,QAAQ,UAAOiC,GAEnD7E,EAAImC,IAAI,UAAWnC,EAAI,QAClBA,EAAI,SAAWmsB,WAAW+gC,EAAItqD,MAAM,WAAW,UAAOiC,GAC3D7E,EAAImC,IAAI,UAAWnC,EAAI,UAAYA,EAAI,QAClCmsB,WAAW+gC,EAAItqD,MAAM,WAAW,UAAOiC,GAC5C7E,EAAImC,IAAI,WAAYnC,EAAI,OACnBmsB,WAAW+gC,EAAItqD,MAAM,YAAY,UAAOiC,GAC7C7E,EAAImC,IAAI,WAAUgrD,EAAI/jD,QAAQ,WAAa,IACrCpJ,EAAI,OACJA,EAAI,WAAcA,EAAI,YAAeA,EAAI,SAAYA,EAAI,YACvB6E,EAAvCsnB,WAAWghC,EAAIvqD,MAAM,YAAY,KAClC5C,EAAImC,IAAI,MAAOgrD,EAAI/jD,QAAQ,cAAgB,GAC3CpJ,EAAImC,IAAI,SAAiC,cAAvB8K,SAASqgD,aACvBttD,EAAI,OACHktD,EAAIjjD,MAAM,sBAAsB,CACpC,IAAI9G,EAAIiE,OAAOmmD,GAAG9lD,QAAQ,IAAK,KAC3BsD,EAAImiD,EAAIjjD,MAAM,eAAiB7C,OAAOmmD,GAAK,IAC3CC,EAAKrhC,WAAWphB,EAAEtD,QAAQ,IAAK,KAAKA,QAAQ,KAAM,KACtDzH,EAAImC,IAAIgB,EAAGqqD,GACXxtD,EAAImC,IAAI,MAAOqrD,GAOhB,GALAxtD,EAAImC,IAAI,MAAO+qD,EAAI9jD,QAAQ,eAAiB,GAAK8jD,EAAI9jD,QAAQ,SAAW,IAAM+iB,WAAW+gC,EAAItqD,MAAM,YAAY,UAAOiC,GACtH7E,EAAImC,IAAI,UAAWgqB,WAAWghC,EAAIvqD,MAAM,YAAY,UAAOiC,GAE3D7E,EAAImC,IAAI,MAA2B,oBAAbsrD,WAElBztD,EAAI,UAAU,CAmBjB,GAjBGktD,EAAI9jD,QAAQ,UAAY,GAG1BpJ,EAAImC,IAAI,QAASkrD,GAAM,KAAMlhC,WAAW+gC,EAAItqD,MAAM,YAAY,KAAYyqD,KAIxEH,EAAI9jD,QAAQ,UAAY,IAAMpJ,EAAI,OAC/BA,EAAI,UAAaA,EAAI,YAAeA,EAAI,SAC7CA,EAAImC,IAAI,UAAWkrD,GAEjBrtD,EAAI,YAENA,EAAImC,IAAI,KAAMgqB,WAAW+gC,EAAItqD,MAAM,YAAY,IAAMsqD,EAAItqD,MAAM,cAAc,UAAOiC,GAIlFoI,SAAS+G,MAAQhU,EAAI,SAAS,CAChC,IAAI27B,EAAOxP,WAAWghC,EAAIvqD,MAAM,SAAS,UAAOiC,EAQ5CgrB,EAAO5iB,SAASygD,aACjB79B,GAAgB,GAARA,GAAa7T,KAAKC,MAAM0f,IAAS9L,IAC3C8L,EAAO9L,GAGR7vB,EAAImC,IAAI,KAAMw5B,GAIf37B,EAAImC,IAAI,MAAuB,oBAATwrD,OAAwBA,MAAMC,YAItD,OAAO5tD,GACP,+B,gBC3FD,UAAO,CAAC,OAAW,OAAS,aA6U3B,KA7U8C,EAAF,SAAWA,EAAKyT,EAAKH,GAsBjE,IAAIogC,EAuEAma,EAvEkBx5C,EAAQ,GAK7Bq/B,EADE1zC,EAAI,UACa,SAAqBsP,GACvC,IAAIjL,EACJ,GAAoB,GAAjBiL,EAAKtI,SAAc,CACrB,IAAI8mD,EAAKx+C,EAAKoB,cAAcq9C,cAC5B1pD,EAAIypD,EAAGpa,iBAAiBpkC,EAAM,QACrBA,EAAK+E,QACb/E,EAAK+E,MAAMkwC,QAAU,GACrBlgD,EAAIypD,EAAGpa,iBAAiBpkC,EAAM,OAGhC,OAAOjL,GAAK,IAELrE,EAAI,QAAUA,EAAI,MAAQ,GAAKA,EAAI,WACxB,SAASsP,GAG3B,OAAwB,GAAjBA,EAAKtI,UAAmCsI,EAAK0+C,aAAe1+C,EAAK0+C,aAAe,IAGrE,SAAS1+C,GAC3B,GAAqB,IAAlBA,EAAKtI,SAAiC,CACxC,IAAI8mD,EAAKx+C,EAAKoB,cAAcq9C,YAE5B,OADKD,EAAGG,OAASH,EAAKx6C,EAAIpQ,OAAOuJ,QACxBinC,iBAAiBpkC,EAAM,MAEjC,MAAO,IAGT+E,EAAMq/B,iBAAmBA,EA8CxBma,EAPG7tD,EAAI,MAOG,SAAS+M,EAASmhD,GAC3B,IAAIA,EAAS,OAAO,EAEpB,GAAa,UAAVA,EAAqB,OAAO,EAG/B,GAAGA,EAAOrqD,OAA6B,MAApBqqD,EAAOrqD,OAAO,GAAa,OAAOsoB,WAAW+hC,GAChE,IAAI7pD,EAAI0I,EAAQsH,MAAO85C,EAAKphD,EAAQqhD,aAAcC,EAAKthD,EAAQihD,aAC9DM,EAAQjqD,EAAE8uC,KAAMob,EAASJ,EAAGhb,KAC7Bgb,EAAGhb,KAAOkb,EAAGlb,KACb,IAKC9uC,EAAE8uC,KAAO+a,EACTA,EAAS7pD,EAAEmqD,UACX,MAAMvtD,GACNitD,EAAS,EAIV,OAFA7pD,EAAE8uC,KAAOmb,EACTH,EAAGhb,KAAOob,EACHL,GA5BE,SAASnhD,EAASpI,GAG3B,OAAOwnB,WAAWxnB,IAAU,GA4B9B0P,EAAMo6C,aAAeZ,EAarB,IAAIa,EAAO,mCACPC,EAAK,SAAS1B,EAAGlsD,GACpB,IACC,OAAOksD,EAAE2B,QAAQhlD,KAAK8kD,GACtB,MAAMztD,GACN,OAAOF,EAAI,GAAK,OAId8tD,EACH7uD,EAAI,MAAQ,GAAMA,EAAI,MAAQ,IAAMA,EAAI,UAAa,SAASsP,GAC7D,IACC,OAAOq/C,EAAGr/C,GAAMw/C,QAAU,IAC1B,MAAM7tD,GACN,OAAO,IAGT,SAASqO,GACR,OAAOokC,EAAiBpkC,GAAMykC,SAG5Bgb,EACH/uD,EAAI,MAAQ,GAAMA,EAAI,MAAQ,IAAMA,EAAI,UAAa,SAAqBsP,EAAiBykC,GAC3E,KAAZA,IAAiBA,EAAU,GAC9B,IAAIib,EAAe,IAAVjb,EAsBT,GAtBkD,IAAZA,GAOrCzkC,EAAK+E,MAAM46C,KAAO,GACfN,EAAGr/C,KACLA,EAAK+E,MAAM5K,OAAS6F,EAAK+E,MAAM5K,OAAOhC,QACrC,IAAIL,OAAO,cAAgBsnD,EAAO,iBAAkB,KAAM,OAG5Dp/C,EAAK+E,MAAM46C,KAAO,EACfN,EAAGr/C,GACLq/C,EAAGr/C,EAAM,GAAGw/C,QAAUE,EAEtB1/C,EAAK+E,MAAM5K,QAAU,WAAailD,EAAO,YAAcM,EAAK,IAE7DL,EAAGr/C,EAAM,GAAG4/C,SAAU,GAGU,MAA9B5/C,EAAKhK,QAAQC,cACf,IAAI,IAAI4pD,EAAK7/C,EAAK8/C,WAAYD,EAAIA,EAAKA,EAAGE,YACV,MAA5BF,EAAG7pD,QAAQC,eACbwpD,EAAYI,EAAIpb,GAInB,OAAOA,GAER,SAASzkC,EAAMykC,GACd,OAAOzkC,EAAK+E,MAAM0/B,QAAUA,GAG1Bub,EAAmB,CACtBnc,MAAM,EAAMnhC,KAAK,GAEdu9C,EAAe,6CACnB,SAASC,EAAclgD,EAAMjC,EAAM1I,GAKlC,GAHA0I,EAAOA,EAAK9H,cAGA,QAATZ,EAAgB,CAClB,GAAW,UAAR0I,EAAmB,OAAOiC,EAAKwwC,aAClC,GAAW,SAARzyC,EAAkB,OAAOiC,EAAK83B,YAElC,GAAW,cAAR/5B,EACF,OAAO1I,GACN,KAAK,IAAK,MAAO,OACjB,KAAK,IACL,QAAS,MAAO,SAOlB,OAHK0I,KAAQiiD,IACZA,EAAiBjiD,GAAQkiD,EAAa7pD,KAAK2H,IAErCiiD,EAAiBjiD,GAAQwgD,EAAQv+C,EAAM3K,GAASA,EAGxD,IAAI8qD,EAAgB,CAACC,SAAU,EAAGC,WAAY,EAAG,MAAS,GA2G1D,OAvGAt7C,EAAM0lB,IAAM,SAAqCzqB,EAAkBlL,GA4BlE,IAAI6oD,EAAIx5C,EAAIC,KAAKpE,GAAO7K,EAAI3C,UAAUjB,OAAQ+uD,EAAc,WAARxrD,EACpD,GAAQ,GAALK,GAAUmrD,EACZ,OAAOf,EAAY5B,GAEpB7oD,EAAOqrD,EAAcrrD,GAAQ,aAAc6oD,EAAE54C,MAAQ,WAAa,aAAejQ,EACjF,IAAIC,EAAIgQ,EAAMq/B,iBAAiBuZ,GAC/B,OAAa,GAALxoD,EAAUJ,EAAImrD,EAAcvC,EAAG7oD,EAAMC,EAAED,IAAS6oD,EAAE54C,MAAMjQ,KAGjEiQ,EAAM4lB,IAAM,SAAqC3qB,EAAwBlL,EAAkBO,GAuD1F,IAAIsoD,EAAIx5C,EAAIC,KAAKpE,GAAO7K,EAAI3C,UAAUjB,OAAQ+uD,EAAc,WAARxrD,EAEpD,GADAA,EAAOqrD,EAAcrrD,GAAQ,aAAc6oD,EAAE54C,MAAQ,WAAa,aAAejQ,EACzE,GAALK,EACF,OAAOmrD,EAAKb,EAAY9B,EAAGtoD,GAASsoD,EAAE54C,MAAMjQ,GAAQO,EAErD,IAAI,IAAIgC,KAAKvC,EACZiQ,EAAM4lB,IAAI3qB,EAAM3I,EAAGvC,EAAKuC,IAEzB,OAAO0N,EAAMq/B,iBAAiBuZ,IAGxB54C,GACP,+B,gBC7UD,UAAO,CAAC,MAAY,MAAU,aAqI7B,KArI0C,EAAF,SAAWtU,EAAMI,EAAMH,GAIhE,IAAIsZ,EAAM,CAITpW,OAAQnD,EAAKmD,OAYb4J,IAAK/M,EAAKmD,OAAiB,UAAK,KAchC2vC,KAAM,SAAuB/lC,GAS5B,OADAA,EAAMA,GAAO/M,EAAK+M,KACP+lC,MAAQ/lC,EAAI6H,qBAAqB,QAAQ,IAGrDk7C,WAAY,SAAoBC,EAAkCC,GAOjEhwD,EAAKmD,OAASoW,EAAIpW,OAAS4sD,EAC3B/vD,EAAK+M,IAAMwM,EAAIxM,IAAMijD,GAGtBC,WAAY,SAAqBF,EACdnuD,EACD2H,EACD2mD,GAWhB,IAAIC,EAAUnwD,EAAKmD,OACnB,IAEC,OADAnD,EAAKmD,OAASoW,EAAIpW,OAAS4sD,EACpBx2C,EAAI62C,QAAQrsD,KAAK,KAAMgsD,EAAa7iD,SAAUtL,EAAU2H,EAAY2mD,GAC3E,QACAlwD,EAAKmD,OAASoW,EAAIpW,OAASgtD,IAI7BC,QAAS,SAA8BC,EACrBzuD,EACD2H,EACD2mD,GASf,IAEoBt0B,EAAM9L,EAAMwgC,EAF5BC,EAASh3C,EAAIxM,IAChByjD,EAAOvwD,EAAI,UACXwwD,EAAQxwD,EAAI,MAEb,IAwBC,OAvBAD,EAAK+M,IAAMwM,EAAIxM,IAAMsjD,EAGrBrwD,EAAK0wD,SAAWzwD,EAAImC,IAAI,SAAiC,cAAvBpC,EAAK+M,IAAIwgD,YAA4B,GAAM,GAE1EttD,EAAI,QACFqwD,EAAOD,EAAep/C,eAAiBq/C,EAAKn3B,YAI/CyC,EAAOxP,WAAWkkC,EAAKn3B,UAAUk0B,WAAWxqD,MAAM,SAAS,UAAOiC,GAClEgrB,EAAOugC,EAAe1C,eACH,GAAR79B,GAAa7T,KAAKC,MAAM0f,IAAS9L,IAC3C8L,EAAO9L,GAER9vB,EAAK47B,KAAO37B,EAAImC,IAAI,KAAMw5B,GAAM,GAAM,IAIrCryB,GAAiC,iBAAZ3H,IACvBA,EAAW2H,EAAW3H,IAGhBA,EAASK,MAAMsH,EAAY2mD,GAAe,IACjD,QACAlwD,EAAK+M,IAAMwM,EAAIxM,IAAMwjD,EACrBvwD,EAAK0wD,SAAWzwD,EAAImC,IAAI,SAAUouD,GAAM,GAAM,GAC9CxwD,EAAK47B,KAAO37B,EAAImC,IAAI,KAAMquD,GAAO,GAAM,MAO1C,OAFAxwD,EAAI,gBAAkBG,EAAKoE,MAAMxE,EAAMuZ,GAEhCA,GAEN,+B,gBCrID,UAAO,CAAC,MAAgB,MAAiB,aAqUxC,KArUkD,EAAF,SAAWnZ,EAAM6I,EAAOyK,GAIxE,IAaIi9C,EAbA5wB,EAAY,YAcf6wB,EAAS,MAAOC,EAAK,CAAC,IAEvB,SAASC,EAAUxsD,GAClB,GAAe,iBAALA,GAAiBA,aAAaa,OAAO,CAC9C,GAAGb,IAAMssD,EAAOjrD,KAAKrB,GAEpB,OADAusD,EAAG,GAAKvsD,EACDusD,EAER,IAAItoD,EAAIjE,EAAEzB,MAAM+tD,GAOhB,OANGroD,EAAEzH,SAAWyH,EAAE,IACjBA,EAAEtH,QAEAsH,EAAEzH,SAAWyH,EAAEA,EAAEzH,OAAS,IAC5ByH,EAAE1D,MAEI0D,EAGR,OAAIjE,EAGG2E,EAAMS,OAAOpF,GAAG,SAASsC,GAAI,OAAOA,KAFnC,GAmET,IAAImqD,EAAW,GA4Nf,OA3NAJ,EAAM,CAILx8C,SAAU,SAA0C5E,EAAiByhD,GAYpE,OAAS,IAAMt9C,EAAIC,KAAKpE,GAAMwwB,GAAa,KAAK12B,QAAQ,IAAM2nD,EAAW,MAAQ,GAGlF5uD,IAAK,SAAqCmN,EAAuByhD,GAoChEzhD,EAAOmE,EAAIC,KAAKpE,GAChByhD,EAAWF,EAAUE,GACrB,IAA2BC,EAAvBN,EAAMphD,EAAKwwB,GAEfkxB,GADAN,EAAMA,EAAM,IAAMA,EAAM,IAAM,KACjB7vD,OACb,IAAI,IAAkC0Q,EAA9BtP,EAAI,EAAGyX,EAAMq3C,EAASlwD,OAAWoB,EAAIyX,IAAOzX,GACnDsP,EAAIw/C,EAAS9uD,KACLyuD,EAAItnD,QAAQ,IAAMmI,EAAI,KAAO,IACpCm/C,GAAOn/C,EAAI,KAGVy/C,EAASN,EAAI7vD,SACfyO,EAAKwwB,GAAa4wB,EAAIzvC,OAAO,EAAGyvC,EAAI7vD,OAAS,KAI/CkN,OAAQ,SAAwCuB,EAAwByhD,GA4CvE,IAAIL,EACJ,GAFAphD,EAAOmE,EAAIC,KAAKpE,QAEAzK,IAAbksD,EAAuB,CACzBA,EAAWF,EAAUE,GACrBL,EAAM,IAAMphD,EAAKwwB,GAAa,IAC9B,IAAI,IAAI79B,EAAI,EAAGyX,EAAMq3C,EAASlwD,OAAQoB,EAAIyX,IAAOzX,EAChDyuD,EAAMA,EAAIjpD,QAAQ,IAAMspD,EAAS9uD,GAAK,IAAK,KAE5CyuD,EAAMvwD,EAAKoH,KAAKmpD,QAEhBA,EAAM,GAEJphD,EAAKwwB,IAAc4wB,IAAMphD,EAAKwwB,GAAa4wB,IAG/CjpD,QAAS,SAAyC6H,EAAuB2hD,EAA+BC,GAiCvG5hD,EAAOmE,EAAIC,KAAKpE,GAChBwhD,EAAShxB,GAAaxwB,EAAKwwB,GAC3B4wB,EAAI3iD,OAAO+iD,EAAUI,GACrBR,EAAIvuD,IAAI2uD,EAAUG,GACf3hD,EAAKwwB,KAAegxB,EAAShxB,KAC/BxwB,EAAKwwB,GAAagxB,EAAShxB,KAI7BqxB,OAAQ,SAAwC7hD,EAAuByhD,EAAuBK,GAmC7F,GADA9hD,EAAOmE,EAAIC,KAAKpE,QACCzK,IAAdusD,EAEF,IAAI,IAAkC7/C,EAA9BtP,EAAI,EAAGyX,GADfq3C,EAAWF,EAAUE,IACSlwD,OAAWoB,EAAIyX,IAAOzX,EACnDsP,EAAIw/C,EAAS9uD,GACbyuD,EAAIA,EAAIx8C,SAAS5E,EAAMiC,GAAK,SAAW,OAAOjC,EAAMiC,QAGrDm/C,EAAIU,EAAY,MAAQ,UAAU9hD,EAAMyhD,GAEzC,OAAOK,KAKT,+B,qBCrUD,UAAO,CAAC,OAAa,OAAU,kBAsL9B,KAtL0C,EAAF,SAAWluD,EAAQlD,EAAKC,GAsJhE,IAAIuI,EAAS,GACb,GAAGxI,EAAI,mBAAmB,CAEzB,IAA6BmD,EAAzB4D,EAAM9G,EAAQoxD,UAClB,IAAIluD,KAAK4D,EACRyB,EAAOrF,GAAK4D,EAAI5D,OAEb,CACJ,IAAImuD,EAAY,SAASC,EAAYnqC,EAAQoqC,GAC5C,IAAIruD,KAAKouD,EACL,OAAHpuD,GAAYnD,EAAImC,IAAIilB,EAASjkB,EAAGouD,EAAWpuD,GAAI,EAAGquD,IAQpDF,EALA9oD,EAASxI,EAAI,eAEZC,EAAQoxD,UAERnuD,EAAOuuD,YAAcvuD,EAAOwuD,UAAY,GACvB,SAAU,GAC5BJ,EAAU9oD,EAAOxI,IAAK,GAAI,GAG3B,IAAIwI,EAAO8B,QAA8B,oBAAb4uB,UAAyB,CAEpD,IAAID,EAAYC,UAAUy4B,WAAaz4B,UAAUy4B,UAAU9wD,OAAUq4B,UAAUy4B,UAAU,GACvFz4B,UAAUD,UAAYC,UAAU04B,aAC/B34B,IACFzwB,EAAO8B,OAAS2uB,EAAS1zB,eAI3B,OAAOiD,GACP,+B,iBCtLD,WAmOC,KAnOU,EAAF,WAKR,aAsEA,SAASgE,EAAOa,GACf,OAAO,SAASD,EAAQykD,EAAYC,EAAQC,GAC3C,IAAmCC,EAA/BC,EAAW7kD,EAAOykD,GAClBI,GAAYA,EAAS7kD,QAAUA,IAElCA,EAAOykD,GAAcG,EAAa,WAKjC,IAJA,IAAIE,EAAcF,EAAWG,OAEzBhsD,EAAOrE,UACPswD,EAASJ,EAAWI,OAClBA,GACFA,EAAON,SACT3rD,EAAOisD,EAAON,OAAO9vD,MAAMoE,KAAMD,IAASA,GAE3CisD,EAASA,EAAOC,KAGjB,GAAGL,EAAWM,OACb,IAAIhvB,EAAU0uB,EAAWM,OAAOR,OAAO1rD,KAAMD,GAI9C,IADA,IAAIiM,EAAQ4/C,EAAW5/C,MACjBA,GAASA,EAAMpI,GAAKkoD,GAAY,CACrC,GAAG9/C,EAAM0/C,OACR,GAAG1/C,EAAM2/C,iBAAiB,CACzB,IAAIQ,EAAangD,EAAM0/C,OAAO9vD,MAAMoE,KAAMD,GAE1Cm9B,OAhGHz+B,IAgGa0tD,EAA2BjvB,EAAUivB,OAE/CjvB,EAAUlxB,EAAM0/C,OAAOhuD,KAAKsC,KAAMk9B,EAASn9B,GAG7CiM,EAAQA,EAAMigD,KAEf,OAAO/uB,GAEL2uB,IACFD,EAAWM,OAAS,CAACR,OAAQ,SAAS1kD,EAAQjH,GAC7C,OAAO8rD,EAASjwD,MAAMoL,EAAQjH,MAGhC6rD,EAAW5kD,OAASA,EACpB4kD,EAAWG,OAASH,EAAWG,QAAU,GAE1C,IAAI7uB,EAhHN,SAAgB0uB,EAAY3kD,EAAMykD,EAAQC,GACzC,IAEI3wD,EAFAoxD,EAAWR,EAAW3kD,GACtBilD,EAAiB,UAARjlD,EAEb,GAAGilD,EAAO,CACT,IAAIG,EAAUX,GAAO,WACpB,OAAOU,EAASV,OAAO1rD,KAAMtE,cAE9BV,EAAS,CACR2M,OAAQ,WACJ0kD,IACFA,EAAUT,EAAaF,EAAS,OAGlCA,OAAQ,SAAS1kD,EAAQjH,GACxB,OAAOssD,EACNA,EAAQzwD,MAAMoL,EAAQjH,GACtBqsD,EAASV,OAAO1kD,EAAQjH,UAK3B/E,EAAS,CACR2M,OAAQ,WACP,GAAG3M,EAAO0wD,OAAO,CAChB,IAAIU,EAAWpxD,EAAOoxD,SAClBH,EAAOjxD,EAAOixD,KACdA,GAASG,GAGTA,EACFA,EAASH,KAAOA,EAEhBL,EAAW3kD,GAAQglD,EAEjBA,IACFA,EAAKG,SAAWA,WARVR,EAAW3kD,GAanB2kD,EAAaF,EAAS1wD,EAAO0wD,OAAS,OAGxC9nD,GAAIgoD,EAAWG,SACfL,OAAQA,EACRC,iBAAkBA,GAGpB,GAAGS,IAAaF,EACf,GAAW,SAARjlD,EAAgB,CAGlB,KAAMmlD,EAASH,OAASG,EAAWA,EAASH,QAC5CG,EAASH,KAAOjxD,EAChBA,EAAOoxD,SAAWA,MACF,UAARnlD,IAER2kD,EAAW3kD,GAAQjM,EACnBA,EAAOixD,KAAOG,EACdA,EAASA,SAAWpxD,QAIrB4wD,EAAW3kD,GAAQjM,EAEpB,OAAOA,EA8CQsxD,CAAQV,GAAcC,EAAW5kD,EAAMykD,EAAQC,GAE7D,OADAD,EAAS,KACFxuB,GAMT,IAAIlxB,EAAQ5F,EAAO,SA+EnB,MAAO,CAiBN4lD,OAtEY5lD,EAAO,UAuEnB8lD,OAlDY9lD,EAAO,UAmDnB4F,MAAOA,IAER,WAnOM,OAmON,c,6BCnOD,qpEAkBO,SAASugD,EAAeC,GAE3B,IADA,IAAIC,EAASC,IACJ7wD,EAAI,EAAG8a,EAAK61C,EAAY/xD,OAAQoB,EAAI8a,IAAM9a,EAC/C8wD,EAAiBF,EAAQD,EAAY3wD,IAEzC,OAAO4wD,EAwBJ,SAASG,EAAOH,EAAQluD,EAAOsuD,GAClC,OAAIA,GACAA,EAAW,GAAKJ,EAAO,GAAKluD,EAC5BsuD,EAAW,GAAKJ,EAAO,GAAKluD,EAC5BsuD,EAAW,GAAKJ,EAAO,GAAKluD,EAC5BsuD,EAAW,GAAKJ,EAAO,GAAKluD,EACrBsuD,GAGA,CACHJ,EAAO,GAAKluD,EACZkuD,EAAO,GAAKluD,EACZkuD,EAAO,GAAKluD,EACZkuD,EAAO,GAAKluD,GAWjB,SAASmC,EAAM+rD,EAAQI,GAC1B,OAAIA,GACAA,EAAW,GAAKJ,EAAO,GACvBI,EAAW,GAAKJ,EAAO,GACvBI,EAAW,GAAKJ,EAAO,GACvBI,EAAW,GAAKJ,EAAO,GAChBI,GAGAJ,EAAOhvD,QASf,SAASqvD,EAAyBL,EAAQlsD,EAAGkjB,GAChD,IAAIspC,EAAIC,EAmBR,OAjBID,EADAxsD,EAAIksD,EAAO,GACNA,EAAO,GAAKlsD,EAEZksD,EAAO,GAAKlsD,EACZA,EAAIksD,EAAO,GAGX,GAWGM,GARRC,EADAvpC,EAAIgpC,EAAO,GACNA,EAAO,GAAKhpC,EAEZgpC,EAAO,GAAKhpC,EACZA,EAAIgpC,EAAO,GAGX,GAEaO,EAUnB,SAASC,EAAmBR,EAAQS,GACvC,OAAOC,EAAWV,EAAQS,EAAW,GAAIA,EAAW,IAcjD,SAASE,EAAeC,EAASC,GACpC,OAAQD,EAAQ,IAAMC,EAAQ,IAC1BA,EAAQ,IAAMD,EAAQ,IACtBA,EAAQ,IAAMC,EAAQ,IACtBA,EAAQ,IAAMD,EAAQ,GAWvB,SAASF,EAAWV,EAAQlsD,EAAGkjB,GAClC,OAAOgpC,EAAO,IAAMlsD,GAAKA,GAAKksD,EAAO,IAAMA,EAAO,IAAMhpC,GAAKA,GAAKgpC,EAAO,GAStE,SAASc,EAAuBd,EAAQS,GAC3C,IAAIM,EAAOf,EAAO,GACdgB,EAAOhB,EAAO,GACdiB,EAAOjB,EAAO,GACdkB,EAAOlB,EAAO,GACdlsD,EAAI2sD,EAAW,GACfzpC,EAAIypC,EAAW,GACfU,EAAe,IAAaC,QAgBhC,OAfIttD,EAAIitD,EACJI,GAA8B,IAAaE,KAEtCvtD,EAAImtD,IACTE,GAA8B,IAAaG,OAE3CtqC,EAAIgqC,EACJG,GAA8B,IAAaI,MAEtCvqC,EAAIkqC,IACTC,GAA8B,IAAaK,OAE3CL,IAAiB,IAAaC,UAC9BD,EAAe,IAAaM,cAEzBN,EAOJ,SAASlB,IACZ,MAAO,CAAC7mC,IAAUA,KAAWA,KAAWA,KAWrC,SAASsoC,EAAeX,EAAMC,EAAMC,EAAMC,EAAMd,GACnD,OAAIA,GACAA,EAAW,GAAKW,EAChBX,EAAW,GAAKY,EAChBZ,EAAW,GAAKa,EAChBb,EAAW,GAAKc,EACTd,GAGA,CAACW,EAAMC,EAAMC,EAAMC,GAQ3B,SAASS,EAAoBvB,GAChC,OAAOsB,EAAetoC,IAAUA,KAAWA,KAAWA,IAAUgnC,GAO7D,SAASwB,EAA6BnB,EAAYL,GACrD,IAAItsD,EAAI2sD,EAAW,GACfzpC,EAAIypC,EAAW,GACnB,OAAOiB,EAAe5tD,EAAGkjB,EAAGljB,EAAGkjB,EAAGopC,GAO/B,SAASyB,EAA8B9B,EAAaK,GAEvD,OAAO0B,EADMH,EAAoBvB,GACAL,GAU9B,SAASgC,EAAkCC,EAAiBpxD,EAAQyF,EAAK4rD,EAAQ7B,GAEpF,OAAO8B,EADMP,EAAoBvB,GACI4B,EAAiBpxD,EAAQyF,EAAK4rD,GAOhE,SAASE,EAAwBC,EAAOhC,GAE3C,OAAOiC,EADMV,EAAoBvB,GACNgC,GASxB,SAASE,EAAO1B,EAASC,GAC5B,OAAQD,EAAQ,IAAMC,EAAQ,IAC1BD,EAAQ,IAAMC,EAAQ,IACtBD,EAAQ,IAAMC,EAAQ,IACtBD,EAAQ,IAAMC,EAAQ,GASvB,SAAS0B,EAAoB3B,EAASC,EAAS2B,GAClD,OAAQr5C,KAAKmG,IAAIsxC,EAAQ,GAAKC,EAAQ,IAAM2B,GACxCr5C,KAAKmG,IAAIsxC,EAAQ,GAAKC,EAAQ,IAAM2B,GACpCr5C,KAAKmG,IAAIsxC,EAAQ,GAAKC,EAAQ,IAAM2B,GACpCr5C,KAAKmG,IAAIsxC,EAAQ,GAAKC,EAAQ,IAAM2B,EASrC,SAAS1vD,EAAO8tD,EAASC,GAa5B,OAZIA,EAAQ,GAAKD,EAAQ,KACrBA,EAAQ,GAAKC,EAAQ,IAErBA,EAAQ,GAAKD,EAAQ,KACrBA,EAAQ,GAAKC,EAAQ,IAErBA,EAAQ,GAAKD,EAAQ,KACrBA,EAAQ,GAAKC,EAAQ,IAErBA,EAAQ,GAAKD,EAAQ,KACrBA,EAAQ,GAAKC,EAAQ,IAElBD,EAMJ,SAASV,EAAiBF,EAAQS,GACjCA,EAAW,GAAKT,EAAO,KACvBA,EAAO,GAAKS,EAAW,IAEvBA,EAAW,GAAKT,EAAO,KACvBA,EAAO,GAAKS,EAAW,IAEvBA,EAAW,GAAKT,EAAO,KACvBA,EAAO,GAAKS,EAAW,IAEvBA,EAAW,GAAKT,EAAO,KACvBA,EAAO,GAAKS,EAAW,IAQxB,SAASqB,EAAkB9B,EAAQD,GACtC,IAAK,IAAI3wD,EAAI,EAAG8a,EAAK61C,EAAY/xD,OAAQoB,EAAI8a,IAAM9a,EAC/C8wD,EAAiBF,EAAQD,EAAY3wD,IAEzC,OAAO4wD,EAUJ,SAASkC,EAAsBlC,EAAQgC,EAAiBpxD,EAAQyF,EAAK4rD,GACxE,KAAOrxD,EAASyF,EAAKzF,GAAUqxD,EAC3BQ,EAASzC,EAAQgC,EAAgBpxD,GAASoxD,EAAgBpxD,EAAS,IAEvE,OAAOovD,EAOJ,SAASqC,EAAYrC,EAAQoC,GAChC,IAAK,IAAIhzD,EAAI,EAAG8a,EAAKk4C,EAAMp0D,OAAQoB,EAAI8a,IAAM9a,EACzC0yD,EAAkB9B,EAAQoC,EAAMhzD,IAEpC,OAAO4wD,EAOJ,SAASyC,EAASzC,EAAQlsD,EAAGkjB,GAChCgpC,EAAO,GAAK72C,KAAK6K,IAAIgsC,EAAO,GAAIlsD,GAChCksD,EAAO,GAAK72C,KAAK6K,IAAIgsC,EAAO,GAAIhpC,GAChCgpC,EAAO,GAAK72C,KAAK8K,IAAI+rC,EAAO,GAAIlsD,GAChCksD,EAAO,GAAK72C,KAAK8K,IAAI+rC,EAAO,GAAIhpC,GAW7B,SAAS0rC,EAAc1C,EAAQlxD,GAClC,IAAI8X,EAEJ,OADAA,EAAM9X,EAAS6zD,EAAc3C,OAI7Bp5C,EAAM9X,EAAS8zD,EAAe5C,OAI9Bp5C,EAAM9X,EAAS+zD,EAAY7C,KANhBp5C,GAUXA,EAAM9X,EAASg0D,EAAW9C,OAInB,EAQJ,SAAS+C,EAAQ/C,GACpB,IAAI5O,EAAO,EAIX,OAHK7jB,EAAQyyB,KACT5O,EAAO4R,EAAShD,GAAUiD,EAAUjD,IAEjC5O,EAQJ,SAASuR,EAAc3C,GAC1B,MAAO,CAACA,EAAO,GAAIA,EAAO,IAQvB,SAAS4C,EAAe5C,GAC3B,MAAO,CAACA,EAAO,GAAIA,EAAO,IAQvB,SAASkD,EAAUlD,GACtB,MAAO,EAAEA,EAAO,GAAKA,EAAO,IAAM,GAAIA,EAAO,GAAKA,EAAO,IAAM,GAQ5D,SAASmD,EAAUnD,EAAQoD,GAC9B,IAAI3C,EAgBJ,OAfI2C,IAAW,IAAOC,YAClB5C,EAAakC,EAAc3C,GAEtBoD,IAAW,IAAOE,aACvB7C,EAAamC,EAAe5C,GAEvBoD,IAAW,IAAOG,SACvB9C,EAAaqC,EAAW9C,GAEnBoD,IAAW,IAAOI,UACvB/C,EAAaoC,EAAY7C,GAGzB,aAAO,EAAO,IAEXS,EAOJ,SAASgD,EAAgB7C,EAASC,GACrC,IAAIE,EAAO53C,KAAK6K,IAAI4sC,EAAQ,GAAIC,EAAQ,IACpCG,EAAO73C,KAAK6K,IAAI4sC,EAAQ,GAAIC,EAAQ,IAGxC,OAFW13C,KAAK8K,IAAI2sC,EAAQ,GAAIC,EAAQ,IAEzBE,IADJ53C,KAAK8K,IAAI2sC,EAAQ,GAAIC,EAAQ,IACTG,GAU5B,SAAS0C,EAAkBC,EAAQC,EAAYxjD,EAAUyjD,EAAMzD,GAClE,IAAIE,EAAMsD,EAAaC,EAAK,GAAM,EAC9BtD,EAAMqD,EAAaC,EAAK,GAAM,EAC9BC,EAAc36C,KAAK46C,IAAI3jD,GACvB4jD,EAAc76C,KAAK86C,IAAI7jD,GACvB8jD,EAAO5D,EAAKwD,EACZK,EAAO7D,EAAK0D,EACZI,EAAO7D,EAAKuD,EACZO,EAAO9D,EAAKyD,EACZlwD,EAAI6vD,EAAO,GACX3sC,EAAI2sC,EAAO,GACXW,EAAKxwD,EAAIowD,EAAOG,EAChBE,EAAKzwD,EAAIowD,EAAOG,EAChBG,EAAK1wD,EAAIowD,EAAOG,EAChBI,EAAK3wD,EAAIowD,EAAOG,EAChBK,EAAK1tC,EAAImtC,EAAOC,EAChBO,EAAK3tC,EAAImtC,EAAOC,EAChBQ,EAAK5tC,EAAImtC,EAAOC,EAChBS,EAAK7tC,EAAImtC,EAAOC,EACpB,OAAO1C,EAAev4C,KAAK6K,IAAIswC,EAAIC,EAAIC,EAAIC,GAAKt7C,KAAK6K,IAAI0wC,EAAIC,EAAIC,EAAIC,GAAK17C,KAAK8K,IAAIqwC,EAAIC,EAAIC,EAAIC,GAAKt7C,KAAK8K,IAAIywC,EAAIC,EAAIC,EAAIC,GAAKzE,GAQ3H,SAAS6C,EAAUjD,GACtB,OAAOA,EAAO,GAAKA,EAAO,GAOvB,SAAS8E,EAAoBlE,EAASC,GAEzC,OAAOkC,EADYgC,EAAgBnE,EAASC,IAWzC,SAASkE,EAAgBnE,EAASC,EAAST,GAC9C,IAAI4E,EAAe5E,GA1VZ,CAAChnC,IAAUA,KAAU,KAAW,KAwXvC,OA7BI6rC,EAAWrE,EAASC,IAChBD,EAAQ,GAAKC,EAAQ,GACrBmE,EAAa,GAAKpE,EAAQ,GAG1BoE,EAAa,GAAKnE,EAAQ,GAE1BD,EAAQ,GAAKC,EAAQ,GACrBmE,EAAa,GAAKpE,EAAQ,GAG1BoE,EAAa,GAAKnE,EAAQ,GAE1BD,EAAQ,GAAKC,EAAQ,GACrBmE,EAAa,GAAKpE,EAAQ,GAG1BoE,EAAa,GAAKnE,EAAQ,GAE1BD,EAAQ,GAAKC,EAAQ,GACrBmE,EAAa,GAAKpE,EAAQ,GAG1BoE,EAAa,GAAKnE,EAAQ,IAI9Bc,EAAoBqD,GAEjBA,EAMJ,SAASE,EAAUlF,GACtB,OAAOgD,EAAShD,GAAUiD,EAAUjD,GAQjC,SAASmF,EAAQnF,GACpB,MAAO,CAACA,EAAO,GAAKA,EAAO,GAAIA,EAAO,GAAKA,EAAO,IAQ/C,SAAS8C,EAAW9C,GACvB,MAAO,CAACA,EAAO,GAAIA,EAAO,IAQvB,SAAS6C,EAAY7C,GACxB,MAAO,CAACA,EAAO,GAAIA,EAAO,IAQvB,SAASgD,EAAShD,GACrB,OAAOA,EAAO,GAAKA,EAAO,GASvB,SAASiF,EAAWrE,EAASC,GAChC,OAAQD,EAAQ,IAAMC,EAAQ,IAC1BD,EAAQ,IAAMC,EAAQ,IACtBD,EAAQ,IAAMC,EAAQ,IACtBD,EAAQ,IAAMC,EAAQ,GAQvB,SAAStzB,EAAQyyB,GACpB,OAAOA,EAAO,GAAKA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAOhD,SAASoF,EAAepF,EAAQI,GACnC,OAAIA,GACAA,EAAW,GAAKJ,EAAO,GACvBI,EAAW,GAAKJ,EAAO,GACvBI,EAAW,GAAKJ,EAAO,GACvBI,EAAW,GAAKJ,EAAO,GAChBI,GAGAJ,EAOR,SAASqF,EAAgBrF,EAAQluD,GACpC,IAAIwzD,GAAWtF,EAAO,GAAKA,EAAO,IAAM,GAAMluD,EAAQ,GAClDyzD,GAAWvF,EAAO,GAAKA,EAAO,IAAM,GAAMluD,EAAQ,GACtDkuD,EAAO,IAAMsF,EACbtF,EAAO,IAAMsF,EACbtF,EAAO,IAAMuF,EACbvF,EAAO,IAAMuF,EAUV,SAASC,EAAkBxF,EAAQj9C,EAAO1M,GAC7C,IAAI4uD,GAAa,EACbQ,EAAW3E,EAAuBd,EAAQj9C,GAC1C2iD,EAAS5E,EAAuBd,EAAQ3pD,GAC5C,GAAIovD,IAAa,IAAahE,cAC1BiE,IAAW,IAAajE,aACxBwD,GAAa,MAEZ,CACD,IAAIlE,EAAOf,EAAO,GACdgB,EAAOhB,EAAO,GACdiB,EAAOjB,EAAO,GACdkB,EAAOlB,EAAO,GACd3K,EAAStyC,EAAM,GACfuyC,EAASvyC,EAAM,GACf4iD,EAAOtvD,EAAI,GACXuvD,EAAOvvD,EAAI,GACXwvD,GAASD,EAAOtQ,IAAWqQ,EAAOtQ,GAClCvhD,OAAI,EAAQkjB,OAAI,EACb0uC,EAAS,IAAalE,SAAYiE,EAAW,IAAajE,SAG7DyD,GADAnxD,EAAI6xD,GAAQC,EAAO1E,GAAQ2E,IACT9E,GAAQjtD,GAAKmtD,GAE9BgE,KACES,EAAS,IAAapE,QACvBmE,EAAW,IAAanE,QAG1B2D,GADAjuC,EAAI4uC,GAAQD,EAAO1E,GAAQ4E,IACT7E,GAAQhqC,GAAKkqC,GAE9B+D,KACES,EAAS,IAAanE,QACvBkE,EAAW,IAAalE,QAG1B0D,GADAnxD,EAAI6xD,GAAQC,EAAO5E,GAAQ6E,IACT9E,GAAQjtD,GAAKmtD,GAE9BgE,KACES,EAAS,IAAarE,OACvBoE,EAAW,IAAapE,OAG1B4D,GADAjuC,EAAI4uC,GAAQD,EAAO5E,GAAQ8E,IACT7E,GAAQhqC,GAAKkqC,GAGvC,OAAO+D,EAaJ,SAASa,EAAe9F,EAAQ+F,EAAa3F,EAAY4F,GAC5D,IAAIjG,EAAc,GAClB,GAAIiG,EAAY,EAGZ,IAFA,IAAIjZ,EAAQiT,EAAO,GAAKA,EAAO,GAC3BhT,EAASgT,EAAO,GAAKA,EAAO,GACvB5wD,EAAI,EAAGA,EAAI42D,IAAa52D,EAC7B2wD,EAAYhsD,KAAKisD,EAAO,GAAMjT,EAAQ39C,EAAK42D,EAAWhG,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAMhT,EAAS59C,EAAK42D,EAAWhG,EAAO,GAAMjT,EAAQ39C,EAAK42D,EAAWhG,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAMhT,EAAS59C,EAAK42D,QAI5MjG,EAAc,CACVC,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,IAGf+F,EAAYhG,EAAaA,EAAa,GAGtC,IAFA,IAAIkG,EAAK,GACLC,EAAK,GACOt0D,GAAPxC,EAAI,EAAO2wD,EAAY/xD,QAAQoB,EAAIwC,EAAGxC,GAAK,EAChD62D,EAAGlyD,KAAKgsD,EAAY3wD,IACpB82D,EAAGnyD,KAAKgsD,EAAY3wD,EAAI,IAE5B,OArtBJ,SAA4B62D,EAAIC,EAAI9F,GAKhC,OAAOsB,EAJIv4C,KAAK6K,IAAI7kB,MAAM,KAAM82D,GACrB98C,KAAK6K,IAAI7kB,MAAM,KAAM+2D,GACrB/8C,KAAK8K,IAAI9kB,MAAM,KAAM82D,GACrB98C,KAAK8K,IAAI9kB,MAAM,KAAM+2D,GACc9F,GAgtBvC+F,CAAmBF,EAAIC,EAAI9F,GAU/B,SAASgG,EAAMpG,EAAQqG,GAC1B,IAAIC,EAAmBD,EAAWE,YAC9B5C,EAAST,EAAUlD,GACvB,GAAIqG,EAAWG,aACV7C,EAAO,GAAK2C,EAAiB,IAAM3C,EAAO,IAAM2C,EAAiB,IAAK,CACvE,IAAIG,EAAazD,EAASsD,GAEtB11D,EADauY,KAAKC,OAAOu6C,EAAO,GAAK2C,EAAiB,IAAMG,GACtCA,EAC1BzG,EAAO,IAAMpvD,EACbovD,EAAO,IAAMpvD,EAEjB,OAAOovD,I,iBC1wBX,UAAO,CAAC,OAAY,aA0HnB,KA1H6B,EAAF,SAAW3vD,EAAQlD,GAC9C,IAKCu5D,EALGzsD,EAAMG,SACTusD,EAAc,CAAE,OAAU,EAAG,SAAY,GACzCC,EAAyC,iBAAlB3sD,EAAImqB,WAC3B11B,IAAUi4D,EAAY1sD,EAAImqB,YAC1ByiC,EAAS,GAGV,SAASx5D,EAASyB,GAGjB+3D,EAAO9yD,KAAKjF,GACTJ,GAAQo4D,IAkBZ,SAASA,IAGR,IAAGJ,EAAH,CAGA,IAFAA,GAAiB,EAEXG,EAAO74D,QACZ,IACE64D,EAAO14D,OAAR,CAAiB8L,GACjB,MAAM8sD,GACNxuD,QAAQ4rB,MAAM4iC,EAAK,uBAAwBA,EAAIpiD,OAIjD+hD,GAAiB,EAIjBr5D,EAASoB,aAGV,GArCApB,EAASomD,KAAO,SAASt8C,EAAI6vD,EAAKvT,GACjCpmD,EAASomD,IAIVpmD,EAASU,GAAK84D,EACdx5D,EAASoB,UAAY,aAQlBm4D,IAAgB3sD,EAAImqB,WAAa,YAuBhC11B,EAAM,CACT,IAAIu4D,EAAQ,GACXC,EAAc,SAASjpD,GACtBA,EAAMA,GAAO5N,EAAO4M,MACjBvO,GAAsB,oBAAZuP,EAAIzD,OAA+BmsD,EAAY1sD,EAAImqB,cAG7DwiC,IAAgB3sD,EAAImqB,WAAa,YAEpC11B,EAAQ,EACRo4D,MAEDt4D,EAAK,SAASiO,EAAMQ,GACnBR,EAAKd,iBAAiBsB,EAAOiqD,GAAa,GAC1CL,EAAO9yD,MAAK,WAAY0I,EAAKV,oBAAoBkB,EAAOiqD,GAAa,OAGvE,IAAI/5D,EAAI,wBAAwB,CAC/BqB,EAAK,SAASiO,EAAMQ,GACnBA,EAAQ,KAAOA,EACfR,EAAKR,YAAYgB,EAAOiqD,GACxBL,EAAO9yD,MAAK,WAAY0I,EAAK0qD,YAAYlqD,EAAOiqD,OAGjD,IAAIE,EAAMntD,EAAI83B,cAAc,OAC5B,IACIq1B,EAAIC,UAAoC,OAAxBh3D,EAAOi3D,cAEzBL,EAAMlzD,MAAK,WAGV,IAEC,OADAqzD,EAAIC,SAAS,QACN,EACP,MAAMj5D,QAGT,MAAMA,KAiBR,GAdAI,EAAGyL,EAAK,oBACRzL,EAAG6B,EAAQ,QAER,uBAAwB4J,EAC1BzL,EAAGyL,EAAK,oBACC2sD,GAITK,EAAMlzD,MAAK,WACV,OAAO4yD,EAAY1sD,EAAImqB,eAItB6iC,EAAMj5D,OAAO,CACf,IAAIu5D,EAAS,WACZ,IAAG74D,EAAH,CAEA,IADA,IAAIU,EAAI63D,EAAMj5D,OACRoB,KACL,GAAG63D,EAAM73D,KAER,YADA83D,EAAY,UAIdjoD,WAAWsoD,EAAQ,MAEpBA,KAIF,OAAOl6D,GACP,+B,8BC1HD,yMA4IIm6D,EAAuB,WAIvB,SAASA,EAAMC,GACX,IAAIl6C,EAAUk6C,GAAe,GAK7Bl0D,KAAKm0D,UAAY,KAKjBn0D,KAAKo0D,kBAAoBC,OACA51D,IAArBub,EAAQs6C,UACRt0D,KAAKu0D,YAAYv6C,EAAQs6C,UAM7Bt0D,KAAKw0D,WAAyB/1D,IAAjBub,EAAQy6C,KAAqBz6C,EAAQy6C,KAAO,KAKzDz0D,KAAK00D,YAA2Bj2D,IAAlBub,EAAQ26C,MAAsB36C,EAAQ26C,MAAQ,KAK5D30D,KAAK40D,eAAiCn2D,IAArBub,EAAQ66C,SAAyB76C,EAAQ66C,SAAW,KAKrE70D,KAAK80D,aAA6Br2D,IAAnBub,EAAQ+6C,OAAuB/6C,EAAQ+6C,OAAS,KAK/D/0D,KAAKg1D,WAAyBv2D,IAAjBub,EAAQ4F,KAAqB5F,EAAQ4F,KAAO,KAKzD5f,KAAKi1D,QAAUj7C,EAAQk7C,OAsK3B,OA/JAjB,EAAM/2D,UAAUwD,MAAQ,WACpB,IAAI4zD,EAAWt0D,KAAKm1D,cAIpB,OAHIb,GAAgC,iBAAbA,IACnBA,EAAgE,EAAW5zD,SAExE,IAAIuzD,EAAM,CACbK,SAAUA,EACVG,KAAMz0D,KAAKo1D,UAAYp1D,KAAKo1D,UAAU10D,aAAUjC,EAChDk2D,MAAO30D,KAAKq1D,WAAar1D,KAAKq1D,WAAW30D,aAAUjC,EACnDs2D,OAAQ/0D,KAAKs1D,YAAct1D,KAAKs1D,YAAY50D,aAAUjC,EACtDmhB,KAAM5f,KAAKu1D,UAAYv1D,KAAKu1D,UAAU70D,aAAUjC,EAChDy2D,OAAQl1D,KAAKw1D,eASrBvB,EAAM/2D,UAAUu4D,YAAc,WAC1B,OAAOz1D,KAAK40D,WAQhBX,EAAM/2D,UAAUw4D,YAAc,SAAUb,GACpC70D,KAAK40D,UAAYC,GASrBZ,EAAM/2D,UAAUi4D,YAAc,WAC1B,OAAOn1D,KAAKm0D,WAQhBF,EAAM/2D,UAAUy4D,oBAAsB,WAClC,OAAO31D,KAAKo0D,mBAOhBH,EAAM/2D,UAAUk4D,QAAU,WACtB,OAAOp1D,KAAKw0D,OAOhBP,EAAM/2D,UAAU04D,QAAU,SAAUnB,GAChCz0D,KAAKw0D,MAAQC,GAOjBR,EAAM/2D,UAAUm4D,SAAW,WACvB,OAAOr1D,KAAK00D,QAOhBT,EAAM/2D,UAAU24D,SAAW,SAAUlB,GACjC30D,KAAK00D,OAASC,GAOlBV,EAAM/2D,UAAUo4D,UAAY,WACxB,OAAOt1D,KAAK80D,SAOhBb,EAAM/2D,UAAU44D,UAAY,SAAUf,GAClC/0D,KAAK80D,QAAUC,GAOnBd,EAAM/2D,UAAUq4D,QAAU,WACtB,OAAOv1D,KAAKg1D,OAOhBf,EAAM/2D,UAAU64D,QAAU,SAAUn2C,GAChC5f,KAAKg1D,MAAQp1C,GAOjBq0C,EAAM/2D,UAAUs4D,UAAY,WACxB,OAAOx1D,KAAKi1D,SAUhBhB,EAAM/2D,UAAUq3D,YAAc,SAAUD,GACZ,mBAAbA,EACPt0D,KAAKo0D,kBAAoBE,EAEA,iBAAbA,EACZt0D,KAAKo0D,kBAAoB,SAAU4B,GAC/B,OAA6DA,EAAQriC,IAAI2gC,IAGvEA,OAGY71D,IAAb61D,IACLt0D,KAAKo0D,kBAAoB,WACrB,OAA4D,IAJhEp0D,KAAKo0D,kBAAoBC,EAO7Br0D,KAAKm0D,UAAYG,GAQrBL,EAAM/2D,UAAU+4D,UAAY,SAAUf,GAClCl1D,KAAKi1D,QAAUC,GAEZjB,EAtNe,GAgOnB,SAASiC,EAAW94D,GACvB,IAAI+4D,EACJ,GAAmB,mBAAR/4D,EACP+4D,EAAgB/4D,MAEf,CAID,IAAIg5D,EACJ,GAAI54D,MAAMvB,QAAQmB,GACdg5D,EAAWh5D,OAGX,YAAqD,mBAArB,EAAe,UAAkB,IAEjEg5D,EAAW,CADsB,GAGrCD,EAAgB,WACZ,OAAOC,GAGf,OAAOD,EAKX,IAAIE,EAAgB,KAMb,SAASC,EAAmBN,EAAS3F,GAMxC,IAAKgG,EAAe,CAChB,IAAI5B,EAAO,IAAI,UAAK,CAChB8B,MAAO,0BAEPxB,EAAS,IAAI,UAAO,CACpBwB,MAAO,UACP/c,MAAO,OAEX6c,EAAgB,CACZ,IAAIpC,EAAM,CACNU,MAAO,IAAI,UAAY,CACnBF,KAAMA,EACNM,OAAQA,EACR7nB,OAAQ,IAEZunB,KAAMA,EACNM,OAAQA,KAIpB,OAAOsB,EAMJ,SAASG,IAEZ,IAAI73B,EAAS,GACT83B,EAAQ,CAAC,IAAK,IAAK,IAAK,GACxBC,EAAO,CAAC,EAAG,IAAK,IAAK,GA2CzB,OAzCA/3B,EAAO,UAAag4B,SAAW,CAC3B,IAAI1C,EAAM,CACNQ,KAAM,IAAI,UAAK,CACX8B,MAAO,CAAC,IAAK,IAAK,IAAK,SAInC53B,EAAO,UAAai4B,eAAiBj4B,EAAO,UAAag4B,SACzDh4B,EAAO,UAAak4B,aAAe,CAC/B,IAAI5C,EAAM,CACNc,OAAQ,IAAI,UAAO,CACfwB,MAAOE,EACPjd,MAAOA,MAGf,IAAIya,EAAM,CACNc,OAAQ,IAAI,UAAO,CACfwB,MAAOG,EACPld,MAnBA,OAuBZ7a,EAAO,UAAam4B,mBAAqBn4B,EAAO,UAAak4B,aAC7Dl4B,EAAO,UAAao4B,QAAUp4B,EAAO,UAAag4B,SAASp5D,OAAOohC,EAAO,UAAak4B,cACtFl4B,EAAO,UAAaq4B,OAAS,CACzB,IAAI/C,EAAM,CACNU,MAAO,IAAI,UAAY,CACnBznB,OAAQsM,EACRib,KAAM,IAAI,UAAK,CACX8B,MAAOG,IAEX3B,OAAQ,IAAI,UAAO,CACfwB,MAAOE,EACPjd,MAAOA,QAGf0b,OAAQrvC,OAGhB8Y,EAAO,UAAas4B,aAAet4B,EAAO,UAAaq4B,OACvDr4B,EAAO,UAAau4B,qBAAuBv4B,EAAO,UAAag4B,SAASp5D,OAAOohC,EAAO,UAAak4B,aAAcl4B,EAAO,UAAaq4B,QAC9Hr4B,EAOX,SAAS01B,EAAwB2B,GAC7B,OAAOA,EAAQb,cAEJ,a,gmDCreP1sB,E,2BADJC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAoB5EsuB,EALS,QAKGvhD,KAAKwhD,GAKjBC,EAAS,EAAEF,GAAYA,EAAWA,EAAWA,GAK7CG,EAAe,EAAE,KAAM,GAAI,IAAK,IAMhCC,EArBS,QAqBa3hD,KAAK3Q,IAAI2Q,KAAK4hD,IAAI5hD,KAAKwhD,GAAK,IAKzD,EAAoC,SAAUhuB,GAK9C,SAASquB,EAAmBC,GACxB,OAAOtuB,EAAO1rC,KAAKsC,KAAM,CACrB03D,KAAMA,EACNC,MAAOC,EAAA,EAAMC,OACbpL,OAAQ4K,EACRv6D,QAAQ,EACRg7D,YAAaR,EACbS,mBAAoB,SAAU1H,EAAY1P,GACtC,OAAO0P,EAAa,YAAK1P,EAAM,GAvC3B,aAyCN3gD,KAEV,OAhBA0oC,EAAU+uB,EAAoBruB,GAgBvBquB,EAjB4B,CAkBrCO,EAAA,GAOSC,EAAc,CACrB,IAAI,EAAmB,aACvB,IAAI,EAAmB,eACvB,IAAI,EAAmB,eACvB,IAAI,EAAmB,eACvB,IAAI,EAAmB,iDAUpB,SAASC,EAAaC,EAAOC,EAAYC,GAC5C,IAAI59D,EAAS09D,EAAM19D,OACf69D,EAAYD,EAAgB,EAAIA,EAAgB,EAChDE,EAASH,OACE35D,IAAX85D,IAGIA,EAFAD,EAAY,EAEHH,EAAM16D,QAGN,IAAID,MAAM/C,IAG3B,IAAK,IAAIoB,EAAI,EAAGA,EAAIpB,EAAQoB,GAAKy8D,EAAW,CACxCC,EAAO18D,GAAMs7D,EAAYgB,EAAMt8D,GAAM,IACrC,IAAI4nB,EAjFQ,QAiFK7N,KAAK3Q,IAAI2Q,KAAK4hD,IAAK5hD,KAAKwhD,KAAOe,EAAMt8D,EAAI,GAAK,IAAO,MAClE4nB,EAAI8zC,EACJ9zC,EAAI8zC,EAEC9zC,GAAK8zC,IACV9zC,GAAK8zC,GAETgB,EAAO18D,EAAI,GAAK4nB,EAEpB,OAAO80C,EAUJ,SAASC,EAAWL,EAAOC,EAAYC,GAC1C,IAAI59D,EAAS09D,EAAM19D,OACf69D,EAAYD,EAAgB,EAAIA,EAAgB,EAChDE,EAASH,OACE35D,IAAX85D,IAGIA,EAFAD,EAAY,EAEHH,EAAM16D,QAGN,IAAID,MAAM/C,IAG3B,IAAK,IAAIoB,EAAI,EAAGA,EAAIpB,EAAQoB,GAAKy8D,EAC7BC,EAAO18D,GAAM,IAAMs8D,EAAMt8D,GAAMs7D,EAC/BoB,EAAO18D,EAAI,GACN,IAAM+Z,KAAK6iD,KAAK7iD,KAAK+gB,IAAIwhC,EAAMt8D,EAAI,GApH5B,UAoH6C+Z,KAAKwhD,GAAK,GAEvE,OAAOmB,EC/IX,IAAI,EAAwC,WACxC,IAAI9vB,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAE5B,OAAO,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,IAV3C,GA+BjC,EAAS,EAAE,KAAM,GAAI,IAAK,IAK1B6vB,EAZS,QAYU9iD,KAAKwhD,GAAe,IAS9C,EAAoC,SAAUhuB,GAM9C,SAASuvB,EAAmBjB,EAAMkB,GAC9B,OAAOxvB,EAAO1rC,KAAKsC,KAAM,CACrB03D,KAAMA,EACNC,MAAOC,EAAA,EAAMiB,QACbpM,OAAQ,EACRqM,gBAAiBF,EACjB97D,QAAQ,EACRi8D,cAAeL,EACfZ,YAAa,KACX93D,KAEV,OAhBA,EAAU24D,EAAoBvvB,GAgBvBuvB,EAjB4B,CAkBrCX,EAAA,GAOS,EAAc,CACrB,IAAI,EAAmB,UACvB,IAAI,EAAmB,YAAa,OACpC,IAAI,EAAmB,iCACvB,IAAI,EAAmB,4BACvB,IAAI,EAAmB,+CAAgD,QCrEvEr2D,EAAQ,G,wCCkFL,SAASq3D,EAAeb,EAAOC,EAAYC,GAC9C,IAAIE,EACJ,QAAmB95D,IAAf25D,EAA0B,CAC1B,IAAK,IAAIv8D,EAAI,EAAG8a,EAAKwhD,EAAM19D,OAAQoB,EAAI8a,IAAM9a,EACzCu8D,EAAWv8D,GAAKs8D,EAAMt8D,GAE1B08D,EAASH,OAGTG,EAASJ,EAAM16D,QAEnB,OAAO86D,EAQJ,SAASU,EAAkBd,EAAOC,EAAYC,GACjD,QAAmB55D,IAAf25D,GAA4BD,IAAUC,EAAY,CAClD,IAAK,IAAIv8D,EAAI,EAAG8a,EAAKwhD,EAAM19D,OAAQoB,EAAI8a,IAAM9a,EACzCu8D,EAAWv8D,GAAKs8D,EAAMt8D,GAE1Bs8D,EAAQC,EAEZ,OAAOD,EASJ,SAASe,EAAcpG,ID/FvB,SAAa4E,EAAM5E,GACtBnxD,EAAM+1D,GAAQ5E,EC+Fd/2D,CAAQ+2D,EAAWqG,UAAWrG,GAC9B,YAAiBA,EAAYA,EAAYkG,GAKtC,SAASI,EAAeC,GAC3BA,EAAYp2D,QAAQi2D,GAWjB,SAAS,EAAII,GAChB,MAAiC,iBAAnBA,ED5HN33D,EADQ+1D,EC8HoB,ID5HhC/1D,EAAM+1D,EAAKr2D,QAAQ,yCAA0C,aAC7D,KC4H4B,GAAoB,KD/HjD,IAAaq2D,ECqJb,SAASK,EAAmBjF,EAAYzC,EAAY1P,EAAO4Y,GAE9D,IAAIC,EACAC,GAFJ3G,EAAa,EAAIA,IAEO4G,yBACxB,GAAID,EAAQ,CAER,GADAD,EAAkBC,EAAOpJ,EAAY1P,GACjC4Y,GAAaA,IAAczG,EAAW6G,YAClCZ,EAAgBjG,EAAW8G,sBAE3BJ,EACKA,EAAkBT,EAAiB,IAAgBQ,QAI/D,CACD,IAAI5B,EAAQ7E,EAAW6G,WACvB,GAAKhC,GAASC,EAAA,EAAMiB,UAAYU,GAAcA,GAAa3B,EAAA,EAAMiB,QAC7DW,EAAkBnJ,MAEjB,CAID,IAqBI0I,EArBAc,EAAeC,EAA4BhH,EAAY,EAAI,cAC/D,GAAI+G,IAAiBZ,GAAqBtB,IAAUC,EAAA,EAAMiB,QAEtDW,EAAkBnJ,EAAayC,EAAW8G,uBAEzC,CACD,IAAIG,EAAW,CACXpZ,EAAM,GAAK0P,EAAa,EACxB1P,EAAM,GACNA,EAAM,GAAK0P,EAAa,EACxB1P,EAAM,GACNA,EAAM,GACNA,EAAM,GAAK0P,EAAa,EACxB1P,EAAM,GACNA,EAAM,GAAK0P,EAAa,GAE5B0J,EAAWF,EAAaE,EAAUA,EAAU,GAG5CP,GAFY,YAAYO,EAASt8D,MAAM,EAAG,GAAIs8D,EAASt8D,MAAM,EAAG,IACnD,YAAYs8D,EAASt8D,MAAM,EAAG,GAAIs8D,EAASt8D,MAAM,EAAG,KAC5B,OAKnBgB,KAHlBs6D,EAAgBQ,EACd,IAAgBA,GAChBzG,EAAW8G,sBAEbJ,GAAmBT,IAI/B,OAAOS,EASJ,SAASQ,EAAyBX,GACrCD,EAAeC,GACfA,EAAYp2D,SAAQ,SAAUnF,GAC1Bu7D,EAAYp2D,SAAQ,SAAU4M,GACtB/R,IAAW+R,GACX,YAAiB/R,EAAQ+R,EAAampD,SAkB/C,SAASiB,EAAwBC,EAAcC,EAAcC,EAAkBC,GAClFH,EAAaj3D,SAAQ,SAAUq3D,GAC3BH,EAAal3D,SAAQ,SAAUs3D,GAC3B,YAAiBD,EAAaC,EAAaH,GAC3C,YAAiBG,EAAaD,EAAaD,SAOhD,SAASG,ID3PZ74D,EAAQ,GC6PR,cAOG,SAAS84D,EAAiB3H,EAAY4H,GACzC,OAAK5H,EAG0B,iBAAfA,EACL,EAAIA,GAGsB,EAN1B,EAAI4H,GAgBZ,SAASC,EAAuCC,GACnD,OAAO,SAOGzC,EAAOC,EAAYC,GAIzB,IAHA,IAAI59D,EAAS09D,EAAM19D,OACf69D,OAA8B75D,IAAlB45D,EAA8BA,EAAgB,EAC1DE,OAAwB95D,IAAf25D,EAA2BA,EAAa,IAAI56D,MAAM/C,GACtDoB,EAAI,EAAGA,EAAIpB,EAAQoB,GAAKy8D,EAAW,CACxC,IAAI3X,EAAQia,EAAe,CAACzC,EAAMt8D,GAAIs8D,EAAMt8D,EAAI,KAChD08D,EAAO18D,GAAK8kD,EAAM,GAClB4X,EAAO18D,EAAI,GAAK8kD,EAAM,GACtB,IAAK,IAAIrqC,EAAIgiD,EAAY,EAAGhiD,GAAK,IAAKA,EAClCiiD,EAAO18D,EAAIya,GAAK6hD,EAAMt8D,EAAIya,GAGlC,OAAOiiD,GAsBR,SAASsC,EAAwB/8D,EAAQ+R,EAAairD,EAASC,GAClE,IAAIC,EAAa,EAAIl9D,GACjBm9D,EAAW,EAAIprD,GACnB,YAAiBmrD,EAAYC,EAAUN,EAAuCG,IAC9E,YAAiBG,EAAUD,EAAYL,EAAuCI,IAW3E,SAASG,EAAWhO,EAAYiO,GACnC,OAAO,EAAUjO,EAAY,iBAAgCzuD,IAAnB08D,EAA+BA,EAAiB,aAWvF,SAASC,EAASlO,EAAYiO,GACjC,IAAIE,EAAS,EAAUnO,OAA+BzuD,IAAnB08D,EAA+BA,EAAiB,YAAa,aAC5FG,EAAMD,EAAO,GAIjB,OAHIC,GAAO,KAAOA,EAAM,OACpBD,EAAO,GAAK,YAAOC,EAAM,IAAK,KAAO,KAElCD,EAYJ,SAASE,EAAWjB,EAAaC,GACpC,GAAID,IAAgBC,EAChB,OAAO,EAEX,IAAIiB,EAAalB,EAAYX,aAAeY,EAAYZ,WACxD,OAAIW,EAAYnB,YAAcoB,EAAYpB,WAIlBW,EAA4BQ,EAAaC,KACpCvB,IAJlBwC,EAgBR,SAAS1B,EAA4B2B,EAAkBC,GAC1D,IAAIC,EAAaF,EAAiBtC,UAC9ByC,EAAkBF,EAAsBvC,UACxC0C,EAAgB,YAAiBF,EAAYC,GAIjD,OAHKC,IACDA,EAAgB5C,GAEb4C,EAYJ,SAASC,EAAah+D,EAAQ+R,GAGjC,OAAOiqD,EAFgB,EAAIh8D,GACC,EAAI+R,IAiB7B,SAAS,EAAUq9C,EAAYpvD,EAAQ+R,GAE1C,OADoBisD,EAAah+D,EAAQ+R,EAClCgsD,CAAc3O,OAAYzuD,EAAWyuD,EAAWzyD,QAcpD,SAASshE,EAAgBtP,EAAQ3uD,EAAQ+R,EAAa4iD,GACzD,IAAIoJ,EAAgBC,EAAah+D,EAAQ+R,GACzC,OAAO,yBAAe48C,EAAQoP,OAAep9D,EAAWg0D,GAUrD,SAASuJ,EAAyBrb,EAAO8a,EAAkBC,GAE9D,OADoB5B,EAA4B2B,EAAkBC,EAC3DG,CAAclb,GAKzB,IAAIsb,EAAiB,KAOd,SAASC,EAAkBpJ,GAC9BmJ,EAAiB,EAAInJ,GAOlB,SAASqJ,IACZF,EAAiB,KAQd,SAASG,IACZ,OAAOH,EAOJ,SAASI,IACZH,EAAkB,aASf,SAASI,EAAiBpP,EAAYuO,GACzC,OAAKQ,EAGE,EAAU/O,EAAYuO,EAAkBQ,GAFpC/O,EAWR,SAASqP,EAAmBrP,EAAYsP,GAC3C,OAAKP,EAGE,EAAU/O,EAAY+O,EAAgBO,GAFlCtP,EAWR,SAASuP,EAAahQ,EAAQgP,GACjC,OAAKQ,EAGEF,EAAgBtP,EAAQgP,EAAkBQ,GAFtCxP,EAWR,SAASiQ,GAAejQ,EAAQ+P,GACnC,OAAKP,EAGEF,EAAgBtP,EAAQwP,EAAgBO,GAFpC/P,EAcR,SAASkQ,GAA8B3B,EAAYC,EAAUztB,GAChE,OAAO,SAAU4Q,GACb,IAEIwe,EAAaC,EAFbC,EAAU1e,EAAM,GAChB2e,EAAU3e,EAAM,GAEpB,GAAI4c,EAAW/H,WAAY,CACvB,IAAI+J,EAAehC,EAAWhI,YAC1BiK,EAAoB,mBAASD,IACjCH,EAAa,YAAcze,EAAO4c,EAAYiC,MAG1CH,GAAoBD,EAAaI,GAErCH,EAAU,YAAMA,EAASE,EAAa,GAAIA,EAAa,IACvDD,EAAU,YAAMA,EAASC,EAAa,GAAIA,EAAa,IACvDJ,EAAcpvB,EAAU,CAACsvB,EAASC,SAGlCH,EAAcpvB,EAAU4Q,GAM5B,OAJIye,GAAc5B,EAAShI,aAEvB2J,EAAY,IAAMC,EAAa,mBAAS5B,EAASjI,cAE9C4J,GAQR,SAASM,KAGZlD,EAAyB,GACzBA,EAAyB,GAGzBC,EAAwB,EAAsB,EAAsB/B,EAAcM,GAEtF0E,M,+BCjmBA,OASe,WACXlG,MAAO,QACPH,YAAa,aACbsG,YAAa,aACbxG,QAAS,UACTM,YAAa,aACbH,kBAAmB,kBACnBF,cAAe,eACfM,oBAAqB,qBACrBH,OAAQ,W,6BChBZ95D,OAAOy2B,eAAe0pC,EAAS,aAAc,CAC3C7+D,OAAO,IAET6+D,EAAQC,QAER,SAAsBC,EAAUv9D,GAC9B,GAAIA,EAAKtF,OAAS6iE,EAChB,MAAM,IAAIC,UAAUD,EAAW,aAAeA,EAAW,EAAI,IAAM,IAAM,uBAAyBv9D,EAAKtF,OAAS,aAIpH8I,EAAO65D,QAAUA,EAAQC,S,6BCbzB,+DACQ50B,EADR,oCAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KA6DnF20B,EAAyB,SAAUp0B,GAQnC,SAASo0B,EAAQC,GACb,IAAIxlD,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KA4BjC,GAvBAiY,EAAMylD,SAAMj/D,EAKZwZ,EAAM0lD,cAAgB,WAMtB1lD,EAAM2lD,OAAS,KAKf3lD,EAAM4lD,oBAAiBp/D,EAKvBwZ,EAAM6lD,mBAAqB,KAC3B7lD,EAAM7P,iBAAiB,YAAmB6P,EAAM0lD,eAAgB1lD,EAAM8lD,wBAClEN,EACA,GACuE,mBAAtD,EAAgD,sBAAkB,CAC/E,IAAInJ,EAAmC,EACvCr8C,EAAMs8C,YAAYD,OAEjB,CAED,IAAI71B,EAAag/B,EACjBxlD,EAAMurB,cAAc/E,GAG5B,OAAOxmB,EA8IX,OA9LAywB,EAAU80B,EAASp0B,GAwDnBo0B,EAAQtgE,UAAUwD,MAAQ,WACtB,IAAIA,EAAQ,IAAI88D,EAAQx9D,KAAKg+D,gBAAkBh+D,KAAKi+D,gBAAkB,MACtEv9D,EAAMw9D,gBAAgBl+D,KAAKm+D,mBAC3B,IAAI7J,EAAWt0D,KAAKm1D,cAChBb,GACA5zD,EAAM6zD,YAAYD,EAAS5zD,SAE/B,IAAIuN,EAAQjO,KAAKo+D,WAIjB,OAHInwD,GACAvN,EAAM29D,SAASpwD,GAEZvN,GAUX88D,EAAQtgE,UAAUi4D,YAAc,WAC5B,OAA0Cn1D,KAAK2zB,IAAI3zB,KAAK29D,gBAS5DH,EAAQtgE,UAAUohE,MAAQ,WACtB,OAAOt+D,KAAK09D,KAShBF,EAAQtgE,UAAUihE,gBAAkB,WAChC,OAAOn+D,KAAK29D,eAQhBH,EAAQtgE,UAAUkhE,SAAW,WACzB,OAAOp+D,KAAK49D,QAQhBJ,EAAQtgE,UAAUqhE,iBAAmB,WACjC,OAAOv+D,KAAK69D,gBAKhBL,EAAQtgE,UAAUshE,sBAAwB,WACtCx+D,KAAKy+D,WAKTjB,EAAQtgE,UAAU6gE,uBAAyB,WACnC/9D,KAAK89D,qBACL,YAAc99D,KAAK89D,oBACnB99D,KAAK89D,mBAAqB,MAE9B,IAAIxJ,EAAWt0D,KAAKm1D,cAChBb,IACAt0D,KAAK89D,mBAAqB,YAAOxJ,EAAU,IAAUoK,OAAQ1+D,KAAKw+D,sBAAuBx+D,OAE7FA,KAAKy+D,WASTjB,EAAQtgE,UAAUq3D,YAAc,SAAUD,GACtCt0D,KAAK6zB,IAAI7zB,KAAK29D,cAAerJ,IAWjCkJ,EAAQtgE,UAAUmhE,SAAW,SAAUM,GACnC3+D,KAAK49D,OAASe,EACd3+D,KAAK69D,eAAkBc,EAEjBC,EAAoBD,QADpBlgE,EAENuB,KAAKy+D,WAWTjB,EAAQtgE,UAAUglC,MAAQ,SAAUt+B,GAChC5D,KAAK09D,IAAM95D,EACX5D,KAAKy+D,WASTjB,EAAQtgE,UAAUghE,gBAAkB,SAAUlgE,GAC1CgC,KAAKwI,oBAAoB,YAAmBxI,KAAK29D,eAAgB39D,KAAK+9D,wBACtE/9D,KAAK29D,cAAgB3/D,EACrBgC,KAAKoI,iBAAiB,YAAmBpI,KAAK29D,eAAgB39D,KAAK+9D,wBACnE/9D,KAAK+9D,0BAEFP,EA/LiB,CAgM1B,KASK,SAASoB,EAAoBxhE,GAChC,MAAmB,mBAARA,EACAA,GAOHI,MAAMvB,QAAQmB,GACdg5D,EAAWh5D,GAGX,YAAqD,mBAArB,EAAe,UAAkB,IAEjEg5D,EAAW,CADmD,IAG3D,WACH,OAAOA,IAVX,IAAIA,EAcG,a,mBCtSf,UAAO,CACN,OACA,MACA,OACA,OACA,aA0TA,KAzTE,EAAF,SAAWx8D,EAAKG,EAAM8kE,EAAa1vC,EAAS2vC,GAC5C,aAKA,IAGIC,EAA0B,4CAE1BC,EAAe/hE,OAAOgiE,QAAU,aAEhCC,EAAgB,SAASC,EAASl4D,EAAM7E,EAAQg9D,EAAWC,GAC3DzlE,EAAI,mCANK,IAORqN,GAAqBq4D,EAASC,oBAAyC,IAAnBJ,EAAQ1kE,QAC9D6kE,EAASC,mBAAmBn9D,GAAQ,EAAOg9D,EAAWC,GAIxD,IAAI,IAAIxjE,EAAI,EAAGA,EAAIsjE,EAAQ1kE,OAAQoB,IAClC2jE,EAAeL,EAAQtjE,GAAIoL,EAAM7E,EAAQg9D,IAIvCI,EAAiB,SAASt4D,EAAUD,EAAM7E,EAAQg9D,GACrD,IAAIK,EAAOv4D,EAASD,GAChBo4D,EAAWn4D,EAASm4D,SACxB,GAAGI,EACF,IACC,IAAIC,EAAYD,EAAKr9D,GACrB,GAzBY,IAyBT6E,OACsB,IAAdy4D,GACTC,EAAeN,EAAUp4D,EAAMy4D,OAE5B,CACJ,GAAGA,GAAuC,mBAAnBA,EAAUp4C,KAOhC,OANApgB,EAAS+nB,OAASywC,EAAUzwC,YAC5BywC,EAAUp4C,KAERs4C,EAAqBP,EAjCf,GAkCNO,EAAqBP,EAjCf,GAkCNO,EAAqBP,EApCb,IAuCXM,EAAeN,EAtCN,EAsC0BK,IAEpC,MAAM9uC,GACN+uC,EAAeN,EAxCL,EAwCyBzuC,QAGpC+uC,EAAeN,EAAUp4D,EAAM7E,GAG7BxI,EAAI,mCA9CK,IA+CRqN,GAAqBq4D,EAASC,oBAChCD,EAASC,mBAAmBn9D,IAAUq9D,EAAML,EAAWC,EAASh4C,UAK/Du4C,EAAuB,SAASP,EAAUp4D,GAC7C,OAAO,SAAS1I,GACfohE,EAAeN,EAAUp4D,EAAM1I,KAI7BohE,EAAiB,SAASN,EAAUp4D,EAAM7E,GAC7C,IAAIi9D,EAASQ,aACZ,OAAO54D,GACN,KAhEY,EAiEXo4D,EAASj0B,SAAShpC,GAClB,MACD,KAlEU,EAmETi9D,EAASjwC,QAAQhtB,GACjB,MACD,KApEU,EAqETi9D,EAAShwC,OAAOjtB,KAMhBk9D,EAAW,SAASQ,GAiBvB,IAGIC,EAAW39D,EAAQg9D,EAHnB/3C,EAAUrnB,KAAKqnB,QAAU,IAAI8H,EAE7BkwC,EAAWr/D,KAEXggE,GAAW,EACXb,EAAU,GAEXvlE,EAAI,mCAAqC+O,MAAMs3D,oBACjDt3D,MAAMs3D,kBAAkBZ,EAAUC,GAClC32D,MAAMs3D,kBAAkB54C,EAASi4C,IAGlCt/D,KAAKkgE,WAAa74C,EAAQ64C,WAAa,WAKtC,OA9GW,IA8GJH,GAGR//D,KAAKmgE,WAAa94C,EAAQ84C,WAAa,WAKtC,OArHW,IAqHJJ,GAGR//D,KAAKogE,YAAc/4C,EAAQ+4C,YAAc,WAKxC,QAASL,GAGV//D,KAAK6/D,WAAax4C,EAAQw4C,WAAa,WAKtC,OAAOG,GAGRhgE,KAAKorC,SAAW,SAASi1B,EAAQC,GAehC,GAAIP,EAGE,KAAc,IAAXO,EACR,MAAM,IAAI33D,MAAMo2D,GAEhB,OAAO13C,EAJP,OADA63C,EAAcC,EA1JF,EA0JqBkB,EAAQ,KAAMhB,GACxCh4C,GAQTrnB,KAAKovB,QAAU,SAAS7wB,EAAO+hE,GAa9B,GAAIP,EAME,KAAc,IAAXO,EACR,MAAM,IAAI33D,MAAMo2D,GAEhB,OAAO13C,EAJP,OAFA63C,EAAcC,EAASY,EAlLb,EAkLmC39D,EAAS7D,EAAO,KAAM8gE,GACnEF,EAAU,KACH93C,GAQT,IAAIgI,EAASrvB,KAAKqvB,OAAS,SAASuB,EAAO0vC,GAa1C,GAAIP,EAOE,KAAc,IAAXO,EACR,MAAM,IAAI33D,MAAMo2D,GAEhB,OAAO13C,EAJP,OALGztB,EAAI,mCAAqC+O,MAAMs3D,mBACjDt3D,MAAMs3D,kBAAkBb,EAAY,GAAI/vC,GAEzC6vC,EAAcC,EAASY,EA5Mb,EA4MmC39D,EAASwuB,EAAOwuC,EAAWC,GACxEF,EAAU,KACH93C,GAQTrnB,KAAKsnB,KAAOD,EAAQC,KAAO,SAAS/rB,EAAUglE,EAASC,GAmBtD,IAAIt5D,EAAW,CAACs5D,EAAUjlE,EAAUglE,GAcpC,OAXAr5D,EAAS+nB,OAAS5H,EAAQ4H,OAC1B/nB,EAASm4D,SAAW,IAAIC,GAAS,SAAS9uC,GAGzC,OAAOtpB,EAAS+nB,QAAU/nB,EAAS+nB,OAAOuB,MAExCuvC,IAAcZ,EAChBK,EAAet4D,EAAU64D,EAAW39D,EAAQg9D,GAE5CD,EAAQ3+D,KAAK0G,GAEPA,EAASm4D,SAASh4C,SAG1BrnB,KAAKivB,OAAS5H,EAAQ4H,OAAS,SAASuB,EAAQ8vC,GAkB/C,GAAIP,GAiBE,IAAc,IAAXO,EACR,MAAM,IAAI33D,MAAMo2D,OAlBH,CAEb,GAAGe,EAAS,CACX,IAAIW,EAAiBX,EAAStvC,GAC9BA,OAAmC,IAAnBiwC,EAAiCjwC,EAASiwC,EAG3D,GADAT,GAAW,GACPD,EAMH,YAJqB,IAAXvvC,IACTA,EAAS,IAAIquC,GAEdxvC,EAAOmB,GACAA,EACF,GA1RI,IA0RDuvC,GAA0B39D,IAAWouB,EAC7C,OAAOA,IAOVwuC,EAAa33C,IAcd,OAXAi4C,EAASpiE,UAAUZ,SAAW,WAI7B,MAAO,qBAGLwiE,GACFA,EAAgBQ,GAGVA,GACP,+B,kBC/TD,UAAO,CAAC,OAAY,YAmCnB,KAnC4B,EAAF,SAAWl5D,EAAQnL,GAI5C,aACA,IAAI+Q,EAAQ5F,EAAO4F,MACpB,SAAS00D,KA4BT,OAZAA,EAAQxjE,UAAY,CACnBjC,GAAI,SAASgM,EAAMC,GAClB,OAAOjM,EAAGmM,MAAMpH,KAAMiH,EAAMC,GAAU,SAASF,EAAQC,GACtD,OAAO+E,EAAMhF,EAAQ,KAAOC,EAAMC,GAAU,OAG9C2C,KAAM,SAAS5C,EAAMyC,GACpB,IAAI3J,EAAO,CAACC,MAEZ,OADAD,EAAKS,KAAK5E,MAAMmE,EAAMrE,WACfT,EAAG4O,KAAKjO,MAAMX,EAAI8E,KAGpB2gE,GACP,+B,+BCnCD,WAIQj4B,EAJR,SAGIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAsBnF83B,EAA6B,SAAUv3B,GAKvC,SAASu3B,EAAYzM,GACjB,IACIl6C,EAAUk6C,GAA4B,GAW1C,OAVQ9qB,EAAO1rC,KAAKsC,KAAM,CACtB4gE,OAAQ/6C,IACR4uC,KAAMz6C,EAAQy6C,KACdvnB,OAAQlzB,EAAQkzB,OAChB6nB,OAAQ/6C,EAAQ+6C,OAChBjoD,WAAyBrO,IAAlBub,EAAQlN,MAAsBkN,EAAQlN,MAAQ,EACrDD,cAA+BpO,IAArBub,EAAQnN,SAAyBmN,EAAQnN,SAAW,EAC9Dg0D,oBAA2CpiE,IAA3Bub,EAAQ6mD,gBAA+B7mD,EAAQ6mD,eAC/DC,kBAAuCriE,IAAzBub,EAAQ8mD,aAA6B9mD,EAAQ8mD,aAAe,CAAC,EAAG,MAC5E9gE,KAgCV,OAhDA0oC,EAAUi4B,EAAav3B,GAwBvBu3B,EAAYzjE,UAAUwD,MAAQ,WAC1B,IAAIoM,EAAQ9M,KAAK+gE,WACb9yD,EAAQ,IAAI0yD,EAAY,CACxBlM,KAAMz0D,KAAKo1D,UAAYp1D,KAAKo1D,UAAU10D,aAAUjC,EAChDs2D,OAAQ/0D,KAAKs1D,YAAct1D,KAAKs1D,YAAY50D,aAAUjC,EACtDyuC,OAAQltC,KAAKghE,YACbl0D,MAAOtP,MAAMvB,QAAQ6Q,GAASA,EAAMrP,QAAUqP,EAC9CD,SAAU7M,KAAKihE,cACfJ,eAAgB7gE,KAAKkhE,oBACrBJ,aAAc9gE,KAAKmhE,kBAAkB1jE,UAGzC,OADAwQ,EAAMmzD,WAAWphE,KAAKqhE,cACfpzD,GAQX0yD,EAAYzjE,UAAUokE,UAAY,SAAUp0B,GACxCltC,KAAKuhE,QAAUr0B,EACfltC,KAAKoxC,UAEFuvB,EAjDqB,CAkD9B,WACa,a,yCCrFPl4B,E,6CADJC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KA2DnFxB,EACc,cA4KHm6B,EA/JsB,SAAUp4B,GAK3C,SAASq4B,EAAgBvN,GACrB,IAAIj8C,EAAQjY,KACRga,EAAUk6C,GAA4B,GACtCwN,EAAc,YAAO,GAAI1nD,GA+C7B,cA9CO0nD,EAAYzzD,aACZyzD,EAAYC,oBACZD,EAAYE,4BACZF,EAAYG,wBACnB5pD,EAAQmxB,EAAO1rC,KAAKsC,KAAM0hE,IAAgB1hE,MAKpC8hE,gBACoBrjE,IAAtBub,EAAQ+nD,WAA0B/nD,EAAQ+nD,UAK9C9pD,EAAM+pD,mBACuBvjE,IAAzBub,EAAQ2nD,aAA6B3nD,EAAQ2nD,aAAe,IAMhE1pD,EAAM2lD,OAAS,KAMf3lD,EAAM4lD,oBAAiBp/D,EACvBwZ,EAAMomD,SAASrkD,EAAQ/L,OAKvBgK,EAAMgqD,2BAC+BxjE,IAAjCub,EAAQ4nD,sBACF5nD,EAAQ4nD,qBAMlB3pD,EAAMiqD,6BACiCzjE,IAAnCub,EAAQ6nD,wBACF7nD,EAAQ6nD,uBAEX5pD,EAsGX,OA5JAywB,EAAU+4B,EAAiBr4B,GA2D3Bq4B,EAAgBvkE,UAAUilE,aAAe,WACrC,OAAOniE,KAAK8hE,YAgBhBL,EAAgBvkE,UAAUklE,YAAc,SAAUC,GAC9C,OAAOj5B,EAAOlsC,UAAUklE,YAAY1kE,KAAKsC,KAAMqiE,IAKnDZ,EAAgBvkE,UAAUolE,gBAAkB,WACxC,OAAOtiE,KAAKgiE,eAMhBP,EAAgBvkE,UAAUqlE,eAAiB,WACvC,OAA2EviE,KAAK2zB,IAAI0T,IAQxFo6B,EAAgBvkE,UAAUkhE,SAAW,WACjC,OAAOp+D,KAAK49D,QAOhB6D,EAAgBvkE,UAAUqhE,iBAAmB,WACzC,OAAOv+D,KAAK69D,gBAMhB4D,EAAgBvkE,UAAUslE,wBAA0B,WAChD,OAAOxiE,KAAKiiE,uBAMhBR,EAAgBvkE,UAAUulE,0BAA4B,WAClD,OAAOziE,KAAKkiE,yBAMhBT,EAAgBvkE,UAAUwlE,gBAAkB,SAAUC,GAC7CA,EAAWC,gBACZD,EAAWC,cAAgB,IAAI,IAAM,IAEvB5iE,KAAKy1D,cAAeiN,gBAAgBC,IAM1DlB,EAAgBvkE,UAAU2lE,eAAiB,SAAUC,GACjD9iE,KAAK6zB,IAAIwT,EAAuBy7B,IAYpCrB,EAAgBvkE,UAAUmhE,SAAW,SAAUM,GAC3C3+D,KAAK49D,YAAuBn/D,IAAdkgE,EAA0BA,EAAY,qBACpD3+D,KAAK69D,eACa,OAAdc,OAAqBlgE,EAAY,qBAAgBuB,KAAK49D,QAC1D59D,KAAKy+D,WAEFgD,EA7JyB,CA8JlCsB,EAAA,GC3OEC,EAAc,CACdC,eAAgB,EAChBC,WAAY,EACZnM,OAAQ,EACRoM,WAAY,EACZC,OAAQ,EACRC,WAAY,EACZC,WAAY,EACZC,aAAc,EACdC,KAAM,EACNC,gBAAiB,EACjBC,eAAgB,GAChBC,iBAAkB,GAClBC,OAAQ,IAKD,EAAkB,CAACZ,EAAYQ,MAI/B,EAAoB,CAACR,EAAYY,QAIjCC,EAAuB,CAACb,EAAYE,YAIpCY,EAAuB,CAACd,EAAYG,YAChC,I,kBC8DA,EA1FoB,WAC/B,SAASY,KAuFT,OA9EAA,EAAc7mE,UAAU8mE,WAAa,SAAU1P,EAAU0B,EAASnB,KAMlEkP,EAAc7mE,UAAU+mE,aAAe,SAAU3P,KAMjDyP,EAAc7mE,UAAUmhE,SAAW,SAAUpwD,KAK7C81D,EAAc7mE,UAAUgnE,WAAa,SAAUC,EAAgBnO,KAK/D+N,EAAc7mE,UAAUknE,YAAc,SAAUpO,EAAS/nD,KAKzD81D,EAAc7mE,UAAUmnE,uBAAyB,SAAUC,EAA4BtO,KAKvF+N,EAAc7mE,UAAUqnE,eAAiB,SAAUC,EAAoBxO,KAKvE+N,EAAc7mE,UAAUunE,oBAAsB,SAAUC,EAAyB1O,KAKjF+N,EAAc7mE,UAAUynE,eAAiB,SAAUC,EAAoB5O,KAKvE+N,EAAc7mE,UAAU2nE,iBAAmB,SAAUC,EAAsB9O,KAK3E+N,EAAc7mE,UAAU6nE,UAAY,SAAUC,EAAehP,KAK7D+N,EAAc7mE,UAAU+nE,YAAc,SAAUC,EAAiBlP,KAKjE+N,EAAc7mE,UAAUioE,SAAW,SAAU7Q,EAAU0B,KAKvD+N,EAAc7mE,UAAUkoE,mBAAqB,SAAUC,EAAWC,KAKlEvB,EAAc7mE,UAAUqoE,cAAgB,SAAUC,EAAYC,KAK9D1B,EAAc7mE,UAAUwoE,aAAe,SAAUC,EAAWF,KACrD1B,EAxFuB,G,6CCT9B,EAAwC,WACxC,IAAIt7B,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAE5B,OAAO,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,IAV3C,GA4gB7B,EAnfoB,SAAUO,GAQzC,SAASw8B,EAAc3W,EAAW4W,EAAWxV,EAAYyV,GACrD,IAAI7tD,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAoEjC,OA/DAiY,EAAMg3C,UAAYA,EAMlBh3C,EAAM4tD,UAAYA,EAKlB5tD,EAAM6tD,WAAaA,EAKnB7tD,EAAM8tD,aAAe,EAMrB9tD,EAAMo4C,WAAaA,EAKnBp4C,EAAM+tD,2BAA6B,KAKnC/tD,EAAMguD,2BAA6B,KAKnChuD,EAAMiuD,mBAAqB,KAK3BjuD,EAAMkuD,aAAe,GAKrBluD,EAAMu0C,YAAc,GAKpBv0C,EAAMmuD,eAAiB,GAKvBnuD,EAAMouD,yBAA2B,GAKjCpuD,EAAMquD,MAA8D,GAC7DruD,EAoaX,OAhfA,EAAU2tD,EAAex8B,GAmFzBw8B,EAAc1oE,UAAUqpE,gBAAkB,SAAUC,GAChD,IAAIV,EAAa9lE,KAAK8lE,WACtB,OAAqB,GAAdA,EACDU,EACAA,EAAUjlE,KAAI,SAAUklE,GACtB,OAAOA,EAAOX,MAS1BF,EAAc1oE,UAAUwpE,2BAA6B,SAAUjY,EAAiBC,GAK5E,IAJA,IAAIjC,EAASzsD,KAAK2mE,uBACdC,EAAW5mE,KAAKomE,eAChB5Z,EAAcxsD,KAAKwsD,YACnBqa,EAAQra,EAAY/xD,OACfoB,EAAI,EAAG8a,EAAK83C,EAAgBh0D,OAAQoB,EAAI8a,EAAI9a,GAAK6yD,EACtDkY,EAAS,GAAKnY,EAAgB5yD,GAC9B+qE,EAAS,GAAKnY,EAAgB5yD,EAAI,GAC9B,6BAAmB4wD,EAAQma,KAC3Bpa,EAAYqa,KAAWD,EAAS,GAChCpa,EAAYqa,KAAWD,EAAS,IAGxC,OAAOC,GAYXjB,EAAc1oE,UAAU4pE,0BAA4B,SAAUrY,EAAiBpxD,EAAQyF,EAAK4rD,EAAQqY,EAAQC,GACxG,IAAIxa,EAAcxsD,KAAKwsD,YACnBqa,EAAQra,EAAY/xD,OACpBgyD,EAASzsD,KAAK2mE,uBACdK,IACA3pE,GAAUqxD,GAEd,IAII7yD,EAAGorE,EAASC,EAJZC,EAAa1Y,EAAgBpxD,GAC7B+pE,EAAa3Y,EAAgBpxD,EAAS,GACtCgqE,EAAYrnE,KAAKomE,eACjBkB,GAAU,EAEd,IAAKzrE,EAAIwB,EAASqxD,EAAQ7yD,EAAIiH,EAAKjH,GAAK6yD,EACpC2Y,EAAU,GAAK5Y,EAAgB5yD,GAC/BwrE,EAAU,GAAK5Y,EAAgB5yD,EAAI,IACnCqrE,EAAU,iCAAuBza,EAAQ4a,MACzBJ,GACRK,IACA9a,EAAYqa,KAAWM,EACvB3a,EAAYqa,KAAWO,EACvBE,GAAU,GAEd9a,EAAYqa,KAAWQ,EAAU,GACjC7a,EAAYqa,KAAWQ,EAAU,IAE5BH,IAAYK,EAAA,EAAarZ,cAC9B1B,EAAYqa,KAAWQ,EAAU,GACjC7a,EAAYqa,KAAWQ,EAAU,GACjCC,GAAU,GAGVA,GAAU,EAEdH,EAAaE,EAAU,GACvBD,EAAaC,EAAU,GACvBJ,EAAUC,EAOd,OAJKH,GAAUO,GAAYzrE,IAAMwB,EAASqxD,KACtClC,EAAYqa,KAAWM,EACvB3a,EAAYqa,KAAWO,GAEpBP,GAUXjB,EAAc1oE,UAAUsqE,uBAAyB,SAAU/Y,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQgZ,GAC9F,IAAK,IAAI7rE,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC3C,IAAIiH,EAAM2kE,EAAK5rE,GACX8rE,EAAa3nE,KAAK8mE,0BAA0BrY,EAAiBpxD,EAAQyF,EAAK4rD,GAAQ,GAAO,GAC7FgZ,EAAYlnE,KAAKmnE,GACjBtqE,EAASyF,EAEb,OAAOzF,GAOXuoE,EAAc1oE,UAAU8mE,WAAa,SAAU1P,EAAU0B,EAASnB,GAC9D70D,KAAK4nE,cAActT,EAAU0B,GAC7B,IAGIvH,EAAiBkZ,EAAYD,EAAaG,EAC1CxqE,EAJA4J,EAAOqtD,EAASwT,UAChBpZ,EAAS4F,EAASyT,YAClBC,EAAehoE,KAAKwsD,YAAY/xD,OAGpC,GAAIwM,GAAQghE,EAAA,QAAarR,cAAe,CACpCnI,EAA8E,EAAWyZ,6BACzFL,EAAe,GACf,IAAIM,EAAoE,EAAWC,WACnF/qE,EAAS,EACT,IAAK,IAAIxB,EAAI,EAAG8a,EAAKwxD,EAAM1tE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC5C,IAAIwsE,EAAS,GACbhrE,EAAS2C,KAAKwnE,uBAAuB/Y,EAAiBpxD,EAAQ8qE,EAAMtsE,GAAI6yD,EAAQ2Z,GAChFR,EAAarnE,KAAK6nE,GAEtBroE,KAAKmmE,aAAa3lE,KAAK,CACnB,EAAkB4iE,OAClB4E,EACAH,EACAvT,EACAO,EACAyT,EAAA,SAGCrhE,GAAQghE,EAAA,QAAatR,SAC1B1vD,GAAQghE,EAAA,QAAanR,mBACrB4Q,EAAc,GACdjZ,EACIxnD,GAAQghE,EAAA,QAAatR,QACwC,EAAWuR,6BAClE5T,EAASiU,qBACnBlrE,EAAS2C,KAAKwnE,uBAAuB/Y,EAAiB,EACiD,EAAW+Z,UAAW9Z,EAAQgZ,GACrI1nE,KAAKmmE,aAAa3lE,KAAK,CACnB,EAAkB4iE,OAClB4E,EACAN,EACApT,EACAO,EACAyT,EAAA,KAGCrhE,GAAQghE,EAAA,QAAapR,aAC1B5vD,GAAQghE,EAAA,QAAalR,QACrBtI,EAAkB6F,EAASiU,qBAC3BZ,EAAa3nE,KAAK8mE,0BAA0BrY,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,GAAQ,GAAO,GACvG1uD,KAAKmmE,aAAa3lE,KAAK,CACnB,EAAkB4iE,OAClB4E,EACAL,EACArT,EACAO,EACAyT,EAAA,KAGCrhE,GAAQghE,EAAA,QAAahR,aAC1BxI,EAAkB6F,EAASiU,sBAC3BZ,EAAa3nE,KAAK0mE,2BAA2BjY,EAAiBC,IAC7CsZ,GACbhoE,KAAKmmE,aAAa3lE,KAAK,CACnB,EAAkB4iE,OAClB4E,EACAL,EACArT,EACAO,EACAyT,EAAA,KAIHrhE,GAAQghE,EAAA,QAAajR,QAC1BvI,EAAkB6F,EAASiU,qBAC3BvoE,KAAKwsD,YAAYhsD,KAAKiuD,EAAgB,GAAIA,EAAgB,IAC1DkZ,EAAa3nE,KAAKwsD,YAAY/xD,OAC9BuF,KAAKmmE,aAAa3lE,KAAK,CACnB,EAAkB4iE,OAClB4E,EACAL,EACArT,EACAO,KAGR70D,KAAKyoE,YAAYzS,IAOrB4P,EAAc1oE,UAAU0qE,cAAgB,SAAUtT,EAAU0B,GACxDh2D,KAAKgmE,2BAA6B,CAC9B,EAAkB/C,eAClBjN,EACA,EACA1B,GAEJt0D,KAAKmmE,aAAa3lE,KAAKR,KAAKgmE,4BAC5BhmE,KAAKimE,2BAA6B,CAC9B,EAAkBhD,eAClBjN,EACA,EACA1B,GAEJt0D,KAAKqmE,yBAAyB7lE,KAAKR,KAAKimE,6BAK5CL,EAAc1oE,UAAUwrE,OAAS,WAC7B,MAAO,CACHvC,aAAcnmE,KAAKmmE,aACnBE,yBAA0BrmE,KAAKqmE,yBAC/B7Z,YAAaxsD,KAAKwsD,cAM1BoZ,EAAc1oE,UAAUyrE,gCAAkC,WACtD,IAII9sE,EAJAwqE,EAA2BrmE,KAAKqmE,yBAEpCA,EAAyBuC,UAGzB,IACIC,EACA5hE,EAFA4/C,EAAIwf,EAAyB5rE,OAG7BwwC,GAAS,EACb,IAAKpvC,EAAI,EAAGA,EAAIgrD,IAAKhrD,GAEjBoL,GADA4hE,EAAcxC,EAAyBxqE,IAC+B,KAC1D,EAAkB0nE,aAC1Bt4B,EAAQpvC,EAEHoL,GAAQ,EAAkBg8D,iBAC/B4F,EAAY,GAAKhtE,EACjB,YAAgBmE,KAAKqmE,yBAA0Bp7B,EAAOpvC,GACtDovC,GAAS,IAQrB26B,EAAc1oE,UAAUkoE,mBAAqB,SAAUC,EAAWC,GAC9D,IAAIgB,EAAQtmE,KAAKsmE,MACjB,GAAIjB,EAAW,CACX,IAAIyD,EAAiBzD,EAAU0D,WAC/BzC,EAAMjB,UAAY,YAAYyD,GAAkC,UAGhExC,EAAMjB,eAAY5mE,EAEtB,GAAI6mE,EAAa,CACb,IAAI0D,EAAmB1D,EAAYyD,WACnCzC,EAAMhB,YAAc,YAAY0D,GAAsC,KACtE,IAAIC,EAAqB3D,EAAY4D,aACrC5C,EAAM6C,aACqB1qE,IAAvBwqE,EAAmCA,EAAqB,IAC5D,IAAIG,EAAsB9D,EAAY+D,cACtC/C,EAAMgD,SAAWF,EACXA,EAAoB3rE,QACpB,IACN,IAAI8rE,EAA4BjE,EAAYkE,oBAC5ClD,EAAMmD,eAAiBF,GAEjB,IACN,IAAIG,EAAsBpE,EAAYqE,cACtCrD,EAAMsD,cACsBnrE,IAAxBirE,EACMA,EACA,IACV,IAAIG,EAAmBvE,EAAY7V,WACnC6W,EAAMwD,eACmBrrE,IAArBorE,EAAiCA,EAAmB,IACxD,IAAIE,EAAwBzE,EAAY0E,gBACxC1D,EAAM2D,gBACwBxrE,IAA1BsrE,EACMA,EACA,IACNzD,EAAMwD,UAAY9pE,KAAK+lE,eACvB/lE,KAAK+lE,aAAeO,EAAMwD,UAE1B9pE,KAAKkmE,mBAAqB,WAI9BI,EAAMhB,iBAAc7mE,EACpB6nE,EAAM6C,aAAU1qE,EAChB6nE,EAAMgD,SAAW,KACjBhD,EAAMmD,oBAAiBhrE,EACvB6nE,EAAMsD,cAAWnrE,EACjB6nE,EAAMwD,eAAYrrE,EAClB6nE,EAAM2D,gBAAaxrE,GAO3BmnE,EAAc1oE,UAAUgtE,WAAa,SAAU5D,GAC3C,IAAIjB,EAAYiB,EAAMjB,UAElB8E,EAAkB,CAAC,EAAkBzG,eAAgB2B,GAKzD,MAJyB,iBAAdA,GAEP8E,EAAgB3pE,MAAK,GAElB2pE,GAKXvE,EAAc1oE,UAAUktE,YAAc,SAAU9D,GAC5CtmE,KAAKmmE,aAAa3lE,KAAKR,KAAKqqE,aAAa/D,KAM7CV,EAAc1oE,UAAUmtE,aAAe,SAAU/D,GAC7C,MAAO,CACH,EAAkB3C,iBAClB2C,EAAMhB,YACNgB,EAAMwD,UAAY9pE,KAAK8lE,WACvBQ,EAAM6C,QACN7C,EAAMsD,SACNtD,EAAM2D,WACNjqE,KAAKumE,gBAAgBD,EAAMgD,UAC3BhD,EAAMmD,eAAiBzpE,KAAK8lE,aAOpCF,EAAc1oE,UAAUotE,gBAAkB,SAAUhE,EAAO4D,GACvD,IAAI7E,EAAYiB,EAAMjB,UACG,iBAAdA,GAA0BiB,EAAMiE,kBAAoBlF,SACzC5mE,IAAd4mE,GACArlE,KAAKmmE,aAAa3lE,KAAK0pE,EAAWxsE,KAAKsC,KAAMsmE,IAEjDA,EAAMiE,iBAAmBlF,IAOjCO,EAAc1oE,UAAUstE,kBAAoB,SAAUlE,EAAO8D,GACzD,IAAI9E,EAAcgB,EAAMhB,YACpB6D,EAAU7C,EAAM6C,QAChBG,EAAWhD,EAAMgD,SACjBG,EAAiBnD,EAAMmD,eACvBG,EAAWtD,EAAMsD,SACjBE,EAAYxD,EAAMwD,UAClBG,EAAa3D,EAAM2D,YACnB3D,EAAMmE,oBAAsBnF,GAC5BgB,EAAMoE,gBAAkBvB,GACvBG,GAAYhD,EAAMqE,kBACd,YAAOrE,EAAMqE,gBAAiBrB,IACnChD,EAAMsE,uBAAyBnB,GAC/BnD,EAAMuE,iBAAmBjB,GACzBtD,EAAMwE,kBAAoBhB,GAC1BxD,EAAMyE,mBAAqBd,UACPxrE,IAAhB6mE,GACA8E,EAAY1sE,KAAKsC,KAAMsmE,GAE3BA,EAAMmE,mBAAqBnF,EAC3BgB,EAAMoE,eAAiBvB,EACvB7C,EAAMqE,gBAAkBrB,EACxBhD,EAAMsE,sBAAwBnB,EAC9BnD,EAAMuE,gBAAkBjB,EACxBtD,EAAMwE,iBAAmBhB,EACzBxD,EAAMyE,kBAAoBd,IAMlCrE,EAAc1oE,UAAUurE,YAAc,SAAUzS,GAC5Ch2D,KAAKgmE,2BAA2B,GAAKhmE,KAAKmmE,aAAa1rE,OACvDuF,KAAKgmE,2BAA6B,KAClChmE,KAAKimE,2BAA2B,GAAKjmE,KAAKqmE,yBAAyB5rE,OACnEuF,KAAKimE,2BAA6B,KAClC,IAAI+E,EAAyB,CAAC,EAAkBzH,aAAcvN,GAC9Dh2D,KAAKmmE,aAAa3lE,KAAKwqE,GACvBhrE,KAAKqmE,yBAAyB7lE,KAAKwqE,IASvCpF,EAAc1oE,UAAUypE,qBAAuB,WAC3C,IAAK3mE,KAAKkmE,qBACNlmE,KAAKkmE,mBAAqB,gBAAMlmE,KAAK6lE,WACjC7lE,KAAK+lE,aAAe,GAAG,CACvB,IAAIvsB,EAASx5C,KAAKqwD,YAAcrwD,KAAK+lE,aAAe,GAAM,EAC1D,iBAAO/lE,KAAKkmE,mBAAoB1sB,EAAOx5C,KAAKkmE,oBAGpD,OAAOlmE,KAAKkmE,oBAETN,EAjfuB,CAkfhC,GC3gBE,EAAwC,WACxC,IAAIn9B,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAE5B,OAAO,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,IAV3C,GAiQ7B,EA/OyB,SAAUO,GAQ9C,SAAS6hC,EAAmBhc,EAAW4W,EAAWxV,EAAYyV,GAC1D,IAAI7tD,EAAQmxB,EAAO1rC,KAAKsC,KAAMivD,EAAW4W,EAAWxV,EAAYyV,IAAe9lE,KAwE/E,OAnEAiY,EAAMizD,mBAAqB,KAK3BjzD,EAAMy8C,OAAS,KAKfz8C,EAAMkzD,sBAAmB1sE,EAKzBwZ,EAAMmzD,cAAW3sE,EAKjBwZ,EAAMozD,cAAW5sE,EAKjBwZ,EAAMqzD,aAAU7sE,EAKhBwZ,EAAMszD,cAAW9sE,EAKjBwZ,EAAMuzD,cAAW/sE,EAKjBwZ,EAAMwzD,cAAWhtE,EAKjBwZ,EAAMyzD,qBAAkBjtE,EAKxBwZ,EAAM0zD,eAAYltE,EAKlBwZ,EAAM2zD,YAASntE,EAKfwZ,EAAM4zD,YAASptE,EAMfwZ,EAAM6zD,6BAA0BrtE,EACzBwZ,EA4JX,OA5OA,EAAUgzD,EAAoB7hC,GAsF9B6hC,EAAmB/tE,UAAU6nE,UAAY,SAAUC,EAAehP,GAC9D,GAAKh2D,KAAK00D,OAAV,CAGA10D,KAAK4nE,cAAc5C,EAAehP,GAClC,IAAIvH,EAAkBuW,EAAcuD,qBAChC7Z,EAASsW,EAAc+C,YACvBgE,EAAU/rE,KAAKwsD,YAAY/xD,OAC3BosE,EAAQ7mE,KAAK0mE,2BAA2BjY,EAAiBC,GAC7D1uD,KAAKmmE,aAAa3lE,KAAK,CACnB,EAAkB8iE,WAClByI,EACAlF,EACA7mE,KAAK00D,OAEL10D,KAAKorE,SAAWprE,KAAKmrE,iBACrBnrE,KAAKqrE,SAAWrrE,KAAKmrE,iBACrBv1D,KAAKo2D,KAAKhsE,KAAKsrE,QAAUtrE,KAAKmrE,kBAC9BnrE,KAAKurE,SACLvrE,KAAKwrE,SACLxrE,KAAKyrE,SACLzrE,KAAK0rE,gBACL1rE,KAAK2rE,UACL,CACK3rE,KAAK4rE,OAAO,GAAK5rE,KAAK8lE,WAAc9lE,KAAKmrE,iBACzCnrE,KAAK4rE,OAAO,GAAK5rE,KAAK8lE,WAAc9lE,KAAKmrE,kBAE9Cv1D,KAAKo2D,KAAKhsE,KAAK6rE,OAAS7rE,KAAKmrE,kBAC7BnrE,KAAK8rE,0BAET9rE,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkB8iE,WAClByI,EACAlF,EACA7mE,KAAKkrE,mBAELlrE,KAAKorE,SACLprE,KAAKqrE,SACLrrE,KAAKsrE,QACLtrE,KAAKurE,SACLvrE,KAAKwrE,SACLxrE,KAAKyrE,SACLzrE,KAAK0rE,gBACL1rE,KAAK2rE,UACL3rE,KAAK4rE,OACL5rE,KAAK6rE,OACL7rE,KAAK8rE,0BAET9rE,KAAKyoE,YAAYzS,KAMrBiV,EAAmB/tE,UAAUynE,eAAiB,SAAUC,EAAoB5O,GACxE,GAAKh2D,KAAK00D,OAAV,CAGA10D,KAAK4nE,cAAchD,EAAoB5O,GACvC,IAAIvH,EAAkBmW,EAAmB2D,qBACrC7Z,EAASkW,EAAmBmD,YAC5BgE,EAAU/rE,KAAKwsD,YAAY/xD,OAC3BosE,EAAQ7mE,KAAK0mE,2BAA2BjY,EAAiBC,GAC7D1uD,KAAKmmE,aAAa3lE,KAAK,CACnB,EAAkB8iE,WAClByI,EACAlF,EACA7mE,KAAK00D,OAEL10D,KAAKorE,SAAWprE,KAAKmrE,iBACrBnrE,KAAKqrE,SAAWrrE,KAAKmrE,iBACrBv1D,KAAKo2D,KAAKhsE,KAAKsrE,QAAUtrE,KAAKmrE,kBAC9BnrE,KAAKurE,SACLvrE,KAAKwrE,SACLxrE,KAAKyrE,SACLzrE,KAAK0rE,gBACL1rE,KAAK2rE,UACL,CACK3rE,KAAK4rE,OAAO,GAAK5rE,KAAK8lE,WAAc9lE,KAAKmrE,iBACzCnrE,KAAK4rE,OAAO,GAAK5rE,KAAK8lE,WAAc9lE,KAAKmrE,kBAE9Cv1D,KAAKo2D,KAAKhsE,KAAK6rE,OAAS7rE,KAAKmrE,kBAC7BnrE,KAAK8rE,0BAET9rE,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkB8iE,WAClByI,EACAlF,EACA7mE,KAAKkrE,mBAELlrE,KAAKorE,SACLprE,KAAKqrE,SACLrrE,KAAKsrE,QACLtrE,KAAKurE,SACLvrE,KAAKwrE,SACLxrE,KAAKyrE,SACLzrE,KAAK0rE,gBACL1rE,KAAK2rE,UACL3rE,KAAK4rE,OACL5rE,KAAK6rE,OACL7rE,KAAK8rE,0BAET9rE,KAAKyoE,YAAYzS,KAKrBiV,EAAmB/tE,UAAUwrE,OAAS,WAgBlC,OAfA1oE,KAAK2oE,kCAEL3oE,KAAKorE,cAAW3sE,EAChBuB,KAAKqrE,cAAW5sE,EAChBuB,KAAKkrE,mBAAqB,KAC1BlrE,KAAK00D,OAAS,KACd10D,KAAKmrE,sBAAmB1sE,EACxBuB,KAAKsrE,aAAU7sE,EACfuB,KAAK4rE,YAASntE,EACduB,KAAKurE,cAAW9sE,EAChBuB,KAAKwrE,cAAW/sE,EAChBuB,KAAKyrE,cAAWhtE,EAChBuB,KAAK0rE,qBAAkBjtE,EACvBuB,KAAK2rE,eAAYltE,EACjBuB,KAAK6rE,YAASptE,EACP2qC,EAAOlsC,UAAUwrE,OAAOhrE,KAAKsC,OAMxCirE,EAAmB/tE,UAAUqoE,cAAgB,SAAUC,EAAYyG,GAC/D,IAAIC,EAAS1G,EAAW2G,YACpB7b,EAAOkV,EAAW5T,UAClBwa,EAAoB5G,EAAW6G,uBAC/B1X,EAAQ6Q,EAAWnQ,SAASr1D,KAAK8lE,YACjCwG,EAAS9G,EAAW+G,YACxBvsE,KAAKmrE,iBAAmB3F,EAAWgH,cAAcxsE,KAAK8lE,YACtD9lE,KAAKorE,SAAWc,EAAO,GACvBlsE,KAAKqrE,SAAWa,EAAO,GACvBlsE,KAAKkrE,mBAAqBkB,EAC1BpsE,KAAK00D,OAASC,EACd30D,KAAKsrE,QAAUhb,EAAK,GACpBtwD,KAAKurE,SAAW/F,EAAWnE,aAC3BrhE,KAAKwrE,SAAWc,EAAO,GACvBtsE,KAAKyrE,SAAWa,EAAO,GACvBtsE,KAAK0rE,gBAAkBlG,EAAWtE,oBAClClhE,KAAK2rE,UAAYnG,EAAWvE,cAC5BjhE,KAAK4rE,OAASpG,EAAWiH,gBACzBzsE,KAAK6rE,OAASvb,EAAK,GACnBtwD,KAAK8rE,wBAA0BG,GAE5BhB,EA7O4B,CA8OrC,GChQE,EAAwC,WACxC,IAAIxiC,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAE5B,OAAO,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,IAV3C,GA4I7B,EA1H8B,SAAUO,GAQnD,SAASsjC,EAAwBzd,EAAW4W,EAAWxV,EAAYyV,GAC/D,OAAO18B,EAAO1rC,KAAKsC,KAAMivD,EAAW4W,EAAWxV,EAAYyV,IAAe9lE,KA+G9E,OAvHA,EAAU0sE,EAAyBtjC,GAkBnCsjC,EAAwBxvE,UAAUyvE,qBAAuB,SAAUle,EAAiBpxD,EAAQyF,EAAK4rD,GAC7F,IAAIqd,EAAU/rE,KAAKwsD,YAAY/xD,OAC3BosE,EAAQ7mE,KAAK8mE,0BAA0BrY,EAAiBpxD,EAAQyF,EAAK4rD,GAAQ,GAAO,GACpFke,EAA0B,CAC1B,EAAkBnJ,gBAClBsI,EACAlF,GAIJ,OAFA7mE,KAAKmmE,aAAa3lE,KAAKosE,GACvB5sE,KAAKqmE,yBAAyB7lE,KAAKosE,GAC5B9pE,GAMX4pE,EAAwBxvE,UAAUqnE,eAAiB,SAAUC,EAAoBxO,GAC7E,IAAIsQ,EAAQtmE,KAAKsmE,MACbhB,EAAcgB,EAAMhB,YACpBwE,EAAYxD,EAAMwD,UACtB,QAAoBrrE,IAAhB6mE,QAA2C7mE,IAAdqrE,EAAjC,CAGA9pE,KAAKwqE,kBAAkBlE,EAAOtmE,KAAKoqE,aACnCpqE,KAAK4nE,cAAcpD,EAAoBxO,GACvCh2D,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkBmjE,iBAClB2C,EAAMhB,YACNgB,EAAMwD,UACNxD,EAAM6C,QACN7C,EAAMsD,SACNtD,EAAM2D,WACN3D,EAAMgD,SACNhD,EAAMmD,gBACP5F,GACH,IAAIpV,EAAkB+V,EAAmB+D,qBACrC7Z,EAAS8V,EAAmBuD,YAChC/nE,KAAK2sE,qBAAqBle,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,GACtE1uD,KAAKqmE,yBAAyB7lE,KAAK,GACnCR,KAAKyoE,YAAYzS,KAMrB0W,EAAwBxvE,UAAUunE,oBAAsB,SAAUC,EAAyB1O,GACvF,IAAIsQ,EAAQtmE,KAAKsmE,MACbhB,EAAcgB,EAAMhB,YACpBwE,EAAYxD,EAAMwD,UACtB,QAAoBrrE,IAAhB6mE,QAA2C7mE,IAAdqrE,EAAjC,CAGA9pE,KAAKwqE,kBAAkBlE,EAAOtmE,KAAKoqE,aACnCpqE,KAAK4nE,cAAclD,EAAyB1O,GAC5Ch2D,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkBmjE,iBAClB2C,EAAMhB,YACNgB,EAAMwD,UACNxD,EAAM6C,QACN7C,EAAMsD,SACNtD,EAAM2D,WACN3D,EAAMgD,SACNhD,EAAMmD,gBACP5F,GAKH,IAJA,IAAI4D,EAAO/C,EAAwB8D,UAC/B/Z,EAAkBiW,EAAwB6D,qBAC1C7Z,EAASgW,EAAwBqD,YACjC1qE,EAAS,EACJxB,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EACxCwB,EAAS2C,KAAK2sE,qBAAqBle,EAAiBpxD,EAC7BoqE,EAAK5rE,GAAK6yD,GAErC1uD,KAAKqmE,yBAAyB7lE,KAAK,GACnCR,KAAKyoE,YAAYzS,KAKrB0W,EAAwBxvE,UAAUwrE,OAAS,WACvC,IAAIpC,EAAQtmE,KAAKsmE,MAOjB,OANwB7nE,MAApB6nE,EAAMuG,YACNvG,EAAMuG,YAAc7sE,KAAKwsD,YAAY/xD,QACrCuF,KAAKmmE,aAAa3lE,KAAK,GAE3BR,KAAK2oE,kCACL3oE,KAAKsmE,MAAQ,KACNl9B,EAAOlsC,UAAUwrE,OAAOhrE,KAAKsC,OAKxC0sE,EAAwBxvE,UAAUktE,YAAc,SAAU9D,GAC9B7nE,MAApB6nE,EAAMuG,YACNvG,EAAMuG,YAAc7sE,KAAKwsD,YAAY/xD,SACrCuF,KAAKmmE,aAAa3lE,KAAK,GACvB8lE,EAAMuG,WAAa7sE,KAAKwsD,YAAY/xD,QAExC6rE,EAAMuG,WAAa,EACnBzjC,EAAOlsC,UAAUktE,YAAY1sE,KAAKsC,KAAMsmE,GACxCtmE,KAAKmmE,aAAa3lE,KAAKqjE,IAEpB6I,EAxHiC,CAyH1C,G,SC3IE,EAAwC,WACxC,IAAIjkC,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAE5B,OAAO,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,IAV3C,GA2O7B,EAvN2B,SAAUO,GAQhD,SAAS0jC,EAAqB7d,EAAW4W,EAAWxV,EAAYyV,GAC5D,OAAO18B,EAAO1rC,KAAKsC,KAAMivD,EAAW4W,EAAWxV,EAAYyV,IAAe9lE,KA4M9E,OApNA,EAAU8sE,EAAsB1jC,GAkBhC0jC,EAAqB5vE,UAAU6vE,sBAAwB,SAAUte,EAAiBpxD,EAAQoqE,EAAM/Y,GAC5F,IAAI4X,EAAQtmE,KAAKsmE,MACb7R,OAA2Bh2D,IAApB6nE,EAAMjB,UACbtQ,OAA+Bt2D,IAAtB6nE,EAAMhB,YACf0H,EAAUvF,EAAKhtE,OACnBuF,KAAKmmE,aAAa3lE,KAAKqjE,GACvB7jE,KAAKqmE,yBAAyB7lE,KAAKqjE,GACnC,IAAK,IAAIhoE,EAAI,EAAGA,EAAImxE,IAAWnxE,EAAG,CAC9B,IAAIiH,EAAM2kE,EAAK5rE,GACXkwE,EAAU/rE,KAAKwsD,YAAY/xD,OAC3BosE,EAAQ7mE,KAAK8mE,0BAA0BrY,EAAiBpxD,EAAQyF,EAAK4rD,GAAQ,GAAOqG,GACpF6X,EAA0B,CAC1B,EAAkBnJ,gBAClBsI,EACAlF,GAEJ7mE,KAAKmmE,aAAa3lE,KAAKosE,GACvB5sE,KAAKqmE,yBAAyB7lE,KAAKosE,GAC/B7X,IAGA/0D,KAAKmmE,aAAa3lE,KAAKsjE,GACvB9jE,KAAKqmE,yBAAyB7lE,KAAKsjE,IAEvCzmE,EAASyF,EAUb,OARI2xD,IACAz0D,KAAKmmE,aAAa3lE,KAAK,GACvBR,KAAKqmE,yBAAyB7lE,KAAK,IAEnCu0D,IACA/0D,KAAKmmE,aAAa3lE,KAAK,GACvBR,KAAKqmE,yBAAyB7lE,KAAK,IAEhCnD,GAMXyvE,EAAqB5vE,UAAUgnE,WAAa,SAAUC,EAAgBnO,GAClE,IAAIsQ,EAAQtmE,KAAKsmE,MACbjB,EAAYiB,EAAMjB,UAClBC,EAAcgB,EAAMhB,YACxB,QAAkB7mE,IAAd4mE,QAA2C5mE,IAAhB6mE,EAA/B,CAGAtlE,KAAKitE,uBACLjtE,KAAK4nE,cAAczD,EAAgBnO,QACXv3D,IAApB6nE,EAAMjB,WACNrlE,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkBkjE,eAClB,WAGkBjlE,IAAtB6nE,EAAMhB,aACNtlE,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkBmjE,iBAClB2C,EAAMhB,YACNgB,EAAMwD,UACNxD,EAAM6C,QACN7C,EAAMsD,SACNtD,EAAM2D,WACN3D,EAAMgD,SACNhD,EAAMmD,iBAGd,IAAIhb,EAAkB0V,EAAeoE,qBACjC7Z,EAASyV,EAAe4D,YACxBgE,EAAU/rE,KAAKwsD,YAAY/xD,OAC/BuF,KAAK8mE,0BAA0BrY,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,GAAQ,GAAO,GAC1F,IAAIwe,EAAoB,CAAC,EAAkBnW,OAAQgV,GACnD/rE,KAAKmmE,aAAa3lE,KAAKqjE,EAAsBqJ,GAC7CltE,KAAKqmE,yBAAyB7lE,KAAKqjE,EAAsBqJ,QACjCzuE,IAApB6nE,EAAMjB,YACNrlE,KAAKmmE,aAAa3lE,KAAK,GACvBR,KAAKqmE,yBAAyB7lE,KAAK,SAEb/B,IAAtB6nE,EAAMhB,cACNtlE,KAAKmmE,aAAa3lE,KAAK,GACvBR,KAAKqmE,yBAAyB7lE,KAAK,IAEvCR,KAAKyoE,YAAYzS,KAMrB8W,EAAqB5vE,UAAU+nE,YAAc,SAAUC,EAAiBlP,GACpE,IAAIsQ,EAAQtmE,KAAKsmE,MACbjB,EAAYiB,EAAMjB,UAClBC,EAAcgB,EAAMhB,YACxB,QAAkB7mE,IAAd4mE,QAA2C5mE,IAAhB6mE,EAA/B,CAGAtlE,KAAKitE,uBACLjtE,KAAK4nE,cAAc1C,EAAiBlP,QACZv3D,IAApB6nE,EAAMjB,WACNrlE,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkBkjE,eAClB,WAGkBjlE,IAAtB6nE,EAAMhB,aACNtlE,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkBmjE,iBAClB2C,EAAMhB,YACNgB,EAAMwD,UACNxD,EAAM6C,QACN7C,EAAMsD,SACNtD,EAAM2D,WACN3D,EAAMgD,SACNhD,EAAMmD,iBAGd,IAAIhC,EAAOvC,EAAgBsD,UACvB/Z,EAAkByW,EAAgBgD,6BAClCxZ,EAASwW,EAAgB6C,YAC7B/nE,KAAK+sE,sBAAsBte,EAAiB,EACf,EAAQC,GACrC1uD,KAAKyoE,YAAYzS,KAMrB8W,EAAqB5vE,UAAU2nE,iBAAmB,SAAUC,EAAsB9O,GAC9E,IAAIsQ,EAAQtmE,KAAKsmE,MACbjB,EAAYiB,EAAMjB,UAClBC,EAAcgB,EAAMhB,YACxB,QAAkB7mE,IAAd4mE,QAA2C5mE,IAAhB6mE,EAA/B,CAGAtlE,KAAKitE,uBACLjtE,KAAK4nE,cAAc9C,EAAsB9O,QACjBv3D,IAApB6nE,EAAMjB,WACNrlE,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkBkjE,eAClB,WAGkBjlE,IAAtB6nE,EAAMhB,aACNtlE,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkBmjE,iBAClB2C,EAAMhB,YACNgB,EAAMwD,UACNxD,EAAM6C,QACN7C,EAAMsD,SACNtD,EAAM2D,WACN3D,EAAMgD,SACNhD,EAAMmD,iBAOd,IAJA,IAAItB,EAAQrD,EAAqBsD,WAC7B3Z,EAAkBqW,EAAqBoD,6BACvCxZ,EAASoW,EAAqBiD,YAC9B1qE,EAAS,EACJxB,EAAI,EAAG8a,EAAKwxD,EAAM1tE,OAAQoB,EAAI8a,IAAM9a,EACzCwB,EAAS2C,KAAK+sE,sBAAsBte,EAAiBpxD,EAAQ8qE,EAAMtsE,GAAI6yD,GAE3E1uD,KAAKyoE,YAAYzS,KAKrB8W,EAAqB5vE,UAAUwrE,OAAS,WACpC1oE,KAAK2oE,kCACL3oE,KAAKsmE,MAAQ,KAKb,IAAIrX,EAAYjvD,KAAKivD,UACrB,GAAkB,IAAdA,EAEA,IADA,IAAIzC,EAAcxsD,KAAKwsD,YACd3wD,EAAI,EAAG8a,EAAK61C,EAAY/xD,OAAQoB,EAAI8a,IAAM9a,EAC/C2wD,EAAY3wD,GAAK,YAAK2wD,EAAY3wD,GAAIozD,GAG9C,OAAO7lB,EAAOlsC,UAAUwrE,OAAOhrE,KAAKsC,OAKxC8sE,EAAqB5vE,UAAU+vE,qBAAuB,WAClD,IAAI3G,EAAQtmE,KAAKsmE,WAEC7nE,IADF6nE,EAAMjB,WAElBrlE,KAAKsqE,gBAAgBhE,EAAOtmE,KAAKkqE,iBAEXzrE,IAAtB6nE,EAAMhB,aACNtlE,KAAKwqE,kBAAkBlE,EAAOtmE,KAAKoqE,cAGpC0C,EArN8B,CAsNvC,G,kBC9NK,SAASK,EAAcC,EAAU3e,EAAiBpxD,EAAQyF,EAAK4rD,GAClE,IAKU7yD,EAAGwxE,EAAKC,EAAKtc,EAAII,EAAImc,EAAKC,EAAKC,EAAKC,EAL1CC,EAAatwE,EACbuwE,EAAWvwE,EACXwwE,EAAS,EACTr2D,EAAI,EACJhI,EAAQnS,EAEZ,IAAKxB,EAAIwB,EAAQxB,EAAIiH,EAAKjH,GAAK6yD,EAAQ,CACnC,IAAIuC,EAAKxC,EAAgB5yD,GACrBw1D,EAAK5C,EAAgB5yD,EAAI,QAClB4C,IAAPuyD,IACAyc,EAAMxc,EAAKD,EACX0c,EAAMrc,EAAKD,EACXkc,EAAM13D,KAAKu3B,KAAKsgC,EAAMA,EAAMC,EAAMA,QACtBjvE,IAAR8uE,IACA/1D,GAAK61D,EACEz3D,KAAKk4D,MAAMP,EAAME,EAAMD,EAAME,IAAQL,EAAMC,IACvCF,IACH51D,EAAIq2D,IACJA,EAASr2D,EACTm2D,EAAan+D,EACbo+D,EAAW/xE,GAEf2b,EAAI,EACJhI,EAAQ3T,EAAI6yD,IAGpB2e,EAAMC,EACNC,EAAME,EACND,EAAME,GAEV1c,EAAKC,EACLG,EAAKC,EAGT,OADA75C,GAAK81D,GACMO,EAAS,CAACr+D,EAAO3T,GAAK,CAAC8xE,EAAYC,GC/ClD,IAAI,EAAwC,WACxC,IAAInlC,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAE5B,OAAO,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,IAV3C,GA6BjCklC,EAAa,CACpB,KAAQ,EACR,IAAO,EACP,OAAU,GACV,MAAS,EACT,MAAS,EACT,IAAO,EACP,OAAU,GACV,QAAW,GACX,WAAc,GACd,YAAe,GACf,OAAU,GC7BVC,EAAqB,CACrB,OAAUC,EACV,QAAWC,EACX,MAASC,EACT,WAAcC,EACd,QAAWH,EACX,KDyBmC,SAAU7kC,GAQ7C,SAASilC,EAAkBpf,EAAW4W,EAAWxV,EAAYyV,GACzD,IAAI7tD,EAAQmxB,EAAO1rC,KAAKsC,KAAMivD,EAAW4W,EAAWxV,EAAYyV,IAAe9lE,KA+E/E,OA1EAiY,EAAMq2D,QAAU,KAKhBr2D,EAAM+8C,MAAQ,GAKd/8C,EAAMs2D,aAAe,EAKrBt2D,EAAMu2D,aAAe,EAKrBv2D,EAAMw2D,yBAAsBhwE,EAK5BwZ,EAAMy2D,cAAgB,EAKtBz2D,EAAM02D,eAAiB,KAIvB12D,EAAM22D,WAAa,GAKnB32D,EAAM42D,iBAAmB,KAIzB52D,EAAM62D,aAAe,GAKrB72D,EAAM82D,WAA6D,GAInE92D,EAAM+2D,WAAa,GAKnB/2D,EAAMg3D,SAAW,GAKjBh3D,EAAMi3D,SAAW,GAKjBj3D,EAAMk3D,WAAa,GAMnBl3D,EAAM6zD,6BAA0BrtE,EACzBwZ,EA4ZX,OAnfA,EAAUo2D,EAAmBjlC,GA4F7BilC,EAAkBnxE,UAAUwrE,OAAS,WACjC,IAAIvC,EAAe/8B,EAAOlsC,UAAUwrE,OAAOhrE,KAAKsC,MAIhD,OAHAmmE,EAAa6I,WAAahvE,KAAKgvE,WAC/B7I,EAAayI,WAAa5uE,KAAK4uE,WAC/BzI,EAAa2I,aAAe9uE,KAAK8uE,aAC1B3I,GAMXkI,EAAkBnxE,UAAUioE,SAAW,SAAU7Q,EAAU0B,GACvD,IAAIoZ,EAAYpvE,KAAK2uE,eACjBU,EAAcrvE,KAAK6uE,iBACnBS,EAAYtvE,KAAK+uE,WACrB,GAAmB,KAAf/uE,KAAKg1D,OAAiBsa,IAAeF,GAAcC,GAAvD,CAGA,IAAI7iB,EAAcxsD,KAAKwsD,YACnBvhB,EAAQuhB,EAAY/xD,OACpB80E,EAAejb,EAASwT,UACxBrZ,EAAkB,KAClBC,EAAS4F,EAASyT,YACtB,GAAIuH,EAAUE,YAAcC,EAAA,EAAcC,MACrCH,GAAgBtH,EAAA,QAAapR,aAC1B0Y,GAAgBtH,EAAA,QAAanR,mBAC7ByY,GAAgBtH,EAAA,QAAatR,SAC7B4Y,GAAgBtH,EAAA,QAAarR,cA+ChC,CACD,IAAI+Y,EAAiBL,EAAU3rB,SAAW,KAAO,GACjD,OAAQ4rB,GACJ,KAAKtH,EAAA,QAAajR,MAClB,KAAKiR,EAAA,QAAahR,YACdxI,EAA4E,EAAW8Z,qBACvF,MACJ,KAAKN,EAAA,QAAapR,YACdpI,EAA4E,EAAWmhB,kBACvF,MACJ,KAAK3H,EAAA,QAAalR,OACdtI,EAAwE,EAAWkB,YACnF,MACJ,KAAKsY,EAAA,QAAanR,kBACdrI,EAAiF,EAAWohB,mBAC5FnhB,EAAS,EACT,MACJ,KAAKuZ,EAAA,QAAatR,QACdlI,EAAyE,EAAWqhB,uBAC/ER,EAAU3rB,UACXgsB,EAAenvE,KAAKiuD,EAAgB,GAAKzuD,KAAKqwD,YAElD3B,EAAS,EACT,MACJ,KAAKuZ,EAAA,QAAarR,cACd,IAAImZ,EAA6E,EAAWC,wBAC5FvhB,EAAkB,GAClB,IAAS5yD,EAAI,EAAG8a,EAAKo5D,EAAet1E,OAAQoB,EAAI8a,EAAI9a,GAAK,EAChDyzE,EAAU3rB,UACXgsB,EAAenvE,KAAKuvE,EAAel0E,EAAI,GAAKmE,KAAKqwD,YAErD5B,EAAgBjuD,KAAKuvE,EAAel0E,GAAIk0E,EAAel0E,EAAI,IAE/D,GAA+B,IAA3B4yD,EAAgBh0D,OAChB,OAEJi0D,EAAS,EAKjB,IADI5rD,EAAM9C,KAAK0mE,2BAA2BjY,EAAiBC,MAC/CzjB,EACR,OAEJjrC,KAAKiwE,mBACDX,EAAUY,gBAAkBZ,EAAUa,oBACtCnwE,KAAKolE,mBAAmBkK,EAAUY,eAAgBZ,EAAUa,kBACxDb,EAAUY,iBACVlwE,KAAKsqE,gBAAgBtqE,KAAKsmE,MAAOtmE,KAAKkqE,YACtClqE,KAAKqmE,yBAAyB7lE,KAAKR,KAAKkqE,WAAWlqE,KAAKsmE,SAExDgJ,EAAUa,mBACVnwE,KAAKwqE,kBAAkBxqE,KAAKsmE,MAAOtmE,KAAKoqE,aACxCpqE,KAAKqmE,yBAAyB7lE,KAAKR,KAAKqqE,aAAarqE,KAAKsmE,UAGlEtmE,KAAK4nE,cAActT,EAAU0B,GAE7B,IAAIxhB,EAAU86B,EAAU96B,QACxB,GAAIA,GAAW,MACV86B,EAAUxiE,MAAM,GAAK,GAAKwiE,EAAUxiE,MAAM,GAAK,GAAI,CACpD,IAAIsjE,EAAKd,EAAU96B,QAAQ,GACvB67B,EAAKf,EAAU96B,QAAQ,GACvB87B,EAAKhB,EAAU96B,QAAQ,GACvB+7B,EAAKjB,EAAU96B,QAAQ,GACvB86B,EAAUxiE,MAAM,GAAK,IACrBujE,GAAMA,EACNE,GAAMA,GAENjB,EAAUxiE,MAAM,GAAK,IACrBsjE,GAAMA,EACNE,GAAMA,GAEV97B,EAAU,CAAC47B,EAAIC,EAAIC,EAAIC,GAK3B,IAAIC,EAAexwE,KAAK8lE,WACxB9lE,KAAKmmE,aAAa3lE,KAAK,CACnB,EAAkB8iE,WAClBr4B,EACAnoC,EACA,KACA4B,IACAA,IACAA,IACA,EACA,EACA,EACA1E,KAAKyuE,oBACLzuE,KAAK0uE,cACL,CAAC,EAAG,GACJhqE,IACA1E,KAAK8rE,wBACLt3B,GAAW,IACL,IACAA,EAAQjzC,KAAI,SAAUxE,GACpB,OAAOA,EAAIyzE,OAEjBlB,EAAUY,iBACVZ,EAAUa,iBACZnwE,KAAKg1D,MACLh1D,KAAKivE,SACLjvE,KAAKmvE,WACLnvE,KAAKkvE,SACLlvE,KAAKuuE,aACLvuE,KAAKwuE,aACLmB,IAEJ,IAAI7iE,EAAQ,EAAI0jE,EAChBxwE,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkB8iE,WAClBr4B,EACAnoC,EACA,KACA4B,IACAA,IACAA,IACA,EACA,EACA,EACA1E,KAAKyuE,oBACLzuE,KAAK0uE,cACL,CAAC5hE,EAAOA,GACRpI,IACA1E,KAAK8rE,wBACLt3B,IACE86B,EAAUY,iBACVZ,EAAUa,iBACZnwE,KAAKg1D,MACLh1D,KAAKivE,SACLjvE,KAAKmvE,WACLnvE,KAAKkvE,SACLlvE,KAAKuuE,aACLvuE,KAAKwuE,aACLmB,IAEJ3vE,KAAKyoE,YAAYzS,OAzLgC,CACjD,IAAK,qBAAWh2D,KAAK2mE,uBAAwBrS,EAAStB,aAClD,OAEJ,IAAIyU,OAAO,EAEX,GADAhZ,EAAkB6F,EAASiU,qBACvBgH,GAAgBtH,EAAA,QAAapR,YAC7B4Q,EAAO,CAAChZ,EAAgBh0D,aAEvB,GAAI80E,GAAgBtH,EAAA,QAAanR,kBAClC2Q,EAAsE,EAAWe,eAEhF,GAAI+G,GAAgBtH,EAAA,QAAatR,QAClC8Q,EAA8D,EACzDe,UACA/qE,MAAM,EAAG,QAEb,GAAI8xE,GAAgBtH,EAAA,QAAarR,cAAe,CACjD,IAAIuR,EAAoE,EAAWC,WACnFX,EAAO,GACP,IAAK,IAAI5rE,EAAI,EAAG8a,EAAKwxD,EAAM1tE,OAAQoB,EAAI8a,IAAM9a,EACzC4rE,EAAKjnE,KAAK2nE,EAAMtsE,GAAG,IAG3BmE,KAAK4nE,cAActT,EAAU0B,GAI7B,IAHA,IAAIya,EAAYnB,EAAUmB,UACtBC,EAAa,EACbC,OAAU,EACLxuE,EAAI,EAAGyuE,EAAKnJ,EAAKhtE,OAAQ0H,EAAIyuE,IAAMzuE,EAAG,CAC3C,GAAiB1D,MAAbgyE,EAAwB,CACxB,IAAI5wD,EAAQstD,EAAcmC,EAAUlC,SAAU3e,EAAiBiiB,EAAYjJ,EAAKtlE,GAAIusD,GACpFgiB,EAAa7wD,EAAM,GACnB8wD,EAAU9wD,EAAM,QAGhB8wD,EAAUlJ,EAAKtlE,GAEnB,IAAK,IAAItG,EAAI60E,EAAY70E,EAAI80E,EAAS90E,GAAK6yD,EACvClC,EAAYhsD,KAAKiuD,EAAgB5yD,GAAI4yD,EAAgB5yD,EAAI,IAE7D,IAAIiH,EAAM0pD,EAAY/xD,OACtBi2E,EAAajJ,EAAKtlE,GAClBnC,KAAK6wE,WAAW5lC,EAAOnoC,GACvBmoC,EAAQnoC,EAEZ9C,KAAKyoE,YAAYzS,MAkJzBqY,EAAkBnxE,UAAU+yE,gBAAkB,WAC1C,IAAIZ,EAAcrvE,KAAK6uE,iBACnBS,EAAYtvE,KAAK+uE,WACjBK,EAAYpvE,KAAK2uE,eACjBmC,EAAY9wE,KAAKmvE,WACjBE,IACMyB,KAAa9wE,KAAK8uE,eACpB9uE,KAAK8uE,aAAagC,GAAa,CAC3BxL,YAAa+J,EAAY/J,YACzB6D,QAASkG,EAAYlG,QACrBM,eAAgB4F,EAAY5F,eAC5BK,UAAWuF,EAAYvF,UACvBF,SAAUyF,EAAYzF,SACtBK,WAAYoF,EAAYpF,WACxBX,SAAU+F,EAAY/F,YAIlC,IAAIyH,EAAU/wE,KAAKivE,SACb8B,KAAW/wE,KAAKgvE,aAClBhvE,KAAKgvE,WAAW+B,GAAW,CACvBC,KAAM1B,EAAU0B,KAChBP,UAAWnB,EAAUmB,WAAa,IAClCQ,aAAc3B,EAAU2B,cAAgB,IACxCnkE,MAAOwiE,EAAUxiE,QAGzB,IAAIokE,EAAUlxE,KAAKkvE,SACfE,IACM8B,KAAWlxE,KAAK4uE,aAClB5uE,KAAK4uE,WAAWsC,GAAW,CACvB7L,UAAW+J,EAAU/J,cAUrCgJ,EAAkBnxE,UAAU2zE,WAAa,SAAU5lC,EAAOnoC,GACtD,IAAIusE,EAAcrvE,KAAK6uE,iBACnBS,EAAYtvE,KAAK+uE,WACjB+B,EAAY9wE,KAAKmvE,WACjB4B,EAAU/wE,KAAKivE,SACfiC,EAAUlxE,KAAKkvE,SACnBlvE,KAAKiwE,kBACL,IAAInK,EAAa9lE,KAAK8lE,WAClBqL,EAAWpD,EAAWuB,EAAU2B,cAChCtkC,EAAU3sC,KAAKwuE,aAAe1I,EAC9BlmD,EAAO5f,KAAKg1D,MACZoc,EAAc/B,EACXA,EAAYvF,UAAYl0D,KAAKmG,IAAIuzD,EAAUxiE,MAAM,IAAO,EACzD,EACN9M,KAAKmmE,aAAa3lE,KAAK,CACnB,EAAkB6iE,WAClBp4B,EACAnoC,EACAquE,EACA7B,EAAU3rB,SACVutB,EACA5B,EAAUlC,SACVtH,EACAn5B,EACAmkC,EACAM,EAActL,EACdlmD,EACAmxD,EACA,IAEJ/wE,KAAKqmE,yBAAyB7lE,KAAK,CAC/B,EAAkB6iE,WAClBp4B,EACAnoC,EACAquE,EACA7B,EAAU3rB,SACVutB,EACA5B,EAAUlC,SACV,EACAzgC,EACAmkC,EACAM,EACAxxD,EACAmxD,EACA,EAAIjL,KAOZuI,EAAkBnxE,UAAUwoE,aAAe,SAAUC,EAAWsG,GAC5D,IAAIqD,EAAWF,EAAWC,EAC1B,GAAK1J,EAGA,CACD,IAAI0L,EAAgB1L,EAAUvQ,UACzBic,IAKDjC,EAAYpvE,KAAK2uE,kBAEbS,EAA4D,GAC5DpvE,KAAK2uE,eAAiBS,GAE1BA,EAAU/J,UAAY,YAAYgM,EAActI,YAAc,OAT9DqG,EAAY,KACZpvE,KAAK2uE,eAAiBS,GAU1B,IAAIkC,EAAkB3L,EAAUrQ,YAChC,GAAKgc,EAIA,EACDjC,EAAcrvE,KAAK6uE,oBAEfQ,EAAgE,GAChErvE,KAAK6uE,iBAAmBQ,GAE5B,IAAI/F,EAAWgI,EAAgBjI,cAC3BI,EAAiB6H,EAAgB9H,oBACjCM,EAAYwH,EAAgB7hB,WAC5Bwa,EAAaqH,EAAgBtH,gBACjCqF,EAAYlG,QAAUmI,EAAgBpI,cAAgB,IACtDmG,EAAY/F,SAAWA,EAAWA,EAAS7rE,QAAU,IACrD4xE,EAAY5F,oBACWhrE,IAAnBgrE,EAA+B,IAAwBA,EAC3D4F,EAAYzF,SAAW0H,EAAgB3H,eAAiB,IACxD0F,EAAYvF,eACMrrE,IAAdqrE,EAA0B,IAAmBA,EACjDuF,EAAYpF,gBACOxrE,IAAfwrE,EAA2B,IAAoBA,EACnDoF,EAAY/J,YAAc,YAAYgM,EAAgBvI,YAAc,UAtBpEsG,EAAc,KACdrvE,KAAK6uE,iBAAmBQ,EAuB5BC,EAAYtvE,KAAK+uE,WACjB,IAAIiC,EAAOrL,EAAU4L,WAAa,IAClC,YAAaP,GACb,IAAIQ,EAAY7L,EAAU8G,gBAC1B6C,EAAU3rB,SAAWgiB,EAAU8L,cAC/BnC,EAAU0B,KAAOA,EACjB1B,EAAUlC,SAAWzH,EAAU+L,cAC/BpC,EAAUE,UAAY7J,EAAUgM,eAChCrC,EAAUmB,UAAY9K,EAAUiM,eAChCtC,EAAU2B,aACNtL,EAAUkM,mBAAqB,IACnCvC,EAAUY,eAAiBvK,EAAUmM,oBACrCxC,EAAUa,iBAAmBxK,EAAUoM,sBACvCzC,EAAU96B,QAAUmxB,EAAUqM,cAAgB,IAC9C1C,EAAUxiE,WAAsBrO,IAAd+yE,EAA0B,CAAC,EAAG,GAAKA,EACrD,IAAIS,EAActM,EAAUuM,aACxBC,EAAcxM,EAAUyM,aACxBC,EAAqB1M,EAAUzE,oBAC/BoR,EAAe3M,EAAU1E,cAC7BjhE,KAAKg1D,MAAQ2Q,EAAUpQ,WAAa,GACpCv1D,KAAKuuE,kBAA+B9vE,IAAhBwzE,EAA4B,EAAIA,EACpDjyE,KAAKwuE,kBAA+B/vE,IAAhB0zE,EAA4B,EAAIA,EACpDnyE,KAAKyuE,yBACsBhwE,IAAvB4zE,GAA2CA,EAC/CryE,KAAK0uE,mBAAiCjwE,IAAjB6zE,EAA6B,EAAIA,EACtDtyE,KAAKmvE,WAAaE,GACuB,iBAA3BA,EAAY/J,YAChB+J,EAAY/J,YACZ,iBAAO+J,EAAY/J,cACrB+J,EAAYlG,QACZkG,EAAY5F,eACZ,IACA4F,EAAYvF,UACZuF,EAAYzF,SACZyF,EAAYpF,WACZ,IACAoF,EAAY/F,SAASrpE,OACrB,IACF,GACND,KAAKivE,SACDK,EAAU0B,KACN1B,EAAUxiE,OACTwiE,EAAUmB,WAAa,MACvBnB,EAAU2B,cAAgB,KACnCjxE,KAAKkvE,SAAWE,EACoB,iBAAvBA,EAAU/J,UACb+J,EAAU/J,UACV,IAAM,iBAAO+J,EAAU/J,WAC3B,QA1FNrlE,KAAKg1D,MAAQ,GA4FjBh1D,KAAK8rE,wBAA0BG,GAE5BoC,EApf2B,CAqfpC,ICrca,EAvEmB,WAO9B,SAASkE,EAAatjB,EAAW4W,EAAWxV,EAAYyV,GAKpD9lE,KAAKwyE,WAAavjB,EAKlBjvD,KAAKyyE,WAAa5M,EAKlB7lE,KAAK0yE,YAAc5M,EAKnB9lE,KAAK2yE,YAActiB,EAKnBrwD,KAAK4yE,kBAAoB,GAqC7B,OAhCAL,EAAar1E,UAAUwrE,OAAS,WAC5B,IAAImK,EAAsB,GAC1B,IAAK,IAAIC,KAAQ9yE,KAAK4yE,kBAAmB,CACrCC,EAAoBC,GAAQD,EAAoBC,IAAS,GACzD,IAAIC,EAAW/yE,KAAK4yE,kBAAkBE,GACtC,IAAK,IAAIE,KAAcD,EAAU,CAC7B,IAAIE,EAAqBF,EAASC,GAAYtK,SAC9CmK,EAAoBC,GAAME,GAAcC,GAGhD,OAAOJ,GAOXN,EAAar1E,UAAUg2E,WAAa,SAAUhe,EAAQie,GAClD,IAAIC,OAAuB30E,IAAXy2D,EAAuBA,EAAO54D,WAAa,IACvD+2E,EAAUrzE,KAAK4yE,kBAAkBQ,QACrB30E,IAAZ40E,IACAA,EAAU,GACVrzE,KAAK4yE,kBAAkBQ,GAAaC,GAExC,IAAIC,EAASD,EAAQF,QACN10E,IAAX60E,IAEAA,EAAS,IAAIC,EADKvF,EAAmBmF,IACZnzE,KAAKwyE,WAAYxyE,KAAKyyE,WAAYzyE,KAAK2yE,YAAa3yE,KAAK0yE,aAClFW,EAAQF,GAAeG,GAE3B,OAAOA,GAEJf,EArEsB,G,SCblB,EACH,SADG,EAEF,UAFE,EAGJ,QAHI,EAIE,aAJF,EAKF,UALE,EAML,O,oCCSH,SAASiB,EAAe/kB,EAAiBpxD,EAAQyF,EAAK4rD,EAAQ9uC,EAAM6zD,EAAQrG,EAAUtgE,EAAO4mE,EAA0B1C,EAAMrvE,EAAOkL,GACvI,IAAIokD,EAAKxC,EAAgBpxD,GACrBg0D,EAAK5C,EAAgBpxD,EAAS,GAC9B2zD,EAAK,EACLI,EAAK,EACLuiB,EAAgB,EAChBC,EAAW,EACf,SAASC,IACL7iB,EAAKC,EACLG,EAAKC,EAELJ,EAAKxC,EADLpxD,GAAUqxD,GAEV2C,EAAK5C,EAAgBpxD,EAAS,GAC9Bu2E,GAAYD,EACZA,EAAgB/9D,KAAKu3B,MAAM8jB,EAAKD,IAAOC,EAAKD,IAAOK,EAAKD,IAAOC,EAAKD,IAExE,GACIyiB,UACKx2E,EAASyF,EAAM4rD,GAAUklB,EAAWD,EAAgBF,GAO7D,IANA,IAAIK,GAAeL,EAASG,GAAYD,EACpCI,EAAS,YAAK/iB,EAAIC,EAAI6iB,GACtBE,EAAS,YAAK5iB,EAAIC,EAAIyiB,GACtBG,EAAc52E,EAASqxD,EACvBwlB,EAAcN,EACdO,EAAOV,EAAS3mE,EAAQ4mE,EAAyB1C,EAAMpxD,EAAMje,GAC1DtE,EAASyF,EAAM4rD,GAAUklB,EAAWD,EAAgBQ,GACvDN,IAEJC,GAAeK,EAAOP,GAAYD,EAClC,IAGI/K,EAHAxW,EAAO,YAAKpB,EAAIC,EAAI6iB,GACpBzhB,EAAO,YAAKjB,EAAIC,EAAIyiB,GAGxB,GAAIjnE,EAAU,CACV,IAAIunE,EAAO,CAACL,EAAQC,EAAQ5hB,EAAMC,GAClC,YAAO+hB,EAAM,EAAG,EAAG,EAAGvnE,EAAUunE,EAAMA,GACtCxL,EAAUwL,EAAK,GAAKA,EAAK,QAGzBxL,EAAUmL,EAAS3hB,EAEvB,IAoBIiiB,EApBAjd,EAAKxhD,KAAKwhD,GACVh1D,EAAS,GACTkyE,EAAgBL,EAAcvlB,IAAWrxD,EAO7C,GALAs2E,EAAgB,EAChBC,EAAWM,EACXjjB,EAAKxC,EAHLpxD,EAAS42E,GAIT5iB,EAAK5C,EAAgBpxD,EAAS,GAE1Bi3E,EAAe,CACfT,IACA,IAAIU,EAAkB3+D,KAAK4+D,MAAMnjB,EAAKD,EAAIH,EAAKD,GAC3C4X,IACA2L,GAAmBA,EAAkB,GAAKnd,EAAKA,GAEnD,IAAI72D,GAAK6xD,EAAO2hB,GAAU,EACtBtwD,GAAK4uC,EAAO2hB,GAAU,EAE1B,OADA5xE,EAAO,GAAK,CAAC7B,EAAGkjB,GAAI0wD,EAAOV,GAAU,EAAGc,EAAiB30D,GAClDxd,EAGX,IAAK,IAAIvG,EAAI,EAAG8a,EAAKiJ,EAAKnlB,OAAQoB,EAAI8a,GAAK,CACvCk9D,IACA,IAAIY,EAAQ7+D,KAAK4+D,MAAMnjB,EAAKD,EAAIH,EAAKD,GAIrC,GAHI4X,IACA6L,GAASA,EAAQ,GAAKrd,EAAKA,QAET34D,IAAlB41E,EAA6B,CAC7B,IAAI9xE,EAAQkyE,EAAQJ,EAEpB,GADA9xE,GAASA,EAAQ60D,GAAM,EAAIA,EAAK70D,GAAS60D,EAAK,EAAIA,EAAK,EACnDxhD,KAAKmG,IAAIxZ,GAAS6qE,EAClB,OAAO,KAGfiH,EAAgBI,EAGhB,IAFA,IAAIC,EAAS74E,EACT84E,EAAa,EACV94E,EAAI8a,IAAM9a,EAAG,CAChB,IACIyX,EAAMxG,EAAQ4mE,EAAyB1C,EAAMpxD,EADrCgpD,EAAUjyD,EAAK9a,EAAI,EAAIA,GAC2B8F,GAC9D,GAAItE,EAASqxD,EAAS5rD,GAClB8wE,EAAWD,EAAgBF,EAASkB,EAAarhE,EAAM,EACvD,MAEJqhE,GAAcrhE,EAElB,GAAIzX,IAAM64E,EAAV,CAGA,IAAIE,EAAQhM,EACNhpD,EAAKhF,UAAUjE,EAAK+9D,EAAQ/9D,EAAK9a,GACjC+jB,EAAKhF,UAAU85D,EAAQ74E,GAC7Bi4E,GAAeL,EAASkB,EAAa,EAAIf,GAAYD,EACjDpzE,EAAI,YAAKywD,EAAIC,EAAI6iB,GACjBrwD,EAAI,YAAK2tC,EAAIC,EAAIyiB,GACrB1xE,EAAO5B,KAAK,CAACD,EAAGkjB,EAAGkxD,EAAa,EAAGF,EAAOG,IAC1CnB,GAAUkB,GAEd,OAAOvyE,E,cC5EPyyE,GAAY,wBAEZ,GAAK,GAEL,GAAK,GAEL,GAAK,GAELC,GAAK,GAKT,SAASC,GAAgBC,GACrB,OAAOA,EAAuB,GAAGC,aAErC,IAAIC,GAAW,IAAIl0E,OAEnB,IACIlC,OAAOoN,aAAa,MAAW,IAAMpN,OAAOoN,aAAa,MACzDpN,OAAOoN,aAAa,OAAW,IAAMpN,OAAOoN,aAAa,OACzDpN,OAAOoN,aAAa,OAAW,IAAMpN,OAAOoN,aAAa,OACzDpN,OAAOoN,aAAa,OAAW,IAAMpN,OAAOoN,aAAa,OACzDpN,OAAOoN,aAAa,QAAW,IAAMpN,OAAOoN,aAAa,QACzD,KAQJ,SAASipE,GAAoBv1D,EAAMw1D,GAI/B,MAHe,UAAVA,GAA+B,QAAVA,GAAqBF,GAAS51E,KAAKsgB,KACzDw1D,EAAkB,UAAVA,EAAoB,OAAS,SAElCrH,EAAWqH,GAEtB,IA+zBe,GA/zBe,WAQ1B,SAASC,EAAShlB,EAAYyV,EAAYwP,EAAUnP,EAAcxE,GAK9D3hE,KAAKs1E,SAAWA,EAKhBt1E,KAAK8lE,WAAaA,EAMlB9lE,KAAKqwD,WAAaA,EAKlBrwD,KAAKu1E,WAKLv1E,KAAKmmE,aAAeA,EAAaA,aAKjCnmE,KAAKwsD,YAAc2Z,EAAa3Z,YAKhCxsD,KAAKw1E,iBAAmB,GAKxBx1E,KAAKgiE,cAAgBL,EAKrB3hE,KAAKy1E,mBAAqB,cAK1Bz1E,KAAKqmE,yBAA2BF,EAAaE,yBAK7CrmE,KAAK01E,kBAAoB,KAKzB11E,KAAK21E,cAAgB,EAIrB31E,KAAK4uE,WAAazI,EAAayI,YAAc,GAI7C5uE,KAAK8uE,aAAe3I,EAAa2I,cAAgB,GAIjD9uE,KAAKgvE,WAAa7I,EAAa6I,YAAc,GAK7ChvE,KAAK41E,QAAU,GAKf51E,KAAKsuE,QAAU,GAkuBnB,OAztBA+G,EAASn4E,UAAU24E,YAAc,SAAUj2D,EAAMmxD,EAASG,EAASJ,GAC/D,IAAIxhE,EAAMsQ,EAAOmxD,EAAUG,EAAUJ,EACrC,GAAI9wE,KAAKsuE,QAAQh/D,GACb,OAAOtP,KAAKsuE,QAAQh/D,GAExB,IAAI+/D,EAAcyB,EAAY9wE,KAAK8uE,aAAagC,GAAa,KACzD1B,EAAY8B,EAAUlxE,KAAK4uE,WAAWsC,GAAW,KACjD5B,EAAYtvE,KAAKgvE,WAAW+B,GAC5BjL,EAAa9lE,KAAK8lE,WAClBh5D,EAAQ,CACRwiE,EAAUxiE,MAAM,GAAKg5D,EACrBwJ,EAAUxiE,MAAM,GAAKg5D,GAErBsP,EAAQD,GAAoBv1D,EAAM0vD,EAAUmB,WAAa,KACzDW,EAAcN,GAAazB,EAAYvF,UAAYuF,EAAYvF,UAAY,EAC3EgM,EAAQl2D,EAAKpjB,MAAM,MACnBu5E,EAAWD,EAAMr7E,OACjBu7E,EAAS,GACTx8B,EAAQ,YAAkB81B,EAAU0B,KAAM8E,EAAOE,GACjDC,EAAa,YAAkB3G,EAAU0B,MAEzCkF,EAAc18B,EAAQ43B,EACtB+E,EAAsB,GAEtBC,GAAKF,EAAc,GAAKppE,EAAM,GAC9B2K,GALSw+D,EAAaF,EAKR3E,GAAetkE,EAAM,GAEnCupE,EAAQ,CACR78B,MAAO48B,EAAI,EAAIxgE,KAAKC,MAAMugE,GAAKxgE,KAAKo2D,KAAKoK,GACzC38B,OAAQhiC,EAAI,EAAI7B,KAAKC,MAAM4B,GAAK7B,KAAKo2D,KAAKv0D,GAC1C0+D,oBAAqBA,IAET,GAAZrpE,EAAM,IAAuB,GAAZA,EAAM,IACvBqpE,EAAoB31E,KAAK,QAASsM,GAEtCqpE,EAAoB31E,KAAK,OAAQ8uE,EAAU0B,MACvCF,KACAqF,EAAoB31E,KAAK,cAAe6uE,EAAY/J,aACpD6Q,EAAoB31E,KAAK,YAAa4wE,GACtC+E,EAAoB31E,KAAK,UAAW6uE,EAAYlG,SAChDgN,EAAoB31E,KAAK,WAAY6uE,EAAYzF,UACjDuM,EAAoB31E,KAAK,aAAc6uE,EAAYpF,aAErC,IAA0BqM,kCAAoCC,0BAChEr5E,UAAUs5E,cAClBL,EAAoB31E,KAAK,cAAe,CAAC6uE,EAAY/F,WACrD6M,EAAoB31E,KAAK,iBAAkB6uE,EAAY5F,kBAG3DyH,GACAiF,EAAoB31E,KAAK,YAAa4uE,EAAU/J,WAEpD8Q,EAAoB31E,KAAK,eAAgB,UACzC21E,EAAoB31E,KAAK,YAAa,UACtC,IAEI3E,EAFA46E,EAAY,GAAMrB,EAClB70E,EAAI60E,EAAQc,EAAcO,EAAYrF,EAE1C,GAAIN,EACA,IAAKj1E,EAAI,EAAGA,EAAIk6E,IAAYl6E,EACxBs6E,EAAoB31E,KAAK,aAAc,CACnCs1E,EAAMj6E,GACN0E,EAAIk2E,EAAYT,EAAOn6E,GACvB,IAAOu1E,EAAc6E,GAAcp6E,EAAIo6E,IAInD,GAAI/E,EACA,IAAKr1E,EAAI,EAAGA,EAAIk6E,IAAYl6E,EACxBs6E,EAAoB31E,KAAK,WAAY,CACjCs1E,EAAMj6E,GACN0E,EAAIk2E,EAAYT,EAAOn6E,GACvB,IAAOu1E,EAAc6E,GAAcp6E,EAAIo6E,IAKnD,OADAj2E,KAAKsuE,QAAQh/D,GAAO+mE,EACbA,GAWXhB,EAASn4E,UAAUw5E,sBAAwB,SAAUp7E,EAAS+0E,EAAIC,EAAIC,EAAIuE,EAAI3K,EAAiBwM,GAC3Fr7E,EAAQs7E,YACRt7E,EAAQu7E,OAAOj7E,MAAMN,EAAS+0E,GAC9B/0E,EAAQw7E,OAAOl7E,MAAMN,EAASg1E,GAC9Bh1E,EAAQw7E,OAAOl7E,MAAMN,EAASi1E,GAC9Bj1E,EAAQw7E,OAAOl7E,MAAMN,EAASw5E,GAC9Bx5E,EAAQw7E,OAAOl7E,MAAMN,EAAS+0E,GAC1BlG,IACAnqE,KAAKu1E,WAAqCpL,EAAgB,GAC1DnqE,KAAKw0D,MAAMl5D,IAEXq7E,IACA32E,KAAK+2E,gBAAgBz7E,EACG,GACxBA,EAAQy5D,WAuBhBsgB,EAASn4E,UAAU85E,iCAAmC,SAAUC,EAAYC,EAAaC,EAASC,EAAS59B,EAAOC,EAAQ49B,EAASC,EAASC,EAASC,EAAS3qE,EAAUC,EAAO2qE,EAAajjC,EAASkjC,EAAY1hB,GAG7M,IAkBIxoB,EAlBAjtC,EAAI42E,GAFRE,GAAWvqE,EAAM,IAGb2W,EAAI2zD,GAFRE,GAAWxqE,EAAM,IAGbspE,EAAI58B,EAAQ+9B,EAAUN,EAAaA,EAAaM,EAAU/9B,EAC1D/hC,EAAIgiC,EAAS+9B,EAAUN,EAAcA,EAAcM,EAAU/9B,EAC7Dk+B,EAAOnjC,EAAQ,GAAK4hC,EAAItpE,EAAM,GAAK0nC,EAAQ,GAC3CojC,EAAOpjC,EAAQ,GAAK/8B,EAAI3K,EAAM,GAAK0nC,EAAQ,GAC3CqjC,EAAOt3E,EAAIi0C,EAAQ,GACnBsjC,EAAOr0D,EAAI+wB,EAAQ,GA2BvB,OA1BIkjC,GAA2B,IAAb7qE,KACd,GAAG,GAAKgrE,EACR/C,GAAG,GAAK+C,EACR,GAAG,GAAKC,EACR,GAAG,GAAKA,EACR,GAAG,GAAKD,EAAOF,EACf,GAAG,GAAK,GAAG,GACX,GAAG,GAAKG,EAAOF,EACf9C,GAAG,GAAK,GAAG,IAGE,IAAbjoE,GACA2gC,EAAY,YAAiB,cAAmB2pC,EAASC,EAAS,EAAG,EAAGvqE,GAAWsqE,GAAUC,GAC7F,YAAe5pC,EAAW,IAC1B,YAAeA,EAAW,IAC1B,YAAeA,EAAW,IAC1B,YAAeA,EAAWsnC,IAC1B,yBAAel/D,KAAK6K,IAAI,GAAG,GAAI,GAAG,GAAI,GAAG,GAAIq0D,GAAG,IAAKl/D,KAAK6K,IAAI,GAAG,GAAI,GAAG,GAAI,GAAG,GAAIq0D,GAAG,IAAKl/D,KAAK8K,IAAI,GAAG,GAAI,GAAG,GAAI,GAAG,GAAIo0D,GAAG,IAAKl/D,KAAK8K,IAAI,GAAG,GAAI,GAAG,GAAI,GAAG,GAAIo0D,GAAG,IAAKD,KAGvK,yBAAej/D,KAAK6K,IAAIo3D,EAAMA,EAAOF,GAAO/hE,KAAK6K,IAAIq3D,EAAMA,EAAOF,GAAOhiE,KAAK8K,IAAIm3D,EAAMA,EAAOF,GAAO/hE,KAAK8K,IAAIo3D,EAAMA,EAAOF,GAAO/C,IAEnI4C,IACAl3E,EAAIqV,KAAKmiE,MAAMx3E,GACfkjB,EAAI7N,KAAKmiE,MAAMt0D,IAEZ,CACHu0D,WAAYz3E,EACZ03E,WAAYx0D,EACZy0D,WAAY9B,EACZ+B,WAAY1gE,EACZ8/D,QAASA,EACTC,QAASA,EACTvC,aAAc,CACVznB,KAAMqnB,GAAU,GAChBpnB,KAAMonB,GAAU,GAChBnnB,KAAMmnB,GAAU,GAChBlnB,KAAMknB,GAAU,GAChBt2E,MAAOy3D,GAEXoiB,gBAAiB5qC,EACjB1gC,MAAOA,IAcfuoE,EAASn4E,UAAUm7E,oBAAsB,SAAU/8E,EAASg9E,EAAcC,EAAcC,EAAY7qC,EAASw8B,EAAiBwM,GAC1H,IAAIe,KAAgBvN,IAAmBwM,GACnC8B,EAAMD,EAAWvD,aACjByD,EAASp9E,EAAQo9E,OACjBC,EAAgBhC,EACbA,EAAkB,GAAK6B,EAAW1rE,MAAM,GAAM,EAC/C,EAaN,OAZiB2rE,EAAIjrB,KAAOmrB,GAAiBD,EAAOl/B,MAAQ8+B,GACxDG,EAAI/qB,KAAOirB,GAAiB,GAC5BF,EAAIhrB,KAAOkrB,GAAiBD,EAAOj/B,OAAS6+B,GAC5CG,EAAI9qB,KAAOgrB,GAAiB,IAExBjB,GACA13E,KAAK02E,sBAAsBp7E,EAAS,GAAI,GAAI,GAAIw5E,GACxB,EACA,GAE5B,YAAiBx5E,EAASk9E,EAAWJ,gBAAiBzqC,EAAS4qC,EAAcC,EAAWjB,QAASiB,EAAWhB,QAASgB,EAAWN,WAAYM,EAAWL,WAAYK,EAAWR,WAAYQ,EAAWP,WAAYO,EAAW1rE,SAEzN,GAMXuoE,EAASn4E,UAAUs3D,MAAQ,SAAUl5D,GACjC,GAAI0E,KAAKu1E,WAAY,CACjB,IAAIqD,EAAW,YAAe54E,KAAKy1E,mBAAoB,CAAC,EAAG,IACvDoD,EAAa,IAAM74E,KAAK8lE,WAC5BxqE,EAAQw9E,OACRx9E,EAAQy9E,UAAUH,EAAS,GAAKC,EAAYD,EAAS,GAAKC,GAC1Dv9E,EAAQ09E,OAAOh5E,KAAK21E,eAExBr6E,EAAQm5D,OACJz0D,KAAKu1E,YACLj6E,EAAQ29E,WAQhB5D,EAASn4E,UAAU65E,gBAAkB,SAAUz7E,EAASutE,GACpDvtE,EAAqB,YAA2DutE,EAAY,GAC5FvtE,EAAQwuE,UAAmCjB,EAAY,GACvDvtE,EAAQ6tE,QAAwCN,EAAY,GAC5DvtE,EAAQsuE,SAA0Cf,EAAY,GAC9DvtE,EAAQ2uE,WAAoCpB,EAAY,GACpDvtE,EAAQk7E,cACRl7E,EAAQmuE,eAAwCZ,EAAY,GAC5DvtE,EAAQk7E,YAA0C3N,EAAY,MAWtEwM,EAASn4E,UAAUg8E,6BAA+B,SAAUt5D,EAAMmxD,EAASD,EAAWI,GAClF,IAAI5B,EAAYtvE,KAAKgvE,WAAW+B,GAC5BsF,EAAQr2E,KAAK61E,YAAYj2D,EAAMmxD,EAASG,EAASJ,GACjDzB,EAAcrvE,KAAK8uE,aAAagC,GAChChL,EAAa9lE,KAAK8lE,WAClBsP,EAAQD,GAAoBv1D,EAAM0vD,EAAUmB,WAAa,KACzDU,EAAWpD,EAAWuB,EAAU2B,cAAgB,KAChDG,EAAc/B,GAAeA,EAAYvF,UAAYuF,EAAYvF,UAAY,EAMjF,MAAO,CACHuM,MAAOA,EACPgB,QALUjC,GADFiB,EAAM78B,MAAQssB,EAAa,EAAIwJ,EAAUxiE,MAAM,IAC7B,GAAK,GAAMsoE,GAAShE,EAM9CkG,QALWnG,EAAWkF,EAAM58B,OAAUqsB,EACtC,GAAK,GAAMqL,GAAYC,IAqB/BiE,EAASn4E,UAAUi8E,SAAW,SAAU79E,EAASg9E,EAAc9qC,EAAW24B,EAAcsR,EAAa2B,EAAqBC,EAAeC,GAErI,IAAIC,EACAv5E,KAAK01E,mBAAqB,YAAOloC,EAAWxtC,KAAKy1E,oBACjD8D,EAAmBv5E,KAAK01E,mBAGnB11E,KAAK01E,oBACN11E,KAAK01E,kBAAoB,IAE7B6D,EAAmB,YAAYv5E,KAAKwsD,YAAa,EAAGxsD,KAAKwsD,YAAY/xD,OAAQ,EAAG+yC,EAAWxtC,KAAK01E,mBAChG,YAAsB11E,KAAKy1E,mBAAoBjoC,IAyBnD,IAvBA,IAGIgsC,EACAnC,EAASC,EAASmC,EAAOC,EAAOC,EAAQC,EAAQjlB,EAAO/0C,EAAMmxD,EAASD,EAAWI,EAiB3Blb,EACtDz1D,EAAGkjB,EAAGo2D,EAtBNh+E,EAAI,EACJ8a,EAAKwvD,EAAa1rE,OAClBwb,EAAI,EAGJ6jE,EAAc,EACdC,EAAgB,EAChBC,EAAsB,KACtBC,EAAwB,KACxBC,EAAkBl6E,KAAKw1E,iBACvB2E,EAAen6E,KAAK21E,cACpByE,EAA4BxkE,KAAKmiE,MAAgD,KAA1CniE,KAAK4+D,OAAOhnC,EAAU,GAAIA,EAAU,KAAc,KACzF84B,EAAuD,CACvDhrE,QAASA,EACTwqE,WAAY9lE,KAAK8lE,WACjBzV,WAAYrwD,KAAKqwD,WACjBxjD,SAAUstE,GAIVE,EAAYr6E,KAAKmmE,cAAgBA,GAAgBnmE,KAAKs1E,SAAW,EAAI,IAGlEz5E,EAAI8a,GAAI,CACX,IAAIkyD,EAAc1C,EAAatqE,GAE/B,OAD8DgtE,EAAY,IAEtE,KAAK,EAAkB5F,eACnBjN,EAAiE6S,EAAY,GAC7EgR,EAAkBhR,EAAY,GACzB7S,EAAQb,mBAGc12D,IAAlB46E,GACJ,qBAAWA,EAAeQ,EAAgB7mB,eAIzCn3D,EAHFA,EAA2BgtE,EAAY,GAAM,EAJ7ChtE,EAA2BgtE,EAAY,GAS3C,MACJ,KAAK,EAAkB3F,WACf4W,EAAcO,IACdr6E,KAAKw0D,MAAMl5D,GACXw+E,EAAc,GAEdC,EAAgBM,IAChB/+E,EAAQy5D,SACRglB,EAAgB,GAEfD,GAAgBC,IACjBz+E,EAAQs7E,YACR6C,EAAQ/0E,IACRg1E,EAAQh1E,OAEV7I,EACF,MACJ,KAAK,EAAkBk7D,OAEnB,IAAI/F,EAAKuoB,EADTtjE,EAA2B4yD,EAAY,IAEnCzX,EAAKmoB,EAAiBtjE,EAAI,GAG1B82C,EAFKwsB,EAAiBtjE,EAAI,GAEhB+6C,EACVhE,EAFKusB,EAAiBtjE,EAAI,GAEhBm7C,EACVnwD,EAAI2U,KAAKu3B,KAAK4f,EAAKA,EAAKC,EAAKA,GACjC1xD,EAAQu7E,OAAO7lB,EAAK/vD,EAAGmwD,GACvB91D,EAAQg/E,IAAItpB,EAAII,EAAInwD,EAAG,EAAG,EAAI2U,KAAKwhD,IAAI,KACrCv7D,EACF,MACJ,KAAK,EAAkBsnE,WACnB7nE,EAAQi/E,cACN1+E,EACF,MACJ,KAAK,EAAkBunE,OACnBntD,EAA2B4yD,EAAY,GACvC2Q,EAAK3Q,EAAY,GACjB,IAAIvU,EAA0EuU,EAAY,GACtFhU,EAAWgU,EAAY,GACvBhnE,EAA2B,GAAtBgnE,EAAYpuE,OAAcouE,EAAY,QAAKpqE,EACpD6nE,EAAMhS,SAAWA,EACjBgS,EAAMtQ,QAAUA,EACVn6D,KAAKq+E,IACPA,EAAgBr+E,GAAK,IAEzB,IAAI2+E,GAASN,EAAgBr+E,GACzBgG,EACAA,EAAG03E,EAAkBtjE,EAAGujE,EAAI,EAAGgB,KAG/BA,GAAO,GAAKjB,EAAiBtjE,GAC7BukE,GAAO,GAAKjB,EAAiBtjE,EAAI,GACjCukE,GAAO//E,OAAS,GAEpBo6D,EAAS2lB,GAAQlU,KACfzqE,EACF,MACJ,KAAK,EAAkBynE,WACnBrtD,EAA2B4yD,EAAY,GACvC2Q,EAA4B3Q,EAAY,GACxClU,EAA4EkU,EAAY,GAExFwO,EAAiCxO,EAAY,GAC7CyO,EAAiCzO,EAAY,GAC7C,IAAIpvB,GAAgCovB,EAAY,GAC5Cl7B,GAAiCk7B,EAAY,GAC7C0O,GAAiC1O,EAAY,GAC7C2O,GAAiC3O,EAAY,GAC7ChI,GAAyCgI,EAAY,IACrDh8D,GAAkCg8D,EAAY,IAC9C/7D,GAAqD+7D,EAAY,IACjErvB,GAA+BqvB,EAAY,IAC3C4R,GAAuF5R,EAAY,IACvG,IAAKlU,GAASkU,EAAYpuE,QAAU,GAAI,CAEpCmlB,EAA8BipD,EAAY,IAC1CkI,EAAiClI,EAAY,IAC7CiI,EAAmCjI,EAAY,IAC/CqI,EAAiCrI,EAAY,IAC7C,IAAI6R,GAAkB16E,KAAKk5E,6BAA6Bt5D,EAAMmxD,EAASD,EAAWI,GAClFvc,EAAQ+lB,GAAgBrE,MACxBxN,EAAY,GAAKlU,EACjB,IAAIsd,GAAqCpJ,EAAY,IACrDwO,GAAWqD,GAAgBrD,QAAUpF,IAAejyE,KAAK8lE,WACzD+C,EAAY,GAAKwO,EACjB,IAAIlF,GAAqCtJ,EAAY,IACrDyO,GAAWoD,GAAgBpD,QAAUnF,IAAenyE,KAAK8lE,WACzD+C,EAAY,GAAKyO,EACjB79B,GAASkb,EAAMlb,OACfovB,EAAY,GAAKpvB,GACjBD,GAAQmb,EAAMnb,MACdqvB,EAAY,IAAMrvB,GAEtB,IAAIm2B,QAAiB,EACjB9G,EAAYpuE,OAAS,KACrBk1E,GAAwC9G,EAAY,KAExD,IAAIr0B,QAAU,EAAQ07B,QAAiB,EAAQC,QAAmB,EAC9DtH,EAAYpuE,OAAS,IACrB+5C,GAAwCq0B,EAAY,IACpDqH,GAAyCrH,EAAY,IACrDsH,GAA2CtH,EAAY,MAGvDr0B,GAAU,IACV07B,IAAiB,EACjBC,IAAmB,GAEnBtP,IAAkBuZ,EAElBvtE,IAAYstE,EAENtZ,IAAmBuZ,IAEzBvtE,IAAYstE,GAGhB,IADA,IAAIQ,GAAa,EACV1kE,EAAIujE,EAAIvjE,GAAK,EAChB,KAAI05D,IACAA,GAAegL,MAAgBnhC,GAAQx5C,KAAK8lE,YADhD,CAIA,IAEI/lE,GAAO,CACPzE,EACAg9E,EACA3jB,EALA6jB,GAAax4E,KAAKg3E,iCAAiCriB,EAAMnb,MAAOmb,EAAMlb,OAAQ8/B,EAAiBtjE,GAAIsjE,EAAiBtjE,EAAI,GAAIujC,GAAOC,GAAQ49B,EAASC,EAASC,GAASC,GAAS3qE,GAAUC,GAAO2qE,EAAajjC,GAAS07B,IAAkBC,GAAkBna,GAO1ProB,GACAuiC,GAC8B,EACxB,KACNC,GAC8B,EACxB,MAENyK,QAAY,EACZC,QAAoB,EACxB,GAAIvB,GAAqBmB,GAAwB,CAC7C,IAAKA,GAAuBxkE,GAAI,CAE5BwkE,GAAuBxkE,GAAKlW,GAE5B,SAKJ,GAHA66E,GAAYH,GAAuBxkE,UAC5BwkE,GAAuBxkE,GAC9B4kE,GAAoB9F,GAAgB6F,IAChCtB,EAAkBwB,SAASD,IAC3B,SAGJvB,GACAA,EAAkBwB,SAAStC,GAAWvD,gBAGtC2F,KAEItB,GACAA,EAAkByB,OAAOF,IAG7B76E,KAAKq4E,oBAAoBz8E,MAAMoE,KAAM46E,KAErCtB,GACAA,EAAkByB,OAAOvC,GAAWvD,cAExCj1E,KAAKq4E,oBAAoBz8E,MAAMoE,KAAMD,OAEvClE,EACF,MACJ,KAAK,EAAkBwnE,WACnB,IAAIp4B,GAA+B49B,EAAY,GAC3C/lE,GAA6B+lE,EAAY,GACzCsI,GAAkCtI,EAAY,GAC9CllB,GAAkCklB,EAAY,GAClDqI,EAAiCrI,EAAY,GAC7C,IAAIuE,GAAkCvE,EAAY,GAC9CmS,GAA2CnS,EAAY,GACvDl8B,GAAiCk8B,EAAY,GACjDiI,EAAmCjI,EAAY,GAC/C,IAAIuI,GAAqCvI,EAAY,IACrDjpD,EAA8BipD,EAAY,IAC1CkI,EAAiClI,EAAY,IAC7C,IAAIoS,GAAkB,CACKpS,EAAY,IACZA,EAAY,KAEnCyG,GAAYtvE,KAAKgvE,WAAW+B,GAC5BC,GAAO1B,GAAU0B,KACjBQ,GAAY,CACZlC,GAAUxiE,MAAM,GAAKkuE,GACrB1L,GAAUxiE,MAAM,GAAKkuE,IAErBE,QAAe,EACflK,MAAQhxE,KAAK41E,QACbsF,GAAel7E,KAAK41E,QAAQ5E,KAG5BkK,GAAe,GACfl7E,KAAK41E,QAAQ5E,IAAQkK,IAEzB,IAAIC,GAAa,aAAiB5B,EAAkBtuC,GAAOnoC,GAAK,GAC5Ds4E,GAAaxlE,KAAKmG,IAAIy1D,GAAU,IAChC,YAAyBR,GAAMpxD,EAAMs7D,IACzC,GAAIv3B,IAAYy3B,IAAcD,GAAY,CACtC,IAAI1K,GAAYzwE,KAAKgvE,WAAW+B,GAASN,UAErC9zE,GAAQ62E,EAAe+F,EAAkBtuC,GAAOnoC,GAAK,EAAG8c,GAD9Cu7D,GAAaC,IAAcrN,EAAW0C,IACsBrD,GAAUx3D,KAAKmG,IAAIy1D,GAAU,IAAK,IAA0BR,GAAMkK,GAAcd,EAA4B,EAAIp6E,KAAK21E,eAC/L0F,EAAW,GAAI1+E,GAAO,CAElB,IAAIq4E,GAAyB,GACzB7pE,QAAI,EAAQmwE,QAAK,EAAQ1G,QAAQ,EAAQyB,QAAQ,EAAQlqD,QAAO,EACpE,GAAI2kD,EACA,IAAK3lE,GAAI,EAAGmwE,GAAK3+E,GAAMlC,OAAQ0Q,GAAImwE,KAAMnwE,GAAG,CAExCypE,IADAzoD,GAAOxvB,GAAMwO,KACuB,GACpCkrE,GAAQr2E,KAAK61E,YAAYjB,GAAO7D,EAAS,GAAID,GAC7CuG,EAC2BlrD,GAAK,IACvBqlD,GAAU,GAAK,GAAKJ,GAAcA,IAC3CkG,EACInG,GAAWkF,GAAM58B,OACO,GAAlB,GAAM03B,IAAgBC,GAAcI,GAAU,GAC5CA,GAAU,GACd7kC,GACR,IAAI6rC,GAAax4E,KAAKg3E,iCAAiCX,GAAM78B,MAAO68B,GAAM58B,OAAQttB,GAAK,GAAIA,GAAK,GAAIkqD,GAAM78B,MAAO68B,GAAM58B,OAAQ49B,EAASC,EAAS,EAAG,EAAGnrD,GAAK,GAAI8uD,IAAiB,EAAO,KAAgB,EAAOjlB,GAC/M,GAAIsjB,GACAA,EAAkBwB,SAAStC,GAAWvD,cACtC,MAAMoG,EAEVrG,GAAuBx0E,KAAK,CACxBlF,EACAg9E,EACAjC,GACAmC,GACA,EACA,KACA,OAIZ,GAAItH,EACA,IAAK/lE,GAAI,EAAGmwE,GAAK3+E,GAAMlC,OAAQ0Q,GAAImwE,KAAMnwE,GAAG,CAExCypE,IADAzoD,GAAOxvB,GAAMwO,KACuB,GACpCkrE,GAAQr2E,KAAK61E,YAAYjB,GAAO7D,EAASG,EAAS,IAClDmG,EAAiClrD,GAAK,GACtCmrD,EAAUnG,GAAWkF,GAAM58B,OAAS9M,GAChC6rC,GAAax4E,KAAKg3E,iCAAiCX,GAAM78B,MAAO68B,GAAM58B,OAAQttB,GAAK,GAAIA,GAAK,GAAIkqD,GAAM78B,MAAO68B,GAAM58B,OAAQ49B,EAASC,EAAS,EAAG,EAAGnrD,GAAK,GAAI8uD,IAAiB,EAAO,KAAgB,EAAOjlB,GAC/M,GAAIsjB,GACAA,EAAkBwB,SAAStC,GAAWvD,cACtC,MAAMoG,EAEVrG,GAAuBx0E,KAAK,CACxBlF,EACAg9E,EACAjC,GACAmC,GACA,EACA,KACA,OAIRc,GACAA,EAAkBp5B,KAAK80B,GAAuBzzE,IAAIwzE,KAEtD,IAAK,IAAIwG,GAAM,EAAGC,GAAOxG,GAAuBv6E,OAAQ8gF,GAAMC,KAAQD,GAClEv7E,KAAKq4E,oBAAoBz8E,MAAMoE,KAAMg1E,GAAuBuG,QAItE1/E,EACF,MACJ,KAAK,EAAkB0nE,aACnB,QAA4B9kE,IAAxB26E,EAAmC,CAEnC,IAAIh3E,GAASg3E,EADbpjB,EAAiE6S,EAAY,GACnCgR,GAC1C,GAAIz3E,GACA,OAAOA,KAGbvG,EACF,MACJ,KAAK,EAAkB2nE,KACf6W,EACAP,IAGA95E,KAAKw0D,MAAMl5D,KAEbO,EACF,MACJ,KAAK,EAAkB4nE,gBAYnB,IAXAxtD,EAA2B4yD,EAAY,GACvC2Q,EAA4B3Q,EAAY,GACxCtoE,EAAIg5E,EAAiBtjE,GAGrB2jE,GAFAn2D,EAAI81D,EAAiBtjE,EAAI,IAEX,GAAO,GADrB0jE,EAAUp5E,EAAI,GAAO,KAENk5E,GAASG,IAAWF,IAC/Bp+E,EAAQu7E,OAAOt2E,EAAGkjB,GAClBg2D,EAAQE,EACRD,EAAQE,GAEP3jE,GAAK,EAAGA,EAAIujE,EAAIvjE,GAAK,EAGtB0jE,GAFAp5E,EAAIg5E,EAAiBtjE,IAEP,GAAO,EACrB2jE,GAFAn2D,EAAI81D,EAAiBtjE,EAAI,IAEX,GAAO,EACjBA,GAAKujE,EAAK,GAAKG,IAAWF,GAASG,IAAWF,IAC9Cp+E,EAAQw7E,OAAOv2E,EAAGkjB,GAClBg2D,EAAQE,EACRD,EAAQE,KAGd/9E,EACF,MACJ,KAAK,EAAkB6nE,eACnBsW,EAAsBnR,EACtB7oE,KAAKu1E,WAAa1M,EAAY,GAC1BiR,IACA95E,KAAKw0D,MAAMl5D,GACXw+E,EAAc,EACVC,IACAz+E,EAAQy5D,SACRglB,EAAgB,IAGxBz+E,EAAQ+pE,UAAmEwD,EAAY,KACrFhtE,EACF,MACJ,KAAK,EAAkB8nE,iBACnBsW,EAAwBpR,EACpBkR,IACAz+E,EAAQy5D,SACRglB,EAAgB,GAEpB/5E,KAAK+2E,gBAAgBz7E,EAAiC,KACpDO,EACF,MACJ,KAAK,EAAkB+nE,OACfyW,EACAN,IAGAz+E,EAAQy5D,WAEVl5D,EACF,MACJ,UACMA,GAIVi+E,GACA95E,KAAKw0D,MAAMl5D,GAEXy+E,GACAz+E,EAAQy5D,UAYhBsgB,EAASn4E,UAAUu+E,QAAU,SAAUngF,EAASg9E,EAAc9qC,EAAW2sC,EAAc1C,EAAa6B,GAChGt5E,KAAK21E,cAAgBwE,EACrBn6E,KAAKm5E,SAAS79E,EAASg9E,EAAc9qC,EAAWxtC,KAAKmmE,aAAcsR,OAAah5E,OAAWA,EAAW66E,IAY1GjE,EAASn4E,UAAUw+E,oBAAsB,SAAUpgF,EAASkyC,EAAW2sC,EAAcf,EAAqBC,GAEtG,OADAr5E,KAAK21E,cAAgBwE,EACdn6E,KAAKm5E,SAAS79E,EAAS,EAAGkyC,EAAWxtC,KAAKqmE,0BAA0B,EAAM+S,EAAqBC,IAEnGhE,EA7zBkB,G,UCnEzBsG,GAAQ,CACRC,EACAA,EACAA,EACAA,EACAA,EACAA,GAEA,GAA+B,WAa/B,SAASC,EAAchW,EAAWxV,EAAYyV,EAAYwP,EAAUwG,EAAiBC,GAKjF/7E,KAAKyyE,WAAa5M,EAKlB7lE,KAAKg8E,UAAY1G,EAKjBt1E,KAAK0yE,YAAc5M,EAKnB9lE,KAAK2yE,YAActiB,EAKnBrwD,KAAKgiE,cAAgB+Z,EAKrB/7E,KAAKi8E,mBAAqB,GAK1Bj8E,KAAKk8E,qBAAuB,KAK5Bl8E,KAAKm8E,uBAAyB,cAC9Bn8E,KAAKo8E,iBAAiBN,GAuM1B,OAjMAD,EAAc3+E,UAAUm/E,KAAO,SAAU/gF,EAASkyC,GAC9C,IAAI8uC,EAAiBt8E,KAAKu8E,cAAc/uC,GACxClyC,EAAQs7E,YACRt7E,EAAQu7E,OAAOyF,EAAe,GAAIA,EAAe,IACjDhhF,EAAQw7E,OAAOwF,EAAe,GAAIA,EAAe,IACjDhhF,EAAQw7E,OAAOwF,EAAe,GAAIA,EAAe,IACjDhhF,EAAQw7E,OAAOwF,EAAe,GAAIA,EAAe,IACjDhhF,EAAQ+gF,QAOZR,EAAc3+E,UAAUk/E,iBAAmB,SAAUN,GACjD,IAAK,IAAI5mB,KAAU4mB,EAAiB,CAChC,IAAIU,EAAYx8E,KAAKi8E,mBAAmB/mB,QACtBz2D,IAAd+9E,IACAA,EAAY,GACZx8E,KAAKi8E,mBAAmB/mB,GAAUsnB,GAEtC,IAAIC,EAAsBX,EAAgB5mB,GACtCyM,EAAe,CAAC3hE,KAAKgiE,eAAiB,EAAGhiE,KAAKgiE,eAAiB,GACnE,IAAK,IAAImR,KAAesJ,EAAqB,CACzC,IAAItW,EAAesW,EAAoBtJ,GACvCqJ,EAAUrJ,GAAe,IAAI,GAASnzE,KAAK2yE,YAAa3yE,KAAK0yE,YAAa1yE,KAAKg8E,UAAW7V,EAAcxE,MAQpHka,EAAc3+E,UAAUw/E,aAAe,SAAUF,GAC7C,IAAK,IAAItnB,KAAUl1D,KAAKi8E,mBAEpB,IADA,IAAIU,EAAa38E,KAAKi8E,mBAAmB/mB,GAChCr5D,EAAI,EAAG8a,EAAK6lE,EAAU/hF,OAAQoB,EAAI8a,IAAM9a,EAC7C,GAAI2gF,EAAU3gF,KAAM8gF,EAChB,OAAO,EAInB,OAAO,GAYXd,EAAc3+E,UAAU0/E,2BAA6B,SAAU1vB,EAAYmD,EAAYxjD,EAAUgwE,EAActhF,EAAUuhF,GAErH,IAAIC,EAA6B,GADjCF,EAAejnE,KAAKmiE,MAAM8E,IACW,EACjCrvC,EAAY,YAAiBxtC,KAAKm8E,uBAAwBU,EAAe,GAAKA,EAAe,GAAK,EAAIxsB,GAAa,EAAIA,GAAaxjD,GAAWqgD,EAAW,IAAKA,EAAW,IAC1K8vB,GAAch9E,KAAKk8E,qBACnBc,IACAh9E,KAAKk8E,qBAAuB,aAAsBa,EAAaA,IAEnE,IAYIE,EAZA3hF,EAAU0E,KAAKk8E,qBACf5gF,EAAQo9E,OAAOl/B,QAAUujC,GACzBzhF,EAAQo9E,OAAOj/B,SAAWsjC,GAC1BzhF,EAAQo9E,OAAOl/B,MAAQujC,EACvBzhF,EAAQo9E,OAAOj/B,OAASsjC,GAElBC,GACN1hF,EAAQ4hF,UAAU,EAAG,EAAGH,EAAaA,QAMdt+E,IAAvBuB,KAAKgiE,gBACLib,EAAY,wBACZ,2BAAiBA,EAAW/vB,GAC5B,iBAAO+vB,EAAW5sB,GAAcrwD,KAAKgiE,cAAgB6a,GAAeI,IAExE,IACI9J,EADAgK,EAiIL,SAA4BjwC,GAC/B,QAA2CzuC,IAAvC2+E,GAA2BlwC,GAC3B,OAAOkwC,GAA2BlwC,GAKtC,IAHA,IAAIojB,EAAgB,EAATpjB,EAAa,EACpBmwC,EAAgBnwC,EAASA,EACzBowC,EAAY,IAAI9/E,MAAM6/E,EAAgB,GACjCxhF,EAAI,EAAGA,GAAKqxC,IAAUrxC,EAC3B,IAAK,IAAIya,EAAI,EAAGA,GAAK42B,IAAU52B,EAAG,CAC9B,IAAIinE,EAAa1hF,EAAIA,EAAIya,EAAIA,EAC7B,GAAIinE,EAAaF,EACb,MAEJ,IAAIrlC,EAAWslC,EAAUC,GACpBvlC,IACDA,EAAW,GACXslC,EAAUC,GAAcvlC,GAE5BA,EAASx3C,KAA4C,IAArC0sC,EAASrxC,GAAKy0D,GAAQpjB,EAAS52B,IAAU,GACrDza,EAAI,GACJm8C,EAASx3C,KAA4C,IAArC0sC,EAASrxC,GAAKy0D,GAAQpjB,EAAS52B,IAAU,GAEzDA,EAAI,IACJ0hC,EAASx3C,KAA4C,IAArC0sC,EAASrxC,GAAKy0D,GAAQpjB,EAAS52B,IAAU,GACrDza,EAAI,GACJm8C,EAASx3C,KAA4C,IAArC0sC,EAASrxC,GAAKy0D,GAAQpjB,EAAS52B,IAAU,IAMzE,IADA,IAAIknE,EAAa,GACD7mE,GAAP9a,EAAI,EAAQyhF,EAAU7iF,QAAQoB,EAAI8a,IAAM9a,EACzCyhF,EAAUzhF,IACV2hF,EAAWh9E,KAAK5E,MAAM4hF,EAAYF,EAAUzhF,IAIpD,OADAuhF,GAA2BlwC,GAAUswC,EAC9BA,EAtKWC,CAAmBZ,GAOjC,SAASa,EAAgB1nB,EAAS1B,GAG9B,IAFA,IAAIqpB,EAAYriF,EAAQsiF,aAAa,EAAG,EAAGb,EAAaA,GACnDx1D,KACIg0D,EAAM,EAAG5kE,EAAKwmE,EAAQ1iF,OAAQ8gF,EAAM5kE,EAAI4kE,IAC7C,GAAIoC,EAAUR,EAAQ5B,IAAQ,EAAG,CAC7B,IAAKuB,GACA3J,IAAgByI,GACbzI,IAAgByI,IACsB,IAA1CkB,EAAoB95E,QAAQgzD,GAAiB,CAC7C,IAAI6nB,GAAOV,EAAQ5B,GAAO,GAAK,EAC3Bh7E,EAAIs8E,EAAgBgB,EAAMd,EAC1Bt5D,EAAIo5D,GAAiBgB,EAAMd,EAAe,GAC1Ce,EAAWviF,EAASy6D,EAAS1B,EAAU/zD,EAAIA,EAAIkjB,EAAIA,GACvD,GAAIq6D,EACA,OAAOA,EAGfxiF,EAAQ4hF,UAAU,EAAG,EAAGH,EAAaA,GACrC,OAMZ,IAEIlhF,EAAGya,EAAGkmE,EAAWuB,EAAU37E,EAF3B47E,EAAK/gF,OAAOsS,KAAKvP,KAAKi8E,oBAAoB16E,IAAIi+C,QAGlD,IAFAw+B,EAAGC,KAAK,KAEHpiF,EAAImiF,EAAGvjF,OAAS,EAAGoB,GAAK,IAAKA,EAAG,CACjC,IAAIu3E,EAAY4K,EAAGniF,GAAGS,WAEtB,IADAkgF,EAAYx8E,KAAKi8E,mBAAmB7I,GAC/B98D,EAAIqlE,GAAMlhF,OAAS,EAAG6b,GAAK,IAAKA,EAGjC,QAAiB7X,KADjBs/E,EAAWvB,EADXrJ,EAAcwI,GAAMrlE,OAGhBlU,EAAS27E,EAASrC,oBAAoBpgF,EAASkyC,EAAW3gC,EAAU6wE,EAAiBT,IAEjF,OAAO76E,IAW3By5E,EAAc3+E,UAAUq/E,cAAgB,SAAU/uC,GAC9C,IAAIq4B,EAAY7lE,KAAKyyE,WACrB,IAAK5M,EACD,OAAO,KAEX,IAAIrY,EAAOqY,EAAU,GACjBpY,EAAOoY,EAAU,GACjBnY,EAAOmY,EAAU,GACjBlY,EAAOkY,EAAU,GACjByW,EAAiB,CAAC9uB,EAAMC,EAAMD,EAAMG,EAAMD,EAAMC,EAAMD,EAAMD,GAEhE,OADA,YAAY6uB,EAAgB,EAAG,EAAG,EAAG9uC,EAAW8uC,GACzCA,GAKXT,EAAc3+E,UAAU88B,QAAU,WAC9B,OAAO,YAAQh6B,KAAKi8E,qBAYxBJ,EAAc3+E,UAAUu+E,QAAU,SAAUngF,EAASg9E,EAAc9qC,EAAW2sC,EAAc1C,EAAayG,EAAkB5E,GAEvH,IAAI0E,EAAK/gF,OAAOsS,KAAKvP,KAAKi8E,oBAAoB16E,IAAIi+C,QAClDw+B,EAAGC,KAAK,KAGJj+E,KAAKyyE,aACLn3E,EAAQw9E,OACR94E,KAAKq8E,KAAK/gF,EAASkyC,IAEvB,IACI3xC,EAAG8a,EAAIL,EAAG6nE,EAAI9K,EAASC,EADvB8K,EAAeF,GAAsCvC,GAKzD,IAHIrC,GACA0E,EAAGpV,UAEF/sE,EAAI,EAAG8a,EAAKqnE,EAAGvjF,OAAQoB,EAAI8a,IAAM9a,EAAG,CACrC,IAAIu3E,EAAY4K,EAAGniF,GAAGS,WAEtB,IADA+2E,EAAUrzE,KAAKi8E,mBAAmB7I,GAC7B98D,EAAI,EAAG6nE,EAAKC,EAAa3jF,OAAQ6b,EAAI6nE,IAAM7nE,EAAG,MAGhC7X,KADf60E,EAASD,EADS+K,EAAa9nE,MAG3Bg9D,EAAOmI,QAAQngF,EAASg9E,EAAc9qC,EAAW2sC,EAAc1C,EAAa6B,IAIpFt5E,KAAKyyE,YACLn3E,EAAQ29E,WAGT4C,EA7PuB,GAqQ9BuB,GAA6B,GA+ClB,U,oBCrUX,GAAwC,WACxC,IAAI30C,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAE5B,OAAO,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,IAV3C,GA+6B7B,GAh5B8B,SAAUO,GAWnD,SAASi1C,EAAwB/iF,EAASwqE,EAAYrZ,EAAQjf,EAAW2sC,EAAcmE,EAAsBC,GACzG,IAAItmE,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KA2KjC,OAtKAiY,EAAMumE,SAAWljF,EAKjB2c,EAAMy6D,YAAc5M,EAKpB7tD,EAAMwmE,QAAUhyB,EAKhBx0C,EAAMymE,WAAalxC,EAKnBv1B,EAAM09D,cAAgBwE,EAKtBliE,EAAM0mE,kBAAoBL,EAK1BrmE,EAAM2mE,eAAiBL,EAKvBtmE,EAAM4mE,kBAAoB,KAK1B5mE,EAAM6mE,oBAAsB,KAK5B7mE,EAAM8mE,kBAAoB,KAK1B9mE,EAAM+mE,WAAa,KAKnB/mE,EAAMgnE,aAAe,KAKrBhnE,EAAMy8C,OAAS,KAKfz8C,EAAMinE,cAAgB,EAKtBjnE,EAAMknE,cAAgB,EAKtBlnE,EAAMmnE,aAAe,EAKrBnnE,EAAMonE,cAAgB,EAKtBpnE,EAAMqnE,cAAgB,EAKtBrnE,EAAMsnE,cAAgB,EAKtBtnE,EAAMunE,sBAAuB,EAK7BvnE,EAAMwnE,eAAiB,EAKvBxnE,EAAMynE,YAAc,CAAC,EAAG,GAKxBznE,EAAM0nE,YAAc,EAKpB1nE,EAAM+8C,MAAQ,GAKd/8C,EAAMs2D,aAAe,EAKrBt2D,EAAMu2D,aAAe,EAKrBv2D,EAAMw2D,qBAAsB,EAK5Bx2D,EAAMy2D,cAAgB,EAKtBz2D,EAAM2nE,WAAa,CAAC,EAAG,GAKvB3nE,EAAM02D,eAAiB,KAKvB12D,EAAM42D,iBAAmB,KAKzB52D,EAAM82D,WAAa,KAKnB92D,EAAMy9D,kBAAoB,GAK1Bz9D,EAAM4nE,mBAAqB,cACpB5nE,EAutBX,OA74BA,GAAUomE,EAAyBj1C,GA+LnCi1C,EAAwBnhF,UAAU4iF,YAAc,SAAUrxB,EAAiBpxD,EAAQyF,EAAK4rD,GACpF,GAAK1uD,KAAK00D,OAAV,CAGA,IAAI6kB,EAAmB,YAAY9qB,EAAiBpxD,EAAQyF,EAAK,EAAG9C,KAAK0+E,WAAY1+E,KAAK01E,mBACtFp6E,EAAU0E,KAAKw+E,SACfuB,EAAiB//E,KAAK6/E,mBACtBG,EAAQ1kF,EAAQ2kF,YACM,GAAtBjgF,KAAKq/E,gBACL/jF,EAAQ2kF,YAAcD,EAAQhgF,KAAKq/E,eAEvC,IAAIxyE,EAAW7M,KAAKy/E,eAChBz/E,KAAKw/E,uBACL3yE,GAAY7M,KAAK21E,eAErB,IAAK,IAAI95E,EAAI,EAAG8a,EAAK4iE,EAAiB9+E,OAAQoB,EAAI8a,EAAI9a,GAAK,EAAG,CAC1D,IAAI0E,EAAIg5E,EAAiB19E,GAAKmE,KAAKk/E,cAC/Bz7D,EAAI81D,EAAiB19E,EAAI,GAAKmE,KAAKm/E,cACvC,GAAiB,IAAbtyE,GACuB,GAAvB7M,KAAK0/E,YAAY,IACM,GAAvB1/E,KAAK0/E,YAAY,GAAS,CAC1B,IAAIvI,EAAU52E,EAAIP,KAAKk/E,cACnB9H,EAAU3zD,EAAIzjB,KAAKm/E,cACvB,YAAiBY,EAAgB5I,EAASC,EAAS,EAAG,EAAGvqE,GAAWsqE,GAAUC,GAC9E97E,EAAQ4kF,aAAatkF,MAAMN,EAASykF,GACpCzkF,EAAQy9E,UAAU5B,EAASC,GAC3B97E,EAAQwR,MAAM9M,KAAK0/E,YAAY,GAAI1/E,KAAK0/E,YAAY,IACpDpkF,EAAQ6kF,UAAUngF,KAAK00D,OAAQ10D,KAAKs/E,cAAet/E,KAAKu/E,cAAev/E,KAAK2/E,YAAa3/E,KAAKo/E,cAAep/E,KAAKk/E,eAAgBl/E,KAAKm/E,cAAen/E,KAAK2/E,YAAa3/E,KAAKo/E,cAC7K9jF,EAAQ4kF,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,QAGpC5kF,EAAQ6kF,UAAUngF,KAAK00D,OAAQ10D,KAAKs/E,cAAet/E,KAAKu/E,cAAev/E,KAAK2/E,YAAa3/E,KAAKo/E,aAAc7+E,EAAGkjB,EAAGzjB,KAAK2/E,YAAa3/E,KAAKo/E,cAGvH,GAAtBp/E,KAAKq/E,gBACL/jF,EAAQ2kF,YAAcD,KAU9B3B,EAAwBnhF,UAAUkjF,UAAY,SAAU3xB,EAAiBpxD,EAAQyF,EAAK4rD,GAClF,GAAK1uD,KAAK+uE,YAA6B,KAAf/uE,KAAKg1D,MAA7B,CAGIh1D,KAAK2uE,gBACL3uE,KAAKqgF,qBAAqBrgF,KAAK2uE,gBAE/B3uE,KAAK6uE,kBACL7uE,KAAKsgF,uBAAuBtgF,KAAK6uE,kBAErC7uE,KAAKugF,qBAAqBvgF,KAAK+uE,YAC/B,IAAIwK,EAAmB,YAAY9qB,EAAiBpxD,EAAQyF,EAAK4rD,EAAQ1uD,KAAK0+E,WAAY1+E,KAAK01E,mBAC3Fp6E,EAAU0E,KAAKw+E,SACf3xE,EAAW7M,KAAK0uE,cAIpB,IAHI1uE,KAAKyuE,sBACL5hE,GAAY7M,KAAK21E,eAEdt4E,EAASyF,EAAKzF,GAAUqxD,EAAQ,CACnC,IAAInuD,EAAIg5E,EAAiBl8E,GAAU2C,KAAKuuE,aACpC9qD,EAAI81D,EAAiBl8E,EAAS,GAAK2C,KAAKwuE,aAC5C,GAAiB,IAAb3hE,GACsB,GAAtB7M,KAAK4/E,WAAW,IACM,GAAtB5/E,KAAK4/E,WAAW,GAAS,CACzB,IAAIG,EAAiB,YAAiB//E,KAAK6/E,mBAAoBt/E,EAAGkjB,EAAG,EAAG,EAAG5W,GAAWtM,GAAIkjB,GAC1FnoB,EAAQ4kF,aAAatkF,MAAMN,EAASykF,GACpCzkF,EAAQy9E,UAAUx4E,EAAGkjB,GACrBnoB,EAAQwR,MAAM9M,KAAK4/E,WAAW,GAAI5/E,KAAK4/E,WAAW,IAC9C5/E,KAAK6uE,kBACLvzE,EAAQklF,WAAWxgF,KAAKg1D,MAAO,EAAG,GAElCh1D,KAAK2uE,gBACLrzE,EAAQmlF,SAASzgF,KAAKg1D,MAAO,EAAG,GAEpC15D,EAAQ4kF,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,QAGhClgF,KAAK6uE,kBACLvzE,EAAQklF,WAAWxgF,KAAKg1D,MAAOz0D,EAAGkjB,GAElCzjB,KAAK2uE,gBACLrzE,EAAQmlF,SAASzgF,KAAKg1D,MAAOz0D,EAAGkjB,MAchD46D,EAAwBnhF,UAAUwjF,cAAgB,SAAUjyB,EAAiBpxD,EAAQyF,EAAK4rD,EAAQiyB,GAC9F,IAAIrlF,EAAU0E,KAAKw+E,SACfjF,EAAmB,YAAY9qB,EAAiBpxD,EAAQyF,EAAK4rD,EAAQ1uD,KAAK0+E,WAAY1+E,KAAK01E,mBAC/Fp6E,EAAQu7E,OAAO0C,EAAiB,GAAIA,EAAiB,IACrD,IAAI9+E,EAAS8+E,EAAiB9+E,OAC1BkmF,IACAlmF,GAAU,GAEd,IAAK,IAAIoB,EAAI,EAAGA,EAAIpB,EAAQoB,GAAK,EAC7BP,EAAQw7E,OAAOyC,EAAiB19E,GAAI09E,EAAiB19E,EAAI,IAK7D,OAHI8kF,GACArlF,EAAQi/E,YAELz3E,GAUXu7E,EAAwBnhF,UAAU0jF,WAAa,SAAUnyB,EAAiBpxD,EAAQoqE,EAAM/Y,GACpF,IAAK,IAAI7yD,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EACxCwB,EAAS2C,KAAK0gF,cAAcjyB,EAAiBpxD,EAAQoqE,EAAK5rE,GAAI6yD,GAAQ,GAE1E,OAAOrxD,GASXghF,EAAwBnhF,UAAUgnE,WAAa,SAAU5P,GACrD,GAAK,qBAAWt0D,KAAKy+E,QAASnqB,EAAStB,aAAvC,CAGA,GAAIhzD,KAAKg/E,YAAch/E,KAAKi/E,aAAc,CAClCj/E,KAAKg/E,YACLh/E,KAAKqgF,qBAAqBrgF,KAAKg/E,YAE/Bh/E,KAAKi/E,cACLj/E,KAAKsgF,uBAAuBtgF,KAAKi/E,cAErC,IAAI1F,EAAmB,aAAgBjlB,EAAUt0D,KAAK0+E,WAAY1+E,KAAK01E,mBACnE3oB,EAAKwsB,EAAiB,GAAKA,EAAiB,GAC5CvsB,EAAKusB,EAAiB,GAAKA,EAAiB,GAC5CrsC,EAASt3B,KAAKu3B,KAAK4f,EAAKA,EAAKC,EAAKA,GAClC1xD,EAAU0E,KAAKw+E,SACnBljF,EAAQs7E,YACRt7E,EAAQg/E,IAAIf,EAAiB,GAAIA,EAAiB,GAAIrsC,EAAQ,EAAG,EAAIt3B,KAAKwhD,IACtEp3D,KAAKg/E,YACL1jF,EAAQm5D,OAERz0D,KAAKi/E,cACL3jF,EAAQy5D,SAGG,KAAf/0D,KAAKg1D,OACLh1D,KAAKogF,UAAU9rB,EAAS3E,YAAa,EAAG,EAAG,KAUnD0uB,EAAwBnhF,UAAUmhE,SAAW,SAAUpwD,GACnDjO,KAAKolE,mBAAmBn3D,EAAMmnD,UAAWnnD,EAAMqnD,aAC/Ct1D,KAAKulE,cAAct3D,EAAMonD,YACzBr1D,KAAK0lE,aAAaz3D,EAAMsnD,YAK5B8oB,EAAwBnhF,UAAUgjF,aAAe,SAAU1yC,GACvDxtC,KAAK0+E,WAAalxC,GAStB6wC,EAAwBnhF,UAAU+mE,aAAe,SAAU3P,GAEvD,OADWA,EAASwT,WAEhB,KAAKG,EAAA,QAAajR,MACdh3D,KAAK+kE,UACgD,GACrD,MACJ,KAAKkD,EAAA,QAAapR,YACd72D,KAAKukE,eACqD,GAC1D,MACJ,KAAK0D,EAAA,QAAatR,QACd32D,KAAKilE,YACkD,GACvD,MACJ,KAAKgD,EAAA,QAAahR,YACdj3D,KAAK2kE,eACqD,GAC1D,MACJ,KAAKsD,EAAA,QAAanR,kBACd92D,KAAKykE,oBAC0D,GAC/D,MACJ,KAAKwD,EAAA,QAAarR,cACd52D,KAAK6kE,iBACuD,GAC5D,MACJ,KAAKoD,EAAA,QAAa/Q,oBACdl3D,KAAKqkE,uBAC6D,GAClE,MACJ,KAAK4D,EAAA,QAAalR,OACd/2D,KAAKkkE,WACiD,KAelEma,EAAwBnhF,UAAUknE,YAAc,SAAUpO,EAAS/nD,GAC/D,IAAIqmD,EAAWrmD,EAAM0nD,qBAAN1nD,CAA4B+nD,GACtC1B,GAAa,qBAAWt0D,KAAKy+E,QAASnqB,EAAStB,eAGpDhzD,KAAKq+D,SAASpwD,GACdjO,KAAKikE,aAAa3P,KAQtB+pB,EAAwBnhF,UAAUmnE,uBAAyB,SAAU/P,GAEjE,IADA,IAAIusB,EAAavsB,EAASwsB,qBACjBjlF,EAAI,EAAG8a,EAAKkqE,EAAWpmF,OAAQoB,EAAI8a,IAAM9a,EAC9CmE,KAAKikE,aAAa4c,EAAWhlF,KASrCwiF,EAAwBnhF,UAAU6nE,UAAY,SAAUzQ,GAChDt0D,KAAK2+E,oBACLrqB,EAAiEA,EAASysB,oBAAoB/gF,KAAK2+E,kBAAmB3+E,KAAK4+E,iBAE/H,IAAInwB,EAAkB6F,EAASiU,qBAC3B7Z,EAAS4F,EAASyT,YAClB/nE,KAAK00D,QACL10D,KAAK8/E,YAAYrxB,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,GAE9C,KAAf1uD,KAAKg1D,OACLh1D,KAAKogF,UAAU3xB,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,IASnE2vB,EAAwBnhF,UAAUynE,eAAiB,SAAUrQ,GACrDt0D,KAAK2+E,oBACLrqB,EAAsEA,EAASysB,oBAAoB/gF,KAAK2+E,kBAAmB3+E,KAAK4+E,iBAEpI,IAAInwB,EAAkB6F,EAASiU,qBAC3B7Z,EAAS4F,EAASyT,YAClB/nE,KAAK00D,QACL10D,KAAK8/E,YAAYrxB,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,GAE9C,KAAf1uD,KAAKg1D,OACLh1D,KAAKogF,UAAU3xB,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,IASnE2vB,EAAwBnhF,UAAUqnE,eAAiB,SAAUjQ,GAIzD,GAHIt0D,KAAK2+E,oBACLrqB,EAAsEA,EAASysB,oBAAoB/gF,KAAK2+E,kBAAmB3+E,KAAK4+E,iBAE/H,qBAAW5+E,KAAKy+E,QAASnqB,EAAStB,aAAvC,CAGA,GAAIhzD,KAAKi/E,aAAc,CACnBj/E,KAAKsgF,uBAAuBtgF,KAAKi/E,cACjC,IAAI3jF,EAAU0E,KAAKw+E,SACf/vB,EAAkB6F,EAASiU,qBAC/BjtE,EAAQs7E,YACR52E,KAAK0gF,cAAcjyB,EAAiB,EAAGA,EAAgBh0D,OAAQ65D,EAASyT,aAAa,GACrFzsE,EAAQy5D,SAEZ,GAAmB,KAAf/0D,KAAKg1D,MAAc,CACnB,IAAIgsB,EAAe1sB,EAASsb,kBAC5B5vE,KAAKogF,UAAUY,EAAc,EAAG,EAAG,MAS3C3C,EAAwBnhF,UAAUunE,oBAAsB,SAAUnQ,GAC1Dt0D,KAAK2+E,oBACLrqB,EAA2EA,EAASysB,oBAAoB/gF,KAAK2+E,kBAAmB3+E,KAAK4+E,iBAEzI,IAAIqC,EAAiB3sB,EAAStB,YAC9B,GAAK,qBAAWhzD,KAAKy+E,QAASwC,GAA9B,CAGA,GAAIjhF,KAAKi/E,aAAc,CACnBj/E,KAAKsgF,uBAAuBtgF,KAAKi/E,cACjC,IAAI3jF,EAAU0E,KAAKw+E,SACf/vB,EAAkB6F,EAASiU,qBAC3BlrE,EAAS,EACToqE,EAAqCnT,EAASkU,UAC9C9Z,EAAS4F,EAASyT,YACtBzsE,EAAQs7E,YACR,IAAK,IAAI/6E,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EACxCwB,EAAS2C,KAAK0gF,cAAcjyB,EAAiBpxD,EAAQoqE,EAAK5rE,GAAI6yD,GAAQ,GAE1EpzD,EAAQy5D,SAEZ,GAAmB,KAAf/0D,KAAKg1D,MAAc,CACnB,IAAIksB,EAAgB5sB,EAASub,mBAC7B7vE,KAAKogF,UAAUc,EAAe,EAAGA,EAAczmF,OAAQ,MAS/D4jF,EAAwBnhF,UAAU+nE,YAAc,SAAU3Q,GAItD,GAHIt0D,KAAK2+E,oBACLrqB,EAAmEA,EAASysB,oBAAoB/gF,KAAK2+E,kBAAmB3+E,KAAK4+E,iBAE5H,qBAAW5+E,KAAKy+E,QAASnqB,EAAStB,aAAvC,CAGA,GAAIhzD,KAAKi/E,cAAgBj/E,KAAKg/E,WAAY,CAClCh/E,KAAKg/E,YACLh/E,KAAKqgF,qBAAqBrgF,KAAKg/E,YAE/Bh/E,KAAKi/E,cACLj/E,KAAKsgF,uBAAuBtgF,KAAKi/E,cAErC,IAAI3jF,EAAU0E,KAAKw+E,SACnBljF,EAAQs7E,YACR52E,KAAK4gF,WAAWtsB,EAAS4T,6BAA8B,EACzB5T,EAASkU,UAAYlU,EAASyT,aACxD/nE,KAAKg/E,YACL1jF,EAAQm5D,OAERz0D,KAAKi/E,cACL3jF,EAAQy5D,SAGhB,GAAmB,KAAf/0D,KAAKg1D,MAAc,CACnB,IAAImsB,EAAoB7sB,EAASwb,uBACjC9vE,KAAKogF,UAAUe,EAAmB,EAAG,EAAG,MAQhD9C,EAAwBnhF,UAAU2nE,iBAAmB,SAAUvQ,GAI3D,GAHIt0D,KAAK2+E,oBACLrqB,EAAwEA,EAASysB,oBAAoB/gF,KAAK2+E,kBAAmB3+E,KAAK4+E,iBAEjI,qBAAW5+E,KAAKy+E,QAASnqB,EAAStB,aAAvC,CAGA,GAAIhzD,KAAKi/E,cAAgBj/E,KAAKg/E,WAAY,CAClCh/E,KAAKg/E,YACLh/E,KAAKqgF,qBAAqBrgF,KAAKg/E,YAE/Bh/E,KAAKi/E,cACLj/E,KAAKsgF,uBAAuBtgF,KAAKi/E,cAErC,IAAI3jF,EAAU0E,KAAKw+E,SACf/vB,EAAkB6F,EAAS4T,6BAC3B7qE,EAAS,EACT8qE,EAAQ7T,EAAS8T,WACjB1Z,EAAS4F,EAASyT,YACtBzsE,EAAQs7E,YACR,IAAK,IAAI/6E,EAAI,EAAG8a,EAAKwxD,EAAM1tE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC5C,IAAI4rE,EAAOU,EAAMtsE,GACjBwB,EAAS2C,KAAK4gF,WAAWnyB,EAAiBpxD,EAAQoqE,EAAM/Y,GAExD1uD,KAAKg/E,YACL1jF,EAAQm5D,OAERz0D,KAAKi/E,cACL3jF,EAAQy5D,SAGhB,GAAmB,KAAf/0D,KAAKg1D,MAAc,CACnB,IAAIosB,EAAqB9sB,EAAS0b,wBAClChwE,KAAKogF,UAAUgB,EAAoB,EAAGA,EAAmB3mF,OAAQ,MAOzE4jF,EAAwBnhF,UAAUmjF,qBAAuB,SAAUjR,GAC/D,IAAI9zE,EAAU0E,KAAKw+E,SACf6C,EAAmBrhF,KAAK6+E,kBACvBwC,EAOGA,EAAiBhc,WAAa+J,EAAU/J,YACxCgc,EAAiBhc,UAAY+J,EAAU/J,UACvC/pE,EAAQ+pE,UAAY+J,EAAU/J,YARlC/pE,EAAQ+pE,UAAY+J,EAAU/J,UAC9BrlE,KAAK6+E,kBAAoB,CACrBxZ,UAAW+J,EAAU/J,aAcjCgZ,EAAwBnhF,UAAUojF,uBAAyB,SAAUjR,GACjE,IAAI/zE,EAAU0E,KAAKw+E,SACf8C,EAAqBthF,KAAK8+E,oBACzBwC,GAqBGA,EAAmBnY,SAAWkG,EAAYlG,UAC1CmY,EAAmBnY,QAAUkG,EAAYlG,QACzC7tE,EAAQ6tE,QAAUkG,EAAYlG,SAE9B7tE,EAAQk7E,cACH,YAAO8K,EAAmBhY,SAAU+F,EAAY/F,WACjDhuE,EAAQk7E,YAAa8K,EAAmBhY,SAAW+F,EAAY/F,UAE/DgY,EAAmB7X,gBAAkB4F,EAAY5F,iBACjD6X,EAAmB7X,eAAiB4F,EAAY5F,eAChDnuE,EAAQmuE,eAAiB4F,EAAY5F,iBAGzC6X,EAAmB1X,UAAYyF,EAAYzF,WAC3C0X,EAAmB1X,SAAWyF,EAAYzF,SAC1CtuE,EAAQsuE,SAAWyF,EAAYzF,UAE/B0X,EAAmBxX,WAAauF,EAAYvF,YAC5CwX,EAAmBxX,UAAYuF,EAAYvF,UAC3CxuE,EAAQwuE,UAAYuF,EAAYvF,WAEhCwX,EAAmBrX,YAAcoF,EAAYpF,aAC7CqX,EAAmBrX,WAAaoF,EAAYpF,WAC5C3uE,EAAQ2uE,WAAaoF,EAAYpF,YAEjCqX,EAAmBhc,aAAe+J,EAAY/J,cAC9Cgc,EAAmBhc,YAAc+J,EAAY/J,YAC7ChqE,EAAQgqE,YAAc+J,EAAY/J,eA/CtChqE,EAAQ6tE,QAAUkG,EAAYlG,QAC1B7tE,EAAQk7E,cACRl7E,EAAQk7E,YAAYnH,EAAY/F,UAChChuE,EAAQmuE,eAAiB4F,EAAY5F,gBAEzCnuE,EAAQsuE,SAAWyF,EAAYzF,SAC/BtuE,EAAQwuE,UAAYuF,EAAYvF,UAChCxuE,EAAQ2uE,WAAaoF,EAAYpF,WACjC3uE,EAAQgqE,YAAc+J,EAAY/J,YAClCtlE,KAAK8+E,oBAAsB,CACvB3V,QAASkG,EAAYlG,QACrBG,SAAU+F,EAAY/F,SACtBG,eAAgB4F,EAAY5F,eAC5BG,SAAUyF,EAAYzF,SACtBE,UAAWuF,EAAYvF,UACvBG,WAAYoF,EAAYpF,WACxB3E,YAAa+J,EAAY/J,eAuCrC+Y,EAAwBnhF,UAAUqjF,qBAAuB,SAAUjR,GAC/D,IAAIh0E,EAAU0E,KAAKw+E,SACf+C,EAAmBvhF,KAAK++E,kBACxBtO,EAAYnB,EAAUmB,UACpBnB,EAAUmB,UACV,IACD8Q,GAWGA,EAAiBvQ,MAAQ1B,EAAU0B,OACnCuQ,EAAiBvQ,KAAO1B,EAAU0B,KAClC11E,EAAQ01E,KAAO1B,EAAU0B,MAEzBuQ,EAAiB9Q,WAAaA,IAC9B8Q,EAAiB9Q,UAA2C,EAC5Dn1E,EAAQm1E,UAA2C,GAEnD8Q,EAAiBtQ,cAAgB3B,EAAU2B,eAC3CsQ,EAAiBtQ,aAAkD3B,EAAsB,aACzFh0E,EAAQ21E,aAAkD3B,EAAsB,gBApBpFh0E,EAAQ01E,KAAO1B,EAAU0B,KACzB11E,EAAQm1E,UAA2C,EACnDn1E,EAAQ21E,aAAkD3B,EAAsB,aAChFtvE,KAAK++E,kBAAoB,CACrB/N,KAAM1B,EAAU0B,KAChBP,UAAWA,EACXQ,aAAc3B,EAAU2B,gBAyBpCoN,EAAwBnhF,UAAUkoE,mBAAqB,SAAUC,EAAWC,GACxE,GAAKD,EAGA,CACD,IAAIyD,EAAiBzD,EAAU0D,WAC/B/oE,KAAKg/E,WAAa,CACd3Z,UAAW,YAAYyD,GAAkC,WAL7D9oE,KAAKg/E,WAAa,KAQtB,GAAK1Z,EAGA,CACD,IAAI0D,EAAmB1D,EAAYyD,WAC/BE,EAAqB3D,EAAY4D,aACjCE,EAAsB9D,EAAY+D,cAClCE,EAA4BjE,EAAYkE,oBACxCE,EAAsBpE,EAAYqE,cAClCE,EAAmBvE,EAAY7V,WAC/Bsa,EAAwBzE,EAAY0E,gBACxChqE,KAAKi/E,aAAe,CAChB9V,aAAgC1qE,IAAvBwqE,EACHA,EACA,IACNK,SAAUF,GAA4C,IACtDK,eAAgBF,GAEV,IACNK,cAAkCnrE,IAAxBirE,EACJA,EACA,IACNI,UAAW9pE,KAAK0yE,kBACUj0E,IAArBorE,EACKA,EACA,KACVI,gBAAsCxrE,IAA1BsrE,EACNA,EACA,IACNzE,YAAa,YAAY0D,GAAsC,WA5BnEhpE,KAAKi/E,aAAe,MAsC5BZ,EAAwBnhF,UAAUqoE,cAAgB,SAAUC,GACxD,GAAKA,EAGA,CACD,IAAIgc,EAAYhc,EAAW5T,UAC3B,GAAK4vB,EAGA,CACD,IAAIC,EAAcjc,EAAW2G,YAEzBuV,EAAalc,EAAWnQ,SAAS,GACjCssB,EAAcnc,EAAW+G,YACzBqV,EAAapc,EAAWiH,gBAC5BzsE,KAAKk/E,cAAgBuC,EAAY,GACjCzhF,KAAKm/E,cAAgBsC,EAAY,GACjCzhF,KAAKo/E,aAAeoC,EAAU,GAC9BxhF,KAAK00D,OAASgtB,EACd1hF,KAAKq/E,cAAgB7Z,EAAWnE,aAChCrhE,KAAKs/E,cAAgBqC,EAAY,GACjC3hF,KAAKu/E,cAAgBoC,EAAY,GACjC3hF,KAAKw/E,qBAAuBha,EAAWtE,oBACvClhE,KAAKy/E,eAAiBja,EAAWvE,cACjCjhE,KAAK0/E,YAAc,CACf1/E,KAAK0yE,YAAckP,EAAW,GAC9B5hF,KAAK0yE,YAAckP,EAAW,IAElC5hF,KAAK2/E,YAAc6B,EAAU,QArB7BxhF,KAAK00D,OAAS,UALlB10D,KAAK00D,OAAS,MAoCtB2pB,EAAwBnhF,UAAUwoE,aAAe,SAAUC,GACvD,GAAKA,EAGA,CACD,IAAI0L,EAAgB1L,EAAUvQ,UAC9B,GAAKic,EAGA,CACD,IAAIwQ,EAAqBxQ,EAActI,WACvC/oE,KAAK2uE,eAAiB,CAClBtJ,UAAW,YAAYwc,GAA0C,WALrE7hF,KAAK2uE,eAAiB,KAQ1B,IAAI2C,EAAkB3L,EAAUrQ,YAChC,GAAKgc,EAGA,CACD,IAAIwQ,EAAuBxQ,EAAgBvI,WACvCgZ,EAAyBzQ,EAAgBpI,aACzC8Y,EAA0B1Q,EAAgBjI,cAC1C4Y,EAAgC3Q,EAAgB9H,oBAChD0Y,EAA0B5Q,EAAgB3H,cAC1CwY,EAAuB7Q,EAAgB7hB,WACvC2yB,EAA4B9Q,EAAgBtH,gBAChDhqE,KAAK6uE,iBAAmB,CACpB1F,aAAoC1qE,IAA3BsjF,EACHA,EACA,IACNzY,SAAU0Y,GAEJ,IACNvY,eAAgBwY,GAEV,IACNrY,cAAsCnrE,IAA5ByjF,EACJA,EACA,IACNpY,eAAoCrrE,IAAzB0jF,EACLA,EACA,IACNlY,gBAA0CxrE,IAA9B2jF,EACNA,EACA,IACN9c,YAAa,YAAYwc,GAA8C,WA7B3E9hF,KAAK6uE,iBAAmB,KAgC5B,IAAIwT,EAAW1c,EAAU4L,UACrBU,EAActM,EAAUuM,aACxBC,EAAcxM,EAAUyM,aACxBC,EAAqB1M,EAAUzE,oBAC/BoR,EAAe3M,EAAU1E,cACzBuQ,EAAY7L,EAAU8G,gBACtB6V,EAAW3c,EAAUpQ,UACrBgtB,EAAgB5c,EAAUiM,eAC1B4Q,EAAmB7c,EAAUkM,kBACjC7xE,KAAK+uE,WAAa,CACdiC,UAAmBvyE,IAAb4jF,EAAyBA,EAAW,IAC1C5R,eAA6BhyE,IAAlB8jF,EAA8BA,EAAgB,IACzDtR,kBAAmCxyE,IAArB+jF,EACRA,EACA,KAEVxiF,KAAKg1D,WAAqBv2D,IAAb6jF,EAAyBA,EAAW,GACjDtiF,KAAKuuE,kBACe9vE,IAAhBwzE,EAA4BjyE,KAAK0yE,YAAcT,EAAc,EACjEjyE,KAAKwuE,kBACe/vE,IAAhB0zE,EAA4BnyE,KAAK0yE,YAAcP,EAAc,EACjEnyE,KAAKyuE,yBACsBhwE,IAAvB4zE,GAAmCA,EACvCryE,KAAK0uE,mBAAiCjwE,IAAjB6zE,EAA6BA,EAAe,EACjEtyE,KAAK4/E,WAAa,CACd5/E,KAAK0yE,YAAclB,EAAU,GAC7BxxE,KAAK0yE,YAAclB,EAAU,SAzEjCxxE,KAAKg1D,MAAQ,IA6EdqpB,EA94BiC,CA+4B1C,G,kCCz5BEoE,GAAqB,CACrB,MAqNJ,SAA6BC,EAAcpuB,EAAUrmD,EAAO+nD,EAAS2sB,GACjE,IAGIlI,EAHAjV,EAAav3D,EAAMonD,WACnBsQ,EAAY13D,EAAMsnD,UAGlBotB,IACAD,EAAeC,EACflI,EACIjV,GAAcG,GAAaA,EAAUpQ,UAAY,QAAK92D,GAE9D,GAAI+mE,EAAY,CACZ,GAAIA,EAAWod,iBAAmBC,GAAA,EAAWC,OACzC,OAEJ,IAAIC,EAAcL,EAAaxP,WAAWjlE,EAAMunD,YAAaomB,GAC7DmH,EAAYxd,cAAcC,EAAYiV,GACtCsI,EAAYhe,UAAUzQ,EAAU0B,GAEpC,GAAI2P,GAAaA,EAAUpQ,UAAW,CAClC,IAAIytB,EAAaN,EAAaxP,WAAWjlE,EAAMunD,YAAaomB,GAC5DoH,EAAWtd,aAAaC,EAAW8U,GACnCuI,EAAW7d,SAAS7Q,EAAU0B,KAzOlC,WAoJJ,SAAkC0sB,EAAcpuB,EAAUrmD,EAAO+nD,EAAS2sB,GACtE,IAAIrd,EAAcr3D,EAAMqnD,YACxB,GAAIgQ,EAAa,CACb,IAAI2d,EAAmBP,EAAaxP,WAAWjlE,EAAMunD,YAAaomB,GAClEqH,EAAiB7d,mBAAmB,KAAME,GAC1C2d,EAAiB1e,eAAejQ,EAAU0B,GAE9C,IAAI2P,EAAY13D,EAAMsnD,UACtB,GAAIoQ,GAAaA,EAAUpQ,UAAW,CAClC,IAAIytB,GAAcL,GAA6BD,GAAcxP,WAAWjlE,EAAMunD,YAAaomB,GAC3FoH,EAAWtd,aAAaC,GACxBqd,EAAW7d,SAAS7Q,EAAU0B,KA9JlC,QAiRJ,SAA+B0sB,EAAcpuB,EAAUrmD,EAAO+nD,EAAS2sB,GACnE,IAAItd,EAAYp3D,EAAMmnD,UAClBkQ,EAAcr3D,EAAMqnD,YACxB,GAAI+P,GAAaC,EAAa,CAC1B,IAAI4d,EAAgBR,EAAaxP,WAAWjlE,EAAMunD,YAAaomB,GAC/DsH,EAAc9d,mBAAmBC,EAAWC,GAC5C4d,EAAcje,YAAY3Q,EAAU0B,GAExC,IAAI2P,EAAY13D,EAAMsnD,UACtB,GAAIoQ,GAAaA,EAAUpQ,UAAW,CAClC,IAAIytB,GAAcL,GAA6BD,GAAcxP,WAAWjlE,EAAMunD,YAAaomB,GAC3FoH,EAAWtd,aAAaC,GACxBqd,EAAW7d,SAAS7Q,EAAU0B,KA5RlC,WAiPJ,SAAkC0sB,EAAcpuB,EAAUrmD,EAAO+nD,EAAS2sB,GACtE,IAGIlI,EAHAjV,EAAav3D,EAAMonD,WACnBsQ,EAAY13D,EAAMsnD,UAGlBotB,IACAD,EAAeC,EACflI,EACIjV,GAAcG,GAAaA,EAAUpQ,UAAY,QAAK92D,GAE9D,GAAI+mE,EAAY,CACZ,GAAIA,EAAWod,iBAAmBC,GAAA,EAAWC,OACzC,OAEJ,IAAIC,EAAcL,EAAaxP,WAAWjlE,EAAMunD,YAAaomB,GAC7DmH,EAAYxd,cAAcC,EAAYiV,GACtCsI,EAAYpe,eAAerQ,EAAU0B,GAEzC,GAAI2P,GAAaA,EAAUpQ,UAAW,CAClC,IAAIytB,GAAcL,GAA6BD,GAAcxP,WAAWjlE,EAAMunD,YAAaomB,GAC3FoH,EAAWtd,aAAaC,EAAW8U,GACnCuI,EAAW7d,SAAS7Q,EAAU0B,KArQlC,gBAsKJ,SAAuC0sB,EAAcpuB,EAAUrmD,EAAO+nD,EAAS2sB,GAC3E,IAAIrd,EAAcr3D,EAAMqnD,YACxB,GAAIgQ,EAAa,CACb,IAAI2d,EAAmBP,EAAaxP,WAAWjlE,EAAMunD,YAAaomB,GAClEqH,EAAiB7d,mBAAmB,KAAME,GAC1C2d,EAAiBxe,oBAAoBnQ,EAAU0B,GAEnD,IAAI2P,EAAY13D,EAAMsnD,UACtB,GAAIoQ,GAAaA,EAAUpQ,UAAW,CAClC,IAAIytB,GAAcL,GAA6BD,GAAcxP,WAAWjlE,EAAMunD,YAAaomB,GAC3FoH,EAAWtd,aAAaC,GACxBqd,EAAW7d,SAAS7Q,EAAU0B,KAhLlC,aA0LJ,SAAoC0sB,EAAcpuB,EAAUrmD,EAAO+nD,EAAS2sB,GACxE,IAAItd,EAAYp3D,EAAMmnD,UAClBkQ,EAAcr3D,EAAMqnD,YACxB,GAAIgQ,GAAeD,EAAW,CAC1B,IAAI6d,EAAgBR,EAAaxP,WAAWjlE,EAAMunD,YAAaomB,GAC/DsH,EAAc9d,mBAAmBC,EAAWC,GAC5C4d,EAAcre,iBAAiBvQ,EAAU0B,GAE7C,IAAI2P,EAAY13D,EAAMsnD,UACtB,GAAIoQ,GAAaA,EAAUpQ,UAAW,CAClC,IAAIytB,GAAcL,GAA6BD,GAAcxP,WAAWjlE,EAAMunD,YAAaomB,GAC3FoH,EAAWtd,aAAaC,GACxBqd,EAAW7d,SAAS7Q,EAAU0B,KArMlC,mBAgIJ,SAA0CmtB,EAAa7uB,EAAUrmD,EAAO+nD,EAAS2sB,GAC7E,IACI9mF,EAAG8a,EADHkqE,EAAavsB,EAASwsB,qBAE1B,IAAKjlF,EAAI,EAAG8a,EAAKkqE,EAAWpmF,OAAQoB,EAAI8a,IAAM9a,EAAG,EAE7CunF,EADuBX,GAAmB5B,EAAWhlF,GAAGisE,YACvCqb,EAAatC,EAAWhlF,GAAIoS,EAAO+nD,EAAS2sB,KApIjE,OAkCJ,SAA8BD,EAAcpuB,EAAUrmD,EAAO+nD,EAAS2sB,GAClE,IAAItd,EAAYp3D,EAAMmnD,UAClBkQ,EAAcr3D,EAAMqnD,YACxB,GAAI+P,GAAaC,EAAa,CAC1B,IAAI+d,EAAeX,EAAaxP,WAAWjlE,EAAMunD,YAAaomB,GAC9DyH,EAAaje,mBAAmBC,EAAWC,GAC3C+d,EAAanf,WAAW5P,EAAU0B,GAEtC,IAAI2P,EAAY13D,EAAMsnD,UACtB,GAAIoQ,GAAaA,EAAUpQ,UAAW,CAClC,IAAIytB,GAAcL,GAA6BD,GAAcxP,WAAWjlE,EAAMunD,YAAaomB,GAC3FoH,EAAWtd,aAAaC,GACxBqd,EAAW7d,SAAS7Q,EAAU0B,MAvC/B,SAASstB,GAAaC,EAAUC,GACnC,OAAOlgE,SAAS,iBAAOigE,GAAW,IAAMjgE,SAAS,iBAAOkgE,GAAW,IAgBhE,SAASC,GAAapzB,EAAYyV,GACrC,MAxCqB,GAwCQzV,EAAcyV,EAkCxC,SAAS4d,GAAcP,EAAantB,EAAS/nD,EAAO01E,EAAkBz8E,EAAU08E,EAAejB,GAClG,IAAIkB,GAAU,EACVre,EAAav3D,EAAMonD,WACvB,GAAImQ,EAAY,CACZ,IAAIse,EAAate,EAAWod,gBACxBkB,GAAcjB,GAAA,EAAWC,QAAUgB,GAAcjB,GAAA,EAAWkB,MAC5Dve,EAAWwe,oBAAoB98E,IAG3B48E,GAAcjB,GAAA,EAAWoB,MACzBze,EAAWtlB,OAEf4jC,EAAate,EAAWod,gBACxBpd,EAAW0e,kBAAkBh9E,GAC7B28E,GAAU,GAIlB,OAUJ,SAA+BV,EAAantB,EAAS/nD,EAAO01E,EAAkBC,EAAejB,GACzF,IAAIruB,EAAWrmD,EAAM0nD,qBAAN1nD,CAA4B+nD,GAC3C,IAAK1B,EACD,OAEJ,IAAI6vB,EAAqB7vB,EAASysB,oBAAoB4C,EAAkBC,GAExE,GADe31E,EAAMwnD,eAezB,SAAS2uB,EAAejB,EAAa7uB,EAAUrmD,EAAO+nD,GAClD,GAAI1B,EAASwT,WAAaG,EAAA,QAAa/Q,oBAAqB,CAExD,IADA,IAAI2pB,EAA4E,EAAWwD,gBAClFxoF,EAAI,EAAG8a,EAAKkqE,EAAWpmF,OAAQoB,EAAI8a,IAAM9a,EAC9CuoF,EAAejB,EAAatC,EAAWhlF,GAAIoS,EAAO+nD,GAEtD,OAESmtB,EAAYjQ,WAAWjlE,EAAMunD,YAAaomB,GAChD5X,WACoD,EAAYhO,EAAS/nD,EAAMwnD,eAvBlF2uB,CAAejB,EAAagB,EAAoBl2E,EAAO+nD,OAEtD,EAEDotB,EADuBX,GAAmB0B,EAAmBrc,YAC5Cqb,EAAagB,EAAoBl2E,EAAO+nD,EAAS2sB,IAvBtE2B,CAAsBnB,EAAantB,EAAS/nD,EAAO01E,EAAkBC,EAAejB,GAC7EkB,E,wBChHP,GAAwC,WACxC,IAAIp7C,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAE5B,OAAO,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,IAV3C,GA2hB7B,GA3fgC,SAAUO,GAKrD,SAASm7C,EAA0BC,GAC/B,IAAIvsE,EAAQmxB,EAAO1rC,KAAKsC,KAAMwkF,IAAgBxkF,KA0E9C,OAxEAiY,EAAMwsE,6BAA+BxsE,EAAMysE,wBAAwB3/E,KAAKkT,GAIxEA,EAAM0sE,wBAKN1sE,EAAM2sE,QAAS,EAIf3sE,EAAM4sE,uBAAyB,KAI/B5sE,EAAM6sE,kBAAoB,KAK1B7sE,EAAM8sE,mBAAqB,EAK3B9sE,EAAM+sE,oBAAsBtgF,IAK5BuT,EAAMgtE,gBAAkB,wBAKxBhtE,EAAMitE,kBAKNjtE,EAAMktE,gBAAkB,KAKxBltE,EAAMmtE,oBAAsB,KAK5BntE,EAAMotE,qBAAuB,KAK7BptE,EAAMqtE,aAAe,KAKrBrtE,EAAMstE,oBAAqB,EAI3BttE,EAAMutE,uBAAyB,KAK/BvtE,EAAMwtE,UAAW,EACVxtE,EAyaX,OAxfA,GAAUssE,EAA2Bn7C,GAuFrCm7C,EAA0BrnF,UAAUwoF,aAAe,SAAU1+E,EAAQwmC,EAAWG,GACxEA,EAAU,IACV3mC,EAAS,MAEboiC,EAAOlsC,UAAUwoF,aAAahoF,KAAKsC,KAAMgH,EAAQwmC,EAAWG,IAOhE42C,EAA0BrnF,UAAUyoF,aAAe,SAAUC,EAAejjB,EAAY2W,GACpF,IAAI7sB,EAASkW,EAAWlW,OACpBo5B,EAAYljB,EAAWkjB,UACvBz1B,EAASy1B,EAAUz1B,OACnBC,EAAaw1B,EAAUx1B,WACvByC,EAAa+yB,EAAU/yB,WACvBjmD,EAAWg5E,EAAUh5E,SACrBkmD,EAAmBD,EAAWE,YAC9B8yB,EAAe9lF,KAAK+lF,WAAWC,YAC/BlgB,EAAanD,EAAWmD,WACxBmgB,EAAYtjB,EAAWsjB,UACvBxO,IAAgBwO,EAAUC,GAAA,EAASC,YAAcF,EAAUC,GAAA,EAASE,cACpE9qF,EAAU0E,KAAK1E,QACfk+C,EAAQ5jC,KAAKmiE,MAAMpV,EAAWrS,KAAK,GAAKwV,GACxCrsB,EAAS7jC,KAAKmiE,MAAMpV,EAAWrS,KAAK,GAAKwV,GACzCugB,EAAaP,EAAaQ,YAAcxzB,EAAWG,WACnDC,EAAamzB,EAAa,mBAAStzB,GAAoB,KACvDwzB,EAAWF,EACTzwE,KAAKo2D,MAAMvf,EAAO,GAAKsG,EAAiB,IAAMG,GAAc,EAC5D,EACFszB,EAAQH,EACNzwE,KAAKC,OAAO42C,EAAO,GAAKsG,EAAiB,IAAMG,GAC/C,EACN,EAAG,CACC,IAAI1lB,EAAYxtC,KAAKymF,mBAAmBr2B,EAAQC,EAAYxjD,EAAUi5D,EAAYtsB,EAAOC,EAAQ+sC,EAAQtzB,GACzG0yB,EAAcnK,QAAQngF,EAAS,EAAGkyC,EAAW3gC,EAAU4qE,OAAah5E,EAAW66E,WACxEkN,EAAQD,IAMvBhC,EAA0BrnF,UAAUwlE,gBAAkB,SAAUC,GACxD3iE,KAAKwlF,wBACLxlF,KAAK2lF,aAAa3lF,KAAKwlF,uBAAwB7iB,EAAYA,EAAWC,gBAS9E2hB,EAA0BrnF,UAAUwpF,YAAc,SAAU/jB,EAAY37D,GACpE,IAAI8+D,EAAanD,EAAWmD,WACxB6gB,EAAahkB,EAAWikB,iBAAiBjkB,EAAWkkB,YAExD,YAAU7mF,KAAK8mF,eAAgB,EAAIhhB,EAAY,EAAIA,GACnD,YAAY9lE,KAAK+mF,sBAAuB/mF,KAAK8mF,gBAC7C,IAAI1O,EAAkB,YAAkBp4E,KAAK8mF,gBAC7C9mF,KAAK0lF,aAAa1+E,EAAQoxE,EAAiBuO,EAAWh5C,SACtD,IAAIryC,EAAU0E,KAAK1E,QACfo9E,EAASp9E,EAAQo9E,OACjByK,EAAcnjF,KAAKslF,aACnBE,EAAyBxlF,KAAKwlF,uBAClC,KAAMrC,GAAeA,EAAYnpD,cAC3BwrD,GAA0BA,EAAuBxrD,WAInD,OAHKh6B,KAAKgnF,iBAAmBtO,EAAOl/B,MAAQ,IACxCk/B,EAAOl/B,MAAQ,GAEZx5C,KAAKinF,UAGhB,IAAIztC,EAAQ5jC,KAAKmiE,MAAMpV,EAAWrS,KAAK,GAAKwV,GACxCrsB,EAAS7jC,KAAKmiE,MAAMpV,EAAWrS,KAAK,GAAKwV,GACzC4S,EAAOl/B,OAASA,GAASk/B,EAAOj/B,QAAUA,GAC1Ci/B,EAAOl/B,MAAQA,EACfk/B,EAAOj/B,OAASA,EACZi/B,EAAOzqE,MAAMu/B,YAAc4qC,IAC3BM,EAAOzqE,MAAMu/B,UAAY4qC,IAGvBp4E,KAAKgnF,iBACX1rF,EAAQ4hF,UAAU,EAAG,EAAG1jC,EAAOC,GAEnCz5C,KAAKkxC,UAAU51C,EAASqnE,GACxB,IAAIkjB,EAAYljB,EAAWkjB,UACvB/yB,EAAa+yB,EAAU/yB,WAEvBo0B,GAAU,EACd,GAAIP,EAAWl6B,QAAUzsD,KAAKylF,SAAU,CACpC,IAAI0B,EAAc,0BAAeR,EAAWl6B,OAAQqG,IACpDo0B,GACK,yBAAeC,EAAaxkB,EAAWlW,SACpC,qBAAiB06B,EAAaxkB,EAAWlW,UAE7CzsD,KAAKonF,cAAc9rF,EAASqnE,EAAYwkB,GAGhDnnF,KAAK2lF,aAAaxC,EAAaxgB,GAC3BukB,GACA5rF,EAAQ29E,UAEZj5E,KAAKqnF,WAAW/rF,EAASqnE,GACzB,IAAIh1B,EAAUg5C,EAAWh5C,QACrBs5C,EAAYjnF,KAAKinF,UAQrB,OAPIt5C,IAAY5nB,WAAWkhE,EAAUh5E,MAAM0/B,WACvCs5C,EAAUh5E,MAAM0/B,QAAsB,IAAZA,EAAgB,GAAK7uC,OAAO6uC,IAEtD3tC,KAAKklF,oBAAsBW,EAAUh5E,WACrC7M,KAAKklF,kBAAoBW,EAAUh5E,SACnC7M,KAAK6kF,uBAAyB,MAE3B7kF,KAAKinF,WAOhB1C,EAA0BrnF,UAAUklE,YAAc,SAAUC,GACxD,OAAO,IAAIlzC,QAKX,SAAUC,GACN,IAAKpvB,KAAK6kF,yBAA2B7kF,KAAK2kF,wBAAyB,CAC/D,IAAIr0B,EAAO,CAACtwD,KAAK1E,QAAQo9E,OAAOl/B,MAAOx5C,KAAK1E,QAAQo9E,OAAOj/B,QAC3D,YAAMz5C,KAAK8mF,eAAgBx2B,GAC3B,IAAIF,EAASpwD,KAAKmlF,gBACd90B,EAAarwD,KAAKglF,oBAClBn4E,EAAW7M,KAAKklF,kBAChBpyB,EAAa9yD,KAAKolF,oBAClB34B,EAASzsD,KAAKilF,gBACdqC,EAAQtnF,KAAK+lF,WACbwB,EAAa,GACb/tC,EAAQ8W,EAAK,GAAK,EAClB7W,EAAS6W,EAAK,GAAK,EACvBi3B,EAAW/mF,KAAKR,KAAKymF,mBAAmBr2B,EAAQC,EAAYxjD,EAAU,GAAK2sC,EAAOC,EAAQ,GAAGh8C,SAC7F,IAAIK,EAASwpF,EAAMtB,YACfjzB,EAAmBD,EAAWE,YAClC,GAAIl1D,EAAOwoF,YACPxzB,EAAWG,aACV,yBAAeF,EAAkBtG,GAAS,CAK3C,IAJA,IAAI3K,EAAS2K,EAAO,GAChByG,EAAa,mBAASH,GACtByzB,EAAQ,EACRj6C,OAAU,EACPuV,EAASiR,EAAiB,IAE7BxmB,EAAU2mB,IADRszB,EAEFe,EAAW/mF,KAAKR,KAAKymF,mBAAmBr2B,EAAQC,EAAYxjD,EAAU,GAAK2sC,EAAOC,EAAQlN,GAAS9uC,SACnGqkD,GAAUoR,EAId,IAFAszB,EAAQ,EACR1kC,EAAS2K,EAAO,GACT3K,EAASiR,EAAiB,IAE7BxmB,EAAU2mB,IADRszB,EAEFe,EAAW/mF,KAAKR,KAAKymF,mBAAmBr2B,EAAQC,EAAYxjD,EAAU,GAAK2sC,EAAOC,EAAQlN,GAAS9uC,SACnGqkD,GAAUoR,EAGlBlzD,KAAK6kF,uBCrQd,SAAqCv0B,EAAMi3B,EAAYC,EAAUrxB,EAAe1J,EAAQ4D,EAAYxjD,GACvG,IAAI2sC,EAAQ8W,EAAK,GAAK,EAClB7W,EAAS6W,EAAK,GAAK,EACnBh1D,EAAU,aAAsBk+C,EAAOC,GAC3Cn+C,EAAQmsF,uBAAwB,EAOhC,IANA,IAAI/O,EAASp9E,EAAQo9E,OACjB7jB,EAAW,IAAI,GAAwBv5D,EAAS,GAAKmxD,EAAQ,KAAM5/C,GACnE66E,EAAeF,EAAS/sF,OAExBktF,EAAc/xE,KAAKC,MAAM,SAAwB6xE,GACjDE,EAAmB,GACd/rF,EAAI,EAAGA,GAAK6rF,IAAgB7rF,EAAG,CACpC,IAAIm6D,EAAUwxB,EAAS3rF,EAAI,GACvBgsF,EAAuB7xB,EAAQuI,oBAAsBpI,EACzD,GAAKA,EAAL,CAGA,IAAIx3B,EAASkpD,EAAqB7xB,EAAS3F,GAC3C,GAAK1xB,EAAL,CAGKnhC,MAAMvB,QAAQ0iC,KACfA,EAAS,CAACA,IAId,IAFA,IACI43B,EAAQ,KAAO,UADP16D,EAAI8rF,GACoBrrF,SAAS,KAAKmB,OAAO,GAChD6Y,EAAI,EAAG6nE,EAAKx/C,EAAOlkC,OAAQ6b,EAAI6nE,IAAM7nE,EAAG,CAC7C,IAAIwxE,EAAgBnpD,EAAOroB,GACvBrI,EAAQ65E,EAAcpnF,QACtB+zD,EAAOxmD,EAAMmnD,UACbX,GACAA,EAAKszB,SAASxxB,GAElB,IAAIxB,EAAS9mD,EAAMqnD,YACfP,GACAA,EAAOgzB,SAASxxB,GAEpBtoD,EAAM8nD,aAAQt3D,GACd,IAAIk2D,EAAQmzB,EAAczyB,WAC1B,GAAIV,EAAO,CACP,IAAIqzB,EAAUrzB,EAAMszB,eACpB,IAAKD,EACD,SAEJ,IAAIE,EAAWrhF,SAAS23B,cAAc,UACtC0pD,EAAS1uC,MAAQwuC,EAAQ,GACzBE,EAASzuC,OAASuuC,EAAQ,GAC1B,IAAIG,EAAaD,EAASE,WAAW,KAAM,CAAEpI,OAAO,IACpDmI,EAAW9iB,UAAY9O,EACvB,IAAI8xB,EAAMF,EAAWzP,OACrByP,EAAWG,SAAS,EAAG,EAAGD,EAAI7uC,MAAO6uC,EAAI5uC,QACzC,IAAI8uC,EAAUP,EAAUA,EAAQ,GAAKK,EAAI7uC,MACrCgvC,EAAWR,EAAUA,EAAQ,GAAKK,EAAI5uC,OACxB,aAAsB8uC,EAASC,GACrCrI,UAAUkI,EAAK,EAAG,GAC9Bp6E,EAAM4nD,SAAS,IAAI4yB,GAAA,QAAK,CACpBJ,IAAKA,EACLL,QAASA,EACT9b,OAAQvX,EAAMwX,YACduc,aAAcC,GAAA,EAAgBC,OAC9BC,aAAcF,GAAA,EAAgBC,OAC9BvrF,OAAQs3D,EAAM4X,YACdjc,KAAMqE,EAAM/C,UACZjkB,QAASgnB,EAAM0M,aACfv0D,MAAO6nD,EAAMoM,WACbl0D,SAAU8nD,EAAMsM,cAChBJ,eAAgBlM,EAAMuM,uBAG9B,IAAIhM,EAAS1V,OAAOvxC,EAAMunD,cACtBszB,EAAiBlB,EAAiB1yB,MAElC4zB,EAAiB,GACjBlB,EAAiB1yB,GAAU4zB,EAC3BA,EAAe7gB,EAAA,QAAatR,SAAW,GACvCmyB,EAAe7gB,EAAA,QAAalR,QAAU,GACtC+xB,EAAe7gB,EAAA,QAAapR,aAAe,GAC3CiyB,EAAe7gB,EAAA,QAAajR,OAAS,IAEzC,IAAI1C,EAAWrmD,EAAM0nD,qBAAN1nD,CAA4B+nD,GACvC1B,GAAY,qBAAW7H,EAAQ6H,EAAStB,cACxC81B,EAAex0B,EAASwT,UAAUzmE,QAAQ,QAAS,KAAKb,KAAK8zD,EAAUrmD,MAOnF,IAHA,IAAI86E,EAAa9rF,OAAOsS,KAAKq4E,GACxBrmF,IAAIi+C,QACJy+B,KAAK,KACMtnE,GAAP9a,EAAI,EAAQktF,EAAWtuF,QAAQoB,EAAI8a,IAAM9a,EAAG,CACjD,IAAIitF,EAAiBlB,EAAiBmB,EAAWltF,IACjD,IAAK,IAAIoL,KAAQ6hF,EACb,KAAIE,EAAeF,EAAe7hF,GAClC,IAASqP,EAAI,EAAG6nE,EAAK6K,EAAavuF,OAAQ6b,EAAI6nE,EAAI7nE,GAAK,EAAG,CACtDu+C,EAASwJ,SAAS2qB,EAAa1yE,EAAI,IACnC,IAAK,IAAI5U,EAAI,EAAGunF,EAAK1B,EAAW9sF,OAAQiH,EAAIunF,IAAMvnF,EAC9CmzD,EAASqrB,aAAaqH,EAAW7lF,IACjCmzD,EAASoP,aAAa+kB,EAAa1yE,MAKnD,OAAOhb,EAAQsiF,aAAa,EAAG,EAAGlF,EAAOl/B,MAAOk/B,EAAOj/B,QDgKbyvC,CAA4B54B,EAAMi3B,EAAYvnF,KAAK8kF,kBAAmBwC,EAAM/oB,mBAAoB9R,EAAQ4D,EAAYxjD,GAEtJuiB,ECvJL,SAAmBizC,EAAOmlB,EAAU7J,GACvC,IAAIwL,EAAiB,GACrB,GAAIxL,EAAW,CACX,IAAIt7E,EACA,GADSuT,KAAKmiE,MAAM1V,EAAM,GAAK,GAAKzsD,KAAKmiE,MAAM1V,EAAM,GAAK,GAAKsb,EAAUnkC,OAEzEv4C,EAAI08E,EAAUp2D,KAAKllB,GACnB+mF,EAAIzL,EAAUp2D,KAAKllB,EAAQ,GAE3BxG,EADI8hF,EAAUp2D,KAAKllB,EAAQ,GACnB,KAAO+mF,EAAI,IAAMnoF,GACzB0mF,EAAc/xE,KAAKC,MAAM,SAAwB2xE,EAAS/sF,QAC1DoB,GAAKA,EAAI8rF,GAAgB,GACzBwB,EAAe3oF,KAAKgnF,EAAS3rF,EAAI8rF,EAAc,IAGvD,OAAOwB,EDyISE,CAAUhnB,EAAOriE,KAAK8kF,kBAAmB9kF,KAAK6kF,0BACxD9/E,KAAK/E,QAWXukF,EAA0BrnF,UAAU0/E,2BAA6B,SAAU1vB,EAAYyV,EAAYka,EAActhF,EAAU0N,GACvH,IAAIgP,EAAQjY,KACZ,GAAKA,KAAKslF,aAAV,CAGA,IAsCIljF,EAtCAiuD,EAAasS,EAAWkjB,UAAUx1B,WAClCxjD,EAAW81D,EAAWkjB,UAAUh5E,SAChCy6E,EAAQtnF,KAAK+lF,WAEbyB,EAAW,GAOX9J,EAAkB,SAAU1nB,EAAS1B,EAAUipB,GAC/C,IAAIjuE,EAAM,iBAAO0mD,GACbnyD,EAAQ2jF,EAASl4E,GACrB,GAAKzL,GAaA,IAAc,IAAVA,GAAkB05E,EAAa15E,EAAM05E,WAAY,CACtD,GAAmB,IAAfA,EAGA,OAFAiK,EAASl4E,IAAO,EAChBrG,EAAQnN,OAAOmN,EAAQpG,YAAYgB,GAAQ,GACpCtI,EAASy6D,EAASsxB,EAAOhzB,GAEpCzwD,EAAMywD,SAAWA,EACjBzwD,EAAM05E,WAAaA,OApBX,CACR,GAAmB,IAAfA,EAEA,OADAiK,EAASl4E,IAAO,EACT/T,EAASy6D,EAASsxB,EAAOhzB,GAEpCrrD,EAAQzI,KAAMgnF,EAASl4E,GAAO,CAC1B0mD,QAASA,EACTsxB,MAAOA,EACPhzB,SAAUA,EACVipB,WAAYA,EACZhiF,SAAUA,MAelB+tF,EAAiB,CAACtpF,KAAKslF,cAS3B,OARItlF,KAAKwlF,wBACL8D,EAAe9oF,KAAKR,KAAKwlF,wBAE7B8D,EAAetnF,MAAK,SAAU4jF,GAC1B,OAAQxjF,EAASwjF,EAAchJ,2BAA2B1vB,EAAYmD,EAAYxjD,EAAUgwE,EAAca,EAAiBkI,IAAkB3tE,EAAMutE,uBAC7I7iB,EAAWC,cAAch1D,MAAMrM,KAAI,SAAUiC,GAAQ,OAAOA,EAAKjF,SACjE,SAEH6D,IAKXmiF,EAA0BrnF,UAAUqsF,mBAAqB,WACrD,IAAIjC,EAAQtnF,KAAK+lF,WACbuB,EAAMkC,cAAgBxpF,KAAKslF,cAC3BgC,EAAM7oB,WAQd8lB,EAA0BrnF,UAAUwnF,wBAA0B,SAAUh7E,GACpE1J,KAAKypF,2BAOTlF,EAA0BrnF,UAAUwsF,aAAe,SAAU/mB,GACzD,IAAI6hB,EAAcxkF,KAAK+lF,WACnBD,EAAetB,EAAYwB,YAC/B,IAAKF,EACD,OAAO,EAEX,IAAI6D,EAAYhnB,EAAWsjB,UAAUC,GAAA,EAASC,WAC1CyD,EAAcjnB,EAAWsjB,UAAUC,GAAA,EAASE,aAC5CxkB,EAAuB4iB,EAAYhiB,0BACnCX,EAAyB2iB,EAAY/hB,4BACzC,IAAMziE,KAAK4kF,SAAWhjB,GAAwB+nB,IACxC9nB,GAA0B+nB,EAE5B,OADA5pF,KAAK2kF,yBAA0B,GACxB,EAEX3kF,KAAK2kF,yBAA0B,EAC/B,IAAIkF,EAAmBlnB,EAAWlW,OAC9Bo5B,EAAYljB,EAAWkjB,UACvB/yB,EAAa+yB,EAAU/yB,WACvBzC,EAAaw1B,EAAUx1B,WACvByV,EAAanD,EAAWmD,WACxBgkB,EAAsBtF,EAAYuF,cAClCC,EAA0BxF,EAAYliB,kBACtC2nB,EAAyBzF,EAAYjiB,sBACV9jE,IAA3BwrF,IACAA,EAAyB,IAE7B,IAAI75B,EAASy1B,EAAUz1B,OAAO3yD,QAC1BgvD,EAAS,iBAAOo9B,EAAkBG,EAA0B35B,GAC5D65B,EAAc,CAACz9B,EAAOhvD,SACtBs1D,EAAmBD,EAAWE,YAClC,GAAI8yB,EAAaQ,YACbxzB,EAAWG,aACV,yBAAeF,EAAkB4P,EAAWlW,QAAS,CAMtD,IAAIyG,EAAa,mBAASH,GACtBo3B,EAASv0E,KAAK8K,IAAI,mBAAS+rC,GAAU,EAAGyG,GAC5CzG,EAAO,GAAKsG,EAAiB,GAAKo3B,EAClC19B,EAAO,GAAKsG,EAAiB,GAAKo3B,EAClC,aAAgB/5B,EAAQ0C,GACxB,IAAIs3B,EAAa,gBAAYF,EAAY,GAAIp3B,GAEzCs3B,EAAW,GAAKr3B,EAAiB,IACjCq3B,EAAW,GAAKr3B,EAAiB,GACjCm3B,EAAY1pF,KAAK,CACb4pF,EAAW,GAAKl3B,EAChBk3B,EAAW,GACXA,EAAW,GAAKl3B,EAChBk3B,EAAW,KAGVA,EAAW,GAAKr3B,EAAiB,IACtCq3B,EAAW,GAAKr3B,EAAiB,IACjCm3B,EAAY1pF,KAAK,CACb4pF,EAAW,GAAKl3B,EAChBk3B,EAAW,GACXA,EAAW,GAAKl3B,EAChBk3B,EAAW,KAIvB,IAAKpqF,KAAK4kF,QACN5kF,KAAKglF,qBAAuB30B,GAC5BrwD,KAAK+kF,mBAAqB+E,GAC1B9pF,KAAKqlF,sBAAwB4E,GAC7B,yBAAejqF,KAAKilF,gBAAiBx4B,GAErC,OADAzsD,KAAKulF,oBAAqB,GACnB,EAEXvlF,KAAKslF,aAAe,KACpBtlF,KAAK4kF,QAAS,EACd,IACIyF,EADAlH,EAAc,IAAI,EAAmB,GAAmB9yB,EAAYyV,GAAarZ,EAAQ4D,EAAYyV,GAErG9lE,KAAK+lF,WAAW5jB,iBAChBkoB,EAAwB,IAAI,EAAmB,GAAmBh6B,EAAYyV,GAAarZ,EAAQ4D,EAAYyV,IAEnH,IACIwkB,EADAruB,EAAiB,+BAErB,GAAIA,EAAgB,CAChB,IAAK,IAAIpgE,EAAI,EAAG8a,EAAKuzE,EAAYzvF,OAAQoB,EAAI8a,IAAM9a,EAC/CiqF,EAAayE,aAAa,wBAAaL,EAAYruF,GAAIi3D,GAAazC,EAAY4L,GAEpFquB,EAAgB,uCAA4BruB,EAAgBnJ,QAG5D,IAASj3D,EAAI,EAAG8a,EAAKuzE,EAAYzvF,OAAQoB,EAAI8a,IAAM9a,EAC/CiqF,EAAayE,aAAaL,EAAYruF,GAAIw0D,EAAYyC,GAG9D,IAAI6wB,EDnaL,SAA6BtzB,EAAYyV,GAC5C,IAAI7W,EAAYw0B,GAAapzB,EAAYyV,GACzC,OAAO7W,EAAYA,ECiaQ,CAA0BoB,EAAYyV,GACzD10B,EAKJ,SAAU4kB,GACN,IAAIr3B,EACAw3B,EAAgBH,EAAQuI,oBAAsBimB,EAAYjmB,mBAI9D,GAHIpI,IACAx3B,EAASw3B,EAAcH,EAAS3F,IAEhC1xB,EAAQ,CACR,IAAI6rD,EAAQxqF,KAAK0jF,cAAc1tB,EAAS2tB,EAAkBhlD,EAAQwkD,EAAamH,EAAeD,GAC9FrqF,KAAK4kF,OAAS5kF,KAAK4kF,QAAU4F,IAEnCzlF,KAAK/E,MACHyqF,EAAa,wBAAah+B,EAAQqG,GAElC00B,EAAW1B,EAAa4E,oBAAoBD,GAC5CR,GACAzC,EAASvJ,KAAKgM,GAElB,IAASpuF,EAAI,EAAG8a,EAAK6wE,EAAS/sF,OAAQoB,EAAI8a,IAAM9a,EAC5Cu1C,EAAOo2C,EAAS3rF,IAEpBmE,KAAK8kF,kBAAoB0C,EACzB,IAAImD,EAA0BxH,EAAYza,SACtCkd,EAAgB,IAAI,GAAcn5B,EAAQ4D,EAAYyV,EAAYggB,EAAa8E,cAAeD,EAAyBnG,EAAYliB,mBAavI,OAZI+nB,IACArqF,KAAKwlF,uBAAyB,IAAI,GAAc/4B,EAAQ4D,EAAYyV,EAAYggB,EAAa8E,cAAeP,EAAsB3hB,SAAU8b,EAAYliB,oBAE5JtiE,KAAKglF,oBAAsB30B,EAC3BrwD,KAAK+kF,kBAAoB+E,EACzB9pF,KAAKqlF,qBAAuB4E,EAC5BjqF,KAAKilF,gBAAkBx4B,EACvBzsD,KAAKmlF,gBAAkB/0B,EACvBpwD,KAAKolF,oBAAsBtyB,EAC3B9yD,KAAKslF,aAAeM,EACpB5lF,KAAK6kF,uBAAyB,KAC9B7kF,KAAKulF,oBAAqB,GACnB,GAWXhB,EAA0BrnF,UAAUwmF,cAAgB,SAAU1tB,EAAS2tB,EAAkBhlD,EAAQ+jD,EAAckB,EAAejB,GAC1H,IAAKhkD,EACD,OAAO,EAEX,IAAIklD,GAAU,EACd,GAAIrmF,MAAMvB,QAAQ0iC,GACd,IAAK,IAAI9iC,EAAI,EAAG8a,EAAKgoB,EAAOlkC,OAAQoB,EAAI8a,IAAM9a,EAC1CgoF,EACIH,GAAchB,EAAc1sB,EAASr3B,EAAO9iC,GAAI8nF,EAAkB3jF,KAAKykF,6BAA8Bb,EAAejB,IAA8BkB,OAI1JA,EAAUH,GAAchB,EAAc1sB,EAASr3B,EAAQglD,EAAkB3jF,KAAKykF,6BAA8Bb,EAAejB,GAE/H,OAAOkB,GAEJU,EAzfmC,CA0f5C,KE1hBE,GAAwC,WACxC,IAAI97C,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAE5B,OAAO,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,IAV3C,GA4BxC,GAA6B,SAAUO,GAKvC,SAASyhD,EAAY32B,GACjB,OAAO9qB,EAAO1rC,KAAKsC,KAAMk0D,IAAgBl0D,KAS7C,OAdA,GAAU6qF,EAAazhD,GAWvByhD,EAAY3tF,UAAU4tF,eAAiB,WACnC,OAAO,IAAI,GAA0B9qF,OAElC6qF,EAfqB,CAgB9BrpB,GACa,c,6BC7Cf,sLACQ/4B,EADR,kKAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KA8BnFkiD,EAAyB,SAAU3hD,GAanC,SAAS2hD,EAAQv+B,EAAaw+B,EAAYC,GACtC,IAAIhzE,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KA6CjC,OAxCAiY,EAAMizE,MAAQ,GAKdjzE,EAAMkzE,4BAA8B,EAKpClzE,EAAMmzE,mBAAqB,KAK3BnzE,EAAMozE,WAAa,EAKnBpzE,EAAMqzE,mBAAqB,EAK3BrzE,EAAMszE,mBAAqB,EAK3BtzE,EAAMuzE,yBAA2B,UACd/sF,IAAfusF,GAA4BC,GAC5BhzE,EAAMwzE,mBAAmBT,EACI,GAC7B/yE,EAAMizE,MAAQD,GAGdhzE,EAAMyzE,eAC6D,EAAeV,GAE/E/yE,EAuNX,OAjRAywB,EAAUqiD,EAAS3hD,GAiEnB2hD,EAAQ7tF,UAAUyuF,iBAAmB,SAAUC,GACtC5rF,KAAKyuD,gBAIN,YAAOzuD,KAAKyuD,gBAAiBm9B,EAAWrjB,sBAHxCvoE,KAAKyuD,gBAAkBm9B,EAAWrjB,qBAAqB9qE,QAK3DuC,KAAKkrF,MAAM1qF,KAAKR,KAAKyuD,gBAAgBh0D,QACrCuF,KAAKy+D,WAOTssB,EAAQ7tF,UAAUwD,MAAQ,WACtB,IAAImrF,EAAU,IAAId,EAAQ/qF,KAAKyuD,gBAAgBhxD,QAASuC,KAAK8rF,OAAQ9rF,KAAKkrF,MAAMztF,SAEhF,OADAouF,EAAQE,gBAAgB/rF,MACjB6rF,GASXd,EAAQ7tF,UAAU8uF,eAAiB,SAAUzrF,EAAGkjB,EAAGwoE,EAAcC,GAC7D,OAAIA,EAAqB,mCAAyBlsF,KAAKgzD,YAAazyD,EAAGkjB,GAC5DyoE,GAEPlsF,KAAKsrF,mBAAqBtrF,KAAK+pF,gBAC/B/pF,KAAKqrF,UAAYz1E,KAAKu3B,KAAK,YAAqBntC,KAAKyuD,gBAAiB,EAAGzuD,KAAKkrF,MAAOlrF,KAAK0uD,OAAQ,IAClG1uD,KAAKsrF,kBAAoBtrF,KAAK+pF,eAE3B,YAAwB/pF,KAAKyuD,gBAAiB,EAAGzuD,KAAKkrF,MAAOlrF,KAAK0uD,OAAQ1uD,KAAKqrF,WAAW,EAAM9qF,EAAGkjB,EAAGwoE,EAAcC,KAO/HnB,EAAQ7tF,UAAUiwD,WAAa,SAAU5sD,EAAGkjB,GACxC,OAAO,YAAsBzjB,KAAKkoE,6BAA8B,EAAGloE,KAAKkrF,MAAOlrF,KAAK0uD,OAAQnuD,EAAGkjB,IAOnGsnE,EAAQ7tF,UAAUsyD,QAAU,WACxB,OAAO,YAAgBxvD,KAAKkoE,6BAA8B,EAAGloE,KAAKkrF,MAAOlrF,KAAK0uD,SAelFq8B,EAAQ7tF,UAAUq5C,eAAiB,SAAU41C,GACzC,IAAI19B,EAQJ,YAPkBhwD,IAAd0tF,GACA19B,EAAkBzuD,KAAKkoE,6BAA6BzqE,QACpD,YAAkBgxD,EAAiB,EAAGzuD,KAAKkrF,MAAOlrF,KAAK0uD,OAAQy9B,IAG/D19B,EAAkBzuD,KAAKyuD,gBAEpB,YAAwBA,EAAiB,EAAGzuD,KAAKkrF,MAAOlrF,KAAK0uD,SAKxEq8B,EAAQ7tF,UAAUsrE,QAAU,WACxB,OAAOxoE,KAAKkrF,OAKhBH,EAAQ7tF,UAAU4yE,qBAAuB,WACrC,GAAI9vE,KAAKmrF,4BAA8BnrF,KAAK+pF,cAAe,CACvD,IAAIqC,EAAa,oBAAUpsF,KAAKgzD,aAChChzD,KAAKorF,mBAAqB,YAAwBprF,KAAKkoE,6BAA8B,EAAGloE,KAAKkrF,MAAOlrF,KAAK0uD,OAAQ09B,EAAY,GAC7HpsF,KAAKmrF,2BAA6BnrF,KAAK+pF,cAE3C,OAAO/pF,KAAKorF,oBAQhBL,EAAQ7tF,UAAUmvF,iBAAmB,WACjC,OAAO,IAAI,UAAMrsF,KAAK8vE,uBAAwB,IAAewc,MASjEvB,EAAQ7tF,UAAUqvF,mBAAqB,WACnC,OAAOvsF,KAAKkrF,MAAMzwF,QAYtBswF,EAAQ7tF,UAAUsvF,cAAgB,SAAUnqF,GACxC,OAAIA,EAAQ,GAAKrC,KAAKkrF,MAAMzwF,QAAU4H,EAC3B,KAEJ,IAAI,UAAWrC,KAAKyuD,gBAAgBhxD,MAAgB,IAAV4E,EAAc,EAAIrC,KAAKkrF,MAAM7oF,EAAQ,GAAIrC,KAAKkrF,MAAM7oF,IAASrC,KAAK8rF,SAOvHf,EAAQ7tF,UAAUuvF,eAAiB,WAM/B,IALA,IAAIX,EAAS9rF,KAAK8rF,OACdr9B,EAAkBzuD,KAAKyuD,gBACvBgZ,EAAOznE,KAAKkrF,MACZwB,EAAc,GACdrvF,EAAS,EACJxB,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC3C,IAAIiH,EAAM2kE,EAAK5rE,GACX+vF,EAAa,IAAI,UAAWn9B,EAAgBhxD,MAAMJ,EAAQyF,GAAMgpF,GACpEY,EAAYlsF,KAAKorF,GACjBvuF,EAASyF,EAEb,OAAO4pF,GAKX3B,EAAQ7tF,UAAUgrE,2BAA6B,WAC3C,GAAIloE,KAAKurF,mBAAqBvrF,KAAK+pF,cAAe,CAC9C,IAAIt7B,EAAkBzuD,KAAKyuD,gBACvB,YAAuBA,EAAiB,EAAGzuD,KAAKkrF,MAAOlrF,KAAK0uD,QAC5D1uD,KAAKwrF,yBAA2B/8B,GAGhCzuD,KAAKwrF,yBAA2B/8B,EAAgBhxD,QAChDuC,KAAKwrF,yBAAyB/wF,OAAS,YAAkBuF,KAAKwrF,yBAA0B,EAAGxrF,KAAKkrF,MAAOlrF,KAAK0uD,SAEhH1uD,KAAKurF,kBAAoBvrF,KAAK+pF,cAElC,OAAO/pF,KAAKwrF,0BAOhBT,EAAQ7tF,UAAUyvF,8BAAgC,SAAUhJ,GACxD,IAAIiJ,EAA4B,GAC5BC,EAAiB,GAErB,OADAD,EAA0BnyF,OAAS,YAAcuF,KAAKyuD,gBAAiB,EAAGzuD,KAAKkrF,MAAOlrF,KAAK0uD,OAAQ94C,KAAKu3B,KAAKw2C,GAAmBiJ,EAA2B,EAAGC,GACvJ,IAAI9B,EAAQ6B,EAA2B,IAAeE,GAAID,IAOrE9B,EAAQ7tF,UAAU4qE,QAAU,WACxB,OAAO,UAAanR,SAQxBo0B,EAAQ7tF,UAAU6vF,iBAAmB,SAAUtgC,GAC3C,OAAO,YAA0BzsD,KAAKkoE,6BAA8B,EAAGloE,KAAKkrF,MAAOlrF,KAAK0uD,OAAQjC,IAQpGs+B,EAAQ7tF,UAAUwuF,eAAiB,SAAUl/B,EAAaw+B,GACtDhrF,KAAKgtF,UAAUhC,EAAYx+B,EAAa,GACnCxsD,KAAKyuD,kBACNzuD,KAAKyuD,gBAAkB,IAE3B,IAAIgZ,EAAO,YAAwBznE,KAAKyuD,gBAAiB,EAAGjC,EAAaxsD,KAAK0uD,OAAQ1uD,KAAKkrF,OAC3FlrF,KAAKyuD,gBAAgBh0D,OAAyB,IAAhBgtE,EAAKhtE,OAAe,EAAIgtE,EAAKA,EAAKhtE,OAAS,GACzEuF,KAAKy+D,WAEFssB,EAlRiB,CAmR1B,KAcK,SAASkC,EAAS78B,EAAQljB,EAAQggD,EAAOC,GAI5C,IAHA,IAAItmC,EAAIqmC,GAAgB,GAEpBz+B,EAAkB,GACb5yD,EAAI,EAAGA,EAAIgrD,IAAKhrD,EACrB,YAAO4yD,EAAiB,YAAa2B,EAAQljB,EAAS,EAAIt3B,KAAKwhD,GAAKv7D,EAAKgrD,EAAGsmC,IAGhF,OADA1+B,EAAgBjuD,KAAKiuD,EAAgB,GAAIA,EAAgB,IAClD,IAAIs8B,EAAQt8B,EAAiB,IAAeq+B,GAAI,CACnDr+B,EAAgBh0D,SASjB,SAAS2yF,EAAW3gC,GACvB,IAAIe,EAAOf,EAAO,GACdgB,EAAOhB,EAAO,GACdiB,EAAOjB,EAAO,GACdkB,EAAOlB,EAAO,GACdgC,EAAkB,CAClBjB,EACAC,EACAD,EACAG,EACAD,EACAC,EACAD,EACAD,EACAD,EACAC,GAEJ,OAAO,IAAIs9B,EAAQt8B,EAAiB,IAAeq+B,GAAI,CACnDr+B,EAAgBh0D,SAYjB,SAAS4yF,EAAWC,EAAQC,EAAWC,GAO1C,IANA,IAAIC,EAAQF,GAAwB,GAChC7+B,EAAS4+B,EAAOvlB,YAChB+jB,EAASwB,EAAOI,YAChBt9B,EAASk9B,EAAO39B,YAChBg+B,EAAcj/B,GAAU++B,EAAQ,GAChCh/B,EAAkB,IAAIjxD,MAAMmwF,GACvB9xF,EAAI,EAAGA,EAAI8xF,EAAa9xF,GAAK6yD,EAAQ,CAC1CD,EAAgB5yD,GAAK,EACrB4yD,EAAgB5yD,EAAI,GAAK,EACzB,IAAK,IAAIya,EAAI,EAAGA,EAAIo4C,EAAQp4C,IACxBm4C,EAAgB5yD,EAAIya,GAAK85C,EAAO95C,GAGxC,IAAImxD,EAAO,CAAChZ,EAAgBh0D,QACxBoxF,EAAU,IAAId,EAAQt8B,EAAiBq9B,EAAQrkB,GAEnD,OADAmmB,EAAY/B,EAASz7B,EAAQk9B,EAAOtsB,YAAawsB,GAC1C3B,EAUJ,SAAS+B,EAAY/B,EAASz7B,EAAQljB,EAAQsgD,GAKjD,IAJA,IAAI/+B,EAAkBo9B,EAAQtjB,qBAC1B7Z,EAASm9B,EAAQ9jB,YACjB0lB,EAAQh/B,EAAgBh0D,OAASi0D,EAAS,EAC1Cm/B,EAAaL,GAAwB,EAChC3xF,EAAI,EAAGA,GAAK4xF,IAAS5xF,EAAG,CAC7B,IAAIwB,EAASxB,EAAI6yD,EACb+lB,EAAQoZ,EAAiC,EAAnB,YAAOhyF,EAAG4xF,GAAa73E,KAAKwhD,GAAMq2B,EAC5Dh/B,EAAgBpxD,GAAU+yD,EAAO,GAAKljB,EAASt3B,KAAK46C,IAAIikB,GACxDhmB,EAAgBpxD,EAAS,GAAK+yD,EAAO,GAAKljB,EAASt3B,KAAK86C,IAAI+jB,GAEhEoX,EAAQptB,UAnGG,a,+BC5Tf,WACQh2B,EADR,6CAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAiBnFilD,EAAuB,SAAU1kD,GAMjC,SAAS0kD,EAAMthC,EAAaw+B,GACxB,IAAI/yE,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAEjC,OADAiY,EAAMyzE,eAAel/B,EAAaw+B,GAC3B/yE,EAgFX,OAxFAywB,EAAUolD,EAAO1kD,GAejB0kD,EAAM5wF,UAAUwD,MAAQ,WACpB,IAAIigD,EAAQ,IAAImtC,EAAM9tF,KAAKyuD,gBAAgBhxD,QAASuC,KAAK8rF,QAEzD,OADAnrC,EAAMorC,gBAAgB/rF,MACf2gD,GASXmtC,EAAM5wF,UAAU8uF,eAAiB,SAAUzrF,EAAGkjB,EAAGwoE,EAAcC,GAC3D,IAAIz9B,EAAkBzuD,KAAKyuD,gBACvBs/B,EAAkB,YAAUxtF,EAAGkjB,EAAGgrC,EAAgB,GAAIA,EAAgB,IAC1E,GAAIs/B,EAAkB7B,EAAoB,CAEtC,IADA,IAAIx9B,EAAS1uD,KAAK0uD,OACT7yD,EAAI,EAAGA,EAAI6yD,IAAU7yD,EAC1BowF,EAAapwF,GAAK4yD,EAAgB5yD,GAGtC,OADAowF,EAAaxxF,OAASi0D,EACfq/B,EAGP,OAAO7B,GAQf4B,EAAM5wF,UAAUq5C,eAAiB,WAC7B,OAAQv2C,KAAKyuD,gBAAuBzuD,KAAKyuD,gBAAgBhxD,QAA1B,IAOnCqwF,EAAM5wF,UAAU8wF,cAAgB,SAAUvhC,GACtC,OAAO,uCAA6BzsD,KAAKyuD,gBAAiBhC,IAO9DqhC,EAAM5wF,UAAU4qE,QAAU,WACtB,OAAO,UAAa9Q,OAQxB82B,EAAM5wF,UAAU6vF,iBAAmB,SAAUtgC,GACzC,OAAO,qBAAWA,EAAQzsD,KAAKyuD,gBAAgB,GAAIzuD,KAAKyuD,gBAAgB,KAO5Eq/B,EAAM5wF,UAAUwuF,eAAiB,SAAUl/B,EAAaw+B,GACpDhrF,KAAKgtF,UAAUhC,EAAYx+B,EAAa,GACnCxsD,KAAKyuD,kBACNzuD,KAAKyuD,gBAAkB,IAE3BzuD,KAAKyuD,gBAAgBh0D,OAAS,YAAkBuF,KAAKyuD,gBAAiB,EAAGjC,EAAaxsD,KAAK0uD,QAC3F1uD,KAAKy+D,WAEFqvB,EAzFe,CA0FxB,KACa,a,6BCpHf7wF,OAAOy2B,eAAe0pC,EAAS,aAAc,CAC3C7+D,OAAO,IAET6+D,EAAQC,QAoCR,SAAgBx2C,IACd,EAAIonE,EAAO5wB,SAAS,EAAG3hE,WACvB,IAAIwyF,EAASjxF,OAAOC,UAAUZ,SAASoB,KAAKmpB,GAE5C,OAAIA,aAAoB/lB,MAA4B,iBAAb+lB,GAAoC,kBAAXqnE,EAEvD,IAAIptF,KAAK+lB,EAAS9lB,WACI,iBAAb8lB,GAAoC,oBAAXqnE,EAClC,IAAIptF,KAAK+lB,IAES,iBAAbA,GAAoC,oBAAXqnE,GAAoD,oBAAZlpF,UAE3EA,QAAQY,KAAK,oJAEbZ,QAAQY,MAAK,IAAI+C,OAAQyI,QAGpB,IAAItQ,KAAK4D,OAnDpB,IAEgCtH,EAF5B6wF,GAE4B7wF,EAFI,EAAQ,OAESA,EAAI+wF,WAAa/wF,EAAM,CAAEigE,QAASjgE,GAqDvFmG,EAAO65D,QAAUA,EAAQC,S,8PCpDrB+wB,GAAkB,EAuGf,SAAS,EAAInoF,EAAK4S,GAWrB,OAAO,SAAU4zC,EAAQ4D,EAAYyC,EAAYu7B,EAASC,GACtD,IAAIxwF,EAA0D,MAxE/D,SAAyBmI,EAAK4S,EAAQ4zC,EAAQ4D,EAAYyC,EAAYu7B,EAASC,GAClF,IAAIC,EAAM,IAAIj/D,eACdi/D,EAAIp+D,KAAK,MAAsB,mBAARlqB,EAAqBA,EAAIwmD,EAAQ4D,EAAYyC,GAAc7sD,GAAK,GACnF4S,EAAOivD,WAAa0mB,EAAA,EAAWC,eAC/BF,EAAIG,aAAe,eAEvBH,EAAIH,gBAAkBA,EAKtBG,EAAI7+D,OAAS,SAAUhmB,GAEnB,IAAK6kF,EAAIz9D,QAAWy9D,EAAIz9D,QAAU,KAAOy9D,EAAIz9D,OAAS,IAAM,CACxD,IAAI7pB,EAAO4R,EAAOivD,UAEdhqE,OAAS,EACTmJ,GAAQunF,EAAA,EAAW/mE,MAAQxgB,GAAQunF,EAAA,EAAWG,KAC9C7wF,EAASywF,EAAI79D,aAERzpB,GAAQunF,EAAA,EAAWI,KACxB9wF,EAASywF,EAAIM,eAET/wF,GAAS,IAAIgxF,WAAYC,gBAAgBR,EAAI79D,aAAc,oBAG1DzpB,GAAQunF,EAAA,EAAWC,eACxB3wF,EAAqCywF,EAAY,UAEjDzwF,EACAuwF,EAECx1E,EAAOm2E,aAAalxF,EAAQ,CACzB2uD,OAAQA,EACRwiC,kBAAmBn8B,IAClBj6C,EAAOq2E,eAAepxF,IAG3BwwF,SAIJA,KAMRC,EAAIv+D,QAAUs+D,EACdC,EAAIx/D,OAwBAogE,CAAgBlpF,EAAK4S,EAAQ4zC,EAAQ4D,EAAYyC,GAMjD,SAAU00B,EAAU4H,QACA3wF,IAAZ4vF,GACAA,EAAQ7G,GAEZ1pF,EAAOuxF,YAAY7H,KAEE8G,GAAoB,MCvIrD,IACQ7lD,EADJC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAmCnFymD,EAAmC,SAAUlmD,GAO7C,SAASkmD,EAAkBroF,EAAMsoF,EAAaC,GAC1C,IAAIv3E,EAAQmxB,EAAO1rC,KAAKsC,KAAMiH,IAASjH,KAavC,OAPAiY,EAAM+9C,QAAUu5B,EAMhBt3E,EAAMuvE,SAAWgI,EACVv3E,EAEX,OAtBAywB,EAAU4mD,EAAmBlmD,GAsBtBkmD,EAvB2B,CAwBpC9oF,EAAA,GAoGE,EAA8B,SAAU4iC,GAKxC,SAASqmD,EAAav7B,GAClB,IAAIj8C,EAAQjY,KACRga,EAAUk6C,GAAe,IAC7Bj8C,EAAQmxB,EAAO1rC,KAAKsC,KAAM,CACtB0vF,aAAc11E,EAAQ01E,aACtB58B,gBAAYr0D,EACZ6nE,MAAO,IAAYqpB,MACnB98B,WAAyBp0D,IAAlBub,EAAQ64C,OAAsB74C,EAAQ64C,SAC3C7yD,MAKA4vF,QAAU,IAKhB33E,EAAM43E,QAAU71E,EAAQnB,OAKxBZ,EAAM+jE,eAAiCv9E,IAArBub,EAAQs7D,UAAgCt7D,EAAQs7D,SAKlEr9D,EAAM63E,KAAO91E,EAAQ/T,SACExH,IAAnBub,EAAQ+1E,OACR93E,EAAM23E,QAAU51E,EAAQ+1E,YAEJtxF,IAAfwZ,EAAM63E,OACX,YAAO73E,EAAM43E,QAAS,GAEtB53E,EAAM23E,QAAU,EAAI33E,EAAM63E,KAC6B73E,EAAa,UAMxEA,EAAM+3E,eACmBvxF,IAArBub,EAAQi2E,SAAyBj2E,EAAQi2E,SAAW,MACxD,IAsCIC,EAAY1I,EAtCZ2I,OAA8C1xF,IAA5Bub,EAAQm2E,iBAAgCn2E,EAAQm2E,gBAuDtE,OAlDAl4E,EAAMm4E,eAAiBD,EAAkB,IAAIE,EAAA,EAAU,KAKvDp4E,EAAMq4E,oBAAsB,IAAID,EAAA,EAKhCp4E,EAAMs4E,sBAAwB,GAM9Bt4E,EAAMu4E,SAAW,GAMjBv4E,EAAMw4E,UAAY,GAKlBx4E,EAAMy4E,mBAAqB,GAK3Bz4E,EAAM04E,oBAAsB,KAExBnzF,MAAMvB,QAAQ+d,EAAQwtE,UACtBA,EAAWxtE,EAAQwtE,SAEdxtE,EAAQwtE,WAEbA,GADA0I,EAAal2E,EAAQwtE,UACCoJ,YAErBT,QAAkC1xF,IAAfyxF,IACpBA,EAAa,IAAIzoD,EAAA,QAAW+/C,SAEf/oF,IAAb+oF,GACAvvE,EAAM44E,oBAAoBrJ,QAEX/oF,IAAfyxF,GACAj4E,EAAM64E,wBAAwBZ,GAE3Bj4E,EAirBX,OAxxBAywB,EAAU+mD,EAAcrmD,GAqHxBqmD,EAAavyF,UAAU6zF,WAAa,SAAU/6B,GAC1Ch2D,KAAKgxF,mBAAmBh7B,GACxBh2D,KAAKy+D,WAOTgxB,EAAavyF,UAAU8zF,mBAAqB,SAAUh7B,GAClD,IAAIi7B,EAAa,iBAAOj7B,GACxB,GAAKh2D,KAAKkxF,YAAYD,EAAYj7B,GAAlC,CAMAh2D,KAAKmxF,mBAAmBF,EAAYj7B,GACpC,IAAI1B,EAAW0B,EAAQb,cACvB,GAAIb,EAAU,CACV,IAAI7H,EAAS6H,EAAStB,YAClBhzD,KAAKowF,gBACLpwF,KAAKowF,eAAerV,OAAOtuB,EAAQuJ,QAIvCh2D,KAAKuwF,sBAAsBU,GAAcj7B,EAE7Ch2D,KAAKqK,cAAc,IAAIilF,EAAkB8B,EAAA,EAAgBC,WAAYr7B,SAhB7Dh2D,KAAK2wF,qBACL3wF,KAAK2wF,oBAAoBhpF,OAAOquD,IAsB5Cy5B,EAAavyF,UAAUi0F,mBAAqB,SAAUF,EAAYj7B,GAC9Dh2D,KAAK0wF,mBAAmBO,GAAc,CAClC,YAAOj7B,EAASs7B,EAAA,EAAU5yB,OAAQ1+D,KAAKuxF,qBAAsBvxF,MAC7D,YAAOg2D,EAASw7B,EAAA,EAAgBC,eAAgBzxF,KAAKuxF,qBAAsBvxF,QAUnFyvF,EAAavyF,UAAUg0F,YAAc,SAAUD,EAAYj7B,GACvD,IAAI07B,GAAQ,EACR9tF,EAAKoyD,EAAQsI,QAajB,YAZW7/D,IAAPmF,IACMA,EAAGtH,aAAc0D,KAAKwwF,SAIxBkB,GAAQ,EAHR1xF,KAAKwwF,SAAS5sF,EAAGtH,YAAc05D,GAMnC07B,IACA,cAAST,KAAcjxF,KAAKywF,WAAY,IACxCzwF,KAAKywF,UAAUQ,GAAcj7B,GAE1B07B,GAOXjC,EAAavyF,UAAUmyF,YAAc,SAAU7H,GAC3CxnF,KAAK6wF,oBAAoBrJ,GACzBxnF,KAAKy+D,WAOTgxB,EAAavyF,UAAU2zF,oBAAsB,SAAUrJ,GAInD,IAHA,IAAImK,EAAU,GACVC,EAAc,GACdC,EAAmB,GACdh2F,EAAI,EAAGwe,EAAWmtE,EAAS/sF,OAAQoB,EAAIwe,EAAUxe,IAAK,CAC3D,IAAIm6D,EAAUwxB,EAAS3rF,GACnBo1F,EAAa,iBAAOj7B,GACpBh2D,KAAKkxF,YAAYD,EAAYj7B,IAC7B47B,EAAYpxF,KAAKw1D,GAGhBn6D,EAAI,EAAb,IAAK,IAAWqjC,EAAW0yD,EAAYn3F,OAAQoB,EAAIqjC,EAAUrjC,IAAK,CAC1Dm6D,EAAU47B,EAAY/1F,GACtBo1F,EAAa,iBAAOj7B,GACxBh2D,KAAKmxF,mBAAmBF,EAAYj7B,GACpC,IAAI1B,EAAW0B,EAAQb,cACvB,GAAIb,EAAU,CACV,IAAI7H,EAAS6H,EAAStB,YACtB2+B,EAAQnxF,KAAKisD,GACbolC,EAAiBrxF,KAAKw1D,QAGtBh2D,KAAKuwF,sBAAsBU,GAAcj7B,EAG7Ch2D,KAAKowF,gBACLpwF,KAAKowF,eAAelwC,KAAKyxC,EAASE,GAE7Bh2F,EAAI,EAAb,IAAK,IAAWoiC,EAAW2zD,EAAYn3F,OAAQoB,EAAIoiC,EAAUpiC,IACzDmE,KAAKqK,cAAc,IAAIilF,EAAkB8B,EAAA,EAAgBC,WAAYO,EAAY/1F,MAOzF4zF,EAAavyF,UAAU4zF,wBAA0B,SAAUZ,GACvD,IAAI4B,GAAsB,EAC1B9xF,KAAKoI,iBAAiBgpF,EAAA,EAAgBC,YAItC,SAAU3mF,GACDonF,IACDA,GAAsB,EACtB5B,EAAW1vF,KAAKkK,EAAIsrD,SACpB87B,GAAsB,MAG9B9xF,KAAKoI,iBAAiBgpF,EAAA,EAAgBW,eAItC,SAAUrnF,GACDonF,IACDA,GAAsB,EACtB5B,EAAWvoF,OAAO+C,EAAIsrD,SACtB87B,GAAsB,MAG9B5B,EAAW9nF,iBAAiB4pF,EAAA,EAAoBC,IAIhD,SAAUvnF,GACDonF,IACDA,GAAsB,EACtB9xF,KAAK+wF,WACqDrmF,EAAW,SACrEonF,GAAsB,IAE5B/sF,KAAK/E,OACPkwF,EAAW9nF,iBAAiB4pF,EAAA,EAAoBE,OAIhD,SAAUxnF,GACDonF,IACDA,GAAsB,EACtB9xF,KAAKmyF,cACqDznF,EAAW,SACrEonF,GAAsB,IAE5B/sF,KAAK/E,OACPA,KAAK2wF,oBAAsBT,GAO/BT,EAAavyF,UAAUk1F,MAAQ,SAAUC,GACrC,GAAIA,EAAU,CACV,IAAK,IAAIC,KAAatyF,KAAK0wF,mBAAoB,CAChC1wF,KAAK0wF,mBAAmB4B,GAC9BrvF,QAAQ,KAEZjD,KAAK2wF,sBACN3wF,KAAK0wF,mBAAqB,GAC1B1wF,KAAKwwF,SAAW,GAChBxwF,KAAKywF,UAAY,SAIrB,GAAIzwF,KAAKowF,eAEL,IAAK,IAAIxsF,KADT5D,KAAKowF,eAAentF,QAAQjD,KAAKuyF,sBAAsBxtF,KAAK/E,OAC7CA,KAAKuwF,sBAChBvwF,KAAKuyF,sBAAsBvyF,KAAKuwF,sBAAsB3sF,IAI9D5D,KAAK2wF,qBACL3wF,KAAK2wF,oBAAoByB,QAEzBpyF,KAAKowF,gBACLpwF,KAAKowF,eAAegC,QAExBpyF,KAAKuwF,sBAAwB,GAC7B,IAAIiC,EAAa,IAAIlD,EAAkB8B,EAAA,EAAgBqB,OACvDzyF,KAAKqK,cAAcmoF,GACnBxyF,KAAKy+D,WAcTgxB,EAAavyF,UAAUw1F,eAAiB,SAAUn3F,GAC9C,GAAIyE,KAAKowF,eACL,OAAOpwF,KAAKowF,eAAentF,QAAQ1H,GAE9ByE,KAAK2wF,qBACV3wF,KAAK2wF,oBAAoB1tF,QAAQ1H,IAezCk0F,EAAavyF,UAAUy1F,iCAAmC,SAAUzlC,EAAY3xD,GAC5E,IAAIkxD,EAAS,CAACS,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,IACtE,OAAOltD,KAAK4yF,uBAAuBnmC,GAAQ,SAAUuJ,GAEjD,OADeA,EAAQb,cACV09B,qBAAqB3lC,GACvB3xD,EAASy6D,QAGhB,MAuBZy5B,EAAavyF,UAAU01F,uBAAyB,SAAUnmC,EAAQlxD,GAC9D,GAAIyE,KAAKowF,eACL,OAAOpwF,KAAKowF,eAAe0C,gBAAgBrmC,EAAQlxD,GAE9CyE,KAAK2wF,qBACV3wF,KAAK2wF,oBAAoB1tF,QAAQ1H,IAkBzCk0F,EAAavyF,UAAU61F,iCAAmC,SAAUtmC,EAAQlxD,GACxE,OAAOyE,KAAK4yF,uBAAuBnmC,GAKnC,SAAUuJ,GAEN,GADeA,EAAQb,cACV43B,iBAAiBtgC,GAAS,CACnC,IAAIrqD,EAAS7G,EAASy6D,GACtB,GAAI5zD,EACA,OAAOA,OAYvBqtF,EAAavyF,UAAU81F,sBAAwB,WAC3C,OAAOhzF,KAAK2wF,qBAOhBlB,EAAavyF,UAAUklE,YAAc,WACjC,IAAIolB,EAUJ,OATIxnF,KAAK2wF,oBACLnJ,EAAWxnF,KAAK2wF,oBAAoBC,WAE/B5wF,KAAKowF,iBACV5I,EAAWxnF,KAAKowF,eAAe6C,SAC1B,YAAQjzF,KAAKuwF,wBACd,YAAO/I,EAAU,YAAUxnF,KAAKuwF,yBAG+B,GAQ3Ed,EAAavyF,UAAUg2F,wBAA0B,SAAUhmC,GACvD,IAAIs6B,EAAW,GAIf,OAHAxnF,KAAK2yF,iCAAiCzlC,GAAY,SAAU8I,GACxDwxB,EAAShnF,KAAKw1D,MAEXwxB,GAcXiI,EAAavyF,UAAUwtF,oBAAsB,SAAUj+B,GACnD,OAAIzsD,KAAKowF,eACEpwF,KAAKowF,eAAe+C,YAAY1mC,GAElCzsD,KAAK2wF,oBACH3wF,KAAK2wF,oBAAoBC,WAGzB,IAefnB,EAAavyF,UAAUk2F,8BAAgC,SAAUlmC,EAAYmmC,GAQzE,IAAI9yF,EAAI2sD,EAAW,GACfzpC,EAAIypC,EAAW,GACfomC,EAAiB,KACjBrH,EAAe,CAACvnF,IAAKA,KACrBwnF,EAAqBrmE,IACrB4mC,EAAS,EAAE5mC,KAAWA,IAAUA,IAAUA,KAC1CxiB,EAASgwF,GAA0B,IAwBvC,OAvBArzF,KAAKowF,eAAe0C,gBAAgBrmC,GAIpC,SAAUuJ,GACN,GAAI3yD,EAAO2yD,GAAU,CACjB,IAAI1B,EAAW0B,EAAQb,cACnBo+B,EAA6BrH,EAEjC,IADAA,EAAqB53B,EAAS03B,eAAezrF,EAAGkjB,EAAGwoE,EAAcC,IACxCqH,EAA4B,CACjDD,EAAiBt9B,EAKjB,IAAIw9B,EAAc59E,KAAKu3B,KAAK++C,GAC5Bz/B,EAAO,GAAKlsD,EAAIizF,EAChB/mC,EAAO,GAAKhpC,EAAI+vE,EAChB/mC,EAAO,GAAKlsD,EAAIizF,EAChB/mC,EAAO,GAAKhpC,EAAI+vE,OAIrBF,GAYX7D,EAAavyF,UAAU81D,UAAY,SAAUnG,GACzC,OAAO7sD,KAAKowF,eAAep9B,UAAUnG,IAWzC4iC,EAAavyF,UAAUu2F,eAAiB,SAAU7vF,GAC9C,IAAIoyD,EAAUh2D,KAAKwwF,SAAS5sF,EAAGtH,YAC/B,YAAmBmC,IAAZu3D,EAAwBA,EAAU,MAQ7Cy5B,EAAavyF,UAAUw2F,gBAAkB,SAAU/kF,GAC/C,IAAIqnD,EAAUh2D,KAAKywF,UAAU9hF,GAC7B,YAAmBlQ,IAAZu3D,EAAwBA,EAAU,MAQ7Cy5B,EAAavyF,UAAUy2F,UAAY,WAC/B,OAAO3zF,KAAK6vF,SAKhBJ,EAAavyF,UAAU0tF,YAAc,WACjC,OAAO5qF,KAAKg8E,WAQhByT,EAAavyF,UAAU02F,OAAS,WAC5B,OAAO5zF,KAAK8vF,MAMhBL,EAAavyF,UAAUq0F,qBAAuB,SAAU7nF,GACpD,IAAIssD,EAAoEtsD,EAAY,OAChFunF,EAAa,iBAAOj7B,GACpB1B,EAAW0B,EAAQb,cACvB,GAAKb,EAQA,CACD,IAAI7H,EAAS6H,EAAStB,YAClBi+B,KAAcjxF,KAAKuwF,8BACZvwF,KAAKuwF,sBAAsBU,GAC9BjxF,KAAKowF,gBACLpwF,KAAKowF,eAAerV,OAAOtuB,EAAQuJ,IAInCh2D,KAAKowF,gBACLpwF,KAAKowF,eAAe/vB,OAAO5T,EAAQuJ,QAjBrCi7B,KAAcjxF,KAAKuwF,wBACjBvwF,KAAKowF,gBACLpwF,KAAKowF,eAAezoF,OAAOquD,GAE/Bh2D,KAAKuwF,sBAAsBU,GAAcj7B,GAiBjD,IAAIpyD,EAAKoyD,EAAQsI,QACjB,QAAW7/D,IAAPmF,EAAkB,CAClB,IAAIiwF,EAAMjwF,EAAGtH,WACT0D,KAAKwwF,SAASqD,KAAS79B,IACvBh2D,KAAK8zF,mBAAmB99B,GACxBh2D,KAAKwwF,SAASqD,GAAO79B,QAIzBh2D,KAAK8zF,mBAAmB99B,GACxBh2D,KAAKywF,UAAUQ,GAAcj7B,EAEjCh2D,KAAKy+D,UACLz+D,KAAKqK,cAAc,IAAIilF,EAAkB8B,EAAA,EAAgB2C,cAAe/9B,KAQ5Ey5B,EAAavyF,UAAU82F,WAAa,SAAUh+B,GAC1C,IAAIpyD,EAAKoyD,EAAQsI,QACjB,YAAW7/D,IAAPmF,EACOA,KAAM5D,KAAKwwF,SAGX,iBAAOx6B,KAAYh2D,KAAKywF,WAMvChB,EAAavyF,UAAU88B,QAAU,WAC7B,OAAOh6B,KAAKowF,eAAep2D,WAAa,YAAQh6B,KAAKuwF,wBAOzDd,EAAavyF,UAAUqtF,aAAe,SAAU99B,EAAQ4D,EAAYyC,GAChE,IAAImhC,EAAqBj0F,KAAKswF,oBAC1B4D,EAAgBl0F,KAAKgwF,UAAUvjC,EAAQ4D,GAC3CrwD,KAAK6jF,SAAU,EAuBf,IAtBA,IAAIvzE,EAAU,SAAUzU,EAAG8a,GACvB,IAAIw9E,EAAeD,EAAcr4F,GACbo4F,EAAmBnB,gBAAgBqB,GAKvD,SAAUC,GACN,OAAO,yBAAeA,EAAO3nC,OAAQ0nC,QAGrCrgD,EAAOzpC,cAAc,IAAIilF,EAAkB8B,EAAA,EAAgBiD,oBAC3DvgD,EAAO87C,QAAQlyF,KAAKo2C,EAAQqgD,EAAc9jC,EAAYyC,EAAY,SAAU00B,GACxExnF,KAAKqK,cAAc,IAAIilF,EAAkB8B,EAAA,EAAgBkD,qBAAiB71F,EAAW+oF,KACvFziF,KAAK+uC,GAAS,WACZ9zC,KAAKqK,cAAc,IAAIilF,EAAkB8B,EAAA,EAAgBmD,qBAC3DxvF,KAAK+uC,IACPmgD,EAAmBlZ,OAAOoZ,EAAc,CAAE1nC,OAAQ0nC,EAAa12F,UAC/Dq2C,EAAO+vC,QAAU/vC,EAAO87C,UAAY,MAGxC97C,EAAS9zC,KACJnE,EAAI,EAAG8a,EAAKu9E,EAAcz5F,OAAQoB,EAAI8a,IAAM9a,EACjDyU,EAAQzU,IAGhB4zF,EAAavyF,UAAU+zC,QAAU,WAC7BjxC,KAAKoyF,OAAM,GACXpyF,KAAKswF,oBAAoB8B,QACzBhpD,EAAOlsC,UAAU+zC,QAAQvzC,KAAKsC,OAOlCyvF,EAAavyF,UAAUs3F,mBAAqB,SAAU/nC,GAClD,IACIrvD,EADA62F,EAAqBj0F,KAAKswF,oBAE9B2D,EAAmBnB,gBAAgBrmC,GAAQ,SAAU2nC,GACjD,GAAI,iBAAOA,EAAO3nC,OAAQA,GAEtB,OADArvD,EAAMg3F,GACC,KAGXh3F,GACA62F,EAAmBtsF,OAAOvK,IAUlCqyF,EAAavyF,UAAUi1F,cAAgB,SAAUn8B,GAC7C,IAAIi7B,EAAa,iBAAOj7B,GACpBi7B,KAAcjxF,KAAKuwF,6BACZvwF,KAAKuwF,sBAAsBU,GAG9BjxF,KAAKowF,gBACLpwF,KAAKowF,eAAezoF,OAAOquD,GAGnCh2D,KAAKuyF,sBAAsBv8B,GAC3Bh2D,KAAKy+D,WAOTgxB,EAAavyF,UAAUq1F,sBAAwB,SAAUv8B,GACrD,IAAIi7B,EAAa,iBAAOj7B,GACxBh2D,KAAK0wF,mBAAmBO,GAAYhuF,QAAQ,YACrCjD,KAAK0wF,mBAAmBO,GAC/B,IAAIrtF,EAAKoyD,EAAQsI,aACN7/D,IAAPmF,UACO5D,KAAKwwF,SAAS5sF,EAAGtH,mBAErB0D,KAAKywF,UAAUQ,GACtBjxF,KAAKqK,cAAc,IAAIilF,EAAkB8B,EAAA,EAAgBW,cAAe/7B,KAS5Ey5B,EAAavyF,UAAU42F,mBAAqB,SAAU99B,GAClD,IAAIy+B,GAAU,EACd,IAAK,IAAI7wF,KAAM5D,KAAKwwF,SAChB,GAAIxwF,KAAKwwF,SAAS5sF,KAAQoyD,EAAS,QACxBh2D,KAAKwwF,SAAS5sF,GACrB6wF,GAAU,EACV,MAGR,OAAOA,GAQXhF,EAAavyF,UAAUw3F,UAAY,SAAU3E,GACzC/vF,KAAK4vF,QAAUG,GAOnBN,EAAavyF,UAAUy3F,OAAS,SAAU1uF,GACtC,YAAOjG,KAAK6vF,QAAS,GACrB7vF,KAAK00F,UAAU,EAAIzuF,EAAKjG,KAAK6vF,WAE1BJ,EAzxBsB,CA0xB/BmF,EAAA,GACa,a,6BCj8BR,SAASC,IACZ,OAAyB,WACrB,MAAM,IAAIlsF,MAAM,kCADI,GAP5B,+HAgBA,IAAImsF,EAAc,EAUX,SAASC,EAAO33F,GACnB,OAAOA,EAAI43F,SAAW53F,EAAI43F,OAASl2F,SAASg2F,IAMzC,IAAIG,EAAU,S,0CC7BbxsD,E,kBCGO,EAKE,cALF,EAUG,eAVH,EAeD,WAfC,EAoBA,Y,wEDxBXC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAanFqsD,EAAqB,KACrB,EAA2B,SAAU9rD,GAUrC,SAAS+rD,EAAUxgC,EAAOh0D,EAAK2vD,EAAM8kC,EAAatR,EAAYvtB,GAC1D,IAAIt+C,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAgDjC,OA3CAiY,EAAMizD,mBAAqB,KAK3BjzD,EAAMy8C,OAAUC,GAAQ,IAAI0gC,MACR,OAAhBD,IACiCn9E,EAAY,OAAEm9E,YAAcA,GAMjEn9E,EAAMq9E,QAAU,GAKhBr9E,EAAMs9E,OAASh/B,EAKft+C,EAAMu9E,UAAY,KAKlBv9E,EAAMw9E,YAAc3R,EAKpB7rE,EAAMy9E,MAAQplC,EAKdr4C,EAAM09E,KAAOh1F,EAIbsX,EAAM29E,SACC39E,EA4KX,OAtOAywB,EAAUysD,EAAW/rD,GAgErB+rD,EAAUj4F,UAAU24F,WAAa,WAC7B,QAAsBp3F,IAAlBuB,KAAK41F,UAA0B51F,KAAKy1F,cAAgB5S,EAAA,EAAWC,OAAQ,CAClEoS,IACDA,EAAqB,YAAsB,EAAG,IAElDA,EAAmB/U,UAAUngF,KAAK00D,OAAQ,EAAG,GAC7C,IACIwgC,EAAmBtX,aAAa,EAAG,EAAG,EAAG,GACzC59E,KAAK41F,UAAW,EAEpB,MAAO/6F,GACHq6F,EAAqB,KACrBl1F,KAAK41F,UAAW,GAGxB,OAAyB,IAAlB51F,KAAK41F,UAKhBT,EAAUj4F,UAAU44F,qBAAuB,WACvC91F,KAAKqK,cAAcinF,EAAA,EAAU5yB,SAKjCy2B,EAAUj4F,UAAU64F,kBAAoB,WACpC/1F,KAAKy1F,YAAc5S,EAAA,EAAWkB,MAC9B/jF,KAAKg2F,iBACLh2F,KAAK81F,wBAKTX,EAAUj4F,UAAU+4F,iBAAmB,WACnCj2F,KAAKy1F,YAAc5S,EAAA,EAAWC,OAC1B9iF,KAAK01F,OACL11F,KAAK00D,OAAOlb,MAAQx5C,KAAK01F,MAAM,GAC/B11F,KAAK00D,OAAOjb,OAASz5C,KAAK01F,MAAM,IAGhC11F,KAAK01F,MAAQ,CAAC11F,KAAK00D,OAAOlb,MAAOx5C,KAAK00D,OAAOjb,QAEjDz5C,KAAKg2F,iBACLh2F,KAAK81F,wBAMTX,EAAUj4F,UAAUm4D,SAAW,SAAUyQ,GAErC,OADA9lE,KAAKk2F,cAAcpwB,GACZ9lE,KAAKs1F,QAAQxvB,GAAc9lE,KAAKs1F,QAAQxvB,GAAc9lE,KAAK00D,QAMtEygC,EAAUj4F,UAAUsvE,cAAgB,SAAU1G,GAE1C,OADA9lE,KAAKk2F,cAAcpwB,GACZ9lE,KAAKs1F,QAAQxvB,GAAcA,EAAa,GAKnDqvB,EAAUj4F,UAAU0lF,cAAgB,WAChC,OAAO5iF,KAAKy1F,aAKhBN,EAAUj4F,UAAUmvE,qBAAuB,WACvC,IAAKrsE,KAAKkrE,mBACN,GAAIlrE,KAAK61F,aAAc,CACnB,IAAIr8C,EAAQx5C,KAAK01F,MAAM,GACnBj8C,EAASz5C,KAAK01F,MAAM,GACpBp6F,EAAU,YAAsBk+C,EAAOC,GAC3Cn+C,EAAQgtF,SAAS,EAAG,EAAG9uC,EAAOC,GAC9Bz5C,KAAKkrE,mBAAqB5vE,EAAQo9E,YAGlC14E,KAAKkrE,mBAAqBlrE,KAAK00D,OAGvC,OAAO10D,KAAKkrE,oBAMhBiqB,EAAUj4F,UAAU00D,QAAU,WAC1B,OAAO5xD,KAAK01F,OAKhBP,EAAUj4F,UAAUi5F,OAAS,WACzB,OAAOn2F,KAAK21F,MAKhBR,EAAUj4F,UAAUgjD,KAAO,WACvB,GAAIlgD,KAAKy1F,aAAe5S,EAAA,EAAWoB,KAAM,CACrCjkF,KAAKy1F,YAAc5S,EAAA,EAAWuT,QAC9B,IACqCp2F,KAAW,OAAEW,IAAMX,KAAK21F,KAE7D,MAAO96F,GACHmF,KAAK+1F,oBAET/1F,KAAKw1F,UAAY,YAAYx1F,KAAK00D,OAAQ10D,KAAKi2F,iBAAiBlxF,KAAK/E,MAAOA,KAAK+1F,kBAAkBhxF,KAAK/E,SAOhHm1F,EAAUj4F,UAAUg5F,cAAgB,SAAUpwB,GAC1C,GAAK9lE,KAAKu1F,SAAUv1F,KAAKs1F,QAAQxvB,GAAjC,CAGA,IAAI4S,EAAS7xE,SAAS23B,cAAc,UACpCx+B,KAAKs1F,QAAQxvB,GAAc4S,EAC3BA,EAAOl/B,MAAQ5jC,KAAKo2D,KAAKhsE,KAAK00D,OAAOlb,MAAQssB,GAC7C4S,EAAOj/B,OAAS7jC,KAAKo2D,KAAKhsE,KAAK00D,OAAOjb,OAASqsB,GAC/C,IAAIuwB,EAAM3d,EAAO0P,WAAW,MAO5B,GANAiO,EAAIvpF,MAAMg5D,EAAYA,GACtBuwB,EAAIlW,UAAUngF,KAAK00D,OAAQ,EAAG,GAC9B2hC,EAAIC,yBAA2B,WAIM,aAAjCD,EAAIC,0BAA2Ct2F,KAAK61F,aACpDQ,EAAIhxB,UAAY,mBAASrlE,KAAKu1F,QAC9Bc,EAAI/N,SAAS,EAAG,EAAG5P,EAAOl/B,MAAOk/B,EAAOj/B,QACxC48C,EAAIC,yBAA2B,iBAC/BD,EAAIlW,UAAUngF,KAAK00D,OAAQ,EAAG,OAE7B,CAOD,IANA,IAAI6hC,EAAUF,EAAIzY,aAAa,EAAG,EAAGlF,EAAOl/B,MAAOk/B,EAAOj/B,QACtDlyB,EAAOgvE,EAAQhvE,KACftmB,EAAIjB,KAAKu1F,OAAO,GAAK,IACrBnM,EAAIppF,KAAKu1F,OAAO,GAAK,IACrBv/E,EAAIhW,KAAKu1F,OAAO,GAAK,IACrBrzF,EAAIlC,KAAKu1F,OAAO,GACX15F,EAAI,EAAG8a,EAAK4Q,EAAK9sB,OAAQoB,EAAI8a,EAAI9a,GAAK,EAC3C0rB,EAAK1rB,IAAMoF,EACXsmB,EAAK1rB,EAAI,IAAMutF,EACf7hE,EAAK1rB,EAAI,IAAMma,EACfuR,EAAK1rB,EAAI,IAAMqG,EAEnBm0F,EAAIG,aAAaD,EAAS,EAAG,MAQrCpB,EAAUj4F,UAAU84F,eAAiB,WAC7Bh2F,KAAKw1F,YACLx1F,KAAKw1F,YACLx1F,KAAKw1F,UAAY,OAGlBL,EAvOmB,CAwO5B,KAkBa,I,SErRX,EAAwC,WACxC,IAAI1sD,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAE5B,OAAO,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,IAV3C,GAgExC,EAAsB,SAAUO,GAKhC,SAASq/C,EAAKv0B,GACV,IAAIj8C,EAAQjY,KACRga,EAAUk6C,GAAe,GAIzBvmB,OAA8BlvC,IAApBub,EAAQ2zB,QAAwB3zB,EAAQ2zB,QAAU,EAI5D9gC,OAAgCpO,IAArBub,EAAQnN,SAAyBmN,EAAQnN,SAAW,EAI/DC,OAA0BrO,IAAlBub,EAAQlN,MAAsBkN,EAAQlN,MAAQ,EAItD+zD,OAA4CpiE,IAA3Bub,EAAQ6mD,gBAA+B7mD,EAAQ6mD,gBACpE5oD,EAAQmxB,EAAO1rC,KAAKsC,KAAM,CACtB2tC,QAASA,EACT9gC,SAAUA,EACVC,MAAOA,EACPg0D,kBAAuCriE,IAAzBub,EAAQ8mD,aAA6B9mD,EAAQ8mD,aAAe,CAAC,EAAG,GAC9ED,eAAgBA,KACd7gE,MAKAy2F,aAA6Bh4F,IAAnBub,EAAQkyD,OAAuBlyD,EAAQkyD,OAAS,CAAC,GAAK,IAKtEj0D,EAAMy+E,kBAAoB,KAK1Bz+E,EAAM0+E,mBACuBl4F,IAAzBub,EAAQ48E,aACF58E,EAAQ48E,aACRC,EAKV5+E,EAAM6+E,mBACuBr4F,IAAzBub,EAAQ0uE,aACF1uE,EAAQ0uE,aACRC,EAAA,EAAgBoO,SAK1B9+E,EAAM++E,mBACuBv4F,IAAzBub,EAAQ6uE,aACF7uE,EAAQ6uE,aACRF,EAAA,EAAgBoO,SAK1B9+E,EAAMg/E,kBACsBx4F,IAAxBub,EAAQo7E,YAA4Bp7E,EAAQo7E,YAAc,KAI9D,IAAIzgC,OAAwBl2D,IAAhBub,EAAQquE,IAAoBruE,EAAQquE,IAAM,KAIlDL,OAA8BvpF,IAApBub,EAAQguE,QAAwBhuE,EAAQguE,QAAU,KAI5DrnF,EAAMqZ,EAAQrZ,IAClB,mBAAiBlC,IAARkC,GAAqBg0D,GAAQ,GACtC,aAAQA,GAAUA,GAASqzB,EAAU,QACxBvpF,IAARkC,GAAoC,IAAfA,EAAIlG,SAAiBk6D,IAC3Ch0D,EAAsC,EAAQA,KAAO,iBAAOg0D,IAEhE,iBAAel2D,IAARkC,GAAqBA,EAAIlG,OAAS,EAAG,GAI5C,IAAIqpF,OAA6BrlF,IAAhBub,EAAQrZ,IAAoBkiF,EAAA,EAAWoB,KAAOpB,EAAA,EAAWC,OAmC1E,OA9BA7qE,EAAMs9E,YAA2B92F,IAAlBub,EAAQu8C,MAAsB,kBAAQv8C,EAAQu8C,OAAS,KAKtEt+C,EAAMi/E,WFuGP,SAAaviC,EAAOh0D,EAAK2vD,EAAM8kC,EAAatR,EAAYvtB,GAC3D,IAAI4gC,EAAY,IAAexjE,IAAIhzB,EAAKy0F,EAAa7+B,GAKrD,OAJK4gC,IACDA,EAAY,IAAI,EAAUxiC,EAAOh0D,EAAK2vD,EAAM8kC,EAAatR,EAAYvtB,GACrE,IAAe1iC,IAAIlzB,EAAKy0F,EAAa7+B,EAAO4gC,IAEzCA,EE7GgBxjE,CAAaghC,EACV,EAAOqzB,EAAS/vE,EAAMg/E,aAAcnT,EAAY7rE,EAAMs9E,QAK5Et9E,EAAMm/E,aAA6B34F,IAAnBub,EAAQ3c,OAAuB2c,EAAQ3c,OAAS,CAAC,EAAG,GAKpE4a,EAAMo/E,mBACuB54F,IAAzBub,EAAQs9E,aACFt9E,EAAQs9E,aACRT,EAKV5+E,EAAMs/E,QAAU,KAKhBt/E,EAAMy9E,WAAyBj3F,IAAjBub,EAAQs2C,KAAqBt2C,EAAQs2C,KAAO,KACnDr4C,EA2MX,OAzUA,EAAUwwE,EAAMr/C,GAqIhBq/C,EAAKvrF,UAAUwD,MAAQ,WACnB,IAAIoM,EAAQ9M,KAAK+gE,WACjB,OAAO,IAAI0nB,EAAK,CACZvc,OAAQlsE,KAAKy2F,QAAQh5F,QACrBm5F,aAAc52F,KAAK22F,cACnBjO,aAAc1oF,KAAK82F,cACnBjO,aAAc7oF,KAAKg3F,cACnB5B,YAAap1F,KAAKi3F,aAClB1gC,MAAOv2D,KAAKu1F,QAAUv1F,KAAKu1F,OAAO93F,MAC5BuC,KAAKu1F,OAAO93F,QACZuC,KAAKu1F,aAAU92F,EACrBkC,IAAKX,KAAKm2F,SACV94F,OAAQ2C,KAAKo3F,QAAQ35F,QACrB65F,aAAct3F,KAAKq3F,cACnB/mC,KAAqB,OAAftwD,KAAK01F,MAAiB11F,KAAK01F,MAAMj4F,aAAUgB,EACjDkvC,QAAS3tC,KAAKqhE,aACdv0D,MAAOtP,MAAMvB,QAAQ6Q,GAASA,EAAMrP,QAAUqP,EAC9CD,SAAU7M,KAAKihE,cACfJ,eAAgB7gE,KAAKkhE,uBAS7BunB,EAAKvrF,UAAUivE,UAAY,WACvB,GAAInsE,KAAK02F,kBACL,OAAO12F,KAAK02F,kBAEhB,IAAIxqB,EAASlsE,KAAKy2F,QACdnmC,EAAOtwD,KAAK4xD,UAChB,GAAI5xD,KAAK82F,eAAiBnO,EAAA,EAAgBoO,UACtC/2F,KAAKg3F,eAAiBrO,EAAA,EAAgBoO,SAAU,CAChD,IAAKzmC,EACD,OAAO,KAEX4b,EAASlsE,KAAKy2F,QAAQh5F,QAClBuC,KAAK82F,eAAiBnO,EAAA,EAAgBoO,WACtC7qB,EAAO,IAAM5b,EAAK,IAElBtwD,KAAKg3F,eAAiBrO,EAAA,EAAgBoO,WACtC7qB,EAAO,IAAM5b,EAAK,IAG1B,GAAItwD,KAAK22F,eAAiBE,EAAqB,CAC3C,IAAKvmC,EACD,OAAO,KAEP4b,IAAWlsE,KAAKy2F,UAChBvqB,EAASlsE,KAAKy2F,QAAQh5F,SAEtBuC,KAAK22F,eAAiBE,GACtB72F,KAAK22F,eAAiBE,IACtB3qB,EAAO,IAAMA,EAAO,GAAK5b,EAAK,IAE9BtwD,KAAK22F,eAAiBE,GACtB72F,KAAK22F,eAAiBE,IACtB3qB,EAAO,IAAMA,EAAO,GAAK5b,EAAK,IAItC,OADAtwD,KAAK02F,kBAAoBxqB,EAClBlsE,KAAK02F,mBAShBjO,EAAKvrF,UAAUs6F,UAAY,SAAUtrB,GACjClsE,KAAKy2F,QAAUvqB,EACflsE,KAAK02F,kBAAoB,MAO7BjO,EAAKvrF,UAAU6rE,SAAW,WACtB,OAAO/oE,KAAKu1F,QAQhB9M,EAAKvrF,UAAUm4D,SAAW,SAAUyQ,GAChC,OAAO9lE,KAAKk3F,WAAW7hC,SAASyQ,IAQpC2iB,EAAKvrF,UAAUsvE,cAAgB,SAAU1G,GACrC,OAAO9lE,KAAKk3F,WAAW1qB,cAAc1G,IAKzC2iB,EAAKvrF,UAAU+qF,aAAe,WAC1B,OAAOjoF,KAAKk3F,WAAWtlC,WAK3B62B,EAAKvrF,UAAUu6F,yBAA2B,WACtC,OAAOz3F,KAAKioF,gBAKhBQ,EAAKvrF,UAAU0lF,cAAgB,WAC3B,OAAO5iF,KAAKk3F,WAAWtU,iBAK3B6F,EAAKvrF,UAAUmvE,qBAAuB,WAClC,OAAOrsE,KAAKk3F,WAAW7qB,wBAO3Boc,EAAKvrF,UAAUqvE,UAAY,WACvB,GAAIvsE,KAAKu3F,QACL,OAAOv3F,KAAKu3F,QAEhB,IAAIl6F,EAAS2C,KAAKo3F,QACdt2B,EAAe9gE,KAAKmhE,kBACxB,GAAInhE,KAAKq3F,eAAiBR,EAAqB,CAC3C,IAAIvmC,EAAOtwD,KAAK4xD,UACZ8lC,EAAgB13F,KAAKk3F,WAAWtlC,UACpC,IAAKtB,IAASonC,EACV,OAAO,KAEXr6F,EAASA,EAAOI,QACZuC,KAAKq3F,eAAiBR,GACtB72F,KAAKq3F,eAAiBR,IACtBx5F,EAAO,GAAKq6F,EAAc,GAAKpnC,EAAK,GAAKjzD,EAAO,IAEhD2C,KAAKq3F,eAAiBR,GACtB72F,KAAKq3F,eAAiBR,IACtBx5F,EAAO,GAAKq6F,EAAc,GAAKpnC,EAAK,GAAKjzD,EAAO,IAMxD,OAHAA,EAAO,IAAMyjE,EAAa,GAC1BzjE,EAAO,IAAMyjE,EAAa,GAC1B9gE,KAAKu3F,QAAUl6F,EACR2C,KAAKu3F,SAOhB9O,EAAKvrF,UAAUi5F,OAAS,WACpB,OAAOn2F,KAAKk3F,WAAWf,UAO3B1N,EAAKvrF,UAAU00D,QAAU,WACrB,OAAQ5xD,KAAK01F,MAAoC11F,KAAK01F,MAAjC11F,KAAKk3F,WAAWtlC,WAKzC62B,EAAKvrF,UAAUgnF,kBAAoB,SAAUh9E,GACzClH,KAAKk3F,WAAW9uF,iBAAiBkpF,EAAA,EAAU5yB,OAAQx3D,IASvDuhF,EAAKvrF,UAAUgjD,KAAO,WAClBlgD,KAAKk3F,WAAWh3C,QAKpBuoC,EAAKvrF,UAAU8mF,oBAAsB,SAAU98E,GAC3ClH,KAAKk3F,WAAW1uF,oBAAoB8oF,EAAA,EAAU5yB,OAAQx3D,IAEnDuhF,EA1Uc,CA2UvB,KACa,a,6BCrYA,KAMX/pB,OAAQ,SAMRqlB,MAAO,QACP4T,KAAM,OACNlF,MAAO,QACPmF,YAAa,cACbC,MAAO,QACPC,SAAU,WACVC,UAAW,YACXC,SAAU,WACVC,KAAM,OACNC,MAAO,QACPC,QAAS,UACTC,SAAU,WACVC,KAAM,OACNC,OAAQ,SACRC,UAAW,YACXC,MAAO,U,sBClCX,UAAO,CACN,OACA,OACA,OACA,OACA,aAyYA,KAtYE,EAAF,SAAWC,EAAcC,EAAOC,EAAUC,EAAMh/F,GAChDA,EAAImC,IAAI,cAAc,WAErB,MAAiC,oBAAnBuzB,kBAEf11B,EAAImC,IAAI,0BAA0B,WACjC,OAAOnC,EAAI,YAA2C,UAA7ByM,OAAO2sC,SAAS6lD,YAG1Cj/F,EAAImC,IAAI,eAAe,WACtB,GAAInC,EAAI,gBAAiBA,EAAI,0BAA7B,CACA,IAAI2G,EAAI,IAAI+uB,eACZ,YAAwC,IAA1B/uB,EAAoB,mBACf,oBAAVgnD,YAAgD,IAAhBhnD,EAAU,YAGpD3G,EAAImC,IAAI,mBAAmB,WAE1B,MAA2B,oBAAb+8F,YAGfl/F,EAAImC,IAAI,eAAe,WAEtB,MAAuB,oBAATg9F,QAGfn/F,EAAImC,IAAI,sBAAsB,WAE7B,MAA8B,oBAAhBi9F,eAGfp/F,EAAImC,IAAI,wBAAwB,WAC/B,OAAOnC,EAAI,oBAA8D,KAAtC,IAAI01B,gBAAiBo/D,gBAGzD90F,EAAImC,IAAI,oBAAoB,WAC3B,GAAInC,EAAI,wBAAR,CACA,IAAI2G,EAAI,IAAI+uB,eAIZ/uB,EAAE4vB,KAAK,MAAO,4BAA4B,GAC1C5vB,EAAEmuF,aAAe,OAEjB,IAAIA,EAAenuF,EAAEmuF,aAErB,OADAnuF,EAAE61C,QACsB,SAAjBs4C,MAKR,IAgDIuK,EAASC,EAASC,EAAclqE,EAhDhCmqE,EAAsB,CACzB,KAAQx/F,EAAI,oBAAsB,OAAS,cAC3C,SAAY,WACZ,YAAe,eAGhB,SAASy/F,EAAeC,EAAU1oE,GACjC,IAaI2oE,EAbAC,EAAOF,EAAS/K,IACpB+K,EAASxoE,OAASwoE,EAAS/K,IAAIz9D,OAE/B,IAGCwoE,EAAS15E,KAAO45E,EAAK9oE,aACpB,MAAO71B,IAOT,GALiC,QAA9By+F,EAASt/E,QAAQy/E,WACnBH,EAAS/xE,KAAOiyE,EAAK3K,aAInBj+D,EACF5wB,KAAKqvB,OAAOuB,OACR,CACJ,IACC+nE,EAASW,GACT,MAAMz+F,GACN0+F,EAAc1+F,EAEZ+9F,EAAKc,YAAYF,EAAK1oE,QACpByoE,EAGHv5F,KAAKqvB,OAAOkqE,GAFZv5F,KAAKovB,QAAQkqE,GAKVC,GAIH3oE,EAAQ,IAAI6nE,EAAa,kBAAoBa,EAASrzF,IAAM,YAAcuzF,EAAK1oE,OAC9E,wDAAyDwoE,GAC1Dt5F,KAAKqvB,OAAOuB,KALZA,EAAQ,IAAI6nE,EAAa,kBAAoBa,EAASrzF,IAAM,YAAcuzF,EAAK1oE,OAAQwoE,GACvFt5F,KAAKqvB,OAAOuB,KA0FhB,SAAS+oE,EAAUC,GAClB,OAAO55F,KAAKuuF,IAAIv9D,kBAAkB4oE,GAhFhChgG,EAAI,gBAGNq/F,EAAU,SAASK,GAGlB,OAAQt5F,KAAKogE,eAEdnxC,EAAS,SAAS4qE,EAAKP,GAGtBA,EAAS/K,IAAIn4C,SAEd+iD,EAAe,SAASK,EAAMK,EAAKP,EAAUQ,GAG5C,SAASrqE,EAAO/kB,GACfmvF,EAAIR,eAAeC,GAEpB,SAASvpE,EAAQrlB,GAChB,IAAI8uF,EAAO9uF,EAAI1D,OACX4pB,EAAQ,IAAI6nE,EAAa,kBAAoBa,EAASrzF,IAAM,YAAcuzF,EAAK1oE,OAAQwoE,GAC3FO,EAAIR,eAAeC,EAAU1oE,GAG9B,SAASjB,EAAWoqE,EAAcrvF,GACjC4uF,EAASS,aAAeA,EACrBrvF,EAAIsvF,kBACNV,EAAS1yC,OAASl8C,EAAIk8C,OACtB0yC,EAASW,MAAQvvF,EAAIuvF,MACrBJ,EAAIzuD,SAASkuD,IACwB,IAA5BA,EAAS/K,IAAI19D,aACtByoE,EAAS1yC,OAAU,WAAYl8C,EAAOA,EAAIk8C,OAASl8C,EAAImtC,SACvDgiD,EAAIzuD,SAASkuD,IAIf,SAASY,EAAmBxvF,GAC3B,OAAOilB,EAAW,WAAYjlB,GAG/B,SAASulB,EAAiBvlB,GACzB,OAAOilB,EAAW,SAAUjlB,GAW7B,OARA8uF,EAAKpxF,iBAAiB,OAAQqnB,GAAQ,GACtC+pE,EAAKpxF,iBAAiB,QAAS2nB,GAAS,GACxCypE,EAAKpxF,iBAAiB,WAAY8xF,GAAoB,GAElDJ,GAAkBN,EAAKtpE,QAC1BspE,EAAKtpE,OAAO9nB,iBAAiB,WAAY6nB,GAAkB,GAGrD,WACNupE,EAAKhxF,oBAAoB,OAAQinB,GAAQ,GACzC+pE,EAAKhxF,oBAAoB,QAASunB,GAAS,GAC3CypE,EAAKhxF,oBAAoB,WAAY0xF,GAAoB,GACzDV,EAAKtpE,OAAO1nB,oBAAoB,WAAYynB,GAAkB,GAC9DupE,EAAO,SAITP,EAAU,SAASK,GAClB,OAAOA,EAAS/K,IAAI19D,YAErBqoE,EAAU,SAASI,GAClB,OAAO,IAAMA,EAAS/K,IAAI19D,YAE3B5B,EAAS,SAAS4qE,EAAKP,GAGtB,IAAI/K,EAAM+K,EAAS/K,IACf4L,SAAa5L,EAAIn4C,MACV,aAAR+jD,GAA8B,WAARA,GAA4B,YAARA,GAC5C5L,EAAIn4C,UASP,IACCgkD,EAAiB,CAChB7yE,KAAM,KACNne,MAAO,KACPixF,MAAM,EACNz6F,OAAQ,OAEV,SAAS2uF,EAAItoF,EAAK+T,EAASsgF,GAC1B,IAAIC,EAAa3gG,EAAI,oBAAsBogB,GAAWA,EAAQuN,MAAQvN,EAAQuN,gBAAgBuxE,SAC1FQ,EAAWV,EAAK4B,UACnBv0F,EACA2yF,EAAK6B,WAAWL,EAAgBpgF,GAChCugF,GAEDt0F,EAAMqzF,EAASrzF,IAEf,IAAIy0F,IADJ1gF,EAAUs/E,EAASt/E,SACMuN,MAA2B,SAAnBvN,EAAQpa,QAAwC,QAAnBoa,EAAQpa,OAEnEhG,EAAI,OAAS,KAEfqM,EAAMA,EAAIzJ,MAAM,KAAK,IAGtB,IAAIm+F,EAMAd,EAAMjB,EAAKv5B,SACdi6B,EACArqE,EACAgqE,EACAC,EACAG,GAVO,WACNsB,GAAWA,OAYTnB,EAAOF,EAAS/K,IAAMA,EAAIqM,UAE9B,IAAIpB,EAIH,OADAK,EAAI5qE,OAAO,IAAIwpE,EAAa,wBACrB6B,EAAiBT,EAAMA,EAAIxyE,QAGnCiyE,EAASK,UAAYA,EAElBR,IACFwB,EAAUxB,EAAaK,EAAMK,EAAKP,EAAUt/E,EAAQ8/E,iBAIrD,IAAIvyE,OAAgC,IAAlBvN,EAAY,KAAoB,KAAOA,EAAQuN,KAChEtjB,GAAS+V,EAAQqgF,KACjBz6F,EAASoa,EAAQpa,OAElB,IAEC45F,EAAKrpE,KAAKvwB,EAAQqG,EAAKhC,EAAO+V,EAAQ6gF,WA3DpCp8F,EA2DuDub,EAAQ8gF,eA3D/Dr8F,GA6DCub,EAAQo0E,kBACVoL,EAAKpL,gBAAkBp0E,EAAQo0E,iBAG7Bx0F,EAAI,yBAA2BogB,EAAQy/E,YAAYL,IACrDI,EAAK9K,aAAe0K,EAAoBp/E,EAAQy/E,WAGjD,IAAItoE,EAAUnX,EAAQmX,QACrBtC,GAAe0rE,IAAcG,GAAqB,oCACnD,GAAGvpE,EACF,IAAI,IAAI4pE,KAAO5pE,EACW,iBAAtB4pE,EAAI57F,cACN0vB,EAAcsC,EAAQ4pE,GACd5pE,EAAQ4pE,IAGhBvB,EAAKppE,iBAAiB2qE,EAAK5pE,EAAQ4pE,IAKnClsE,IAA+B,IAAhBA,GACjB2qE,EAAKppE,iBAAiB,eAAgBvB,GAEnCsC,GAAa,qBAAsBA,GACtCqoE,EAAKppE,iBAAiB,mBAAoB,kBAGxCwoE,EAAKhyE,QACPgyE,EAAKhyE,OAAO/c,KAAK,OAAQyvF,EAAUO,EAAIxyE,QAAQ4H,QAEhDuqE,EAAKzqE,KAAKxH,GACV,MAAM1sB,GACNg/F,EAAIxqE,OAAOx0B,GAMZ,OAHA69F,EAAMmB,GACNL,EAAO,KAEAc,EAAiBT,EAAMA,EAAIxyE,QAmFnC,GALAknE,EAAIqM,QAAU,WAGb,MAAM,IAAIjyF,MAAM,0BAEd/O,EAAI,gBAAkBA,EAAI,0BAC5B20F,EAAIqM,QAAU,WACb,OAAO,IAAItrE,qBAEP,GAAG11B,EAAI,WACZ,IACC,IAAIohG,cAAc,kBAClBzM,EAAIqM,QAAU,WACb,OAAO,IAAII,cAAc,mBAE1B,MAAMngG,GACN,IACC,IAAImgG,cAAc,qBAClBzM,EAAIqM,QAAU,WACb,OAAO,IAAII,cAAc,sBAE1B,MAAMngG,KAMT,OAFA+9F,EAAKqC,iBAAiB1M,GAEfA,GACP,+B,6CC9YD,4FAAO,CAAC,0BAAU,8BAAF,SAAW30F,KAC1B,aACA,IAAIshG,QAAyB,oBAARzzE,KAmDrB,GAlDA7tB,IAAImC,IAAI,aAAcm/F,SAEtBthG,IAAImC,IAAI,iBAAkBm/F,SAAiE,WAAtDzzE,KAAKgsB,UAAU,CAACvxC,EAAE,IAAI,SAASR,EAAEiD,GAAG,OAAOA,GAAG,MAgDhF/K,IAAI,kBACN,OAAO6tB,KAEP,IAAI0zE,aAAe,SAAmB/5F,GAKrC,OAAQ,IAAMA,EAAIC,QAAQ,WAAY,QAAU,KAC/CA,QAAQ,QAAS,OAAOA,QAAQ,QAAS,OAAOA,QAAQ,QAAS,OACjEA,QAAQ,QAAS,OAAOA,QAAQ,QAAS,QAE3C,MAAO,CACN+F,MAAOxN,IAAI,cAAgB6tB,KAAKrgB,MAAQ,SAAShG,IAAKk/D,QACrD,GAAGA,SAAW,oGAAoGhhE,KAAK8B,KACtH,MAAM,IAAIg6F,YAAY,8BAEvB,OAAOC,KAAK,IAAMj6F,IAAM,MAEzBqyC,UAAW,SAASl1C,EAAO+8F,EAAUC,GAqFpC,MAnFsB,iBAAZD,IACTC,EAASD,EACTA,EAAW,MAEZ,SAAS7nD,EAAU50C,EAAI28F,EAAQlsF,GAC3BgsF,IACFz8F,EAAKy8F,EAAShsF,EAAKzQ,IAEpB,IAAIwU,EAAKooF,SAAiB58F,EAC1B,GAAc,UAAX48F,EACF,OAAOr8F,SAASP,GAAMA,EAAK,GAAK,OAEjC,GAAc,WAAX48F,EACF,OAAO58F,EAAK,GAEb,GAAU,OAAPA,EACF,MAAO,OAER,GAAgB,iBAANA,EACT,OAAOs8F,aAAat8F,GAErB,GAAc,YAAX48F,GAAoC,aAAXA,EAA5B,CAKA,GAAuB,mBAAb58F,EAAG68F,OACZ,OAAOjoD,EAAU50C,EAAG68F,OAAOpsF,GAAMksF,EAAQlsF,GAE1C,GAAGzQ,aAAciC,KAChB,MAAO,4DAA4DO,QAAQ,mBAAmB,SAASs6F,EAAG/oF,EAAMgpF,GAC/G,IAAIv3E,EAAMxlB,EAAG,SAAW+T,MAAWgpF,EAAO,EAAI,GAC9C,OAAOv3E,EAAM,GAAK,IAAMA,EAAMA,KAGhC,GAAGxlB,EAAGg9F,YAAch9F,EAEnB,OAAO40C,EAAU50C,EAAGg9F,UAAWL,EAAQlsF,GAExC,IAAIwsF,EAAYP,EAAUC,EAASD,EAAU,GAGzC16E,EAAM06E,EAAS,IAAM,GACrBQ,EAAUR,EAAS,KAAO,GAG9B,GAAG18F,aAAcrB,MAAM,CACtB,IAAIw+F,EAAMn9F,EAAGpE,OAAQoY,EAAM,GAC3B,IAAIvD,EAAM,EAAGA,EAAM0sF,EAAK1sF,IAAM,CAGZ,iBADjB+D,EAAMogC,EADI50C,EAAGyQ,GACQwsF,EAAYxsF,MAEhC+D,EAAM,QAEPR,EAAIrS,KAAKu7F,EAAUD,EAAazoF,GAEjC,MAAO,IAAMR,EAAI5S,KAAK,KAAO87F,EAAUP,EAAS,IAGjD,IAAIjjC,EAAS,GACb,IAAIjpD,KAAOzQ,EAAG,CACb,IAAIo9F,EACJ,GAAGp9F,EAAGgS,eAAevB,GAAK,CACzB,GAAiB,iBAAPA,EACT2sF,EAAS,IAAM3sF,EAAM,QAChB,IAAiB,iBAAPA,EAIf,SAHA2sF,EAASd,aAAa7rF,GAMvB,GAAiB,iBADjB+D,EAAMogC,EAAU50C,EAAGyQ,GAAMwsF,EAAYxsF,IAGpC,SAIDipD,EAAO/3D,KAAKu7F,EAAUD,EAAaG,EAAS,IAAMp7E,EAAMxN,IAG1D,MAAO,IAAMklD,EAAOt4D,KAAK,KAAO87F,EAAUP,EAAS,KAE7C/nD,CAAUl1C,EAAO,GAAI,OAI/B,iI,gCCjKD,OAcA,IAAI29F,EAAsB,WAItB,SAASA,EAAKhoC,GACV,IAAIl6C,EAAUk6C,GAAe,GAK7Bl0D,KAAKu1F,YAA2B92F,IAAlBub,EAAQu8C,MAAsBv8C,EAAQu8C,MAAQ,KA8BhE,OAvBA2lC,EAAKh/F,UAAUwD,MAAQ,WACnB,IAAI61D,EAAQv2D,KAAK+oE,WACjB,OAAO,IAAImzB,EAAK,CACZ3lC,MAAO/4D,MAAMvB,QAAQs6D,GAASA,EAAM94D,QAAU84D,QAAS93D,KAQ/Dy9F,EAAKh/F,UAAU6rE,SAAW,WACtB,OAAO/oE,KAAKu1F,QAQhB2G,EAAKh/F,UAAU6qF,SAAW,SAAUxxB,GAChCv2D,KAAKu1F,OAASh/B,GAEX2lC,EAxCc,GA0CV,a,8BCxDf,OAyBA,IAAIC,EAAwB,WAIxB,SAASA,EAAOjoC,GACZ,IAAIl6C,EAAUk6C,GAAe,GAK7Bl0D,KAAKu1F,YAA2B92F,IAAlBub,EAAQu8C,MAAsBv8C,EAAQu8C,MAAQ,KAK5Dv2D,KAAKo8F,SAAWpiF,EAAQmvD,QAKxBnpE,KAAKq8F,eAAiC59F,IAArBub,EAAQsvD,SAAyBtvD,EAAQsvD,SAAW,KAKrEtpE,KAAKs8F,gBAAkBtiF,EAAQyvD,eAK/BzpE,KAAKu8F,UAAYviF,EAAQ4vD,SAKzB5pE,KAAKw8F,YAAcxiF,EAAQiwD,WAK3BjqE,KAAK6rE,OAAS7xD,EAAQw/B,MAgJ1B,OAzIA2iD,EAAOj/F,UAAUwD,MAAQ,WACrB,IAAI61D,EAAQv2D,KAAK+oE,WACjB,OAAO,IAAIozB,EAAO,CACd5lC,MAAO/4D,MAAMvB,QAAQs6D,GAASA,EAAM94D,QAAU84D,QAAS93D,EACvD0qE,QAASnpE,KAAKkpE,aACdI,SAAUtpE,KAAKqpE,cAAgBrpE,KAAKqpE,cAAc5rE,aAAUgB,EAC5DgrE,eAAgBzpE,KAAKwpE,oBACrBI,SAAU5pE,KAAK2pE,cACfM,WAAYjqE,KAAKgqE,gBACjBxwB,MAAOx5C,KAAKyvD,cAQpB0sC,EAAOj/F,UAAU6rE,SAAW,WACxB,OAAO/oE,KAAKu1F,QAOhB4G,EAAOj/F,UAAUgsE,WAAa,WAC1B,OAAOlpE,KAAKo8F,UAOhBD,EAAOj/F,UAAUmsE,YAAc,WAC3B,OAAOrpE,KAAKq8F,WAOhBF,EAAOj/F,UAAUssE,kBAAoB,WACjC,OAAOxpE,KAAKs8F,iBAOhBH,EAAOj/F,UAAUysE,YAAc,WAC3B,OAAO3pE,KAAKu8F,WAOhBJ,EAAOj/F,UAAU8sE,cAAgB,WAC7B,OAAOhqE,KAAKw8F,aAOhBL,EAAOj/F,UAAUuyD,SAAW,WACxB,OAAOzvD,KAAK6rE,QAQhBswB,EAAOj/F,UAAU6qF,SAAW,SAAUxxB,GAClCv2D,KAAKu1F,OAASh/B,GAQlB4lC,EAAOj/F,UAAUu/F,WAAa,SAAUtzB,GACpCnpE,KAAKo8F,SAAWjzB,GAcpBgzB,EAAOj/F,UAAUs5E,YAAc,SAAUlN,GACrCtpE,KAAKq8F,UAAY/yB,GAQrB6yB,EAAOj/F,UAAUw/F,kBAAoB,SAAUjzB,GAC3CzpE,KAAKs8F,gBAAkB7yB,GAQ3B0yB,EAAOj/F,UAAUy/F,YAAc,SAAU/yB,GACrC5pE,KAAKu8F,UAAY3yB,GAQrBuyB,EAAOj/F,UAAU0/F,cAAgB,SAAU3yB,GACvCjqE,KAAKw8F,YAAcvyB,GAQvBkyB,EAAOj/F,UAAU2/F,SAAW,SAAUrjD,GAClCx5C,KAAK6rE,OAASryB,GAEX2iD,EAxLgB,GA0LZ,a,mCCnNf,wIAYO,IAAIW,EAAkC,mBAAlB7/F,OAAO6/F,OAC5B7/F,OAAO6/F,OACP,SAAU91F,EAAQ+1F,GAChB,GAAI/1F,QACA,MAAM,IAAIu2D,UAAU,8CAGxB,IADA,IAAIhF,EAASt7D,OAAO+J,GACXnL,EAAI,EAAG8a,EAAKjb,UAAUjB,OAAQoB,EAAI8a,IAAM9a,EAAG,CAChD,IAAIiC,EAASpC,UAAUG,GACvB,GAAIiC,QACA,IAAK,IAAIwR,KAAOxR,EACRA,EAAO+S,eAAevB,KACtBipD,EAAOjpD,GAAOxR,EAAOwR,IAKrC,OAAOipD,GAMR,SAAS65B,EAAMgC,GAClB,IAAK,IAAI/tE,KAAY+tE,SACVA,EAAO/tE,GAWf,IAAI22E,EAAqC,mBAAlB//F,OAAOggG,OAC/BhgG,OAAOggG,OACP,SAAU7I,GACR,IAAI6I,EAAS,GACb,IAAK,IAAI52E,KAAY+tE,EACjB6I,EAAOz8F,KAAK4zF,EAAO/tE,IAEvB,OAAO42E,GAOR,SAASjjE,EAAQo6D,GACpB,IAAI/tE,EACJ,IAAKA,KAAY+tE,EACb,OAAO,EAEX,OAAQ/tE,I,8BCnEZ,0RAmBI62E,EAAgB,oDAOhBC,EAAkB,4BAOf,SAASC,EAAS7mC,GACrB,MAAqB,iBAAVA,EACAA,EAGAj6D,EAASi6D,GAQxB,SAAS8mC,EAAU9mC,GACf,IAAIn0B,EAAKv7B,SAAS23B,cAAc,OAEhC,GADA4D,EAAGn0B,MAAMsoD,MAAQA,EACM,KAAnBn0B,EAAGn0B,MAAMsoD,MAAc,CACvB1vD,SAAS4lC,KAAK/R,YAAY0H,GAC1B,IAAIk7D,EAAMhwD,iBAAiBlL,GAAIm0B,MAE/B,OADA1vD,SAAS4lC,KAAK/K,YAAYU,GACnBk7D,EAGP,MAAO,GAOR,IAYC37F,EAIA47F,EAhBGC,GAYH77F,EAAQ,GAIR47F,EAAY,EACT,SAKGt/F,GACN,IAAIs4D,EACJ,GAAI50D,EAAMkP,eAAe5S,GACrBs4D,EAAQ50D,EAAM1D,OAEb,CACD,GAAIs/F,GApBS,KAoBoB,CAC7B,IAAI1hG,EAAI,EACR,IAAK,IAAIyT,KAAO3N,EACM,IAAP,EAAN9F,cACM8F,EAAM2N,KACXiuF,GAIdhnC,EA2BZ,SAA6Bt4D,GACzB,IAAIgD,EAAGmoF,EAAGpzE,EAAG9T,EAAGq0D,EAIhB,GAHI4mC,EAAgB/rE,KAAKnzB,KACrBA,EAAIo/F,EAAUp/F,IAEdi/F,EAAc9rE,KAAKnzB,GAAI,CAEvB,IAAI4oD,EAAI5oD,EAAExD,OAAS,EACfwb,OACH,EAEGA,EADA4wC,GAAK,EACD,EAGA,EAER,IAAI42C,EAAiB,IAAN52C,GAAiB,IAANA,EAC1B5lD,EAAIqiB,SAASrlB,EAAE4c,OAAO,EAAI,EAAI5E,EAAGA,GAAI,IACrCmzE,EAAI9lE,SAASrlB,EAAE4c,OAAO,EAAI,EAAI5E,EAAGA,GAAI,IACrCD,EAAIsN,SAASrlB,EAAE4c,OAAO,EAAI,EAAI5E,EAAGA,GAAI,IAEjC/T,EADAu7F,EACIn6E,SAASrlB,EAAE4c,OAAO,EAAI,EAAI5E,EAAGA,GAAI,IAGjC,IAEC,GAALA,IACAhV,GAAKA,GAAK,GAAKA,EACfmoF,GAAKA,GAAK,GAAKA,EACfpzE,GAAKA,GAAK,GAAKA,EACXynF,IACAv7F,GAAKA,GAAK,GAAKA,IAGvBq0D,EAAQ,CAACt1D,EAAGmoF,EAAGpzE,EAAG9T,EAAI,UAEK,GAAtBjE,EAAE+E,QAAQ,SAGfsjD,EADAiQ,EAAQt4D,EAAER,MAAM,GAAI,GAAGjB,MAAM,KAAK+E,IAAIi+C,SAGZ,GAArBvhD,EAAE+E,QAAQ,UAEfuzD,EAAQt4D,EAAER,MAAM,GAAI,GAAGjB,MAAM,KAAK+E,IAAIi+C,SAChCh/C,KAAK,GACX8lD,EAAUiQ,IAGV,aAAO,EAAO,IAElB,OAAOA,EA7ESmnC,CAAoBz/F,GAC5B0D,EAAM1D,GAAKs4D,IACTgnC,EAEN,OAAOhnC,IAUR,SAASonC,EAAQpnC,GACpB,OAAI/4D,MAAMvB,QAAQs6D,GACPA,EAGAinC,EAAWjnC,GAiEnB,SAASjQ,EAAUiQ,GAKtB,OAJAA,EAAM,GAAK,YAAOA,EAAM,GAAK,GAAO,EAAG,EAAG,KAC1CA,EAAM,GAAK,YAAOA,EAAM,GAAK,GAAO,EAAG,EAAG,KAC1CA,EAAM,GAAK,YAAOA,EAAM,GAAK,GAAO,EAAG,EAAG,KAC1CA,EAAM,GAAK,YAAMA,EAAM,GAAI,EAAG,GACvBA,EAMJ,SAASj6D,EAASi6D,GACrB,IAAIt1D,EAAIs1D,EAAM,GACVt1D,IAAU,EAAJA,KACNA,EAAKA,EAAI,GAAO,GAEpB,IAAImoF,EAAI7yB,EAAM,GACV6yB,IAAU,EAAJA,KACNA,EAAKA,EAAI,GAAO,GAEpB,IAAIpzE,EAAIugD,EAAM,GAKd,OAJIvgD,IAAU,EAAJA,KACNA,EAAKA,EAAI,GAAO,GAGb,QAAU/U,EAAI,IAAMmoF,EAAI,IAAMpzE,EAAI,UADpBvX,IAAb83D,EAAM,GAAmB,EAAIA,EAAM,IACQ,IAMhD,SAASqnC,EAAc3/F,GAI1B,OAHIk/F,EAAgB79F,KAAKrB,KACrBA,EAAIo/F,EAAUp/F,IAEVi/F,EAAc59F,KAAKrB,IAA6B,IAAvBA,EAAE+E,QAAQ,UAAwC,IAAtB/E,EAAE+E,QAAQ,U,gCChNpE,SAAS66F,EAAMt/F,EAAOkiB,EAAKC,GAC9B,OAAO9K,KAAK6K,IAAI7K,KAAK8K,IAAIniB,EAAOkiB,GAAMC,GAZ1C,oVAuBO,IAAIo9E,EAIH,SAAUloF,KAEHA,KAAKkoF,KAIL,SAAUv9F,GACb,IAAIkjB,EAAwB,KAAOkT,IAAIp2B,GACvC,OAAQkjB,EAAI,EAAIA,GAAK,GActBs6E,EAIH,SAAUnoF,KAEHA,KAAKmoF,KAIL,SAAUx9F,GACb,OAAOqV,KAAK3Q,IAAI1E,GAAKqV,KAAKooF,OAgB/B,SAASC,EAAuB19F,EAAGkjB,EAAGutC,EAAII,EAAIH,EAAII,GACrD,IAAItE,EAAKkE,EAAKD,EACVhE,EAAKqE,EAAKD,EACd,GAAW,IAAPrE,GAAmB,IAAPC,EAAU,CACtB,IAAI2uC,IAAMp7F,EAAIywD,GAAMjE,GAAMtpC,EAAI2tC,GAAMpE,IAAOD,EAAKA,EAAKC,EAAKA,GACtD2uC,EAAI,GACJ3qC,EAAKC,EACLG,EAAKC,GAEAsqC,EAAI,IACT3qC,GAAMjE,EAAK4uC,EACXvqC,GAAMpE,EAAK2uC,GAGnB,OAAO5N,EAAgBxtF,EAAGkjB,EAAGutC,EAAII,GAU9B,SAAS28B,EAAgB/8B,EAAII,EAAIH,EAAII,GACxC,IAAItE,EAAKkE,EAAKD,EACVhE,EAAKqE,EAAKD,EACd,OAAOrE,EAAKA,EAAKC,EAAKA,EASnB,SAASkxC,EAAkBC,GAE9B,IADA,IAAIt3C,EAAIs3C,EAAI1jG,OACHoB,EAAI,EAAGA,EAAIgrD,EAAGhrD,IAAK,CAIxB,IAFA,IAAIuiG,EAASviG,EACTwiG,EAAQzoF,KAAKmG,IAAIoiF,EAAItiG,GAAGA,IACnBoF,EAAIpF,EAAI,EAAGoF,EAAI4lD,EAAG5lD,IAAK,CAC5B,IAAIq9F,EAAW1oF,KAAKmG,IAAIoiF,EAAIl9F,GAAGpF,IAC3ByiG,EAAWD,IACXA,EAAQC,EACRF,EAASn9F,GAGjB,GAAc,IAAVo9F,EACA,OAAO,KAGX,IAAIj+F,EAAM+9F,EAAIC,GACdD,EAAIC,GAAUD,EAAItiG,GAClBsiG,EAAItiG,GAAKuE,EAET,IAAK,IAAIkW,EAAIza,EAAI,EAAGya,EAAIuwC,EAAGvwC,IAEvB,IADA,IAAIioF,GAAQJ,EAAI7nF,GAAGza,GAAKsiG,EAAItiG,GAAGA,GACtB6F,EAAI7F,EAAG6F,EAAImlD,EAAI,EAAGnlD,IACnB7F,GAAK6F,EACLy8F,EAAI7nF,GAAG5U,GAAK,EAGZy8F,EAAI7nF,GAAG5U,IAAM68F,EAAOJ,EAAItiG,GAAG6F,GAO3C,IADA,IAAInB,EAAI,IAAI/C,MAAMqpD,GACTxoD,EAAIwoD,EAAI,EAAGxoD,GAAK,EAAGA,IAAK,CAC7BkC,EAAElC,GAAK8/F,EAAI9/F,GAAGwoD,GAAKs3C,EAAI9/F,GAAGA,GAC1B,IAAK,IAAImZ,EAAInZ,EAAI,EAAGmZ,GAAK,EAAGA,IACxB2mF,EAAI3mF,GAAGqvC,IAAMs3C,EAAI3mF,GAAGnZ,GAAKkC,EAAElC,GAGnC,OAAOkC,EAQJ,SAASi+F,EAAUC,GACtB,OAAyB,IAAjBA,EAAwB7oF,KAAKwhD,GAQlC,SAASsnC,EAAUC,GACtB,OAAQA,EAAiB/oF,KAAKwhD,GAAM,IASjC,SAASwnC,EAAO18F,EAAG8T,GACtB,IAAI/U,EAAIiB,EAAI8T,EACZ,OAAO/U,EAAI+U,EAAI,EAAI/U,EAAI+U,EAAI/U,EAUxB,SAAS49F,EAAK38F,EAAG8T,EAAGzV,GACvB,OAAO2B,EAAI3B,GAAKyV,EAAI9T,K,+BCrLjB,SAAS48F,EAAaC,EAAUC,EAAQC,GAM3C,IALA,IAAIC,EAAKC,EACLC,EAAaH,GAAkBI,EAC/BC,EAAM,EACNC,EAAOR,EAAStkG,OAChB+kG,GAAQ,EACLF,EAAMC,IAITJ,GAAOC,EAAWL,EADlBG,EAAMI,GAAQC,EAAOD,GAAQ,IACIN,IACvB,EAENM,EAAMJ,EAAM,GAIZK,EAAOL,EACPM,GAASL,GAIjB,OAAOK,EAAQF,GAAOA,EASnB,SAASD,EAA0Bn9F,EAAG8T,GACzC,OAAO9T,EAAI8T,EAAI,EAAI9T,EAAI8T,GAAK,EAAI,EAmB7B,SAASypF,EAAkBn/F,EAAK0G,EAAQ04F,GAC3C,IAAI74C,EAAIvmD,EAAI7F,OACZ,GAAI6F,EAAI,IAAM0G,EACV,OAAO,EAEN,GAAIA,GAAU1G,EAAIumD,EAAI,GACvB,OAAOA,EAAI,EAGX,IAAIhrD,OAAI,EACR,GAAI6jG,EAAY,GACZ,IAAK7jG,EAAI,EAAGA,EAAIgrD,IAAKhrD,EACjB,GAAIyE,EAAIzE,GAAKmL,EACT,OAAOnL,EAAI,OAIlB,GAAI6jG,EAAY,GACjB,IAAK7jG,EAAI,EAAGA,EAAIgrD,IAAKhrD,EACjB,GAAIyE,EAAIzE,IAAMmL,EACV,OAAOnL,OAKf,IAAKA,EAAI,EAAGA,EAAIgrD,IAAKhrD,EAAG,CACpB,GAAIyE,EAAIzE,IAAMmL,EACV,OAAOnL,EAEN,GAAIyE,EAAIzE,GAAKmL,EACd,OAAI1G,EAAIzE,EAAI,GAAKmL,EAASA,EAAS1G,EAAIzE,GAC5BA,EAAI,EAGJA,EAKvB,OAAOgrD,EAAI,EAQZ,SAAS84C,EAAgBr/F,EAAK2qC,EAAOnoC,GACxC,KAAOmoC,EAAQnoC,GAAK,CAChB,IAAI1C,EAAME,EAAI2qC,GACd3qC,EAAI2qC,GAAS3qC,EAAIwC,GACjBxC,EAAIwC,GAAO1C,IACT6qC,IACAnoC,GAQH,SAASvD,EAAOe,EAAKinB,GAGxB,IAFA,IAAIq4E,EAAYpiG,MAAMvB,QAAQsrB,GAAQA,EAAO,CAACA,GAC1C9sB,EAASmlG,EAAUnlG,OACdoB,EAAI,EAAGA,EAAIpB,EAAQoB,IACxByE,EAAIA,EAAI7F,QAAUmlG,EAAU/jG,GAuC7B,SAASkzD,EAAO8wC,EAAMC,GACzB,IAAIC,EAAOF,EAAKplG,OAChB,GAAIslG,IAASD,EAAKrlG,OACd,OAAO,EAEX,IAAK,IAAIoB,EAAI,EAAGA,EAAIkkG,EAAMlkG,IACtB,GAAIgkG,EAAKhkG,KAAOikG,EAAKjkG,GACjB,OAAO,EAGf,OAAO,EA0CJ,SAASmkG,EAAS1/F,EAAK2/F,EAAUC,GACpC,IAAIC,EAAUF,GAAYZ,EAC1B,OAAO/+F,EAAI2B,OAAM,SAAUm+F,EAAY/9F,GACnC,GAAc,IAAVA,EACA,OAAO,EAEX,IAAIwQ,EAAMstF,EAAQ7/F,EAAI+B,EAAQ,GAAI+9F,GAClC,QAASvtF,EAAM,GAAMqtF,GAAsB,IAARrtF,MAlO3C,+O,uBCAA,UAAO,CAAC,YA+FP,KA/FwB,EAAF,SAAW9Y,GAKjC,IAAIsmG,EAAW,GAEf,MAAO,CAINC,cAAe,SAAkC/+F,GAoBhD,IAAIg/F,EAAMC,mBAAoBC,EAAQ,GACtC,IAAI,IAAIziG,KAAQuD,EAAI,CACnB,IAAIhD,EAAQgD,EAAIvD,GAChB,GAAGO,GAAS8hG,EAASriG,GAAM,CAC1B,IAAI8+F,EAASyD,EAAIviG,GAAQ,IACzB,GAAGjE,EAAKkC,QAAQsC,GACf,IAAI,IAAI1C,EAAI,EAAGwC,EAAIE,EAAM9D,OAAQoB,EAAIwC,IAAKxC,EACzC4kG,EAAMjgG,KAAKs8F,EAASyD,EAAIhiG,EAAM1C,UAG/B4kG,EAAMjgG,KAAKs8F,EAASyD,EAAIhiG,KAI3B,OAAOkiG,EAAMxgG,KAAK,MAGnBygG,cAAe,SAAkCt/F,GAsBhD,IADM,IAA6DpD,EAAMqV,EAC3C7P,EADpBwX,EAAM2lF,mBAAoBC,EAAKx/F,EAAI5E,MAAM,KAAM0W,EAAM,GACvDrX,EAAI,EAAGwC,EAAIuiG,EAAGnmG,OAAcoB,EAAIwC,IAAKxC,EAE5C,IADA2H,EAAOo9F,EAAG/kG,IACFpB,OAAO,CACd,IAAIwD,EAAIuF,EAAKR,QAAQ,KAClB/E,EAAI,GACND,EAAOgd,EAAIxX,GACX6P,EAAM,KAENrV,EAAOgd,EAAIxX,EAAK/F,MAAM,EAAGQ,IACzBoV,EAAM2H,EAAIxX,EAAK/F,MAAMQ,EAAI,KAEH,iBAAbiV,EAAIlV,KACbkV,EAAIlV,GAAQ,CAACkV,EAAIlV,KAGfjE,EAAKkC,QAAQiX,EAAIlV,IACnBkV,EAAIlV,GAAMwC,KAAK6S,GAEfH,EAAIlV,GAAQqV,EAIf,OAAOH,KAGT,+B,kCC/FD,+CAQO,SAAS2tF,EAAOC,EAAWC,GAC9B,IAAKD,EACD,MAAM,IAAI,IAAeC,K;;;;;;;;;;;;;GCO1B,MAAM,EAUT,2BAA2Bp6F,EAAS3I,EAAMgjG,EAAShnF,GAC/C,MAAMgH,EAAShjB,EAAK,GACpB,GAAe,MAAXgjB,EAAgB,CAEhB,OADkB,IAAI,IAAkBra,EAAS3I,EAAKP,MAAM,GAAIujG,GAC/CrkG,MAErB,GAAe,MAAXqkB,EACA,MAAO,CAAC,IAAI,IAAUra,EAAS3I,EAAKP,MAAM,GAAIuc,EAAQinF,eAE1D,GAAe,MAAXjgF,EACA,MAAO,CAAC,IAAI,IAAqBra,EAAS3I,EAAKP,MAAM,GAAIujG,IAG7D,OADkB,IAAI,IAAmBr6F,EAAS3I,EAAMgjG,GACvCrkG,MAMrB,qBAAqBqd,GACjB,OAAO,IAAI,IAASA,IAGrB,MAAMknF,EAA2B,IAAI,E;;;;;;;;;;;;;;ACLtB,oBAAX76F,SACNA,OAAwB,kBAAMA,OAAwB,gBAAI,KAAK7F,KAAK,SAMlE,MAAM2gG,EAAO,CAACH,KAAY/D,IAAW,IAAI,IAAe+D,EAAS/D,EAAQ,OAAQiE,GAK3EE,EAAM,CAACJ,KAAY/D,IAAW,IAAI,IAAkB+D,EAAS/D,EAAQ,MAAOiE,I,6BCzDzF,mHAyCO,SAASG,EAAOr6F,EAAQC,EAAMC,EAAUo6F,EAAUC,GAIrD,GAHID,GAAYA,IAAat6F,IACzBE,EAAWA,EAASnC,KAAKu8F,IAEzBC,EAAU,CACV,IAAIC,EAAqBt6F,EACzBA,EAAW,WACPF,EAAOwB,oBAAoBvB,EAAMC,GACjCs6F,EAAmB5lG,MAAMoE,KAAMtE,YAGvC,IAAI+lG,EAAY,CACZz6F,OAAQA,EACRC,KAAMA,EACNC,SAAUA,GAGd,OADAF,EAAOoB,iBAAiBnB,EAAMC,GACvBu6F,EAsBJ,SAASC,EAAW16F,EAAQC,EAAMC,EAAUo6F,GAC/C,OAAOD,EAAOr6F,EAAQC,EAAMC,EAAUo6F,GAAU,GAW7C,SAASK,EAAcryF,GACtBA,GAAOA,EAAItI,SACXsI,EAAItI,OAAOwB,oBAAoB8G,EAAIrI,KAAMqI,EAAIpI,UAC7C,YAAMoI,M,6CC/Fd,sCACQm5B,EADR,6CAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAenF+4D,EAA6B,SAAUx4D,GAOvC,SAASw4D,EAAY36F,EAAMqI,EAAKi1B,GAC5B,IAAItsB,EAAQmxB,EAAO1rC,KAAKsC,KAAMiH,IAASjH,KAcvC,OARAiY,EAAM3I,IAAMA,EAOZ2I,EAAMssB,SAAWA,EACVtsB,EAEX,OAvBAywB,EAAUk5D,EAAax4D,GAuBhBw4D,EAxBqB,CAyB9B,KA6CEC,EAA4B,SAAUz4D,GAKtC,SAASy4D,EAAWC,GAChB,IAAI7pF,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAcjC,OATA,iBAAOiY,GAKPA,EAAM8pF,QAAU,UACGtjG,IAAfqjG,GACA7pF,EAAMurB,cAAcs+D,GAEjB7pF,EA6GX,OAhIAywB,EAAUm5D,EAAYz4D,GA2BtBy4D,EAAW3kG,UAAUy2B,IAAM,SAAUrkB,GACjC,IAAI/Q,EAIJ,OAHIyB,KAAK+hG,SAAW/hG,KAAK+hG,QAAQlxF,eAAevB,KAC5C/Q,EAAQyB,KAAK+hG,QAAQzyF,IAElB/Q,GAOXsjG,EAAW3kG,UAAU8kG,QAAU,WAC3B,OAAQhiG,KAAK+hG,SAAW9kG,OAAOsS,KAAKvP,KAAK+hG,UAAa,IAO1DF,EAAW3kG,UAAU+gE,cAAgB,WACjC,OAAQj+D,KAAK+hG,SAAW,YAAO,GAAI/hG,KAAK+hG,UAAa,IAKzDF,EAAW3kG,UAAU8gE,cAAgB,WACjC,QAASh+D,KAAK+hG,SAMlBF,EAAW3kG,UAAU0pB,OAAS,SAAUtX,EAAKi1B,GACzC,IAAIj7B,EACJA,EAAY24F,EAAmB3yF,GAC/BtP,KAAKqK,cAAc,IAAIu3F,EAAYt4F,EAAWgG,EAAKi1B,IACnDj7B,EAAY,IAAgBmoF,eAC5BzxF,KAAKqK,cAAc,IAAIu3F,EAAYt4F,EAAWgG,EAAKi1B,KASvDs9D,EAAW3kG,UAAU22B,IAAM,SAAUvkB,EAAK/Q,EAAO2jG,GAC7C,IAAIjF,EAASj9F,KAAK+hG,UAAY/hG,KAAK+hG,QAAU,IAC7C,GAAIG,EACAjF,EAAO3tF,GAAO/Q,MAEb,CACD,IAAIgmC,EAAW04D,EAAO3tF,GACtB2tF,EAAO3tF,GAAO/Q,EACVgmC,IAAahmC,GACbyB,KAAK4mB,OAAOtX,EAAKi1B,KAW7Bs9D,EAAW3kG,UAAUsmC,cAAgB,SAAUy5D,EAAQiF,GACnD,IAAK,IAAI5yF,KAAO2tF,EACZj9F,KAAK6zB,IAAIvkB,EAAK2tF,EAAO3tF,GAAM4yF,IAQnCL,EAAW3kG,UAAU6uF,gBAAkB,SAAUjuF,GACxCA,EAAOikG,SAGZ,YAAO/hG,KAAK+hG,UAAY/hG,KAAK+hG,QAAU,IAAKjkG,EAAOikG,UAQvDF,EAAW3kG,UAAUilG,MAAQ,SAAU7yF,EAAK4yF,GACxC,GAAIliG,KAAK+hG,SAAWzyF,KAAOtP,KAAK+hG,QAAS,CACrC,IAAIx9D,EAAWvkC,KAAK+hG,QAAQzyF,UACrBtP,KAAK+hG,QAAQzyF,GAChB,YAAQtP,KAAK+hG,WACb/hG,KAAK+hG,QAAU,MAEdG,GACDliG,KAAK4mB,OAAOtX,EAAKi1B,KAItBs9D,EAjIoB,CAkI7B,KAIEO,EAAuB,GAKpB,SAASH,EAAmB3yF,GAC/B,OAAO8yF,EAAqBvxF,eAAevB,GACrC8yF,EAAqB9yF,GACpB8yF,EAAqB9yF,GAAO,UAAYA,EAEpC,O,6CC/Of,qJAQO,SAAS+yF,IACZ,OAAO,EAMJ,SAASC,IACZ,OAAO,EAOJ,SAASC,KAUT,SAASC,EAAW3gG,GACvB,IAEI4gG,EAEAC,EACAC,EALAC,GAAS,EAMb,OAAO,WACH,IAAIC,EAAWrlG,MAAMN,UAAUO,MAAMC,KAAKhC,WAO1C,OANKknG,GAAU5iG,OAAS2iG,GAAa,YAAYE,EAAUH,KACvDE,GAAS,EACTD,EAAW3iG,KACX0iG,EAAWG,EACXJ,EAAa5gG,EAAGjG,MAAMoE,KAAMtE,YAEzB+mG,K,6BChDf,sCACQh6D,EADR,2BAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KA8CnFi6D,EAAoC,SAAU15D,GAK9C,SAAS05D,EAAmB5uC,GACxB,IAAIj8C,EAAQjY,KACRga,EAAUk6C,GAA4B,GAiC1C,OAhCAj8C,EAAQmxB,EAAO1rC,KAAKsC,KACyC,IAAcA,KACvEga,EAAQ+oF,kBACR9qF,EAAM8qF,gBAAkB/oF,EAAQ+oF,iBAEhC/oF,EAAQgpF,kBACR/qF,EAAM+qF,gBAAkBhpF,EAAQgpF,iBAEhChpF,EAAQipF,kBACRhrF,EAAMgrF,gBAAkBjpF,EAAQipF,iBAEhCjpF,EAAQkpF,gBACRjrF,EAAMirF,cAAgBlpF,EAAQkpF,eAE9BlpF,EAAQmpF,WACRlrF,EAAMkrF,SAAWnpF,EAAQmpF,UAM7BlrF,EAAMmrF,wBAAyB,EAK/BnrF,EAAMorF,iBAAmB,GAKzBprF,EAAMqrF,eAAiB,GAChBrrF,EA6GX,OApJAywB,EAAUo6D,EAAoB15D,GA+C9B05D,EAAmB5lG,UAAUqmG,gBAAkB,WAC3C,OAAOvjG,KAAKsjG,eAAe7oG,QAQ/BqoG,EAAmB5lG,UAAU6lG,gBAAkB,SAAUS,GACrD,OAAO,GAOXV,EAAmB5lG,UAAU8lG,gBAAkB,SAAUQ,KASzDV,EAAmB5lG,UAAUumG,YAAc,SAAUD,GACjD,IAAKA,EAAgB72F,cACjB,OAAO,EAEX,IAAI+2F,GAAY,EAEhB,GADA1jG,KAAK2jG,uBAAuBH,GACxBxjG,KAAKojG,wBACL,GAAII,EAAgBv8F,MAAQ,IAAoB28F,YAC5C5jG,KAAKgjG,gBAAgBQ,GAErBA,EAAgB72F,cAAc5C,sBAE7B,GAAIy5F,EAAgBv8F,MAAQ,IAAoB48F,UAAW,CAC5D,IAAIC,EAAY9jG,KAAKkjG,cAAcM,GACnCxjG,KAAKojG,uBACDU,GAAa9jG,KAAKsjG,eAAe7oG,OAAS,QAIlD,GAAI+oG,EAAgBv8F,MAAQ,IAAoB88F,YAAa,CACzD,IAAIC,EAAUhkG,KAAK+iG,gBAAgBS,GACnCxjG,KAAKojG,uBAAyBY,EAC9BN,EAAY1jG,KAAKmjG,SAASa,QAErBR,EAAgBv8F,MAAQ,IAAoBg9F,aACjDjkG,KAAKijG,gBAAgBO,GAG7B,OAAQE,GAOZZ,EAAmB5lG,UAAU+lG,gBAAkB,SAAUO,KAOzDV,EAAmB5lG,UAAUgmG,cAAgB,SAAUM,GACnD,OAAO,GAQXV,EAAmB5lG,UAAUimG,SAAW,SAAUa,GAC9C,OAAOA,GAMXlB,EAAmB5lG,UAAUymG,uBAAyB,SAAUH,GAC5D,GAqCR,SAAgCA,GAC5B,IAAIv8F,EAAOu8F,EAAgBv8F,KAC3B,OAAQA,IAAS,IAAoB88F,aACjC98F,IAAS,IAAoB28F,aAC7B38F,IAAS,IAAoB48F,UAzCzBK,CAAuBV,GAAkB,CACzC,IAAI1tE,EAAU0tE,EAAgB72F,cAC1B/I,EAAKkyB,EAAQquE,UAAU7nG,WACvBknG,EAAgBv8F,MAAQ,IAAoB48F,iBACrC7jG,KAAKqjG,iBAAiBz/F,IAExB4/F,EAAgBv8F,MAAQ,IAAoB88F,aAG5CngG,KAAM5D,KAAKqjG,oBAFhBrjG,KAAKqjG,iBAAiBz/F,GAAMkyB,GAMhC91B,KAAKsjG,eAAiB,YAAUtjG,KAAKqjG,oBAGtCP,EArJ4B,CAsJrC,KAKK,SAASsB,EAAS1nD,GAIrB,IAHA,IAAIjiD,EAASiiD,EAAcjiD,OACvBg8C,EAAU,EACVC,EAAU,EACL76C,EAAI,EAAGA,EAAIpB,EAAQoB,IACxB46C,GAAWiG,EAAc7gD,GAAG46C,QAC5BC,GAAWgG,EAAc7gD,GAAG66C,QAEhC,MAAO,CAACD,EAAUh8C,EAAQi8C,EAAUj8C,GAazB,O,8BCtOf,IACM4pG,EADFC,EAEK,WAUL,YAToB,IAATD,IAMTA,EAAOE,QAAQl+F,QAAUQ,UAAYA,SAAS+G,MAAQvH,OAAOm+F,OAGxDH,GAIPI,EAAY,WACd,IAAIJ,EAAO,GACX,OAAO,SAAkBr9F,GACvB,QAA4B,IAAjBq9F,EAAKr9F,GAAyB,CACvC,IAAI09F,EAAc79F,SAASkL,cAAc/K,GAEzC,GAAIX,OAAOs+F,mBAAqBD,aAAuBr+F,OAAOs+F,kBAC5D,IAGED,EAAcA,EAAYE,gBAAgBnjE,KAC1C,MAAO5mC,GAEP6pG,EAAc,KAIlBL,EAAKr9F,GAAU09F,EAGjB,OAAOL,EAAKr9F,IApBA,GAwBZ69F,EAAc,GAElB,SAASC,EAAqBC,GAG5B,IAFA,IAAI3iG,GAAU,EAELvG,EAAI,EAAGA,EAAIgpG,EAAYpqG,OAAQoB,IACtC,GAAIgpG,EAAYhpG,GAAGkpG,aAAeA,EAAY,CAC5C3iG,EAASvG,EACT,MAIJ,OAAOuG,EAGT,SAAS4iG,EAAahjE,EAAMhoB,GAI1B,IAHA,IAAIirF,EAAa,GACbC,EAAc,GAETrpG,EAAI,EAAGA,EAAImmC,EAAKvnC,OAAQoB,IAAK,CACpC,IAAI2H,EAAOw+B,EAAKnmC,GACZ+H,EAAKoW,EAAQmrF,KAAO3hG,EAAK,GAAKwW,EAAQmrF,KAAO3hG,EAAK,GAClD4hG,EAAQH,EAAWrhG,IAAO,EAC1BmhG,EAAa,GAAGxnG,OAAOqG,EAAI,KAAKrG,OAAO6nG,GAC3CH,EAAWrhG,GAAMwhG,EAAQ,EACzB,IAAI/iG,EAAQyiG,EAAqBC,GAC7B3nG,EAAM,CACRioG,IAAK7hG,EAAK,GACV8hG,MAAO9hG,EAAK,GACZ+hG,UAAW/hG,EAAK,KAGH,IAAXnB,GACFwiG,EAAYxiG,GAAOmjG,aACnBX,EAAYxiG,GAAOojG,QAAQroG,IAE3BynG,EAAYrkG,KAAK,CACfukG,WAAYA,EACZU,QAASC,EAAStoG,EAAK4c,GACvBwrF,WAAY,IAIhBN,EAAY1kG,KAAKukG,GAGnB,OAAOG,EAGT,SAASS,EAAmB3rF,GAC1B,IAAI/L,EAAQpH,SAAS23B,cAAc,SAC/B9wB,EAAasM,EAAQtM,YAAc,GAEvC,QAAgC,IAArBA,EAAWk4F,MAAuB,CAC3C,IAAIA,EAAmD,KAEnDA,IACFl4F,EAAWk4F,MAAQA,GAQvB,GAJA3oG,OAAOsS,KAAK7B,GAAYzK,SAAQ,SAAUqM,GACxCrB,EAAMQ,aAAaa,EAAK5B,EAAW4B,OAGP,mBAAnB0K,EAAQ+gE,OACjB/gE,EAAQ+gE,OAAO9sE,OACV,CACL,IAAIjH,EAASy9F,EAAUzqF,EAAQ+gE,QAAU,QAEzC,IAAK/zE,EACH,MAAM,IAAI2B,MAAM,2GAGlB3B,EAAO0zB,YAAYzsB,GAGrB,OAAOA,EAcT,IACM43F,EADFC,GACED,EAAY,GACT,SAAiBxjG,EAAO0jG,GAE7B,OADAF,EAAUxjG,GAAS0jG,EACZF,EAAUxiG,OAAOkhG,SAAStkG,KAAK,QAI1C,SAAS+lG,EAAoB/3F,EAAO5L,EAAOsF,EAAQvK,GACjD,IAAIioG,EAAM19F,EAAS,GAAKvK,EAAIkoG,MAAQ,UAAU/nG,OAAOH,EAAIkoG,MAAO,MAAM/nG,OAAOH,EAAIioG,IAAK,KAAOjoG,EAAIioG,IAIjG,GAAIp3F,EAAMg4F,WACRh4F,EAAMg4F,WAAWC,QAAUJ,EAAYzjG,EAAOgjG,OACzC,CACL,IAAIc,EAAUt/F,SAASu/F,eAAef,GAClCzrE,EAAa3rB,EAAM2rB,WAEnBA,EAAWv3B,IACb4L,EAAMyzB,YAAY9H,EAAWv3B,IAG3Bu3B,EAAWn/B,OACbwT,EAAMmzB,aAAa+kE,EAASvsE,EAAWv3B,IAEvC4L,EAAMysB,YAAYyrE,IAKxB,SAASE,EAAWp4F,EAAO+L,EAAS5c,GAClC,IAAIioG,EAAMjoG,EAAIioG,IACVC,EAAQloG,EAAIkoG,MACZC,EAAYnoG,EAAImoG,UAepB,GAbID,EACFr3F,EAAMQ,aAAa,QAAS62F,GAE5Br3F,EAAMO,gBAAgB,SAGpB+2F,GAA6B,oBAATe,OACtBjB,GAAO,uDAAuD9nG,OAAO+oG,KAAKC,SAAS/F,mBAAmB/4E,KAAKgsB,UAAU8xD,MAAe,QAMlIt3F,EAAMg4F,WACRh4F,EAAMg4F,WAAWC,QAAUb,MACtB,CACL,KAAOp3F,EAAM+6C,YACX/6C,EAAMyzB,YAAYzzB,EAAM+6C,YAG1B/6C,EAAMysB,YAAY7zB,SAASu/F,eAAef,KAI9C,IAAImB,EAAY,KACZC,EAAmB,EAEvB,SAASf,EAAStoG,EAAK4c,GACrB,IAAI/L,EACAoyD,EACA14D,EAEJ,GAAIqS,EAAQwsF,UAAW,CACrB,IAAIE,EAAaD,IACjBx4F,EAAQu4F,IAAcA,EAAYb,EAAmB3rF,IACrDqmD,EAAS2lC,EAAoBjhG,KAAK,KAAMkJ,EAAOy4F,GAAY,GAC3D/+F,EAASq+F,EAAoBjhG,KAAK,KAAMkJ,EAAOy4F,GAAY,QAE3Dz4F,EAAQ03F,EAAmB3rF,GAC3BqmD,EAASgmC,EAAWthG,KAAK,KAAMkJ,EAAO+L,GAEtCrS,EAAS,YAxFb,SAA4BsG,GAE1B,GAAyB,OAArBA,EAAM5E,WACR,OAAO,EAGT4E,EAAM5E,WAAWq4B,YAAYzzB,GAmFzB04F,CAAmB14F,IAKvB,OADAoyD,EAAOjjE,GACA,SAAqBw2C,GAC1B,GAAIA,EAAQ,CACV,GAAIA,EAAOyxD,MAAQjoG,EAAIioG,KAAOzxD,EAAO0xD,QAAUloG,EAAIkoG,OAAS1xD,EAAO2xD,YAAcnoG,EAAImoG,UACnF,OAGFllC,EAAOjjE,EAAMw2C,QAEbjsC,KAKNpE,EAAO65D,QAAU,SAAUp7B,EAAMhoB,IAC/BA,EAAUA,GAAW,IAGRwsF,WAA0C,kBAAtBxsF,EAAQwsF,YACvCxsF,EAAQwsF,UAAYlC,KAItB,IAAIsC,EAAkB5B,EADtBhjE,EAAOA,GAAQ,GAC0BhoB,GACzC,OAAO,SAAgB65B,GAGrB,GAFAA,EAAUA,GAAW,GAE2B,mBAA5C52C,OAAOC,UAAUZ,SAASoB,KAAKm2C,GAAnC,CAIA,IAAK,IAAIh4C,EAAI,EAAGA,EAAI+qG,EAAgBnsG,OAAQoB,IAAK,CAC/C,IACIwG,EAAQyiG,EADK8B,EAAgB/qG,IAEjCgpG,EAAYxiG,GAAOmjG,aAKrB,IAFA,IAAIqB,EAAqB7B,EAAanxD,EAAS75B,GAEtChK,EAAK,EAAGA,EAAK42F,EAAgBnsG,OAAQuV,IAAM,CAClD,IAEIi+E,EAAS6W,EAFK8B,EAAgB52F,IAIK,IAAnC60F,EAAY5W,GAAQuX,aACtBX,EAAY5W,GAAQwX,UAEpBZ,EAAY/oG,OAAOmyF,EAAQ,IAI/B2Y,EAAkBC,M,6BC1QtB,2PAYO,SAASC,EAAsBC,EAAWC,EAAYC,GACzD,IAAIvuB,EAASuuB,GAAkBA,EAAexsG,OACxCwsG,EAAersG,QACf,IACI,IAAIssG,gBAAgBH,GAAa,IAAKC,GAAc,KACpDngG,SAAS23B,cAAc,UAQjC,OAPIuoE,IACAruB,EAAOl/B,MAAQutD,GAEfC,IACAtuB,EAAOj/B,OAASutD,GAG4BtuB,EAAO0P,WAAW,MAS/D,SAAS+e,EAAWxgG,GACvB,IAAI6yC,EAAQ7yC,EAAQq6B,YAChB/yB,EAAQq/B,iBAAiB3mC,GAE7B,OADA6yC,GAASl2B,SAASrV,EAAMmpC,WAAY,IAAM9zB,SAASrV,EAAMqpC,YAAa,IAUnE,SAAS8vD,EAAYzgG,GACxB,IAAI8yC,EAAS9yC,EAAQ+yC,aACjBzrC,EAAQq/B,iBAAiB3mC,GAE7B,OADA8yC,GAAUn2B,SAASrV,EAAMopC,UAAW,IAAM/zB,SAASrV,EAAMspC,aAAc,IAOpE,SAAS8vD,EAAYC,EAASC,GACjC,IAAIr2F,EAASq2F,EAAQl+F,WACjB6H,GACAA,EAAOs2F,aAAaF,EAASC,GAO9B,SAASE,EAAWv+F,GACvB,OAAOA,GAAQA,EAAKG,WAAaH,EAAKG,WAAWq4B,YAAYx4B,GAAQ,KAKlE,SAASw+F,EAAex+F,GAC3B,KAAOA,EAAKy+F,WACRz+F,EAAKw4B,YAAYx4B,EAAKy+F,WAWvB,SAASC,EAAgB1+F,EAAMC,GAElC,IADA,IAAI0+F,EAAc3+F,EAAK0wB,WACd/9B,EAAI,KAAWA,EAAG,CACvB,IAAIisG,EAAWD,EAAYhsG,GACvBksG,EAAW5+F,EAAStN,GAExB,IAAKisG,IAAaC,EACd,MAGAD,IAAaC,IAIZD,EAKAC,EAML7+F,EAAKk4B,aAAa2mE,EAAUD,IALxB5+F,EAAKw4B,YAAYomE,KACfjsG,GANFqN,EAAKwxB,YAAYqtE,O,6BCrG7B,g6BAkBO,SAASn6F,EAAIo6F,GAChB,IAAIC,EAAavsG,UAKjB,OAAO,SAAUgO,GAEb,IADA,IAAIw+F,GAAO,EACFrsG,EAAI,EAAG8a,EAAKsxF,EAAWxtG,OAAQoB,EAAI8a,IACxCuxF,EAAOA,GAAQD,EAAWpsG,GAAG6N,MADiB7N,GAMlD,OAAOqsG,GAWR,IAAIC,EAAa,SAAU3E,GAC9B,IAAI72F,EAAoE62F,EAA6B,cACrG,OAAQ72F,EAAc6xC,UAChB7xC,EAAcy7F,SAAWz7F,EAAcJ,WACxCI,EAAcgyC,UAUZ0pD,EAAmB,SAAU7E,GACpC,IAAI72F,EAAoE62F,EAA6B,cACrG,OAAQ72F,EAAc6xC,UAChB7xC,EAAcy7F,SAAWz7F,EAAcJ,UACzCI,EAAcgyC,UAUX2pD,EAAQ,SAAU5+F,GACzB,OAAOA,EAAM1C,OAAOuhG,mBAAmBz6F,SAASjH,SAAS2hG,gBAQlDC,EAAoB,SAAU/+F,GACrC,OAAOA,EAAMnI,IAAIgnG,mBAAmB/iD,aAAa,aAC3C8iD,EAAM5+F,IAULg/F,EAAS,IAQTC,EAAQ,SAAUnF,GACzB,OAAOA,EAAgBv8F,MAAQ,IAAoB4wF,OAW5C+Q,EAAoB,SAAUpF,GACrC,IAAI72F,EAA2C62F,EAA6B,cAC5E,OAA+B,GAAxB72F,EAAck8F,UAAiB,KAAU,KAAOl8F,EAAcJ,UAS9Du8F,EAAQ,IASRC,EAAc,SAAUvF,GAC/B,MAA+B,eAAxBA,EAAgBv8F,MAShB+hG,EAAc,SAAUxF,GAC/B,OAAOA,EAAgBv8F,MAAQ,IAAoBgiG,aAS5CC,EAAc,SAAU1F,GAC/B,OAAOA,EAAgBv8F,MAAQ,IAAoB6wF,UAU5CqR,EAAiB,SAAU3F,GAClC,IAAI72F,EAAoE62F,EAA6B,cACrG,OAAS72F,EAAc6xC,UACjB7xC,EAAcy7F,SAAWz7F,EAAcJ,WACxCI,EAAcgyC,UAWZyqD,EAA0B,SAAU5F,GAC3C,IAAI72F,EAAoE62F,EAA6B,cACrG,OAAS72F,EAAc6xC,SAClB,IAAM7xC,EAAcy7F,QAAUz7F,EAAcJ,WAC5CI,EAAcgyC,UAUZ0qD,EAAe,SAAU7F,GAChC,IAAI72F,EAAoE62F,EAA6B,cACrG,OAAS72F,EAAc6xC,UACjB7xC,EAAcy7F,SAAWz7F,EAAcJ,UACzCI,EAAcgyC,UAUX2qD,EAAoB,SAAU9F,GACrC,IACItkG,EADoEskG,EAA6B,cAC3C,OAAEtkG,QAC5D,MAAmB,UAAZA,GAAmC,WAAZA,GAAoC,aAAZA,GAS/CqqG,EAAY,SAAU/F,GAC7B,IAAIgG,EAAmE,EAClE78F,cAGL,OAFA,iBAAwBlO,IAAjB+qG,EAA4B,IAEA,SAA5BA,EAAaC,aASbC,EAAY,SAAUlG,GAC7B,IAAImG,EAAiE,EAChEh9F,cAGL,OAFA,iBAAsBlO,IAAfkrG,EAA0B,IAEC,UAA3BA,EAAWF,aASXG,EAAU,SAAUpG,GAC3B,IAAImG,EAAiE,EAChEh9F,cAGL,OAFA,iBAAsBlO,IAAfkrG,EAA0B,IAEC,QAA3BA,EAAWF,aAWXI,EAAgB,SAAUrG,GACjC,IAAIgG,EAAmE,EAClE78F,cAEL,OADA,iBAAwBlO,IAAjB+qG,EAA4B,IAC5BA,EAAaM,WAAqC,IAAxBN,EAAaX,S,gBC1QlD,UAAO,CACN,YAyLA,KAxLE,EAAF,SAAW9uG,GACX,aAKA,SAASgwG,IACR,MAAM,IAAIxsC,UAAU,YAGrB,OAAOxjE,EAAKwF,QAAO,cAMhB,CACF+nB,KAAM,SAAS/rB,EAAUglE,EAASC,GAmBjCupC,KAGD96E,OAAQ,SAASuB,EAAQ8vC,GAkBxBypC,KAGD7pC,WAAY,WAKX6pC,KAGD5pC,WAAY,WAKX4pC,KAGD3pC,YAAa,WAKZ2pC,KAGDlqC,WAAY,WAKXkqC,KAGD,QAAW,SAASxuG,GAwBnB,OAAOyE,KAAKsnB,MAAK,SAAU/oB,GAC1B,IAAIyrG,EAAiBzuG,IACrB,OAAIyuG,GAAiD,mBAAxBA,EAAe1iF,KACpC0iF,EAAe1iF,MAAK,WAC1B,OAAO/oB,KAGFA,KACL,SAASiyB,GACX,IAAIw5E,EAAiBzuG,IACrB,GAAIyuG,GAAiD,mBAAxBA,EAAe1iF,KAC3C,OAAO0iF,EAAe1iF,MAAK,WAC1B,MAAMkJ,KAGR,MAAMA,MAIRk4E,OAAQ,SAASuB,GAShB,OAAOjqG,KAAKsnB,KAAK2iF,EAAmBA,IAGrC,MAAS,SAAS1pC,GAQd,OAAOvgE,KAAKsnB,KAAK,KAAMi5C,IAG3B2pC,UAAW,SAAS3pC,GAQnB,OAAOvgE,KAAKsnB,KAAK,KAAMi5C,IAGxB4pC,MAAO,WACN,OAAOnqG,MAGRoqG,cAAe,WACd,OAAOpqG,MAGR1D,SAAU,WAIT,MAAO,uBAGT,+B,gCC1LD,2DACQmsC,EADR,oCAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAcnFxB,EACQ,SAORgjE,EAAiC,SAAUjhE,GAO3C,SAASihE,EAAgBpjG,EAAMqjG,EAAaC,GACxC,IAAItyF,EAAQmxB,EAAO1rC,KAAKsC,KAAMiH,IAASjH,KAavC,OAPAiY,EAAMtR,QAAU2jG,EAMhBryF,EAAM5V,MAAQkoG,EACPtyF,EAEX,OAtBAywB,EAAU2hE,EAAiBjhE,GAsBpBihE,EAvByB,CAwBlC,KAoBE5iE,EAA4B,SAAU2B,GAMtC,SAAS3B,EAAW+iE,EAAWt2C,GAC3B,IAAIj8C,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAC7Bga,EAAUk6C,GAAe,GAW7B,GANAj8C,EAAMwyF,UAAYzwF,EAAQ0wF,OAK1BzyF,EAAM0yF,OAASH,GAAwB,GACnCvyF,EAAMwyF,QACN,IAAK,IAAI5uG,EAAI,EAAG8a,EAAKsB,EAAM0yF,OAAOlwG,OAAQoB,EAAI8a,IAAM9a,EAChDoc,EAAM2yF,cAAc3yF,EAAM0yF,OAAO9uG,GAAIA,GAI7C,OADAoc,EAAM4yF,gBACC5yF,EA8KX,OAtMAywB,EAAUjB,EAAY2B,GA8BtB3B,EAAWvqC,UAAUk1F,MAAQ,WACzB,KAAOpyF,KAAK8qG,YAAc,GACtB9qG,KAAKxB,OAUbipC,EAAWvqC,UAAUqC,OAAS,SAAUe,GACpC,IAAK,IAAIzE,EAAI,EAAG8a,EAAKrW,EAAI7F,OAAQoB,EAAI8a,IAAM9a,EACvCmE,KAAKQ,KAAKF,EAAIzE,IAElB,OAAOmE,MASXynC,EAAWvqC,UAAU+F,QAAU,SAAUtI,GAErC,IADA,IAAIiI,EAAQ5C,KAAK2qG,OACR9uG,EAAI,EAAG8a,EAAK/T,EAAMnI,OAAQoB,EAAI8a,IAAM9a,EACzClB,EAAEiI,EAAM/G,GAAIA,EAAG+G,IAWvB6kC,EAAWvqC,UAAU0zF,SAAW,WAC5B,OAAO5wF,KAAK2qG,QAQhBljE,EAAWvqC,UAAUsG,KAAO,SAAUnB,GAClC,OAAOrC,KAAK2qG,OAAOtoG,IAQvBolC,EAAWvqC,UAAU4tG,UAAY,WAC7B,OAAO9qG,KAAK2zB,IAAI0T,IAQpBI,EAAWvqC,UAAU6tG,SAAW,SAAU1oG,EAAOyP,GACzC9R,KAAKyqG,SACLzqG,KAAK4qG,cAAc94F,GAEvB9R,KAAK2qG,OAAO7uG,OAAOuG,EAAO,EAAGyP,GAC7B9R,KAAK6qG,gBACL7qG,KAAKqK,cAAc,IAAIggG,EAAgB,IAAoBpY,IAAKngF,EAAMzP,KAQ1EolC,EAAWvqC,UAAUsB,IAAM,WACvB,OAAOwB,KAAKgrG,SAAShrG,KAAK8qG,YAAc,IAQ5CrjE,EAAWvqC,UAAUsD,KAAO,SAAUsR,GAC9B9R,KAAKyqG,SACLzqG,KAAK4qG,cAAc94F,GAEvB,IAAI+0C,EAAI7mD,KAAK8qG,YAEb,OADA9qG,KAAK+qG,SAASlkD,EAAG/0C,GACV9R,KAAK8qG,aAQhBrjE,EAAWvqC,UAAUyK,OAAS,SAAUmK,GAEpC,IADA,IAAIxR,EAAMN,KAAK2qG,OACN9uG,EAAI,EAAG8a,EAAKrW,EAAI7F,OAAQoB,EAAI8a,IAAM9a,EACvC,GAAIyE,EAAIzE,KAAOiW,EACX,OAAO9R,KAAKgrG,SAASnvG,IAYjC4rC,EAAWvqC,UAAU8tG,SAAW,SAAU3oG,GACtC,IAAI4oG,EAAOjrG,KAAK2qG,OAAOtoG,GAIvB,OAHArC,KAAK2qG,OAAO7uG,OAAOuG,EAAO,GAC1BrC,KAAK6qG,gBACL7qG,KAAKqK,cAAc,IAAIggG,EAAgB,IAAoBnY,OAAQ+Y,EAAM5oG,IAClE4oG,GAQXxjE,EAAWvqC,UAAUguG,MAAQ,SAAU7oG,EAAOyP,GAC1C,IAAI+0C,EAAI7mD,KAAK8qG,YACb,GAAIzoG,EAAQwkD,EAAG,CACP7mD,KAAKyqG,SACLzqG,KAAK4qG,cAAc94F,EAAMzP,GAE7B,IAAI4oG,EAAOjrG,KAAK2qG,OAAOtoG,GACvBrC,KAAK2qG,OAAOtoG,GAASyP,EACrB9R,KAAKqK,cAAc,IAAIggG,EAAgB,IAAoBnY,OAAQ+Y,EAAM5oG,IACzErC,KAAKqK,cAAc,IAAIggG,EAAgB,IAAoBpY,IAAKngF,EAAMzP,QAErE,CACD,IAAK,IAAIiU,EAAIuwC,EAAGvwC,EAAIjU,IAASiU,EACzBtW,KAAK+qG,SAASz0F,OAAG7X,GAErBuB,KAAK+qG,SAAS1oG,EAAOyP,KAM7B21B,EAAWvqC,UAAU2tG,cAAgB,WACjC7qG,KAAK6zB,IAAIwT,EAAiBrnC,KAAK2qG,OAAOlwG,SAO1CgtC,EAAWvqC,UAAU0tG,cAAgB,SAAU94F,EAAMq5F,GACjD,IAAK,IAAItvG,EAAI,EAAG8a,EAAK3W,KAAK2qG,OAAOlwG,OAAQoB,EAAI8a,IAAM9a,EAC/C,GAAImE,KAAK2qG,OAAO9uG,KAAOiW,GAAQjW,IAAMsvG,EACjC,MAAM,IAAI,IAAe,KAI9B1jE,EAvMoB,CAwM7B,KACa,a,6BCxQf,IAAI2jE,EAA2B,WAI3B,SAASA,EAAUnkG,GAIfjH,KAAKqrG,mBAMLrrG,KAAKiH,KAAOA,EAMZjH,KAAKgH,OAAS,KAgBlB,OAVAokG,EAAUluG,UAAU6M,eAAiB,WACjC/J,KAAKqrG,oBAAqB,GAM9BD,EAAUluG,UAAU8M,gBAAkB,WAClChK,KAAKqrG,oBAAqB,GAEvBD,EApCmB,GAkDf,O,6BC/Df,WAIQ3iE,EAJR,sDAGIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KA4CnFyiE,EAA8B,SAAUliE,GAKxC,SAASkiE,EAAatxF,GAClB,IAAI/B,EAAQjY,KAIR6gE,OAA4CpiE,IAA3Bub,EAAQ6mD,gBAA+B7mD,EAAQ6mD,eA2EpE,OA1EA5oD,EAAQmxB,EAAO1rC,KAAKsC,KAAM,CACtB2tC,QAAS,EACTkzB,eAAgBA,EAChBh0D,cAA+BpO,IAArBub,EAAQnN,SAAyBmN,EAAQnN,SAAW,EAC9DC,WAAyBrO,IAAlBub,EAAQlN,MAAsBkN,EAAQlN,MAAQ,EACrDg0D,kBAAuCriE,IAAzBub,EAAQ8mD,aAA6B9mD,EAAQ8mD,aAAe,CAAC,EAAG,MAC5E9gE,MAKAs1F,QAAU,GAKhBr9E,EAAMszF,oBAAsB,KAK5BtzF,EAAMu8C,WAAyB/1D,IAAjBub,EAAQy6C,KAAqBz6C,EAAQy6C,KAAO,KAK1Dx8C,EAAMs/E,QAAU,CAAC,EAAG,GAKpBt/E,EAAMuzF,QAAUxxF,EAAQ4mD,OAKxB3oD,EAAMspD,aACiB9iE,IAAnBub,EAAQkzB,OAAuBlzB,EAAQkzB,OAASlzB,EAAQyxF,QAK5DxzF,EAAMyzF,SAAW1xF,EAAQ2xF,QAKzB1zF,EAAM2zF,YAA2BntG,IAAlBub,EAAQy6D,MAAsBz6D,EAAQy6D,MAAQ,EAK7Dx8D,EAAM68C,aAA6Br2D,IAAnBub,EAAQ+6C,OAAuB/6C,EAAQ+6C,OAAS,KAKhE98C,EAAMw+E,QAAU,KAKhBx+E,EAAMy9E,MAAQ,KAKdz9E,EAAM4zF,WAAa,KAKnB5zF,EAAM6zF,uBAAyB,KAC/B7zF,EAAMm5B,SACCn5B,EA2VX,OA/aAywB,EAAU4iE,EAAcliE,GA2FxBkiE,EAAapuG,UAAUwD,MAAQ,WAC3B,IAAIoM,EAAQ9M,KAAK+gE,WACb9yD,EAAQ,IAAIq9F,EAAa,CACzB72C,KAAMz0D,KAAKo1D,UAAYp1D,KAAKo1D,UAAU10D,aAAUjC,EAChDmiE,OAAQ5gE,KAAK+rG,YACb7+D,OAAQltC,KAAKghE,YACb2qC,QAAS3rG,KAAKgsG,aACdv3B,MAAOz0E,KAAKisG,WACZl3C,OAAQ/0D,KAAKs1D,YAAct1D,KAAKs1D,YAAY50D,aAAUjC,EACtDoO,SAAU7M,KAAKihE,cACfJ,eAAgB7gE,KAAKkhE,oBACrBp0D,MAAOtP,MAAMvB,QAAQ6Q,GAASA,EAAMrP,QAAUqP,EAC9Cg0D,aAAc9gE,KAAKmhE,kBAAkB1jE,UAGzC,OADAwQ,EAAMmzD,WAAWphE,KAAKqhE,cACfpzD,GAQXq9F,EAAapuG,UAAUivE,UAAY,WAC/B,OAAOnsE,KAAKy2F,SAOhB6U,EAAapuG,UAAU+uG,SAAW,WAC9B,OAAOjsG,KAAK4rG,QAOhBN,EAAapuG,UAAUk4D,QAAU,WAC7B,OAAOp1D,KAAKw0D,OAKhB82C,EAAapuG,UAAUmvE,qBAAuB,WAC1C,IAAKrsE,KAAKurG,oBAAqB,CAC3B,IAAIW,EAAgBlsG,KAAKmsG,sBACzBnsG,KAAKosG,0BAA0BF,GAEnC,OAAOlsG,KAAKurG,qBAQhBD,EAAapuG,UAAUm4D,SAAW,SAAUyQ,GACxC,IAAK9lE,KAAKs1F,QAAQxvB,GAAc,GAAI,CAChC,IAAIomC,EAAgBlsG,KAAKmsG,sBACrB7wG,EAAU,YAAsB4wG,EAAc57C,KAAOwV,GAAc,EAAGomC,EAAc57C,KAAOwV,GAAc,GAC7G9lE,KAAKqsG,MAAMH,EAAe5wG,EAAS,EAAG,EAAGwqE,GAAc,GACvD9lE,KAAKs1F,QAAQxvB,GAAc,GAAKxqE,EAAQo9E,OAE5C,OAAO14E,KAAKs1F,QAAQxvB,GAAc,IAMtCwlC,EAAapuG,UAAUsvE,cAAgB,SAAU1G,GAC7C,OAAOA,GAKXwlC,EAAapuG,UAAU+qF,aAAe,WAClC,OAAOjoF,KAAK6rG,YAKhBP,EAAapuG,UAAUu6F,yBAA2B,WAC9C,OAAOz3F,KAAK8rG,wBAKhBR,EAAapuG,UAAU0lF,cAAgB,WACnC,OAAO,IAAWE,QAOtBwoB,EAAapuG,UAAUqvE,UAAY,WAC/B,OAAOvsE,KAAKu3F,SAOhB+T,EAAapuG,UAAU6uG,UAAY,WAC/B,OAAO/rG,KAAKwrG,SAOhBF,EAAapuG,UAAU8jE,UAAY,WAC/B,OAAOhhE,KAAKuhE,SAOhB+pC,EAAapuG,UAAU8uG,WAAa,WAChC,OAAOhsG,KAAK0rG,UAOhBJ,EAAapuG,UAAU00D,QAAU,WAC7B,OAAO5xD,KAAK01F,OAOhB4V,EAAapuG,UAAUo4D,UAAY,WAC/B,OAAOt1D,KAAK80D,SAKhBw2C,EAAapuG,UAAUgnF,kBAAoB,SAAUh9E,KAIrDokG,EAAapuG,UAAUgjD,KAAO,aAI9BorD,EAAapuG,UAAU8mF,oBAAsB,SAAU98E,KAKvDokG,EAAapuG,UAAUivG,oBAAsB,WACzC,IAKI7mC,EALA6D,EAAU,IACVS,EAAW,IACXK,EAAa,EACbX,EAAW,KACXG,EAAiB,EAEjB2H,EAAc,EA2BlB,OA1BIpxE,KAAK80D,UAEe,QADpBwQ,EAActlE,KAAK80D,QAAQiU,cAEvBzD,EAAc,KAElBA,EAAc,YAAYA,QAEN7mE,KADpB2yE,EAAcpxE,KAAK80D,QAAQrF,cAEvB2hB,EAAc,KAElB9H,EAAWtpE,KAAK80D,QAAQuU,cACxBI,EAAiBzpE,KAAK80D,QAAQ0U,yBAEb/qE,KADjBmrE,EAAW5pE,KAAK80D,QAAQ6U,iBAEpBC,EAAW,UAGCnrE,KADhB0qE,EAAUnpE,KAAK80D,QAAQoU,gBAEnBC,EAAU,UAGK1qE,KADnBwrE,EAAajqE,KAAK80D,QAAQkV,mBAEtBC,EAAa,MAId,CACH3E,YAAaA,EACb8L,YAAaA,EACb9gB,KAJO,GAAKtwD,KAAKuhE,QAAU6P,GAAe,EAK1CjI,QAASA,EACTG,SAAUA,EACVG,eAAgBA,EAChBG,SAAUA,EACVK,WAAYA,IAMpBqhC,EAAapuG,UAAUk0C,OAAS,WAC5B,IAAI86D,EAAgBlsG,KAAKmsG,sBACrB7wG,EAAU,YAAsB4wG,EAAc57C,KAAM47C,EAAc57C,MACtEtwD,KAAKqsG,MAAMH,EAAe5wG,EAAS,EAAG,EAAG,GACzC0E,KAAKs1F,QAAU,GACft1F,KAAKs1F,QAAQ,GAAKh6F,EAAQo9E,OAE1B,IAAIpoB,EAAOh1D,EAAQo9E,OAAOl/B,MACtBgoC,EAAYlxB,EACZwQ,EAAe9gE,KAAKmhE,kBACxBnhE,KAAK8rG,uBAAyB,CAACI,EAAc57C,KAAM47C,EAAc57C,MACjEtwD,KAAKosG,0BAA0BF,GAC/BlsG,KAAKy2F,QAAU,CAACnmC,EAAO,EAAIwQ,EAAa,GAAIxQ,EAAO,EAAIwQ,EAAa,IACpE9gE,KAAK01F,MAAQ,CAACplC,EAAMA,GACpBtwD,KAAK6rG,WAAa,CAACrqB,EAAWA,IAUlC8pB,EAAapuG,UAAUmvG,MAAQ,SAAUH,EAAe5wG,EAASiF,EAAGkjB,EAAGqiD,GACnE,IAAIjqE,EAAGywG,EAAQC,EAEfjxG,EAAQ4kF,aAAapa,EAAY,EAAG,EAAGA,EAAY,EAAG,GAEtDxqE,EAAQy9E,UAAUx4E,EAAGkjB,GACrBnoB,EAAQs7E,YACR,IAAIhW,EAAS5gE,KAAKwrG,QAClB,GAAI5qC,IAAW/6C,IACXvqB,EAAQg/E,IAAI4xB,EAAc57C,KAAO,EAAG47C,EAAc57C,KAAO,EAAGtwD,KAAKuhE,QAAS,EAAG,EAAI3rD,KAAKwhD,IAAI,OAEzF,CACD,IAAIu0C,OAA4BltG,IAAlBuB,KAAK0rG,SAAyB1rG,KAAK0rG,SAAW1rG,KAAKuhE,QAIjE,IAHIoqC,IAAY3rG,KAAKuhE,UACjBX,GAAS,GAER/kE,EAAI,EAAGA,GAAK+kE,EAAQ/kE,IACrBywG,EAAc,EAAJzwG,EAAQ+Z,KAAKwhD,GAAMwJ,EAAShrD,KAAKwhD,GAAK,EAAIp3D,KAAK4rG,OACzDW,EAAU1wG,EAAI,GAAM,EAAImE,KAAKuhE,QAAUoqC,EACvCrwG,EAAQw7E,OAAOo1B,EAAc57C,KAAO,EAAIi8C,EAAU32F,KAAK46C,IAAI87C,GAASJ,EAAc57C,KAAO,EAAIi8C,EAAU32F,KAAK86C,IAAI47C,IAGxH,GAAItsG,KAAKw0D,MAAO,CACZ,IAAI+B,EAAQv2D,KAAKw0D,MAAMuU,WACT,OAAVxS,IACAA,EAAQ,KAEZj7D,EAAQ+pE,UAAY,YAAY9O,GAChCj7D,EAAQm5D,OAERz0D,KAAK80D,UACLx5D,EAAQgqE,YAAc4mC,EAAc5mC,YACpChqE,EAAQwuE,UAAYoiC,EAAc96B,YAC9B91E,EAAQk7E,aAAe01B,EAAc5iC,WACrChuE,EAAQk7E,YAAY01B,EAAc5iC,UAClChuE,EAAQmuE,eAAiByiC,EAAcziC,gBAE3CnuE,EAAQ6tE,QAAU+iC,EAAc/iC,QAChC7tE,EAAQsuE,SAAWsiC,EAActiC,SACjCtuE,EAAQ2uE,WAAaiiC,EAAcjiC,WACnC3uE,EAAQy5D,UAEZz5D,EAAQi/E,aAMZ+wB,EAAapuG,UAAUkvG,0BAA4B,SAAUF,GAEzD,GADAlsG,KAAKurG,oBAAsBvrG,KAAKq1D,SAAS,GACrCr1D,KAAKw0D,MAAO,CACZ,IAAI+B,EAAQv2D,KAAKw0D,MAAMuU,WAEnBp7B,EAAU,EAUd,GATqB,iBAAV4oB,IACPA,EAAQ,kBAAQA,IAEN,OAAVA,EACA5oB,EAAU,EAELnwC,MAAMvB,QAAQs6D,KACnB5oB,EAA2B,IAAjB4oB,EAAM97D,OAAe87D,EAAM,GAAK,GAE9B,IAAZ5oB,EAAe,CAGf,IAAIryC,EAAU,YAAsB4wG,EAAc57C,KAAM47C,EAAc57C,MACtEtwD,KAAKurG,oBAAsBjwG,EAAQo9E,OACnC14E,KAAKwsG,wBAAwBN,EAAe5wG,EAAS,EAAG,MAWpEgwG,EAAapuG,UAAUsvG,wBAA0B,SAAUN,EAAe5wG,EAASiF,EAAGkjB,GAElFnoB,EAAQy9E,UAAUx4E,EAAGkjB,GACrBnoB,EAAQs7E,YACR,IAAIhW,EAAS5gE,KAAKwrG,QAClB,GAAI5qC,IAAW/6C,IACXvqB,EAAQg/E,IAAI4xB,EAAc57C,KAAO,EAAG47C,EAAc57C,KAAO,EAAGtwD,KAAKuhE,QAAS,EAAG,EAAI3rD,KAAKwhD,IAAI,OAEzF,CACD,IAAIu0C,OAA4BltG,IAAlBuB,KAAK0rG,SAAyB1rG,KAAK0rG,SAAW1rG,KAAKuhE,QAC7DoqC,IAAY3rG,KAAKuhE,UACjBX,GAAS,GAEb,IAAI/kE,OAAI,EAAQ0wG,OAAU,EAAQD,OAAS,EAC3C,IAAKzwG,EAAI,EAAGA,GAAK+kE,EAAQ/kE,IACrBywG,EAAc,EAAJzwG,EAAQ+Z,KAAKwhD,GAAMwJ,EAAShrD,KAAKwhD,GAAK,EAAIp3D,KAAK4rG,OACzDW,EAAU1wG,EAAI,GAAM,EAAImE,KAAKuhE,QAAUoqC,EACvCrwG,EAAQw7E,OAAOo1B,EAAc57C,KAAO,EAAIi8C,EAAU32F,KAAK46C,IAAI87C,GAASJ,EAAc57C,KAAO,EAAIi8C,EAAU32F,KAAK86C,IAAI47C,IAGxHhxG,EAAQ+pE,UAAY,IACpB/pE,EAAQm5D,OACJz0D,KAAK80D,UACLx5D,EAAQgqE,YAAc4mC,EAAc5mC,YACpChqE,EAAQwuE,UAAYoiC,EAAc96B,YAC9B86B,EAAc5iC,WACdhuE,EAAQk7E,YAAY01B,EAAc5iC,UAClChuE,EAAQmuE,eAAiByiC,EAAcziC,gBAE3CnuE,EAAQy5D,UAEZz5D,EAAQi/E,aAEL+wB,EAhbsB,CAib/B,KACa,a,iBC3ef,UAAO,CAAC,aAYP,KAZoB,EAAF,SAAW1uG,GAW7B,OAAOA,EAAO,cAAe,KAAM,KAAM,CAAE6vG,SAAU,SAAUxnG,KAAK,KACpE,+B,gBCZD,UAAO,CAAC,MAAY,OAAyC,MAAU,OAAc,OAAW,OAAa,OAAY,OAAU,aAmqBlI,KAnqBiJ,WACxItL,EAAMU,EAAiCN,EAAM2mE,EAASgsC,EAAOtmG,EAAQxM,EAAKyT,EAAKY,GAOxF,IAAIrQ,EAAS7D,EAAKoE,MAGdwuG,EAAS,GAKTC,EAAQD,EAAOC,MAAQ,SAAiBp9F,EAAe1M,GAO1D9C,KAAKwP,MAAQA,EACbxP,KAAK8C,IAAMA,GAGZ8pG,EAAM1vG,UAAU+R,SAAW,SAAmB43C,GAK7C,OAAS7mD,KAAK8C,IAAM9C,KAAKwP,OAASq3C,EAAK7mD,KAAKwP,OAG7C,IAAI65B,EAAYsjE,EAAOtjE,UAAY,SAAStpC,GAe3CnC,EAAOoC,KAAMD,GACVhG,EAAKkC,QAAQ+D,KAAK6sG,SACpB7sG,KAAK6sG,MAAQ,IAAID,EAAM5sG,KAAK6sG,MAAM,GAAI7sG,KAAK6sG,MAAM,MAInDxjE,EAAUnsC,UAAY,IAAIwjE,EAE1B3mE,EAAKwF,OAAO8pC,EAAW,CAGtB0B,SAAU,IAgBV+hE,OAAQ,EAKRC,KAAM,GAsCNC,SAAU,EACVC,kBAAmB,EAEnBC,SAAU,WACT,IAAIC,EAAKntG,KAAKgtG,SACbI,EAAKptG,KAAKspC,OAEX,OAAO8jE,EAAKA,EAAGD,GAAMA,GAEtBE,MAAO,SAAmB3iG,EAAgB3K,GAazC,IAAImC,EAAInC,GAAM,GACd,GAAGC,KAAK0K,GACP,GAAGrQ,EAAOizG,gBACTttG,KAAK0K,GAAK9O,MAAMoE,KAAMkC,QAEtB,IACClC,KAAK0K,GAAK9O,MAAMoE,KAAMkC,GACtB,MAAMrH,GAMNmK,QAAQ4rB,MAAM,sCAAuClmB,GACrD1F,QAAQ4rB,MAAM/1B,GAIjB,OAAOmF,MAGRutG,KAAM,SAAkBr4E,EAAoBs4E,GAW3C,IAAIC,EAAKztG,KAET,GADGytG,EAAGC,aAAcD,EAAGE,cACpBH,EACFC,EAAGG,aACHH,EAAGI,QAAUJ,EAAGK,SAAU,EAC1BL,EAAGT,SAAW,OACT,GAAGS,EAAGI,UAAYJ,EAAGK,QAC1B,OAAOL,EAGRA,EAAGJ,MAAM,cAAe,CAACI,EAAGvkG,OAE5B,IAAI6kG,EAAK74E,GAASu4E,EAAGv4E,MACpBi4E,EAAKpzG,EAAK4B,MAAM8xG,EAAI,QAASD,GAE9B,OAAGO,EAAK,GACPN,EAAGC,YAAchiG,WAAWyhG,EAAIY,GACzBN,IAERN,IACOM,IAGRO,MAAO,SAASR,GACf,IAAIC,EAAKztG,KACNytG,EAAGC,aAAcD,EAAGE,cACvBF,EAAGQ,YAAa,IAAIntG,MAAO+6F,UACxB4R,EAAGK,UACLL,EAAGQ,YAAcR,EAAG1iE,SAAW0iE,EAAGT,UAGnCS,EAAGI,SAAU,EACbJ,EAAGK,SAAU,EACb,IAAIvvG,EAAQkvG,EAAGZ,MAAM59F,SAASw+F,EAAGP,YAWjC,OAVIO,EAAGT,WACFS,EAAGR,oBACNQ,EAAGR,kBAAoBQ,EAAGX,QAE3BW,EAAGJ,MAAM,UAAW,CAAC9uG,KAGtBkvG,EAAGJ,MAAM,SAAU,CAAC9uG,IAEpBkvG,EAAGS,SACIT,GAGRjmG,MAAO,WAGN,IAAIimG,EAAKztG,KAGT,OAFGytG,EAAGC,aAAcD,EAAGE,cACvBF,EAAGG,aACCH,EAAGI,SACPJ,EAAGK,SAAU,EACbL,EAAGJ,MAAM,UAAW,CAACI,EAAGZ,MAAM59F,SAASw+F,EAAGP,cACnCO,GAHiBA,GAMzBU,YAAa,SAAqBC,EAAsBC,GAOvD,IAAIZ,EAAKztG,KAKT,OAJAytG,EAAGG,aACHH,EAAGI,QAAUJ,EAAGK,SAAU,EAC1BL,EAAGT,SAAWoB,EACXC,GAAUZ,EAAGF,OACTE,GAGRpjE,KAAM,SAAsBikE,GAK3B,IAAIb,EAAKztG,KAET,OADGytG,EAAGC,aAAcD,EAAGE,cACnBF,EAAGc,QACPd,EAAGG,aACAU,IACFb,EAAGT,SAAW,GAEfS,EAAGJ,MAAM,SAAU,CAACI,EAAGZ,MAAM59F,SAASw+F,EAAGP,cACzCO,EAAGI,QAAUJ,EAAGK,SAAU,EACnBL,GAPgBA,GAUxB7lF,QAAS,WAGR5nB,KAAKqqC,QAGNvZ,OAAQ,WAIP,OAAG9wB,KAAK6tG,QACA7tG,KAAK8tG,QAAU,SAAW,UAE3B,WAGRI,OAAQ,WACP,IAAIT,EAAKztG,KACT,GAAGytG,EAAGI,QAAQ,CACb,IAAIW,GAAO,IAAI1tG,MAAO+6F,UAElBjxD,EAAuB,IAAhB6iE,EAAG1iE,SAAiB,GAAKyjE,EAAOf,EAAGQ,YAAeR,EAAW,SAErE7iE,GAAQ,IACVA,EAAO,GAER6iE,EAAGT,SAAWpiE,EAGX6iE,EAAGnkE,SACLsB,EAAO6iE,EAAGnkE,OAAOsB,IAGlB6iE,EAAGJ,MAAM,YAAa,CAACI,EAAGZ,MAAM59F,SAAS27B,KAEtC6iE,EAAGT,SAAW,EAChBS,EAAGgB,eAEHhB,EAAGI,SAAU,EAEVJ,EAAGX,OAAS,GACdW,EAAGX,SACHW,EAAGF,KAAK,MAAM,KACQ,GAAdE,EAAGX,OACXW,EAAGF,KAAK,MAAM,GAEXE,EAAGR,oBACLQ,EAAGX,OAASW,EAAGR,kBACfQ,EAAGR,kBAAoB,GAGzBQ,EAAGT,SAAW,EACdS,EAAGJ,MAAM,QAAS,CAACI,EAAGvkG,QACrBukG,EAAGX,QAAUW,EAAGG,cAGnB,OAAOH,GAGRE,YAAa,WAGZt4E,aAAar1B,KAAK0tG,oBACX1tG,KAAK0tG,eAMd,IAAIgB,EAAM,EACTC,EAAQ,KACRC,EAAS,CACRC,IAAK,cAGP90G,EAAKwF,OAAO8pC,EAAW,CAEtBolE,YAAa,WACRzuG,KAAKuuG,SACRvuG,KAAKuuG,OAASnoG,EAAO4F,MAAM4iG,EAAQ,MAAO70G,EAAK4B,MAAMqE,KAAM,WAAW,GACtE0uG,KAEGC,IACHA,EAAQG,YAAY/0G,EAAK4B,MAAMizG,EAAQ,OAAQ5uG,KAAK+sG,QAItDa,WAAY,WACR5tG,KAAKuuG,SACPvuG,KAAKuuG,OAAO5mG,SACZ3H,KAAKuuG,OAAS,KACdG,KAEEA,GAAO,IACTK,cAAcJ,GACdA,EAAQ,KACRD,EAAM,MAMT,IAAIM,EACHp1G,EAAI,MAAQ,SAASsP,GAGpB,IAAI+lG,EAAK/lG,EAAK+E,MAGVghG,EAAGz1D,MAAM/+C,QAAsC,QAA5BwT,EAAM0lB,IAAIzqB,EAAM,WACtC+lG,EAAGz1D,MAAQ,SAGb,aAEDmzD,EAAOuC,MAAQ,SAAoBnvG,GAMlCA,EAAKmJ,KAAOmE,EAAIC,KAAKvN,EAAKmJ,MAC1B,IAAIimG,EAAQvxG,EAAO,CAAE6gC,WAAY,IAAM1+B,GACtCN,EAAS0vG,EAAM1wE,WAAWkP,QAAU,GAErCluC,EAAM+P,MAAU,UAAW2/F,EAGtBA,EAAM3/F,MAFV,WACC,OAAQvB,EAAM0lB,IAAIw7E,EAAMjmG,KAAM,YAAY,GAE5CzJ,EAAMqD,IAAMqsG,EAAMrsG,IAElB,IAAIssG,EAAOzC,EAAO0C,gBAAgBF,GAGlC,OAFA/oG,EAAO4F,MAAMojG,EAAM,cAAer1G,EAAK0G,QAAQuuG,EAAeG,EAAMjmG,OAAO,GAEpEkmG,GAcRzC,EAAO2C,OAAS,SAAwBvvG,GAIvC,OAAO4sG,EAAOuC,MAAMtxG,EAAO,CAAEkF,IAAK,GAAK/C,KAGxC4sG,EAAO4C,QAAU,SAAwBxvG,GAIxC,OAAO4sG,EAAOuC,MAAMtxG,EAAO,CAAEkF,IAAK,GAAK/C,KAGxC4sG,EAAO6C,eAAiB,SAAsB3oD,GAG7C,MAAO,GAAQjxC,KAAK86C,KAAK7J,EAAI,KAAOjxC,KAAKwhD,IAAO,GAGjD,IAAIq4C,EAAW,SAAShxE,GAMvB,IAAI,IAAI1hC,KADRiD,KAAK0vG,YAAcjxE,EACNA,EAAW,CACvB,IAAI7rB,EAAO6rB,EAAW1hC,GACnB6V,EAAKpD,iBAAiBk9F,IAExB95F,EAAK+8F,UAAY,IAAIjD,KAuOxB,OAlOA+C,EAASvyG,UAAU+R,SAAW,SAAShO,GACtC,IAAIiS,EAAM,GACV,IAAI,IAAInW,KAAKiD,KAAK0vG,YAAY,CAC7B,IAAI98F,EAAO5S,KAAK0vG,YAAY3yG,GAC3ByS,EAAQoD,EAAKpD,MACXA,aAAiBk9F,EACnBx5F,EAAInW,GAAK2vG,EAAMkD,YAAYpgG,EAAOoD,EAAK9P,IAAK7B,EAAG2R,EAAK+8F,WAAWE,QACtD91G,EAAKkC,QAAQuT,KACtB0D,EAAInW,IAAO6V,EAAK9P,IAAM0M,GAASvO,EAAKuO,GAAc,WAALzS,EAAiB6V,EAAK+kD,OAAS,KAAO,IAGrF,OAAOzkD,GAcRy5F,EAAO0C,gBAAkB,SAAwBtvG,GAyFhD,IAAI8mD,EAAI9mD,EAAKmJ,KAAOmE,EAAIC,KAAKvN,EAAKmJ,MAC9BnJ,EAAKupC,SAASvpC,EAAKupC,OAAS3vC,EAAK61G,gBAErC,IAAIJ,EAAO,IAAI/lE,EAAUtpC,GA+CzB,OA9CAqG,EAAO4F,MAAMojG,EAAM,cAAer1G,EAAK4B,MAAMyzG,GAAM,WAClD,IAAIU,EAAK,GACT,IAAI,IAAI/yG,KAAKiD,KAAKy+B,WAAW,CAKpB,SAAL1hC,GAAqB,UAALA,IAClBiD,KAAKkJ,KAAKi1C,QAAU,SAErB,IAAIvrC,EAAO5S,KAAKy+B,WAAW1hC,GACxBhD,EAAKgF,WAAW6T,KAClBA,EAAOA,EAAKi0C,IAEbj0C,EAAOk9F,EAAG/yG,GAAKa,EAAO,GAAK7D,EAAKiF,SAAS4T,GAAQA,EAAM,CAAE9P,IAAK8P,IAE3D7Y,EAAKgF,WAAW6T,EAAKpD,SACvBoD,EAAKpD,MAAQoD,EAAKpD,MAAMq3C,IAEtB9sD,EAAKgF,WAAW6T,EAAK9P,OACvB8P,EAAK9P,IAAM8P,EAAK9P,IAAI+jD,IAErB,IAAIkpD,EAAWhzG,EAAEoC,cAAc6D,QAAQ,UAAY,EACnD,SAASo7D,EAASl1D,EAAMnM,GAEvB,IAAI4H,EAAI,CAAE80C,OAAQvwC,EAAKwwC,aAAcF,MAAOtwC,EAAK83B,aAAcjkC,GAC/D,YAAS0B,IAANkG,EAAyBA,GAC5BA,EAAIsJ,EAAM0lB,IAAIzqB,EAAMnM,GACP,WAALA,GAAmB4H,EAAKorG,EAAUprG,EAAIohB,WAAWphB,IAErD,QAASiO,EAEH,UAAWA,IACrBA,EAAKpD,MAAQ4uD,EAASvX,EAAG9pD,IAFzB6V,EAAK9P,IAAMs7D,EAASvX,EAAG9pD,GAKrBgzG,GACFn9F,EAAKpD,MAAQ,IAAIk9F,EAAM95F,EAAKpD,OAC5BoD,EAAK9P,IAAM,IAAI4pG,EAAM95F,EAAK9P,MAE1B8P,EAAKpD,MAAc,WAALzS,GAAmB6V,EAAKpD,MAAQuW,WAAWnT,EAAKpD,OAGhExP,KAAK6sG,MAAQ,IAAI4C,EAASK,OACvB,GACJ1pG,EAAO4F,MAAMojG,EAAM,YAAar1G,EAAK4B,MAAMsS,EAAO,MAAOmhG,EAAKlmG,OAAO,GAC9DkmG,GAGRzC,EAAOyC,KAAO,SAA6BlmG,EACxBu1B,EACCsM,EACCzB,EACA0mE,EACD96E,GAsCnB,OAAOy3E,EAAO0C,gBAAgB,CAC7BnmG,KAAMA,EACN6hC,SAAUA,GAAY1B,EAAUnsC,UAAU6tC,SAC1CtM,WAAYA,EACZ6K,OAAQA,EACR0mE,MAAOA,IACLzC,KAAKr4E,GAAS,IAIft7B,EAAI,iBACNgE,EAAOjE,EAAMgzG,GAEbhzG,EAAKs2G,WAAa5mE,GAGZsjE,GACP,+B,6BCnqBD;;;;;;;;;;;;;;AAmBO,MAAMuD,EAAe3xG,GACN,OAAVA,KACe,iBAAVA,GAAuC,mBAAVA,GAEjC4xG,EAAc5xG,GAChBf,MAAMvB,QAAQsC,OAEdA,IAASA,EAAM6xG,OAAOC,WAO1B,MAAMC,EACT,YAAY3pG,EAAS3I,EAAMgjG,GACvBhhG,KAAKwqF,OAAQ,EACbxqF,KAAK2G,QAAUA,EACf3G,KAAKhC,KAAOA,EACZgC,KAAKghG,QAAUA,EACfhhG,KAAKrD,MAAQ,GACb,IAAK,IAAId,EAAI,EAAGA,EAAImlG,EAAQvmG,OAAS,EAAGoB,IACpCmE,KAAKrD,MAAMd,GAAKmE,KAAKuwG,cAM7B,cACI,OAAO,IAAIC,EAAcxwG,MAE7B,YACI,MAAMghG,EAAUhhG,KAAKghG,QACf3iG,EAAI2iG,EAAQvmG,OAAS,EACrBkC,EAAQqD,KAAKrD,MAcnB,GAAU,IAAN0B,GAA0B,KAAf2iG,EAAQ,IAA4B,KAAfA,EAAQ,GAAW,CACnD,MAAMr8F,EAAIhI,EAAM,GAAG4B,MACnB,GAAiB,iBAANoG,EACP,OAAO7F,OAAO6F,GAElB,GAAiB,iBAANA,IAAmBwrG,EAAWxrG,GACrC,OAAOA,EAGf,IAAIib,EAAO,GACX,IAAK,IAAI/jB,EAAI,EAAGA,EAAIwC,EAAGxC,IAAK,CACxB+jB,GAAQohF,EAAQnlG,GAChB,MAAMswB,EAAOxvB,EAAMd,GACnB,QAAa4C,IAAT0tB,EAAoB,CACpB,MAAMxnB,EAAIwnB,EAAK5tB,MACf,GAAI2xG,EAAYvrG,KAAOwrG,EAAWxrG,GAC9Bib,GAAqB,iBAANjb,EAAiBA,EAAI7F,OAAO6F,QAG3C,IAAK,MAAMg3F,KAAKh3F,EACZib,GAAqB,iBAAN+7E,EAAiBA,EAAI78F,OAAO68F,IAM3D,OADA/7E,GAAQohF,EAAQ3iG,GACTuhB,EAEX,SACQ5f,KAAKwqF,QACLxqF,KAAKwqF,OAAQ,EACbxqF,KAAK2G,QAAQ8H,aAAazO,KAAKhC,KAAMgC,KAAKywG,eAO/C,MAAMD,EACT,YAAYE,GACR1wG,KAAKzB,WAAQE,EACbuB,KAAK0wG,UAAYA,EAErB,SAASnyG,GACDA,IAAU,KAAc2xG,EAAY3xG,IAAUA,IAAUyB,KAAKzB,QAC7DyB,KAAKzB,MAAQA,EAIR,YAAYA,KACbyB,KAAK0wG,UAAUlmB,OAAQ,IAInC,SACI,KAAO,YAAYxqF,KAAKzB,QAAQ,CAC5B,MAAMoyG,EAAY3wG,KAAKzB,MACvByB,KAAKzB,MAAQ,IACboyG,EAAU3wG,MAEVA,KAAKzB,QAAU,KAGnByB,KAAK0wG,UAAUE,UAWhB,MAAMC,EACT,YAAY72F,GACRha,KAAKzB,WAAQE,EACbuB,KAAK8wG,oBAAiBryG,EACtBuB,KAAKga,QAAUA,EAOnB,WAAWitE,GACPjnF,KAAK+wG,UAAY9pB,EAAUvsD,YAAY,eACvC16B,KAAKgxG,QAAU/pB,EAAUvsD,YAAY,eASzC,gBAAgBu2E,GACZjxG,KAAK+wG,UAAYE,EACjBjxG,KAAKgxG,QAAUC,EAAIhoD,YAOvB,eAAe98B,GACXA,EAAK+kF,SAASlxG,KAAK+wG,UAAY,eAC/B5kF,EAAK+kF,SAASlxG,KAAKgxG,QAAU,eAOjC,gBAAgBC,GACZA,EAAIC,SAASlxG,KAAK+wG,UAAY,eAC9B/wG,KAAKgxG,QAAUC,EAAID,QACnBC,EAAID,QAAUhxG,KAAK+wG,UAEvB,SAASxyG,GACLyB,KAAK8wG,eAAiBvyG,EAE1B,SACI,GAAkC,OAA9ByB,KAAK+wG,UAAU1nG,WACf,OAEJ,KAAO,YAAYrJ,KAAK8wG,iBAAiB,CACrC,MAAMH,EAAY3wG,KAAK8wG,eACvB9wG,KAAK8wG,eAAiB,IACtBH,EAAU3wG,MAEd,MAAMzB,EAAQyB,KAAK8wG,eACfvyG,IAAU,MAGV2xG,EAAY3xG,GACRA,IAAUyB,KAAKzB,OACfyB,KAAKmxG,aAAa5yG,GAGjBA,aAAiB,IACtByB,KAAKoxG,uBAAuB7yG,GAEvBA,aAAiBgT,KACtBvR,KAAKqxG,aAAa9yG,GAEb4xG,EAAW5xG,GAChByB,KAAKsxG,iBAAiB/yG,GAEjBA,IAAU,KACfyB,KAAKzB,MAAQ,IACbyB,KAAKoyF,SAILpyF,KAAKmxG,aAAa5yG,IAG1B,SAAS2K,GACLlJ,KAAKgxG,QAAQ3nG,WAAW+3B,aAAal4B,EAAMlJ,KAAKgxG,SAEpD,aAAazyG,GACLyB,KAAKzB,QAAUA,IAGnByB,KAAKoyF,QACLpyF,KAAKkxG,SAAS3yG,GACdyB,KAAKzB,MAAQA,GAEjB,aAAaA,GACT,MAAM2K,EAAOlJ,KAAK+wG,UAAU9nD,YAItBsoD,EAAiC,iBAHvChzG,EAAiB,MAATA,EAAgB,GAAKA,GAGqBA,EAAQO,OAAOP,GAC7D2K,IAASlJ,KAAKgxG,QAAQQ,iBACJ,IAAlBtoG,EAAKtI,SAILsI,EAAKqe,KAAOgqF,EAGZvxG,KAAKqxG,aAAaxqG,SAASu/F,eAAemL,IAE9CvxG,KAAKzB,MAAQA,EAEjB,uBAAuBA,GACnB,MAAM24B,EAAWl3B,KAAKga,QAAQy3F,gBAAgBlzG,GAC9C,GAAIyB,KAAKzB,iBAAiB,KACtByB,KAAKzB,MAAM24B,WAAaA,EACxBl3B,KAAKzB,MAAM8hE,OAAO9hE,EAAM0+F,YAEvB,CAKD,MAAM53D,EAAW,IAAI,IAAiBnO,EAAU34B,EAAMmzG,UAAW1xG,KAAKga,SAChE23F,EAAWtsE,EAASusE,SAC1BvsE,EAASg7B,OAAO9hE,EAAM0+F,QACtBj9F,KAAKqxG,aAAaM,GAClB3xG,KAAKzB,MAAQ8mC,GAGrB,iBAAiB9mC,GAURf,MAAMvB,QAAQ+D,KAAKzB,SACpByB,KAAKzB,MAAQ,GACbyB,KAAKoyF,SAIT,MAAMyf,EAAY7xG,KAAKzB,MACvB,IACIuzG,EADAC,EAAY,EAEhB,IAAK,MAAMvuG,KAAQjF,EAEfuzG,EAAWD,EAAUE,QAEJtzG,IAAbqzG,IACAA,EAAW,IAAIjB,EAAS7wG,KAAKga,SAC7B63F,EAAUrxG,KAAKsxG,GACG,IAAdC,EACAD,EAASE,eAAehyG,MAGxB8xG,EAASG,gBAAgBJ,EAAUE,EAAY,KAGvDD,EAASziG,SAAS7L,GAClBsuG,EAASlB,SACTmB,IAEAA,EAAYF,EAAUp3G,SAEtBo3G,EAAUp3G,OAASs3G,EACnB/xG,KAAKoyF,MAAM0f,GAAYA,EAASd,UAGxC,MAAMD,EAAY/wG,KAAK+wG,WACnB,YAAY/wG,KAAK+wG,UAAU1nG,WAAY0nG,EAAU9nD,YAAajpD,KAAKgxG,UAUpE,MAAMkB,EACT,YAAYvrG,EAAS3I,EAAMgjG,GAGvB,GAFAhhG,KAAKzB,WAAQE,EACbuB,KAAK8wG,oBAAiBryG,EACC,IAAnBuiG,EAAQvmG,QAA+B,KAAfumG,EAAQ,IAA4B,KAAfA,EAAQ,GACrD,MAAM,IAAIr4F,MAAM,2DAEpB3I,KAAK2G,QAAUA,EACf3G,KAAKhC,KAAOA,EACZgC,KAAKghG,QAAUA,EAEnB,SAASziG,GACLyB,KAAK8wG,eAAiBvyG,EAE1B,SACI,KAAO,YAAYyB,KAAK8wG,iBAAiB,CACrC,MAAMH,EAAY3wG,KAAK8wG,eACvB9wG,KAAK8wG,eAAiB,IACtBH,EAAU3wG,MAEd,GAAIA,KAAK8wG,iBAAmB,IACxB,OAEJ,MAAMvyG,IAAUyB,KAAK8wG,eACjB9wG,KAAKzB,QAAUA,IACXA,EACAyB,KAAK2G,QAAQ8H,aAAazO,KAAKhC,KAAM,IAGrCgC,KAAK2G,QAAQ6H,gBAAgBxO,KAAKhC,MAEtCgC,KAAKzB,MAAQA,GAEjByB,KAAK8wG,eAAiB,KAYvB,MAAMqB,UAA0B7B,EACnC,YAAY3pG,EAAS3I,EAAMgjG,GACvBoR,MAAMzrG,EAAS3I,EAAMgjG,GACrBhhG,KAAKqyG,OACmB,IAAnBrR,EAAQvmG,QAA+B,KAAfumG,EAAQ,IAA4B,KAAfA,EAAQ,GAE9D,cACI,OAAO,IAAIsR,EAAatyG,MAE5B,YACI,OAAIA,KAAKqyG,OACEryG,KAAKrD,MAAM,GAAG4B,MAElB6zG,MAAM3B,YAEjB,SACQzwG,KAAKwqF,QACLxqF,KAAKwqF,OAAQ,EAEbxqF,KAAK2G,QAAQ3G,KAAKhC,MAAQgC,KAAKywG,cAIpC,MAAM6B,UAAqB9B,GAMlC,IAAI+B,GAAwB,EAG5B,MACI,IACI,MAAMv4F,EAAU,CACZ,cAEI,OADAu4F,GAAwB,GACjB,IAIflsG,OAAO+B,iBAAiB,OAAQ4R,EAASA,GAEzC3T,OAAOmC,oBAAoB,OAAQwR,EAASA,GAEhD,MAAOozF,MAbX,GAiBO,MAAMoF,EACT,YAAY7rG,EAASmB,EAAWm5F,GAC5BjhG,KAAKzB,WAAQE,EACbuB,KAAK8wG,oBAAiBryG,EACtBuB,KAAK2G,QAAUA,EACf3G,KAAK8H,UAAYA,EACjB9H,KAAKihG,aAAeA,EACpBjhG,KAAKyyG,mBAAsB53G,GAAMmF,KAAKyjG,YAAY5oG,GAEtD,SAAS0D,GACLyB,KAAK8wG,eAAiBvyG,EAE1B,SACI,KAAO,YAAYyB,KAAK8wG,iBAAiB,CACrC,MAAMH,EAAY3wG,KAAK8wG,eACvB9wG,KAAK8wG,eAAiB,IACtBH,EAAU3wG,MAEd,GAAIA,KAAK8wG,iBAAmB,IACxB,OAEJ,MAAM4B,EAAc1yG,KAAK8wG,eACnB/kG,EAAc/L,KAAKzB,MACnBo0G,EAAsC,MAAfD,GACV,MAAf3mG,IACK2mG,EAAYrqG,UAAY0D,EAAY1D,SACjCqqG,EAAYhrG,OAASqE,EAAYrE,MACjCgrG,EAAYl9E,UAAYzpB,EAAYypB,SAC1Co9E,EAAmC,MAAfF,IAAuC,MAAf3mG,GAAuB4mG,GACrEA,GACA3yG,KAAK2G,QAAQ6B,oBAAoBxI,KAAK8H,UAAW9H,KAAKyyG,mBAAoBzyG,KAAK6yG,WAE/ED,IACA5yG,KAAK6yG,UAAYC,EAAWJ,GAC5B1yG,KAAK2G,QAAQyB,iBAAiBpI,KAAK8H,UAAW9H,KAAKyyG,mBAAoBzyG,KAAK6yG,YAEhF7yG,KAAKzB,MAAQm0G,EACb1yG,KAAK8wG,eAAiB,IAE1B,YAAYpnG,GACkB,mBAAf1J,KAAKzB,MACZyB,KAAKzB,MAAMb,KAAKsC,KAAKihG,cAAgBjhG,KAAK2G,QAAS+C,GAGnD1J,KAAKzB,MAAMklG,YAAY/5F,IAOnC,MAAMopG,EAAc3wG,GAAMA,IACrBowG,EACG,CAAElqG,QAASlG,EAAEkG,QAASmtB,QAASrzB,EAAEqzB,QAAS9tB,KAAMvF,EAAEuF,MAClDvF,EAAEkG,U,6BC1dV,sCA+CI0qG,EAAsB,WAItB,SAASA,EAAK7+C,GACV,IAAIl6C,EAAUk6C,GAAe,GAK7Bl0D,KAAKgzG,MAAQh5F,EAAQg3D,KAKrBhxE,KAAK2rE,UAAY3xD,EAAQnN,SAKzB7M,KAAK0rE,gBAAkB1xD,EAAQ6mD,eAK/B7gE,KAAK4rE,OAAS5xD,EAAQlN,MAKtB9M,KAAKizG,YAAc,iBAAyBx0G,IAAlBub,EAAQlN,MAAsBkN,EAAQlN,MAAQ,GAKxE9M,KAAKg1D,MAAQh7C,EAAQ4F,KAKrB5f,KAAKkzG,WAAal5F,EAAQy2D,UAK1BzwE,KAAKmzG,cAAgBn5F,EAAQi3D,aAK7BjxE,KAAKw0D,WACgB/1D,IAAjBub,EAAQy6C,KACFz6C,EAAQy6C,KACR,IAAI,UAAK,CAAE8B,MAxFJ,SA6FjBv2D,KAAKozG,eACoB30G,IAArBub,EAAQozD,SAAyBpzD,EAAQozD,SAAWx3D,KAAKwhD,GAAK,EAKlEp3D,KAAKqzG,gBACqB50G,IAAtBub,EAAQw1D,UAA0Bx1D,EAAQw1D,UAAY,IAAcxY,MAKxEh3D,KAAKszG,YAAct5F,EAAQ2pC,SAK3B3jD,KAAK80D,aAA6Br2D,IAAnBub,EAAQ+6C,OAAuB/6C,EAAQ+6C,OAAS,KAK/D/0D,KAAKuzG,cAA+B90G,IAApBub,EAAQuyB,QAAwBvyB,EAAQuyB,QAAU,EAKlEvsC,KAAKwzG,cAA+B/0G,IAApBub,EAAQ2yB,QAAwB3yB,EAAQ2yB,QAAU,EAKlE3sC,KAAKyzG,gBAAkBz5F,EAAQk2D,eACzBl2D,EAAQk2D,eACR,KAKNlwE,KAAK0zG,kBAAoB15F,EAAQm2D,iBAC3Bn2D,EAAQm2D,iBACR,KAKNnwE,KAAK2zG,cAA+Bl1G,IAApBub,EAAQw6B,QAAwB,KAAOx6B,EAAQw6B,QA0UnE,OAnUAu+D,EAAK71G,UAAUwD,MAAQ,WACnB,IAAIoM,EAAQ9M,KAAK+gE,WACjB,OAAO,IAAIgyC,EAAK,CACZ/hC,KAAMhxE,KAAKuxE,UACX/B,UAAWxvE,KAAK2xE,eAChBvE,SAAUptE,KAAK0xE,cACf/tB,SAAU3jD,KAAKyxE,cACf5kE,SAAU7M,KAAKihE,cACfJ,eAAgB7gE,KAAKkhE,oBACrBp0D,MAAOtP,MAAMvB,QAAQ6Q,GAASA,EAAMrP,QAAUqP,EAC9C8S,KAAM5f,KAAKu1D,UACXkb,UAAWzwE,KAAK4xE,eAChBX,aAAcjxE,KAAK6xE,kBACnBpd,KAAMz0D,KAAKo1D,UAAYp1D,KAAKo1D,UAAU10D,aAAUjC,EAChDs2D,OAAQ/0D,KAAKs1D,YAAct1D,KAAKs1D,YAAY50D,aAAUjC,EACtD8tC,QAASvsC,KAAKkyE,aACdvlC,QAAS3sC,KAAKoyE,aACdlC,eAAgBlwE,KAAK8xE,oBACf9xE,KAAK8xE,oBAAoBpxE,aACzBjC,EACN0xE,iBAAkBnwE,KAAK+xE,sBACjB/xE,KAAK+xE,sBAAsBrxE,aAC3BjC,EACN+1C,QAASx0C,KAAKgyE,gBAQtB+gC,EAAK71G,UAAUu0E,YAAc,WACzB,OAAOzxE,KAAKszG,WAOhBP,EAAK71G,UAAUq0E,QAAU,WACrB,OAAOvxE,KAAKgzG,OAOhBD,EAAK71G,UAAUw0E,YAAc,WACzB,OAAO1xE,KAAKozG,WAOhBL,EAAK71G,UAAUy0E,aAAe,WAC1B,OAAO3xE,KAAKqzG,YAOhBN,EAAK71G,UAAUg1E,WAAa,WACxB,OAAOlyE,KAAKuzG,UAOhBR,EAAK71G,UAAUk1E,WAAa,WACxB,OAAOpyE,KAAKwzG,UAOhBT,EAAK71G,UAAUk4D,QAAU,WACrB,OAAOp1D,KAAKw0D,OAOhBu+C,EAAK71G,UAAUgkE,kBAAoB,WAC/B,OAAOlhE,KAAK0rE,iBAOhBqnC,EAAK71G,UAAU+jE,YAAc,WACzB,OAAOjhE,KAAK2rE,WAOhBonC,EAAK71G,UAAU6jE,SAAW,WACtB,OAAO/gE,KAAK4rE,QAMhBmnC,EAAK71G,UAAUuvE,cAAgB,WAC3B,OAAOzsE,KAAKizG,aAOhBF,EAAK71G,UAAUo4D,UAAY,WACvB,OAAOt1D,KAAK80D,SAOhBi+C,EAAK71G,UAAUq4D,QAAU,WACrB,OAAOv1D,KAAKg1D,OAOhB+9C,EAAK71G,UAAU00E,aAAe,WAC1B,OAAO5xE,KAAKkzG,YAOhBH,EAAK71G,UAAU20E,gBAAkB,WAC7B,OAAO7xE,KAAKmzG,eAOhBJ,EAAK71G,UAAU40E,kBAAoB,WAC/B,OAAO9xE,KAAKyzG,iBAOhBV,EAAK71G,UAAU60E,oBAAsB,WACjC,OAAO/xE,KAAK0zG,mBAOhBX,EAAK71G,UAAU80E,WAAa,WACxB,OAAOhyE,KAAK2zG,UAQhBZ,EAAK71G,UAAU02G,YAAc,SAAUjwD,GACnC3jD,KAAKszG,UAAY3vD,GAQrBovD,EAAK71G,UAAU22G,QAAU,SAAU7iC,GAC/BhxE,KAAKgzG,MAAQhiC,GAQjB+hC,EAAK71G,UAAU42G,YAAc,SAAU1mC,GACnCptE,KAAKozG,UAAYhmC,GAQrB2lC,EAAK71G,UAAU62G,WAAa,SAAUxnE,GAClCvsC,KAAKuzG,SAAWhnE,GAQpBwmE,EAAK71G,UAAU82G,WAAa,SAAUrnE,GAClC3sC,KAAKwzG,SAAW7mE,GAQpBomE,EAAK71G,UAAU+2G,aAAe,SAAUzkC,GACpCxvE,KAAKqzG,WAAa7jC,GAQtBujC,EAAK71G,UAAUg3G,kBAAoB,SAAUrzC,GACzC7gE,KAAK0rE,gBAAkB7K,GAQ3BkyC,EAAK71G,UAAU04D,QAAU,SAAUnB,GAC/Bz0D,KAAKw0D,MAAQC,GAQjBs+C,EAAK71G,UAAUi3G,YAAc,SAAUtnG,GACnC7M,KAAK2rE,UAAY9+D,GAQrBkmG,EAAK71G,UAAUk3G,SAAW,SAAUtnG,GAChC9M,KAAK4rE,OAAS9+D,EACd9M,KAAKizG,YAAc,iBAAiBx0G,IAAVqO,EAAsBA,EAAQ,IAQ5DimG,EAAK71G,UAAU44D,UAAY,SAAUf,GACjC/0D,KAAK80D,QAAUC,GAQnBg+C,EAAK71G,UAAU64D,QAAU,SAAUn2C,GAC/B5f,KAAKg1D,MAAQp1C,GAQjBmzF,EAAK71G,UAAUm3G,aAAe,SAAU5jC,GACpCzwE,KAAKkzG,WAAaziC,GAQtBsiC,EAAK71G,UAAUo3G,gBAAkB,SAAUrjC,GACvCjxE,KAAKmzG,cAAgBliC,GAQzB8hC,EAAK71G,UAAUq3G,kBAAoB,SAAU9/C,GACzCz0D,KAAKyzG,gBAAkBh/C,GAQ3Bs+C,EAAK71G,UAAUs3G,oBAAsB,SAAUz/C,GAC3C/0D,KAAK0zG,kBAAoB3+C,GAQ7Bg+C,EAAK71G,UAAUu3G,WAAa,SAAUjgE,GAClCx0C,KAAK2zG,SAAWn/D,GAEbu+D,EAlbc,GAobV,a,8aC/bR,SAASh3G,EAAImxD,EAAY3qD,GAG5B,OAFA2qD,EAAW,KAAO3qD,EAAM,GACxB2qD,EAAW,KAAO3qD,EAAM,GACjB2qD,EASJ,SAASwnD,EAAgBxnD,EAAYogC,GACxC,IAAIrsF,EAAIqsF,EAAOtsB,YACX5Q,EAASk9B,EAAO39B,YAChBoB,EAAKX,EAAO,GACZe,EAAKf,EAAO,GAGZrD,EAFKG,EAAW,GAEN6D,EACV/D,EAFKE,EAAW,GAENiE,EACH,IAAPpE,GAAmB,IAAPC,IACZD,EAAK,GAET,IAAI92C,EAAIL,KAAKu3B,KAAK4f,EAAKA,EAAKC,EAAKA,GAGjC,MAAO,CAFC+D,EAAM9vD,EAAI8rD,EAAM92C,EAChBk7C,EAAMlwD,EAAI+rD,EAAM/2C,GAerB,SAAS0+F,EAAiBznD,EAAY0nD,GACzC,IAaIr0G,EAAGkjB,EAbHstC,EAAK7D,EAAW,GAChBiE,EAAKjE,EAAW,GAChB19C,EAAQolG,EAAQ,GAChB9xG,EAAM8xG,EAAQ,GACd5jD,EAAKxhD,EAAM,GACX4hD,EAAK5hD,EAAM,GACXyhD,EAAKnuD,EAAI,GACTuuD,EAAKvuD,EAAI,GACTiqD,EAAKkE,EAAKD,EACVhE,EAAKqE,EAAKD,EACVyjD,EAAe,IAAP9nD,GAAmB,IAAPC,EAClB,GACCD,GAAMgE,EAAKC,GAAMhE,GAAMmE,EAAKC,KAAQrE,EAAKA,EAAKC,EAAKA,GAAM,GAchE,OAZI6nD,GAAS,GACTt0G,EAAIywD,EACJvtC,EAAI2tC,GAECyjD,GAAS,GACdt0G,EAAI0wD,EACJxtC,EAAI4tC,IAGJ9wD,EAAIywD,EAAK6jD,EAAQ9nD,EACjBtpC,EAAI2tC,EAAKyjD,EAAQ7nD,GAEd,CAACzsD,EAAGkjB,GAwHR,SAASsrC,EAAO+lD,EAAaC,GAEhC,IADA,IAAIhmD,GAAS,EACJlzD,EAAIi5G,EAAYr6G,OAAS,EAAGoB,GAAK,IAAKA,EAC3C,GAAIi5G,EAAYj5G,IAAMk5G,EAAYl5G,GAAI,CAClCkzD,GAAS,EACT,MAGR,OAAOA,EAoBJ,SAASiqB,EAAO9rB,EAAYunB,GAC/B,IAAIugC,EAAWp/F,KAAK46C,IAAIikB,GACpBwgC,EAAWr/F,KAAK86C,IAAI+jB,GACpBl0E,EAAI2sD,EAAW,GAAK8nD,EAAW9nD,EAAW,GAAK+nD,EAC/CxxF,EAAIypC,EAAW,GAAK8nD,EAAW9nD,EAAW,GAAK+nD,EAGnD,OAFA/nD,EAAW,GAAK3sD,EAChB2sD,EAAW,GAAKzpC,EACTypC,EAmBJ,SAASpgD,EAAMogD,EAAYpgD,GAG9B,OAFAogD,EAAW,IAAMpgD,EACjBogD,EAAW,IAAMpgD,EACVogD,EAOJ,SAAS6gC,EAAgBmnB,EAAQC,GACpC,IAAIpoD,EAAKmoD,EAAO,GAAKC,EAAO,GACxBnoD,EAAKkoD,EAAO,GAAKC,EAAO,GAC5B,OAAOpoD,EAAKA,EAAKC,EAAKA,EAOnB,SAAShV,EAASk9D,EAAQC,GAC7B,OAAOv/F,KAAKu3B,KAAK4gD,EAAgBmnB,EAAQC,IAUtC,SAASC,EAAyBloD,EAAY0nD,GACjD,OAAO7mB,EAAgB7gC,EAAYynD,EAAiBznD,EAAY0nD,IA2E7D,SAAS/hD,EAAM3F,EAAY4F,GAC9B,GAAIA,EAAWG,WAAY,CACvB,IAAIC,EAAa,mBAASJ,EAAWE,aACjC6J,EAAaw4C,EAAcnoD,EAAY4F,EAAYI,GACnD2J,IACA3P,EAAW,IAAM2P,EAAa3J,GAGtC,OAAOhG,EAQJ,SAASmoD,EAAcnoD,EAAY4F,EAAYwiD,GAClD,IAAIviD,EAAmBD,EAAWE,YAC9B6J,EAAa,EACjB,GAAI/J,EAAWG,aACV/F,EAAW,GAAK6F,EAAiB,IAAM7F,EAAW,GAAK6F,EAAiB,IAAK,CAC9E,IAAIkK,EAAoBq4C,GAAyB,mBAASviD,GAC1D8J,EAAajnD,KAAKC,OAAOq3C,EAAW,GAAK6F,EAAiB,IAAMkK,GAEpE,OAAOJ,I,iBCzZX,UAAO,CACN,EACA,OACA,OACA,OACA,OACA,MACA,MACA,OACA,aA4MA,KA3ME,EAAF,SAAWO,EAASq7B,EAAc55B,EAAaS,EAAUi2C,EAAS3yG,EAAO7I,EAAMo1B,EAASv1B,GAExF,SAAS47G,EAAcj3G,GACtB,OAAO3E,EAAI,uBAAyB2E,aAAiBy6F,YAGtD,SAASyc,EAAOl3G,GACf,OAAO3E,EAAI,gBAAkB2E,aAAiBw6F,KAgB/C,SAAS2c,EAAen3G,GACvB,OAAOA,GACW,iBAAVA,IANT,SAAoBA,GACnB,OAAO3E,EAAI,oBAAsB2E,aAAiBu6F,SAMhDyB,CAAWh8F,KAhBd,SAAmBA,GAClB,MAAsB,oBAAZo3G,QACFp3G,aAAiBo3G,QAIC,IAAnBp3G,EAAMqC,SAWXg1G,CAAUr3G,KACVk3G,EAAOl3G,KACPi3G,EAAcj3G,GAGjB6+D,EAAQy4C,SAAW,SAAS7uG,EAAQlJ,GACnC,IAAK,IAAIE,KAAQF,EAAQ,CACxB,IAAIg4G,EAAO9uG,EAAOhJ,GACZ+3G,EAAOj4G,EAAOE,GACP,cAATA,GAAwB83G,IAASC,IAChCL,EAAeK,GAC2B,kBAAzC94G,OAAOC,UAAUZ,SAASoB,KAAKq4G,GAClC/uG,EAAOhJ,GAAQ,IAAI8C,KAAKi1G,GACdh8G,EAAKkC,QAAQ85G,GACpB/uG,EAAOhJ,GAAQo/D,EAAQ44C,cAAcD,GAEpCD,GAAwB,iBAATA,EAClB14C,EAAQy4C,SAASC,EAAMC,GAEvB/uG,EAAOhJ,GAAQo/D,EAAQy4C,SAAS,GAAIE,GAItC/uG,EAAOhJ,GAAQ+3G,GAIlB,OAAO/uG,GAGRo2D,EAAQ44C,cAAgB,SAASl4G,GAEhC,IADA,IAAIm4G,EAAc,GACTp6G,EAAI,EAAGwC,EAAIP,EAAOrD,OAAQoB,EAAIwC,EAAGxC,IAAK,CAC9C,IAAIq6G,EAAWp4G,EAAOjC,GACE,iBAAbq6G,EACVD,EAAYz1G,KAAK48D,EAAQy4C,SAAS,GAAIK,IAEtCD,EAAYz1G,KAAK01G,GAInB,OAAOD,GAGR74C,EAAQq9B,WAAa,SAAoB38F,EAAQ2gC,GAChDA,EAAaA,GAAc,GAC3B,IACCzgC,EAAMO,EADHyI,EAASjN,EAAKmG,SAASpC,GAG3B,IAAIE,KAAQF,GACXS,EAAQT,EAAOE,KAEc,iBAAVO,IAClByI,EAAOhJ,GAAQo/D,EAAQq9B,WAAWl8F,EAAOkgC,EAAWzgC,KAGtD,OAAOo/D,EAAQy4C,SAAS7uG,EAAQy3B,IAGjC,IAAIwgC,EAAShiE,OAAOgiE,QAAU,SAAS7hE,GAAM,OAAOA,GACpD,SAAS+4G,EAAU7c,GAClB,OAAOr6B,EAAOq6B,GAEf,SAAS8c,EAAa9c,GACrB,YAAyB76F,IAAlB66F,EAAS/xE,KAAqB+xE,EAAS/xE,KAAO+xE,EAAS15E,KAG/Dw9C,EAAQiC,SAAW,SAAkBi6B,EAAUrqE,EAAQgqE,EAASC,EAASG,EAAgB12F,GACxF,IAAI0zG,EAAM,IAAI/2C,GAAS,SAAS9uC,GAG/B,OAFAvB,GAAUA,EAAOonF,EAAK/c,GAElB9oE,IAAYA,aAAkBioE,GAAmBjoE,aAAkBquC,GAGhEruC,EAFC,IAAIquC,EAAY,mBAAoBy6B,MAK7C+c,EAAI/c,SAAWA,EACf+c,EAAIpd,QAAUA,EACdod,EAAInd,QAAUA,EACdmd,EAAIhd,eAAiBA,EAMrB,IAAIid,EAAkBD,EAAI/uF,KAAK6uF,GAAWjM,WAJ1C,SAAoBt5E,GAEnB,MADAA,EAAM0oE,SAAWA,EACX1oE,KAIJwsC,EAAQx2C,QACV0vF,EAAgBhvF,KACfvtB,EAAK4B,MAAMyhE,EAAQx2C,OAAQ,OAAQ,QACnC7sB,EAAK4B,MAAMyhE,EAAQx2C,OAAQ,OAAQ,UAIrC,IAAI2vF,EAAcD,EAAgBhvF,KAAK8uF,GAOnC/uF,EAAU,IAAI8H,EAClB,IAAK,IAAIvc,KAAQ2jG,EACZA,EAAY1lG,eAAe+B,KAC9ByU,EAAQzU,GAAQ2jG,EAAY3jG,IAmB9B,OAhBAyU,EAAQiyE,SAAWgd,EACnBr3C,EAAO53C,GAIJ1kB,GACF0zG,EAAI/uF,MAAK,SAASgyE,GACjB32F,EAAKjF,KAAK24G,EAAK/c,MACb,SAAS1oE,GACXjuB,EAAKjF,KAAK24G,EAAK/c,EAAU1oE,MAI3BylF,EAAIhvF,QAAUA,EACdgvF,EAAI/uF,KAAOD,EAAQC,KAEZ+uF,GAGRj5C,EAAQ69B,iBAAmB,SAA0Bub,EAAUC,GAC9D7zG,EAAMK,QAAQwzG,GAAS,CAAC,MAAO,OAAQ,MAAO,WAAW,SAAS72G,GACjE42G,GAAqB,WAAX52G,EAAsB,MAAQA,GAAQT,eAAiB,SAAS8G,EAAK+T,GAG9E,OAFAA,EAAUjgB,EAAKmG,SAAS8Z,GAAS,KACzBpa,OAASA,EACV42G,EAASvwG,EAAK+T,QAKxBojD,EAAQo9B,UAAY,SAAmBv0F,EAAK+T,EAAS08F,GACpD,IAAInvF,EAAOvN,EAAQuN,KAClBne,EAAQ4Q,EAAQ5Q,MAuBjB,OArBGme,IAASmvF,IACQ,iBAATnvF,GAAwB3tB,EAAI,iBAAqB47G,EAAcjuF,IAASkuF,EAAOluF,MACxFvN,EAAQuN,KAAOguF,EAAQjV,cAAc/4E,KAIpCne,GACkB,iBAAVA,IACTA,EAAQmsG,EAAQjV,cAAcl3F,IAE5B4Q,EAAQ28F,eACVvtG,IAAUA,EAAQ,IAAM,IAAM,0BAA4B,IAAKtI,OAExDkZ,EAAQ28F,eAChBvtG,EAAQ,0BAA4B,IAAKtI,MAGvCmF,GAAOmD,IACTnD,KAASA,EAAIjD,QAAQ,KAAO,IAAM,KAAOoG,GAGnC,CACNnD,IAAKA,EACL+T,QAASA,EACT2/E,UAAW,SAASC,GAAa,OAAO,QAI1Cx8B,EAAQs8B,YAAc,SAASkd,GAE9B,OADAA,EAAOA,GAAQ,IACC,KAAOA,EAAO,KACpB,MAATA,GACS,OAATA,IACCA,IAEH,+B,gCCrND,kCAQA,IAAIh/C,EAAQ,CAKRiB,QAAS,UAKTg+C,KAAM,KAKNh/C,OAAQ,IAKR+wB,OAAQ,SAKRkuB,YAAa,cAKbC,OAAQ,SAQDr+C,EAAkB,GAE7BA,EAAgBd,EAAMiB,SAAY,EAAIjjD,KAAKwhD,GAAK,QAAW,IAC3DsB,EAAgBd,EAAMi/C,MAAQ,MAC9Bn+C,EAAgBd,EAAMC,QAAU,EAChCa,EAAgBd,EAAMm/C,QAAU,KAAO,KACxB,O,6BCpDf,2PAyBW,IAAIv5G,MAAM,GAKd,SAASZ,IACZ,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAiDpB,SAASi3B,EAAI2Z,EAAWtrC,EAAG8T,EAAG7K,EAAG8K,EAAGpb,EAAGF,GAO1C,OANA6yC,EAAU,GAAKtrC,EACfsrC,EAAU,GAAKx3B,EACfw3B,EAAU,GAAKriC,EACfqiC,EAAU,GAAKv3B,EACfu3B,EAAU,GAAK3yC,EACf2yC,EAAU,GAAK7yC,EACR6yC,EAQJ,SAASwpE,EAAaC,EAAYC,GAOrC,OANAD,EAAW,GAAKC,EAAW,GAC3BD,EAAW,GAAKC,EAAW,GAC3BD,EAAW,GAAKC,EAAW,GAC3BD,EAAW,GAAKC,EAAW,GAC3BD,EAAW,GAAKC,EAAW,GAC3BD,EAAW,GAAKC,EAAW,GACpBD,EAWJ,SAASr7G,EAAM4xC,EAAW0f,GAC7B,IAAI3sD,EAAI2sD,EAAW,GACfzpC,EAAIypC,EAAW,GAGnB,OAFAA,EAAW,GAAK1f,EAAU,GAAKjtC,EAAIitC,EAAU,GAAK/pB,EAAI+pB,EAAU,GAChE0f,EAAW,GAAK1f,EAAU,GAAKjtC,EAAIitC,EAAU,GAAK/pB,EAAI+pB,EAAU,GACzD0f,EA8BJ,SAASiqD,EAAUnwG,EAAQzG,EAAGkjB,GACjC,OAAOoQ,EAAI7sB,EAAQzG,EAAG,EAAG,EAAGkjB,EAAG,EAAG,GAyB/B,SAAS2zF,EAAQ5pE,EAAW6pE,EAAKC,EAAKC,EAAIC,EAAI/iC,EAAOgjC,EAAKC,GAC7D,IAAIhnD,EAAM96C,KAAK86C,IAAI+jB,GACfjkB,EAAM56C,KAAK46C,IAAIikB,GAOnB,OANAjnC,EAAU,GAAK+pE,EAAK/mD,EACpBhjB,EAAU,GAAKgqE,EAAK9mD,EACpBljB,EAAU,IAAM+pE,EAAK7mD,EACrBljB,EAAU,GAAKgqE,EAAKhnD,EACpBhjB,EAAU,GAAKiqE,EAAMF,EAAK/mD,EAAMknD,EAAMH,EAAK7mD,EAAM2mD,EACjD7pE,EAAU,GAAKiqE,EAAMD,EAAK9mD,EAAMgnD,EAAMF,EAAKhnD,EAAM8mD,EAC1C9pE,EAkCJ,SAASmqE,EAAY3wG,EAAQlJ,GAChC,IAqBwBqgG,EArBpByZ,GAqBoBzZ,EArBFrgG,GAsBX,GAAKqgG,EAAI,GAAKA,EAAI,GAAKA,EAAI,GArBtC,YAAe,IAARyZ,EAAW,IAClB,IAAI11G,EAAIpE,EAAO,GACXkY,EAAIlY,EAAO,GACXqN,EAAIrN,EAAO,GACXmY,EAAInY,EAAO,GACXjD,EAAIiD,EAAO,GACXnD,EAAImD,EAAO,GAOf,OANAkJ,EAAO,GAAKiP,EAAI2hG,EAChB5wG,EAAO,IAAMgP,EAAI4hG,EACjB5wG,EAAO,IAAMmE,EAAIysG,EACjB5wG,EAAO,GAAK9E,EAAI01G,EAChB5wG,EAAO,IAAMmE,EAAIxQ,EAAIsb,EAAIpb,GAAK+8G,EAC9B5wG,EAAO,KAAO9E,EAAIvH,EAAIqb,EAAInb,GAAK+8G,EACxB5wG,EAgBJ,SAAS1K,EAAS6hG,GACrB,MAAO,UAAYA,EAAIl+F,KAAK,MAAQ,M,6BCzPxC,2uBA+EW43G,EAAc,kBAKdC,EAAmB,OAKnBC,EAAiB,QAKjBC,EAAkB,GAKlBC,EAAwB,EAKxBC,EAAkB,QAKlBC,EAAoB,GAKpBC,EAAqB,OAKrBC,EAAmB,SAKnBC,EAAsB,SAKtBC,EAAiB,CAAC,EAAG,EAAG,EAAG,GAK3BC,EAAmB,EAInBC,EAAe,IAAI,KASN,IAAI,KACjBC,QAAU,WACjB1zG,QAAQY,KAAK,8BAKjB,IAII+yG,EAmGI9kD,EAvGJ+kD,EAAiB,KAQVC,EAAc,GAKdC,EAAe,WACtB,IAKIz0D,EAAU00D,EAHVC,EAAiB,CAAC,YAAa,SAC/B1lG,EAAM0lG,EAAev+G,OACrBmlB,EAAO,2BAQX,SAASq5F,EAAYC,EAAWC,EAAYC,GAExC,IADA,IAAIC,GAAY,EACPx9G,EAAI,EAAGA,EAAIyX,IAAOzX,EAAG,CAC1B,IAAIy9G,EAAgBN,EAAen9G,GAEnC,GADAk9G,EAAiBQ,EAAiBL,EAAY,IAAMC,EAAlBD,SAA4CI,EAAe15F,GACzFw5F,GAAcE,EAAe,CAC7B,IAAI9/D,EAAQ+/D,EAAiBL,EACzB,IACAC,EAFyBD,SAKzBE,EACA,IACAE,EAAe15F,GAGnBy5F,EAAYA,GAAa7/D,GAASu/D,GAG1C,QAAIM,EAKR,SAASG,IAGL,IAFA,IAAI3tE,GAAO,EACP4tE,EAAQhB,EAAazW,UAChBnmG,EAAI,EAAG8a,EAAK8iG,EAAMh/G,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC5C,IAAIm1E,EAAOyoC,EAAM59G,GACb48G,EAAa9kF,IAAIq9C,GAzCf,MA0CEioC,EAAYr9G,MAAMoE,KAAMgxE,EAAKx0E,MAAM,QACnC,YAAMq8G,GAEND,EAAiB,KACjBD,OAAcl6G,EACdg6G,EAAa5kF,IAAIm9C,EA/CnB,OAkDEynC,EAAa5kF,IAAIm9C,EAAMynC,EAAa9kF,IAAIq9C,GAAQ,GAAG,GACnDnlC,GAAO,IAIfA,IACAkjE,cAAc1qD,GACdA,OAAW5lD,GAGnB,OAAO,SAAUi7G,GACb,IAAI1oC,EAAO,YAAkB0oC,GAC7B,GAAK1oC,EAIL,IADA,IAAI2oC,EAAW3oC,EAAK2oC,SACX99G,EAAI,EAAG8a,EAAKgjG,EAASl/G,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC/C,IAAI+9G,EAASD,EAAS99G,GAClByT,EAAM0hE,EAAK/iE,MAAQ,KAAO+iE,EAAK6oC,OAAS,KAAOD,OACrBn7G,IAA1Bg6G,EAAa9kF,IAAIrkB,KACjBmpG,EAAa5kF,IAAIvkB,EAtEf,KAsE6B,GAC1B2pG,EAAYjoC,EAAK/iE,MAAO+iE,EAAK6oC,OAAQD,KACtCnB,EAAa5kF,IAAIvkB,EAAK,GAAG,QACR7Q,IAAb4lD,IACAA,EAAWyqD,YAAY0K,EAAO,SA3E5B,GAsFfM,EAKA,SAAUJ,GACb,IAAIjgE,EAASo/D,EAAYa,GACzB,GAAcj7G,MAAVg7C,EAAqB,CACrB,GAAI,IAAyB,CACzB,IAAIu3B,EAAO,YAAkB0oC,GACzBK,EAAUC,EAAYN,EAAU,MAIpCjgE,GAHiB3/B,MAAM0lC,OAAOwxB,EAAKiF,aAC7B,IACAz2B,OAAOwxB,EAAKiF,cAGT8jC,EAAQE,wBAA0BF,EAAQG,+BAG9CrmD,KACDA,EAAMhtD,SAAS23B,cAAc,QACzB7E,UAAY,IAChBk6B,EAAI5lD,MAAMkpC,OAAS,eACnB0c,EAAI5lD,MAAMumC,QAAU,eACpBqf,EAAI5lD,MAAM4pC,SAAW,sBACrBgc,EAAI5lD,MAAM8+B,KAAO,uBAErB8mB,EAAI5lD,MAAM+iE,KAAO0oC,EACjB7yG,SAAS4lC,KAAK/R,YAAYm5B,GAC1Bpa,EAASoa,EAAIna,aACb7yC,SAAS4lC,KAAK/K,YAAYmyB,GAE9BglD,EAAYa,GAAYjgE,EAE5B,OAAOA,GAQf,SAASugE,EAAYhpC,EAAMpxD,GAQvB,OAPKg5F,IACDA,EAAiB,YAAsB,EAAG,IAE1C5nC,GAAQ2nC,IACRC,EAAe5nC,KAAOA,EACtB2nC,EAAcC,EAAe5nC,MAE1B4nC,EAAeoB,YAAYp6F,GAO/B,SAAS25F,EAAiBvoC,EAAMpxD,GACnC,OAAOo6F,EAAYhpC,EAAMpxD,GAAM45B,MAS5B,SAASk6B,EAAyB1C,EAAMpxD,EAAMje,GACjD,GAAIie,KAAQje,EACR,OAAOA,EAAMie,GAEjB,IAAI45B,EAAQ+/D,EAAiBvoC,EAAMpxD,GAEnC,OADAje,EAAMie,GAAQ45B,EACPA,EASJ,SAAS2gE,EAAkBnpC,EAAM8E,EAAOE,GAG3C,IAFA,IAAID,EAAWD,EAAMr7E,OACjB++C,EAAQ,EACH39C,EAAI,EAAGA,EAAIk6E,IAAYl6E,EAAG,CAC/B,IAAIu+G,EAAeb,EAAiBvoC,EAAM8E,EAAMj6E,IAChD29C,EAAQ5jC,KAAK8K,IAAI84B,EAAO4gE,GACxBpkC,EAAOx1E,KAAK45G,GAEhB,OAAO5gE,EAQJ,SAAS6gE,EAAe/+G,EAASuR,EAAU0/B,EAASI,GACtC,IAAb9/B,IACAvR,EAAQy9E,UAAUxsC,EAASI,GAC3BrxC,EAAQ09E,OAAOnsE,GACfvR,EAAQy9E,WAAWxsC,GAAUI,IAgB9B,SAAS2tE,EAAiBh/G,EAASkyC,EAAWG,EAAS4sE,EAAchjC,EAASC,EAASpB,EAAG3+D,EAAGlX,EAAGkjB,EAAG3W,GACtGxR,EAAQw9E,OACQ,IAAZnrC,IACAryC,EAAQ2kF,aAAetyC,GAEvBH,GACAlyC,EAAQ4kF,aAAatkF,MAAMN,EAASkyC,GAEnB,EAAe2oC,qBAEhC76E,EAAQy9E,UAAUx4E,EAAGkjB,GACrBnoB,EAAQwR,MAAMA,EAAM,GAAIA,EAAM,IAqBtC,SAAkCupE,EAAO/6E,GAErC,IADA,IAAI66E,EAAsBE,EAAMF,oBACvBt6E,EAAI,EAAG8a,EAAKw/D,EAAoB17E,OAAQoB,EAAI8a,EAAI9a,GAAK,EACtD2B,MAAMvB,QAAQk6E,EAAoBt6E,EAAI,IACtCP,EAAQ66E,EAAoBt6E,IAAID,MAAMN,EAAS66E,EAAoBt6E,EAAI,IAGvEP,EAAQ66E,EAAoBt6E,IAAMs6E,EAAoBt6E,EAAI,GA3B9D2+G,CAA8C,EAAgBl/G,IAEzDwR,EAAM,GAAK,GAAKA,EAAM,GAAK,GAEhCxR,EAAQy9E,UAAUx4E,EAAGkjB,GACrBnoB,EAAQwR,MAAMA,EAAM,GAAIA,EAAM,IAC9BxR,EAAQ6kF,UAC2D,EAAgB5I,EAASC,EAASpB,EAAG3+D,EAAG,EAAG,EAAG2+D,EAAG3+D,IAIpHnc,EAAQ6kF,UAC2D,EAAgB5I,EAASC,EAASpB,EAAG3+D,EAAGlX,EAAGkjB,EAAG2yD,EAAItpE,EAAM,GAAI2K,EAAI3K,EAAM,IAE7IxR,EAAQ29E,UAqBZ,IAAIwhC,EAA8B,KAK3B,SAASC,EAAsBltE,GAClC,OAAI,IACO,YAASA,IAGXitE,IACDA,EAA8B,YAAsB,EAAG,GAAG/hC,QAE9D+hC,EAA4BxsG,MAAMu/B,UAAY,YAASA,GAChDitE,EAA4BxsG,MAAMu/B,a,gBChbjD,UAAO,CACN,aA+EA,KA5EE,EAAF,SAAWmtE,GA2EX,OAAOA,GACP,+B,gBChFD,UAAO,CACN,OACA,OACA,OACA,MACA,OACA,yCAsGA,KArGE,EAAF,SAAW/hB,EAAMgiB,EAAqB/7C,EAAaj8D,EAAOsK,EAAKjS,GAG/D,IAAI4/G,EAAiB,KACpBC,EAAY,GAEb,SAASC,IAQR,IAHA,IAGelhB,EAHXtuD,GAAO,IAAKzqC,KAGRjF,EAAI,EAAQA,EAAIi/G,EAAUrgH,SAAWo/F,EAAMihB,EAAUj/G,IAAKA,IAAI,CACrE,IAAIy9F,EAAWO,EAAIP,SAClBt/E,EAAUs/E,EAASt/E,QAChB6/E,EAAIh6B,YAAcg6B,EAAIh6B,cAAkBg6B,EAAIZ,UAAYY,EAAIZ,QAAQK,IACvEwhB,EAAUh/G,OAAOD,IAAK,GACtB68F,EAAMsiB,WAAatiB,EAAMsiB,aACjBnhB,EAAIX,SAAWW,EAAIX,QAAQI,IACnCwhB,EAAUh/G,OAAOD,IAAK,GACtBg+F,EAAIR,eAAeC,GACnBZ,EAAMsiB,WAAatiB,EAAMsiB,aACjBnhB,EAAIohB,WAETphB,EAAIohB,WAAajhG,EAAQkhG,SAAW,GAAK3vE,IAC3CuvE,EAAUh/G,OAAOD,IAAK,GAEtBg+F,EAAI5qE,OAAO,IAAI2rF,EAAoB,mBAAoBthB,IACvDZ,EAAMsiB,WAAatiB,EAAMsiB,aAK5BtiB,EAAMyiB,aAAeziB,EAAMyiB,YAAYthB,GAEnCihB,EAAUrgH,SACbs0G,cAAc8L,GACdA,EAAiB,MAInB,SAASniB,EAAMmB,GAgBXA,EAAIP,SAASt/E,QAAQkhG,UACvBrhB,EAAIohB,WAAa,IAAKn6G,MAGpB+4F,EAAIz5B,gBAKP06C,EAAUt6G,KAAKq5F,GACXghB,IACHA,EAAiB/L,YAAYiM,EAAe,KAK1ClhB,EAAIP,SAASt/E,QAAQqgF,MACvB0gB,KAwBF,OApBAriB,EAAM0iB,UAAY,WAGjB,IACCx4G,EAAMK,QAAQ63G,GAAW,SAASjhB,GACjC,IACCA,EAAI5qE,OAAO,IAAI4vC,EAAY,2BAC3B,MAAMhkE,QAER,MAAMA,MAGLqS,GAAOjS,GAAMiS,EAAIxG,IAAIgC,aAGvBzN,EAAGiS,EAAIpQ,OAAQ,UAAU,WACxB47F,EAAM0iB,eAID1iB,GACP,+B,0CC5GD,wEACQjwD,EADR,2BAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAgCnFwyE,EAA6B,SAAUjyE,GAKvC,SAASiyE,EAAYnnD,GACjB,IAAIj8C,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAUjC,OATIk0D,GAAeA,EAAYuvC,cAC3BxrF,EAAMwrF,YAAcvvC,EAAYuvC,aAMpCxrF,EAAMqjG,KAAO,KACbrjG,EAAMsjG,WAAU,GACTtjG,EA8CX,OA7DAywB,EAAU2yE,EAAajyE,GAuBvBiyE,EAAYn+G,UAAUs+G,UAAY,WAC9B,OAA+Bx7G,KAAK2zB,IAAI,IAAoB8nF,SAOhEJ,EAAYn+G,UAAUw+G,OAAS,WAC3B,OAAO17G,KAAKs7G,MAQhBD,EAAYn+G,UAAUumG,YAAc,SAAUD,GAC1C,OAAO,GAQX6X,EAAYn+G,UAAUq+G,UAAY,SAAUI,GACxC37G,KAAK6zB,IAAI,IAAoB4nF,OAAQE,IAQzCN,EAAYn+G,UAAU0+G,OAAS,SAAUr6G,GACrCvB,KAAKs7G,KAAO/5G,GAET85G,EA9DqB,CA+D9B,KAMK,SAASQ,EAAIC,EAAMv5G,EAAOw5G,GAC7B,IAAIC,EAAgBF,EAAKG,oBACzB,GAAID,EAAe,CACf,IAAI5rD,EAAS,CAAC4rD,EAAc,GAAKz5G,EAAM,GAAIy5G,EAAc,GAAKz5G,EAAM,IACpEu5G,EAAKI,gBAAgB,CACjBnxE,cAA2BtsC,IAAjBs9G,EAA6BA,EAAe,IACtDzyE,OAAQ,IACR8mB,OAAQ0rD,EAAKK,qBAAqB/rD,MAUvC,SAASgsD,EAAYN,EAAMv5G,EAAO85G,EAAYN,GACjD,IAAIO,EAAcR,EAAKS,UACvB,QAAoB99G,IAAhB69G,EAAJ,CAGA,IAAIE,EAAUV,EAAKW,mBAAmBH,EAAc/5G,GAChDm6G,EAAgBZ,EAAKa,qBAAqBH,GAC1CV,EAAKc,gBACLd,EAAKe,mBAETf,EAAK9xE,QAAQ,CACTqmB,WAAYqsD,EACZxwC,OAAQmwC,EACRtxE,cAA2BtsC,IAAjBs9G,EAA6BA,EAAe,IACtDzyE,OAAQ,OAGD,O,8BCjJf;;;;;;;;;;;;;;AAiBO,MAAMwzE,EAAS,SAASh+G,OAAO8W,KAAKsjB,UAAUz7B,MAAM,OAK9Cs/G,EAAa,UAAOD,UACpBE,EAAc,IAAIh8G,OAAO,GAAG87G,KAAUC,KAItCE,EAAuB,QAI7B,MAAMC,EACT,YAAY96G,EAAQuE,GAChB3G,KAAKrD,MAAQ,GACbqD,KAAK2G,QAAUA,EACf,MAAMw2G,EAAgB,GAChB/rG,EAAQ,GAERgsG,EAASv2G,SAASw2G,iBAAiB12G,EAAQ22G,QAAS,IAAkD,MAAM,GAIlH,IAAIC,EAAgB,EAChBl7G,GAAS,EACT0vG,EAAY,EAChB,MAAM,QAAE/Q,EAAS/D,QAAQ,OAAExiG,IAAa2H,EACxC,KAAO2vG,EAAYt3G,GAAQ,CACvB,MAAMyO,EAAOk0G,EAAOI,WACpB,GAAa,OAATt0G,GASJ,GADA7G,IACsB,IAAlB6G,EAAKtI,SAAwC,CAC7C,GAAIsI,EAAKu0G,gBAAiB,CACtB,MAAM/vG,EAAaxE,EAAKwE,YAClB,OAAEjT,GAAWiT,EAMnB,IAAI03F,EAAQ,EACZ,IAAK,IAAIvpG,EAAI,EAAGA,EAAIpB,EAAQoB,IACpB6hH,EAAShwG,EAAW7R,GAAGmC,KAAMi/G,IAC7B7X,IAGR,KAAOA,KAAU,GAAG,CAGhB,MAAMuY,EAAgB3c,EAAQ+Q,GAExB/zG,EAAO4/G,EAAuBxsF,KAAKusF,GAAe,GAMlDE,EAAsB7/G,EAAKmB,cAAgB89G,EAC3Ca,EAAiB50G,EAAKsxB,aAAaqjF,GACzC30G,EAAKsF,gBAAgBqvG,GACrB,MAAME,EAAUD,EAAethH,MAAMwgH,GACrCh9G,KAAKrD,MAAM6D,KAAK,CAAEyG,KAAM,YAAa5E,QAAOrE,OAAMgjG,QAAS+c,IAC3DhM,GAAagM,EAAQtjH,OAAS,GAGjB,aAAjByO,EAAKhK,UACLkS,EAAM5Q,KAAK0I,GACXk0G,EAAOY,YAAc90G,EAAKo0G,cAG7B,GAAsB,IAAlBp0G,EAAKtI,SAAqC,CAC/C,MAAM2mB,EAAOre,EAAKqe,KAClB,GAAIA,EAAKvkB,QAAQ85G,IAAW,EAAG,CAC3B,MAAM5rG,EAAShI,EAAKG,WACd23F,EAAUz5E,EAAK/qB,MAAMwgH,GACrBiB,EAAYjd,EAAQvmG,OAAS,EAGnC,IAAK,IAAIoB,EAAI,EAAGA,EAAIoiH,EAAWpiH,IAAK,CAChC,IAAIk/E,EACA98E,EAAI+iG,EAAQnlG,GAChB,GAAU,KAANoC,EACA88E,EAASmjC,QAER,CACD,MAAMr6G,EAAQ+5G,EAAuBxsF,KAAKnzB,GAC5B,OAAV4F,GAAkB65G,EAAS75G,EAAM,GAAIo5G,KACrCh/G,EAAIA,EAAER,MAAM,EAAGoG,EAAMxB,OAASwB,EAAM,GAChCA,EAAM,GAAGpG,MAAM,GAAIw/G,EAAqBxiH,QAAUoJ,EAAM,IAEhEk3E,EAASl0E,SAASu/F,eAAenoG,GAErCiT,EAAOkwB,aAAa25C,EAAQ7xE,GAC5BlJ,KAAKrD,MAAM6D,KAAK,CAAEyG,KAAM,OAAQ5E,QAASA,IAIlB,KAAvB2+F,EAAQid,IACR/sG,EAAOkwB,aAAa88E,IAAgBh1G,GACpCi0G,EAAc38G,KAAK0I,IAGnBA,EAAKqe,KAAOy5E,EAAQid,GAGxBlM,GAAakM,QAGhB,GAAsB,IAAlB/0G,EAAKtI,SACV,GAAIsI,EAAKqe,OAASu1F,EAAQ,CACtB,MAAM5rG,EAAShI,EAAKG,WAKS,OAAzBH,EAAKsoG,iBAA4BnvG,IAAUk7G,IAC3Cl7G,IACA6O,EAAOkwB,aAAa88E,IAAgBh1G,IAExCq0G,EAAgBl7G,EAChBrC,KAAKrD,MAAM6D,KAAK,CAAEyG,KAAM,OAAQ5E,UAGP,OAArB6G,EAAK+/C,YACL//C,EAAKqe,KAAO,IAGZ41F,EAAc38G,KAAK0I,GACnB7G,KAEJ0vG,QAEC,CACD,IAAIl2G,GAAK,EACT,MAAmD,KAA3CA,EAAIqN,EAAKqe,KAAKvkB,QAAQ85G,EAAQjhH,EAAI,KAKtCmE,KAAKrD,MAAM6D,KAAK,CAAEyG,KAAM,OAAQ5E,OAAQ,IACxC0vG,UAjHRqL,EAAOY,YAAc5sG,EAAM5S,MAuHnC,IAAK,MAAMqoD,KAAKs2D,EACZt2D,EAAEx9C,WAAWq4B,YAAYmlB,IAIrC,MAAM62D,EAAW,CAACt8G,EAAK+8G,KACnB,MAAM97G,EAAQjB,EAAI3G,OAAS0jH,EAAO1jH,OAClC,OAAO4H,GAAS,GAAKjB,EAAI3D,MAAM4E,KAAW87G,GAEjCC,EAAwBjyF,IAAyB,IAAhBA,EAAK9pB,MAGtC67G,EAAe,IAAMr3G,SAASw3G,cAAc,IA2B5CT,EAEb,8I,+BC/Me,KAMX3rB,IAAK,MAMLC,OAAQ,W,6BClBZ,aAQe,KAOX+W,YAAa,cAMbpR,MAAO,IAAUA,MAMjBC,SAAU,IAAUA,SAMpB8L,YAAa,cAObK,YAAa,cACbF,YAAa,cACbF,UAAW,YACXya,YAAa,cACbC,WAAY,aACZC,aAAc,eACdC,aAAc,eACdC,cAAe,kB,6BCrCZ,SAASC,EAAkBlwD,EAAiBpxD,EAAQ6vD,EAAYwB,GACnE,IAAK,IAAI7yD,EAAI,EAAG8a,EAAKu2C,EAAWzyD,OAAQoB,EAAI8a,IAAM9a,EAC9C4yD,EAAgBpxD,KAAY6vD,EAAWrxD,GAE3C,OAAOwB,EASJ,SAASuhH,EAAmBnwD,EAAiBpxD,EAAQmvD,EAAakC,GACrE,IAAK,IAAI7yD,EAAI,EAAG8a,EAAK61C,EAAY/xD,OAAQoB,EAAI8a,IAAM9a,EAE/C,IADA,IAAIqxD,EAAaV,EAAY3wD,GACpBya,EAAI,EAAGA,EAAIo4C,IAAUp4C,EAC1Bm4C,EAAgBpxD,KAAY6vD,EAAW52C,GAG/C,OAAOjZ,EAUJ,SAASwhH,EAAwBpwD,EAAiBpxD,EAAQyhH,EAAcpwD,EAAQu8B,GAGnF,IAFA,IAAIxjB,EAAOwjB,GAAsB,GAC7BpvF,EAAI,EACCya,EAAI,EAAG6nE,EAAK2gC,EAAarkH,OAAQ6b,EAAI6nE,IAAM7nE,EAAG,CACnD,IAAIxT,EAAM87G,EAAmBnwD,EAAiBpxD,EAAQyhH,EAAaxoG,GAAIo4C,GACvE+Y,EAAK5rE,KAAOiH,EACZzF,EAASyF,EAGb,OADA2kE,EAAKhtE,OAASoB,EACP4rE,EAUJ,SAASs3C,EAA6BtwD,EAAiBpxD,EAAQ2hH,EAAetwD,EAAQuwD,GAGzF,IAFA,IAAI92C,EAAQ82C,GAAwB,GAChCpjH,EAAI,EACCya,EAAI,EAAG6nE,EAAK6gC,EAAcvkH,OAAQ6b,EAAI6nE,IAAM7nE,EAAG,CACpD,IAAImxD,EAAOo3C,EAAwBpwD,EAAiBpxD,EAAQ2hH,EAAc1oG,GAAIo4C,EAAQyZ,EAAMtsE,IAC5FssE,EAAMtsE,KAAO4rE,EACbpqE,EAASoqE,EAAKA,EAAKhtE,OAAS,GAGhC,OADA0tE,EAAM1tE,OAASoB,EACRssE,EApEX,yI,6BCAA,sCACQ1/B,EADR,6CAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAmBnFq2E,EAAgC,SAAU91E,GAE1C,SAAS81E,IACL,IAAIjnG,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAgBjC,OAXAiY,EAAM6zE,OAAS,IAAegB,GAK9B70E,EAAMy2C,OAAS,EAKfz2C,EAAMw2C,gBAAkB,KACjBx2C,EAkNX,OApOAywB,EAAUw2E,EAAgB91E,GAyB1B81E,EAAehiH,UAAU8wF,cAAgB,SAAUvhC,GAC/C,OAAO,4CAAkCzsD,KAAKyuD,gBAAiB,EAAGzuD,KAAKyuD,gBAAgBh0D,OAAQuF,KAAK0uD,OAAQjC,IAMhHyyD,EAAehiH,UAAUq5C,eAAiB,WACtC,OAAO,sBAOX2oE,EAAehiH,UAAUiiH,mBAAqB,WAC1C,OAAOn/G,KAAKyuD,gBAAgBhxD,MAAM,EAAGuC,KAAK0uD,SAK9CwwD,EAAehiH,UAAUqrE,mBAAqB,WAC1C,OAAOvoE,KAAKyuD,iBAOhBywD,EAAehiH,UAAUkiH,kBAAoB,WACzC,OAAOp/G,KAAKyuD,gBAAgBhxD,MAAMuC,KAAKyuD,gBAAgBh0D,OAASuF,KAAK0uD,SAOzEwwD,EAAehiH,UAAUwwF,UAAY,WACjC,OAAO1tF,KAAK8rF,QAOhBozB,EAAehiH,UAAUmiH,sBAAwB,SAAU17B,GAOvD,GANI3jF,KAAKs/G,6BAA+Bt/G,KAAK+pF,gBACzC/pF,KAAKu/G,yCAA2C,EAChDv/G,KAAKs/G,2BAA6Bt/G,KAAK+pF,eAIvCpG,EAAmB,GACgC,IAAlD3jF,KAAKu/G,0CACF57B,GAAoB3jF,KAAKu/G,yCAC7B,OAAOv/G,KAEX,IAAImkF,EAAqBnkF,KAAK2sF,8BAA8BhJ,GAE5D,OADgCQ,EAAmB5b,qBACrB9tE,OAASuF,KAAKyuD,gBAAgBh0D,OACjD0pF,GASPnkF,KAAKu/G,yCAA2C57B,EACzC3jF,OAQfk/G,EAAehiH,UAAUyvF,8BAAgC,SAAUhJ,GAC/D,OAAO3jF,MAKXk/G,EAAehiH,UAAU6qE,UAAY,WACjC,OAAO/nE,KAAK0uD,QAMhBwwD,EAAehiH,UAAUuuF,mBAAqB,SAAUK,EAAQr9B,GAC5DzuD,KAAK0uD,OAAS8wD,EAAmB1zB,GACjC9rF,KAAK8rF,OAASA,EACd9rF,KAAKyuD,gBAAkBA,GAO3BywD,EAAehiH,UAAUwuF,eAAiB,SAAUl/B,EAAaw+B,GAC7D,sBAQJk0B,EAAehiH,UAAU8vF,UAAY,SAAUlB,EAAQt/B,EAAaizD,GAEhE,IAAI/wD,EACJ,GAAIo9B,EACAp9B,EAAS8wD,EAAmB1zB,OAE3B,CACD,IAAK,IAAIjwF,EAAI,EAAGA,EAAI4jH,IAAW5jH,EAAG,CAC9B,GAA2B,IAAvB2wD,EAAY/xD,OAGZ,OAFAuF,KAAK8rF,OAAS,IAAegB,QAC7B9sF,KAAK0uD,OAAS,GAIdlC,EAAoCA,EAAY,GAIxDs/B,EAiFZ,SAA4Bp9B,GACxB,IAAIo9B,EACU,GAAVp9B,EACAo9B,EAAS,IAAegB,GAET,GAAVp+B,EACLo9B,EAAS,IAAe4zB,IAET,GAAVhxD,IACLo9B,EAAS,IAAe6zB,MAE5B,OAA4D,EA5F3CC,CADTlxD,EAASlC,EAAY/xD,QAGzBuF,KAAK8rF,OAASA,EACd9rF,KAAK0uD,OAASA,GAWlBwwD,EAAehiH,UAAUq1D,eAAiB,SAAUC,GAC5CxyD,KAAKyuD,kBACL+D,EAAYxyD,KAAKyuD,gBAAiBzuD,KAAKyuD,gBAAiBzuD,KAAK0uD,QAC7D1uD,KAAKy+D,YAUbygD,EAAehiH,UAAU87E,OAAS,SAAUvE,EAAOvI,GAC/C,IAAIzd,EAAkBzuD,KAAKuoE,qBAC3B,GAAI9Z,EAAiB,CACjB,IAAIC,EAAS1uD,KAAK+nE,YAClB,YAAOtZ,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,EAAQ+lB,EAAOvI,EAAQzd,GAC1EzuD,KAAKy+D,YAYbygD,EAAehiH,UAAU4P,MAAQ,SAAUyqG,EAAIsI,EAAQxD,GACnD,IAAI7E,EAAKqI,OACEphH,IAAP+4G,IACAA,EAAKD,GAET,IAAIrrC,EAASmwC,EACRnwC,IACDA,EAAS,oBAAUlsE,KAAKgzD,cAE5B,IAAIvE,EAAkBzuD,KAAKuoE,qBAC3B,GAAI9Z,EAAiB,CACjB,IAAIC,EAAS1uD,KAAK+nE,YAClB,YAAMtZ,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,EAAQ6oD,EAAIC,EAAItrC,EAAQzd,GAC1EzuD,KAAKy+D,YAUbygD,EAAehiH,UAAU67E,UAAY,SAAUhnB,EAAQC,GACnD,IAAIvD,EAAkBzuD,KAAKuoE,qBAC3B,GAAI9Z,EAAiB,CACjB,IAAIC,EAAS1uD,KAAK+nE,YAClB,YAAUtZ,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,EAAQqD,EAAQC,EAAQvD,GAC9EzuD,KAAKy+D,YAGNygD,EArOwB,CAsOjC,KAsBK,SAASM,EAAmB1zB,GAC/B,IAAIp9B,EAUJ,OATIo9B,GAAU,IAAegB,GACzBp+B,EAAS,EAEJo9B,GAAU,IAAe4zB,KAAO5zB,GAAU,IAAeQ,IAC9D59B,EAAS,EAEJo9B,GAAU,IAAe6zB,OAC9BjxD,EAAS,GAEgB,EAQ1B,SAASoxD,EAAgBC,EAAgBvyE,EAAWwyE,GACvD,IAAIvxD,EAAkBsxD,EAAex3C,qBACrC,GAAK9Z,EAGA,CACD,IAAIC,EAASqxD,EAAeh4C,YAC5B,OAAO,YAAYtZ,EAAiB,EAAGA,EAAgBh0D,OAAQi0D,EAAQlhB,EAAWwyE,GAJlF,OAAO,KAOA,O,+BCtTfz8G,EAAO65D,QAAU,SAAS75D,GAoBzB,OAnBKA,EAAO08G,kBACX18G,EAAO28G,UAAY,aACnB38G,EAAOwC,MAAQ,GAEVxC,EAAO4F,WAAU5F,EAAO4F,SAAW,IACxClM,OAAOy2B,eAAenwB,EAAQ,SAAU,CACvCuwB,YAAY,EACZH,IAAK,WACJ,OAAOpwB,EAAOlF,KAGhBpB,OAAOy2B,eAAenwB,EAAQ,KAAM,CACnCuwB,YAAY,EACZH,IAAK,WACJ,OAAOpwB,EAAO1H,KAGhB0H,EAAO08G,gBAAkB,GAEnB18G,I,6BCpBR,sCACQklC,EADR,2BAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAoBnFs3E,EAA4B,SAAU/2E,GAEtC,SAAS+2E,IACL,IAAIloG,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAMjC,OADAiY,EAAMmoG,UAAY,EACXnoG,EAqFX,OA7FAywB,EAAUy3E,EAAY/2E,GActB+2E,EAAWjjH,UAAUuhE,QAAU,aACzBz+D,KAAKogH,UACPpgH,KAAKqK,cAAc,IAAUq0D,SAQjCyhD,EAAWjjH,UAAU6sF,YAAc,WAC/B,OAAO/pF,KAAKogH,WAWhBD,EAAWjjH,UAAUjC,GAAK,SAAUgM,EAAMC,GACtC,GAAI1J,MAAMvB,QAAQgL,GAAO,CAGrB,IAFA,IAAIqM,EAAMrM,EAAKxM,OACX8U,EAAO,IAAI/R,MAAM8V,GACZzX,EAAI,EAAGA,EAAIyX,IAAOzX,EACvB0T,EAAK1T,GAAK,YAAOmE,KAAMiH,EAAKpL,GAAIqL,GAEpC,OAAOqI,EAGP,OAAO,YAAOvP,KAA4B,EAAQkH,IAY1Di5G,EAAWjjH,UAAUwK,KAAO,SAAUT,EAAMC,GACxC,IAAIoI,EACJ,GAAI9R,MAAMvB,QAAQgL,GAAO,CACrB,IAAIqM,EAAMrM,EAAKxM,OACf6U,EAAM,IAAI9R,MAAM8V,GAChB,IAAK,IAAIzX,EAAI,EAAGA,EAAIyX,IAAOzX,EACvByT,EAAIzT,GAAK,YAAWmE,KAAMiH,EAAKpL,GAAIqL,QAIvCoI,EAAM,YAAWtP,KAA4B,EAAQkH,GAGzD,OADsB,EAAWm5G,OAAS/wG,EACnCA,GAQX6wG,EAAWjjH,UAAUojH,GAAK,SAAUr5G,EAAMC,GACtC,IAAIoI,EAA4B,EAAW+wG,OAC3C,GAAI/wG,EACAixG,EAAQjxG,QAEP,GAAI9R,MAAMvB,QAAQgL,GACnB,IAAK,IAAIpL,EAAI,EAAG8a,EAAK1P,EAAKxM,OAAQoB,EAAI8a,IAAM9a,EACxCmE,KAAKwI,oBAAoBvB,EAAKpL,GAAIqL,QAItClH,KAAKwI,oBAAoBvB,EAAMC,IAGhCi5G,EA9FoB,CA+F7B,KAOK,SAASI,EAAQjxG,GACpB,GAAI9R,MAAMvB,QAAQqT,GACd,IAAK,IAAIzT,EAAI,EAAG8a,EAAKrH,EAAI7U,OAAQoB,EAAI8a,IAAM9a,EACvC,YAAcyT,EAAIzT,SAItB,YAA6D,GAGtD,O,6BC9If,4MAmBO,IAAI2kH,EAAe,YAOfC,EAAmB,gBAOnBC,EAAqB,kBAcrBC,EAAgB,aAQhBC,EAAkB,eAKzBC,EAAY,IAAI7/G,OAAO,CACvB,qDACA,4CACA,8DACA,gDACA,8EACA,gEACA,mCACFf,KAAK,IAAK,KACR6gH,EAAsB,CACtB,QACA,UACA,SACA,OACA,aACA,UAQOC,EAAoB,SAAUrH,GACrC,IAAI71G,EAAQ61G,EAAS71G,MAAMg9G,GAC3B,IAAKh9G,EACD,OAAO,KASX,IAPA,IAAIoK,EAAsC,CACtCgoE,WAAY,SACZ3lB,KAAM,QACNriD,MAAO,SACP4rG,OAAQ,SACRmH,QAAS,UAEJnlH,EAAI,EAAG8a,EAAKmqG,EAAoBrmH,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC1D,IAAI0C,EAAQsF,EAAMhI,EAAI,QACR4C,IAAVF,IACA0P,EAAM6yG,EAAoBjlH,IAAM0C,GAIxC,OADA0P,EAAM0rG,SAAW1rG,EAAM2rG,OAAOp9G,MAAM,QAC7ByR,I,6BC7FJ,SAASw7B,EAAOkyD,GACnB,OAAO/lF,KAAKqrG,IAAItlB,EAAG,GAQhB,SAASjyD,EAAQiyD,GACpB,OAAO,EAAIlyD,EAAO,EAAIkyD,GAQnB,SAASulB,EAASvlB,GACrB,OAAO,EAAIA,EAAIA,EAAI,EAAIA,EAAIA,EAAIA,EAQ5B,SAASnyD,EAAOmyD,GACnB,OAAOA,EArCX,yI,6BCAA,8OAGA,IAAIwlB,EAA0B,oBAAdruF,gBAA4D,IAAxBA,UAAUF,UACxDE,UAAUF,UAAUzzB,cACpB,GAKKiiH,GAAqC,IAA3BD,EAAGn+G,QAAQ,WAUrBovB,IALmC,IAA1B+uF,EAAGn+G,QAAQ,WAAoBm+G,EAAGn+G,QAAQ,UAKhB,IAA1Bm+G,EAAGn+G,QAAQ,YAA2C,GAAvBm+G,EAAGn+G,QAAQ,SAKnDq+G,GAAmC,IAA7BF,EAAGn+G,QAAQ,aAQjBs+G,EAAiD,oBAArBC,iBAAmCA,iBAAmB,EAMlFC,EAAuD,oBAAtBC,mBACb,oBAApBva,iBACPwa,gBAAgBD,kBAKTE,EAAgC,oBAAVtsB,OAAyBA,MAAMn4F,UAAU0kH,OAI/DC,EAA0B,WACjC,IAAIrsF,GAAU,EACd,IACI,IAAIxb,EAAU/c,OAAOy2B,eAAe,GAAI,UAAW,CAC/CC,IAAK,WACD6B,GAAU,KAGlBnvB,OAAO+B,iBAAiB,IAAK,KAAM4R,GACnC3T,OAAOmC,oBAAoB,IAAK,KAAMwR,GAE1C,MAAO4W,IAGP,OAAO4E,EAd0B,I,6BC5CtB,KACXyuD,KAAM,EACNmS,QAAS,EACTtT,OAAQ,EAKRiB,MAAO,EACP+9B,MAAO,I,cCeXv+G,EAAO65D,QALP,SAAkB7+D,GAChB,IAAI0I,SAAc1I,EAClB,OAAgB,MAATA,IAA0B,UAAR0I,GAA4B,YAARA,K,8BC3B/C;;;;;;;;;;;;;;AAgBO,MAAM86G,EAAiC,oBAAX17G,QACN,MAAzBA,OAAO27G,qBAEHvjH,IADJ4H,OAAO27G,eAAeC,0BAObC,EAAgB,CAACj7B,EAAWz3E,EAAO1M,EAAM,KAAMkpD,EAAS,QACjE,KAAOx8C,IAAU1M,GAAK,CAClB,MAAM+jD,EAAIr3C,EAAMy5C,YAChBg+B,EAAU7lD,aAAa5xB,EAAOw8C,GAC9Bx8C,EAAQq3C,IAOHs7D,EAAc,CAACl7B,EAAWz3E,EAAO1M,EAAM,QAChD,KAAO0M,IAAU1M,GAAK,CAClB,MAAM+jD,EAAIr3C,EAAMy5C,YAChBg+B,EAAUvlD,YAAYlyB,GACtBA,EAAQq3C,K,6BClCD,KACXo9B,KAAM,EACNmS,QAAS,EACTtT,OAAQ,EACRiB,MAAO,EACP+9B,MAAO,I,qCCAJ,SAASM,EAAmB3zD,EAAiBpxD,EAAQyF,EAAK4rD,EAAQ2zD,GAGrE,IAFA,IAAI71D,OAAkC/tD,IAApB4jH,EAAgCA,EAAkB,GAChExmH,EAAI,EACCya,EAAIjZ,EAAQiZ,EAAIxT,EAAKwT,GAAKo4C,EAC/BlC,EAAY3wD,KAAO4yD,EAAgBhxD,MAAM6Y,EAAGA,EAAIo4C,GAGpD,OADAlC,EAAY/xD,OAASoB,EACd2wD,EAUJ,SAAS81D,EAAwB7zD,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQ6zD,GAG3E,IAFA,IAAIzD,OAAoCrgH,IAArB8jH,EAAiCA,EAAmB,GACnE1mH,EAAI,EACCya,EAAI,EAAG6nE,EAAK1W,EAAKhtE,OAAQ6b,EAAI6nE,IAAM7nE,EAAG,CAC3C,IAAIxT,EAAM2kE,EAAKnxD,GACfwoG,EAAajjH,KAAOumH,EAAmB3zD,EAAiBpxD,EAAQyF,EAAK4rD,EAAQowD,EAAajjH,IAC1FwB,EAASyF,EAGb,OADAg8G,EAAarkH,OAASoB,EACfijH,EAWJ,SAAS0D,EAA6B/zD,EAAiBpxD,EAAQ8qE,EAAOzZ,EAAQ+zD,GAGjF,IAFA,IAAIzD,OAAsCvgH,IAAtBgkH,EAAkCA,EAAoB,GACtE5mH,EAAI,EACCya,EAAI,EAAG6nE,EAAKhW,EAAM1tE,OAAQ6b,EAAI6nE,IAAM7nE,EAAG,CAC5C,IAAImxD,EAAOU,EAAM7xD,GACjB0oG,EAAcnjH,KAAOymH,EAAwB7zD,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQswD,EAAcnjH,IAClGwB,EAASoqE,EAAKA,EAAKhtE,OAAS,GAGhC,OADAukH,EAAcvkH,OAASoB,EAChBmjH,EAzDX,uG,6BCSe,KACXlyB,GAAI,KACJ4yB,IAAK,MACLpzB,IAAK,MACLqzB,KAAM,S,6BCDH,SAAS+C,EAAYj0D,EAAiBpxD,EAAQyF,EAAK4rD,EAAQlhB,EAAWwyE,GAGzE,IAFA,IAAIniH,EAAOmiH,GAAsB,GAC7BnkH,EAAI,EACCya,EAAIjZ,EAAQiZ,EAAIxT,EAAKwT,GAAKo4C,EAAQ,CACvC,IAAInuD,EAAIkuD,EAAgBn4C,GACpBmN,EAAIgrC,EAAgBn4C,EAAI,GAC5BzY,EAAKhC,KAAO2xC,EAAU,GAAKjtC,EAAIitC,EAAU,GAAK/pB,EAAI+pB,EAAU,GAC5D3vC,EAAKhC,KAAO2xC,EAAU,GAAKjtC,EAAIitC,EAAU,GAAK/pB,EAAI+pB,EAAU,GAKhE,OAHIwyE,GAAYniH,EAAKpD,QAAUoB,IAC3BgC,EAAKpD,OAASoB,GAEXgC,EAYJ,SAASm7E,EAAOvqB,EAAiBpxD,EAAQyF,EAAK4rD,EAAQ+lB,EAAOvI,EAAQ8zC,GAOxE,IANA,IAAIniH,EAAOmiH,GAAsB,GAC7BxvD,EAAM56C,KAAK46C,IAAIikB,GACf/jB,EAAM96C,KAAK86C,IAAI+jB,GACf4C,EAAUnL,EAAO,GACjBoL,EAAUpL,EAAO,GACjBrwE,EAAI,EACCya,EAAIjZ,EAAQiZ,EAAIxT,EAAKwT,GAAKo4C,EAAQ,CACvC,IAAIqD,EAAStD,EAAgBn4C,GAAK+gE,EAC9BrlB,EAASvD,EAAgBn4C,EAAI,GAAKghE,EACtCz5E,EAAKhC,KAAOw7E,EAAUtlB,EAASvB,EAAMwB,EAAStB,EAC9C7yD,EAAKhC,KAAOy7E,EAAUvlB,EAASrB,EAAMsB,EAASxB,EAC9C,IAAK,IAAI9uD,EAAI4U,EAAI,EAAG5U,EAAI4U,EAAIo4C,IAAUhtD,EAClC7D,EAAKhC,KAAO4yD,EAAgB/sD,GAMpC,OAHIs+G,GAAYniH,EAAKpD,QAAUoB,IAC3BgC,EAAKpD,OAASoB,GAEXgC,EAcJ,SAASiP,EAAM2hD,EAAiBpxD,EAAQyF,EAAK4rD,EAAQ6oD,EAAIC,EAAItrC,EAAQ8zC,GAKxE,IAJA,IAAIniH,EAAOmiH,GAAsB,GAC7B3oC,EAAUnL,EAAO,GACjBoL,EAAUpL,EAAO,GACjBrwE,EAAI,EACCya,EAAIjZ,EAAQiZ,EAAIxT,EAAKwT,GAAKo4C,EAAQ,CACvC,IAAIqD,EAAStD,EAAgBn4C,GAAK+gE,EAC9BrlB,EAASvD,EAAgBn4C,EAAI,GAAKghE,EACtCz5E,EAAKhC,KAAOw7E,EAAUkgC,EAAKxlD,EAC3Bl0D,EAAKhC,KAAOy7E,EAAUkgC,EAAKxlD,EAC3B,IAAK,IAAItwD,EAAI4U,EAAI,EAAG5U,EAAI4U,EAAIo4C,IAAUhtD,EAClC7D,EAAKhC,KAAO4yD,EAAgB/sD,GAMpC,OAHIs+G,GAAYniH,EAAKpD,QAAUoB,IAC3BgC,EAAKpD,OAASoB,GAEXgC,EAYJ,SAASk7E,EAAUtqB,EAAiBpxD,EAAQyF,EAAK4rD,EAAQqD,EAAQC,EAAQguD,GAG5E,IAFA,IAAIniH,EAAOmiH,GAAsB,GAC7BnkH,EAAI,EACCya,EAAIjZ,EAAQiZ,EAAIxT,EAAKwT,GAAKo4C,EAAQ,CACvC7wD,EAAKhC,KAAO4yD,EAAgBn4C,GAAKy7C,EACjCl0D,EAAKhC,KAAO4yD,EAAgBn4C,EAAI,GAAK07C,EACrC,IAAK,IAAItwD,EAAI4U,EAAI,EAAG5U,EAAI4U,EAAIo4C,IAAUhtD,EAClC7D,EAAKhC,KAAO4yD,EAAgB/sD,GAMpC,OAHIs+G,GAAYniH,EAAKpD,QAAUoB,IAC3BgC,EAAKpD,OAASoB,GAEXgC,EA/GX,yI,cCeA0F,EAAO65D,aAAU3+D,G,+CCfjB,IACQgqC,EADR,oCAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KA4BnF85E,EAAwB,SAAUv5E,GAKlC,SAASu5E,EAAOC,GACZ,IAAI3qG,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAqBjC,OAhBAiY,EAAM4qG,aAAeD,EAKrB3qG,EAAM6qG,iBAAmB,KAKzB7qG,EAAM8qG,aAAe,KAKrB9qG,EAAM+qG,WAAa,KACZ/qG,EAuHX,OAjJAywB,EAAUi6E,EAAQv5E,GAgClBu5E,EAAOzlH,UAAUkL,iBAAmB,SAAUnB,EAAMC,GAChD,GAAKD,GAASC,EAAd,CAGA,IAAI4E,EAAY9L,KAAKgjH,aAAehjH,KAAKgjH,WAAa,IAClDC,EAAmBn3G,EAAU7E,KAAU6E,EAAU7E,GAAQ,KACjB,IAAxCg8G,EAAiBjgH,QAAQkE,IACzB+7G,EAAiBziH,KAAK0G,KAa9By7G,EAAOzlH,UAAUmN,cAAgB,SAAUX,GAEvC,IAAIgB,EAAuB,iBAAVhB,EAAqB,IAAI,IAAMA,GAASA,EACrDzC,EAAOyD,EAAIzD,KACVyD,EAAI1D,SACL0D,EAAI1D,OAAShH,KAAK6iH,cAAgB7iH,MAEtC,IACIkjH,EADAp3G,EAAY9L,KAAKgjH,YAAchjH,KAAKgjH,WAAW/7G,GAEnD,GAAI6E,EAAW,CACX,IAAIq3G,EAAcnjH,KAAK+iH,eAAiB/iH,KAAK+iH,aAAe,IACxDK,EAAkBpjH,KAAK8iH,mBAAqB9iH,KAAK8iH,iBAAmB,IAClE77G,KAAQk8G,IACVA,EAAYl8G,GAAQ,EACpBm8G,EAAgBn8G,GAAQ,KAE1Bk8G,EAAYl8G,GACd,IAAK,IAAIpL,EAAI,EAAG8a,EAAK7K,EAAUrR,OAAQoB,EAAI8a,IAAM9a,EAO7C,IAAkB,KALdqnH,EADA,gBAAiBp3G,EAAUjQ,GACuCiQ,EAAUjQ,GAAI4nG,YAAY/4F,GAGxBoB,EAAUjQ,GAAI6B,KAAKsC,KAAM0K,KAEtEA,EAAI2gG,mBAAoB,CAC/C6X,GAAY,EACZ,MAIR,KADEC,EAAYl8G,GACY,IAAtBk8G,EAAYl8G,GAAa,CACzB,IAAIo8G,EAAKD,EAAgBn8G,GAEzB,WADOm8G,EAAgBn8G,GAChBo8G,KACHrjH,KAAKwI,oBAAoBvB,EAAM,YAE5Bk8G,EAAYl8G,GAEvB,OAAOi8G,IAMfP,EAAOzlH,UAAUomH,gBAAkB,WAC/BtjH,KAAKgjH,YAAc,YAAMhjH,KAAKgjH,aASlCL,EAAOzlH,UAAUqmH,aAAe,SAAUt8G,GACtC,OAAQjH,KAAKgjH,YAAchjH,KAAKgjH,WAAW/7G,SAAUxI,GAOzDkkH,EAAOzlH,UAAUsmH,YAAc,SAAUC,GACrC,QAAKzjH,KAAKgjH,aAGHS,EACDA,KAAYzjH,KAAKgjH,WACjB/lH,OAAOsS,KAAKvP,KAAKgjH,YAAYvoH,OAAS,IAMhDkoH,EAAOzlH,UAAUsL,oBAAsB,SAAUvB,EAAMC,GACnD,IAAI4E,EAAY9L,KAAKgjH,YAAchjH,KAAKgjH,WAAW/7G,GACnD,GAAI6E,EAAW,CACX,IAAIzJ,EAAQyJ,EAAU9I,QAAQkE,IACf,IAAX7E,IACIrC,KAAK8iH,kBAAoB77G,KAAQjH,KAAK8iH,kBAEtCh3G,EAAUzJ,GAAS,MACjBrC,KAAK8iH,iBAAiB77G,KAGxB6E,EAAUhQ,OAAOuG,EAAO,GACC,IAArByJ,EAAUrR,eACHuF,KAAKgjH,WAAW/7G,OAMpC07G,EAlJgB,CAmJzB,KACa,O,6BC1Lf,sCACQl6E,EADR,iFAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAsFnFk6B,EAAuB,SAAU35B,GAKjC,SAAS25B,EAAM/oD,GACX,IAAI/B,EAAQjY,KACR0hE,EAAc,YAAO,GAAI1nD,UACtB0nD,EAAY5jE,QACnBma,EAAQmxB,EAAO1rC,KAAKsC,KAAM0hE,IAAgB1hE,MAKpC0jH,kBAAoB,KAK1BzrG,EAAM0rG,cAAgB,KAKtB1rG,EAAM2rG,iBAAmB,KAKzB3rG,EAAM28C,UAAY,KAEd56C,EAAQo3B,SACRn5B,EAAMm5B,OAASp3B,EAAQo3B,QAEvBp3B,EAAQzY,KACR0W,EAAM2jG,OAAO5hG,EAAQzY,KAEzB0W,EAAM7P,iBAAiB,YAAmB,IAAcy7G,QAAS5rG,EAAM6rG,6BACvE,IAAIhmH,EAASkc,EAAQlc,OACYkc,EAAc,OACzC,KAEN,OADA/B,EAAM8rG,UAAUjmH,GACTma,EA6JX,OAtMAywB,EAAUq6B,EAAO35B,GA+CjB25B,EAAM7lE,UAAU8mH,eAAiB,SAAUxZ,GACvC,IAAI5nG,EAAQ4nG,GAAwB,GAEpC,OADA5nG,EAAMpC,KAAKR,MACJ4C,GAMXmgE,EAAM7lE,UAAU+mH,oBAAsB,SAAUC,GAC5C,IAAIC,EAASD,GAA0B,GAEvC,OADAC,EAAO3jH,KAAKR,KAAKokH,iBACVD,GAQXphD,EAAM7lE,UAAU8oF,UAAY,WACxB,OAAkChmF,KAAK2zB,IAAI,IAAckwF,SAAY,MAKzE9gD,EAAM7lE,UAAUmnH,eAAiB,WAC7B,IAAIvmH,EAASkC,KAAKgmF,YAClB,OAAQloF,EAAiCA,EAAOwmH,WAA/B,IAAYC,WAKjCxhD,EAAM7lE,UAAUsnH,oBAAsB,WAClCxkH,KAAKy+D,WAKTsE,EAAM7lE,UAAU4mH,4BAA8B,WACtC9jH,KAAK4jH,mBACL,YAAc5jH,KAAK4jH,kBACnB5jH,KAAK4jH,iBAAmB,MAE5B,IAAI9lH,EAASkC,KAAKgmF,YACdloF,IACAkC,KAAK4jH,iBAAmB,YAAO9lH,EAAQ,IAAU4gE,OAAQ1+D,KAAKwkH,oBAAqBxkH,OAEvFA,KAAKy+D,WAOTsE,EAAM7lE,UAAUklE,YAAc,SAAUC,GACpC,OAAOriE,KAAK40D,UAAUwN,YAAYC,IAUtCU,EAAM7lE,UAAUk0C,OAAS,SAAUuxB,EAAY37D,GAC3C,IAAIy9G,EAAgBzkH,KAAKy1D,cACzB,GAAIgvD,EAAc/6B,aAAa/mB,GAC3B,OAAO8hD,EAAc/9B,YAAY/jB,EAAY37D,IAerD+7D,EAAM7lE,UAAU0+G,OAAS,SAAUr6G,GAC3BvB,KAAK0jH,oBACL,YAAc1jH,KAAK0jH,mBACnB1jH,KAAK0jH,kBAAoB,MAExBniH,GACDvB,KAAKy+D,UAELz+D,KAAK2jH,gBACL,YAAc3jH,KAAK2jH,eACnB3jH,KAAK2jH,cAAgB,MAErBpiH,IACAvB,KAAK0jH,kBAAoB,YAAOniH,EAAK,IAAgBmjH,YAAY,SAAUh6G,GACvE,IACIk8E,EADkE,EACnCjkB,WAAWikB,iBAC1CD,EAAa3mF,KAAKokH,eAAc,GAEpC,aAAQx9B,EAAiB5kF,MAAK,SAAU2iH,GACpC,OAAOA,EAAgBr9B,QAAUX,EAAWW,SAC5C,IACJV,EAAiBpmF,KAAKmmF,KACvB3mF,MACHA,KAAK2jH,cAAgB,YAAO3jH,KAAM,IAAU0+D,OAAQn9D,EAAI6vC,OAAQ7vC,GAChEvB,KAAKy+D,YASbsE,EAAM7lE,UAAU6mH,UAAY,SAAUjmH,GAClCkC,KAAK6zB,IAAI,IAAcgwF,OAAQ/lH,IAMnCilE,EAAM7lE,UAAUu4D,YAAc,WAI1B,OAHKz1D,KAAK40D,YACN50D,KAAK40D,UAAY50D,KAAK8qF,kBAEnB9qF,KAAK40D,WAKhBmO,EAAM7lE,UAAU0nH,YAAc,WAC1B,QAAS5kH,KAAK40D,WAOlBmO,EAAM7lE,UAAU4tF,eAAiB,WAC7B,OAAO,MAKX/nB,EAAM7lE,UAAUomH,gBAAkB,WAC9BtjH,KAAK+jH,UAAU,MACf36E,EAAOlsC,UAAUomH,gBAAgB5lH,KAAKsC,OAEnC+iE,EAvMe,CAwMxB,KAQK,SAAS8hD,EAAOl+B,EAAYd,GAC/B,IAAKc,EAAWm+B,QACZ,OAAO,EAEX,IAAIz0D,EAAaw1B,EAAUx1B,WAC3B,GAAIA,EAAas2B,EAAWo+B,eACxB10D,GAAcs2B,EAAWq+B,cACzB,OAAO,EAEX,IAAIn8D,EAAOg9B,EAAUh9B,KACrB,OAAOA,EAAO89B,EAAWs+B,SAAWp8D,GAAQ89B,EAAWu+B,QAE5C,O,6BCrTA,KACXX,UAAW,YACXnuB,QAAS,UACTzG,MAAO,QACP5L,MAAO,U,6BCXX,aAiDI/rB,EAA4B,WAI5B,SAASA,EAAWh+C,GAKhBha,KAAKmlH,MAAQnrG,EAAQ09C,KAQrB13D,KAAKolH,OAAsDprG,EAAa,MAQxEha,KAAKy+E,aAA6BhgF,IAAnBub,EAAQyyC,OAAuBzyC,EAAQyyC,OAAS,KAQ/DzsD,KAAKqlH,kBACuB5mH,IAAxBub,EAAQ89C,YAA4B99C,EAAQ89C,YAAc,KAK9D93D,KAAKslH,sBAC2B7mH,IAA5Bub,EAAQ8+C,gBAAgC9+C,EAAQ8+C,gBAAkB,MAKtE94D,KAAKulH,aAA6B9mH,IAAnBub,EAAQld,QAAuBkd,EAAQld,OAKtDkD,KAAKwlH,aAAexlH,KAAKulH,UAAWvlH,KAAKy+E,SAKzCz+E,KAAKylH,wBAA0BzrG,EAAQ+9C,mBAKvC/3D,KAAK0lH,iBAAmB,KAKxB1lH,KAAK2lH,eAAiB3rG,EAAQ++C,cAgIlC,OA3HAf,EAAW96D,UAAU+1D,SAAW,WAC5B,OAAOjzD,KAAKwlH,WAOhBxtD,EAAW96D,UAAUi8D,QAAU,WAC3B,OAAOn5D,KAAKmlH,OAOhBntD,EAAW96D,UAAU81D,UAAY,WAC7B,OAAOhzD,KAAKy+E,SAOhBzmB,EAAW96D,UAAUy8D,SAAW,WAC5B,OAAO35D,KAAKolH,QAShBptD,EAAW96D,UAAU08D,iBAAmB,WACpC,OAAO55D,KAAK2lH,gBAAkB,IAAgB3lH,KAAKolH,SAOvDptD,EAAW96D,UAAU0oH,eAAiB,WAClC,OAAO5lH,KAAKqlH,cAahBrtD,EAAW96D,UAAU2oH,mBAAqB,WACtC,OAAO7lH,KAAKslH,kBAOhBttD,EAAW96D,UAAU4oH,SAAW,WAC5B,OAAO9lH,KAAKulH,SAOhBvtD,EAAW96D,UAAU6oH,UAAY,SAAUjpH,GACvCkD,KAAKulH,QAAUzoH,EACfkD,KAAKwlH,aAAe1oH,IAAUkD,KAAKy+E,UAKvCzmB,EAAW96D,UAAU8oH,mBAAqB,WACtC,OAAOhmH,KAAK0lH,kBAKhB1tD,EAAW96D,UAAU+oH,mBAAqB,SAAUC,GAChDlmH,KAAK0lH,iBAAmBQ,GAO5BluD,EAAW96D,UAAUipH,UAAY,SAAU15D,GACvCzsD,KAAKy+E,QAAUhyB,EACfzsD,KAAKwlH,aAAexlH,KAAKulH,UAAW94D,IAQxCuL,EAAW96D,UAAUkpH,eAAiB,SAAUtuD,GAC5C93D,KAAKqlH,aAAevtD,GAQxBE,EAAW96D,UAAUmpH,sBAAwB,SAAU5mD,GACnDz/D,KAAKylH,wBAA0BhmD,GAOnCzH,EAAW96D,UAAUw8D,uBAAyB,WAC1C,OAAO15D,KAAKylH,yBAETztD,EAjMoB,GAmMhB,O,6BCpPf,uLAgEO,SAASsuD,EAAe73D,EAAiBpxD,EAAQyF,EAAK4rD,EAAQi1B,EAAkBiJ,EAA2B25B,GAC9G,IAAI1/D,GAAK/jD,EAAMzF,GAAUqxD,EACzB,GAAI7H,EAAI,EAAG,CACP,KAAOxpD,EAASyF,EAAKzF,GAAUqxD,EAC3Bk+B,EAA0B25B,KAAsB93D,EAAgBpxD,GAChEuvF,EAA0B25B,KACtB93D,EAAgBpxD,EAAS,GAEjC,OAAOkpH,EAGX,IAAIC,EAAU,IAAIhpH,MAAMqpD,GACxB2/D,EAAQ,GAAK,EACbA,EAAQ3/D,EAAI,GAAK,EAIjB,IAFA,IAAIz1C,EAAQ,CAAC/T,EAAQyF,EAAM4rD,GACvBrsD,EAAQ,EACL+O,EAAM3W,OAAS,GAAG,CAQrB,IAPA,IAAIkI,EAAOyO,EAAM5S,MACb2R,EAAQiB,EAAM5S,MACdioH,EAAqB,EACrBz1D,EAAKvC,EAAgBt+C,GACrBihD,EAAK3C,EAAgBt+C,EAAQ,GAC7B8gD,EAAKxC,EAAgB9rD,GACrB0uD,EAAK5C,EAAgB9rD,EAAO,GACvB9G,EAAIsU,EAAQu+C,EAAQ7yD,EAAI8G,EAAM9G,GAAK6yD,EAAQ,CAChD,IAAInuD,EAAIkuD,EAAgB5yD,GACpB4nB,EAAIgrC,EAAgB5yD,EAAI,GACxB6qH,EAAoB,YAAuBnmH,EAAGkjB,EAAGutC,EAAII,EAAIH,EAAII,GAC7Dq1D,EAAoBD,IACpBpkH,EAAQxG,EACR4qH,EAAqBC,GAGzBD,EAAqB9iC,IACrB6iC,GAASnkH,EAAQhF,GAAUqxD,GAAU,EACjCv+C,EAAQu+C,EAASrsD,GACjB+O,EAAM5Q,KAAK2P,EAAO9N,GAElBA,EAAQqsD,EAAS/rD,GACjByO,EAAM5Q,KAAK6B,EAAOM,IAI9B,IAAS9G,EAAI,EAAGA,EAAIgrD,IAAKhrD,EACjB2qH,EAAQ3qH,KACR+wF,EAA0B25B,KACtB93D,EAAgBpxD,EAASxB,EAAI6yD,GACjCk+B,EAA0B25B,KACtB93D,EAAgBpxD,EAASxB,EAAI6yD,EAAS,IAGlD,OAAO63D,EAcJ,SAASI,EAAoBl4D,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQi1B,EAAkBiJ,EAA2B25B,EAAkB15B,GACtI,IAAK,IAAIhxF,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC3C,IAAIiH,EAAM2kE,EAAK5rE,GACf0qH,EAAmBD,EAAe73D,EAAiBpxD,EAAQyF,EAAK4rD,EAAQi1B,EAAkBiJ,EAA2B25B,GACrH15B,EAAersF,KAAK+lH,GACpBlpH,EAASyF,EAEb,OAAOyjH,EA2EJ,SAASK,EAAKroH,EAAO0wD,GACxB,OAAOA,EAAYr5C,KAAKmiE,MAAMx5E,EAAQ0wD,GAqBnC,SAAS43D,EAASp4D,EAAiBpxD,EAAQyF,EAAK4rD,EAAQO,EAAW29B,EAA2B25B,GAEjG,GAAIlpH,GAAUyF,EACV,OAAOyjH,EAGX,IAQIt1D,EAAII,EARJL,EAAK41D,EAAKn4D,EAAgBpxD,GAAS4xD,GACnCmC,EAAKw1D,EAAKn4D,EAAgBpxD,EAAS,GAAI4xD,GAC3C5xD,GAAUqxD,EAEVk+B,EAA0B25B,KAAsBv1D,EAChD47B,EAA0B25B,KAAsBn1D,EAIhD,GAII,GAHAH,EAAK21D,EAAKn4D,EAAgBpxD,GAAS4xD,GACnCoC,EAAKu1D,EAAKn4D,EAAgBpxD,EAAS,GAAI4xD,IACvC5xD,GAAUqxD,IACI5rD,EAOV,OAFA8pF,EAA0B25B,KAAsBt1D,EAChD27B,EAA0B25B,KAAsBl1D,EACzCk1D,QAENt1D,GAAMD,GAAMK,GAAMD,GAC3B,KAAO/zD,EAASyF,GAAK,CAEjB,IAAIouD,EAAK01D,EAAKn4D,EAAgBpxD,GAAS4xD,GACnCqC,EAAKs1D,EAAKn4D,EAAgBpxD,EAAS,GAAI4xD,GAG3C,GAFA5xD,GAAUqxD,EAENwC,GAAMD,GAAMK,GAAMD,EAAtB,CAIA,IAAIgmD,EAAMpmD,EAAKD,EACXsmD,EAAMjmD,EAAKD,EAEXqmD,EAAMvmD,EAAKF,EACX0mD,EAAMpmD,EAAKF,EAIXimD,EAAMK,GAAOJ,EAAMG,IACjBJ,EAAM,GAAKI,EAAMJ,GAAQA,GAAOI,GAAQJ,EAAM,GAAKI,EAAMJ,KACzDC,EAAM,GAAKI,EAAMJ,GAAQA,GAAOI,GAAQJ,EAAM,GAAKI,EAAMJ,IAE3DrmD,EAAKC,EACLG,EAAKC,IAMTs7B,EAA0B25B,KAAsBt1D,EAChD27B,EAA0B25B,KAAsBl1D,EAChDL,EAAKC,EACLG,EAAKC,EACLJ,EAAKC,EACLG,EAAKC,IAKT,OAFAs7B,EAA0B25B,KAAsBt1D,EAChD27B,EAA0B25B,KAAsBl1D,EACzCk1D,EAcJ,SAASO,EAAcr4D,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQO,EAAW29B,EAA2B25B,EAAkB15B,GACzH,IAAK,IAAIhxF,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC3C,IAAIiH,EAAM2kE,EAAK5rE,GACf0qH,EAAmBM,EAASp4D,EAAiBpxD,EAAQyF,EAAK4rD,EAAQO,EAAW29B,EAA2B25B,GACxG15B,EAAersF,KAAK+lH,GACpBlpH,EAASyF,EAEb,OAAOyjH,EAcJ,SAASQ,EAAmBt4D,EAAiBpxD,EAAQ8qE,EAAOzZ,EAAQO,EAAW29B,EAA2B25B,EAAkBS,GAC/H,IAAK,IAAInrH,EAAI,EAAG8a,EAAKwxD,EAAM1tE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC5C,IAAI4rE,EAAOU,EAAMtsE,GACbgxF,EAAiB,GACrB05B,EAAmBO,EAAcr4D,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQO,EAAW29B,EAA2B25B,EAAkB15B,GAChIm6B,EAAgBxmH,KAAKqsF,GACrBxvF,EAASoqE,EAAKA,EAAKhtE,OAAS,GAEhC,OAAO8rH,I,6BC7TJ,SAASU,EAAQ32D,GACpB,OAAOA,EAAK,GAAK,GAAKA,EAAK,GAAK,EAS7B,SAASxjD,EAAMwjD,EAAM42D,EAAOC,GAM/B,YALiB1oH,IAAb0oH,IACAA,EAAW,CAAC,EAAG,IAEnBA,EAAS,GAAM72D,EAAK,GAAK42D,EAAQ,GAAO,EACxCC,EAAS,GAAM72D,EAAK,GAAK42D,EAAQ,GAAO,EACjCC,EAWJ,SAASC,EAAO92D,EAAM62D,GACzB,OAAI3pH,MAAMvB,QAAQq0D,GACPA,QAGU7xD,IAAb0oH,EACAA,EAAW,CAAC72D,EAAMA,IAGlB62D,EAAS,GAAK72D,EACd62D,EAAS,GAAK72D,GAEX62D,GAnEf,uG,6BCAA,iDAsBI92B,EAAuB,WAIvB,SAASA,EAAMg3B,GAIXrnH,KAAKsnH,OAAS,IAAI,IAAOD,GAOzBrnH,KAAKunH,OAAS,GAiKlB,OA1JAl3B,EAAMnzF,UAAU69E,OAAS,SAAUtuB,EAAQluD,GAEvC,IAAIiF,EAAO,CACPgqD,KAAMf,EAAO,GACbgB,KAAMhB,EAAO,GACbiB,KAAMjB,EAAO,GACbkB,KAAMlB,EAAO,GACbluD,MAAOA,GAEXyB,KAAKsnH,OAAOvsC,OAAOv3E,GACnBxD,KAAKunH,OAAO,iBAAOhpH,IAAUiF,GAOjC6sF,EAAMnzF,UAAUgjD,KAAO,SAAUyxC,EAASsL,GAEtC,IADA,IAAIuqB,EAAQ,IAAIhqH,MAAMy/F,EAAOxiG,QACpBoB,EAAI,EAAGwC,EAAI4+F,EAAOxiG,OAAQoB,EAAIwC,EAAGxC,IAAK,CAC3C,IAAI4wD,EAASklC,EAAQ91F,GACjB0C,EAAQ0+F,EAAOphG,GAEf2H,EAAO,CACPgqD,KAAMf,EAAO,GACbgB,KAAMhB,EAAO,GACbiB,KAAMjB,EAAO,GACbkB,KAAMlB,EAAO,GACbluD,MAAOA,GAEXipH,EAAM3rH,GAAK2H,EACXxD,KAAKunH,OAAO,iBAAOhpH,IAAUiF,EAEjCxD,KAAKsnH,OAAOpnE,KAAKsnE,IAOrBn3B,EAAMnzF,UAAUyK,OAAS,SAAUpJ,GAC/B,IAAIoQ,EAAM,iBAAOpQ,GAGbiF,EAAOxD,KAAKunH,OAAO54G,GAEvB,cADO3O,KAAKunH,OAAO54G,GACiB,OAA7B3O,KAAKsnH,OAAO3/G,OAAOnE,IAO9B6sF,EAAMnzF,UAAUmjE,OAAS,SAAU5T,EAAQluD,GACvC,IAAIiF,EAAOxD,KAAKunH,OAAO,iBAAOhpH,IAC1BkpH,EAAO,CAACjkH,EAAKgqD,KAAMhqD,EAAKiqD,KAAMjqD,EAAKkqD,KAAMlqD,EAAKmqD,MAC7C,iBAAO85D,EAAMh7D,KACdzsD,KAAK2H,OAAOpJ,GACZyB,KAAK+6E,OAAOtuB,EAAQluD,KAO5B8xF,EAAMnzF,UAAU+1F,OAAS,WAErB,OADYjzF,KAAKsnH,OAAO15G,MACXrM,KAAI,SAAUiC,GACvB,OAAOA,EAAKjF,UAQpB8xF,EAAMnzF,UAAUi2F,YAAc,SAAU1mC,GAEpC,IAAIg7D,EAAO,CACPj6D,KAAMf,EAAO,GACbgB,KAAMhB,EAAO,GACbiB,KAAMjB,EAAO,GACbkB,KAAMlB,EAAO,IAGjB,OADYzsD,KAAKsnH,OAAOI,OAAOD,GAClBlmH,KAAI,SAAUiC,GACvB,OAAOA,EAAKjF,UAUpB8xF,EAAMnzF,UAAU+F,QAAU,SAAU1H,GAChC,OAAOyE,KAAK2nH,SAAS3nH,KAAKizF,SAAU13F,IAQxC80F,EAAMnzF,UAAU41F,gBAAkB,SAAUrmC,EAAQlxD,GAChD,OAAOyE,KAAK2nH,SAAS3nH,KAAKmzF,YAAY1mC,GAASlxD,IAQnD80F,EAAMnzF,UAAUyqH,SAAW,SAAU1qB,EAAQ1hG,GAEzC,IADA,IAAI6G,EACKvG,EAAI,EAAGwC,EAAI4+F,EAAOxiG,OAAQoB,EAAIwC,EAAGxC,IAEtC,GADAuG,EAAS7G,EAAS0hG,EAAOphG,IAErB,OAAOuG,EAGf,OAAOA,GAKXiuF,EAAMnzF,UAAU88B,QAAU,WACtB,OAAO,YAAQh6B,KAAKunH,SAKxBl3B,EAAMnzF,UAAUk1F,MAAQ,WACpBpyF,KAAKsnH,OAAOl1B,QACZpyF,KAAKunH,OAAS,IAMlBl3B,EAAMnzF,UAAU81D,UAAY,SAAUnG,GAClC,IAAItlC,EAAOvnB,KAAKsnH,OAAO5rB,SACvB,OAAO,yBAAen0E,EAAKimC,KAAMjmC,EAAKkmC,KAAMlmC,EAAKmmC,KAAMnmC,EAAKomC,KAAMd,IAKtEwjC,EAAMnzF,UAAUK,OAAS,SAAUqqH,GAE/B,IAAK,IAAI/rH,KADTmE,KAAKsnH,OAAOpnE,KAAK0nE,EAAMN,OAAO15G,OAChBg6G,EAAML,OAChBvnH,KAAKunH,OAAO1rH,GAAK+rH,EAAML,OAAO1rH,IAG/Bw0F,EAhLe,GAkLX,O,6BClMA,KAMXgB,WAAY,aAMZ0C,cAAe,gBAMftB,MAAO,QAOPV,cAAe,gBAMfsC,kBAAmB,oBAMnBC,gBAAiB,kBAMjBC,kBAAmB,sB,6BCjChB,SAASpmC,EAAe/3C,EAAG7V,EAAGkjB,EAAGokG,GACpC,YAAsBppH,IAAlBopH,GACAA,EAAc,GAAKzxG,EACnByxG,EAAc,GAAKtnH,EACnBsnH,EAAc,GAAKpkG,EACZokG,GAGA,CAACzxG,EAAG7V,EAAGkjB,GASf,SAASqkG,EAAU1xG,EAAG7V,EAAGkjB,GAC5B,OAAOrN,EAAI,IAAM7V,EAAI,IAAMkjB,EAOxB,SAASskG,EAAOC,GACnB,OAAOF,EAAUE,EAAU,GAAIA,EAAU,GAAIA,EAAU,IAOpD,SAASC,EAAQ34G,GACpB,OAAOA,EAAI9S,MAAM,KAAK+E,IAAIi+C,QAMvB,SAASrM,EAAK60E,GACjB,OAAQA,EAAU,IAAMA,EAAU,IAAMA,EAAU,GAO/C,SAASE,EAAiBF,EAAW9B,GACxC,IAAI9vG,EAAI4xG,EAAU,GACdznH,EAAIynH,EAAU,GACdvkG,EAAIukG,EAAU,GAClB,GAAI9B,EAASiC,aAAe/xG,GAAKA,EAAI8vG,EAASkC,aAC1C,OAAO,EAEX,IAAIC,EAAYnC,EAASoC,iBAAiBlyG,GAC1C,OAAKiyG,GAIMA,EAAUl7D,WAAW5sD,EAAGkjB,GA5EvC,6M,kCCMe,KAMXguE,eAAgB,mB,6BCNL,KAMX82B,WAAY,aAMZC,UAAW,YAMXC,QAAS,Y,6BCxBb,yNAgBA,SAASC,EAAcj6D,EAAiBk6D,EAASC,EAASl6D,EAAQnuD,EAAGkjB,EAAGwoE,GACpE,IAII5uF,EAJA2zD,EAAKvC,EAAgBk6D,GACrBv3D,EAAK3C,EAAgBk6D,EAAU,GAC/B57D,EAAK0B,EAAgBm6D,GAAW53D,EAChChE,EAAKyB,EAAgBm6D,EAAU,GAAKx3D,EAExC,GAAW,IAAPrE,GAAmB,IAAPC,EACZ3vD,EAASsrH,MAER,CACD,IAAIhtB,IAAMp7F,EAAIywD,GAAMjE,GAAMtpC,EAAI2tC,GAAMpE,IAAOD,EAAKA,EAAKC,EAAKA,GAC1D,GAAI2uC,EAAI,EACJt+F,EAASurH,MAER,IAAIjtB,EAAI,EAAG,CACZ,IAAK,IAAI9/F,EAAI,EAAGA,EAAI6yD,IAAU7yD,EAC1BowF,EAAapwF,GAAK,YAAK4yD,EAAgBk6D,EAAU9sH,GAAI4yD,EAAgBm6D,EAAU/sH,GAAI8/F,GAGvF,YADA1P,EAAaxxF,OAASi0D,GAItBrxD,EAASsrH,GAGjB,IAAS9sH,EAAI,EAAGA,EAAI6yD,IAAU7yD,EAC1BowF,EAAapwF,GAAK4yD,EAAgBpxD,EAASxB,GAE/CowF,EAAaxxF,OAASi0D,EAYnB,SAASm6D,EAAgBp6D,EAAiBpxD,EAAQyF,EAAK4rD,EAAQhuC,GAClE,IAAIswC,EAAKvC,EAAgBpxD,GACrB+zD,EAAK3C,EAAgBpxD,EAAS,GAClC,IAAKA,GAAUqxD,EAAQrxD,EAASyF,EAAKzF,GAAUqxD,EAAQ,CACnD,IAAIuC,EAAKxC,EAAgBpxD,GACrBg0D,EAAK5C,EAAgBpxD,EAAS,GAC9ByrH,EAAe,YAAU93D,EAAII,EAAIH,EAAII,GACrCy3D,EAAepoG,IACfA,EAAMooG,GAEV93D,EAAKC,EACLG,EAAKC,EAET,OAAO3wC,EAUJ,SAASqoG,EAAqBt6D,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQhuC,GACxE,IAAK,IAAI7kB,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC3C,IAAIiH,EAAM2kE,EAAK5rE,GACf6kB,EAAMmoG,EAAgBp6D,EAAiBpxD,EAAQyF,EAAK4rD,EAAQhuC,GAC5DrjB,EAASyF,EAEb,OAAO4d,EAUJ,SAASsoG,EAA0Bv6D,EAAiBpxD,EAAQ8qE,EAAOzZ,EAAQhuC,GAC9E,IAAK,IAAI7kB,EAAI,EAAG8a,EAAKwxD,EAAM1tE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC5C,IAAI4rE,EAAOU,EAAMtsE,GACjB6kB,EAAMqoG,EAAqBt6D,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQhuC,GAClErjB,EAASoqE,EAAKA,EAAKhtE,OAAS,GAEhC,OAAOimB,EAgBJ,SAASuoG,EAAmBx6D,EAAiBpxD,EAAQyF,EAAK4rD,EAAQw6D,EAAUC,EAAQ5oH,EAAGkjB,EAAGwoE,EAAcC,EAAoBk9B,GAC/H,GAAI/rH,GAAUyF,EACV,OAAOopF,EAEX,IAAIrwF,EAAGkyF,EACP,GAAiB,IAAbm7B,EAAgB,CAGhB,IADAn7B,EAAkB,YAAUxtF,EAAGkjB,EAAGgrC,EAAgBpxD,GAASoxD,EAAgBpxD,EAAS,KAC9D6uF,EAAoB,CACtC,IAAKrwF,EAAI,EAAGA,EAAI6yD,IAAU7yD,EACtBowF,EAAapwF,GAAK4yD,EAAgBpxD,EAASxB,GAG/C,OADAowF,EAAaxxF,OAASi0D,EACfq/B,EAGP,OAAO7B,EAKf,IAFA,IAAIm9B,EAAWD,GAA8B,CAAC1kH,IAAKA,KAC/CrC,EAAQhF,EAASqxD,EACdrsD,EAAQS,GAGX,GAFA4lH,EAAcj6D,EAAiBpsD,EAAQqsD,EAAQrsD,EAAOqsD,EAAQnuD,EAAGkjB,EAAG4lG,IACpEt7B,EAAkB,YAAUxtF,EAAGkjB,EAAG4lG,EAAS,GAAIA,EAAS,KAClCn9B,EAAoB,CAEtC,IADAA,EAAqB6B,EAChBlyF,EAAI,EAAGA,EAAI6yD,IAAU7yD,EACtBowF,EAAapwF,GAAKwtH,EAASxtH,GAE/BowF,EAAaxxF,OAASi0D,EACtBrsD,GAASqsD,OAaTrsD,GACIqsD,EACI94C,KAAK8K,KAAM9K,KAAKu3B,KAAK4gD,GAAmBn4E,KAAKu3B,KAAK++C,IAC9Cg9B,EACA,EAAG,GAGvB,GAAIC,IAEAT,EAAcj6D,EAAiB3rD,EAAM4rD,EAAQrxD,EAAQqxD,EAAQnuD,EAAGkjB,EAAG4lG,IACnEt7B,EAAkB,YAAUxtF,EAAGkjB,EAAG4lG,EAAS,GAAIA,EAAS,KAClCn9B,GAAoB,CAEtC,IADAA,EAAqB6B,EAChBlyF,EAAI,EAAGA,EAAI6yD,IAAU7yD,EACtBowF,EAAapwF,GAAKwtH,EAASxtH,GAE/BowF,EAAaxxF,OAASi0D,EAG9B,OAAOw9B,EAgBJ,SAASo9B,EAAwB76D,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQw6D,EAAUC,EAAQ5oH,EAAGkjB,EAAGwoE,EAAcC,EAAoBk9B,GAErI,IADA,IAAIC,EAAWD,GAA8B,CAAC1kH,IAAKA,KAC1C7I,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC3C,IAAIiH,EAAM2kE,EAAK5rE,GACfqwF,EAAqB+8B,EAAmBx6D,EAAiBpxD,EAAQyF,EAAK4rD,EAAQw6D,EAAUC,EAAQ5oH,EAAGkjB,EAAGwoE,EAAcC,EAAoBm9B,GACxIhsH,EAASyF,EAEb,OAAOopF,EAgBJ,SAASq9B,EAA6B96D,EAAiBpxD,EAAQ8qE,EAAOzZ,EAAQw6D,EAAUC,EAAQ5oH,EAAGkjB,EAAGwoE,EAAcC,EAAoBk9B,GAE3I,IADA,IAAIC,EAAWD,GAA8B,CAAC1kH,IAAKA,KAC1C7I,EAAI,EAAG8a,EAAKwxD,EAAM1tE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC5C,IAAI4rE,EAAOU,EAAMtsE,GACjBqwF,EAAqBo9B,EAAwB76D,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQw6D,EAAUC,EAAQ5oH,EAAGkjB,EAAGwoE,EAAcC,EAAoBm9B,GAC9IhsH,EAASoqE,EAAKA,EAAKhtE,OAAS,GAEhC,OAAOyxF,I,gBCjOX,IAAIs9B,EAAa,EAAQ,KACrBC,EAAe,EAAQ,KA2B3BlmH,EAAO65D,QALP,SAAkB7+D,GAChB,MAAuB,iBAATA,GACXkrH,EAAalrH,IArBF,mBAqBYirH,EAAWjrH,K,+BCzBvC;;;;;;;;;;;;;;AA0BA,MAAMmrH,EAASrjH,OAAOsjH,cAClBA,aAAaC,aAAa,WAAY,CAAEC,WAAa5rH,GAAMA,IACzD6rH,EAAgB,IAAI,OAKnB,MAAMC,EACT,YAAY/oB,EAAS/D,EAAQh2F,EAAMyqG,GAC/B1xG,KAAKghG,QAAUA,EACfhhG,KAAKi9F,OAASA,EACdj9F,KAAKiH,KAAOA,EACZjH,KAAK0xG,UAAYA,EAKrB,UACI,MAAMrzG,EAAI2B,KAAKghG,QAAQvmG,OAAS,EAChC,IAAI0mG,EAAO,GACP6oB,GAAmB,EACvB,IAAK,IAAInuH,EAAI,EAAGA,EAAIwC,EAAGxC,IAAK,CACxB,MAAMoC,EAAI+B,KAAKghG,QAAQnlG,GAkBjBouH,EAAchsH,EAAE4E,YAAY,WAIlCmnH,GAAoBC,GAAe,GAAKD,KACG,IAAvC/rH,EAAE+E,QAAQ,SAAOinH,EAAc,GAInC,MAAMC,EAAiB,IAAuB94F,KAAKnzB,GAO/CkjG,GANmB,OAAnB+oB,EAMQjsH,GAAK+rH,EAAmBF,EAAgB,KAMxC7rH,EAAE4c,OAAO,EAAGqvG,EAAe7nH,OAAS6nH,EAAe,GACvDA,EAAe,GAAK,IAAuBA,EAAe,GAC1D,IAIZ,OADA/oB,GAAQnhG,KAAKghG,QAAQ3iG,GACd8iG,EAEX,qBACI,MAAMjqE,EAAWrwB,SAAS23B,cAAc,YACxC,IAAIjgC,EAAQyB,KAAKmqH,UASjB,YARe1rH,IAAXirH,IAKAnrH,EAAQmrH,EAAOG,WAAWtrH,IAE9B24B,EAASyC,UAAYp7B,EACd24B,GAUR,MAAMkzF,UAA0BL,EACnC,UACI,MAAO,QAAQ3X,MAAM+X,kBAEzB,qBACI,MAAMjzF,EAAWk7E,MAAMiY,qBACjB/M,EAAUpmF,EAASomF,QACnBgN,EAAahN,EAAQt0D,WAG3B,OAFAs0D,EAAQ57E,YAAY4oF,GACpB,YAAchN,EAASgN,EAAWthE,YAC3B9xB,K,6BC/Hf;;;;;;;;;;;;;GAkBO,SAASu6E,EAAgBrvG,GAC5B,IAAImoH,EAAgBC,EAAe72F,IAAIvxB,EAAO6E,WACxBxI,IAAlB8rH,IACAA,EAAgB,CACZE,aAAc,IAAIC,QAClB9jF,UAAW,IAAI+jF,KAEnBH,EAAe32F,IAAIzxB,EAAO6E,KAAMsjH,IAEpC,IAAIrzF,EAAWqzF,EAAcE,aAAa92F,IAAIvxB,EAAO4+F,SACrD,QAAiBviG,IAAby4B,EACA,OAAOA,EAIX,MAAM5nB,EAAMlN,EAAO4+F,QAAQ/gG,KAAK,KAWhC,OATAi3B,EAAWqzF,EAAc3jF,UAAUjT,IAAIrkB,QACtB7Q,IAAby4B,IAEAA,EAAW,IAAI,IAAS90B,EAAQA,EAAOioH,sBAEvCE,EAAc3jF,UAAU/S,IAAIvkB,EAAK4nB,IAGrCqzF,EAAcE,aAAa52F,IAAIzxB,EAAO4+F,QAAS9pE,GACxCA,EAEJ,MAAMszF,EAAiB,IAAIG,K,6BC9ClC,oEAQO,IAAIC,EAAkB,GAMlBC,GAA6B,G,qcCCpCC,EAAe,CAAC,EAAG,EAAG,GA+eX,EA1ce,WAI1B,SAASC,EAAS/wG,GAed,IAAIgxG,EACJ,GAXAhrH,KAAKilH,aAA8BxmH,IAApBub,EAAQirG,QAAwBjrG,EAAQirG,QAAU,EAKjEjlH,KAAKirH,aAAejxG,EAAQkxG,YAC5B,YAAO,YAASlrH,KAAKirH,cAAc,SAAU/oH,EAAG8T,GAC5C,OAAOA,EAAI9T,KACZ,GAAO,KAGL8X,EAAQmxG,QACT,IAAK,IAAItvH,EAAI,EAAG8a,EAAK3W,KAAKirH,aAAaxwH,OAAS,EAAGoB,EAAI8a,IAAM9a,EACzD,GAAKmvH,GAID,GAAIhrH,KAAKirH,aAAapvH,GAAKmE,KAAKirH,aAAapvH,EAAI,KAAOmvH,EAAY,CAChEA,OAAavsH,EACb,YALJusH,EAAahrH,KAAKirH,aAAapvH,GAAKmE,KAAKirH,aAAapvH,EAAI,GActEmE,KAAKorH,YAAcJ,EAKnBhrH,KAAKklH,QAAUllH,KAAKirH,aAAaxwH,OAAS,EAK1CuF,KAAKu3F,aAA6B94F,IAAnBub,EAAQsyD,OAAuBtyD,EAAQsyD,OAAS,KAK/DtsE,KAAKqrH,SAAW,UACQ5sH,IAApBub,EAAQmxG,UACRnrH,KAAKqrH,SAAWrxG,EAAQmxG,QACxB,YAAOnrH,KAAKqrH,SAAS5wH,QAAUuF,KAAKirH,aAAaxwH,OAAQ,KAE7D,IAAIgyD,EAASzyC,EAAQyyC,YACNhuD,IAAXguD,GAAyBzsD,KAAKu3F,SAAYv3F,KAAKqrH,WAC/CrrH,KAAKu3F,QAAU,qBAAW9qC,IAE9B,aAASzsD,KAAKu3F,SAAWv3F,KAAKqrH,UAAcrrH,KAAKu3F,UAAYv3F,KAAKqrH,SAAW,IAK7ErrH,KAAKsrH,WAAa,UACQ7sH,IAAtBub,EAAQuxG,YACRvrH,KAAKsrH,WAAatxG,EAAQuxG,UAC1B,YAAOvrH,KAAKsrH,WAAW7wH,QAAUuF,KAAKirH,aAAaxwH,OAAQ,KAM/DuF,KAAKwrH,eACoB/sH,IAArBub,EAAQyxG,SACFzxG,EAAQyxG,SACPzrH,KAAKsrH,WAEF,KADA,IAEd,aAAStrH,KAAKwrH,WAAaxrH,KAAKsrH,YAC3BtrH,KAAKwrH,YAAcxrH,KAAKsrH,WAAa,IAK1CtrH,KAAKy+E,aAAqBhgF,IAAXguD,EAAuBA,EAAS,KAK/CzsD,KAAK0rH,gBAAkB,KAKvB1rH,KAAK2rH,SAAW,CAAC,EAAG,QACEltH,IAAlBub,EAAQ4xG,MACR5rH,KAAK0rH,gBAAkB1xG,EAAQ4xG,MAAMrqH,KAAI,SAAU+uD,EAAMl6C,GACrD,IAAIiyG,EAAY,IAAIwD,EAAA,EAAUj2G,KAAK6K,IAAI,EAAG6vC,EAAK,IAAK16C,KAAK8K,IAAI4vC,EAAK,GAAK,GAAI,GAAI16C,KAAK6K,IAAI,EAAG6vC,EAAK,IAAK16C,KAAK8K,IAAI4vC,EAAK,GAAK,GAAI,IAC5H,GAAI7D,EAAQ,CACR,IAAIq/D,EAAsB9rH,KAAK+rH,0BAA0Bt/D,EAAQr2C,GACjEiyG,EAAU76D,KAAO53C,KAAK8K,IAAIorG,EAAoBt+D,KAAM66D,EAAU76D,MAC9D66D,EAAU36D,KAAO93C,KAAK6K,IAAIqrG,EAAoBp+D,KAAM26D,EAAU36D,MAC9D26D,EAAU56D,KAAO73C,KAAK8K,IAAIorG,EAAoBr+D,KAAM46D,EAAU56D,MAC9D46D,EAAU16D,KAAO/3C,KAAK6K,IAAIqrG,EAAoBn+D,KAAM06D,EAAU16D,MAElE,OAAO06D,IACRroH,MAEEysD,GACLzsD,KAAKgsH,qBAAqBv/D,GAwVlC,OA7UAs+D,EAAS7tH,UAAU+uH,iBAAmB,SAAUx/D,EAAQ5D,EAAMttD,GAE1D,IADA,IAAI8sH,EAAYroH,KAAK+rH,0BAA0Bt/D,EAAQ5D,GAC9ChtD,EAAIwsH,EAAU76D,KAAM72C,EAAK0xG,EAAU36D,KAAM7xD,GAAK8a,IAAM9a,EACzD,IAAK,IAAIya,EAAI+xG,EAAU56D,KAAM0wB,EAAKkqC,EAAU16D,KAAMr3C,GAAK6nE,IAAM7nE,EACzD/a,EAAS,CAACstD,EAAMhtD,EAAGya,KAW/By0G,EAAS7tH,UAAUgvH,gCAAkC,SAAUlE,EAAWzsH,EAAU4wH,EAAet/D,GAC/F,IAAIw7D,EAAW9nH,EAAGkjB,EACd2oG,EAAkB,KAClBh2G,EAAI4xG,EAAU,GAAK,EAQvB,IAPyB,IAArBhoH,KAAKorH,aACL7qH,EAAIynH,EAAU,GACdvkG,EAAIukG,EAAU,IAGdoE,EAAkBpsH,KAAKqsH,mBAAmBrE,EAAWn7D,GAElDz2C,GAAKpW,KAAKilH,SAAS,CAStB,GARyB,IAArBjlH,KAAKorH,aACL7qH,EAAIqV,KAAKC,MAAMtV,EAAI,GACnBkjB,EAAI7N,KAAKC,MAAM4N,EAAI,GACnB4kG,EAAY,YAAwB9nH,EAAGA,EAAGkjB,EAAGA,EAAG0oG,IAGhD9D,EAAYroH,KAAK+rH,0BAA0BK,EAAiBh2G,EAAG+1G,GAE/D5wH,EAAS6a,EAAGiyG,GACZ,OAAO,IAETjyG,EAEN,OAAO,GAOX20G,EAAS7tH,UAAU81D,UAAY,WAC3B,OAAOhzD,KAAKy+E,SAOhBssC,EAAS7tH,UAAUkrH,WAAa,WAC5B,OAAOpoH,KAAKklH,SAOhB6F,EAAS7tH,UAAUirH,WAAa,WAC5B,OAAOnoH,KAAKilH,SAQhB8F,EAAS7tH,UAAUqvE,UAAY,SAAUn2D,GACrC,OAAIpW,KAAKu3F,QACEv3F,KAAKu3F,QAGLv3F,KAAKqrH,SAASj1G,IAS7B20G,EAAS7tH,UAAUovH,cAAgB,SAAUl2G,GACzC,OAAOpW,KAAKirH,aAAa70G,IAO7B20G,EAAS7tH,UAAUqvH,eAAiB,WAChC,OAAOvsH,KAAKirH,cAQhBF,EAAS7tH,UAAUsvH,2BAA6B,SAAUxE,EAAWmE,EAAet/D,GAChF,GAAIm7D,EAAU,GAAKhoH,KAAKklH,QAAS,CAC7B,GAAyB,IAArBllH,KAAKorH,YAAmB,CACxB,IAAI59D,EAAsB,EAAfw6D,EAAU,GACjBv6D,EAAsB,EAAfu6D,EAAU,GACrB,OAAO,YAAwBx6D,EAAMA,EAAO,EAAGC,EAAMA,EAAO,EAAG0+D,GAEnE,IAAIC,EAAkBpsH,KAAKqsH,mBAAmBrE,EAAWn7D,GACzD,OAAO7sD,KAAK+rH,0BAA0BK,EAAiBpE,EAAU,GAAK,EAAGmE,GAE7E,OAAO,MASXpB,EAAS7tH,UAAUuvH,mBAAqB,SAAUr2G,EAAGiyG,EAAWx7D,GAC5D,IAAIyf,EAAStsE,KAAKusE,UAAUn2D,GACxBi6C,EAAarwD,KAAKssH,cAAcl2G,GAChCq1G,EAAW,YAAOzrH,KAAK0sH,YAAYt2G,GAAIpW,KAAK2rH,UAC5Cn+D,EAAO8e,EAAO,GAAK+7C,EAAU76D,KAAOi+D,EAAS,GAAKp7D,EAClD3C,EAAO4e,EAAO,IAAM+7C,EAAU36D,KAAO,GAAK+9D,EAAS,GAAKp7D,EACxD5C,EAAO6e,EAAO,GAAK+7C,EAAU56D,KAAOg+D,EAAS,GAAKp7D,EAClD1C,EAAO2e,EAAO,IAAM+7C,EAAU16D,KAAO,GAAK89D,EAAS,GAAKp7D,EAC5D,OAAO,yBAAe7C,EAAMC,EAAMC,EAAMC,EAAMd,IASlDk+D,EAAS7tH,UAAU6uH,0BAA4B,SAAUt/D,EAAQr2C,EAAG+1G,GAChE,IAAInE,EAAY8C,EAChB9qH,KAAK2sH,uBAAuBlgE,EAAO,GAAIA,EAAO,GAAIr2C,GAAG,EAAO4xG,GAC5D,IAAIx6D,EAAOw6D,EAAU,GACjBv6D,EAAOu6D,EAAU,GAErB,OADAhoH,KAAK2sH,uBAAuBlgE,EAAO,GAAIA,EAAO,GAAIr2C,GAAG,EAAM4xG,GACpD,YAAwBx6D,EAAMw6D,EAAU,GAAIv6D,EAAMu6D,EAAU,GAAImE,IAM3EpB,EAAS7tH,UAAU0vH,mBAAqB,SAAU5E,GAC9C,IAAI17C,EAAStsE,KAAKusE,UAAUy7C,EAAU,IAClC33D,EAAarwD,KAAKssH,cAActE,EAAU,IAC1CyD,EAAW,YAAOzrH,KAAK0sH,YAAY1E,EAAU,IAAKhoH,KAAK2rH,UAC3D,MAAO,CACHr/C,EAAO,IAAM07C,EAAU,GAAK,IAAOyD,EAAS,GAAKp7D,EACjDic,EAAO,IAAM07C,EAAU,GAAK,IAAOyD,EAAS,GAAKp7D,IAWzD06D,EAAS7tH,UAAUmvH,mBAAqB,SAAUrE,EAAWn7D,GACzD,IAAIyf,EAAStsE,KAAKusE,UAAUy7C,EAAU,IAClC33D,EAAarwD,KAAKssH,cAActE,EAAU,IAC1CyD,EAAW,YAAOzrH,KAAK0sH,YAAY1E,EAAU,IAAKhoH,KAAK2rH,UACvDn+D,EAAO8e,EAAO,GAAK07C,EAAU,GAAKyD,EAAS,GAAKp7D,EAChD5C,EAAO6e,EAAO,IAAM07C,EAAU,GAAK,GAAKyD,EAAS,GAAKp7D,EACtD3C,EAAOF,EAAOi+D,EAAS,GAAKp7D,EAC5B1C,EAAOF,EAAOg+D,EAAS,GAAKp7D,EAChC,OAAO,yBAAe7C,EAAMC,EAAMC,EAAMC,EAAMd,IAalDk+D,EAAS7tH,UAAU2vH,kCAAoC,SAAU3/D,EAAYmD,EAAYw3D,GACrF,OAAO7nH,KAAK8sH,gCAAgC5/D,EAAW,GAAIA,EAAW,GAAImD,GAAY,EAAOw3D,IAejGkD,EAAS7tH,UAAU4vH,gCAAkC,SAAUvsH,EAAGkjB,EAAG4sC,EAAY08D,EAA2BlF,GACxG,IAAIzxG,EAAIpW,KAAKgtH,kBAAkB38D,GAC3BvjD,EAAQujD,EAAarwD,KAAKssH,cAAcl2G,GACxCk2D,EAAStsE,KAAKusE,UAAUn2D,GACxBq1G,EAAW,YAAOzrH,KAAK0sH,YAAYt2G,GAAIpW,KAAK2rH,UAC5CsB,EAAUF,EAA4B,GAAM,EAC5CG,EAAUH,EAA4B,GAAM,EAC5CI,EAAcv3G,KAAKC,OAAOtV,EAAI+rE,EAAO,IAAMjc,EAAa48D,GACxDG,EAAcx3G,KAAKC,OAAOy2D,EAAO,GAAK7oD,GAAK4sC,EAAa68D,GACxDG,EAAcvgH,EAAQqgH,EAAe1B,EAAS,GAC9C6B,EAAcxgH,EAAQsgH,EAAe3B,EAAS,GASlD,OARIsB,GACAM,EAAaz3G,KAAKo2D,KAAKqhD,GAAc,EACrCC,EAAa13G,KAAKo2D,KAAKshD,GAAc,IAGrCD,EAAaz3G,KAAKC,MAAMw3G,GACxBC,EAAa13G,KAAKC,MAAMy3G,IAErB,YAAwBl3G,EAAGi3G,EAAYC,EAAYzF,IAiB9DkD,EAAS7tH,UAAUyvH,uBAAyB,SAAUpsH,EAAGkjB,EAAGrN,EAAG22G,EAA2BlF,GACtF,IAAIv7C,EAAStsE,KAAKusE,UAAUn2D,GACxBi6C,EAAarwD,KAAKssH,cAAcl2G,GAChCq1G,EAAW,YAAOzrH,KAAK0sH,YAAYt2G,GAAIpW,KAAK2rH,UAC5CsB,EAAUF,EAA4B,GAAM,EAC5CG,EAAUH,EAA4B,GAAM,EAC5CI,EAAcv3G,KAAKC,OAAOtV,EAAI+rE,EAAO,IAAMjc,EAAa48D,GACxDG,EAAcx3G,KAAKC,OAAOy2D,EAAO,GAAK7oD,GAAK4sC,EAAa68D,GACxDG,EAAaF,EAAc1B,EAAS,GACpC6B,EAAaF,EAAc3B,EAAS,GASxC,OARIsB,GACAM,EAAaz3G,KAAKo2D,KAAKqhD,GAAc,EACrCC,EAAa13G,KAAKo2D,KAAKshD,GAAc,IAGrCD,EAAaz3G,KAAKC,MAAMw3G,GACxBC,EAAa13G,KAAKC,MAAMy3G,IAErB,YAAwBl3G,EAAGi3G,EAAYC,EAAYzF,IAU9DkD,EAAS7tH,UAAUqwH,yBAA2B,SAAUrgE,EAAY92C,EAAGyxG,GACnE,OAAO7nH,KAAK2sH,uBAAuBz/D,EAAW,GAAIA,EAAW,GAAI92C,GAAG,EAAOyxG,IAM/EkD,EAAS7tH,UAAUswH,uBAAyB,SAAUxF,GAClD,OAAOhoH,KAAKirH,aAAajD,EAAU,KAUvC+C,EAAS7tH,UAAUwvH,YAAc,SAAUt2G,GACvC,OAAIpW,KAAKwrH,UACExrH,KAAKwrH,UAGLxrH,KAAKsrH,WAAWl1G,IAO/B20G,EAAS7tH,UAAUorH,iBAAmB,SAAUlyG,GAC5C,OAAKpW,KAAK0rH,gBAMC1rH,KAAK0rH,gBAAgBt1G,GALrBpW,KAAKy+E,QACNz+E,KAAK+rH,0BAA0B/rH,KAAKy+E,QAASroE,GAC7C,MAcd20G,EAAS7tH,UAAU8vH,kBAAoB,SAAU38D,EAAYo9D,GACzD,IAAIr3G,EAAI,YAAkBpW,KAAKirH,aAAc56D,EAAYo9D,GAAiB,GAC1E,OAAO,YAAMr3G,EAAGpW,KAAKilH,QAASjlH,KAAKklH,UAMvC6F,EAAS7tH,UAAU8uH,qBAAuB,SAAUv/D,GAGhD,IAFA,IAAIhyD,EAASuF,KAAKirH,aAAaxwH,OAC3BizH,EAAiB,IAAIlwH,MAAM/C,GACtB2b,EAAIpW,KAAKilH,QAAS7uG,EAAI3b,IAAU2b,EACrCs3G,EAAet3G,GAAKpW,KAAK+rH,0BAA0Bt/D,EAAQr2C,GAE/DpW,KAAK0rH,gBAAkBgC,GAEpB3C,EAxckB,G,kBCrCtB,SAAS4C,EAAiB76D,GAC7B,IAAIozD,EAAWpzD,EAAWkzD,qBAK1B,OAJKE,IACDA,EAAW0H,EAAoB96D,GAC/BA,EAAWmzD,mBAAmBC,IAE3BA,EAQJ,SAASrzD,EAAMqzD,EAAU8B,EAAWl1D,GACvC,IAAI18C,EAAI4xG,EAAU,GACd53D,EAAS81D,EAAS0G,mBAAmB5E,GACrCj1D,EAAmB86D,EAAqB/6D,GAC5C,GAAK,6BAAmBC,EAAkB3C,GAOtC,OAAO43D,EANP,IAAI90D,EAAa,mBAASH,GACtB8J,EAAajnD,KAAKo2D,MAAMjZ,EAAiB,GAAK3C,EAAO,IAAM8C,GAE/D,OADA9C,EAAO,IAAM8C,EAAa2J,EACnBqpD,EAASqH,yBAAyBn9D,EAAQh6C,GAelD,SAAS03G,EAAgBrhE,EAAQshE,EAAaC,EAAcC,GAC/D,IAAIp+D,OAAwBpxD,IAAfwvH,EAA2BA,EAAaC,EAAA,EAAOl+D,SACxDk7D,EAAciD,EAAsB1hE,EAAQshE,EAAaC,GAC7D,OAAO,IAAI,EAAS,CAChBvhE,OAAQA,EACR6f,OAAQ,oBAAU7f,EAAQoD,GAC1Bq7D,YAAaA,EACbO,SAAUuC,IAoBX,SAASI,EAAUl6D,GACtB,IAAIm6D,EAAan6D,GAAe,GAC5BzH,EAAS4hE,EAAW5hE,QAAU,cAAc,aAAauG,YACzDs7D,EAAc,CACd7hE,OAAQA,EACRw4D,QAASoJ,EAAWpJ,QACpBwG,SAAU4C,EAAW5C,SACrBP,YAAaiD,EAAsB1hE,EAAQ4hE,EAAWnJ,QAASmJ,EAAW5C,SAAU4C,EAAWrJ,gBAEnG,OAAO,IAAI,EAASsJ,GAYxB,SAASH,EAAsB1hE,EAAQshE,EAAaC,EAAcO,GAU9D,IATA,IAAIrJ,OAA0BzmH,IAAhBsvH,EAA4BA,EAAc,IACpDt0E,EAAS,oBAAUgT,GACnBjT,EAAQ,mBAASiT,GACjBg/D,EAAW,iBAAwBhtH,IAAjBuvH,EAA6BA,EAAe,KAC9DhJ,EAAgBuJ,EAAoB,EAClCA,EACA34G,KAAK8K,IAAI84B,EAAQiyE,EAAS,GAAIhyE,EAASgyE,EAAS,IAClDhxH,EAASyqH,EAAU,EACnBgG,EAAc,IAAI1tH,MAAM/C,GACnB2b,EAAI,EAAGA,EAAI3b,IAAU2b,EAC1B80G,EAAY90G,GAAK4uG,EAAgBpvG,KAAKqrG,IAAI,EAAG7qG,GAEjD,OAAO80G,EAWJ,SAAS0C,EAAoB96D,EAAYi7D,EAAaC,EAAcC,GAEvE,OAAOH,EADMD,EAAqB/6D,GACHi7D,EAAaC,EAAcC,GAQvD,SAASJ,EAAqB/6D,GAEjC,IAAIrG,GADJqG,EAAa,cAAcA,IACHE,YACxB,IAAKvG,EAAQ,CACT,IAAI+hE,EAAQ,IAAM,kBAAgB52D,EAAA,EAAMiB,SAAY/F,EAAW8G,mBAC/DnN,EAAS,0BAAgB+hE,GAAOA,EAAMA,EAAMA,GAEhD,OAAO/hE,I,sBC7IX,WAgBC,KAhBD,aACI,MAAsB,oBAAX3vD,QAA4C,mBAAXA,OAIjCA,OAEgB,oBAAXuJ,OAELA,OAEc,oBAATq7G,KAELA,KAEJ1hH,MACV,kC,6BCVc,KAMXyuH,UAAW,YAMXlG,WAAY,aAOZ7D,WAAY,aAOZgK,YAAa,cAQbC,eAAgB,mB,6BCxCpB,qJAYO,SAASC,EAAyBngE,EAAiBpxD,EAAQyF,EAAK4rD,EAAQjC,GAS3E,OARc,wBAAcA,GAK5B,SAAUS,GACN,OAAQ2hE,EAAqBpgE,EAAiBpxD,EAAQyF,EAAK4rD,EAAQxB,EAAW,GAAIA,EAAW,OAa9F,SAAS2hE,EAAqBpgE,EAAiBpxD,EAAQyF,EAAK4rD,EAAQnuD,EAAGkjB,GAW1E,IAHA,IAAIqrG,EAAK,EACL99D,EAAKvC,EAAgB3rD,EAAM4rD,GAC3B0C,EAAK3C,EAAgB3rD,EAAM4rD,EAAS,GACjCrxD,EAASyF,EAAKzF,GAAUqxD,EAAQ,CACnC,IAAIuC,EAAKxC,EAAgBpxD,GACrBg0D,EAAK5C,EAAgBpxD,EAAS,GAC9B+zD,GAAM3tC,EACF4tC,EAAK5tC,IAAMwtC,EAAKD,IAAOvtC,EAAI2tC,IAAO7wD,EAAIywD,IAAOK,EAAKD,GAAM,GACxD09D,IAGCz9D,GAAM5tC,IAAMwtC,EAAKD,IAAOvtC,EAAI2tC,IAAO7wD,EAAIywD,IAAOK,EAAKD,GAAM,GAC9D09D,IAEJ99D,EAAKC,EACLG,EAAKC,EAET,OAAc,IAAPy9D,EAWJ,SAASC,EAAsBtgE,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQnuD,EAAGkjB,GAC5E,GAAoB,IAAhBgkD,EAAKhtE,OACL,OAAO,EAEX,IAAKo0H,EAAqBpgE,EAAiBpxD,EAAQoqE,EAAK,GAAI/Y,EAAQnuD,EAAGkjB,GACnE,OAAO,EAEX,IAAK,IAAI5nB,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EACxC,GAAIgzH,EAAqBpgE,EAAiBgZ,EAAK5rE,EAAI,GAAI4rE,EAAK5rE,GAAI6yD,EAAQnuD,EAAGkjB,GACvE,OAAO,EAGf,OAAO,EAWJ,SAASurG,EAAuBvgE,EAAiBpxD,EAAQ8qE,EAAOzZ,EAAQnuD,EAAGkjB,GAC9E,GAAqB,IAAjB0kD,EAAM1tE,OACN,OAAO,EAEX,IAAK,IAAIoB,EAAI,EAAG8a,EAAKwxD,EAAM1tE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC5C,IAAI4rE,EAAOU,EAAMtsE,GACjB,GAAIkzH,EAAsBtgE,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQnuD,EAAGkjB,GAChE,OAAO,EAEXpmB,EAASoqE,EAAKA,EAAKhtE,OAAS,GAEhC,OAAO,I,6BCtGX,WACQguC,EADR,iFAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAsBnFomF,EAA4B,SAAU7lF,GAOtC,SAAS6lF,EAAWziE,EAAaw+B,GAC7B,IAAI/yE,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAmBjC,OAdAiY,EAAMozE,WAAa,EAKnBpzE,EAAMqzE,mBAAqB,OACR7sF,IAAfusF,GAA6BxtF,MAAMvB,QAAQuwD,EAAY,IAKvDv0C,EAAMyzE,eACsD,EAAeV,GAL3E/yE,EAAMwzE,mBAAmBT,EACI,GAM1B/yE,EAoFX,OA9GAywB,EAAUumF,EAAY7lF,GAiCtB6lF,EAAW/xH,UAAUwD,MAAQ,WACzB,OAAO,IAAIuuH,EAAWjvH,KAAKyuD,gBAAgBhxD,QAASuC,KAAK8rF,SAS7DmjC,EAAW/xH,UAAU8uF,eAAiB,SAAUzrF,EAAGkjB,EAAGwoE,EAAcC,GAChE,OAAIA,EAAqB,mCAAyBlsF,KAAKgzD,YAAazyD,EAAGkjB,GAC5DyoE,GAEPlsF,KAAKsrF,mBAAqBtrF,KAAK+pF,gBAC/B/pF,KAAKqrF,UAAYz1E,KAAKu3B,KAAK,YAAgBntC,KAAKyuD,gBAAiB,EAAGzuD,KAAKyuD,gBAAgBh0D,OAAQuF,KAAK0uD,OAAQ,IAC9G1uD,KAAKsrF,kBAAoBtrF,KAAK+pF,eAE3B,YAAmB/pF,KAAKyuD,gBAAiB,EAAGzuD,KAAKyuD,gBAAgBh0D,OAAQuF,KAAK0uD,OAAQ1uD,KAAKqrF,WAAW,EAAM9qF,EAAGkjB,EAAGwoE,EAAcC,KAO3I+iC,EAAW/xH,UAAUsyD,QAAU,WAC3B,OAAO,YAAexvD,KAAKyuD,gBAAiB,EAAGzuD,KAAKyuD,gBAAgBh0D,OAAQuF,KAAK0uD,SAOrFugE,EAAW/xH,UAAUq5C,eAAiB,WAClC,OAAO,YAAmBv2C,KAAKyuD,gBAAiB,EAAGzuD,KAAKyuD,gBAAgBh0D,OAAQuF,KAAK0uD,SAOzFugE,EAAW/xH,UAAUyvF,8BAAgC,SAAUhJ,GAC3D,IAAIiJ,EAA4B,GAEhC,OADAA,EAA0BnyF,OAAS,YAAeuF,KAAKyuD,gBAAiB,EAAGzuD,KAAKyuD,gBAAgBh0D,OAAQuF,KAAK0uD,OAAQi1B,EAAkBiJ,EAA2B,GAC3J,IAAIqiC,EAAWriC,EAA2B,IAAeE,KAOpEmiC,EAAW/xH,UAAU4qE,QAAU,WAC3B,OAAO,UAAa3K,aAQxB8xD,EAAW/xH,UAAU6vF,iBAAmB,SAAUtgC,GAC9C,OAAO,GAQXwiE,EAAW/xH,UAAUwuF,eAAiB,SAAUl/B,EAAaw+B,GACzDhrF,KAAKgtF,UAAUhC,EAAYx+B,EAAa,GACnCxsD,KAAKyuD,kBACNzuD,KAAKyuD,gBAAkB,IAE3BzuD,KAAKyuD,gBAAgBh0D,OAAS,YAAmBuF,KAAKyuD,gBAAiB,EAAGjC,EAAaxsD,KAAK0uD,QAC5F1uD,KAAKy+D,WAEFwwD,EA/GoB,CAgH7B,KACa,a,6BCjJf,uKAcO,SAASC,EAAqBzgE,EAAiBpxD,EAAQyF,EAAK4rD,EAAQjC,GACvE,IAAI0iE,EAAoB,gCAAsB,wBAAe1gE,EAAiBpxD,EAAQyF,EAAK4rD,GAC3F,QAAK,qBAAWjC,EAAQ0iE,OAGpB,yBAAe1iE,EAAQ0iE,KAGvBA,EAAkB,IAAM1iE,EAAO,IAAM0iE,EAAkB,IAAM1iE,EAAO,KAGpE0iE,EAAkB,IAAM1iE,EAAO,IAAM0iE,EAAkB,IAAM1iE,EAAO,IAGjE,YAAegC,EAAiBpxD,EAAQyF,EAAK4rD,GAOpD,SAAU0gE,EAAQC,GACd,OAAO,4BAAkB5iE,EAAQ2iE,EAAQC,SAW1C,SAASC,EAA0B7gE,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQjC,GAC7E,IAAK,IAAI5wD,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC3C,GAAIqzH,EAAqBzgE,EAAiBpxD,EAAQoqE,EAAK5rE,GAAI6yD,EAAQjC,GAC/D,OAAO,EAEXpvD,EAASoqE,EAAK5rE,GAElB,OAAO,EAoCJ,SAAS0zH,EAA0B9gE,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQjC,GAC7E,IA3BG,SAA8BgC,EAAiBpxD,EAAQyF,EAAK4rD,EAAQjC,GACvE,QAAIyiE,EAAqBzgE,EAAiBpxD,EAAQyF,EAAK4rD,EAAQjC,OAG3D,YAAqBgC,EAAiBpxD,EAAQyF,EAAK4rD,EAAQjC,EAAO,GAAIA,EAAO,QAG7E,YAAqBgC,EAAiBpxD,EAAQyF,EAAK4rD,EAAQjC,EAAO,GAAIA,EAAO,QAG7E,YAAqBgC,EAAiBpxD,EAAQyF,EAAK4rD,EAAQjC,EAAO,GAAIA,EAAO,OAG7E,YAAqBgC,EAAiBpxD,EAAQyF,EAAK4rD,EAAQjC,EAAO,GAAIA,EAAO,OAc5E+iE,CAAqB/gE,EAAiBpxD,EAAQoqE,EAAK,GAAI/Y,EAAQjC,GAChE,OAAO,EAEX,GAAoB,IAAhBgb,EAAKhtE,OACL,OAAO,EAEX,IAAK,IAAIoB,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EACxC,GAAI,YAAyB4yD,EAAiBgZ,EAAK5rE,EAAI,GAAI4rE,EAAK5rE,GAAI6yD,EAAQjC,KACnEyiE,EAAqBzgE,EAAiBgZ,EAAK5rE,EAAI,GAAI4rE,EAAK5rE,GAAI6yD,EAAQjC,GACrE,OAAO,EAInB,OAAO,EAUJ,SAASgjE,EAA+BhhE,EAAiBpxD,EAAQ8qE,EAAOzZ,EAAQjC,GACnF,IAAK,IAAI5wD,EAAI,EAAG8a,EAAKwxD,EAAM1tE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC5C,IAAI4rE,EAAOU,EAAMtsE,GACjB,GAAI0zH,EAA0B9gE,EAAiBpxD,EAAQoqE,EAAM/Y,EAAQjC,GACjE,OAAO,EAEXpvD,EAASoqE,EAAKA,EAAKhtE,OAAS,GAEhC,OAAO,I,6BC1HX,WACQguC,EADR,SAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAanF6mF,EAAiC,SAAUtmF,GAS3C,SAASsmF,EAAgBzoH,EAAM1F,EAAKoL,EAAegjH,EAAcC,GAC7D,IAAI33G,EAAQmxB,EAAO1rC,KAAKsC,KAAMiH,EAAM1F,EAAKquH,IAAmB5vH,KA0B5D,OAnBAiY,EAAMtL,cAAgBA,EAKtBsL,EAAM43G,OAAS,KAKf53G,EAAM63G,YAAc,KAQpB73G,EAAM83G,cAA4BtxH,IAAjBkxH,GAA6BA,EACvC13G,EAyDX,OA5FAywB,EAAUgnF,EAAiBtmF,GAqC3BnsC,OAAOy2B,eAAeg8F,EAAgBxyH,UAAW,QAAS,CAMtDy2B,IAAK,WAID,OAHK3zB,KAAK6vH,SACN7vH,KAAK6vH,OAAS7vH,KAAKuB,IAAIyuH,cAAchwH,KAAK2M,gBAEvC3M,KAAK6vH,QAEhBh8F,IAAK,SAAUwuC,GACXriE,KAAK6vH,OAASxtD,GAElBvuC,YAAY,EACZC,cAAc,IAElB92B,OAAOy2B,eAAeg8F,EAAgBxyH,UAAW,aAAc,CAO3Dy2B,IAAK,WAID,OAHK3zB,KAAK8vH,cACN9vH,KAAK8vH,YAAc9vH,KAAKuB,IAAI0uH,uBAAuBjwH,KAAKqiE,QAErDriE,KAAK8vH,aAEhBj8F,IAAK,SAAUq5B,GACXltD,KAAK8vH,YAAc5iE,GAEvBp5B,YAAY,EACZC,cAAc,IAOlB27F,EAAgBxyH,UAAU6M,eAAiB,WACvCq/B,EAAOlsC,UAAU6M,eAAerM,KAAKsC,MACrCA,KAAK2M,cAAc5C,kBAOvB2lH,EAAgBxyH,UAAU8M,gBAAkB,WACxCo/B,EAAOlsC,UAAU8M,gBAAgBtM,KAAKsC,MACtCA,KAAK2M,cAAc3C,mBAEhB0lH,EA7FyB,CA8FlC,KACa,a,6BChHA,KACXvpC,UAAW,EACXC,YAAa,I,gBCRjB,IAAIgqB,EAAS,EAAQ,KACjB8f,EAAY,EAAQ,KACpBC,EAAiB,EAAQ,KAOzBC,EAAiBhgB,EAASA,EAAOigB,iBAAc5xH,EAkBnD8E,EAAO65D,QATP,SAAoB7+D,GAClB,OAAa,MAATA,OACeE,IAAVF,EAdQ,qBADL,gBAiBJ6xH,GAAkBA,KAAkBnzH,OAAOsB,GAC/C2xH,EAAU3xH,GACV4xH,EAAe5xH,K,gBCxBrB,IAAI+xH,EAAa,EAAQ,KAGrBC,EAA0B,iBAAR7O,MAAoBA,MAAQA,KAAKzkH,SAAWA,QAAUykH,KAGxE8O,EAAOF,GAAcC,GAAYzuH,SAAS,cAATA,GAErCyB,EAAO65D,QAAUozD,G,cCoBjBjtH,EAAO65D,QAJP,SAAsB7+D,GACpB,OAAgB,MAATA,GAAiC,iBAATA,I,cCFjC,IAAItC,EAAUuB,MAAMvB,QAEpBsH,EAAO65D,QAAUnhE,G,cCxBjB,IAGIw0H,EAAW,mBAoBfltH,EAAO65D,QAVP,SAAiB7+D,EAAO9D,GACtB,IAAIwM,SAAc1I,EAGlB,SAFA9D,EAAmB,MAAVA,EAfY,iBAewBA,KAGlC,UAARwM,GACU,UAARA,GAAoBwpH,EAASnxH,KAAKf,KAChCA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQ9D,I,gBCrBjD,IAGIi2H,EAHY,EAAQ,IAGLC,CAAU1zH,OAAQ,UAErCsG,EAAO65D,QAAUszD,G,gBCLjB,IAAIE,EAAK,EAAQ,KAoBjBrtH,EAAO65D,QAVP,SAAsBx6D,EAAO0M,GAE3B,IADA,IAAI7U,EAASmI,EAAMnI,OACZA,KACL,GAAIm2H,EAAGhuH,EAAMnI,GAAQ,GAAI6U,GACvB,OAAO7U,EAGX,OAAQ,I,cCmBV8I,EAAO65D,QAJP,SAAY7+D,EAAOsyH,GACjB,OAAOtyH,IAAUsyH,GAAUtyH,GAAUA,GAASsyH,GAAUA,I,gBCjC1D,IAAIC,EAAY,EAAQ,KAiBxBvtH,EAAO65D,QAPP,SAAoB77D,EAAK+N,GACvB,IAAIiY,EAAOhmB,EAAIwvH,SACf,OAAOD,EAAUxhH,GACbiY,EAAmB,iBAAPjY,EAAkB,SAAW,QACzCiY,EAAKhmB,M,6BCdX;;;;;;;;;;;;;;AAgBO,MAAM5E,EAAQ,IAAI+tH,QAgBZt5E,EAAS,CAAChvC,EAAQ6kF,EAAWjtE,KACtC,IAAImS,EAAOxvB,EAAMg3B,IAAIszD,QACRxoF,IAAT0tB,IACA,YAAY86D,EAAWA,EAAUj+B,YACjCrsD,EAAMk3B,IAAIozD,EAAW96D,EAAO,IAAI,IAASlvB,OAAO6/F,OAAO,CAAE2U,gBAAA,KAAmBz3F,KAC5EmS,EAAK6kG,WAAW/pC,IAEpB96D,EAAK9c,SAASjN,GACd+pB,EAAKykF,W,6BCxCT;;;;;;;;;;;;;;AAaA,MAAMqgB,EAAa,IAAIvG,QAyCV/Z,EAAah2G,GAAM,IAAKoF,KACjC,MAAMkW,EAAItb,KAAKoF,GAEf,OADAkxH,EAAWp9F,IAAI5d,GAAG,GACXA,GAEEi7G,EAAe/uH,GACJ,mBAANA,GAAoB8uH,EAAWr3H,IAAIuI,I,6BC5DrD;;;;;;;;;;;;;;AAiBO,MAAMgvH,EAAW,GAIXC,EAAU,I,6BCrBvB;;;;;;;;;;;;;;AAmBO,MAAMC,EACT,YAAYn6F,EAAUw6E,EAAW13F,GAC7Bha,KAAKsxH,QAAU,GACftxH,KAAKk3B,SAAWA,EAChBl3B,KAAK0xG,UAAYA,EACjB1xG,KAAKga,QAAUA,EAEnB,OAAOijF,GACH,IAAIphG,EAAI,EACR,IAAK,MAAMswB,KAAQnsB,KAAKsxH,aACP7yH,IAAT0tB,GACAA,EAAK9c,SAAS4tF,EAAOphG,IAEzBA,IAEJ,IAAK,MAAMswB,KAAQnsB,KAAKsxH,aACP7yH,IAAT0tB,GACAA,EAAKykF,SAIjB,SAsCI,MAAMe,EAAW,IACb3xG,KAAKk3B,SAASvwB,QAAQ22G,QAAQz8G,WAAU,GACxCgG,SAAS0qH,WAAWvxH,KAAKk3B,SAASvwB,QAAQ22G,SAAS,GACjDlsG,EAAQ,GACRzU,EAAQqD,KAAKk3B,SAASv6B,MAEtBygH,EAASv2G,SAASw2G,iBAAiB1L,EAAU,IAAkD,MAAM,GAC3G,IAEIxlF,EAFA4lF,EAAY,EACZyf,EAAY,EAEZtoH,EAAOk0G,EAAOI,WAElB,KAAOzL,EAAYp1G,EAAMlC,QAErB,GADA0xB,EAAOxvB,EAAMo1G,GACR,YAAqB5lF,GAA1B,CAQA,KAAOqlG,EAAYrlG,EAAK9pB,OACpBmvH,IACsB,aAAlBtoH,EAAK2E,WACLuD,EAAM5Q,KAAK0I,GACXk0G,EAAOY,YAAc90G,EAAKo0G,SAEK,QAA9Bp0G,EAAOk0G,EAAOI,cAKfJ,EAAOY,YAAc5sG,EAAM5S,MAC3B0K,EAAOk0G,EAAOI,YAItB,GAAkB,SAAdrxF,EAAKllB,KAAiB,CACtB,MAAMklB,EAAOnsB,KAAK0xG,UAAU+f,qBAAqBzxH,KAAKga,SACtDmS,EAAKulG,gBAAgBxoH,EAAKsoG,iBAC1BxxG,KAAKsxH,QAAQ9wH,KAAK2rB,QAGlBnsB,KAAKsxH,QAAQ9wH,QAAQR,KAAK0xG,UAAUigB,2BAA2BzoH,EAAMijB,EAAKnuB,KAAMmuB,EAAK60E,QAAShhG,KAAKga,UAEvG+3F,SA/BI/xG,KAAKsxH,QAAQ9wH,UAAK/B,GAClBszG,IAoCR,OAJI,MACAlrG,SAAS+qH,UAAUjgB,GACnBqQ,eAAe6P,QAAQlgB,IAEpBA,K,8BClIf,+CAoBO,SAASmgB,EAAYv7D,GACxB,OAAI/4D,MAAMvB,QAAQs6D,GACP,mBAASA,GAGTA,I,gBCzBf,UAAO,CAAC,MAAkB,YAqEzB,KArE0C,EAAF,SAAW58D,EAAMI,GAK1D,IAAIg4H,EAAS,GA+Db,OA3DAh4H,EAAKuE,UAAU,cAAeyzH,GAE9BA,EAAO52B,aAAe,SAAmB/5F,EAAgB4wH,GAMxD,OAAO5wH,EAAIC,QAAQ,kCAAkC,SAAS4wH,GAC7D,OAAGD,IAAiC,GAAvBA,EAAOhvH,QAAQivH,GACpBA,EAED,KAAOA,MAIhBF,EAAOG,aAAe,SAAyB5xH,EAAiB6xH,EAAgBC,GAmB/E,KAAK9xH,aAAe9C,OACnB,OAAO20H,EAAG7xH,GAKX,IADA,IAAI0V,EAAI,GACAna,EAAI,EAAGA,EAAIyE,EAAI7F,OAAQoB,IAE9Bma,EAAExV,KAAK2xH,EAAG7xH,EAAIzE,KAIf,OAAOk2H,EAAOM,MAAMr8G,EAAE/V,KAAK,KAAMmyH,IAGlCL,EAAOM,MAAQ,SAAmBC,EAAwBF,GAMzD,MAAO,KAAOA,EAAa,KAAK,IAAME,EAAa,KAG7CP,GACN,+B,6BCrED,+KACQtpF,EADR,4BAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAOA,EAAEnF,eAAe9T,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MACpDkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAGnFC,EAA0C,SAAUC,EAAY/hC,EAAQsI,EAAK05B,GAC7E,IAA2H/yB,EAAvH9K,EAAIzP,UAAUjB,OAAQwG,EAAIkK,EAAI,EAAInE,EAAkB,OAATgiC,EAAgBA,EAAO/rC,OAAOgsC,yBAAyBjiC,EAAQsI,GAAO05B,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBloC,EAAIioC,QAAQC,SAASJ,EAAY/hC,EAAQsI,EAAK05B,QACpH,IAAK,IAAIntC,EAAIktC,EAAWtuC,OAAS,EAAGoB,GAAK,EAAGA,KAASoa,EAAI8yB,EAAWltC,MAAIoF,GAAKkK,EAAI,EAAI8K,EAAEhV,GAAKkK,EAAI,EAAI8K,EAAEjP,EAAQsI,EAAKrO,GAAKgV,EAAEjP,EAAQsI,KAASrO,GAChJ,OAAOkK,EAAI,GAAKlK,GAAKhE,OAAOy2B,eAAe1sB,EAAQsI,EAAKrO,GAAIA,GAW5DsxH,EAA2B,SAAUnpF,GAErC,SAASmpF,IACL,OAAkB,OAAXnpF,GAAmBA,EAAOxtC,MAAMoE,KAAMtE,YAAcsE,KAiB/D,OAnBA0oC,EAAU6pF,EAAWnpF,GAIrBN,EAAW,CACP,YAAS,SACVypF,EAAUr1H,UAAW,iBAAa,GACrC4rC,EAAW,CACP,YAAS,KACVypF,EAAUr1H,UAAW,iBAAa,GACrC4rC,EAAW,CACP,YAAS,IACVypF,EAAUr1H,UAAW,iBAAa,GACrC4rC,EAAW,CACP,aAAS,IACVypF,EAAUr1H,UAAW,sBAAkB,GAC1C4rC,EAAW,CACP,YAAS,OACVypF,EAAUr1H,UAAW,cAAU,GAC3Bq1H,EApBmB,CAqB5B,KAMEC,EAAgC,SAAUppF,GAE1C,SAASopF,IACL,OAAkB,OAAXppF,GAAmBA,EAAOxtC,MAAMoE,KAAMtE,YAAcsE,KAW/D,OAbA0oC,EAAU8pF,EAAgBppF,GAI1BN,EAAW,CACP,YAAS,OACV0pF,EAAet1H,UAAW,aAAS,GACtC4rC,EAAW,CACP,YAAS,OACV0pF,EAAet1H,UAAW,aAAS,GACtC4rC,EAAW,CACP,YAAS,OACV0pF,EAAet1H,UAAW,WAAO,GAC7Bs1H,EAdwB,CAejC,KAMEC,EAA2B,SAAUrpF,GAErC,SAASqpF,IACL,OAAkB,OAAXrpF,GAAmBA,EAAOxtC,MAAMoE,KAAMtE,YAAcsE,KAuB/D,OAzBA0oC,EAAU+pF,EAAWrpF,GAIrBN,EAAW,CACP,aAAS,IACV2pF,EAAUv1H,UAAW,eAAW,GACnC4rC,EAAW,CACP,YAAS,OACV2pF,EAAUv1H,UAAW,gBAAY,GACpC4rC,EAAW,CACP,YAAS,OACV2pF,EAAUv1H,UAAW,cAAU,GAClC4rC,EAAW,CACP,YAAS,OACV2pF,EAAUv1H,UAAW,gBAAY,GACpC4rC,EAAW,CACP,YAAS,OACV2pF,EAAUv1H,UAAW,cAAU,GAClC4rC,EAAW,CACP,aAAS,IACV2pF,EAAUv1H,UAAW,wBAAoB,GAC5C4rC,EAAW,CACP,aAAS,IACV2pF,EAAUv1H,UAAW,sBAAkB,GACnCu1H,EA1BmB,CA2B5B,KAKEC,EAA6B,SAAUtpF,GAEvC,SAASspF,IACL,OAAkB,OAAXtpF,GAAmBA,EAAOxtC,MAAMoE,KAAMtE,YAAcsE,KAiB/D,OAnBA0oC,EAAUgqF,EAAatpF,GAIvBN,EAAW,CACP,YAAS,KACV4pF,EAAYx1H,UAAW,gBAAY,GACtC4rC,EAAW,CACP,YAAS,WACV4pF,EAAYx1H,UAAW,iBAAa,GACvC4rC,EAAW,CACP,YAAS,UACV4pF,EAAYx1H,UAAW,cAAU,GACpC4rC,EAAW,CACP,aAAS,IACV4pF,EAAYx1H,UAAW,iBAAa,GACvC4rC,EAAW,CACP,YAAS,OACV4pF,EAAYx1H,UAAW,cAAU,GAC7Bw1H,EApBqB,CAqB9B,KAIEC,EACM,WADNA,EAEK,QAFLA,EAGmB,iBAHnBA,EAIgB,oBAJhBA,EAKc,WALdA,EAMU,UANVA,EAOc,kBAPdA,EAQa,iBARbA,EASc,kBATdA,EAUO,UAVPA,EAWM,SAXNA,EAYO,UAZPA,EAaW,eAbXA,EAce,mBAdfA,EAea,iBAfbA,EAgBmB,iBAhBnBA,EAiBoB,kBAjBpBA,EAkBgB,aAlBhBA,EAmBiB,qBAnBjBA,EAoByB,6BApBzBA,EAqBwB,4BArBxBA,EAsBuB,2BAtBvBA,EAuBsB,0BAvBtBA,EAyBqB,0BAzBrBA,EA0BuB,mBA1BvBA,EA2BgB,oBA3BhBA,EA4Ba,iBA5BbA,EA6BuB,4BA7BvBA,EA8BqB,0BA9BrBA,EA+BqB,mBA/BrBA,EAgCgB,aAhChBA,EAiCkB,eAjClBA,EAkCmB,iBAlCnBA,EAmCoB,2BAnCpBA,EAoCiB,eApCjBA,EAqCkB,gBArClBA,EAsCiB,eAtCjBA,EAuCoB,aAvCpBA,EAwCiB,eAxCjBA,EAyCgB,cAzChBA,EA0CmB,eA1CnBA,GA4CgB,cA5ChBA,GA6CgB,cA7ChBA,GA8CoB,kBA9CpBA,GA+CsB,oBA/CtBA,GAgDqB,mBAhDrBA,GAiDuB,qBAjDvBA,GAkDqB,0BAlDrBA,GAmDqB,0BAnDrBA,GAoDU,cApDVA,GAqDQ,WArDRA,GAsDiB,cAtDjBA,GAuDe,gBAvDfA,GAwDgB,iBAxDhBA,GAyDgB,oBAzDhBA,GA0Dc,kBAedC,GAAwB,SAAUxpF,GAElC,SAASwpF,EAAO54G,EAASrT,GACrB,IAAIsR,EAAQmxB,EAAO1rC,KAAKsC,KAAMga,EAASrT,IAAY3G,KAgBnD,OAfAiY,EAAM46G,OAAS,OACf56G,EAAM66G,OAAS,SACf76G,EAAM86G,WAAa,CACfvnH,OAAQ,oKAERwnH,SAAU,yCAEd/6G,EAAMg7G,4BAA8B,CAChCznH,OAAQ,+EACRwnH,SAAU,uGAEd/6G,EAAMi7G,eAAiB,8CACvBj7G,EAAMk7G,eAAiB,KACvBl7G,EAAMmiC,MAAO,EACbniC,EAAMm7G,gBAAiB,EAChBn7G,EAu0FX,OAz1FAywB,EAAUkqF,EAAQxpF,GAoBlBwpF,EAAO11H,UAAUg0C,UAAY,WAEzBlxC,KAAKqzH,KAAO,IAAI,IAAK,SADJ,CAAEC,eAAgB,WAAYC,eAAgB,YACpBvzH,KAAKkE,QAChDlE,KAAKwzH,kBAAmB,EACxBxzH,KAAKyzH,sBAAwB,GAC7BzzH,KAAK0zH,kBAAoB,GACzB1zH,KAAK2zH,gBAAkB,GACvB3zH,KAAK4zH,kBACL5zH,KAAK6zH,kBACL7zH,KAAK8zH,eAETlB,EAAO11H,UAAU42H,YAAc,WAC3B,IAAIC,EAAc,YAAQ/zH,KAAK2G,QAAS,QACpCotH,GACA/zH,KAAKg0H,QAAS,EAGT,YAAkBh0H,KAAKi0H,iBACxBj0H,KAAKwjC,cAAc,CAAE,MAASxjC,KAAKi0H,iBAAkB,GAEzDj0H,KAAKi0H,eAAiBj0H,KAAKzB,MACT,UAAdyB,KAAKiH,OACJ,YAAkBjH,KAAKi0H,iBAAoD,iBAAzBj0H,KAAmB,eAGjE,YAAkBA,KAAKi0H,kBAC5Bj0H,KAAKi0H,eAAiBluG,WAAW,YAAW/lB,KAAKygB,OAHjDzgB,KAAKi0H,eAAiB,CAACluG,WAAW,YAAW/lB,KAAKygB,MAAOsF,WAAW,YAAW/lB,KAAK0gB,OAKxF1gB,KAAK+zH,YAAcA,GAGnB/zH,KAAKg0H,QAAS,GAGtBpB,EAAO11H,UAAU22H,gBAAkB,WAC/B7zH,KAAKk0H,qBAAuB,IAAI,IAAqBl0H,KAAKkE,SAE9D0uH,EAAO11H,UAAU02H,gBAAkB,WAC/B5zH,KAAK0zH,kBAAkB76G,OAAW,YAAkB7Y,KAAKm0H,QAAQt7G,QAAiC,KAAtB7Y,KAAKm0H,QAAQt7G,OACzF7Y,KAAK2zH,gBAAgB96G,OAAW,YAAkB7Y,KAAKo0H,MAAMv7G,QAA+B,KAApB7Y,KAAKo0H,MAAMv7G,QAEvF+5G,EAAO11H,UAAUm3H,aAAe,SAAU91H,EAAO+1H,GAC7C,IAAIC,EAAc,KACdF,EAAe,KACnB,GAAK91H,GAAmB,IAAVA,EAAc,CACxBg2H,EAAcv0H,KAAKyoB,aAAalqB,GAChC,IAAIi2H,EAAmBx0H,KAAKw0H,iBAAiBj2H,GAC7C81H,EAAer0H,KAAKk0H,qBAAqB5rG,gBAAgBgsG,EAA1Ct0H,CAAsDA,KAAKy0H,gBAAgBl2H,EAAOi2H,IAErG,MAAO,CAAEE,WAAYH,EAAaF,aAAcA,IAGpDzB,EAAO11H,UAAUurB,aAAe,SAAUlqB,GACtC,IAAIi2H,EAAmBx0H,KAAKw0H,iBAAiBj2H,GAC7C,OAAOyB,KAAKk0H,qBAAqB5rG,gBAAgB,CAC7CzK,sBAAuB22G,EACvB12G,sBAAuB02G,EAAkBx2G,aAAa,GAFnDhe,CAGJzB,IAGPq0H,EAAO11H,UAAUs3H,iBAAmB,SAAUj2H,GAC1C,IAAIo2H,EAAcp2H,EAAMjC,WAAWE,MAAM,KAAK,GAE9C,OADwBm4H,GAAgBA,EAAYl6H,OAAak6H,EAAYl6H,OAAhB,GAGjEm4H,EAAO11H,UAAUu3H,gBAAkB,SAAUl2H,EAAOq2H,GAChD,IAAIC,EAAWD,GAAa,EAC5B,OAAOp1E,OAAOjhD,EAAM0iB,QAAQ4zG,KAGhCjC,EAAO11H,UAAU43H,oBAAsB,SAAUv2H,GAC7CA,EAA0C,IAAjCyB,KAAKw0H,iBAAiBj2H,GAAgBihD,OAAOjhD,GAAO0iB,QAAQjhB,KAAK+0H,cAAgBx2H,EAE1F,IADA,IAAIy2H,EAAO,EACFn5H,EAAI,EAAGA,EAAImE,KAAK+0H,aAAcl5H,IACnCm5H,GAAQ,GAGZ,OADAz2H,EAAQihD,QAAQjhD,EAAQy2H,GAAM/zG,QAAQ,KAO1C2xG,EAAO11H,UAAUk0C,OAAS,WACjB,eAAepxC,KAAK0Y,kBACrB1Y,KAAKu1C,aAETv1C,KAAKi1H,aACLj1H,KAAK49C,aACL59C,KAAKk1H,YACLl1H,KAAK+xC,kBAET6gF,EAAO11H,UAAUq4C,WAAa,WAC1B,YAAS,CAACv1C,KAAK2G,SAAUgsH,GACzB3yH,KAAKm1H,eAETvC,EAAO11H,UAAUk4H,gBAAkB,SAAU57E,GACpC,YAAkBA,KACE,iBAAVA,EACPx5C,KAAKq1H,gBAAgBpnH,MAAMurC,MAAQ,YAAWA,GAExB,iBAAVA,IACZx5C,KAAKq1H,gBAAgBpnH,MAAMurC,MAASA,EAAM31C,MAAM,WAAc,EAAW,WAAD,CAAY21C,MAIhGo5E,EAAO11H,UAAUi4H,YAAc,SAAUG,GACjCA,GACA,YAAY,CAACt1H,KAAK2G,SAAU2uH,EAAY94H,MAAM,MAE9CwD,KAAKu1H,UACL,YAAS,CAACv1H,KAAK2G,SAAU3G,KAAKu1H,SAAS/4H,MAAM,OAGrDo2H,EAAO11H,UAAUs4H,WAAa,WACrBx1H,KAAKy1H,SAQN,YAAY,CAACz1H,KAAKq1H,iBAAkB,CAAC1C,IACjC3yH,KAAKm0H,QAAQrzF,WAAa9gC,KAAK01H,gBAA0C,WAAxB11H,KAAKm0H,QAAQwB,QAC9D31H,KAAK01H,eAAen1F,UAAU54B,OAAOgrH,GAEzC3yH,KAAK49C,eAXL,YAAS,CAAC59C,KAAKq1H,iBAAkB,CAAC1C,IAC9B3yH,KAAKm0H,QAAQrzF,WAAa9gC,KAAK01H,gBAA0C,WAAxB11H,KAAKm0H,QAAQwB,QAC9D31H,KAAK01H,eAAen1F,UAAUxkC,IAAI42H,GAEtC3yH,KAAKq/C,iBAUbuzE,EAAO11H,UAAU04H,SAAW,SAAU3uC,GAElC,OADY5gF,OAAOinC,iBAAiB25C,EAAW,UAAU15C,iBAAiB,WAC7DlsC,QAAQ,SAAU,KAMnCuxH,EAAO11H,UAAU+3H,WAAa,WACtB,eAAcj1H,KAAK0Y,kBACnB1Y,KAAKq1H,gBAAkBr1H,KAAK2G,QAAQ22C,cACpCt9C,KAAK61H,YAAc71H,KAAK2G,QAAQoL,cAAc,mBAC9C/R,KAAK81H,YAAc91H,KAAK2G,QAAQ22C,cAAcvrC,cAAc,qBAG5D/R,KAAKq1H,gBAAkBr1H,KAAKw+B,cAAc,MAAO,CAAE9E,UAAWi5F,EAA6B,IAAMA,IACjG3yH,KAAK2G,QAAQ0C,WAAW+3B,aAAaphC,KAAKq1H,gBAAiBr1H,KAAK2G,SAChE3G,KAAKq1H,gBAAgB36F,YAAY16B,KAAK2G,SACtC3G,KAAK61H,YAAc71H,KAAKw+B,cAAc,MAAO,CAAE9E,UAAWi5F,IAC1D3yH,KAAK2G,QAAQ+zB,YAAY16B,KAAK61H,cAElC71H,KAAKo1H,gBAAgBp1H,KAAKw5C,OAC1Bx5C,KAAK2G,QAAQovH,UAAY,EACzB/1H,KAAKg2H,yBACLh2H,KAAKi2H,aACLj2H,KAAKk2H,iBACDl2H,KAAKm2H,OAAOV,SACZz1H,KAAKo2H,iBAEJ,eAAep2H,KAAK0Y,mBACrB1Y,KAAKq2H,iBACLr2H,KAAK81H,YAAe91H,KAAKw+B,cAAc,QAAS,CAC5CX,MAAO,CACH52B,KAAM,SAAU1I,MAAQ,YAAkByB,KAAKzB,OAASyB,KAAKygB,IAAInkB,WAAa0D,KAAKzB,MAAMjC,WACzF0B,KAAMgC,KAAK2G,QAAQ6zB,aAAa,SAAWx6B,KAAK2G,QAAQ6zB,aAAa,OACjE,KAAuB,IAAhB5kB,KAAKsjB,UAAiBjY,QAAQ,GAAK,SAAUq1G,MAAO3D,KAGvE3yH,KAAK81H,YAAYC,UAAY,EAC7B/1H,KAAKq1H,gBAAgB36F,YAAY16B,KAAK81H,cAEtC91H,KAAKu2H,aACLv2H,KAAKw2H,aAETx2H,KAAKy2H,eACa,UAAdz2H,KAAKiH,KACLjH,KAAK02H,mBAGL12H,KAAKzB,MAAQ,YAAkByB,KAAKzB,OAASwnB,WAAW,YAAW/lB,KAAKygB,IAAInkB,aAAe0D,KAAKzB,MAEpGyB,KAAK22H,YAA4B,UAAd32H,KAAKiH,KAAmBjH,KAAK42H,iBAAiB7wG,WAAW,YAAW/lB,KAAKzB,MAAMjC,cAC9F,CAAC0D,KAAK42H,iBAAiB7wG,WAAW,YAAW/lB,KAAKzB,MAAM,GAAGjC,cACvD0D,KAAK42H,iBAAiB7wG,WAAW,YAAW/lB,KAAKzB,MAAM,GAAGjC,eAClE0D,KAAK62H,gBAAkB72H,KAAK22H,YACvB,YAAkB32H,KAAK2G,QAAQ6+C,aAAa,UAC7CxlD,KAAK2G,QAAQ6H,gBAAgB,QAEjCxO,KAAKqP,WACDrP,KAAKm2H,OAAOV,SACZz1H,KAAK82H,cAEoB,SAAzB92H,KAAKo0H,MAAM5kD,WACXxvE,KAAK+2H,cAEL/2H,KAAKm0H,QAAQrzF,WACb9gC,KAAKg3H,gBAEJ,eAAeh3H,KAAK0Y,mBAChB1Y,KAAKy1H,QAIN,YAAY,CAACz1H,KAAKq1H,iBAAkB,CAAC1C,IAHrC,YAAS,CAAC3yH,KAAKq1H,iBAAkB,CAAC1C,IAKlC3yH,KAAKi3H,SACL,YAAS,CAACj3H,KAAKq1H,iBAAkB,CAAC1C,KAGlC,YAAY,CAAC3yH,KAAKq1H,iBAAkB,CAAC1C,OAIjDC,EAAO11H,UAAU84H,uBAAyB,WACtCh2H,KAAKk3H,WAAqD,aAAxCl3H,KAAK41H,SAAS51H,KAAKq1H,kBACU,kBAAxCr1H,KAAK41H,SAAS51H,KAAKq1H,iBAC1Br1H,KAAKm3H,YAAsD,cAAxCn3H,KAAK41H,SAAS51H,KAAKq1H,kBACS,mBAAxCr1H,KAAK41H,SAAS51H,KAAKq1H,iBAC1Br1H,KAAKo3H,aAAuD,eAAxCp3H,KAAK41H,SAAS51H,KAAKq1H,iBACvCr1H,KAAKq3H,kBAAoBr3H,KAAKk3H,YAA4B,UAAdl3H,KAAKiH,MAAoBjH,KAAKm0H,QAAQrzF,WAEtF8xF,EAAO11H,UAAUg5H,eAAiB,WACZ,YAAdl2H,KAAKiH,OACLjH,KAAKgzH,SAAYhzH,KAAKw+B,cAAc,MAAO,CAAEX,MAAO,CAAEy4F,MAAO3D,KAC7D3yH,KAAK2G,QAAQ+zB,YAAY16B,KAAKgzH,UAC1BhzH,KAAKo6C,MAAsB,UAAdp6C,KAAKiH,OACO,eAArBjH,KAAK0M,YACL1M,KAAKgzH,SAASzyF,UAAUxkC,IAAI42H,IAG5B3yH,KAAKgzH,SAASzyF,UAAUxkC,IAAI42H,OAK5CC,EAAO11H,UAAUk5H,eAAiB,WAC9B,GAAI,eAAcp2H,KAAK0Y,iBACnB1Y,KAAKs3H,cAAgBt3H,KAAK2G,QAAQ46B,iBAAiB,aAAa,GAC9C,UAAdvhC,KAAKiH,OACLjH,KAAKu3H,eAAiBv3H,KAAK2G,QAAQ46B,iBAAiB,mBAAmB,QAG1E,CACD,IAAIi2F,EAAsC,UAAdx3H,KAAKiH,KAAmB0rH,GAChDA,GACJ6E,GAAyB,IAAM7E,GAC/B3yH,KAAKs3H,cAAiBt3H,KAAKw+B,cAAc,MAAO,CAC5CX,MAAO,CAAEy4F,MAAOkB,KAEpBx3H,KAAK2G,QAAQ+zB,YAAY16B,KAAKs3H,eACZ,UAAdt3H,KAAKiH,OACLjH,KAAKu3H,eAAkBv3H,KAAKw+B,cAAc,MAAO,CAC7CX,MAAO,CACHy4F,MAAO3D,GAA4B,IAAMA,MAGjD3yH,KAAK2G,QAAQ+zB,YAAY16B,KAAKu3H,mBAI1C3E,EAAO11H,UAAUm5H,eAAiB,WACL,aAArBr2H,KAAK0M,aACL1M,KAAKq1H,gBAAgB90F,UAAU54B,OAAOgrH,GACtC3yH,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GACnC3yH,KAAKy3H,YAAYhpH,aAAa,mBAAoB,cAChC,UAAdzO,KAAKiH,MACLjH,KAAK03H,aAAajpH,aAAa,mBAAoB,gBAIvDzO,KAAKq1H,gBAAgB90F,UAAU54B,OAAOgrH,GACtC3yH,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GACnC3yH,KAAKy3H,YAAYhpH,aAAa,mBAAoB,YAChC,UAAdzO,KAAKiH,MACLjH,KAAK03H,aAAajpH,aAAa,mBAAoB,cAI/DmkH,EAAO11H,UAAUy6H,kBAAoB,SAAUhxH,GAC3C,IAAIsR,EAAQjY,KACRygB,EAAMzgB,KAAKygB,IACXC,EAAM1gB,KAAK0gB,MACV,YAAkB1gB,KAAK43H,eAAiB53H,KAAK43H,aAAan9H,OAAS,IACpEgmB,EAAMzgB,KAAK43H,aAAa,GACxBl3G,EAAM1gB,KAAK43H,aAAa53H,KAAK43H,aAAan9H,OAAS,IAErC,UAAduF,KAAKiH,MACL,YAAWN,EAAS,CAChB,gBAAiB8Z,EAAInkB,WAAY,gBAAiBokB,EAAIpkB,eAI7C,YAAkB0D,KAAK43H,eAAiB53H,KAAK43H,aAAan9H,OAAS,EAC5E,CAAC,CAACgmB,EAAInkB,WAAa0D,KAAK43H,aAAa53H,KAAKzB,MAAM,IAAKjC,YACjD,CAAE0D,KAAK43H,aAAa53H,KAAKzB,MAAM,IAAKjC,WAAYokB,EAAIpkB,aACxD,CAAC,CAACmkB,EAAInkB,WAAY0D,KAAKzB,MAAM,GAAGjC,YAAa,CAAC0D,KAAKzB,MAAM,GAAGjC,WAAYokB,EAAIpkB,cAC1E2G,SAAQ,SAAU4c,EAAOxd,GAC3B,IAAIsE,EAAoB,IAAVtE,EAAc4V,EAAMw/G,YAAcx/G,EAAMy/G,aAClD/wH,GACA,YAAWA,EAAS,CAChB,gBAAiBkZ,EAAM,GAAI,gBAAiBA,EAAM,SAMtE+yG,EAAO11H,UAAU26H,mBAAqB,WAC9B,eAAc73H,KAAK0Y,iBACnB1Y,KAAK03H,aAAe13H,KAAK2G,QAAQoL,cAAc,qBAG/C/R,KAAK03H,aAAe13H,KAAKw+B,cAAc,MAAO,CAC1CX,MAAO,CACHy4F,MAAO3D,EAAyB,KAAQ,SAAUoD,SAAU,OAGpE/1H,KAAK03H,aAAan3F,UAAUxkC,IAAI42H,GAChC3yH,KAAK2G,QAAQ+zB,YAAY16B,KAAK03H,gBAGtC9E,EAAO11H,UAAU46H,kBAAoB,WAC7B,eAAc93H,KAAK0Y,iBACnB1Y,KAAKy3H,YAAcz3H,KAAK2G,QAAQoL,cAAc,oBAG9C/R,KAAKy3H,YAAcz3H,KAAKw+B,cAAc,MAAO,CACzCX,MAAO,CACHy4F,MAAO3D,EAAyB,KAAQ,SAAUoD,SAAU,OAGpE/1H,KAAKy3H,YAAYl3F,UAAUxkC,IAAI42H,GAC/B3yH,KAAK2G,QAAQ+zB,YAAY16B,KAAKy3H,cAE9Bz3H,KAAKq3H,oBACLr3H,KAAK+3H,eAAiB/3H,KAAKw+B,cAAc,MAAO,CAC5CX,MAAO,CACHy4F,MAAO3D,EAA0B,IAC7BA,MAGZ3yH,KAAK2G,QAAQ+zB,YAAY16B,KAAK+3H,kBAGtCnF,EAAO11H,UAAU86H,mBAAqB,SAAUpwG,GACvCA,GAOD,IAAajgB,OAAO3H,KAAKy3H,YAAa,uBAAwBz3H,KAAKi4H,aACnE,IAAatwH,OAAO3H,KAAKy3H,YAAa,gBAAiBz3H,KAAKk4H,eAC5D,IAAavwH,OAAO3H,KAAKy3H,YAAa,wBAAyBz3H,KAAKm4H,YACpE,IAAaxwH,OAAO3H,KAAKy3H,YAAa,sBAAuBz3H,KAAKo4H,eATlE,IAAar8H,IAAIiE,KAAKy3H,YAAa,uBAAwBz3H,KAAKi4H,YAAaj4H,MAC7E,IAAajE,IAAIiE,KAAKy3H,YAAa,gBAAiBz3H,KAAKk4H,cAAel4H,MACxE,IAAajE,IAAIiE,KAAKy3H,YAAa,wBAAyBz3H,KAAKm4H,WAAYn4H,MAC7E,IAAajE,IAAIiE,KAAKy3H,YAAa,sBAAuBz3H,KAAKo4H,YAAap4H,QASpF4yH,EAAO11H,UAAUm7H,oBAAsB,SAAUzwG,GACxCA,GAOD,IAAajgB,OAAO3H,KAAK03H,aAAc,uBAAwB13H,KAAKi4H,aACpE,IAAatwH,OAAO3H,KAAK03H,aAAc,gBAAiB13H,KAAKk4H,eAC7D,IAAavwH,OAAO3H,KAAK03H,aAAc,wBAAyB13H,KAAKm4H,YACrE,IAAaxwH,OAAO3H,KAAK03H,aAAc,sBAAuB13H,KAAKo4H,eATnE,IAAar8H,IAAIiE,KAAK03H,aAAc,uBAAwB13H,KAAKi4H,YAAaj4H,MAC9E,IAAajE,IAAIiE,KAAK03H,aAAc,gBAAiB13H,KAAKk4H,cAAel4H,MACzE,IAAajE,IAAIiE,KAAK03H,aAAc,wBAAyB13H,KAAKm4H,WAAYn4H,MAC9E,IAAajE,IAAIiE,KAAK03H,aAAc,sBAAuB13H,KAAKo4H,YAAap4H,QASrF4yH,EAAO11H,UAAUo7H,YAAc,WACT,UAAdt4H,KAAKiH,OACLjH,KAAKy3H,YAAYl3F,UAA8B,IAApBvgC,KAAKu4H,WAAmB,MAAQ,UAAU5F,GACjE3yH,KAAKq3H,oBACLr3H,KAAK+3H,eAAex3F,UAA8B,IAApBvgC,KAAKu4H,WAAmB,MAAQ,UAAU5F,GACpE3yH,KAAK01H,gBACL11H,KAAK01H,eAAen1F,UAA8B,IAApBvgC,KAAKu4H,WAAmB,MAAQ,UAAU5F,MAKxFC,EAAO11H,UAAUg7H,cAAgB,SAAUr9H,GAChB,cAAnBA,EAAE2tC,eACFxoC,KAAKs4H,cACLt4H,KAAKw4H,YAAYvqH,MAAM8kH,WAAa,OAClB,YAAd/yH,KAAKiH,OACLjH,KAAKgzH,SAAS/kH,MAAM8kH,WAAa,QAEjC/yH,KAAKk3H,YAAcl3H,KAAKm0H,QAAQrzF,WAA2B,YAAd9gC,KAAKiH,OAClDjH,KAAK01H,eAAeznH,MAAM8kH,WAAa/yH,KAAK+yH,WAAWvnH,QAE3DxL,KAAKy4H,cAAcz4H,KAAKw4H,aACxBx4H,KAAK04H,iBAGb9F,EAAO11H,UAAUy7H,eAAiB,WAC1B34H,KAAKy3H,YAAYl3F,UAAUzyB,SAAS6kH,IACpC3yH,KAAKy3H,YAAYl3F,UAAU54B,OAAOgrH,GAEpB,UAAd3yH,KAAKiH,MACDjH,KAAK03H,aAAan3F,UAAUzyB,SAAS6kH,IACrC3yH,KAAK03H,aAAan3F,UAAU54B,OAAOgrH,IAI/CC,EAAO11H,UAAU+6H,YAAc,SAAUp9H,GACrCmF,KAAK44H,qBACL54H,KAAK64H,eAAeh+H,GAChBA,EAAEkQ,gBAAkB/K,KAAKy3H,YACzBz3H,KAAKy3H,YAAYl3F,UAAUxkC,IAAI42H,GAG/B3yH,KAAK03H,aAAan3F,UAAUxkC,IAAI42H,GAEpC,IAAa52H,IAAI8K,SAAU,sBAAuB7G,KAAK84H,cAAe94H,MACtE,IAAajE,IAAI8K,SAAU,mBAAoB7G,KAAK+4H,YAAa/4H,OAErE4yH,EAAO11H,UAAUi7H,WAAa,SAAUt9H,GAChCmF,KAAKm0H,QAAQrzF,WAAqC,UAAxB9gC,KAAKm0H,QAAQwB,QACvC31H,KAAKy4H,cAAc59H,EAAEkQ,gBAG7B6nH,EAAO11H,UAAUk7H,YAAc,SAAUv9H,IACjCmF,KAAKm0H,QAAQrzF,WAAqC,UAAxB9gC,KAAKm0H,QAAQwB,QACtC96H,EAAEkQ,cAAcw1B,UAAUzyB,SAAS6kH,IACnC93H,EAAEkQ,cAAcw1B,UAAUzyB,SAAS6kH,IACpC3yH,KAAK04H,gBAGb9F,EAAO11H,UAAU+4H,WAAa,WACtBj2H,KAAKygB,IAAMzgB,KAAK0gB,MAChB1gB,KAAKygB,IAAMzgB,KAAK0gB,KAEpB1gB,KAAK83H,oBACa,UAAd93H,KAAKiH,MACLjH,KAAK63H,sBAGbjF,EAAO11H,UAAUu5H,aAAe,WAC5B,IAAK,gBAAez2H,KAAK0Y,iBAAkB,CACvC1Y,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,YAA6B,YAAS,CAAC1M,KAAKq1H,iBAAkB1C,GACjF,YAAY,CAAC3yH,KAAKq1H,iBAAkB1C,GACxC,IAAIqG,EAA+B,aAArBh5H,KAAK0M,YAA8B1M,KAAK6yH,OAAS7yH,KAAK8yH,OAChE9yH,KAAK0wC,WACL1wC,KAAK6yH,OAAS,QACd7yH,KAAK8yH,OAAS,WAGd9yH,KAAK6yH,OAAS,OACd7yH,KAAK8yH,OAAS,UAGdkG,KADgC,aAArBh5H,KAAK0M,YAA8B1M,KAAK6yH,OAAS7yH,KAAK8yH,SAExC,eAArB9yH,KAAK0M,cACL,aAAkB1M,KAAKy3H,YAAa,CAAE,MAAS,GAAI,KAAQ,SACzC,UAAdz3H,KAAKiH,MACL,aAAkBjH,KAAK03H,aAAc,CAAE,IAAO,GAAI,KAAQ,UAK1E13H,KAAKi5H,eAETrG,EAAO11H,UAAUg8H,aAAe,WAC5B,IACIt5G,EADA3H,EAAQjY,KAERD,EAAO,CACPxB,MAAOyB,KAAKzB,MACZqhB,KAAM,IAEN5f,KAAKozH,iBACLpzH,KAAKozH,gBAAiB,EAClB,eAAcpzH,KAAK0Y,iBACnB3Y,EAAK6f,KAAO5f,KAAKm5H,cAAcn5H,KAAK0zH,mBAAmB,IAGvD1zH,KAAKo5H,oBACLr5H,EAAK6f,KAAOA,EAAO5f,KAAKq5H,WAAW/b,SAEvCt9G,KAAK21B,QAAQ,gBAAiB51B,GAAM,SAAUu5H,GAC1CrhH,EAAMshH,gBAAgBD,EAAa15G,MAC/BA,IAAS05G,EAAa15G,OACtB3H,EAAMk7G,eAAiBmG,EAAa15G,KACpC3H,EAAMohH,WAAW/b,QAAUgc,EAAa15G,KACxC3H,EAAMuhH,iBAAiBvhH,EAAMw/G,aACV,UAAfx/G,EAAMhR,MACNgR,EAAMuhH,iBAAiBvhH,EAAMy/G,kBAIrC13H,KAAKq3H,mBACLr3H,KAAKy5H,eAAe,SAAUz5H,KAAKzB,SAI/Cq0H,EAAO11H,UAAUk8H,kBAAoB,WACjC,IAAI9b,EACJA,EAAUt9G,KAAKm5H,cAAcn5H,KAAK0zH,mBAAmB,GACrD1zH,KAAKq5H,WAAW/b,QAAUA,GAE9BsV,EAAO11H,UAAUi8H,cAAgB,SAAU7E,EAAYoF,GACnD,IAAIpc,EAAU,GACVqc,EAAU35H,KAAK45H,WACfC,EAAU75H,KAAK85H,WAKnB,OAJK,YAAkB95H,KAAK43H,eAAiB53H,KAAK43H,aAAan9H,OAAS,IACpEk/H,EAAU35H,KAAK43H,aAAa53H,KAAK45H,YACjCC,EAAU75H,KAAK43H,aAAa53H,KAAK85H,aAEhCJ,GAsBiB,UAAd15H,KAAKiH,KAEDq2G,EADAt9G,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,YACX,YAAkB1M,KAAKm0H,UAAa,YAAkBn0H,KAAKm0H,QAAQt7G,QAG1EghH,EAAQv9H,WAAa,MAAQq9H,EAAQr9H,WAFrC0D,KAAKq0H,aAAawF,EAASvF,GAAYI,WAAa,MACjD10H,KAAKq0H,aAAasF,EAASrF,GAAYI,WAInC,YAAkB10H,KAAKm0H,UAAa,YAAkBn0H,KAAKm0H,QAAQt7G,QAG1E8gH,EAAQr9H,WAAa,MAAQu9H,EAAQv9H,WAFrC0D,KAAKq0H,aAAasF,EAASrF,GAAYI,WAAa,MACjD10H,KAAKq0H,aAAawF,EAASvF,GAAYI,WAK9C,YAAkBiF,KACnBrc,EAAY,YAAkBt9G,KAAKm0H,UAAa,YAAkBn0H,KAAKm0H,QAAQt7G,QACvB8gH,EAAQr9H,WAA5D0D,KAAKq0H,aAAasF,EAASrF,GAAYI,YAG5CpX,IAzCW,UAAdt9G,KAAKiH,KAEDq2G,EADAt9G,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,YACX,YAAkB4nH,EAAWz7G,QAEpCghH,EAAQv9H,WAAa,MAAQq9H,EAAQr9H,WAFW0D,KAAKq0H,aAAawF,EAASvF,GAC3ED,aAAe,MAAQr0H,KAAKq0H,aAAasF,EAASrF,GAAYD,aAIvD,YAAkBC,EAAWz7G,QAEpC8gH,EAAQr9H,WAAa,MAAQu9H,EAAQv9H,WAFW0D,KAAKq0H,aAAasF,EAASrF,GAC3ED,aAAe,MAAQr0H,KAAKq0H,aAAawF,EAASvF,GAAYD,aAKlE,YAAkBsF,KACnBrc,EAAY,YAAkBgX,EAAWz7G,QACiB8gH,EAAQr9H,WAA9D0D,KAAKq0H,aAAasF,EAASrF,GAAYD,cAG5C/W,IA0BfsV,EAAO11H,UAAUq8H,gBAAkB,SAAUjc,GACzC,GAAIt9G,KAAKq3H,kBAAmB,CACxB,IAAIjyB,EAAQkY,EAAQhhH,WAAW7B,OAC/B,GAAKuF,KAAK01H,eAIL,CACGH,EAAWnwB,EAAQ,EACnB,CAAE20B,OAAQpH,GAAkCqH,OAAQrH,IACpD,CAAEoH,OAAQpH,GAAgCqH,OAAQrH,IACtD3yH,KAAK01H,eAAen1F,UAAU54B,OAAO4tH,EAASwE,QACzC/5H,KAAK01H,eAAen1F,UAAUzyB,SAASynH,EAASyE,UACjDh6H,KAAK01H,eAAen1F,UAAUxkC,IAAIw5H,EAASyE,QAC3Ch6H,KAAK01H,eAAeznH,MAAMu/B,UAAY43D,EAAQ,EAAI,WAC9CplG,KAAKi6H,8BAA8Bj6H,KAAKk6H,sBAAsBlhD,YAZhD,CACtB,IAAIu8C,EAAWnwB,EAAQ,EAAIutB,GAAiCA,GAC5D3yH,KAAKq5H,WAAW9D,SAAW5C,EAA2B,IAAM4C,KAexE3C,EAAO11H,UAAUi9H,iBAAmB,WAChC,MAA4B,eAArBn6H,KAAK0M,YAA2D,WAA3B1M,KAAKm0H,QAAQ3kD,UAAyB,YAAc,eAChE,WAA3BxvE,KAAKm0H,QAAQ3kD,UAAyB,aAAe,eAE9DojD,EAAO11H,UAAUk9H,kBAAoB,SAAUr6H,GAC3CC,KAAK01H,eAAiB31H,EAAK4G,QACvB3G,KAAKm0H,QAAQoB,UACb,YAAS,CAACv1H,KAAK01H,gBAAiB11H,KAAKm0H,QAAQoB,SAAS/4H,MAAM,KAAK6G,QAAO,SAAUgiG,GAAO,OAAOA,MAEpGtlG,EAAKiH,OAAOwH,gBAAgB,oBACxBxO,KAAKq3H,oBACLr3H,KAAK01H,eAAer0F,kBAAkBd,UAAUxkC,IAAI42H,IACpD3yH,KAAKs4H,cACLt4H,KAAKq6H,wBAGbzH,EAAO11H,UAAUo9H,iBAAmB,SAAUziF,GAC1C,GAAI73C,KAAKm3H,aAAen3H,KAAKo3H,cAAiBp3H,KAAKk3H,aAAel3H,KAAKq3H,kBAAoB,CACvF,IAAIkD,EAAqBv6H,KAAKo3H,aA/qBZ,EADD,EAirBjB,OAAQv/E,GACJ,IAAK,YACD73C,KAAKq5H,WAAW71F,cAAc,CAAE,SAAY,IAAwB,GACpE,MACJ,IAAK,eACDxjC,KAAKq5H,WAAW71F,cAAc,CAAE,QAAW+2F,IAAsB,GACjE,MACJ,IAAK,aACDv6H,KAAKq5H,WAAW71F,cAAc,CAAE,SAAY,IAAwB,GACpE,MACJ,IAAK,cACDxjC,KAAKq5H,WAAW71F,cAAc,CAAE,QAAW+2F,IAAsB,MAKjF3H,EAAO11H,UAAUs9H,6BAA+B,SAAU9wH,GACtD1J,KAAK64H,eAAenvH,GACpB,IAAa3N,IAAI8K,SAAU,sBAAuB7G,KAAK84H,cAAe94H,MACtE,IAAajE,IAAI8K,SAAU,mBAAoB7G,KAAK+4H,YAAa/4H,OAErE4yH,EAAO11H,UAAUu9H,yBAA2B,SAAU7yG,GAC9C5nB,KAAKq3H,oBACAzvG,EAID,IAAajgB,OAAO3H,KAAK01H,eAAgB,uBAAwB11H,KAAKw6H,8BAHtE,IAAaz+H,IAAIiE,KAAK01H,eAAgB,uBAAwB11H,KAAKw6H,6BAA8Bx6H,QAO7G4yH,EAAO11H,UAAUw9H,2BAA6B,SAAU7iF,GACpD,IAAI09E,EACJ,OAAQ19E,GACJ,IAAK,YACD09E,EAAW5C,EACX,MACJ,IAAK,eACD4C,EAAW5C,EACX,MACJ,IAAK,aACD4C,EAAW5C,EACX,MACJ,IAAK,cACD4C,EAAW5C,EAGnB,OAAO4C,GAEX3C,EAAO11H,UAAU+8H,8BAAgC,SAAUvgG,GACvD,IAAIihG,EACJ,GAAI36H,KAAK01H,eAAgB,CACrB,IAAI79E,EAAgC,eAArB73C,KAAK0M,YACd1M,KAAK01H,eAAekF,aAAe,GAAO56H,KAAK01H,eAAekF,aAAe,EAC7E56H,KAAK01H,eAAemF,YAAc,GAAO76H,KAAK01H,eAAemF,YAAc,EACjFF,EAA2C,eAArB36H,KAAK0M,YACtBgtB,IAAci5F,EAAqC,CAAE35C,OAAQ,gBAAiBD,UAAW,cAAgBlhC,EAAW,OACjH,CAAEmhC,OAAQ,iBAAkBD,UAAW,eAAiB,EAAa,OACxEr/C,IAAci5F,EAAmC,CAAE35C,OAAQ,iBAAkBD,UAAW,cAAgBlhC,EAAW,OAChH,CAAEmhC,OAAQ,kBAAmBD,UAAW,eAAkBlhC,EAAY,OAElF,OAAO8iF,GAEX/H,EAAO11H,UAAU49H,oBAAsB,WACnC,IAAI7iH,EAAQjY,KACZ,GAAIA,KAAKq3H,kBAAmB,CACxBr3H,KAAK+6H,eAAe/6H,KAAKy3H,aACzB,IAAIuD,EAAwBh7H,KAAK01H,eAAer0F,kBAChD25F,EAAsBz6F,UAAU54B,OAAOgrH,IACvCqI,EAAsBz6F,UAAUxkC,IAAI42H,IACpC3yH,KAAKy3H,YAAYxpH,MAAMgtH,OAAS,UAChCj7H,KAAK01H,eAAeznH,MAAM8kH,WAAa/yH,KAAKkzH,eAC5ClzH,KAAK01H,eAAen1F,UAAUxkC,IAAI42H,GAClC3yH,KAAK+3H,eAAe9pH,MAAMu/B,UAAY,WAClCwtF,EAAsBE,UAAUzgI,OAAS,EACzCuF,KAAK01H,eAAeznH,MAAMu/B,UAAY,WAGtCxtC,KAAK01H,eAAeznH,MAAMu/B,UAAYxtC,KAAKi6H,8BAA8Bj6H,KAAKk6H,sBAAsBlhD,OAEtF,YAAdh5E,KAAKiH,KACLyE,YAAW,WAAcuM,EAAMy9G,eAAeznH,MAAM8kH,WAAa96G,EAAM86G,WAAWvnH,SAAW,MAG7FE,YAAW,WAAcuM,EAAMy9G,eAAeznH,MAAM8kH,WAAa,SAAW,QAIxFH,EAAO11H,UAAUi+H,qBAAuB,WACpC,IAAIljH,EAAQjY,KACZ,GAAIA,KAAKq3H,kBAAmB,CACxB,IAAI2D,EAAwBh7H,KAAK01H,eAAer0F,kBAChDrhC,KAAK01H,eAAeznH,MAAM8kH,WAAa/yH,KAAKkzH,eAC5C8H,EAAsBz6F,UAAU54B,OAAOgrH,IACvCqI,EAAsBz6F,UAAUxkC,IAAI42H,IACpC3yH,KAAKy3H,YAAYxpH,MAAMgtH,OAAS,eAChCj7H,KAAKy3H,YAAYxpH,MAAMgtH,OAAS,OAC5Bj7H,KAAK+3H,iBACL/3H,KAAK+3H,eAAe9pH,MAAMu/B,UAAY,YAE1CxtC,KAAK01H,eAAen1F,UAAU54B,OAAOgrH,GACrC3yH,KAAKq6H,sBACLr6H,KAAKo7H,mBAAgB38H,EACrBiN,YAAW,WAAcuM,EAAMy9G,eAAeznH,MAAM8kH,WAAa,SAAW,QAGpFH,EAAO11H,UAAUm+H,qBAAuB,SAAUt7H,GAC9C,IAAIu7H,EAAet7H,KAAK06H,2BAA2B36H,EAAKw7H,uBACnB98H,IAAjCuB,KAAKw7H,yBACLx7H,KAAKw7H,0BAA4Bz7H,EAAKw7H,kBAAqBx7H,EAAK4G,QAAQ45B,UAAUzyB,SAASwtH,KACvFt7H,KAAKq3H,yBACgB54H,IAAjB68H,IACAv7H,EAAK4G,QAAQ45B,UAAU54B,OAAO3H,KAAKk6H,sBACnCn6H,EAAK4G,QAAQ45B,UAAUxkC,IAAIu/H,GAC3Bt7H,KAAKk6H,qBAAuBoB,GAE5Bv7H,EAAK4G,QAAQsH,MAAMu/B,WAAaztC,EAAK4G,QAAQ45B,UAAUzyB,SAAS6kH,IAChE5yH,EAAK4G,QAAQ06B,kBAAkB65F,UAAUzgI,QAAU,IACnDsF,EAAK4G,QAAQsH,MAAMu/B,UAAYxtC,KAAKi6H,8BAA8Bj6H,KAAKk6H,sBAAsBlhD,SAGrGh5E,KAAKw7H,wBAA0Bz7H,EAAKw7H,kBAEpCv7H,KAAKq3H,mBAAqBr3H,KAAK01H,iBAAgF,IAA9D11H,KAAK01H,eAAeznH,MAAMu/B,UAAUxqC,QAAQ,cAC7FhD,KAAKq6H,uBAGbzH,EAAO11H,UAAUm9H,oBAAsB,WACnC,IAAIM,EAAsB36H,KAAKi6H,8BAA8Bj6H,KAAKk6H,sBAC9Dl6H,KAAK01H,eAAer0F,kBAAkB65F,UAAUzgI,OAAS,EACzDuF,KAAK01H,eAAeznH,MAAMu/B,UAAYmtF,EAAoB5hD,UAAY,eAGtE/4E,KAAK01H,eAAeznH,MAAMu/B,UAAYmtF,EAAoB5hD,UAAY,IAAM4hD,EAAoB3hD,OAAS,gBAGjH45C,EAAO11H,UAAU85H,cAAgB,WAC7Bh3H,KAAKq5H,WAAa,IAAI,IAAQ,CAC1BoC,eAAgBz7H,KAAKm3H,aAAen3H,KAAKk3H,YAAcl3H,KAAKo3H,aAC5D7B,SAAU5C,EACVl5E,OAAQz5C,KAAKk3H,WAAa,GAAK,OAC/B5sF,UAAW,CAAEna,KAAM,CAAEurG,OAAQ,QAAU/6C,MAAO,CAAE+6C,OAAQ,UAAW3wF,SAAU,MAC7E4wF,QAAS,SACTC,WAAY57H,KAAKo6H,kBAAkBr1H,KAAK/E,MACxC67H,gBAAiB77H,KAAKq7H,qBAAqBt2H,KAAK/E,MAChD87H,YAAa97H,KAAK+7H,mBAAmBh3H,KAAK/E,MAC1Cg8H,oBAAqBh8H,KAAKg8H,sBAE9Bh8H,KAAKq5H,WAAWvoF,SAAS9wC,KAAKy3H,aAC9Bz3H,KAAKi8H,0BAETrJ,EAAO11H,UAAU++H,uBAAyB,WACtC,IAAIC,EAAgBl8H,KAAKq3H,kBAAoB,SAAoC,SAAxBr3H,KAAKm0H,QAAQwB,OAAoB,QAAU31H,KAAKm0H,QAAQwB,OACjH31H,KAAKwjC,cAAc,CAAE2wF,QAAS,CAAEwB,OAAQuG,KAAmB,GAC3Dl8H,KAAKq5H,WAAWxhF,SAAW73C,KAAKm6H,mBAChCn6H,KAAKs6H,iBAAiBt6H,KAAKq5H,WAAWxhF,UACtC,CAAC73C,KAAKy3H,YAAaz3H,KAAKgzH,SAAUhzH,KAAK03H,cAAcz0H,SAAQ,SAAUuI,GAC9D,YAAkBA,KACnBA,EAAOyC,MAAM8kH,WAAa,WAG9B/yH,KAAKq3H,oBACLr3H,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GAC9B,eACD3yH,KAAKk5H,eAETl5H,KAAKq5H,WAAW/uF,UAAUq2C,MAAM+6C,OAAS,OACzC17H,KAAKq5H,WAAWlpG,KAAKnwB,KAAKy3H,eAGlC7E,EAAO11H,UAAU6+H,mBAAqB,WAClC/7H,KAAK01H,oBAAiBj3H,EACtBuB,KAAKw7H,6BAA0B/8H,GAEnCm0H,EAAO11H,UAAUs5H,WAAa,WACtB,eAAcx2H,KAAK0Y,kBACnB1Y,KAAKm8H,SAAWn8H,KAAK2G,QAAQ22C,cAAcvrC,cAAc,mCACzD/R,KAAKo8H,UAAYp8H,KAAK2G,QAAQ22C,cAAcvrC,cAAc,sCAG1D/R,KAAKm8H,SAAWn8H,KAAKw+B,cAAc,MAAO,CAAE9E,UAAWi5F,EAA0B,IAAMA,IACvF3yH,KAAKm8H,SAASzhG,YAAY16B,KAAKw+B,cAAc,OAAQ,CAAE9E,UAAWi5F,KAClE3yH,KAAKm8H,SAASpG,UAAY,EAC1B/1H,KAAKo8H,UAAYp8H,KAAKw+B,cAAc,MAAO,CAAE9E,UAAWi5F,EAA0B,IAAMA,IACxF3yH,KAAKo8H,UAAU1hG,YAAY16B,KAAKw+B,cAAc,OAAQ,CAAE9E,UAAWi5F,KACnE3yH,KAAKo8H,UAAUrG,UAAY,EAC3B/1H,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GACnC3yH,KAAKq1H,gBAAgB36F,YAAY16B,KAAKm8H,UACtCn8H,KAAKq1H,gBAAgB36F,YAAY16B,KAAKo8H,WACtCp8H,KAAKq1H,gBAAgB36F,YAAY16B,KAAK2G,SACtC3G,KAAKq8H,gBAGbzJ,EAAO11H,UAAUm/H,YAAc,WAC3B,IAAIC,EAAat8H,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,YACxC1M,KAAKqzH,KAAKvzE,UAAU9/C,KAAKkE,QACzB,IAAIqvH,EAAiBvzH,KAAKqzH,KAAKjzE,YAAY,kBACvCkzE,EAAiBtzH,KAAKqzH,KAAKjzE,YAAY,kBAC3C,YAAWk8E,EAAat8H,KAAKo8H,UAAYp8H,KAAKm8H,SAAU,CAAE,aAAc5I,EAAgBgJ,MAAOhJ,IAC/F,YAAW+I,EAAat8H,KAAKm8H,SAAWn8H,KAAKo8H,UAAW,CAAE,aAAc9I,EAAgBiJ,MAAOjJ,KAEnGV,EAAO11H,UAAUs/H,eAAiB,WAC1Bx8H,KAAKk3H,YACLl3H,KAAKw4H,YAAYj4F,UAAU54B,OAAO,uBAG1CirH,EAAO11H,UAAUu/H,aAAe,SAAU18H,GACtC,IAEIxB,EAFAm+H,EAAO18H,KAAK28H,oBACZL,EAAat8H,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,YAEpC3M,EAAKiH,OAAOs2C,cAAc/c,UAAUzyB,SAAS6kH,IAC1C5yH,EAAKiH,OAAOu5B,UAAUzyB,SAAS6kH,GACpBp0H,EAAd+9H,EAAsBt8H,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAK4qC,KAAKtuC,aAAa,GAC1D0D,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAK4qC,KAAKtuC,aAAa,IAEzDyD,EAAKiH,OAAOs2C,cAAc/c,UAAUzyB,SAAS6kH,IAC9C5yH,EAAKiH,OAAOu5B,UAAUzyB,SAAS6kH,MACrBp0H,EAAd+9H,EAAsBt8H,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAK4qC,KAAKtuC,aAAa,GAC1D0D,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAK4qC,KAAKtuC,aAAa,IAE9D0D,KAAKm2H,OAAOV,UACZl3H,EAAQyB,KAAK48H,wBAAwBr+H,IAErCA,GAASyB,KAAKygB,KAAOliB,GAASyB,KAAK0gB,MACnC1gB,KAAK68H,kBAAkBt+H,GACvByB,KAAKy4H,cAAcz4H,KAAKw4H,eAGhC5F,EAAO11H,UAAU4/H,mBAAqB,SAAU/8H,GAC5CA,EAAKgK,iBACa,cAAdhK,EAAKkH,MAAwC,eAAdlH,EAAKkH,OACpCjH,KAAK+8H,YAAYh9H,GACjBC,KAAKg9H,eAAiBluB,YAAY9uG,KAAKy8H,aAAa13H,KAAK/E,MAAO,IAAKD,KAG7E6yH,EAAO11H,UAAU+/H,eAAiB,WACzBj9H,KAAKw4H,YAAYj4F,UAAUzyB,SAAS,uBACrC9N,KAAKw4H,YAAYj4F,UAAUxkC,IAAI,uBAGvC62H,EAAO11H,UAAUggI,gBAAkB,SAAUriI,GACzCmF,KAAKm9H,YAAY,UAAWtiI,GAC5BmF,KAAK04H,eACL3pB,cAAc/uG,KAAKg9H,gBACnBh9H,KAAKw4H,YAAYlwB,SAErBsqB,EAAO11H,UAAUkgI,kBAAoB,SAAUC,GAC3C,IAAIC,EAAY,EAehB,OAdK,YAAkBt9H,KAAK43H,eAAiB53H,KAAK43H,aAAan9H,OAAS,IAChE4iI,EAAS,IACTC,EAAY,GAEZD,EAAS,IACTC,EAAY,GAEZD,EAAS,KACTC,EAAY,GAEZD,EAAS,KACTC,EAAY,IAGbA,GAGX1K,EAAO11H,UAAU65H,YAAc,WAC3B,IAAIwG,EAAoB,EACpBC,EAA6B,aAArBx9H,KAAK0M,YAA6B,IAAM,IAEpD1M,KAAK+0H,aAAe/0H,KAAKw0H,iBAAiBx0H,KAAK4qC,MAC3C,eAAc5qC,KAAK0Y,iBACnB1Y,KAAKy9H,GAAKz9H,KAAK2G,QAAQoL,cAAc,MAGrC/R,KAAKy9H,GAAKz9H,KAAKw+B,cAAc,KAAM,CAC/B9E,UAAWi5F,QAAgC6K,EAAQ,UAAY7K,EAAkB,IAAM3yH,KAAKo0H,MAAM5kD,UAAUrwE,cAC5G0+B,MAAO,CAAE6/F,KAAM,eAAgB3H,SAAU,KAAM,cAAe,UAGtE/1H,KAAKy9H,GAAGxvH,MAAMinD,OAAS,KACnB,IAAQyoE,WAAuB,MAAVH,GACrBx9H,KAAKy9H,GAAGl9F,UAAUxkC,IAAI42H,GAE1B,IAAIiL,EAAY59H,KAAKo0H,MAAMwJ,UACtB59H,KAAKo0H,MAAMyJ,eAIPD,GAAa,IAClBA,EAAY73G,WAAW,YAAW/lB,KAAK4qC,QAJXgzF,EAA5B59H,KAAKo0H,MAAM0J,UAAY,EAAiB99H,KAAKo0H,MAAM0J,UACjC/3G,WAAW,YAAW/lB,KAAK0gB,MAAUqF,WAAW,YAAW/lB,KAAKygB,MAKtF,IAUIs9G,EAVAt9G,EAAMzgB,KAAK80H,oBAAoB90H,KAAKygB,KACpCC,EAAM1gB,KAAK80H,oBAAoB90H,KAAK0gB,KACpCs9G,EAAQh+H,KAAK80H,oBAAoB8I,GACjCP,GAAU,YAAkBr9H,KAAK43H,eAAiB53H,KAAK43H,aAAan9H,OAAS,GAAKuF,KAAK43H,aAAan9H,OAAS,EAC7GwjI,EAAaj+H,KAAKo9H,kBAAkBC,GACpCj4B,GAAS,YAAkBplG,KAAK43H,eAAiB53H,KAAK43H,aAAan9H,OAAS,EAC3E4iI,EAASY,EAAcZ,EAASznH,KAAKmG,KAAK2E,EAAMD,GAAOu9G,GACvD,eAAeh+H,KAAK0Y,kBACrB1Y,KAAK2G,QAAQ+zB,YAAY16B,KAAKy9H,IAGlC,IAAIjuH,EAAQuW,WAAW/lB,KAAKygB,IAAInkB,YAClB,MAAVkhI,IACAhuH,EAAQuW,WAAW/lB,KAAK0gB,IAAIpkB,aAEhC,IACI4hI,EADAnxF,EAAO,EAEPoxF,EAAY,IAAM/4B,EAClB+4B,IAAct4G,MACds4G,EAAY,GAEhB,IAAK,IAAItiI,EAAI,EAAG4nB,GAAK,YAAkBzjB,KAAK43H,eAAiB53H,KAAK43H,aAAan9H,OAAS,EACpFuF,KAAK43H,aAAan9H,OAAS,EAAI,EAAGiH,EAAI,EAAG7F,GAAKupG,EAAOvpG,IAAK,CAO1D,GANAkiI,EAAM/9H,KAAKw+B,cAAc,KAAM,CAC3BX,MAAO,CACHy4F,MAAO3D,EAAiB+K,KAAM,eAAgB3H,SAAU,KACxD,cAAe,WAGlB,YAAkB/1H,KAAK43H,eAAiB53H,KAAK43H,aAAan9H,OAAS,GACpEyjI,EAAcriI,GAAKoiI,EAAa,IAAO,KAErB,MAAVT,GACAhuH,EAAQxP,KAAK43H,aAAal2H,GAC1BA,MAGA8N,EAAQxP,KAAK43H,aAAan0G,GAC1BA,KAEJs6G,EAAGtvH,aAAa,QAASe,EAAMlT,kBAKnC,GADAyhI,EAAGtvH,aAAa,QAASe,EAAMlT,YACS,IAApC0D,KAAKw0H,iBAAiBx0H,KAAK0gB,MAAkD,IAApC1gB,KAAKw0H,iBAAiBx0H,KAAKygB,MAC/B,IAArCzgB,KAAKw0H,iBAAiBx0H,KAAK4qC,MAEvBszF,EADU,MAAVV,GACgBhuH,EAAQuW,WAAW/lB,KAAKygB,IAAInkB,aAAe0D,KAAKo0H,MAAM0J,WAAc,EAGrEloH,KAAKmG,IAAIvM,EAAQuW,WAAW/lB,KAAK0gB,IAAIpkB,aAAe0D,KAAKo0H,MAAM0J,WAAc,MAG/F,CACD,IAAIM,EAAYp+H,KAAK80H,oBAAoB90H,KAAKo0H,MAAM0J,WAChDO,EAAar+H,KAAK80H,oBAAoBtlH,GAEtC0uH,EADU,MAAVV,GACgBa,EAAa59G,GAAO29G,GAAc,EAGnCxoH,KAAKmG,IAAIsiH,EAAat4G,WAAWrF,EAAIpkB,aAAe8hI,GAAc,EAIzFF,GACAH,EAAGx9F,UAAUxkC,IAAI42H,GAEV,MAAV6K,EAAkBO,EAAG9vH,MAAMurC,MAAQ2kF,EAAY,IAAQJ,EAAG9vH,MAAMwrC,OAAS0kF,EAAY,IACtF,IAAIrxB,EAASoxB,EAAwC,SAAzBl+H,KAAKo0H,MAAM5kD,UAAuB,EAAI,EAAK,EACvE,GAAI0uD,EAAa,CACb,IAAK,IAAI5nH,EAAI,EAAGA,EAAIw2F,EAAQx2F,IACxBtW,KAAKs+H,WAAWP,EAAIvuH,EAAO2uH,GAE3B,eAAcn+H,KAAK0Y,kBAAoB,YAAkB1Y,KAAK43H,gBAC9D53H,KAAKu+H,kBAAkB/uH,EAAOxP,KAAKy9H,GAAGt0H,SAASo0H,IAC/CA,UAGC,YAAkBv9H,KAAK43H,gBAC5B53H,KAAKw+H,iBAAiBT,EAAIvuH,GACtB,eAAcxP,KAAK0Y,kBAAoB,YAAkB1Y,KAAK43H,gBAC9D53H,KAAKu+H,kBAAkB/uH,EAAOxP,KAAKy9H,GAAGt0H,SAASo0H,IAC/CA,MAGH,eAAev9H,KAAK0Y,kBACrB1Y,KAAKy9H,GAAG/iG,YAAYqjG,GAExB/9H,KAAKyzH,sBAAsBjzH,KAAKu9H,GAChC,IAAIU,OAAgB,EAChB,YAAkBz+H,KAAK43H,gBAEnB6G,EADAz+H,KAAKw0H,iBAAiBoJ,GAAa59H,KAAKw0H,iBAAiBhlH,GACzCxP,KAAKw0H,iBAAiBoJ,GAGtB59H,KAAKw0H,iBAAiBhlH,GAGtCA,EADU,MAAVguH,EACQx9H,KAAKy0H,gBAAgBjlH,EAAQouH,EAAWa,GAGxCz+H,KAAKy0H,gBAAgBjlH,EAAQouH,EAAWa,GAEpD1xF,EAAO/sC,KAAKy0H,gBAAgB1nF,EAAO6wF,EAAWa,IAGtDz+H,KAAK0+H,eAAelB,EAAOW,IAE/BvL,EAAO11H,UAAUqhI,kBAAoB,SAAU/uH,EAAOmvH,GAClD,GAAIA,EAAUC,kBAAoB,EAC9B,IAAK,IAAI/iI,EAAI,EAAGA,EAAI8iI,EAAUC,kBAAmB/iI,IAC7CmE,KAAK6+H,kBAAkBF,EAAWnvH,EAAOmvH,EAAUx1H,SAAStN,SAIhEmE,KAAK6+H,kBAAkBF,EAAWnvH,EAAO,OAGjDojH,EAAO11H,UAAU2hI,kBAAoB,SAAUd,EAAIvuH,EAAOsvH,GACtD,IAAI7mH,EAAQjY,KACR++H,EAAW/+H,KAAKyoB,aAAajZ,GAG7Bwf,EAAY,CAAEzwB,MAAOiR,EAAOoQ,KAFpB,YAAkB5f,KAAKo0H,QAAW,YAAkBp0H,KAAKo0H,MAAMv7G,QACTkmH,EAA9D/+H,KAAKq0H,aAAa7kH,EAAOxP,KAAK2zH,iBAAiBU,aACP2K,YAAajB,GACzD/9H,KAAK21B,QAAQ,iBAAkB3G,GAAW,SAAUsqG,GAChDyE,EAAGtvH,aAAa,QAAS6qH,EAAa15G,KAAKtjB,YACvCwiI,IACI7mH,EAAM+jH,oBACN8C,EAAKnlG,UAAY,IAAmBmrB,SAASw0E,EAAa15G,KAAKtjB,YAG/DwiI,EAAKnlG,UAAY2/F,EAAa15G,KAAKtjB,gBAKnDs2H,EAAO11H,UAAUwhI,eAAiB,SAAUlB,EAAOW,EAAWc,QACrC,IAAjBA,IAA2BA,GAAe,GAC9Cj/H,KAAKgpD,WAAahpD,KAAKy9H,GAAGp8F,kBAC1BrhC,KAAK2nG,UAAY3nG,KAAKy9H,GAAGyB,iBACzBl/H,KAAKgpD,WAAWzoB,UAAUxkC,IAAI42H,GAC9B3yH,KAAK2nG,UAAUpnE,UAAUxkC,IAAI42H,GAC7B3yH,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,EAAmB,IAAM3yH,KAAKo0H,MAAM5kD,UAAUrwE,eACnE,MAAVq+H,GACAx9H,KAAKgpD,WAAW/6C,MAAMurC,MAAQ2kF,EAAY,EAAI,IAC9Cn+H,KAAK2nG,UAAU15F,MAAMurC,MAAQ2kF,EAAY,EAAI,MAG7Cn+H,KAAKgpD,WAAW/6C,MAAMwrC,OAAS0kF,EAAY,EAAI,IAC/Cn+H,KAAK2nG,UAAU15F,MAAMwrC,OAAS0kF,EAAY,EAAI,KAElD,IAAInvG,EAAY,CAAEmwG,aAAcn/H,KAAKy9H,GAAI2B,aAAcp/H,KAAKyzH,uBACxDwL,GACAj/H,KAAK21B,QAAQ,gBAAiB3G,GAElChvB,KAAKq/H,kBAETzM,EAAO11H,UAAUohI,WAAa,SAAUP,EAAIvuH,EAAO2uH,GAC/C,IAAIW,EAAO9+H,KAAKw+B,cAAc,OAAQ,CAClC9E,UAAWi5F,EAAuB,IAAMA,EAAkB,IAAM3yH,KAAKo0H,MAAM5kD,UAAUrwE,cACrF0+B,MAAO,CAAE6/F,KAAM,eAAgB3H,SAAU,KAAM,cAAe,UAElEgI,EAAGrjG,YAAYokG,GACX,YAAkB9+H,KAAK43H,cACvB53H,KAAKw+H,iBAAiBT,EAAIvuH,EAAOsvH,EAAMX,GAGnCn+H,KAAKg8H,oBACL8C,EAAKnlG,UAAY,IAAmBmrB,SAASt1C,EAAMlT,YAGnDwiI,EAAKnlG,UAAYnqB,EAAMlT,YAInCs2H,EAAO11H,UAAUshI,iBAAmB,SAAUT,EAAIvuH,EAAO8vH,EAAanB,GAClE,IAAIlmH,EAAQjY,KACR++H,EAAW/+H,KAAKyoB,aAAajZ,GAG7Bwf,EAAY,CAAEzwB,MAAOiR,EAAOoQ,KAFpB,YAAkB5f,KAAKo0H,QAAW,YAAkBp0H,KAAKo0H,MAAMv7G,QACTkmH,EAA9D/+H,KAAKq0H,aAAa7kH,EAAOxP,KAAK2zH,iBAAiBU,aACP2K,YAAajB,GACzD/9H,KAAK21B,QAAQ,iBAAkB3G,GAAW,SAAUsqG,GAUhD,GATAyE,EAAGtvH,aAAa,QAAS6qH,EAAa15G,KAAKtjB,YACvCgjI,IACIrnH,EAAM+jH,oBACNsD,EAAY3lG,UAAY,IAAmBmrB,SAASw0E,EAAa15G,KAAKtjB,YAGtEgjI,EAAY3lG,UAAY2/F,EAAa15G,KAAKtjB,aAG7C,YAAkB2b,EAAMsnH,iBAAmB,cAAY,CACxD,IAAI/B,EAA8B,eAAtBvlH,EAAMvL,YAA+B,IAAM,IACvDuL,EAAMymH,eAAelB,EAAOW,GAAW,QAInDvL,EAAO11H,UAAUmiI,eAAiB,WAC9Br/H,KAAKw/H,oBAIOx/H,KAAK0M,YACQ,aAArB1M,KAAK0M,YACJ1M,KAAK2G,QAAQ2lC,wBAAwBkN,OAAS,GAC3Cx5C,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GACnC3yH,KAAKq1H,gBAAgB90F,UAAU54B,OAAOgrH,GAGzC3yH,KAAK2G,QAAQ2lC,wBAAwBmN,QAAU,GAC5Cz5C,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GACnC3yH,KAAKq1H,gBAAgB90F,UAAU54B,OAAOgrH,IAGlDC,EAAO11H,UAAUsiI,kBAAoB,WACjCx/H,KAAKgpD,WAAahpD,KAAK2G,QAAQoL,cAAc,MAAM5I,SAAS,GAC5D,IACI6/C,EACAy2E,EAFAtvH,EAAQnQ,KAAKgpD,WAAW1c,wBAGxBsxF,EAAY59H,KAAKo0H,MAAMwJ,UACvBx4B,EAAQxvF,KAAKmG,IAAKgK,WAAW,YAAW/lB,KAAK0gB,MAAUqF,WAAW,YAAW/lB,KAAKygB,OAAUm9G,EAC5F59H,KAAKgpD,WAAW7/C,SAAS1O,OAAS,IAClCuuD,EAAahpD,KAAKgpD,WAAW7/C,SAAS,GAAGmjC,yBAE7C,IAEIukF,EAFAuO,EAAe,CAACp/H,KAAKq1H,gBAAgB9zF,iBAAiB,IAAMoxF,EAAkB,IAC1EA,EAAmB,KAAOA,IAG9B9B,EADyB,SAAzB7wH,KAAKo0H,MAAM5kD,UACH,GAAG/xE,MAAMC,KAAK0hI,EAAa,GAAI,GAG/B,GAAG3hI,MAAMC,KAAK0hI,EAAa,GAAI,GAI3C,IAFA,IAAIjB,EAAiC,aAArBn+H,KAAK0M,YACD,EAAfyD,EAAMspC,OAA6B,EAAdtpC,EAAMqpC,MACvB39C,EAAI,EAAGA,EAAImE,KAAKgpD,WAAW7/C,SAAS1O,OAAQoB,IACxB,aAArBmE,KAAK0M,YACA,eAAe1M,KAAK0Y,mBACrB1Y,KAAKgpD,WAAW7/C,SAAStN,GAAGoS,MAAMrC,KAAQo9C,EAAWvP,OAAS,EAAK,MAIlEz5C,KAAK0wC,UAIN1wC,KAAKgpD,WAAW7/C,SAAStN,GAAGoS,MAAM8+B,MAAQoxF,EACtCn+H,KAAKgpD,WAAW7/C,SAAStN,GAAGywC,wBAAwBkN,OAAS,EAAI,KAJrEx5C,KAAKgpD,WAAW7/C,SAAStN,GAAGoS,MAAM8+B,MAASic,EAAWxP,MAAQ,EAAK,KAQ/E,IAAS39C,EAAI,EAAGA,EAAIg1H,EAAMp2H,OAAQoB,IAC9B4jI,EAAa5O,EAAMh1H,GAAGywC,wBACG,aAArBtsC,KAAK0M,YACA,eAAe1M,KAAK0Y,kBACrB,aAAkBm4G,EAAMh1H,GAAI,CAAE+P,KAAMuyH,EAAYsB,EAAWhmF,QAAU,EAAI,OAI7E,aAAkBo3E,EAAMh1H,GAAI,CAAEkxC,MAAOoxF,EAAYsB,EAAWjmF,OAAS,EAAI,OAsCjF,GAnCIx5C,KAAK0wC,WAAa1wC,KAAK2nG,UAAUx+F,SAAS1O,QAAoB,IAAV2qG,IACpDplG,KAAK2nG,UAAUx+F,SAAS,GAAG8E,MAAM8+B,MAAS/sC,KAAK2nG,UAAUr7D,wBAAwBkN,MAAQ,EAAK,KACjE,SAAzBx5C,KAAKo0H,MAAM5kD,YACN,gBACDxvE,KAAK2nG,UAAUx+F,SAAS,GAAG8E,MAAM8+B,MAAS/sC,KAAK2nG,UAAUr7D,wBAAwBkN,MAAQ,EAAK,QAI5F,IAAV4rD,IACyB,eAArBplG,KAAK0M,cACA1M,KAAK0wC,WAON1wC,KAAKgpD,WAAWzoB,UAAU54B,OAAOgrH,GACjC3yH,KAAKgpD,WAAW/6C,MAAM++B,MAAQhtC,KAAKy3H,YAAYxpH,MAAM++B,MAChD,gBACDhtC,KAAKgpD,WAAW7/C,SAAS,GAAG8E,MAAM8+B,KAC7B/sC,KAAKgpD,WAAW1c,wBAAwBkN,MAAQ,EAAK,EAAI,KACjC,SAAzBx5C,KAAKo0H,MAAM5kD,YACXxvE,KAAKgpD,WAAW7/C,SAAS,GAAG8E,MAAM8+B,KAC7B/sC,KAAKgpD,WAAW1c,wBAAwBkN,MAAQ,EAAK,EAAI,SAbtEx5C,KAAKgpD,WAAWzoB,UAAU54B,OAAOgrH,GAC5B,gBACD3yH,KAAKgpD,WAAW/6C,MAAM8+B,KAAO/sC,KAAKy3H,YAAYxpH,MAAM8+B,QAgB3D,eAAe/sC,KAAK0Y,kBACI,aAArB1Y,KAAK0M,aACL1M,KAAKgpD,WAAWzoB,UAAU54B,OAAOgrH,IAIzC,eAAc3yH,KAAK0Y,iBAAkB,CACrC,IAAI3Y,OAAO,EACY,MAAnBC,KAAKgpD,aAEDjpD,EADqB,eAArBC,KAAK0M,YACE,CAAEgzH,iBAAkB1/H,KAAKgpD,WAAW7/C,SAAS,GAAG8E,MAAM8+B,MAGtD,CAAE2yF,kBAAoB12E,EAAWvP,OAAS,EAAK,OAG9C,MAAZo3E,EAAM,KAEF9wH,EADqB,eAArBC,KAAK0M,YACE,CAAEizH,mBAAoB9O,EAAM,GAAG5iH,MAAM8+B,MAGrC,CAAE4yF,oBAAqBxB,EAAYsB,EAAWhmF,QAAU,EAAI,OAGpD,MAAnBz5C,KAAKgpD,YAAkC,MAAZ6nE,EAAM,KAE7B9wH,EADqB,eAArBC,KAAK0M,YACE,CACHgzH,iBAAkB1/H,KAAKgpD,WAAW7/C,SAAS,GAAG8E,MAAM8+B,KACpD4yF,mBAAoB9O,EAAM,GAAG5iH,MAAM8+B,MAIhC,CACH2yF,kBAAoB12E,EAAWvP,OAAS,EAAK,KAC7CkmF,oBAAqBxB,EAAYsB,EAAWhmF,QAAU,EAAI,OAKtEz5C,KAAK4/H,eAAeC,kBAAkB,kBAAmB9/H,KAIjE6yH,EAAO11H,UAAUs8H,iBAAmB,SAAU7yH,GAC1C,IAAIm5H,EACAC,GAAqB,YAAkB//H,KAAKo0H,SAAW,YAAkBp0H,KAAKo0H,MAAMv7G,QACpF+G,EAAQmgH,EAC0C//H,KAAKm5H,cAAcn5H,KAAK0zH,mBAAmB,GAA7F1zH,KAAKm5H,cAAcn5H,KAAK2zH,iBAAiB,GACzCqM,EAAWD,EAAkB//H,KAAKm5H,cAAcn5H,KAAK2zH,iBAAiB,GACtE3zH,KAAKm5H,cAAcn5H,KAAK0zH,mBAAmB,GAG3CoM,EAD6B,KADjClgH,EAAS5f,KAAKmzH,eAA4BnzH,KAAmB,eAA7B,GACvBxD,MAAM,OAAO/B,OACFmlB,EAAKpjB,MAAM,OAGX,CAACojB,EAAMA,GAE3B5f,KAAK23H,kBAAkBhxH,GACL,UAAd3G,KAAKiH,KACL,YAAWN,EAAS,CAAE,gBAAiBq5H,EAAU,iBAAkBpgH,IAGjE5f,KAAK0wC,UAGD/pC,IAAY3G,KAAKy3H,YACf,YAAW9wH,EAAS,CAAE,gBAAiBq5H,EAASxjI,MAAM,OAAO,GAAI,iBAAkBsjI,EAAc,KACjG,YAAWn5H,EAAS,CAAE,gBAAiBq5H,EAASxjI,MAAM,OAAO,GAAI,iBAAkBsjI,EAAc,KALnFn5H,IAAY3G,KAAKy3H,YACnC,YAAW9wH,EAAS,CAAE,gBAAiBq5H,EAASxjI,MAAM,OAAO,GAAI,iBAAkBsjI,EAAc,KACjG,YAAWn5H,EAAS,CAAE,gBAAiBq5H,EAASxjI,MAAM,OAAO,GAAI,iBAAkBsjI,EAAc,MAM7GlN,EAAO11H,UAAUy/H,kBAAoB,WAajC,MAXkB,UAAd38H,KAAKiH,KACqB,IAAtBjH,KAAKigI,aACEjgI,KAAK45H,WAGL55H,KAAK85H,WAIT95H,KAAK45H,YAIpBhH,EAAO11H,UAAU0/H,wBAA0B,SAAUr+H,GAYjD,OAVIA,EADc,aAAdyB,KAAKiH,MAAqC,YAAdjH,KAAKiH,MAIP,IAAtBjH,KAAKigI,aAHAjgI,KAAKkgI,yBAAyB3hI,EAAOyB,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,QAAS,GAO5EpgI,KAAKkgI,yBAAyB3hI,EAAOyB,KAAKm2H,OAAOkK,SAAUrgI,KAAKm2H,OAAOmK,QAAS,IAKrG1N,EAAO11H,UAAU07H,mBAAqB,WAC7B54H,KAAKwzH,mBACNxzH,KAAK2G,QAAQ2hG,QACbtoG,KAAKwzH,kBAAmB,IAGhCZ,EAAO11H,UAAU6/H,YAAc,SAAUh9H,GAErC,IAAIxB,EADJyB,KAAK44H,qBAEL,IAAI0D,EAAat8H,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,YACpCgwH,EAAO18H,KAAK28H,oBACM,KAAjB58H,EAAKsL,SAAqC,KAAjBtL,EAAKsL,SAC5BtL,EAAKgL,cAAcw1B,UAAUzyB,SAAS6kH,GAC3Bp0H,EAAd+9H,EAAsBt8H,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAK4qC,KAAKtuC,aAAa,GAC1D0D,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAK4qC,KAAKtuC,aAAa,GAEvC,KAAjByD,EAAKsL,SAAqC,KAAjBtL,EAAKsL,SACpCtL,EAAKgL,cAAcw1B,UAAUzyB,SAAS6kH,GACxBp0H,EAAd+9H,EAAsBt8H,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAK4qC,KAAKtuC,aAAa,GAC1D0D,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAK4qC,KAAKtuC,aAAa,GAEvC,KAAjByD,EAAKsL,SACRtL,EAAKgL,cAAcw1B,UAAUzyB,SAAS6kH,GAC3Bp0H,EAAd+9H,EAAsBt8H,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAKo0H,MAAM0J,UAAUxhI,aAAa,GACrE0D,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAKo0H,MAAM0J,UAAUxhI,aAAa,GAElD,KAAjByD,EAAKsL,SACXtL,EAAKgL,cAAcw1B,UAAUzyB,SAAS6kH,GACxBp0H,EAAd+9H,EAAsBt8H,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAKo0H,MAAM0J,UAAUxhI,aAAa,GACrE0D,KAAKjE,IAAI2gI,EAAM32G,WAAW/lB,KAAKo0H,MAAM0J,UAAUxhI,aAAa,GAElD,KAAjByD,EAAKsL,QACX9M,EAAQwnB,WAAW/lB,KAAKygB,IAAInkB,YAEL,KAAjByD,EAAKsL,UACX9M,EAAQwnB,WAAW/lB,KAAK0gB,IAAIpkB,aAE5B0D,KAAKm2H,OAAOV,UACZl3H,EAAQyB,KAAK48H,wBAAwBr+H,IAEzCyB,KAAK68H,kBAAkBt+H,IACnByB,KAAKk3H,YAAel3H,KAAKm0H,QAAQrzF,WAChC9gC,KAAKw4H,YAAYj4F,UAAUzyB,SAAS6kH,IACrC3yH,KAAKi9H,iBAETj9H,KAAKy4H,cAAcz4H,KAAKw4H,aACxBx4H,KAAKw4H,YAAYlwB,QACbvoG,EAAKgL,cAAcw1B,UAAUzyB,SAAS6kH,IACtC,IAAa52H,IAAIiE,KAAKm8H,SAAU,mBAAoBn8H,KAAKugI,SAAUvgI,MAEnED,EAAKgL,cAAcw1B,UAAUzyB,SAAS6kH,IACtC,IAAa52H,IAAIiE,KAAKo8H,UAAW,mBAAoBp8H,KAAKugI,SAAUvgI,OAG5E4yH,EAAO11H,UAAUu7H,cAAgB,SAAUzxH,GACnChH,KAAKq3H,kBACJr3H,KAAK01H,eAAen1F,UAAUzyB,SAAS6kH,GACP3yH,KAAK+6H,eAAe/6H,KAAKy3H,aAAtDz3H,KAAK86H,sBAGR96H,KAAK01H,eAA4C11H,KAAK+6H,eAAe/zH,GAA/ChH,KAAKwgI,YAAYx5H,IAGhD4rH,EAAO11H,UAAUqjI,SAAW,SAAUxgI,GAC9BA,EAAKgL,cAAcw1B,UAAUzyB,SAAS6kH,IACtC,IAAahrH,OAAO3H,KAAKm8H,SAAU,mBAAoBn8H,KAAKugI,UAE5DxgI,EAAKgL,cAAcw1B,UAAUzyB,SAAS6kH,IACtC,IAAahrH,OAAO3H,KAAKo8H,UAAW,mBAAoBp8H,KAAKugI,WAGrE3N,EAAO11H,UAAUujI,YAAc,WACF,eAArBzgI,KAAK0M,YACa,aAAd1M,KAAKiH,MACLjH,KAAK0wC,UAAa1wC,KAAKgzH,SAAS/kH,MAAM++B,MAAQ,MAAUhtC,KAAKgzH,SAAS/kH,MAAM8+B,KAAO,MACnF,aAAkB/sC,KAAKgzH,SAAU,CAAE,MAAS,YAAkBhzH,KAAKu4H,YAAc,EAAIv4H,KAAKu4H,WAAa,SAGvGv4H,KAAK0wC,UAAa1wC,KAAKgzH,SAAS/kH,MAAM++B,MAClChtC,KAAKu4H,WAAa,KAASv4H,KAAKgzH,SAAS/kH,MAAM8+B,KAAO/sC,KAAKu4H,WAAa,KAC5E,aAAkBv4H,KAAKgzH,SAAU,CAAE,MAAShzH,KAAK0gI,WAAa1gI,KAAKu4H,WAAa,QAIlE,aAAdv4H,KAAKiH,MACLjH,KAAKgzH,SAAS/kH,MAAMg/B,OAAS,MAC7B,aAAkBjtC,KAAKgzH,SAAU,CAAE,OAAU,YAAkBhzH,KAAKu4H,YAAc,EAAIv4H,KAAKu4H,WAAa,SAGxGv4H,KAAKgzH,SAAS/kH,MAAMg/B,OAASjtC,KAAKu4H,WAAa,KAC/C,aAAkBv4H,KAAKgzH,SAAU,CAAE,OAAUhzH,KAAK0gI,WAAa1gI,KAAKu4H,WAAa,SAI7F3F,EAAO11H,UAAUyjI,sBAAwB,SAAUpiI,GAG/C,OAFAA,EAAQyB,KAAK42H,iBAAiBr4H,GAC9BA,EAAQyB,KAAK4gI,oBAAoBriI,IAGrCq0H,EAAO11H,UAAU2jI,qBAAuB,SAAUC,EAAgBC,EAAgBC,EAAcC,GACnE,eAArBjhI,KAAK0M,YACA1M,KAAK0wC,WAKN1wC,KAAKs3H,cAAcrpH,MAAM++B,MAAQ8zF,EAAiB,KAClD9gI,KAAKs3H,cAAcrpH,MAAMurC,MAASunF,EAAiBD,EAAkB,OALrE9gI,KAAKs3H,cAAcrpH,MAAM8+B,KAAO+zF,EAAiB,KACjD9gI,KAAKs3H,cAAcrpH,MAAMurC,MAASunF,EAAiBD,EAAkB,OAQzE9gI,KAAKs3H,cAAcrpH,MAAMg/B,OAAS6zF,EAAiB,KACnD9gI,KAAKs3H,cAAcrpH,MAAMwrC,OAAUsnF,EAAiBD,EAAkB,MAExD,UAAd9gI,KAAKiH,OACoB,eAArBjH,KAAK0M,YACA1M,KAAK0wC,WAKN1wC,KAAKu3H,eAAetpH,MAAM++B,MAAQg0F,EAAe,KACjDhhI,KAAKu3H,eAAetpH,MAAMurC,MAASynF,EAAeD,EAAgB,OALlEhhI,KAAKu3H,eAAetpH,MAAM8+B,KAAOi0F,EAAe,KAChDhhI,KAAKu3H,eAAetpH,MAAMurC,MAASynF,EAAeD,EAAgB,OAQtEhhI,KAAKu3H,eAAetpH,MAAMg/B,OAAS+zF,EAAe,KAClDhhI,KAAKu3H,eAAetpH,MAAMwrC,OAAUwnF,EAAeD,EAAgB,QAI/EpO,EAAO11H,UAAU45H,YAAc,WAC3B,GAAkB,YAAd92H,KAAKiH,MAAoC,aAAdjH,KAAKiH,KAAqB,CACrD,IAAIi6H,EAAgBlhI,KAAKkgI,yBAAyBlgI,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,QAAQ,GAAO,GACzHc,EAAelhI,KAAK2gI,sBAAsBO,GAC1C,IAAIC,EAAcnhI,KAAKkgI,yBAAyBlgI,KAAKm2H,OAAOiK,OAAQpgI,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,QAAQ,GAAO,GACrHe,EAAanhI,KAAK2gI,sBAAsBQ,GACxCnhI,KAAK6gI,qBAAqBK,EAAcC,QAEvC,GAAkB,UAAdnhI,KAAKiH,KAAkB,CAC5B,IAAI65H,EAAkB9gI,KAAKkgI,yBAAyBlgI,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,QAAQ,GAAO,GAC3HU,EAAiB9gI,KAAK2gI,sBAAsBG,GAC5C,IAAIC,EAAkB/gI,KAAKkgI,yBAAyBlgI,KAAKm2H,OAAOiK,OAAQpgI,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,QAAQ,GAAO,GACzHW,EAAiB/gI,KAAK2gI,sBAAsBI,GAC5C,IAAIC,EAAgBhhI,KAAKkgI,yBAAyBlgI,KAAKm2H,OAAOkK,SAAUrgI,KAAKm2H,OAAOkK,SAAUrgI,KAAKm2H,OAAOmK,QAAQ,GAAO,GACzHU,EAAehhI,KAAK2gI,sBAAsBK,GAC1C,IAAIC,EAAgBjhI,KAAKkgI,yBAAyBlgI,KAAKm2H,OAAOmK,OAAQtgI,KAAKm2H,OAAOkK,SAAUrgI,KAAKm2H,OAAOmK,QAAQ,GAAO,GACvHW,EAAejhI,KAAK2gI,sBAAsBM,GAC1CjhI,KAAK6gI,qBAAqBC,EAAgBC,EAAgBC,EAAcC,KAGhFrO,EAAO11H,UAAUgjI,yBAA2B,SAAUkB,EAAcC,EAAUC,EAAUC,GAmBpF,OAlBI,YAAkBF,KAClBA,EAAWrhI,KAAKygB,IACZ,YAAkB2gH,IAAiBG,IACnCH,EAAeC,IAGnB,YAAkBC,KAClBA,EAAWthI,KAAK0gB,IACZ,YAAkB0gH,IAAiBG,IACnCH,EAAeE,IAGnBF,EAAeC,IACfD,EAAeC,GAEfD,EAAeE,IACfF,EAAeE,GAEZ,CAACF,EAAcphI,KAAK4gI,oBAAoBQ,KAEnDxO,EAAO11H,UAAUmS,SAAW,WAaxB,IAZK,YAAkBrP,KAAK43H,eAAiB53H,KAAK43H,aAAan9H,OAAS,IACpEuF,KAAKygB,IAAM,EACXzgB,KAAK0gB,IAAM1gB,KAAK43H,aAAan9H,OAAS,EACtCuF,KAAKi5H,eAETj5H,KAAK23H,kBAAkB33H,KAAKy3H,aAC5Bz3H,KAAK45H,WAAa,YAAkB55H,KAAKzB,OAASyB,KAAK42H,iBAAiB7wG,WAAW/lB,KAAKygB,IAAInkB,aACxF0D,KAAK42H,iBAAiB7wG,WAAW/lB,KAAKzB,MAAMjC,aAChD0D,KAAKu4H,WAAav4H,KAAK4gI,oBAAoB5gI,KAAK45H,YAChD55H,KAAKwhI,cAAgBxhI,KAAKu4H,WAC1B,YAAkBv4H,KAAKigI,cAA+B,UAAdjgI,KAAKiH,KAAmBjH,KAAKigI,aAAe,EAAIjgI,KAAKigI,aAAe,EACxGjgI,KAAKigI,aAAejgI,KAAKigI,aACX,YAAdjgI,KAAKiH,MAAoC,aAAdjH,KAAKiH,KAAqB,CACrD,GAAIjH,KAAKm2H,OAAOV,QAAS,CACrB,IAAIx4B,EAASj9F,KAAKkgI,yBAAyBlgI,KAAK45H,WAAY55H,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,QAC9FpgI,KAAK45H,WAAa38B,EAAO,GACzBj9F,KAAKu4H,WAAat7B,EAAO,GACzBj9F,KAAKwhI,cAAgBxhI,KAAKu4H,WAE9Bv4H,KAAKyhI,kBAAkB,MACvBzhI,KAAKs4H,cACLt4H,KAAKzB,MAAQyB,KAAK45H,WAClB55H,KAAKw5H,iBAAiBx5H,KAAKy3H,aAC3Bz3H,KAAKm9H,YAAY,UAAW,WAG5Bn9H,KAAK0hI,qBAES,YAAd1hI,KAAKiH,MACLjH,KAAKygI,cAELzgI,KAAKm2H,OAAOV,SACZz1H,KAAK82H,eAGblE,EAAO11H,UAAUw5H,iBAAmB,WACb,OAAf12H,KAAKzB,OAA0C,iBAAhByB,KAAU,QACzCA,KAAKzB,MAAQ,CAACwnB,WAAW,YAAW/lB,KAAKygB,MAAOsF,WAAW,YAAW/lB,KAAK0gB,SAGnFkyG,EAAO11H,UAAUwkI,mBAAqB,WAClC1hI,KAAK02H,mBACL12H,KAAK2hI,iBAET/O,EAAO11H,UAAU0kI,aAAe,WACV,UAAd5hI,KAAKiH,KACqB,IAAtBjH,KAAKigI,cACLjgI,KAAKy3H,YAAYxpH,MAAMinD,OAAUl1D,KAAKk1D,OAAS,EAAK,GACpDl1D,KAAK03H,aAAazpH,MAAMinD,OAAUl1D,KAAKk1D,OAAS,EAAK,KAGrDl1D,KAAKy3H,YAAYxpH,MAAMinD,OAAUl1D,KAAKk1D,OAAS,EAAK,GACpDl1D,KAAK03H,aAAazpH,MAAMinD,OAAUl1D,KAAKk1D,OAAS,EAAK,IAGpDl1D,KAAKq3H,mBAAqBr3H,KAAK01H,iBACpC11H,KAAK01H,eAAeznH,MAAMinD,OAAS,YAAiBl1D,KAAK2G,SAAW,KAG5EisH,EAAO11H,UAAUukI,kBAAoB,SAAU/3H,GAC3C,IACI8B,EADAyM,EAAQjY,KAER8iB,EAA6B,IAAtB9iB,KAAKigI,aAAsBjgI,KAAKu4H,WAAav4H,KAAK0gI,WAEzDl1H,EADAxL,KAAKq3H,kBACI,CAACr3H,KAAKy3H,YAAaz3H,KAAK+3H,gBAGxB,CAAC/3H,KAAKw4H,aAEnBx4H,KAAKs4H,cACL9sH,EAAOvI,SAAQ,SAAUuI,GACK,eAAtByM,EAAMvL,YACNuL,EAAMy4B,UAAallC,EAAOyC,MAAM++B,MAC5BlqB,EAAM,KAAStX,EAAOyC,MAAM8+B,KAAOjqB,EAAM,KAG7CtX,EAAOyC,MAAMg/B,OAASnqB,EAAM,KAE5B,eAAc7K,EAAMS,kBACpBlN,EAAOyC,MAAM4zH,eAAe,iBAGpC7hI,KAAKm9H,YAAY,SAAUzzH,IAE/BkpH,EAAO11H,UAAUs7H,UAAY,WACzB,OAA8B,IAAtBx4H,KAAKigI,aAAsBjgI,KAAKy3H,YAAcz3H,KAAK03H,cAE/D9E,EAAO11H,UAAUykI,cAAgB,WAC7B3hI,KAAK8hI,mBACL9hI,KAAKigI,aAAe,EACpBjgI,KAAKyhI,kBAAkB,MACvBzhI,KAAKigI,aAAe,EACpBjgI,KAAKyhI,kBAAkB,MACvBzhI,KAAKigI,aAAe,GAExBrN,EAAO11H,UAAUigI,YAAc,SAAUr1H,EAAWjN,GAChD,IAAIuxD,EAAyB,WAAdtkD,EAAyB9H,KAAK22H,YAAc32H,KAAK62H,gBAChE,GAAkB,UAAd72H,KAAKiH,KACLjH,KAAKwjC,cAAc,CAAE,MAASxjC,KAAK45H,aAAc,GAC7CxtE,IAAapsD,KAAKzB,OAAWyB,KAAKq3H,mBAAsBr3H,KAAKozH,iBAC7DpzH,KAAK21B,QAAQ7tB,EAAW9H,KAAK+hI,gBAAgBj6H,EAAWjN,IACxDmF,KAAKozH,gBAAiB,EACtBpzH,KAAKy5H,eAAe3xH,EAAW9H,KAAKzB,QAExCyB,KAAKw5H,iBAAiBx5H,KAAKy3H,iBAE1B,CACD,IAAIl5H,EAAQyB,KAAKzB,MAAQ,CAACyB,KAAK45H,WAAY55H,KAAK85H,YAChD95H,KAAKwjC,cAAc,CAAE,MAASjlC,IAAS,IACnC6tD,EAAS3xD,SAAWuF,KAAKzB,MAAM9D,QAC5BuF,KAAKzB,MAAM,KAAO6tD,EAAS,IAAMpsD,KAAKzB,MAAM,KAAO6tD,EAAS,MAC/DpsD,KAAKozH,gBAAiB,EACtBpzH,KAAK21B,QAAQ7tB,EAAW9H,KAAK+hI,gBAAgBj6H,EAAWjN,IACxDmF,KAAKozH,gBAAiB,EACtBpzH,KAAKy5H,eAAe3xH,EAAW9H,KAAKzB,QAExCyB,KAAKw5H,iBAAiBx5H,KAAKw4H,aAE/Bx4H,KAAK81H,YAAYv3H,MAAQyB,KAAKzB,MAAMjC,YAExCs2H,EAAO11H,UAAU6kI,gBAAkB,SAAUj6H,EAAWjN,GACpD,IAAIm0B,EAsBJ,OArBIhvB,KAAKm0H,QAAQrzF,WAAa9gC,KAAKq5H,YAAcr5H,KAAKozH,gBAC7C,eAAepzH,KAAK0Y,kBACrB1Y,KAAKk5H,eAETlqG,EAAY,CACRzwB,MAAOyB,KAAKzB,MACZyjI,cAA6B,WAAdl6H,EAAyB9H,KAAK22H,YAAc32H,KAAK62H,gBAChEhnF,OAAQ/nC,EAAW8X,KAAM5f,KAAKq5H,WAAW/b,QAAS2kB,cAAc,YAAkBpnI,KAItFm0B,EAAY,CACRzwB,MAAOyB,KAAKzB,MACZyjI,cAA6B,WAAdl6H,EAAyB9H,KAAK22H,YAAc32H,KAAK62H,gBAChEhnF,OAAQ/nC,EAAW8X,KAAM,YAAkB5f,KAAK2zH,gBAAgB96G,QAAU7Y,KAAKzB,MAAMjC,WAClE,UAAd0D,KAAKiH,KAAmBjH,KAAKq0H,aAAar0H,KAAKzB,MAAOyB,KAAK2zH,iBAAiBU,aACxEr0H,KAAKq0H,aAAar0H,KAAKzB,MAAM,GAAIyB,KAAK2zH,iBAAiBU,aAAe,MACnEr0H,KAAKq0H,aAAar0H,KAAKzB,MAAM,GAAIyB,KAAK2zH,iBAAiBU,aACnE4N,cAAc,YAAkBpnI,IAGjCm0B,GAEX4jG,EAAO11H,UAAUu8H,eAAiB,SAAU3xH,EAAWvJ,GACjC,WAAduJ,EACA9H,KAAK22H,YAAcp4H,EAGnByB,KAAK62H,gBAAkBt4H,GAG/Bq0H,EAAO11H,UAAU4kI,iBAAmB,WAChC,IAAI7kC,EAASj9F,KAAKzB,MAAMjC,WAAWE,MAAM,KAAK+E,IAAIi+C,QAuBlD,GAtBKx/C,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,aAA+B1M,KAAKkiI,IAC5DliI,KAAKzB,MAAQ,CAAC0+F,EAAO,GAAIA,EAAO,IAGhCj9F,KAAKzB,MAAQ,CAAC0+F,EAAO,GAAIA,EAAO,IAEhCj9F,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,aACvB1M,KAAK45H,WAAa55H,KAAK42H,iBAAiB52H,KAAKzB,MAAM,IACnDyB,KAAK85H,WAAa95H,KAAK42H,iBAAiB52H,KAAKzB,MAAM,MAGnDyB,KAAK45H,WAAa55H,KAAK42H,iBAAiB52H,KAAKzB,MAAM,IACnDyB,KAAK85H,WAAa95H,KAAK42H,iBAAiB52H,KAAKzB,MAAM,KAEvDyB,KAAKu4H,WAAav4H,KAAK4gI,oBAAoB5gI,KAAK45H,YAChD55H,KAAK0gI,WAAa1gI,KAAK4gI,oBAAoB5gI,KAAK85H,YAC5C95H,KAAKu4H,WAAav4H,KAAK0gI,aACvB1gI,KAAKu4H,WAAav4H,KAAK0gI,WACvB1gI,KAAK45H,WAAa55H,KAAK85H,YAE3B95H,KAAKwhI,cAAgBxhI,KAAKu4H,WAC1Bv4H,KAAKmiI,cAAgBniI,KAAK0gI,WACtB1gI,KAAKm2H,OAAOV,QAAS,CACrBz1H,KAAKigI,aAAe,EACpB,IAAImC,EAAWpiI,KAAKkgI,yBAAyBlgI,KAAK45H,WAAY55H,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,QAChGpgI,KAAK45H,WAAawI,EAAS,GAC3BpiI,KAAKu4H,WAAa6J,EAAS,GAC3BpiI,KAAKwhI,cAAgBxhI,KAAKu4H,WAC1Bv4H,KAAKigI,aAAe,EACpBmC,EAAWpiI,KAAKkgI,yBAAyBlgI,KAAK85H,WAAY95H,KAAKm2H,OAAOkK,SAAUrgI,KAAKm2H,OAAOmK,QAC5FtgI,KAAK85H,WAAasI,EAAS,GAC3BpiI,KAAK0gI,WAAa0B,EAAS,GAC3BpiI,KAAKmiI,cAAgBniI,KAAK0gI,aAGlC9N,EAAO11H,UAAU0jI,oBAAsB,SAAUriI,GAC7C,IAAIukB,EAiBJ,OAhBAvkB,EAAS,KACJA,EAASwnB,WAAW,YAAW/lB,KAAKygB,QAAasF,WAAW,YAAW/lB,KAAK0gB,MAAUqF,WAAW,YAAW/lB,KAAKygB,OAElHqC,EADqB,eAArB9iB,KAAK0M,YACC1M,KAAK2G,QAAQ2lC,wBAAwBkN,OAASj7C,EAAQ,KAGtDyB,KAAK2G,QAAQ2lC,wBAAwBmN,QAAUl7C,EAAQ,KAE3DwnB,WAAW,YAAW/lB,KAAK0gB,QAAYqF,WAAW,YAAW/lB,KAAKygB,QAEhEqC,EADqB,eAArB9iB,KAAK0M,YACC1M,KAAK2G,QAAQ2lC,wBAAwBkN,MAGrCx5C,KAAK2G,QAAQ2lC,wBAAwBmN,QAG5C32B,GAEX8vG,EAAO11H,UAAU05H,iBAAmB,SAAUr4H,GAI1C,GAHIyB,KAAKygB,IAAMzgB,KAAK0gB,MAChB1gB,KAAKygB,IAAMzgB,KAAK0gB,KAEhB1gB,KAAKygB,MAAQzgB,KAAK0gB,IAClB,OAAQqF,WAAW,YAAW/lB,KAAK0gB,MAEvC,IAAIlV,EAASxL,KAAKqiI,eAOlB,OANI9jI,EAAQiN,EAAOgE,MACfjR,EAAQiN,EAAOgE,MAEVjR,EAAQiN,EAAO1I,MACpBvE,EAAQiN,EAAO1I,KAEZvE,GAMXq0H,EAAO11H,UAAUolI,WAAa,WAC1B,IAAIrqH,EAAQjY,KACZA,KAAKy3H,YAAYxpH,MAAM8kH,WAAa,OAClB,YAAd/yH,KAAKiH,OACLjH,KAAKgzH,SAAS/kH,MAAM8kH,WAAa,QAEnB,UAAd/yH,KAAKiH,OACLjH,KAAK03H,aAAazpH,MAAM8kH,WAAa,QAEzC/yH,KAAKu4H,WAAav4H,KAAK4gI,oBAAoB5gI,KAAK45H,YAC5C55H,KAAK85H,aACL95H,KAAK0gI,WAAa1gI,KAAK4gI,oBAAoB5gI,KAAK85H,aAE3B,eAArB95H,KAAK0M,aACL1M,KAAK0wC,UAAY1wC,KAAKy3H,YAAYxpH,MAAM++B,MACpChtC,KAAKu4H,WAAa,KAAOv4H,KAAKy3H,YAAYxpH,MAAM8+B,KAAO/sC,KAAKu4H,WAAa,KACzEv4H,KAAKq3H,oBACLr3H,KAAK0wC,UAAY1wC,KAAK+3H,eAAe9pH,MAAM++B,MACvChtC,KAAKu4H,WAAa,KAAOv4H,KAAK+3H,eAAe9pH,MAAM8+B,KAAO/sC,KAAKu4H,WAAa,MAElE,aAAdv4H,KAAKiH,MACLjH,KAAK0wC,UAAa1wC,KAAKgzH,SAAS/kH,MAAM++B,MAAQ,MAAUhtC,KAAKgzH,SAAS/kH,MAAM8+B,KAAO,MACnF,aAAkB/sC,KAAKgzH,SAAU,CAAE,MAAS,YAAkBhzH,KAAKu4H,YAAc,EAAIv4H,KAAKu4H,WAAa,QAEpF,UAAdv4H,KAAKiH,OACVjH,KAAK0wC,UAAY1wC,KAAK03H,aAAazpH,MAAM++B,MACrChtC,KAAK0gI,WAAa,KAAO1gI,KAAK03H,aAAazpH,MAAM8+B,KAAO/sC,KAAK0gI,WAAa,KAC9E1gI,KAAK0wC,UAAa1wC,KAAKgzH,SAAS/kH,MAAM++B,MAClChtC,KAAKu4H,WAAa,KAASv4H,KAAKgzH,SAAS/kH,MAAM8+B,KAAO/sC,KAAKu4H,WAAa,KAC5E,aAAkBv4H,KAAKgzH,SAAU,CAAE,MAAShzH,KAAK0gI,WAAa1gI,KAAKu4H,WAAa,UAIpFv4H,KAAKy3H,YAAYxpH,MAAMg/B,OAASjtC,KAAKu4H,WAAa,KAC9Cv4H,KAAKq3H,oBACLr3H,KAAK+3H,eAAe9pH,MAAMg/B,OAASjtC,KAAKu4H,WAAa,MAEvC,aAAdv4H,KAAKiH,MACLjH,KAAKgzH,SAAS/kH,MAAMg/B,OAAS,MAC7B,aAAkBjtC,KAAKgzH,SAAU,CAAE,OAAU,YAAkBhzH,KAAKu4H,YAAc,EAAIv4H,KAAKu4H,WAAa,QAErF,UAAdv4H,KAAKiH,OACVjH,KAAK03H,aAAazpH,MAAMg/B,OAASjtC,KAAK0gI,WAAa,KACnD1gI,KAAKgzH,SAAS/kH,MAAMg/B,OAASjtC,KAAKu4H,WAAa,KAC/C,aAAkBv4H,KAAKgzH,SAAU,CAAE,OAAUhzH,KAAK0gI,WAAa1gI,KAAKu4H,WAAa,SAGrFv4H,KAAKm2H,OAAOV,SACZz1H,KAAK82H,cAEoB,SAAzB92H,KAAKo0H,MAAM5kD,WAAwBxvE,KAAKy9H,KACnC,gBACDz9H,KAAKqlD,cAAcrlD,KAAKy9H,IACxBz9H,KAAKy9H,QAAKh/H,GAEduB,KAAK+2H,cACD,eACA/2H,KAAKw/H,qBAGbx/H,KAAKs4H,cACAt4H,KAAKm0H,QAAQrzF,WACdp1B,YAAW,WACPuM,EAAMw/G,YAAYxpH,MAAM8kH,WAAa96G,EAAMi7G,eACxB,UAAfj7G,EAAMhR,OACNgR,EAAMy/G,aAAazpH,MAAM8kH,WAAa96G,EAAMi7G,mBAInD,eAAelzH,KAAK0Y,kBACrB1Y,KAAK+6H,eAAe/6H,KAAKo7H,eAE7Bp7H,KAAKi5H,eAETrG,EAAO11H,UAAU2/H,kBAAoB,SAAUt+H,GAC3C,IAAIs5C,EAAW,KACW,IAAtB73C,KAAKigI,cACCjgI,KAAKm2H,OAAOV,SAAWz1H,KAAKm2H,OAAOoM,mBACrCviI,KAAK45H,WAAa55H,KAAK42H,iBAAiBr4H,GACxCyB,KAAKu4H,WAAav4H,KAAK4gI,oBAAoB5gI,KAAK45H,YAC9B,UAAd55H,KAAKiH,MAAoBjH,KAAKu4H,WAAav4H,KAAK0gI,aAChD1gI,KAAKu4H,WAAav4H,KAAK0gI,WACvB1gI,KAAK45H,WAAa55H,KAAK85H,YAEvB95H,KAAKu4H,aAAev4H,KAAKwhI,gBACzB3pF,EAAW73C,KAAKwhI,cAAgBxhI,KAAKu4H,aAG7Cv4H,KAAK4hI,iBAGC5hI,KAAKm2H,OAAOV,SAAWz1H,KAAKm2H,OAAOqM,iBACrCxiI,KAAK85H,WAAa95H,KAAK42H,iBAAiBr4H,GACxCyB,KAAK0gI,WAAa1gI,KAAK4gI,oBAAoB5gI,KAAK85H,YAC9B,UAAd95H,KAAKiH,MAAoBjH,KAAK0gI,WAAa1gI,KAAKu4H,aAChDv4H,KAAK0gI,WAAa1gI,KAAKu4H,WACvBv4H,KAAK85H,WAAa95H,KAAK45H,YAEvB55H,KAAK0gI,aAAe1gI,KAAKmiI,gBACzBtqF,EAAW73C,KAAKmiI,cAAgBniI,KAAK0gI,aAG7C1gI,KAAK4hI,gBAEQ,OAAb/pF,IACkB,YAAd73C,KAAKiH,MACLjH,KAAKygI,cAETzgI,KAAKyhI,kBAAkB,QAG/B7O,EAAO11H,UAAUmlI,aAAe,WAC5B,OAAIriI,KAAKygB,IAAMzgB,KAAK0gB,IACT,CACHlR,MAAOxP,KAAK0gB,IACZ5d,IAAK9C,KAAKygB,KAIP,CACHjR,MAAOxP,KAAKygB,IACZ3d,IAAK9C,KAAK0gB,MAItBkyG,EAAO11H,UAAUulI,aAAe,SAAU5qF,GAEtC,GAAI73C,KAAKygB,MAAQzgB,KAAK0gB,IAClB,OAAO,IAEX,GAAyB,eAArB1gB,KAAK0M,YAA8B,CACnC,IAAIqgC,EAAO8K,EAASt3C,EAAIP,KAAK2G,QAAQ2lC,wBAAwBS,KACzD1oB,EAAMrkB,KAAK2G,QAAQq6B,YAAc,IACrChhC,KAAKqT,IAAO05B,EAAO1oB,MAElB,CACD,IAAIq+G,EAAQ7qF,EAASp0B,EAAIzjB,KAAK2G,QAAQ2lC,wBAAwB1gC,IAC1DyY,EAAMrkB,KAAK2G,QAAQ+yC,aAAe,IACtC15C,KAAKqT,IAAM,IAAOqvH,EAAQr+G,EAE9B,IAAIhR,EAAMrT,KAAK2iI,qBAAqB3iI,KAAKqT,KAgBzC,OAfIA,EAAM,EACNA,EAAM,EAEDA,EAAM,MACXA,EAAM,KAENrT,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,cACvB2G,EAAM,IAAMA,GAES,eAArBrT,KAAK0M,YACC1M,KAAK2G,QAAQ2lC,wBAAwBkN,OAASnmC,EAAM,KAGpDrT,KAAK2G,QAAQ2lC,wBAAwBmN,QAAUpmC,EAAM,MAInEu/G,EAAO11H,UAAUylI,qBAAuB,SAAUpkI,GAC5B,IAAdyB,KAAK4qC,OACL5qC,KAAK4qC,KAAO,GAEhB,IAAIg4F,EAAe78G,WAAW,YAAW/lB,KAAK4qC,SAAY7kB,WAAW,YAAW/lB,KAAK0gB,MAAQqF,WAAW,YAAW/lB,KAAKygB,OAAS,KAC7HoiH,EAAStkI,EAAQqX,KAAKmG,IAAI6mH,GAS9B,OARe,IAAXC,IACKD,EAAc,EAAKC,EACpBtkI,GAASskI,EAGTtkI,GAASqX,KAAKmG,IAAI6mH,GAAeC,GAGlCtkI,GAEXq0H,EAAO11H,UAAUnB,IAAM,SAAUmG,EAAG8T,EAAG8sH,GACnC,IACIviI,EAAIqV,KAAKqrG,IAAI,GAAiB,GAQlC,OANI6hB,GACOltH,KAAKmiE,MAAM71E,EAAI3B,GAAKqV,KAAKmiE,MAAM/hE,EAAIzV,IAAMA,GAGzCqV,KAAKmiE,MAAM71E,EAAI3B,GAAKqV,KAAKmiE,MAAM/hE,EAAIzV,IAAMA,GAIxDqyH,EAAO11H,UAAU6lI,gBAAkB,SAAUjgH,GACzC,IAAIzP,EACAqa,EAAO3H,WAAW,YAAW/lB,KAAK0gB,MAAQqF,WAAW,YAAW/lB,KAAKygB,MAQzE,OANIpN,EADqB,eAArBrT,KAAK0M,YACEoW,EAAM9iB,KAAK2G,QAAQ2lC,wBAAwBkN,MAAS9rB,EAGpD5K,EAAM9iB,KAAK2G,QAAQ2lC,wBAAwBmN,OAAU/rB,EAEpD1tB,KAAKjE,IAAIsX,EAAK0S,WAAW/lB,KAAKygB,IAAInkB,aAAa,IAG/Ds2H,EAAO11H,UAAU27H,eAAiB,SAAUnuH,GAExC,IAAIoY,EADJpY,EAAIX,iBAEa,cAAbW,EAAIzD,MAAqC,YAAbyD,EAAIzD,MAAmC,UAAbyD,EAAIzD,KAC1D6b,EAAM,CAAEviB,EAAGmK,EAAI+rC,QAAShzB,EAAG/Y,EAAIgsC,SAEb,aAAbhsC,EAAIzD,MAAoC,eAAbyD,EAAIzD,OACpC6b,EAAM,CAAEviB,EAAGmK,EAAIuC,eAAe,GAAGwpC,QAAShzB,EAAG/Y,EAAIuC,eAAe,GAAGypC,UAEvE,IAAIssF,EAAYhjI,KAAKyiI,aAAa3/G,GAC9BmgH,EAAYjjI,KAAK+iI,gBAAgBC,GACrC,GAAkB,UAAdhjI,KAAKiH,MAAqBjH,KAAK0gI,WAAasC,EAAcA,EAAYhjI,KAAKu4H,WAAa,CAExF,GADAv4H,KAAKigI,aAAe,GACdjgI,KAAKm2H,OAAOV,UAAWz1H,KAAKm2H,OAAOqM,eAAiB,CACtD,GAAIxiI,KAAKm2H,OAAOV,QAEZwN,GADI1kI,EAAQyB,KAAKkgI,yBAAyB+C,EAAWjjI,KAAKm2H,OAAOkK,SAAUrgI,KAAKm2H,OAAOmK,SACrE,GAClB0C,EAAYzkI,EAAM,GAEtByB,KAAK03H,aAAan3F,UAAUxkC,IAAI42H,IAChC3yH,KAAK0gI,WAAa1gI,KAAKmiI,cAAgBa,EACvChjI,KAAK85H,WAAamJ,EAEtBjjI,KAAK4hI,eACL5hI,KAAK03H,aAAapvB,YAEjB,CAED,GADAtoG,KAAKigI,aAAe,GACdjgI,KAAKm2H,OAAOV,UAAWz1H,KAAKm2H,OAAOoM,iBAAmB,CAEpD,IAAIhkI,EADR,GAAIyB,KAAKm2H,OAAOV,QAEZwN,GADI1kI,EAAQyB,KAAKkgI,yBAAyB+C,EAAWjjI,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,SACrE,GAClB4C,EAAYzkI,EAAM,GAEtByB,KAAKy3H,YAAYl3F,UAAUxkC,IAAI42H,IAC/B3yH,KAAKu4H,WAAav4H,KAAKwhI,cAAgBwB,EACvChjI,KAAK45H,WAAaqJ,EAEtBjjI,KAAK4hI,eACL5hI,KAAKy3H,YAAYnvB,QAEjBtoG,KAAKq3H,mBACLr3H,KAAK01H,eAAen1F,UAAUxkC,IAAI42H,GAEtC,IAAIuQ,EAAiBljI,KAAK2G,QAAQoL,cAAc,IAAM4gH,GAClDuQ,GAAkBljI,KAAKw4H,cAAgB0K,GACvCA,EAAe3iG,UAAU54B,OAAOgrH,GAEpC,IAAInnH,EAA+B,IAAtBxL,KAAKigI,aAAqBjgI,KAAKy3H,YAAcz3H,KAAK03H,aAC/D,GAAIhtH,EAAI1D,SAAWwE,EAOf,OANIxL,KAAKk3H,YAAel3H,KAAKm0H,QAAQrzF,WAChC9gC,KAAKw4H,YAAYj4F,UAAUzyB,SAAS6kH,IACrC3yH,KAAKi9H,iBAETj9H,KAAK+4H,YAAYruH,QACjB1K,KAAKy4H,cAAcz4H,KAAKw4H,aAG5B,GAAKx4H,KAAKmjI,mBAAmBF,GAA7B,CAGA,IAAIlQ,EAAa/yH,KAAKk3H,YAAcl3H,KAAKm0H,QAAQrzF,UAC7C9gC,KAAKizH,4BAA8BjzH,KAAK+yH,WAC5C/yH,KAAKw4H,YAAYvqH,MAAM8kH,WAAaA,EAAWvnH,OAC7B,YAAdxL,KAAKiH,OACLjH,KAAKgzH,SAAS/kH,MAAM8kH,WAAaA,EAAWC,UAEhDhzH,KAAKyhI,kBAAkB/2H,GACnB1K,KAAKq3H,oBACLr3H,KAAKozH,gBAAiB,GAE1BpzH,KAAKm9H,YAAY,UAAWzyH,GACV,YAAd1K,KAAKiH,MACLjH,KAAKygI,gBAGb7N,EAAO11H,UAAUkmI,kBAAoB,SAAUC,EAAaC,EAAaC,GAChD,IAAjBA,GACAvjI,KAAK45H,WAAa0J,EAClBtjI,KAAK85H,WAAa95H,KAAK45H,WAAa55H,KAAKwjI,SAEnB,IAAjBD,IACLvjI,KAAK85H,WAAawJ,EAClBtjI,KAAK45H,WAAa55H,KAAK85H,WAAa95H,KAAKwjI,SAE7CxjI,KAAKu4H,WAAav4H,KAAK4gI,oBAAoB5gI,KAAK45H,YAChD55H,KAAK0gI,WAAa1gI,KAAK4gI,oBAAoB5gI,KAAK85H,aAEpDlH,EAAO11H,UAAUumI,iBAAmB,SAAU/5H,GAC1C,IAAIsI,EAAIwtB,EAKJ1c,EAIA4gH,EACAC,EAOJ,GAhBmB,cAAfj6H,EAAMzC,MACNyC,EAAMK,iBAEV/J,KAAK4jI,iBAAkB,EAEvB5jI,KAAKgzH,SAAS/kH,MAAM8kH,WAAa,OACjC/yH,KAAKy3H,YAAYxpH,MAAM8kH,WAAa,OACpC/yH,KAAK03H,aAAazpH,MAAM8kH,WAAa,OAGlB,cAAfrpH,EAAMzC,MAC+By8H,GAArC1xH,EAAK,CAACtI,EAAM+sC,QAAS/sC,EAAMgtC,UAAwB,GAAIitF,EAAW3xH,EAAG,KAGI0xH,GAAzElkG,EAAK,CAAC91B,EAAMuD,eAAe,GAAGwpC,QAAS/sC,EAAMuD,eAAe,GAAGypC,UAAwB,GAAIitF,EAAWnkG,EAAG,MAEvGx/B,KAAKm2H,OAAOV,SAAWz1H,KAAKm2H,OAAOoM,kBAAuBviI,KAAKm2H,OAAOV,SAAWz1H,KAAKm2H,OAAOqM,gBAAiB,CAiBhH,GAZI1/G,EAJC9iB,KAAK0wC,UAIA,CAAEnwC,EAAGmjI,EAAW1jI,KAAK6jI,iBAAkBpgH,EAAGkgH,EAAW3jI,KAAK6jI,kBAH1D,CAAEtjI,EAAGmjI,EAAW1jI,KAAK8jI,gBAAiBrgH,EAAGkgH,EAAW3jI,KAAK6jI,kBAKnE7jI,KAAKu4H,WAAav4H,KAAKyiI,aAAa3/G,GACpC9iB,KAAK45H,WAAa55H,KAAK+iI,gBAAgB/iI,KAAKu4H,YAKxCz1G,EAJC9iB,KAAK0wC,UAIA,CAAEnwC,EAAGmjI,EAAW1jI,KAAK8jI,gBAAiBrgH,EAAGkgH,EAAW3jI,KAAK8jI,iBAHzD,CAAEvjI,EAAGmjI,EAAW1jI,KAAK6jI,iBAAkBpgH,EAAGkgH,EAAW3jI,KAAK8jI,iBAKpE9jI,KAAK0gI,WAAa1gI,KAAKyiI,aAAa3/G,GACpC9iB,KAAK85H,WAAa95H,KAAK+iI,gBAAgB/iI,KAAK0gI,YACxC1gI,KAAKm2H,OAAOV,QAAS,CACrB,IAAIl3H,EAAQyB,KAAKkgI,yBAAyBlgI,KAAK45H,WAAY55H,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,QAC7FpgI,KAAK45H,WAAar7H,EAAM,GACxByB,KAAKu4H,WAAah6H,EAAM,GACpByB,KAAK45H,aAAe55H,KAAKm2H,OAAOiK,QAChCpgI,KAAKojI,kBAAkBpjI,KAAK45H,WAAY55H,KAAKm2H,OAAOiK,OAAQ,GAE5DpgI,KAAK45H,aAAe55H,KAAKm2H,OAAOgK,UAChCngI,KAAKojI,kBAAkBpjI,KAAK45H,WAAY55H,KAAKm2H,OAAOgK,SAAU,GAElE5hI,EAAQyB,KAAKkgI,yBAAyBlgI,KAAK85H,WAAY95H,KAAKm2H,OAAOkK,SAAUrgI,KAAKm2H,OAAOmK,QACzFtgI,KAAK85H,WAAav7H,EAAM,GACxByB,KAAK0gI,WAAaniI,EAAM,GACpByB,KAAK85H,aAAe95H,KAAKm2H,OAAOkK,UAChCrgI,KAAKojI,kBAAkBpjI,KAAK85H,WAAY95H,KAAKm2H,OAAOkK,SAAU,GAE9DrgI,KAAK85H,aAAe95H,KAAKm2H,OAAOmK,QAChCtgI,KAAKojI,kBAAkBpjI,KAAK85H,WAAY95H,KAAKm2H,OAAOmK,OAAQ,GAGhEtgI,KAAK85H,aAAe95H,KAAK0gB,KACzB1gB,KAAKojI,kBAAkBpjI,KAAK85H,WAAY95H,KAAK0gB,IAAK,GAElD1gB,KAAK45H,aAAe55H,KAAKygB,KACzBzgB,KAAKojI,kBAAkBpjI,KAAK45H,WAAY55H,KAAKygB,IAAK,GAG1DzgB,KAAKigI,aAAe,EACpBjgI,KAAKyhI,kBAAkB/3H,GACvB1J,KAAKigI,aAAe,EACpBjgI,KAAKyhI,kBAAkB/3H,GACvB1J,KAAKy4H,cAAcz4H,KAAKgzH,UACxBhzH,KAAKygI,eAET7N,EAAO11H,UAAU67H,YAAc,SAAUrvH,GACrC1J,KAAKm9H,YAAY,UAAWzzH,GAC5B1J,KAAK24H,iBACL34H,KAAKy3H,YAAYl3F,UAAU54B,OAAOgrH,IAChB,UAAd3yH,KAAKiH,OACLjH,KAAKozH,gBAAiB,EACtBpzH,KAAK03H,aAAan3F,UAAU54B,OAAOgrH,KAEvC3yH,KAAK04H,eACD14H,KAAKk3H,aACLl3H,KAAKw4H,YAAYj4F,UAAU54B,OAAO,sBAC9B3H,KAAKq3H,mBACLr3H,KAAK01H,eAAen1F,UAAU54B,OAAOgrH,IAG7C,IAAahrH,OAAOd,SAAU,sBAAuB7G,KAAK84H,eAC1D,IAAanxH,OAAOd,SAAU,mBAAoB7G,KAAK+4H,cAE3DnG,EAAO11H,UAAU47H,cAAgB,SAAUpuH,GAIvC,IAAIoY,EAHa,cAAbpY,EAAIzD,MACJyD,EAAIX,iBAIJ+Y,EADa,cAAbpY,EAAIzD,KACE,CAAE1G,EAAGmK,EAAI+rC,QAAShzB,EAAG/Y,EAAIgsC,SAGzB,CAAEn2C,EAAGmK,EAAIuC,eAAe,GAAGwpC,QAAShzB,EAAG/Y,EAAIuC,eAAe,GAAGypC,SAEvE,IAAIssF,EAAYhjI,KAAKyiI,aAAa3/G,GAC9BmgH,EAAYjjI,KAAK+iI,gBAAgBC,GAErC,GADAA,EAAYptH,KAAKmiE,MAAMirD,GACL,UAAdhjI,KAAKiH,MAA0C,IAAtBjH,KAAKigI,aAAoB,CAClD,IAAMjgI,KAAKm2H,OAAOV,UAAWz1H,KAAKm2H,OAAOoM,iBAAmB,CACxD,GAAIviI,KAAKm2H,OAAOV,QAAS,CACrB,IAAIsO,EAAkB/jI,KAAKkgI,yBAAyB+C,EAAWjjI,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,QACjG4C,EAAYe,EAAgB,GAC5Bd,EAAYc,EAAgB,GAEhC/jI,KAAKu4H,WAAayK,EAClBhjI,KAAK45H,WAAaqJ,EAEtBjjI,KAAKy3H,YAAYl3F,UAAUxkC,IAAI42H,IAEnC,GAAkB,UAAd3yH,KAAKiH,KACL,GAA0B,IAAtBjH,KAAKigI,cAEL,GADAjgI,KAAKy3H,YAAYl3F,UAAUxkC,IAAI42H,MACzB3yH,KAAKm2H,OAAOV,SAAWz1H,KAAKm2H,OAAOoM,mBACjCS,EAAYhjI,KAAK0gI,aACjBsC,EAAYhjI,KAAK0gI,WACjBuC,EAAYjjI,KAAK85H,YAEjBkJ,IAAchjI,KAAKwhI,gBAAe,CAClC,GAAIxhI,KAAKm2H,OAAOV,QAEZwN,GADI1kI,EAAQyB,KAAKkgI,yBAAyB+C,EAAWjjI,KAAKm2H,OAAOgK,SAAUngI,KAAKm2H,OAAOiK,SACrE,GAClB4C,EAAYzkI,EAAM,GAEtByB,KAAKu4H,WAAav4H,KAAKwhI,cAAgBwB,EACvChjI,KAAK45H,WAAaqJ,EAClBjjI,KAAKigI,aAAe,QAI3B,GAA0B,IAAtBjgI,KAAKigI,eACVjgI,KAAK03H,aAAan3F,UAAUxkC,IAAI42H,MAC1B3yH,KAAKm2H,OAAOV,SAAWz1H,KAAKm2H,OAAOqM,iBACjCQ,EAAYhjI,KAAKu4H,aACjByK,EAAYhjI,KAAKu4H,WACjB0K,EAAYjjI,KAAK45H,YAEjBoJ,IAAchjI,KAAKmiI,iBAAe,CAE9B,IAAI5jI,EADR,GAAIyB,KAAKm2H,OAAOV,QAEZwN,GADI1kI,EAAQyB,KAAKkgI,yBAAyB+C,EAAWjjI,KAAKm2H,OAAOkK,SAAUrgI,KAAKm2H,OAAOmK,SACrE,GAClB0C,EAAYzkI,EAAM,GAEtByB,KAAK0gI,WAAa1gI,KAAKmiI,cAAgBa,EACvChjI,KAAK85H,WAAamJ,EAClBjjI,KAAKigI,aAAe,EAK/BjgI,KAAKmjI,mBAAmBF,KAG7BjjI,KAAKw4H,YAAYvqH,MAAM8kH,WAAa/yH,KAAKkzH,eACvB,YAAdlzH,KAAKiH,OACLjH,KAAKgzH,SAAS/kH,MAAM8kH,WAAa,QAErC/yH,KAAKyhI,kBAAkB/2H,IACnB1K,KAAKk3H,YAAel3H,KAAKm0H,QAAQrzF,WAChC9gC,KAAKw4H,YAAYj4F,UAAUzyB,SAAS6kH,IACrC3yH,KAAKi9H,iBAETj9H,KAAKy4H,cAAcz4H,KAAKw4H,aACN,YAAdx4H,KAAKiH,MACLjH,KAAKygI,gBAGb7N,EAAO11H,UAAU8mI,eAAiB,SAAUt6H,GACnC1J,KAAK4jI,kBACN5jI,KAAK44H,qBACL54H,KAAK64H,eAAenvH,IAExB1J,KAAKm9H,YAAY,UAAWzzH,GAC5B1J,KAAK04H,eACL,IAAa/wH,OAAOd,SAAU,sBAAuB7G,KAAKyjI,kBAC1D,IAAa97H,OAAOd,SAAU,mBAAoB7G,KAAKgkI,gBACvDhkI,KAAK4jI,iBAAkB,GAE3BhR,EAAO11H,UAAUimI,mBAAqB,SAAU/B,GAC5C,GAAkB,UAAdphI,KAAKiH,MAIL,GAAIm6H,KAHcphI,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,YAAoD,IAAtB1M,KAAKigI,aACxEjgI,KAAK22H,YAAY,GAAK32H,KAAK22H,YAAY,GAChB,IAAtB32H,KAAKigI,aAAqBjgI,KAAK22H,YAAY,GAAK32H,KAAK22H,YAAY,IAElE,OAAO,OAIX,GAAIyK,IAAiBphI,KAAK22H,YACtB,OAAO,EAGf,OAAO,GAEX/D,EAAO11H,UAAU69H,eAAiB,SAAU/zH,GACpChH,KAAKm0H,QAAQrzF,WAAa9gC,KAAKq5H,aAC/Br5H,KAAKk5H,eACDlyH,IACAhH,KAAKq5H,WAAWpoF,QAAQjqC,GACxBhH,KAAKo7H,cAAgBp0H,KAIjC4rH,EAAO11H,UAAUsjI,YAAc,SAAUx5H,GACjChH,KAAKm0H,QAAQrzF,WAAa9gC,KAAKq5H,aAAer5H,KAAKq3H,oBACnDr3H,KAAKk5H,eACLl5H,KAAKq5H,WAAWlpG,KAAKnpB,GACrBhH,KAAKo7H,cAAgBp0H,IAG7B4rH,EAAO11H,UAAUw7H,aAAe,WACxB14H,KAAKm0H,QAAQrzF,WAAa9gC,KAAKq5H,YAAsC,WAAxBr5H,KAAKm0H,QAAQwB,SAAwB31H,KAAKq3H,oBACvFr3H,KAAKk5H,eACLl5H,KAAKq5H,WAAW14C,QAChB3gF,KAAKo7H,mBAAgB38H,IAG7Bm0H,EAAO11H,UAAU+mI,QAAU,SAAUv6H,GACjC,OAAQA,EAAM2B,SACV,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACD3B,EAAMK,iBACN/J,KAAK+8H,YAAYrzH,KAI7BkpH,EAAO11H,UAAUgnI,cAAgB,SAAUt8G,GAClCA,GAWD,IAAajgB,OAAO3H,KAAKm8H,SAAU,wBAAyBn8H,KAAKw8H,gBACjE,IAAa70H,OAAO3H,KAAKo8H,UAAW,wBAAyBp8H,KAAKw8H,gBAClE,IAAa70H,OAAO3H,KAAKm8H,SAAU,uBAAwBn8H,KAAK88H,oBAChE,IAAan1H,OAAO3H,KAAKm8H,SAAU,sCAAuCn8H,KAAKk9H,iBAC/E,IAAav1H,OAAO3H,KAAKo8H,UAAW,uBAAwBp8H,KAAK88H,oBACjE,IAAan1H,OAAO3H,KAAKo8H,UAAW,sCAAuCp8H,KAAKk9H,iBAChF,IAAav1H,OAAO3H,KAAKm8H,SAAU,WAAYn8H,KAAKmkI,gBACpD,IAAax8H,OAAO3H,KAAKo8H,UAAW,WAAYp8H,KAAKmkI,kBAjBrD,IAAapoI,IAAIiE,KAAKm8H,SAAU,wBAAyBn8H,KAAKw8H,eAAgBx8H,MAC9E,IAAajE,IAAIiE,KAAKo8H,UAAW,wBAAyBp8H,KAAKw8H,eAAgBx8H,MAC/E,IAAajE,IAAIiE,KAAKm8H,SAAU,uBAAwBn8H,KAAK88H,mBAAoB98H,MACjF,IAAajE,IAAIiE,KAAKm8H,SAAU,sCAAuCn8H,KAAKk9H,gBAAiBl9H,MAC7F,IAAajE,IAAIiE,KAAKo8H,UAAW,uBAAwBp8H,KAAK88H,mBAAoB98H,MAClF,IAAajE,IAAIiE,KAAKo8H,UAAW,sCAAuCp8H,KAAKk9H,gBAAiBl9H,MAC9F,IAAajE,IAAIiE,KAAKm8H,SAAU,WAAYn8H,KAAKmkI,eAAgBnkI,MACjE,IAAajE,IAAIiE,KAAKo8H,UAAW,WAAYp8H,KAAKmkI,eAAgBnkI,QAa1E4yH,EAAO11H,UAAUknI,kBAAoB,SAAU16H,GAC3C,IAAIsI,EAAIwtB,EAGR,GAFA91B,EAAMK,iBACN/J,KAAK44H,qBACa,UAAd54H,KAAKiH,MAAoBjH,KAAKo6C,MAAQ1wC,EAAM1C,SAAWhH,KAAKgzH,SAAU,CACtE,IAAI0Q,OAAW,EACXC,OAAW,EACI,cAAfj6H,EAAMzC,MAC+By8H,GAArC1xH,EAAK,CAACtI,EAAM+sC,QAAS/sC,EAAMgtC,UAAwB,GAAIitF,EAAW3xH,EAAG,IAEjD,eAAftI,EAAMzC,OAC8Dy8H,GAAzElkG,EAAK,CAAC91B,EAAMuD,eAAe,GAAGwpC,QAAS/sC,EAAMuD,eAAe,GAAGypC,UAAwB,GAAIitF,EAAWnkG,EAAG,IAEpF,eAArBx/B,KAAK0M,aACL1M,KAAK8jI,gBAAkBJ,EAAW1jI,KAAKgzH,SAAS1mF,wBAAwBS,KACxE/sC,KAAK6jI,iBAAmB7jI,KAAKgzH,SAAS1mF,wBAAwBU,MAAQ02F,IAGtE1jI,KAAK8jI,gBAAkBH,EAAW3jI,KAAKgzH,SAAS1mF,wBAAwB1gC,IACxE5L,KAAK6jI,iBAAmB7jI,KAAKgzH,SAAS1mF,wBAAwBW,OAAS02F,GAE3E3jI,KAAKwjI,QAAUxjI,KAAK85H,WAAa95H,KAAK45H,WACtC55H,KAAKy4H,cAAcz4H,KAAKgzH,UACxB,IAAIkQ,EAAiBljI,KAAK2G,QAAQoL,cAAc,IAAM4gH,GAClDuQ,GACAA,EAAe3iG,UAAU54B,OAAOgrH,GAEpC,IAAa52H,IAAI8K,SAAU,sBAAuB7G,KAAKyjI,iBAAkBzjI,MACzE,IAAajE,IAAI8K,SAAU,mBAAoB7G,KAAKgkI,eAAgBhkI,QAG5E4yH,EAAO11H,UAAUmnI,aAAe,SAAU36H,GACtCA,EAAMK,iBACN/J,KAAK44H,qBACL54H,KAAK64H,eAAenvH,IAExBkpH,EAAO11H,UAAU0gD,WAAa,WAC1B59C,KAAKskI,SAAWtkI,KAAKsiI,WAAWv9H,KAAK/E,MACrCqG,OAAO+B,iBAAiB,SAAUpI,KAAKskI,UACnCtkI,KAAKy1H,UAAYz1H,KAAKi3H,WACtB,IAAal7H,IAAIiE,KAAK2G,QAAS,QAAS3G,KAAKqkI,aAAcrkI,MACzC,UAAdA,KAAKiH,MAAoBjH,KAAKo6C,MAC9B,IAAar+C,IAAIiE,KAAKgzH,SAAU,uBAAwBhzH,KAAKokI,kBAAmBpkI,MAEpF,IAAajE,IAAIiE,KAAKq1H,gBAAiB,UAAWr1H,KAAKikI,QAASjkI,MAChE,IAAajE,IAAIiE,KAAKq1H,gBAAiB,QAASr1H,KAAKukI,MAAOvkI,MAC5D,IAAajE,IAAIiE,KAAK2G,QAAS,WAAY3G,KAAKmkI,eAAgBnkI,MAChE,IAAajE,IAAIiE,KAAKq1H,gBAAiB,yCAA0Cr1H,KAAKwkI,MAAOxkI,MAC7FA,KAAKg4H,oBAAmB,GACN,UAAdh4H,KAAKiH,MACLjH,KAAKq4H,qBAAoB,GAEzBr4H,KAAKu2H,aACLv2H,KAAKkkI,eAAc,GAEvBlkI,KAAKy6H,0BAAyB,GAC1Bz6H,KAAKg0H,QACL,IAAaj4H,IAAIiE,KAAK+zH,YAAa,QAAS/zH,KAAKykI,iBAAkBzkI,QAI/E4yH,EAAO11H,UAAUmiD,aAAe,WAC5B,IAAa13C,OAAO3H,KAAK2G,QAAS,QAAS3G,KAAKqkI,cAC9B,UAAdrkI,KAAKiH,MAAoBjH,KAAKo6C,MAC9B,IAAazyC,OAAO3H,KAAKgzH,SAAU,uBAAwBhzH,KAAKokI,mBAEpE,IAAaz8H,OAAO3H,KAAKq1H,gBAAiB,UAAWr1H,KAAKikI,SAC1D,IAAat8H,OAAO3H,KAAKq1H,gBAAiB,QAASr1H,KAAKukI,OACxD,IAAa58H,OAAO3H,KAAK2G,QAAS,WAAY3G,KAAKmkI,gBACnD,IAAax8H,OAAO3H,KAAKq1H,gBAAiB,yCAA0Cr1H,KAAKwkI,OACzFxkI,KAAKg4H,oBAAmB,GACN,UAAdh4H,KAAKiH,MACLjH,KAAKq4H,qBAAoB,GAEzBr4H,KAAKu2H,aACLv2H,KAAKkkI,eAAc,GAEvBlkI,KAAKy6H,0BAAyB,GAC9B,IAAa9yH,OAAO3H,KAAK2G,QAAS,QAAS3G,KAAKykI,mBAEpD7R,EAAO11H,UAAUunI,iBAAmB,WAChCzkI,KAAKwjC,cAAc,CAAE,MAASxjC,KAAKi0H,iBAAkB,GACrDj0H,KAAKqP,YAETujH,EAAO11H,UAAUqnI,MAAQ,SAAU76H,GAC/B,GAAsB,IAAlBA,EAAM2B,SAAiB3B,EAAM1C,OAAOu5B,UAAUzyB,SAAS6kH,KACvD3yH,KAAK44H,sBACAlvH,EAAM1C,OAAOu5B,UAAUzyB,SAAS6kH,IAA6B,CAC1D3yH,KAAK2G,QAAQoL,cAAc,IAAM4gH,IACjC3yH,KAAK2G,QAAQoL,cAAc,IAAM4gH,GAA4BpyF,UAAU54B,OAAOgrH,GAElFjpH,EAAM1C,OAAOu5B,UAAUxkC,IAAI42H,GAC3B,IAAIr1E,EAAgB5zC,EAAM1C,OAAOs2C,cAC7BA,IAAkBt9C,KAAK2G,UACvB22C,EAAcvrC,cAAc,IAAM4gH,GAAwBpyF,UAAUxkC,IAAI42H,IACtD,UAAd3yH,KAAKiH,MAAkC,aAAdjH,KAAKiH,MAC9Bq2C,EAAcvrC,cAAc,IAAM4gH,GAAqBpyF,UAAUxkC,IAAI42H,KAG3D,UAAd3yH,KAAKiH,OACJyC,EAAM1C,OAAsB,gBAAEu5B,UAAUzyB,SAAS6kH,GAC9C3yH,KAAKigI,aAAe,EAAIjgI,KAAKigI,aAAe,GAEpDjgI,KAAKw4H,YAAYlwB,QACjBtoG,KAAKy4H,cAAcz4H,KAAKw4H,aAGhCx4H,KAAK04H,eACL14H,KAAKm9H,YAAY,UAAWzzH,IAEhCkpH,EAAO11H,UAAUsnI,MAAQ,SAAU96H,GAC1B,YAAkBA,KACA,cAAfA,EAAMzC,MAAuC,cAAfyC,EAAMzC,MAAuC,cAAfyC,EAAMzC,MACnD,gBAAfyC,EAAMzC,MAAyC,eAAfyC,EAAMzC,KACtCjH,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GAGnC3yH,KAAKq1H,gBAAgB90F,UAAU54B,OAAOgrH,KAIlDC,EAAO11H,UAAUinI,eAAiB,SAAUz6H,GACpCA,EAAMsB,gBAAkBhL,KAAK03H,cAAgBhuH,EAAMsB,gBAAkBhL,KAAKy3H,aAC1E/tH,EAAMsB,gBAAkBhL,KAAK2G,SAAW+C,EAAMsB,gBAAkBhL,KAAKm8H,UAAYzyH,EAAMsB,gBAAkBhL,KAAKo8H,YAC9Gp8H,KAAKm7H,uBACDn7H,KAAK2G,QAAQoL,cAAc,IAAM4gH,IACjC3yH,KAAK2G,QAAQoL,cAAc,IAAM4gH,GAA4BpyF,UAAU54B,OAAOgrH,GAE9E3yH,KAAK2G,QAAQoL,cAAc,IAAM4gH,MACjC3yH,KAAK2G,QAAQoL,cAAc,IAAM4gH,IAA2BpyF,UAAU54B,OAAOgrH,IAC1D,UAAd3yH,KAAKiH,MAAkC,aAAdjH,KAAKiH,OAC/BjH,KAAK2G,QAAQoL,cAAc,IAAM4gH,KACjC3yH,KAAK2G,QAAQoL,cAAc,IAAM4gH,IAA2BpyF,UAAU54B,OAAOgrH,KAGrF3yH,KAAK81H,YAAYxtB,QACjBtoG,KAAK81H,YAAY4O,OACjB1kI,KAAKwzH,kBAAmB,IAGhCZ,EAAO11H,UAAUmoD,cAAgB,SAAU1+C,GACnCA,EAAQ0C,YACR1C,EAAQ0C,WAAWq4B,YAAY/6B,IAGvCisH,EAAO11H,UAAUynI,iBAAmB,SAAU19H,EAAMlH,GAC5CC,KAAKq3H,mBAAqBr3H,KAAK+3H,iBAC/B/3H,KAAKq1H,gBAAgB90F,UAAU54B,OAAOgrH,GACtC3yH,KAAKqlD,cAAcrlD,KAAK+3H,gBACxB/3H,KAAK+3H,oBAAiBt5H,GAE1BuB,KAAKqlD,cAAcrlD,KAAKy3H,aACxBz3H,KAAKy3H,iBAAch5H,EACN,YAATwI,IACa,UAATA,IACAjH,KAAKqlD,cAAcrlD,KAAK03H,cACxB13H,KAAK03H,kBAAej5H,GAExBuB,KAAKqlD,cAAcrlD,KAAKgzH,UACxBhzH,KAAKgzH,cAAWv0H,GAEhBuB,KAAKm0H,QAAQrzF,YAAc,YAAkB9gC,KAAKq5H,cAClDr5H,KAAKq5H,WAAWzxG,UAChB5nB,KAAK01H,oBAAiBj3H,EACtBuB,KAAKw7H,6BAA0B/8H,GAE/BuB,KAAKm2H,OAAOV,UACC,aAATxuH,GAAgC,YAATA,EAClB,YAAkBjH,KAAKs3H,iBACxBt3H,KAAKqlD,cAAcrlD,KAAKs3H,eACxBt3H,KAAKs3H,mBAAgB74H,GAIpB,YAAkBuB,KAAKu3H,kBACxBv3H,KAAKqlD,cAAcrlD,KAAKu3H,gBACxBv3H,KAAKu3H,oBAAiB94H,IAIlCuB,KAAKigI,aAAe,EACpBjgI,KAAKg2H,yBACa,UAAdh2H,KAAKiH,MACLjH,KAAK02H,mBAET12H,KAAKk2H,iBACDl2H,KAAKm2H,OAAOV,SACZz1H,KAAKo2H,iBAETp2H,KAAKi2H,aACLj2H,KAAKq2H,iBACLr2H,KAAKg4H,oBAAmB,GACN,UAAdh4H,KAAKiH,MACLjH,KAAKq4H,qBAAoB,GAE7Br4H,KAAKqP,WACDrP,KAAKm0H,QAAQrzF,YACb9gC,KAAKg3H,gBACLh3H,KAAKy6H,0BAAyB,IAElCz6H,KAAKi5H,eACC,eAAej5H,KAAK0Y,mBAA8B,YAAT3Y,GAC3CC,KAAK4kI,gBAGbhS,EAAO11H,UAAU2nI,UAAY,WAQzB,GAPK7kI,KAAK0wC,WAA2B,UAAd1wC,KAAKiH,OACxBjH,KAAKzB,MAAQ,CAACyB,KAAK85H,WAAY95H,KAAK45H,aAExC55H,KAAK4kI,eACD5kI,KAAKm0H,QAAQrzF,WACb9gC,KAAKq5H,WAAWpoF,QAAQjxC,KAAKy3H,aAE7Bz3H,KAAKu2H,YAAa,CAClB,IAAI+F,EAAat8H,KAAK0wC,WAAkC,aAArB1wC,KAAK0M,YACxC,YAAW4vH,EAAat8H,KAAKo8H,UAAYp8H,KAAKm8H,SAAU,CAAE,aAAc,WAAYI,MAAO,aAC3F,YAAWD,EAAat8H,KAAKm8H,SAAWn8H,KAAKo8H,UAAW,CAAE,aAAc,WAAYG,MAAO,eAGnG3J,EAAO11H,UAAU4nI,kBAAoB,WACjC9kI,KAAK2kI,iBAAiB3kI,KAAKiH,KAAM,SAErC2rH,EAAO11H,UAAU0nI,aAAe,WAC5B5kI,KAAKy2H,eACLz2H,KAAKqP,WACDrP,KAAKm0H,QAAQrzF,YACR,eACD9gC,KAAK+6H,eAAe/6H,KAAKo7H,gBAGJ,SAAzBp7H,KAAKo0H,MAAM5kD,WACPxvE,KAAKy9H,KACLz9H,KAAKqlD,cAAcrlD,KAAKy9H,IACxBz9H,KAAKy9H,QAAKh/H,EACVuB,KAAK+2H,eAGb/2H,KAAK+kI,wBAETnS,EAAO11H,UAAU6nI,qBAAuB,WAChC/kI,KAAKm2H,OAAOV,SACR,YAAkBz1H,KAAKs3H,gBAAgC,UAAdt3H,KAAKiH,MAC9CjH,KAAKo2H,iBAEL,YAAkBp2H,KAAKs3H,gBAAkB,YAAkBt3H,KAAKu3H,iBAAiC,UAAdv3H,KAAKiH,MACxFjH,KAAKo2H,iBAETp2H,KAAK82H,cACL92H,KAAKqP,aAGA,YAAkBrP,KAAKs3H,gBACxB,YAAOt3H,KAAKs3H,eAEX,YAAkBt3H,KAAKu3H,iBACxB,YAAOv3H,KAAKu3H,kBAQxB3E,EAAO11H,UAAUy1C,eAAiB,WAE9B,OAAO3yC,KAAKqzC,aADI,CAAC,WASrBu/E,EAAO11H,UAAU0qB,QAAU,WACvBwhB,EAAOlsC,UAAU0qB,QAAQlqB,KAAKsC,MAC9BA,KAAKq/C,eACLh5C,OAAOmC,oBAAoB,SAAUxI,KAAKskI,UAC1C,YAAY,CAACtkI,KAAKq1H,iBAAkB,CAAC1C,IACrC3yH,KAAKy3H,YAAYjpH,gBAAgB,oBACf,UAAdxO,KAAKiH,MACLjH,KAAK03H,aAAalpH,gBAAgB,oBAEjC,eAAexO,KAAK0Y,mBACrB1Y,KAAKq1H,gBAAgBhsH,WAAW+3B,aAAaphC,KAAK2G,QAAS3G,KAAKq1H,iBAChE,YAAOr1H,KAAKq1H,kBAEZr1H,KAAKm0H,QAAQrzF,WACb9gC,KAAKq5H,WAAWzxG,UAEhB,eAAc5nB,KAAKq3H,oBAAsB,YAAkBr3H,KAAK+3H,iBAChE/3H,KAAK+3H,eAAepwH,SAEnB,eAAe3H,KAAK0Y,mBACrB1Y,KAAK2G,QAAQgzB,UAAY,KAQjCi5F,EAAO11H,UAAUinC,kBAAoB,SAAUsH,EAASC,GAEpD,IADA,IAAIzzB,EAAQjY,KACHgQ,EAAK,EAAGgC,EAAK/U,OAAOsS,KAAKk8B,GAAUz7B,EAAKgC,EAAGvX,OAAQuV,IAAM,CAC9D,IAAI4C,EAAOZ,EAAGhC,GACd,OAAQ4C,GACJ,IAAK,WACD5S,KAAKm1H,YAAYzpF,EAAQ6pF,UACzB,MACJ,IAAK,QACD,GAAI9pF,GAAWC,EAAS,CACpB,IAAIntC,EAAQ,YAAkBktC,EAAQltC,OACnB,UAAdyB,KAAKiH,KAAmB,CAACjH,KAAKygB,IAAKzgB,KAAK0gB,KAAO1gB,KAAKygB,IAAOgrB,EAAQltC,MACxEyB,KAAKwjC,cAAc,CAAE,MAASjlC,IAAS,GAClC,YAAkBmtC,EAAQntC,QAAUmtC,EAAQntC,MAAMjC,aAAeiC,EAAMjC,aACxE0D,KAAKqP,WACA,eAAerP,KAAK0Y,kBACrB1Y,KAAK+6H,eAAe/6H,KAAKo7H,eAEX,UAAdp7H,KAAKiH,OACD,YAAkBwkC,EAAQltC,QAAUmtC,EAAQntC,MAAM,KAAOA,EAAM,GAC/DyB,KAAKigI,aAAe,EAGpBjgI,KAAKigI,aAAe,IAKpC,MACJ,IAAK,MACL,IAAK,OACL,IAAK,MACG,eAAcjgI,KAAK0Y,mBACnB1Y,KAAK0Y,kBAAmB,GAE5B1Y,KAAKglI,iBACD,gBAAehlI,KAAK0Y,mBACpB1Y,KAAK0Y,kBAAmB,GAE5B,MACJ,IAAK,UACG,eAAc1Y,KAAK0Y,mBACnB1Y,KAAK0Y,kBAAmB,GAEvB,YAAkB+yB,EAAQ0oF,UAAa,YAAkBzoF,EAAQyoF,UAClEn0H,KAAKilI,WAAWryH,GAEhB,gBAAe5S,KAAK0Y,mBACpB1Y,KAAK0Y,kBAAmB,GAE5B,MACJ,IAAK,OACG,eAAc1Y,KAAK0Y,mBACnB1Y,KAAK0Y,kBAAmB,GAEvB,YAAkBgzB,KAAYzuC,OAAOsS,KAAKm8B,GAASjxC,QAChD,YAAkBixC,EAAQzkC,QAC9BjH,KAAK2kI,iBAAiBj5F,EAAQzkC,KAAM2L,GACpC5S,KAAKk1H,aAEL,gBAAel1H,KAAK0Y,mBACpB1Y,KAAK0Y,kBAAmB,GAE5B,MACJ,IAAK,YACG,eAAc1Y,KAAK0Y,mBACf1Y,KAAKq3H,mBACLr3H,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GAEvC3yH,KAAK0Y,kBAAmB,GAExBgzB,EAAQgF,YAAcjF,EAAQiF,WAAkC,aAArB1wC,KAAK0M,cAChD1M,KAAKkiI,IAAMx2F,EAAQgF,UACnB1wC,KAAK6kI,aAEL,gBAAe7kI,KAAK0Y,mBACpB1Y,KAAK0Y,kBAAmB,GAE5B,MACJ,IAAK,SACD1Y,KAAK+kI,uBACL,MACJ,IAAK,cACG,eAAc/kI,KAAK0Y,mBACnB1Y,KAAK0Y,kBAAmB,GAE5B1Y,KAAK8kI,oBACD,gBAAe9kI,KAAK0Y,mBACpB1Y,KAAK0Y,kBAAmB,GAE5B,MACJ,IAAK,QACI,YAAkB1Y,KAAKq1H,gBAAgBtjH,cAAc,IAAM4gH,MACvD,eAAe3yH,KAAK0Y,kBACrB,YAAO1Y,KAAKy9H,IAEhBjgI,MAAMN,UAAU+F,QAAQvF,KAAKsC,KAAKq1H,gBAAgB90F,WAAW,SAAU7G,GAC/DA,EAAU71B,MAAM,aAChBoU,EAAMo9G,gBAAgB90F,UAAU54B,OAAO+xB,OAItB,SAAzB15B,KAAKo0H,MAAM5kD,YACXxvE,KAAK+2H,cACL/2H,KAAKk1H,aAET,MACJ,IAAK,SACGl1H,KAAKu2H,aACLv2H,KAAKq8H,cAET,MACJ,IAAK,cACG5wF,EAAQ8qF,aACRv2H,KAAKw2H,aACLx2H,KAAKsiI,aACDtiI,KAAKy1H,UAAYz1H,KAAKi3H,UACtBj3H,KAAKkkI,eAAc,IAIlB,eAAelkI,KAAK0Y,kBACjB1Y,KAAKm8H,UAAYn8H,KAAKo8H,YACtBp8H,KAAKq1H,gBAAgB3zF,YAAY1hC,KAAKm8H,UACtCn8H,KAAKq1H,gBAAgB3zF,YAAY1hC,KAAKo8H,WACtCp8H,KAAKq1H,gBAAgB90F,UAAU54B,OAAOgrH,GACtC3yH,KAAKm8H,cAAW19H,EAChBuB,KAAKo8H,eAAY39H,EACjBuB,KAAKsiI,cAIb,eAActiI,KAAK0Y,kBACf1Y,KAAKq3H,mBACLr3H,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GAG3C,MACJ,IAAK,UACD3yH,KAAKw1H,aACD,eAAcx1H,KAAK0Y,kBACf1Y,KAAKq3H,mBACLr3H,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GAG3C,MACJ,IAAK,WACD3yH,KAAKklI,cACD,eAAcllI,KAAK0Y,kBACf1Y,KAAKq3H,mBACLr3H,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,GAG3C,MACJ,IAAK,eACG,eAAc3yH,KAAK0Y,mBACnB1Y,KAAK0Y,kBAAmB,GAE5B1Y,KAAKqP,WACLrP,KAAKsiI,aACD,gBAAetiI,KAAK0Y,mBACpB1Y,KAAK0Y,kBAAmB,GAE5B,MACJ,IAAK,aACG,eAAc1Y,KAAK0Y,mBACnB1Y,KAAK0Y,kBAAmB,GAE5B1Y,KAAKsiI,aACD,gBAAetiI,KAAK0Y,mBACpB1Y,KAAK0Y,kBAAmB,GAE5B,MACJ,IAAK,QACD1Y,KAAKo1H,gBAAgB3pF,EAAQ+N,OAC7Bx5C,KAAKglI,iBACDhlI,KAAKm2H,QACLn2H,KAAK+kI,0BAMzBnS,EAAO11H,UAAUgoI,YAAc,WACvBllI,KAAKi3H,UACLj3H,KAAKq/C,eACLr/C,KAAKq1H,gBAAgB90F,UAAUxkC,IAAI42H,MAGnC3yH,KAAK49C,aACL59C,KAAKq1H,gBAAgB90F,UAAU54B,OAAOgrH,MAG9CC,EAAO11H,UAAU8nI,eAAiB,WAC9B,IAAI/sH,EAAQjY,KACZA,KAAKqP,WACA,eACDrP,KAAK+6H,eAAe/6H,KAAKo7H,eAExB,YAAkBp7H,KAAKq1H,gBAAgBtjH,cAAc,IAAM4gH,KACxD3yH,KAAKy9H,KACL,YAAOz9H,KAAKy9H,IACZjgI,MAAMN,UAAU+F,QAAQvF,KAAKsC,KAAKq1H,gBAAgB90F,WAAW,SAAU7G,GAC/DA,EAAU71B,MAAM,aAChBoU,EAAMo9G,gBAAgB90F,UAAU54B,OAAO+xB,OAK1B,SAAzB15B,KAAKo0H,MAAM5kD,YACXxvE,KAAK+2H,cACL/2H,KAAKk1H,cAGbtC,EAAO11H,UAAUg4H,UAAY,WACzBl1H,KAAKk1D,OAAS,EACT,YAAkBl1D,KAAKo0H,QAAmC,SAAzBp0H,KAAKo0H,MAAM5kD,YAC7CxvE,KAAKy9H,GAAGxvH,MAAMinD,OAAUl1D,KAAKk1D,QAAU,EAAK,GAC5Cl1D,KAAK2G,QAAQsH,MAAMinD,OAAUl1D,KAAKk1D,OAAS,EAAK,IAE/Cl1D,KAAKk3H,YAAe,YAAkBl3H,KAAKo0H,QAAmC,SAAzBp0H,KAAKo0H,MAAM5kD,YACjExvE,KAAK2G,QAAQsH,MAAMinD,OAAUl1D,KAAKk1D,OAAS,EAAK,IAEpDl1D,KAAKy3H,YAAYxpH,MAAMinD,OAAUl1D,KAAKk1D,OAAS,EAAK,GAClC,UAAdl1D,KAAKiH,OACLjH,KAAK03H,aAAazpH,MAAMinD,OAAUl1D,KAAKk1D,OAAS,EAAK,KAG7D09D,EAAO11H,UAAU+nI,WAAa,SAAUllI,GACpCC,KAAK2kI,iBAAiB3kI,KAAKiH,KAAMlH,IAErC6yH,EAAO11H,UAAU+7H,YAAc,WAI3B,IAHA,IAAIkM,EACAC,EACAn0H,EAAQjR,KAAK61H,YAAYqJ,iBACtBjuH,GACHjR,KAAK61H,YAAYn0F,YAAYzwB,GAC7BA,EAAQjR,KAAK61H,YAAYqJ,iBAE7B,IAAK,IAAIrjI,EAAI,EAAGA,EAAImE,KAAKqlI,WAAW5qI,OAAQoB,IACxC,IAAK,YAAkBmE,KAAKqlI,WAAWxpI,GAAG2T,SAAW,YAAkBxP,KAAKqlI,WAAWxpI,GAAGiH,MAClF9C,KAAKqlI,WAAWxpI,GAAGiH,IAAM9C,KAAKqlI,WAAWxpI,GAAG2T,MAAO,CAC/CxP,KAAKqlI,WAAWxpI,GAAG2T,MAAQxP,KAAKygB,MAChCzgB,KAAKqlI,WAAWxpI,GAAG2T,MAAQxP,KAAKygB,KAEhCzgB,KAAKqlI,WAAWxpI,GAAGiH,IAAM9C,KAAK0gB,MAC9B1gB,KAAKqlI,WAAWxpI,GAAGiH,IAAM9C,KAAK0gB,KAElC,IAAI4kH,EAAmBtlI,KAAK4gI,oBAAoB5gI,KAAKqlI,WAAWxpI,GAAG2T,OAC/D+1H,EAAcvlI,KAAK4gI,oBAAoB5gI,KAAKqlI,WAAWxpI,GAAGiH,KAC1D0iI,EAAiBxlI,KAAKw+B,cAAc,OACxCgnG,EAAev3H,MAAMw3H,gBAAkBzlI,KAAKqlI,WAAWxpI,GAAG06D,MAC1DivE,EAAev3H,MAAMy3H,OAAS,aAAe1lI,KAAKqlI,WAAWxpI,GAAG06D,MACvC,eAArBv2D,KAAK0M,aACL04H,EAAiBzS,EAGTwS,EAFJnlI,KAAK0wC,UACD,YAAkB1wC,KAAK43H,cACP53H,KAAK4gI,oBAAoB5gI,KAAK0gB,KAAO1gB,KAAK4gI,oBAAoB5gI,KAAKqlI,WAAWxpI,GAAGiH,KAGjF9C,KAAK4gI,oBAAoB5gI,KAAK43H,aAAan9H,OAASuF,KAAKqlI,WAAWxpI,GAAGiH,IAAM,GAIjF9C,KAAK4gI,oBAAoB5gI,KAAKqlI,WAAWxpI,GAAG2T,OAEhEg2H,EAAev3H,MAAMurC,MAAQ+rF,EAAcD,EAAmB,KAC9DE,EAAev3H,MAAM8+B,KAAOo4F,EAAgB,OAG5CC,EAAiBzS,EACjBwS,EAAgBnlI,KAAK4gI,oBAAoB5gI,KAAKqlI,WAAWxpI,GAAG2T,OAC5Dg2H,EAAev3H,MAAMwrC,OAAS8rF,EAAcD,EAAmB,KAC/DE,EAAev3H,MAAMg/B,OAASk4F,EAAgB,MAElDK,EAAejlG,UAAUxkC,IAAIqpI,GAC7BplI,KAAK61H,YAAYn7F,YAAY8qG,KAS7C5S,EAAO11H,UAAUioC,cAAgB,WAC7B,MAAO,UAEX2D,EAAW,CACP,YAAS,OACV8pF,EAAO11H,UAAW,aAAS,GAC9B4rC,EAAW,CACP,YAAS,OACV8pF,EAAO11H,UAAW,oBAAgB,GACrC4rC,EAAW,CACP,YAAS,IACV8pF,EAAO11H,UAAW,YAAQ,GAC7B4rC,EAAW,CACP,YAAS,OACV8pF,EAAO11H,UAAW,aAAS,GAC9B4rC,EAAW,CACP,YAAS,IACV8pF,EAAO11H,UAAW,WAAO,GAC5B4rC,EAAW,CACP,YAAS,MACV8pF,EAAO11H,UAAW,WAAO,GAC5B4rC,EAAW,CACP,aAAS,IACV8pF,EAAO11H,UAAW,gBAAY,GACjC4rC,EAAW,CACP,YAAS,YACV8pF,EAAO11H,UAAW,YAAQ,GAC7B4rC,EAAW,CACP,YAAW,CAAC,IAAK0pF,IAClBI,EAAO11H,UAAW,kBAAc,GACnC4rC,EAAW,CACP,YAAQ,GAAIypF,IACbK,EAAO11H,UAAW,aAAS,GAC9B4rC,EAAW,CACP,YAAQ,GAAI2pF,IACbG,EAAO11H,UAAW,cAAU,GAC/B4rC,EAAW,CACP,aAAS,IACV8pF,EAAO11H,UAAW,eAAW,GAChC4rC,EAAW,CACP,YAAQ,GAAI4pF,IACbE,EAAO11H,UAAW,eAAW,GAChC4rC,EAAW,CACP,aAAS,IACV8pF,EAAO11H,UAAW,mBAAe,GACpC4rC,EAAW,CACP,aAAS,IACV8pF,EAAO11H,UAAW,uBAAmB,GACxC4rC,EAAW,CACP,YAAS,eACV8pF,EAAO11H,UAAW,mBAAe,GACpC4rC,EAAW,CACP,YAAS,KACV8pF,EAAO11H,UAAW,gBAAY,GACjC4rC,EAAW,CACP,aAAS,IACV8pF,EAAO11H,UAAW,2BAAuB,GAC5C4rC,EAAW,CACP,eACD8pF,EAAO11H,UAAW,eAAW,GAChC4rC,EAAW,CACP,eACD8pF,EAAO11H,UAAW,cAAU,GAC/B4rC,EAAW,CACP,eACD8pF,EAAO11H,UAAW,eAAW,GAChC4rC,EAAW,CACP,eACD8pF,EAAO11H,UAAW,sBAAkB,GACvC4rC,EAAW,CACP,eACD8pF,EAAO11H,UAAW,qBAAiB,GACtC4rC,EAAW,CACP,eACD8pF,EAAO11H,UAAW,qBAAiB,GACtC01H,EAAS9pF,EAAW,CAChB,KACD8pF,GAz1FoB,CA21FzB,M,6BCziGF,mHAwBO,SAAS+S,EAAYh/H,GAGxB,IAFA,IAAIuC,EACA08H,EAAYj/H,EAAQizB,WACf/9B,EAAI,EAAGA,EAAI+pI,EAAUnrI,OAAQoB,IAElC,GAAsB,KADtBqN,EAAO08H,EAAU/pI,IACR+E,SACL,OAAOsI,EAGf,OAAO,KAoCJ,SAAS28H,EAAernG,EAAesnG,EAAc9rH,QACnC,IAAjB8rH,IAA2BA,GAAe,QAC9B,IAAZ9rH,IAAsBA,EAAU,IACpC,IAAI+rH,EAAUvnG,EAAc,MAAO,CAAE9E,UAAW,6BAOhD,GANI1f,EAAQu7G,UACR,YAAS,CAACwQ,GAAU/rH,EAAQu7G,SAAS/4H,MAAM,MAE3Cwd,EAAQ02B,WACRq1F,EAAQxlG,UAAUxkC,IAAI,SAEtB+pI,EAAc,CACd,IAAIE,EAAaxnG,EAAc,OAAQ,CAAE9E,UAAW,uBACpD,aAAassG,EAAY,CAAEh6F,gBAAgB,EAAMjB,SAAU,MAC3Dg7F,EAAQrrG,YAAYsrG,GAExB,IAAIC,EAAYznG,EAAc,OAAQ,CAAE9E,UAAW,oBAKnD,GAJI1f,EAAQksH,SACRD,EAAU1lG,UAAUxkC,IAAI,WAE5BgqI,EAAQrrG,YAAYurG,GAChBjsH,EAAQq8D,MAAO,CACf,IAAI8vD,EAAY3nG,EAAc,OAAQ,CAAE9E,UAAW,UAAWC,UAAW3f,EAAQq8D,QACjF0vD,EAAQrrG,YAAYyrG,GAExB,OAAOJ,EAEJ,SAASK,EAAmBvrI,EAAGmrI,GAClC,GAAIA,EAAY,CACZ,IAAIlwG,EAAUjvB,SAASC,YAAY,eACnCgvB,EAAQtrB,UAAU3P,EAAEoM,MAAM,GAAO,GACjC++H,EAAW37H,cAAcyrB,M,6CC5FjC,IAAIuwG,EAA4B,WAC5B,SAASA,IAMLrmI,KAAKsmI,UAAW,EAgBpB,OAXAD,EAAWnpI,UAAUqpI,QAAU,WACtBvmI,KAAKsmI,WACNtmI,KAAKsmI,UAAW,EAChBtmI,KAAKsjH,oBAOb+iB,EAAWnpI,UAAUomH,gBAAkB,aAChC+iB,EAvBoB,GAyBhB,O,6BChCf,qJAWO,SAASG,EAAQ35H,GACpB,YAAiBpO,IAAboO,EACO,OAGP,EAOD,SAAS45H,EAAK55H,GACjB,YAAiBpO,IAAboO,EACOA,OAGP,EAOD,SAAS65H,EAAc7/E,GAC1B,IAAI8/E,EAAS,EAAI/wH,KAAKwhD,GAAMvQ,EAC5B,OAAO,SAMGh6C,EAAU+5H,GAChB,OAAIA,EACO/5H,OAEMpO,IAAboO,EACAA,EAAW+I,KAAKC,MAAMhJ,EAAW85H,EAAQ,IAAOA,OAIhD,GAQL,SAASE,EAAiBC,GAC7B,IAAI73E,EAAY63E,GAAiB,YAAU,GAC3C,OAAO,SAMGj6H,EAAU+5H,GAChB,OAAIA,EACO/5H,OAEMpO,IAAboO,EACI+I,KAAKmG,IAAIlP,IAAaoiD,EACf,EAGApiD,OAIX,K,6BCvEL,SAAS++E,EAAWn9B,EAAiBpxD,EAAQyF,EAAK4rD,GAIrD,IAHA,IAAIq4E,EAAY,EACZ/1E,EAAKvC,EAAgB3rD,EAAM4rD,GAC3B0C,EAAK3C,EAAgB3rD,EAAM4rD,EAAS,GACjCrxD,EAASyF,EAAKzF,GAAUqxD,EAAQ,CACnC,IAAIuC,EAAKxC,EAAgBpxD,GACrBg0D,EAAK5C,EAAgBpxD,EAAS,GAClC0pI,GAAa31E,EAAKH,EAAKD,EAAKK,EAC5BL,EAAKC,EACLG,EAAKC,EAET,OAAO01E,EAAY,EAShB,SAASr6C,EAAYj+B,EAAiBpxD,EAAQoqE,EAAM/Y,GAEvD,IADA,IAAI7Q,EAAO,EACFhiD,EAAI,EAAG8a,EAAK8wD,EAAKhtE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC3C,IAAIiH,EAAM2kE,EAAK5rE,GACfgiD,GAAQ+tC,EAAWn9B,EAAiBpxD,EAAQyF,EAAK4rD,GACjDrxD,EAASyF,EAEb,OAAO+6C,EASJ,SAASmpF,EAAav4E,EAAiBpxD,EAAQ8qE,EAAOzZ,GAEzD,IADA,IAAI7Q,EAAO,EACFhiD,EAAI,EAAG8a,EAAKwxD,EAAM1tE,OAAQoB,EAAI8a,IAAM9a,EAAG,CAC5C,IAAI4rE,EAAOU,EAAMtsE,GACjBgiD,GAAQ6uC,EAAYj+B,EAAiBpxD,EAAQoqE,EAAM/Y,GACnDrxD,EAASoqE,EAAKA,EAAKhtE,OAAS,GAEhC,OAAOojD,EArDX,uG,6BCAA,IACQpV,EADR,wEAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KAiBnFo+F,EAAe,cAafC,EAA0B,SAAU99F,GAEpC,SAAS89F,IACL,IAAIjvH,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAqCjC,OAhCAiY,EAAMwmE,QAAU,wBAKhBxmE,EAAMkvH,iBAAmB,EAKzBlvH,EAAMsnG,yCAA2C,EAKjDtnG,EAAMqnG,2BAA6B,EASnCrnG,EAAMmvH,4BAA8B,aAAW,SAAU3iI,EAAUk/E,EAAkBC,GACjF,IAAKA,EACD,OAAO5jF,KAAKq/G,sBAAsB17B,GAEtC,IAAIjjF,EAAQV,KAAKU,QAEjB,OADAA,EAAM6xD,eAAeqxB,GACdljF,EAAM2+G,sBAAsB17B,MAEhC1rE,EA8MX,OArPAywB,EAAUw+F,EAAU99F,GAgDpB89F,EAAShqI,UAAU6jF,oBAAsB,SAAU4C,EAAkBC,GACjE,OAAO5jF,KAAKonI,4BAA4BpnI,KAAK+pF,cAAepG,EAAkBC,IAOlFsjD,EAAShqI,UAAUwD,MAAQ,WACvB,OAAO,sBAUXwmI,EAAShqI,UAAU8uF,eAAiB,SAAUzrF,EAAGkjB,EAAGwoE,EAAcC,GAC9D,OAAO,sBAOXg7C,EAAShqI,UAAUiwD,WAAa,SAAU5sD,EAAGkjB,GACzC,IAAI26B,EAAQp+C,KAAKqnI,gBAAgB,CAAC9mI,EAAGkjB,IACrC,OAAO26B,EAAM,KAAO79C,GAAK69C,EAAM,KAAO36B,GAU1CyjH,EAAShqI,UAAUmqI,gBAAkB,SAAU1mF,EAAO2mF,GAClD,IAAIr7C,EAAeq7C,GAAsC,CAAC5iI,IAAKA,KAE/D,OADA1E,KAAKgsF,eAAerrC,EAAM,GAAIA,EAAM,GAAIsrC,EAAcpmE,KAC/ComE,GASXi7C,EAAShqI,UAAU21F,qBAAuB,SAAU3lC,GAChD,OAAOltD,KAAKmtD,WAAWD,EAAW,GAAIA,EAAW,KAQrDg6E,EAAShqI,UAAU8wF,cAAgB,SAAUvhC,GACzC,OAAO,sBAQXy6E,EAAShqI,UAAU81D,UAAY,SAAUnG,GACrC,GAAI7sD,KAAKmnI,iBAAmBnnI,KAAK+pF,cAAe,CAC5C,IAAIt9B,EAASzsD,KAAKguF,cAAchuF,KAAKy+E,UACjC3kE,MAAM2yC,EAAO,KAAO3yC,MAAM2yC,EAAO,MACjC,8BAAoBA,GAExBzsD,KAAKmnI,gBAAkBnnI,KAAK+pF,cAEhC,OAAO,yBAAe/pF,KAAKy+E,QAAS5xB,IAUxCq6E,EAAShqI,UAAU87E,OAAS,SAAUvE,EAAOvI,GACzC,sBAYJg7D,EAAShqI,UAAU4P,MAAQ,SAAUyqG,EAAIsI,EAAQxD,GAC7C,sBAWJ6qB,EAAShqI,UAAUqqI,SAAW,SAAUt4E,GACpC,OAAOjvD,KAAKq/G,sBAAsBpwD,EAAYA,IAUlDi4E,EAAShqI,UAAUmiH,sBAAwB,SAAU17B,GACjD,OAAO,sBAOXujD,EAAShqI,UAAU4qE,QAAU,WACzB,OAAO,sBAWXo/D,EAAShqI,UAAUq1D,eAAiB,SAAUC,GAC1C,sBAQJ00E,EAAShqI,UAAU6vF,iBAAmB,SAAUtgC,GAC5C,OAAO,sBAUXy6E,EAAShqI,UAAU67E,UAAY,SAAUhnB,EAAQC,GAC7C,sBAiBJk1E,EAAShqI,UAAUswC,UAAY,SAAU1vC,EAAQ+R,GAE7C,IAAImrD,EAAa,cAAcl9D,GAC3B00D,EAAcwI,EAAWrB,YAAc,IAAMm9C,YAC3C,SAAU0wB,EAAeC,EAAgB/4E,GACvC,IAAIg5E,EAAc1sE,EAAWhI,YACzB20E,EAAkB3sE,EAAW4qD,iBAC7B94G,EAAQ,oBAAU66H,GAAmB,oBAAUD,GAGnD,OAFA,YAAiBT,EAAcU,EAAgB,GAAIA,EAAgB,GAAI76H,GAAQA,EAAO,EAAG,EAAG,GAC5F,YAAY06H,EAAe,EAAGA,EAAc/sI,OAAQi0D,EAAQu4E,EAAcQ,GACnE,uBAAazsE,EAAYnrD,EAAzB,CAAsC23H,EAAeC,EAAgB/4E,IAE9E,uBAAasM,EAAYnrD,GAE/B,OADA7P,KAAKuyD,eAAeC,GACbxyD,MAEJknI,EAtPkB,CAuP3B,KACa,O,6BChSf,iHAQI3/C,EAAa,GAIV,SAAS6K,IACZ7K,EAAa,GAUV,SAASxrF,EAAI+B,EAAQ+R,EAAa2iD,GACrC,IAAImJ,EAAa79D,EAAOq7D,UACpByC,EAAkB/rD,EAAYspD,UAC5BwC,KAAc4rB,IAChBA,EAAW5rB,GAAc,IAE7B4rB,EAAW5rB,GAAYC,GAAmBpJ,EA2BvC,SAAS7+B,EAAIgoC,EAAYC,GAC5B,IAAIpuB,EAIJ,OAHImuB,KAAc4rB,GAAc3rB,KAAmB2rB,EAAW5rB,KAC1DnuB,EAAY+5C,EAAW5rB,GAAYC,IAEhCpuB,I,6BC7DX,oEAOO,IAAIo6F,EAAmB,GAKnBC,EAAoB,K,gBCZ/B,IAAIC,EAAU,EAAQ,KAClBC,EAAe,EAAQ,KACvBC,EAAS,EAAQ,KAoCrBzkI,EAAO65D,QANP,SAAeg3B,EAAQ6zC,GACrB,OAAiB,MAAV7zC,EACHA,EACA0zC,EAAQ1zC,EAAQ2zC,EAAaE,GAAWD,K,gBCnC9C,IAGI53B,EAHO,EAAQ,KAGDA,OAElB7sG,EAAO65D,QAAUgzC,G,gBCLjB,IAAIrxG,EAAa,EAAQ,KACrBmpI,EAAW,EAAQ,KA+BvB3kI,EAAO65D,QAJP,SAAqB7+D,GACnB,OAAgB,MAATA,GAAiB2pI,EAAS3pI,EAAM9D,UAAYsE,EAAWR,K,gBC7BhE,IAAI4pI,EAAU,EAAQ,KAgCtB5kI,EAAO65D,QALP,SAAag3B,EAAQg0C,EAAM7iG,GACzB,IAAInjC,EAAmB,MAAVgyF,OAAiB31F,EAAY0pI,EAAQ/zC,EAAQg0C,GAC1D,YAAkB3pI,IAAX2D,EAAuBmjC,EAAenjC,I,gBC7B/C,IAAIimI,EAAe,EAAQ,KACvBp5H,EAAW,EAAQ,KAevB1L,EAAO65D,QALP,SAAmBg3B,EAAQ9kF,GACzB,IAAI/Q,EAAQ0Q,EAASmlF,EAAQ9kF,GAC7B,OAAO+4H,EAAa9pI,GAASA,OAAQE,I,iBCbvC,UAAO,CAAC,YAwCP,KAxCyB,EAAF,SAAW1E,GAClC,OAAO,SAASiE,EAAMwB,EAAM2lG,EAAM1lG,GACjC0lG,EAAOA,GAAQx8F,MAEf,IAAI2/H,EAAY,SAASvtI,GACxB,GAAGoqG,IAASx8F,MAAM,CACdA,MAAMs3D,mBACRt3D,MAAMs3D,kBAAkBjgE,KAAMsoI,GAK/B,IACC11H,EADG4gD,EAAM7qD,MAAMjL,KAAKsC,KAAMjF,GAI3B,IAAI6X,KAAQ4gD,EACRA,EAAI3iD,eAAe+B,KACrB5S,KAAK4S,GAAQ4gD,EAAI5gD,IAKnB5S,KAAKjF,QAAUA,EAEfiF,KAAKoR,MAAQoiD,EAAIpiD,WAEjB+zF,EAAKvpG,MAAMoE,KAAMtE,WAEf8D,GACFA,EAAK5D,MAAMoE,KAAMtE,YAQnB,OAJA4sI,EAAUprI,UAAYnD,EAAKmG,SAASilG,EAAKjoG,UAAWuC,GACpD6oI,EAAUprI,UAAUc,KAAOA,EAC3BsqI,EAAUprI,UAAUgE,YAAconI,EAE3BA,IAER,+B,gBCxCD,UAAO,CAAC,aAcP,KAdoB,EAAF,SAAW1rI,GAW7B,OAAOA,EAAO,gBAAgB,SAAS7B,EAASu+F,GAC/Ct5F,KAAKs5F,SAAWA,MAEjB,+B,6BCdD,sCACQ7wD,EADR,sDAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KA6BnF0/F,EAA8B,SAAUn/F,GAUxC,SAASm/F,EAAa97E,EAAQ4D,EAAYyV,EAAYnlE,EAAKy0F,EAAaozC,GACpE,IAAIvwH,EAAQmxB,EAAO1rC,KAAKsC,KAAMysD,EAAQ4D,EAAYyV,EAAY,IAAWme,OAASjkF,KA6BlF,OAxBAiY,EAAM09E,KAAOh1F,EAKbsX,EAAMy8C,OAAS,IAAI2gC,MACC,OAAhBD,IACAn9E,EAAMy8C,OAAO0gC,YAAcA,GAM/Bn9E,EAAMu9E,UAAY,KAKlBv9E,EAAMquD,MAAQ,IAAW2d,KAKzBhsE,EAAMwwH,mBAAqBD,EACpBvwH,EA+DX,OAtGAywB,EAAU6/F,EAAcn/F,GA6CxBm/F,EAAarrI,UAAUm4D,SAAW,WAC9B,OAAOr1D,KAAK00D,QAOhB6zE,EAAarrI,UAAU64F,kBAAoB,WACvC/1F,KAAKsmE,MAAQ,IAAWyd,MACxB/jF,KAAKg2F,iBACLh2F,KAAKy+D,WAOT8pE,EAAarrI,UAAU+4F,iBAAmB,gBACdx3F,IAApBuB,KAAKqwD,aACLrwD,KAAKqwD,WAAa,oBAAUrwD,KAAKysD,QAAUzsD,KAAK00D,OAAOjb,QAE3Dz5C,KAAKsmE,MAAQ,IAAWwc,OACxB9iF,KAAKg2F,iBACLh2F,KAAKy+D,WAQT8pE,EAAarrI,UAAUgjD,KAAO,WACtBlgD,KAAKsmE,OAAS,IAAW2d,MAAQjkF,KAAKsmE,OAAS,IAAWyd,QAC1D/jF,KAAKsmE,MAAQ,IAAW8vB,QACxBp2F,KAAKy+D,UACLz+D,KAAKyoI,mBAAmBzoI,KAAMA,KAAK21F,MACnC31F,KAAKw1F,UAAYkzC,EAAY1oI,KAAK00D,OAAQ10D,KAAKi2F,iBAAiBlxF,KAAK/E,MAAOA,KAAK+1F,kBAAkBhxF,KAAK/E,SAMhHuoI,EAAarrI,UAAU24D,SAAW,SAAUlB,GACxC30D,KAAK00D,OAASC,GAOlB4zE,EAAarrI,UAAU84F,eAAiB,WAChCh2F,KAAKw1F,YACLx1F,KAAKw1F,YACLx1F,KAAKw1F,UAAY,OAGlB+yC,EAvGsB,CAwG/B,KAOK,SAASG,EAAY/zE,EAAOg0E,EAAa5hH,GAC5C,IAAIshE,EAAsC,EAC1C,GAAIA,EAAI1nF,KAAO,IAAc,CACzB,IAAI0mB,EAAUghE,EAAIu5B,SACdgnB,GAAc,EAuBlB,OAnBAvhH,EACKC,MAAK,WACFshH,GACAD,OAGHhhH,OAAM,SAAUiJ,GACbg4G,IAGmB,kBAAfh4G,EAAM5yB,MACY,wBAAlB4yB,EAAM71B,QACN4tI,IAGA5hH,QAlBG,WACX6hH,GAAc,GAuBtB,IAAIC,EAAe,CACf,YAAWxgD,EAAK,IAAUgQ,KAAMswC,GAChC,YAAWtgD,EAAK,IAAUtE,MAAOh9D,IAErC,OAAO,WACH8hH,EAAa5lI,QAAQ,MAGd,O,6BCjLR,SAAS2K,EAAI6+C,EAAQ4D,GACxB,MAAO,CAAC,EAAExqC,KAAWA,IAAUA,IAAUA,MAUtC,SAAS4hG,EAAKh7D,EAAQ4D,GACzB,MAAO,CAAC5D,GAQL,SAASq8E,EAAK5iB,GACjB,OAAO,SAMGz5D,EAAQ4D,GACd,IAAIj6C,EAAI8vG,EAAS8G,kBAAkB38D,GAC/Bg4D,EAAYnC,EAAS6F,0BAA0Bt/D,EAAQr2C,GAEvDu7E,EAAU,GAEVq2B,EAAY,CAAC5xG,EAAG,EAAG,GACvB,IAAK4xG,EAAU,GAAKK,EAAU76D,KAAMw6D,EAAU,IAAMK,EAAU36D,OAAQs6D,EAAU,GAC5E,IAAKA,EAAU,GAAKK,EAAU56D,KAAMu6D,EAAU,IAAMK,EAAU16D,OAAQq6D,EAAU,GAC5Er2B,EAAQnxF,KAAK0lH,EAASmG,mBAAmBrE,IAGjD,OAAOr2B,GAjDf,sH,6BCAA,IACQlpD,EADR,oCAAIC,GACID,EAAgB,SAAUxyB,EAAGD,GAI7B,OAHAyyB,EAAgBxrC,OAAO0rC,gBAClB,CAAEC,UAAW,cAAgBprC,OAAS,SAAUyY,EAAGD,GAAKC,EAAE2yB,UAAY5yB,IACvE,SAAUC,EAAGD,GAAK,IAAK,IAAIjZ,KAAKiZ,EAAO/Y,OAAOC,UAAU2T,eAAenT,KAAKsY,EAAGjZ,KAAIkZ,EAAElZ,GAAKiZ,EAAEjZ,MAC3EkZ,EAAGD,IAErB,SAAUC,EAAGD,GAEhB,SAAS6yB,IAAO7oC,KAAKkB,YAAc+U,EADnCwyB,EAAcxyB,EAAGD,GAEjBC,EAAE/Y,UAAkB,OAAN8Y,EAAa/Y,OAAOL,OAAOoZ,IAAM6yB,EAAG3rC,UAAY8Y,EAAE9Y,UAAW,IAAI2rC,KA4CnF+rD,EAAwB,SAAUxrD,GAKlC,SAASwrD,EAAO56E,GACZ,IAAI/B,EAAQmxB,EAAO1rC,KAAKsC,OAASA,KAoCjC,OA/BAiY,EAAM8wH,YAAc,cAAc/uH,EAAQ84C,YAK1C76C,EAAM+wH,cAAgBC,EAAkBjvH,EAAQ01E,cAKhDz3E,EAAMixH,8BACkCzqI,IAApCub,EAAQmvH,yBACFnvH,EAAQmvH,wBAOlBlxH,EAAM4rE,SAAU,EAKhB5rE,EAAMmxH,YACgB3qI,IAAlBub,EAAQssD,MAAsBtsD,EAAQssD,MAAQ,IAAYqpB,MAK9D13E,EAAMoxH,YAA2B5qI,IAAlBub,EAAQ64C,OAAsB74C,EAAQ64C,MAC9C56C,EA4EX,OArHAywB,EAAUksD,EAAQxrD,GA+ClBwrD,EAAO13F,UAAUosI,gBAAkB,WAC/B,OAAOtpI,KAAKgpI,eAKhBp0C,EAAO13F,UAAUqsI,2BAA6B,WAC1C,OAAOvpI,KAAKkpI,0BAOhBt0C,EAAO13F,UAAUssI,cAAgB,WAC7B,OAAOxpI,KAAK+oI,aAMhBn0C,EAAO13F,UAAUqvH,eAAiB,WAC9B,OAAO,sBAOX33B,EAAO13F,UAAUonH,SAAW,WACxB,OAAOtkH,KAAKopI,QAKhBx0C,EAAO13F,UAAUopF,SAAW,WACxB,OAAOtmF,KAAKqpI,QAKhBz0C,EAAO13F,UAAUusI,kBAAoB,aAOrC70C,EAAO13F,UAAU+zC,QAAU,WACvBjxC,KAAKy+D,WASTm2B,EAAO13F,UAAUwsI,gBAAkB,SAAUh6C,GACzC1vF,KAAKgpI,cAAgBC,EAAkBv5C,GACvC1vF,KAAKy+D,WAMTm2B,EAAO13F,UAAUq1C,SAAW,SAAU+zB,GAClCtmE,KAAKopI,OAAS9iE,EACdtmE,KAAKy+D,WAEFm2B,EAtHgB,CAuHzB,KAMF,SAASq0C,EAAkBU,GACvB,OAAKA,EAGDnsI,MAAMvB,QAAQ0tI,GACP,SAAUhnE,GACb,OAAOgnE,GAGgB,mBAApBA,EACAA,EAEJ,SAAUhnE,GACb,MAAO,CAACgnE,IAXD,KAcA,O,6BCnMf,kCAOO,IAKIC,EAA2B,CAClCniD,uBAAuB,EACvBoiD,yBAAyB,I,6BCZ7B5sI,OAAOy2B,eAAe0pC,EAAS,aAAc,CAC3C7+D,OAAO,IAET6+D,EAAQC,QAiER,SAAiBysE,IACf,EAAIC,EAAQ1sE,SAAS,EAAG3hE,WACxB,IAAIqb,GAAO,EAAIk3E,EAAO5wB,SAASysE,GAC/B,OAAQhwH,MAAM/C,IAlEhB,IAAIk3E,EAAS+7C,EAAuB,EAAQ,MAExCD,EAAUC,EAAuB,EAAQ,MAE7C,SAASA,EAAuB5sI,GAAO,OAAOA,GAAOA,EAAI+wF,WAAa/wF,EAAM,CAAEigE,QAASjgE,GAiEvFmG,EAAO65D,QAAUA,EAAQC,S,6BC5EzB,wEAII4sE,EACAC,EACAvjI,EACAwjI,EAPJ,SAQIC,GAAc,EACX,SAASC,EAA+Bn+D,EAAQvlE,GACnD,IAAI2jI,GAAe,EACfC,EAAY,CAAEx9F,KAAM,EAAGnhC,IAAK,GAC5B4+H,EAAat+D,EACjB,IAAKA,IAAWvlE,EACZ,OAAO4jI,EAKX,IAHI,YAAkB5jI,EAAQ0xC,eAA4C,UAA3B1xC,EAAQsH,MAAM4pC,WACzDyyF,GAAe,IAEX3jI,EAAQ0xC,cAAgBiyF,IAAiBp+D,GAAUvlE,EAAQ0xC,eAAiB6zB,GAChFq+D,EAAUx9F,MAAQm/B,EAAO3yB,WACzBgxF,EAAU3+H,KAAOsgE,EAAO5yB,UACxB4yB,EAASA,EAAO7zB,aAGpB,IADA6zB,EAASs+D,GACD7jI,EAAQ0xC,cAAgBiyF,IAAiBp+D,GAAUvlE,EAAQ0xC,eAAiB6zB,GAChFq+D,EAAUx9F,MAAQm/B,EAAOx/B,WACzB69F,EAAU3+H,KAAOsgE,EAAOr/B,UACxBq/B,EAASA,EAAO5uB,cAEpB,OAAOitF,EAEJ,SAASE,EAAkBC,EAAgBC,EAAWC,EAAWttF,EAAeutF,GAInF,GAHyCX,EAAxCU,EAAYD,IAAc,gBAA0BlsI,EAAwBosI,EAC7EX,EAAYW,EACZT,IAAc9sF,GACTotF,EACD,MAAO,CAAE39F,KAAM,EAAGnhC,IAAK,GAEtB++H,IACDA,EAAY,QAEXC,IACDA,EAAY,OAEhBT,EAAiBO,EAAepgI,cAChC3D,EAAU+jI,EAEV,OAQJ,SAAwBI,EAAMC,EAAMjoH,GAEhC,OADAmnH,EAActjI,EAAQ2lC,wBACdy+F,EAAOD,GACX,IAAK,YACDE,EAAQC,IAAqBnoH,GAC7BooH,EAAQC,IAAiBroH,GACzB,MACJ,IAAK,WACDkoH,EAAQI,IAAmBtoH,GAC3BooH,EAAQC,IAAiBroH,GACzB,MACJ,IAAK,eACDkoH,EAAQC,IAAqBnoH,GAC7BooH,EAAQG,IAAqBvoH,GAC7B,MACJ,IAAK,cACDkoH,EAAQI,IAAmBtoH,GAC3BooH,EAAQG,IAAqBvoH,GAC7B,MACJ,IAAK,aACDkoH,EAAQM,IAAkBxoH,GAC1BooH,EAAQG,IAAqBvoH,GAC7B,MACJ,IAAK,eACDkoH,EAAQC,IAAqBnoH,GAC7BooH,EAAQK,IAAoBzoH,GAC5B,MACJ,IAAK,cACDkoH,EAAQI,IAAmBtoH,GAC3BooH,EAAQK,IAAoBzoH,GAC5B,MACJ,IAAK,aACDkoH,EAAQM,IAAkBxoH,GAC1BooH,EAAQK,IAAoBzoH,GAC5B,MACJ,QACA,IAAK,UACDkoH,EAAQM,IAAkBxoH,GAC1BooH,EAAQC,IAAiBroH,GAGjC,OAAOA,EAjDA0oH,CAAeb,EAAUxrI,cAAeyrI,EAAUzrI,cAD/C,CAAE4tC,KAAM,EAAGnhC,IAAK,IAG9B,SAASo/H,EAAQzsI,EAAOukB,GACpBA,EAAIiqB,KAAOxuC,EAEf,SAAS2sI,EAAQ3sI,EAAOukB,GACpBA,EAAIlX,IAAMrN,EA6Cd,SAASktI,IACL,OAAOtB,EAAer9F,gBAAgBD,WAAas9F,EAAe19F,KAAKI,UAE3E,SAAS6+F,IACL,OAAOvB,EAAer9F,gBAAgBJ,YAAcy9F,EAAe19F,KAAKC,WAE5E,SAAS6+F,IACL,OAAOnB,EAAcH,EAAYh9F,OAASg9F,EAAYh9F,OAASw+F,IAEnE,SAASJ,IACL,OAAOF,IAAmBlB,EAAYxwF,OAAS,EAEnD,SAAS0xF,IACL,OAAOf,EAAcH,EAAYr+H,IAAMq+H,EAAYr+H,IAAM6/H,IAE7D,SAASH,IACL,OAAOrB,EAAYl9F,KAAO2+F,IAE9B,SAASN,IACL,OAAOnB,EAAYj9F,MAAQ0+F,KAAuBxB,EAAYA,EAAU1wF,MAAQ,GAEpF,SAASyxF,IACL,OAAOK,IAAoBrB,EAAYzwF,MAAQ,I,6BCzHnD,0FAKImyF,EAAuB,WAMvB,SAASA,EAAMjpI,GAuBX,OArBA1C,KAAK4rI,SAAW,KAEhB5rI,KAAK6rI,SAAU,EAEf7rI,KAAK8rI,UAAY,GACjB9rI,KAAK+rI,QAAU,GACf/rI,KAAKsP,IAAM,GACXtP,KAAKgsI,KAAO,GACQ,iBAATtpI,EACP1C,KAAKisI,UAAYvpI,EAEZA,GAAQA,aAAgBlF,QAC7BwC,KAAKksI,QAAUxpI,GAEnB1C,KAAKmsI,QAAU,GACfnsI,KAAKosI,cAAgB,GACrBpsI,KAAKqsI,eAAiB,GACtBrsI,KAAK4rI,SAAW,KAChB5rI,KAAK6rI,SAAU,EACf7rI,KAAK+O,OAAS,GACd/O,KAAKssI,SAAW,GACTtsI,KAkYX,OA5XA2rI,EAAMzuI,UAAUqvI,OAAS,SAAUC,GAE/B,OADAxsI,KAAKsP,IAAMk9H,EACJxsI,MAMX2rI,EAAMzuI,UAAUuvI,MAAQ,SAAUC,GAE9B,OADA1sI,KAAK0sI,YAAcA,EACZ1sI,MAiBX2rI,EAAMzuI,UAAUu+E,QAAU,SAAUixD,EAAa7gG,EAAML,EAAMk9D,GAEzD,OADAgkC,EAAcA,GAAe1sI,KAAK0sI,aAEvBA,EAAYC,aAAa3sI,KAAM6rC,EAAML,EAAMk9D,GAE/C,IAASv3F,WAAW,8GAM/Bw6H,EAAMzuI,UAAU0vI,aAAe,SAAUF,GAErC,OADAA,EAAcA,GAAe1sI,KAAK0sI,aAEvBA,EAAYE,aAAa5sI,MAE7B,IAASmR,WAAW,mHAK/Bw6H,EAAMzuI,UAAUwD,MAAQ,WACpB,IAAImsI,EAAS,IAAIlB,EAgBjB,OAfAkB,EAAOd,QAAU/rI,KAAK+rI,QAAQtuI,MAAM,GACpCovI,EAAOv9H,IAAMtP,KAAKsP,IAClBu9H,EAAOhB,QAAU7rI,KAAK6rI,QACtBgB,EAAOH,YAAc1sI,KAAK0sI,YAC1BG,EAAOZ,UAAYjsI,KAAKisI,UACxBY,EAAO99H,OAAS/O,KAAK+O,OAAOtR,MAAM,GAClCovI,EAAOV,QAAUnsI,KAAKmsI,QAAQ1uI,MAAM,GACpCovI,EAAOT,cAAgBpsI,KAAKosI,cAAc3uI,MAAM,GAChDovI,EAAOR,eAAiBrsI,KAAKqsI,eAAe5uI,MAAM,GAClDovI,EAAOC,iBAAmB9sI,KAAK8sI,iBAC/BD,EAAOjB,SAAW5rI,KAAK4rI,SACvBiB,EAAOb,KAAOhsI,KAAKgsI,KACnBa,EAAOE,gBAAkB/sI,KAAK+sI,gBAC9BF,EAAOf,UAAY9rI,KAAK8rI,UAAUruI,MAAM,GACxCovI,EAAOP,SAAWtsI,KAAKssI,SAAS7uI,MAAM,GAC/BovI,GAMXlB,EAAMzuI,UAAUwF,KAAO,SAAUsqI,GAE7B,OADAhtI,KAAKisI,UAAYe,EACVhtI,MAOX2rI,EAAMzuI,UAAU+vI,UAAY,SAAU39H,EAAK/Q,GAOvC,MANqB,mBAAVA,EACPyB,KAAK+O,OAAOvO,KAAK,CAAE8O,IAAKA,EAAKzN,GAAItD,IAGjCyB,KAAK+O,OAAOvO,KAAK,CAAE8O,IAAKA,EAAK/Q,MAAOA,IAEjCyB,MAKX2rI,EAAMzuI,UAAUgwI,SAAW,SAAUC,GAOjC,OALIntI,KAAK8rI,UADa,iBAAXqB,EACU,GAAG1vI,MAAMC,KAAK,CAACyvI,GAAS,GAGxBA,EAAO1vI,MAAM,GAE3BuC,MAMX2rI,EAAMzuI,UAAUkwI,OAAS,SAAUC,GAO/B,OALIrtI,KAAKmsI,QADa,iBAAXkB,EACQ,GAAG5vI,MAAMC,KAAK,CAAC2vI,GAAS,GAGxBA,EAAO5vI,MAAM,GAEzBuC,MAUX2rI,EAAMzuI,UAAUowI,MAAQ,SAAUC,EAAWC,EAAUjvI,EAAOkvI,EAAYC,GACtEF,EAAWA,EAAW,EAAWruI,cAAgB,KACjD,IAAIwuI,EAAY,KAWhB,MAVyB,iBAAdJ,EACPI,EAAY,IAAIC,EAAUL,EAAWC,EAAUjvI,EAAOkvI,EAAYC,GAE7DH,aAAqBK,IAC1BD,EAAYJ,GAEhBvtI,KAAK+rI,QAAQvrI,KAAK,CACdqB,GAAI,UACJhH,EAAG8yI,IAEA3tI,MAUX2rI,EAAMzuI,UAAUwqH,OAAS,SAAUmmB,EAAWC,EAAYN,EAAUC,EAAYC,GAClD,iBAAfI,IACPA,EAAa,CAACA,IAEbN,GAAyB,SAAbA,IACbA,EAAW,YAEf,IAAIO,EAAW,IAASC,YAAYR,GAYpC,OAXAxtI,KAAK+rI,QAAQvrI,KAAK,CACdqB,GAAI,WACJhH,EAAG,CACCizI,WAAYA,EACZN,SAAUA,EACVK,UAAWA,EACXJ,WAAYA,EACZC,aAAcA,EACdK,SAAUA,KAGX/tI,MAQX2rI,EAAMzuI,UAAU+wI,OAAS,SAAUV,EAAWQ,EAAUG,GACpD,OAAOluI,KAAKmuI,iBAAiBZ,EAAWQ,EAAUG,IAStDvC,EAAMzuI,UAAUixI,iBAAmB,SAAUZ,EAAWQ,EAAUG,EAAaxuC,GAC3E,IACI0uC,EACApvH,EAFAqvH,EAAS,YAAkB3uC,GAAyB,YAAZA,EAW5C,GARyB,iBAAd6tC,GAA0B,IAAS7vB,SAAS6vB,EAAUpuI,cAAe,WAC5EouI,EAAYA,EAAUlsI,QAAQ,UAAW,IACzC0sI,EAAW,cAEVA,GAAgC,iBAAbA,IACpBM,EAAQN,EAAWA,EAAS5uI,cAAgB,YAC5C4uI,EAAW,IAASO,OAAOP,IAE3BG,EAAa,CACbE,EAAQzC,EAAM4C,cAAcvuI,KAAK+rI,QAAS,YAC1C,IAAK,IAAIlwI,EAAI,EAAGA,EAAIuyI,EAAM3zI,OAAQoB,IAE9B,GAAoB,iBADpBmjB,EAAOovH,EAAMvyI,GAAGhB,EAAE0yI,YAEd,GAAIvuH,IAASuuH,EACT,OAAOvtI,UAGV,GAAIgf,aAAgBxhB,MACrB,IAAK,IAAI8Y,EAAI,EAAGA,EAAI0I,EAAKvkB,OAAQ6b,IAC7B,GAAI0I,EAAK1I,KAAOi3H,GAAaA,EAAUpuI,gBAAkB6f,EAAK1I,GAAK,QAC/D,OAAOtW,KAc3B,OARAA,KAAK+rI,QAAQvrI,KAAK,CACdqB,GAAI,WACJhH,EAAG,CACC0yI,UAAWA,EACXQ,SAAUA,EACVruC,UAAW2uC,KAGZruI,MAMX2rI,EAAMzuI,UAAUsxI,WAAa,SAAUjB,GACnC,OAAOvtI,KAAKiuI,OAAOV,EAAW,eAMlC5B,EAAMzuI,UAAUm1H,MAAQ,SAAUkb,EAAW1rI,EAAIgX,GAU7C,OATA7Y,KAAKiuI,OAAOV,EAAW,MAAM,GAC7BvtI,KAAK+rI,QAAQvrI,KAAK,CACdqB,GAAI,UACJhH,EAAG,CACC0yI,UAAWA,EACXQ,SAAUlsI,GAAU,KACpBgX,OAAQA,GAAkB,QAG3B7Y,MAOX2rI,EAAMzuI,UAAUuxI,KAAO,SAAUC,EAAWC,GAQxC,OAPA3uI,KAAK+rI,QAAQvrI,KAAK,CACdqB,GAAI,SACJhH,EAAG,CACC6zI,UAAWA,EACXC,SAAUA,KAGX3uI,MAOX2rI,EAAMzuI,UAAU2iB,MAAQ,SAAUrQ,EAAO1M,GAQrC,OAPA9C,KAAK+rI,QAAQvrI,KAAK,CACdqB,GAAI,UACJhH,EAAG,CACC2U,MAAOA,EACP1M,IAAKA,KAGN9C,MAMX2rI,EAAMzuI,UAAU0xI,KAAO,SAAUC,GAO7B,OANA7uI,KAAK+rI,QAAQvrI,KAAK,CACdqB,GAAI,SACJhH,EAAG,CACCg0I,IAAKA,KAGN7uI,MAMX2rI,EAAMzuI,UAAUupD,KAAO,SAAUooF,GAK7B,OAJA7uI,KAAK+rI,QAAQvrI,KAAK,CACdqB,GAAI,SACJhH,EAAG,CAAEg0I,IAAKA,KAEP7uI,MAMX2rI,EAAMzuI,UAAUsM,OAAS,SAAUskI,GAQ/B,MAP0B,iBAAfA,IACPA,EAAa,GAAGrwI,MAAMC,KAAK,CAACowI,GAAa,IAE7C9tI,KAAK+rI,QAAQvrI,KAAK,CACdqB,GAAI,WACJhH,EAAG,CAAEizI,WAAYA,KAEd9tI,MAOX2rI,EAAMzuI,UAAU4xI,UAAY,SAAU1lI,EAAO2lI,GAGzC,OAFA/uI,KAAK8sI,iBAAmBiC,EACxB/uI,KAAK4rI,SAAWxiI,EACTpJ,MAMX2rI,EAAMzuI,UAAU8xI,WAAa,SAAU1/H,GAEnC,OADAtP,KAAKgsI,KAAO18H,EACLtP,MAKX2rI,EAAMzuI,UAAU+xI,cAAgB,WAE5B,OADAjvI,KAAK+sI,iBAAkB,EAChB/sI,MAQX2rI,EAAMzuI,UAAUgyI,UAAY,SAAUjoI,EAAMulI,GAKxC,OAJAxsI,KAAK+rI,QAAQvrI,KAAK,CACdqB,GAAI,eACJhH,EAAG,CAAE2xI,MAAOA,EAAOvlI,KAAMA,KAEtBjH,MAQX2rI,EAAM4C,cAAgB,SAAUxC,EAAS/tI,GACrC,OAAO+tI,EAAQ1oI,QAAO,SAAU8rI,GAC5B,OAAOA,EAAEttI,KAAO7D,MASxB2tI,EAAMyD,iBAAmB,SAAUrD,EAASsD,GAKxC,IAJA,IAAIC,EAAWvD,EAAQ1oI,QAAO,SAAU8rI,GACpC,OAAkC,IAA3BE,EAAQrsI,QAAQmsI,EAAEttI,OAEzBgR,EAAM,GACDhX,EAAI,EAAGA,EAAIyzI,EAAS70I,OAAQoB,IAC5BgX,EAAIy8H,EAASzzI,GAAGgG,MACjBgR,EAAIy8H,EAASzzI,GAAGgG,IAAMytI,EAASzzI,GAAGhB,GAG1C,OAAOgY,GAEJ84H,EA/Ze,GAsatBiC,EAA2B,WAS3B,SAASA,EAAUpB,EAAOgB,EAAUjvI,EAAOkvI,EAAYC,GA0BnD,YAzBmB,IAAfD,IAAyBA,GAAa,GAE1CztI,KAAK0tI,cAAe,EAEpB1tI,KAAKuvI,WAAY,EACI,iBAAV/C,GACPxsI,KAAKwsI,MAAQA,EACbxsI,KAAKwtI,SAAWA,EAASruI,cACzBa,KAAKzB,MAAQA,EACbyB,KAAKytI,WAAaA,EAClBztI,KAAK0tI,aAAeA,EACpB1tI,KAAKuvI,WAAY,EACjBvvI,KAAK+tI,SAAW,IAASC,YAAYwB,gBAAgBxvI,KAAKwtI,YAErDhB,aAAiBoB,GAAarvI,aAAiBqvI,GAAarvI,aAAiBf,SAClFwC,KAAKuvI,WAAY,EACjBvvI,KAAKgrD,UAAYwiF,EAASruI,cAC1Ba,KAAKyvI,WAAa,CAACjD,GACfjuI,aAAiBf,MACjB,GAAGgD,KAAK5E,MAAMoE,KAAKyvI,WAAYlxI,GAG/ByB,KAAKyvI,WAAWjvI,KAAKjC,IAGtByB,KAmJX,OA7IA4tI,EAAU8B,IAAM,WAEZ,IADA,IAAI3vI,EAAO,GACFiQ,EAAK,EAAGA,EAAKtU,UAAUjB,OAAQuV,IACpCjQ,EAAKiQ,GAAMtU,UAAUsU,GAEzB,OAAO49H,EAAU+B,kBAAkB,GAAGlyI,MAAMC,KAAKqC,EAAM,GAAI,QAU/D6tI,EAAU1wI,UAAUwyI,IAAM,SAAUlD,EAAOgB,EAAUjvI,EAAOkvI,EAAYC,GACpE,OAAOE,EAAUgC,QAAQ5vI,KAAMwsI,EAAOgB,EAAUjvI,EAAO,MAAOkvI,EAAYC,IAM9EE,EAAUiC,GAAK,WAEX,IADA,IAAI9vI,EAAO,GACFiQ,EAAK,EAAGA,EAAKtU,UAAUjB,OAAQuV,IACpCjQ,EAAKiQ,GAAMtU,UAAUsU,GAEzB,OAAO49H,EAAU+B,kBAAkB,GAAGlyI,MAAMC,KAAKqC,EAAM,GAAI,OAU/D6tI,EAAU1wI,UAAU2yI,GAAK,SAAUrD,EAAOgB,EAAUjvI,EAAOkvI,EAAYC,GACnE,OAAOE,EAAUgC,QAAQ5vI,KAAMwsI,EAAOgB,EAAUjvI,EAAO,KAAMkvI,EAAYC,IAM7EE,EAAUkC,SAAW,SAAUC,GAC3B,GAAIA,aAAgBvyI,MAAO,CAEvB,IADA,IAAIqV,EAAM,GACDhX,EAAI,EAAGyX,EAAMy8H,EAAKt1I,OAAQoB,EAAIyX,EAAKzX,IACxCgX,EAAIrS,KAAKR,KAAKgwI,aAAaD,EAAKl0I,KAEpC,OAAOgX,EAEX,IAAIo9H,EAAOF,EACX,OAAO/vI,KAAKgwI,aAAaC,IAM7BrC,EAAU1wI,UAAUgzI,SAAW,SAAUC,GACrC,IACIC,EACAl9H,EAFAy6H,EAAY3tI,KAAKyvI,WAAazvI,KAAKyvI,WAAa,GAGpD,IAAKzvI,KAAKuvI,WAAavvI,KAAK+tI,SACxB,OAAO/tI,KAAK+tI,SAASrwI,KAAKsC,KAAM,IAAStB,UAAUsB,KAAKwsI,MAAO2D,GAASnwI,KAAKzB,MAAOyB,KAAKytI,WAAYztI,KAAK0tI,cAE9G0C,EAA2B,QAAnBpwI,KAAKgrD,UACb,IAAK,IAAInvD,EAAI,EAAGA,EAAI8xI,EAAUlzI,OAAQoB,IAElC,GADAqX,EAAMy6H,EAAU9xI,GAAGq0I,SAASC,GACxBC,GACA,IAAKl9H,EACD,OAAO,OAIX,GAAIA,EACA,OAAO,EAInB,OAAOk9H,GAMXxC,EAAU1wI,UAAUmzI,OAAS,WACzB,IAAIZ,EACA1yI,EACJ,GAAIiD,KAAKuvI,UAAW,CAChBE,EAAa,GACb1yI,EAAIiD,KAAKyvI,WACT,IAAK,IAAI5zI,EAAI,EAAGA,EAAIkB,EAAEtC,OAAQoB,IAC1B4zI,EAAWjvI,KAAKzD,EAAElB,GAAGw0I,UAG7B,MAAO,CACHd,UAAWvvI,KAAKuvI,UAChB/C,MAAOxsI,KAAKwsI,MACZgB,SAAUxtI,KAAKwtI,SACfjvI,MAAOyB,KAAKzB,MACZkvI,WAAYztI,KAAKytI,WACjBC,aAAc1tI,KAAK0tI,aACnB1iF,UAAWhrD,KAAKgrD,UAChBykF,WAAYA,IAGpB7B,EAAU+B,kBAAoB,SAAUF,EAAYjC,GAChD,GAA0B,IAAtBiC,EAAWh1I,OAAc,CACzB,KAAMg1I,EAAW,aAAcjyI,OAC3B,OAAOiyI,EAAW,GAEtBA,EAAaA,EAAW,GAE5B,OAAO,IAAI7B,EAAU6B,EAAW,GAAIjC,EAAUiC,EAAWhyI,MAAM,KAEnEmwI,EAAUgC,QAAU,SAAUK,EAAMzD,EAAOgB,EAAUjvI,EAAOysD,EAAWyiF,EAAYC,GAC/E,OAAIlB,aAAiBoB,EACVA,EAAU5iF,GAAWilF,EAAMzD,GAEjB,iBAAVA,EACAoB,EAAU5iF,GAAWilF,EAAM,IAAIrC,EAAUpB,EAAOgB,EAAUjvI,EAAOkvI,EAAYC,IAEjF,IAASv8H,WAAW,eAAiB65C,EAAY,yBAE5D4iF,EAAUoC,aAAe,SAAUD,GAK/B,IAJA,IAAIO,EAAQP,EAAKN,YAAc,GAC3Bn8H,EAAMg9H,EAAM71I,OACZg1I,EAAa,GAER5zI,EAAI,EAAGA,EAAIyX,EAAKzX,IACrB4zI,EAAWjvI,KAAKR,KAAKgwI,aAAaM,EAAMz0I,KAQ5C,OANKk0I,EAAKR,UAIG,IAAI3B,EAAU6B,EAAW,GAAIM,EAAK/kF,UAAWykF,EAAWhyI,MAAM,IAH9D,IAAImwI,EAAUmC,EAAKvD,MAAOuD,EAAKvC,SAAUuC,EAAKxxI,MAAOwxI,EAAKtC,WAAYsC,EAAKrC,eAOrFE,EAtLmB,I,6BC3a9B,kEAGI2C,EAAS,CAAEC,UAAW,mBAKtBC,EAA0B,WAC1B,SAASA,KAu4DT,OA93DAA,EAASxhI,SAAW,SAAU1Q,EAAO0T,GACjC,MAAqB,mBAAV1T,EACAA,EAAMb,KAAKuU,GAAQ,IAEvB1T,GAOXkyI,EAAS/yB,SAAW,SAAUvlD,EAAOt9C,GACjC,OAAOs9C,EAAM16D,OAAS06D,EAAM16D,OAAOod,EAAOpgB,UAAYogB,GAO1D41H,EAASC,WAAa,SAAUv4E,EAAO3oD,GACnC,OAAO2oD,EAAM16D,MAAM,EAAG+R,EAAM/U,UAAY+U,GAO5CihI,EAASnC,OAAS,SAAUD,GAExB,MAAc,eADdA,EAAQA,EAAQoC,EAAStxI,YAAYkvI,GAAS,aAEnCruI,KAAK2wI,YAET3wI,KAAK4wI,cAQhBH,EAASE,YAAc,SAAUpwI,EAAGkjB,GAChC,OAAI,YAAkBljB,IAAM,YAAkBkjB,IAG1CA,SAFQ,EAKK,iBAANljB,EACAA,EAAEswI,cAAcptH,GAEvBljB,QACO,EAEJA,EAAIkjB,GAQfgtH,EAASG,aAAe,SAAUrwI,EAAGkjB,GACjC,OAAI,YAAkBljB,IAAM,YAAkBkjB,IAClC,EAERA,QACO,EAEM,iBAANljB,GACsB,EAAtBA,EAAEswI,cAAcptH,GAEvBljB,SACQ,EAELkjB,EAAIljB,GAEfkwI,EAASK,cAAgB,SAAU1zI,EAAK+vI,GAEpC,IADA,IAAIv5F,EAAS,GACJ/3C,EAAI,EAAGA,EAAIsxI,EAAO1yI,OAAQoB,IAC/B+3C,EAAS5zC,KAAKqP,SAAS89H,EAAOtxI,GAAImE,KAAKtB,UAAUyuI,EAAOtxI,GAAIuB,GAAMw2C,GAEtE,OAAOA,GAOX68F,EAASjnI,OAAS,SAAUunI,EAAW5D,GAEnC,IADA,IAAI6D,EAAU,GACLn1I,EAAI,EAAGA,EAAIk1I,EAAUt2I,OAAQoB,IAClCm1I,EAAQxwI,KAAKR,KAAK8wI,cAAcC,EAAUl1I,GAAIsxI,IAElD,OAAO6D,GAWXP,EAASpe,MAAQ,SAAU0e,EAAWvE,EAAOyE,EAAYC,EAAOC,EAASt4H,EAAQu4H,GAC7EF,EAAQA,GAAS,EACjB,IAAIG,EAAWN,EAEf,GAAIM,EAASb,YAAcD,EAAW,UAAG,CAerC,IAdA,IAAIjgI,EAAU,SAAUgG,GACpB,GAAK,YAAkB66H,GAQnBE,EAAS/6H,GAAGkxG,MAAQ1zE,EAAOu+E,MAAMgf,EAAS/6H,GAAGkxG,MAAOglB,EAAOyE,EAAYI,EAASH,MAAQ,EAAG,KAAMr4H,EAAQu4H,GACzGC,EAAS/6H,GAAG8uF,MAAQisC,EAAS/6H,GAAGkxG,MAAM/sH,WATT,CAC7B,IAAI62I,EACAtyH,EAAOmyH,EAAQ9tI,QAAO,SAAUxI,GAAK,OAAOA,EAAEyU,MAAQ+hI,EAAS/6H,GAAGhH,OACtEgiI,EAAOH,EAAQnuI,QAAQgc,EAAK,IAC5BqyH,EAAS/6H,GAAGkxG,MAAQ1zE,EAAOu+E,MAAMgf,EAAS/6H,GAAGkxG,MAAOglB,EAAOyE,EAAYI,EAASH,MAAQ,EAAGC,EAAQG,GAAM9pB,MAAO3uG,EAAQu4H,GACxHC,EAAS/6H,GAAG8uF,MAAQ+rC,EAAQG,GAAMlsC,QAOtCtxD,EAAS9zC,KACJsW,EAAI,EAAGA,EAAI+6H,EAAS52I,OAAQ6b,IACjChG,EAAQgG,GAGZ,OADA+6H,EAASE,aAAe,EACjBF,EAEX,IAAIG,EAAU,GACVC,EAAe,GACnBA,EAAajB,UAAYD,EAAW,UACpCkB,EAAaP,MAAQA,EACrBO,EAAaF,YAAc,EAC3BE,EAAaC,QAAUL,EA0BvB,IAzBA,IAAIM,EAAU,SAAU91I,GACpB,IAAIwX,EAAMu+H,EAAOC,OAAOR,EAAUx1I,EAAG2wI,GAIrC,GAHK,YAAkB3zH,KACnBxF,EAAMwF,EAAOxF,EAAKm5H,KAEjBgF,EAAQn+H,KACTm+H,EAAQn+H,GAAO,CACX/D,IAAK+D,EACL+xF,MAAO,EACPoiB,MAAO,GACPypB,WAAY,GACZzE,MAAOA,GAEXiF,EAAajxI,KAAKgxI,EAAQn+H,KACrB,YAAkB89H,IAAU,CAC7B,IAAIW,EAAUX,EAAQ9tI,QAAO,SAAUxI,GAAK,OAAOA,EAAEyU,MAAQkiI,EAAQn+H,GAAK/D,OAC1EkiI,EAAQn+H,GAAK+xF,MAAQ0sC,EAAQ,GAAG1sC,MAGxCosC,EAAQn+H,GAAK+xF,MAAS,YAAkB+rC,GAAgCK,EAAQn+H,GAAK+xF,OAAS,EAA3CosC,EAAQn+H,GAAK+xF,QAC3DgsC,GAAeA,GAAcH,EAAWx2I,SACzC+2I,EAAQn+H,GAAKm0G,MAAMhnH,KAAK6wI,EAASx1I,KAGrC+1I,EAAS5xI,KACJnE,EAAI,EAAGA,EAAIw1I,EAAS52I,OAAQoB,IACjC81I,EAAQ91I,GAEZ,GAAIo1I,GAAcA,EAAWx2I,OACzB,KAAIs3I,EAAU,SAAUl2I,GAIpB,IAHA,IAAIgX,EAAM,GACNhR,OAAK,EACLmwI,EAAOf,EACF36H,EAAI,EAAGA,EAAI26H,EAAWx2I,OAAQ6b,IAEnC,GADAzU,EAAK4uI,EAASQ,WAAWA,EAAW36H,GAAGrP,MAClC,YAAkBkqI,GAOftvI,IACAgR,EAAIm/H,EAAK17H,GAAGk2H,MAAQ,MAAQwF,EAAK17H,GAAGrP,MAAQpF,EAAG4vI,EAAa51I,GAAG2rH,MAAOwqB,EAAK17H,GAAGk2H,YARrD,CAC7B,IAAIxtH,EAAOmyH,EAAQ9tI,QAAO,SAAUxI,GAAK,OAAOA,EAAEyU,MAAQmiI,EAAa51I,GAAGyT,OACtEzN,IACAgR,EAAIm/H,EAAK17H,GAAGk2H,MAAQ,MAAQwF,EAAK17H,GAAGrP,MAAQpF,EAAGmd,EAAK,GAAGwoG,MAAOwqB,EAAK17H,GAAGk2H,QASlFiF,EAAa51I,GAAGo1I,WAAap+H,GAEjC,IAAShX,EAAI,EAAGA,EAAI41I,EAAah3I,OAAQoB,IACrCk2I,EAAQl2I,GAGhB,GAAIu1I,GAAcK,EAAah3I,QAAUw2I,EAAWx2I,OAChD,IAASoB,EAAI,EAAGA,EAAI41I,EAAah3I,OAAQoB,IACrC41I,EAAa51I,GAAG2rH,MAAQ,GAGhC,OAAO6pB,EAAS52I,QAAUg3I,GAAgBJ,GAY9CZ,EAASwB,eAAiB,SAAUjG,EAAMtpI,EAAM5E,EAAQo0I,EAAQC,GAC5D,IAAIt2I,EACAu2I,EAAM,GAQV,IANIF,EAAO9vI,SACP8vI,EAASA,EAAO9vI,QAEhB8vI,EAAO1B,WACPxwI,KAAKmR,WAAW,0DAEftV,EAAI,EAAGA,EAAIq2I,EAAOz3I,OAAQoB,IAAK,EAEzBu2I,EADHC,EAAWryI,KAAKtB,UAAUstI,EAAMkG,EAAOr2I,OAClBu2I,EAAIC,GAAY,KACpC7xI,KAAK0xI,EAAOr2I,IAErB,IAAKA,EAAI,EAAGA,EAAIiC,EAAOrD,OAAQoB,IAAK,CAChC,IAAIw2I,EAAWryI,KAAKtB,UAAUyzI,GAAQnG,EAAMluI,EAAOjC,IACnDiC,EAAOjC,GAAG6G,GAAQ0vI,EAAIC,KAU9B5B,EAAS6B,aAAe,SAAUl1I,EAAK+vI,EAAQnsH,GAI3C,QAHeviB,IAAXuiB,IACAA,EAAS,IAETmsH,QACA,OAAOntI,KAAKsyI,aAAal1I,EAAK,GAAI4jB,GAItC,IAFA,IAAIuxH,EAAUn1I,EAEL4S,EAAK,EAAGC,EADNhT,OAAOsS,KAAKnS,GACS4S,EAAKC,EAAOxV,OAAQuV,IAAM,CACtD,IAAI4C,EAAO3C,EAAOD,GACW,iBAAlBuiI,EAAQ3/H,IAAwB2/H,EAAQ3/H,aAAiBpV,MAIhE2vI,EAAO3sI,KAAKwgB,EAASpO,GAHrB5S,KAAKsyI,aAAaC,EAAQ3/H,GAAOu6H,EAAQnsH,EAASpO,EAAO,KAMjE,OAAOu6H,GAQXsD,EAAS/xI,UAAY,SAAUwQ,EAAWxM,GACtC,IAAKwM,EACD,OAAOxM,EAEX,GAAKA,EAAL,CAGA,IAAgC,IAA5BwM,EAAUlM,QAAQ,KAClB,OAAON,EAAKwM,GAIhB,IAFA,IAAI3Q,EAAQmE,EACRyM,EAASD,EAAU1S,MAAM,KACpBX,EAAI,EAAGA,EAAIsT,EAAO1U,QACV,MAAT8D,EAD2B1C,IAI/B0C,EAAQA,EAAM4Q,EAAOtT,IAEzB,OAAO0C,IAUXkyI,EAASphI,SAAW,SAAUH,EAAW3Q,EAAOnB,GAC5C,IAGIvB,EAEAyT,EALAC,EAAOL,EAAU5S,WAAWE,MAAM,KAClCgT,EAAQpS,GAAO,GACfqS,EAAUD,EAEV/U,EAAS8U,EAAK9U,OAElB,IAAKoB,EAAI,EAAGA,EAAIpB,EAAQoB,IACpByT,EAAMC,EAAK1T,GACPA,EAAI,IAAMpB,EACVgV,EAAQH,QAAiB7Q,IAAVF,OAAsBE,EAAYF,EAE5C,YAAkBkR,EAAQH,MAC/BG,EAAQH,GAAO,IAEnBG,EAAUA,EAAQH,GAEtB,OAAOE,GAQXihI,EAASxyD,KAAO,SAAUu0D,EAAIhG,EAAOuB,GACjC,GAAIyE,EAAG/3I,QAAU,EACb,OAAO+3I,EAEX,IAAIC,EAASnvH,UAAUkvH,EAAG/3I,OAAS,GAAG6B,WAAY,IAC9CywC,EAAOylG,EAAG/0I,MAAM,EAAGg1I,GACnBzlG,EAAQwlG,EAAG/0I,MAAMg1I,GAGrB,OAFA1lG,EAAO/sC,KAAKi+E,KAAKlxC,EAAMy/F,EAAOuB,GAC9B/gG,EAAQhtC,KAAKi+E,KAAKjxC,EAAOw/F,EAAOuB,GACzB/tI,KAAK4P,MAAMm9B,EAAMC,EAAOw/F,EAAOuB,IAE1C0C,EAASiC,iBAAmB,SAAUn0I,GAClC,MAAqB,iBAAVA,EACAA,EAEEA,EAAM/B,MAAM,IACH+E,KAAI,SAAUyd,GAAQ,OAAOA,KAAQyxH,EAASkC,WAAalC,EAASkC,WAAW3zH,GAAQA,KAC7F/e,KAAK,KAEzBwwI,EAAS7gI,MAAQ,SAAUm9B,EAAMC,EAAOugG,EAAWQ,GAG/C,IAFA,IACI6E,EADAxwI,EAAS,GAEN2qC,EAAKtyC,OAAS,GAAKuyC,EAAMvyC,OAAS,GAG7Bm4I,EAFJ7lG,EAAKtyC,OAAS,GAAKuyC,EAAMvyC,OAAS,EAC9BszI,EACUA,EAAS/tI,KAAK6xI,OAAO9kG,EAAM,EAAGwgG,GAAYvtI,KAAK6xI,OAAO7kG,EAAO,EAAGugG,GAAYxgG,EAAK,GAAIC,EAAM,KAAO,EAAID,EAAOC,EAG7GD,EAAK,GAAGwgG,GAAaxgG,EAAK,GAAGwgG,GAAaxgG,EAAOC,EAIrDD,EAAKtyC,OAAS,EAAIsyC,EAAOC,EAEvC5qC,EAAO5B,KAAKoyI,EAAQh4I,SAExB,OAAOwH,GAEXquI,EAASoB,OAAS,SAAUjvI,EAAOP,EAAOmqI,GACtC,OAAOA,EAAQxsI,KAAKtB,UAAU8tI,EAAO5pI,EAAMP,IAAUO,EAAMP,IAE/DouI,EAAStxI,YAAc,SAAUkU,GAC7B,OAAOA,EAAqB,iBAARA,EAAmBA,EAAIlU,cAAgBkU,EAAI/W,WAAsB,IAAR+W,IAAqB,IAARA,EAAiBA,EAAI/W,WAAa,IAUhIm0I,EAASoC,oBAAsB,SAAUC,EAASC,EAAQC,EAAQC,GAC9D,GAAIF,KAAUD,EAAS,CACnB,IAAIjgI,EAAMigI,EAAQC,GAAQC,EAAQC,GAC7B,YAAkBpgI,KACnBmgI,EAASngI,GAGjB,OAAOmgI,GAEXvC,EAASyC,aAAe,SAAUC,EAAKC,EAAIhqI,GACvC,IAAIqqD,EAAM,GAOV,OANAg9E,EAASoC,oBAAoBM,EAAK,YAAa,CAC3CC,GAAIA,EACJhqI,MAAOA,EACP2F,OAAQ3F,EAAM2F,OACdskI,UAAW5/E,IAERA,GAMXg9E,EAAS6C,cAAgB,SAAUl2I,GAC/B,QAAUA,GAASA,EAAI8D,cAAgBjE,QAK3CwzI,EAAS8C,OAAS,WACd,IAAIhlD,EAAM,KAEV,IACIA,EAAM,IAAIloF,OAAc,eAE5B,MAAOxL,IAGP,QAAS0zF,GAAQ,oBAAqBA,GAM1CkiD,EAAS+C,QAAU,SAAUxyH,GACzB,IACIyyH,EACJ,OAAQzyH,GAAU,IAAM,uCAAuC3f,QAAQ,MAAM,SAAUgS,EAAKxX,GACxF,GAAI,WAAYwK,QAAU,oBAAqBs+B,OAAQ,CACnD,IAAIrkC,EAAM,IAAIozI,WAAW,GACzBrtI,OAAOs+B,OAAOC,gBAAgBtkC,GAC9BmzI,EAAOnzI,EAAI,GAAK,GAAK,OAGrBmzI,EAAuB,GAAhB79H,KAAKsjB,SAAgB,EAEhC,MAXO,mBAWW,KAANr9B,EAAkB,EAAP43I,EAAa,EAAMA,OAQlDhD,EAASkD,OAAS,SAAUtgI,GACxB,OAAOA,SAUXo9H,EAASmD,oBAAsB,SAAUhxI,EAAO4pI,EAAOuB,GACnD,IAAIruF,EACAkzF,EACAtjI,EACAzT,EAAI,EACJg4I,EAA2D,iBAArCpD,EAASoB,OAAOjvI,EAAO,EAAG4pI,GACpD,GAAI5pI,EAAMnI,OACN,KAAO,YAAkBilD,IAAW7jD,EAAI+G,EAAMnI,QAC1CilD,EAAS+wF,EAASoB,OAAOjvI,EAAO/G,EAAG2wI,GACnCl9H,EAAM1M,EAAM/G,KAGpB,KAAOA,EAAI+G,EAAMnI,OAAQoB,IACrB+2I,EAAUnC,EAASoB,OAAOjvI,EAAO/G,EAAG2wI,GAChC,YAAkBoG,KAGlBiB,IACAn0F,GAAUA,EACVkzF,GAAWA,GAEX7E,EAASruF,EAAQkzF,GAAW,IAC5BlzF,EAASkzF,EACTtjI,EAAM1M,EAAM/G,KAGpB,OAAOyT,GAWXmhI,EAASvD,SAAW,SAAU6C,EAAMxC,EAAWuG,GAC3CA,GAAyB,YAAkBA,IAAkCA,EAC7E,IACIzgI,EADAjR,EAAS,GAEThC,EAAM,GAQV,OAPA2vI,EAAK9sI,SAAQ,SAAUskB,EAAMllB,IACzBgR,EAA+B,iBAAjB08H,EAAK1tI,GAAuBouI,EAASoB,OAAO9B,EAAM1tI,EAAOkrI,GAAawC,EAAK1tI,MAC5EjC,IACTgC,EAAO5B,KAAMszI,EAA+B/D,EAAK1tI,GAAXgR,GACtCjT,EAAIiT,GAAO,MAGZjR,GAMXquI,EAASsD,qBAAuB,KAKhCtD,EAASuD,kBAAmB,EAK5BvD,EAASt/H,WAAa,SAAUyf,GAC5B,IACI,MAAM,IAAIjoB,MAAMioB,GAEpB,MAAO/1B,GACH,MAAMA,EAAEE,QAAU,KAAOF,EAAEuW,QAGnCq/H,EAASQ,WAAa,CAMlBgD,IAAK,SAAUzB,EAAIhG,GAIf,IAHA,IACIn5H,EADAjR,EAAS,EAETyxI,EAAwD,iBAAlCpD,EAASoB,OAAOW,EAAI,EAAGhG,GACxC3wI,EAAI,EAAGA,EAAI22I,EAAG/3I,OAAQoB,IAC3BwX,EAAMo9H,EAASoB,OAAOW,EAAI32I,EAAG2wI,GACxB1yH,MAAMzG,IAAgB,OAARA,IACXwgI,IACAxgI,GAAOA,GAEXjR,GAAUiR,GAGlB,OAAOjR,GAOX8xI,QAAS,SAAU1B,EAAIhG,GACnB,OAAOiE,EAASQ,WAAWgD,IAAIzB,EAAIhG,GAASgG,EAAG/3I,QAOnDgmB,IAAK,SAAU+xH,EAAIhG,GACf,IAAIuB,EAKJ,MAJqB,mBAAVvB,IACPuB,EAAWvB,EACXA,EAAQ,MAELiE,EAAS/xI,UAAU8tI,EAAOiE,EAASmD,oBAAoBpB,EAAIhG,EAAOuB,GAAY0C,EAASE,eAQlGjwH,IAAK,SAAU8xH,EAAIhG,GACf,IAAIuB,EAKJ,MAJqB,mBAAVvB,IACPuB,EAAWvB,EACXA,EAAQ,MAELiE,EAAS/xI,UAAU8tI,EAAOiE,EAASmD,oBAAoBpB,EAAIhG,EAAOuB,GAAY0C,EAASG,gBAOlGuD,UAAW,SAAU3B,EAAIhG,GACrB,OAAO,IAAI,IAAYgG,GAAI5F,cAAa,IAAI,KAAQU,MAAMd,EAAO,SAAS,GAAM,IAAO/xI,QAO3F25I,WAAY,SAAU5B,EAAIhG,GACtB,OAAO,IAAI,IAAYgG,GAAI5F,cAAa,IAAI,KAAQU,MAAMd,EAAO,SAAS,GAAO,IAAO/xI,QAQ5F2qG,MAAO,SAAUotC,EAAIhG,GACjB,OAAOgG,EAAG/3I,SAMlBg2I,EAAS4D,gBAAkB,CACvB,IAAK,WACL,IAAK,cACL,KAAM,kBACN,KAAM,qBACN,KAAM,QACN,KAAM,WACN,KAAM,WACN,KAAM,WACN,KAAM,cAMV5D,EAAS6D,aAAe,CACpB,IAAK,OACL,IAAK,OACL,KAAM,OACN,KAAM,OACN,KAAM,OACN,KAAM,OACN,SAAY,OACZ,gBAAmB,OACnB,YAAe,OACf,mBAAsB,OACtB,MAAS,OACT,SAAY,QAMhB7D,EAAS8D,cAAgB,CACrB,KAAM,WACN,KAAM,aACN,KAAM,cACN,SAAY,WACZ,WAAc,aACd,SAAY,eAMhB9D,EAAS+D,gBAAkB,CACvB,KAAM,WACN,KAAM,aACN,KAAM,WACN,SAAY,WACZ,WAAc,aACd,SAAY,YAEhB/D,EAASkC,WAAa,CAClB,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IA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","file":"15.f70f6feb6b3bba494f76.js","sourcesContent":["define([\"./_base/kernel\", \"./has\", \"require\", \"./has!host-browser?./domReady\", \"./_base/lang\"], function(dojo, has, require, domReady, lang){\n\t// module:\n\t//\t\tdojo/ready\n\t// note:\n\t//\t\tThis module should be unnecessary in dojo 2.0\n\n\tvar\n\t\t// truthy if DOMContentLoaded or better (e.g., window.onload fired) has been achieved\n\t\tisDomReady = 0,\n\n\t\t// The queue of functions waiting to execute as soon as dojo.ready conditions satisfied\n\t\tloadQ = [],\n\n\t\t// prevent recursion in onLoad\n\t\tonLoadRecursiveGuard = 0,\n\n\t\thandleDomReady = function(){\n\t\t\tisDomReady = 1;\n\t\t\tdojo._postLoad = dojo.config.afterOnLoad = true;\n\t\t\tonEvent();\n\t\t},\n\n\t\tonEvent = function(){\n\t\t\t// Called when some state changes:\n\t\t\t//\t\t- dom ready\n\t\t\t//\t\t- dojo/domReady has finished processing everything in its queue\n\t\t\t//\t\t- task added to loadQ\n\t\t\t//\t\t- require() has finished loading all currently requested modules\n\t\t\t//\n\t\t\t// Run the functions queued with dojo.ready if appropriate.\n\n\n\t\t\t//guard against recursions into this function\n\t\t\tif(onLoadRecursiveGuard){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonLoadRecursiveGuard = 1;\n\n\t\t\t// Run tasks in queue if require() is finished loading modules, the dom is ready, and there are no\n\t\t\t// pending tasks registered via domReady().\n\t\t\t// The last step is necessary so that a user defined dojo.ready() callback is delayed until after the\n\t\t\t// domReady() calls inside of dojo.\t  Failure can be seen on dijit/tests/robot/Dialog_ally.html on IE8\n\t\t\t// because the dijit/focus.js domReady() callback doesn't execute until after the test starts running.\n\t\t\twhile(isDomReady && (!domReady || domReady._Q.length == 0) && (require.idle ? require.idle() : true) && loadQ.length){\n\t\t\t\tvar f = loadQ.shift();\n\t\t\t\ttry{\n\t\t\t\t\tf();\n\t\t\t\t}catch(e){\n\t\t\t\t\t// force the dojo.js on(\"error\") handler do display the message\n\t\t\t\t\te.info = e.message;\n\t\t\t\t\tif(require.signal){\n\t\t\t\t\t\trequire.signal(\"error\", e);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tonLoadRecursiveGuard = 0;\n\t\t};\n\n\t// Check if we should run the next queue operation whenever require() finishes loading modules or domReady\n\t// finishes processing it's queue.\n\trequire.on && require.on(\"idle\", onEvent);\n\tif(domReady){\n\t\tdomReady._onQEmpty = onEvent;\n\t}\n\n\tvar ready = dojo.ready = dojo.addOnLoad = function(priority, context, callback){\n\t\t// summary:\n\t\t//\t\tAdd a function to execute on DOM content loaded and all requested modules have arrived and been evaluated.\n\t\t//\t\tIn most cases, the `domReady` plug-in should suffice and this method should not be needed.\n\t\t//\n\t\t//\t\tWhen called in a non-browser environment, just checks that all requested modules have arrived and been\n\t\t//\t\tevaluated.\n\t\t// priority: Integer?\n\t\t//\t\tThe order in which to exec this callback relative to other callbacks, defaults to 1000\n\t\t// context: Object?|Function\n\t\t//\t\tThe context in which to run execute callback, or a callback if not using context\n\t\t// callback: Function?\n\t\t//\t\tThe function to execute.\n\t\t//\n\t\t// example:\n\t\t//\tSimple DOM and Modules ready syntax\n\t\t//\t|\trequire([\"dojo/ready\"], function(ready){\n\t\t//\t|\t\tready(function(){ alert(\"Dom ready!\"); });\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\tUsing a priority\n\t\t//\t|\trequire([\"dojo/ready\"], function(ready){\n\t\t//\t|\t\tready(2, function(){ alert(\"low priority ready!\"); })\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\tUsing context\n\t\t//\t|\trequire([\"dojo/ready\"], function(ready){\n\t\t//\t|\t\tready(foo, function(){\n\t\t//\t|\t\t\t// in here, this == foo\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\tUsing dojo/hitch style args:\n\t\t//\t|\trequire([\"dojo/ready\"], function(ready){\n\t\t//\t|\t\tvar foo = { dojoReady: function(){ console.warn(this, \"dojo dom and modules ready.\"); } };\n\t\t//\t|\t\tready(foo, \"dojoReady\");\n\t\t//\t|\t});\n\n\t\tvar hitchArgs = lang._toArray(arguments);\n\t\tif(typeof priority != \"number\"){\n\t\t\tcallback = context;\n\t\t\tcontext = priority;\n\t\t\tpriority = 1000;\n\t\t}else{\n\t\t\thitchArgs.shift();\n\t\t}\n\t\tcallback = callback ?\n\t\t\tlang.hitch.apply(dojo, hitchArgs) :\n\t\t\tfunction(){\n\t\t\t\tcontext();\n\t\t\t};\n\t\tcallback.priority = priority;\n\t\tfor(var i = 0; i < loadQ.length && priority >= loadQ[i].priority; i++){}\n\t\tloadQ.splice(i, 0, callback);\n\t\tonEvent();\n\t};\n\n\thas.add(\"dojo-config-addOnLoad\", 1);\n\tif(has(\"dojo-config-addOnLoad\")){\n\t\tvar dca = dojo.config.addOnLoad;\n\t\tif(dca){\n\t\t\tready[(lang.isArray(dca) ? \"apply\" : \"call\")](dojo, dca);\n\t\t}\n\t}\n\n\tif(has(\"dojo-sync-loader\") && dojo.config.parseOnLoad && !dojo.isAsync){\n\t\tready(99, function(){\n\t\t\tif(!dojo.parser){\n\t\t\t\tdojo.deprecated(\"Add explicit require(['dojo/parser']);\", \"\", \"2.0\");\n\t\t\t\trequire([\"dojo/parser\"]);\n\t\t\t}\n\t\t});\n\t}\n\n\tif(domReady){\n\t\tdomReady(handleDomReady);\n\t}else{\n\t\thandleDomReady();\n\t}\n\n\treturn ready;\n});\n","define([\"./kernel\", \"../has\", \"../sniff\"], function(dojo, has){\n\t// module:\n\t//\t\tdojo/_base/lang\n\n\thas.add(\"bug-for-in-skips-shadowed\", function(){\n\t\t// if true, the for-in iterator skips object properties that exist in Object's prototype (IE 6 - ?)\n\t\tfor(var i in {toString: 1}){\n\t\t\treturn 0;\n\t\t}\n\t\treturn 1;\n\t});\n\n\t// Helper methods\n\tvar _extraNames =\n\t\t\thas(\"bug-for-in-skips-shadowed\") ?\n\t\t\t\t\"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor\".split(\".\") : [],\n\n\t\t_extraLen = _extraNames.length,\n\n\t\tgetProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){\n\t\t\tif(!context){\n\t\t\t\tif(parts[0] && dojo.scopeMap[parts[0]]) {\n\t\t\t\t\t// Voodoo code from the old days where \"dojo\" or \"dijit\" maps to some special object\n\t\t\t\t\t// rather than just window.dojo\n\t\t\t\t\tcontext = dojo.scopeMap[parts.shift()][1];\n\t\t\t\t}else{\n\t\t\t\t\tcontext = dojo.global;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttry{\n\t\t\t\tfor(var i = 0; i < parts.length; i++){\n\t\t\t\t\tvar p = parts[i];\n\t\t\t\t\tif(!(p in context)){\n\t\t\t\t\t\tif(create){\n\t\t\t\t\t\t\tcontext[p] = {};\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\treturn;\t\t// return undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontext = context[p];\n\t\t\t\t}\n\t\t\t\treturn context; // mixed\n\t\t\t}catch(e){\n\t\t\t\t// \"p in context\" throws an exception when context is a number, boolean, etc. rather than an object,\n\t\t\t\t// so in that corner case just return undefined (by having no return statement)\n\t\t\t}\n\t\t},\n\n\t\topts = Object.prototype.toString,\n\n\t\tefficient = function(obj, offset, startWith){\n\t\t\treturn (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0));\n\t\t},\n\n\t\t_pattern = /\\{([^\\}]+)\\}/g;\n\n\t// Module export\n\tvar lang = {\n\t\t// summary:\n\t\t//\t\tThis module defines Javascript language extensions.\n\n\t\t// _extraNames: String[]\n\t\t//\t\tLists property names that must be explicitly processed during for-in iteration\n\t\t//\t\tin environments that have has(\"bug-for-in-skips-shadowed\") true.\n\t\t_extraNames:_extraNames,\n\n\t\t_mixin: function(dest, source, copyFunc){\n\t\t\t// summary:\n\t\t\t//\t\tCopies/adds all properties of source to dest; returns dest.\n\t\t\t// dest: Object\n\t\t\t//\t\tThe object to which to copy/add all properties contained in source.\n\t\t\t// source: Object\n\t\t\t//\t\tThe object from which to draw all properties to copy into dest.\n\t\t\t// copyFunc: Function?\n\t\t\t//\t\tThe process used to copy/add a property in source; defaults to the Javascript assignment operator.\n\t\t\t// returns:\n\t\t\t//\t\tdest, as modified\n\t\t\t// description:\n\t\t\t//\t\tAll properties, including functions (sometimes termed \"methods\"), excluding any non-standard extensions\n\t\t\t//\t\tfound in Object.prototype, are copied/added to dest. Copying/adding each particular property is\n\t\t\t//\t\tdelegated to copyFunc (if any); copyFunc defaults to the Javascript assignment operator if not provided.\n\t\t\t//\t\tNotice that by default, _mixin executes a so-called \"shallow copy\" and aggregate types are copied/added by reference.\n\t\t\tvar name, s, i, empty = {};\n\t\t\tfor(name in source){\n\t\t\t\t// the (!(name in empty) || empty[name] !== s) condition avoids copying properties in \"source\"\n\t\t\t\t// inherited from Object.prototype.\t For example, if dest has a custom toString() method,\n\t\t\t\t// don't overwrite it with the toString() method that source inherited from Object.prototype\n\t\t\t\ts = source[name];\n\t\t\t\tif(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){\n\t\t\t\t\tdest[name] = copyFunc ? copyFunc(s) : s;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(has(\"bug-for-in-skips-shadowed\")){\n\t\t\t\tif(source){\n\t\t\t\t\tfor(i = 0; i < _extraLen; ++i){\n\t\t\t\t\t\tname = _extraNames[i];\n\t\t\t\t\t\ts = source[name];\n\t\t\t\t\t\tif(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){\n\t\t\t\t\t\t\tdest[name] = copyFunc ? copyFunc(s) : s;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn dest; // Object\n\t\t},\n\n\t\tmixin: function(dest, sources){\n\t\t\t// summary:\n\t\t\t//\t\tCopies/adds all properties of one or more sources to dest; returns dest.\n\t\t\t// dest: Object\n\t\t\t//\t\tThe object to which to copy/add all properties contained in source. If dest is falsy, then\n\t\t\t//\t\ta new object is manufactured before copying/adding properties begins.\n\t\t\t// sources: Object...\n\t\t\t//\t\tOne of more objects from which to draw all properties to copy into dest. sources are processed\n\t\t\t//\t\tleft-to-right and if more than one of these objects contain the same property name, the right-most\n\t\t\t//\t\tvalue \"wins\".\n\t\t\t// returns: Object\n\t\t\t//\t\tdest, as modified\n\t\t\t// description:\n\t\t\t//\t\tAll properties, including functions (sometimes termed \"methods\"), excluding any non-standard extensions\n\t\t\t//\t\tfound in Object.prototype, are copied/added from sources to dest. sources are processed left to right.\n\t\t\t//\t\tThe Javascript assignment operator is used to copy/add each property; therefore, by default, mixin\n\t\t\t//\t\texecutes a so-called \"shallow copy\" and aggregate types are copied/added by reference.\n\t\t\t// example:\n\t\t\t//\t\tmake a shallow copy of an object\n\t\t\t//\t|\tvar copy = lang.mixin({}, source);\n\t\t\t// example:\n\t\t\t//\t\tmany class constructors often take an object which specifies\n\t\t\t//\t\tvalues to be configured on the object. In this case, it is\n\t\t\t//\t\toften simplest to call `lang.mixin` on the `this` object:\n\t\t\t//\t|\tdeclare(\"acme.Base\", null, {\n\t\t\t//\t|\t\tconstructor: function(properties){\n\t\t\t//\t|\t\t\t// property configuration:\n\t\t\t//\t|\t\t\tlang.mixin(this, properties);\n\t\t\t//\t|\n\t\t\t//\t|\t\t\tconsole.log(this.quip);\n\t\t\t//\t|\t\t\t//\t...\n\t\t\t//\t|\t\t},\n\t\t\t//\t|\t\tquip: \"I wasn't born yesterday, you know - I've seen movies.\",\n\t\t\t//\t|\t\t// ...\n\t\t\t//\t|\t});\n\t\t\t//\t|\n\t\t\t//\t|\t// create an instance of the class and configure it\n\t\t\t//\t|\tvar b = new acme.Base({quip: \"That's what it does!\" });\n\t\t\t// example:\n\t\t\t//\t\tcopy in properties from multiple objects\n\t\t\t//\t|\tvar flattened = lang.mixin(\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tname: \"Frylock\",\n\t\t\t//\t|\t\t\tbraces: true\n\t\t\t//\t|\t\t},\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tname: \"Carl Brutanananadilewski\"\n\t\t\t//\t|\t\t}\n\t\t\t//\t|\t);\n\t\t\t//\t|\n\t\t\t//\t|\t// will print \"Carl Brutanananadilewski\"\n\t\t\t//\t|\tconsole.log(flattened.name);\n\t\t\t//\t|\t// will print \"true\"\n\t\t\t//\t|\tconsole.log(flattened.braces);\n\n\t\t\tif(!dest){ dest = {}; }\n\t\t\tfor(var i = 1, l = arguments.length; i < l; i++){\n\t\t\t\tlang._mixin(dest, arguments[i]);\n\t\t\t}\n\t\t\treturn dest; // Object\n\t\t},\n\n\t\tsetObject: function(name, value, context){\n\t\t\t// summary:\n\t\t\t//\t\tSet a property from a dot-separated string, such as \"A.B.C\"\n\t\t\t// description:\n\t\t\t//\t\tUseful for longer api chains where you have to test each object in\n\t\t\t//\t\tthe chain, or when you have an object reference in string format.\n\t\t\t//\t\tObjects are created as needed along `path`. Returns the passed\n\t\t\t//\t\tvalue if setting is successful or `undefined` if not.\n\t\t\t// name: String\n\t\t\t//\t\tPath to a property, in the form \"A.B.C\".\n\t\t\t// value: anything\n\t\t\t//\t\tvalue or object to place at location given by name\n\t\t\t// context: Object?\n\t\t\t//\t\tOptional. Object to use as root of path. Defaults to\n\t\t\t//\t\t`dojo.global`.\n\t\t\t// example:\n\t\t\t//\t\tset the value of `foo.bar.baz`, regardless of whether\n\t\t\t//\t\tintermediate objects already exist:\n\t\t\t//\t| lang.setObject(\"foo.bar.baz\", value);\n\t\t\t// example:\n\t\t\t//\t\twithout `lang.setObject`, we often see code like this:\n\t\t\t//\t| // ensure that intermediate objects are available\n\t\t\t//\t| if(!obj[\"parent\"]){ obj.parent = {}; }\n\t\t\t//\t| if(!obj.parent[\"child\"]){ obj.parent.child = {}; }\n\t\t\t//\t| // now we can safely set the property\n\t\t\t//\t| obj.parent.child.prop = \"some value\";\n\t\t\t//\t\twhereas with `lang.setObject`, we can shorten that to:\n\t\t\t//\t| lang.setObject(\"parent.child.prop\", \"some value\", obj);\n\n\t\t\tvar parts = name.split(\".\"), p = parts.pop(), obj = getProp(parts, true, context);\n\t\t\treturn obj && p ? (obj[p] = value) : undefined; // Object\n\t\t},\n\n\t\tgetObject: function(name, create, context){\n\t\t\t// summary:\n\t\t\t//\t\tGet a property from a dot-separated string, such as \"A.B.C\"\n\t\t\t// description:\n\t\t\t//\t\tUseful for longer api chains where you have to test each object in\n\t\t\t//\t\tthe chain, or when you have an object reference in string format.\n\t\t\t// name: String\n\t\t\t//\t\tPath to an property, in the form \"A.B.C\".\n\t\t\t// create: Boolean?\n\t\t\t//\t\tOptional. Defaults to `false`. If `true`, Objects will be\n\t\t\t//\t\tcreated at any point along the 'path' that is undefined.\n\t\t\t// context: Object?\n\t\t\t//\t\tOptional. Object to use as root of path. Defaults to\n\t\t\t//\t\t'dojo.global'. Null may be passed.\n\t\t\treturn !name ? context : getProp(name.split(\".\"), create, context); // Object\n\t\t},\n\n\t\texists: function(name, obj){\n\t\t\t// summary:\n\t\t\t//\t\tdetermine if an object supports a given method\n\t\t\t// description:\n\t\t\t//\t\tuseful for longer api chains where you have to test each object in\n\t\t\t//\t\tthe chain. Useful for object and method detection.\n\t\t\t// name: String\n\t\t\t//\t\tPath to an object, in the form \"A.B.C\".\n\t\t\t// obj: Object?\n\t\t\t//\t\tObject to use as root of path. Defaults to\n\t\t\t//\t\t'dojo.global'. Null may be passed.\n\t\t\t// example:\n\t\t\t//\t| // define an object\n\t\t\t//\t| var foo = {\n\t\t\t//\t|\t\tbar: { }\n\t\t\t//\t| };\n\t\t\t//\t|\n\t\t\t//\t| // search the global scope\n\t\t\t//\t| lang.exists(\"foo.bar\"); // true\n\t\t\t//\t| lang.exists(\"foo.bar.baz\"); // false\n\t\t\t//\t|\n\t\t\t//\t| // search from a particular scope\n\t\t\t//\t| lang.exists(\"bar\", foo); // true\n\t\t\t//\t| lang.exists(\"bar.baz\", foo); // false\n\t\t\treturn lang.getObject(name, false, obj) !== undefined; // Boolean\n\t\t},\n\n\t\t// Crockford (ish) functions\n\n\t\tisString: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturn true if it is a String\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn (typeof it == \"string\" || it instanceof String); // Boolean\n\t\t},\n\n\t\tisArray: Array.isArray || function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturn true if it is an Array.\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn opts.call(it) == \"[object Array]\"; // Boolean\n\t\t},\n\n\t\tisFunction: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturn true if it is a Function\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn opts.call(it) === \"[object Function]\";\n\t\t},\n\n\t\tisObject: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturns true if it is a JavaScript object (or an Array, a Function\n\t\t\t//\t\tor null)\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn it !== undefined &&\n\t\t\t\t(it === null || typeof it == \"object\" || lang.isArray(it) || lang.isFunction(it)); // Boolean\n\t\t},\n\n\t\tisArrayLike: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tsimilar to isArray() but more permissive\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\t// returns:\n\t\t\t//\t\tIf it walks like a duck and quacks like a duck, return `true`\n\t\t\t// description:\n\t\t\t//\t\tDoesn't strongly test for \"arrayness\".  Instead, settles for \"isn't\n\t\t\t//\t\ta string or number and has a length property\". Arguments objects\n\t\t\t//\t\tand DOM collections will return true when passed to\n\t\t\t//\t\tisArrayLike(), but will return false when passed to\n\t\t\t//\t\tisArray().\n\t\t\treturn !!it && // Boolean\n\t\t\t\t// keep out built-in constructors (Number, String, ...) which have length\n\t\t\t\t// properties\n\t\t\t\t!lang.isString(it) && !lang.isFunction(it) &&\n\t\t\t\t!(it.tagName && it.tagName.toLowerCase() == 'form') &&\n\t\t\t\t(lang.isArray(it) || isFinite(it.length));\n\t\t},\n\n\t\tisAlien: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturns true if it is a built-in function or some other kind of\n\t\t\t//\t\toddball that *should* report as a function but doesn't\n\t\t\treturn it && !lang.isFunction(it) && /\\{\\s*\\[native code\\]\\s*\\}/.test(String(it)); // Boolean\n\t\t},\n\n\t\textend: function(ctor, props){\n\t\t\t// summary:\n\t\t\t//\t\tAdds all properties and methods of props to constructor's\n\t\t\t//\t\tprototype, making them available to all instances created with\n\t\t\t//\t\tconstructor.\n\t\t\t// ctor: Object\n\t\t\t//\t\tTarget constructor to extend.\n\t\t\t// props: Object\n\t\t\t//\t\tOne or more objects to mix into ctor.prototype\n\t\t\tfor(var i=1, l=arguments.length; i<l; i++){\n\t\t\t\tlang._mixin(ctor.prototype, arguments[i]);\n\t\t\t}\n\t\t\treturn ctor; // Object\n\t\t},\n\n\t\t_hitchArgs: function(scope, method){\n\t\t\tvar pre = lang._toArray(arguments, 2);\n\t\t\tvar named = lang.isString(method);\n\t\t\treturn function(){\n\t\t\t\t// arrayify arguments\n\t\t\t\tvar args = lang._toArray(arguments);\n\t\t\t\t// locate our method\n\t\t\t\tvar f = named ? (scope||dojo.global)[method] : method;\n\t\t\t\t// invoke with collected args\n\t\t\t\treturn f && f.apply(scope || this, pre.concat(args)); // mixed\n\t\t\t}; // Function\n\t\t},\n\n\t\thitch: function(scope, method){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a function that will only ever execute in the given scope.\n\t\t\t//\t\tThis allows for easy use of object member functions\n\t\t\t//\t\tin callbacks and other places in which the \"this\" keyword may\n\t\t\t//\t\totherwise not reference the expected scope.\n\t\t\t//\t\tAny number of default positional arguments may be passed as parameters\n\t\t\t//\t\tbeyond \"method\".\n\t\t\t//\t\tEach of these values will be used to \"placehold\" (similar to curry)\n\t\t\t//\t\tfor the hitched function.\n\t\t\t// scope: Object\n\t\t\t//\t\tThe scope to use when method executes. If method is a string,\n\t\t\t//\t\tscope is also the object containing method.\n\t\t\t// method: Function|String...\n\t\t\t//\t\tA function to be hitched to scope, or the name of the method in\n\t\t\t//\t\tscope to be hitched.\n\t\t\t// example:\n\t\t\t//\t|\tlang.hitch(foo, \"bar\")();\n\t\t\t//\t\truns foo.bar() in the scope of foo\n\t\t\t// example:\n\t\t\t//\t|\tlang.hitch(foo, myFunction);\n\t\t\t//\t\treturns a function that runs myFunction in the scope of foo\n\t\t\t// example:\n\t\t\t//\t\tExpansion on the default positional arguments passed along from\n\t\t\t//\t\thitch. Passed args are mixed first, additional args after.\n\t\t\t//\t|\tvar foo = { bar: function(a, b, c){ console.log(a, b, c); } };\n\t\t\t//\t|\tvar fn = lang.hitch(foo, \"bar\", 1, 2);\n\t\t\t//\t|\tfn(3); // logs \"1, 2, 3\"\n\t\t\t// example:\n\t\t\t//\t|\tvar foo = { bar: 2 };\n\t\t\t//\t|\tlang.hitch(foo, function(){ this.bar = 10; })();\n\t\t\t//\t\texecute an anonymous function in scope of foo\n\t\t\tif(arguments.length > 2){\n\t\t\t\treturn lang._hitchArgs.apply(dojo, arguments); // Function\n\t\t\t}\n\t\t\tif(!method){\n\t\t\t\tmethod = scope;\n\t\t\t\tscope = null;\n\t\t\t}\n\t\t\tif(lang.isString(method)){\n\t\t\t\tscope = scope || dojo.global;\n\t\t\t\tif(!scope[method]){ throw(['lang.hitch: scope[\"', method, '\"] is null (scope=\"', scope, '\")'].join('')); }\n\t\t\t\treturn function(){ return scope[method].apply(scope, arguments || []); }; // Function\n\t\t\t}\n\t\t\treturn !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function\n\t\t},\n\n\t\tdelegate: (function(){\n\t\t\t// boodman/crockford delegation w/ cornford optimization\n\t\t\tfunction TMP(){}\n\t\t\treturn function(obj, props){\n\t\t\t\tTMP.prototype = obj;\n\t\t\t\tvar tmp = new TMP();\n\t\t\t\tTMP.prototype = null;\n\t\t\t\tif(props){\n\t\t\t\t\tlang._mixin(tmp, props);\n\t\t\t\t}\n\t\t\t\treturn tmp; // Object\n\t\t\t};\n\t\t})(),\n\t\t/*=====\n\t\tdelegate: function(obj, props){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a new object which \"looks\" to obj for properties which it\n\t\t\t//\t\tdoes not have a value for. Optionally takes a bag of properties to\n\t\t\t//\t\tseed the returned object with initially.\n\t\t\t// description:\n\t\t\t//\t\tThis is a small implementation of the Boodman/Crockford delegation\n\t\t\t//\t\tpattern in JavaScript. An intermediate object constructor mediates\n\t\t\t//\t\tthe prototype chain for the returned object, using it to delegate\n\t\t\t//\t\tdown to obj for property lookup when object-local lookup fails.\n\t\t\t//\t\tThis can be thought of similarly to ES4's \"wrap\", save that it does\n\t\t\t//\t\tnot act on types but rather on pure objects.\n\t\t\t// obj: Object\n\t\t\t//\t\tThe object to delegate to for properties not found directly on the\n\t\t\t//\t\treturn object or in props.\n\t\t\t// props: Object...\n\t\t\t//\t\tan object containing properties to assign to the returned object\n\t\t\t// returns:\n\t\t\t//\t\tan Object of anonymous type\n\t\t\t// example:\n\t\t\t//\t|\tvar foo = { bar: \"baz\" };\n\t\t\t//\t|\tvar thinger = lang.delegate(foo, { thud: \"xyzzy\"});\n\t\t\t//\t|\tthinger.bar == \"baz\"; // delegated to foo\n\t\t\t//\t|\tfoo.thud == undefined; // by definition\n\t\t\t//\t|\tthinger.thud == \"xyzzy\"; // mixed in from props\n\t\t\t//\t|\tfoo.bar = \"thonk\";\n\t\t\t//\t|\tthinger.bar == \"thonk\"; // still delegated to foo's bar\n\t\t},\n\t\t=====*/\n\n\t\t_toArray: has(\"ie\") ?\n\t\t\t(function(){\n\t\t\t\tfunction slow(obj, offset, startWith){\n\t\t\t\t\tvar arr = startWith||[];\n\t\t\t\t\tfor(var x = offset || 0; x < obj.length; x++){\n\t\t\t\t\t\tarr.push(obj[x]);\n\t\t\t\t\t}\n\t\t\t\t\treturn arr;\n\t\t\t\t}\n\t\t\t\treturn function(obj){\n\t\t\t\t\treturn ((obj.item) ? slow : efficient).apply(this, arguments);\n\t\t\t\t};\n\t\t\t})() : efficient,\n\t\t/*=====\n\t\t _toArray: function(obj, offset, startWith){\n\t\t\t // summary:\n\t\t\t //\t\tConverts an array-like object (i.e. arguments, DOMCollection) to an\n\t\t\t //\t\tarray. Returns a new Array with the elements of obj.\n\t\t\t // obj: Object\n\t\t\t //\t\tthe object to \"arrayify\". We expect the object to have, at a\n\t\t\t //\t\tminimum, a length property which corresponds to integer-indexed\n\t\t\t //\t\tproperties.\n\t\t\t // offset: Number?\n\t\t\t //\t\tthe location in obj to start iterating from. Defaults to 0.\n\t\t\t //\t\tOptional.\n\t\t\t // startWith: Array?\n\t\t\t //\t\tAn array to pack with the properties of obj. If provided,\n\t\t\t //\t\tproperties in obj are appended at the end of startWith and\n\t\t\t //\t\tstartWith is the returned array.\n\t\t },\n\t\t =====*/\n\n\t\tpartial: function(/*Function|String*/ method /*, ...*/){\n\t\t\t// summary:\n\t\t\t//\t\tsimilar to hitch() except that the scope object is left to be\n\t\t\t//\t\twhatever the execution context eventually becomes.\n\t\t\t// description:\n\t\t\t//\t\tCalling lang.partial is the functional equivalent of calling:\n\t\t\t//\t\t|\tlang.hitch(null, funcName, ...);\n\t\t\t// method:\n\t\t\t//\t\tThe function to \"wrap\"\n\t\t\tvar arr = [ null ];\n\t\t\treturn lang.hitch.apply(dojo, arr.concat(lang._toArray(arguments))); // Function\n\t\t},\n\n\t\tclone: function(/*anything*/ src){\n\t\t\t// summary:\n\t\t\t//\t\tClones objects (including DOM nodes) and all children.\n\t\t\t//\t\tWarning: do not clone cyclic structures.\n\t\t\t// src:\n\t\t\t//\t\tThe object to clone\n\t\t\tif(!src || typeof src != \"object\" || lang.isFunction(src)){\n\t\t\t\t// null, undefined, any non-object, or function\n\t\t\t\treturn src;\t// anything\n\t\t\t}\n\t\t\tif(src.nodeType && \"cloneNode\" in src){\n\t\t\t\t// DOM Node\n\t\t\t\treturn src.cloneNode(true); // Node\n\t\t\t}\n\t\t\tif(src instanceof Date){\n\t\t\t\t// Date\n\t\t\t\treturn new Date(src.getTime());\t// Date\n\t\t\t}\n\t\t\tif(src instanceof RegExp){\n\t\t\t\t// RegExp\n\t\t\t\treturn new RegExp(src);   // RegExp\n\t\t\t}\n\t\t\tvar r, i, l;\n\t\t\tif(lang.isArray(src)){\n\t\t\t\t// array\n\t\t\t\tr = [];\n\t\t\t\tfor(i = 0, l = src.length; i < l; ++i){\n\t\t\t\t\tif(i in src){\n\t\t\t\t\t\tr[i] = lang.clone(src[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// we don't clone functions for performance reasons\n\t\t\t\t//\t\t}else if(d.isFunction(src)){\n\t\t\t\t//\t\t\t// function\n\t\t\t\t//\t\t\tr = function(){ return src.apply(this, arguments); };\n\t\t\t}else{\n\t\t\t\t// generic objects\n\t\t\t\tr = src.constructor ? new src.constructor() : {};\n\t\t\t}\n\t\t\treturn lang._mixin(r, src, lang.clone);\n\t\t},\n\n\n\t\ttrim: String.prototype.trim ?\n\t\t\tfunction(str){ return str.trim(); } :\n\t\t\tfunction(str){ return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); },\n\t\t/*=====\n\t\t trim: function(str){\n\t\t\t // summary:\n\t\t\t //\t\tTrims whitespace from both sides of the string\n\t\t\t // str: String\n\t\t\t //\t\tString to be trimmed\n\t\t\t // returns: String\n\t\t\t //\t\tReturns the trimmed string\n\t\t\t // description:\n\t\t\t //\t\tThis version of trim() was selected for inclusion into the base due\n\t\t\t //\t\tto its compact size and relatively good performance\n\t\t\t //\t\t(see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript)\n\t\t\t //\t\tUses String.prototype.trim instead, if available.\n\t\t\t //\t\tThe fastest but longest version of this function is located at\n\t\t\t //\t\tlang.string.trim()\n\t\t },\n\t\t =====*/\n\n\t\treplace: function(tmpl, map, pattern){\n\t\t\t// summary:\n\t\t\t//\t\tPerforms parameterized substitutions on a string. Throws an\n\t\t\t//\t\texception if any parameter is unmatched.\n\t\t\t// tmpl: String\n\t\t\t//\t\tString to be used as a template.\n\t\t\t// map: Object|Function\n\t\t\t//\t\tIf an object, it is used as a dictionary to look up substitutions.\n\t\t\t//\t\tIf a function, it is called for every substitution with following parameters:\n\t\t\t//\t\ta whole match, a name, an offset, and the whole template\n\t\t\t//\t\tstring (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace\n\t\t\t//\t\tfor more details).\n\t\t\t// pattern: RegEx?\n\t\t\t//\t\tOptional regular expression objects that overrides the default pattern.\n\t\t\t//\t\tMust be global and match one item. The default is: /\\{([^\\}]+)\\}/g,\n\t\t\t//\t\twhich matches patterns like that: \"{xxx}\", where \"xxx\" is any sequence\n\t\t\t//\t\tof characters, which doesn't include \"}\".\n\t\t\t// returns: String\n\t\t\t//\t\tReturns the substituted string.\n\t\t\t// example:\n\t\t\t//\t|\t// uses a dictionary for substitutions:\n\t\t\t//\t|\tlang.replace(\"Hello, {name.first} {name.last} AKA {nick}!\",\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tnick: \"Bob\",\n\t\t\t//\t|\t\t\tname: {\n\t\t\t//\t|\t\t\t\tfirst:\t\"Robert\",\n\t\t\t//\t|\t\t\t\tmiddle: \"X\",\n\t\t\t//\t|\t\t\t\tlast:\t\t\"Cringely\"\n\t\t\t//\t|\t\t\t}\n\t\t\t//\t|\t\t});\n\t\t\t//\t|\t// returns: Hello, Robert Cringely AKA Bob!\n\t\t\t// example:\n\t\t\t//\t|\t// uses an array for substitutions:\n\t\t\t//\t|\tlang.replace(\"Hello, {0} {2}!\",\n\t\t\t//\t|\t\t[\"Robert\", \"X\", \"Cringely\"]);\n\t\t\t//\t|\t// returns: Hello, Robert Cringely!\n\t\t\t// example:\n\t\t\t//\t|\t// uses a function for substitutions:\n\t\t\t//\t|\tfunction sum(a){\n\t\t\t//\t|\t\tvar t = 0;\n\t\t\t//\t|\t\tarrayforEach(a, function(x){ t += x; });\n\t\t\t//\t|\t\treturn t;\n\t\t\t//\t|\t}\n\t\t\t//\t|\tlang.replace(\n\t\t\t//\t|\t\t\"{count} payments averaging {avg} USD per payment.\",\n\t\t\t//\t|\t\tlang.hitch(\n\t\t\t//\t|\t\t\t{ payments: [11, 16, 12] },\n\t\t\t//\t|\t\t\tfunction(_, key){\n\t\t\t//\t|\t\t\t\tswitch(key){\n\t\t\t//\t|\t\t\t\t\tcase \"count\": return this.payments.length;\n\t\t\t//\t|\t\t\t\t\tcase \"min\":\t\treturn Math.min.apply(Math, this.payments);\n\t\t\t//\t|\t\t\t\t\tcase \"max\":\t\treturn Math.max.apply(Math, this.payments);\n\t\t\t//\t|\t\t\t\t\tcase \"sum\":\t\treturn sum(this.payments);\n\t\t\t//\t|\t\t\t\t\tcase \"avg\":\t\treturn sum(this.payments) / this.payments.length;\n\t\t\t//\t|\t\t\t\t}\n\t\t\t//\t|\t\t\t}\n\t\t\t//\t|\t\t)\n\t\t\t//\t|\t);\n\t\t\t//\t|\t// prints: 3 payments averaging 13 USD per payment.\n\t\t\t// example:\n\t\t\t//\t|\t// uses an alternative PHP-like pattern for substitutions:\n\t\t\t//\t|\tlang.replace(\"Hello, ${0} ${2}!\",\n\t\t\t//\t|\t\t[\"Robert\", \"X\", \"Cringely\"], /\\$\\{([^\\}]+)\\}/g);\n\t\t\t//\t|\t// returns: Hello, Robert Cringely!\n\n\t\t\treturn tmpl.replace(pattern || _pattern, lang.isFunction(map) ?\n\t\t\t\tmap : function(_, k){ return lang.getObject(k, false, map); });\n\t\t}\n\t};\n\n\thas(\"extend-dojo\") && lang.mixin(dojo, lang);\n\n\treturn lang;\n});\n","define([\"./kernel\", \"../has\", \"./lang\"], function(dojo, has, lang){\n\t// module:\n\t//\t\tdojo/_base/array\n\n\t// our old simple function builder stuff\n\tvar cache = {}, u;\n\n\tfunction buildFn(fn){\n\t\treturn cache[fn] = new Function(\"item\", \"index\", \"array\", fn); // Function\n\t}\n\t// magic snippet: if(typeof fn == \"string\") fn = cache[fn] || buildFn(fn);\n\n\t// every & some\n\n\tfunction everyOrSome(some){\n\t\tvar every = !some;\n\t\treturn function(a, fn, o){\n\t\t\tvar i = 0, l = a && a.length || 0, result;\n\t\t\tif(l && typeof a == \"string\") a = a.split(\"\");\n\t\t\tif(typeof fn == \"string\") fn = cache[fn] || buildFn(fn);\n\t\t\tif(o){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tresult = !fn.call(o, a[i], i, a);\n\t\t\t\t\tif(some ^ result){\n\t\t\t\t\t\treturn !result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tresult = !fn(a[i], i, a);\n\t\t\t\t\tif(some ^ result){\n\t\t\t\t\t\treturn !result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn every; // Boolean\n\t\t};\n\t}\n\n\t// indexOf, lastIndexOf\n\n\tfunction index(up){\n\t\tvar delta = 1, lOver = 0, uOver = 0;\n\t\tif(!up){\n\t\t\tdelta = lOver = uOver = -1;\n\t\t}\n\t\treturn function(a, x, from, last){\n\t\t\tif(last && delta > 0){\n\t\t\t\t// TODO: why do we use a non-standard signature? why do we need \"last\"?\n\t\t\t\treturn array.lastIndexOf(a, x, from);\n\t\t\t}\n\t\t\tvar l = a && a.length || 0, end = up ? l + uOver : lOver, i;\n\t\t\tif(from === u){\n\t\t\t\ti = up ? lOver : l + uOver;\n\t\t\t}else{\n\t\t\t\tif(from < 0){\n\t\t\t\t\ti = l + from;\n\t\t\t\t\tif(i < 0){\n\t\t\t\t\t\ti = lOver;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\ti = from >= l ? l + uOver : from;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(l && typeof a == \"string\") a = a.split(\"\");\n\t\t\tfor(; i != end; i += delta){\n\t\t\t\tif(a[i] == x){\n\t\t\t\t\treturn i; // Number\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1; // Number\n\t\t};\n\t}\n\n\tvar array = {\n\t\t// summary:\n\t\t//\t\tThe Javascript v1.6 array extensions.\n\n\t\tevery: everyOrSome(false),\n\t\t/*=====\n\t\t every: function(arr, callback, thisObject){\n\t\t\t // summary:\n\t\t\t //\t\tDetermines whether or not every item in arr satisfies the\n\t\t\t //\t\tcondition implemented by callback.\n\t\t\t // arr: Array|String\n\t\t\t //\t\tthe array to iterate on. If a string, operates on individual characters.\n\t\t\t // callback: Function|String\n\t\t\t //\t\ta function is invoked with three arguments: item, index,\n\t\t\t //\t\tand array and returns true if the condition is met.\n\t\t\t // thisObject: Object?\n\t\t\t //\t\tmay be used to scope the call to callback\n\t\t\t // returns: Boolean\n\t\t\t // description:\n\t\t\t //\t\tThis function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when\n\t\t\t //\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t //\t\tthe callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array.\n\t\t\t //\t\tFor more details, see:\n\t\t\t //\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/every\n\t\t\t // example:\n\t\t\t //\t|\t// returns false\n\t\t\t //\t|\tarray.every([1, 2, 3, 4], function(item){ return item>1; });\n\t\t\t // example:\n\t\t\t //\t|\t// returns true\n\t\t\t //\t|\tarray.every([1, 2, 3, 4], function(item){ return item>0; });\n\t\t },\n\t\t =====*/\n\n\t\tsome: everyOrSome(true),\n\t\t/*=====\n\t\tsome: function(arr, callback, thisObject){\n\t\t\t// summary:\n\t\t\t//\t\tDetermines whether or not any item in arr satisfies the\n\t\t\t//\t\tcondition implemented by callback.\n\t\t\t// arr: Array|String\n\t\t\t//\t\tthe array to iterate over. If a string, operates on individual characters.\n\t\t\t// callback: Function|String\n\t\t\t//\t\ta function is invoked with three arguments: item, index,\n\t\t\t//\t\tand array and returns true if the condition is met.\n\t\t\t// thisObject: Object?\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// returns: Boolean\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some\n\t\t\t// example:\n\t\t\t//\t| // is true\n\t\t\t//\t| array.some([1, 2, 3, 4], function(item){ return item>1; });\n\t\t\t// example:\n\t\t\t//\t| // is false\n\t\t\t//\t| array.some([1, 2, 3, 4], function(item){ return item<1; });\n\t\t},\n\t\t=====*/\n\n\t\tindexOf: index(true),\n\t\t/*=====\n\t\tindexOf: function(arr, value, fromIndex, findLast){\n\t\t\t// summary:\n\t\t\t//\t\tlocates the first index of the provided value in the\n\t\t\t//\t\tpassed array. If the value is not found, -1 is returned.\n\t\t\t// description:\n\t\t\t//\t\tThis method corresponds to the JavaScript 1.6 Array.indexOf method, with two differences:\n\t\t\t//\n\t\t\t//\t\t1. when run over sparse arrays, the Dojo function invokes the callback for every index\n\t\t\t//\t\t   whereas JavaScript 1.6's indexOf skips the holes in the sparse array.\n\t\t\t//\t\t2. uses equality (==) rather than strict equality (===)\n\t\t\t//\n\t\t\t//\t\tFor details on this method, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf\n\t\t\t// arr: Array\n\t\t\t// value: Object\n\t\t\t// fromIndex: Integer?\n\t\t\t// findLast: Boolean?\n\t\t\t//\t\tMakes indexOf() work like lastIndexOf().  Used internally; not meant for external usage.\n\t\t\t// returns: Number\n\t\t},\n\t\t=====*/\n\n\t\tlastIndexOf: index(false),\n\t\t/*=====\n\t\tlastIndexOf: function(arr, value, fromIndex){\n\t\t\t// summary:\n\t\t\t//\t\tlocates the last index of the provided value in the passed\n\t\t\t//\t\tarray. If the value is not found, -1 is returned.\n\t\t\t// description:\n\t\t \t//\t\tThis method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with two differences:\n\t\t \t//\n\t\t \t//\t\t1. when run over sparse arrays, the Dojo function invokes the callback for every index\n\t\t \t//\t\t   whereas JavaScript 1.6's lasIndexOf skips the holes in the sparse array.\n\t\t \t//\t\t2. uses equality (==) rather than strict equality (===)\n\t\t \t//\n\t\t \t//\t\tFor details on this method, see:\n\t\t \t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf\n\t\t\t// arr: Array,\n\t\t\t// value: Object,\n\t\t\t// fromIndex: Integer?\n\t\t\t// returns: Number\n\t\t},\n\t\t=====*/\n\n\t\tforEach: function(arr, callback, thisObject){\n\t\t\t// summary:\n\t\t\t//\t\tfor every item in arr, callback is invoked. Return values are ignored.\n\t\t\t//\t\tIf you want to break out of the loop, consider using array.every() or array.some().\n\t\t\t//\t\tforEach does not allow breaking out of the loop over the items in arr.\n\t\t\t// arr:\n\t\t\t//\t\tthe array to iterate over. If a string, operates on individual characters.\n\t\t\t// callback:\n\t\t\t//\t\ta function is invoked with three arguments: item, index, and array\n\t\t\t// thisObject:\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach\n\t\t\t// example:\n\t\t\t//\t| // log out all members of the array:\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tfunction(item){\n\t\t\t//\t|\t\t\tconsole.log(item);\n\t\t\t//\t|\t\t}\n\t\t\t//\t| );\n\t\t\t// example:\n\t\t\t//\t| // log out the members and their indexes\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tfunction(item, idx, arr){\n\t\t\t//\t|\t\t\tconsole.log(item, \"at index:\", idx);\n\t\t\t//\t|\t\t}\n\t\t\t//\t| );\n\t\t\t// example:\n\t\t\t//\t| // use a scoped object member as the callback\n\t\t\t//\t|\n\t\t\t//\t| var obj = {\n\t\t\t//\t|\t\tprefix: \"logged via obj.callback:\",\n\t\t\t//\t|\t\tcallback: function(item){\n\t\t\t//\t|\t\t\tconsole.log(this.prefix, item);\n\t\t\t//\t|\t\t}\n\t\t\t//\t| };\n\t\t\t//\t|\n\t\t\t//\t| // specifying the scope function executes the callback in that scope\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tobj.callback,\n\t\t\t//\t|\t\tobj\n\t\t\t//\t| );\n\t\t\t//\t|\n\t\t\t//\t| // alternately, we can accomplish the same thing with lang.hitch()\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tlang.hitch(obj, \"callback\")\n\t\t\t//\t| );\n\t\t\t// arr: Array|String\n\t\t\t// callback: Function|String\n\t\t\t// thisObject: Object?\n\n\t\t\tvar i = 0, l = arr && arr.length || 0;\n\t\t\tif(l && typeof arr == \"string\") arr = arr.split(\"\");\n\t\t\tif(typeof callback == \"string\") callback = cache[callback] || buildFn(callback);\n\t\t\tif(thisObject){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tcallback.call(thisObject, arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tcallback(arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tmap: function(arr, callback, thisObject, Ctr){\n\t\t\t// summary:\n\t\t\t//\t\tapplies callback to each element of arr and returns\n\t\t\t//\t\tan Array with the results\n\t\t\t// arr: Array|String\n\t\t\t//\t\tthe array to iterate on. If a string, operates on\n\t\t\t//\t\tindividual characters.\n\t\t\t// callback: Function|String\n\t\t\t//\t\ta function is invoked with three arguments, (item, index,\n\t\t\t//\t\tarray),\t and returns a value\n\t\t\t// thisObject: Object?\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// returns: Array\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map\n\t\t\t// example:\n\t\t\t//\t| // returns [2, 3, 4, 5]\n\t\t\t//\t| array.map([1, 2, 3, 4], function(item){ return item+1 });\n\n\t\t\t// TODO: why do we have a non-standard signature here? do we need \"Ctr\"?\n\t\t\tvar i = 0, l = arr && arr.length || 0, out = new (Ctr || Array)(l);\n\t\t\tif(l && typeof arr == \"string\") arr = arr.split(\"\");\n\t\t\tif(typeof callback == \"string\") callback = cache[callback] || buildFn(callback);\n\t\t\tif(thisObject){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tout[i] = callback.call(thisObject, arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tout[i] = callback(arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out; // Array\n\t\t},\n\n\t\tfilter: function(arr, callback, thisObject){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a new Array with those items from arr that match the\n\t\t\t//\t\tcondition implemented by callback.\n\t\t\t// arr: Array\n\t\t\t//\t\tthe array to iterate over.\n\t\t\t// callback: Function|String\n\t\t\t//\t\ta function that is invoked with three arguments (item,\n\t\t\t//\t\tindex, array). The return of this function is expected to\n\t\t\t//\t\tbe a boolean which determines whether the passed-in item\n\t\t\t//\t\twill be included in the returned array.\n\t\t\t// thisObject: Object?\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// returns: Array\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter\n\t\t\t// example:\n\t\t\t//\t| // returns [2, 3, 4]\n\t\t\t//\t| array.filter([1, 2, 3, 4], function(item){ return item>1; });\n\n\t\t\t// TODO: do we need \"Ctr\" here like in map()?\n\t\t\tvar i = 0, l = arr && arr.length || 0, out = [], value;\n\t\t\tif(l && typeof arr == \"string\") arr = arr.split(\"\");\n\t\t\tif(typeof callback == \"string\") callback = cache[callback] || buildFn(callback);\n\t\t\tif(thisObject){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tvalue = arr[i];\n\t\t\t\t\tif(callback.call(thisObject, value, i, arr)){\n\t\t\t\t\t\tout.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tvalue = arr[i];\n\t\t\t\t\tif(callback(value, i, arr)){\n\t\t\t\t\t\tout.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out; // Array\n\t\t},\n\n\t\tclearCache: function(){\n\t\t\tcache = {};\n\t\t}\n\t};\n\n\n\thas(\"extend-dojo\") && lang.mixin(dojo, array);\n\n\treturn array;\n});\n","define([\"../global\", \"../has\", \"./config\", \"require\", \"module\"], function(global, has, config, require, module){\n\t// module:\n\t//\t\tdojo/_base/kernel\n\n\t// This module is the foundational module of the dojo boot sequence; it defines the dojo object.\n\n\tvar\n\t\t// loop variables for this module\n\t\ti, p,\n\n\t\t// create dojo, dijit, and dojox\n\t\t// FIXME: in 2.0 remove dijit, dojox being created by dojo\n\t\tdijit = {},\n\t\tdojox = {},\n\t\tdojo = {\n\t\t\t// summary:\n\t\t\t//\t\tThis module is the foundational module of the dojo boot sequence; it defines the dojo object.\n\n\t\t\t// notice dojo takes ownership of the value of the config module\n\t\t\tconfig:config,\n\t\t\tglobal:global,\n\t\t\tdijit:dijit,\n\t\t\tdojox:dojox\n\t\t};\n\n\n\t// Configure the scope map. For a 100% AMD application, the scope map is not needed other than to provide\n\t// a _scopeName property for the dojo, dijit, and dojox root object so those packages can create\n\t// unique names in the global space.\n\t//\n\t// Built, legacy modules use the scope map to allow those modules to be expressed as if dojo, dijit, and dojox,\n\t// where global when in fact they are either global under different names or not global at all. In v1.6-, the\n\t// config variable \"scopeMap\" was used to map names as used within a module to global names. This has been\n\t// subsumed by the AMD map configuration variable which can relocate packages to different names. For backcompat,\n\t// only the \"*\" mapping is supported. See http://livedocs.dojotoolkit.org/developer/design/loader#legacy-cross-domain-mode for details.\n\t//\n\t// The following computations contort the packageMap for this dojo instance into a scopeMap.\n\tvar scopeMap =\n\t\t\t// a map from a name used in a legacy module to the (global variable name, object addressed by that name)\n\t\t\t// always map dojo, dijit, and dojox\n\t\t\t{\n\t\t\t\tdojo:[\"dojo\", dojo],\n\t\t\t\tdijit:[\"dijit\", dijit],\n\t\t\t\tdojox:[\"dojox\", dojox]\n\t\t\t},\n\n\t\tpackageMap =\n\t\t\t// the package map for this dojo instance; note, a foreign loader or no pacakgeMap results in the above default config\n\t\t\t(require.map && require.map[module.id.match(/[^\\/]+/)[0]]),\n\n\t\titem;\n\n\n\t// process all mapped top-level names for this instance of dojo\n\tfor(p in packageMap){\n\t\tif(scopeMap[p]){\n\t\t\t// mapped dojo, dijit, or dojox\n\t\t\tscopeMap[p][0] = packageMap[p];\n\t\t}else{\n\t\t\t// some other top-level name\n\t\t\tscopeMap[p] = [packageMap[p], {}];\n\t\t}\n\t}\n\n\t// publish those names to _scopeName and, optionally, the global namespace\n\tfor(p in scopeMap){\n\t\titem = scopeMap[p];\n\t\titem[1]._scopeName = item[0];\n\t\tif(!config.noGlobals){\n\t\t\tglobal[item[0]] = item[1];\n\t\t}\n\t}\n\tdojo.scopeMap = scopeMap;\n\n\t/*===== dojo.__docParserConfigureScopeMap(scopeMap); =====*/\n\n\t// FIXME: dojo.baseUrl and dojo.config.baseUrl should be deprecated\n\tdojo.baseUrl = dojo.config.baseUrl = require.baseUrl;\n\tdojo.isAsync = !has(\"dojo-loader\") || require.async;\n\tdojo.locale = config.locale;\n\n\tvar rev = \"$Rev:$\".match(/[0-9a-f]{7,}/);\n\tdojo.version = {\n\t\t// summary:\n\t\t//\t\tVersion number of the Dojo Toolkit\n\t\t// description:\n\t\t//\t\tHash about the version, including\n\t\t//\n\t\t//\t\t- major: Integer: Major version. If total version is \"1.2.0beta1\", will be 1\n\t\t//\t\t- minor: Integer: Minor version. If total version is \"1.2.0beta1\", will be 2\n\t\t//\t\t- patch: Integer: Patch version. If total version is \"1.2.0beta1\", will be 0\n\t\t//\t\t- flag: String: Descriptor flag. If total version is \"1.2.0beta1\", will be \"beta1\"\n\t\t//\t\t- revision: Number: The Git rev from which dojo was pulled\n\n\t\tmajor: 1, minor: 16, patch: 4, flag: \"\",\n\t\trevision: rev ? rev[0] : NaN,\n\t\ttoString: function(){\n\t\t\tvar v = dojo.version;\n\t\t\treturn v.major + \".\" + v.minor + \".\" + v.patch + v.flag + \" (\" + v.revision + \")\";\t// String\n\t\t}\n\t};\n\n\t// If has(\"extend-dojo\") is truthy, then as a dojo module is defined it should push it's definitions\n\t// into the dojo object, and conversely. In 2.0, it will likely be unusual to augment another object\n\t// as a result of defining a module. This has feature gives a way to force 2.0 behavior as the code\n\t// is migrated. Absent specific advice otherwise, set extend-dojo to truthy.\n\thas.add(\"extend-dojo\", 1);\n\n\tif(!has(\"csp-restrictions\")){\n\t\t(Function(\"d\", \"d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}\"))(dojo);\n\t}\n\t/*=====\n\tdojo.eval = function(scriptText){\n\t\t// summary:\n\t\t//\t\tA legacy method created for use exclusively by internal Dojo methods. Do not use this method\n\t\t//\t\tdirectly unless you understand its possibly-different implications on the platforms your are targeting.\n\t\t// description:\n\t\t//\t\tMakes an attempt to evaluate scriptText in the global scope. The function works correctly for browsers\n\t\t//\t\tthat support indirect eval.\n\t\t//\n\t\t//\t\tAs usual, IE does not. On IE, the only way to implement global eval is to\n\t\t//\t\tuse execScript. Unfortunately, execScript does not return a value and breaks some current usages of dojo.eval.\n\t\t//\t\tThis implementation uses the technique of executing eval in the scope of a function that is a single scope\n\t\t//\t\tframe below the global scope; thereby coming close to the global scope. Note carefully that\n\t\t//\n\t\t//\t\tdojo.eval(\"var pi = 3.14;\");\n\t\t//\n\t\t//\t\twill define global pi in non-IE environments, but define pi only in a temporary local scope for IE. If you want\n\t\t//\t\tto define a global variable using dojo.eval, write something like\n\t\t//\n\t\t//\t\tdojo.eval(\"window.pi = 3.14;\")\n\t\t// scriptText:\n\t\t//\t\tThe text to evaluation.\n\t\t// returns:\n\t\t//\t\tThe result of the evaluation. Often `undefined`\n\t};\n\t=====*/\n\n\n\tif(has(\"host-rhino\")){\n\t\tdojo.exit = function(exitcode){\n\t\t\tquit(exitcode);\n\t\t};\n\t}else{\n\t\tdojo.exit = function(){\n\t\t};\n\t}\n\n\tif(!has(\"host-webworker\")){\n\t\t// console is immutable in FF30+, https://bugs.dojotoolkit.org/ticket/18100\n\t\thas.add(\"dojo-guarantee-console\",\n\t\t\t// ensure that console.log, console.warn, etc. are defined\n\t\t\t1\n\t\t);\n\t}\n\n\tif(has(\"dojo-guarantee-console\")){\n\t\t// IE 9 bug: https://bugs.dojotoolkit.org/ticket/18197\n\t\thas.add(\"console-as-object\", function () {\n\t\t\treturn Function.prototype.bind && console && typeof console.log === \"object\";\n\t\t});\n\n\t\ttypeof console != \"undefined\" || (console = {});  // intentional assignment\n\t\t//\tBe careful to leave 'log' always at the end\n\t\tvar cn = [\n\t\t\t\"assert\", \"count\", \"debug\", \"dir\", \"dirxml\", \"error\", \"group\",\n\t\t\t\"groupEnd\", \"info\", \"profile\", \"profileEnd\", \"time\", \"timeEnd\",\n\t\t\t\"trace\", \"warn\", \"log\"\n\t\t];\n\t\tvar tn;\n\t\ti = 0;\n\t\twhile((tn = cn[i++])){\n\t\t\tif(!console[tn]){\n\t\t\t\t(function(){\n\t\t\t\t\tvar tcn = tn + \"\";\n\t\t\t\t\tconsole[tcn] = ('log' in console) ? function(){\n\t\t\t\t\t\tvar a = Array.prototype.slice.call(arguments);\n\t\t\t\t\t\ta.unshift(tcn + \":\");\n\t\t\t\t\t\tconsole[\"log\"](a.join(\" \"));\n\t\t\t\t\t} : function(){};\n\t\t\t\t\tconsole[tcn]._fake = true;\n\t\t\t\t})();\n\t\t\t}else if(has(\"console-as-object\")){\n\t\t\t\tconsole[tn] = Function.prototype.bind.call(console[tn], console);\n\t\t\t}\n\t\t}\n\t}\n\n\thas.add(\"dojo-debug-messages\",\n\t\t// include dojo.deprecated/dojo.experimental implementations\n\t\t!!config.isDebug\n\t);\n\tdojo.deprecated = dojo.experimental =  function(){};\n\tif(has(\"dojo-debug-messages\")){\n\t\tdojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){\n\t\t\t// summary:\n\t\t\t//\t\tLog a debug message to indicate that a behavior has been\n\t\t\t//\t\tdeprecated.\n\t\t\t// behaviour: String\n\t\t\t//\t\tThe API or behavior being deprecated. Usually in the form\n\t\t\t//\t\tof \"myApp.someFunction()\".\n\t\t\t// extra: String?\n\t\t\t//\t\tText to append to the message. Often provides advice on a\n\t\t\t//\t\tnew function or facility to achieve the same goal during\n\t\t\t//\t\tthe deprecation period.\n\t\t\t// removal: String?\n\t\t\t//\t\tText to indicate when in the future the behavior will be\n\t\t\t//\t\tremoved. Usually a version number.\n\t\t\t// example:\n\t\t\t//\t| dojo.deprecated(\"myApp.getTemp()\", \"use myApp.getLocaleTemp() instead\", \"1.0\");\n\n\t\t\tvar message = \"DEPRECATED: \" + behaviour;\n\t\t\tif(extra){ message += \" \" + extra; }\n\t\t\tif(removal){ message += \" -- will be removed in version: \" + removal; }\n\t\t\tconsole.warn(message);\n\t\t};\n\n\t\tdojo.experimental = function(/* String */ moduleName, /* String? */ extra){\n\t\t\t// summary:\n\t\t\t//\t\tMarks code as experimental.\n\t\t\t// description:\n\t\t\t//\t\tThis can be used to mark a function, file, or module as\n\t\t\t//\t\texperimental.\t Experimental code is not ready to be used, and the\n\t\t\t//\t\tAPIs are subject to change without notice.\tExperimental code may be\n\t\t\t//\t\tcompleted deleted without going through the normal deprecation\n\t\t\t//\t\tprocess.\n\t\t\t// moduleName: String\n\t\t\t//\t\tThe name of a module, or the name of a module file or a specific\n\t\t\t//\t\tfunction\n\t\t\t// extra: String?\n\t\t\t//\t\tsome additional message for the user\n\t\t\t// example:\n\t\t\t//\t| dojo.experimental(\"dojo.data.Result\");\n\t\t\t// example:\n\t\t\t//\t| dojo.experimental(\"dojo.weather.toKelvin()\", \"PENDING approval from NOAA\");\n\n\t\t\tvar message = \"EXPERIMENTAL: \" + moduleName + \" -- APIs subject to change without notice.\";\n\t\t\tif(extra){ message += \" \" + extra; }\n\t\t\tconsole.warn(message);\n\t\t};\n\t}\n\n\thas.add(\"dojo-modulePaths\",\n\t\t// consume dojo.modulePaths processing\n\t\t1\n\t);\n\tif(has(\"dojo-modulePaths\")){\n\t\t// notice that modulePaths won't be applied to any require's before the dojo/_base/kernel factory is run;\n\t\t// this is the v1.6- behavior.\n\t\tif(config.modulePaths){\n\t\t\tdojo.deprecated(\"dojo.modulePaths\", \"use paths configuration\");\n\t\t\tvar paths = {};\n\t\t\tfor(p in config.modulePaths){\n\t\t\t\tpaths[p.replace(/\\./g, \"/\")] = config.modulePaths[p];\n\t\t\t}\n\t\t\trequire({paths:paths});\n\t\t}\n\t}\n\n\thas.add(\"dojo-moduleUrl\",\n\t\t// include dojo.moduleUrl\n\t\t1\n\t);\n\tif(has(\"dojo-moduleUrl\")){\n\t\tdojo.moduleUrl = function(/*String*/module, /*String?*/url){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a URL relative to a module.\n\t\t\t// example:\n\t\t\t//\t|\tvar pngPath = dojo.moduleUrl(\"acme\",\"images/small.png\");\n\t\t\t//\t|\tconsole.dir(pngPath); // list the object properties\n\t\t\t//\t|\t// create an image and set it's source to pngPath's value:\n\t\t\t//\t|\tvar img = document.createElement(\"img\");\n\t\t\t//\t|\timg.src = pngPath;\n\t\t\t//\t|\t// add our image to the document\n\t\t\t//\t|\tdojo.body().appendChild(img);\n\t\t\t// example:\n\t\t\t//\t\tyou may de-reference as far as you like down the package\n\t\t\t//\t\thierarchy.  This is sometimes handy to avoid lengthy relative\n\t\t\t//\t\turls or for building portable sub-packages. In this example,\n\t\t\t//\t\tthe `acme.widget` and `acme.util` directories may be located\n\t\t\t//\t\tunder different roots (see `dojo.registerModulePath`) but the\n\t\t\t//\t\tthe modules which reference them can be unaware of their\n\t\t\t//\t\trelative locations on the filesystem:\n\t\t\t//\t|\t// somewhere in a configuration block\n\t\t\t//\t|\tdojo.registerModulePath(\"acme.widget\", \"../../acme/widget\");\n\t\t\t//\t|\tdojo.registerModulePath(\"acme.util\", \"../../util\");\n\t\t\t//\t|\n\t\t\t//\t|\t// ...\n\t\t\t//\t|\n\t\t\t//\t|\t// code in a module using acme resources\n\t\t\t//\t|\tvar tmpltPath = dojo.moduleUrl(\"acme.widget\",\"templates/template.html\");\n\t\t\t//\t|\tvar dataPath = dojo.moduleUrl(\"acme.util\",\"resources/data.json\");\n\n\t\t\tdojo.deprecated(\"dojo.moduleUrl()\", \"use require.toUrl\", \"2.0\");\n\n\t\t\t// require.toUrl requires a filetype; therefore, just append the suffix \"/*.*\" to guarantee a filetype, then\n\t\t\t// remove the suffix from the result. This way clients can request a url w/out a filetype. This should be\n\t\t\t// rare, but it maintains backcompat for the v1.x line (note: dojo.moduleUrl will be removed in v2.0).\n\t\t\t// Notice * is an illegal filename so it won't conflict with any real path map that may exist the paths config.\n\t\t\tvar result = null;\n\t\t\tif(module){\n\t\t\t\tresult = require.toUrl(module.replace(/\\./g, \"/\") + (url ? (\"/\" + url) : \"\") + \"/*.*\").replace(/\\/\\*\\.\\*/, \"\") + (url ? \"\" : \"/\");\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tdojo._hasResource = {}; // for backward compatibility with layers built with 1.6 tooling\n\n\treturn dojo;\n});\n","define([\"./has!dom-addeventlistener?:./aspect\", \"./_base/kernel\", \"./sniff\"], function(aspect, dojo, has){\n\n\t\"use strict\";\n\tif(has(\"dom\")){ // check to make sure we are in a browser, this module should work anywhere\n\t\tvar major = window.ScriptEngineMajorVersion;\n\t\thas.add(\"jscript\", major && (major() + ScriptEngineMinorVersion() / 10));\n\t\thas.add(\"event-orientationchange\", has(\"touch\") && !has(\"android\")); // TODO: how do we detect this?\n\t\thas.add(\"event-stopimmediatepropagation\", window.Event && !!window.Event.prototype && !!window.Event.prototype.stopImmediatePropagation);\n\t\thas.add(\"event-focusin\", function(global, doc, element){\n\t\t\treturn 'onfocusin' in element;\n\t\t});\n\n\t\tif(has(\"touch\")){\n\t\t\thas.add(\"touch-can-modify-event-delegate\", function(){\n\t\t\t\t// This feature test checks whether deleting a property of an event delegate works\n\t\t\t\t// for a touch-enabled device. If it works, event delegation can be used as fallback\n\t\t\t\t// for browsers such as Safari in older iOS where deleting properties of the original\n\t\t\t\t// event does not work.\n\t\t\t\tvar EventDelegate = function(){};\n\t\t\t\tEventDelegate.prototype =\n\t\t\t\t\tdocument.createEvent(\"MouseEvents\"); // original event\n\t\t\t\t// Attempt to modify a property of an event delegate and check if\n\t\t\t\t// it succeeds. Depending on browsers and on whether dojo/on's\n\t\t\t\t// strict mode is stripped in a Dojo build, there are 3 known behaviors:\n\t\t\t\t// it may either succeed, or raise an error, or fail to set the property\n\t\t\t\t// without raising an error.\n\t\t\t\ttry{\n\t\t\t\t\tvar eventDelegate = new EventDelegate;\n\t\t\t\t\teventDelegate.target = null;\n\t\t\t\t\treturn eventDelegate.target === null;\n\t\t\t\t}catch(e){\n\t\t\t\t\treturn false; // cannot use event delegation\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\tvar on = function(target, type, listener, dontFix){\n\t\t// summary:\n\t\t//\t\tA function that provides core event listening functionality. With this function\n\t\t//\t\tyou can provide a target, event type, and listener to be notified of\n\t\t//\t\tfuture matching events that are fired.\n\t\t// target: Element|Object\n\t\t//\t\tThis is the target object or DOM element that to receive events from\n\t\t// type: String|Function\n\t\t//\t\tThis is the name of the event to listen for or an extension event type.\n\t\t// listener: Function\n\t\t//\t\tThis is the function that should be called when the event fires.\n\t\t// returns: Object\n\t\t//\t\tAn object with a remove() method that can be used to stop listening for this\n\t\t//\t\tevent.\n\t\t// description:\n\t\t//\t\tTo listen for \"click\" events on a button node, we can do:\n\t\t//\t\t|\tdefine([\"dojo/on\"], function(on){\n\t\t//\t\t|\t\ton(button, \"click\", clickHandler);\n\t\t//\t\t|\t\t...\n\t\t//\t\tEvented JavaScript objects can also have their own events.\n\t\t//\t\t|\tvar obj = new Evented;\n\t\t//\t\t|\ton(obj, \"foo\", fooHandler);\n\t\t//\t\tAnd then we could publish a \"foo\" event:\n\t\t//\t\t|\ton.emit(obj, \"foo\", {key: \"value\"});\n\t\t//\t\tWe can use extension events as well. For example, you could listen for a tap gesture:\n\t\t//\t\t|\tdefine([\"dojo/on\", \"dojo/gesture/tap\", function(on, tap){\n\t\t//\t\t|\t\ton(button, tap, tapHandler);\n\t\t//\t\t|\t\t...\n\t\t//\t\twhich would trigger fooHandler. Note that for a simple object this is equivalent to calling:\n\t\t//\t\t|\tobj.onfoo({key:\"value\"});\n\t\t//\t\tIf you use on.emit on a DOM node, it will use native event dispatching when possible.\n\n\t\tif(typeof target.on == \"function\" && typeof type != \"function\" && !target.nodeType){\n\t\t\t// delegate to the target's on() method, so it can handle it's own listening if it wants (unless it\n\t\t\t// is DOM node and we may be dealing with jQuery or Prototype's incompatible addition to the\n\t\t\t// Element prototype\n\t\t\treturn target.on(type, listener);\n\t\t}\n\t\t// delegate to main listener code\n\t\treturn on.parse(target, type, listener, addListener, dontFix, this);\n\t};\n\ton.pausable =  function(target, type, listener, dontFix){\n\t\t// summary:\n\t\t//\t\tThis function acts the same as on(), but with pausable functionality. The\n\t\t//\t\treturned signal object has pause() and resume() functions. Calling the\n\t\t//\t\tpause() method will cause the listener to not be called for future events. Calling the\n\t\t//\t\tresume() method will cause the listener to again be called for future events.\n\t\tvar paused;\n\t\tvar signal = on(target, type, function(){\n\t\t\tif(!paused){\n\t\t\t\treturn listener.apply(this, arguments);\n\t\t\t}\n\t\t}, dontFix);\n\t\tsignal.pause = function(){\n\t\t\tpaused = true;\n\t\t};\n\t\tsignal.resume = function(){\n\t\t\tpaused = false;\n\t\t};\n\t\treturn signal;\n\t};\n\ton.once = function(target, type, listener, dontFix){\n\t\t// summary:\n\t\t//\t\tThis function acts the same as on(), but will only call the listener once. The\n\t\t//\t\tlistener will be called for the first\n\t\t//\t\tevent that takes place and then listener will automatically be removed.\n\t\tvar signal = on(target, type, function(){\n\t\t\t// remove this listener\n\t\t\tsignal.remove();\n\t\t\t// proceed to call the listener\n\t\t\treturn listener.apply(this, arguments);\n\t\t});\n\t\treturn signal;\n\t};\n\ton.parse = function(target, type, listener, addListener, dontFix, matchesTarget){\n\t\tvar events;\n\t\tif(type.call){\n\t\t\t// event handler function\n\t\t\t// on(node, touch.press, touchListener);\n\t\t\treturn type.call(matchesTarget, target, listener);\n\t\t}\n\n\t\tif(type instanceof Array){\n\t\t\t// allow an array of event names (or event handler functions)\n\t\t\tevents = type;\n\t\t}else if(type.indexOf(\",\") > -1){\n\t\t\t// we allow comma delimited event names, so you can register for multiple events at once\n\t\t\tevents = type.split(/\\s*,\\s*/);\n\t\t}\n\t\tif(events){\n\t\t\tvar handles = [];\n\t\t\tvar i = 0;\n\t\t\tvar eventName;\n\t\t\twhile(eventName = events[i++]){ // intentional assignment\n\t\t\t\thandles.push(on.parse(target, eventName, listener, addListener, dontFix, matchesTarget));\n\t\t\t}\n\t\t\thandles.remove = function(){\n\t\t\t\tfor(var i = 0; i < handles.length; i++){\n\t\t\t\t\thandles[i].remove();\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn handles;\n\t\t}\n\t\treturn addListener(target, type, listener, dontFix, matchesTarget);\n\t};\n\tvar touchEvents = /^touch/;\n\tfunction addListener(target, type, listener, dontFix, matchesTarget){\n\t\t// event delegation:\n\t\tvar selector = type.match(/(.*):(.*)/);\n\t\t// if we have a selector:event, the last one is interpreted as an event, and we use event delegation\n\t\tif(selector){\n\t\t\ttype = selector[2];\n\t\t\tselector = selector[1];\n\t\t\t// create the extension event for selectors and directly call it\n\t\t\treturn on.selector(selector, type).call(matchesTarget, target, listener);\n\t\t}\n\t\t// test to see if it a touch event right now, so we don't have to do it every time it fires\n\t\tif(has(\"touch\")){\n\t\t\tif(touchEvents.test(type)){\n\t\t\t\t// touch event, fix it\n\t\t\t\tlistener = fixTouchListener(listener);\n\t\t\t}\n\t\t\tif(!has(\"event-orientationchange\") && (type == \"orientationchange\")){\n\t\t\t\t//\"orientationchange\" not supported <= Android 2.1,\n\t\t\t\t//but works through \"resize\" on window\n\t\t\t\ttype = \"resize\";\n\t\t\t\ttarget = window;\n\t\t\t\tlistener = fixTouchListener(listener);\n\t\t\t}\n\t\t}\n\t\tif(addStopImmediate){\n\t\t\t// add stopImmediatePropagation if it doesn't exist\n\t\t\tlistener = addStopImmediate(listener);\n\t\t}\n\t\t// normal path, the target is |this|\n\t\tif(target.addEventListener){\n\t\t\t// the target has addEventListener, which should be used if available (might or might not be a node, non-nodes can implement this method as well)\n\t\t\t// check for capture conversions\n\t\t\tvar capture = type in captures,\n\t\t\t\tadjustedType = capture ? captures[type] : type;\n\t\t\ttarget.addEventListener(adjustedType, listener, capture);\n\t\t\t// create and return the signal\n\t\t\treturn {\n\t\t\t\tremove: function(){\n\t\t\t\t\ttarget.removeEventListener(adjustedType, listener, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\ttype = \"on\" + type;\n\t\tif(fixAttach && target.attachEvent){\n\t\t\treturn fixAttach(target, type, listener);\n\t\t}\n\t\tthrow new Error(\"Target must be an event emitter\");\n\t}\n\ton.matches = function(node, selector, context, children, matchesTarget) {\n\t\t// summary:\n\t\t//\t\tCheck if a node match the current selector within the constraint of a context\n\t\t// node: DOMNode\n\t\t//\t\tThe node that originate the event\n\t\t// selector: String\n\t\t//\t\tThe selector to check against\n\t\t// context: DOMNode\n\t\t//\t\tThe context to search in.\n\t\t// children: Boolean\n\t\t//\t\tIndicates if children elements of the selector should be allowed. This defaults to\n\t\t//\t\ttrue\n\t\t// matchesTarget: Object|dojo/query?\n\t\t//\t\tAn object with a property \"matches\" as a function. Default is dojo/query.\n\t\t//\t\tMatching DOMNodes will be done against this function\n\t\t//\t\tThe function must return a Boolean.\n\t\t//\t\tIt will have 3 arguments: \"node\", \"selector\" and \"context\"\n\t\t//\t\tTrue is expected if \"node\" is matching the current \"selector\" in the passed \"context\"\n\t\t// returns: DOMNode?\n\t\t//\t\tThe matching node, if any. Else you get false\n\n\t\t// see if we have a valid matchesTarget or default to dojo/query\n\t\tmatchesTarget = matchesTarget && (typeof matchesTarget.matches == \"function\") ? matchesTarget : dojo.query;\n\t\tchildren = children !== false;\n\t\t// there is a selector, so make sure it matches\n\t\tif(node.nodeType != 1){\n\t\t\t// text node will fail in native match selector\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\twhile(!matchesTarget.matches(node, selector, context)){\n\t\t\tif(node == context || children === false || !(node = node.parentNode) || node.nodeType != 1){ // intentional assignment\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t};\n\ton.selector = function(selector, eventType, children){\n\t\t// summary:\n\t\t//\t\tCreates a new extension event with event delegation. This is based on\n\t\t//\t\tthe provided event type (can be extension event) that\n\t\t//\t\tonly calls the listener when the CSS selector matches the target of the event.\n\t\t//\n\t\t//\t\tThe application must require() an appropriate level of dojo/query to handle the selector.\n\t\t// selector:\n\t\t//\t\tThe CSS selector to use for filter events and determine the |this| of the event listener.\n\t\t// eventType:\n\t\t//\t\tThe event to listen for\n\t\t// children:\n\t\t//\t\tIndicates if children elements of the selector should be allowed. This defaults to\n\t\t//\t\ttrue\n\t\t// example:\n\t\t// |\trequire([\"dojo/on\", \"dojo/mouse\", \"dojo/query!css2\"], function(on, mouse){\n\t\t// |\t\ton(node, on.selector(\".my-class\", mouse.enter), handlerForMyHover);\n\t\treturn function(target, listener){\n\t\t\t// if the selector is function, use it to select the node, otherwise use the matches method\n\t\t\tvar matchesTarget = typeof selector == \"function\" ? {matches: selector} : this,\n\t\t\t\tbubble = eventType.bubble;\n\t\t\tfunction select(eventTarget){\n\t\t\t\treturn on.matches(eventTarget, selector, target, children, matchesTarget);\n\t\t\t}\n\t\t\tif(bubble){\n\t\t\t\t// the event type doesn't naturally bubble, but has a bubbling form, use that, and give it the selector so it can perform the select itself\n\t\t\t\treturn on(target, bubble(select), listener);\n\t\t\t}\n\t\t\t// standard event delegation\n\t\t\treturn on(target, eventType, function(event){\n\t\t\t\t// call select to see if we match\n\t\t\t\tvar eventTarget = select(event.target);\n\t\t\t\t// if it matches we call the listener\n\t\t\t\tif (eventTarget) {\n\t\t\t\t\t// We save the matching target into the event, so it can be accessed even when hitching (see #18355)\n\t\t\t\t\tevent.selectorTarget = eventTarget;\n\t\t\t\t\treturn listener.call(eventTarget, event);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t};\n\n\tfunction syntheticPreventDefault(){\n\t\tthis.cancelable = false;\n\t\tthis.defaultPrevented = true;\n\t}\n\tfunction syntheticStopPropagation(){\n\t\tthis.bubbles = false;\n\t}\n\tvar slice = [].slice,\n\t\tsyntheticDispatch = on.emit = function(target, type, event){\n\t\t// summary:\n\t\t//\t\tFires an event on the target object.\n\t\t// target:\n\t\t//\t\tThe target object to fire the event on. This can be a DOM element or a plain\n\t\t//\t\tJS object. If the target is a DOM element, native event emitting mechanisms\n\t\t//\t\tare used when possible.\n\t\t// type:\n\t\t//\t\tThe event type name. You can emulate standard native events like \"click\" and\n\t\t//\t\t\"mouseover\" or create custom events like \"open\" or \"finish\".\n\t\t// event:\n\t\t//\t\tAn object that provides the properties for the event. See https://developer.mozilla.org/en/DOM/event.initEvent\n\t\t//\t\tfor some of the properties. These properties are copied to the event object.\n\t\t//\t\tOf particular importance are the cancelable and bubbles properties. The\n\t\t//\t\tcancelable property indicates whether or not the event has a default action\n\t\t//\t\tthat can be cancelled. The event is cancelled by calling preventDefault() on\n\t\t//\t\tthe event object. The bubbles property indicates whether or not the\n\t\t//\t\tevent will bubble up the DOM tree. If bubbles is true, the event will be called\n\t\t//\t\ton the target and then each parent successively until the top of the tree\n\t\t//\t\tis reached or stopPropagation() is called. Both bubbles and cancelable\n\t\t//\t\tdefault to false.\n\t\t// returns:\n\t\t//\t\tIf the event is cancelable and the event is not cancelled,\n\t\t//\t\temit will return true. If the event is cancelable and the event is cancelled,\n\t\t//\t\temit will return false.\n\t\t// details:\n\t\t//\t\tNote that this is designed to emit events for listeners registered through\n\t\t//\t\tdojo/on. It should actually work with any event listener except those\n\t\t//\t\tadded through IE's attachEvent (IE8 and below's non-W3C event emitting\n\t\t//\t\tdoesn't support custom event types). It should work with all events registered\n\t\t//\t\tthrough dojo/on. Also note that the emit method does do any default\n\t\t//\t\taction, it only returns a value to indicate if the default action should take\n\t\t//\t\tplace. For example, emitting a keypress event would not cause a character\n\t\t//\t\tto appear in a textbox.\n\t\t// example:\n\t\t//\t\tTo fire our own click event\n\t\t//\t|\trequire([\"dojo/on\", \"dojo/dom\"\n\t\t//\t|\t], function(on, dom){\n\t\t//\t|\t\ton.emit(dom.byId(\"button\"), \"click\", {\n\t\t//\t|\t\t\tcancelable: true,\n\t\t//\t|\t\t\tbubbles: true,\n\t\t//\t|\t\t\tscreenX: 33,\n\t\t//\t|\t\t\tscreenY: 44\n\t\t//\t|\t\t});\n\t\t//\t\tWe can also fire our own custom events:\n\t\t//\t|\t\ton.emit(dom.byId(\"slider\"), \"slide\", {\n\t\t//\t|\t\t\tcancelable: true,\n\t\t//\t|\t\t\tbubbles: true,\n\t\t//\t|\t\t\tdirection: \"left-to-right\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\tvar args = slice.call(arguments, 2);\n\t\tvar method = \"on\" + type;\n\t\tif(\"parentNode\" in target){\n\t\t\t// node (or node-like), create event controller methods\n\t\t\tvar newEvent = args[0] = {};\n\t\t\tfor(var i in event){\n\t\t\t\tnewEvent[i] = event[i];\n\t\t\t}\n\t\t\tnewEvent.preventDefault = syntheticPreventDefault;\n\t\t\tnewEvent.stopPropagation = syntheticStopPropagation;\n\t\t\tnewEvent.target = target;\n\t\t\tnewEvent.type = type;\n\t\t\tevent = newEvent;\n\t\t}\n\t\tdo{\n\t\t\t// call any node which has a handler (note that ideally we would try/catch to simulate normal event propagation but that causes too much pain for debugging)\n\t\t\ttarget[method] && target[method].apply(target, args);\n\t\t\t// and then continue up the parent node chain if it is still bubbling (if started as bubbles and stopPropagation hasn't been called)\n\t\t}while(event && event.bubbles && (target = target.parentNode));\n\t\treturn event && event.cancelable && event; // if it is still true (was cancelable and was cancelled), return the event to indicate default action should happen\n\t};\n\tvar captures = has(\"event-focusin\") ? {} : {focusin: \"focus\", focusout: \"blur\"};\n\tif(!has(\"event-stopimmediatepropagation\")){\n\t\tvar stopImmediatePropagation =function(){\n\t\t\tthis.immediatelyStopped = true;\n\t\t\tthis.modified = true; // mark it as modified so the event will be cached in IE\n\t\t};\n\t\tvar addStopImmediate = function(listener){\n\t\t\treturn function(event){\n\t\t\t\tif(!event.immediatelyStopped){// check to make sure it hasn't been stopped immediately\n\t\t\t\t\tevent.stopImmediatePropagation = stopImmediatePropagation;\n\t\t\t\t\treturn listener.apply(this, arguments);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t}\n\tif(has(\"dom-addeventlistener\")){\n\t\t// emitter that works with native event handling\n\t\ton.emit = function(target, type, event){\n\t\t\tif(target.dispatchEvent && document.createEvent){\n\t\t\t\t// use the native event emitting mechanism if it is available on the target object\n\t\t\t\t// create a generic event\n\t\t\t\t// we could create branch into the different types of event constructors, but\n\t\t\t\t// that would be a lot of extra code, with little benefit that I can see, seems\n\t\t\t\t// best to use the generic constructor and copy properties over, making it\n\t\t\t\t// easy to have events look like the ones created with specific initializers\n\t\t\t\tvar ownerDocument = target.ownerDocument || document;\n\t\t\t\tvar nativeEvent = ownerDocument.createEvent(\"HTMLEvents\");\n\t\t\t\tnativeEvent.initEvent(type, !!event.bubbles, !!event.cancelable);\n\t\t\t\t// and copy all our properties over\n\t\t\t\tfor(var i in event){\n\t\t\t\t\tif(!(i in nativeEvent)){\n\t\t\t\t\t\tnativeEvent[i] = event[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn target.dispatchEvent(nativeEvent) && nativeEvent;\n\t\t\t}\n\t\t\treturn syntheticDispatch.apply(on, arguments); // emit for a non-node\n\t\t};\n\t}else{\n\t\t// no addEventListener, basically old IE event normalization\n\t\ton._fixEvent = function(evt, sender){\n\t\t\t// summary:\n\t\t\t//\t\tnormalizes properties on the event object including event\n\t\t\t//\t\tbubbling methods, keystroke normalization, and x/y positions\n\t\t\t// evt:\n\t\t\t//\t\tnative event object\n\t\t\t// sender:\n\t\t\t//\t\tnode to treat as \"currentTarget\"\n\t\t\tif(!evt){\n\t\t\t\tvar w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window;\n\t\t\t\tevt = w.event;\n\t\t\t}\n\t\t\tif(!evt){return evt;}\n\t\t\ttry{\n\t\t\t\tif(lastEvent && evt.type == lastEvent.type  && evt.srcElement == lastEvent.target){\n\t\t\t\t\t// should be same event, reuse event object (so it can be augmented);\n\t\t\t\t\t// accessing evt.srcElement rather than evt.target since evt.target not set on IE until fixup below\n\t\t\t\t\tevt = lastEvent;\n\t\t\t\t}\n\t\t\t}catch(e){\n\t\t\t\t// will occur on IE on lastEvent.type reference if lastEvent points to a previous event that already\n\t\t\t\t// finished bubbling, but the setTimeout() to clear lastEvent hasn't fired yet\n\t\t\t}\n\t\t\tif(!evt.target){ // check to see if it has been fixed yet\n\t\t\t\tevt.target = evt.srcElement;\n\t\t\t\tevt.currentTarget = (sender || evt.srcElement);\n\t\t\t\tif(evt.type == \"mouseover\"){\n\t\t\t\t\tevt.relatedTarget = evt.fromElement;\n\t\t\t\t}\n\t\t\t\tif(evt.type == \"mouseout\"){\n\t\t\t\t\tevt.relatedTarget = evt.toElement;\n\t\t\t\t}\n\t\t\t\tif(!evt.stopPropagation){\n\t\t\t\t\tevt.stopPropagation = stopPropagation;\n\t\t\t\t\tevt.preventDefault = preventDefault;\n\t\t\t\t}\n\t\t\t\tswitch(evt.type){\n\t\t\t\t\tcase \"keypress\":\n\t\t\t\t\t\tvar c = (\"charCode\" in evt ? evt.charCode : evt.keyCode);\n\t\t\t\t\t\tif (c==10){\n\t\t\t\t\t\t\t// CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla\n\t\t\t\t\t\t\tc=0;\n\t\t\t\t\t\t\tevt.keyCode = 13;\n\t\t\t\t\t\t}else if(c==13||c==27){\n\t\t\t\t\t\t\tc=0; // Mozilla considers ENTER and ESC non-printable\n\t\t\t\t\t\t}else if(c==3){\n\t\t\t\t\t\t\tc=99; // Mozilla maps CTRL-BREAK to CTRL-c\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Mozilla sets keyCode to 0 when there is a charCode\n\t\t\t\t\t\t// but that stops the event on IE.\n\t\t\t\t\t\tevt.charCode = c;\n\t\t\t\t\t\t_setKeyChar(evt);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn evt;\n\t\t};\n\t\tvar lastEvent, IESignal = function(handle){\n\t\t\tthis.handle = handle;\n\t\t};\n\t\tIESignal.prototype.remove = function(){\n\t\t\tdelete _dojoIEListeners_[this.handle];\n\t\t};\n\t\tvar fixListener = function(listener){\n\t\t\t// this is a minimal function for closing on the previous listener with as few as variables as possible\n\t\t\treturn function(evt){\n\t\t\t\tevt = on._fixEvent(evt, this);\n\t\t\t\tvar result = listener.call(this, evt);\n\t\t\t\tif(evt.modified){\n\t\t\t\t\t// cache the last event and reuse it if we can\n\t\t\t\t\tif(!lastEvent){\n\t\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\t\tlastEvent = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tlastEvent = evt;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t};\n\t\t};\n\t\tvar fixAttach = function(target, type, listener){\n\t\t\tlistener = fixListener(listener);\n\t\t\tif(((target.ownerDocument ? target.ownerDocument.parentWindow : target.parentWindow || target.window || window) != top ||\n\t\t\t\t\t\thas(\"jscript\") < 5.8) &&\n\t\t\t\t\t!has(\"config-_allow_leaks\")){\n\t\t\t\t// IE will leak memory on certain handlers in frames (IE8 and earlier) and in unattached DOM nodes for JScript 5.7 and below.\n\t\t\t\t// Here we use global redirection to solve the memory leaks\n\t\t\t\tif(typeof _dojoIEListeners_ == \"undefined\"){\n\t\t\t\t\t_dojoIEListeners_ = [];\n\t\t\t\t}\n\t\t\t\tvar emitter = target[type];\n\t\t\t\tif(!emitter || !emitter.listeners){\n\t\t\t\t\tvar oldListener = emitter;\n\t\t\t\t\temitter = Function('event', 'var callee = arguments.callee; for(var i = 0; i<callee.listeners.length; i++){var listener = _dojoIEListeners_[callee.listeners[i]]; if(listener){listener.call(this,event);}}');\n\t\t\t\t\temitter.listeners = [];\n\t\t\t\t\ttarget[type] = emitter;\n\t\t\t\t\temitter.global = this;\n\t\t\t\t\tif(oldListener){\n\t\t\t\t\t\temitter.listeners.push(_dojoIEListeners_.push(oldListener) - 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar handle;\n\t\t\t\temitter.listeners.push(handle = (emitter.global._dojoIEListeners_.push(listener) - 1));\n\t\t\t\treturn new IESignal(handle);\n\t\t\t}\n\t\t\treturn aspect.after(target, type, listener, true);\n\t\t};\n\n\t\tvar _setKeyChar = function(evt){\n\t\t\tevt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : '';\n\t\t\tevt.charOrCode = evt.keyChar || evt.keyCode;\t// TODO: remove for 2.0\n\t\t};\n\t\t// Called in Event scope\n\t\tvar stopPropagation = function(){\n\t\t\tthis.cancelBubble = true;\n\t\t};\n\t\tvar preventDefault = on._preventDefault = function(){\n\t\t\t// Setting keyCode to 0 is the only way to prevent certain keypresses (namely\n\t\t\t// ctrl-combinations that correspond to menu accelerator keys).\n\t\t\t// Otoh, it prevents upstream listeners from getting this information\n\t\t\t// Try to split the difference here by clobbering keyCode only for ctrl\n\t\t\t// combinations. If you still need to access the key upstream, bubbledKeyCode is\n\t\t\t// provided as a workaround.\n\t\t\tthis.bubbledKeyCode = this.keyCode;\n\t\t\tif(this.ctrlKey){\n\t\t\t\ttry{\n\t\t\t\t\t// squelch errors when keyCode is read-only\n\t\t\t\t\t// (e.g. if keyCode is ctrl or shift)\n\t\t\t\t\tthis.keyCode = 0;\n\t\t\t\t}catch(e){\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.defaultPrevented = true;\n\t\t\tthis.returnValue = false;\n\t\t\tthis.modified = true; // mark it as modified  (for defaultPrevented flag) so the event will be cached in IE\n\t\t};\n\t}\n\tif(has(\"touch\")){\n\t\tvar EventDelegate = function(){};\n\t\tvar windowOrientation = window.orientation;\n\t\tvar fixTouchListener = function(listener){\n\t\t\treturn function(originalEvent){\n\t\t\t\t//Event normalization(for ontouchxxx and resize):\n\t\t\t\t//1.incorrect e.pageX|pageY in iOS\n\t\t\t\t//2.there are no \"e.rotation\", \"e.scale\" and \"onorientationchange\" in Android\n\t\t\t\t//3.More TBD e.g. force | screenX | screenX | clientX | clientY | radiusX | radiusY\n\n\t\t\t\t// see if it has already been corrected\n\t\t\t\tvar event = originalEvent.corrected;\n\t\t\t\tif(!event){\n\t\t\t\t\tvar type = originalEvent.type;\n\t\t\t\t\ttry{\n\t\t\t\t\t\tdelete originalEvent.type; // on some JS engines (android), deleting properties makes them mutable\n\t\t\t\t\t}catch(e){}\n\t\t\t\t\tif(originalEvent.type){\n\t\t\t\t\t\t// Deleting the property of the original event did not work (this is the case of\n\t\t\t\t\t\t// browsers such as older Safari iOS), hence fallback:\n\t\t\t\t\t\tif(has(\"touch-can-modify-event-delegate\")){\n\t\t\t\t\t\t\t// If deleting properties of delegated event works, use event delegation:\n\t\t\t\t\t\t\tEventDelegate.prototype = originalEvent;\n\t\t\t\t\t\t\tevent = new EventDelegate;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t// Otherwise last fallback: other browsers, such as mobile Firefox, do not like\n\t\t\t\t\t\t\t// delegated properties, so we have to copy\n\t\t\t\t\t\t\tevent = {};\n\t\t\t\t\t\t\tfor(var name in originalEvent){\n\t\t\t\t\t\t\t\tevent[name] = originalEvent[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// have to delegate methods to make them work\n\t\t\t\t\t\tevent.preventDefault = function(){\n\t\t\t\t\t\t\toriginalEvent.preventDefault();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tevent.stopPropagation = function(){\n\t\t\t\t\t\t\toriginalEvent.stopPropagation();\n\t\t\t\t\t\t};\n\t\t\t\t\t}else{\n\t\t\t\t\t\t// deletion worked, use property as is\n\t\t\t\t\t\tevent = originalEvent;\n\t\t\t\t\t\tevent.type = type;\n\t\t\t\t\t}\n\t\t\t\t\toriginalEvent.corrected = event;\n\t\t\t\t\tif(type == 'resize'){\n\t\t\t\t\t\tif(windowOrientation == window.orientation){\n\t\t\t\t\t\t\treturn null;//double tap causes an unexpected 'resize' in Android\n\t\t\t\t\t\t}\n\t\t\t\t\t\twindowOrientation = window.orientation;\n\t\t\t\t\t\tevent.type = \"orientationchange\";\n\t\t\t\t\t\treturn listener.call(this, event);\n\t\t\t\t\t}\n\t\t\t\t\t// We use the original event and augment, rather than doing an expensive mixin operation\n\t\t\t\t\tif(!(\"rotation\" in event)){ // test to see if it has rotation\n\t\t\t\t\t\tevent.rotation = 0;\n\t\t\t\t\t\tevent.scale = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (window.TouchEvent && originalEvent instanceof TouchEvent) {\n\t\t\t\t\t\t// use event.changedTouches[0].pageX|pageY|screenX|screenY|clientX|clientY|target\n\t\t\t\t\t\tvar firstChangeTouch = event.changedTouches[0];\n\t\t\t\t\t\tfor(var i in firstChangeTouch){ // use for-in, we don't need to have dependency on dojo/_base/lang here\n\t\t\t\t\t\t\tdelete event[i]; // delete it first to make it mutable\n\t\t\t\t\t\t\tevent[i] = firstChangeTouch[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn listener.call(this, event);\n\t\t\t};\n\t\t};\n\t}\n\treturn on;\n});\n","define([\"./sniff\", \"./_base/window\", \"./_base/kernel\"],\n\t\tfunction(has, win, kernel){\n\t// module:\n\t//\t\tdojo/dom\n\n\t// FIXME: need to add unit tests for all the semi-public methods\n\n\tif(has(\"ie\") <= 7){\n\t\ttry{\n\t\t\tdocument.execCommand(\"BackgroundImageCache\", false, true);\n\t\t}catch(e){\n\t\t\t// sane browsers don't have cache \"issues\"\n\t\t}\n\t}\n\n\t// =============================\n\t// DOM Functions\n\t// =============================\n\n\t// the result object\n\tvar dom = {\n\t\t// summary:\n\t\t//\t\tThis module defines the core dojo DOM API.\n\t};\n\n\tif(has(\"ie\")){\n\t\tdom.byId = function(id, doc){\n\t\t\tif(typeof id != \"string\"){\n\t\t\t\treturn id || null;\n\t\t\t}\n\t\t\tvar _d = doc || win.doc, te = id && _d.getElementById(id);\n\t\t\t// attributes.id.value is better than just id in case the\n\t\t\t// user has a name=id inside a form\n\t\t\tif(te && (te.attributes.id.value == id || te.id == id)){\n\t\t\t\treturn te;\n\t\t\t}else{\n\t\t\t\tvar eles = _d.all[id];\n\t\t\t\tif(!eles || eles.nodeName){\n\t\t\t\t\teles = [eles];\n\t\t\t\t}\n\t\t\t\t// if more than 1, choose first with the correct id\n\t\t\t\tvar i = 0;\n\t\t\t\twhile((te = eles[i++])){\n\t\t\t\t\tif((te.attributes && te.attributes.id && te.attributes.id.value == id) || te.id == id){\n\t\t\t\t\t\treturn te;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t}else{\n\t\tdom.byId = function(id, doc){\n\t\t\t// inline'd type check.\n\t\t\t// be sure to return null per documentation, to match IE branch.\n\t\t\treturn ((typeof id == \"string\") ? (doc || win.doc).getElementById(id) : id) || null; // DOMNode\n\t\t};\n\t}\n\t/*=====\n\t dom.byId = function(id, doc){\n\t\t// summary:\n\t\t//\t\tReturns DOM node with matching `id` attribute or falsy value (ex: null or undefined)\n\t\t//\t\tif not found.  If `id` is a DomNode, this function is a no-op.\n\t\t//\n\t\t// id: String|DOMNode\n\t\t//\t\tA string to match an HTML id attribute or a reference to a DOM Node\n\t\t//\n\t\t// doc: Document?\n\t\t//\t\tDocument to work in. Defaults to the current value of\n\t\t//\t\tdojo/_base/window.doc.  Can be used to retrieve\n\t\t//\t\tnode references from other documents.\n\t\t//\n\t\t// example:\n\t\t//\t\tLook up a node by ID:\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tvar n = dom.byId(\"foo\");\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tCheck if a node exists, and use it.\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tvar n = dom.byId(\"bar\");\n\t\t//\t|\t\tif(n){ doStuff() ... }\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tAllow string or DomNode references to be passed to a custom function:\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tvar foo = function(nodeOrId){\n\t\t//\t|\t\t\tnodeOrId = dom.byId(nodeOrId);\n\t\t//\t|\t\t\t// ... more stuff\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t };\n\t =====*/\n\n\t// Test for DOMNode.contains() method, available everywhere except FF8-\n\t// and IE8-, where it's available in general, but not on document itself,\n\t// and also problems when either ancestor or node are text nodes.\n\n\tvar doc = kernel.global[\"document\"] || null;\n\thas.add(\"dom-contains\", !!(doc && doc.contains));\n\tdom.isDescendant = has(\"dom-contains\") ?\n\t\t// FF9+, IE9+, webkit, opera, iOS, Android, Edge, etc.\n\t\tfunction(/*DOMNode|String*/ node, /*DOMNode|String*/ ancestor){\n\t\t\treturn !!( (ancestor = dom.byId(ancestor)) && ancestor.contains(dom.byId(node)) );\n\t\t} :\n\t\tfunction(/*DOMNode|String*/ node, /*DOMNode|String*/ ancestor){\n\t\t\t// summary:\n\t\t\t//\t\tReturns true if node is a descendant of ancestor\n\t\t\t// node: DOMNode|String\n\t\t\t//\t\tstring id or node reference to test\n\t\t\t// ancestor: DOMNode|String\n\t\t\t//\t\tstring id or node reference of potential parent to test against\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tTest is node id=\"bar\" is a descendant of node id=\"foo\"\n\t\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t\t//\t|\t\tif(dom.isDescendant(\"bar\", \"foo\")){ ... }\n\t\t\t//\t|\t});\n\n\t\t\ttry{\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tancestor = dom.byId(ancestor);\n\t\t\t\twhile(node){\n\t\t\t\t\tif(node == ancestor){\n\t\t\t\t\t\treturn true; // Boolean\n\t\t\t\t\t}\n\t\t\t\t\tnode = node.parentNode;\n\t\t\t\t}\n\t\t\t}catch(e){ /* squelch, return false */ }\n\t\t\treturn false; // Boolean\n\t\t};\n\n\t// TODO: do we need setSelectable in the base?\n\n\t// Add feature test for user-select CSS property\n\t// (currently known to work in all but IE < 10 and Opera)\n\t// TODO: The user-select CSS property as of May 2014 is no longer part of\n\t// any CSS specification. In IE, -ms-user-select does not do the same thing\n\t// as the unselectable attribute on elements; namely, dijit Editor buttons\n\t// do not properly prevent the content of the editable content frame from\n\t// unblurring. As a result, the -ms- prefixed version is omitted here.\n\thas.add(\"css-user-select\", function(global, doc, element){\n\t\t// Avoid exception when dom.js is loaded in non-browser environments\n\t\tif(!element){ return false; }\n\n\t\tvar style = element.style;\n\t\tvar prefixes = [\"Khtml\", \"O\", \"Moz\", \"Webkit\"],\n\t\t\ti = prefixes.length,\n\t\t\tname = \"userSelect\",\n\t\t\tprefix;\n\n\t\t// Iterate prefixes from most to least likely\n\t\tdo{\n\t\t\tif(typeof style[name] !== \"undefined\"){\n\t\t\t\t// Supported; return property name\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}while(i-- && (name = prefixes[i] + \"UserSelect\"));\n\n\t\t// Not supported if we didn't return before now\n\t\treturn false;\n\t});\n\n\t/*=====\n\tdom.setSelectable = function(node, selectable){\n\t\t// summary:\n\t\t//\t\tEnable or disable selection on a node\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to node\n\t\t// selectable: Boolean\n\t\t//\t\tstate to put the node in. false indicates unselectable, true\n\t\t//\t\tallows selection.\n\t\t// example:\n\t\t//\t\tMake the node id=\"bar\" unselectable\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tdom.setSelectable(\"bar\");\n\t\t//\t|\t});\n\t\t// example:\n\t\t//\t\tMake the node id=\"bar\" selectable\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tdom.setSelectable(\"bar\", true);\n\t\t//\t|\t});\n\t};\n\t=====*/\n\n\tvar cssUserSelect = has(\"css-user-select\");\n\tdom.setSelectable = cssUserSelect ? function(node, selectable){\n\t\t// css-user-select returns a (possibly vendor-prefixed) CSS property name\n\t\tdom.byId(node).style[cssUserSelect] = selectable ? \"\" : \"none\";\n\t} : function(node, selectable){\n\t\tnode = dom.byId(node);\n\n\t\t// (IE < 10 / Opera) Fall back to setting/removing the\n\t\t// unselectable attribute on the element and all its children\n\t\tvar nodes = node.getElementsByTagName(\"*\"),\n\t\t\ti = nodes.length;\n\n\t\tif(selectable){\n\t\t\tnode.removeAttribute(\"unselectable\");\n\t\t\twhile(i--){\n\t\t\t\tnodes[i].removeAttribute(\"unselectable\");\n\t\t\t}\n\t\t}else{\n\t\t\tnode.setAttribute(\"unselectable\", \"on\");\n\t\t\twhile(i--){\n\t\t\t\tnodes[i].setAttribute(\"unselectable\", \"on\");\n\t\t\t}\n\t\t}\n\t};\n\n\treturn dom;\n});\n","var instances = 'ej2_instances';\nvar uid = 0;\nvar isBlazorPlatform = false;\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\nexport function disableBlazorMode() {\n    isBlazorPlatform = false;\n}\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\nexport function createInstance(classFunction, params) {\n    var arrayParam = params;\n    arrayParam.unshift(undefined);\n    return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\nexport function setImmediate(handler) {\n    var unbind;\n    var num = new Uint16Array(5);\n    var intCrypto = window.msCrypto || window.crypto;\n    intCrypto.getRandomValues(num);\n    var secret = 'ej2' + combineArray(num);\n    var messageHandler = function (event) {\n        if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n            handler();\n            unbind();\n        }\n    };\n    window.addEventListener('message', messageHandler, false);\n    window.postMessage(secret, '*');\n    return unbind = function () {\n        window.removeEventListener('message', messageHandler);\n        handler = messageHandler = secret = undefined;\n    };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\nexport function getValue(nameSpace, obj) {\n    /* tslint:disable no-any */\n    var value = obj;\n    var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n    for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n        value = value[splits[i]];\n    }\n    return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @return {void}\n * @private\n */\nexport function setValue(nameSpace, value, obj) {\n    var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n    var start = obj || {};\n    var fromObj = start;\n    var i;\n    var length = keys.length;\n    var key;\n    for (i = 0; i < length; i++) {\n        key = keys[i];\n        if (i + 1 === length) {\n            fromObj[key] = value === undefined ? {} : value;\n        }\n        else if (isNullOrUndefined(fromObj[key])) {\n            fromObj[key] = {};\n        }\n        fromObj = fromObj[key];\n    }\n    return start;\n}\n/**\n * Delete an item from Object\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} params - String value to the get the inner object\n * @return {void}\n * @private\n */\nexport function deleteObject(obj, key) {\n    delete obj[key];\n}\n/**\n * Check weather the given argument is only object.\n * @param {any} obj - Object which is need to check.\n * @return {boolean}\n * @private\n */\nexport function isObject(obj) {\n    var objCon = {};\n    return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @return {any}\n * @private\n */\nexport function getEnumValue(enumObject, enumValue) {\n    return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @return {void}\n * @private\n */\nexport function merge(source, destination) {\n    if (!isNullOrUndefined(destination)) {\n        var temrObj = source;\n        var tempProp = destination;\n        var keys = Object.keys(destination);\n        var deepmerge = 'deepMerge';\n        for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n            var key = keys_1[_i];\n            if (!isNullOrUndefined(temrObj[deepmerge]) && (temrObj[deepmerge].indexOf(key) !== -1) &&\n                (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {\n                extend(temrObj[key], temrObj[key], tempProp[key], true);\n            }\n            else {\n                temrObj[key] = tempProp[key];\n            }\n        }\n    }\n}\n/**\n * Extend the two object with newer one.\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @return {Object}\n * @private\n */\nexport function extend(copied, first, second, deep) {\n    var result = copied && typeof copied === 'object' ? copied : {};\n    var length = arguments.length;\n    if (deep) {\n        length = length - 1;\n    }\n    var _loop_1 = function (i) {\n        if (!arguments_1[i]) {\n            return \"continue\";\n        }\n        var obj1 = arguments_1[i];\n        Object.keys(obj1).forEach(function (key) {\n            var src = result[key];\n            var copy = obj1[key];\n            var clone;\n            var isArrayChanged = Array.isArray(copy) && Array.isArray(src) && (copy.length !== src.length);\n            var blazorEventExtend = isBlazor() ? (!(src instanceof Event) && !isArrayChanged) : true;\n            if (deep && blazorEventExtend && (isObject(copy) || Array.isArray(copy))) {\n                if (isObject(copy)) {\n                    clone = src ? src : {};\n                    if (Array.isArray(clone) && clone.hasOwnProperty('isComplexArray')) {\n                        extend(clone, {}, copy, deep);\n                    }\n                    else {\n                        result[key] = extend(clone, {}, copy, deep);\n                    }\n                }\n                else {\n                    /* istanbul ignore next */\n                    clone = isBlazor() ? src && Object.keys(copy).length : src ? src : [];\n                    result[key] = extend([], clone, copy, deep);\n                }\n            }\n            else {\n                result[key] = copy;\n            }\n        });\n    };\n    var arguments_1 = arguments;\n    for (var i = 1; i < length; i++) {\n        _loop_1(i);\n    }\n    return result;\n}\n/**\n * To check whether the object is null or undefined.\n * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\nexport function isNullOrUndefined(value) {\n    return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\nexport function isUndefined(value) {\n    return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\nexport function getUniqueID(definedName) {\n    return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @return {Function}\n * @private\n */\nexport function debounce(eventFunction, delay) {\n    var out;\n    // tslint:disable-next-line\n    return function () {\n        var _this = this;\n        var args = arguments;\n        var later = function () {\n            out = null;\n            return eventFunction.apply(_this, args);\n        };\n        clearTimeout(out);\n        out = setTimeout(later, delay);\n    };\n}\n// Added since lint ignored after added '//tslint:disable-next-line' \n/* tslint:disable:no-any */\n/**\n * To convert the object to string for query url\n * @param  {Object} data\n * @returns string\n * @private\n */\nexport function queryParams(data) {\n    var array = [];\n    var keys = Object.keys(data);\n    for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n        var key = keys_2[_i];\n        array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));\n    }\n    return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\nexport function isObjectArray(value) {\n    var parser = Object.prototype.toString;\n    if (parser.call(value) === '[object Array]') {\n        if (parser.call(value[0]) === '[object Object]') {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * To check whether the  child element is descendant to parent element or parent and child are same element.\n * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\nexport function compareElementParent(child, parent) {\n    var node = child;\n    if (node === parent) {\n        return true;\n    }\n    else if (node === document || !node) {\n        return false;\n    }\n    else {\n        return compareElementParent(node.parentNode, parent);\n    }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\nexport function throwError(message) {\n    try {\n        throw new Error(message);\n    }\n    catch (e) {\n        throw e.message + '\\n' + e.stack;\n    }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\nexport function print(element, printWindow) {\n    var div = document.createElement('div');\n    var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('base, link, style'));\n    var reference = '';\n    if (isNullOrUndefined(printWindow)) {\n        printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n    }\n    div.appendChild(element.cloneNode(true));\n    for (var i = 0, len = links.length; i < len; i++) {\n        reference += links[i].outerHTML;\n    }\n    printWindow.document.write('<!DOCTYPE html> <html><head>' + reference + '</head><body>' + div.innerHTML +\n        '<script> (function() { window.ready = true; })(); </script>' + '</body></html>');\n    printWindow.document.close();\n    printWindow.focus();\n    // tslint:disable-next-line\n    var interval = setInterval(function () {\n        if (printWindow.ready) {\n            printWindow.print();\n            printWindow.close();\n            clearInterval(interval);\n        }\n    }, 500);\n    return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n * @param  {number|string} value\n * @return {string} result\n * @private\n */\nexport function formatUnit(value) {\n    var result = value + '';\n    if (result.match(/auto|%|px|vh|vm|vmax|vmin|em/)) {\n        return result;\n    }\n    return result + 'px';\n}\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\nexport function enableBlazorMode() {\n    isBlazorPlatform = true;\n}\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\nexport function isBlazor() {\n    return isBlazorPlatform;\n}\n/**\n * Function to convert xPath to DOM element in blazor platform\n * @return {HTMLElement} result\n * @param {HTMLElement | object} element\n * @private\n */\nexport function getElement(element) {\n    var xPath = 'xPath';\n    if (!(element instanceof Node) && isBlazor() && !isNullOrUndefined(element[xPath])) {\n        return document.evaluate(element[xPath], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\n    }\n    return element;\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\nexport function getInstance(element, component) {\n    // tslint:disable-next-line:no-any\n    var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n    if (elem[instances]) {\n        for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n            var inst = _a[_i];\n            if (inst instanceof component) {\n                return inst;\n            }\n        }\n    }\n    return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\nexport function addInstance(element, instance) {\n    // tslint:disable-next-line:no-any\n    var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n    if (elem[instances]) {\n        elem[instances].push(instance);\n    }\n    else {\n        elem[instances] = [instance];\n    }\n}\n/**\n * Function to generate the unique id.\n * @return {any}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function uniqueID() {\n    // tslint:disable-next-line:no-any\n    if ((typeof window) === 'undefined') {\n        return;\n    }\n    // tslint:disable-next-line:no-any\n    var num = new Uint16Array(5);\n    var intCrypto = window.msCrypto || window.crypto;\n    return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n    var ret = '';\n    for (var i = 0; i < 5; i++) {\n        ret += (i ? ',' : '') + num[i];\n    }\n    return ret;\n}\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n    'latn': {\n        '_digits': '0123456789',\n        '_type': 'numeric'\n    }\n};\nimport { isUndefined, getValue, isBlazor } from '../util';\nvar latnRegex = /^[0-9]*$/;\nvar defaultNumberSymbols = {\n    'decimal': '.',\n    'group': ',',\n    'percentSign': '%',\n    'plusSign': '+',\n    'minusSign': '-',\n    'infinity': '∞',\n    'nan': 'NaN',\n    'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n    function ParserBase() {\n    }\n    /**\n     * Returns the cldr object for the culture specifies\n     * @param {Object} obj - Specifies the object from which culture object to be acquired.\n     * @param {string} cName - Specifies the culture name.\n     * @returns {Object}\n     */\n    ParserBase.getMainObject = function (obj, cName) {\n        var value = isBlazor() ? cName : 'main.' + cName;\n        return getValue(value, obj);\n    };\n    /**\n     * Returns the numbering system object from given cldr data.\n     * @param {Object} obj - Specifies the object from which number system is acquired.\n     * @returns {Object}\n     */\n    ParserBase.getNumberingSystem = function (obj) {\n        return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n    };\n    /**\n     * Returns the reverse of given object keys or keys specified.\n     * @param {Object} prop - Specifies the object to be reversed.\n     * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n     * @returns {Object}\n     */\n    ParserBase.reverseObject = function (prop, keys) {\n        var propKeys = keys || Object.keys(prop);\n        var res = {};\n        for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n            var key = propKeys_1[_i];\n            /* tslint:disable no-any */\n            if (!res.hasOwnProperty(prop[key])) {\n                res[prop[key]] = key;\n            }\n        }\n        return res;\n    };\n    /**\n     * Returns the symbol regex by skipping the escape sequence.\n     * @param {string[]} props - Specifies the array values to be skipped.\n     * @returns {RegExp}\n     */\n    ParserBase.getSymbolRegex = function (props) {\n        var regexStr = props.map(function (str) {\n            return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n        }).join('|');\n        return new RegExp(regexStr, 'g');\n    };\n    ParserBase.getSymbolMatch = function (prop) {\n        var matchKeys = Object.keys(defaultNumberSymbols);\n        var ret = {};\n        for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n            var key = matchKeys_1[_i];\n            ret[prop[key]] = defaultNumberSymbols[key];\n        }\n        return ret;\n    };\n    /**\n     * Returns regex string for provided value\n     * @param {string} val\n     * @returns {string}\n     */\n    ParserBase.constructRegex = function (val) {\n        var len = val.length;\n        var ret = '';\n        for (var i = 0; i < len; i++) {\n            if (i !== len - 1) {\n                ret += val[i] + '|';\n            }\n            else {\n                ret += val[i];\n            }\n        }\n        return ret;\n    };\n    /**\n     * Returns the replaced value of matching regex and obj mapper.\n     * @param {string} value - Specifies the  values to be replaced.\n     * @param {RegExp} regex - Specifies the  regex to search.\n     * @param {Object} obj - Specifies the  object matcher to be replace value parts.\n     * @returns {string}\n     */\n    ParserBase.convertValueParts = function (value, regex, obj) {\n        return value.replace(regex, function (str) {\n            return obj[str];\n        });\n    };\n    /**\n     * Returns default numbering system object for formatting from cldr data\n     * @param {Object} obj\n     * @returns {NumericObject}\n     */\n    ParserBase.getDefaultNumberingSystem = function (obj) {\n        var ret = {};\n        ret.obj = getValue('numbers', obj);\n        ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n        return ret;\n    };\n    /**\n     * Returns the replaced value of matching regex and obj mapper.\n     */\n    ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols, blazorMode) {\n        var ret = {};\n        var cur = this.getDefaultNumberingSystem(curObj);\n        if (!isUndefined(cur.nSystem) || blazorMode) {\n            var digits = blazorMode ? getValue('obj.mapperDigits', cur) : getValue(cur.nSystem + '._digits', numberSystem);\n            if (!isUndefined(digits)) {\n                ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n                ret.numberParseRegex = new RegExp(this.constructRegex(digits), 'g');\n                ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n                if (needSymbols) {\n                    ret.numericRegex = digits[0] + '-' + digits[9];\n                    ret.symbolNumberSystem = getValue(blazorMode ? 'numberSymbols' : 'symbols-numberSystem-' + cur.nSystem, cur.obj);\n                    ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n                    ret.numberSystem = cur.nSystem;\n                }\n            }\n        }\n        return ret;\n    };\n    /**\n     * Returns number mapper object for the provided cldr data\n     * @param {Object} curObj\n     * @param {Object} numberSystem\n     * @param {boolean} isNumber\n     * @returns {NumberMapper}\n     */\n    ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n        var ret = { mapper: {} };\n        var cur = this.getDefaultNumberingSystem(curObj);\n        if (!isUndefined(cur.nSystem)) {\n            ret.numberSystem = cur.nSystem;\n            ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n            ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n            var digits = getValue(cur.nSystem + '._digits', numberSystem);\n            if (!isUndefined(digits)) {\n                for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n                    var i = latnNumberSystem_1[_i];\n                    ret.mapper[i] = digits[i];\n                }\n            }\n        }\n        return ret;\n    };\n    ParserBase.nPair = 'numericPair';\n    ParserBase.nRegex = 'numericRegex';\n    ParserBase.numberingSystems = defaultNumberingSystem;\n    return ParserBase;\n}());\nexport { ParserBase };\n/**\n * @private\n */\nvar blazorCurrencyData = {\n    'DJF': 'Fdj',\n    'ERN': 'Nfk',\n    'ETB': 'Br',\n    'NAD': '$',\n    'ZAR': 'R',\n    'XAF': 'FCFA',\n    'GHS': 'GH₵',\n    'XDR': 'XDR',\n    'AED': 'د.إ.‏',\n    'BHD': 'د.ب.‏',\n    'DZD': 'د.ج.‏',\n    'EGP': 'ج.م.‏',\n    'ILS': '₪',\n    'IQD': 'د.ع.‏',\n    'JOD': 'د.ا.‏',\n    'KMF': 'CF',\n    'KWD': 'د.ك.‏',\n    'LBP': 'ل.ل.‏',\n    'LYD': 'د.ل.‏',\n    'MAD': 'د.م.‏',\n    'MRU': 'أ.م.',\n    'OMR': 'ر.ع.‏',\n    'QAR': 'ر.ق.‏',\n    'SAR': 'ر.س.‏',\n    'SDG': 'ج.س.',\n    'SOS': 'S',\n    'SSP': '£',\n    'SYP': 'ل.س.‏',\n    'TND': 'د.ت.‏',\n    'YER': 'ر.ي.‏',\n    'CLP': '$',\n    'INR': '₹',\n    'TZS': 'TSh',\n    'EUR': '€',\n    'AZN': '₼',\n    'RUB': '₽',\n    'BYN': 'Br',\n    'ZMW': 'K',\n    'BGN': 'лв.',\n    'NGN': '₦',\n    'XOF': 'CFA',\n    'BDT': '৳',\n    'CNY': '¥',\n    'BAM': 'КМ',\n    'UGX': 'USh',\n    'USD': '$',\n    'CZK': 'Kč',\n    'GBP': '£',\n    'DKK': 'kr.',\n    'KES': 'Ksh',\n    'CHF': 'CHF',\n    'MVR': 'ރ.',\n    'BTN': 'Nu.',\n    'XCD': 'EC$',\n    'AUD': '$',\n    'BBD': '$',\n    'BIF': 'FBu',\n    'BMD': '$',\n    'BSD': '$',\n    'BWP': 'P',\n    'BZD': '$',\n    'CAD': '$',\n    'NZD': '$',\n    'FJD': '$',\n    'FKP': '£',\n    'GIP': '£',\n    'GMD': 'D',\n    'GYD': '$',\n    'HKD': '$',\n    'IDR': 'Rp',\n    'JMD': '$',\n    'KYD': '$',\n    'LRD': '$',\n    'MGA': 'Ar',\n    'MOP': 'MOP$',\n    'MUR': 'Rs',\n    'MWK': 'MK',\n    'MYR': 'RM',\n    'PGK': 'K',\n    'PHP': '₱',\n    'PKR': 'Rs',\n    'RWF': 'RF',\n    'SBD': '$',\n    'SCR': 'SR',\n    'SEK': 'kr',\n    'SGD': '$',\n    'SHP': '£',\n    'SLL': 'Le',\n    'ANG': 'NAf.',\n    'SZL': 'E',\n    'TOP': 'T$',\n    'TTD': '$',\n    'VUV': 'VT',\n    'WST': 'WS$',\n    'ARS': '$',\n    'BOB': 'Bs',\n    'BRL': 'R$',\n    'COP': '$',\n    'CRC': '₡',\n    'CUP': '$',\n    'DOP': '$',\n    'GTQ': 'Q',\n    'HNL': 'L',\n    'MXN': '$',\n    'NIO': 'C$',\n    'PAB': 'B/.',\n    'PEN': 'S/',\n    'PYG': '₲',\n    'UYU': '$',\n    'VES': 'Bs.S',\n    'IRR': 'ريال',\n    'GNF': 'FG',\n    'CDF': 'FC',\n    'HTG': 'G',\n    'XPF': 'FCFP',\n    'HRK': 'kn',\n    'HUF': 'Ft',\n    'AMD': '֏',\n    'ISK': 'kr',\n    'JPY': '¥',\n    'GEL': '₾',\n    'CVE': '​',\n    'KZT': '₸',\n    'KHR': '៛',\n    'KPW': '₩',\n    'KRW': '₩',\n    'KGS': 'сом',\n    'AOA': 'Kz',\n    'LAK': '₭',\n    'MZN': 'MTn',\n    'MKD': 'ден',\n    'MNT': '₮',\n    'BND': '$',\n    'MMK': 'K',\n    'NOK': 'kr',\n    'NPR': 'रु',\n    'AWG': 'Afl.',\n    'SRD': '$',\n    'PLN': 'zł',\n    'AFN': '؋',\n    'STN': 'Db',\n    'MDL': 'L',\n    'RON': 'lei',\n    'UAH': '₴',\n    'LKR': 'රු.',\n    'ALL': 'Lekë',\n    'RSD': 'дин.',\n    'TJS': 'смн',\n    'THB': '฿',\n    'TMT': 'm.',\n    'TRY': '₺',\n    'UZS': 'сўм',\n    'VND': '₫',\n    'TWD': 'NT$'\n};\nexport function getBlazorCurrencySymbol(currencyCode) {\n    return getValue(currencyCode || '', blazorCurrencyData);\n}\n","/***\n * Hijri parser\n */\nexport var HijriParser;\n(function (HijriParser) {\n    /* tslint:disable */\n    var dateCorrection = [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990, 29019, 29049, 29078, 29108, 29137, 29167,\n        29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522, 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759,\n        29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053, 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348,\n        30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585, 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939,\n        30968, 30998, 31027, 31057, 31086, 31116, 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530,\n        31559, 31589, 31618, 31648, 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120,\n        32150, 32180, 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711,\n        32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243, 33272, 33302,\n        33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775, 33804, 33834, 33863, 33893,\n        33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306, 34336, 34365, 34395, 34424, 34454, 34483,\n        34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837, 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074,\n        35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370, 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665,\n        35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901, 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254,\n        36284, 36314, 36343, 36373, 36403, 36433, 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845,\n        36875, 36904, 36934, 36963, 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436,\n        37465, 37495, 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027,\n        38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558, 38587, 38617,\n        38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089, 39118, 39148, 39178, 39208,\n        39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621, 39650, 39680, 39709, 39739, 39768, 39798,\n        39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153, 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389,\n        40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685, 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980,\n        41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216, 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570,\n        41599, 41629, 41658, 41688, 41718, 41748, 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161,\n        42190, 42220, 42249, 42279, 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751,\n        42780, 42810, 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342,\n        43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873, 43903, 43932,\n        43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405, 44434, 44464, 44493, 44523,\n        44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936, 44966, 44996, 45025, 45055, 45084, 45114,\n        45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468, 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704,\n        45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999, 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295,\n        46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531, 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885,\n        46915, 46944, 46974, 47003, 47033, 47063, 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476,\n        47506, 47535, 47565, 47594, 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066,\n        48096, 48125, 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,\n        48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189, 49218, 49248,\n        49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720, 49749, 49779, 49809, 49838,\n        49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252, 50281, 50311, 50340, 50370, 50400, 50429,\n        50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784, 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019,\n        51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315, 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611,\n        51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846, 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200,\n        52230, 52260, 52290, 52319, 52349, 52379, 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792,\n        52822, 52851, 52881, 52910, 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383,\n        53412, 53441, 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973,\n        54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505, 54535, 54564,\n        54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036, 55066, 55095, 55125, 55154,\n        55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567, 55597, 55627, 55657, 55686, 55716, 55745,\n        55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100, 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335,\n        56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631, 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926,\n        56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162, 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517,\n        57546, 57576, 57605, 57634, 57664, 57694, 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107,\n        58137, 58167, 58196, 58226, 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698,\n        58727, 58757, 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288,\n        59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820, 59850, 59879,\n        59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352, 60381, 60411, 60440, 60469,\n        60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883, 60912, 60942, 60972, 61002, 61031, 61061,\n        61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415, 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651,\n        61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947, 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242,\n        62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478, 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832,\n        62862, 62891, 62921, 62950, 62980, 63009, 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423,\n        63453, 63482, 63512, 63541, 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014,\n        64043, 64073, 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603,\n        64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136, 65166, 65195,\n        65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667, 65697, 65726, 65755, 65785,\n        65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199, 66228, 66258, 66287, 66317, 66346, 66376,\n        66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730, 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967,\n        66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262, 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557,\n        67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793, 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148,\n        68177, 68207, 68236, 68266, 68295, 68325, 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738,\n        68768, 68797, 68827, 68857, 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330,\n        69359, 69388, 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919,\n        69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451, 70481, 70510,\n        70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983, 71013, 71042, 71071, 71101,\n        71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514, 71543, 71573, 71602, 71632, 71662, 71691,\n        71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046, 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282,\n        72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577, 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872,\n        72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109, 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464,\n        73493, 73523, 73552, 73581, 73611, 73640, 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053,\n        74083, 74113, 74142, 74172, 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645,\n        74675, 74704, 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235,\n        75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766, 75796, 75826,\n        75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299, 76328, 76358, 76387, 76416,\n        76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830, 76859, 76889, 76918, 76948, 76977, 77007,\n        77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361, 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598,\n        77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893, 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188,\n        78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425, 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779,\n        78808, 78838, 78867, 78897, 78926, 78956, 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369,\n        79399, 79428, 79458, 79487, 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960,\n        79990];\n    /* tslint:enable */\n    function getHijriDate(gDate) {\n        var day = gDate.getDate();\n        var month = gDate.getMonth();\n        var year = gDate.getFullYear();\n        var tMonth = month + 1;\n        var tYear = year;\n        if (tMonth < 3) {\n            tYear -= 1;\n            tMonth += 12;\n        }\n        var yPrefix = Math.floor(tYear / 100.);\n        var julilanOffset = yPrefix - Math.floor(yPrefix / 4.) - 2;\n        var julianNumber = Math.floor(365.25 * (tYear + 4716)) + Math.floor(30.6001 * (tMonth + 1)) + day - julilanOffset - 1524;\n        yPrefix = Math.floor((julianNumber - 1867216.25) / 36524.25);\n        julilanOffset = yPrefix - Math.floor(yPrefix / 4.) + 1;\n        var b = julianNumber + julilanOffset + 1524;\n        var c = Math.floor((b - 122.1) / 365.25);\n        var d = Math.floor(365.25 * c);\n        var tempMonth = Math.floor((b - d) / 30.6001);\n        day = (b - d) - Math.floor(30.6001 * tempMonth);\n        month = Math.floor((b - d) / 20.6001);\n        if (month > 13) {\n            c += 1;\n            month -= 12;\n        }\n        month -= 1;\n        year = c - 4716;\n        var modifiedJulianDate = julianNumber - 2400000;\n        // date calculation for year after 2077\n        var iyear = 10631. / 30.;\n        var z = julianNumber - 1948084;\n        var cyc = Math.floor(z / 10631.);\n        z = z - 10631 * cyc;\n        var j = Math.floor((z - 0.1335) / iyear);\n        var iy = 30 * cyc + j;\n        z = z - Math.floor(j * iyear + 0.1335);\n        var im = Math.floor((z + 28.5001) / 29.5);\n        /* istanbul ignore next */\n        if (im === 13) {\n            im = 12;\n        }\n        var tempDay = z - Math.floor(29.5001 * im - 29);\n        var i = 0;\n        for (; i < dateCorrection.length; i++) {\n            if (dateCorrection[i] > modifiedJulianDate) {\n                break;\n            }\n        }\n        var iln = i + 16260;\n        var ii = Math.floor((iln - 1) / 12);\n        var hYear = ii + 1;\n        var hmonth = iln - 12 * ii;\n        var hDate = modifiedJulianDate - dateCorrection[i - 1] + 1;\n        if ((hDate + '').length > 2) {\n            hDate = tempDay;\n            hmonth = im;\n            hYear = iy;\n        }\n        return { year: hYear, month: hmonth, date: hDate };\n    }\n    HijriParser.getHijriDate = getHijriDate;\n    function toGregorian(year, month, day) {\n        var iy = year;\n        var im = month;\n        var id = day;\n        var ii = iy - 1;\n        var iln = (ii * 12) + 1 + (im - 1);\n        var i = iln - 16260;\n        var mcjdn = id + dateCorrection[i - 1] - 1;\n        var julianDate = mcjdn + 2400000;\n        var z = Math.floor(julianDate + 0.5);\n        var a = Math.floor((z - 1867216.25) / 36524.25);\n        a = z + 1 + a - Math.floor(a / 4);\n        var b = a + 1524;\n        var c = Math.floor((b - 122.1) / 365.25);\n        var d = Math.floor(365.25 * c);\n        var e = Math.floor((b - d) / 30.6001);\n        var gDay = b - d - Math.floor(e * 30.6001);\n        var gMonth = e - (e > 13.5 ? 13 : 1);\n        var gYear = c - (gMonth > 2.5 ? 4716 : 4715);\n        /* istanbul ignore next */\n        if (gYear <= 0) {\n            gMonth--;\n        } // No year zero\n        return new Date(gYear + '/' + (gMonth) + '/' + gDay);\n    }\n    HijriParser.toGregorian = toGregorian;\n})(HijriParser || (HijriParser = {}));\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue, isBlazor } from '../util';\nimport { HijriParser } from '../hijri-parser';\nimport { isNullOrUndefined, extend } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|K|cccc|ccc|WW|W|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n    m: 'getMinutes',\n    h: 'getHours',\n    H: 'getHours',\n    s: 'getSeconds',\n    d: 'getDate',\n    f: 'getMilliseconds'\n};\nexport var datePartMatcher = {\n    'M': 'month',\n    'd': 'day',\n    'E': 'weekday',\n    'c': 'weekday',\n    'y': 'year',\n    'm': 'minute',\n    'h': 'hour',\n    'H': 'hour',\n    's': 'second',\n    'L': 'month',\n    'a': 'designator',\n    'z': 'timeZone',\n    'Z': 'timeZone',\n    'G': 'era',\n    'f': 'milliseconds'\n};\nvar timeSeparator = 'timeSeparator';\n/* tslint:disable no-any */\n/**\n * Date Format is a framework provides support for date formatting.\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n    function DateFormat() {\n    }\n    /**\n     * Returns the formatter function for given skeleton.\n     * @param {string} -  Specifies the culture name to be which formatting.\n     * @param {DateFormatOptions} - Specific the format in which date  will format.\n     * @param {cldr} - Specifies the global cldr data collection.\n     * @return Function.\n     */\n    DateFormat.dateFormat = function (culture, option, cldr) {\n        var _this = this;\n        var dependable = base.getDependables(cldr, culture, option.calendar);\n        var numObject = getValue('parserObject.numbers', dependable);\n        var dateObject = dependable.dateObject;\n        var formatOptions = { isIslamic: base.islamicRegex.test(option.calendar) };\n        if (isBlazor() && option.isServerRendered) {\n            option = base.compareBlazorDateFormats(option, culture);\n        }\n        var resPattern = option.format ||\n            base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n        formatOptions.dateSeperator = isBlazor() ? getValue('dateSeperator', dateObject) : base.getDateSeparator(dependable.dateObject);\n        if (isUndefined(resPattern)) {\n            throwError('Format options or type given must be invalid');\n        }\n        else {\n            resPattern = base.ConvertDateToWeekFormat(resPattern);\n            if (isBlazor()) {\n                resPattern = resPattern.replace(/tt/, 'a');\n            }\n            formatOptions.pattern = resPattern;\n            formatOptions.numMapper = isBlazor() ?\n                extend({}, numObject) : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n            var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n            for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n                var str = patternMatch_1[_i];\n                var len = str.length;\n                var char = str[0];\n                if (char === 'K') {\n                    char = 'h';\n                }\n                /* tslint:disable no-any */\n                var charKey = datePartMatcher[char];\n                switch (char) {\n                    case 'E':\n                    case 'c':\n                        if (isBlazor()) {\n                            formatOptions.weekday = getValue('days.' + base.monthIndex[len], dateObject);\n                        }\n                        else {\n                            formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n                        }\n                        break;\n                    case 'M':\n                    case 'L':\n                        if (isBlazor()) {\n                            formatOptions.month = getValue('months.' + base.monthIndex[len], dateObject);\n                        }\n                        else {\n                            formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n                        }\n                        break;\n                    case 'a':\n                        formatOptions.designator = isBlazor() ?\n                            getValue('dayPeriods', dateObject) : getValue('dayPeriods.format.wide', dateObject);\n                        break;\n                    case 'G':\n                        var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n                        formatOptions.era = isBlazor() ? getValue('eras', dateObject) : getValue('eras.' + eText, dependable.dateObject);\n                        break;\n                    case 'z':\n                        formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n                        break;\n                }\n            }\n        }\n        return function (value) {\n            if (isNaN(value.getDate())) {\n                return null;\n            }\n            return _this.intDateFormatter(value, formatOptions);\n        };\n    };\n    /**\n     * Returns formatted date string based on options passed.\n     * @param {Date} value\n     * @param {FormatOptions} options\n     */\n    // tslint:disable-next-line:max-func-body-length\n    DateFormat.intDateFormatter = function (value, options) {\n        var pattern = options.pattern;\n        var ret = '';\n        var matches = pattern.match(base.dateParseRegex);\n        var dObject = this.getCurrentDateValue(value, options.isIslamic);\n        for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n            var match = matches_1[_i];\n            var length_1 = match.length;\n            var char = match[0];\n            if (char === 'K') {\n                char = 'h';\n            }\n            var curval = void 0;\n            var curvalstr = '';\n            var isNumber = void 0;\n            var processNumber = void 0;\n            var curstr = '';\n            switch (char) {\n                case 'M':\n                case 'L':\n                    curval = dObject.month;\n                    if (length_1 > 2) {\n                        ret += options.month[curval];\n                    }\n                    else {\n                        isNumber = true;\n                    }\n                    break;\n                case 'E':\n                case 'c':\n                    ret += options.weekday[weekdayKey[value.getDay()]];\n                    break;\n                case 'H':\n                case 'h':\n                case 'm':\n                case 's':\n                case 'd':\n                case 'f':\n                    isNumber = true;\n                    if (char === 'd') {\n                        curval = dObject.date;\n                    }\n                    else if (char === 'f') {\n                        isNumber = false;\n                        processNumber = true;\n                        curvalstr = value[timeSetter[char]]().toString();\n                        curvalstr = curvalstr.substring(0, length_1);\n                        var curlength = curvalstr.length;\n                        if (length_1 !== curlength) {\n                            if (length_1 > 3) {\n                                continue;\n                            }\n                            for (var i = 0; i < length_1 - curlength; i++) {\n                                curvalstr = '0' + curvalstr.toString();\n                            }\n                        }\n                        curstr += curvalstr;\n                    }\n                    else {\n                        curval = value[timeSetter[char]]();\n                    }\n                    if (char === 'h') {\n                        curval = curval % 12 || 12;\n                    }\n                    break;\n                case 'y':\n                    processNumber = true;\n                    curstr += dObject.year;\n                    if (length_1 === 2) {\n                        curstr = curstr.substr(curstr.length - 2);\n                    }\n                    break;\n                case 'a':\n                    var desig = value.getHours() < 12 ? 'am' : 'pm';\n                    ret += options.designator[desig];\n                    break;\n                case 'G':\n                    var dec = value.getFullYear() < 0 ? 0 : 1;\n                    var retu = options.era[dec];\n                    if (isNullOrUndefined(retu)) {\n                        retu = options.era[dec ? 0 : 1];\n                    }\n                    ret += retu || '';\n                    break;\n                case '\\'':\n                    ret += (match === '\\'\\'') ? '\\'' : match.replace(/\\'/g, '');\n                    break;\n                case 'z':\n                    var timezone = value.getTimezoneOffset();\n                    var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n                    pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n                    if (timezone === 0) {\n                        ret += options.timeZone.gmtZeroFormat;\n                    }\n                    else {\n                        processNumber = true;\n                        curstr = this.getTimeZoneValue(timezone, pattern_1);\n                    }\n                    curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n                    break;\n                case ':':\n                    ret += options.numMapper.numberSymbols[timeSeparator];\n                    /* tslint:enable no-any */\n                    break;\n                case '/':\n                    ret += options.dateSeperator;\n                    break;\n                case 'W':\n                    isNumber = true;\n                    curval = base.getWeekOfYear(value);\n                    break;\n                default:\n                    ret += match;\n            }\n            if (isNumber) {\n                processNumber = true;\n                curstr = this.checkTwodigitNumber(curval, length_1);\n            }\n            if (processNumber) {\n                ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n            }\n        }\n        return ret;\n    };\n    DateFormat.getCurrentDateValue = function (value, isIslamic) {\n        if (isIslamic) {\n            return HijriParser.getHijriDate(value);\n        }\n        return { year: value.getFullYear(), month: value.getMonth() + 1, date: value.getDate() };\n    };\n    /**\n     * Returns two digit numbers for given value and length\n     */\n    DateFormat.checkTwodigitNumber = function (val, len) {\n        var ret = val + '';\n        if (len === 2 && ret.length !== 2) {\n            return '0' + ret;\n        }\n        return ret;\n    };\n    /**\n     * Returns the value of the Time Zone.\n     * @param {number} tVal\n     * @param {string} pattern\n     * @private\n     */\n    DateFormat.getTimeZoneValue = function (tVal, pattern) {\n        var _this = this;\n        var splt = pattern.split(';');\n        var curPattern = splt[tVal > 0 ? 1 : 0];\n        var no = Math.abs(tVal);\n        return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n            var len = str.length;\n            var ishour = str.indexOf('H') !== -1;\n            return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n        });\n    };\n    return DateFormat;\n}());\nexport { DateFormat };\n","import { isUndefined, throwError, isNullOrUndefined, extend, isBlazor, getValue } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n    'ms': 'minimumSignificantDigits',\n    'ls': 'maximumSignificantDigits',\n    'mf': 'minimumFractionDigits',\n    'lf': 'maximumFractionDigits',\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n    function NumberFormat() {\n    }\n    /**\n     * Returns the formatter function for given skeleton.\n     * @param {string} culture -  Specifies the culture name to be which formatting.\n     * @param {NumberFormatOptions} option - Specific the format in which number  will format.\n     * @param {Object} object- Specifies the global cldr data collection.\n     * @return Function.\n     */\n    NumberFormat.numberFormatter = function (culture, option, cldr) {\n        var _this = this;\n        var fOptions = extend({}, option);\n        var cOptions = {};\n        var dOptions = {};\n        var symbolPattern;\n        var dependable = base.getDependables(cldr, culture, '', true);\n        var numObject = dependable.numericObject;\n        dOptions.numberMapper = isBlazor() ? extend({}, numObject) :\n            parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n        dOptions.currencySymbol = isBlazor() ? getValue('currencySymbol', numObject) : base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode, option.altSymbol);\n        /* tslint:disable no-any */\n        dOptions.percentSymbol = isBlazor() ? getValue('numberSymbols.percentSign', numObject) :\n            dOptions.numberMapper.numberSymbols[percentSign];\n        dOptions.minusSymbol = isBlazor() ? getValue('numberSymbols.minusSign', numObject) :\n            dOptions.numberMapper.numberSymbols[minusSign];\n        var symbols = dOptions.numberMapper.numberSymbols;\n        if ((option.format) && !(base.formatRegex.test(option.format))) {\n            cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n        }\n        else {\n            extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n            fOptions.isCurrency = fOptions.type === 'currency';\n            fOptions.isPercent = fOptions.type === 'percent';\n            if (!isBlazor()) {\n                symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n            }\n            fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n            this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n            if (!isUndefined(fOptions.fractionDigits)) {\n                fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n            }\n            if (isUndefined(fOptions.useGrouping)) {\n                fOptions.useGrouping = true;\n            }\n            if (fOptions.isCurrency && !isBlazor()) {\n                symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n            }\n            if (!isBlazor()) {\n                var split = symbolPattern.split(';');\n                cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n                cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n                if (fOptions.useGrouping) {\n                    fOptions.groupSeparator = symbols[mapper[2]];\n                    fOptions.groupData = this.getGroupingDetails(split[0]);\n                }\n            }\n            else {\n                cOptions.nData = extend({}, {}, getValue(fOptions.type + 'nData', numObject));\n                cOptions.pData = extend({}, {}, getValue(fOptions.type + 'pData', numObject));\n                if (fOptions.type === 'currency' && option.currency) {\n                    base.replaceBlazorCurrency([cOptions.pData, cOptions.nData], dOptions.currencySymbol, option.currency);\n                }\n            }\n            var minFrac = isUndefined(fOptions.minimumFractionDigits);\n            if (minFrac) {\n                fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n            }\n            if (isUndefined(fOptions.maximumFractionDigits)) {\n                var mval = cOptions.nData.maximumFraction;\n                fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n            }\n            var mfrac = fOptions.minimumFractionDigits;\n            var lfrac = fOptions.maximumFractionDigits;\n            if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n                if (mfrac > lfrac) {\n                    fOptions.maximumFractionDigits = mfrac;\n                }\n            }\n        }\n        extend(cOptions.nData, fOptions);\n        extend(cOptions.pData, fOptions);\n        return function (value) {\n            if (isNaN(value)) {\n                return symbols[mapper[1]];\n            }\n            else if (!isFinite(value)) {\n                return symbols[mapper[0]];\n            }\n            return _this.intNumberFormatter(value, cOptions, dOptions);\n        };\n    };\n    /**\n     * Returns grouping details for the pattern provided\n     * @param {string} pattern\n     * @returns {GroupDetails}\n     */\n    NumberFormat.getGroupingDetails = function (pattern) {\n        var ret = {};\n        var match = pattern.match(base.negativeDataRegex);\n        if (match && match[4]) {\n            var pattern_1 = match[4];\n            var p = pattern_1.lastIndexOf(',');\n            if (p !== -1) {\n                var temp = pattern_1.split('.')[0];\n                ret.primary = (temp.length - p) - 1;\n                var s = pattern_1.lastIndexOf(',', p - 1);\n                if (s !== -1) {\n                    ret.secondary = p - 1 - s;\n                }\n            }\n        }\n        return ret;\n    };\n    /**\n     * Returns if the provided integer range is valid.\n     * @param {number} val1\n     * @param {number} val2\n     * @param {boolean} checkbothExist\n     * @param {boolean} isFraction\n     * @returns {boolean}\n     */\n    NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n        var decide = isFraction ? 'f' : 's';\n        var dint = 0;\n        var str1 = errorText['l' + decide];\n        var str2 = errorText['m' + decide];\n        if (!isUndefined(val1)) {\n            this.checkRange(val1, str1, isFraction);\n            dint++;\n        }\n        if (!isUndefined(val2)) {\n            this.checkRange(val2, str2, isFraction);\n            dint++;\n        }\n        if (dint === 2) {\n            if (val1 < val2) {\n                throwError(str2 + 'specified must be less than the' + str1);\n            }\n            else {\n                return true;\n            }\n        }\n        else if (checkbothExist && dint === 1) {\n            throwError('Both' + str2 + 'and' + str2 + 'must be present');\n        }\n        return false;\n    };\n    /**\n     * Check if the provided fraction range is valid\n     * @param {number} val\n     * @param {string} text\n     * @param {boolean} isFraction\n     * @returns {void}\n     */\n    NumberFormat.checkRange = function (val, text, isFraction) {\n        var range = isFraction ? [0, 20] : [1, 21];\n        if (val < range[0] || val > range[1]) {\n            throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n        }\n    };\n    /**\n     * Returns formatted numeric string for provided formatting options\n     * @param {number} value\n     * @param {base.GenericFormatOptions} fOptions\n     * @param {CommonOptions} dOptions\n     * @returns {string}\n     */\n    NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n        var curData;\n        if (isUndefined(fOptions.nData.type)) {\n            return undefined;\n        }\n        else {\n            if (value < 0) {\n                value = value * -1;\n                curData = fOptions.nData;\n            }\n            else if (value === 0) {\n                curData = fOptions.zeroData || fOptions.pData;\n            }\n            else {\n                curData = fOptions.pData;\n            }\n            var fValue = '';\n            if (curData.isPercent) {\n                value = value * 100;\n            }\n            if (curData.groupOne) {\n                fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n            }\n            else {\n                fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n                if (curData.minimumIntegerDigits) {\n                    fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n                }\n            }\n            if (curData.type === 'scientific') {\n                fValue = value.toExponential(curData.maximumFractionDigits);\n                fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n            }\n            fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n            if (curData.useGrouping) {\n                fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n            }\n            fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n            if (curData.nlead === 'N/A') {\n                return curData.nlead;\n            }\n            else {\n                return curData.nlead + fValue + curData.nend;\n            }\n        }\n    };\n    /**\n     * Returns significant digits processed numeric string\n     * @param {number} value\n     * @param {number} min\n     * @param {number} max\n     * @returns {string}\n     */\n    NumberFormat.processSignificantDigits = function (value, min, max) {\n        var temp = value + '';\n        var tn;\n        var length = temp.length;\n        if (length < min) {\n            return value.toPrecision(min);\n        }\n        else {\n            temp = value.toPrecision(max);\n            tn = +temp;\n            return tn + '';\n        }\n    };\n    /**\n     * Returns grouped numeric string\n     * @param {string} val\n     * @param {number} level1\n     * @param {string} sep\n     * @param {string} decimalSymbol\n     * @param {number} level2\n     * @returns {string}\n     */\n    NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n        var flag = !isNullOrUndefined(level2) && level2 !== 0;\n        var split = val.split(decimalSymbol);\n        var prefix = split[0];\n        var length = prefix.length;\n        var str = '';\n        while (length > level1) {\n            str = prefix.slice(length - level1, length) + (str.length ?\n                (sep + str) : '');\n            length -= level1;\n            if (flag) {\n                level1 = level2;\n                flag = false;\n            }\n        }\n        split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n        return split.join(decimalSymbol);\n    };\n    /**\n     * Returns fraction processed numeric string\n     * @param {number} value\n     * @param {number} min\n     * @param {number} max\n     * @returns {string}\n     */\n    NumberFormat.processFraction = function (value, min, max) {\n        var temp = (value + '').split('.')[1];\n        var length = temp ? temp.length : 0;\n        if (min && length < min) {\n            var ret = '';\n            if (length === 0) {\n                ret = value.toFixed(min);\n            }\n            else {\n                ret += value;\n                for (var j = 0; j < min - length; j++) {\n                    ret += '0';\n                }\n                return ret;\n            }\n            return value.toFixed(min);\n        }\n        else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n            return value.toFixed(max);\n        }\n        return value + '';\n    };\n    /**\n     * Returns integer processed numeric string\n     * @param {string} value\n     * @param {number} min\n     * @returns {string}\n     */\n    NumberFormat.processMinimumIntegers = function (value, min) {\n        var temp = value.split('.');\n        var lead = temp[0];\n        var len = lead.length;\n        if (len < min) {\n            for (var i = 0; i < min - len; i++) {\n                lead = '0' + lead;\n            }\n            temp[0] = lead;\n        }\n        return temp.join('.');\n    };\n    return NumberFormat;\n}());\nexport { NumberFormat };\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined, isBlazor } from '../util';\nimport { datePartMatcher } from './date-formatter';\nimport { HijriParser } from '../hijri-parser';\nvar number = 'numbers';\nvar defNoSystem = 'defaultNumberingSystem';\nvar noSystem = 'numberingSystem';\nvar standalone = 'stand-alone';\nvar curWeekDay = 'curWeekDay';\nvar latnRegex = /^[0-9]*$/;\nvar abbreviateRegex = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|ccc/;\nvar timeSetter = {\n    minute: 'setMinutes',\n    hour: 'setHours',\n    second: 'setSeconds',\n    day: 'setDate',\n    month: 'setMonth',\n    milliseconds: 'setMilliseconds'\n};\nvar month = 'months';\n/* tslint:disable no-any */\n/**\n * Date Parser.\n * @private\n */\nvar DateParser = /** @class */ (function () {\n    function DateParser() {\n    }\n    /**\n     * Returns the parser function for given skeleton.\n     * @param {string} -  Specifies the culture name to be which formatting.\n     * @param {DateFormatOptions} - Specific the format in which string date  will be parsed.\n     * @param {cldr} - Specifies the global cldr data collection.\n     *  @return Function.\n     */\n    // tslint:disable-next-line:max-func-body-length\n    DateParser.dateParser = function (culture, option, cldr) {\n        var _this = this;\n        var dependable = base.getDependables(cldr, culture, option.calendar);\n        // tslint:disable-next-line\n        var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), false, isBlazor());\n        var parseOptions = {};\n        if (isBlazor() && option.isServerRendered) {\n            option = base.compareBlazorDateFormats(option, culture);\n        }\n        var resPattern = option.format ||\n            base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n        var regexString = '';\n        var hourOnly;\n        if (isUndefined(resPattern)) {\n            throwError('Format options or type given must be invalid');\n        }\n        else {\n            resPattern = base.ConvertDateToWeekFormat(resPattern);\n            parseOptions = { isIslamic: base.islamicRegex.test(option.calendar), pattern: resPattern, evalposition: {}, culture: culture };\n            var patternMatch = resPattern.match(base.dateParseRegex) || [];\n            var length_1 = patternMatch.length;\n            var gmtCorrection = 0;\n            var zCorrectTemp = 0;\n            var isgmtTraversed = false;\n            var nRegx = numOptions.numericRegex;\n            // tslint:disable-next-line\n            var numMapper = isBlazor() ? dependable.parserObject.numbers :\n                parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n            for (var i = 0; i < length_1; i++) {\n                var str = patternMatch[i];\n                var len = str.length;\n                var char = (str[0] === 'K') ? 'h' : str[0];\n                var isNumber = void 0;\n                var canUpdate = void 0;\n                // tslint:disable-next-line\n                var charKey = datePartMatcher[char];\n                var optional = (len === 2) ? '' : '?';\n                if (isgmtTraversed) {\n                    gmtCorrection = zCorrectTemp;\n                    isgmtTraversed = false;\n                }\n                switch (char) {\n                    case 'E':\n                    case 'c':\n                        // tslint:disable\n                        var weekData = void 0;\n                        if (isBlazor()) {\n                            weekData = getValue('days.' + base.monthIndex[len], dependable.dateObject);\n                        }\n                        else {\n                            weekData = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n                        }\n                        var weekObject = parser.reverseObject(weekData);\n                        // tslint:enable\n                        regexString += '(' + Object.keys(weekObject).join('|') + ')';\n                        break;\n                    case 'M':\n                    case 'L':\n                    case 'd':\n                    case 'm':\n                    case 's':\n                    case 'h':\n                    case 'H':\n                    case 'f':\n                        canUpdate = true;\n                        if ((char === 'M' || char === 'L') && len > 2) {\n                            var monthData = void 0;\n                            if (isBlazor()) {\n                                /* tslint:disable no-any */\n                                monthData = getValue('months.' + base.monthIndex[len], dependable.dateObject);\n                            }\n                            else {\n                                /* tslint:disable no-any */\n                                monthData = dependable.dateObject[month][standalone][base.monthIndex[len]];\n                            }\n                            // tslint:disable-next-line\n                            parseOptions[charKey] = parser.reverseObject(monthData);\n                            /* tslint:disable no-any */\n                            regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n                        }\n                        else if (char === 'f') {\n                            if (len > 3) {\n                                continue;\n                            }\n                            isNumber = true;\n                            regexString += '(' + nRegx + nRegx + '?' + nRegx + '?' + ')';\n                        }\n                        else {\n                            isNumber = true;\n                            regexString += '(' + nRegx + nRegx + optional + ')';\n                        }\n                        if (char === 'h') {\n                            parseOptions.hour12 = true;\n                        }\n                        break;\n                    case 'W':\n                        var opt = len === 1 ? '?' : '';\n                        regexString += '(' + nRegx + opt + nRegx + ')';\n                        break;\n                    case 'y':\n                        canUpdate = isNumber = true;\n                        if (len === 2) {\n                            regexString += '(' + nRegx + nRegx + ')';\n                        }\n                        else {\n                            regexString += '(' + nRegx + '{' + len + ',})';\n                        }\n                        break;\n                    case 'a':\n                        canUpdate = true;\n                        var periodValur = isBlazor() ?\n                            getValue('dayPeriods', dependable.dateObject) :\n                            getValue('dayPeriods.format.wide', dependable.dateObject);\n                        parseOptions[charKey] = parser.reverseObject(periodValur);\n                        regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n                        break;\n                    case 'G':\n                        canUpdate = true;\n                        var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n                        parseOptions[charKey] = parser.reverseObject(isBlazor() ?\n                            getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n                        regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n                        break;\n                    case 'z':\n                        var tval = new Date().getTimezoneOffset();\n                        canUpdate = (tval !== 0);\n                        parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n                        var tzone = parseOptions[charKey];\n                        hourOnly = (len < 4);\n                        var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n                        hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n                        regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n                        isgmtTraversed = true;\n                        zCorrectTemp = hourOnly ? 6 : 12;\n                        break;\n                    case '\\'':\n                        var iString = str.replace(/\\'/g, '');\n                        regexString += '(' + iString + ')?';\n                        break;\n                    default:\n                        regexString += '([\\\\D])';\n                        break;\n                }\n                if (canUpdate) {\n                    parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n                }\n                if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n                    parseOptions.parserRegex = new RegExp('^' + regexString + '$', 'i');\n                }\n            }\n        }\n        return function (value) {\n            var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n            if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n                return null;\n            }\n            if (parseOptions.isIslamic) {\n                var dobj = {};\n                var tYear = parsedDateParts.year;\n                var tDate = parsedDateParts.day;\n                var tMonth = parsedDateParts.month;\n                var ystrig = tYear ? (tYear + '') : '';\n                var is2DigitYear = (ystrig.length === 2);\n                if (!tYear || !tMonth || !tDate || is2DigitYear) {\n                    dobj = HijriParser.getHijriDate(new Date());\n                }\n                if (is2DigitYear) {\n                    tYear = parseInt((dobj.year + '').slice(0, 2) + ystrig, 10);\n                }\n                // tslint:disable-next-line\n                var dateObject = HijriParser.toGregorian(tYear || dobj.year, tMonth || dobj.month, tDate || dobj.date);\n                parsedDateParts.year = dateObject.getFullYear();\n                parsedDateParts.month = dateObject.getMonth() + 1;\n                parsedDateParts.day = dateObject.getDate();\n            }\n            return _this.getDateObject(parsedDateParts);\n        };\n    };\n    /* tslint:disable */\n    /**\n     * Returns date object for provided date options\n     * @param {DateParts} options\n     * @param {Date} value\n     * @returns {Date}\n     */\n    DateParser.getDateObject = function (options, value) {\n        var res = value || new Date();\n        res.setMilliseconds(0);\n        var tKeys = ['hour', 'minute', 'second', 'milliseconds', 'month', 'day'];\n        var y = options.year;\n        var desig = options.designator;\n        var tzone = options.timeZone;\n        if (!isUndefined(y)) {\n            var len = (y + '').length;\n            if (len <= 2) {\n                var century = Math.floor(res.getFullYear() / 100) * 100;\n                y += century;\n            }\n            res.setFullYear(y);\n        }\n        for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n            var key = tKeys_1[_i];\n            var tValue = options[key];\n            if (isUndefined(tValue) && key === \"day\") {\n                res.setDate(1);\n            }\n            if (!isUndefined(tValue)) {\n                if (key === 'month') {\n                    tValue -= 1;\n                    if (tValue < 0 || tValue > 11) {\n                        return new Date('invalid');\n                    }\n                    var pDate = res.getDate();\n                    res.setDate(1);\n                    res[timeSetter[key]](tValue);\n                    var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n                    res.setDate(pDate < lDate ? pDate : lDate);\n                }\n                else {\n                    if (key === 'day') {\n                        var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n                        if ((tValue < 1 || tValue > lastDay)) {\n                            return null;\n                        }\n                    }\n                    res[timeSetter[key]](tValue);\n                }\n            }\n        }\n        if (!isUndefined(desig)) {\n            var hour = res.getHours();\n            if (desig === 'pm') {\n                res.setHours(hour + (hour === 12 ? 0 : 12));\n            }\n            else if (hour === 12) {\n                res.setHours(0);\n            }\n        }\n        if (!isUndefined(tzone)) {\n            var tzValue = tzone - res.getTimezoneOffset();\n            if (tzValue !== 0) {\n                res.setMinutes(res.getMinutes() + tzValue);\n            }\n        }\n        return res;\n    };\n    /**\n     * Returns date parsing options for provided value along with parse and numeric options\n     * @param {string} value\n     * @param {ParseOptions} parseOptions\n     * @param {NumericOptions} num\n     * @returns {DateParts}\n     */\n    DateParser.internalDateParse = function (value, parseOptions, num) {\n        var matches = value.match(parseOptions.parserRegex);\n        var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n        var nRegx = num.numericRegex;\n        if (isNullOrUndefined(matches)) {\n            return null;\n        }\n        else {\n            var props = Object.keys(parseOptions.evalposition);\n            for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n                var prop = props_1[_i];\n                var curObject = parseOptions.evalposition[prop];\n                var matchString = matches[curObject.pos];\n                if (curObject.isNumber) {\n                    retOptions[prop] = this.internalNumberParser(matchString, num);\n                }\n                else {\n                    if (prop === 'timeZone' && !isUndefined(matchString)) {\n                        var pos = curObject.pos;\n                        var val = void 0;\n                        var tmatch = matches[pos + 1];\n                        var flag = !isUndefined(tmatch);\n                        if (curObject.hourOnly) {\n                            val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n                        }\n                        else {\n                            val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n                            val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n                        }\n                        if (!isNullOrUndefined(val)) {\n                            retOptions[prop] = val;\n                        }\n                    }\n                    else {\n                        matchString = ((prop === 'month') && (!parseOptions.isIslamic) && (parseOptions.culture === 'en' || parseOptions.culture === 'en-GB' || parseOptions.culture === 'en-US'))\n                            ? matchString[0].toUpperCase() + matchString.substring(1).toLowerCase() : matchString;\n                        retOptions[prop] = parseOptions[prop][matchString];\n                    }\n                }\n            }\n            if (parseOptions.hour12) {\n                retOptions.hour12 = true;\n            }\n        }\n        return retOptions;\n    };\n    /**\n     * Returns parsed number for provided Numeric string and Numeric Options\n     * @param {string} value\n     * @param {NumericOptions} option\n     * @returns {number}\n     */\n    DateParser.internalNumberParser = function (value, option) {\n        value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n        if (latnRegex.test(value)) {\n            return +value;\n        }\n        return null;\n    };\n    /**\n     * Returns parsed time zone RegExp for provided hour format and time zone\n     * @param {string} hourFormat\n     * @param {base.TimeZoneOptions} tZone\n     * @param {string} nRegex\n     * @returns {string}\n     */\n    DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n        var pattern = tZone.gmtFormat;\n        var ret;\n        var result;\n        var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n        var splitStr;\n        ret = hourFormat.replace('+', '\\\\+');\n        if (hourFormat.indexOf('HH') !== -1) {\n            ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n        }\n        else {\n            ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n        }\n        splitStr = (ret.split(';').map(function (str) {\n            return pattern.replace('{0}', str);\n        }));\n        ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n        return ret;\n    };\n    /**\n     * Returns zone based value.\n     * @param {boolean} flag\n     * @param {string} val1\n     * @param {string} val2\n     * @param {NumericOptions} num\n     * @returns {number}\n     */\n    DateParser.getZoneValue = function (flag, val1, val2, num) {\n        var ival = flag ? val1 : val2;\n        if (!ival) {\n            return 0;\n        }\n        var value = this.internalNumberParser(ival, num);\n        if (flag) {\n            return -value;\n        }\n        return value;\n    };\n    return DateParser;\n}());\nexport { DateParser };\n/* tslint:enable */\n","import { extend, isNullOrUndefined, isBlazor, getValue } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar formatRegex = /(^[ncpa]{1})([0-1]?[0-9]|20)?$/i;\nvar parseRegex = /^([^0-9]*)(([0-9,]*[0-9]+)(\\.[0-9]+)?)([Ee][+-]?[0-9]+)?([^0-9]*)$/;\nvar groupRegex = /,/g;\nvar latnDecimalRegex = /^[0-9]*(\\.[0-9]+)?$/;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n    function NumberParser() {\n    }\n    /**\n     * Returns the parser function for given skeleton.\n     * @param {string} -  Specifies the culture name to be which formatting.\n     * @param {NumberFormatOptions} - Specific the format in which number  will parsed.\n     * @param {cldr} - Specifies the global cldr data collection.\n     * @return Function.\n     */\n    NumberParser.numberParser = function (culture, option, cldr) {\n        var _this = this;\n        var dependable = base.getDependables(cldr, culture, '', true);\n        var parseOptions = { custom: true };\n        var numOptions;\n        if ((base.formatRegex.test(option.format)) || !(option.format)) {\n            extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n            parseOptions.custom = false;\n            if (!parseOptions.fractionDigits) {\n                if (option.maximumFractionDigits) {\n                    parseOptions.maximumFractionDigits = option.maximumFractionDigits;\n                }\n            }\n        }\n        else {\n            extend(parseOptions, base.customFormat(option.format, null, null));\n        }\n        var numbers = getValue('numbers', dependable.parserObject);\n        numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n        parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n        // tslint:disable-next-line:no-any\n        parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n        var symbolpattern;\n        if (!isBlazor()) {\n            symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n            if (symbolpattern) {\n                symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n                var split = symbolpattern.split(';');\n                parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n                parseOptions.pData = base.getFormatData(split[0], true, '');\n            }\n        }\n        else {\n            parseOptions.nData = extend({}, {}, getValue(parseOptions.type + 'nData', numbers));\n            parseOptions.pData = extend({}, {}, getValue(parseOptions.type + 'pData', numbers));\n            if (parseOptions.type === 'currency' && option.currency) {\n                base.replaceBlazorCurrency([parseOptions.pData, parseOptions.nData], getValue('currencySymbol', numbers), option.currency);\n            }\n        }\n        return function (value) {\n            return _this.getParsedNumber(value, parseOptions, numOptions);\n        };\n    };\n    /**\n     * Returns parsed number for the provided formatting options\n     * @param {string} value\n     * @param {NumericParts} options\n     * @param {NumericOptions} numOptions\n     * @returns {number}\n     */\n    NumberParser.getParsedNumber = function (value, options, numOptions) {\n        var isNegative;\n        var isPercent;\n        var tempValue;\n        var lead;\n        var end;\n        var ret;\n        if (value.indexOf(options.infinity) !== -1) {\n            return Infinity;\n        }\n        else {\n            value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n            value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n            if (value.indexOf('.') === 0) {\n                value = '0' + value;\n            }\n            var matches = value.match(parseRegex);\n            if (isNullOrUndefined(matches)) {\n                return NaN;\n            }\n            lead = matches[1];\n            tempValue = matches[2];\n            var exponent = matches[5];\n            end = matches[6];\n            isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n                ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n            isPercent = isNegative ?\n                options.nData.isPercent :\n                options.pData.isPercent;\n            tempValue = tempValue.replace(groupRegex, '');\n            if (exponent) {\n                tempValue += exponent;\n            }\n            ret = +tempValue;\n            if (options.type === 'percent' || isPercent) {\n                ret = ret / 100;\n            }\n            if (options.custom || options.fractionDigits) {\n                ret = parseFloat(ret.toFixed(options.custom ?\n                    (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n            }\n            if (options.maximumFractionDigits) {\n                ret = this.convertMaxFracDigits(tempValue, options, ret, isNegative);\n            }\n            if (isNegative) {\n                ret *= -1;\n            }\n            return ret;\n        }\n    };\n    NumberParser.convertMaxFracDigits = function (value, options, ret, isNegative) {\n        var decimalSplitValue = value.split('.');\n        if (decimalSplitValue[1] && decimalSplitValue[1].length > options.maximumFractionDigits) {\n            ret = +(ret.toFixed(options.custom ?\n                (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.maximumFractionDigits));\n        }\n        return ret;\n    };\n    return NumberParser;\n}());\nexport { NumberParser };\n","import { isNullOrUndefined, getValue, extend, isBlazor } from './util';\nvar Observer = /** @class */ (function () {\n    function Observer(context) {\n        this.ranArray = [];\n        this.boundedEvents = {};\n        if (isNullOrUndefined(context)) {\n            return;\n        }\n        this.context = context;\n    }\n    ;\n    /**\n     * To attach handler for given property in current context.\n     * @param {string} property - specifies the name of the event.\n     * @param {Function} handler - Specifies the handler function to be called while event notified.\n     * @param {Object} context - Specifies the context binded to the handler.\n     * @param {string} id - specifies the random generated id.\n     * @return {void}\n     */\n    Observer.prototype.on = function (property, handler, context, id) {\n        if (isNullOrUndefined(handler)) {\n            return;\n        }\n        var cntxt = context || this.context;\n        if (this.notExist(property)) {\n            this.boundedEvents[property] = [{ handler: handler, context: cntxt }];\n            return;\n        }\n        if (!isNullOrUndefined(id)) {\n            if (this.ranArray.indexOf(id) === -1) {\n                this.ranArray.push(id);\n                this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });\n            }\n        }\n        else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n            this.boundedEvents[property].push({ handler: handler, context: cntxt });\n        }\n    };\n    /**\n     * To remove handlers from a event attached using on() function.\n     * @param {string} eventName - specifies the name of the event.\n     * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n     * @param {string} id - specifies the random generated id.\n     * @return {void}\n     */\n    Observer.prototype.off = function (property, handler, id) {\n        if (this.notExist(property)) {\n            return;\n        }\n        var curObject = getValue(property, this.boundedEvents);\n        if (handler) {\n            for (var i = 0; i < curObject.length; i++) {\n                if (id) {\n                    if (curObject[i].id === id) {\n                        curObject.splice(i, 1);\n                        var indexLocation = this.ranArray.indexOf(id);\n                        if (indexLocation !== -1) {\n                            this.ranArray.splice(indexLocation, 1);\n                        }\n                        break;\n                    }\n                }\n                else if (handler === curObject[i].handler) {\n                    curObject.splice(i, 1);\n                    break;\n                }\n            }\n        }\n        else {\n            delete this.boundedEvents[property];\n        }\n    };\n    /**\n     * To notify the handlers in the specified event.\n     * @param {string} property - Specifies the event to be notify.\n     * @param {Object} args - Additional parameters to pass while calling the handler.\n     * @param {Function} successHandler - this function will invoke after event successfully triggered\n     * @param {Function} errorHandler - this function will invoke after event if it was failure to call.\n     * @return {void}\n     */\n    Observer.prototype.notify = function (property, argument, successHandler, errorHandler) {\n        if (this.notExist(property)) {\n            if (successHandler) {\n                successHandler.call(this, argument);\n            }\n            return;\n        }\n        if (argument) {\n            argument.name = property;\n        }\n        var blazor = 'Blazor';\n        var curObject = getValue(property, this.boundedEvents).slice(0);\n        if (window[blazor]) {\n            return this.blazorCallback(curObject, argument, successHandler, errorHandler, 0);\n        }\n        else {\n            for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n                var cur = curObject_1[_i];\n                cur.handler.call(cur.context, argument);\n            }\n            if (successHandler) {\n                successHandler.call(this, argument);\n            }\n        }\n    };\n    Observer.prototype.blazorCallback = function (objs, argument, successHandler, errorHandler, index) {\n        var _this = this;\n        var isTrigger = index === objs.length - 1;\n        if (index < objs.length) {\n            var obj_1 = objs[index];\n            var promise = obj_1.handler.call(obj_1.context, argument);\n            if (promise && typeof promise.then === 'function') {\n                if (!successHandler) {\n                    return promise;\n                }\n                promise.then(function (data) {\n                    data = typeof data === 'string' && _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data;\n                    extend(argument, argument, data, true);\n                    if (successHandler && isTrigger) {\n                        successHandler.call(obj_1.context, argument);\n                    }\n                    else {\n                        return _this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n                    }\n                }).catch(function (data) {\n                    if (errorHandler) {\n                        errorHandler.call(obj_1.context, typeof data === 'string' &&\n                            _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data);\n                    }\n                });\n            }\n            else if (successHandler && isTrigger) {\n                successHandler.call(obj_1.context, argument);\n            }\n            else {\n                return this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n            }\n        }\n    };\n    // tslint:disable-next-line:no-any\n    Observer.prototype.dateReviver = function (key, value) {\n        var dPattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\n        if (isBlazor && typeof value === 'string' && value.match(dPattern) !== null) {\n            return (new Date(value));\n        }\n        return (value);\n    };\n    Observer.prototype.isJson = function (value) {\n        try {\n            JSON.parse(value);\n        }\n        catch (e) {\n            return false;\n        }\n        return true;\n    };\n    /**\n     * To destroy handlers in the event\n     */\n    Observer.prototype.destroy = function () {\n        this.boundedEvents = this.context = undefined;\n    };\n    /**\n     * Returns if the property exists.\n     */\n    Observer.prototype.notExist = function (prop) {\n        return this.boundedEvents.hasOwnProperty(prop) === false || this.boundedEvents[prop].length <= 0;\n    };\n    /**\n     * Returns if the handler is present.\n     */\n    Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n        for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n            var cur = boundedEvents_1[_i];\n            if (cur.handler === handler) {\n                return true;\n            }\n        }\n        return false;\n    };\n    return Observer;\n}());\nexport { Observer };\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue, isBlazor } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n    function Internationalization(cultureName) {\n        if (cultureName) {\n            this.culture = cultureName;\n        }\n    }\n    /**\n     * Returns the format function for given options.\n     * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n     * @returns {Function}\n     */\n    Internationalization.prototype.getDateFormat = function (options) {\n        return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n    };\n    /**\n     * Returns the format function for given options.\n     * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n     * @returns {Function}\n     */\n    Internationalization.prototype.getNumberFormat = function (options) {\n        if (options && !options.currency) {\n            options.currency = defaultCurrencyCode;\n        }\n        if (isBlazor() && options && !options.format) {\n            options.minimumFractionDigits = 0;\n        }\n        return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n    };\n    /**\n     * Returns the parser function for given options.\n     * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n     * @returns {Function}\n     */\n    Internationalization.prototype.getDateParser = function (options) {\n        return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n    };\n    /**\n     * Returns the parser function for given options.\n     * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n     * @returns {Function}\n     */\n    Internationalization.prototype.getNumberParser = function (options) {\n        if (isBlazor() && options && !options.format) {\n            options.minimumFractionDigits = 0;\n        }\n        return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n    };\n    /**\n     * Returns the formatted string based on format options.\n     * @param {Number} value - Specifies the number to format.\n     * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n     * @returns {string}\n     */\n    Internationalization.prototype.formatNumber = function (value, option) {\n        return this.getNumberFormat(option)(value);\n    };\n    /**\n     * Returns the formatted date string based on format options.\n     * @param {Number} value - Specifies the number to format.\n     * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n     * @returns {string}\n     */\n    Internationalization.prototype.formatDate = function (value, option) {\n        return this.getDateFormat(option)(value);\n    };\n    /**\n     * Returns the date object for given date string and options.\n     * @param {string} value - Specifies the string to parse.\n     * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n     * @returns {Date}\n     */\n    Internationalization.prototype.parseDate = function (value, option) {\n        return this.getDateParser(option)(value);\n    };\n    /**\n     * Returns the number object from the given string value and options.\n     * @param {string} value - Specifies the string to parse.\n     * @param {NumberFormatOptions} option - Specifies the parse options in which the  string number  will be parsed.\n     * @returns {number}\n     */\n    Internationalization.prototype.parseNumber = function (value, option) {\n        return this.getNumberParser(option)(value);\n    };\n    /**\n     * Returns Native Date Time Pattern\n     * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n     * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n     * @returns {string}\n     * @private\n     */\n    Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n        return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n    };\n    /**\n     * Returns Native Number Pattern\n     * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n     * @returns {string}\n     * @private\n     */\n    Internationalization.prototype.getNumberPattern = function (option, isExcel) {\n        return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData, isExcel);\n    };\n    /**\n     * Returns the First Day of the Week\n     * @returns {number}\n     */\n    Internationalization.prototype.getFirstDayOfWeek = function () {\n        return IntlBase.getWeekData(this.getCulture(), cldrData);\n    };\n    Internationalization.prototype.getCulture = function () {\n        return this.culture || defaultCulture;\n    };\n    return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\nexport function setCulture(cultureName) {\n    defaultCulture = cultureName;\n    onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\nexport function setCurrencyCode(currencyCode) {\n    defaultCurrencyCode = currencyCode;\n    onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\nexport function loadCldr() {\n    var data = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        data[_i] = arguments[_i];\n    }\n    for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n        var obj = data_1[_a];\n        extend(cldrData, obj, {}, true);\n    }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\nexport function enableRtl(status) {\n    if (status === void 0) { status = true; }\n    rightToLeft = status;\n    onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n    /* tslint:disable no-any */\n    var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n    var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n    var numSystem = getValue('defaultNumberingSystem', numObject);\n    var symbPattern = isBlazor() ? getValue('numberSymbols', numObject) : getValue('symbols-numberSystem-' + numSystem, numObject);\n    var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n    return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the numeric CLDR  number base object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} currency - Specifies the currency for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumberDependable(locale, currency) {\n    var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n    return IntlBase.getCurrencySymbol(numObject.numericObject, currency);\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n    return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend, isBlazor } from '../util';\nimport { ParserBase as parser, getBlazorCurrencySymbol } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\nimport { isUndefined } from '../util';\nexport var blazorCultureFormats = {\n    'en-US': {\n        'd': 'M/d/y',\n        'D': 'EEEE, MMMM d, y',\n        'f': 'EEEE, MMMM d, y h:mm a',\n        'F': 'EEEE, MMMM d, y h:mm:s a',\n        'g': 'M/d/y h:mm a',\n        'G': 'M/d/yyyy h:mm:ss tt',\n        'm': 'MMMM d',\n        'M': 'MMMM d',\n        'r': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n        'R': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n        's': 'yyyy\\'-\\'MM\\'-\\'dd\\'T\\'HH\\':\\'mm\\':\\'ss',\n        't': 'h:mm tt',\n        'T': 'h:m:s tt',\n        'u': 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n        'U': 'dddd, MMMM d, yyyy h:mm:ss tt',\n        'y': 'MMMM yyyy',\n        'Y': 'MMMM yyyy'\n    }\n};\n/**\n * Date base common constants and function for date parser and formatter.\n */\nexport var IntlBase;\n(function (IntlBase) {\n    // tslint:disable-next-line:max-line-length\n    IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n    IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n    IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n    var fractionRegex = /[0-9]/g;\n    IntlBase.defaultCurrency = '$';\n    var mapper = ['infinity', 'nan', 'group', 'decimal'];\n    var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n    var patternMatch = {\n        'G': '',\n        'M': 'm',\n        'L': 'm',\n        'H': 'h',\n        'c': 'd',\n        '\\'': '\"',\n        ' a': ' AM/PM',\n        'yy': 'yy',\n        'y': 'yyyy',\n        'EEEE': 'dddd',\n        'E': 'ddd'\n    };\n    IntlBase.dateConverterMapper = /dddd|ddd/ig;\n    var defaultFirstDay = 'sun';\n    IntlBase.islamicRegex = /^islamic/;\n    var firstDayMapper = {\n        'sun': 0,\n        'mon': 1,\n        'tue': 2,\n        'wed': 3,\n        'thu': 4,\n        'fri': 5,\n        'sat': 6\n    };\n    IntlBase.formatRegex = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n    IntlBase.currencyFormatRegex = /(^[ca]{1})([0-1]?[0-9]|20)?$/i;\n    IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n    var typeMapper = {\n        '$': 'isCurrency',\n        '%': 'isPercent',\n        '-': 'isNegative',\n        0: 'nlead',\n        1: 'nend'\n    };\n    IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n    IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n    /* tslint:disable:quotemark */\n    IntlBase.defaultObject = {\n        'dates': {\n            'calendars': {\n                'gregorian': {\n                    'months': {\n                        'stand-alone': {\n                            'abbreviated': {\n                                '1': 'Jan',\n                                '2': 'Feb',\n                                '3': 'Mar',\n                                '4': 'Apr',\n                                '5': 'May',\n                                '6': 'Jun',\n                                '7': 'Jul',\n                                '8': 'Aug',\n                                '9': 'Sep',\n                                '10': 'Oct',\n                                '11': 'Nov',\n                                '12': 'Dec'\n                            },\n                            'narrow': {\n                                '1': 'J',\n                                '2': 'F',\n                                '3': 'M',\n                                '4': 'A',\n                                '5': 'M',\n                                '6': 'J',\n                                '7': 'J',\n                                '8': 'A',\n                                '9': 'S',\n                                '10': 'O',\n                                '11': 'N',\n                                '12': 'D'\n                            },\n                            'wide': {\n                                '1': 'January',\n                                '2': 'February',\n                                '3': 'March',\n                                '4': 'April',\n                                '5': 'May',\n                                '6': 'June',\n                                '7': 'July',\n                                '8': 'August',\n                                '9': 'September',\n                                '10': 'October',\n                                '11': 'November',\n                                '12': 'December'\n                            }\n                        }\n                    },\n                    \"days\": {\n                        \"stand-alone\": {\n                            \"abbreviated\": {\n                                \"sun\": \"Sun\",\n                                \"mon\": \"Mon\",\n                                \"tue\": \"Tue\",\n                                \"wed\": \"Wed\",\n                                \"thu\": \"Thu\",\n                                \"fri\": \"Fri\",\n                                \"sat\": \"Sat\"\n                            },\n                            \"narrow\": {\n                                \"sun\": \"S\",\n                                \"mon\": \"M\",\n                                \"tue\": \"T\",\n                                \"wed\": \"W\",\n                                \"thu\": \"T\",\n                                \"fri\": \"F\",\n                                \"sat\": \"S\"\n                            },\n                            \"short\": {\n                                \"sun\": \"Su\",\n                                \"mon\": \"Mo\",\n                                \"tue\": \"Tu\",\n                                \"wed\": \"We\",\n                                \"thu\": \"Th\",\n                                \"fri\": \"Fr\",\n                                \"sat\": \"Sa\"\n                            },\n                            \"wide\": {\n                                \"sun\": \"Sunday\",\n                                \"mon\": \"Monday\",\n                                \"tue\": \"Tuesday\",\n                                \"wed\": \"Wednesday\",\n                                \"thu\": \"Thursday\",\n                                \"fri\": \"Friday\",\n                                \"sat\": \"Saturday\"\n                            }\n                        }\n                    },\n                    \"dayPeriods\": {\n                        \"format\": {\n                            \"wide\": {\n                                \"am\": \"AM\",\n                                \"pm\": \"PM\"\n                            }\n                        }\n                    },\n                    'eras': {\n                        'eraNames': {\n                            '0': 'Before Christ',\n                            '0-alt-variant': 'Before Common Era',\n                            '1': 'Anno Domini',\n                            \"1-alt-variant\": \"Common Era\"\n                        },\n                        'eraAbbr': {\n                            '0': 'BC',\n                            '0-alt-variant': 'BCE',\n                            '1': 'AD',\n                            '1-alt-variant': 'CE'\n                        },\n                        'eraNarrow': {\n                            '0': 'B',\n                            '0-alt-variant': 'BCE',\n                            '1': 'A',\n                            '1-alt-variant': 'CE'\n                        }\n                    },\n                    'dateFormats': {\n                        'full': 'EEEE, MMMM d, y',\n                        'long': 'MMMM d, y',\n                        'medium': 'MMM d, y',\n                        'short': 'M/d/yy'\n                    },\n                    'timeFormats': {\n                        'full': 'h:mm:ss a zzzz',\n                        'long': 'h:mm:ss a z',\n                        'medium': 'h:mm:ss a',\n                        'short': 'h:mm a'\n                    },\n                    'dateTimeFormats': {\n                        'full': \"{1} 'at' {0}\",\n                        'long': \"{1} 'at' {0}\",\n                        'medium': '{1}, {0}',\n                        'short': '{1}, {0}',\n                        'availableFormats': {\n                            'd': 'd',\n                            'E': 'ccc',\n                            'Ed': 'd E',\n                            'Ehm': 'E h:mm a',\n                            'EHm': 'E HH:mm',\n                            'Ehms': 'E h:mm:ss a',\n                            'EHms': 'E HH:mm:ss',\n                            'Gy': 'y G',\n                            'GyMMM': 'MMM y G',\n                            'GyMMMd': 'MMM d, y G',\n                            'GyMMMEd': 'E, MMM d, y G',\n                            'h': 'h a',\n                            'H': 'HH',\n                            'hm': 'h:mm a',\n                            'Hm': 'HH:mm',\n                            'hms': 'h:mm:ss a',\n                            'Hms': 'HH:mm:ss',\n                            'hmsv': 'h:mm:ss a v',\n                            'Hmsv': 'HH:mm:ss v',\n                            'hmv': 'h:mm a v',\n                            'Hmv': 'HH:mm v',\n                            'M': 'L',\n                            'Md': 'M/d',\n                            'MEd': 'E, M/d',\n                            'MMM': 'LLL',\n                            'MMMd': 'MMM d',\n                            'MMMEd': 'E, MMM d',\n                            'MMMMd': 'MMMM d',\n                            'ms': 'mm:ss',\n                            'y': 'y',\n                            'yM': 'M/y',\n                            'yMd': 'M/d/y',\n                            'yMEd': 'E, M/d/y',\n                            'yMMM': 'MMM y',\n                            'yMMMd': 'MMM d, y',\n                            'yMMMEd': 'E, MMM d, y',\n                            'yMMMM': 'MMMM y',\n                        },\n                    }\n                },\n                \"islamic\": {\n                    \"months\": {\n                        \"stand-alone\": {\n                            \"abbreviated\": {\n                                \"1\": \"Muh.\",\n                                \"2\": \"Saf.\",\n                                \"3\": \"Rab. I\",\n                                \"4\": \"Rab. II\",\n                                \"5\": \"Jum. I\",\n                                \"6\": \"Jum. II\",\n                                \"7\": \"Raj.\",\n                                \"8\": \"Sha.\",\n                                \"9\": \"Ram.\",\n                                \"10\": \"Shaw.\",\n                                \"11\": \"Dhuʻl-Q.\",\n                                \"12\": \"Dhuʻl-H.\"\n                            },\n                            \"narrow\": {\n                                \"1\": \"1\",\n                                \"2\": \"2\",\n                                \"3\": \"3\",\n                                \"4\": \"4\",\n                                \"5\": \"5\",\n                                \"6\": \"6\",\n                                \"7\": \"7\",\n                                \"8\": \"8\",\n                                \"9\": \"9\",\n                                \"10\": \"10\",\n                                \"11\": \"11\",\n                                \"12\": \"12\"\n                            },\n                            \"wide\": {\n                                \"1\": \"Muharram\",\n                                \"2\": \"Safar\",\n                                \"3\": \"Rabiʻ I\",\n                                \"4\": \"Rabiʻ II\",\n                                \"5\": \"Jumada I\",\n                                \"6\": \"Jumada II\",\n                                \"7\": \"Rajab\",\n                                \"8\": \"Shaʻban\",\n                                \"9\": \"Ramadan\",\n                                \"10\": \"Shawwal\",\n                                \"11\": \"Dhuʻl-Qiʻdah\",\n                                \"12\": \"Dhuʻl-Hijjah\"\n                            }\n                        }\n                    },\n                    \"days\": {\n                        \"stand-alone\": {\n                            \"abbreviated\": {\n                                \"sun\": \"Sun\",\n                                \"mon\": \"Mon\",\n                                \"tue\": \"Tue\",\n                                \"wed\": \"Wed\",\n                                \"thu\": \"Thu\",\n                                \"fri\": \"Fri\",\n                                \"sat\": \"Sat\"\n                            },\n                            \"narrow\": {\n                                \"sun\": \"S\",\n                                \"mon\": \"M\",\n                                \"tue\": \"T\",\n                                \"wed\": \"W\",\n                                \"thu\": \"T\",\n                                \"fri\": \"F\",\n                                \"sat\": \"S\"\n                            },\n                            \"short\": {\n                                \"sun\": \"Su\",\n                                \"mon\": \"Mo\",\n                                \"tue\": \"Tu\",\n                                \"wed\": \"We\",\n                                \"thu\": \"Th\",\n                                \"fri\": \"Fr\",\n                                \"sat\": \"Sa\"\n                            },\n                            \"wide\": {\n                                \"sun\": \"Sunday\",\n                                \"mon\": \"Monday\",\n                                \"tue\": \"Tuesday\",\n                                \"wed\": \"Wednesday\",\n                                \"thu\": \"Thursday\",\n                                \"fri\": \"Friday\",\n                                \"sat\": \"Saturday\"\n                            }\n                        }\n                    },\n                    \"dayPeriods\": {\n                        \"format\": {\n                            \"wide\": {\n                                \"am\": \"AM\",\n                                \"pm\": \"PM\"\n                            }\n                        }\n                    },\n                    \"eras\": {\n                        \"eraNames\": {\n                            \"0\": \"AH\"\n                        },\n                        \"eraAbbr\": {\n                            \"0\": \"AH\"\n                        },\n                        \"eraNarrow\": {\n                            \"0\": \"AH\"\n                        }\n                    },\n                    \"dateFormats\": {\n                        \"full\": \"EEEE, MMMM d, y G\",\n                        \"long\": \"MMMM d, y G\",\n                        \"medium\": \"MMM d, y G\",\n                        \"short\": \"M/d/y GGGGG\"\n                    },\n                    \"timeFormats\": {\n                        \"full\": \"h:mm:ss a zzzz\",\n                        \"long\": \"h:mm:ss a z\",\n                        \"medium\": \"h:mm:ss a\",\n                        \"short\": \"h:mm a\"\n                    },\n                    \"dateTimeFormats\": {\n                        \"full\": \"{1} 'at' {0}\",\n                        \"long\": \"{1} 'at' {0}\",\n                        \"medium\": \"{1}, {0}\",\n                        \"short\": \"{1}, {0}\",\n                        \"availableFormats\": {\n                            \"d\": \"d\",\n                            \"E\": \"ccc\",\n                            \"Ed\": \"d E\",\n                            \"Ehm\": \"E h:mm a\",\n                            \"EHm\": \"E HH:mm\",\n                            \"Ehms\": \"E h:mm:ss a\",\n                            \"EHms\": \"E HH:mm:ss\",\n                            \"Gy\": \"y G\",\n                            \"GyMMM\": \"MMM y G\",\n                            \"GyMMMd\": \"MMM d, y G\",\n                            \"GyMMMEd\": \"E, MMM d, y G\",\n                            \"h\": \"h a\",\n                            \"H\": \"HH\",\n                            \"hm\": \"h:mm a\",\n                            \"Hm\": \"HH:mm\",\n                            \"hms\": \"h:mm:ss a\",\n                            \"Hms\": \"HH:mm:ss\",\n                            \"M\": \"L\",\n                            \"Md\": \"M/d\",\n                            \"MEd\": \"E, M/d\",\n                            \"MMM\": \"LLL\",\n                            \"MMMd\": \"MMM d\",\n                            \"MMMEd\": \"E, MMM d\",\n                            \"MMMMd\": \"MMMM d\",\n                            \"ms\": \"mm:ss\",\n                            \"y\": \"y G\",\n                            \"yyyy\": \"y G\",\n                            \"yyyyM\": \"M/y GGGGG\",\n                            \"yyyyMd\": \"M/d/y GGGGG\",\n                            \"yyyyMEd\": \"E, M/d/y GGGGG\",\n                            \"yyyyMMM\": \"MMM y G\",\n                            \"yyyyMMMd\": \"MMM d, y G\",\n                            \"yyyyMMMEd\": \"E, MMM d, y G\",\n                            \"yyyyMMMM\": \"MMMM y G\",\n                            \"yyyyQQQ\": \"QQQ y G\",\n                            \"yyyyQQQQ\": \"QQQQ y G\"\n                        }\n                    }\n                }\n            },\n            'timeZoneNames': {\n                \"hourFormat\": \"+HH:mm;-HH:mm\",\n                \"gmtFormat\": \"GMT{0}\",\n                \"gmtZeroFormat\": \"GMT\",\n            }\n        },\n        'numbers': {\n            'currencies': {\n                'USD': {\n                    'displayName': 'US Dollar',\n                    'symbol': '$',\n                    'symbol-alt-narrow': '$'\n                },\n                'EUR': {\n                    'displayName': 'Euro',\n                    'symbol': '€',\n                    'symbol-alt-narrow': '€'\n                },\n                'GBP': {\n                    'displayName': 'British Pound',\n                    'symbol-alt-narrow': '£'\n                },\n            },\n            'defaultNumberingSystem': 'latn',\n            'minimumGroupingDigits': '1',\n            'symbols-numberSystem-latn': {\n                'decimal': '.',\n                'group': ',',\n                'list': ';',\n                'percentSign': '%',\n                'plusSign': '+',\n                'minusSign': '-',\n                'exponential': 'E',\n                'superscriptingExponent': '×',\n                'perMille': '‰',\n                'infinity': '∞',\n                'nan': 'NaN',\n                'timeSeparator': ':'\n            },\n            'decimalFormats-numberSystem-latn': {\n                'standard': '#,##0.###',\n            },\n            'percentFormats-numberSystem-latn': {\n                'standard': '#,##0%'\n            },\n            'currencyFormats-numberSystem-latn': {\n                'standard': '¤#,##0.00',\n                'accounting': '¤#,##0.00;(¤#,##0.00)'\n            },\n            'scientificFormats-numberSystem-latn': {\n                'standard': '#E0'\n            }\n        }\n    };\n    IntlBase.blazorDefaultObject = {\n        \"numbers\": {\n            \"mapper\": {\n                \"0\": \"0\",\n                \"1\": \"1\",\n                \"2\": \"2\",\n                \"3\": \"3\",\n                \"4\": \"4\",\n                \"5\": \"5\",\n                \"6\": \"6\",\n                \"7\": \"7\",\n                \"8\": \"8\",\n                \"9\": \"9\"\n            },\n            \"mapperDigits\": \"0123456789\",\n            \"numberSymbols\": {\n                \"decimal\": \".\",\n                \"group\": \",\",\n                \"plusSign\": \"+\",\n                \"minusSign\": \"-\",\n                \"percentSign\": \"%\",\n                \"nan\": \"NaN\",\n                \"timeSeparator\": \":\",\n                \"infinity\": \"∞\"\n            },\n            \"timeSeparator\": \":\",\n            \"currencySymbol\": \"$\",\n            \"currencypData\": {\n                \"nlead\": \"$\",\n                \"nend\": \"\",\n                \"groupSeparator\": \",\",\n                \"groupData\": {\n                    \"primary\": 3\n                },\n                \"maximumFraction\": 2,\n                \"minimumFraction\": 2\n            },\n            \"percentpData\": {\n                \"nlead\": \"\",\n                \"nend\": \"%\",\n                \"groupSeparator\": \",\",\n                \"groupData\": {\n                    \"primary\": 3\n                },\n                \"maximumFraction\": 2,\n                \"minimumFraction\": 2\n            },\n            \"percentnData\": {\n                \"nlead\": \"-\",\n                \"nend\": \"%\",\n                \"groupSeparator\": \",\",\n                \"groupData\": {\n                    \"primary\": 3\n                },\n                \"maximumFraction\": 2,\n                \"minimumFraction\": 2\n            },\n            \"currencynData\": {\n                \"nlead\": \"($\",\n                \"nend\": \")\",\n                \"groupSeparator\": \",\",\n                \"groupData\": {\n                    \"primary\": 3\n                },\n                \"maximumFraction\": 2,\n                \"minimumFraction\": 2\n            },\n            \"decimalnData\": {\n                \"nlead\": \"-\",\n                \"nend\": \"\",\n                \"groupData\": {\n                    \"primary\": 3\n                },\n                \"maximumFraction\": 2,\n                \"minimumFraction\": 2\n            },\n            \"decimalpData\": {\n                \"nlead\": \"\",\n                \"nend\": \"\",\n                \"groupData\": {\n                    \"primary\": 3\n                },\n                \"maximumFraction\": 2,\n                \"minimumFraction\": 2\n            }\n        },\n        \"dates\": {\n            \"dayPeriods\": {\n                \"am\": \"AM\",\n                \"pm\": \"PM\"\n            },\n            \"dateSeperator\": \"/\",\n            \"days\": {\n                \"abbreviated\": {\n                    \"sun\": \"Sun\",\n                    \"mon\": \"Mon\",\n                    \"tue\": \"Tue\",\n                    \"wed\": \"Wed\",\n                    \"thu\": \"Thu\",\n                    \"fri\": \"Fri\",\n                    \"sat\": \"Sat\"\n                },\n                \"short\": {\n                    \"sun\": \"Su\",\n                    \"mon\": \"Mo\",\n                    \"tue\": \"Tu\",\n                    \"wed\": \"We\",\n                    \"thu\": \"Th\",\n                    \"fri\": \"Fr\",\n                    \"sat\": \"Sa\"\n                },\n                \"wide\": {\n                    \"sun\": \"Sunday\",\n                    \"mon\": \"Monday\",\n                    \"tue\": \"Tuesday\",\n                    \"wed\": \"Wednesday\",\n                    \"thu\": \"Thursday\",\n                    \"fri\": \"Friday\",\n                    \"sat\": \"Saturday\"\n                }\n            },\n            \"months\": {\n                \"abbreviated\": {\n                    \"1\": \"Jan\",\n                    \"2\": \"Feb\",\n                    \"3\": \"Mar\",\n                    \"4\": \"Apr\",\n                    \"5\": \"May\",\n                    \"6\": \"Jun\",\n                    \"7\": \"Jul\",\n                    \"8\": \"Aug\",\n                    \"9\": \"Sep\",\n                    \"10\": \"Oct\",\n                    \"11\": \"Nov\",\n                    \"12\": \"Dec\"\n                },\n                \"wide\": {\n                    \"1\": \"January\",\n                    \"2\": \"February\",\n                    \"3\": \"March\",\n                    \"4\": \"April\",\n                    \"5\": \"May\",\n                    \"6\": \"June\",\n                    \"7\": \"July\",\n                    \"8\": \"August\",\n                    \"9\": \"September\",\n                    \"10\": \"October\",\n                    \"11\": \"November\",\n                    \"12\": \"December\"\n                }\n            },\n            \"eras\": {\n                \"1\": \"AD\"\n            }\n        }\n    };\n    /* tslint:enable:quotemark */\n    IntlBase.monthIndex = {\n        3: 'abbreviated',\n        4: 'wide',\n        5: 'narrow',\n        1: 'abbreviated'\n    };\n    /**\n     *\n     */\n    IntlBase.month = 'months';\n    IntlBase.days = 'days';\n    /**\n     * Default numerber Object\n     */\n    IntlBase.patternMatcher = {\n        C: 'currency',\n        P: 'percent',\n        N: 'decimal',\n        A: 'currency',\n        E: 'scientific'\n    };\n    /**\n     * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n     * @private\n     * @param {string} skeleton\n     * @param {Object} dateObject\n     * @param {string} type\n     * @returns {string}\n     */\n    function getResultantPattern(skeleton, dateObject, type, isIslamic, blazorCulture) {\n        var resPattern;\n        var iType = type || 'date';\n        if (blazorCulture) {\n            resPattern = compareBlazorDateFormats({ skeleton: skeleton }, blazorCulture).format ||\n                compareBlazorDateFormats({ skeleton: 'd' }, 'en-US').format;\n        }\n        else {\n            if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n                resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n                if (iType === 'dateTime') {\n                    var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n                    var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n                    resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n                }\n            }\n            else {\n                resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n            }\n            if (isUndefined(resPattern) && skeleton === 'yMd') {\n                resPattern = 'M/d/y';\n            }\n        }\n        return resPattern;\n    }\n    IntlBase.getResultantPattern = getResultantPattern;\n    /**\n     * Returns the dependable object for provided cldr data and culture\n     * @private\n     * @param {Object} cldr\n     * @param {string} culture\n     * @param {boolean} isNumber\n     * @returns {Dependables}\n     */\n    function getDependables(cldr, culture, mode, isNumber) {\n        var ret = {};\n        var calendartype = mode || 'gregorian';\n        ret.parserObject = parser.getMainObject(cldr, culture) || (isBlazor() ? IntlBase.blazorDefaultObject : IntlBase.defaultObject);\n        if (isNumber) {\n            ret.numericObject = getValue('numbers', ret.parserObject);\n        }\n        else {\n            var dateString = isBlazor() ? 'dates' : ('dates.calendars.' + calendartype);\n            ret.dateObject = getValue(dateString, ret.parserObject);\n        }\n        return ret;\n    }\n    IntlBase.getDependables = getDependables;\n    /**\n     * Returns the symbol pattern for provided parameters\n     * @private\n     * @param {string} type\n     * @param {string} numSystem\n     * @param {Object} obj\n     * @param {boolean} isAccount\n     * @returns {string}\n     */\n    function getSymbolPattern(type, numSystem, obj, isAccount) {\n        return getValue(type + 'Formats-numberSystem-' +\n            numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n            numSystem + '.standard', obj) : '');\n    }\n    IntlBase.getSymbolPattern = getSymbolPattern;\n    function ConvertDateToWeekFormat(format) {\n        var convertMapper = format.match(IntlBase.dateConverterMapper);\n        if (convertMapper && isBlazor()) {\n            var tempString = convertMapper[0].length === 3 ? 'EEE' : 'EEEE';\n            return format.replace(IntlBase.dateConverterMapper, tempString);\n        }\n        return format;\n    }\n    IntlBase.ConvertDateToWeekFormat = ConvertDateToWeekFormat;\n    function compareBlazorDateFormats(formatOptions, culture) {\n        var format = formatOptions.format || formatOptions.skeleton;\n        var curFormatMapper = getValue((culture || 'en-US') + '.' + format, blazorCultureFormats);\n        if (!curFormatMapper) {\n            curFormatMapper = getValue('en-US.' + format, blazorCultureFormats);\n        }\n        if (curFormatMapper) {\n            curFormatMapper = ConvertDateToWeekFormat(curFormatMapper);\n            formatOptions.format = curFormatMapper.replace(/tt/, 'a');\n        }\n        return formatOptions;\n    }\n    IntlBase.compareBlazorDateFormats = compareBlazorDateFormats;\n    /**\n     * Returns proper numeric skeleton\n     * @private\n     * @param {string} skeleton\n     * @returns {NumericSkeleton}\n     */\n    function getProperNumericSkeleton(skeleton) {\n        var matches = skeleton.match(IntlBase.formatRegex);\n        var ret = {};\n        var pattern = matches[1].toUpperCase();\n        ret.isAccount = (pattern === 'A');\n        /* tslint:disable no-any */\n        ret.type = IntlBase.patternMatcher[pattern];\n        if (skeleton.length > 1) {\n            ret.fractionDigits = parseInt(matches[2], 10);\n        }\n        return ret;\n    }\n    IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n    /**\n     * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n     * @private\n     * @param {string} pattern\n     * @param {boolean} needFraction\n     * @param {string} cSymbol\n     * @param {boolean} fractionOnly\n     * @returns {NegativeData}\n     */\n    function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n        var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n        var match = pattern.match(IntlBase.customRegex);\n        if (match) {\n            if (!fractionOnly) {\n                nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n                nData.nend = changeCurrencySymbol(match[10], cSymbol);\n                nData.groupPattern = match[4];\n            }\n            var fraction = match[7];\n            if (fraction && needFraction) {\n                var fmatch = fraction.match(fractionRegex);\n                if (!isNullOrUndefined(fmatch)) {\n                    nData.minimumFraction = fmatch.length;\n                }\n                else {\n                    nData.minimumFraction = 0;\n                }\n                nData.maximumFraction = fraction.length - 1;\n            }\n        }\n        return nData;\n    }\n    IntlBase.getFormatData = getFormatData;\n    /**\n     * Changes currency symbol\n     * @private\n     * @param {string} val\n     * @param {string} sym\n     * @returns {string}\n     */\n    function changeCurrencySymbol(val, sym) {\n        if (val) {\n            return val.replace(IntlBase.defaultCurrency, sym);\n        }\n        return '';\n    }\n    /**\n     * Returns currency symbol based on currency code\n     * @private\n     * @param {Object} numericObject\n     * @param {string} currencyCode\n     * @returns {string}\n     */\n    function getCurrencySymbol(numericObject, currencyCode, altSymbol) {\n        var symbol = altSymbol ? ('.' + altSymbol) : '.symbol';\n        var getCurrency = getValue('currencies.' + currencyCode + symbol, numericObject) ||\n            getValue('currencies.' + currencyCode + '.symbol-alt-narrow', numericObject) || '$';\n        return getCurrency;\n    }\n    IntlBase.getCurrencySymbol = getCurrencySymbol;\n    /**\n     * Returns formatting options for custom number format\n     * @private\n     * @param {string} format\n     * @param {CommonOptions} dOptions\n     * @param {Dependables} obj\n     * @returns {GenericFormatOptions}\n     */\n    function customFormat(format, dOptions, obj) {\n        var options = {};\n        var formatSplit = format.split(';');\n        var data = ['pData', 'nData', 'zeroData'];\n        for (var i = 0; i < formatSplit.length; i++) {\n            options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n        }\n        if (isNullOrUndefined(options.nData)) {\n            options.nData = extend({}, options.pData);\n            options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n        }\n        return options;\n    }\n    IntlBase.customFormat = customFormat;\n    /**\n     * Returns custom formatting options\n     * @private\n     * @param {string} format\n     * @param {CommonOptions} dOptions\n     * @param {Object} numObject\n     * @returns {NegativeData}\n     */\n    function customNumberFormat(format, dOptions, numObject) {\n        var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n        var pattern = format.match(IntlBase.customRegex);\n        if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n            cOptions.type = undefined;\n            return cOptions;\n        }\n        cOptions.nlead = pattern[1];\n        cOptions.nend = pattern[10];\n        var integerPart = pattern[6];\n        cOptions.useGrouping = integerPart.indexOf(',') !== -1;\n        integerPart = integerPart.replace(/,/g, '');\n        var fractionPart = pattern[7];\n        if (integerPart.indexOf('0') !== -1) {\n            cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n        }\n        if (!isNullOrUndefined(fractionPart)) {\n            cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n            cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n            if (cOptions.minimumFractionDigits === -1) {\n                cOptions.minimumFractionDigits = 0;\n            }\n            if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n                cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n            }\n        }\n        if (!isNullOrUndefined(dOptions)) {\n            extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n            if (!cOptions.isCurrency) {\n                extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n            }\n        }\n        else {\n            extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n        }\n        if (!isNullOrUndefined(numObject)) {\n            var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n            if (cOptions.useGrouping) {\n                cOptions.groupSeparator = dOptions.numberMapper.numberSymbols[mapper[2]];\n                cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n            }\n            cOptions.nlead = cOptions.nlead.replace(/\\'/g, '');\n            cOptions.nend = cOptions.nend.replace(/\\'/g, '');\n        }\n        return cOptions;\n    }\n    /**\n     * Returns formatting options for currency or percent type\n     * @private\n     * @param {string[]} parts\n     * @param {string} actual\n     * @param {string} symbol\n     * @returns {NegativeData}\n     */\n    function isCurrencyPercent(parts, actual, symbol) {\n        var options = { nlead: parts[0], nend: parts[1] };\n        for (var i = 0; i < 2; i++) {\n            var part = parts[i];\n            var loc = part.indexOf(actual);\n            if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n                options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n                options[typeMapper[actual]] = true;\n                options.type = options.isCurrency ? 'currency' : 'percent';\n                break;\n            }\n        }\n        return options;\n    }\n    IntlBase.isCurrencyPercent = isCurrencyPercent;\n    /**\n     * Returns culture based date separator\n     * @private\n     * @param {Object} dateObj\n     * @returns {string}\n     */\n    function getDateSeparator(dateObj) {\n        var value = (getValue('dateFormats.short', dateObj) || '').match(/[d‏M‏]([^d‏M])[d‏M‏]/i);\n        return value ? value[1] : '/';\n    }\n    IntlBase.getDateSeparator = getDateSeparator;\n    /**\n     * Returns Native Date Time pattern\n     * @private\n     * @param {string} culture\n     * @param {DateFormatOptions} options\n     * @param {Object} cldr\n     * @returns {string}\n     */\n    function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n        var dependable = getDependables(cldr, culture, options.calendar);\n        if (isBlazor()) {\n            options = compareBlazorDateFormats(options, culture);\n        }\n        var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n        if (isExcelFormat) {\n            actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n                return patternMatch[pattern];\n            });\n            if (actualPattern.indexOf('z') !== -1) {\n                var tLength = actualPattern.match(/z/g).length;\n                var timeZonePattern = void 0;\n                var options_1 = { 'timeZone': {} };\n                options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n                options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n                var value = new Date();\n                var timezone = value.getTimezoneOffset();\n                var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n                pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n                if (timezone === 0) {\n                    timeZonePattern = options_1.timeZone.gmtZeroFormat;\n                }\n                else {\n                    timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n                    timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n                }\n                actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n            }\n            actualPattern = actualPattern.replace(/ $/, '');\n        }\n        return actualPattern;\n    }\n    IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n    // tslint:disable-next-line:no-any\n    function processSymbol(actual, option) {\n        if (actual.indexOf(',') !== -1) {\n            // tslint:disable-next-line:no-any\n            var split = actual.split(',');\n            actual = (split[0] + getValue('numberMapper.numberSymbols.group', option) +\n                split[1].replace('.', getValue('numberMapper.numberSymbols.decimal', option)));\n        }\n        else {\n            actual = actual.replace('.', getValue('numberMapper.numberSymbols.decimal', option));\n        }\n        return actual;\n    }\n    /**\n     * Returns Native Number pattern\n     * @private\n     * @param {string} culture\n     * @param {NumberFormatOptions} options\n     * @param {Object} cldr\n     * @returns {string}\n     */\n    function getActualNumberFormat(culture, options, cldr, isExcel) {\n        var dependable = getDependables(cldr, culture, '', true);\n        var parseOptions = { custom: true };\n        var numrericObject = dependable.numericObject;\n        var minFrac;\n        var curObj = {};\n        var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n        var type = IntlBase.formatRegex.test(options.format) ? getProperNumericSkeleton(options.format || 'N') : {};\n        var dOptions = {};\n        if (curMatch) {\n            dOptions.numberMapper = isBlazor() ?\n                extend({}, dependable.numericObject) :\n                parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n            var curCode = isBlazor() ? getValue('currencySymbol', dependable.numericObject) :\n                getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode, options.altSymbol);\n            var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n            symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n            var split = symbolPattern.split(';');\n            curObj.hasNegativePattern = isBlazor() ? true : (split.length > 1);\n            curObj.nData = isBlazor() ? getValue(type.type + 'nData', numrericObject) :\n                getFormatData(split[1] || '-' + split[0], true, curCode);\n            curObj.pData = isBlazor() ? getValue(type.type + 'pData', numrericObject) :\n                getFormatData(split[0], false, curCode);\n            if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n                minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n            }\n        }\n        var actualPattern;\n        if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n            extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n            parseOptions.custom = false;\n            actualPattern = '###0';\n            if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n                var defaultMinimum = 0;\n                if (parseOptions.fractionDigits) {\n                    options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n                }\n                actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n                    options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n            }\n            if (options.minimumIntegerDigits) {\n                actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n            }\n            if (options.useGrouping) {\n                actualPattern = groupingPattern(actualPattern);\n            }\n            if (parseOptions.type === 'currency' || (parseOptions.type && isBlazor())) {\n                if (isBlazor() && parseOptions.type !== 'currency') {\n                    curObj.pData = getValue(parseOptions.type + 'pData', numrericObject);\n                    curObj.nData = getValue(parseOptions.type + 'nData', numrericObject);\n                }\n                var cPattern = actualPattern;\n                actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n                if (curObj.hasNegativePattern || isBlazor()) {\n                    actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n                }\n            }\n            if (parseOptions.type === 'percent' && !isBlazor()) {\n                actualPattern += ' %';\n            }\n        }\n        else {\n            actualPattern = options.format.replace(/\\'/g, '\"');\n        }\n        if (Object.keys(dOptions).length > 0) {\n            actualPattern = !isExcel ? processSymbol(actualPattern, dOptions) : actualPattern;\n        }\n        return actualPattern;\n    }\n    IntlBase.getActualNumberFormat = getActualNumberFormat;\n    function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n        pattern += '.';\n        for (var a = 0; a < minDigits; a++) {\n            pattern += '0';\n        }\n        if (minDigits < maxDigits) {\n            var diff = maxDigits - minDigits;\n            for (var b = 0; b < diff; b++) {\n                pattern += '#';\n            }\n        }\n        return pattern;\n    }\n    function minimumIntegerPattern(pattern, digits) {\n        var temp = pattern.split('.');\n        var integer = '';\n        for (var x = 0; x < digits; x++) {\n            integer += '0';\n        }\n        return temp[1] ? (integer + '.' + temp[1]) : integer;\n    }\n    function groupingPattern(pattern) {\n        var temp = pattern.split('.');\n        var integer = temp[0];\n        var no = 3 - integer.length % 3;\n        var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n        integer = hash + integer;\n        pattern = '';\n        for (var x = integer.length - 1; x > 0; x = x - 3) {\n            pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;\n        }\n        pattern = pattern.slice(1);\n        return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n    }\n    function getWeekData(culture, cldr) {\n        var firstDay = defaultFirstDay;\n        var mapper = getValue('supplemental.weekData.firstDay', cldr);\n        var iCulture = culture;\n        if ((/en-/).test(iCulture)) {\n            iCulture = iCulture.slice(3);\n        }\n        iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n        if (mapper) {\n            firstDay = mapper[iCulture] || defaultFirstDay;\n        }\n        return firstDayMapper[firstDay];\n    }\n    IntlBase.getWeekData = getWeekData;\n    /**\n     * @private\n     * @param pData\n     * @param aCurrency\n     * @param rCurrency\n     */\n    function replaceBlazorCurrency(pData, aCurrency, rCurrency) {\n        var iCurrency = getBlazorCurrencySymbol(rCurrency);\n        if (aCurrency !== iCurrency) {\n            for (var _i = 0, pData_1 = pData; _i < pData_1.length; _i++) {\n                var data = pData_1[_i];\n                data.nend = data.nend.replace(aCurrency, iCurrency);\n                data.nlead = data.nlead.replace(aCurrency, iCurrency);\n            }\n        }\n    }\n    IntlBase.replaceBlazorCurrency = replaceBlazorCurrency;\n    /**\n     * @private\n     */\n    function getWeekOfYear(date) {\n        var newYear = new Date(date.getFullYear(), 0, 1);\n        var day = newYear.getDay();\n        var weeknum;\n        day = (day >= 0 ? day : day + 7);\n        var daynum = Math.floor((date.getTime() - newYear.getTime() -\n            (date.getTimezoneOffset() - newYear.getTimezoneOffset()) * 60000) / 86400000) + 1;\n        if (day < 4) {\n            weeknum = Math.floor((daynum + day - 1) / 7) + 1;\n            if (weeknum > 52) {\n                var nYear = new Date(this.getFullYear() + 1, 0, 1);\n                var nday = nYear.getDay();\n                nday = nday >= 0 ? nday : nday + 7;\n                weeknum = nday < 4 ? 1 : 53;\n            }\n        }\n        else {\n            weeknum = Math.floor((daynum + day - 1) / 7);\n        }\n        return weeknum;\n    }\n    IntlBase.getWeekOfYear = getWeekOfYear;\n})(IntlBase || (IntlBase = {}));\n","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n *   var ajax = new Ajax(\"index.html\", \"GET\", true);\n *   ajax.send().then(\n *               function (value) {\n *                   console.log(value);\n *               },\n *               function (reason) {\n *                   console.log(reason);\n *               });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n    /**\n     * Constructor for Ajax class\n     * @param  {string|Object} options?\n     * @param  {string} type?\n     * @param  {boolean} async?\n     * @returns defaultType\n     */\n    function Ajax(options, type, async, contentType) {\n        /**\n         * A boolean value indicating whether the request should be sent asynchronous or not.\n         * @default true\n         */\n        this.mode = true;\n        /**\n         * A boolean value indicating whether to ignore the promise reject.\n         * @private\n         * @default true\n         */\n        this.emitError = true;\n        this.options = {};\n        if (typeof options === 'string') {\n            this.url = options;\n            this.type = type ? type.toUpperCase() : defaultType;\n            this.mode = !isNullOrUndefined(async) ? async : true;\n        }\n        else if (typeof options === 'object') {\n            this.options = options;\n            merge(this, this.options);\n        }\n        this.type = this.type ? this.type.toUpperCase() : defaultType;\n        this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n    }\n    /**\n     * Send the request to server.\n     * @param {any} data - To send the user data\n     * @return {Promise}\n     */\n    Ajax.prototype.send = function (data) {\n        var _this = this;\n        this.data = isNullOrUndefined(data) ? this.data : data;\n        var eventArgs = {\n            cancel: false,\n            httpRequest: null\n        };\n        var promise = new Promise(function (resolve, reject) {\n            _this.httpRequest = new XMLHttpRequest();\n            _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n            if (!isNullOrUndefined(_this.onLoad)) {\n                _this.httpRequest.onload = _this.onLoad;\n            }\n            if (!isNullOrUndefined(_this.onProgress)) {\n                _this.httpRequest.onprogress = _this.onProgress;\n            }\n            /* istanbul ignore next */\n            if (!isNullOrUndefined(_this.onAbort)) {\n                _this.httpRequest.onabort = _this.onAbort;\n            }\n            /* istanbul ignore next */\n            if (!isNullOrUndefined(_this.onError)) {\n                _this.httpRequest.onerror = _this.onError;\n            }\n            //** Upload Events **/\n            /* istanbul ignore next */\n            if (!isNullOrUndefined(_this.onUploadProgress)) {\n                _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n            }\n            _this.httpRequest.open(_this.type, _this.url, _this.mode);\n            // Set default headers\n            if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n                _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n            }\n            if (_this.beforeSend) {\n                eventArgs.httpRequest = _this.httpRequest;\n                _this.beforeSend(eventArgs);\n            }\n            if (!eventArgs.cancel) {\n                _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n            }\n        });\n        return promise;\n    };\n    Ajax.prototype.successHandler = function (data) {\n        if (this.onSuccess) {\n            this.onSuccess(data, this);\n        }\n        return data;\n    };\n    Ajax.prototype.failureHandler = function (reason) {\n        if (this.onFailure) {\n            this.onFailure(this.httpRequest);\n        }\n        return reason;\n    };\n    Ajax.prototype.stateChange = function (resolve, reject) {\n        var data = this.httpRequest.responseText;\n        if (this.dataType && this.dataType.toLowerCase() === 'json') {\n            if (data === '') {\n                data = undefined;\n            }\n            else {\n                try {\n                    data = JSON.parse(data);\n                }\n                catch (error) {\n                    // no exception handle\n                }\n            }\n        }\n        if (this.httpRequest.readyState === 4) {\n            //success range should be 200 to 299\n            if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n                resolve(this.successHandler(data));\n            }\n            else {\n                if (this.emitError) {\n                    reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n                }\n                else {\n                    resolve();\n                }\n            }\n        }\n    };\n    /**\n     * To get the response header from XMLHttpRequest\n     * @param  {string} key Key to search in the response header\n     * @returns {string}\n     */\n    Ajax.prototype.getResponseHeader = function (key) {\n        var responseHeaders;\n        var header;\n        responseHeaders = {};\n        var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n        while (headers) {\n            responseHeaders[headers[1].toLowerCase()] = headers[2];\n            headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n        }\n        header = responseHeaders[key.toLowerCase()];\n        return isNullOrUndefined(header) ? null : header;\n    };\n    return Ajax;\n}());\nexport { Ajax };\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ \\/]([\\w.]+)/i;\nvar REGX_BROWSER = {\n    OPERA: /(opera|opr)(?:.*version|)[ \\/]([\\w.]+)/i,\n    EDGE: /(edge)(?:.*version|)[ \\/]([\\w.]+)/i,\n    CHROME: /(chrome|crios)[ \\/]([\\w.]+)/i,\n    PANTHOMEJS: /(phantomjs)[ \\/]([\\w.]+)/i,\n    SAFARI: /(safari)[ \\/]([\\w.]+)/i,\n    WEBKIT: /(webkit)[ \\/]([\\w.]+)/i,\n    MSIE: /(msie|trident) ([\\w.]+)/i,\n    MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else  */\nif (typeof window !== 'undefined') {\n    window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n * @private\n */\nvar Browser = /** @class */ (function () {\n    function Browser() {\n    }\n    Browser.extractBrowserDetail = function () {\n        var browserInfo = { culture: {} };\n        var keys = Object.keys(REGX_BROWSER);\n        var clientInfo = [];\n        for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n            var key = keys_1[_i];\n            clientInfo = Browser.userAgent.match(REGX_BROWSER[key]);\n            if (clientInfo) {\n                browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n                browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n                browserInfo.version = clientInfo[2];\n                browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n                if (!!Browser.userAgent.match(REGX_IE11)) {\n                    browserInfo.name = 'msie';\n                    break;\n                }\n                var version = Browser.userAgent.match(REGX_VERSION);\n                if (browserInfo.name === 'safari' && version) {\n                    browserInfo.version = version[2];\n                }\n                break;\n            }\n        }\n        return browserInfo;\n    };\n    /**\n     * To get events from the browser\n     * @param {string} event - type of event triggered.\n     * @returns {Boolean}\n     */\n    Browser.getEvent = function (event) {\n        // tslint:disable-next-line:no-any\n        var events = {\n            start: {\n                isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n            },\n            move: {\n                isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n            },\n            end: {\n                isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n            },\n            cancel: {\n                isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n            }\n        };\n        return (Browser.isPointer && !Browser.isWindows ? events[event].isPointer :\n            (Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '')\n                : events[event].isDevice));\n    };\n    /**\n     * To get the Touch start event from browser\n     * @returns {string}\n     */\n    Browser.getTouchStartEvent = function () {\n        return Browser.getEvent('start');\n    };\n    /**\n     * To get the Touch end event from browser\n     * @returns {string}\n     */\n    Browser.getTouchEndEvent = function () {\n        return Browser.getEvent('end');\n    };\n    /**\n     * To get the Touch move event from browser\n     * @returns {string}\n     */\n    Browser.getTouchMoveEvent = function () {\n        return Browser.getEvent('move');\n    };\n    /**\n     * To cancel the touch event from browser\n     * @returns {string}\n     */\n    Browser.getTouchCancelEvent = function () {\n        return Browser.getEvent('cancel');\n    };\n    /**\n     * To get the value based on provided key and regX\n     * @param {string} key\n     * @param {RegExp} regX\n     * @returns {Object}\n     */\n    Browser.getValue = function (key, regX) {\n        var browserDetails = window.browserDetails;\n        if ('undefined' === typeof browserDetails[key]) {\n            return browserDetails[key] = regX.test(Browser.userAgent);\n        }\n        return browserDetails[key];\n    };\n    Object.defineProperty(Browser, \"userAgent\", {\n        get: function () {\n            return Browser.uA;\n        },\n        //Properties \n        /**\n         * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n         * Also we can set our own userAgent.\n         */\n        set: function (uA) {\n            Browser.uA = uA;\n            window.browserDetails = {};\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"info\", {\n        //Read Only Properties\n        /**\n         * Property is to get the browser information like Name, Version and Language\n         * @returns BrowserInfo\n         */\n        get: function () {\n            if (isUndefined(window.browserDetails.info)) {\n                return window.browserDetails.info = Browser.extractBrowserDetail();\n            }\n            return window.browserDetails.info;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"isIE\", {\n        /**\n         * Property is to get whether the userAgent is based IE.\n         */\n        get: function () {\n            return Browser.getValue('isIE', REGX_IE);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"isTouch\", {\n        /**\n         * Property is to get whether the browser has touch support.\n         */\n        get: function () {\n            if (isUndefined(window.browserDetails.isTouch)) {\n                return (window.browserDetails.isTouch =\n                    ('ontouchstart' in window.navigator) ||\n                        (window &&\n                            window.navigator &&\n                            (window.navigator.maxTouchPoints > 0)) || ('ontouchstart' in window));\n            }\n            return window.browserDetails.isTouch;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"isPointer\", {\n        /**\n         * Property is to get whether the browser has Pointer support.\n         */\n        get: function () {\n            if (isUndefined(window.browserDetails.isPointer)) {\n                return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n            }\n            return window.browserDetails.isPointer;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"isMSPointer\", {\n        /**\n         * Property is to get whether the browser has MSPointer support.\n         */\n        get: function () {\n            if (isUndefined(window.browserDetails.isMSPointer)) {\n                return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n            }\n            return window.browserDetails.isMSPointer;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"isDevice\", {\n        /**\n         * Property is to get whether the userAgent is device based.\n         */\n        get: function () {\n            return Browser.getValue('isDevice', REGX_MOBILE);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"isIos\", {\n        /**\n         * Property is to get whether the userAgent is IOS.\n         */\n        get: function () {\n            return Browser.getValue('isIos', REGX_IOS);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"isIos7\", {\n        /**\n         * Property is to get whether the userAgent is Ios7.\n         */\n        get: function () {\n            return Browser.getValue('isIos7', REGX_IOS7);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"isAndroid\", {\n        /**\n         * Property is to get whether the userAgent is Android.\n         */\n        get: function () {\n            return Browser.getValue('isAndroid', REGX_ANDROID);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"isWebView\", {\n        /**\n         * Property is to identify whether application ran in web view.\n         */\n        get: function () {\n            if (isUndefined(window.browserDetails.isWebView)) {\n                window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n                    && isUndefined(window.phonegap) && window.forge !== 'object');\n                return window.browserDetails.isWebView;\n            }\n            return window.browserDetails.isWebView;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"isWindows\", {\n        /**\n         * Property is to get whether the userAgent is Windows.\n         */\n        get: function () {\n            return Browser.getValue('isWindows', REGX_WINDOWS);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"touchStartEvent\", {\n        /**\n         * Property is to get the touch start event. It returns event name based on browser.\n         */\n        get: function () {\n            if (isUndefined(window.browserDetails.touchStartEvent)) {\n                return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n            }\n            return window.browserDetails.touchStartEvent;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"touchMoveEvent\", {\n        /**\n         * Property is to get the touch move event. It returns event name based on browser.\n         */\n        get: function () {\n            if (isUndefined(window.browserDetails.touchMoveEvent)) {\n                return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n            }\n            return window.browserDetails.touchMoveEvent;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"touchEndEvent\", {\n        /**\n         * Property is to get the touch end event. It returns event name based on browser.\n         */\n        get: function () {\n            if (isUndefined(window.browserDetails.touchEndEvent)) {\n                return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n            }\n            return window.browserDetails.touchEndEvent;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Browser, \"touchCancelEvent\", {\n        /**\n         * Property is to cancel the touch end event.\n         */\n        get: function () {\n            if (isUndefined(window.browserDetails.touchCancelEvent)) {\n                return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n            }\n            return window.browserDetails.touchCancelEvent;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /* istanbul ignore next */\n    Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n    return Browser;\n}());\nexport { Browser };\n","import { debounce, extend } from './util';\nimport { Browser } from './browser';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * @private\n * ```html\n * <div id=\"Eventdiv\">  </div>\n * <script>\n *   let node: HTMLElement = document.querySelector(\"#Eventdiv\");\n *   EventHandler.addEventListener(node, \"click\", function(){\n *       // click handler function code\n *   });\n *   EventHandler.addEventListener(node, \"onmouseover\", function(){\n *       // mouseover handler function code\n *   });\n *   EventHandler.removeEventListener(node, \"click\", function(){\n *       // click handler function code\n *   });\n *   eventObj.clearEvents();\n * </script>\n * ```\n */\nvar EventHandler = /** @class */ (function () {\n    function EventHandler() {\n    }\n    // to get the event data based on element\n    EventHandler.addOrGetEventData = function (element) {\n        if (element) {\n            if ('__eventList' in element) {\n                return element.__eventList.events;\n            }\n            else {\n                element.__eventList = {};\n                return element.__eventList.events = [];\n            }\n        }\n        else {\n            return [];\n        }\n    };\n    /**\n     * Add an event to the specified DOM element.\n     * @param {any} element - Target HTML DOM element\n     * @param {string} eventName - A string that specifies the name of the event\n     * @param {Function} listener - Specifies the function to run when the event occurs\n     * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n     * @param {number} debounce - Specifies at what interval given event listener should be triggered.\n     * @return {Function}\n     */\n    EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n        var eventData = EventHandler.addOrGetEventData(element);\n        var debounceListener;\n        if (intDebounce) {\n            debounceListener = debounce(listener, intDebounce);\n        }\n        else {\n            debounceListener = listener;\n        }\n        if (bindTo) {\n            debounceListener = debounceListener.bind(bindTo);\n        }\n        var event = eventName.split(' ');\n        for (var i = 0; i < event.length; i++) {\n            eventData.push({\n                name: event[i],\n                listener: listener,\n                debounce: debounceListener\n            });\n            if (Browser.isIE) {\n                element.addEventListener(event[i], debounceListener);\n            }\n            else {\n                element.addEventListener(event[i], debounceListener, { passive: false });\n            }\n        }\n        return debounceListener;\n    };\n    /**\n     * Remove an event listener that has been attached before.\n     * @param {any} element - Specifies the target html element to remove the event\n     * @param {string} eventName - A string that specifies the name of the event to remove\n     * @param {Function} listener - Specifies the function to remove\n     * @return {void}\n     */\n    EventHandler.remove = function (element, eventName, listener) {\n        var eventData = EventHandler.addOrGetEventData(element);\n        var event = eventName.split(' ');\n        var _loop_1 = function (j) {\n            var index = -1;\n            var debounceListener;\n            if (eventData && eventData.length !== 0) {\n                eventData.some(function (x, i) {\n                    return x.name === event[j] && x.listener === listener ?\n                        (index = i, debounceListener = x.debounce, true) : false;\n                });\n            }\n            if (index !== -1) {\n                eventData.splice(index, 1);\n            }\n            if (debounceListener) {\n                element.removeEventListener(event[j], debounceListener);\n            }\n        };\n        for (var j = 0; j < event.length; j++) {\n            _loop_1(j);\n        }\n    };\n    /**\n     * Clear all the event listeners that has been previously attached to the element.\n     * @param {any} element - Specifies the target html element to clear the events\n     * @return {void}\n     */\n    EventHandler.clearEvents = function (element) {\n        var eventData;\n        var copyData;\n        eventData = EventHandler.addOrGetEventData(element);\n        copyData = extend([], copyData, eventData);\n        for (var i = 0; i < copyData.length; i++) {\n            element.removeEventListener(copyData[i].name, copyData[i].debounce);\n            eventData.shift();\n        }\n    };\n    /**\n     * Trigger particular event of the element.\n     * @param {any} element - Specifies the target html element to trigger the events\n     * @param {string} eventName - Specifies the event to trigger for the specified element.\n     * Can be a custom event, or any of the standard events.\n     * @param {any} eventProp - Additional parameters to pass on to the event properties\n     * @return {void}\n     */\n    EventHandler.trigger = function (element, eventName, eventProp) {\n        var eventData = EventHandler.addOrGetEventData(element);\n        var fn = null;\n        for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n            var event_1 = eventData_1[_i];\n            if (event_1.name === eventName) {\n                event_1.debounce.call(this, eventProp);\n            }\n        }\n    };\n    return EventHandler;\n}());\nexport { EventHandler };\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(\\/if|\\/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar WORDIF = new RegExp('[\\\\w\"\\'@#$.\\\\s+]+', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\nvar ARR_OBJ = /^\\..*/gm;\nvar SINGLE_SLASH = /\\\\/gi;\nvar DOUBLE_SLASH = /\\\\\\\\/gi;\nvar WORDFUNC = new RegExp('[\\\\w\"\\'@#$.\\\\s+]+', 'g');\nvar WINDOWFUNC = /\\window\\./gm;\n/**\n * The function to set regular expression for template expression string.\n * @param  {RegExp} value - Value expression.\n * @private\n */\nexport function expression(value) {\n    if (value) {\n        exp = value;\n    }\n    return exp;\n}\n// /**\n//  * To render the template string from the given data.\n//  * @param  {string} template - String Template.\n//  * @param  {Object[]|JSON} data - DataSource for the template.\n//  * @param  {Object} helper? - custom helper object.\n//  */\n// export function template(template: string, data: JSON, helper?: Object): string {\n//     let hash: string = hashCode(template);\n//     let tmpl: Function;\n//     if (!cachedTemplate[hash]) {\n//         tmpl = cachedTemplate[hash] = compile(template, helper);\n//     } else {\n//         tmpl = cachedTemplate[hash];\n//     }\n//     return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n * @param  {string} template - The template string which is going to convert.\n * @param  {Object} helper? - Helper functions as an object.\n * @private\n */\nexport function compile(template, helper) {\n    var argName = 'data';\n    var evalExpResult = evalExp(template, argName, helper);\n    var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\";\n    // tslint:disable-next-line:no-function-constructor-with-string-args\n    var fn = new Function(argName, fnCode);\n    return fn.bind(helper);\n}\n// function used to evaluate the function expression\nfunction evalExp(str, nameSpace, helper) {\n    var varCOunt = 0;\n    /**\n     * Variable containing Local Keys\n     */\n    var localKeys = [];\n    var isClass = str.match(/class=\"([^\\\"]+|)\\s{2}/g);\n    var singleSpace = '';\n    if (isClass) {\n        isClass.forEach(function (value) {\n            singleSpace = value.replace(/\\s\\s+/g, ' ');\n            str = str.replace(value, singleSpace);\n        });\n    }\n    return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n        var SPECIAL_CHAR = /\\@|\\#|\\$/gm;\n        var matches = cnt.match(CALL_FUNCTION);\n        // matches to detect any function calls\n        if (matches) {\n            var rlStr = matches[1];\n            if (ELSEIF_STMT.test(cnt)) {\n                //handling else-if condition\n                cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n                    str = str.trim();\n                    return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys);\n                })) + '{ \\n str = str + \"';\n            }\n            else if (IF_STMT.test(cnt)) {\n                //handling if condition\n                cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORDIF, function (strs) {\n                    return HandleSpecialCharArrObj(strs, nameSpace, localKeys, true);\n                })) + '{ \\n str = str + \"';\n            }\n            else if (FOR_STMT.test(cnt)) {\n                //handling for condition\n                var rlStr_1 = matches[1].split(' of ');\n                // replace for each into actual JavaScript\n                cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n                    localKeys.push(rlStr_1[0]);\n                    localKeys.push(rlStr_1[0] + 'Index');\n                    varCOunt = varCOunt + 1;\n                    // tslint:disable-next-line\n                    return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i' + varCOunt + '++';\n                }) + '{ \\n ' + 'var ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n                    + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n            }\n            else {\n                //helper function handling\n                var fnStr = cnt.split('(');\n                var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n                fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n                var ftArray = matches[1].split(',');\n                if (matches[1].length !== 0 && !(/data/).test(ftArray[0]) && !(/window./).test(ftArray[0])) {\n                    matches[1] = (fNameSpace === 'global' ? nameSpace + '.' + matches[1] : matches[1]);\n                }\n                var splRegexp = /\\@|\\$|\\#/gm;\n                var arrObj = /\\]\\./gm;\n                if (WINDOWFUNC.test(cnt) && arrObj.test(cnt) || splRegexp.test(cnt)) {\n                    var splArrRegexp = /\\@|\\$|\\#|\\]\\./gm;\n                    if (splArrRegexp.test(cnt)) {\n                        // tslint:disable-next-line\n                        cnt = '\"+ ' + (fNameSpace === 'global' ? '' : fNameSpace) + cnt.replace(matches[1], rlStr.replace(WORDFUNC, function (strs) {\n                            return HandleSpecialCharArrObj(strs, nameSpace, localKeys);\n                        })) + '+ \"';\n                    }\n                }\n                else {\n                    cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n                        cnt.replace(rlStr, addNameSpace(matches[1].replace(/,( |)data.|,/gi, ',' + nameSpace + '.').replace(/,( |)data.window/gi, ',window'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys)) +\n                        '+\"';\n                }\n            }\n        }\n        else if (ELSE_STMT.test(cnt)) {\n            // handling else condition\n            cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n        }\n        else if (!!cnt.match(IF_OR_FOR)) {\n            // close condition \n            cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n        }\n        else if (SPECIAL_CHAR.test(cnt)) {\n            // template string with double slash with special character\n            if (cnt.match(SINGLE_SLASH)) {\n                cnt = SlashReplace(cnt);\n            }\n            cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n        }\n        else {\n            // template string with double slash\n            if (cnt.match(SINGLE_SLASH)) {\n                cnt = SlashReplace(cnt);\n                cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n            }\n            else {\n                // evaluate normal expression\n                cnt = '\"+' + addNameSpace(cnt.replace(/\\,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '+\"';\n            }\n        }\n        return cnt;\n    });\n}\nfunction addNameSpace(str, addNS, nameSpace, ignoreList, emptyStrCheck) {\n    /* istanbul ignore next */\n    if (emptyStrCheck && str === '') {\n        return str;\n    }\n    return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '.' + str : str);\n}\nfunction NameSpaceArrObj(str, addNS, nameSpace, ignoreList) {\n    var arrObjReg = /^\\..*/gm;\n    return ((addNS && !(NOT_NUMBER.test(str)) &&\n        ignoreList.indexOf(str.split('.')[0]) === -1 && !(arrObjReg.test(str))) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n//     return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\nfunction NameSpaceForspecialChar(str, addNS, nameSpace, ignoreList) {\n    return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '[\"' + str : str);\n}\n// tslint:disable-next-line\nfunction SlashReplace(tempStr) {\n    // tslint:disable-next-line\n    var double = \"\\\\\\\\\";\n    if (tempStr.match(DOUBLE_SLASH)) {\n        tempStr = tempStr;\n    }\n    else {\n        tempStr = tempStr.replace(SINGLE_SLASH, double);\n    }\n    return tempStr;\n}\nfunction HandleSpecialCharArrObj(str, nameSpaceNew, keys, emptyStrCheck) {\n    str = str.trim();\n    var windowFunc = /\\window\\./gm;\n    if (!windowFunc.test(str)) {\n        var quotes = /'|\"/gm;\n        var splRegexp = /\\@|\\$|\\#/gm;\n        if (splRegexp.test(str)) {\n            str = NameSpaceForspecialChar(str, (keys.indexOf(str) === -1), nameSpaceNew, keys) + '\"]';\n        }\n        if (ARR_OBJ.test(str)) {\n            return NameSpaceArrObj(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys);\n        }\n        else {\n            return addNameSpace(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys, emptyStrCheck);\n        }\n    }\n    else {\n        return str;\n    }\n}\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nimport { isNullOrUndefined, isBlazor } from './util';\nvar HAS_ROW = /^[\\n\\r.]+\\<tr|^\\<tr/;\nvar HAS_SVG = /^[\\n\\r.]+\\<svg|^\\<path|^\\<g/;\nexport var blazorTemplates = {};\nexport function getRandomId() {\n    return '-' + Math.random().toString(36).substr(2, 5);\n}\n/**\n * Compile the template string into template function.\n * @param  {string} templateString - The template string which is going to convert.\n * @param  {Object} helper? - Helper functions as an object.\n * @private\n */\n//tslint:disable-next-line\nexport function compile(templateString, helper) {\n    var compiler = engineObj.compile(templateString, helper);\n    //tslint:disable-next-line\n    return function (data, component, propName, templateId, isStringTemplate, index, element) {\n        var result = compiler(data, component, propName, element);\n        var blazor = 'Blazor';\n        var blazorTemplateId = 'BlazorTemplateId';\n        if (isBlazor() && !isStringTemplate) {\n            var randomId = getRandomId();\n            var blazorId = templateId + randomId;\n            if (!blazorTemplates[templateId]) {\n                blazorTemplates[templateId] = [];\n            }\n            if (!isNullOrUndefined(index)) {\n                var keys = Object.keys(blazorTemplates[templateId][index]);\n                for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n                    var key = keys_1[_i];\n                    if (key !== blazorTemplateId && data[key]) {\n                        blazorTemplates[templateId][index][key] = data[key];\n                    }\n                    if (key === blazorTemplateId) {\n                        blazorId = blazorTemplates[templateId][index][key];\n                    }\n                }\n            }\n            else {\n                data[blazorTemplateId] = blazorId;\n                blazorTemplates[templateId].push(data);\n            }\n            // tslint:disable-next-line:no-any\n            return propName === 'rowTemplate' ? [createElement('tr', { id: blazorId, className: 'e-blazor-template' })] :\n                // tslint:disable-next-line:no-any\n                [createElement('div', { id: blazorId, className: 'e-blazor-template' })];\n        }\n        if (typeof result === 'string') {\n            if (HAS_SVG.test(result)) {\n                var ele = createElement('svg', { innerHTML: result });\n                return ele.childNodes;\n            }\n            else {\n                var ele = createElement((HAS_ROW.test(result) ? 'table' : 'div'), { innerHTML: result });\n                return ele.childNodes;\n            }\n        }\n        else {\n            return result;\n        }\n    };\n}\nexport function updateBlazorTemplate(templateId, templateName, comp, isEmpty, callBack) {\n    var blazor = 'Blazor';\n    if (isBlazor()) {\n        var ejsIntrop = 'sfBlazor';\n        window[ejsIntrop].updateTemplate(templateName, blazorTemplates[templateId], templateId, comp, callBack);\n        if (isEmpty !== false) {\n            blazorTemplates[templateId] = [];\n        }\n    }\n}\nexport function resetBlazorTemplate(templateId, templateName, index) {\n    var templateDiv = document.getElementById(templateId);\n    if (templateDiv) {\n        // tslint:disable-next-line:no-any\n        var innerTemplates = templateDiv.getElementsByClassName('blazor-inner-template');\n        for (var i = 0; i < innerTemplates.length; i++) {\n            var tempId = ' ';\n            if (!isNullOrUndefined(index)) {\n                tempId = innerTemplates[index].getAttribute('data-templateId');\n            }\n            else {\n                tempId = innerTemplates[i].getAttribute('data-templateId');\n            }\n            var tempElement = document.getElementById(tempId);\n            if (tempElement) {\n                var length_1 = tempElement.childNodes.length;\n                for (var j = 0; j < length_1; j++) {\n                    if (!isNullOrUndefined(index)) {\n                        innerTemplates[index].appendChild(tempElement.childNodes[0]);\n                        i = innerTemplates.length;\n                    }\n                    else {\n                        innerTemplates[i].appendChild(tempElement.childNodes[0]);\n                    }\n                }\n            }\n        }\n    }\n}\n/**\n * Set your custom template engine for template rendering.\n * @param  {ITemplateEngine} classObj - Class object for custom template.\n * @private\n */\nexport function setTemplateEngine(classObj) {\n    engineObj.compile = classObj.compile;\n}\n/**\n * Get current template engine for template rendering\n * @param  {ITemplateEngine} classObj - Class object for custom template.\n * @private\n */\nexport function getTemplateEngine() {\n    return engineObj.compile;\n}\n//Default Engine Class\nvar Engine = /** @class */ (function () {\n    function Engine() {\n    }\n    Engine.prototype.compile = function (templateString, helper) {\n        if (helper === void 0) { helper = {}; }\n        return render(templateString, helper);\n    };\n    return Engine;\n}());\nvar engineObj = { compile: new Engine().compile };\n","import { isObject, getValue, extend, isNullOrUndefined } from './util';\nimport { getRandomId } from './template-engine';\nvar simpleRegex = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/;\nvar multipleSplitRegex = /(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))/g;\nvar idClassSelector = /^(\\.|#)/;\nvar selectMapper = {\n    '.': 'className',\n    '#': 'id'\n};\nvar classRegexString = '(?=.*?\\\\b{value}\\\\b)';\nvar assigner = { className: 'attributes.className', id: 'attributes.id', tagName: 'tagName' };\nvar emptyElements = ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input',\n    'link', 'meta', 'param', 'embed', 'command', 'keygen', 'source', 'track', 'wbr'];\nvar blockElements = ['a', 'address', 'article', 'applet', 'aside', 'audio', 'blockquote',\n    'button', 'canvas', 'center', 'dd', 'del', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure',\n    'footer', 'form', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'iframe', 'ins',\n    'isindex', 'li', 'map', 'menu', 'noframes', 'noscript', 'object', 'ol', 'output', 'p', 'pre', 'section',\n    'script', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'ul', 'video'];\nvar inlineElement = ['abbr', 'acronym', 'applet', 'b', 'basefont', 'bdo', 'big', 'br', 'button',\n    'cite', 'code', 'del', 'dfn', 'em', 'font', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'label', 'map',\n    'object', 'q', 's', 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'textarea',\n    'tt', 'u', 'var'];\nvar selfClosingElements = ['colgroup', 'dd', 'dt', 'li', 'options', 'p', 'td', 'tfoot', 'th',\n    'thead', 'tr'];\nvar fillAttrs = ['checked', 'compact', 'declare', 'defer', 'disabled', 'ismap', 'multiple',\n    'nohref', 'noresize', 'noshade', 'nowrap', 'readonly', 'selected'];\nvar cspElement = ['Script', 'style'];\nvar nameMapper = { 'tabindex': 'tabIndex' };\nvar startRegex = /^<([-A-Za-z0-9_]+)((?:\\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/;\nvar endRegex = /^<\\/([-A-Za-z0-9_]+)[^>]*>/;\nvar attributeRegex = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|([^>\\s]+)))?/g;\n/**\n * Namespace for VirtualDOM\n * @private\n */\nexport var VirtualDOM;\n(function (VirtualDOM) {\n    //tslint:disable:no-any\n    function createElement(tagName, properties) {\n        var children = [];\n        var extended = extend({}, {}, properties, true);\n        if (!isNullOrUndefined(properties)) {\n            var keys = Object.keys(properties);\n            if (keys.length) {\n                if (extended.innerHTML) {\n                    children = ConvertHTMLToJSon(extended.innerHTML);\n                    delete extended.innerHTML;\n                }\n                if (extended.attrs) {\n                    extend(extended, extended.attrs);\n                    delete extended.attrs;\n                }\n                if (extended.styles) {\n                    var valArr = extended.styles.split(';');\n                    var vObj = {};\n                    for (var i = 0, length_1 = valArr.length; i < length_1; i++) {\n                        var cVal = valArr[i];\n                        var styleSplit = cVal.split(':');\n                        vObj[styleSplit[0]] = styleSplit[1];\n                    }\n                    delete extended.styles;\n                    extended.style = vObj;\n                }\n            }\n        }\n        return {\n            tagName: tagName,\n            attributes: extended || {},\n            children: children\n        };\n    }\n    VirtualDOM.createElement = createElement;\n    function assignParent(childrens, parent) {\n        if (parent && childrens) {\n            childrens.forEach(function (child) {\n                if (isObject(child)) {\n                    if (child.parent) {\n                        detach(child);\n                    }\n                    child.parent = parent;\n                }\n                return child;\n            });\n        }\n    }\n    VirtualDOM.assignParent = assignParent;\n    function append(fromElements, toElement) {\n        assignParent(fromElements, toElement);\n        if (toElement.children) {\n            toElement.children = toElement.children.concat(fromElements);\n        }\n        else {\n            toElement.children = [].concat(fromElements);\n        }\n    }\n    VirtualDOM.append = append;\n    function prepend(child, toElement) {\n        assignParent(child, toElement);\n        if (!toElement.children || !toElement.children.length) {\n            toElement.children = [];\n            toElement.children.concat(child);\n        }\n        else {\n            for (var i = child.length - 1; i >= 0; i--) {\n                toElement.children.unshift(child[i]);\n            }\n        }\n    }\n    VirtualDOM.prepend = prepend;\n    function detach(element) {\n        var parent = element.parent;\n        if (parent) {\n            var index = parent.children.indexOf(element);\n            if (index !== -1) {\n                parent.children.splice(index);\n            }\n        }\n        return parent;\n    }\n    VirtualDOM.detach = detach;\n    //tslint:disable-next-line\n    function vDomSelector(_a) {\n        var ele = _a.ele, selector = _a.selector, selectAll = _a.selectAll, immediateParent = _a.immediateParent;\n        var iSelector = selector.split(' ');\n        var curColl = ele;\n        for (var i = 0, length_2 = iSelector.length; i < length_2; i++) {\n            var isDescendant = false;\n            var parent_2 = curColl;\n            var curSelector = iSelector[i];\n            var simpleSelector = false;\n            var mapper = [];\n            if (simpleRegex.test(curSelector)) {\n                simpleSelector = true;\n                processSelector(curSelector, mapper);\n            }\n            else if (curSelector.indexOf('>') === -1) {\n                var splitSelector = curSelector.match(multipleSplitRegex);\n                for (var _i = 0, splitSelector_1 = splitSelector; _i < splitSelector_1.length; _i++) {\n                    var curMap = splitSelector_1[_i];\n                    processSelector(curMap, mapper);\n                }\n            }\n            else if (curSelector.indexOf('>') !== -1) {\n                isDescendant = true;\n                var dSelector = curSelector.split('>');\n                //tslint:disable-next-line\n                var dParent = ele;\n                var descendent = void 0;\n                var flag = 0;\n                for (var _b = 0, dSelector_1 = dSelector; _b < dSelector_1.length; _b++) {\n                    var sel = dSelector_1[_b];\n                    if (!dParent) {\n                        break;\n                    }\n                    if (dParent.length) {\n                        var descendentChild = [];\n                        for (var _c = 0, dParent_1 = dParent; _c < dParent_1.length; _c++) {\n                            var child = dParent_1[_c];\n                            descendentChild = descendentChild.concat(vDomSelector({\n                                ele: child, selector: sel,\n                                selectAll: selectAll, immediateParent: !!flag\n                            }));\n                        }\n                        descendent = descendentChild;\n                    }\n                    else {\n                        descendent = vDomSelector({ ele: dParent, selector: sel, selectAll: selectAll, immediateParent: !!flag });\n                    }\n                    flag++;\n                    dParent = descendent;\n                }\n                if (descendent) {\n                    curColl = descendent;\n                }\n            }\n            if (!isDescendant) {\n                if (parent_2.length) {\n                    var iCurSelector = [];\n                    for (var _d = 0, parent_1 = parent_2; _d < parent_1.length; _d++) {\n                        var curParent = parent_1[_d];\n                        iCurSelector = iCurSelector.concat(accessElement(curParent, mapper, selectAll, immediateParent));\n                    }\n                    curColl = iCurSelector;\n                }\n                else {\n                    curColl = accessElement(parent_2, mapper, selectAll, immediateParent);\n                }\n            }\n        }\n        if (selectAll) {\n            return curColl;\n        }\n        else {\n            return curColl[0] || null;\n        }\n    }\n    VirtualDOM.vDomSelector = vDomSelector;\n    function processSelector(selector, mapper) {\n        var match = selector.match(idClassSelector);\n        var obj = {};\n        if (match) {\n            var curMapper = selectMapper[match[0]];\n            if (curMapper === 'className') {\n                var curObj = mapper.filter(function (obj) { return obj.hasOwnProperty('className'); })[0];\n                var canPush = false;\n                if (!curObj) {\n                    canPush = true;\n                    curObj = {};\n                }\n                var existValue = curObj[curMapper] || '';\n                curObj[curMapper] = existValue + classRegexString.replace('{value}', selector.replace('.', ''));\n                if (canPush) {\n                    mapper.push(curObj);\n                }\n            }\n            else {\n                obj[curMapper] = selector.replace(match[0], '');\n                mapper.push(obj);\n            }\n        }\n        else {\n            mapper.push({ tagName: selector });\n        }\n    }\n    //tslint:disable-next-line\n    function accessElement(ele, mapper, selectAll, immediateParent) {\n        if (ele.children) {\n            //tslint:disable-next-line\n            var temp_1 = ele.children.filter(function (child) {\n                if (typeof (child) !== 'string') {\n                    var matched = true;\n                    for (var _i = 0, mapper_1 = mapper; _i < mapper_1.length; _i++) {\n                        var map = mapper_1[_i];\n                        var key = Object.keys(map)[0];\n                        var expected = map[key];\n                        var actualValue = getValue(assigner[key], child);\n                        if (key === 'className') {\n                            if (!(new RegExp('^' + expected + '.*$').test(actualValue))) {\n                                matched = false;\n                                break;\n                            }\n                        }\n                        else if (actualValue !== expected) {\n                            matched = false;\n                            break;\n                        }\n                    }\n                    return matched;\n                }\n                else {\n                    return false;\n                }\n            });\n            if (!immediateParent && (!temp_1.length || selectAll)) {\n                ele.children.forEach(function (child) {\n                    if (isObject(child)) {\n                        temp_1 = temp_1.concat(accessElement(child, mapper, selectAll));\n                    }\n                });\n            }\n            return temp_1;\n        }\n        else {\n            return [];\n        }\n    }\n    VirtualDOM.accessElement = accessElement;\n    function ConvertHTMLToJSon(htmlString) {\n        var results = [];\n        var isText;\n        var tagArray = [];\n        var backup = htmlString;\n        var nodeArray = [];\n        while (htmlString) {\n            isText = true;\n            var lastVal = getLastValue(tagArray);\n            if (!lastVal || !contains(cspElement, lastVal)) {\n                if (htmlString.indexOf('</') === 0) {\n                    var match = htmlString.match(endRegex);\n                    if (match) {\n                        htmlString = htmlString.substring(match[0].length);\n                        //tslint:disable-next-line\n                        match[0].replace(endRegex, iterateEndTag);\n                    }\n                    isText = false;\n                }\n                else if (htmlString.indexOf('<') === 0) {\n                    var match = htmlString.match(startRegex);\n                    if (match) {\n                        htmlString = htmlString.substring(match[0].length);\n                        //tslint:disable-next-line\n                        match[0].replace(startRegex, iterateStartTag);\n                    }\n                    isText = false;\n                }\n                if (isText) {\n                    var tagIndex = htmlString.indexOf('<');\n                    var text = tagIndex < 0 ? htmlString : htmlString.substring(0, tagIndex);\n                    htmlString = tagIndex < 0 ? '' : htmlString.substring(tagIndex);\n                    iterateText(text);\n                }\n            }\n            else {\n                //tslint:disable-next-line\n                htmlString = htmlString.replace(new RegExp('([\\\\s\\\\S]*?)<\\/' + getLastValue(nodeArray) + '[^>]*>'), function (all, text) {\n                    text = text.replace(/<!--([\\s\\S]*?)-->|<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1$2');\n                    iterateText(text);\n                    return '';\n                });\n                iterateEndTag('', getLastValue(tagArray));\n            }\n            backup = htmlString;\n        }\n        function iterateStartTag(start, tagName, rest) {\n            tagName = tagName.toLowerCase();\n            if (contains(blockElements, tagName)) {\n                while (getLastValue(tagArray) && contains(inlineElement, getLastValue(tagArray))) {\n                    iterateEndTag('', getLastValue(tagArray));\n                }\n            }\n            if (contains(selfClosingElements, tagName) && getLastValue(tagArray)) {\n                iterateEndTag('', tagName);\n            }\n            var isSelfTag = contains(emptyElements, tagName);\n            if (!isSelfTag) {\n                tagArray.push(tagName);\n            }\n            var attrs = {};\n            //tslint:disable-next-line\n            rest.replace(attributeRegex, function (match, name) {\n                var names = [];\n                for (var _i = 2; _i < arguments.length; _i++) {\n                    names[_i - 2] = arguments[_i];\n                }\n                //tslint:disable-next-line\n                var val = names[2] ? names[2] :\n                    names[3] ? names[3] :\n                        names[4] ? names[4] :\n                            contains(fillAttrs, name) ? name : '';\n                if (name === 'style') {\n                    var valArr = val.split(';');\n                    var vObj = {};\n                    for (var i = 0, length_3 = valArr.length; i < length_3; i++) {\n                        var cVal = valArr[i];\n                        var styleSplit = cVal.split(':');\n                        vObj[styleSplit[0]] = styleSplit[1];\n                    }\n                    val = vObj;\n                }\n                name = nameMapper[name] || name;\n                attrs[name] = val;\n                //tslint:disable-next-line\n            });\n            attrs['data-id'] = getRandomId();\n            var tagObject = {\n                tagName: tagName,\n                attributes: attrs\n            };\n            if (isSelfTag) {\n                var parent_3 = (nodeArray[0] || results);\n                if (parent_3.children === undefined) {\n                    parent_3.children = [];\n                }\n                tagObject.parent = parent_3;\n                parent_3.children.push(tagObject);\n            }\n            else {\n                nodeArray.unshift(tagObject);\n            }\n        }\n        function iterateEndTag(start, tagName) {\n            var pos;\n            if (!tagName) {\n                pos = 0;\n            }\n            else {\n                for (pos = tagArray.length - 1; pos >= 0; pos--) {\n                    if (tagArray[pos] === tagName) {\n                        break;\n                    }\n                }\n            }\n            if (pos >= 0) {\n                for (var j = nodeArray.length - 1; j >= pos; j--) {\n                    //tslint:disable-next-line\n                    var node = nodeArray.shift();\n                    if (nodeArray.length === 0) {\n                        results.push(node);\n                    }\n                    else {\n                        var parent_4 = nodeArray[0];\n                        if (parent_4.children === undefined) {\n                            parent_4.children = [];\n                        }\n                        node.parent = parent_4;\n                        parent_4.children.push(node);\n                    }\n                }\n                tagArray.length = pos;\n            }\n        }\n        function iterateText(text) {\n            if (nodeArray.length === 0) {\n                results.push(text);\n            }\n            else {\n                var parent_5 = nodeArray[0];\n                if (parent_5.children === undefined) {\n                    parent_5.children = [];\n                }\n                parent_5.children.push(text);\n            }\n        }\n        return results;\n    }\n    VirtualDOM.ConvertHTMLToJSon = ConvertHTMLToJSon;\n    //tslint:disable-next-line \n    function getLastValue(arr) {\n        return arr[arr.length - 1];\n    }\n    function contains(arr, key) {\n        return arr.indexOf(key) !== -1;\n    }\n    //tslint:disable-next-line\n    function cloneNode(ele, deep) {\n        if (isObject(ele)) {\n            if (deep) {\n                return extend({}, {}, ele, true);\n            }\n            else {\n                return { tagName: ele.tagName, attributes: ele.attributes };\n            }\n        }\n        else {\n            return ele.cloneNode(deep);\n        }\n    }\n    VirtualDOM.cloneNode = cloneNode;\n    function setStyleAttribute(element, attrs) {\n        if (element.attributes.style) {\n            (element.attributes).style = extend({}, attrs);\n        }\n        else {\n            element.attributes.style = extend(element.attributes.style, attrs);\n        }\n    }\n    VirtualDOM.setStyleAttribute = setStyleAttribute;\n    //tslint:enable:no-any\n})(VirtualDOM || (VirtualDOM = {}));\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined, getValue, setValue, isObject, extend } from './util';\nimport { VirtualDOM } from './virtual-dom';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n * @param tagName - Name of the tag, id and class names.\n * @param properties - Object to set properties in the element.\n * @param properties.id - To set the id to the created element.\n * @param properties.className - To add classes to the element.\n * @param properties.innerHTML - To set the innerHTML to element.\n * @param properties.styles - To set the some custom styles to element.\n * @param properties.attrs - To set the attributes to element.\n * @private\n */\nexport function createElement(tagName, properties) {\n    //tslint:disable-next-line\n    var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n    if (typeof (properties) === 'undefined') {\n        return element;\n    }\n    element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n    if (properties.className !== undefined) {\n        element.className = properties.className;\n    }\n    if (properties.id !== undefined) {\n        element.id = properties.id;\n    }\n    if (properties.styles !== undefined) {\n        element.setAttribute('style', properties.styles);\n    }\n    if (properties.attrs !== undefined) {\n        attributes(element, properties.attrs);\n    }\n    return element;\n}\n/**\n * The function used to add the classes to array of elements\n * @param  {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param  {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function addClass(elements, classes) {\n    var classList = getClassList(classes);\n    for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n        var ele = _a[_i];\n        if (ele && classList) {\n            for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n                var className = classList_1[_b];\n                if (isObject(ele)) {\n                    var curClass = getValue('attributes.className', ele);\n                    if (isNullOrUndefined(curClass)) {\n                        setValue('attributes.className', className, ele);\n                    }\n                    else if (!new RegExp('\\\\b' + className + '\\\\b', 'i').test(curClass)) {\n                        setValue('attributes.className', curClass + ' ' + className, ele);\n                    }\n                }\n                else {\n                    if (!ele.classList.contains(className)) {\n                        ele.classList.add(className);\n                    }\n                }\n            }\n        }\n    }\n    return elements;\n}\n/**\n * The function used to add the classes to array of elements\n * @param  {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param  {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function removeClass(elements, classes) {\n    var classList = getClassList(classes);\n    for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n        var ele = _a[_i];\n        if (ele && classList) {\n            var flag = isObject(ele);\n            var canRemove = flag ? getValue('attributes.className', ele) : ele.className !== '';\n            if (canRemove) {\n                for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n                    var className = classList_2[_b];\n                    if (flag) {\n                        var classes_1 = getValue('attributes.className', ele);\n                        var classArr = classes_1.split(' ');\n                        var index = classArr.indexOf(className);\n                        if (index !== -1) {\n                            classArr.splice(index, 1);\n                        }\n                        setValue('attributes.className', classArr.join(' '), ele);\n                    }\n                    else {\n                        ele.classList.remove(className);\n                    }\n                }\n            }\n        }\n    }\n    return elements;\n}\nfunction getClassList(classes) {\n    var classList = [];\n    if (typeof classes === 'string') {\n        classList.push(classes);\n    }\n    else {\n        classList = classes;\n    }\n    return classList;\n}\n/**\n * The function used to check element is visible or not.\n * @param  {Element|Node} element - An element the need to check visibility\n * @private\n */\nexport function isVisible(element) {\n    var ele = element;\n    return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n * @param  {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param  {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function prepend(fromElements, toElement, isEval) {\n    //tslint:disable:no-any\n    if (isObject(toElement)) {\n        VirtualDOM.prepend(fromElements, toElement);\n    }\n    else {\n        var docFrag = document.createDocumentFragment();\n        for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n            var ele = _a[_i];\n            docFrag.appendChild(ele);\n        }\n        toElement.insertBefore(docFrag, toElement.firstElementChild);\n        if (isEval) {\n            executeScript(toElement);\n        }\n    }\n    return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n * @param  {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param  {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function append(fromElements, toElement, isEval) {\n    if (isObject(toElement)) {\n        VirtualDOM.append(fromElements, toElement);\n    }\n    else {\n        var docFrag = document.createDocumentFragment();\n        for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n            var ele = _a[_i];\n            docFrag.appendChild(ele);\n        }\n        toElement.appendChild(docFrag);\n        if (isEval) {\n            executeScript(toElement);\n        }\n    }\n    return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n * @param ele - An element is going to evaluate the script\n */\nfunction executeScript(ele) {\n    var eleArray = ele.querySelectorAll('script');\n    eleArray.forEach(function (element) {\n        var script = document.createElement('script');\n        script.text = element.innerHTML;\n        document.head.appendChild(script);\n        detach(script);\n    });\n}\n/**\n * The function used to remove the element from the\n * @param  {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\nexport function detach(element) {\n    if (isObject(element)) {\n        return VirtualDOM.detach(element);\n    }\n    else {\n        var parentNode = element.parentNode;\n        if (parentNode) {\n            return parentNode.removeChild(element);\n        }\n    }\n}\n//tslint: enable:no-any\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param  {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\nexport function remove(element) {\n    if (isObject(element)) {\n        VirtualDOM.detach(element);\n    }\n    else {\n        var parentNode = element.parentNode;\n        EventHandler.clearEvents(element);\n        parentNode.removeChild(element);\n    }\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param  {Element|Node} element - An element that need to set attributes.\n * @param  {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\nexport function attributes(element, attributes) {\n    var keys = Object.keys(attributes);\n    var ele = element;\n    if (ele) {\n        for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n            var key = keys_1[_i];\n            if (isObject(ele)) {\n                var iKey = key;\n                if (key === 'tabindex') {\n                    iKey = 'tabIndex';\n                }\n                ele.attributes[iKey] = attributes[key];\n            }\n            else {\n                ele.setAttribute(key, attributes[key]);\n            }\n        }\n    }\n    return ele;\n}\n/**\n * The function selects the element from giving context.\n * @param  {string} selector - Selector string need fetch element from the\n * @param  {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\n//tslint:disable-next-line\nexport function select(selector, context, needsVDOM) {\n    if (context === void 0) { context = document; }\n    if (isObject(context) && needsVDOM) {\n        //tslint:disable-next-line\n        return VirtualDOM.vDomSelector({ ele: context, selector: selector, selectAll: false });\n    }\n    else {\n        selector = querySelectId(selector);\n        return context.querySelector(selector);\n    }\n}\n/**\n * The function selects an array of element from the given context.\n * @param  {string} selector - Selector string need fetch element from the\n * @param  {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function selectAll(selector, context, needsVDOM) {\n    if (context === void 0) { context = document; }\n    if (isObject(context) && !needsVDOM) {\n        //tslint:disable-next-line\n        return VirtualDOM.vDomSelector({ ele: context, selector: selector, selectAll: true });\n    }\n    else {\n        selector = querySelectId(selector);\n        var nodeList = context.querySelectorAll(selector);\n        return nodeList;\n    }\n}\nfunction querySelectId(selector) {\n    var charRegex = /(!|\"|\\$|%|&|'|\\(|\\)|\\*|\\/|:|;|<|=|\\?|@|\\]|\\^|`|{|}|\\||\\+|~)/g;\n    if (selector.match(/#[0-9]/g) || selector.match(charRegex)) {\n        var idList = selector.split(',');\n        for (var i = 0; i < idList.length; i++) {\n            var list = idList[i].split(' ');\n            for (var j = 0; j < list.length; j++) {\n                if (list[j].indexOf('#') > -1) {\n                    if (!list[j].match(/\\[.*\\]/)) {\n                        var splitId = list[j].split('#');\n                        if (splitId[1].match(/^\\d/) || splitId[1].match(charRegex)) {\n                            var setId = list[j].split('.');\n                            setId[0] = setId[0].replace(/#/, '[id=\\'') + '\\']';\n                            list[j] = setId.join('.');\n                        }\n                    }\n                }\n            }\n            idList[i] = list.join(' ');\n        }\n        return idList.join(',');\n    }\n    return selector;\n}\n/**\n * Returns single closest parent element based on class selector.\n * @param  {Element} element - An element that need to find the closest element.\n * @param  {string} selector - A classSelector of closest element.\n * @private\n */\nexport function closest(element, selector) {\n    var el = element;\n    if (typeof el.closest === 'function') {\n        return el.closest(selector);\n    }\n    while (el && el.nodeType === 1) {\n        if (matches(el, selector)) {\n            return el;\n        }\n        el = el.parentNode;\n    }\n    return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param  {Element|Node} element - An element that need to get siblings.\n * @private\n */\nexport function siblings(element) {\n    var siblings = [];\n    var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n    for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n        var curNode = childNodes_1[_i];\n        if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n            siblings.push(curNode);\n        }\n    }\n    return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n * @param  {HTMLElement} element - An element to which we need to set value.\n * @param  {string} property - Property need to get or set.\n * @param  {string} value - value need to set.\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n    var attrVal;\n    var isObj = isObject(element);\n    if (isObj) {\n        attrVal = getValue('attributes.' + property, element);\n    }\n    else {\n        attrVal = element.getAttribute(property);\n    }\n    if (isNullOrUndefined(attrVal) && value) {\n        if (!isObj) {\n            element.setAttribute(property, value.toString());\n        }\n        else {\n            element.attributes[property] = value;\n        }\n        attrVal = value;\n    }\n    return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n    if (attrs !== undefined) {\n        if (isObject(element)) {\n            // tslint:disable-next-line:no-any\n            VirtualDOM.setStyleAttribute(element, attrs);\n        }\n        else {\n            Object.keys(attrs).forEach(function (key) {\n                // tslint:disable-next-line:no-any\n                element.style[key] = attrs[key];\n            });\n        }\n    }\n}\n/**\n * Method for add and remove classes to a dom element.\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @return {void}\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n    addClass([element], addClasses);\n    removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\nexport function matches(element, selector) {\n    //tslint:disable-next-line\n    var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n    if (matches) {\n        return matches.call(element, selector);\n    }\n    else {\n        return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n    }\n}\nexport function includeInnerHTML(ele, innerHTML) {\n    if (isObject(ele)) {\n        if (innerHTML === '') {\n            ele.children = [];\n        }\n        else {\n            var res = VirtualDOM.ConvertHTMLToJSon(innerHTML);\n            if (res.length) {\n                VirtualDOM.assignParent(res, ele);\n                ele.children = res;\n            }\n        }\n    }\n    else {\n        ele.innerHTML = innerHTML;\n    }\n}\n//tslint:disable-next-line\nexport function containsClass(ele, className) {\n    if (isObject(ele)) {\n        // tslint:disable-next-line:no-any\n        return new RegExp('\\\\b' + className + '\\\\b', 'i').test(ele.attributes.className);\n    }\n    else {\n        return ele.classList.contains(className);\n    }\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {Element | VirtualObject}\n * @private\n */\n//tslint:disable:no-any\nexport function cloneNode(element, deep) {\n    if (isObject(element)) {\n        if (deep) {\n            return extend({}, {}, element, true);\n        }\n        else {\n            return { tagName: element.tagName, attributes: element.attributes };\n        }\n    }\n    else {\n        return element.cloneNode(deep);\n    }\n}\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, isBlazor, getValue, extend } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp('\\]');\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n * @private\n */\nvar Base = /** @class */ (function () {\n    /**\n     * Base constructor accept options and element\n     */\n    function Base(options, element) {\n        this.isRendered = false;\n        this.isComplexArraySetter = false;\n        this.isServerRendered = false;\n        this.allowServerDataBinding = true;\n        this.isProtectedOnChange = true;\n        this.properties = {};\n        this.changedProperties = {};\n        this.oldProperties = {};\n        this.bulkChanges = {};\n        this.refreshing = false;\n        this.ignoreCollectionWatch = false;\n        // tslint:disable-next-line:no-empty\n        this.finalUpdate = function () { };\n        this.childChangedProperties = {};\n        this.modelObserver = new Observer(this);\n        if (!isUndefined(element)) {\n            if ('string' === typeof (element)) {\n                this.element = document.querySelector(element);\n            }\n            else {\n                this.element = element;\n            }\n            if (!isNullOrUndefined(this.element)) {\n                this.isProtectedOnChange = false;\n                this.addInstance();\n            }\n        }\n        if (!isUndefined(options)) {\n            this.setProperties(options, true);\n        }\n        this.isDestroyed = false;\n    }\n    /** Property base section */\n    /**\n     * Function used to set bunch of property at a time.\n     * @private\n     * @param  {Object} prop - JSON object which holds components properties.\n     * @param  {boolean} muteOnChange? - Specifies to true when we set properties.\n     */\n    Base.prototype.setProperties = function (prop, muteOnChange) {\n        var prevDetection = this.isProtectedOnChange;\n        this.isProtectedOnChange = !!muteOnChange;\n        merge(this, prop);\n        if (muteOnChange !== true) {\n            merge(this.changedProperties, prop);\n            this.dataBind();\n        }\n        else if (isBlazor() && this.isRendered) {\n            this.serverDataBind(prop);\n        }\n        this.finalUpdate();\n        this.changedProperties = {};\n        this.oldProperties = {};\n        this.isProtectedOnChange = prevDetection;\n    };\n    ;\n    /**\n     * Calls for child element data bind\n     * @param {Object} obj\n     * @param {Object} parent\n     * @returns {void}\n     */\n    // tslint:disable-next-line:no-any\n    Base.callChildDataBind = function (obj, parent) {\n        var keys = Object.keys(obj);\n        for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n            var key = keys_1[_i];\n            if (parent[key] instanceof Array) {\n                for (var _a = 0, _b = parent[key]; _a < _b.length; _a++) {\n                    var obj_1 = _b[_a];\n                    if (obj_1.dataBind !== undefined) {\n                        obj_1.dataBind();\n                    }\n                }\n            }\n            else {\n                parent[key].dataBind();\n            }\n        }\n    };\n    Base.prototype.clearChanges = function () {\n        this.finalUpdate();\n        this.changedProperties = {};\n        this.oldProperties = {};\n        this.childChangedProperties = {};\n    };\n    /**\n     * Bind property changes immediately to components\n     */\n    Base.prototype.dataBind = function () {\n        Base.callChildDataBind(this.childChangedProperties, this);\n        if (Object.getOwnPropertyNames(this.changedProperties).length) {\n            var prevDetection = this.isProtectedOnChange;\n            var newChanges = this.changedProperties;\n            var oldChanges = this.oldProperties;\n            this.clearChanges();\n            this.isProtectedOnChange = true;\n            this.onPropertyChanged(newChanges, oldChanges);\n            this.isProtectedOnChange = prevDetection;\n        }\n    };\n    ;\n    /* tslint:disable:no-any */\n    Base.prototype.serverDataBind = function (newChanges) {\n        if (!isBlazor()) {\n            return;\n        }\n        newChanges = newChanges ? newChanges : {};\n        extend(this.bulkChanges, {}, newChanges, true);\n        var sfBlazor = 'sfBlazor';\n        if (this.allowServerDataBinding && window[sfBlazor].updateModel) {\n            window[sfBlazor].updateModel(this);\n            this.bulkChanges = {};\n        }\n    };\n    /* tslint:enable:no-any */\n    Base.prototype.saveChanges = function (key, newValue, oldValue) {\n        if (isBlazor()) {\n            // tslint:disable-next-line:no-any\n            var newChanges = {};\n            newChanges[key] = newValue;\n            this.serverDataBind(newChanges);\n        }\n        if (this.isProtectedOnChange) {\n            return;\n        }\n        this.oldProperties[key] = oldValue;\n        this.changedProperties[key] = newValue;\n        this.finalUpdate();\n        this.finalUpdate = setImmediate(this.dataBind.bind(this));\n    };\n    ;\n    /** Event Base Section */\n    /**\n     * Adds the handler to the given event listener.\n     * @param {string} eventName - A String that specifies the name of the event\n     * @param {Function} listener - Specifies the call to run when the event occurs.\n     * @return {void}\n     */\n    Base.prototype.addEventListener = function (eventName, handler) {\n        this.modelObserver.on(eventName, handler);\n    };\n    /**\n     * Removes the handler from the given event listener.\n     * @param {string} eventName - A String that specifies the name of the event to remove\n     * @param {Function} listener - Specifies the function to remove\n     * @return {void}\n     */\n    Base.prototype.removeEventListener = function (eventName, handler) {\n        this.modelObserver.off(eventName, handler);\n    };\n    /**\n     * Triggers the handlers in the specified event.\n     * @private\n     * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n     * Can be a custom event, or any of the standard events.\n     * @param {Event} eventProp - Additional parameters to pass on to the event properties\n     * @param {Function} successHandler - this function will invoke after event successfully triggered\n     * @param {Function} errorHandler - this function will invoke after event if it failured to call.\n     * @return {void}\n     */\n    Base.prototype.trigger = function (eventName, eventProp, successHandler, errorHandler) {\n        var _this = this;\n        if (this.isDestroyed !== true) {\n            var prevDetection = this.isProtectedOnChange;\n            this.isProtectedOnChange = false;\n            var data = this.modelObserver.notify(eventName, eventProp, successHandler, errorHandler);\n            if (isColEName.test(eventName)) {\n                var handler = getValue(eventName, this);\n                if (handler) {\n                    var blazor = 'Blazor';\n                    if (window[blazor]) {\n                        var promise = handler.call(this, eventProp);\n                        if (promise && typeof promise.then === 'function') {\n                            if (!successHandler) {\n                                data = promise;\n                            }\n                            else {\n                                promise.then(function (data) {\n                                    if (successHandler) {\n                                        data = typeof data === 'string' && _this.modelObserver.isJson(data) ?\n                                            JSON.parse(data) : data;\n                                        successHandler.call(_this, data);\n                                    }\n                                }).catch(function (data) {\n                                    if (errorHandler) {\n                                        data = typeof data === 'string' && _this.modelObserver.isJson(data) ? JSON.parse(data) : data;\n                                        errorHandler.call(_this, data);\n                                    }\n                                });\n                            }\n                        }\n                        else if (successHandler) {\n                            successHandler.call(this, eventProp);\n                        }\n                    }\n                    else {\n                        handler.call(this, eventProp);\n                        if (successHandler) {\n                            successHandler.call(this, eventProp);\n                        }\n                    }\n                }\n                else if (successHandler) {\n                    successHandler.call(this, eventProp);\n                }\n            }\n            this.isProtectedOnChange = prevDetection;\n            return data;\n        }\n    };\n    /**\n     * To maintain instance in base class\n     */\n    Base.prototype.addInstance = function () {\n        // Add module class to the root element\n        var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n        addClass([this.element], ['e-lib', moduleClass]);\n        if (!isNullOrUndefined(this.element.ej2_instances)) {\n            this.element.ej2_instances.push(this);\n        }\n        else {\n            setValue('ej2_instances', [this], this.element);\n        }\n    };\n    /**\n     * To remove the instance from the element\n     */\n    Base.prototype.destroy = function () {\n        var _this = this;\n        this.element.ej2_instances =\n            this.element.ej2_instances.filter(function (i) { return i !== _this; });\n        removeClass([this.element], ['e-' + this.getModuleName()]);\n        if (this.element.ej2_instances.length === 0) {\n            // Remove module class from the root element\n            removeClass([this.element], ['e-lib']);\n        }\n        this.clearChanges();\n        this.modelObserver.destroy();\n        this.isDestroyed = true;\n    };\n    return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n * @param elem Specifies the HTMLElement or element id string.\n * @param comp Specifies the component module name or Component.\n */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n    var instance;\n    var i;\n    var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n    for (i = 0; i < ele.ej2_instances.length; i++) {\n        instance = ele.ej2_instances[i];\n        if (typeof comp === 'string') {\n            var compName = instance.getModuleName();\n            if (comp === compName) {\n                return instance;\n            }\n        }\n        else {\n            // tslint:disable-next-line:no-any\n            if (instance instanceof comp) {\n                return instance;\n            }\n        }\n    }\n    return undefined;\n}\n/**\n * Function to remove the child instances.\n * @return {void}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function removeChildInstance(element) {\n    // tslint:disable-next-line:no-any\n    var childEle = [].slice.call(element.getElementsByClassName('e-control'));\n    for (var i = 0; i < childEle.length; i++) {\n        var compName = childEle[i].classList[1].split('e-')[1];\n        // tslint:disable-next-line:no-any\n        var compInstance = getComponent(childEle[i], compName);\n        if (!isUndefined(compInstance)) {\n            compInstance.destroy();\n        }\n    }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n    if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n        instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n    }\n    return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n    var result = [];\n    var len = defaultValue ? defaultValue.length : 0;\n    for (var i = 0; i < len; i++) {\n        var curType = type;\n        if (isFactory) {\n            curType = type(defaultValue[i], instance);\n        }\n        if (isSetter) {\n            var inst = createInstance(curType, [instance, curKey, {}, true]);\n            inst.setProperties(defaultValue[i], true);\n            result.push(inst);\n        }\n        else {\n            result.push(createInstance(curType, [instance, curKey, defaultValue[i], false]));\n        }\n    }\n    return result;\n}\n/**\n * Returns the properties of the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertyGetter(defaultValue, curKey) {\n    return function () {\n        if (!this.properties.hasOwnProperty(curKey)) {\n            this.properties[curKey] = defaultValue;\n        }\n        return this.properties[curKey];\n    };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertySetter(defaultValue, curKey) {\n    return function (newValue) {\n        if (this.properties[curKey] !== newValue) {\n            var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n            this.saveChanges(curKey, newValue, oldVal);\n            this.properties[curKey] = newValue;\n        }\n    };\n}\n/**\n * Returns complex objects\n */\nfunction complexGetter(defaultValue, curKey, type) {\n    return function () {\n        return getObject(this, curKey, defaultValue, type);\n    };\n}\n/**\n * Sets complex objects\n */\nfunction complexSetter(defaultValue, curKey, type) {\n    return function (newValue) {\n        getObject(this, curKey, defaultValue, type).setProperties(newValue);\n    };\n}\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n    return function () {\n        var curType = type({});\n        if (this.properties.hasOwnProperty(curKey)) {\n            return this.properties[curKey];\n        }\n        else {\n            return getObject(this, curKey, defaultValue, curType);\n        }\n    };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n    return function (newValue) {\n        var curType = type(newValue, this);\n        getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n    };\n}\nfunction complexArrayGetter(defaultValue, curKey, type) {\n    return function () {\n        var _this = this;\n        if (!this.properties.hasOwnProperty(curKey)) {\n            var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n            this.properties[curKey] = defCollection;\n        }\n        var ignore = ((this.controlParent !== undefined && this.controlParent.ignoreCollectionWatch)\n            || this.ignoreCollectionWatch);\n        if (!this.properties[curKey].hasOwnProperty('push') && !ignore) {\n            ['push', 'pop'].forEach(function (extendFunc) {\n                var descriptor = {\n                    value: complexArrayDefinedCallback(extendFunc, curKey, type, _this.properties[curKey]).bind(_this),\n                    configurable: true\n                };\n                Object.defineProperty(_this.properties[curKey], extendFunc, descriptor);\n            });\n        }\n        if (!this.properties[curKey].hasOwnProperty('isComplexArray')) {\n            Object.defineProperty(this.properties[curKey], 'isComplexArray', { value: true });\n        }\n        return this.properties[curKey];\n    };\n}\nfunction complexArraySetter(defaultValue, curKey, type) {\n    return function (newValue) {\n        this.isComplexArraySetter = true;\n        var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n        var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n        this.isComplexArraySetter = false;\n        this.saveChanges(curKey, newValCollection, oldValueCollection);\n        this.properties[curKey] = newValCollection;\n    };\n}\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n    return function (newValue) {\n        var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n        var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n        this.saveChanges(curKey, newValCollection, oldValueCollection);\n        this.properties[curKey] = newValCollection;\n    };\n}\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n    return function () {\n        var curType = type({});\n        if (!this.properties.hasOwnProperty(curKey)) {\n            var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n            this.properties[curKey] = defCollection;\n        }\n        return this.properties[curKey];\n    };\n}\nfunction complexArrayDefinedCallback(dFunc, curKey, type, prop) {\n    /* tslint:disable no-function-expression */\n    return function () {\n        var newValue = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            newValue[_i] = arguments[_i];\n        }\n        var keyString = this.propName ? this.getParentKey() + '.' + curKey + '-' : curKey + '-';\n        switch (dFunc) {\n            case 'push':\n                for (var i = 0; i < newValue.length; i++) {\n                    Array.prototype[dFunc].apply(prop, [newValue[i]]);\n                    var model_1 = getArrayModel(keyString + (prop.length - 1), newValue[i], !this.controlParent, dFunc);\n                    this.serverDataBind(model_1, newValue[i], false, dFunc);\n                }\n                break;\n            case 'pop':\n                Array.prototype[dFunc].apply(prop);\n                var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n                this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);\n                break;\n        }\n        return prop;\n    };\n    /* tslint:enable no-function-expression */\n}\nfunction getArrayModel(keyString, value, isControlParent, arrayFunction) {\n    var modelObject = keyString;\n    if (isControlParent) {\n        modelObject = {};\n        modelObject[keyString] = value;\n        if (value && typeof value === 'object') {\n            var action = 'ejsAction';\n            modelObject[keyString][action] = arrayFunction;\n        }\n    }\n    return modelObject;\n}\n/**\n * Method used to create property. General syntax below.\n * @param  {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n    return function (target, key) {\n        var propertyDescriptor = {\n            set: propertySetter(defaultValue, key),\n            get: propertyGetter(defaultValue, key),\n            enumerable: true,\n            configurable: true\n        };\n        //new property creation\n        Object.defineProperty(target, key, propertyDescriptor);\n        addPropertyCollection(target, key, 'prop', defaultValue);\n    };\n}\n/**\n * Method used to create complex property. General syntax below.\n * @param  {T} defaultValue - Specifies the default value of property.\n * @param  {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex<Type>({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n    return function (target, key) {\n        var propertyDescriptor = {\n            set: complexSetter(defaultValue, key, type),\n            get: complexGetter(defaultValue, key, type),\n            enumerable: true,\n            configurable: true\n        };\n        //new property creation\n        Object.defineProperty(target, key, propertyDescriptor);\n        addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n    };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n * @param  {Function} defaultType - Specifies the default value of property.\n * @param  {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n    return function (target, key) {\n        var propertyDescriptor = {\n            set: complexFactorySetter({}, key, type),\n            get: complexFactoryGetter({}, key, type),\n            enumerable: true,\n            configurable: true\n        };\n        //new property creation\n        Object.defineProperty(target, key, propertyDescriptor);\n        addPropertyCollection(target, key, 'complexProp', {}, type);\n    };\n}\n/**\n * Method used to create complex array property. General syntax below.\n * @param  {T[]} defaultValue - Specifies the default value of property.\n * @param  {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n    return function (target, key) {\n        var propertyDescriptor = {\n            set: complexArraySetter(defaultValue, key, type),\n            get: complexArrayGetter(defaultValue, key, type),\n            enumerable: true,\n            configurable: true\n        };\n        //new property creation\n        Object.defineProperty(target, key, propertyDescriptor);\n        addPropertyCollection(target, key, 'colProp', defaultValue, type);\n    };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n * @param  {T[]} defaultType - Specifies the default type of property.\n * @param  {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n    return function (target, key) {\n        var propertyDescriptor = {\n            set: complexArrayFactorySetter([], key, type),\n            get: complexArrayFactoryGetter([], key, type),\n            enumerable: true,\n            configurable: true\n        };\n        //new property creation\n        Object.defineProperty(target, key, propertyDescriptor);\n        addPropertyCollection(target, key, 'colProp', {}, type);\n    };\n}\n/**\n * Method used to create event property. General syntax below.\n * @param  {Function} defaultValue? - Specifies the default value of property.\n * @param  {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n    return function (target, key) {\n        var eventDescriptor = {\n            set: function (newValue) {\n                var oldValue = this.properties[key];\n                if (oldValue !== newValue) {\n                    var finalContext = getParentContext(this, key);\n                    if (isUndefined(oldValue) === false) {\n                        finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n                    }\n                    finalContext.context.addEventListener(finalContext.prefix, newValue);\n                    this.properties[key] = newValue;\n                }\n            },\n            get: propertyGetter(undefined, key),\n            enumerable: true,\n            configurable: true\n        };\n        Object.defineProperty(target, key, eventDescriptor);\n        addPropertyCollection(target, key, 'event');\n    };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * ```\n *  @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n *     @Property()\n *     property1: string;\n *\n *     dataBind: () => void;\n *\n *     constructor() { }\n *\n *     onPropertyChanged(newProp: any, oldProp: any) {\n *         // Called when property changed\n *     }\n * }\n * ```\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n    /** Need to code */\n}\n/**\n * Method  used to create the builderObject for the target component.\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n    if (isUndefined(target.propList)) {\n        target.propList = {\n            props: [],\n            complexProps: [],\n            colProps: [],\n            events: [],\n            propNames: [],\n            complexPropNames: [],\n            colPropNames: [],\n            eventNames: []\n        };\n    }\n    /* tslint:disable no-any */\n    target.propList[propertyType + 's'].push({\n        propertyName: key,\n        defaultValue: defaultValue,\n        type: type\n    });\n    target.propList[propertyType + 'Names'].push(key);\n    /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\nfunction getBuilderProperties(component) {\n    if (isUndefined(component.prototype.builderObject)) {\n        component.prototype.builderObject = {\n            properties: {}, propCollections: [], add: function () {\n                this.isPropertyArray = true;\n                this.propCollections.push(extend({}, this.properties, {}));\n            }\n        };\n        var rex = /complex/;\n        for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n            var key = _a[_i];\n            var _loop_1 = function (prop) {\n                if (rex.test(key)) {\n                    component.prototype.builderObject[prop.propertyName] = function (value) {\n                        var childType = {};\n                        merge(childType, getBuilderProperties(prop.type));\n                        value(childType);\n                        var tempValue;\n                        if (!childType.isPropertyArray) {\n                            tempValue = extend({}, childType.properties, {});\n                        }\n                        else {\n                            tempValue = childType.propCollections;\n                        }\n                        this.properties[prop.propertyName] = tempValue;\n                        childType.properties = {};\n                        childType.propCollections = [];\n                        childType.isPropertyArray = false;\n                        return this;\n                    };\n                }\n                else {\n                    component.prototype.builderObject[prop.propertyName] = function (value) {\n                        this.properties[prop.propertyName] = value;\n                        return this;\n                    };\n                }\n            };\n            for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n                var prop = _c[_b];\n                _loop_1(prop);\n            }\n        }\n    }\n    return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\nexport function CreateBuilder(component) {\n    var builderFunction = function (element) {\n        this.element = element;\n        return this;\n    };\n    var instanceFunction = function (element) {\n        if (!builderFunction.prototype.hasOwnProperty('create')) {\n            builderFunction.prototype = getBuilderProperties(component);\n            builderFunction.prototype.create = function () {\n                var temp = extend({}, {}, this.properties);\n                this.properties = {};\n                return new component(temp, this.element);\n            };\n        }\n        return new builderFunction(element);\n    };\n    return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\nfunction getParentContext(context, prefix) {\n    if (context.hasOwnProperty('parentObj') === false) {\n        return { context: context, prefix: prefix };\n    }\n    else {\n        var curText = getValue('propName', context);\n        if (curText) {\n            prefix = curText + '-' + prefix;\n        }\n        return getParentContext(getValue('parentObj', context), prefix);\n    }\n}\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n *   let animeObject = new Animation({\n *      name: 'SlideLeftIn',\n *      duration: 1000\n *   });\n *   animeObject.animate('#anime1');\n *   animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n    __extends(Animation, _super);\n    function Animation(options) {\n        var _this = _super.call(this, options, undefined) || this;\n        /**\n         * @private\n         */\n        _this.easing = {\n            ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n            linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n            easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n            easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n            easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n            elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n            elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n            elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n        };\n        return _this;\n    }\n    Animation_1 = Animation;\n    /**\n     * Applies animation to the current element.\n     * @param {string | HTMLElement} element - Element which needs to be animated.\n     * @param {AnimationModel} options - Overriding default animation settings.\n     * @return {void}\n     */\n    Animation.prototype.animate = function (element, options) {\n        options = !options ? {} : options;\n        var model = this.getModel(options);\n        if (typeof element === 'string') {\n            var elements = Array.prototype.slice.call(selectAll(element, document));\n            for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n                var element_1 = elements_1[_i];\n                model.element = element_1;\n                Animation_1.delayAnimation(model);\n            }\n        }\n        else {\n            model.element = element;\n            Animation_1.delayAnimation(model);\n        }\n    };\n    /**\n     * Stop the animation effect on animated element.\n     * @param {HTMLElement} element - Element which needs to be stop the animation.\n     * @param {AnimationOptions} model - Handling the animation model at stop function.\n     * @return {void}\n     */\n    Animation.stop = function (element, model) {\n        element.style.animation = '';\n        element.removeAttribute('e-animate');\n        var animationId = element.getAttribute('e-animation-id');\n        if (animationId) {\n            var frameId = parseInt(animationId, 10);\n            cancelAnimationFrame(frameId);\n            element.removeAttribute('e-animation-id');\n        }\n        if (model && model.end) {\n            model.end.call(this, model);\n        }\n    };\n    /**\n     * Set delay to animation element\n     * @param {AnimationModel} model\n     * @returns {void}\n     */\n    Animation.delayAnimation = function (model) {\n        if (model.delay) {\n            setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n        }\n        else {\n            Animation_1.applyAnimation(model);\n        }\n    };\n    /**\n     * Triggers animation\n     * @param {AnimationModel} model\n     * @returns {void}\n     */\n    Animation.applyAnimation = function (model) {\n        var _this = this;\n        model.timeStamp = 0;\n        var step = 0;\n        var timerId = 0;\n        var startTime = 0;\n        var prevTimeStamp = 0;\n        var duration = model.duration;\n        model.element.setAttribute('e-animate', 'true');\n        var startAnimation = function (timeStamp) {\n            try {\n                if (timeStamp) {\n                    // let step: number = model.timeStamp = timeStamp - startTime;\n                    /** phantomjs workaround for timestamp fix */\n                    prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n                    model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n                    prevTimeStamp = timeStamp;\n                    /** phantomjs workaround end */\n                    // trigger animation begin event\n                    if (!step && model.begin) {\n                        model.begin.call(_this, model);\n                    }\n                    step = step + 1;\n                    var avg = model.timeStamp / step;\n                    if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n                        // apply animation effect to the current element                \n                        model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n                        if (model.progress) {\n                            model.progress.call(_this, model);\n                        }\n                        // repeat requestAnimationFrame \n                        requestAnimationFrame(startAnimation);\n                    }\n                    else {\n                        // clear requestAnimationFrame\n                        cancelAnimationFrame(timerId);\n                        model.element.removeAttribute('e-animation-id');\n                        model.element.removeAttribute('e-animate');\n                        model.element.style.animation = '';\n                        if (model.end) {\n                            model.end.call(_this, model);\n                        }\n                    }\n                }\n                else {\n                    startTime = performance.now();\n                    // set initial requestAnimationFrame\n                    timerId = requestAnimationFrame(startAnimation);\n                    model.element.setAttribute('e-animation-id', timerId.toString());\n                }\n            }\n            catch (e) {\n                cancelAnimationFrame(timerId);\n                model.element.removeAttribute('e-animation-id');\n                if (model.fail) {\n                    model.fail.call(_this, e);\n                }\n            }\n        };\n        startAnimation();\n    };\n    /**\n     * Returns Animation Model\n     * @param {AnimationModel} options\n     * @returns {AnimationModel}\n     */\n    Animation.prototype.getModel = function (options) {\n        return {\n            name: options.name || this.name,\n            delay: options.delay || this.delay,\n            duration: (options.duration !== undefined ? options.duration : this.duration),\n            begin: options.begin || this.begin,\n            end: options.end || this.end,\n            fail: options.fail || this.fail,\n            progress: options.progress || this.progress,\n            timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n                (options.timingFunction || this.easing[this.timingFunction])\n        };\n    };\n    /**\n     * @private\n     */\n    Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n        // no code needed\n    };\n    /**\n     * Returns module name as animation\n     * @private\n     */\n    Animation.prototype.getModuleName = function () {\n        return 'animation';\n    };\n    /**\n     * @private\n     */\n    Animation.prototype.destroy = function () {\n        //Override base destroy;\n    };\n    var Animation_1;\n    __decorate([\n        Property('FadeIn')\n    ], Animation.prototype, \"name\", void 0);\n    __decorate([\n        Property(400)\n    ], Animation.prototype, \"duration\", void 0);\n    __decorate([\n        Property('ease')\n    ], Animation.prototype, \"timingFunction\", void 0);\n    __decorate([\n        Property(0)\n    ], Animation.prototype, \"delay\", void 0);\n    __decorate([\n        Event()\n    ], Animation.prototype, \"progress\", void 0);\n    __decorate([\n        Event()\n    ], Animation.prototype, \"begin\", void 0);\n    __decorate([\n        Event()\n    ], Animation.prototype, \"end\", void 0);\n    __decorate([\n        Event()\n    ], Animation.prototype, \"fail\", void 0);\n    Animation = Animation_1 = __decorate([\n        NotifyPropertyChanges\n    ], Animation);\n    return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n * <div id='ripple'></div>\n * <script>\n *   rippleEffect(document.getElementById('ripple'));\n * </script>\n * ```\n * @private\n * @param HTMLElement element - Target element\n * @param RippleOptions rippleOptions - Ripple options .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n    var rippleModel = getRippleModel(rippleOptions);\n    if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n        return Function;\n    }\n    element.setAttribute('data-ripple', 'true');\n    EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n    EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n    EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n    if (Browser.isPointer) {\n        EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n    }\n    return (function () {\n        element.removeAttribute('data-ripple');\n        EventHandler.remove(element, 'mousedown', rippleHandler);\n        EventHandler.remove(element, 'mouseup', rippleUpHandler);\n        EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n        EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n    });\n}\nfunction getRippleModel(rippleOptions) {\n    var rippleModel = {\n        selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n        ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n        rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n        isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n        duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n    };\n    return rippleModel;\n}\n/**\n * Handler for ripple event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleHandler(e) {\n    var target = (e.target);\n    var selector = this.rippleOptions.selector;\n    var element = selector ? closest(target, selector) : target;\n    if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n        return;\n    }\n    var offset = element.getBoundingClientRect();\n    var offsetX = e.pageX - document.body.scrollLeft;\n    var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n        document.documentElement.scrollTop : document.body.scrollTop);\n    var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n    var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n    var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n    var diameter = radius * 2 + 'px';\n    var x = offsetX - offset.left - radius;\n    var y = offsetY - offset.top - radius;\n    if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n        x = 0;\n        y = 0;\n        diameter = '100%';\n    }\n    element.classList.add('e-ripple');\n    var duration = this.rippleOptions.duration.toString();\n    var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n        'transition-duration: ' + duration + 'ms;';\n    var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n    element.appendChild(rippleElement);\n    window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n    rippleElement.style.transform = 'scale(1)';\n    if (element !== this.parent) {\n        EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n    }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleUpHandler(e) {\n    removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleLeaveHandler(e) {\n    removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n    var duration = eventArgs.rippleOptions.duration;\n    var target = (e.target);\n    var selector = eventArgs.rippleOptions.selector;\n    var element = selector ? closest(target, selector) : target;\n    if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n        return;\n    }\n    var rippleElements = selectAll('.e-ripple-element', element);\n    var rippleElement = rippleElements[rippleElements.length - 1];\n    if (rippleElement) {\n        rippleElement.style.opacity = '0.5';\n    }\n    if (eventArgs.parent !== element) {\n        EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n    }\n    /* tslint:disable:align */\n    setTimeout(function () {\n        if (rippleElement && rippleElement.parentNode) {\n            rippleElement.parentNode.removeChild(rippleElement);\n        }\n        if (!element.getElementsByClassName('e-ripple-element').length) {\n            element.classList.remove('e-ripple');\n        }\n        if (eventArgs.done) {\n            eventArgs.done(e);\n        }\n    }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\nexport function enableRipple(isRipple) {\n    isRippleEnabled = isRipple;\n    return isRippleEnabled;\n}\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n    function ModuleLoader(parent) {\n        this.loadedModules = [];\n        this.parent = parent;\n    }\n    ;\n    /**\n     * Inject required modules in component library\n     * @return {void}\n     * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n     * @param {Function[]} moduleList - Array of modules to be injected from sample side\n     */\n    ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n        var reqLength = requiredModules.length;\n        if (reqLength === 0) {\n            this.clean();\n            return;\n        }\n        if (this.loadedModules.length) {\n            this.clearUnusedModule(requiredModules);\n        }\n        for (var i = 0; i < reqLength; i++) {\n            var modl = requiredModules[i];\n            for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n                var module = moduleList_1[_i];\n                var modName = modl.member;\n                if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n                    var moduleObject = createInstance(module, modl.args);\n                    var memberName = this.getMemberName(modName);\n                    if (modl.isProperty) {\n                        setValue(memberName, module, this.parent);\n                    }\n                    else {\n                        setValue(memberName, moduleObject, this.parent);\n                    }\n                    var loadedModule = modl;\n                    loadedModule.member = memberName;\n                    this.loadedModules.push(loadedModule);\n                }\n            }\n        }\n    };\n    /**\n     * To remove the created object while destroying the control\n     * @return {void}\n     */\n    ModuleLoader.prototype.clean = function () {\n        for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n            var modules = _a[_i];\n            if (!modules.isProperty) {\n                getValue(modules.member, this.parent).destroy();\n            }\n        }\n        this.loadedModules = [];\n    };\n    /**\n     * Removes all unused modules\n     * @param {ModuleDeclaration[]} moduleList\n     * @returns {void}\n     */\n    ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n        var _this = this;\n        var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n        var removableModule = this.loadedModules.filter(function (module) {\n            return usedModules.indexOf(module.member) === -1;\n        });\n        for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n            var mod = removableModule_1[_i];\n            if (!mod.isProperty) {\n                getValue(mod.member, this.parent).destroy();\n            }\n            this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n            deleteObject(this.parent, mod.member);\n        }\n    };\n    /**\n     * To get the name of the member.\n     * @param {string} name\n     * @returns {string}\n     */\n    ModuleLoader.prototype.getMemberName = function (name) {\n        return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n    };\n    /**\n     * Returns boolean based on whether the module specified is loaded or not\n     * @param {string} modName\n     * @returns {boolean}\n     */\n    ModuleLoader.prototype.isModuleLoaded = function (modName) {\n        for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n            var mod = _a[_i];\n            if (mod.member === this.getMemberName(modName)) {\n                return true;\n            }\n        }\n        return false;\n    };\n    return ModuleLoader;\n}());\nexport { ModuleLoader };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID, isBlazor } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nimport { createElement, addClass, removeClass, select } from './dom';\nimport { VirtualDOM } from './virtual-dom';\nimport { getRandomId } from './template-engine';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\nexport var versionBasedStatePersistence = false;\n/**\n * To enable or disable version based statePersistence functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable versionBasedStatePersistence option.\n * @returns {void}\n */\n/* istanbul ignore next */\nexport function enableVersionBasedPersistence(status) {\n    versionBasedStatePersistence = status;\n}\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n    __extends(Component, _super);\n    /**\n     * Initialize the constructor for component base\n     */\n    function Component(options, selector) {\n        var _this = _super.call(this, options, selector) || this;\n        _this.randomId = uniqueID();\n        /**\n         * string template option for Blazor template rendering\n         * @private\n         */\n        _this.isStringTemplate = false;\n        _this.needsID = false;\n        _this.isReactHybrid = false;\n        if (isNullOrUndefined(_this.enableRtl)) {\n            _this.setProperties({ 'enableRtl': rightToLeft }, true);\n        }\n        if (isNullOrUndefined(_this.locale)) {\n            _this.setProperties({ 'locale': defaultCulture }, true);\n        }\n        _this.moduleLoader = new ModuleLoader(_this);\n        _this.localObserver = new Observer(_this);\n        // tslint:disable-next-line:no-function-constructor-with-string-args\n        onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n        if (!isUndefined(selector)) {\n            _this.appendTo();\n        }\n        return _this;\n    }\n    Component.prototype.requiredModules = function () {\n        return [];\n    };\n    ;\n    /**\n     * Destroys the sub modules while destroying the widget\n     */\n    Component.prototype.destroy = function () {\n        if (this.isDestroyed) {\n            return;\n        }\n        if (this.enablePersistence) {\n            this.setPersistData();\n        }\n        this.localObserver.destroy();\n        if (this.refreshing) {\n            return;\n        }\n        removeClass([this.element], ['e-control']);\n        this.trigger('destroyed', { cancel: false });\n        _super.prototype.destroy.call(this);\n        this.moduleLoader.clean();\n        onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n    };\n    /**\n     * Applies all the pending property changes and render the component again.\n     */\n    Component.prototype.refresh = function () {\n        this.refreshing = true;\n        this.moduleLoader.clean();\n        this.destroy();\n        this.clearChanges();\n        this.localObserver = new Observer(this);\n        this.preRender();\n        this.injectModules();\n        this.render();\n        this.refreshing = false;\n    };\n    /* istanbul ignore next */\n    Component.prototype.accessMount = function () {\n        if (this.mount && !this.isReactHybrid) {\n            this.mount();\n        }\n    };\n    /**\n     * Returns the route element of the component\n     */\n    /* istanbul ignore next */\n    Component.prototype.getRootElement = function () {\n        if (this.isReactHybrid) {\n            return this.actualElement;\n        }\n        else {\n            return this.element;\n        }\n    };\n    /**\n     * Returns the persistence data for component\n     */\n    /* istanbul ignore next */\n    //tslint:disable:no-any\n    Component.prototype.getLocalData = function () {\n        var eleId = this.getModuleName() + this.element.id;\n        if (versionBasedStatePersistence) {\n            return window.localStorage.getItem(eleId + this.ej2StatePersistenceVersion);\n        }\n        else {\n            return window.localStorage.getItem(eleId);\n        }\n    };\n    /**\n     * Appends the control within the given HTML element\n     * @param {string | HTMLElement} selector - Target element where control needs to be appended\n     */\n    Component.prototype.appendTo = function (selector) {\n        if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n            this.element = select(selector, document);\n        }\n        else if (!isNullOrUndefined(selector)) {\n            this.element = selector;\n        }\n        if (!isNullOrUndefined(this.element)) {\n            var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n            addClass([this.element], ['e-control', moduleClass]);\n            this.isProtectedOnChange = false;\n            if (this.needsID && !this.element.id) {\n                this.element.id = this.getUniqueID(this.getModuleName());\n            }\n            if (this.enablePersistence) {\n                this.mergePersistData();\n                window.addEventListener('unload', this.setPersistData.bind(this));\n            }\n            var inst = getValue('ej2_instances', this.element);\n            if (!inst || inst.indexOf(this) === -1) {\n                _super.prototype.addInstance.call(this);\n            }\n            this.preRender();\n            this.injectModules();\n            this.render();\n            if (!this.mount) {\n                this.trigger('created');\n            }\n            else {\n                this.accessMount();\n            }\n        }\n    };\n    /**\n     * It is used to process the post rendering functionalities to a component.\n     */\n    Component.prototype.renderComplete = function (wrapperElement) {\n        if (isBlazor()) {\n            var sfBlazor = 'sfBlazor';\n            // tslint:disable-next-line:no-any\n            window[sfBlazor].renderComplete(this.element, wrapperElement);\n        }\n        this.isRendered = true;\n    };\n    /**\n     * When invoked, applies the pending property changes immediately to the component.\n     */\n    Component.prototype.dataBind = function () {\n        this.injectModules();\n        _super.prototype.dataBind.call(this);\n    };\n    ;\n    /**\n     * Attach one or more  event handler to the current component context.\n     * It is used for internal handling event internally within the component only.\n     * @param {BoundOptions[]| string} event - It is  optional type either to  Set the collection of event list or the eventName.\n     * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n     * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n     * @return {void}\n     * @private\n     */\n    Component.prototype.on = function (event, handler, context) {\n        if (typeof event === 'string') {\n            this.localObserver.on(event, handler, context);\n        }\n        else {\n            for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n                var arg = event_1[_i];\n                this.localObserver.on(arg.event, arg.handler, arg.context);\n            }\n        }\n    };\n    /**\n     * To remove one or more event handler that has been attached with the on() method.\n     * @param {BoundOptions[]| string} event - It is  optional type either to  Set the collection of event list or the eventName.\n     * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n     * @return {void}\n     * @private\n     */\n    Component.prototype.off = function (event, handler) {\n        if (typeof event === 'string') {\n            this.localObserver.off(event, handler);\n        }\n        else {\n            for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n                var arg = event_2[_i];\n                this.localObserver.off(arg.event, arg.handler);\n            }\n        }\n    };\n    /**\n     * To notify the handlers in the specified event.\n     * @param {string} property - Specifies the event to be notify.\n     * @param {Object} argument - Additional parameters to pass while calling the handler.\n     * @return {void}\n     * @private\n     */\n    Component.prototype.notify = function (property, argument) {\n        if (this.isDestroyed !== true) {\n            this.localObserver.notify(property, argument);\n        }\n    };\n    /**\n     * Get injected modules\n     * @private\n     */\n    Component.prototype.getInjectedModules = function () {\n        return this.injectedModules;\n    };\n    ;\n    /**\n     * Dynamically injects the required modules to the component.\n     */\n    Component.Inject = function () {\n        var moduleList = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            moduleList[_i] = arguments[_i];\n        }\n        if (!this.prototype.injectedModules) {\n            this.prototype.injectedModules = [];\n        }\n        for (var i = 0; i < moduleList.length; i++) {\n            if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {\n                this.prototype.injectedModules.push(moduleList[i]);\n            }\n        }\n    };\n    /**\n     * This is a instance method to create an element.\n     * @private\n     */\n    /* istanbul ignore next */\n    //tslint:disable:no-any\n    Component.prototype.createElement = function (tagName, prop, isVDOM) {\n        if (isVDOM && this.isReactHybrid) {\n            if (prop) {\n                prop = {};\n            }\n            prop['data-id'] = getRandomId();\n            return VirtualDOM.createElement(tagName, prop);\n        }\n        else {\n            return createElement(tagName, prop);\n        }\n    };\n    /**\n     *\n     * @param handler - handler to be triggered after state Updated.\n     * @param argument - Arguments to be passed to caller.\n     * @private\n     */\n    /* istanbul ignore next */\n    //tslint:disable:no-any\n    Component.prototype.triggerStateChange = function (handler, argument) {\n        if (this.isReactHybrid) {\n            //tslint:disable:no-any\n            this.setState();\n            this.currentContext = { calls: handler, args: argument };\n        }\n    };\n    // tslint: enable: no-any\n    Component.prototype.injectModules = function () {\n        if (this.injectedModules && this.injectedModules.length) {\n            this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n        }\n    };\n    Component.prototype.detectFunction = function (args) {\n        var prop = Object.keys(args);\n        if (prop.length) {\n            this[prop[0]] = args[prop[0]];\n        }\n    };\n    Component.prototype.mergePersistData = function () {\n        var data;\n        if (versionBasedStatePersistence) {\n            data = window.localStorage.getItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion);\n        }\n        else {\n            data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n        }\n        if (!(isNullOrUndefined(data) || (data === ''))) {\n            this.setProperties(JSON.parse(data), true);\n        }\n    };\n    Component.prototype.setPersistData = function () {\n        if (!this.isDestroyed) {\n            if (versionBasedStatePersistence) {\n                window.localStorage.setItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion, this.getPersistData());\n            }\n            else {\n                window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n            }\n        }\n    };\n    //tslint:disable-next-line\n    Component.prototype.renderReactTemplates = function () {\n        //No Code\n    };\n    //tslint:disable-next-line\n    Component.prototype.clearTemplate = function (templateName, index) {\n        //No Code\n    };\n    Component.prototype.getUniqueID = function (definedName) {\n        if (this.isHistoryChanged()) {\n            componentCount = 0;\n        }\n        lastPageID = this.pageID(location.href);\n        lastHistoryLen = history.length;\n        return definedName + '_' + lastPageID + '_' + componentCount++;\n    };\n    Component.prototype.pageID = function (url) {\n        var hash = 0;\n        if (url.length === 0) {\n            return hash;\n        }\n        for (var i = 0; i < url.length; i++) {\n            var char = url.charCodeAt(i);\n            hash = ((hash << 5) - hash) + char;\n            hash = hash & hash; // Convert to 32bit integer\n        }\n        return Math.abs(hash);\n    };\n    Component.prototype.isHistoryChanged = function () {\n        return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n    };\n    Component.prototype.addOnPersist = function (options) {\n        var _this = this;\n        var persistObj = {};\n        for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n            var key = options_1[_i];\n            var objValue = void 0;\n            objValue = getValue(key, this);\n            if (!isUndefined(objValue)) {\n                setValue(key, this.getActualProperties(objValue), persistObj);\n            }\n        }\n        return JSON.stringify(persistObj, function (key, value) {\n            return _this.getActualProperties(value);\n        });\n    };\n    Component.prototype.getActualProperties = function (obj) {\n        if (obj instanceof ChildProperty) {\n            return getValue('properties', obj);\n        }\n        else {\n            return obj;\n        }\n    };\n    Component.prototype.ignoreOnPersist = function (options) {\n        return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n    };\n    Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n        var newObj = {};\n        var _loop_1 = function (key) {\n            if (ignoreList.indexOf(key) === -1) {\n                // tslint:disable-next-line:no-any\n                var value = obj[key];\n                if (typeof value === 'object' && !(value instanceof Array)) {\n                    var newList = ignoreList.filter(function (str) {\n                        return new RegExp(key + '.').test(str);\n                    }).map(function (str) {\n                        return str.replace(key + '.', '');\n                    });\n                    newObj[key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n                }\n                else {\n                    newObj[key] = value;\n                }\n            }\n        };\n        var this_1 = this;\n        for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n            var key = _a[_i];\n            _loop_1(key);\n        }\n        return newObj;\n    };\n    __decorate([\n        Property(false)\n    ], Component.prototype, \"enablePersistence\", void 0);\n    __decorate([\n        Property()\n    ], Component.prototype, \"enableRtl\", void 0);\n    __decorate([\n        Property()\n    ], Component.prototype, \"locale\", void 0);\n    Component = __decorate([\n        NotifyPropertyChanges\n    ], Component);\n    return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection \n/* istanbul ignore next */\n(function () {\n    if (typeof window !== 'undefined') {\n        window.addEventListener('popstate', \n        /* istanbul ignore next */\n        function () {\n            componentCount = 0;\n        });\n    }\n})();\n","import { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n    function ChildProperty(parent, propName, defaultValue, isArray) {\n        this.isComplexArraySetter = false;\n        this.properties = {};\n        this.changedProperties = {};\n        this.childChangedProperties = {};\n        this.oldProperties = {};\n        // tslint:disable-next-line:no-empty\n        this.finalUpdate = function () { };\n        this.callChildDataBind = getValue('callChildDataBind', Base);\n        this.parentObj = parent;\n        this.controlParent = this.parentObj.controlParent || this.parentObj;\n        this.propName = propName;\n        this.isParentArray = isArray;\n        this.setProperties(defaultValue, true);\n    }\n    /**\n     * Updates the property changes\n     * @param {boolean} val\n     * @param {string} propName\n     * @returns {void}\n     */\n    ChildProperty.prototype.updateChange = function (val, propName) {\n        if (val === true) {\n            this.parentObj.childChangedProperties[propName] = val;\n        }\n        else {\n            delete this.parentObj.childChangedProperties[propName];\n        }\n        if (this.parentObj.updateChange) {\n            this.parentObj.updateChange(val, this.parentObj.propName);\n        }\n    };\n    /**\n     * Updates time out duration\n     */\n    ChildProperty.prototype.updateTimeOut = function () {\n        if (this.parentObj.updateTimeOut) {\n            this.parentObj.finalUpdate();\n            this.parentObj.updateTimeOut();\n        }\n        else {\n            var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n            var clearUpdate = function () {\n                clearTimeout(changeTime_1);\n            };\n            this.finalUpdate = clearUpdate;\n        }\n    };\n    /**\n     * Clears changed properties\n     */\n    ChildProperty.prototype.clearChanges = function () {\n        this.finalUpdate();\n        this.updateChange(false, this.propName);\n        this.oldProperties = {};\n        this.changedProperties = {};\n    };\n    /**\n     * Set property changes\n     * @param {Object} prop\n     * @param {boolean} muteOnChange\n     * {void}\n     */\n    ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n        if (muteOnChange === true) {\n            merge(this, prop);\n            this.updateChange(false, this.propName);\n            this.clearChanges();\n        }\n        else {\n            merge(this, prop);\n        }\n    };\n    /**\n     * Binds data\n     */\n    ChildProperty.prototype.dataBind = function () {\n        this.callChildDataBind(this.childChangedProperties, this);\n        if (this.isParentArray) {\n            var curIndex = this.parentObj[this.propName].indexOf(this);\n            if (Object.keys(this.changedProperties).length) {\n                setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n                setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n            }\n        }\n        else {\n            this.parentObj.changedProperties[this.propName] = this.changedProperties;\n            this.parentObj.oldProperties[this.propName] = this.oldProperties;\n        }\n        this.clearChanges();\n    };\n    /**\n     * Saves changes to newer values\n     * @param {string} key\n     * @param {Object} newValue\n     * @param {Object} oldValue\n     * @returns {void}\n     */\n    ChildProperty.prototype.saveChanges = function (key, newValue, oldValue, restrictServerDataBind) {\n        if (this.controlParent.isProtectedOnChange) {\n            return;\n        }\n        if (!restrictServerDataBind) {\n            this.serverDataBind(key, newValue, true);\n        }\n        this.oldProperties[key] = oldValue;\n        this.changedProperties[key] = newValue;\n        this.updateChange(true, this.propName);\n        this.finalUpdate();\n        this.updateTimeOut();\n    };\n    ChildProperty.prototype.serverDataBind = function (key, value, isSaveChanges, action) {\n        if (isBlazor() && !this.parentObj.isComplexArraySetter) {\n            // tslint:disable-next-line:no-any\n            var parent_1;\n            var newChanges = {};\n            var parentKey = isSaveChanges ? this.getParentKey(true) + '.' + key : key;\n            /* istanbul ignore else  */\n            if (parentKey.indexOf('.') !== -1) {\n                var complexKeys = parentKey.split('.');\n                parent_1 = newChanges;\n                for (var i = 0; i < complexKeys.length; i++) {\n                    var isFinal = i === complexKeys.length - 1;\n                    parent_1[complexKeys[i]] = isFinal ? value : {};\n                    parent_1 = isFinal ? parent_1 : parent_1[complexKeys[i]];\n                }\n            }\n            else {\n                newChanges[parentKey] = {};\n                parent_1 = newChanges[parentKey];\n                newChanges[parentKey][key] = value;\n            }\n            /* istanbul ignore next */\n            if (this.isParentArray) {\n                var actionProperty = 'ejsAction';\n                parent_1[actionProperty] = action ? action : 'none';\n            }\n            this.controlParent.serverDataBind(newChanges);\n        }\n    };\n    ChildProperty.prototype.getParentKey = function (isSaveChanges) {\n        // tslint:disable-next-line:no-any\n        var index = '';\n        var propName = this.propName;\n        /* istanbul ignore next */\n        if (this.isParentArray) {\n            index = this.parentObj[this.propName].indexOf(this);\n            var valueLength = this.parentObj[this.propName].length;\n            valueLength = isSaveChanges ? valueLength : (valueLength > 0 ? valueLength - 1 : 0);\n            index = index !== -1 ? '-' + index : '-' + valueLength;\n            propName = propName + index;\n        }\n        if (this.controlParent !== this.parentObj) {\n            propName = this.parentObj.getParentKey() + '.' + this.propName + index;\n        }\n        return propName;\n    };\n    return ChildProperty;\n}());\nexport { ChildProperty };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent, isBlazor } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\nvar isDraggedObject = { isDragged: false };\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n    __extends(Position, _super);\n    function Position() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(0)\n    ], Position.prototype, \"left\", void 0);\n    __decorate([\n        Property(0)\n    ], Position.prototype, \"top\", void 0);\n    return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n * <div id='drag'>Draggable</div>\n * <script>\n * var ele = document.getElementById('drag');\n * var drag:Draggable = new Draggable(ele,{\n *     clone:false,\n *     drag: function(e) {\n *      //drag handler code.\n *      },\n *     handle:'.class'\n * });\n * </script>\n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n    __extends(Draggable, _super);\n    function Draggable(element, options) {\n        var _this = _super.call(this, options, element) || this;\n        _this.dragLimit = Draggable_1.getDefaultPosition();\n        _this.borderWidth = Draggable_1.getDefaultPosition();\n        _this.padding = Draggable_1.getDefaultPosition();\n        _this.diffX = 0;\n        _this.prevLeft = 0;\n        _this.prevTop = 0;\n        _this.dragProcessStarted = false;\n        /* tslint:disable no-any */\n        _this.tapHoldTimer = 0;\n        _this.externalInitialize = false;\n        _this.diffY = 0;\n        _this.parentScrollX = 0;\n        _this.parentScrollY = 0;\n        _this.droppables = {};\n        _this.bind();\n        return _this;\n    }\n    Draggable_1 = Draggable;\n    Draggable.prototype.bind = function () {\n        this.toggleEvents();\n        if (Browser.isIE) {\n            addClass([this.element], 'e-block-touch');\n        }\n        this.droppables[this.scope] = {};\n    };\n    Draggable.getDefaultPosition = function () {\n        return extend({}, defaultPosition);\n    };\n    Draggable.prototype.toggleEvents = function (isUnWire) {\n        var ele;\n        if (!isUndefined(this.handle)) {\n            ele = select(this.handle, this.element);\n        }\n        var handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;\n        if (isUnWire) {\n            EventHandler.remove(ele || this.element, Browser.touchStartEvent, handler);\n        }\n        else {\n            EventHandler.add(ele || this.element, Browser.touchStartEvent, handler, this);\n        }\n    };\n    /* istanbul ignore next */\n    Draggable.prototype.mobileInitialize = function (evt) {\n        var _this = this;\n        var target = evt.currentTarget;\n        this.tapHoldTimer = setTimeout(function () {\n            _this.externalInitialize = true;\n            _this.removeTapholdTimer();\n            _this.initialize(evt, target);\n        }, this.tapHoldThreshold);\n        EventHandler.add(document, Browser.touchMoveEvent, this.removeTapholdTimer, this);\n        EventHandler.add(document, Browser.touchEndEvent, this.removeTapholdTimer, this);\n    };\n    /* istanbul ignore next */\n    Draggable.prototype.removeTapholdTimer = function () {\n        clearTimeout(this.tapHoldTimer);\n        EventHandler.remove(document, Browser.touchMoveEvent, this.removeTapholdTimer);\n        EventHandler.remove(document, Browser.touchEndEvent, this.removeTapholdTimer);\n    };\n    /* istanbul ignore next */\n    Draggable.prototype.getScrollableParent = function (element, axis) {\n        var scroll = { 'vertical': 'scrollHeight', 'horizontal': 'scrollWidth' };\n        var client = { 'vertical': 'clientHeight', 'horizontal': 'clientWidth' };\n        if (isNullOrUndefined(element)) {\n            return null;\n        }\n        if (element[scroll[axis]] > element[client[axis]]) {\n            if (axis === 'vertical' ? element.scrollTop > 0 : element.scrollLeft > 0) {\n                if (axis === 'vertical') {\n                    this.parentScrollY = this.parentScrollY +\n                        (this.parentScrollY === 0 ? element.scrollTop : element.scrollTop - this.parentScrollY);\n                    this.tempScrollHeight = element.scrollHeight;\n                }\n                else {\n                    this.parentScrollX = this.parentScrollX +\n                        (this.parentScrollX === 0 ? element.scrollLeft : element.scrollLeft - this.parentScrollX);\n                    this.tempScrollWidth = element.scrollWidth;\n                }\n                if (!isNullOrUndefined(element)) {\n                    return this.getScrollableParent(element.parentNode, axis);\n                }\n                else {\n                    return element;\n                }\n            }\n            else {\n                return this.getScrollableParent(element.parentNode, axis);\n            }\n        }\n        else {\n            return this.getScrollableParent(element.parentNode, axis);\n        }\n    };\n    Draggable.prototype.getScrollableValues = function () {\n        this.parentScrollX = 0;\n        this.parentScrollY = 0;\n        var isModalDialog = this.element.classList.contains('e-dialog') && this.element.classList.contains('e-dlg-modal');\n        var verticalScrollParent = this.getScrollableParent(this.element.parentNode, 'vertical');\n        var horizontalScrollParent = this.getScrollableParent(this.element.parentNode, 'horizontal');\n    };\n    Draggable.prototype.initialize = function (evt, curTarget) {\n        this.currentStateTarget = evt.target;\n        if (this.isDragStarted()) {\n            return;\n        }\n        else {\n            this.isDragStarted(true);\n            this.externalInitialize = false;\n        }\n        this.target = (evt.currentTarget || curTarget);\n        this.dragProcessStarted = false;\n        if (this.abort) {\n            /* tslint:disable no-any */\n            var abortSelectors = this.abort;\n            if (typeof abortSelectors === 'string') {\n                abortSelectors = [abortSelectors];\n            }\n            for (var i = 0; i < abortSelectors.length; i++) {\n                if (!isNullOrUndefined(closest(evt.target, abortSelectors[i]))) {\n                    /* istanbul ignore next */\n                    if (this.isDragStarted()) {\n                        this.isDragStarted(true);\n                    }\n                    return;\n                }\n            }\n        }\n        if (this.preventDefault && !isUndefined(evt.changedTouches) && evt.type !== 'touchstart') {\n            evt.preventDefault();\n        }\n        this.element.setAttribute('aria-grabbed', 'true');\n        var intCoord = this.getCoordinates(evt);\n        this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n        if (!this.clone) {\n            var pos = this.element.getBoundingClientRect();\n            this.getScrollableValues();\n            if (evt.clientX === evt.pageX) {\n                this.parentScrollX = 0;\n            }\n            if (evt.clientY === evt.pageY) {\n                this.parentScrollY = 0;\n            }\n            this.relativeXPosition = intCoord.pageX - (pos.left + this.parentScrollX);\n            this.relativeYPosition = intCoord.pageY - (pos.top + this.parentScrollY);\n        }\n        if (this.externalInitialize) {\n            this.intDragStart(evt);\n        }\n        else {\n            EventHandler.add(document, Browser.touchMoveEvent, this.intDragStart, this);\n            EventHandler.add(document, Browser.touchEndEvent, this.intDestroy, this);\n        }\n        this.toggleEvents(true);\n        if (evt.type !== 'touchstart' && this.isPreventSelect) {\n            document.body.classList.add('e-prevent-select');\n        }\n        this.externalInitialize = false;\n        EventHandler.trigger(document.documentElement, Browser.touchStartEvent, evt);\n    };\n    Draggable.prototype.intDragStart = function (evt) {\n        this.removeTapholdTimer();\n        var isChangeTouch = !isUndefined(evt.changedTouches);\n        if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n            return;\n        }\n        if (isChangeTouch) {\n            evt.preventDefault();\n        }\n        var intCordinate = this.getCoordinates(evt);\n        var pos;\n        var styleProp = getComputedStyle(this.element);\n        this.margin = {\n            left: parseInt(styleProp.marginLeft, 10),\n            top: parseInt(styleProp.marginTop, 10),\n            right: parseInt(styleProp.marginRight, 10),\n            bottom: parseInt(styleProp.marginBottom, 10),\n        };\n        var element = this.element;\n        if (this.clone && this.dragTarget) {\n            var intClosest = closest(evt.target, this.dragTarget);\n            if (!isNullOrUndefined(intClosest)) {\n                element = intClosest;\n            }\n        }\n        /* istanbul ignore next */\n        if (this.isReplaceDragEle) {\n            element = this.currentStateCheck(evt.target, element);\n        }\n        this.offset = this.calculateParentPosition(element);\n        this.position = this.getMousePosition(evt, this.isDragScroll);\n        var x = this.initialPosition.x - intCordinate.pageX;\n        var y = this.initialPosition.y - intCordinate.pageY;\n        var distance = Math.sqrt((x * x) + (y * y));\n        if ((distance >= this.distance || this.externalInitialize)) {\n            var ele = this.getHelperElement(evt);\n            if (!ele || isNullOrUndefined(ele)) {\n                return;\n            }\n            var dragTargetElement = this.helperElement = ele;\n            this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n            if (this.dragStart) {\n                var curTarget = this.getProperTargetElement(evt);\n                var args = {\n                    event: evt,\n                    element: element,\n                    target: curTarget,\n                    bindEvents: isBlazor() ? this.bindDragEvents.bind(this) : null,\n                    dragElement: dragTargetElement\n                };\n                this.trigger('dragStart', args);\n            }\n            if (this.dragArea) {\n                this.setDragArea();\n            }\n            else {\n                this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n                this.borderWidth = { top: 0, left: 0 };\n            }\n            pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n            if (this.clone && !this.enableTailMode) {\n                this.diffX = this.position.left - this.offset.left;\n                this.diffY = this.position.top - this.offset.top;\n            }\n            this.getScrollableValues();\n            // when drag element has margin-top\n            var styles = getComputedStyle(element);\n            var marginTop = parseFloat(styles.marginTop);\n            /* istanbul ignore next */\n            if (this.clone && marginTop !== 0) {\n                pos.top += marginTop;\n            }\n            var posValue = this.getProcessedPositionValue({\n                top: (pos.top - this.diffY) + 'px',\n                left: (pos.left - this.diffX) + 'px'\n            });\n            this.dragElePosition = { top: pos.top, left: pos.left };\n            setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n            EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n            EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n            if (!isBlazor()) {\n                this.bindDragEvents(dragTargetElement);\n            }\n        }\n    };\n    Draggable.prototype.bindDragEvents = function (dragTargetElement) {\n        if (isVisible(dragTargetElement)) {\n            EventHandler.add(document, Browser.touchMoveEvent, this.intDrag, this);\n            EventHandler.add(document, Browser.touchEndEvent, this.intDragStop, this);\n            this.setGlobalDroppables(false, this.element, dragTargetElement);\n        }\n        else {\n            this.toggleEvents();\n            document.body.classList.remove('e-prevent-select');\n        }\n    };\n    Draggable.prototype.elementInViewport = function (el) {\n        this.top = el.offsetTop;\n        this.left = el.offsetLeft;\n        this.width = el.offsetWidth;\n        this.height = el.offsetHeight;\n        while (el.offsetParent) {\n            el = el.offsetParent;\n            this.top += el.offsetTop;\n            this.left += el.offsetLeft;\n        }\n        return (this.top >= window.pageYOffset &&\n            this.left >= window.pageXOffset &&\n            (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n            (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n    };\n    Draggable.prototype.getProcessedPositionValue = function (value) {\n        if (this.queryPositionInfo) {\n            return this.queryPositionInfo(value);\n        }\n        return value;\n    };\n    Draggable.prototype.calculateParentPosition = function (ele) {\n        if (isNullOrUndefined(ele)) {\n            return { left: 0, top: 0 };\n        }\n        var rect = ele.getBoundingClientRect();\n        var style = getComputedStyle(ele);\n        return {\n            left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n            top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n        };\n    };\n    // tslint:disable-next-line:max-func-body-length\n    Draggable.prototype.intDrag = function (evt) {\n        if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n            return;\n        }\n        var left;\n        var top;\n        this.position = this.getMousePosition(evt, this.isDragScroll);\n        var docHeight = this.getDocumentWidthHeight('Height');\n        if (docHeight < this.position.top) {\n            this.position.top = docHeight;\n        }\n        var docWidth = this.getDocumentWidthHeight('Width');\n        if (docWidth < this.position.left) {\n            this.position.left = docWidth;\n        }\n        if (this.drag) {\n            var curTarget = this.getProperTargetElement(evt);\n            this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n        }\n        var eleObj = this.checkTargetElement(evt);\n        if (eleObj.target && eleObj.instance) {\n            /* tslint:disable no-any */\n            var flag = true;\n            if (this.hoverObject) {\n                if (this.hoverObject.instance !== eleObj.instance) {\n                    this.triggerOutFunction(evt, eleObj);\n                }\n                else {\n                    flag = false;\n                }\n            }\n            if (flag) {\n                eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n                eleObj.instance.intOver(evt, eleObj.target);\n                this.hoverObject = eleObj;\n            }\n        }\n        else if (this.hoverObject) {\n            this.triggerOutFunction(evt, eleObj);\n        }\n        var helperElement = this.droppables[this.scope].helper;\n        this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n        var tLeft = this.parentClientRect.left;\n        var tTop = this.parentClientRect.top;\n        var intCoord = this.getCoordinates(evt);\n        var pagex = intCoord.pageX;\n        var pagey = intCoord.pageY;\n        var dLeft = this.position.left - this.diffX;\n        var dTop = this.position.top - this.diffY;\n        var styles = getComputedStyle(helperElement);\n        var marginTop = parseFloat(styles.marginTop);\n        if (this.dragArea) {\n            if (this.pageX !== pagex || this.skipDistanceCheck) {\n                var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n                    + parseFloat(styles.marginRight));\n                if (this.dragLimit.left > dLeft && dLeft > 0) {\n                    left = this.dragLimit.left;\n                }\n                else if (this.dragLimit.right + window.pageXOffset < dLeft + helperWidth && dLeft > 0) {\n                    left = dLeft - (dLeft - this.dragLimit.right) + window.pageXOffset - helperWidth;\n                }\n                else {\n                    left = dLeft < 0 ? this.dragLimit.left : dLeft;\n                }\n            }\n            if (this.pageY !== pagey || this.skipDistanceCheck) {\n                var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n                    + parseFloat(styles.marginBottom));\n                if (this.dragLimit.top > dTop && dTop > 0) {\n                    top = this.dragLimit.top;\n                }\n                else if (this.dragLimit.bottom + window.pageYOffset < dTop + helperHeight && dTop > 0) {\n                    top = dTop - (dTop - this.dragLimit.bottom) + window.pageYOffset - helperHeight;\n                }\n                else {\n                    top = dTop < 0 ? this.dragLimit.top : dTop;\n                }\n            }\n        }\n        else {\n            left = dLeft;\n            top = dTop;\n        }\n        var iTop = tTop + this.borderWidth.top;\n        var iLeft = tLeft + this.borderWidth.left;\n        if (this.dragProcessStarted) {\n            if (isNullOrUndefined(top)) {\n                top = this.prevTop;\n            }\n            if (isNullOrUndefined(left)) {\n                left = this.prevLeft;\n            }\n        }\n        var draEleTop;\n        var draEleLeft;\n        if (this.dragArea) {\n            this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n            draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - iTop);\n            draEleLeft = (left - iLeft) < 0 ? this.dragElePosition.left : (left - iLeft);\n            // when drag-element has margin-top\n            /* istanbul ignore next */\n            if (marginTop > 0) {\n                if (this.clone) {\n                    draEleTop += this.element.offsetTop;\n                    if (dTop < 0) {\n                        if ((this.element.offsetTop + dTop) >= 0) {\n                            draEleTop = this.element.offsetTop + dTop;\n                        }\n                        else {\n                            draEleTop -= this.element.offsetTop;\n                        }\n                    }\n                    draEleTop = (this.dragLimit.bottom < draEleTop) ? this.dragLimit.bottom : draEleTop;\n                }\n                if ((top - iTop) < 0) {\n                    if (dTop + marginTop + (helperElement.offsetHeight - iTop) >= 0) {\n                        var tempDraEleTop = this.dragLimit.top + dTop - iTop;\n                        if ((tempDraEleTop + marginTop + iTop) < 0) {\n                            draEleTop -= marginTop + iTop;\n                        }\n                        else {\n                            draEleTop = tempDraEleTop;\n                        }\n                    }\n                    else {\n                        draEleTop -= marginTop + iTop;\n                    }\n                }\n            }\n        }\n        else {\n            draEleTop = top - iTop;\n            draEleLeft = left - iLeft;\n        }\n        var dragValue = this.getProcessedPositionValue({ top: draEleTop + 'px', left: draEleLeft + 'px' });\n        setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n        if (!this.elementInViewport(helperElement) && this.enableAutoScroll) {\n            this.helperElement.scrollIntoView();\n        }\n        this.dragProcessStarted = true;\n        this.prevLeft = left;\n        this.prevTop = top;\n        this.position.left = left;\n        this.position.top = top;\n        this.pageX = pagex;\n        this.pageY = pagey;\n    };\n    Draggable.prototype.triggerOutFunction = function (evt, eleObj) {\n        this.hoverObject.instance.intOut(evt, eleObj.target);\n        this.hoverObject.instance.dragData[this.scope] = null;\n        this.hoverObject = null;\n    };\n    Draggable.prototype.getDragPosition = function (dragValue) {\n        var temp = extend({}, dragValue);\n        if (this.axis) {\n            if (this.axis === 'x') {\n                delete temp.top;\n            }\n            else if (this.axis === 'y') {\n                delete temp.left;\n            }\n        }\n        return temp;\n    };\n    Draggable.prototype.getDocumentWidthHeight = function (str) {\n        var docBody = document.body;\n        var docEle = document.documentElement;\n        var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n        return returnValue;\n    };\n    Draggable.prototype.intDragStop = function (evt) {\n        this.dragProcessStarted = false;\n        if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n            return;\n        }\n        var type = ['touchend', 'pointerup', 'mouseup'];\n        if (type.indexOf(evt.type) !== -1) {\n            if (this.dragStop) {\n                var curTarget = this.getProperTargetElement(evt);\n                this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n            }\n            this.intDestroy(evt);\n        }\n        else {\n            this.element.setAttribute('aria-grabbed', 'false');\n        }\n        var eleObj = this.checkTargetElement(evt);\n        if (eleObj.target && eleObj.instance) {\n            eleObj.instance.dragStopCalled = true;\n            eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n            eleObj.instance.intDrop(evt, eleObj.target);\n        }\n        this.setGlobalDroppables(true);\n        document.body.classList.remove('e-prevent-select');\n    };\n    /**\n     * @private\n     */\n    Draggable.prototype.intDestroy = function (evt) {\n        this.dragProcessStarted = false;\n        this.toggleEvents();\n        document.body.classList.remove('e-prevent-select');\n        this.element.setAttribute('aria-grabbed', 'false');\n        EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n        EventHandler.remove(document, Browser.touchEndEvent, this.intDragStop);\n        EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n        EventHandler.remove(document, Browser.touchMoveEvent, this.intDrag);\n        if (this.isDragStarted()) {\n            this.isDragStarted(true);\n        }\n    };\n    // triggers when property changed\n    Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n        //No Code to handle\n    };\n    Draggable.prototype.getModuleName = function () {\n        return 'draggable';\n    };\n    Draggable.prototype.isDragStarted = function (change) {\n        if (change) {\n            isDraggedObject.isDragged = !isDraggedObject.isDragged;\n        }\n        return isDraggedObject.isDragged;\n    };\n    Draggable.prototype.setDragArea = function () {\n        var eleWidthBound;\n        var eleHeightBound;\n        var top = 0;\n        var left = 0;\n        var ele;\n        var type = typeof this.dragArea;\n        if (type === 'string') {\n            ele = select(this.dragArea);\n        }\n        else {\n            ele = this.dragArea;\n        }\n        if (ele) {\n            var elementArea = ele.getBoundingClientRect();\n            eleWidthBound = ele.scrollWidth ? ele.scrollWidth : elementArea.right - elementArea.left;\n            eleHeightBound = ele.scrollHeight ? ele.scrollHeight : elementArea.bottom - elementArea.top;\n            var keys = ['Top', 'Left', 'Bottom', 'Right'];\n            var styles = getComputedStyle(ele);\n            for (var i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                var tborder = styles['border' + key + 'Width'];\n                var tpadding = styles['padding' + key];\n                var lowerKey = key.toLowerCase();\n                this.borderWidth[lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n                this.padding[lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n            }\n            top = elementArea.top;\n            left = elementArea.left;\n            this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n            this.dragLimit.top = ele.offsetTop + this.borderWidth.top + this.padding.top;\n            this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n            this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n        }\n    };\n    Draggable.prototype.getProperTargetElement = function (evt) {\n        var intCoord = this.getCoordinates(evt);\n        var ele;\n        var prevStyle = this.helperElement.style.pointerEvents || '';\n        if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1) {\n            this.helperElement.style.pointerEvents = 'none';\n            ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n            this.helperElement.style.pointerEvents = prevStyle;\n        }\n        else {\n            ele = evt.target;\n        }\n        return ele;\n    };\n    /* istanbul ignore next */\n    Draggable.prototype.currentStateCheck = function (ele, oldEle) {\n        var elem;\n        if (!isNullOrUndefined(this.currentStateTarget) && this.currentStateTarget !== ele) {\n            elem = this.currentStateTarget;\n        }\n        else {\n            elem = !isNullOrUndefined(oldEle) ? oldEle : ele;\n        }\n        return elem;\n    };\n    Draggable.prototype.getMousePosition = function (evt, isdragscroll) {\n        /* tslint:disable no-any */\n        var dragEle = evt.srcElement !== undefined ? evt.srcElement : evt.target;\n        var intCoord = this.getCoordinates(evt);\n        var pageX;\n        var pageY;\n        var isOffsetParent = isNullOrUndefined(dragEle.offsetParent);\n        /* istanbul ignore next */\n        if (isdragscroll) {\n            pageX = this.clone ? intCoord.pageX :\n                (intCoord.pageX + (isOffsetParent ? 0 : dragEle.offsetParent.scrollLeft)) - this.relativeXPosition;\n            pageY = this.clone ? intCoord.pageY :\n                (intCoord.pageY + (isOffsetParent ? 0 : dragEle.offsetParent.scrollTop)) - this.relativeYPosition;\n        }\n        else {\n            pageX = this.clone ? intCoord.pageX : (intCoord.pageX + window.pageXOffset) - this.relativeXPosition;\n            pageY = this.clone ? intCoord.pageY : (intCoord.pageY + window.pageYOffset) - this.relativeYPosition;\n        }\n        if (!this.clone) {\n            this.getScrollableValues();\n            pageY -= this.tempScrollHeight ? this.parentScrollY : 0;\n            pageX -= this.tempScrollWidth ? this.parentScrollY : 0;\n        }\n        return {\n            left: pageX - (this.margin.left + this.cursorAt.left),\n            top: pageY - (this.margin.top + this.cursorAt.top)\n        };\n    };\n    Draggable.prototype.getCoordinates = function (evt) {\n        if (evt.type.indexOf('touch') > -1) {\n            return evt.changedTouches[0];\n        }\n        return evt;\n    };\n    Draggable.prototype.getHelperElement = function (evt) {\n        var element;\n        if (this.clone) {\n            if (this.helper) {\n                element = this.helper({ sender: evt, element: this.target });\n            }\n            else {\n                element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n                document.body.appendChild(element);\n            }\n        }\n        else {\n            element = this.element;\n        }\n        return element;\n    };\n    Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n        this.droppables[this.scope] = reset ? null : {\n            draggable: drag,\n            helper: helper,\n            draggedElement: this.element\n        };\n    };\n    Draggable.prototype.checkTargetElement = function (evt) {\n        var target = this.getProperTargetElement(evt);\n        var dropIns = this.getDropInstance(target);\n        if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n            var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n            if (parent_1) {\n                dropIns = this.getDropInstance(parent_1);\n            }\n        }\n        return { target: target, instance: dropIns };\n    };\n    Draggable.prototype.getDropInstance = function (ele) {\n        var name = 'getModuleName';\n        var drop;\n        var eleInst = ele && ele.ej2_instances;\n        if (eleInst) {\n            for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n                var inst = eleInst_1[_i];\n                if (inst[name]() === 'droppable') {\n                    drop = inst;\n                    break;\n                }\n            }\n        }\n        return drop;\n    };\n    Draggable.prototype.destroy = function () {\n        this.toggleEvents(true);\n        _super.prototype.destroy.call(this);\n    };\n    var Draggable_1;\n    __decorate([\n        Complex({}, Position)\n    ], Draggable.prototype, \"cursorAt\", void 0);\n    __decorate([\n        Property(true)\n    ], Draggable.prototype, \"clone\", void 0);\n    __decorate([\n        Property()\n    ], Draggable.prototype, \"dragArea\", void 0);\n    __decorate([\n        Property()\n    ], Draggable.prototype, \"isDragScroll\", void 0);\n    __decorate([\n        Property()\n    ], Draggable.prototype, \"isReplaceDragEle\", void 0);\n    __decorate([\n        Property(true)\n    ], Draggable.prototype, \"isPreventSelect\", void 0);\n    __decorate([\n        Event()\n    ], Draggable.prototype, \"drag\", void 0);\n    __decorate([\n        Event()\n    ], Draggable.prototype, \"dragStart\", void 0);\n    __decorate([\n        Event()\n    ], Draggable.prototype, \"dragStop\", void 0);\n    __decorate([\n        Property(1)\n    ], Draggable.prototype, \"distance\", void 0);\n    __decorate([\n        Property()\n    ], Draggable.prototype, \"handle\", void 0);\n    __decorate([\n        Property()\n    ], Draggable.prototype, \"abort\", void 0);\n    __decorate([\n        Property()\n    ], Draggable.prototype, \"helper\", void 0);\n    __decorate([\n        Property('default')\n    ], Draggable.prototype, \"scope\", void 0);\n    __decorate([\n        Property('')\n    ], Draggable.prototype, \"dragTarget\", void 0);\n    __decorate([\n        Property()\n    ], Draggable.prototype, \"axis\", void 0);\n    __decorate([\n        Property()\n    ], Draggable.prototype, \"queryPositionInfo\", void 0);\n    __decorate([\n        Property(false)\n    ], Draggable.prototype, \"enableTailMode\", void 0);\n    __decorate([\n        Property(false)\n    ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n    __decorate([\n        Property(true)\n    ], Draggable.prototype, \"preventDefault\", void 0);\n    __decorate([\n        Property(false)\n    ], Draggable.prototype, \"enableAutoScroll\", void 0);\n    __decorate([\n        Property(false)\n    ], Draggable.prototype, \"enableTapHold\", void 0);\n    __decorate([\n        Property(750)\n    ], Draggable.prototype, \"tapHoldThreshold\", void 0);\n    Draggable = Draggable_1 = __decorate([\n        NotifyPropertyChanges\n    ], Draggable);\n    return Draggable;\n}(Base));\nexport { Draggable };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n * <div id='drop'>Droppable</div>\n * <script>\n * let ele:HTMLElement = document.getElementById('drop');\n * var drag:Droppable = new Droppable(ele,{\n *     accept:'.drop',\n *     drop: function(e) {\n *      //drop handler code.\n *     }\n * });\n * </script>\n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n    __extends(Droppable, _super);\n    function Droppable(element, options) {\n        var _this = _super.call(this, options, element) || this;\n        _this.mouseOver = false;\n        _this.dragData = {};\n        _this.dragStopCalled = false;\n        _this.bind();\n        return _this;\n    }\n    Droppable.prototype.bind = function () {\n        this.wireEvents();\n    };\n    Droppable.prototype.wireEvents = function () {\n        EventHandler.add(this.element, Browser.touchEndEvent, this.intDrop, this);\n    };\n    // triggers when property changed\n    Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n        //No Code to handle\n    };\n    Droppable.prototype.getModuleName = function () {\n        return 'droppable';\n    };\n    Droppable.prototype.intOver = function (event, element) {\n        if (!this.mouseOver) {\n            var drag = this.dragData[this.scope];\n            this.trigger('over', { event: event, target: element, dragData: drag });\n            this.mouseOver = true;\n        }\n    };\n    Droppable.prototype.intOut = function (event, element) {\n        if (this.mouseOver) {\n            this.trigger('out', { evt: event, target: element });\n            this.mouseOver = false;\n        }\n    };\n    Droppable.prototype.intDrop = function (evt, element) {\n        if (!this.dragStopCalled) {\n            return;\n        }\n        else {\n            this.dragStopCalled = false;\n        }\n        var accept = true;\n        var drag = this.dragData[this.scope];\n        var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n        var area;\n        if (isDrag) {\n            area = this.isDropArea(evt, drag.helper, element);\n            if (this.accept) {\n                accept = matches(drag.helper, this.accept);\n            }\n        }\n        if (isDrag && this.drop && area.canDrop && accept) {\n            this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n        }\n        this.mouseOver = false;\n    };\n    Droppable.prototype.isDropArea = function (evt, helper, element) {\n        var area = { canDrop: true, target: element || evt.target };\n        var isTouch = evt.type === 'touchend';\n        if (isTouch || area.target === helper) {\n            helper.style.display = 'none';\n            var coord = isTouch ? (evt.changedTouches[0]) : evt;\n            var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n            area.canDrop = false;\n            area.canDrop = compareElementParent(ele, this.element);\n            if (area.canDrop) {\n                area.target = ele;\n            }\n            helper.style.display = '';\n        }\n        return area;\n    };\n    Droppable.prototype.destroy = function () {\n        EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n        _super.prototype.destroy.call(this);\n    };\n    __decorate([\n        Property()\n    ], Droppable.prototype, \"accept\", void 0);\n    __decorate([\n        Property('default')\n    ], Droppable.prototype, \"scope\", void 0);\n    __decorate([\n        Event()\n    ], Droppable.prototype, \"drop\", void 0);\n    __decorate([\n        Event()\n    ], Droppable.prototype, \"over\", void 0);\n    __decorate([\n        Event()\n    ], Droppable.prototype, \"out\", void 0);\n    Droppable = __decorate([\n        NotifyPropertyChanges\n    ], Droppable);\n    return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n    'backspace': 8,\n    'tab': 9,\n    'enter': 13,\n    'shift': 16,\n    'control': 17,\n    'alt': 18,\n    'pause': 19,\n    'capslock': 20,\n    'space': 32,\n    'escape': 27,\n    'pageup': 33,\n    'pagedown': 34,\n    'end': 35,\n    'home': 36,\n    'leftarrow': 37,\n    'uparrow': 38,\n    'rightarrow': 39,\n    'downarrow': 40,\n    'insert': 45,\n    'delete': 46,\n    'f1': 112,\n    'f2': 113,\n    'f3': 114,\n    'f4': 115,\n    'f5': 116,\n    'f6': 117,\n    'f7': 118,\n    'f8': 119,\n    'f9': 120,\n    'f10': 121,\n    'f11': 122,\n    'f12': 123,\n    'semicolon': 186,\n    'plus': 187,\n    'comma': 188,\n    'minus': 189,\n    'dot': 190,\n    'forwardslash': 191,\n    'graveaccent': 192,\n    'openbracket': 219,\n    'backslash': 220,\n    'closebracket': 221,\n    'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n * <div id='testEle'>  </div>;\n * <script>\n *   let node: HTMLElement = document.querySelector('#testEle');\n *   let kbInstance = new KeyboardEvents({\n *       element: node,\n *       keyConfigs:{ selectAll : 'ctrl+a' },\n *       keyAction: function (e:KeyboardEvent, action:string) {\n *           // handler function code\n *       }\n *   });\n * </script>\n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n    __extends(KeyboardEvents, _super);\n    /**\n     * Initializes the KeyboardEvents\n     * @param {HTMLElement} element\n     * @param {KeyboardEventsModel} options\n     */\n    function KeyboardEvents(element, options) {\n        var _this = _super.call(this, options, element) || this;\n        /**\n         * To handle a key press event returns null\n         */\n        _this.keyPressHandler = function (e) {\n            var isAltKey = e.altKey;\n            var isCtrlKey = e.ctrlKey;\n            var isShiftKey = e.shiftKey;\n            var curkeyCode = e.which;\n            var keys = Object.keys(_this.keyConfigs);\n            for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n                var key = keys_1[_i];\n                var configCollection = _this.keyConfigs[key].split(',');\n                for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n                    var rconfig = configCollection_1[_a];\n                    var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n                    if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n                        isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n                        e.action = key;\n                        if (_this.keyAction) {\n                            _this.keyAction(e);\n                        }\n                    }\n                }\n            }\n        };\n        _this.bind();\n        return _this;\n    }\n    KeyboardEvents_1 = KeyboardEvents;\n    /**\n     * Unwire bound events and destroy the instance.\n     * @return {void}\n     */\n    KeyboardEvents.prototype.destroy = function () {\n        this.unwireEvents();\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * Function can be used to specify certain action if a property is changed\n     * @param newProp\n     * @param oldProp\n     * @returns {void}\n     * @private\n     */\n    KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n        // No code are needed\n    };\n    ;\n    KeyboardEvents.prototype.bind = function () {\n        this.wireEvents();\n    };\n    /**\n     * To get the module name, returns 'keyboard'.\n     * @private\n     */\n    KeyboardEvents.prototype.getModuleName = function () {\n        return 'keyboard';\n    };\n    /**\n     * Wiring event handlers to events\n     */\n    KeyboardEvents.prototype.wireEvents = function () {\n        this.element.addEventListener(this.eventName, this.keyPressHandler);\n    };\n    /**\n     * Unwiring event handlers to events\n     */\n    KeyboardEvents.prototype.unwireEvents = function () {\n        this.element.removeEventListener(this.eventName, this.keyPressHandler);\n    };\n    /**\n     * To get the key configuration data\n     * @param {string} config - configuration data\n     * returns {KeyData}\n     */\n    KeyboardEvents.getKeyConfigData = function (config) {\n        if (config in this.configCache) {\n            return this.configCache[config];\n        }\n        var keys = config.toLowerCase().split('+');\n        var keyData = {\n            altKey: (keys.indexOf('alt') !== -1 ? true : false),\n            ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n            shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n            keyCode: null\n        };\n        if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n            keyData.keyCode = Number(keys[keys.length - 1]);\n        }\n        else {\n            keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n        }\n        KeyboardEvents_1.configCache[config] = keyData;\n        return keyData;\n    };\n    // Return the keycode value as string \n    KeyboardEvents.getKeyCode = function (keyVal) {\n        return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n    };\n    var KeyboardEvents_1;\n    KeyboardEvents.configCache = {};\n    __decorate([\n        Property({})\n    ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n    __decorate([\n        Property('keyup')\n    ], KeyboardEvents.prototype, \"eventName\", void 0);\n    __decorate([\n        Event()\n    ], KeyboardEvents.prototype, \"keyAction\", void 0);\n    KeyboardEvents = KeyboardEvents_1 = __decorate([\n        NotifyPropertyChanges\n    ], KeyboardEvents);\n    return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { extend, isNullOrUndefined } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n *    'fr-BE': {\n *       'button': {\n *            'check': 'vérifié'\n *        }\n *    }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n *    check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n    /**\n     * Constructor\n     */\n    function L10n(controlName, localeStrings, locale) {\n        this.controlName = controlName;\n        this.localeStrings = localeStrings;\n        this.setLocale(locale || defaultCulture);\n    }\n    /**\n     * Sets the locale text\n     * @param {string} locale\n     * @returns {void}\n     */\n    L10n.prototype.setLocale = function (locale) {\n        var intLocale = this.intGetControlConstant(L10n.locale, locale);\n        this.currentLocale = intLocale || this.localeStrings;\n    };\n    /**\n     * Sets the global locale for all components.\n     * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n     */\n    L10n.load = function (localeObject) {\n        this.locale = extend(this.locale, localeObject, {}, true);\n    };\n    /**\n     * Returns current locale text for the property based on the culture name and control name.\n     * @param {string} propertyName - specifies the property for which localize text to be returned.\n     * @return string\n     */\n    L10n.prototype.getConstant = function (prop) {\n        // Removed conditional operator because this method does not return correct value when passing 0 as value in localization\n        if (!isNullOrUndefined(this.currentLocale[prop])) {\n            return this.currentLocale[prop];\n        }\n        else {\n            return this.localeStrings[prop] || '';\n        }\n    };\n    /**\n     * Returns the control constant object for current object and the locale specified.\n     * @param {Object} curObject\n     * @param {string} locale\n     * @returns {Object}\n     */\n    L10n.prototype.intGetControlConstant = function (curObject, locale) {\n        if ((curObject)[locale]) {\n            return (curObject)[locale][this.controlName];\n        }\n        return null;\n    };\n    L10n.locale = {};\n    return L10n;\n}());\nexport { L10n };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n    __extends(SwipeSettings, _super);\n    function SwipeSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(50)\n    ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n    return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n *    let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n *    element: node,\n *    tap: function (e) {\n *        // tap handler function code\n *    }\n *    tapHold: function (e) {\n *        // tap hold handler function code\n *    }\n *    scroll: function (e) {\n *        // scroll handler function code\n *    }\n *    swipe: function (e) {\n *        // swipe handler function code\n *    }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n    __extends(Touch, _super);\n    /* End-Properties */\n    function Touch(element, options) {\n        var _this = _super.call(this, options, element) || this;\n        _this.touchAction = true;\n        _this.tapCount = 0;\n        _this.startEvent = function (evt) {\n            if (_this.touchAction === true) {\n                var point = _this.updateChangeTouches(evt);\n                if (evt.changedTouches !== undefined) {\n                    _this.touchAction = false;\n                }\n                _this.isTouchMoved = false;\n                _this.movedDirection = '';\n                _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n                _this.startEventData = point;\n                _this.hScrollLocked = _this.vScrollLocked = false;\n                _this.tStampStart = Date.now();\n                _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n                EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n                EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n                EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n            }\n        };\n        _this.moveEvent = function (evt) {\n            var point = _this.updateChangeTouches(evt);\n            _this.movedPoint = point;\n            _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n            var eScrollArgs = {};\n            if (_this.isTouchMoved) {\n                clearTimeout(_this.timeOutTapHold);\n                _this.calcScrollPoints(evt);\n                var scrollArg = {\n                    startEvents: _this.startEventData,\n                    originalEvent: evt, startX: _this.startPoint.clientX,\n                    startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n                    distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n                    velocity: _this.getVelocity(point)\n                };\n                eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n                _this.trigger('scroll', eScrollArgs);\n                _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n            }\n        };\n        _this.cancelEvent = function (evt) {\n            clearTimeout(_this.timeOutTapHold);\n            clearTimeout(_this.timeOutTap);\n            _this.tapCount = 0;\n            _this.swipeFn(evt);\n            EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n        };\n        _this.endEvent = function (evt) {\n            _this.swipeFn(evt);\n            if (!_this.isTouchMoved) {\n                if (typeof _this.tap === 'function') {\n                    _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n                    _this.timeOutTap = setTimeout(function () {\n                        _this.tapCount = 0;\n                    }, _this.tapThreshold);\n                }\n            }\n            _this.modeclear();\n        };\n        _this.swipeFn = function (evt) {\n            clearTimeout(_this.timeOutTapHold);\n            clearTimeout(_this.timeOutTap);\n            var point = _this.updateChangeTouches(evt);\n            var diffX = point.clientX - _this.startPoint.clientX;\n            var diffY = point.clientY - _this.startPoint.clientY;\n            diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n            diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n            _this.isTouchMoved = diffX > 1 || diffY > 1;\n            // tslint:disable-next-line:no-any\n            var isFirefox = (/Mozilla|Firefox/).test(Browser.userAgent);\n            if (isFirefox && point.clientX === 0 && point.clientY === 0 && evt.type === 'mouseup') {\n                _this.isTouchMoved = false;\n            }\n            _this.endPoint = point;\n            _this.calcPoints(evt);\n            var swipeArgs = {\n                originalEvent: evt,\n                startEvents: _this.startEventData,\n                startX: _this.startPoint.clientX,\n                startY: _this.startPoint.clientY,\n                distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n                velocity: _this.getVelocity(point)\n            };\n            if (_this.isTouchMoved) {\n                var eSwipeArgs = void 0;\n                var tDistance = _this.swipeSettings.swipeThresholdDistance;\n                eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n                var canTrigger = false;\n                var ele = _this.element;\n                var scrollBool = _this.isScrollable(ele);\n                var moved = swipeRegex.test(_this.movedDirection);\n                if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n                    if (!scrollBool) {\n                        canTrigger = true;\n                    }\n                    else {\n                        canTrigger = _this.checkSwipe(ele, moved);\n                    }\n                }\n                if (canTrigger) {\n                    _this.trigger('swipe', eSwipeArgs);\n                }\n            }\n            _this.modeclear();\n        };\n        _this.modeclear = function () {\n            _this.modeClear = setTimeout(function () {\n                _this.touchAction = true;\n            }, (typeof _this.tap !== 'function' ? 0 : 20));\n            _this.lastTapTime = new Date().getTime();\n            EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n            EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n            EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n        };\n        _this.bind();\n        return _this;\n    }\n    // triggers when property changed \n    /**\n     * @private\n     * @param newProp\n     * @param oldProp\n     */\n    Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n        //No Code to handle\n    };\n    Touch.prototype.bind = function () {\n        this.wireEvents();\n        if (Browser.isIE) {\n            this.element.classList.add('e-block-touch');\n        }\n    };\n    /**\n     * To destroy the touch instance.\n     * @return {void}\n     */\n    Touch.prototype.destroy = function () {\n        this.unwireEvents();\n        _super.prototype.destroy.call(this);\n    };\n    // Need to changes the event binding once we updated the event handler.\n    Touch.prototype.wireEvents = function () {\n        EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n    };\n    Touch.prototype.unwireEvents = function () {\n        EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n    };\n    /**\n     * Returns module name as touch\n     * @returns {string}\n     * @private\n     */\n    Touch.prototype.getModuleName = function () {\n        return 'touch';\n    };\n    /**\n     * Returns if the HTML element is Scrollable.\n     * @param {HTMLElement} element - HTML Element to check if Scrollable.\n     * @returns {boolean}\n     */\n    Touch.prototype.isScrollable = function (element) {\n        var eleStyle = getComputedStyle(element);\n        var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n        if ((/(auto|scroll)/).test(style)) {\n            return true;\n        }\n        return false;\n    };\n    Touch.prototype.tapHoldEvent = function (evt) {\n        this.tapCount = 0;\n        this.touchAction = true;\n        var eTapArgs;\n        EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n        EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n        eTapArgs = { originalEvent: evt };\n        this.trigger('tapHold', eTapArgs);\n        EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n    };\n    Touch.prototype.calcPoints = function (evt) {\n        var point = this.updateChangeTouches(evt);\n        this.defaultArgs = { originalEvent: evt };\n        this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n        this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n        if (this.distanceX > this.distanceY) {\n            this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n        }\n        else {\n            this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n        }\n    };\n    Touch.prototype.calcScrollPoints = function (evt) {\n        var point = this.updateChangeTouches(evt);\n        this.defaultArgs = { originalEvent: evt };\n        this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n        this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n        if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n            this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n            this.hScrollLocked = true;\n        }\n        else {\n            this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n            this.vScrollLocked = true;\n        }\n    };\n    Touch.prototype.getVelocity = function (pnt) {\n        var newX = pnt.clientX;\n        var newY = pnt.clientY;\n        var newT = Date.now();\n        var xDist = newX - this.startPoint.clientX;\n        var yDist = newY - this.startPoint.clientX;\n        var interval = newT - this.tStampStart;\n        return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n    };\n    // tslint:disable-next-line:no-any\n    Touch.prototype.checkSwipe = function (ele, flag) {\n        var keys = ['scroll', 'offset'];\n        var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n        if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n            return true;\n        }\n        return (ele[keys[0] + temp[1]] === 0) ||\n            (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n    };\n    Touch.prototype.updateChangeTouches = function (evt) {\n        // tslint:disable-next-line:max-line-length\n        var point = evt.changedTouches && evt.changedTouches.length !== 0 ? evt.changedTouches[0] : evt;\n        return point;\n    };\n    __decorate([\n        Event()\n    ], Touch.prototype, \"tap\", void 0);\n    __decorate([\n        Event()\n    ], Touch.prototype, \"tapHold\", void 0);\n    __decorate([\n        Event()\n    ], Touch.prototype, \"swipe\", void 0);\n    __decorate([\n        Event()\n    ], Touch.prototype, \"scroll\", void 0);\n    __decorate([\n        Property(350)\n    ], Touch.prototype, \"tapThreshold\", void 0);\n    __decorate([\n        Property(750)\n    ], Touch.prototype, \"tapHoldThreshold\", void 0);\n    __decorate([\n        Complex({}, SwipeSettings)\n    ], Touch.prototype, \"swipeSettings\", void 0);\n    Touch = __decorate([\n        NotifyPropertyChanges\n    ], Touch);\n    return Touch;\n}(Base));\nexport { Touch };\n","/**\n * SanitizeHtmlHelper for sanitize the value.\n */\nimport { detach } from './dom';\nvar removeTags = [\n    'script',\n    'style',\n    'iframe[src]',\n    'link[href*=\"javascript:\"]',\n    'object[type=\"text/x-scriptlet\"]',\n    'object[data^=\"data:text/html;base64\"]',\n    'img[src^=\"data:text/html;base64\"]',\n    '[src^=\"javascript:\"]',\n    '[dynsrc^=\"javascript:\"]',\n    '[lowsrc^=\"javascript:\"]',\n    '[type^=\"application/x-shockwave-flash\"]'\n];\nvar removeAttrs = [\n    { attribute: 'href', selector: '[href*=\"javascript:\"]' },\n    { attribute: 'background', selector: '[background^=\"javascript:\"]' },\n    { attribute: 'style', selector: '[style*=\"javascript:\"]' },\n    { attribute: 'style', selector: '[style*=\"expression(\"]' },\n    { attribute: 'href', selector: 'a[href^=\"data:text/html;base64\"]' }\n];\nvar jsEvents = ['onchange',\n    'onclick',\n    'onmouseover',\n    'onmouseout',\n    'onkeydown',\n    'onload',\n    'onerror',\n    'onblur',\n    'onfocus',\n    'onbeforeload',\n    'onbeforeunload',\n    'onkeyup',\n    'onsubmit',\n    'onafterprint',\n    'onbeforeonload',\n    'onbeforeprint',\n    'onblur',\n    'oncanplay',\n    'oncanplaythrough',\n    'onchange',\n    'onclick',\n    'oncontextmenu',\n    'ondblclick',\n    'ondrag',\n    'ondragend',\n    'ondragenter',\n    'ondragleave',\n    'ondragover',\n    'ondragstart',\n    'ondrop',\n    'ondurationchange',\n    'onemptied',\n    'onended',\n    'onerror',\n    'onerror',\n    'onfocus',\n    'onformchange',\n    'onforminput',\n    'onhaschange',\n    'oninput',\n    'oninvalid',\n    'onkeydown',\n    'onkeypress',\n    'onkeyup',\n    'onload',\n    'onloadeddata',\n    'onloadedmetadata',\n    'onloadstart',\n    'onmessage',\n    'onmousedown',\n    'onmousemove',\n    'onmouseout',\n    'onmouseover',\n    'onmouseup',\n    'onmousewheel',\n    'onoffline',\n    'onoine',\n    'ononline',\n    'onpagehide',\n    'onpageshow',\n    'onpause',\n    'onplay',\n    'onplaying',\n    'onpopstate',\n    'onprogress',\n    'onratechange',\n    'onreadystatechange',\n    'onredo',\n    'onresize',\n    'onscroll',\n    'onseeked',\n    'onseeking',\n    'onselect',\n    'onstalled',\n    'onstorage',\n    'onsubmit',\n    'onsuspend',\n    'ontimeupdate',\n    'onundo',\n    'onunload',\n    'onvolumechange',\n    'onwaiting',\n    'onmouseenter',\n    'onmouseleave',\n    'onmousewheel',\n    'onstart',\n    'onpropertychange'\n];\nvar SanitizeHtmlHelper = /** @class */ (function () {\n    function SanitizeHtmlHelper() {\n    }\n    SanitizeHtmlHelper.beforeSanitize = function () {\n        return {\n            selectors: {\n                tags: removeTags,\n                attributes: removeAttrs\n            }\n        };\n    };\n    ;\n    SanitizeHtmlHelper.sanitize = function (value) {\n        var item = this.beforeSanitize();\n        var output = this.serializeValue(item, value);\n        return output;\n    };\n    SanitizeHtmlHelper.serializeValue = function (item, value) {\n        this.removeAttrs = item.selectors.attributes;\n        this.removeTags = item.selectors.tags;\n        this.wrapElement = document.createElement('div');\n        this.wrapElement.innerHTML = value;\n        this.removeXssTags();\n        this.removeJsEvents();\n        this.removeXssAttrs();\n        var tempEleValue = this.wrapElement.innerHTML;\n        this.removeElement();\n        return tempEleValue;\n    };\n    SanitizeHtmlHelper.removeElement = function () {\n        // Removes an element's attibute to avoid html tag validation\n        var nodes = this.wrapElement.children;\n        for (var j = 0; j < nodes.length; j++) {\n            var attribute = nodes[j].attributes;\n            for (var i = 0; i < attribute.length; i++) {\n                this.wrapElement.children[j].removeAttribute(attribute[i].localName);\n            }\n        }\n    };\n    SanitizeHtmlHelper.removeXssTags = function () {\n        var elements = this.wrapElement.querySelectorAll(this.removeTags.join(','));\n        if (elements.length > 0) {\n            elements.forEach(function (element) {\n                detach(element);\n            });\n        }\n        else {\n            return;\n        }\n    };\n    SanitizeHtmlHelper.removeJsEvents = function () {\n        var elements = this.wrapElement.querySelectorAll('[' + jsEvents.join('],[') + ']');\n        if (elements.length > 0) {\n            elements.forEach(function (element) {\n                jsEvents.forEach(function (attr) {\n                    if (element.hasAttribute(attr)) {\n                        element.removeAttribute(attr);\n                    }\n                });\n            });\n        }\n        else {\n            return;\n        }\n    };\n    SanitizeHtmlHelper.removeXssAttrs = function () {\n        var _this = this;\n        this.removeAttrs.forEach(function (item, index) {\n            var elements = _this.wrapElement.querySelectorAll(item.selector);\n            if (elements.length > 0) {\n                elements.forEach(function (element) {\n                    element.removeAttribute(item.attribute);\n                });\n            }\n        });\n    };\n    return SanitizeHtmlHelper;\n}());\nexport { SanitizeHtmlHelper };\n","define([\"./global\", \"require\", \"module\"], function(global, require, module){\n\t// module:\n\t//\t\tdojo/has\n\t// summary:\n\t//\t\tDefines the has.js API and several feature tests used by dojo.\n\t// description:\n\t//\t\tThis module defines the has API as described by the project has.js with the following additional features:\n\t//\n\t//\t\t- the has test cache is exposed at has.cache.\n\t//\t\t- the method has.add includes a forth parameter that controls whether or not existing tests are replaced\n\t//\t\t- the loader's has cache may be optionally copied into this module's has cahce.\n\t//\n\t//\t\tThis module adopted from https://github.com/phiggins42/has.js; thanks has.js team!\n\n\t// try to pull the has implementation from the loader; both the dojo loader and bdLoad provide one\n\t// if using a foreign loader, then the has cache may be initialized via the config object for this module\n\t// WARNING: if a foreign loader defines require.has to be something other than the has.js API, then this implementation fail\n\tvar has = require.has || function(){};\n\tif(!has(\"dojo-has-api\")){\n\t\tvar\n\t\t\tisBrowser =\n\t\t\t\t// the most fundamental decision: are we in the browser?\n\t\t\t\ttypeof window != \"undefined\" &&\n\t\t\t\ttypeof location != \"undefined\" &&\n\t\t\t\ttypeof document != \"undefined\" &&\n\t\t\t\twindow.location == location && window.document == document,\n\n\t\t\t// has API variables\n\t\t\tdoc = isBrowser && document,\n\t\t\telement = doc && doc.createElement(\"DiV\"),\n\t\t\tcache = (module.config && module.config()) || {};\n\n\t\thas = function(name){\n\t\t\t// summary:\n\t\t\t//\t\tReturn the current value of the named feature.\n\t\t\t//\n\t\t\t// name: String|Integer\n\t\t\t//\t\tThe name (if a string) or identifier (if an integer) of the feature to test.\n\t\t\t//\n\t\t\t// description:\n\t\t\t//\t\tReturns the value of the feature named by name. The feature must have been\n\t\t\t//\t\tpreviously added to the cache by has.add.\n\n\t\t\treturn typeof cache[name] == \"function\" ? (cache[name] = cache[name](global, doc, element)) : cache[name]; // Boolean\n\t\t};\n\n\t\thas.cache = cache;\n\n\t\thas.add = function(name, test, now, force){\n\t\t\t// summary:\n\t\t\t//\t \tRegister a new feature test for some named feature.\n\t\t\t// name: String|Integer\n\t\t\t//\t \tThe name (if a string) or identifier (if an integer) of the feature to test.\n\t\t\t// test: Function\n\t\t\t//\t\t A test function to register. If a function, queued for testing until actually\n\t\t\t//\t\t needed. The test function should return a boolean indicating\n\t\t\t//\t \tthe presence of a feature or bug.\n\t\t\t// now: Boolean?\n\t\t\t//\t\t Optional. Omit if `test` is not a function. Provides a way to immediately\n\t\t\t//\t\t run the test and cache the result.\n\t\t\t// force: Boolean?\n\t\t\t//\t \tOptional. If the test already exists and force is truthy, then the existing\n\t\t\t//\t \ttest will be replaced; otherwise, add does not replace an existing test (that\n\t\t\t//\t \tis, by default, the first test advice wins).\n\t\t\t// example:\n\t\t\t//\t\tA redundant test, testFn with immediate execution:\n\t\t\t//\t|\thas.add(\"javascript\", function(){ return true; }, true);\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAgain with the redundantness. You can do this in your tests, but we should\n\t\t\t//\t\tnot be doing this in any internal has.js tests\n\t\t\t//\t|\thas.add(\"javascript\", true);\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tThree things are passed to the testFunction. `global`, `document`, and a generic element\n\t\t\t//\t\tfrom which to work your test should the need arise.\n\t\t\t//\t|\thas.add(\"bug-byid\", function(g, d, el){\n\t\t\t//\t|\t\t// g\t== global, typically window, yadda yadda\n\t\t\t//\t|\t\t// d\t== document object\n\t\t\t//\t|\t\t// el == the generic element. a `has` element.\n\t\t\t//\t|\t\treturn false; // fake test, byid-when-form-has-name-matching-an-id is slightly longer\n\t\t\t//\t|\t});\n\n\t\t\t(typeof cache[name]==\"undefined\" || force) && (cache[name]= test);\n\t\t\treturn now && has(name);\n\t\t};\n\n\t\t// since we're operating under a loader that doesn't provide a has API, we must explicitly initialize\n\t\t// has as it would have otherwise been initialized by the dojo loader; use has.add to the builder\n\t\t// can optimize these away iff desired\n\t\thas.add(\"host-browser\", isBrowser);\n\t\thas.add(\"host-node\", (typeof process == \"object\" && process.versions && process.versions.node && process.versions.v8));\n\t\thas.add(\"host-rhino\", (typeof load == \"function\" && (typeof Packages == \"function\" || typeof Packages == \"object\")));\n\t\thas.add(\"dom\", isBrowser);\n\t\thas.add(\"dojo-dom-ready-api\", 1);\n\t\thas.add(\"dojo-sniff\", 1);\n\t}\n\n\tif(has(\"host-browser\")){\n\t\t// Common application level tests\n\t\thas.add(\"dom-addeventlistener\", !!document.addEventListener);\n\n\t\t// Do the device and browser have touch capability?\n\t\thas.add(\"touch\", \"ontouchstart\" in document\n\t\t\t|| (\"onpointerdown\" in document && navigator.maxTouchPoints > 0)\n\t\t\t|| window.navigator.msMaxTouchPoints);\n\n\t\t// Touch events support\n\t\thas.add(\"touch-events\", \"ontouchstart\" in document);\n\n\t\t// Test if pointer events are supported and enabled, with either standard names (\"pointerdown\" etc.) or\n\t\t// IE specific names (\"MSPointerDown\" etc.).  Tests are designed to work on embedded C# WebBrowser Controls\n\t\t// in addition to IE, Edge, and future versions of Firefox and Chrome.\n\t\t// Note that on IE11, has(\"pointer-events\") and has(\"MSPointer\") are both true.\n\t\thas.add(\"pointer-events\", \"pointerEnabled\" in window.navigator ?\n\t\t\t\twindow.navigator.pointerEnabled : \"PointerEvent\" in window);\n\t\thas.add(\"MSPointer\", window.navigator.msPointerEnabled);\n\t\t// The \"pointermove\"\" event is only continuously emitted in a touch environment if\n\t\t// the target node's \"touch-action\"\" CSS property is set to \"none\"\n\t\t// https://www.w3.org/TR/pointerevents/#the-touch-action-css-property\n\t\thas.add(\"touch-action\", has(\"touch\") && has(\"pointer-events\"));\n\n\t\t// I don't know if any of these tests are really correct, just a rough guess\n\t\thas.add(\"device-width\", screen.availWidth || innerWidth);\n\n\t\t// Tests for DOMNode.attributes[] behavior:\n\t\t//\t - dom-attributes-explicit - attributes[] only lists explicitly user specified attributes\n\t\t//\t - dom-attributes-specified-flag (IE8) - need to check attr.specified flag to skip attributes user didn't specify\n\t\t//\t - Otherwise, in IE6-7. attributes[] will list hundreds of values, so need to do outerHTML to get attrs instead.\n\t\tvar form = document.createElement(\"form\");\n\t\thas.add(\"dom-attributes-explicit\", form.attributes.length == 0); // W3C\n\t\thas.add(\"dom-attributes-specified-flag\", form.attributes.length > 0 && form.attributes.length < 40);\t// IE8\n\t}\n\n\thas.clearElement = function(element){\n\t\t// summary:\n\t\t//\t Deletes the contents of the element passed to test functions.\n\t\telement.innerHTML= \"\";\n\t\treturn element;\n\t};\n\n\thas.normalize = function(id, toAbsMid){\n\t\t// summary:\n\t\t//\t Resolves id into a module id based on possibly-nested tenary expression that branches on has feature test value(s).\n\t\t//\n\t\t// toAbsMid: Function\n\t\t//\t Resolves a relative module id into an absolute module id\n\t\tvar\n\t\t\ttokens = id.match(/[\\?:]|[^:\\?]*/g), i = 0,\n\t\t\tget = function(skip){\n\t\t\t\tvar term = tokens[i++];\n\t\t\t\tif(term == \":\"){\n\t\t\t\t\t// empty string module name, resolves to 0\n\t\t\t\t\treturn 0;\n\t\t\t\t}else{\n\t\t\t\t\t// postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n\t\t\t\t\tif(tokens[i++] == \"?\"){\n\t\t\t\t\t\tif(!skip && has(term)){\n\t\t\t\t\t\t\t// matched the feature, get the first value from the options\n\t\t\t\t\t\t\treturn get();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t// did not match, get the second value, passing over the first\n\t\t\t\t\t\t\tget(true);\n\t\t\t\t\t\t\treturn get(skip);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// a module\n\t\t\t\t\treturn term || 0;\n\t\t\t\t}\n\t\t\t};\n\t\tid = get();\n\t\treturn id && toAbsMid(id);\n\t};\n\n\thas.load = function(id, parentRequire, loaded){\n\t\t// summary:\n\t\t//\t\tConditional loading of AMD modules based on a has feature test value.\n\t\t// id: String\n\t\t//\t\tGives the resolved module id to load.\n\t\t// parentRequire: Function\n\t\t//\t\tThe loader require function with respect to the module that contained the plugin resource in it's\n\t\t//\t\tdependency list.\n\t\t// loaded: Function\n\t\t//\t Callback to loader that consumes result of plugin demand.\n\n\t\tif(id){\n\t\t\tparentRequire([id], loaded);\n\t\t}else{\n\t\t\tloaded();\n\t\t}\n\t};\n\n\treturn has;\n});\n","define([\"./has\"], function(has){\n\t// module:\n\t//\t\tdojo/sniff\n\n\t/*=====\n\treturn function(){\n\t\t// summary:\n\t\t//\t\tThis module sets has() flags based on the current browser.\n\t\t//\t\tIt returns the has() function.\n\t};\n\t=====*/\n\n\tif(has(\"host-browser\")){\n\t\tvar n = navigator,\n\t\t\tdua = n.userAgent,\n\t\t\tdav = n.appVersion,\n\t\t\ttv = parseFloat(dav);\n\t\thas.add(\"air\", dua.indexOf(\"AdobeAIR\") >= 0);\n\t\thas.add(\"wp\", parseFloat(dua.split(\"Windows Phone\")[1]) || undefined);\n\t\thas.add(\"msapp\", parseFloat(dua.split(\"MSAppHost/\")[1]) || undefined);\n\t\thas.add(\"khtml\", dav.indexOf(\"Konqueror\") >= 0 ? tv : undefined);\n\t\thas.add(\"edge\", parseFloat(dua.split(\"Edge/\")[1]) || undefined);\n\t\thas.add(\"opr\", parseFloat(dua.split(\"OPR/\")[1]) || undefined);\n\t\t// NOTE: https://dev.opera.com/blog/opera-user-agent-strings-opera-15-and-beyond/\n\t\thas.add(\"webkit\", !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18540\n\t\t\t&& !has(\"edge\") && parseFloat(dua.split(\"WebKit/\")[1]) || undefined);\n\t\thas.add(\"chrome\", !has(\"edge\") && !has(\"opr\")\n\t\t\t\t&& parseFloat(dua.split(\"Chrome/\")[1]) || undefined);\n\t\thas.add(\"android\", !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18528\n\t\t\t\t&& parseFloat(dua.split(\"Android \")[1]) || undefined);\n\t\thas.add(\"safari\", dav.indexOf(\"Safari\") >= 0\n\t\t\t\t&& !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18540\n\t\t\t\t&& !has(\"chrome\") && !has(\"android\") && !has(\"edge\") && !has(\"opr\") ?\n\t\t\tparseFloat(dav.split(\"Version/\")[1]) : undefined);\n\t\thas.add(\"mac\", dav.indexOf(\"Macintosh\") >= 0);\n\t\thas.add(\"quirks\", document.compatMode == \"BackCompat\");\n\t\tif(!has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18528\n\t\t\t\t&& dua.match(/(iPhone|iPod|iPad)/)){\n\t\t\tvar p = RegExp.$1.replace(/P/, \"p\");\n\t\t\tvar v = dua.match(/OS ([\\d_]+)/) ? RegExp.$1 : \"1\";\n\t\t\tvar os = parseFloat(v.replace(/_/, \".\").replace(/_/g, \"\"));\n\t\t\thas.add(p, os);\t\t// \"iphone\", \"ipad\" or \"ipod\"\n\t\t\thas.add(\"ios\", os);\n\t\t}\n\t\thas.add(\"bb\", (dua.indexOf(\"BlackBerry\") >= 0 || dua.indexOf(\"BB10\") >= 0) && parseFloat(dua.split(\"Version/\")[1]) || undefined);\n\t\thas.add(\"trident\", parseFloat(dav.split(\"Trident/\")[1]) || undefined);\n\n\t\thas.add(\"svg\", typeof SVGAngle !== \"undefined\");\n\n\t\tif(!has(\"webkit\")){\n\t\t\t// Opera\n\t\t\tif(dua.indexOf(\"Opera\") >= 0){\n\t\t\t\t// see http://dev.opera.com/articles/view/opera-ua-string-changes and http://www.useragentstring.com/pages/Opera/\n\t\t\t\t// 9.8 has both styles; <9.8, 9.9 only old style\n\t\t\t\thas.add(\"opera\", tv >= 9.8 ? parseFloat(dua.split(\"Version/\")[1]) || tv : tv);\n\t\t\t}\n\n\t\t\t// Mozilla and firefox\n\t\t\tif(dua.indexOf(\"Gecko\") >= 0 && !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1\n\t\t\t\t\t&& !has(\"khtml\") && !has(\"trident\") && !has(\"edge\")){\n\t\t\t\thas.add(\"mozilla\", tv);\n\t\t\t}\n\t\t\tif(has(\"mozilla\")){\n\t\t\t\t//We really need to get away from this. Consider a sane isGecko approach for the future.\n\t\t\t\thas.add(\"ff\", parseFloat(dua.split(\"Firefox/\")[1] || dua.split(\"Minefield/\")[1]) || undefined);\n\t\t\t}\n\n\t\t\t// IE\n\t\t\tif(document.all && !has(\"opera\")){\n\t\t\t\tvar isIE = parseFloat(dav.split(\"MSIE \")[1]) || undefined;\n\n\t\t\t\t//In cases where the page has an HTTP header or META tag with\n\t\t\t\t//X-UA-Compatible, then it is in emulation mode.\n\t\t\t\t//Make sure isIE reflects the desired version.\n\t\t\t\t//document.documentMode of 5 means quirks mode.\n\t\t\t\t//Only switch the value if documentMode's major version\n\t\t\t\t//is different from isIE's major version.\n\t\t\t\tvar mode = document.documentMode;\n\t\t\t\tif(mode && mode != 5 && Math.floor(isIE) != mode){\n\t\t\t\t\tisIE = mode;\n\t\t\t\t}\n\n\t\t\t\thas.add(\"ie\", isIE);\n\t\t\t}\n\n\t\t\t// Wii\n\t\t\thas.add(\"wii\", typeof opera != \"undefined\" && opera.wiiremote);\n\t\t}\n\t}\n\n\treturn has;\n});\n","define([\"./sniff\", \"./dom\", \"./_base/window\"], function(has, dom, win){\n\t// module:\n\t//\t\tdojo/dom-style\n\n\t// =============================\n\t// Style Functions\n\t// =============================\n\n\t// getComputedStyle drives most of the style code.\n\t// Wherever possible, reuse the returned object.\n\t//\n\t// API functions below that need to access computed styles accept an\n\t// optional computedStyle parameter.\n\t// If this parameter is omitted, the functions will call getComputedStyle themselves.\n\t// This way, calling code can access computedStyle once, and then pass the reference to\n\t// multiple API functions.\n\n\t// Although we normally eschew argument validation at this\n\t// level, here we test argument 'node' for (duck)type,\n\t// by testing nodeType, ecause 'document' is the 'parentNode' of 'body'\n\t// it is frequently sent to this function even\n\t// though it is not Element.\n\tvar getComputedStyle, style = {\n\t\t// summary:\n\t\t//\t\tThis module defines the core dojo DOM style API.\n\t};\n\tif(has(\"webkit\")){\n\t\tgetComputedStyle = function(/*DomNode*/ node){\n\t\t\tvar s;\n\t\t\tif(node.nodeType == 1){\n\t\t\t\tvar dv = node.ownerDocument.defaultView;\n\t\t\t\ts = dv.getComputedStyle(node, null);\n\t\t\t\tif(!s && node.style){\n\t\t\t\t\tnode.style.display = \"\";\n\t\t\t\t\ts = dv.getComputedStyle(node, null);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn s || {};\n\t\t};\n\t}else if(has(\"ie\") && (has(\"ie\") < 9 || has(\"quirks\"))){\n\t\tgetComputedStyle = function(node){\n\t\t\t// IE (as of 7) doesn't expose Element like sane browsers\n\t\t\t// currentStyle can be null on IE8!\n\t\t\treturn node.nodeType == 1 /* ELEMENT_NODE*/ && node.currentStyle ? node.currentStyle : {};\n\t\t};\n\t}else{\n\t\tgetComputedStyle = function(node){\n\t\t\tif(node.nodeType === 1 /* ELEMENT_NODE*/){\n\t\t\t\tvar dv = node.ownerDocument.defaultView,\n\t\t\t\t\tw = dv.opener ? dv : win.global.window;\n\t\t\t\treturn w.getComputedStyle(node, null);\n\t\t\t}\n\t\t\treturn {};\n\t\t};\n\t}\n\tstyle.getComputedStyle = getComputedStyle;\n\t/*=====\n\tstyle.getComputedStyle = function(node){\n\t\t// summary:\n\t\t//\t\tReturns a \"computed style\" object.\n\t\t//\n\t\t// description:\n\t\t//\t\tGets a \"computed style\" object which can be used to gather\n\t\t//\t\tinformation about the current state of the rendered node.\n\t\t//\n\t\t//\t\tNote that this may behave differently on different browsers.\n\t\t//\t\tValues may have different formats and value encodings across\n\t\t//\t\tbrowsers.\n\t\t//\n\t\t//\t\tNote also that this method is expensive.  Wherever possible,\n\t\t//\t\treuse the returned object.\n\t\t//\n\t\t//\t\tUse the dojo/dom-style.get() method for more consistent (pixelized)\n\t\t//\t\treturn values.\n\t\t//\n\t\t// node: DOMNode\n\t\t//\t\tA reference to a DOM node. Does NOT support taking an\n\t\t//\t\tID string for speed reasons.\n\t\t// example:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.getComputedStyle(dom.byId('foo')).borderWidth;\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tReusing the returned object, avoiding multiple lookups:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tvar cs = domStyle.getComputedStyle(dom.byId(\"someNode\"));\n\t\t//\t|\t\tvar w = cs.width, h = cs.height;\n\t\t//\t|\t});\n\t\treturn; // CSS2Properties\n\t};\n\t=====*/\n\n\tvar toPixel;\n\tif(!has(\"ie\")){\n\t\ttoPixel = function(element, value){\n\t\t\t// style values can be floats, client code may want\n\t\t\t// to round for integer pixels.\n\t\t\treturn parseFloat(value) || 0;\n\t\t};\n\t}else{\n\t\ttoPixel = function(element, avalue){\n\t\t\tif(!avalue){ return 0; }\n\t\t\t// on IE7, medium is usually 4 pixels\n\t\t\tif(avalue == \"medium\"){ return 4; }\n\t\t\t// style values can be floats, client code may\n\t\t\t// want to round this value for integer pixels.\n\t\t\tif(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); }\n\t\t\tvar s = element.style, rs = element.runtimeStyle, cs = element.currentStyle,\n\t\t\t\tsLeft = s.left, rsLeft = rs.left;\n\t\t\trs.left = cs.left;\n\t\t\ttry{\n\t\t\t\t// 'avalue' may be incompatible with style.left, which can cause IE to throw\n\t\t\t\t// this has been observed for border widths using \"thin\", \"medium\", \"thick\" constants\n\t\t\t\t// those particular constants could be trapped by a lookup\n\t\t\t\t// but perhaps there are more\n\t\t\t\ts.left = avalue;\n\t\t\t\tavalue = s.pixelLeft;\n\t\t\t}catch(e){\n\t\t\t\tavalue = 0;\n\t\t\t}\n\t\t\ts.left = sLeft;\n\t\t\trs.left = rsLeft;\n\t\t\treturn avalue;\n\t\t};\n\t}\n\tstyle.toPixelValue = toPixel;\n\t/*=====\n\tstyle.toPixelValue = function(node, value){\n\t\t// summary:\n\t\t//\t\tconverts style value to pixels on IE or return a numeric value.\n\t\t// node: DOMNode\n\t\t// value: String\n\t\t// returns: Number\n\t};\n\t=====*/\n\n\t// FIXME: there opacity quirks on FF that we haven't ported over. Hrm.\n\n\tvar astr = \"DXImageTransform.Microsoft.Alpha\";\n\tvar af = function(n, f){\n\t\ttry{\n\t\t\treturn n.filters.item(astr);\n\t\t}catch(e){\n\t\t\treturn f ? {} : null;\n\t\t}\n\t};\n\n\tvar _getOpacity =\n\t\thas(\"ie\") < 9 || (has(\"ie\") < 10 && has(\"quirks\")) ? function(node){\n\t\t\ttry{\n\t\t\t\treturn af(node).Opacity / 100; // Number\n\t\t\t}catch(e){\n\t\t\t\treturn 1; // Number\n\t\t\t}\n\t\t} :\n\t\tfunction(node){\n\t\t\treturn getComputedStyle(node).opacity;\n\t\t};\n\n\tvar _setOpacity =\n\t\thas(\"ie\") < 9 || (has(\"ie\") < 10 && has(\"quirks\")) ? function(/*DomNode*/ node, /*Number*/ opacity){\n\t\t\tif(opacity === \"\"){ opacity = 1; }\n\t\t\tvar ov = opacity * 100, fullyOpaque = opacity === 1;\n\n\t\t\t// on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661),\n\t\t\t// but still update the opacity value so we can get a correct reading if it is read later:\n\t\t\t// af(node, 1).Enabled = !fullyOpaque;\n\n\t\t\tif(fullyOpaque){\n\t\t\t\tnode.style.zoom = \"\";\n\t\t\t\tif(af(node)){\n\t\t\t\t\tnode.style.filter = node.style.filter.replace(\n\t\t\t\t\t\tnew RegExp(\"\\\\s*progid:\" + astr + \"\\\\([^\\\\)]+?\\\\)\", \"i\"), \"\");\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tnode.style.zoom = 1;\n\t\t\t\tif(af(node)){\n\t\t\t\t\taf(node, 1).Opacity = ov;\n\t\t\t\t}else{\n\t\t\t\t\tnode.style.filter += \" progid:\" + astr + \"(Opacity=\" + ov + \")\";\n\t\t\t\t}\n\t\t\t\taf(node, 1).Enabled = true;\n\t\t\t}\n\n\t\t\tif(node.tagName.toLowerCase() == \"tr\"){\n\t\t\t\tfor(var td = node.firstChild; td; td = td.nextSibling){\n\t\t\t\t\tif(td.tagName.toLowerCase() == \"td\"){\n\t\t\t\t\t\t_setOpacity(td, opacity);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn opacity;\n\t\t} :\n\t\tfunction(node, opacity){\n\t\t\treturn node.style.opacity = opacity;\n\t\t};\n\n\tvar _pixelNamesCache = {\n\t\tleft: true, top: true\n\t};\n\tvar _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border\n\tfunction _toStyleValue(node, type, value){\n\t\t//TODO: should we really be doing string case conversion here? Should we cache it? Need to profile!\n\t\ttype = type.toLowerCase();\n\n\t\t// Adjustments for IE and Edge\n\t\tif(value == \"auto\"){\n\t\t\tif(type == \"height\"){ return node.offsetHeight; }\n\t\t\tif(type == \"width\"){ return node.offsetWidth; }\n\t\t}\n\t\tif(type == \"fontweight\"){\n\t\t\tswitch(value){\n\t\t\t\tcase 700: return \"bold\";\n\t\t\t\tcase 400:\n\t\t\t\tdefault: return \"normal\";\n\t\t\t}\n\t\t}\n\n\t\tif(!(type in _pixelNamesCache)){\n\t\t\t_pixelNamesCache[type] = _pixelRegExp.test(type);\n\t\t}\n\t\treturn _pixelNamesCache[type] ? toPixel(node, value) : value;\n\t}\n\n\tvar _floatAliases = {cssFloat: 1, styleFloat: 1, \"float\": 1};\n\n\t// public API\n\n\tstyle.get = function getStyle(/*DOMNode|String*/ node, /*String?*/ name){\n\t\t// summary:\n\t\t//\t\tAccesses styles on a node.\n\t\t// description:\n\t\t//\t\tGetting the style value uses the computed style for the node, so the value\n\t\t//\t\twill be a calculated value, not just the immediate node.style value.\n\t\t//\t\tAlso when getting values, use specific style names,\n\t\t//\t\tlike \"borderBottomWidth\" instead of \"border\" since compound values like\n\t\t//\t\t\"border\" are not necessarily reflected as expected.\n\t\t//\t\tIf you want to get node dimensions, use `dojo/dom-geometry.getMarginBox()`,\n\t\t//\t\t`dojo/dom-geometry.getContentBox()` or `dojo/dom-geometry.getPosition()`.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to node to get style for\n\t\t// name: String?\n\t\t//\t\tthe style property to get\n\t\t// example:\n\t\t//\t\tPassing only an ID or node returns the computed style object of\n\t\t//\t\tthe node:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.get(\"thinger\");\n\t\t//\t|\t});\n\t\t// example:\n\t\t//\t\tPassing a node and a style property returns the current\n\t\t//\t\tnormalized, computed value for that property:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.get(\"thinger\", \"opacity\"); // 1 by default\n\t\t//\t|\t});\n\n\t\tvar n = dom.byId(node), l = arguments.length, op = (name == \"opacity\");\n\t\tif(l == 2 && op){\n\t\t\treturn _getOpacity(n);\n\t\t}\n\t\tname = _floatAliases[name] ? \"cssFloat\" in n.style ? \"cssFloat\" : \"styleFloat\" : name;\n\t\tvar s = style.getComputedStyle(n);\n\t\treturn (l == 1) ? s : _toStyleValue(n, name, s[name] || n.style[name]); /* CSS2Properties||String||Number */\n\t};\n\n\tstyle.set = function setStyle(/*DOMNode|String*/ node, /*String|Object*/ name, /*String?*/ value){\n\t\t// summary:\n\t\t//\t\tSets styles on a node.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to node to set style for\n\t\t// name: String|Object\n\t\t//\t\tthe style property to set in DOM-accessor format\n\t\t//\t\t(\"borderWidth\", not \"border-width\") or an object with key/value\n\t\t//\t\tpairs suitable for setting each property.\n\t\t// value: String?\n\t\t//\t\tIf passed, sets value on the node for style, handling\n\t\t//\t\tcross-browser concerns.  When setting a pixel value,\n\t\t//\t\tbe sure to include \"px\" in the value. For instance, top: \"200px\".\n\t\t//\t\tOtherwise, in some cases, some browsers will not apply the style.\n\t\t//\n\t\t// example:\n\t\t//\t\tPassing a node, a style property, and a value changes the\n\t\t//\t\tcurrent display of the node and returns the new computed value\n\t\t//\t|\trequire([\"dojo/dom-style\"], function(domStyle){\n\t\t//\t|\t\tdomStyle.set(\"thinger\", \"opacity\", 0.5); // == 0.5\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tPassing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node:\n\t\t//\t|\trequire([\"dojo/dom-style\"], function(domStyle){\n\t\t//\t|\t\tdomStyle.set(\"thinger\", {\n\t\t//\t|\t\t\t\"opacity\": 0.5,\n\t\t//\t|\t\t\t\"border\": \"3px solid black\",\n\t\t//\t|\t\t\t\"height\": \"300px\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tWhen the CSS style property is hyphenated, the JavaScript property is camelCased.\n\t\t//\t\tfont-size becomes fontSize, and so on.\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.set(\"thinger\",{\n\t\t//\t|\t\t\tfontSize:\"14pt\",\n\t\t//\t|\t\t\tletterSpacing:\"1.2em\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tdojo/NodeList implements .style() using the same syntax, omitting the \"node\" parameter, calling\n\t\t//\t\tdojo/dom-style.get() on every element of the list. See: `dojo/query` and `dojo/NodeList`\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/query\", \"dojo/NodeList-dom\"],\n\t\t//\t|\tfunction(domStyle, query){\n\t\t//\t|\t\tquery(\".someClassName\").style(\"visibility\",\"hidden\");\n\t\t//\t|\t\t// or\n\t\t//\t|\t\tquery(\"#baz > div\").style({\n\t\t//\t|\t\t\topacity:0.75,\n\t\t//\t|\t\t\tfontSize:\"13pt\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\n\t\tvar n = dom.byId(node), l = arguments.length, op = (name == \"opacity\");\n\t\tname = _floatAliases[name] ? \"cssFloat\" in n.style ? \"cssFloat\" : \"styleFloat\" : name;\n\t\tif(l == 3){\n\t\t\treturn op ? _setOpacity(n, value) : n.style[name] = value; // Number\n\t\t}\n\t\tfor(var x in name){\n\t\t\tstyle.set(node, x, name[x]);\n\t\t}\n\t\treturn style.getComputedStyle(n);\n\t};\n\n\treturn style;\n});\n","define([\"./kernel\", \"./lang\", \"../sniff\"], function(dojo, lang, has){\n// module:\n//\t\tdojo/_base/window\n\nvar ret = {\n\t// summary:\n\t//\t\tAPI to save/set/restore the global/document scope.\n\n\tglobal: dojo.global,\n\t/*=====\n\t global: {\n\t\t // summary:\n\t\t //\t\tAlias for the current window. 'global' can be modified\n\t\t //\t\tfor temporary context shifting. See also withGlobal().\n\t\t // description:\n\t\t //\t\tUse this rather than referring to 'window' to ensure your code runs\n\t\t //\t\tcorrectly in managed contexts.\n\t },\n\t =====*/\n\n\tdoc: dojo.global[\"document\"] || null,\n\t/*=====\n\tdoc: {\n\t\t// summary:\n\t\t//\t\tAlias for the current document. 'doc' can be modified\n\t\t//\t\tfor temporary context shifting. See also withDoc().\n\t\t// description:\n\t\t//\t\tUse this rather than referring to 'window.document' to ensure your code runs\n\t\t//\t\tcorrectly in managed contexts.\n\t\t// example:\n\t\t//\t|\tn.appendChild(dojo.doc.createElement('div'));\n\t},\n\t=====*/\n\n\tbody: function(/*Document?*/ doc){\n\t\t// summary:\n\t\t//\t\tReturn the body element of the specified document or of dojo/_base/window::doc.\n\t\t// example:\n\t\t//\t|\twin.body().appendChild(dojo.doc.createElement('div'));\n\n\t\t// Note: document.body is not defined for a strict xhtml document\n\t\t// Would like to memoize this, but dojo.doc can change vi dojo.withDoc().\n\t\tdoc = doc || dojo.doc;\n\t\treturn doc.body || doc.getElementsByTagName(\"body\")[0]; // Node\n\t},\n\n\tsetContext: function(/*Object*/ globalObject, /*DocumentElement*/ globalDocument){\n\t\t// summary:\n\t\t//\t\tchanges the behavior of many core Dojo functions that deal with\n\t\t//\t\tnamespace and DOM lookup, changing them to work in a new global\n\t\t//\t\tcontext (e.g., an iframe). The varibles dojo.global and dojo.doc\n\t\t//\t\tare modified as a result of calling this function and the result of\n\t\t//\t\t`dojo.body()` likewise differs.\n\t\tdojo.global = ret.global = globalObject;\n\t\tdojo.doc = ret.doc = globalDocument;\n\t},\n\n\twithGlobal: function(\t/*Object*/ globalObject,\n\t\t\t\t\t\t\t/*Function*/ callback,\n\t\t\t\t\t\t\t/*Object?*/ thisObject,\n\t\t\t\t\t\t\t/*Array?*/ cbArguments){\n\t\t// summary:\n\t\t//\t\tInvoke callback with globalObject as dojo.global and\n\t\t//\t\tglobalObject.document as dojo.doc.\n\t\t// description:\n\t\t//\t\tInvoke callback with globalObject as dojo.global and\n\t\t//\t\tglobalObject.document as dojo.doc. If provided, globalObject\n\t\t//\t\twill be executed in the context of object thisObject\n\t\t//\t\tWhen callback() returns or throws an error, the dojo.global\n\t\t//\t\tand dojo.doc will be restored to its previous state.\n\n\t\tvar oldGlob = dojo.global;\n\t\ttry{\n\t\t\tdojo.global = ret.global = globalObject;\n\t\t\treturn ret.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments);\n\t\t}finally{\n\t\t\tdojo.global = ret.global = oldGlob;\n\t\t}\n\t},\n\n\twithDoc: function(\t/*DocumentElement*/ documentObject,\n\t\t\t\t\t\t/*Function*/ callback,\n\t\t\t\t\t\t/*Object?*/ thisObject,\n\t\t\t\t\t\t/*Array?*/ cbArguments){\n\t\t// summary:\n\t\t//\t\tInvoke callback with documentObject as dojo/_base/window::doc.\n\t\t// description:\n\t\t//\t\tInvoke callback with documentObject as dojo/_base/window::doc. If provided,\n\t\t//\t\tcallback will be executed in the context of object thisObject\n\t\t//\t\tWhen callback() returns or throws an error, the dojo/_base/window::doc will\n\t\t//\t\tbe restored to its previous state.\n\n\t\tvar oldDoc = ret.doc,\n\t\t\toldQ = has(\"quirks\"),\n\t\t\toldIE = has(\"ie\"), isIE, mode, pwin;\n\n\t\ttry{\n\t\t\tdojo.doc = ret.doc = documentObject;\n\t\t\t// update dojo.isQuirks and the value of the has feature \"quirks\".\n\t\t\t// remove setting dojo.isQuirks and dojo.isIE for 2.0\n\t\t\tdojo.isQuirks = has.add(\"quirks\", dojo.doc.compatMode == \"BackCompat\", true, true); // no need to check for QuirksMode which was Opera 7 only\n\n\t\t\tif(has(\"ie\")){\n\t\t\t\tif((pwin = documentObject.parentWindow) && pwin.navigator){\n\t\t\t\t\t// re-run IE detection logic and update dojo.isIE / has(\"ie\")\n\t\t\t\t\t// (the only time parentWindow/navigator wouldn't exist is if we were not\n\t\t\t\t\t// passed an actual legitimate document object)\n\t\t\t\t\tisIE = parseFloat(pwin.navigator.appVersion.split(\"MSIE \")[1]) || undefined;\n\t\t\t\t\tmode = documentObject.documentMode;\n\t\t\t\t\tif(mode && mode != 5 && Math.floor(isIE) != mode){\n\t\t\t\t\t\tisIE = mode;\n\t\t\t\t\t}\n\t\t\t\t\tdojo.isIE = has.add(\"ie\", isIE, true, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(thisObject && typeof callback == \"string\"){\n\t\t\t\tcallback = thisObject[callback];\n\t\t\t}\n\n\t\t\treturn callback.apply(thisObject, cbArguments || []);\n\t\t}finally{\n\t\t\tdojo.doc = ret.doc = oldDoc;\n\t\t\tdojo.isQuirks = has.add(\"quirks\", oldQ, true, true);\n\t\t\tdojo.isIE = has.add(\"ie\", oldIE, true, true);\n\t\t}\n\t}\n};\n\nhas(\"extend-dojo\") && lang.mixin(dojo, ret);\n\nreturn ret;\n\n});\n","define([\"./_base/lang\", \"./_base/array\", \"./dom\"], function(lang, array, dom){\n\t// module:\n\t//\t\tdojo/dom-class\n\n\tvar className = \"className\";\n\n\t/* Part I of classList-based implementation is preserved here for posterity\n\tvar classList = \"classList\";\n\thas.add(\"dom-classList\", function(){\n\t\treturn classList in document.createElement(\"p\");\n\t});\n\t*/\n\n\t// =============================\n\t// (CSS) Class Functions\n\t// =============================\n\n\tvar cls, // exports object\n\t\tspaces = /\\s+/, a1 = [\"\"];\n\n\tfunction str2array(s){\n\t\tif(typeof s == \"string\" || s instanceof String){\n\t\t\tif(s && !spaces.test(s)){\n\t\t\t\ta1[0] = s;\n\t\t\t\treturn a1;\n\t\t\t}\n\t\t\tvar a = s.split(spaces);\n\t\t\tif(a.length && !a[0]){\n\t\t\t\ta.shift();\n\t\t\t}\n\t\t\tif(a.length && !a[a.length - 1]){\n\t\t\t\ta.pop();\n\t\t\t}\n\t\t\treturn a;\n\t\t}\n\t\t// assumed to be an array\n\t\tif(!s){\n\t\t\treturn [];\n\t\t}\n\t\treturn array.filter(s, function(x){ return x; });\n\t}\n\n\t/* Part II of classList-based implementation is preserved here for posterity\n\tif(has(\"dom-classList\")){\n\t\t// new classList version\n\t\tcls = {\n\t\t\tcontains: function containsClass(node, classStr){\n\t\t\t\tvar clslst = classStr && dom.byId(node)[classList];\n\t\t\t\treturn clslst && clslst.contains(classStr); // Boolean\n\t\t\t},\n\n\t\t\tadd: function addClass(node, classStr){\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tclassStr = str2array(classStr);\n\t\t\t\tfor(var i = 0, len = classStr.length; i < len; ++i){\n\t\t\t\t\tnode[classList].add(classStr[i]);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tremove: function removeClass(node, classStr){\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tif(classStr === undefined){\n\t\t\t\t\tnode[className] = \"\";\n\t\t\t\t}else{\n\t\t\t\t\tclassStr = str2array(classStr);\n\t\t\t\t\tfor(var i = 0, len = classStr.length; i < len; ++i){\n\t\t\t\t\t\tnode[classList].remove(classStr[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\treplace: function replaceClass(node, addClassStr, removeClassStr){\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tif(removeClassStr === undefined){\n\t\t\t\t\tnode[className] = \"\";\n\t\t\t\t}else{\n\t\t\t\t\tremoveClassStr = str2array(removeClassStr);\n\t\t\t\t\tfor(var i = 0, len = removeClassStr.length; i < len; ++i){\n\t\t\t\t\t\tnode[classList].remove(removeClassStr[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\taddClassStr = str2array(addClassStr);\n\t\t\t\tfor(i = 0, len = addClassStr.length; i < len; ++i){\n\t\t\t\t\tnode[classList].add(addClassStr[i]);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttoggle: function toggleClass(node, classStr, condition){\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tif(condition === undefined){\n\t\t\t\t\tclassStr = str2array(classStr);\n\t\t\t\t\tfor(var i = 0, len = classStr.length; i < len; ++i){\n\t\t\t\t\t\tnode[classList].toggle(classStr[i]);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tcls[condition ? \"add\" : \"remove\"](node, classStr);\n\t\t\t\t}\n\t\t\t\treturn condition;   // Boolean\n\t\t\t}\n\t\t}\n\t}\n\t*/\n\n\t// regular DOM version\n\tvar fakeNode = {};  // for effective replacement\n\tcls = {\n\t\t// summary:\n\t\t//\t\tThis module defines the core dojo DOM class API.\n\n\t\tcontains: function containsClass(/*DomNode|String*/ node, /*String*/ classStr){\n\t\t\t// summary:\n\t\t\t//\t\tReturns whether or not the specified classes are a portion of the\n\t\t\t//\t\tclass list currently applied to the node.\n\t\t\t// node: String|DOMNode\n\t\t\t//\t\tString ID or DomNode reference to check the class for.\n\t\t\t// classStr: String\n\t\t\t//\t\tA string class name to look for.\n\t\t\t// example:\n\t\t\t//\t\tDo something if a node with id=\"someNode\" has class=\"aSillyClassName\" present\n\t\t\t//\t|\tif(domClass.contains(\"someNode\",\"aSillyClassName\")){ ... }\n\n\t\t\treturn ((\" \" + dom.byId(node)[className] + \" \").indexOf(\" \" + classStr + \" \") >= 0); // Boolean\n\t\t},\n\n\t\tadd: function addClass(/*DomNode|String*/ node, /*String|Array*/ classStr){\n\t\t\t// summary:\n\t\t\t//\t\tAdds the specified classes to the end of the class list on the\n\t\t\t//\t\tpassed node. Will not re-apply duplicate classes.\n\t\t\t//\n\t\t\t// node: String|DOMNode\n\t\t\t//\t\tString ID or DomNode reference to add a class string too\n\t\t\t//\n\t\t\t// classStr: String|Array\n\t\t\t//\t\tA String class name to add, or several space-separated class names,\n\t\t\t//\t\tor an array of class names.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAdd a class to some node:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.add(\"someNode\", \"anewClass\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAdd two classes at once:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.add(\"someNode\", \"firstClass secondClass\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAdd two classes at once (using array):\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.add(\"someNode\", [\"firstClass\", \"secondClass\"]);\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAvailable in `dojo/NodeList` for multiple additions\n\t\t\t//\t|\trequire([\"dojo/query\"], function(query){\n\t\t\t//\t|\t\tquery(\"ul > li\").addClass(\"firstLevel\");\n\t\t\t//\t|\t});\n\n\t\t\tnode = dom.byId(node);\n\t\t\tclassStr = str2array(classStr);\n\t\t\tvar cls = node[className], oldLen;\n\t\t\tcls = cls ? \" \" + cls + \" \" : \" \";\n\t\t\toldLen = cls.length;\n\t\t\tfor(var i = 0, len = classStr.length, c; i < len; ++i){\n\t\t\t\tc = classStr[i];\n\t\t\t\tif(c && cls.indexOf(\" \" + c + \" \") < 0){\n\t\t\t\t\tcls += c + \" \";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(oldLen < cls.length){\n\t\t\t\tnode[className] = cls.substr(1, cls.length - 2);\n\t\t\t}\n\t\t},\n\n\t\tremove: function removeClass(/*DomNode|String*/ node, /*String|Array?*/ classStr){\n\t\t\t// summary:\n\t\t\t//\t\tRemoves the specified classes from node. No `contains()`\n\t\t\t//\t\tcheck is required.\n\t\t\t//\n\t\t\t// node: String|DOMNode\n\t\t\t//\t\tString ID or DomNode reference to remove the class from.\n\t\t\t//\n\t\t\t// classStr: String|Array\n\t\t\t//\t\tAn optional String class name to remove, or several space-separated\n\t\t\t//\t\tclass names, or an array of class names. If omitted, all class names\n\t\t\t//\t\twill be deleted.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tRemove a class from some node:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.remove(\"someNode\", \"firstClass\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tRemove two classes from some node:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.remove(\"someNode\", \"firstClass secondClass\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tRemove two classes from some node (using array):\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.remove(\"someNode\", [\"firstClass\", \"secondClass\"]);\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tRemove all classes from some node:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.remove(\"someNode\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAvailable in `dojo/NodeList` for multiple removal\n\t\t\t//\t|\trequire([\"dojo/query\"], function(query){\n\t\t\t//\t|\t\tquery(\"ul > li\").removeClass(\"foo\");\n\t\t\t//\t|\t});\n\n\t\t\tnode = dom.byId(node);\n\t\t\tvar cls;\n\t\t\tif(classStr !== undefined){\n\t\t\t\tclassStr = str2array(classStr);\n\t\t\t\tcls = \" \" + node[className] + \" \";\n\t\t\t\tfor(var i = 0, len = classStr.length; i < len; ++i){\n\t\t\t\t\tcls = cls.replace(\" \" + classStr[i] + \" \", \" \");\n\t\t\t\t}\n\t\t\t\tcls = lang.trim(cls);\n\t\t\t}else{\n\t\t\t\tcls = \"\";\n\t\t\t}\n\t\t\tif(node[className] != cls){ node[className] = cls; }\n\t\t},\n\n\t\treplace: function replaceClass(/*DomNode|String*/ node, /*String|Array*/ addClassStr, /*String|Array?*/ removeClassStr){\n\t\t\t// summary:\n\t\t\t//\t\tReplaces one or more classes on a node if not present.\n\t\t\t//\t\tOperates more quickly than calling domClass.remove and domClass.add\n\t\t\t//\n\t\t\t// node: String|DOMNode\n\t\t\t//\t\tString ID or DomNode reference to remove the class from.\n\t\t\t//\n\t\t\t// addClassStr: String|Array\n\t\t\t//\t\tA String class name to add, or several space-separated class names,\n\t\t\t//\t\tor an array of class names.\n\t\t\t//\n\t\t\t// removeClassStr: String|Array?\n\t\t\t//\t\tA String class name to remove, or several space-separated class names,\n\t\t\t//\t\tor an array of class names.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.replace(\"someNode\", \"add1 add2\", \"remove1 remove2\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\tReplace all classes with addMe\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.replace(\"someNode\", \"addMe\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\tAvailable in `dojo/NodeList` for multiple toggles\n\t\t\t//\t|\trequire([\"dojo/query\"], function(query){\n\t\t\t//\t|\t\tquery(\".findMe\").replaceClass(\"addMe\", \"removeMe\");\n\t\t\t//\t|\t});\n\n\t\t\tnode = dom.byId(node);\n\t\t\tfakeNode[className] = node[className];\n\t\t\tcls.remove(fakeNode, removeClassStr);\n\t\t\tcls.add(fakeNode, addClassStr);\n\t\t\tif(node[className] !== fakeNode[className]){\n\t\t\t\tnode[className] = fakeNode[className];\n\t\t\t}\n\t\t},\n\n\t\ttoggle: function toggleClass(/*DomNode|String*/ node, /*String|Array*/ classStr, /*Boolean?*/ condition){\n\t\t\t// summary:\n\t\t\t//\t\tAdds a class to node if not present, or removes if present.\n\t\t\t//\t\tPass a boolean condition if you want to explicitly add or remove.\n\t\t\t//\t\tReturns the condition that was specified directly or indirectly.\n\t\t\t//\n\t\t\t// node: String|DOMNode\n\t\t\t//\t\tString ID or DomNode reference to toggle a class string\n\t\t\t//\n\t\t\t// classStr: String|Array\n\t\t\t//\t\tA String class name to toggle, or several space-separated class names,\n\t\t\t//\t\tor an array of class names.\n\t\t\t//\n\t\t\t// condition:\n\t\t\t//\t\tIf passed, true means to add the class, false means to remove.\n\t\t\t//\t\tOtherwise domClass.contains(node, classStr) is used to detect the class presence.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.toggle(\"someNode\", \"hovered\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tForcefully add a class\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.toggle(\"someNode\", \"hovered\", true);\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAvailable in `dojo/NodeList` for multiple toggles\n\t\t\t//\t|\trequire([\"dojo/query\"], function(query){\n\t\t\t//\t|\t\tquery(\".toggleMe\").toggleClass(\"toggleMe\");\n\t\t\t//\t|\t});\n\n\t\t\tnode = dom.byId(node);\n\t\t\tif(condition === undefined){\n\t\t\t\tclassStr = str2array(classStr);\n\t\t\t\tfor(var i = 0, len = classStr.length, c; i < len; ++i){\n\t\t\t\t\tc = classStr[i];\n\t\t\t\t\tcls[cls.contains(node, c) ? \"remove\" : \"add\"](node, c);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tcls[condition ? \"add\" : \"remove\"](node, classStr);\n\t\t\t}\n\t\t\treturn condition;   // Boolean\n\t\t}\n\t};\n\n\treturn cls;\n});\n","define([\"../global\", \"../has\", \"require\"], function(global, has, require){\n\t// module:\n\t//\t\tdojo/_base/config\n\n/*=====\nreturn {\n\t// summary:\n\t//\t\tThis module defines the user configuration during bootstrap.\n\t// description:\n\t//\t\tBy defining user configuration as a module value, an entire configuration can be specified in a build,\n\t//\t\tthereby eliminating the need for sniffing and or explicitly setting in the global variable dojoConfig.\n\t//\t\tAlso, when multiple instances of dojo exist in a single application, each will necessarily be located\n\t//\t\tat an unique absolute module identifier as given by the package configuration. Implementing configuration\n\t//\t\tas a module allows for specifying unique, per-instance configurations.\n\t// example:\n\t//\t\tCreate a second instance of dojo with a different, instance-unique configuration (assume the loader and\n\t//\t\tdojo.js are already loaded).\n\t//\t\t|\t// specify a configuration that creates a new instance of dojo at the absolute module identifier \"myDojo\"\n\t//\t\t|\trequire({\n\t//\t\t|\t\tpackages:[{\n\t//\t\t|\t\t\tname:\"myDojo\",\n\t//\t\t|\t\t\tlocation:\".\", //assume baseUrl points to dojo.js\n\t//\t\t|\t\t}]\n\t//\t\t|\t});\n\t//\t\t|\n\t//\t\t|\t// specify a configuration for the myDojo instance\n\t//\t\t|\tdefine(\"myDojo/config\", {\n\t//\t\t|\t\t// normal configuration variables go here, e.g.,\n\t//\t\t|\t\tlocale:\"fr-ca\"\n\t//\t\t|\t});\n\t//\t\t|\n\t//\t\t|\t// load and use the new instance of dojo\n\t//\t\t|\trequire([\"myDojo\"], function(dojo){\n\t//\t\t|\t\t// dojo is the new instance of dojo\n\t//\t\t|\t\t// use as required\n\t//\t\t|\t});\n\n\t// isDebug: Boolean\n\t//\t\tDefaults to `false`. If set to `true`, ensures that Dojo provides\n\t//\t\textended debugging feedback to the console.\n\tisDebug: false,\n\n\t// locale: String\n\t//\t\tThe locale to assume for loading localized resources in this page,\n\t//\t\tspecified according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).\n\t//\t\tMust be specified entirely in lowercase, e.g. `en-us` and `zh-cn`.\n\t//\t\tSee the documentation for `dojo.i18n` and `dojo.requireLocalization`\n\t//\t\tfor details on loading localized resources. If no locale is specified,\n\t//\t\tDojo assumes the locale of the user agent, according to `navigator.userLanguage`\n\t//\t\tor `navigator.language` properties.\n\tlocale: undefined,\n\n\t// extraLocale: Array\n\t//\t\tNo default value. Specifies additional locales whose\n\t//\t\tresources should also be loaded alongside the default locale when\n\t//\t\tcalls to `dojo.requireLocalization()` are processed.\n\textraLocale: undefined,\n\n\t// baseUrl: String\n\t//\t\tThe directory in which `dojo.js` is located. Under normal\n\t//\t\tconditions, Dojo auto-detects the correct location from which it\n\t//\t\twas loaded. You may need to manually configure `baseUrl` in cases\n\t//\t\twhere you have renamed `dojo.js` or in which `<base>` tags confuse\n\t//\t\tsome browsers (e.g. IE 6). The variable `dojo.baseUrl` is assigned\n\t//\t\teither the value of `djConfig.baseUrl` if one is provided or the\n\t//\t\tauto-detected root if not. Other modules are located relative to\n\t//\t\tthis path. The path should end in a slash.\n\tbaseUrl: undefined,\n\n\t// modulePaths: [deprecated] Object\n\t//\t\tA map of module names to paths relative to `dojo.baseUrl`. The\n\t//\t\tkey/value pairs correspond directly to the arguments which\n\t//\t\t`dojo.registerModulePath` accepts. Specifying\n\t//\t\t`djConfig.modulePaths = { \"foo\": \"../../bar\" }` is the equivalent\n\t//\t\tof calling `dojo.registerModulePath(\"foo\", \"../../bar\");`. Multiple\n\t//\t\tmodules may be configured via `djConfig.modulePaths`.\n\tmodulePaths: {},\n\n\t// addOnLoad: Function|Array\n\t//\t\tAdds a callback via dojo/ready. Useful when Dojo is added after\n\t//\t\tthe page loads and djConfig.afterOnLoad is true. Supports the same\n\t//\t\targuments as dojo/ready. When using a function reference, use\n\t//\t\t`djConfig.addOnLoad = function(){};`. For object with function name use\n\t//\t\t`djConfig.addOnLoad = [myObject, \"functionName\"];` and for object with\n\t//\t\tfunction reference use\n\t//\t\t`djConfig.addOnLoad = [myObject, function(){}];`\n\taddOnLoad: null,\n\n\t// parseOnLoad: Boolean\n\t//\t\tRun the parser after the page is loaded\n\tparseOnLoad: false,\n\n\t// require: String[]\n\t//\t\tAn array of module names to be loaded immediately after dojo.js has been included\n\t//\t\tin a page.\n\trequire: [],\n\n\t// defaultDuration: Number\n\t//\t\tDefault duration, in milliseconds, for wipe and fade animations within dijits.\n\t//\t\tAssigned to dijit.defaultDuration.\n\tdefaultDuration: 200,\n\n\t// dojoBlankHtmlUrl: String\n\t//\t\tUsed by some modules to configure an empty iframe. Used by dojo/io/iframe and\n\t//\t\tdojo/back, and dijit/popup support in IE where an iframe is needed to make sure native\n\t//\t\tcontrols do not bleed through the popups. Normally this configuration variable\n\t//\t\tdoes not need to be set, except when using cross-domain/CDN Dojo builds.\n\t//\t\tSave dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl`\n\t//\t\tto the path on your domain your copy of blank.html.\n\tdojoBlankHtmlUrl: undefined,\n\n\t// ioPublish: Boolean?\n\t//\t\tSet this to true to enable publishing of topics for the different phases of\n\t//\t\tIO operations. Publishing is done via dojo/topic.publish(). See dojo/main.__IoPublish for a list\n\t//\t\tof topics that are published.\n\tioPublish: false,\n\n\t// transparentColor: Array\n\t//\t\tArray containing the r, g, b components used as transparent color in dojo.Color;\n\t//\t\tif undefined, [255,255,255] (white) will be used.\n\ttransparentColor: undefined,\n\t\n\t// deps: Function|Array\n\t//\t\tDefines dependencies to be used before the loader has been loaded.\n\t//\t\tWhen provided, they cause the loader to execute require(deps, callback) \n\t//\t\tonce it has finished loading. Should be used with callback.\n\tdeps: undefined,\n\t\n\t// callback: Function|Array\n\t//\t\tDefines a callback to be used when dependencies are defined before \n\t//\t\tthe loader has been loaded. When provided, they cause the loader to \n\t//\t\texecute require(deps, callback) once it has finished loading. \n\t//\t\tShould be used with deps.\n\tcallback: undefined,\n\t\n\t// deferredInstrumentation: Boolean\n\t//\t\tWhether deferred instrumentation should be loaded or included\n\t//\t\tin builds.\n\tdeferredInstrumentation: true,\n\n\t// useDeferredInstrumentation: Boolean|String\n\t//\t\tWhether the deferred instrumentation should be used.\n\t//\n\t//\t\t* `\"report-rejections\"`: report each rejection as it occurs.\n\t//\t\t* `true` or `1` or `\"report-unhandled-rejections\"`: wait 1 second\n\t//\t\t\tin an attempt to detect unhandled rejections.\n\tuseDeferredInstrumentation: \"report-unhandled-rejections\"\n};\n=====*/\n\n\tvar result = {};\n\tif(has(\"dojo-config-api\")){\n\t\t// must be the dojo loader; take a shallow copy of require.rawConfig\n\t\tvar src = require.rawConfig, p;\n\t\tfor(p in src){\n\t\t\tresult[p] = src[p];\n\t\t}\n\t}else{\n\t\tvar adviseHas = function(featureSet, prefix, booting){\n\t\t\tfor(p in featureSet){\n\t\t\t\tp!=\"has\" && has.add(prefix + p, featureSet[p], 0, booting);\n\t\t\t}\n\t\t};\n\t\tresult = has(\"dojo-loader\") ?\n\t\t\t// must be a built version of the dojo loader; all config stuffed in require.rawConfig\n\t\t\trequire.rawConfig :\n\t\t\t// a foreign loader\n\t\t\tglobal.dojoConfig || global.djConfig || {};\n\t\tadviseHas(result, \"config\", 1);\n\t\tadviseHas(result.has, \"\", 1);\n\t}\n\n\tif(!result.locale && typeof navigator != \"undefined\"){\n\t\t// Default locale for browsers (ensure it's read from user-settings not download locale).\n\t\tvar language = (navigator.languages && navigator.languages.length) ? navigator.languages[0] :\n\t\t\t(navigator.language || navigator.userLanguage);\n\t\tif(language){\n\t\t\tresult.locale = language.toLowerCase();\n\t\t}\n\t}\n\n\treturn result;\n});\n\n","define([], function(){\n\n\t// module:\n\t//\t\tdojo/aspect\n\n\t\"use strict\";\n\tvar undefined;\n\tfunction advise(dispatcher, type, advice, receiveArguments){\n\t\tvar previous = dispatcher[type];\n\t\tvar around = type == \"around\";\n\t\tvar signal;\n\t\tif(around){\n\t\t\tvar advised = advice(function(){\n\t\t\t\treturn previous.advice(this, arguments);\n\t\t\t});\n\t\t\tsignal = {\n\t\t\t\tremove: function(){\n\t\t\t\t\tif(advised){\n\t\t\t\t\t\tadvised = dispatcher = advice = null;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadvice: function(target, args){\n\t\t\t\t\treturn advised ?\n\t\t\t\t\t\tadvised.apply(target, args) :  // called the advised function\n\t\t\t\t\t\tprevious.advice(target, args); // cancelled, skip to next one\n\t\t\t\t}\n\t\t\t};\n\t\t}else{\n\t\t\t// create the remove handler\n\t\t\tsignal = {\n\t\t\t\tremove: function(){\n\t\t\t\t\tif(signal.advice){\n\t\t\t\t\t\tvar previous = signal.previous;\n\t\t\t\t\t\tvar next = signal.next;\n\t\t\t\t\t\tif(!next && !previous){\n\t\t\t\t\t\t\tdelete dispatcher[type];\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(previous){\n\t\t\t\t\t\t\t\tprevious.next = next;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tdispatcher[type] = next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(next){\n\t\t\t\t\t\t\t\tnext.previous = previous;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// remove the advice to signal that this signal has been removed\n\t\t\t\t\t\tdispatcher = advice = signal.advice = null;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tid: dispatcher.nextId++,\n\t\t\t\tadvice: advice,\n\t\t\t\treceiveArguments: receiveArguments\n\t\t\t};\n\t\t}\n\t\tif(previous && !around){\n\t\t\tif(type == \"after\"){\n\t\t\t\t// add the listener to the end of the list\n\t\t\t\t// note that we had to change this loop a little bit to workaround a bizarre IE10 JIT bug\n\t\t\t\twhile(previous.next && (previous = previous.next)){}\n\t\t\t\tprevious.next = signal;\n\t\t\t\tsignal.previous = previous;\n\t\t\t}else if(type == \"before\"){\n\t\t\t\t// add to beginning\n\t\t\t\tdispatcher[type] = signal;\n\t\t\t\tsignal.next = previous;\n\t\t\t\tprevious.previous = signal;\n\t\t\t}\n\t\t}else{\n\t\t\t// around or first one just replaces\n\t\t\tdispatcher[type] = signal;\n\t\t}\n\t\treturn signal;\n\t}\n\tfunction aspect(type){\n\t\treturn function(target, methodName, advice, receiveArguments){\n\t\t\tvar existing = target[methodName], dispatcher;\n\t\t\tif(!existing || existing.target != target){\n\t\t\t\t// no dispatcher in place\n\t\t\t\ttarget[methodName] = dispatcher = function(){\n\t\t\t\t\tvar executionId = dispatcher.nextId;\n\t\t\t\t\t// before advice\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\tvar before = dispatcher.before;\n\t\t\t\t\twhile(before){\n\t\t\t\t\t\tif(before.advice){\n\t\t\t\t\t\t\targs = before.advice.apply(this, args) || args;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbefore = before.next;\n\t\t\t\t\t}\n\t\t\t\t\t// around advice\n\t\t\t\t\tif(dispatcher.around){\n\t\t\t\t\t\tvar results = dispatcher.around.advice(this, args);\n\t\t\t\t\t}\n\t\t\t\t\t// after advice\n\t\t\t\t\tvar after = dispatcher.after;\n\t\t\t\t\twhile(after && after.id < executionId){\n\t\t\t\t\t\tif(after.advice){\n\t\t\t\t\t\t\tif(after.receiveArguments){\n\t\t\t\t\t\t\t\tvar newResults = after.advice.apply(this, args);\n\t\t\t\t\t\t\t\t// change the return value only if a new value was returned\n\t\t\t\t\t\t\t\tresults = newResults === undefined ? results : newResults;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tresults = after.advice.call(this, results, args);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tafter = after.next;\n\t\t\t\t\t}\n\t\t\t\t\treturn results;\n\t\t\t\t};\n\t\t\t\tif(existing){\n\t\t\t\t\tdispatcher.around = {advice: function(target, args){\n\t\t\t\t\t\treturn existing.apply(target, args);\n\t\t\t\t\t}};\n\t\t\t\t}\n\t\t\t\tdispatcher.target = target;\n\t\t\t\tdispatcher.nextId = dispatcher.nextId || 0;\n\t\t\t}\n\t\t\tvar results = advise((dispatcher || existing), type, advice, receiveArguments);\n\t\t\tadvice = null;\n\t\t\treturn results;\n\t\t};\n\t}\n\n\t// TODOC: after/before/around return object\n\n\tvar after = aspect(\"after\");\n\t/*=====\n\tafter = function(target, methodName, advice, receiveArguments){\n\t\t// summary:\n\t\t//\t\tThe \"after\" export of the aspect module is a function that can be used to attach\n\t\t//\t\t\"after\" advice to a method. This function will be executed after the original method\n\t\t//\t\tis executed. By default the function will be called with a single argument, the return\n\t\t//\t\tvalue of the original method, or the the return value of the last executed advice (if a previous one exists).\n\t\t//\t\tThe fourth (optional) argument can be set to true to so the function receives the original\n\t\t//\t\targuments (from when the original method was called) rather than the return value.\n\t\t//\t\tIf there are multiple \"after\" advisors, they are executed in the order they were registered.\n\t\t// target: Object\n\t\t//\t\tThis is the target object\n\t\t// methodName: String\n\t\t//\t\tThis is the name of the method to attach to.\n\t\t// advice: Function\n\t\t//\t\tThis is function to be called after the original method\n\t\t// receiveArguments: Boolean?\n\t\t//\t\tIf this is set to true, the advice function receives the original arguments (from when the original mehtod\n\t\t//\t\twas called) rather than the return value of the original/previous method.\n\t\t// returns:\n\t\t//\t\tA signal object that can be used to cancel the advice. If remove() is called on this signal object, it will\n\t\t//\t\tstop the advice function from being executed.\n\t};\n\t=====*/\n\n\tvar before = aspect(\"before\");\n\t/*=====\n\tbefore = function(target, methodName, advice){\n\t\t// summary:\n\t\t//\t\tThe \"before\" export of the aspect module is a function that can be used to attach\n\t\t//\t\t\"before\" advice to a method. This function will be executed before the original method\n\t\t//\t\tis executed. This function will be called with the arguments used to call the method.\n\t\t//\t\tThis function may optionally return an array as the new arguments to use to call\n\t\t//\t\tthe original method (or the previous, next-to-execute before advice, if one exists).\n\t\t//\t\tIf the before method doesn't return anything (returns undefined) the original arguments\n\t\t//\t\twill be preserved.\n\t\t//\t\tIf there are multiple \"before\" advisors, they are executed in the reverse order they were registered.\n\t\t// target: Object\n\t\t//\t\tThis is the target object\n\t\t// methodName: String\n\t\t//\t\tThis is the name of the method to attach to.\n\t\t// advice: Function\n\t\t//\t\tThis is function to be called before the original method\n\t};\n\t=====*/\n\n\tvar around = aspect(\"around\");\n\t/*=====\n\t around = function(target, methodName, advice){\n\t\t// summary:\n\t\t//\t\tThe \"around\" export of the aspect module is a function that can be used to attach\n\t\t//\t\t\"around\" advice to a method. The advisor function is immediately executed when\n\t\t//\t\tthe around() is called, is passed a single argument that is a function that can be\n\t\t//\t\tcalled to continue execution of the original method (or the next around advisor).\n\t\t//\t\tThe advisor function should return a function, and this function will be called whenever\n\t\t//\t\tthe method is called. It will be called with the arguments used to call the method.\n\t\t//\t\tWhatever this function returns will be returned as the result of the method call (unless after advise changes it).\n\t\t// example:\n\t\t//\t\tIf there are multiple \"around\" advisors, the most recent one is executed first,\n\t\t//\t\twhich can then delegate to the next one and so on. For example:\n\t\t//\t\t|\taround(obj, \"foo\", function(originalFoo){\n\t\t//\t\t|\t\treturn function(){\n\t\t//\t\t|\t\t\tvar start = new Date().getTime();\n\t\t//\t\t|\t\t\tvar results = originalFoo.apply(this, arguments); // call the original\n\t\t//\t\t|\t\t\tvar end = new Date().getTime();\n\t\t//\t\t|\t\t\tconsole.log(\"foo execution took \" + (end - start) + \" ms\");\n\t\t//\t\t|\t\t\treturn results;\n\t\t//\t\t|\t\t};\n\t\t//\t\t|\t});\n\t\t// target: Object\n\t\t//\t\tThis is the target object\n\t\t// methodName: String\n\t\t//\t\tThis is the name of the method to attach to.\n\t\t// advice: Function\n\t\t//\t\tThis is function to be called around the original method\n\t};\n\t=====*/\n\n\treturn {\n\t\t// summary:\n\t\t//\t\tprovides aspect oriented programming functionality, allowing for\n\t\t//\t\tone to add before, around, or after advice on existing methods.\n\t\t// example:\n\t\t//\t|\tdefine([\"dojo/aspect\"], function(aspect){\n\t\t//\t|\t\tvar signal = aspect.after(targetObject, \"methodName\", function(someArgument){\n\t\t//\t|\t\t\tthis will be called when targetObject.methodName() is called, after the original function is called\n\t\t//\t|\t\t});\n\t\t//\n\t\t// example:\n\t\t//\tThe returned signal object can be used to cancel the advice.\n\t\t//\t|\tsignal.remove(); // this will stop the advice from being executed anymore\n\t\t//\t|\taspect.before(targetObject, \"methodName\", function(someArgument){\n\t\t//\t|\t\t// this will be called when targetObject.methodName() is called, before the original function is called\n\t\t//\t|\t });\n\n\t\tbefore: before,\n\t\taround: around,\n\t\tafter: after\n\t};\n});\n","/**\n * @module ol/extent\n */\nimport Corner from './extent/Corner.js';\nimport Relationship from './extent/Relationship.js';\nimport { assert } from './asserts.js';\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array<number>} Extent\n * @api\n */\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n    var extent = createEmpty();\n    for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n        extendCoordinate(extent, coordinates[i]);\n    }\n    return extent;\n}\n/**\n * @param {Array<number>} xs Xs.\n * @param {Array<number>} ys Ys.\n * @param {Extent=} opt_extent Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, opt_extent) {\n    var minX = Math.min.apply(null, xs);\n    var minY = Math.min.apply(null, ys);\n    var maxX = Math.max.apply(null, xs);\n    var maxY = Math.max.apply(null, ys);\n    return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n}\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, opt_extent) {\n    if (opt_extent) {\n        opt_extent[0] = extent[0] - value;\n        opt_extent[1] = extent[1] - value;\n        opt_extent[2] = extent[2] + value;\n        opt_extent[3] = extent[3] + value;\n        return opt_extent;\n    }\n    else {\n        return [\n            extent[0] - value,\n            extent[1] - value,\n            extent[2] + value,\n            extent[3] + value,\n        ];\n    }\n}\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, opt_extent) {\n    if (opt_extent) {\n        opt_extent[0] = extent[0];\n        opt_extent[1] = extent[1];\n        opt_extent[2] = extent[2];\n        opt_extent[3] = extent[3];\n        return opt_extent;\n    }\n    else {\n        return extent.slice();\n    }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n    var dx, dy;\n    if (x < extent[0]) {\n        dx = extent[0] - x;\n    }\n    else if (extent[2] < x) {\n        dx = x - extent[2];\n    }\n    else {\n        dx = 0;\n    }\n    if (y < extent[1]) {\n        dy = extent[1] - y;\n    }\n    else if (extent[3] < y) {\n        dy = y - extent[3];\n    }\n    else {\n        dy = 0;\n    }\n    return dx * dx + dy * dy;\n}\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n    return containsXY(extent, coordinate[0], coordinate[1]);\n}\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n *     first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n    return (extent1[0] <= extent2[0] &&\n        extent2[2] <= extent1[2] &&\n        extent1[1] <= extent2[1] &&\n        extent2[3] <= extent1[3]);\n}\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n    return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n *     import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n    var minX = extent[0];\n    var minY = extent[1];\n    var maxX = extent[2];\n    var maxY = extent[3];\n    var x = coordinate[0];\n    var y = coordinate[1];\n    var relationship = Relationship.UNKNOWN;\n    if (x < minX) {\n        relationship = relationship | Relationship.LEFT;\n    }\n    else if (x > maxX) {\n        relationship = relationship | Relationship.RIGHT;\n    }\n    if (y < minY) {\n        relationship = relationship | Relationship.BELOW;\n    }\n    else if (y > maxY) {\n        relationship = relationship | Relationship.ABOVE;\n    }\n    if (relationship === Relationship.UNKNOWN) {\n        relationship = Relationship.INTERSECTING;\n    }\n    return relationship;\n}\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n    return [Infinity, Infinity, -Infinity, -Infinity];\n}\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent=} opt_extent Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, opt_extent) {\n    if (opt_extent) {\n        opt_extent[0] = minX;\n        opt_extent[1] = minY;\n        opt_extent[2] = maxX;\n        opt_extent[3] = maxY;\n        return opt_extent;\n    }\n    else {\n        return [minX, minY, maxX, maxY];\n    }\n}\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(opt_extent) {\n    return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, opt_extent);\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, opt_extent) {\n    var x = coordinate[0];\n    var y = coordinate[1];\n    return createOrUpdate(x, y, x, y, opt_extent);\n}\n/**\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, opt_extent) {\n    var extent = createOrUpdateEmpty(opt_extent);\n    return extendCoordinates(extent, coordinates);\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(flatCoordinates, offset, end, stride, opt_extent) {\n    var extent = createOrUpdateEmpty(opt_extent);\n    return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n/**\n * @param {Array<Array<import(\"./coordinate.js\").Coordinate>>} rings Rings.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, opt_extent) {\n    var extent = createOrUpdateEmpty(opt_extent);\n    return extendRings(extent, rings);\n}\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n    return (extent1[0] == extent2[0] &&\n        extent1[2] == extent2[2] &&\n        extent1[1] == extent2[1] &&\n        extent1[3] == extent2[3]);\n}\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n    return (Math.abs(extent1[0] - extent2[0]) < tolerance &&\n        Math.abs(extent1[2] - extent2[2]) < tolerance &&\n        Math.abs(extent1[1] - extent2[1]) < tolerance &&\n        Math.abs(extent1[3] - extent2[3]) < tolerance);\n}\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n    if (extent2[0] < extent1[0]) {\n        extent1[0] = extent2[0];\n    }\n    if (extent2[2] > extent1[2]) {\n        extent1[2] = extent2[2];\n    }\n    if (extent2[1] < extent1[1]) {\n        extent1[1] = extent2[1];\n    }\n    if (extent2[3] > extent1[3]) {\n        extent1[3] = extent2[3];\n    }\n    return extent1;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n    if (coordinate[0] < extent[0]) {\n        extent[0] = coordinate[0];\n    }\n    if (coordinate[0] > extent[2]) {\n        extent[2] = coordinate[0];\n    }\n    if (coordinate[1] < extent[1]) {\n        extent[1] = coordinate[1];\n    }\n    if (coordinate[1] > extent[3]) {\n        extent[3] = coordinate[1];\n    }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n    for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n        extendCoordinate(extent, coordinates[i]);\n    }\n    return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(extent, flatCoordinates, offset, end, stride) {\n    for (; offset < end; offset += stride) {\n        extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n    }\n    return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array<Array<import(\"./coordinate.js\").Coordinate>>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n    for (var i = 0, ii = rings.length; i < ii; ++i) {\n        extendCoordinates(extent, rings[i]);\n    }\n    return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n    extent[0] = Math.min(extent[0], x);\n    extent[1] = Math.min(extent[1], y);\n    extent[2] = Math.max(extent[2], x);\n    extent[3] = Math.max(extent[3], y);\n}\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n    var val;\n    val = callback(getBottomLeft(extent));\n    if (val) {\n        return val;\n    }\n    val = callback(getBottomRight(extent));\n    if (val) {\n        return val;\n    }\n    val = callback(getTopRight(extent));\n    if (val) {\n        return val;\n    }\n    val = callback(getTopLeft(extent));\n    if (val) {\n        return val;\n    }\n    return false;\n}\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n    var area = 0;\n    if (!isEmpty(extent)) {\n        area = getWidth(extent) * getHeight(extent);\n    }\n    return area;\n}\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n    return [extent[0], extent[1]];\n}\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n    return [extent[2], extent[1]];\n}\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n    return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./extent/Corner.js\").default} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n    var coordinate;\n    if (corner === Corner.BOTTOM_LEFT) {\n        coordinate = getBottomLeft(extent);\n    }\n    else if (corner === Corner.BOTTOM_RIGHT) {\n        coordinate = getBottomRight(extent);\n    }\n    else if (corner === Corner.TOP_LEFT) {\n        coordinate = getTopLeft(extent);\n    }\n    else if (corner === Corner.TOP_RIGHT) {\n        coordinate = getTopRight(extent);\n    }\n    else {\n        assert(false, 13); // Invalid corner\n    }\n    return coordinate;\n}\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n    var minX = Math.min(extent1[0], extent2[0]);\n    var minY = Math.min(extent1[1], extent2[1]);\n    var maxX = Math.max(extent1[2], extent2[2]);\n    var maxY = Math.max(extent1[3], extent2[3]);\n    return (maxX - minX) * (maxY - minY);\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent=} opt_extent Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, opt_extent) {\n    var dx = (resolution * size[0]) / 2;\n    var dy = (resolution * size[1]) / 2;\n    var cosRotation = Math.cos(rotation);\n    var sinRotation = Math.sin(rotation);\n    var xCos = dx * cosRotation;\n    var xSin = dx * sinRotation;\n    var yCos = dy * cosRotation;\n    var ySin = dy * sinRotation;\n    var x = center[0];\n    var y = center[1];\n    var x0 = x - xCos + ySin;\n    var x1 = x - xCos - ySin;\n    var x2 = x + xCos - ySin;\n    var x3 = x + xCos + ySin;\n    var y0 = y - xSin - yCos;\n    var y1 = y - xSin + yCos;\n    var y2 = y + xSin + yCos;\n    var y3 = y + xSin - yCos;\n    return createOrUpdate(Math.min(x0, x1, x2, x3), Math.min(y0, y1, y2, y3), Math.max(x0, x1, x2, x3), Math.max(y0, y1, y2, y3), opt_extent);\n}\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n    return extent[3] - extent[1];\n}\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n    var intersection = getIntersection(extent1, extent2);\n    return getArea(intersection);\n}\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent=} opt_extent Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, opt_extent) {\n    var intersection = opt_extent ? opt_extent : createEmpty();\n    if (intersects(extent1, extent2)) {\n        if (extent1[0] > extent2[0]) {\n            intersection[0] = extent1[0];\n        }\n        else {\n            intersection[0] = extent2[0];\n        }\n        if (extent1[1] > extent2[1]) {\n            intersection[1] = extent1[1];\n        }\n        else {\n            intersection[1] = extent2[1];\n        }\n        if (extent1[2] < extent2[2]) {\n            intersection[2] = extent1[2];\n        }\n        else {\n            intersection[2] = extent2[2];\n        }\n        if (extent1[3] < extent2[3]) {\n            intersection[3] = extent1[3];\n        }\n        else {\n            intersection[3] = extent2[3];\n        }\n    }\n    else {\n        createOrUpdateEmpty(intersection);\n    }\n    return intersection;\n}\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n    return getWidth(extent) + getHeight(extent);\n}\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n    return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n    return [extent[0], extent[3]];\n}\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n    return [extent[2], extent[3]];\n}\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n    return extent[2] - extent[0];\n}\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n    return (extent1[0] <= extent2[2] &&\n        extent1[2] >= extent2[0] &&\n        extent1[1] <= extent2[3] &&\n        extent1[3] >= extent2[1]);\n}\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n    return extent[2] < extent[0] || extent[3] < extent[1];\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, opt_extent) {\n    if (opt_extent) {\n        opt_extent[0] = extent[0];\n        opt_extent[1] = extent[1];\n        opt_extent[2] = extent[2];\n        opt_extent[3] = extent[3];\n        return opt_extent;\n    }\n    else {\n        return extent;\n    }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n    var deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n    var deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n    extent[0] -= deltaX;\n    extent[2] += deltaX;\n    extent[1] -= deltaY;\n    extent[3] += deltaY;\n}\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n    var intersects = false;\n    var startRel = coordinateRelationship(extent, start);\n    var endRel = coordinateRelationship(extent, end);\n    if (startRel === Relationship.INTERSECTING ||\n        endRel === Relationship.INTERSECTING) {\n        intersects = true;\n    }\n    else {\n        var minX = extent[0];\n        var minY = extent[1];\n        var maxX = extent[2];\n        var maxY = extent[3];\n        var startX = start[0];\n        var startY = start[1];\n        var endX = end[0];\n        var endY = end[1];\n        var slope = (endY - startY) / (endX - startX);\n        var x = void 0, y = void 0;\n        if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n            // potentially intersects top\n            x = endX - (endY - maxY) / slope;\n            intersects = x >= minX && x <= maxX;\n        }\n        if (!intersects &&\n            !!(endRel & Relationship.RIGHT) &&\n            !(startRel & Relationship.RIGHT)) {\n            // potentially intersects right\n            y = endY - (endX - maxX) * slope;\n            intersects = y >= minY && y <= maxY;\n        }\n        if (!intersects &&\n            !!(endRel & Relationship.BELOW) &&\n            !(startRel & Relationship.BELOW)) {\n            // potentially intersects bottom\n            x = endX - (endY - minY) / slope;\n            intersects = x >= minX && x <= maxX;\n        }\n        if (!intersects &&\n            !!(endRel & Relationship.LEFT) &&\n            !(startRel & Relationship.LEFT)) {\n            // potentially intersects left\n            y = endY - (endX - minX) * slope;\n            intersects = y >= minY && y <= maxY;\n        }\n    }\n    return intersects;\n}\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent=} opt_extent Destination extent.\n * @param {number=} opt_stops Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, opt_extent, opt_stops) {\n    var coordinates = [];\n    if (opt_stops > 1) {\n        var width = extent[2] - extent[0];\n        var height = extent[3] - extent[1];\n        for (var i = 0; i < opt_stops; ++i) {\n            coordinates.push(extent[0] + (width * i) / opt_stops, extent[1], extent[2], extent[1] + (height * i) / opt_stops, extent[2] - (width * i) / opt_stops, extent[3], extent[0], extent[3] - (height * i) / opt_stops);\n        }\n    }\n    else {\n        coordinates = [\n            extent[0],\n            extent[1],\n            extent[2],\n            extent[1],\n            extent[2],\n            extent[3],\n            extent[0],\n            extent[3],\n        ];\n    }\n    transformFn(coordinates, coordinates, 2);\n    var xs = [];\n    var ys = [];\n    for (var i = 0, l = coordinates.length; i < l; i += 2) {\n        xs.push(coordinates[i]);\n        ys.push(coordinates[i + 1]);\n    }\n    return _boundingExtentXYs(xs, ys, opt_extent);\n}\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n    var projectionExtent = projection.getExtent();\n    var center = getCenter(extent);\n    if (projection.canWrapX() &&\n        (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])) {\n        var worldWidth = getWidth(projectionExtent);\n        var worldsAway = Math.floor((center[0] - projectionExtent[0]) / worldWidth);\n        var offset = worldsAway * worldWidth;\n        extent[0] -= offset;\n        extent[2] -= offset;\n    }\n    return extent;\n}\n//# sourceMappingURL=extent.js.map","define(['./global', './has'], function(global, has){\n\tvar doc = document,\n\t\treadyStates = { 'loaded': 1, 'complete': 1 },\n\t\tfixReadyState = typeof doc.readyState != \"string\",\n\t\tready = !!readyStates[doc.readyState],\n\t\treadyQ = [],\n\t\trecursiveGuard;\n\n\tfunction domReady(callback){\n\t\t// summary:\n\t\t//\t\tPlugin to delay require()/define() callback from firing until the DOM has finished loading.\n\t\treadyQ.push(callback);\n\t\tif(ready){ processQ(); }\n\t}\n\tdomReady.load = function(id, req, load){\n\t\tdomReady(load);\n\t};\n\n\t// Export queue so that ready() can check if it's empty or not.\n\tdomReady._Q = readyQ;\n\tdomReady._onQEmpty = function(){\n\t\t// summary:\n\t\t//\t\tPrivate method overridden by dojo/ready, to notify when everything in the\n\t\t//\t\tdomReady queue has been processed.  Do not use directly.\n\t\t//\t\tWill be removed in 2.0, along with domReady._Q.\n\t};\n\n\t// For FF <= 3.5\n\tif(fixReadyState){ doc.readyState = \"loading\"; }\n\n\tfunction processQ(){\n\t\t// Calls all functions in the queue in order, unless processQ() is already running, in which case just return\n\n\t\tif(recursiveGuard){ return; }\n\t\trecursiveGuard = true;\n\n\t\twhile(readyQ.length){\n\t\t\ttry{\n\t\t\t\t(readyQ.shift())(doc);\n\t\t\t}catch(err){\n\t\t\t\tconsole.error(err, \"in domReady callback\", err.stack);\n\t\t\t}\n\t\t}\n\n\t\trecursiveGuard = false;\n\n\t\t// Notification for dojo/ready.  Remove for 2.0.\n\t\t// Note that this could add more tasks to the ready queue.\n\t\tdomReady._onQEmpty();\n\t}\n\n\tif(!ready){\n\t\tvar tests = [],\n\t\t\tdetectReady = function(evt){\n\t\t\t\tevt = evt || global.event;\n\t\t\t\tif(ready || (evt.type == \"readystatechange\" && !readyStates[doc.readyState])){ return; }\n\n\t\t\t\t// For FF <= 3.5\n\t\t\t\tif(fixReadyState){ doc.readyState = \"complete\"; }\n\n\t\t\t\tready = 1;\n\t\t\t\tprocessQ();\n\t\t\t},\n\t\t\ton = function(node, event){\n\t\t\t\tnode.addEventListener(event, detectReady, false);\n\t\t\t\treadyQ.push(function(){ node.removeEventListener(event, detectReady, false); });\n\t\t\t};\n\n\t\tif(!has(\"dom-addeventlistener\")){\n\t\t\ton = function(node, event){\n\t\t\t\tevent = \"on\" + event;\n\t\t\t\tnode.attachEvent(event, detectReady);\n\t\t\t\treadyQ.push(function(){ node.detachEvent(event, detectReady); });\n\t\t\t};\n\n\t\t\tvar div = doc.createElement(\"div\");\n\t\t\ttry{\n\t\t\t\tif(div.doScroll && global.frameElement === null){\n\t\t\t\t\t// the doScroll test is only useful if we're in the top-most frame\n\t\t\t\t\ttests.push(function(){\n\t\t\t\t\t\t// Derived with permission from Diego Perini's IEContentLoaded\n\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\tdiv.doScroll(\"left\");\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}catch(e){}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}catch(e){}\n\t\t}\n\n\t\ton(doc, \"DOMContentLoaded\");\n\t\ton(global, \"load\");\n\n\t\tif(\"onreadystatechange\" in doc){\n\t\t\ton(doc, \"readystatechange\");\n\t\t}else if(!fixReadyState){\n\t\t\t// if the ready state property exists and there's\n\t\t\t// no readystatechange event, poll for the state\n\t\t\t// to change\n\t\t\ttests.push(function(){\n\t\t\t\treturn readyStates[doc.readyState];\n\t\t\t});\n\t\t}\n\n\t\tif(tests.length){\n\t\t\tvar poller = function(){\n\t\t\t\tif(ready){ return; }\n\t\t\t\tvar i = tests.length;\n\t\t\t\twhile(i--){\n\t\t\t\t\tif(tests[i]()){\n\t\t\t\t\t\tdetectReady(\"poller\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetTimeout(poller, 30);\n\t\t\t};\n\t\t\tpoller();\n\t\t}\n\t}\n\n\treturn domReady;\n});\n","/**\n * @module ol/style/Style\n */\nimport CircleStyle from './Circle.js';\nimport Fill from './Fill.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport Stroke from './Stroke.js';\nimport { assert } from '../asserts.js';\n/**\n * A function that takes an {@link module:ol/Feature} and a `{number}`\n * representing the view's resolution. The function should return a\n * {@link module:ol/style/Style} or an array of them. This way e.g. a\n * vector layer can be styled. If the function returns `undefined`, the\n * feature will not be rendered.\n *\n * @typedef {function(import(\"../Feature.js\").FeatureLike, number):(Style|Array<Style>|void)} StyleFunction\n */\n/**\n * A {@link Style}, an array of {@link Style}, or a {@link StyleFunction}.\n * @typedef {Style|Array<Style>|StyleFunction} StyleLike\n */\n/**\n * A function that takes an {@link module:ol/Feature} as argument and returns an\n * {@link module:ol/geom/Geometry} that will be rendered and styled for the feature.\n *\n * @typedef {function(import(\"../Feature.js\").FeatureLike):\n *     (import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default|undefined)} GeometryFunction\n */\n/**\n * Custom renderer function. Takes two arguments:\n *\n * 1. The pixel coordinates of the geometry in GeoJSON notation.\n * 2. The {@link module:ol/render~State} of the layer renderer.\n *\n * @typedef {function((import(\"../coordinate.js\").Coordinate|Array<import(\"../coordinate.js\").Coordinate>|Array<Array<import(\"../coordinate.js\").Coordinate>>),import(\"../render.js\").State): void}\n * RenderFunction\n */\n/**\n * @typedef {Object} Options\n * @property {string|import(\"../geom/Geometry.js\").default|GeometryFunction} [geometry] Feature property or geometry\n * or function returning a geometry to render for this style.\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {import(\"./Image.js\").default} [image] Image style.\n * @property {RenderFunction} [renderer] Custom renderer. When configured, `fill`, `stroke` and `image` will be\n * ignored, and the provided function will be called with each render frame for each geometry.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {import(\"./Text.js\").default} [text] Text style.\n * @property {number} [zIndex] Z index.\n */\n/**\n * @classdesc\n * Container for vector feature rendering styles. Any changes made to the style\n * or its children through `set*()` methods will not take effect until the\n * feature or layer that uses the style is re-rendered.\n *\n * ## Feature styles\n *\n * If no style is defined, the following default style is used:\n * ```js\n *  import {Fill, Stroke, Circle, Style} from 'ol/style';\n *\n *  var fill = new Fill({\n *    color: 'rgba(255,255,255,0.4)'\n *  });\n *  var stroke = new Stroke({\n *    color: '#3399CC',\n *    width: 1.25\n *  });\n *  var styles = [\n *    new Style({\n *      image: new Circle({\n *        fill: fill,\n *        stroke: stroke,\n *        radius: 5\n *      }),\n *      fill: fill,\n *      stroke: stroke\n *    })\n *  ];\n * ```\n *\n * A separate editing style has the following defaults:\n * ```js\n *  import {Fill, Stroke, Circle, Style} from 'ol/style';\n *  import GeometryType from 'ol/geom/GeometryType';\n *\n *  var white = [255, 255, 255, 1];\n *  var blue = [0, 153, 255, 1];\n *  var width = 3;\n *  styles[GeometryType.POLYGON] = [\n *    new Style({\n *      fill: new Fill({\n *        color: [255, 255, 255, 0.5]\n *      })\n *    })\n *  ];\n *  styles[GeometryType.MULTI_POLYGON] =\n *      styles[GeometryType.POLYGON];\n *  styles[GeometryType.LINE_STRING] = [\n *    new Style({\n *      stroke: new Stroke({\n *        color: white,\n *        width: width + 2\n *      })\n *    }),\n *    new Style({\n *      stroke: new Stroke({\n *        color: blue,\n *        width: width\n *      })\n *    })\n *  ];\n *  styles[GeometryType.MULTI_LINE_STRING] =\n *      styles[GeometryType.LINE_STRING];\n *  styles[GeometryType.POINT] = [\n *    new Style({\n *      image: new Circle({\n *        radius: width * 2,\n *        fill: new Fill({\n *          color: blue\n *        }),\n *        stroke: new Stroke({\n *          color: white,\n *          width: width / 2\n *        })\n *      }),\n *      zIndex: Infinity\n *    })\n *  ];\n *  styles[GeometryType.MULTI_POINT] =\n *      styles[GeometryType.POINT];\n *  styles[GeometryType.GEOMETRY_COLLECTION] =\n *      styles[GeometryType.POLYGON].concat(\n *          styles[GeometryType.LINE_STRING],\n *          styles[GeometryType.POINT]\n *      );\n * ```\n *\n * @api\n */\nvar Style = /** @class */ (function () {\n    /**\n     * @param {Options=} opt_options Style options.\n     */\n    function Style(opt_options) {\n        var options = opt_options || {};\n        /**\n         * @private\n         * @type {string|import(\"../geom/Geometry.js\").default|GeometryFunction}\n         */\n        this.geometry_ = null;\n        /**\n         * @private\n         * @type {!GeometryFunction}\n         */\n        this.geometryFunction_ = defaultGeometryFunction;\n        if (options.geometry !== undefined) {\n            this.setGeometry(options.geometry);\n        }\n        /**\n         * @private\n         * @type {import(\"./Fill.js\").default}\n         */\n        this.fill_ = options.fill !== undefined ? options.fill : null;\n        /**\n         * @private\n         * @type {import(\"./Image.js\").default}\n         */\n        this.image_ = options.image !== undefined ? options.image : null;\n        /**\n         * @private\n         * @type {RenderFunction|null}\n         */\n        this.renderer_ = options.renderer !== undefined ? options.renderer : null;\n        /**\n         * @private\n         * @type {import(\"./Stroke.js\").default}\n         */\n        this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n        /**\n         * @private\n         * @type {import(\"./Text.js\").default}\n         */\n        this.text_ = options.text !== undefined ? options.text : null;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        this.zIndex_ = options.zIndex;\n    }\n    /**\n     * Clones the style.\n     * @return {Style} The cloned style.\n     * @api\n     */\n    Style.prototype.clone = function () {\n        var geometry = this.getGeometry();\n        if (geometry && typeof geometry === 'object') {\n            geometry = /** @type {import(\"../geom/Geometry.js\").default} */ (geometry).clone();\n        }\n        return new Style({\n            geometry: geometry,\n            fill: this.getFill() ? this.getFill().clone() : undefined,\n            image: this.getImage() ? this.getImage().clone() : undefined,\n            stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n            text: this.getText() ? this.getText().clone() : undefined,\n            zIndex: this.getZIndex(),\n        });\n    };\n    /**\n     * Get the custom renderer function that was configured with\n     * {@link #setRenderer} or the `renderer` constructor option.\n     * @return {RenderFunction|null} Custom renderer function.\n     * @api\n     */\n    Style.prototype.getRenderer = function () {\n        return this.renderer_;\n    };\n    /**\n     * Sets a custom renderer function for this style. When set, `fill`, `stroke`\n     * and `image` options of the style will be ignored.\n     * @param {RenderFunction|null} renderer Custom renderer function.\n     * @api\n     */\n    Style.prototype.setRenderer = function (renderer) {\n        this.renderer_ = renderer;\n    };\n    /**\n     * Get the geometry to be rendered.\n     * @return {string|import(\"../geom/Geometry.js\").default|GeometryFunction}\n     * Feature property or geometry or function that returns the geometry that will\n     * be rendered with this style.\n     * @api\n     */\n    Style.prototype.getGeometry = function () {\n        return this.geometry_;\n    };\n    /**\n     * Get the function used to generate a geometry for rendering.\n     * @return {!GeometryFunction} Function that is called with a feature\n     * and returns the geometry to render instead of the feature's geometry.\n     * @api\n     */\n    Style.prototype.getGeometryFunction = function () {\n        return this.geometryFunction_;\n    };\n    /**\n     * Get the fill style.\n     * @return {import(\"./Fill.js\").default} Fill style.\n     * @api\n     */\n    Style.prototype.getFill = function () {\n        return this.fill_;\n    };\n    /**\n     * Set the fill style.\n     * @param {import(\"./Fill.js\").default} fill Fill style.\n     * @api\n     */\n    Style.prototype.setFill = function (fill) {\n        this.fill_ = fill;\n    };\n    /**\n     * Get the image style.\n     * @return {import(\"./Image.js\").default} Image style.\n     * @api\n     */\n    Style.prototype.getImage = function () {\n        return this.image_;\n    };\n    /**\n     * Set the image style.\n     * @param {import(\"./Image.js\").default} image Image style.\n     * @api\n     */\n    Style.prototype.setImage = function (image) {\n        this.image_ = image;\n    };\n    /**\n     * Get the stroke style.\n     * @return {import(\"./Stroke.js\").default} Stroke style.\n     * @api\n     */\n    Style.prototype.getStroke = function () {\n        return this.stroke_;\n    };\n    /**\n     * Set the stroke style.\n     * @param {import(\"./Stroke.js\").default} stroke Stroke style.\n     * @api\n     */\n    Style.prototype.setStroke = function (stroke) {\n        this.stroke_ = stroke;\n    };\n    /**\n     * Get the text style.\n     * @return {import(\"./Text.js\").default} Text style.\n     * @api\n     */\n    Style.prototype.getText = function () {\n        return this.text_;\n    };\n    /**\n     * Set the text style.\n     * @param {import(\"./Text.js\").default} text Text style.\n     * @api\n     */\n    Style.prototype.setText = function (text) {\n        this.text_ = text;\n    };\n    /**\n     * Get the z-index for the style.\n     * @return {number|undefined} ZIndex.\n     * @api\n     */\n    Style.prototype.getZIndex = function () {\n        return this.zIndex_;\n    };\n    /**\n     * Set a geometry that is rendered instead of the feature's geometry.\n     *\n     * @param {string|import(\"../geom/Geometry.js\").default|GeometryFunction} geometry\n     *     Feature property or geometry or function returning a geometry to render\n     *     for this style.\n     * @api\n     */\n    Style.prototype.setGeometry = function (geometry) {\n        if (typeof geometry === 'function') {\n            this.geometryFunction_ = geometry;\n        }\n        else if (typeof geometry === 'string') {\n            this.geometryFunction_ = function (feature) {\n                return /** @type {import(\"../geom/Geometry.js\").default} */ (feature.get(geometry));\n            };\n        }\n        else if (!geometry) {\n            this.geometryFunction_ = defaultGeometryFunction;\n        }\n        else if (geometry !== undefined) {\n            this.geometryFunction_ = function () {\n                return /** @type {import(\"../geom/Geometry.js\").default} */ (geometry);\n            };\n        }\n        this.geometry_ = geometry;\n    };\n    /**\n     * Set the z-index.\n     *\n     * @param {number|undefined} zIndex ZIndex.\n     * @api\n     */\n    Style.prototype.setZIndex = function (zIndex) {\n        this.zIndex_ = zIndex;\n    };\n    return Style;\n}());\n/**\n * Convert the provided object into a style function.  Functions passed through\n * unchanged.  Arrays of Style or single style objects wrapped in a\n * new style function.\n * @param {StyleFunction|Array<Style>|Style} obj\n *     A style function, a single style, or an array of styles.\n * @return {StyleFunction} A style function.\n */\nexport function toFunction(obj) {\n    var styleFunction;\n    if (typeof obj === 'function') {\n        styleFunction = obj;\n    }\n    else {\n        /**\n         * @type {Array<Style>}\n         */\n        var styles_1;\n        if (Array.isArray(obj)) {\n            styles_1 = obj;\n        }\n        else {\n            assert(typeof ( /** @type {?} */(obj).getZIndex) === 'function', 41); // Expected an `Style` or an array of `Style`\n            var style = /** @type {Style} */ (obj);\n            styles_1 = [style];\n        }\n        styleFunction = function () {\n            return styles_1;\n        };\n    }\n    return styleFunction;\n}\n/**\n * @type {Array<Style>}\n */\nvar defaultStyles = null;\n/**\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {number} resolution Resolution.\n * @return {Array<Style>} Style.\n */\nexport function createDefaultStyle(feature, resolution) {\n    // We don't use an immediately-invoked function\n    // and a closure so we don't get an error at script evaluation time in\n    // browsers that do not support Canvas. (import(\"./Circle.js\").CircleStyle does\n    // canvas.getContext('2d') at construction time, which will cause an.error\n    // in such browsers.)\n    if (!defaultStyles) {\n        var fill = new Fill({\n            color: 'rgba(255,255,255,0.4)',\n        });\n        var stroke = new Stroke({\n            color: '#3399CC',\n            width: 1.25,\n        });\n        defaultStyles = [\n            new Style({\n                image: new CircleStyle({\n                    fill: fill,\n                    stroke: stroke,\n                    radius: 5,\n                }),\n                fill: fill,\n                stroke: stroke,\n            }),\n        ];\n    }\n    return defaultStyles;\n}\n/**\n * Default styles for editing features.\n * @return {Object<import(\"../geom/GeometryType.js\").default, Array<Style>>} Styles\n */\nexport function createEditingStyle() {\n    /** @type {Object<import(\"../geom/GeometryType.js\").default, Array<Style>>} */\n    var styles = {};\n    var white = [255, 255, 255, 1];\n    var blue = [0, 153, 255, 1];\n    var width = 3;\n    styles[GeometryType.POLYGON] = [\n        new Style({\n            fill: new Fill({\n                color: [255, 255, 255, 0.5],\n            }),\n        }),\n    ];\n    styles[GeometryType.MULTI_POLYGON] = styles[GeometryType.POLYGON];\n    styles[GeometryType.LINE_STRING] = [\n        new Style({\n            stroke: new Stroke({\n                color: white,\n                width: width + 2,\n            }),\n        }),\n        new Style({\n            stroke: new Stroke({\n                color: blue,\n                width: width,\n            }),\n        }),\n    ];\n    styles[GeometryType.MULTI_LINE_STRING] = styles[GeometryType.LINE_STRING];\n    styles[GeometryType.CIRCLE] = styles[GeometryType.POLYGON].concat(styles[GeometryType.LINE_STRING]);\n    styles[GeometryType.POINT] = [\n        new Style({\n            image: new CircleStyle({\n                radius: width * 2,\n                fill: new Fill({\n                    color: blue,\n                }),\n                stroke: new Stroke({\n                    color: white,\n                    width: width / 2,\n                }),\n            }),\n            zIndex: Infinity,\n        }),\n    ];\n    styles[GeometryType.MULTI_POINT] = styles[GeometryType.POINT];\n    styles[GeometryType.GEOMETRY_COLLECTION] = styles[GeometryType.POLYGON].concat(styles[GeometryType.LINE_STRING], styles[GeometryType.POINT]);\n    return styles;\n}\n/**\n * Function that is called with a feature and returns its default geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature to get the geometry for.\n * @return {import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default|undefined} Geometry to render.\n */\nfunction defaultGeometryFunction(feature) {\n    return feature.getGeometry();\n}\nexport default Style;\n//# sourceMappingURL=Style.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\nimport Units from './Units.js';\nimport { cosh } from '../math.js';\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport var RADIUS = 6378137;\n/**\n * @const\n * @type {number}\n */\nexport var HALF_SIZE = Math.PI * RADIUS;\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport var EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport var WORLD_EXTENT = [-180, -85, 180, 85];\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport var MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nvar EPSG3857Projection = /** @class */ (function (_super) {\n    __extends(EPSG3857Projection, _super);\n    /**\n     * @param {string} code Code.\n     */\n    function EPSG3857Projection(code) {\n        return _super.call(this, {\n            code: code,\n            units: Units.METERS,\n            extent: EXTENT,\n            global: true,\n            worldExtent: WORLD_EXTENT,\n            getPointResolution: function (resolution, point) {\n                return resolution / cosh(point[1] / RADIUS);\n            },\n        }) || this;\n    }\n    return EPSG3857Projection;\n}(Projection));\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array<import(\"./Projection.js\").default>}\n */\nexport var PROJECTIONS = [\n    new EPSG3857Projection('EPSG:3857'),\n    new EPSG3857Projection('EPSG:102100'),\n    new EPSG3857Projection('EPSG:102113'),\n    new EPSG3857Projection('EPSG:900913'),\n    new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array<number>} input Input array of coordinate values.\n * @param {Array<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension (default is `2`).\n * @return {Array<number>} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, opt_output, opt_dimension) {\n    var length = input.length;\n    var dimension = opt_dimension > 1 ? opt_dimension : 2;\n    var output = opt_output;\n    if (output === undefined) {\n        if (dimension > 2) {\n            // preserve values beyond second dimension\n            output = input.slice();\n        }\n        else {\n            output = new Array(length);\n        }\n    }\n    for (var i = 0; i < length; i += dimension) {\n        output[i] = (HALF_SIZE * input[i]) / 180;\n        var y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n        if (y > MAX_SAFE_Y) {\n            y = MAX_SAFE_Y;\n        }\n        else if (y < -MAX_SAFE_Y) {\n            y = -MAX_SAFE_Y;\n        }\n        output[i + 1] = y;\n    }\n    return output;\n}\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array<number>} input Input array of coordinate values.\n * @param {Array<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension (default is `2`).\n * @return {Array<number>} Output array of coordinate values.\n */\nexport function toEPSG4326(input, opt_output, opt_dimension) {\n    var length = input.length;\n    var dimension = opt_dimension > 1 ? opt_dimension : 2;\n    var output = opt_output;\n    if (output === undefined) {\n        if (dimension > 2) {\n            // preserve values beyond second dimension\n            output = input.slice();\n        }\n        else {\n            output = new Array(length);\n        }\n    }\n    for (var i = 0; i < length; i += dimension) {\n        output[i] = (180 * input[i]) / HALF_SIZE;\n        output[i + 1] =\n            (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n    }\n    return output;\n}\n//# sourceMappingURL=epsg3857.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\nimport Units from './Units.js';\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport var RADIUS = 6378137;\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport var EXTENT = [-180, -90, 180, 90];\n/**\n * @const\n * @type {number}\n */\nexport var METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nvar EPSG4326Projection = /** @class */ (function (_super) {\n    __extends(EPSG4326Projection, _super);\n    /**\n     * @param {string} code Code.\n     * @param {string=} opt_axisOrientation Axis orientation.\n     */\n    function EPSG4326Projection(code, opt_axisOrientation) {\n        return _super.call(this, {\n            code: code,\n            units: Units.DEGREES,\n            extent: EXTENT,\n            axisOrientation: opt_axisOrientation,\n            global: true,\n            metersPerUnit: METERS_PER_UNIT,\n            worldExtent: EXTENT,\n        }) || this;\n    }\n    return EPSG4326Projection;\n}(Projection));\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array<import(\"./Projection.js\").default>}\n */\nexport var PROJECTIONS = [\n    new EPSG4326Projection('CRS:84'),\n    new EPSG4326Projection('EPSG:4326', 'neu'),\n    new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n    new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n    new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n];\n//# sourceMappingURL=epsg4326.js.map","/**\n * @module ol/proj/projections\n */\n/**\n * @type {Object<string, import(\"./Projection.js\").default>}\n */\nvar cache = {};\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n    cache = {};\n}\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default} The projection (if cached).\n */\nexport function get(code) {\n    return (cache[code] ||\n        cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n        null);\n}\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n    cache[code] = projection;\n}\n//# sourceMappingURL=projections.js.map","/**\n * @module ol/proj\n */\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj~addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection} object for the new projection and add it with\n * {@link module:ol/proj~addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj~addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection} with\n * {@link module:ol/proj~addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport Projection from './proj/Projection.js';\nimport Units, { METERS_PER_UNIT } from './proj/Units.js';\nimport { PROJECTIONS as EPSG3857_PROJECTIONS, fromEPSG4326, toEPSG4326, } from './proj/epsg3857.js';\nimport { PROJECTIONS as EPSG4326_PROJECTIONS } from './proj/epsg4326.js';\nimport { add as addProj, clear as clearProj, get as getProj, } from './proj/projections.js';\nimport { add as addTransformFunc, clear as clearTransformFuncs, get as getTransformFunc, } from './proj/transforms.js';\nimport { applyTransform, getWidth } from './extent.js';\nimport { clamp, modulo } from './math.js';\nimport { getDistance } from './sphere.js';\nimport { getWorldsAway } from './coordinate.js';\n/**\n * A projection as {@link module:ol/proj/Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2).  The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @typedef {function(Array<number>, Array<number>=, number=): Array<number>} TransformFunction\n * @api\n */\nexport { METERS_PER_UNIT };\nexport { Projection };\n/**\n * @param {Array<number>} input Input coordinate array.\n * @param {Array<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension.\n * @return {Array<number>} Output coordinate array (new array, same coordinate\n *     values).\n */\nexport function cloneTransform(input, opt_output, opt_dimension) {\n    var output;\n    if (opt_output !== undefined) {\n        for (var i = 0, ii = input.length; i < ii; ++i) {\n            opt_output[i] = input[i];\n        }\n        output = opt_output;\n    }\n    else {\n        output = input.slice();\n    }\n    return output;\n}\n/**\n * @param {Array<number>} input Input coordinate array.\n * @param {Array<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension.\n * @return {Array<number>} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, opt_output, opt_dimension) {\n    if (opt_output !== undefined && input !== opt_output) {\n        for (var i = 0, ii = input.length; i < ii; ++i) {\n            opt_output[i] = input[i];\n        }\n        input = opt_output;\n    }\n    return input;\n}\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n    addProj(projection.getCode(), projection);\n    addTransformFunc(projection, projection, cloneTransform);\n}\n/**\n * @param {Array<Projection>} projections Projections.\n */\nexport function addProjections(projections) {\n    projections.forEach(addProjection);\n}\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n *     a combination of authority and identifier such as \"EPSG:4326\", or an\n *     existing projection object, or undefined.\n * @return {Projection} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n    return typeof projectionLike === 'string'\n        ? getProj(/** @type {string} */ (projectionLike))\n        : /** @type {Projection} */ (projectionLike) || null;\n}\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the 'point' pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").default=} opt_units Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, opt_units) {\n    projection = get(projection);\n    var pointResolution;\n    var getter = projection.getPointResolutionFunc();\n    if (getter) {\n        pointResolution = getter(resolution, point);\n        if (opt_units && opt_units !== projection.getUnits()) {\n            var metersPerUnit = projection.getMetersPerUnit();\n            if (metersPerUnit) {\n                pointResolution =\n                    (pointResolution * metersPerUnit) / METERS_PER_UNIT[opt_units];\n            }\n        }\n    }\n    else {\n        var units = projection.getUnits();\n        if ((units == Units.DEGREES && !opt_units) || opt_units == Units.DEGREES) {\n            pointResolution = resolution;\n        }\n        else {\n            // Estimate point resolution by transforming the center pixel to EPSG:4326,\n            // measuring its width and height on the normal sphere, and taking the\n            // average of the width and height.\n            var toEPSG4326_1 = getTransformFromProjections(projection, get('EPSG:4326'));\n            if (toEPSG4326_1 === identityTransform && units !== Units.DEGREES) {\n                // no transform is available\n                pointResolution = resolution * projection.getMetersPerUnit();\n            }\n            else {\n                var vertices = [\n                    point[0] - resolution / 2,\n                    point[1],\n                    point[0] + resolution / 2,\n                    point[1],\n                    point[0],\n                    point[1] - resolution / 2,\n                    point[0],\n                    point[1] + resolution / 2,\n                ];\n                vertices = toEPSG4326_1(vertices, vertices, 2);\n                var width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n                var height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n                pointResolution = (width + height) / 2;\n            }\n            var metersPerUnit = opt_units\n                ? METERS_PER_UNIT[opt_units]\n                : projection.getMetersPerUnit();\n            if (metersPerUnit !== undefined) {\n                pointResolution /= metersPerUnit;\n            }\n        }\n    }\n    return pointResolution;\n}\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array<Projection>} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n    addProjections(projections);\n    projections.forEach(function (source) {\n        projections.forEach(function (destination) {\n            if (source !== destination) {\n                addTransformFunc(source, destination, cloneTransform);\n            }\n        });\n    });\n}\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array<Projection>} projections1 Projections with equal\n *     meaning.\n * @param {Array<Projection>} projections2 Projections with equal\n *     meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n *   projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n *   in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(projections1, projections2, forwardTransform, inverseTransform) {\n    projections1.forEach(function (projection1) {\n        projections2.forEach(function (projection2) {\n            addTransformFunc(projection1, projection2, forwardTransform);\n            addTransformFunc(projection2, projection1, inverseTransform);\n        });\n    });\n}\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n    clearProj();\n    clearTransformFuncs();\n}\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n    if (!projection) {\n        return get(defaultCode);\n    }\n    else if (typeof projection === 'string') {\n        return get(projection);\n    }\n    else {\n        return /** @type {Projection} */ (projection);\n    }\n}\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n *     transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n    return (\n    /**\n     * @param {Array<number>} input Input.\n     * @param {Array<number>=} opt_output Output.\n     * @param {number=} opt_dimension Dimension.\n     * @return {Array<number>} Output.\n     */\n    function (input, opt_output, opt_dimension) {\n        var length = input.length;\n        var dimension = opt_dimension !== undefined ? opt_dimension : 2;\n        var output = opt_output !== undefined ? opt_output : new Array(length);\n        for (var i = 0; i < length; i += dimension) {\n            var point = coordTransform([input[i], input[i + 1]]);\n            output[i] = point[0];\n            output[i + 1] = point[1];\n            for (var j = dimension - 1; j >= 2; --j) {\n                output[i + j] = input[i + j];\n            }\n        }\n        return output;\n    });\n}\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n *     function (that is, from the source projection to the destination\n *     projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n *     the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n *     function (that is, from the destination projection to the source\n *     projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n *     the transformed {@link module:ol/coordinate~Coordinate}.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n    var sourceProj = get(source);\n    var destProj = get(destination);\n    addTransformFunc(sourceProj, destProj, createTransformFromCoordinateTransform(forward));\n    addTransformFunc(destProj, sourceProj, createTransformFromCoordinateTransform(inverse));\n}\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n *     an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike=} opt_projection Target projection. The\n *     default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, opt_projection) {\n    return transform(coordinate, 'EPSG:4326', opt_projection !== undefined ? opt_projection : 'EPSG:3857');\n}\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike=} opt_projection Projection of the coordinate.\n *     The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n *     with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, opt_projection) {\n    var lonLat = transform(coordinate, opt_projection !== undefined ? opt_projection : 'EPSG:3857', 'EPSG:4326');\n    var lon = lonLat[0];\n    if (lon < -180 || lon > 180) {\n        lonLat[0] = modulo(lon + 180, 360) - 180;\n    }\n    return lonLat;\n}\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n    if (projection1 === projection2) {\n        return true;\n    }\n    var equalUnits = projection1.getUnits() === projection2.getUnits();\n    if (projection1.getCode() === projection2.getCode()) {\n        return equalUnits;\n    }\n    else {\n        var transformFunc = getTransformFromProjections(projection1, projection2);\n        return transformFunc === cloneTransform && equalUnits;\n    }\n}\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} sourceProjection Source Projection object.\n * @param {Projection} destinationProjection Destination Projection\n *     object.\n * @return {TransformFunction} Transform function.\n */\nexport function getTransformFromProjections(sourceProjection, destinationProjection) {\n    var sourceCode = sourceProjection.getCode();\n    var destinationCode = destinationProjection.getCode();\n    var transformFunc = getTransformFunc(sourceCode, destinationCode);\n    if (!transformFunc) {\n        transformFunc = identityTransform;\n    }\n    return transformFunc;\n}\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n    var sourceProjection = get(source);\n    var destinationProjection = get(destination);\n    return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original).\n *\n * See {@link module:ol/proj~transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n    var transformFunc = getTransform(source, destination);\n    return transformFunc(coordinate, undefined, coordinate.length);\n}\n/**\n * Transforms an extent from source projection to destination projection.  This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number=} opt_stops Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, opt_stops) {\n    var transformFunc = getTransform(source, destination);\n    return applyTransform(extent, transformFunc, undefined, opt_stops);\n}\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(point, sourceProjection, destinationProjection) {\n    var transformFunc = getTransformFromProjections(sourceProjection, destinationProjection);\n    return transformFunc(point);\n}\n/**\n * @type {?Projection}\n */\nvar userProjection = null;\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * Note that this method is not yet a part of the stable API.  Support for user\n * projections is not yet complete and should be considered experimental.\n * @param {ProjectionLike} projection The user projection.\n */\nexport function setUserProjection(projection) {\n    userProjection = get(projection);\n}\n/**\n * Clear the user projection if set.  Note that this method is not yet a part of\n * the stable API.  Support for user projections is not yet complete and should\n * be considered experimental.\n */\nexport function clearUserProjection() {\n    userProjection = null;\n}\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * Note that this method is not yet a part of the stable API.  Support for user\n * projections is not yet complete and should be considered experimental.\n * @returns {?Projection} The user projection (or null if not set).\n */\nexport function getUserProjection() {\n    return userProjection;\n}\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods.  Note that this\n * method is not yet a part of the stable API.  Support for user projections is\n * not yet complete and should be considered experimental.\n */\nexport function useGeographic() {\n    setUserProjection('EPSG:4326');\n}\n/**\n * Return a coordinate transformed into the user projection.  If no user projection\n * is set, the original coordinate is returned.\n * @param {Array<number>} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @returns {Array<number>} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n    if (!userProjection) {\n        return coordinate;\n    }\n    return transform(coordinate, sourceProjection, userProjection);\n}\n/**\n * Return a coordinate transformed from the user projection.  If no user projection\n * is set, the original coordinate is returned.\n * @param {Array<number>} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @returns {Array<number>} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n    if (!userProjection) {\n        return coordinate;\n    }\n    return transform(coordinate, userProjection, destProjection);\n}\n/**\n * Return an extent transformed into the user projection.  If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @returns {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n    if (!userProjection) {\n        return extent;\n    }\n    return transformExtent(extent, sourceProjection, userProjection);\n}\n/**\n * Return an extent transformed from the user projection.  If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @returns {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n    if (!userProjection) {\n        return extent;\n    }\n    return transformExtent(extent, userProjection, destProjection);\n}\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destiation).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destiation).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n    return function (coord) {\n        var sourceX = coord[0];\n        var sourceY = coord[1];\n        var transformed, worldsAway;\n        if (sourceProj.canWrapX()) {\n            var sourceExtent = sourceProj.getExtent();\n            var sourceExtentWidth = getWidth(sourceExtent);\n            worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n            if (worldsAway) {\n                // Move x to the real world\n                sourceX = sourceX - worldsAway * sourceExtentWidth;\n            }\n            sourceX = clamp(sourceX, sourceExtent[0], sourceExtent[2]);\n            sourceY = clamp(sourceY, sourceExtent[1], sourceExtent[3]);\n            transformed = transform([sourceX, sourceY]);\n        }\n        else {\n            transformed = transform(coord);\n        }\n        if (worldsAway && destProj.canWrapX()) {\n            // Move transformed coordinate back to the offset world\n            transformed[0] += worldsAway * getWidth(destProj.getExtent());\n        }\n        return transformed;\n    };\n}\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857.  This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n    // Add transformations that don't alter coordinates to convert within set of\n    // projections with equal meaning.\n    addEquivalentProjections(EPSG3857_PROJECTIONS);\n    addEquivalentProjections(EPSG4326_PROJECTIONS);\n    // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n    // coordinates and back.\n    addEquivalentTransforms(EPSG4326_PROJECTIONS, EPSG3857_PROJECTIONS, fromEPSG4326, toEPSG4326);\n}\naddCommon();\n//# sourceMappingURL=proj.js.map","/**\n * @module ol/geom/GeometryType\n */\n/**\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, `'Circle'`.\n * @enum {string}\n */\nexport default {\n    POINT: 'Point',\n    LINE_STRING: 'LineString',\n    LINEAR_RING: 'LinearRing',\n    POLYGON: 'Polygon',\n    MULTI_POINT: 'MultiPoint',\n    MULTI_LINE_STRING: 'MultiLineString',\n    MULTI_POLYGON: 'MultiPolygon',\n    GEOMETRY_COLLECTION: 'GeometryCollection',\n    CIRCLE: 'Circle',\n};\n//# sourceMappingURL=GeometryType.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = requiredArgs;\n\nfunction requiredArgs(required, args) {\n  if (args.length < required) {\n    throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n  }\n}\n\nmodule.exports = exports.default;","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/Feature\n */\nimport BaseObject, { getChangeEventType } from './Object.js';\nimport EventType from './events/EventType.js';\nimport { assert } from './asserts.js';\nimport { listen, unlistenByKey } from './events.js';\n/**\n * @typedef {typeof Feature|typeof import(\"./render/Feature.js\").default} FeatureClass\n */\n/**\n * @typedef {Feature|import(\"./render/Feature.js\").default} FeatureLike\n */\n/**\n * @classdesc\n * A vector object for geographic features with a geometry and other\n * attribute properties, similar to the features in vector file formats like\n * GeoJSON.\n *\n * Features can be styled individually with `setStyle`; otherwise they use the\n * style of their vector layer.\n *\n * Note that attribute properties are set as {@link module:ol/Object} properties on\n * the feature object, so they are observable, and have get/set accessors.\n *\n * Typically, a feature has a single geometry property. You can set the\n * geometry using the `setGeometry` method and get it with `getGeometry`.\n * It is possible to store more than one geometry on a feature using attribute\n * properties. By default, the geometry used for rendering is identified by\n * the property name `geometry`. If you want to use another geometry property\n * for rendering, use the `setGeometryName` method to change the attribute\n * property associated with the geometry for the feature.  For example:\n *\n * ```js\n *\n * import Feature from 'ol/Feature';\n * import Polygon from 'ol/geom/Polygon';\n * import Point from 'ol/geom/Point';\n *\n * var feature = new Feature({\n *   geometry: new Polygon(polyCoords),\n *   labelPoint: new Point(labelCoords),\n *   name: 'My Polygon'\n * });\n *\n * // get the polygon geometry\n * var poly = feature.getGeometry();\n *\n * // Render the feature as a point using the coordinates from labelPoint\n * feature.setGeometryName('labelPoint');\n *\n * // get the point geometry\n * var point = feature.getGeometry();\n * ```\n *\n * @api\n * @template {import(\"./geom/Geometry.js\").default} Geometry\n */\nvar Feature = /** @class */ (function (_super) {\n    __extends(Feature, _super);\n    /**\n     * @param {Geometry|Object<string, *>=} opt_geometryOrProperties\n     *     You may pass a Geometry object directly, or an object literal containing\n     *     properties. If you pass an object literal, you may include a Geometry\n     *     associated with a `geometry` key.\n     */\n    function Feature(opt_geometryOrProperties) {\n        var _this = _super.call(this) || this;\n        /**\n         * @private\n         * @type {number|string|undefined}\n         */\n        _this.id_ = undefined;\n        /**\n         * @type {string}\n         * @private\n         */\n        _this.geometryName_ = 'geometry';\n        /**\n         * User provided style.\n         * @private\n         * @type {import(\"./style/Style.js\").StyleLike}\n         */\n        _this.style_ = null;\n        /**\n         * @private\n         * @type {import(\"./style/Style.js\").StyleFunction|undefined}\n         */\n        _this.styleFunction_ = undefined;\n        /**\n         * @private\n         * @type {?import(\"./events.js\").EventsKey}\n         */\n        _this.geometryChangeKey_ = null;\n        _this.addEventListener(getChangeEventType(_this.geometryName_), _this.handleGeometryChanged_);\n        if (opt_geometryOrProperties) {\n            if (typeof (\n            /** @type {?} */ (opt_geometryOrProperties).getSimplifiedGeometry) === 'function') {\n                var geometry = /** @type {Geometry} */ (opt_geometryOrProperties);\n                _this.setGeometry(geometry);\n            }\n            else {\n                /** @type {Object<string, *>} */\n                var properties = opt_geometryOrProperties;\n                _this.setProperties(properties);\n            }\n        }\n        return _this;\n    }\n    /**\n     * Clone this feature. If the original feature has a geometry it\n     * is also cloned. The feature id is not set in the clone.\n     * @return {Feature} The clone.\n     * @api\n     */\n    Feature.prototype.clone = function () {\n        var clone = new Feature(this.hasProperties() ? this.getProperties() : null);\n        clone.setGeometryName(this.getGeometryName());\n        var geometry = this.getGeometry();\n        if (geometry) {\n            clone.setGeometry(geometry.clone());\n        }\n        var style = this.getStyle();\n        if (style) {\n            clone.setStyle(style);\n        }\n        return clone;\n    };\n    /**\n     * Get the feature's default geometry.  A feature may have any number of named\n     * geometries.  The \"default\" geometry (the one that is rendered by default) is\n     * set when calling {@link module:ol/Feature~Feature#setGeometry}.\n     * @return {Geometry|undefined} The default geometry for the feature.\n     * @api\n     * @observable\n     */\n    Feature.prototype.getGeometry = function () {\n        return /** @type {Geometry|undefined} */ (this.get(this.geometryName_));\n    };\n    /**\n     * Get the feature identifier.  This is a stable identifier for the feature and\n     * is either set when reading data from a remote source or set explicitly by\n     * calling {@link module:ol/Feature~Feature#setId}.\n     * @return {number|string|undefined} Id.\n     * @api\n     */\n    Feature.prototype.getId = function () {\n        return this.id_;\n    };\n    /**\n     * Get the name of the feature's default geometry.  By default, the default\n     * geometry is named `geometry`.\n     * @return {string} Get the property name associated with the default geometry\n     *     for this feature.\n     * @api\n     */\n    Feature.prototype.getGeometryName = function () {\n        return this.geometryName_;\n    };\n    /**\n     * Get the feature's style. Will return what was provided to the\n     * {@link module:ol/Feature~Feature#setStyle} method.\n     * @return {import(\"./style/Style.js\").StyleLike|undefined} The feature style.\n     * @api\n     */\n    Feature.prototype.getStyle = function () {\n        return this.style_;\n    };\n    /**\n     * Get the feature's style function.\n     * @return {import(\"./style/Style.js\").StyleFunction|undefined} Return a function\n     * representing the current style of this feature.\n     * @api\n     */\n    Feature.prototype.getStyleFunction = function () {\n        return this.styleFunction_;\n    };\n    /**\n     * @private\n     */\n    Feature.prototype.handleGeometryChange_ = function () {\n        this.changed();\n    };\n    /**\n     * @private\n     */\n    Feature.prototype.handleGeometryChanged_ = function () {\n        if (this.geometryChangeKey_) {\n            unlistenByKey(this.geometryChangeKey_);\n            this.geometryChangeKey_ = null;\n        }\n        var geometry = this.getGeometry();\n        if (geometry) {\n            this.geometryChangeKey_ = listen(geometry, EventType.CHANGE, this.handleGeometryChange_, this);\n        }\n        this.changed();\n    };\n    /**\n     * Set the default geometry for the feature.  This will update the property\n     * with the name returned by {@link module:ol/Feature~Feature#getGeometryName}.\n     * @param {Geometry|undefined} geometry The new geometry.\n     * @api\n     * @observable\n     */\n    Feature.prototype.setGeometry = function (geometry) {\n        this.set(this.geometryName_, geometry);\n    };\n    /**\n     * Set the style for the feature to override the layer style.  This can be a\n     * single style object, an array of styles, or a function that takes a\n     * resolution and returns an array of styles. To unset the feature style, call\n     * `setStyle()` without arguments or a falsey value.\n     * @param {import(\"./style/Style.js\").StyleLike=} opt_style Style for this feature.\n     * @api\n     * @fires module:ol/events/Event~BaseEvent#event:change\n     */\n    Feature.prototype.setStyle = function (opt_style) {\n        this.style_ = opt_style;\n        this.styleFunction_ = !opt_style\n            ? undefined\n            : createStyleFunction(opt_style);\n        this.changed();\n    };\n    /**\n     * Set the feature id.  The feature id is considered stable and may be used when\n     * requesting features or comparing identifiers returned from a remote source.\n     * The feature id can be used with the\n     * {@link module:ol/source/Vector~VectorSource#getFeatureById} method.\n     * @param {number|string|undefined} id The feature id.\n     * @api\n     * @fires module:ol/events/Event~BaseEvent#event:change\n     */\n    Feature.prototype.setId = function (id) {\n        this.id_ = id;\n        this.changed();\n    };\n    /**\n     * Set the property name to be used when getting the feature's default geometry.\n     * When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with\n     * this name will be returned.\n     * @param {string} name The property name of the default geometry.\n     * @api\n     */\n    Feature.prototype.setGeometryName = function (name) {\n        this.removeEventListener(getChangeEventType(this.geometryName_), this.handleGeometryChanged_);\n        this.geometryName_ = name;\n        this.addEventListener(getChangeEventType(this.geometryName_), this.handleGeometryChanged_);\n        this.handleGeometryChanged_();\n    };\n    return Feature;\n}(BaseObject));\n/**\n * Convert the provided object into a feature style function.  Functions passed\n * through unchanged.  Arrays of Style or single style objects wrapped\n * in a new feature style function.\n * @param {!import(\"./style/Style.js\").StyleFunction|!Array<import(\"./style/Style.js\").default>|!import(\"./style/Style.js\").default} obj\n *     A feature style function, a single style, or an array of styles.\n * @return {import(\"./style/Style.js\").StyleFunction} A style function.\n */\nexport function createStyleFunction(obj) {\n    if (typeof obj === 'function') {\n        return obj;\n    }\n    else {\n        /**\n         * @type {Array<import(\"./style/Style.js\").default>}\n         */\n        var styles_1;\n        if (Array.isArray(obj)) {\n            styles_1 = obj;\n        }\n        else {\n            assert(typeof ( /** @type {?} */(obj).getZIndex) === 'function', 41); // Expected an `import(\"./style/Style.js\").Style` or an array of `import(\"./style/Style.js\").Style`\n            var style = /** @type {import(\"./style/Style.js\").default} */ (obj);\n            styles_1 = [style];\n        }\n        return function () {\n            return styles_1;\n        };\n    }\n}\nexport default Feature;\n//# sourceMappingURL=Feature.js.map","define([\n\t\"./has\",\n\t\"./_base/lang\",\n\t\"./errors/CancelError\",\n\t\"./promise/Promise\",\n\t\"./has!config-deferredInstrumentation?./promise/instrumentation\"\n], function(has, lang, CancelError, Promise, instrumentation){\n\t\"use strict\";\n\n\t// module:\n\t//\t\tdojo/Deferred\n\n\tvar PROGRESS = 0,\n\t\t\tRESOLVED = 1,\n\t\t\tREJECTED = 2;\n\tvar FULFILLED_ERROR_MESSAGE = \"This deferred has already been fulfilled.\";\n\n\tvar freezeObject = Object.freeze || function(){};\n\n\tvar signalWaiting = function(waiting, type, result, rejection, deferred){\n\t\tif(has(\"config-deferredInstrumentation\")){\n\t\t\tif(type === REJECTED && Deferred.instrumentRejected && waiting.length === 0){\n\t\t\t\tDeferred.instrumentRejected(result, false, rejection, deferred);\n\t\t\t}\n\t\t}\n\n\t\tfor(var i = 0; i < waiting.length; i++){\n\t\t\tsignalListener(waiting[i], type, result, rejection);\n\t\t}\n\t};\n\n\tvar signalListener = function(listener, type, result, rejection){\n\t\tvar func = listener[type];\n\t\tvar deferred = listener.deferred;\n\t\tif(func){\n\t\t\ttry{\n\t\t\t\tvar newResult = func(result);\n\t\t\t\tif(type === PROGRESS){\n\t\t\t\t\tif(typeof newResult !== \"undefined\"){\n\t\t\t\t\t\tsignalDeferred(deferred, type, newResult);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(newResult && typeof newResult.then === \"function\"){\n\t\t\t\t\t\tlistener.cancel = newResult.cancel;\n\t\t\t\t\t\tnewResult.then(\n\t\t\t\t\t\t\t\t// Only make resolvers if they're actually going to be used\n\t\t\t\t\t\t\t\tmakeDeferredSignaler(deferred, RESOLVED),\n\t\t\t\t\t\t\t\tmakeDeferredSignaler(deferred, REJECTED),\n\t\t\t\t\t\t\t\tmakeDeferredSignaler(deferred, PROGRESS));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsignalDeferred(deferred, RESOLVED, newResult);\n\t\t\t\t}\n\t\t\t}catch(error){\n\t\t\t\tsignalDeferred(deferred, REJECTED, error);\n\t\t\t}\n\t\t}else{\n\t\t\tsignalDeferred(deferred, type, result);\n\t\t}\n\n\t\tif(has(\"config-deferredInstrumentation\")){\n\t\t\tif(type === REJECTED && Deferred.instrumentRejected){\n\t\t\t\tDeferred.instrumentRejected(result, !!func, rejection, deferred.promise);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar makeDeferredSignaler = function(deferred, type){\n\t\treturn function(value){\n\t\t\tsignalDeferred(deferred, type, value);\n\t\t};\n\t};\n\n\tvar signalDeferred = function(deferred, type, result){\n\t\tif(!deferred.isCanceled()){\n\t\t\tswitch(type){\n\t\t\t\tcase PROGRESS:\n\t\t\t\t\tdeferred.progress(result);\n\t\t\t\t\tbreak;\n\t\t\t\tcase RESOLVED:\n\t\t\t\t\tdeferred.resolve(result);\n\t\t\t\t\tbreak;\n\t\t\t\tcase REJECTED:\n\t\t\t\t\tdeferred.reject(result);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar Deferred = function(canceler){\n\t\t// summary:\n\t\t//\t\tCreates a new deferred. This API is preferred over\n\t\t//\t\t`dojo/_base/Deferred`.\n\t\t// description:\n\t\t//\t\tCreates a new deferred, as an abstraction over (primarily)\n\t\t//\t\tasynchronous operations. The deferred is the private interface\n\t\t//\t\tthat should not be returned to calling code. That's what the\n\t\t//\t\t`promise` is for. See `dojo/promise/Promise`.\n\t\t// canceler: Function?\n\t\t//\t\tWill be invoked if the deferred is canceled. The canceler\n\t\t//\t\treceives the reason the deferred was canceled as its argument.\n\t\t//\t\tThe deferred is rejected with its return value, or a new\n\t\t//\t\t`dojo/errors/CancelError` instance.\n\n\t\t// promise: dojo/promise/Promise\n\t\t//\t\tThe public promise object that clients can add callbacks to. \n\t\tvar promise = this.promise = new Promise();\n\n\t\tvar deferred = this;\n\t\tvar fulfilled, result, rejection;\n\t\tvar canceled = false;\n\t\tvar waiting = [];\n\n\t\tif(has(\"config-deferredInstrumentation\") && Error.captureStackTrace){\n\t\t\tError.captureStackTrace(deferred, Deferred);\n\t\t\tError.captureStackTrace(promise, Deferred);\n\t\t}\n\n\t\tthis.isResolved = promise.isResolved = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been resolved.\n\t\t\t// returns: Boolean\n\n\t\t\treturn fulfilled === RESOLVED;\n\t\t};\n\n\t\tthis.isRejected = promise.isRejected = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been rejected.\n\t\t\t// returns: Boolean\n\n\t\t\treturn fulfilled === REJECTED;\n\t\t};\n\n\t\tthis.isFulfilled = promise.isFulfilled = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been resolved or rejected.\n\t\t\t// returns: Boolean\n\n\t\t\treturn !!fulfilled;\n\t\t};\n\n\t\tthis.isCanceled = promise.isCanceled = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been canceled.\n\t\t\t// returns: Boolean\n\n\t\t\treturn canceled;\n\t\t};\n\n\t\tthis.progress = function(update, strict){\n\t\t\t// summary:\n\t\t\t//\t\tEmit a progress update on the deferred.\n\t\t\t// description:\n\t\t\t//\t\tEmit a progress update on the deferred. Progress updates\n\t\t\t//\t\tcan be used to communicate updates about the asynchronous\n\t\t\t//\t\toperation before it has finished.\n\t\t\t// update: any\n\t\t\t//\t\tThe progress update. Passed to progbacks.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently no progress can be emitted.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns the original promise for the deferred.\n\n\t\t\tif(!fulfilled){\n\t\t\t\tsignalWaiting(waiting, PROGRESS, update, null, deferred);\n\t\t\t\treturn promise;\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}else{\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t};\n\n\t\tthis.resolve = function(value, strict){\n\t\t\t// summary:\n\t\t\t//\t\tResolve the deferred.\n\t\t\t// description:\n\t\t\t//\t\tResolve the deferred, putting it in a success state.\n\t\t\t// value: any\n\t\t\t//\t\tThe result of the deferred. Passed to callbacks.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be resolved.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns the original promise for the deferred.\n\n\t\t\tif(!fulfilled){\n\t\t\t\t// Set fulfilled, store value. After signaling waiting listeners unset\n\t\t\t\t// waiting.\n\t\t\t\tsignalWaiting(waiting, fulfilled = RESOLVED, result = value, null, deferred);\n\t\t\t\twaiting = null;\n\t\t\t\treturn promise;\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}else{\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t};\n\n\t\tvar reject = this.reject = function(error, strict){\n\t\t\t// summary:\n\t\t\t//\t\tReject the deferred.\n\t\t\t// description:\n\t\t\t//\t\tReject the deferred, putting it in an error state.\n\t\t\t// error: any\n\t\t\t//\t\tThe error result of the deferred. Passed to errbacks.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be rejected.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns the original promise for the deferred.\n\n\t\t\tif(!fulfilled){\n\t\t\t\tif(has(\"config-deferredInstrumentation\") && Error.captureStackTrace){\n\t\t\t\t\tError.captureStackTrace(rejection = {}, reject);\n\t\t\t\t}\n\t\t\t\tsignalWaiting(waiting, fulfilled = REJECTED, result = error, rejection, deferred);\n\t\t\t\twaiting = null;\n\t\t\t\treturn promise;\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}else{\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t};\n\n\t\tthis.then = promise.then = function(callback, errback, progback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd new callbacks to the deferred.\n\t\t\t// description:\n\t\t\t//\t\tAdd new callbacks to the deferred. Callbacks can be added\n\t\t\t//\t\tbefore or after the deferred is fulfilled.\n\t\t\t// callback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is resolved.\n\t\t\t//\t\tReceives the resolution value.\n\t\t\t// errback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is rejected.\n\t\t\t//\t\tReceives the rejection error.\n\t\t\t// progback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise emits a progress\n\t\t\t//\t\tupdate. Receives the progress update.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the callback(s).\n\t\t\t//\t\tThis can be used for chaining many asynchronous operations.\n\n\t\t\tvar listener = [progback, callback, errback];\n\t\t\t// Ensure we cancel the promise we're waiting for, or if callback/errback\n\t\t\t// have returned a promise, cancel that one.\n\t\t\tlistener.cancel = promise.cancel;\n\t\t\tlistener.deferred = new Deferred(function(reason){\n\t\t\t\t// Check whether cancel is really available, returned promises are not\n\t\t\t\t// required to expose `cancel`\n\t\t\t\treturn listener.cancel && listener.cancel(reason);\n\t\t\t});\n\t\t\tif(fulfilled && !waiting){\n\t\t\t\tsignalListener(listener, fulfilled, result, rejection);\n\t\t\t}else{\n\t\t\t\twaiting.push(listener);\n\t\t\t}\n\t\t\treturn listener.deferred.promise;\n\t\t};\n\n\t\tthis.cancel = promise.cancel = function(reason, strict){\n\t\t\t// summary:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t// description:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t//\t\tThe deferred's (optional) canceler is invoked and the\n\t\t\t//\t\tdeferred will be left in a rejected state. Can affect other\n\t\t\t//\t\tpromises that originate with the same deferred.\n\t\t\t// reason: any\n\t\t\t//\t\tA message that may be sent to the deferred's canceler,\n\t\t\t//\t\texplaining why it's being canceled.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be canceled.\n\t\t\t// returns: any\n\t\t\t//\t\tReturns the rejection reason if the deferred was canceled\n\t\t\t//\t\tnormally.\n\n\t\t\tif(!fulfilled){\n\t\t\t\t// Cancel can be called even after the deferred is fulfilled\n\t\t\t\tif(canceler){\n\t\t\t\t\tvar returnedReason = canceler(reason);\n\t\t\t\t\treason = typeof returnedReason === \"undefined\" ? reason : returnedReason;\n\t\t\t\t}\n\t\t\t\tcanceled = true;\n\t\t\t\tif(!fulfilled){\n\t\t\t\t\t// Allow canceler to provide its own reason, but fall back to a CancelError\n\t\t\t\t\tif(typeof reason === \"undefined\"){\n\t\t\t\t\t\treason = new CancelError();\n\t\t\t\t\t}\n\t\t\t\t\treject(reason);\n\t\t\t\t\treturn reason;\n\t\t\t\t}else if(fulfilled === REJECTED && result === reason){\n\t\t\t\t\treturn reason;\n\t\t\t\t}\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}\n\t\t};\n\n\t\tfreezeObject(promise);\n\t};\n\n\tDeferred.prototype.toString = function(){\n\t\t// returns: String\n\t\t//\t\tReturns `[object Deferred]`.\n\n\t\treturn \"[object Deferred]\";\n\t};\n\n\tif(instrumentation){\n\t\tinstrumentation(Deferred);\n\t}\n\n\treturn Deferred;\n});\n","define([\"./aspect\", \"./on\"], function(aspect, on){\n\t// module:\n\t//\t\tdojo/Evented\n\n \t\"use strict\";\n \tvar after = aspect.after;\n\tfunction Evented(){\n\t\t// summary:\n\t\t//\t\tA class that can be used as a mixin or base class,\n\t\t//\t\tto add on() and emit() methods to a class\n\t\t//\t\tfor listening for events and emitting events:\n\t\t// example:\n\t\t//\t\t|\tdefine([\"dojo/Evented\", \"dojo/_base/declare\", \"dojo/Stateful\"\n\t\t//\t\t|\t], function(Evented, declare, Stateful){\n\t\t//\t\t|\t\tvar EventedStateful = declare([Evented, Stateful], {...});\n\t\t//\t\t|\t\tvar instance = new EventedStateful();\n\t\t//\t\t|\t\tinstance.on(\"open\", function(event){\n\t\t//\t\t|\t\t... do something with event\n\t\t//\t\t|\t });\n\t\t//\t\t|\n\t\t//\t\t|\tinstance.emit(\"open\", {name:\"some event\", ...});\n\t}\n\tEvented.prototype = {\n\t\ton: function(type, listener){\n\t\t\treturn on.parse(this, type, listener, function(target, type){\n\t\t\t\treturn after(target, 'on' + type, listener, true);\n\t\t\t});\n\t\t},\n\t\temit: function(type, event){\n\t\t\tvar args = [this];\n\t\t\targs.push.apply(args, arguments);\n\t\t\treturn on.emit.apply(on, args);\n\t\t}\n\t};\n\treturn Evented;\n});\n","/**\n * @module ol/style/Circle\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport RegularShape from './RegularShape.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} radius Circle radius.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {Array<number>} [displacement=[0,0]] displacement\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. A two dimensional scale will produce an ellipse.\n * Unless two dimensional scaling is required a better result may be obtained with an appropriate setting for `radius`.\n * @property {number} [rotation=0] Rotation in radians\n * (positive rotation clockwise, meaningful only when used in conjunction with a two dimensional scale).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view\n * (meaningful only when used in conjunction with a two dimensional scale).\n */\n/**\n * @classdesc\n * Set circle style for vector features.\n * @api\n */\nvar CircleStyle = /** @class */ (function (_super) {\n    __extends(CircleStyle, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function CircleStyle(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        _this = _super.call(this, {\n            points: Infinity,\n            fill: options.fill,\n            radius: options.radius,\n            stroke: options.stroke,\n            scale: options.scale !== undefined ? options.scale : 1,\n            rotation: options.rotation !== undefined ? options.rotation : 0,\n            rotateWithView: options.rotateWithView !== undefined ? options.rotateWithView : false,\n            displacement: options.displacement !== undefined ? options.displacement : [0, 0],\n        }) || this;\n        return _this;\n    }\n    /**\n     * Clones the style.\n     * @return {CircleStyle} The cloned style.\n     * @api\n     */\n    CircleStyle.prototype.clone = function () {\n        var scale = this.getScale();\n        var style = new CircleStyle({\n            fill: this.getFill() ? this.getFill().clone() : undefined,\n            stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n            radius: this.getRadius(),\n            scale: Array.isArray(scale) ? scale.slice() : scale,\n            rotation: this.getRotation(),\n            rotateWithView: this.getRotateWithView(),\n            displacement: this.getDisplacement().slice(),\n        });\n        style.setOpacity(this.getOpacity());\n        return style;\n    };\n    /**\n     * Set the circle radius.\n     *\n     * @param {number} radius Circle radius.\n     * @api\n     */\n    CircleStyle.prototype.setRadius = function (radius) {\n        this.radius_ = radius;\n        this.render();\n    };\n    return CircleStyle;\n}(RegularShape));\nexport default CircleStyle;\n//# sourceMappingURL=Circle.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/layer/BaseVector\n */\nimport Layer from './Layer.js';\nimport RBush from 'rbush';\nimport { assign } from '../obj.js';\nimport { createDefaultStyle, toFunction as toStyleFunction, } from '../style/Style.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"../render.js\").OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the viewport extent used by the\n * renderer when getting features from the vector source for the rendering or hit-detection.\n * Recommended value: the size of the largest symbol, line width or label.\n * @property {import(\"../source/Vector.js\").default} [source] Source.\n * @property {import(\"../PluggableMap.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link module:ol/Map#addLayer}.\n * @property {boolean} [declutter=false] Declutter images and text. Decluttering is applied to all\n * image and text styles of all Vector and VectorTile layers that have set this to `true`. The priority\n * is defined by the z-index of the layer, the `zIndex` of the style and the render order of features.\n * Higher z-index means higher priority. Within the same z-index, a feature rendered before another has\n * higher priority.\n * @property {import(\"../style/Style.js\").StyleLike|null} [style] Layer style. When set to `null`, only\n * features that have their own style will be rendered. See {@link module:ol/style} for default style\n * which will be used if this is not set.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will\n * be recreated during animations. This means that no vectors will be shown clipped, but the\n * setting will have a performance impact for large amounts of vector data. When set to `false`,\n * batches will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will\n * be recreated during interactions. See also `updateWhileAnimating`.\n */\n/**\n * @enum {string}\n * @private\n */\nvar Property = {\n    RENDER_ORDER: 'renderOrder',\n};\n/**\n * @classdesc\n * Vector data that is rendered client-side.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Vector.js\").default|import(\"../source/VectorTile.js\").default} VectorSourceType\n * @extends {Layer<VectorSourceType>}\n * @api\n */\nvar BaseVectorLayer = /** @class */ (function (_super) {\n    __extends(BaseVectorLayer, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function BaseVectorLayer(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        var baseOptions = assign({}, options);\n        delete baseOptions.style;\n        delete baseOptions.renderBuffer;\n        delete baseOptions.updateWhileAnimating;\n        delete baseOptions.updateWhileInteracting;\n        _this = _super.call(this, baseOptions) || this;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.declutter_ =\n            options.declutter !== undefined ? options.declutter : false;\n        /**\n         * @type {number}\n         * @private\n         */\n        _this.renderBuffer_ =\n            options.renderBuffer !== undefined ? options.renderBuffer : 100;\n        /**\n         * User provided style.\n         * @type {import(\"../style/Style.js\").StyleLike}\n         * @private\n         */\n        _this.style_ = null;\n        /**\n         * Style function for use within the library.\n         * @type {import(\"../style/Style.js\").StyleFunction|undefined}\n         * @private\n         */\n        _this.styleFunction_ = undefined;\n        _this.setStyle(options.style);\n        /**\n         * @type {boolean}\n         * @private\n         */\n        _this.updateWhileAnimating_ =\n            options.updateWhileAnimating !== undefined\n                ? options.updateWhileAnimating\n                : false;\n        /**\n         * @type {boolean}\n         * @private\n         */\n        _this.updateWhileInteracting_ =\n            options.updateWhileInteracting !== undefined\n                ? options.updateWhileInteracting\n                : false;\n        return _this;\n    }\n    /**\n     * @return {boolean} Declutter.\n     */\n    BaseVectorLayer.prototype.getDeclutter = function () {\n        return this.declutter_;\n    };\n    /**\n     * Get the topmost feature that intersects the given pixel on the viewport. Returns a promise\n     * that resolves with an array of features. The array will either contain the topmost feature\n     * when a hit was detected, or it will be empty.\n     *\n     * The hit detection algorithm used for this method is optimized for performance, but is less\n     * accurate than the one used in {@link import(\"../PluggableMap.js\").default#getFeaturesAtPixel}: Text\n     * is not considered, and icons are only represented by their bounding box instead of the exact\n     * image.\n     *\n     * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n     * @return {Promise<Array<import(\"../Feature\").default>>} Promise that resolves with an array of features.\n     * @api\n     */\n    BaseVectorLayer.prototype.getFeatures = function (pixel) {\n        return _super.prototype.getFeatures.call(this, pixel);\n    };\n    /**\n     * @return {number|undefined} Render buffer.\n     */\n    BaseVectorLayer.prototype.getRenderBuffer = function () {\n        return this.renderBuffer_;\n    };\n    /**\n     * @return {function(import(\"../Feature.js\").default, import(\"../Feature.js\").default): number|null|undefined} Render\n     *     order.\n     */\n    BaseVectorLayer.prototype.getRenderOrder = function () {\n        return /** @type {import(\"../render.js\").OrderFunction|null|undefined} */ (this.get(Property.RENDER_ORDER));\n    };\n    /**\n     * Get the style for features.  This returns whatever was passed to the `style`\n     * option at construction or to the `setStyle` method.\n     * @return {import(\"../style/Style.js\").StyleLike|null|undefined} Layer style.\n     * @api\n     */\n    BaseVectorLayer.prototype.getStyle = function () {\n        return this.style_;\n    };\n    /**\n     * Get the style function.\n     * @return {import(\"../style/Style.js\").StyleFunction|undefined} Layer style function.\n     * @api\n     */\n    BaseVectorLayer.prototype.getStyleFunction = function () {\n        return this.styleFunction_;\n    };\n    /**\n     * @return {boolean} Whether the rendered layer should be updated while\n     *     animating.\n     */\n    BaseVectorLayer.prototype.getUpdateWhileAnimating = function () {\n        return this.updateWhileAnimating_;\n    };\n    /**\n     * @return {boolean} Whether the rendered layer should be updated while\n     *     interacting.\n     */\n    BaseVectorLayer.prototype.getUpdateWhileInteracting = function () {\n        return this.updateWhileInteracting_;\n    };\n    /**\n     * Render declutter items for this layer\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     */\n    BaseVectorLayer.prototype.renderDeclutter = function (frameState) {\n        if (!frameState.declutterTree) {\n            frameState.declutterTree = new RBush(9);\n        }\n        /** @type {*} */ (this.getRenderer()).renderDeclutter(frameState);\n    };\n    /**\n     * @param {import(\"../render.js\").OrderFunction|null|undefined} renderOrder\n     *     Render order.\n     */\n    BaseVectorLayer.prototype.setRenderOrder = function (renderOrder) {\n        this.set(Property.RENDER_ORDER, renderOrder);\n    };\n    /**\n     * Set the style for features.  This can be a single style object, an array\n     * of styles, or a function that takes a feature and resolution and returns\n     * an array of styles. If set to `null`, the layer has no style (a `null` style),\n     * so only features that have their own styles will be rendered in the layer. Call\n     * `setStyle()` without arguments to reset to the default style. See\n     * {@link module:ol/style} for information on the default style.\n     * @param {(import(\"../style/Style.js\").StyleLike|null)=} opt_style Layer style.\n     * @api\n     */\n    BaseVectorLayer.prototype.setStyle = function (opt_style) {\n        this.style_ = opt_style !== undefined ? opt_style : createDefaultStyle;\n        this.styleFunction_ =\n            opt_style === null ? undefined : toStyleFunction(this.style_);\n        this.changed();\n    };\n    return BaseVectorLayer;\n}(Layer));\nexport default BaseVectorLayer;\n//# sourceMappingURL=BaseVector.js.map","/**\n * @module ol/render/canvas/Instruction\n */\n/**\n * @enum {number}\n */\nvar Instruction = {\n    BEGIN_GEOMETRY: 0,\n    BEGIN_PATH: 1,\n    CIRCLE: 2,\n    CLOSE_PATH: 3,\n    CUSTOM: 4,\n    DRAW_CHARS: 5,\n    DRAW_IMAGE: 6,\n    END_GEOMETRY: 7,\n    FILL: 8,\n    MOVE_TO_LINE_TO: 9,\n    SET_FILL_STYLE: 10,\n    SET_STROKE_STYLE: 11,\n    STROKE: 12,\n};\n/**\n * @type {Array<Instruction>}\n */\nexport var fillInstruction = [Instruction.FILL];\n/**\n * @type {Array<Instruction>}\n */\nexport var strokeInstruction = [Instruction.STROKE];\n/**\n * @type {Array<Instruction>}\n */\nexport var beginPathInstruction = [Instruction.BEGIN_PATH];\n/**\n * @type {Array<Instruction>}\n */\nexport var closePathInstruction = [Instruction.CLOSE_PATH];\nexport default Instruction;\n//# sourceMappingURL=Instruction.js.map","/**\n * @module ol/render/VectorContext\n */\n/**\n * @classdesc\n * Context for drawing geometries.  A vector context is available on render\n * events and does not need to be constructed directly.\n * @api\n */\nvar VectorContext = /** @class */ (function () {\n    function VectorContext() {\n    }\n    /**\n     * Render a geometry with a custom renderer.\n     *\n     * @param {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n     * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n     * @param {Function} renderer Renderer.\n     */\n    VectorContext.prototype.drawCustom = function (geometry, feature, renderer) { };\n    /**\n     * Render a geometry.\n     *\n     * @param {import(\"../geom/Geometry.js\").default} geometry The geometry to render.\n     */\n    VectorContext.prototype.drawGeometry = function (geometry) { };\n    /**\n     * Set the rendering style.\n     *\n     * @param {import(\"../style/Style.js\").default} style The rendering style.\n     */\n    VectorContext.prototype.setStyle = function (style) { };\n    /**\n     * @param {import(\"../geom/Circle.js\").default} circleGeometry Circle geometry.\n     * @param {import(\"../Feature.js\").default} feature Feature.\n     */\n    VectorContext.prototype.drawCircle = function (circleGeometry, feature) { };\n    /**\n     * @param {import(\"../Feature.js\").default} feature Feature.\n     * @param {import(\"../style/Style.js\").default} style Style.\n     */\n    VectorContext.prototype.drawFeature = function (feature, style) { };\n    /**\n     * @param {import(\"../geom/GeometryCollection.js\").default} geometryCollectionGeometry Geometry collection.\n     * @param {import(\"../Feature.js\").default} feature Feature.\n     */\n    VectorContext.prototype.drawGeometryCollection = function (geometryCollectionGeometry, feature) { };\n    /**\n     * @param {import(\"../geom/LineString.js\").default|import(\"./Feature.js\").default} lineStringGeometry Line string geometry.\n     * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n     */\n    VectorContext.prototype.drawLineString = function (lineStringGeometry, feature) { };\n    /**\n     * @param {import(\"../geom/MultiLineString.js\").default|import(\"./Feature.js\").default} multiLineStringGeometry MultiLineString geometry.\n     * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n     */\n    VectorContext.prototype.drawMultiLineString = function (multiLineStringGeometry, feature) { };\n    /**\n     * @param {import(\"../geom/MultiPoint.js\").default|import(\"./Feature.js\").default} multiPointGeometry MultiPoint geometry.\n     * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n     */\n    VectorContext.prototype.drawMultiPoint = function (multiPointGeometry, feature) { };\n    /**\n     * @param {import(\"../geom/MultiPolygon.js\").default} multiPolygonGeometry MultiPolygon geometry.\n     * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n     */\n    VectorContext.prototype.drawMultiPolygon = function (multiPolygonGeometry, feature) { };\n    /**\n     * @param {import(\"../geom/Point.js\").default|import(\"./Feature.js\").default} pointGeometry Point geometry.\n     * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n     */\n    VectorContext.prototype.drawPoint = function (pointGeometry, feature) { };\n    /**\n     * @param {import(\"../geom/Polygon.js\").default|import(\"./Feature.js\").default} polygonGeometry Polygon geometry.\n     * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n     */\n    VectorContext.prototype.drawPolygon = function (polygonGeometry, feature) { };\n    /**\n     * @param {import(\"../geom/SimpleGeometry.js\").default|import(\"./Feature.js\").default} geometry Geometry.\n     * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n     */\n    VectorContext.prototype.drawText = function (geometry, feature) { };\n    /**\n     * @param {import(\"../style/Fill.js\").default} fillStyle Fill style.\n     * @param {import(\"../style/Stroke.js\").default} strokeStyle Stroke style.\n     */\n    VectorContext.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) { };\n    /**\n     * @param {import(\"../style/Image.js\").default} imageStyle Image style.\n     * @param {import(\"../render/canvas.js\").DeclutterImageWithText=} opt_declutterImageWithText Shared data for combined decluttering with a text style.\n     */\n    VectorContext.prototype.setImageStyle = function (imageStyle, opt_declutterImageWithText) { };\n    /**\n     * @param {import(\"../style/Text.js\").default} textStyle Text style.\n     * @param {import(\"../render/canvas.js\").DeclutterImageWithText=} opt_declutterImageWithText Shared data for combined decluttering with an image style.\n     */\n    VectorContext.prototype.setTextStyle = function (textStyle, opt_declutterImageWithText) { };\n    return VectorContext;\n}());\nexport default VectorContext;\n//# sourceMappingURL=VectorContext.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/render/canvas/Builder\n */\nimport CanvasInstruction from './Instruction.js';\nimport GeometryType from '../../geom/GeometryType.js';\nimport Relationship from '../../extent/Relationship.js';\nimport VectorContext from '../VectorContext.js';\nimport { asColorLike } from '../../colorlike.js';\nimport { buffer, clone, containsCoordinate, coordinateRelationship, } from '../../extent.js';\nimport { defaultFillStyle, defaultLineCap, defaultLineDash, defaultLineDashOffset, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, } from '../canvas.js';\nimport { equals, reverseSubArray } from '../../array.js';\nimport { inflateCoordinates, inflateCoordinatesArray, inflateMultiCoordinatesArray, } from '../../geom/flat/inflate.js';\nvar CanvasBuilder = /** @class */ (function (_super) {\n    __extends(CanvasBuilder, _super);\n    /**\n     * @param {number} tolerance Tolerance.\n     * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     */\n    function CanvasBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n        var _this = _super.call(this) || this;\n        /**\n         * @protected\n         * @type {number}\n         */\n        _this.tolerance = tolerance;\n        /**\n         * @protected\n         * @const\n         * @type {import(\"../../extent.js\").Extent}\n         */\n        _this.maxExtent = maxExtent;\n        /**\n         * @protected\n         * @type {number}\n         */\n        _this.pixelRatio = pixelRatio;\n        /**\n         * @protected\n         * @type {number}\n         */\n        _this.maxLineWidth = 0;\n        /**\n         * @protected\n         * @const\n         * @type {number}\n         */\n        _this.resolution = resolution;\n        /**\n         * @private\n         * @type {Array<*>}\n         */\n        _this.beginGeometryInstruction1_ = null;\n        /**\n         * @private\n         * @type {Array<*>}\n         */\n        _this.beginGeometryInstruction2_ = null;\n        /**\n         * @private\n         * @type {import(\"../../extent.js\").Extent}\n         */\n        _this.bufferedMaxExtent_ = null;\n        /**\n         * @protected\n         * @type {Array<*>}\n         */\n        _this.instructions = [];\n        /**\n         * @protected\n         * @type {Array<number>}\n         */\n        _this.coordinates = [];\n        /**\n         * @private\n         * @type {import(\"../../coordinate.js\").Coordinate}\n         */\n        _this.tmpCoordinate_ = [];\n        /**\n         * @protected\n         * @type {Array<*>}\n         */\n        _this.hitDetectionInstructions = [];\n        /**\n         * @protected\n         * @type {import(\"../canvas.js\").FillStrokeState}\n         */\n        _this.state = /** @type {import(\"../canvas.js\").FillStrokeState} */ ({});\n        return _this;\n    }\n    /**\n     * @protected\n     * @param {Array<number>} dashArray Dash array.\n     * @return {Array<number>} Dash array with pixel ratio applied\n     */\n    CanvasBuilder.prototype.applyPixelRatio = function (dashArray) {\n        var pixelRatio = this.pixelRatio;\n        return pixelRatio == 1\n            ? dashArray\n            : dashArray.map(function (dash) {\n                return dash * pixelRatio;\n            });\n    };\n    /**\n     * @param {Array<number>} flatCoordinates Flat coordinates.\n     * @param {number} stride Stride.\n     * @protected\n     * @return {number} My end\n     */\n    CanvasBuilder.prototype.appendFlatPointCoordinates = function (flatCoordinates, stride) {\n        var extent = this.getBufferedMaxExtent();\n        var tmpCoord = this.tmpCoordinate_;\n        var coordinates = this.coordinates;\n        var myEnd = coordinates.length;\n        for (var i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n            tmpCoord[0] = flatCoordinates[i];\n            tmpCoord[1] = flatCoordinates[i + 1];\n            if (containsCoordinate(extent, tmpCoord)) {\n                coordinates[myEnd++] = tmpCoord[0];\n                coordinates[myEnd++] = tmpCoord[1];\n            }\n        }\n        return myEnd;\n    };\n    /**\n     * @param {Array<number>} flatCoordinates Flat coordinates.\n     * @param {number} offset Offset.\n     * @param {number} end End.\n     * @param {number} stride Stride.\n     * @param {boolean} closed Last input coordinate equals first.\n     * @param {boolean} skipFirst Skip first coordinate.\n     * @protected\n     * @return {number} My end.\n     */\n    CanvasBuilder.prototype.appendFlatLineCoordinates = function (flatCoordinates, offset, end, stride, closed, skipFirst) {\n        var coordinates = this.coordinates;\n        var myEnd = coordinates.length;\n        var extent = this.getBufferedMaxExtent();\n        if (skipFirst) {\n            offset += stride;\n        }\n        var lastXCoord = flatCoordinates[offset];\n        var lastYCoord = flatCoordinates[offset + 1];\n        var nextCoord = this.tmpCoordinate_;\n        var skipped = true;\n        var i, lastRel, nextRel;\n        for (i = offset + stride; i < end; i += stride) {\n            nextCoord[0] = flatCoordinates[i];\n            nextCoord[1] = flatCoordinates[i + 1];\n            nextRel = coordinateRelationship(extent, nextCoord);\n            if (nextRel !== lastRel) {\n                if (skipped) {\n                    coordinates[myEnd++] = lastXCoord;\n                    coordinates[myEnd++] = lastYCoord;\n                    skipped = false;\n                }\n                coordinates[myEnd++] = nextCoord[0];\n                coordinates[myEnd++] = nextCoord[1];\n            }\n            else if (nextRel === Relationship.INTERSECTING) {\n                coordinates[myEnd++] = nextCoord[0];\n                coordinates[myEnd++] = nextCoord[1];\n                skipped = false;\n            }\n            else {\n                skipped = true;\n            }\n            lastXCoord = nextCoord[0];\n            lastYCoord = nextCoord[1];\n            lastRel = nextRel;\n        }\n        // Last coordinate equals first or only one point to append:\n        if ((closed && skipped) || i === offset + stride) {\n            coordinates[myEnd++] = lastXCoord;\n            coordinates[myEnd++] = lastYCoord;\n        }\n        return myEnd;\n    };\n    /**\n     * @param {Array<number>} flatCoordinates Flat coordinates.\n     * @param {number} offset Offset.\n     * @param {Array<number>} ends Ends.\n     * @param {number} stride Stride.\n     * @param {Array<number>} builderEnds Builder ends.\n     * @return {number} Offset.\n     */\n    CanvasBuilder.prototype.drawCustomCoordinates_ = function (flatCoordinates, offset, ends, stride, builderEnds) {\n        for (var i = 0, ii = ends.length; i < ii; ++i) {\n            var end = ends[i];\n            var builderEnd = this.appendFlatLineCoordinates(flatCoordinates, offset, end, stride, false, false);\n            builderEnds.push(builderEnd);\n            offset = end;\n        }\n        return offset;\n    };\n    /**\n     * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     * @param {Function} renderer Renderer.\n     */\n    CanvasBuilder.prototype.drawCustom = function (geometry, feature, renderer) {\n        this.beginGeometry(geometry, feature);\n        var type = geometry.getType();\n        var stride = geometry.getStride();\n        var builderBegin = this.coordinates.length;\n        var flatCoordinates, builderEnd, builderEnds, builderEndss;\n        var offset;\n        if (type == GeometryType.MULTI_POLYGON) {\n            flatCoordinates = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getOrientedFlatCoordinates();\n            builderEndss = [];\n            var endss = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getEndss();\n            offset = 0;\n            for (var i = 0, ii = endss.length; i < ii; ++i) {\n                var myEnds = [];\n                offset = this.drawCustomCoordinates_(flatCoordinates, offset, endss[i], stride, myEnds);\n                builderEndss.push(myEnds);\n            }\n            this.instructions.push([\n                CanvasInstruction.CUSTOM,\n                builderBegin,\n                builderEndss,\n                geometry,\n                renderer,\n                inflateMultiCoordinatesArray,\n            ]);\n        }\n        else if (type == GeometryType.POLYGON ||\n            type == GeometryType.MULTI_LINE_STRING) {\n            builderEnds = [];\n            flatCoordinates =\n                type == GeometryType.POLYGON\n                    ? /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry).getOrientedFlatCoordinates()\n                    : geometry.getFlatCoordinates();\n            offset = this.drawCustomCoordinates_(flatCoordinates, 0, \n            /** @type {import(\"../../geom/Polygon.js\").default|import(\"../../geom/MultiLineString.js\").default} */ (geometry).getEnds(), stride, builderEnds);\n            this.instructions.push([\n                CanvasInstruction.CUSTOM,\n                builderBegin,\n                builderEnds,\n                geometry,\n                renderer,\n                inflateCoordinatesArray,\n            ]);\n        }\n        else if (type == GeometryType.LINE_STRING ||\n            type == GeometryType.CIRCLE) {\n            flatCoordinates = geometry.getFlatCoordinates();\n            builderEnd = this.appendFlatLineCoordinates(flatCoordinates, 0, flatCoordinates.length, stride, false, false);\n            this.instructions.push([\n                CanvasInstruction.CUSTOM,\n                builderBegin,\n                builderEnd,\n                geometry,\n                renderer,\n                inflateCoordinates,\n            ]);\n        }\n        else if (type == GeometryType.MULTI_POINT) {\n            flatCoordinates = geometry.getFlatCoordinates();\n            builderEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n            if (builderEnd > builderBegin) {\n                this.instructions.push([\n                    CanvasInstruction.CUSTOM,\n                    builderBegin,\n                    builderEnd,\n                    geometry,\n                    renderer,\n                    inflateCoordinates,\n                ]);\n            }\n        }\n        else if (type == GeometryType.POINT) {\n            flatCoordinates = geometry.getFlatCoordinates();\n            this.coordinates.push(flatCoordinates[0], flatCoordinates[1]);\n            builderEnd = this.coordinates.length;\n            this.instructions.push([\n                CanvasInstruction.CUSTOM,\n                builderBegin,\n                builderEnd,\n                geometry,\n                renderer,\n            ]);\n        }\n        this.endGeometry(feature);\n    };\n    /**\n     * @protected\n     * @param {import(\"../../geom/Geometry\").default|import(\"../Feature.js\").default} geometry The geometry.\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     */\n    CanvasBuilder.prototype.beginGeometry = function (geometry, feature) {\n        this.beginGeometryInstruction1_ = [\n            CanvasInstruction.BEGIN_GEOMETRY,\n            feature,\n            0,\n            geometry,\n        ];\n        this.instructions.push(this.beginGeometryInstruction1_);\n        this.beginGeometryInstruction2_ = [\n            CanvasInstruction.BEGIN_GEOMETRY,\n            feature,\n            0,\n            geometry,\n        ];\n        this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);\n    };\n    /**\n     * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n     */\n    CanvasBuilder.prototype.finish = function () {\n        return {\n            instructions: this.instructions,\n            hitDetectionInstructions: this.hitDetectionInstructions,\n            coordinates: this.coordinates,\n        };\n    };\n    /**\n     * Reverse the hit detection instructions.\n     */\n    CanvasBuilder.prototype.reverseHitDetectionInstructions = function () {\n        var hitDetectionInstructions = this.hitDetectionInstructions;\n        // step 1 - reverse array\n        hitDetectionInstructions.reverse();\n        // step 2 - reverse instructions within geometry blocks\n        var i;\n        var n = hitDetectionInstructions.length;\n        var instruction;\n        var type;\n        var begin = -1;\n        for (i = 0; i < n; ++i) {\n            instruction = hitDetectionInstructions[i];\n            type = /** @type {import(\"./Instruction.js\").default} */ (instruction[0]);\n            if (type == CanvasInstruction.END_GEOMETRY) {\n                begin = i;\n            }\n            else if (type == CanvasInstruction.BEGIN_GEOMETRY) {\n                instruction[2] = i;\n                reverseSubArray(this.hitDetectionInstructions, begin, i);\n                begin = -1;\n            }\n        }\n    };\n    /**\n     * @param {import(\"../../style/Fill.js\").default} fillStyle Fill style.\n     * @param {import(\"../../style/Stroke.js\").default} strokeStyle Stroke style.\n     */\n    CanvasBuilder.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) {\n        var state = this.state;\n        if (fillStyle) {\n            var fillStyleColor = fillStyle.getColor();\n            state.fillStyle = asColorLike(fillStyleColor ? fillStyleColor : defaultFillStyle);\n        }\n        else {\n            state.fillStyle = undefined;\n        }\n        if (strokeStyle) {\n            var strokeStyleColor = strokeStyle.getColor();\n            state.strokeStyle = asColorLike(strokeStyleColor ? strokeStyleColor : defaultStrokeStyle);\n            var strokeStyleLineCap = strokeStyle.getLineCap();\n            state.lineCap =\n                strokeStyleLineCap !== undefined ? strokeStyleLineCap : defaultLineCap;\n            var strokeStyleLineDash = strokeStyle.getLineDash();\n            state.lineDash = strokeStyleLineDash\n                ? strokeStyleLineDash.slice()\n                : defaultLineDash;\n            var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n            state.lineDashOffset = strokeStyleLineDashOffset\n                ? strokeStyleLineDashOffset\n                : defaultLineDashOffset;\n            var strokeStyleLineJoin = strokeStyle.getLineJoin();\n            state.lineJoin =\n                strokeStyleLineJoin !== undefined\n                    ? strokeStyleLineJoin\n                    : defaultLineJoin;\n            var strokeStyleWidth = strokeStyle.getWidth();\n            state.lineWidth =\n                strokeStyleWidth !== undefined ? strokeStyleWidth : defaultLineWidth;\n            var strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n            state.miterLimit =\n                strokeStyleMiterLimit !== undefined\n                    ? strokeStyleMiterLimit\n                    : defaultMiterLimit;\n            if (state.lineWidth > this.maxLineWidth) {\n                this.maxLineWidth = state.lineWidth;\n                // invalidate the buffered max extent cache\n                this.bufferedMaxExtent_ = null;\n            }\n        }\n        else {\n            state.strokeStyle = undefined;\n            state.lineCap = undefined;\n            state.lineDash = null;\n            state.lineDashOffset = undefined;\n            state.lineJoin = undefined;\n            state.lineWidth = undefined;\n            state.miterLimit = undefined;\n        }\n    };\n    /**\n     * @param {import(\"../canvas.js\").FillStrokeState} state State.\n     * @return {Array<*>} Fill instruction.\n     */\n    CanvasBuilder.prototype.createFill = function (state) {\n        var fillStyle = state.fillStyle;\n        /** @type {Array<*>} */\n        var fillInstruction = [CanvasInstruction.SET_FILL_STYLE, fillStyle];\n        if (typeof fillStyle !== 'string') {\n            // Fill is a pattern or gradient - align it!\n            fillInstruction.push(true);\n        }\n        return fillInstruction;\n    };\n    /**\n     * @param {import(\"../canvas.js\").FillStrokeState} state State.\n     */\n    CanvasBuilder.prototype.applyStroke = function (state) {\n        this.instructions.push(this.createStroke(state));\n    };\n    /**\n     * @param {import(\"../canvas.js\").FillStrokeState} state State.\n     * @return {Array<*>} Stroke instruction.\n     */\n    CanvasBuilder.prototype.createStroke = function (state) {\n        return [\n            CanvasInstruction.SET_STROKE_STYLE,\n            state.strokeStyle,\n            state.lineWidth * this.pixelRatio,\n            state.lineCap,\n            state.lineJoin,\n            state.miterLimit,\n            this.applyPixelRatio(state.lineDash),\n            state.lineDashOffset * this.pixelRatio,\n        ];\n    };\n    /**\n     * @param {import(\"../canvas.js\").FillStrokeState} state State.\n     * @param {function(this:CanvasBuilder, import(\"../canvas.js\").FillStrokeState):Array<*>} createFill Create fill.\n     */\n    CanvasBuilder.prototype.updateFillStyle = function (state, createFill) {\n        var fillStyle = state.fillStyle;\n        if (typeof fillStyle !== 'string' || state.currentFillStyle != fillStyle) {\n            if (fillStyle !== undefined) {\n                this.instructions.push(createFill.call(this, state));\n            }\n            state.currentFillStyle = fillStyle;\n        }\n    };\n    /**\n     * @param {import(\"../canvas.js\").FillStrokeState} state State.\n     * @param {function(this:CanvasBuilder, import(\"../canvas.js\").FillStrokeState): void} applyStroke Apply stroke.\n     */\n    CanvasBuilder.prototype.updateStrokeStyle = function (state, applyStroke) {\n        var strokeStyle = state.strokeStyle;\n        var lineCap = state.lineCap;\n        var lineDash = state.lineDash;\n        var lineDashOffset = state.lineDashOffset;\n        var lineJoin = state.lineJoin;\n        var lineWidth = state.lineWidth;\n        var miterLimit = state.miterLimit;\n        if (state.currentStrokeStyle != strokeStyle ||\n            state.currentLineCap != lineCap ||\n            (lineDash != state.currentLineDash &&\n                !equals(state.currentLineDash, lineDash)) ||\n            state.currentLineDashOffset != lineDashOffset ||\n            state.currentLineJoin != lineJoin ||\n            state.currentLineWidth != lineWidth ||\n            state.currentMiterLimit != miterLimit) {\n            if (strokeStyle !== undefined) {\n                applyStroke.call(this, state);\n            }\n            state.currentStrokeStyle = strokeStyle;\n            state.currentLineCap = lineCap;\n            state.currentLineDash = lineDash;\n            state.currentLineDashOffset = lineDashOffset;\n            state.currentLineJoin = lineJoin;\n            state.currentLineWidth = lineWidth;\n            state.currentMiterLimit = miterLimit;\n        }\n    };\n    /**\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     */\n    CanvasBuilder.prototype.endGeometry = function (feature) {\n        this.beginGeometryInstruction1_[2] = this.instructions.length;\n        this.beginGeometryInstruction1_ = null;\n        this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length;\n        this.beginGeometryInstruction2_ = null;\n        var endGeometryInstruction = [CanvasInstruction.END_GEOMETRY, feature];\n        this.instructions.push(endGeometryInstruction);\n        this.hitDetectionInstructions.push(endGeometryInstruction);\n    };\n    /**\n     * Get the buffered rendering extent.  Rendering will be clipped to the extent\n     * provided to the constructor.  To account for symbolizers that may intersect\n     * this extent, we calculate a buffered extent (e.g. based on stroke width).\n     * @return {import(\"../../extent.js\").Extent} The buffered rendering extent.\n     * @protected\n     */\n    CanvasBuilder.prototype.getBufferedMaxExtent = function () {\n        if (!this.bufferedMaxExtent_) {\n            this.bufferedMaxExtent_ = clone(this.maxExtent);\n            if (this.maxLineWidth > 0) {\n                var width = (this.resolution * (this.maxLineWidth + 1)) / 2;\n                buffer(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);\n            }\n        }\n        return this.bufferedMaxExtent_;\n    };\n    return CanvasBuilder;\n}(VectorContext));\nexport default CanvasBuilder;\n//# sourceMappingURL=Builder.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/render/canvas/ImageBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction from './Instruction.js';\nvar CanvasImageBuilder = /** @class */ (function (_super) {\n    __extends(CanvasImageBuilder, _super);\n    /**\n     * @param {number} tolerance Tolerance.\n     * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     */\n    function CanvasImageBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n        var _this = _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n        /**\n         * @private\n         * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}\n         */\n        _this.hitDetectionImage_ = null;\n        /**\n         * @private\n         * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}\n         */\n        _this.image_ = null;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.imagePixelRatio_ = undefined;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.anchorX_ = undefined;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.anchorY_ = undefined;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.height_ = undefined;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.opacity_ = undefined;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.originX_ = undefined;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.originY_ = undefined;\n        /**\n         * @private\n         * @type {boolean|undefined}\n         */\n        _this.rotateWithView_ = undefined;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.rotation_ = undefined;\n        /**\n         * @private\n         * @type {import(\"../../size.js\").Size|undefined}\n         */\n        _this.scale_ = undefined;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.width_ = undefined;\n        /**\n         * Data shared with a text builder for combined decluttering.\n         * @private\n         * @type {import(\"../canvas.js\").DeclutterImageWithText}\n         */\n        _this.declutterImageWithText_ = undefined;\n        return _this;\n    }\n    /**\n     * @param {import(\"../../geom/Point.js\").default|import(\"../Feature.js\").default} pointGeometry Point geometry.\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     */\n    CanvasImageBuilder.prototype.drawPoint = function (pointGeometry, feature) {\n        if (!this.image_) {\n            return;\n        }\n        this.beginGeometry(pointGeometry, feature);\n        var flatCoordinates = pointGeometry.getFlatCoordinates();\n        var stride = pointGeometry.getStride();\n        var myBegin = this.coordinates.length;\n        var myEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n        this.instructions.push([\n            CanvasInstruction.DRAW_IMAGE,\n            myBegin,\n            myEnd,\n            this.image_,\n            // Remaining arguments to DRAW_IMAGE are in alphabetical order\n            this.anchorX_ * this.imagePixelRatio_,\n            this.anchorY_ * this.imagePixelRatio_,\n            Math.ceil(this.height_ * this.imagePixelRatio_),\n            this.opacity_,\n            this.originX_,\n            this.originY_,\n            this.rotateWithView_,\n            this.rotation_,\n            [\n                (this.scale_[0] * this.pixelRatio) / this.imagePixelRatio_,\n                (this.scale_[1] * this.pixelRatio) / this.imagePixelRatio_,\n            ],\n            Math.ceil(this.width_ * this.imagePixelRatio_),\n            this.declutterImageWithText_,\n        ]);\n        this.hitDetectionInstructions.push([\n            CanvasInstruction.DRAW_IMAGE,\n            myBegin,\n            myEnd,\n            this.hitDetectionImage_,\n            // Remaining arguments to DRAW_IMAGE are in alphabetical order\n            this.anchorX_,\n            this.anchorY_,\n            this.height_,\n            this.opacity_,\n            this.originX_,\n            this.originY_,\n            this.rotateWithView_,\n            this.rotation_,\n            this.scale_,\n            this.width_,\n            this.declutterImageWithText_,\n        ]);\n        this.endGeometry(feature);\n    };\n    /**\n     * @param {import(\"../../geom/MultiPoint.js\").default|import(\"../Feature.js\").default} multiPointGeometry MultiPoint geometry.\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     */\n    CanvasImageBuilder.prototype.drawMultiPoint = function (multiPointGeometry, feature) {\n        if (!this.image_) {\n            return;\n        }\n        this.beginGeometry(multiPointGeometry, feature);\n        var flatCoordinates = multiPointGeometry.getFlatCoordinates();\n        var stride = multiPointGeometry.getStride();\n        var myBegin = this.coordinates.length;\n        var myEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n        this.instructions.push([\n            CanvasInstruction.DRAW_IMAGE,\n            myBegin,\n            myEnd,\n            this.image_,\n            // Remaining arguments to DRAW_IMAGE are in alphabetical order\n            this.anchorX_ * this.imagePixelRatio_,\n            this.anchorY_ * this.imagePixelRatio_,\n            Math.ceil(this.height_ * this.imagePixelRatio_),\n            this.opacity_,\n            this.originX_,\n            this.originY_,\n            this.rotateWithView_,\n            this.rotation_,\n            [\n                (this.scale_[0] * this.pixelRatio) / this.imagePixelRatio_,\n                (this.scale_[1] * this.pixelRatio) / this.imagePixelRatio_,\n            ],\n            Math.ceil(this.width_ * this.imagePixelRatio_),\n            this.declutterImageWithText_,\n        ]);\n        this.hitDetectionInstructions.push([\n            CanvasInstruction.DRAW_IMAGE,\n            myBegin,\n            myEnd,\n            this.hitDetectionImage_,\n            // Remaining arguments to DRAW_IMAGE are in alphabetical order\n            this.anchorX_,\n            this.anchorY_,\n            this.height_,\n            this.opacity_,\n            this.originX_,\n            this.originY_,\n            this.rotateWithView_,\n            this.rotation_,\n            this.scale_,\n            this.width_,\n            this.declutterImageWithText_,\n        ]);\n        this.endGeometry(feature);\n    };\n    /**\n     * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n     */\n    CanvasImageBuilder.prototype.finish = function () {\n        this.reverseHitDetectionInstructions();\n        // FIXME this doesn't really protect us against further calls to draw*Geometry\n        this.anchorX_ = undefined;\n        this.anchorY_ = undefined;\n        this.hitDetectionImage_ = null;\n        this.image_ = null;\n        this.imagePixelRatio_ = undefined;\n        this.height_ = undefined;\n        this.scale_ = undefined;\n        this.opacity_ = undefined;\n        this.originX_ = undefined;\n        this.originY_ = undefined;\n        this.rotateWithView_ = undefined;\n        this.rotation_ = undefined;\n        this.width_ = undefined;\n        return _super.prototype.finish.call(this);\n    };\n    /**\n     * @param {import(\"../../style/Image.js\").default} imageStyle Image style.\n     * @param {Object=} opt_sharedData Shared data.\n     */\n    CanvasImageBuilder.prototype.setImageStyle = function (imageStyle, opt_sharedData) {\n        var anchor = imageStyle.getAnchor();\n        var size = imageStyle.getSize();\n        var hitDetectionImage = imageStyle.getHitDetectionImage();\n        var image = imageStyle.getImage(this.pixelRatio);\n        var origin = imageStyle.getOrigin();\n        this.imagePixelRatio_ = imageStyle.getPixelRatio(this.pixelRatio);\n        this.anchorX_ = anchor[0];\n        this.anchorY_ = anchor[1];\n        this.hitDetectionImage_ = hitDetectionImage;\n        this.image_ = image;\n        this.height_ = size[1];\n        this.opacity_ = imageStyle.getOpacity();\n        this.originX_ = origin[0];\n        this.originY_ = origin[1];\n        this.rotateWithView_ = imageStyle.getRotateWithView();\n        this.rotation_ = imageStyle.getRotation();\n        this.scale_ = imageStyle.getScaleArray();\n        this.width_ = size[0];\n        this.declutterImageWithText_ = opt_sharedData;\n    };\n    return CanvasImageBuilder;\n}(CanvasBuilder));\nexport default CanvasImageBuilder;\n//# sourceMappingURL=ImageBuilder.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/render/canvas/LineStringBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction, { beginPathInstruction, strokeInstruction, } from './Instruction.js';\nvar CanvasLineStringBuilder = /** @class */ (function (_super) {\n    __extends(CanvasLineStringBuilder, _super);\n    /**\n     * @param {number} tolerance Tolerance.\n     * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     */\n    function CanvasLineStringBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n        return _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n    }\n    /**\n     * @param {Array<number>} flatCoordinates Flat coordinates.\n     * @param {number} offset Offset.\n     * @param {number} end End.\n     * @param {number} stride Stride.\n     * @private\n     * @return {number} end.\n     */\n    CanvasLineStringBuilder.prototype.drawFlatCoordinates_ = function (flatCoordinates, offset, end, stride) {\n        var myBegin = this.coordinates.length;\n        var myEnd = this.appendFlatLineCoordinates(flatCoordinates, offset, end, stride, false, false);\n        var moveToLineToInstruction = [\n            CanvasInstruction.MOVE_TO_LINE_TO,\n            myBegin,\n            myEnd,\n        ];\n        this.instructions.push(moveToLineToInstruction);\n        this.hitDetectionInstructions.push(moveToLineToInstruction);\n        return end;\n    };\n    /**\n     * @param {import(\"../../geom/LineString.js\").default|import(\"../Feature.js\").default} lineStringGeometry Line string geometry.\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     */\n    CanvasLineStringBuilder.prototype.drawLineString = function (lineStringGeometry, feature) {\n        var state = this.state;\n        var strokeStyle = state.strokeStyle;\n        var lineWidth = state.lineWidth;\n        if (strokeStyle === undefined || lineWidth === undefined) {\n            return;\n        }\n        this.updateStrokeStyle(state, this.applyStroke);\n        this.beginGeometry(lineStringGeometry, feature);\n        this.hitDetectionInstructions.push([\n            CanvasInstruction.SET_STROKE_STYLE,\n            state.strokeStyle,\n            state.lineWidth,\n            state.lineCap,\n            state.lineJoin,\n            state.miterLimit,\n            state.lineDash,\n            state.lineDashOffset,\n        ], beginPathInstruction);\n        var flatCoordinates = lineStringGeometry.getFlatCoordinates();\n        var stride = lineStringGeometry.getStride();\n        this.drawFlatCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);\n        this.hitDetectionInstructions.push(strokeInstruction);\n        this.endGeometry(feature);\n    };\n    /**\n     * @param {import(\"../../geom/MultiLineString.js\").default|import(\"../Feature.js\").default} multiLineStringGeometry MultiLineString geometry.\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     */\n    CanvasLineStringBuilder.prototype.drawMultiLineString = function (multiLineStringGeometry, feature) {\n        var state = this.state;\n        var strokeStyle = state.strokeStyle;\n        var lineWidth = state.lineWidth;\n        if (strokeStyle === undefined || lineWidth === undefined) {\n            return;\n        }\n        this.updateStrokeStyle(state, this.applyStroke);\n        this.beginGeometry(multiLineStringGeometry, feature);\n        this.hitDetectionInstructions.push([\n            CanvasInstruction.SET_STROKE_STYLE,\n            state.strokeStyle,\n            state.lineWidth,\n            state.lineCap,\n            state.lineJoin,\n            state.miterLimit,\n            state.lineDash,\n            state.lineDashOffset,\n        ], beginPathInstruction);\n        var ends = multiLineStringGeometry.getEnds();\n        var flatCoordinates = multiLineStringGeometry.getFlatCoordinates();\n        var stride = multiLineStringGeometry.getStride();\n        var offset = 0;\n        for (var i = 0, ii = ends.length; i < ii; ++i) {\n            offset = this.drawFlatCoordinates_(flatCoordinates, offset, \n            /** @type {number} */ (ends[i]), stride);\n        }\n        this.hitDetectionInstructions.push(strokeInstruction);\n        this.endGeometry(feature);\n    };\n    /**\n     * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n     */\n    CanvasLineStringBuilder.prototype.finish = function () {\n        var state = this.state;\n        if (state.lastStroke != undefined &&\n            state.lastStroke != this.coordinates.length) {\n            this.instructions.push(strokeInstruction);\n        }\n        this.reverseHitDetectionInstructions();\n        this.state = null;\n        return _super.prototype.finish.call(this);\n    };\n    /**\n     * @param {import(\"../canvas.js\").FillStrokeState} state State.\n     */\n    CanvasLineStringBuilder.prototype.applyStroke = function (state) {\n        if (state.lastStroke != undefined &&\n            state.lastStroke != this.coordinates.length) {\n            this.instructions.push(strokeInstruction);\n            state.lastStroke = this.coordinates.length;\n        }\n        state.lastStroke = 0;\n        _super.prototype.applyStroke.call(this, state);\n        this.instructions.push(beginPathInstruction);\n    };\n    return CanvasLineStringBuilder;\n}(CanvasBuilder));\nexport default CanvasLineStringBuilder;\n//# sourceMappingURL=LineStringBuilder.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/render/canvas/PolygonBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction, { beginPathInstruction, closePathInstruction, fillInstruction, strokeInstruction, } from './Instruction.js';\nimport { defaultFillStyle } from '../canvas.js';\nimport { snap } from '../../geom/flat/simplify.js';\nvar CanvasPolygonBuilder = /** @class */ (function (_super) {\n    __extends(CanvasPolygonBuilder, _super);\n    /**\n     * @param {number} tolerance Tolerance.\n     * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     */\n    function CanvasPolygonBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n        return _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n    }\n    /**\n     * @param {Array<number>} flatCoordinates Flat coordinates.\n     * @param {number} offset Offset.\n     * @param {Array<number>} ends Ends.\n     * @param {number} stride Stride.\n     * @private\n     * @return {number} End.\n     */\n    CanvasPolygonBuilder.prototype.drawFlatCoordinatess_ = function (flatCoordinates, offset, ends, stride) {\n        var state = this.state;\n        var fill = state.fillStyle !== undefined;\n        var stroke = state.strokeStyle !== undefined;\n        var numEnds = ends.length;\n        this.instructions.push(beginPathInstruction);\n        this.hitDetectionInstructions.push(beginPathInstruction);\n        for (var i = 0; i < numEnds; ++i) {\n            var end = ends[i];\n            var myBegin = this.coordinates.length;\n            var myEnd = this.appendFlatLineCoordinates(flatCoordinates, offset, end, stride, true, !stroke);\n            var moveToLineToInstruction = [\n                CanvasInstruction.MOVE_TO_LINE_TO,\n                myBegin,\n                myEnd,\n            ];\n            this.instructions.push(moveToLineToInstruction);\n            this.hitDetectionInstructions.push(moveToLineToInstruction);\n            if (stroke) {\n                // Performance optimization: only call closePath() when we have a stroke.\n                // Otherwise the ring is closed already (see appendFlatLineCoordinates above).\n                this.instructions.push(closePathInstruction);\n                this.hitDetectionInstructions.push(closePathInstruction);\n            }\n            offset = end;\n        }\n        if (fill) {\n            this.instructions.push(fillInstruction);\n            this.hitDetectionInstructions.push(fillInstruction);\n        }\n        if (stroke) {\n            this.instructions.push(strokeInstruction);\n            this.hitDetectionInstructions.push(strokeInstruction);\n        }\n        return offset;\n    };\n    /**\n     * @param {import(\"../../geom/Circle.js\").default} circleGeometry Circle geometry.\n     * @param {import(\"../../Feature.js\").default} feature Feature.\n     */\n    CanvasPolygonBuilder.prototype.drawCircle = function (circleGeometry, feature) {\n        var state = this.state;\n        var fillStyle = state.fillStyle;\n        var strokeStyle = state.strokeStyle;\n        if (fillStyle === undefined && strokeStyle === undefined) {\n            return;\n        }\n        this.setFillStrokeStyles_();\n        this.beginGeometry(circleGeometry, feature);\n        if (state.fillStyle !== undefined) {\n            this.hitDetectionInstructions.push([\n                CanvasInstruction.SET_FILL_STYLE,\n                defaultFillStyle,\n            ]);\n        }\n        if (state.strokeStyle !== undefined) {\n            this.hitDetectionInstructions.push([\n                CanvasInstruction.SET_STROKE_STYLE,\n                state.strokeStyle,\n                state.lineWidth,\n                state.lineCap,\n                state.lineJoin,\n                state.miterLimit,\n                state.lineDash,\n                state.lineDashOffset,\n            ]);\n        }\n        var flatCoordinates = circleGeometry.getFlatCoordinates();\n        var stride = circleGeometry.getStride();\n        var myBegin = this.coordinates.length;\n        this.appendFlatLineCoordinates(flatCoordinates, 0, flatCoordinates.length, stride, false, false);\n        var circleInstruction = [CanvasInstruction.CIRCLE, myBegin];\n        this.instructions.push(beginPathInstruction, circleInstruction);\n        this.hitDetectionInstructions.push(beginPathInstruction, circleInstruction);\n        if (state.fillStyle !== undefined) {\n            this.instructions.push(fillInstruction);\n            this.hitDetectionInstructions.push(fillInstruction);\n        }\n        if (state.strokeStyle !== undefined) {\n            this.instructions.push(strokeInstruction);\n            this.hitDetectionInstructions.push(strokeInstruction);\n        }\n        this.endGeometry(feature);\n    };\n    /**\n     * @param {import(\"../../geom/Polygon.js\").default|import(\"../Feature.js\").default} polygonGeometry Polygon geometry.\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     */\n    CanvasPolygonBuilder.prototype.drawPolygon = function (polygonGeometry, feature) {\n        var state = this.state;\n        var fillStyle = state.fillStyle;\n        var strokeStyle = state.strokeStyle;\n        if (fillStyle === undefined && strokeStyle === undefined) {\n            return;\n        }\n        this.setFillStrokeStyles_();\n        this.beginGeometry(polygonGeometry, feature);\n        if (state.fillStyle !== undefined) {\n            this.hitDetectionInstructions.push([\n                CanvasInstruction.SET_FILL_STYLE,\n                defaultFillStyle,\n            ]);\n        }\n        if (state.strokeStyle !== undefined) {\n            this.hitDetectionInstructions.push([\n                CanvasInstruction.SET_STROKE_STYLE,\n                state.strokeStyle,\n                state.lineWidth,\n                state.lineCap,\n                state.lineJoin,\n                state.miterLimit,\n                state.lineDash,\n                state.lineDashOffset,\n            ]);\n        }\n        var ends = polygonGeometry.getEnds();\n        var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates();\n        var stride = polygonGeometry.getStride();\n        this.drawFlatCoordinatess_(flatCoordinates, 0, \n        /** @type {Array<number>} */ (ends), stride);\n        this.endGeometry(feature);\n    };\n    /**\n     * @param {import(\"../../geom/MultiPolygon.js\").default} multiPolygonGeometry MultiPolygon geometry.\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     */\n    CanvasPolygonBuilder.prototype.drawMultiPolygon = function (multiPolygonGeometry, feature) {\n        var state = this.state;\n        var fillStyle = state.fillStyle;\n        var strokeStyle = state.strokeStyle;\n        if (fillStyle === undefined && strokeStyle === undefined) {\n            return;\n        }\n        this.setFillStrokeStyles_();\n        this.beginGeometry(multiPolygonGeometry, feature);\n        if (state.fillStyle !== undefined) {\n            this.hitDetectionInstructions.push([\n                CanvasInstruction.SET_FILL_STYLE,\n                defaultFillStyle,\n            ]);\n        }\n        if (state.strokeStyle !== undefined) {\n            this.hitDetectionInstructions.push([\n                CanvasInstruction.SET_STROKE_STYLE,\n                state.strokeStyle,\n                state.lineWidth,\n                state.lineCap,\n                state.lineJoin,\n                state.miterLimit,\n                state.lineDash,\n                state.lineDashOffset,\n            ]);\n        }\n        var endss = multiPolygonGeometry.getEndss();\n        var flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates();\n        var stride = multiPolygonGeometry.getStride();\n        var offset = 0;\n        for (var i = 0, ii = endss.length; i < ii; ++i) {\n            offset = this.drawFlatCoordinatess_(flatCoordinates, offset, endss[i], stride);\n        }\n        this.endGeometry(feature);\n    };\n    /**\n     * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n     */\n    CanvasPolygonBuilder.prototype.finish = function () {\n        this.reverseHitDetectionInstructions();\n        this.state = null;\n        // We want to preserve topology when drawing polygons.  Polygons are\n        // simplified using quantization and point elimination. However, we might\n        // have received a mix of quantized and non-quantized geometries, so ensure\n        // that all are quantized by quantizing all coordinates in the batch.\n        var tolerance = this.tolerance;\n        if (tolerance !== 0) {\n            var coordinates = this.coordinates;\n            for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n                coordinates[i] = snap(coordinates[i], tolerance);\n            }\n        }\n        return _super.prototype.finish.call(this);\n    };\n    /**\n     * @private\n     */\n    CanvasPolygonBuilder.prototype.setFillStrokeStyles_ = function () {\n        var state = this.state;\n        var fillStyle = state.fillStyle;\n        if (fillStyle !== undefined) {\n            this.updateFillStyle(state, this.createFill);\n        }\n        if (state.strokeStyle !== undefined) {\n            this.updateStrokeStyle(state, this.applyStroke);\n        }\n    };\n    return CanvasPolygonBuilder;\n}(CanvasBuilder));\nexport default CanvasPolygonBuilder;\n//# sourceMappingURL=PolygonBuilder.js.map","/**\n * @module ol/geom/flat/straightchunk\n */\n/**\n * @param {number} maxAngle Maximum acceptable angle delta between segments.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Array<number>} Start and end of the first suitable chunk of the\n * given `flatCoordinates`.\n */\nexport function matchingChunk(maxAngle, flatCoordinates, offset, end, stride) {\n    var chunkStart = offset;\n    var chunkEnd = offset;\n    var chunkM = 0;\n    var m = 0;\n    var start = offset;\n    var acos, i, m12, m23, x1, y1, x12, y12, x23, y23;\n    for (i = offset; i < end; i += stride) {\n        var x2 = flatCoordinates[i];\n        var y2 = flatCoordinates[i + 1];\n        if (x1 !== undefined) {\n            x23 = x2 - x1;\n            y23 = y2 - y1;\n            m23 = Math.sqrt(x23 * x23 + y23 * y23);\n            if (x12 !== undefined) {\n                m += m12;\n                acos = Math.acos((x12 * x23 + y12 * y23) / (m12 * m23));\n                if (acos > maxAngle) {\n                    if (m > chunkM) {\n                        chunkM = m;\n                        chunkStart = start;\n                        chunkEnd = i;\n                    }\n                    m = 0;\n                    start = i - stride;\n                }\n            }\n            m12 = m23;\n            x12 = x23;\n            y12 = y23;\n        }\n        x1 = x2;\n        y1 = y2;\n    }\n    m += m23;\n    return m > chunkM ? [start, i] : [chunkStart, chunkEnd];\n}\n//# sourceMappingURL=straightchunk.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/render/canvas/TextBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction from './Instruction.js';\nimport GeometryType from '../../geom/GeometryType.js';\nimport TextPlacement from '../../style/TextPlacement.js';\nimport { asColorLike } from '../../colorlike.js';\nimport { defaultFillStyle, defaultFont, defaultLineCap, defaultLineDash, defaultLineDashOffset, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultPadding, defaultStrokeStyle, defaultTextAlign, defaultTextBaseline, registerFont, } from '../canvas.js';\nimport { getUid } from '../../util.js';\nimport { intersects } from '../../extent.js';\nimport { matchingChunk } from '../../geom/flat/straightchunk.js';\n/**\n * @const\n * @enum {number}\n */\nexport var TEXT_ALIGN = {\n    'left': 0,\n    'end': 0,\n    'center': 0.5,\n    'right': 1,\n    'start': 1,\n    'top': 0,\n    'middle': 0.5,\n    'hanging': 0.2,\n    'alphabetic': 0.8,\n    'ideographic': 0.8,\n    'bottom': 1,\n};\nvar CanvasTextBuilder = /** @class */ (function (_super) {\n    __extends(CanvasTextBuilder, _super);\n    /**\n     * @param {number} tolerance Tolerance.\n     * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     */\n    function CanvasTextBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n        var _this = _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n        /**\n         * @private\n         * @type {Array<HTMLCanvasElement>}\n         */\n        _this.labels_ = null;\n        /**\n         * @private\n         * @type {string}\n         */\n        _this.text_ = '';\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.textOffsetX_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.textOffsetY_ = 0;\n        /**\n         * @private\n         * @type {boolean|undefined}\n         */\n        _this.textRotateWithView_ = undefined;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.textRotation_ = 0;\n        /**\n         * @private\n         * @type {?import(\"../canvas.js\").FillState}\n         */\n        _this.textFillState_ = null;\n        /**\n         * @type {!Object<string, import(\"../canvas.js\").FillState>}\n         */\n        _this.fillStates = {};\n        /**\n         * @private\n         * @type {?import(\"../canvas.js\").StrokeState}\n         */\n        _this.textStrokeState_ = null;\n        /**\n         * @type {!Object<string, import(\"../canvas.js\").StrokeState>}\n         */\n        _this.strokeStates = {};\n        /**\n         * @private\n         * @type {import(\"../canvas.js\").TextState}\n         */\n        _this.textState_ = /** @type {import(\"../canvas.js\").TextState} */ ({});\n        /**\n         * @type {!Object<string, import(\"../canvas.js\").TextState>}\n         */\n        _this.textStates = {};\n        /**\n         * @private\n         * @type {string}\n         */\n        _this.textKey_ = '';\n        /**\n         * @private\n         * @type {string}\n         */\n        _this.fillKey_ = '';\n        /**\n         * @private\n         * @type {string}\n         */\n        _this.strokeKey_ = '';\n        /**\n         * Data shared with an image builder for combined decluttering.\n         * @private\n         * @type {import(\"../canvas.js\").DeclutterImageWithText}\n         */\n        _this.declutterImageWithText_ = undefined;\n        return _this;\n    }\n    /**\n     * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n     */\n    CanvasTextBuilder.prototype.finish = function () {\n        var instructions = _super.prototype.finish.call(this);\n        instructions.textStates = this.textStates;\n        instructions.fillStates = this.fillStates;\n        instructions.strokeStates = this.strokeStates;\n        return instructions;\n    };\n    /**\n     * @param {import(\"../../geom/SimpleGeometry.js\").default|import(\"../Feature.js\").default} geometry Geometry.\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     */\n    CanvasTextBuilder.prototype.drawText = function (geometry, feature) {\n        var fillState = this.textFillState_;\n        var strokeState = this.textStrokeState_;\n        var textState = this.textState_;\n        if (this.text_ === '' || !textState || (!fillState && !strokeState)) {\n            return;\n        }\n        var coordinates = this.coordinates;\n        var begin = coordinates.length;\n        var geometryType = geometry.getType();\n        var flatCoordinates = null;\n        var stride = geometry.getStride();\n        if (textState.placement === TextPlacement.LINE &&\n            (geometryType == GeometryType.LINE_STRING ||\n                geometryType == GeometryType.MULTI_LINE_STRING ||\n                geometryType == GeometryType.POLYGON ||\n                geometryType == GeometryType.MULTI_POLYGON)) {\n            if (!intersects(this.getBufferedMaxExtent(), geometry.getExtent())) {\n                return;\n            }\n            var ends = void 0;\n            flatCoordinates = geometry.getFlatCoordinates();\n            if (geometryType == GeometryType.LINE_STRING) {\n                ends = [flatCoordinates.length];\n            }\n            else if (geometryType == GeometryType.MULTI_LINE_STRING) {\n                ends = /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry).getEnds();\n            }\n            else if (geometryType == GeometryType.POLYGON) {\n                ends = /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry)\n                    .getEnds()\n                    .slice(0, 1);\n            }\n            else if (geometryType == GeometryType.MULTI_POLYGON) {\n                var endss = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getEndss();\n                ends = [];\n                for (var i = 0, ii = endss.length; i < ii; ++i) {\n                    ends.push(endss[i][0]);\n                }\n            }\n            this.beginGeometry(geometry, feature);\n            var textAlign = textState.textAlign;\n            var flatOffset = 0;\n            var flatEnd = void 0;\n            for (var o = 0, oo = ends.length; o < oo; ++o) {\n                if (textAlign == undefined) {\n                    var range = matchingChunk(textState.maxAngle, flatCoordinates, flatOffset, ends[o], stride);\n                    flatOffset = range[0];\n                    flatEnd = range[1];\n                }\n                else {\n                    flatEnd = ends[o];\n                }\n                for (var i = flatOffset; i < flatEnd; i += stride) {\n                    coordinates.push(flatCoordinates[i], flatCoordinates[i + 1]);\n                }\n                var end = coordinates.length;\n                flatOffset = ends[o];\n                this.drawChars_(begin, end);\n                begin = end;\n            }\n            this.endGeometry(feature);\n        }\n        else {\n            var geometryWidths = textState.overflow ? null : [];\n            switch (geometryType) {\n                case GeometryType.POINT:\n                case GeometryType.MULTI_POINT:\n                    flatCoordinates = /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry).getFlatCoordinates();\n                    break;\n                case GeometryType.LINE_STRING:\n                    flatCoordinates = /** @type {import(\"../../geom/LineString.js\").default} */ (geometry).getFlatMidpoint();\n                    break;\n                case GeometryType.CIRCLE:\n                    flatCoordinates = /** @type {import(\"../../geom/Circle.js\").default} */ (geometry).getCenter();\n                    break;\n                case GeometryType.MULTI_LINE_STRING:\n                    flatCoordinates = /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry).getFlatMidpoints();\n                    stride = 2;\n                    break;\n                case GeometryType.POLYGON:\n                    flatCoordinates = /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry).getFlatInteriorPoint();\n                    if (!textState.overflow) {\n                        geometryWidths.push(flatCoordinates[2] / this.resolution);\n                    }\n                    stride = 3;\n                    break;\n                case GeometryType.MULTI_POLYGON:\n                    var interiorPoints = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getFlatInteriorPoints();\n                    flatCoordinates = [];\n                    for (var i = 0, ii = interiorPoints.length; i < ii; i += 3) {\n                        if (!textState.overflow) {\n                            geometryWidths.push(interiorPoints[i + 2] / this.resolution);\n                        }\n                        flatCoordinates.push(interiorPoints[i], interiorPoints[i + 1]);\n                    }\n                    if (flatCoordinates.length === 0) {\n                        return;\n                    }\n                    stride = 2;\n                    break;\n                default:\n            }\n            var end = this.appendFlatPointCoordinates(flatCoordinates, stride);\n            if (end === begin) {\n                return;\n            }\n            this.saveTextStates_();\n            if (textState.backgroundFill || textState.backgroundStroke) {\n                this.setFillStrokeStyle(textState.backgroundFill, textState.backgroundStroke);\n                if (textState.backgroundFill) {\n                    this.updateFillStyle(this.state, this.createFill);\n                    this.hitDetectionInstructions.push(this.createFill(this.state));\n                }\n                if (textState.backgroundStroke) {\n                    this.updateStrokeStyle(this.state, this.applyStroke);\n                    this.hitDetectionInstructions.push(this.createStroke(this.state));\n                }\n            }\n            this.beginGeometry(geometry, feature);\n            // adjust padding for negative scale\n            var padding = textState.padding;\n            if (padding != defaultPadding &&\n                (textState.scale[0] < 0 || textState.scale[1] < 0)) {\n                var p0 = textState.padding[0];\n                var p1 = textState.padding[1];\n                var p2 = textState.padding[2];\n                var p3 = textState.padding[3];\n                if (textState.scale[0] < 0) {\n                    p1 = -p1;\n                    p3 = -p3;\n                }\n                if (textState.scale[1] < 0) {\n                    p0 = -p0;\n                    p2 = -p2;\n                }\n                padding = [p0, p1, p2, p3];\n            }\n            // The image is unknown at this stage so we pass null; it will be computed at render time.\n            // For clarity, we pass NaN for offsetX, offsetY, width and height, which will be computed at\n            // render time.\n            var pixelRatio_1 = this.pixelRatio;\n            this.instructions.push([\n                CanvasInstruction.DRAW_IMAGE,\n                begin,\n                end,\n                null,\n                NaN,\n                NaN,\n                NaN,\n                1,\n                0,\n                0,\n                this.textRotateWithView_,\n                this.textRotation_,\n                [1, 1],\n                NaN,\n                this.declutterImageWithText_,\n                padding == defaultPadding\n                    ? defaultPadding\n                    : padding.map(function (p) {\n                        return p * pixelRatio_1;\n                    }),\n                !!textState.backgroundFill,\n                !!textState.backgroundStroke,\n                this.text_,\n                this.textKey_,\n                this.strokeKey_,\n                this.fillKey_,\n                this.textOffsetX_,\n                this.textOffsetY_,\n                geometryWidths,\n            ]);\n            var scale = 1 / pixelRatio_1;\n            this.hitDetectionInstructions.push([\n                CanvasInstruction.DRAW_IMAGE,\n                begin,\n                end,\n                null,\n                NaN,\n                NaN,\n                NaN,\n                1,\n                0,\n                0,\n                this.textRotateWithView_,\n                this.textRotation_,\n                [scale, scale],\n                NaN,\n                this.declutterImageWithText_,\n                padding,\n                !!textState.backgroundFill,\n                !!textState.backgroundStroke,\n                this.text_,\n                this.textKey_,\n                this.strokeKey_,\n                this.fillKey_,\n                this.textOffsetX_,\n                this.textOffsetY_,\n                geometryWidths,\n            ]);\n            this.endGeometry(feature);\n        }\n    };\n    /**\n     * @private\n     */\n    CanvasTextBuilder.prototype.saveTextStates_ = function () {\n        var strokeState = this.textStrokeState_;\n        var textState = this.textState_;\n        var fillState = this.textFillState_;\n        var strokeKey = this.strokeKey_;\n        if (strokeState) {\n            if (!(strokeKey in this.strokeStates)) {\n                this.strokeStates[strokeKey] = {\n                    strokeStyle: strokeState.strokeStyle,\n                    lineCap: strokeState.lineCap,\n                    lineDashOffset: strokeState.lineDashOffset,\n                    lineWidth: strokeState.lineWidth,\n                    lineJoin: strokeState.lineJoin,\n                    miterLimit: strokeState.miterLimit,\n                    lineDash: strokeState.lineDash,\n                };\n            }\n        }\n        var textKey = this.textKey_;\n        if (!(textKey in this.textStates)) {\n            this.textStates[textKey] = {\n                font: textState.font,\n                textAlign: textState.textAlign || defaultTextAlign,\n                textBaseline: textState.textBaseline || defaultTextBaseline,\n                scale: textState.scale,\n            };\n        }\n        var fillKey = this.fillKey_;\n        if (fillState) {\n            if (!(fillKey in this.fillStates)) {\n                this.fillStates[fillKey] = {\n                    fillStyle: fillState.fillStyle,\n                };\n            }\n        }\n    };\n    /**\n     * @private\n     * @param {number} begin Begin.\n     * @param {number} end End.\n     */\n    CanvasTextBuilder.prototype.drawChars_ = function (begin, end) {\n        var strokeState = this.textStrokeState_;\n        var textState = this.textState_;\n        var strokeKey = this.strokeKey_;\n        var textKey = this.textKey_;\n        var fillKey = this.fillKey_;\n        this.saveTextStates_();\n        var pixelRatio = this.pixelRatio;\n        var baseline = TEXT_ALIGN[textState.textBaseline];\n        var offsetY = this.textOffsetY_ * pixelRatio;\n        var text = this.text_;\n        var strokeWidth = strokeState\n            ? (strokeState.lineWidth * Math.abs(textState.scale[0])) / 2\n            : 0;\n        this.instructions.push([\n            CanvasInstruction.DRAW_CHARS,\n            begin,\n            end,\n            baseline,\n            textState.overflow,\n            fillKey,\n            textState.maxAngle,\n            pixelRatio,\n            offsetY,\n            strokeKey,\n            strokeWidth * pixelRatio,\n            text,\n            textKey,\n            1,\n        ]);\n        this.hitDetectionInstructions.push([\n            CanvasInstruction.DRAW_CHARS,\n            begin,\n            end,\n            baseline,\n            textState.overflow,\n            fillKey,\n            textState.maxAngle,\n            1,\n            offsetY,\n            strokeKey,\n            strokeWidth,\n            text,\n            textKey,\n            1 / pixelRatio,\n        ]);\n    };\n    /**\n     * @param {import(\"../../style/Text.js\").default} textStyle Text style.\n     * @param {Object=} opt_sharedData Shared data.\n     */\n    CanvasTextBuilder.prototype.setTextStyle = function (textStyle, opt_sharedData) {\n        var textState, fillState, strokeState;\n        if (!textStyle) {\n            this.text_ = '';\n        }\n        else {\n            var textFillStyle = textStyle.getFill();\n            if (!textFillStyle) {\n                fillState = null;\n                this.textFillState_ = fillState;\n            }\n            else {\n                fillState = this.textFillState_;\n                if (!fillState) {\n                    fillState = /** @type {import(\"../canvas.js\").FillState} */ ({});\n                    this.textFillState_ = fillState;\n                }\n                fillState.fillStyle = asColorLike(textFillStyle.getColor() || defaultFillStyle);\n            }\n            var textStrokeStyle = textStyle.getStroke();\n            if (!textStrokeStyle) {\n                strokeState = null;\n                this.textStrokeState_ = strokeState;\n            }\n            else {\n                strokeState = this.textStrokeState_;\n                if (!strokeState) {\n                    strokeState = /** @type {import(\"../canvas.js\").StrokeState} */ ({});\n                    this.textStrokeState_ = strokeState;\n                }\n                var lineDash = textStrokeStyle.getLineDash();\n                var lineDashOffset = textStrokeStyle.getLineDashOffset();\n                var lineWidth = textStrokeStyle.getWidth();\n                var miterLimit = textStrokeStyle.getMiterLimit();\n                strokeState.lineCap = textStrokeStyle.getLineCap() || defaultLineCap;\n                strokeState.lineDash = lineDash ? lineDash.slice() : defaultLineDash;\n                strokeState.lineDashOffset =\n                    lineDashOffset === undefined ? defaultLineDashOffset : lineDashOffset;\n                strokeState.lineJoin = textStrokeStyle.getLineJoin() || defaultLineJoin;\n                strokeState.lineWidth =\n                    lineWidth === undefined ? defaultLineWidth : lineWidth;\n                strokeState.miterLimit =\n                    miterLimit === undefined ? defaultMiterLimit : miterLimit;\n                strokeState.strokeStyle = asColorLike(textStrokeStyle.getColor() || defaultStrokeStyle);\n            }\n            textState = this.textState_;\n            var font = textStyle.getFont() || defaultFont;\n            registerFont(font);\n            var textScale = textStyle.getScaleArray();\n            textState.overflow = textStyle.getOverflow();\n            textState.font = font;\n            textState.maxAngle = textStyle.getMaxAngle();\n            textState.placement = textStyle.getPlacement();\n            textState.textAlign = textStyle.getTextAlign();\n            textState.textBaseline =\n                textStyle.getTextBaseline() || defaultTextBaseline;\n            textState.backgroundFill = textStyle.getBackgroundFill();\n            textState.backgroundStroke = textStyle.getBackgroundStroke();\n            textState.padding = textStyle.getPadding() || defaultPadding;\n            textState.scale = textScale === undefined ? [1, 1] : textScale;\n            var textOffsetX = textStyle.getOffsetX();\n            var textOffsetY = textStyle.getOffsetY();\n            var textRotateWithView = textStyle.getRotateWithView();\n            var textRotation = textStyle.getRotation();\n            this.text_ = textStyle.getText() || '';\n            this.textOffsetX_ = textOffsetX === undefined ? 0 : textOffsetX;\n            this.textOffsetY_ = textOffsetY === undefined ? 0 : textOffsetY;\n            this.textRotateWithView_ =\n                textRotateWithView === undefined ? false : textRotateWithView;\n            this.textRotation_ = textRotation === undefined ? 0 : textRotation;\n            this.strokeKey_ = strokeState\n                ? (typeof strokeState.strokeStyle == 'string'\n                    ? strokeState.strokeStyle\n                    : getUid(strokeState.strokeStyle)) +\n                    strokeState.lineCap +\n                    strokeState.lineDashOffset +\n                    '|' +\n                    strokeState.lineWidth +\n                    strokeState.lineJoin +\n                    strokeState.miterLimit +\n                    '[' +\n                    strokeState.lineDash.join() +\n                    ']'\n                : '';\n            this.textKey_ =\n                textState.font +\n                    textState.scale +\n                    (textState.textAlign || '?') +\n                    (textState.textBaseline || '?');\n            this.fillKey_ = fillState\n                ? typeof fillState.fillStyle == 'string'\n                    ? fillState.fillStyle\n                    : '|' + getUid(fillState.fillStyle)\n                : '';\n        }\n        this.declutterImageWithText_ = opt_sharedData;\n    };\n    return CanvasTextBuilder;\n}(CanvasBuilder));\nexport default CanvasTextBuilder;\n//# sourceMappingURL=TextBuilder.js.map","/**\n * @module ol/render/canvas/BuilderGroup\n */\nimport Builder from './Builder.js';\nimport ImageBuilder from './ImageBuilder.js';\nimport LineStringBuilder from './LineStringBuilder.js';\nimport PolygonBuilder from './PolygonBuilder.js';\nimport TextBuilder from './TextBuilder.js';\n/**\n * @type {Object<import(\"./BuilderType\").default, typeof Builder>}\n */\nvar BATCH_CONSTRUCTORS = {\n    'Circle': PolygonBuilder,\n    'Default': Builder,\n    'Image': ImageBuilder,\n    'LineString': LineStringBuilder,\n    'Polygon': PolygonBuilder,\n    'Text': TextBuilder,\n};\nvar BuilderGroup = /** @class */ (function () {\n    /**\n     * @param {number} tolerance Tolerance.\n     * @param {import(\"../../extent.js\").Extent} maxExtent Max extent.\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     */\n    function BuilderGroup(tolerance, maxExtent, resolution, pixelRatio) {\n        /**\n         * @private\n         * @type {number}\n         */\n        this.tolerance_ = tolerance;\n        /**\n         * @private\n         * @type {import(\"../../extent.js\").Extent}\n         */\n        this.maxExtent_ = maxExtent;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.pixelRatio_ = pixelRatio;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.resolution_ = resolution;\n        /**\n         * @private\n         * @type {!Object<string, !Object<import(\"./BuilderType\").default, Builder>>}\n         */\n        this.buildersByZIndex_ = {};\n    }\n    /**\n     * @return {!Object<string, !Object<import(\"./BuilderType\").default, import(\"./Builder.js\").SerializableInstructions>>} The serializable instructions\n     */\n    BuilderGroup.prototype.finish = function () {\n        var builderInstructions = {};\n        for (var zKey in this.buildersByZIndex_) {\n            builderInstructions[zKey] = builderInstructions[zKey] || {};\n            var builders = this.buildersByZIndex_[zKey];\n            for (var builderKey in builders) {\n                var builderInstruction = builders[builderKey].finish();\n                builderInstructions[zKey][builderKey] = builderInstruction;\n            }\n        }\n        return builderInstructions;\n    };\n    /**\n     * @param {number|undefined} zIndex Z index.\n     * @param {import(\"./BuilderType.js\").default} builderType Replay type.\n     * @return {import(\"../VectorContext.js\").default} Replay.\n     */\n    BuilderGroup.prototype.getBuilder = function (zIndex, builderType) {\n        var zIndexKey = zIndex !== undefined ? zIndex.toString() : '0';\n        var replays = this.buildersByZIndex_[zIndexKey];\n        if (replays === undefined) {\n            replays = {};\n            this.buildersByZIndex_[zIndexKey] = replays;\n        }\n        var replay = replays[builderType];\n        if (replay === undefined) {\n            var Constructor = BATCH_CONSTRUCTORS[builderType];\n            replay = new Constructor(this.tolerance_, this.maxExtent_, this.resolution_, this.pixelRatio_);\n            replays[builderType] = replay;\n        }\n        return replay;\n    };\n    return BuilderGroup;\n}());\nexport default BuilderGroup;\n//# sourceMappingURL=BuilderGroup.js.map","/**\n * @module ol/render/canvas/BuilderType\n */\n/**\n * @enum {string}\n */\nexport default {\n    CIRCLE: 'Circle',\n    DEFAULT: 'Default',\n    IMAGE: 'Image',\n    LINE_STRING: 'LineString',\n    POLYGON: 'Polygon',\n    TEXT: 'Text',\n};\n//# sourceMappingURL=BuilderType.js.map","/**\n * @module ol/geom/flat/textpath\n */\nimport { lerp } from '../../math.js';\nimport { rotate } from './transform.js';\n/**\n * @param {Array<number>} flatCoordinates Path to put text on.\n * @param {number} offset Start offset of the `flatCoordinates`.\n * @param {number} end End offset of the `flatCoordinates`.\n * @param {number} stride Stride.\n * @param {string} text Text to place on the path.\n * @param {number} startM m along the path where the text starts.\n * @param {number} maxAngle Max angle between adjacent chars in radians.\n * @param {number} scale The product of the text scale and the device pixel ratio.\n * @param {function(string, string, Object<string, number>):number} measureAndCacheTextWidth Measure and cache text width.\n * @param {string} font The font.\n * @param {Object<string, number>} cache A cache of measured widths.\n * @param {number} rotation Rotation to apply to the flatCoordinates to determine whether text needs to be reversed.\n * @return {Array<Array<*>>} The result array (or null if `maxAngle` was\n * exceeded). Entries of the array are x, y, anchorX, angle, chunk.\n */\nexport function drawTextOnPath(flatCoordinates, offset, end, stride, text, startM, maxAngle, scale, measureAndCacheTextWidth, font, cache, rotation) {\n    var x2 = flatCoordinates[offset];\n    var y2 = flatCoordinates[offset + 1];\n    var x1 = 0;\n    var y1 = 0;\n    var segmentLength = 0;\n    var segmentM = 0;\n    function advance() {\n        x1 = x2;\n        y1 = y2;\n        offset += stride;\n        x2 = flatCoordinates[offset];\n        y2 = flatCoordinates[offset + 1];\n        segmentM += segmentLength;\n        segmentLength = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n    }\n    do {\n        advance();\n    } while (offset < end - stride && segmentM + segmentLength < startM);\n    var interpolate = (startM - segmentM) / segmentLength;\n    var beginX = lerp(x1, x2, interpolate);\n    var beginY = lerp(y1, y2, interpolate);\n    var startOffset = offset - stride;\n    var startLength = segmentM;\n    var endM = startM + scale * measureAndCacheTextWidth(font, text, cache);\n    while (offset < end - stride && segmentM + segmentLength < endM) {\n        advance();\n    }\n    interpolate = (endM - segmentM) / segmentLength;\n    var endX = lerp(x1, x2, interpolate);\n    var endY = lerp(y1, y2, interpolate);\n    // Keep text upright\n    var reverse;\n    if (rotation) {\n        var flat = [beginX, beginY, endX, endY];\n        rotate(flat, 0, 4, 2, rotation, flat, flat);\n        reverse = flat[0] > flat[2];\n    }\n    else {\n        reverse = beginX > endX;\n    }\n    var PI = Math.PI;\n    var result = [];\n    var singleSegment = startOffset + stride === offset;\n    offset = startOffset;\n    segmentLength = 0;\n    segmentM = startLength;\n    x2 = flatCoordinates[offset];\n    y2 = flatCoordinates[offset + 1];\n    // All on the same segment\n    if (singleSegment) {\n        advance();\n        var previousAngle_1 = Math.atan2(y2 - y1, x2 - x1);\n        if (reverse) {\n            previousAngle_1 += previousAngle_1 > 0 ? -PI : PI;\n        }\n        var x = (endX + beginX) / 2;\n        var y = (endY + beginY) / 2;\n        result[0] = [x, y, (endM - startM) / 2, previousAngle_1, text];\n        return result;\n    }\n    var previousAngle;\n    for (var i = 0, ii = text.length; i < ii;) {\n        advance();\n        var angle = Math.atan2(y2 - y1, x2 - x1);\n        if (reverse) {\n            angle += angle > 0 ? -PI : PI;\n        }\n        if (previousAngle !== undefined) {\n            var delta = angle - previousAngle;\n            delta += delta > PI ? -2 * PI : delta < -PI ? 2 * PI : 0;\n            if (Math.abs(delta) > maxAngle) {\n                return null;\n            }\n        }\n        previousAngle = angle;\n        var iStart = i;\n        var charLength = 0;\n        for (; i < ii; ++i) {\n            var index = reverse ? ii - i - 1 : i;\n            var len = scale * measureAndCacheTextWidth(font, text[index], cache);\n            if (offset + stride < end &&\n                segmentM + segmentLength < startM + charLength + len / 2) {\n                break;\n            }\n            charLength += len;\n        }\n        if (i === iStart) {\n            continue;\n        }\n        var chars = reverse\n            ? text.substring(ii - iStart, ii - i)\n            : text.substring(iStart, i);\n        interpolate = (startM + charLength / 2 - segmentM) / segmentLength;\n        var x = lerp(x1, x2, interpolate);\n        var y = lerp(y1, y2, interpolate);\n        result.push([x, y, charLength / 2, angle, chars]);\n        startM += charLength;\n    }\n    return result;\n}\n//# sourceMappingURL=textpath.js.map","/**\n * @module ol/render/canvas/Executor\n */\nimport CanvasInstruction from './Instruction.js';\nimport { TEXT_ALIGN } from './TextBuilder.js';\nimport { WORKER_OFFSCREEN_CANVAS } from '../../has.js';\nimport { apply as applyTransform, compose as composeTransform, create as createTransform, setFromArray as transformSetFromArray, } from '../../transform.js';\nimport { createEmpty, createOrUpdate, intersects } from '../../extent.js';\nimport { defaultPadding, defaultTextBaseline, drawImageOrLabel, } from '../canvas.js';\nimport { defaultTextAlign, measureAndCacheTextWidth, measureTextHeight, measureTextWidths, } from '../canvas.js';\nimport { drawTextOnPath } from '../../geom/flat/textpath.js';\nimport { equals } from '../../array.js';\nimport { lineStringLength } from '../../geom/flat/length.js';\nimport { transform2D } from '../../geom/flat/transform.js';\n/**\n * @typedef {Object} BBox\n * @property {number} minX\n * @property {number} minY\n * @property {number} maxX\n * @property {number} maxY\n * @property {*} value\n */\n/**\n * @typedef {Object} ImageOrLabelDimensions\n * @property {number} drawImageX\n * @property {number} drawImageY\n * @property {number} drawImageW\n * @property {number} drawImageH\n * @property {number} originX\n * @property {number} originY\n * @property {Array<number>} scale\n * @property {BBox} declutterBox\n * @property {import(\"../../transform.js\").Transform} canvasTransform\n */\n/**\n * @typedef {{0: CanvasRenderingContext2D, 1: number, 2: import(\"../canvas.js\").Label|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement, 3: ImageOrLabelDimensions, 4: number, 5: Array<*>, 6: Array<*>}} ReplayImageOrLabelArgs\n */\n/**\n * @template T\n * @typedef {function(import(\"../../Feature.js\").FeatureLike, import(\"../../geom/SimpleGeometry.js\").default): T} FeatureCallback\n */\n/**\n * @type {import(\"../../extent.js\").Extent}\n */\nvar tmpExtent = createEmpty();\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p1 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p2 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p3 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p4 = [];\n/**\n * @param {ReplayImageOrLabelArgs} replayImageOrLabelArgs Arguments to replayImageOrLabel\n * @return {BBox} Declutter bbox.\n */\nfunction getDeclutterBox(replayImageOrLabelArgs) {\n    return replayImageOrLabelArgs[3].declutterBox;\n}\nvar rtlRegEx = new RegExp(\n/* eslint-disable prettier/prettier */\n'[' +\n    String.fromCharCode(0x00591) + '-' + String.fromCharCode(0x008ff) +\n    String.fromCharCode(0x0fb1d) + '-' + String.fromCharCode(0x0fdff) +\n    String.fromCharCode(0x0fe70) + '-' + String.fromCharCode(0x0fefc) +\n    String.fromCharCode(0x10800) + '-' + String.fromCharCode(0x10fff) +\n    String.fromCharCode(0x1e800) + '-' + String.fromCharCode(0x1efff) +\n    ']'\n/* eslint-enable prettier/prettier */\n);\n/**\n * @param {string} text Text.\n * @param {string} align Alignment.\n * @return {number} Text alignment.\n */\nfunction horizontalTextAlign(text, align) {\n    if ((align === 'start' || align === 'end') && !rtlRegEx.test(text)) {\n        align = align === 'start' ? 'left' : 'right';\n    }\n    return TEXT_ALIGN[align];\n}\nvar Executor = /** @class */ (function () {\n    /**\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {boolean} overlaps The replay can have overlapping geometries.\n     * @param {import(\"../canvas.js\").SerializableInstructions} instructions The serializable instructions\n     * @param {import(\"../../size.js\").Size} renderBuffer Render buffer (width/height) in pixels.\n     */\n    function Executor(resolution, pixelRatio, overlaps, instructions, renderBuffer) {\n        /**\n         * @protected\n         * @type {boolean}\n         */\n        this.overlaps = overlaps;\n        /**\n         * @protected\n         * @type {number}\n         */\n        this.pixelRatio = pixelRatio;\n        /**\n         * @protected\n         * @const\n         * @type {number}\n         */\n        this.resolution = resolution;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        this.alignFill_;\n        /**\n         * @protected\n         * @type {Array<*>}\n         */\n        this.instructions = instructions.instructions;\n        /**\n         * @protected\n         * @type {Array<number>}\n         */\n        this.coordinates = instructions.coordinates;\n        /**\n         * @private\n         * @type {!Object<number,import(\"../../coordinate.js\").Coordinate|Array<import(\"../../coordinate.js\").Coordinate>|Array<Array<import(\"../../coordinate.js\").Coordinate>>>}\n         */\n        this.coordinateCache_ = {};\n        /**\n         * @private\n         * @type {import(\"../../size.js\").Size}\n         */\n        this.renderBuffer_ = renderBuffer;\n        /**\n         * @private\n         * @type {!import(\"../../transform.js\").Transform}\n         */\n        this.renderedTransform_ = createTransform();\n        /**\n         * @protected\n         * @type {Array<*>}\n         */\n        this.hitDetectionInstructions = instructions.hitDetectionInstructions;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        this.pixelCoordinates_ = null;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.viewRotation_ = 0;\n        /**\n         * @type {!Object<string, import(\"../canvas.js\").FillState>}\n         */\n        this.fillStates = instructions.fillStates || {};\n        /**\n         * @type {!Object<string, import(\"../canvas.js\").StrokeState>}\n         */\n        this.strokeStates = instructions.strokeStates || {};\n        /**\n         * @type {!Object<string, import(\"../canvas.js\").TextState>}\n         */\n        this.textStates = instructions.textStates || {};\n        /**\n         * @private\n         * @type {Object<string, Object<string, number>>}\n         */\n        this.widths_ = {};\n        /**\n         * @private\n         * @type {Object<string, import(\"../canvas.js\").Label>}\n         */\n        this.labels_ = {};\n    }\n    /**\n     * @param {string} text Text.\n     * @param {string} textKey Text style key.\n     * @param {string} fillKey Fill style key.\n     * @param {string} strokeKey Stroke style key.\n     * @return {import(\"../canvas.js\").Label} Label.\n     */\n    Executor.prototype.createLabel = function (text, textKey, fillKey, strokeKey) {\n        var key = text + textKey + fillKey + strokeKey;\n        if (this.labels_[key]) {\n            return this.labels_[key];\n        }\n        var strokeState = strokeKey ? this.strokeStates[strokeKey] : null;\n        var fillState = fillKey ? this.fillStates[fillKey] : null;\n        var textState = this.textStates[textKey];\n        var pixelRatio = this.pixelRatio;\n        var scale = [\n            textState.scale[0] * pixelRatio,\n            textState.scale[1] * pixelRatio,\n        ];\n        var align = horizontalTextAlign(text, textState.textAlign || defaultTextAlign);\n        var strokeWidth = strokeKey && strokeState.lineWidth ? strokeState.lineWidth : 0;\n        var lines = text.split('\\n');\n        var numLines = lines.length;\n        var widths = [];\n        var width = measureTextWidths(textState.font, lines, widths);\n        var lineHeight = measureTextHeight(textState.font);\n        var height = lineHeight * numLines;\n        var renderWidth = width + strokeWidth;\n        var contextInstructions = [];\n        // make canvas 2 pixels wider to account for italic text width measurement errors\n        var w = (renderWidth + 2) * scale[0];\n        var h = (height + strokeWidth) * scale[1];\n        /** @type {import(\"../canvas.js\").Label} */\n        var label = {\n            width: w < 0 ? Math.floor(w) : Math.ceil(w),\n            height: h < 0 ? Math.floor(h) : Math.ceil(h),\n            contextInstructions: contextInstructions,\n        };\n        if (scale[0] != 1 || scale[1] != 1) {\n            contextInstructions.push('scale', scale);\n        }\n        contextInstructions.push('font', textState.font);\n        if (strokeKey) {\n            contextInstructions.push('strokeStyle', strokeState.strokeStyle);\n            contextInstructions.push('lineWidth', strokeWidth);\n            contextInstructions.push('lineCap', strokeState.lineCap);\n            contextInstructions.push('lineJoin', strokeState.lineJoin);\n            contextInstructions.push('miterLimit', strokeState.miterLimit);\n            // eslint-disable-next-line\n            var Context = WORKER_OFFSCREEN_CANVAS ? OffscreenCanvasRenderingContext2D : CanvasRenderingContext2D;\n            if (Context.prototype.setLineDash) {\n                contextInstructions.push('setLineDash', [strokeState.lineDash]);\n                contextInstructions.push('lineDashOffset', strokeState.lineDashOffset);\n            }\n        }\n        if (fillKey) {\n            contextInstructions.push('fillStyle', fillState.fillStyle);\n        }\n        contextInstructions.push('textBaseline', 'middle');\n        contextInstructions.push('textAlign', 'center');\n        var leftRight = 0.5 - align;\n        var x = align * renderWidth + leftRight * strokeWidth;\n        var i;\n        if (strokeKey) {\n            for (i = 0; i < numLines; ++i) {\n                contextInstructions.push('strokeText', [\n                    lines[i],\n                    x + leftRight * widths[i],\n                    0.5 * (strokeWidth + lineHeight) + i * lineHeight,\n                ]);\n            }\n        }\n        if (fillKey) {\n            for (i = 0; i < numLines; ++i) {\n                contextInstructions.push('fillText', [\n                    lines[i],\n                    x + leftRight * widths[i],\n                    0.5 * (strokeWidth + lineHeight) + i * lineHeight,\n                ]);\n            }\n        }\n        this.labels_[key] = label;\n        return label;\n    };\n    /**\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {import(\"../../coordinate.js\").Coordinate} p1 1st point of the background box.\n     * @param {import(\"../../coordinate.js\").Coordinate} p2 2nd point of the background box.\n     * @param {import(\"../../coordinate.js\").Coordinate} p3 3rd point of the background box.\n     * @param {import(\"../../coordinate.js\").Coordinate} p4 4th point of the background box.\n     * @param {Array<*>} fillInstruction Fill instruction.\n     * @param {Array<*>} strokeInstruction Stroke instruction.\n     */\n    Executor.prototype.replayTextBackground_ = function (context, p1, p2, p3, p4, fillInstruction, strokeInstruction) {\n        context.beginPath();\n        context.moveTo.apply(context, p1);\n        context.lineTo.apply(context, p2);\n        context.lineTo.apply(context, p3);\n        context.lineTo.apply(context, p4);\n        context.lineTo.apply(context, p1);\n        if (fillInstruction) {\n            this.alignFill_ = /** @type {boolean} */ (fillInstruction[2]);\n            this.fill_(context);\n        }\n        if (strokeInstruction) {\n            this.setStrokeStyle_(context, \n            /** @type {Array<*>} */ (strokeInstruction));\n            context.stroke();\n        }\n    };\n    /**\n     * @private\n     * @param {number} sheetWidth Width of the sprite sheet.\n     * @param {number} sheetHeight Height of the sprite sheet.\n     * @param {number} centerX X.\n     * @param {number} centerY Y.\n     * @param {number} width Width.\n     * @param {number} height Height.\n     * @param {number} anchorX Anchor X.\n     * @param {number} anchorY Anchor Y.\n     * @param {number} originX Origin X.\n     * @param {number} originY Origin Y.\n     * @param {number} rotation Rotation.\n     * @param {import(\"../../size.js\").Size} scale Scale.\n     * @param {boolean} snapToPixel Snap to pixel.\n     * @param {Array<number>} padding Padding.\n     * @param {boolean} fillStroke Background fill or stroke.\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     * @return {ImageOrLabelDimensions} Dimensions for positioning and decluttering the image or label.\n     */\n    Executor.prototype.calculateImageOrLabelDimensions_ = function (sheetWidth, sheetHeight, centerX, centerY, width, height, anchorX, anchorY, originX, originY, rotation, scale, snapToPixel, padding, fillStroke, feature) {\n        anchorX *= scale[0];\n        anchorY *= scale[1];\n        var x = centerX - anchorX;\n        var y = centerY - anchorY;\n        var w = width + originX > sheetWidth ? sheetWidth - originX : width;\n        var h = height + originY > sheetHeight ? sheetHeight - originY : height;\n        var boxW = padding[3] + w * scale[0] + padding[1];\n        var boxH = padding[0] + h * scale[1] + padding[2];\n        var boxX = x - padding[3];\n        var boxY = y - padding[0];\n        if (fillStroke || rotation !== 0) {\n            p1[0] = boxX;\n            p4[0] = boxX;\n            p1[1] = boxY;\n            p2[1] = boxY;\n            p2[0] = boxX + boxW;\n            p3[0] = p2[0];\n            p3[1] = boxY + boxH;\n            p4[1] = p3[1];\n        }\n        var transform;\n        if (rotation !== 0) {\n            transform = composeTransform(createTransform(), centerX, centerY, 1, 1, rotation, -centerX, -centerY);\n            applyTransform(transform, p1);\n            applyTransform(transform, p2);\n            applyTransform(transform, p3);\n            applyTransform(transform, p4);\n            createOrUpdate(Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1]), tmpExtent);\n        }\n        else {\n            createOrUpdate(Math.min(boxX, boxX + boxW), Math.min(boxY, boxY + boxH), Math.max(boxX, boxX + boxW), Math.max(boxY, boxY + boxH), tmpExtent);\n        }\n        if (snapToPixel) {\n            x = Math.round(x);\n            y = Math.round(y);\n        }\n        return {\n            drawImageX: x,\n            drawImageY: y,\n            drawImageW: w,\n            drawImageH: h,\n            originX: originX,\n            originY: originY,\n            declutterBox: {\n                minX: tmpExtent[0],\n                minY: tmpExtent[1],\n                maxX: tmpExtent[2],\n                maxY: tmpExtent[3],\n                value: feature,\n            },\n            canvasTransform: transform,\n            scale: scale,\n        };\n    };\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {number} contextScale Scale of the context.\n     * @param {import(\"../canvas.js\").Label|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} imageOrLabel Image.\n     * @param {ImageOrLabelDimensions} dimensions Dimensions.\n     * @param {number} opacity Opacity.\n     * @param {Array<*>} fillInstruction Fill instruction.\n     * @param {Array<*>} strokeInstruction Stroke instruction.\n     * @return {boolean} The image or label was rendered.\n     */\n    Executor.prototype.replayImageOrLabel_ = function (context, contextScale, imageOrLabel, dimensions, opacity, fillInstruction, strokeInstruction) {\n        var fillStroke = !!(fillInstruction || strokeInstruction);\n        var box = dimensions.declutterBox;\n        var canvas = context.canvas;\n        var strokePadding = strokeInstruction\n            ? (strokeInstruction[2] * dimensions.scale[0]) / 2\n            : 0;\n        var intersects = box.minX - strokePadding <= canvas.width / contextScale &&\n            box.maxX + strokePadding >= 0 &&\n            box.minY - strokePadding <= canvas.height / contextScale &&\n            box.maxY + strokePadding >= 0;\n        if (intersects) {\n            if (fillStroke) {\n                this.replayTextBackground_(context, p1, p2, p3, p4, \n                /** @type {Array<*>} */ (fillInstruction), \n                /** @type {Array<*>} */ (strokeInstruction));\n            }\n            drawImageOrLabel(context, dimensions.canvasTransform, opacity, imageOrLabel, dimensions.originX, dimensions.originY, dimensions.drawImageW, dimensions.drawImageH, dimensions.drawImageX, dimensions.drawImageY, dimensions.scale);\n        }\n        return true;\n    };\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} context Context.\n     */\n    Executor.prototype.fill_ = function (context) {\n        if (this.alignFill_) {\n            var origin_1 = applyTransform(this.renderedTransform_, [0, 0]);\n            var repeatSize = 512 * this.pixelRatio;\n            context.save();\n            context.translate(origin_1[0] % repeatSize, origin_1[1] % repeatSize);\n            context.rotate(this.viewRotation_);\n        }\n        context.fill();\n        if (this.alignFill_) {\n            context.restore();\n        }\n    };\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {Array<*>} instruction Instruction.\n     */\n    Executor.prototype.setStrokeStyle_ = function (context, instruction) {\n        context['strokeStyle'] = /** @type {import(\"../../colorlike.js\").ColorLike} */ (instruction[1]);\n        context.lineWidth = /** @type {number} */ (instruction[2]);\n        context.lineCap = /** @type {CanvasLineCap} */ (instruction[3]);\n        context.lineJoin = /** @type {CanvasLineJoin} */ (instruction[4]);\n        context.miterLimit = /** @type {number} */ (instruction[5]);\n        if (context.setLineDash) {\n            context.lineDashOffset = /** @type {number} */ (instruction[7]);\n            context.setLineDash(/** @type {Array<number>} */ (instruction[6]));\n        }\n    };\n    /**\n     * @private\n     * @param {string} text The text to draw.\n     * @param {string} textKey The key of the text state.\n     * @param {string} strokeKey The key for the stroke state.\n     * @param {string} fillKey The key for the fill state.\n     * @return {{label: import(\"../canvas.js\").Label, anchorX: number, anchorY: number}} The text image and its anchor.\n     */\n    Executor.prototype.drawLabelWithPointPlacement_ = function (text, textKey, strokeKey, fillKey) {\n        var textState = this.textStates[textKey];\n        var label = this.createLabel(text, textKey, fillKey, strokeKey);\n        var strokeState = this.strokeStates[strokeKey];\n        var pixelRatio = this.pixelRatio;\n        var align = horizontalTextAlign(text, textState.textAlign || defaultTextAlign);\n        var baseline = TEXT_ALIGN[textState.textBaseline || defaultTextBaseline];\n        var strokeWidth = strokeState && strokeState.lineWidth ? strokeState.lineWidth : 0;\n        // Remove the 2 pixels we added in createLabel() for the anchor\n        var width = label.width / pixelRatio - 2 * textState.scale[0];\n        var anchorX = align * width + 2 * (0.5 - align) * strokeWidth;\n        var anchorY = (baseline * label.height) / pixelRatio +\n            2 * (0.5 - baseline) * strokeWidth;\n        return {\n            label: label,\n            anchorX: anchorX,\n            anchorY: anchorY,\n        };\n    };\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {number} contextScale Scale of the context.\n     * @param {import(\"../../transform.js\").Transform} transform Transform.\n     * @param {Array<*>} instructions Instructions array.\n     * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.\n     * @param {FeatureCallback<T>=} opt_featureCallback Feature callback.\n     * @param {import(\"../../extent.js\").Extent=} opt_hitExtent Only check\n     *     features that intersect this extent.\n     * @param {import(\"rbush\").default=} opt_declutterTree Declutter tree.\n     * @return {T|undefined} Callback result.\n     * @template T\n     */\n    Executor.prototype.execute_ = function (context, contextScale, transform, instructions, snapToPixel, opt_featureCallback, opt_hitExtent, opt_declutterTree) {\n        /** @type {Array<number>} */\n        var pixelCoordinates;\n        if (this.pixelCoordinates_ && equals(transform, this.renderedTransform_)) {\n            pixelCoordinates = this.pixelCoordinates_;\n        }\n        else {\n            if (!this.pixelCoordinates_) {\n                this.pixelCoordinates_ = [];\n            }\n            pixelCoordinates = transform2D(this.coordinates, 0, this.coordinates.length, 2, transform, this.pixelCoordinates_);\n            transformSetFromArray(this.renderedTransform_, transform);\n        }\n        var i = 0; // instruction index\n        var ii = instructions.length; // end of instructions\n        var d = 0; // data index\n        var dd; // end of per-instruction data\n        var anchorX, anchorY, prevX, prevY, roundX, roundY, image, text, textKey, strokeKey, fillKey;\n        var pendingFill = 0;\n        var pendingStroke = 0;\n        var lastFillInstruction = null;\n        var lastStrokeInstruction = null;\n        var coordinateCache = this.coordinateCache_;\n        var viewRotation = this.viewRotation_;\n        var viewRotationFromTransform = Math.round(Math.atan2(-transform[1], transform[0]) * 1e12) / 1e12;\n        var state = /** @type {import(\"../../render.js\").State} */ ({\n            context: context,\n            pixelRatio: this.pixelRatio,\n            resolution: this.resolution,\n            rotation: viewRotation,\n        });\n        // When the batch size gets too big, performance decreases. 200 is a good\n        // balance between batch size and number of fill/stroke instructions.\n        var batchSize = this.instructions != instructions || this.overlaps ? 0 : 200;\n        var /** @type {import(\"../../Feature.js\").FeatureLike} */ feature;\n        var x, y, currentGeometry;\n        while (i < ii) {\n            var instruction = instructions[i];\n            var type = /** @type {import(\"./Instruction.js\").default} */ (instruction[0]);\n            switch (type) {\n                case CanvasInstruction.BEGIN_GEOMETRY:\n                    feature = /** @type {import(\"../../Feature.js\").FeatureLike} */ (instruction[1]);\n                    currentGeometry = instruction[3];\n                    if (!feature.getGeometry()) {\n                        i = /** @type {number} */ (instruction[2]);\n                    }\n                    else if (opt_hitExtent !== undefined &&\n                        !intersects(opt_hitExtent, currentGeometry.getExtent())) {\n                        i = /** @type {number} */ (instruction[2]) + 1;\n                    }\n                    else {\n                        ++i;\n                    }\n                    break;\n                case CanvasInstruction.BEGIN_PATH:\n                    if (pendingFill > batchSize) {\n                        this.fill_(context);\n                        pendingFill = 0;\n                    }\n                    if (pendingStroke > batchSize) {\n                        context.stroke();\n                        pendingStroke = 0;\n                    }\n                    if (!pendingFill && !pendingStroke) {\n                        context.beginPath();\n                        prevX = NaN;\n                        prevY = NaN;\n                    }\n                    ++i;\n                    break;\n                case CanvasInstruction.CIRCLE:\n                    d = /** @type {number} */ (instruction[1]);\n                    var x1 = pixelCoordinates[d];\n                    var y1 = pixelCoordinates[d + 1];\n                    var x2 = pixelCoordinates[d + 2];\n                    var y2 = pixelCoordinates[d + 3];\n                    var dx = x2 - x1;\n                    var dy = y2 - y1;\n                    var r = Math.sqrt(dx * dx + dy * dy);\n                    context.moveTo(x1 + r, y1);\n                    context.arc(x1, y1, r, 0, 2 * Math.PI, true);\n                    ++i;\n                    break;\n                case CanvasInstruction.CLOSE_PATH:\n                    context.closePath();\n                    ++i;\n                    break;\n                case CanvasInstruction.CUSTOM:\n                    d = /** @type {number} */ (instruction[1]);\n                    dd = instruction[2];\n                    var geometry = /** @type {import(\"../../geom/SimpleGeometry.js\").default} */ (instruction[3]);\n                    var renderer = instruction[4];\n                    var fn = instruction.length == 6 ? instruction[5] : undefined;\n                    state.geometry = geometry;\n                    state.feature = feature;\n                    if (!(i in coordinateCache)) {\n                        coordinateCache[i] = [];\n                    }\n                    var coords = coordinateCache[i];\n                    if (fn) {\n                        fn(pixelCoordinates, d, dd, 2, coords);\n                    }\n                    else {\n                        coords[0] = pixelCoordinates[d];\n                        coords[1] = pixelCoordinates[d + 1];\n                        coords.length = 2;\n                    }\n                    renderer(coords, state);\n                    ++i;\n                    break;\n                case CanvasInstruction.DRAW_IMAGE:\n                    d = /** @type {number} */ (instruction[1]);\n                    dd = /** @type {number} */ (instruction[2]);\n                    image = /** @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} */ (instruction[3]);\n                    // Remaining arguments in DRAW_IMAGE are in alphabetical order\n                    anchorX = /** @type {number} */ (instruction[4]);\n                    anchorY = /** @type {number} */ (instruction[5]);\n                    var height = /** @type {number} */ (instruction[6]);\n                    var opacity = /** @type {number} */ (instruction[7]);\n                    var originX = /** @type {number} */ (instruction[8]);\n                    var originY = /** @type {number} */ (instruction[9]);\n                    var rotateWithView = /** @type {boolean} */ (instruction[10]);\n                    var rotation = /** @type {number} */ (instruction[11]);\n                    var scale = /** @type {import(\"../../size.js\").Size} */ (instruction[12]);\n                    var width = /** @type {number} */ (instruction[13]);\n                    var declutterImageWithText = /** @type {import(\"../canvas.js\").DeclutterImageWithText} */ (instruction[14]);\n                    if (!image && instruction.length >= 19) {\n                        // create label images\n                        text = /** @type {string} */ (instruction[18]);\n                        textKey = /** @type {string} */ (instruction[19]);\n                        strokeKey = /** @type {string} */ (instruction[20]);\n                        fillKey = /** @type {string} */ (instruction[21]);\n                        var labelWithAnchor = this.drawLabelWithPointPlacement_(text, textKey, strokeKey, fillKey);\n                        image = labelWithAnchor.label;\n                        instruction[3] = image;\n                        var textOffsetX = /** @type {number} */ (instruction[22]);\n                        anchorX = (labelWithAnchor.anchorX - textOffsetX) * this.pixelRatio;\n                        instruction[4] = anchorX;\n                        var textOffsetY = /** @type {number} */ (instruction[23]);\n                        anchorY = (labelWithAnchor.anchorY - textOffsetY) * this.pixelRatio;\n                        instruction[5] = anchorY;\n                        height = image.height;\n                        instruction[6] = height;\n                        width = image.width;\n                        instruction[13] = width;\n                    }\n                    var geometryWidths = void 0;\n                    if (instruction.length > 24) {\n                        geometryWidths = /** @type {number} */ (instruction[24]);\n                    }\n                    var padding = void 0, backgroundFill = void 0, backgroundStroke = void 0;\n                    if (instruction.length > 16) {\n                        padding = /** @type {Array<number>} */ (instruction[15]);\n                        backgroundFill = /** @type {boolean} */ (instruction[16]);\n                        backgroundStroke = /** @type {boolean} */ (instruction[17]);\n                    }\n                    else {\n                        padding = defaultPadding;\n                        backgroundFill = false;\n                        backgroundStroke = false;\n                    }\n                    if (rotateWithView && viewRotationFromTransform) {\n                        // Canvas is expected to be rotated to reverse view rotation.\n                        rotation += viewRotation;\n                    }\n                    else if (!rotateWithView && !viewRotationFromTransform) {\n                        // Canvas is not rotated, images need to be rotated back to be north-up.\n                        rotation -= viewRotation;\n                    }\n                    var widthIndex = 0;\n                    for (; d < dd; d += 2) {\n                        if (geometryWidths &&\n                            geometryWidths[widthIndex++] < width / this.pixelRatio) {\n                            continue;\n                        }\n                        var dimensions = this.calculateImageOrLabelDimensions_(image.width, image.height, pixelCoordinates[d], pixelCoordinates[d + 1], width, height, anchorX, anchorY, originX, originY, rotation, scale, snapToPixel, padding, backgroundFill || backgroundStroke, feature);\n                        /** @type {ReplayImageOrLabelArgs} */\n                        var args = [\n                            context,\n                            contextScale,\n                            image,\n                            dimensions,\n                            opacity,\n                            backgroundFill\n                                ? /** @type {Array<*>} */ (lastFillInstruction)\n                                : null,\n                            backgroundStroke\n                                ? /** @type {Array<*>} */ (lastStrokeInstruction)\n                                : null,\n                        ];\n                        var imageArgs = void 0;\n                        var imageDeclutterBox = void 0;\n                        if (opt_declutterTree && declutterImageWithText) {\n                            if (!declutterImageWithText[d]) {\n                                // We now have the image for an image+text combination.\n                                declutterImageWithText[d] = args;\n                                // Don't render anything for now, wait for the text.\n                                continue;\n                            }\n                            imageArgs = declutterImageWithText[d];\n                            delete declutterImageWithText[d];\n                            imageDeclutterBox = getDeclutterBox(imageArgs);\n                            if (opt_declutterTree.collides(imageDeclutterBox)) {\n                                continue;\n                            }\n                        }\n                        if (opt_declutterTree &&\n                            opt_declutterTree.collides(dimensions.declutterBox)) {\n                            continue;\n                        }\n                        if (imageArgs) {\n                            // We now have image and text for an image+text combination.\n                            if (opt_declutterTree) {\n                                opt_declutterTree.insert(imageDeclutterBox);\n                            }\n                            // Render the image before we render the text.\n                            this.replayImageOrLabel_.apply(this, imageArgs);\n                        }\n                        if (opt_declutterTree) {\n                            opt_declutterTree.insert(dimensions.declutterBox);\n                        }\n                        this.replayImageOrLabel_.apply(this, args);\n                    }\n                    ++i;\n                    break;\n                case CanvasInstruction.DRAW_CHARS:\n                    var begin = /** @type {number} */ (instruction[1]);\n                    var end = /** @type {number} */ (instruction[2]);\n                    var baseline = /** @type {number} */ (instruction[3]);\n                    var overflow = /** @type {number} */ (instruction[4]);\n                    fillKey = /** @type {string} */ (instruction[5]);\n                    var maxAngle = /** @type {number} */ (instruction[6]);\n                    var measurePixelRatio = /** @type {number} */ (instruction[7]);\n                    var offsetY = /** @type {number} */ (instruction[8]);\n                    strokeKey = /** @type {string} */ (instruction[9]);\n                    var strokeWidth = /** @type {number} */ (instruction[10]);\n                    text = /** @type {string} */ (instruction[11]);\n                    textKey = /** @type {string} */ (instruction[12]);\n                    var pixelRatioScale = [\n                        /** @type {number} */ (instruction[13]),\n                        /** @type {number} */ (instruction[13]),\n                    ];\n                    var textState = this.textStates[textKey];\n                    var font = textState.font;\n                    var textScale = [\n                        textState.scale[0] * measurePixelRatio,\n                        textState.scale[1] * measurePixelRatio,\n                    ];\n                    var cachedWidths = void 0;\n                    if (font in this.widths_) {\n                        cachedWidths = this.widths_[font];\n                    }\n                    else {\n                        cachedWidths = {};\n                        this.widths_[font] = cachedWidths;\n                    }\n                    var pathLength = lineStringLength(pixelCoordinates, begin, end, 2);\n                    var textLength = Math.abs(textScale[0]) *\n                        measureAndCacheTextWidth(font, text, cachedWidths);\n                    if (overflow || textLength <= pathLength) {\n                        var textAlign = this.textStates[textKey].textAlign;\n                        var startM = (pathLength - textLength) * TEXT_ALIGN[textAlign];\n                        var parts = drawTextOnPath(pixelCoordinates, begin, end, 2, text, startM, maxAngle, Math.abs(textScale[0]), measureAndCacheTextWidth, font, cachedWidths, viewRotationFromTransform ? 0 : this.viewRotation_);\n                        drawChars: if (parts) {\n                            /** @type {Array<ReplayImageOrLabelArgs>} */\n                            var replayImageOrLabelArgs = [];\n                            var c = void 0, cc = void 0, chars = void 0, label = void 0, part = void 0;\n                            if (strokeKey) {\n                                for (c = 0, cc = parts.length; c < cc; ++c) {\n                                    part = parts[c]; // x, y, anchorX, rotation, chunk\n                                    chars = /** @type {string} */ (part[4]);\n                                    label = this.createLabel(chars, textKey, '', strokeKey);\n                                    anchorX =\n                                        /** @type {number} */ (part[2]) +\n                                            (textScale[0] < 0 ? -strokeWidth : strokeWidth);\n                                    anchorY =\n                                        baseline * label.height +\n                                            ((0.5 - baseline) * 2 * strokeWidth * textScale[1]) /\n                                                textScale[0] -\n                                            offsetY;\n                                    var dimensions = this.calculateImageOrLabelDimensions_(label.width, label.height, part[0], part[1], label.width, label.height, anchorX, anchorY, 0, 0, part[3], pixelRatioScale, false, defaultPadding, false, feature);\n                                    if (opt_declutterTree &&\n                                        opt_declutterTree.collides(dimensions.declutterBox)) {\n                                        break drawChars;\n                                    }\n                                    replayImageOrLabelArgs.push([\n                                        context,\n                                        contextScale,\n                                        label,\n                                        dimensions,\n                                        1,\n                                        null,\n                                        null,\n                                    ]);\n                                }\n                            }\n                            if (fillKey) {\n                                for (c = 0, cc = parts.length; c < cc; ++c) {\n                                    part = parts[c]; // x, y, anchorX, rotation, chunk\n                                    chars = /** @type {string} */ (part[4]);\n                                    label = this.createLabel(chars, textKey, fillKey, '');\n                                    anchorX = /** @type {number} */ (part[2]);\n                                    anchorY = baseline * label.height - offsetY;\n                                    var dimensions = this.calculateImageOrLabelDimensions_(label.width, label.height, part[0], part[1], label.width, label.height, anchorX, anchorY, 0, 0, part[3], pixelRatioScale, false, defaultPadding, false, feature);\n                                    if (opt_declutterTree &&\n                                        opt_declutterTree.collides(dimensions.declutterBox)) {\n                                        break drawChars;\n                                    }\n                                    replayImageOrLabelArgs.push([\n                                        context,\n                                        contextScale,\n                                        label,\n                                        dimensions,\n                                        1,\n                                        null,\n                                        null,\n                                    ]);\n                                }\n                            }\n                            if (opt_declutterTree) {\n                                opt_declutterTree.load(replayImageOrLabelArgs.map(getDeclutterBox));\n                            }\n                            for (var i_1 = 0, ii_1 = replayImageOrLabelArgs.length; i_1 < ii_1; ++i_1) {\n                                this.replayImageOrLabel_.apply(this, replayImageOrLabelArgs[i_1]);\n                            }\n                        }\n                    }\n                    ++i;\n                    break;\n                case CanvasInstruction.END_GEOMETRY:\n                    if (opt_featureCallback !== undefined) {\n                        feature = /** @type {import(\"../../Feature.js\").FeatureLike} */ (instruction[1]);\n                        var result = opt_featureCallback(feature, currentGeometry);\n                        if (result) {\n                            return result;\n                        }\n                    }\n                    ++i;\n                    break;\n                case CanvasInstruction.FILL:\n                    if (batchSize) {\n                        pendingFill++;\n                    }\n                    else {\n                        this.fill_(context);\n                    }\n                    ++i;\n                    break;\n                case CanvasInstruction.MOVE_TO_LINE_TO:\n                    d = /** @type {number} */ (instruction[1]);\n                    dd = /** @type {number} */ (instruction[2]);\n                    x = pixelCoordinates[d];\n                    y = pixelCoordinates[d + 1];\n                    roundX = (x + 0.5) | 0;\n                    roundY = (y + 0.5) | 0;\n                    if (roundX !== prevX || roundY !== prevY) {\n                        context.moveTo(x, y);\n                        prevX = roundX;\n                        prevY = roundY;\n                    }\n                    for (d += 2; d < dd; d += 2) {\n                        x = pixelCoordinates[d];\n                        y = pixelCoordinates[d + 1];\n                        roundX = (x + 0.5) | 0;\n                        roundY = (y + 0.5) | 0;\n                        if (d == dd - 2 || roundX !== prevX || roundY !== prevY) {\n                            context.lineTo(x, y);\n                            prevX = roundX;\n                            prevY = roundY;\n                        }\n                    }\n                    ++i;\n                    break;\n                case CanvasInstruction.SET_FILL_STYLE:\n                    lastFillInstruction = instruction;\n                    this.alignFill_ = instruction[2];\n                    if (pendingFill) {\n                        this.fill_(context);\n                        pendingFill = 0;\n                        if (pendingStroke) {\n                            context.stroke();\n                            pendingStroke = 0;\n                        }\n                    }\n                    context.fillStyle = /** @type {import(\"../../colorlike.js\").ColorLike} */ (instruction[1]);\n                    ++i;\n                    break;\n                case CanvasInstruction.SET_STROKE_STYLE:\n                    lastStrokeInstruction = instruction;\n                    if (pendingStroke) {\n                        context.stroke();\n                        pendingStroke = 0;\n                    }\n                    this.setStrokeStyle_(context, /** @type {Array<*>} */ (instruction));\n                    ++i;\n                    break;\n                case CanvasInstruction.STROKE:\n                    if (batchSize) {\n                        pendingStroke++;\n                    }\n                    else {\n                        context.stroke();\n                    }\n                    ++i;\n                    break;\n                default:\n                    ++i; // consume the instruction anyway, to avoid an infinite loop\n                    break;\n            }\n        }\n        if (pendingFill) {\n            this.fill_(context);\n        }\n        if (pendingStroke) {\n            context.stroke();\n        }\n        return undefined;\n    };\n    /**\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {number} contextScale Scale of the context.\n     * @param {import(\"../../transform.js\").Transform} transform Transform.\n     * @param {number} viewRotation View rotation.\n     * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.\n     * @param {import(\"rbush\").default=} opt_declutterTree Declutter tree.\n     */\n    Executor.prototype.execute = function (context, contextScale, transform, viewRotation, snapToPixel, opt_declutterTree) {\n        this.viewRotation_ = viewRotation;\n        this.execute_(context, contextScale, transform, this.instructions, snapToPixel, undefined, undefined, opt_declutterTree);\n    };\n    /**\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {import(\"../../transform.js\").Transform} transform Transform.\n     * @param {number} viewRotation View rotation.\n     * @param {FeatureCallback<T>=} opt_featureCallback Feature callback.\n     * @param {import(\"../../extent.js\").Extent=} opt_hitExtent Only check\n     *     features that intersect this extent.\n     * @return {T|undefined} Callback result.\n     * @template T\n     */\n    Executor.prototype.executeHitDetection = function (context, transform, viewRotation, opt_featureCallback, opt_hitExtent) {\n        this.viewRotation_ = viewRotation;\n        return this.execute_(context, 1, transform, this.hitDetectionInstructions, true, opt_featureCallback, opt_hitExtent);\n    };\n    return Executor;\n}());\nexport default Executor;\n//# sourceMappingURL=Executor.js.map","/**\n * @module ol/render/canvas/ExecutorGroup\n */\nimport BuilderType from './BuilderType.js';\nimport Executor from './Executor.js';\nimport { buffer, createEmpty, extendCoordinate } from '../../extent.js';\nimport { compose as composeTransform, create as createTransform, } from '../../transform.js';\nimport { createCanvasContext2D } from '../../dom.js';\nimport { isEmpty } from '../../obj.js';\nimport { numberSafeCompareFunction } from '../../array.js';\nimport { transform2D } from '../../geom/flat/transform.js';\n/**\n * @const\n * @type {Array<import(\"./BuilderType.js\").default>}\n */\nvar ORDER = [\n    BuilderType.POLYGON,\n    BuilderType.CIRCLE,\n    BuilderType.LINE_STRING,\n    BuilderType.IMAGE,\n    BuilderType.TEXT,\n    BuilderType.DEFAULT,\n];\nvar ExecutorGroup = /** @class */ (function () {\n    /**\n     * @param {import(\"../../extent.js\").Extent} maxExtent Max extent for clipping. When a\n     * `maxExtent` was set on the Buillder for this executor group, the same `maxExtent`\n     * should be set here, unless the target context does not exceet that extent (which\n     * can be the case when rendering to tiles).\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {boolean} overlaps The executor group can have overlapping geometries.\n     * @param {!Object<string, !Object<import(\"./BuilderType.js\").default, import(\"../canvas.js\").SerializableInstructions>>} allInstructions\n     * The serializable instructions.\n     * @param {number=} opt_renderBuffer Optional rendering buffer.\n     */\n    function ExecutorGroup(maxExtent, resolution, pixelRatio, overlaps, allInstructions, opt_renderBuffer) {\n        /**\n         * @private\n         * @type {import(\"../../extent.js\").Extent}\n         */\n        this.maxExtent_ = maxExtent;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        this.overlaps_ = overlaps;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.pixelRatio_ = pixelRatio;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.resolution_ = resolution;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        this.renderBuffer_ = opt_renderBuffer;\n        /**\n         * @private\n         * @type {!Object<string, !Object<import(\"./BuilderType.js\").default, import(\"./Executor\").default>>}\n         */\n        this.executorsByZIndex_ = {};\n        /**\n         * @private\n         * @type {CanvasRenderingContext2D}\n         */\n        this.hitDetectionContext_ = null;\n        /**\n         * @private\n         * @type {import(\"../../transform.js\").Transform}\n         */\n        this.hitDetectionTransform_ = createTransform();\n        this.createExecutors_(allInstructions);\n    }\n    /**\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {import(\"../../transform.js\").Transform} transform Transform.\n     */\n    ExecutorGroup.prototype.clip = function (context, transform) {\n        var flatClipCoords = this.getClipCoords(transform);\n        context.beginPath();\n        context.moveTo(flatClipCoords[0], flatClipCoords[1]);\n        context.lineTo(flatClipCoords[2], flatClipCoords[3]);\n        context.lineTo(flatClipCoords[4], flatClipCoords[5]);\n        context.lineTo(flatClipCoords[6], flatClipCoords[7]);\n        context.clip();\n    };\n    /**\n     * Create executors and populate them using the provided instructions.\n     * @private\n     * @param {!Object<string, !Object<import(\"./BuilderType.js\").default, import(\"../canvas.js\").SerializableInstructions>>} allInstructions The serializable instructions\n     */\n    ExecutorGroup.prototype.createExecutors_ = function (allInstructions) {\n        for (var zIndex in allInstructions) {\n            var executors = this.executorsByZIndex_[zIndex];\n            if (executors === undefined) {\n                executors = {};\n                this.executorsByZIndex_[zIndex] = executors;\n            }\n            var instructionByZindex = allInstructions[zIndex];\n            var renderBuffer = [this.renderBuffer_ || 0, this.renderBuffer_ || 0];\n            for (var builderType in instructionByZindex) {\n                var instructions = instructionByZindex[builderType];\n                executors[builderType] = new Executor(this.resolution_, this.pixelRatio_, this.overlaps_, instructions, renderBuffer);\n            }\n        }\n    };\n    /**\n     * @param {Array<import(\"./BuilderType.js\").default>} executors Executors.\n     * @return {boolean} Has executors of the provided types.\n     */\n    ExecutorGroup.prototype.hasExecutors = function (executors) {\n        for (var zIndex in this.executorsByZIndex_) {\n            var candidates = this.executorsByZIndex_[zIndex];\n            for (var i = 0, ii = executors.length; i < ii; ++i) {\n                if (executors[i] in candidates) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    /**\n     * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {number} resolution Resolution.\n     * @param {number} rotation Rotation.\n     * @param {number} hitTolerance Hit tolerance in pixels.\n     * @param {function(import(\"../../Feature.js\").FeatureLike, import(\"../../geom/SimpleGeometry.js\").default, number): T} callback Feature callback.\n     * @param {Array<import(\"../../Feature.js\").FeatureLike>} declutteredFeatures Decluttered features.\n     * @return {T|undefined} Callback result.\n     * @template T\n     */\n    ExecutorGroup.prototype.forEachFeatureAtCoordinate = function (coordinate, resolution, rotation, hitTolerance, callback, declutteredFeatures) {\n        hitTolerance = Math.round(hitTolerance);\n        var contextSize = hitTolerance * 2 + 1;\n        var transform = composeTransform(this.hitDetectionTransform_, hitTolerance + 0.5, hitTolerance + 0.5, 1 / resolution, -1 / resolution, -rotation, -coordinate[0], -coordinate[1]);\n        var newContext = !this.hitDetectionContext_;\n        if (newContext) {\n            this.hitDetectionContext_ = createCanvasContext2D(contextSize, contextSize);\n        }\n        var context = this.hitDetectionContext_;\n        if (context.canvas.width !== contextSize ||\n            context.canvas.height !== contextSize) {\n            context.canvas.width = contextSize;\n            context.canvas.height = contextSize;\n        }\n        else if (!newContext) {\n            context.clearRect(0, 0, contextSize, contextSize);\n        }\n        /**\n         * @type {import(\"../../extent.js\").Extent}\n         */\n        var hitExtent;\n        if (this.renderBuffer_ !== undefined) {\n            hitExtent = createEmpty();\n            extendCoordinate(hitExtent, coordinate);\n            buffer(hitExtent, resolution * (this.renderBuffer_ + hitTolerance), hitExtent);\n        }\n        var indexes = getPixelIndexArray(hitTolerance);\n        var builderType;\n        /**\n         * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n         * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n         * @return {T|undefined} Callback result.\n         */\n        function featureCallback(feature, geometry) {\n            var imageData = context.getImageData(0, 0, contextSize, contextSize)\n                .data;\n            for (var i_1 = 0, ii = indexes.length; i_1 < ii; i_1++) {\n                if (imageData[indexes[i_1]] > 0) {\n                    if (!declutteredFeatures ||\n                        (builderType !== BuilderType.IMAGE &&\n                            builderType !== BuilderType.TEXT) ||\n                        declutteredFeatures.indexOf(feature) !== -1) {\n                        var idx = (indexes[i_1] - 3) / 4;\n                        var x = hitTolerance - (idx % contextSize);\n                        var y = hitTolerance - ((idx / contextSize) | 0);\n                        var result_1 = callback(feature, geometry, x * x + y * y);\n                        if (result_1) {\n                            return result_1;\n                        }\n                    }\n                    context.clearRect(0, 0, contextSize, contextSize);\n                    break;\n                }\n            }\n            return undefined;\n        }\n        /** @type {Array<number>} */\n        var zs = Object.keys(this.executorsByZIndex_).map(Number);\n        zs.sort(numberSafeCompareFunction);\n        var i, j, executors, executor, result;\n        for (i = zs.length - 1; i >= 0; --i) {\n            var zIndexKey = zs[i].toString();\n            executors = this.executorsByZIndex_[zIndexKey];\n            for (j = ORDER.length - 1; j >= 0; --j) {\n                builderType = ORDER[j];\n                executor = executors[builderType];\n                if (executor !== undefined) {\n                    result = executor.executeHitDetection(context, transform, rotation, featureCallback, hitExtent);\n                    if (result) {\n                        return result;\n                    }\n                }\n            }\n        }\n        return undefined;\n    };\n    /**\n     * @param {import(\"../../transform.js\").Transform} transform Transform.\n     * @return {Array<number>} Clip coordinates.\n     */\n    ExecutorGroup.prototype.getClipCoords = function (transform) {\n        var maxExtent = this.maxExtent_;\n        if (!maxExtent) {\n            return null;\n        }\n        var minX = maxExtent[0];\n        var minY = maxExtent[1];\n        var maxX = maxExtent[2];\n        var maxY = maxExtent[3];\n        var flatClipCoords = [minX, minY, minX, maxY, maxX, maxY, maxX, minY];\n        transform2D(flatClipCoords, 0, 8, 2, transform, flatClipCoords);\n        return flatClipCoords;\n    };\n    /**\n     * @return {boolean} Is empty.\n     */\n    ExecutorGroup.prototype.isEmpty = function () {\n        return isEmpty(this.executorsByZIndex_);\n    };\n    /**\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {number} contextScale Scale of the context.\n     * @param {import(\"../../transform.js\").Transform} transform Transform.\n     * @param {number} viewRotation View rotation.\n     * @param {boolean} snapToPixel Snap point symbols and test to integer pixel.\n     * @param {Array<import(\"./BuilderType.js\").default>=} opt_builderTypes Ordered replay types to replay.\n     *     Default is {@link module:ol/render/replay~ORDER}\n     * @param {import(\"rbush\").default=} opt_declutterTree Declutter tree.\n     */\n    ExecutorGroup.prototype.execute = function (context, contextScale, transform, viewRotation, snapToPixel, opt_builderTypes, opt_declutterTree) {\n        /** @type {Array<number>} */\n        var zs = Object.keys(this.executorsByZIndex_).map(Number);\n        zs.sort(numberSafeCompareFunction);\n        // setup clipping so that the parts of over-simplified geometries are not\n        // visible outside the current extent when panning\n        if (this.maxExtent_) {\n            context.save();\n            this.clip(context, transform);\n        }\n        var builderTypes = opt_builderTypes ? opt_builderTypes : ORDER;\n        var i, ii, j, jj, replays, replay;\n        if (opt_declutterTree) {\n            zs.reverse();\n        }\n        for (i = 0, ii = zs.length; i < ii; ++i) {\n            var zIndexKey = zs[i].toString();\n            replays = this.executorsByZIndex_[zIndexKey];\n            for (j = 0, jj = builderTypes.length; j < jj; ++j) {\n                var builderType = builderTypes[j];\n                replay = replays[builderType];\n                if (replay !== undefined) {\n                    replay.execute(context, contextScale, transform, viewRotation, snapToPixel, opt_declutterTree);\n                }\n            }\n        }\n        if (this.maxExtent_) {\n            context.restore();\n        }\n    };\n    return ExecutorGroup;\n}());\n/**\n * This cache is used to store arrays of indexes for calculated pixel circles\n * to increase performance.\n * It is a static property to allow each Replaygroup to access it.\n * @type {Object<number, Array<number>>}\n */\nvar circlePixelIndexArrayCache = {};\n/**\n * This methods creates an array with indexes of all pixels within a circle,\n * ordered by how close they are to the center.\n * A cache is used to increase performance.\n * @param {number} radius Radius.\n * @returns {Array<number>} An array with indexes within a circle.\n */\nexport function getPixelIndexArray(radius) {\n    if (circlePixelIndexArrayCache[radius] !== undefined) {\n        return circlePixelIndexArrayCache[radius];\n    }\n    var size = radius * 2 + 1;\n    var maxDistanceSq = radius * radius;\n    var distances = new Array(maxDistanceSq + 1);\n    for (var i = 0; i <= radius; ++i) {\n        for (var j = 0; j <= radius; ++j) {\n            var distanceSq = i * i + j * j;\n            if (distanceSq > maxDistanceSq) {\n                break;\n            }\n            var distance = distances[distanceSq];\n            if (!distance) {\n                distance = [];\n                distances[distanceSq] = distance;\n            }\n            distance.push(((radius + i) * size + (radius + j)) * 4 + 3);\n            if (i > 0) {\n                distance.push(((radius - i) * size + (radius + j)) * 4 + 3);\n            }\n            if (j > 0) {\n                distance.push(((radius + i) * size + (radius - j)) * 4 + 3);\n                if (i > 0) {\n                    distance.push(((radius - i) * size + (radius - j)) * 4 + 3);\n                }\n            }\n        }\n    }\n    var pixelIndex = [];\n    for (var i = 0, ii = distances.length; i < ii; ++i) {\n        if (distances[i]) {\n            pixelIndex.push.apply(pixelIndex, distances[i]);\n        }\n    }\n    circlePixelIndexArrayCache[radius] = pixelIndex;\n    return pixelIndex;\n}\nexport default ExecutorGroup;\n//# sourceMappingURL=ExecutorGroup.js.map","/**\n * @module ol/render/canvas/Immediate\n */\n// FIXME test, especially polygons with holes and multipolygons\n// FIXME need to handle large thick features (where pixel size matters)\n// FIXME add offset and end to ol/geom/flat/transform~transform2D?\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport GeometryType from '../../geom/GeometryType.js';\nimport VectorContext from '../VectorContext.js';\nimport { asColorLike } from '../../colorlike.js';\nimport { compose as composeTransform, create as createTransform, } from '../../transform.js';\nimport { defaultFillStyle, defaultFont, defaultLineCap, defaultLineDash, defaultLineDashOffset, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, defaultTextAlign, defaultTextBaseline, } from '../canvas.js';\nimport { equals } from '../../array.js';\nimport { intersects } from '../../extent.js';\nimport { transform2D } from '../../geom/flat/transform.js';\nimport { transformGeom2D } from '../../geom/SimpleGeometry.js';\n/**\n * @classdesc\n * A concrete subclass of {@link module:ol/render/VectorContext} that implements\n * direct rendering of features and geometries to an HTML5 Canvas context.\n * Instances of this class are created internally by the library and\n * provided to application code as vectorContext member of the\n * {@link module:ol/render/Event~RenderEvent} object associated with postcompose, precompose and\n * render events emitted by layers and maps.\n */\nvar CanvasImmediateRenderer = /** @class */ (function (_super) {\n    __extends(CanvasImmediateRenderer, _super);\n    /**\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../../extent.js\").Extent} extent Extent.\n     * @param {import(\"../../transform.js\").Transform} transform Transform.\n     * @param {number} viewRotation View rotation.\n     * @param {number=} opt_squaredTolerance Optional squared tolerance for simplification.\n     * @param {import(\"../../proj.js\").TransformFunction=} opt_userTransform Transform from user to view projection.\n     */\n    function CanvasImmediateRenderer(context, pixelRatio, extent, transform, viewRotation, opt_squaredTolerance, opt_userTransform) {\n        var _this = _super.call(this) || this;\n        /**\n         * @private\n         * @type {CanvasRenderingContext2D}\n         */\n        _this.context_ = context;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.pixelRatio_ = pixelRatio;\n        /**\n         * @private\n         * @type {import(\"../../extent.js\").Extent}\n         */\n        _this.extent_ = extent;\n        /**\n         * @private\n         * @type {import(\"../../transform.js\").Transform}\n         */\n        _this.transform_ = transform;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.viewRotation_ = viewRotation;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.squaredTolerance_ = opt_squaredTolerance;\n        /**\n         * @private\n         * @type {import(\"../../proj.js\").TransformFunction}\n         */\n        _this.userTransform_ = opt_userTransform;\n        /**\n         * @private\n         * @type {?import(\"../canvas.js\").FillState}\n         */\n        _this.contextFillState_ = null;\n        /**\n         * @private\n         * @type {?import(\"../canvas.js\").StrokeState}\n         */\n        _this.contextStrokeState_ = null;\n        /**\n         * @private\n         * @type {?import(\"../canvas.js\").TextState}\n         */\n        _this.contextTextState_ = null;\n        /**\n         * @private\n         * @type {?import(\"../canvas.js\").FillState}\n         */\n        _this.fillState_ = null;\n        /**\n         * @private\n         * @type {?import(\"../canvas.js\").StrokeState}\n         */\n        _this.strokeState_ = null;\n        /**\n         * @private\n         * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}\n         */\n        _this.image_ = null;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.imageAnchorX_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.imageAnchorY_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.imageHeight_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.imageOpacity_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.imageOriginX_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.imageOriginY_ = 0;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.imageRotateWithView_ = false;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.imageRotation_ = 0;\n        /**\n         * @private\n         * @type {import(\"../../size.js\").Size}\n         */\n        _this.imageScale_ = [0, 0];\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.imageWidth_ = 0;\n        /**\n         * @private\n         * @type {string}\n         */\n        _this.text_ = '';\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.textOffsetX_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.textOffsetY_ = 0;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.textRotateWithView_ = false;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.textRotation_ = 0;\n        /**\n         * @private\n         * @type {import(\"../../size.js\").Size}\n         */\n        _this.textScale_ = [0, 0];\n        /**\n         * @private\n         * @type {?import(\"../canvas.js\").FillState}\n         */\n        _this.textFillState_ = null;\n        /**\n         * @private\n         * @type {?import(\"../canvas.js\").StrokeState}\n         */\n        _this.textStrokeState_ = null;\n        /**\n         * @private\n         * @type {?import(\"../canvas.js\").TextState}\n         */\n        _this.textState_ = null;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        _this.pixelCoordinates_ = [];\n        /**\n         * @private\n         * @type {import(\"../../transform.js\").Transform}\n         */\n        _this.tmpLocalTransform_ = createTransform();\n        return _this;\n    }\n    /**\n     * @param {Array<number>} flatCoordinates Flat coordinates.\n     * @param {number} offset Offset.\n     * @param {number} end End.\n     * @param {number} stride Stride.\n     * @private\n     */\n    CanvasImmediateRenderer.prototype.drawImages_ = function (flatCoordinates, offset, end, stride) {\n        if (!this.image_) {\n            return;\n        }\n        var pixelCoordinates = transform2D(flatCoordinates, offset, end, 2, this.transform_, this.pixelCoordinates_);\n        var context = this.context_;\n        var localTransform = this.tmpLocalTransform_;\n        var alpha = context.globalAlpha;\n        if (this.imageOpacity_ != 1) {\n            context.globalAlpha = alpha * this.imageOpacity_;\n        }\n        var rotation = this.imageRotation_;\n        if (this.imageRotateWithView_) {\n            rotation += this.viewRotation_;\n        }\n        for (var i = 0, ii = pixelCoordinates.length; i < ii; i += 2) {\n            var x = pixelCoordinates[i] - this.imageAnchorX_;\n            var y = pixelCoordinates[i + 1] - this.imageAnchorY_;\n            if (rotation !== 0 ||\n                this.imageScale_[0] != 1 ||\n                this.imageScale_[1] != 1) {\n                var centerX = x + this.imageAnchorX_;\n                var centerY = y + this.imageAnchorY_;\n                composeTransform(localTransform, centerX, centerY, 1, 1, rotation, -centerX, -centerY);\n                context.setTransform.apply(context, localTransform);\n                context.translate(centerX, centerY);\n                context.scale(this.imageScale_[0], this.imageScale_[1]);\n                context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_, this.imageWidth_, this.imageHeight_, -this.imageAnchorX_, -this.imageAnchorY_, this.imageWidth_, this.imageHeight_);\n                context.setTransform(1, 0, 0, 1, 0, 0);\n            }\n            else {\n                context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_, this.imageWidth_, this.imageHeight_, x, y, this.imageWidth_, this.imageHeight_);\n            }\n        }\n        if (this.imageOpacity_ != 1) {\n            context.globalAlpha = alpha;\n        }\n    };\n    /**\n     * @param {Array<number>} flatCoordinates Flat coordinates.\n     * @param {number} offset Offset.\n     * @param {number} end End.\n     * @param {number} stride Stride.\n     * @private\n     */\n    CanvasImmediateRenderer.prototype.drawText_ = function (flatCoordinates, offset, end, stride) {\n        if (!this.textState_ || this.text_ === '') {\n            return;\n        }\n        if (this.textFillState_) {\n            this.setContextFillState_(this.textFillState_);\n        }\n        if (this.textStrokeState_) {\n            this.setContextStrokeState_(this.textStrokeState_);\n        }\n        this.setContextTextState_(this.textState_);\n        var pixelCoordinates = transform2D(flatCoordinates, offset, end, stride, this.transform_, this.pixelCoordinates_);\n        var context = this.context_;\n        var rotation = this.textRotation_;\n        if (this.textRotateWithView_) {\n            rotation += this.viewRotation_;\n        }\n        for (; offset < end; offset += stride) {\n            var x = pixelCoordinates[offset] + this.textOffsetX_;\n            var y = pixelCoordinates[offset + 1] + this.textOffsetY_;\n            if (rotation !== 0 ||\n                this.textScale_[0] != 1 ||\n                this.textScale_[1] != 1) {\n                var localTransform = composeTransform(this.tmpLocalTransform_, x, y, 1, 1, rotation, -x, -y);\n                context.setTransform.apply(context, localTransform);\n                context.translate(x, y);\n                context.scale(this.textScale_[0], this.textScale_[1]);\n                if (this.textStrokeState_) {\n                    context.strokeText(this.text_, 0, 0);\n                }\n                if (this.textFillState_) {\n                    context.fillText(this.text_, 0, 0);\n                }\n                context.setTransform(1, 0, 0, 1, 0, 0);\n            }\n            else {\n                if (this.textStrokeState_) {\n                    context.strokeText(this.text_, x, y);\n                }\n                if (this.textFillState_) {\n                    context.fillText(this.text_, x, y);\n                }\n            }\n        }\n    };\n    /**\n     * @param {Array<number>} flatCoordinates Flat coordinates.\n     * @param {number} offset Offset.\n     * @param {number} end End.\n     * @param {number} stride Stride.\n     * @param {boolean} close Close.\n     * @private\n     * @return {number} end End.\n     */\n    CanvasImmediateRenderer.prototype.moveToLineTo_ = function (flatCoordinates, offset, end, stride, close) {\n        var context = this.context_;\n        var pixelCoordinates = transform2D(flatCoordinates, offset, end, stride, this.transform_, this.pixelCoordinates_);\n        context.moveTo(pixelCoordinates[0], pixelCoordinates[1]);\n        var length = pixelCoordinates.length;\n        if (close) {\n            length -= 2;\n        }\n        for (var i = 2; i < length; i += 2) {\n            context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1]);\n        }\n        if (close) {\n            context.closePath();\n        }\n        return end;\n    };\n    /**\n     * @param {Array<number>} flatCoordinates Flat coordinates.\n     * @param {number} offset Offset.\n     * @param {Array<number>} ends Ends.\n     * @param {number} stride Stride.\n     * @private\n     * @return {number} End.\n     */\n    CanvasImmediateRenderer.prototype.drawRings_ = function (flatCoordinates, offset, ends, stride) {\n        for (var i = 0, ii = ends.length; i < ii; ++i) {\n            offset = this.moveToLineTo_(flatCoordinates, offset, ends[i], stride, true);\n        }\n        return offset;\n    };\n    /**\n     * Render a circle geometry into the canvas.  Rendering is immediate and uses\n     * the current fill and stroke styles.\n     *\n     * @param {import(\"../../geom/Circle.js\").default} geometry Circle geometry.\n     * @api\n     */\n    CanvasImmediateRenderer.prototype.drawCircle = function (geometry) {\n        if (!intersects(this.extent_, geometry.getExtent())) {\n            return;\n        }\n        if (this.fillState_ || this.strokeState_) {\n            if (this.fillState_) {\n                this.setContextFillState_(this.fillState_);\n            }\n            if (this.strokeState_) {\n                this.setContextStrokeState_(this.strokeState_);\n            }\n            var pixelCoordinates = transformGeom2D(geometry, this.transform_, this.pixelCoordinates_);\n            var dx = pixelCoordinates[2] - pixelCoordinates[0];\n            var dy = pixelCoordinates[3] - pixelCoordinates[1];\n            var radius = Math.sqrt(dx * dx + dy * dy);\n            var context = this.context_;\n            context.beginPath();\n            context.arc(pixelCoordinates[0], pixelCoordinates[1], radius, 0, 2 * Math.PI);\n            if (this.fillState_) {\n                context.fill();\n            }\n            if (this.strokeState_) {\n                context.stroke();\n            }\n        }\n        if (this.text_ !== '') {\n            this.drawText_(geometry.getCenter(), 0, 2, 2);\n        }\n    };\n    /**\n     * Set the rendering style.  Note that since this is an immediate rendering API,\n     * any `zIndex` on the provided style will be ignored.\n     *\n     * @param {import(\"../../style/Style.js\").default} style The rendering style.\n     * @api\n     */\n    CanvasImmediateRenderer.prototype.setStyle = function (style) {\n        this.setFillStrokeStyle(style.getFill(), style.getStroke());\n        this.setImageStyle(style.getImage());\n        this.setTextStyle(style.getText());\n    };\n    /**\n     * @param {import(\"../../transform.js\").Transform} transform Transform.\n     */\n    CanvasImmediateRenderer.prototype.setTransform = function (transform) {\n        this.transform_ = transform;\n    };\n    /**\n     * Render a geometry into the canvas.  Call\n     * {@link module:ol/render/canvas/Immediate#setStyle} first to set the rendering style.\n     *\n     * @param {import(\"../../geom/Geometry.js\").default|import(\"../Feature.js\").default} geometry The geometry to render.\n     * @api\n     */\n    CanvasImmediateRenderer.prototype.drawGeometry = function (geometry) {\n        var type = geometry.getType();\n        switch (type) {\n            case GeometryType.POINT:\n                this.drawPoint(\n                /** @type {import(\"../../geom/Point.js\").default} */ (geometry));\n                break;\n            case GeometryType.LINE_STRING:\n                this.drawLineString(\n                /** @type {import(\"../../geom/LineString.js\").default} */ (geometry));\n                break;\n            case GeometryType.POLYGON:\n                this.drawPolygon(\n                /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry));\n                break;\n            case GeometryType.MULTI_POINT:\n                this.drawMultiPoint(\n                /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry));\n                break;\n            case GeometryType.MULTI_LINE_STRING:\n                this.drawMultiLineString(\n                /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry));\n                break;\n            case GeometryType.MULTI_POLYGON:\n                this.drawMultiPolygon(\n                /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry));\n                break;\n            case GeometryType.GEOMETRY_COLLECTION:\n                this.drawGeometryCollection(\n                /** @type {import(\"../../geom/GeometryCollection.js\").default} */ (geometry));\n                break;\n            case GeometryType.CIRCLE:\n                this.drawCircle(\n                /** @type {import(\"../../geom/Circle.js\").default} */ (geometry));\n                break;\n            default:\n        }\n    };\n    /**\n     * Render a feature into the canvas.  Note that any `zIndex` on the provided\n     * style will be ignored - features are rendered immediately in the order that\n     * this method is called.  If you need `zIndex` support, you should be using an\n     * {@link module:ol/layer/Vector~VectorLayer} instead.\n     *\n     * @param {import(\"../../Feature.js\").default} feature Feature.\n     * @param {import(\"../../style/Style.js\").default} style Style.\n     * @api\n     */\n    CanvasImmediateRenderer.prototype.drawFeature = function (feature, style) {\n        var geometry = style.getGeometryFunction()(feature);\n        if (!geometry || !intersects(this.extent_, geometry.getExtent())) {\n            return;\n        }\n        this.setStyle(style);\n        this.drawGeometry(geometry);\n    };\n    /**\n     * Render a GeometryCollection to the canvas.  Rendering is immediate and\n     * uses the current styles appropriate for each geometry in the collection.\n     *\n     * @param {import(\"../../geom/GeometryCollection.js\").default} geometry Geometry collection.\n     */\n    CanvasImmediateRenderer.prototype.drawGeometryCollection = function (geometry) {\n        var geometries = geometry.getGeometriesArray();\n        for (var i = 0, ii = geometries.length; i < ii; ++i) {\n            this.drawGeometry(geometries[i]);\n        }\n    };\n    /**\n     * Render a Point geometry into the canvas.  Rendering is immediate and uses\n     * the current style.\n     *\n     * @param {import(\"../../geom/Point.js\").default|import(\"../Feature.js\").default} geometry Point geometry.\n     */\n    CanvasImmediateRenderer.prototype.drawPoint = function (geometry) {\n        if (this.squaredTolerance_) {\n            geometry = /** @type {import(\"../../geom/Point.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n        }\n        var flatCoordinates = geometry.getFlatCoordinates();\n        var stride = geometry.getStride();\n        if (this.image_) {\n            this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n        }\n        if (this.text_ !== '') {\n            this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n        }\n    };\n    /**\n     * Render a MultiPoint geometry  into the canvas.  Rendering is immediate and\n     * uses the current style.\n     *\n     * @param {import(\"../../geom/MultiPoint.js\").default|import(\"../Feature.js\").default} geometry MultiPoint geometry.\n     */\n    CanvasImmediateRenderer.prototype.drawMultiPoint = function (geometry) {\n        if (this.squaredTolerance_) {\n            geometry = /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n        }\n        var flatCoordinates = geometry.getFlatCoordinates();\n        var stride = geometry.getStride();\n        if (this.image_) {\n            this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n        }\n        if (this.text_ !== '') {\n            this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n        }\n    };\n    /**\n     * Render a LineString into the canvas.  Rendering is immediate and uses\n     * the current style.\n     *\n     * @param {import(\"../../geom/LineString.js\").default|import(\"../Feature.js\").default} geometry LineString geometry.\n     */\n    CanvasImmediateRenderer.prototype.drawLineString = function (geometry) {\n        if (this.squaredTolerance_) {\n            geometry = /** @type {import(\"../../geom/LineString.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n        }\n        if (!intersects(this.extent_, geometry.getExtent())) {\n            return;\n        }\n        if (this.strokeState_) {\n            this.setContextStrokeState_(this.strokeState_);\n            var context = this.context_;\n            var flatCoordinates = geometry.getFlatCoordinates();\n            context.beginPath();\n            this.moveToLineTo_(flatCoordinates, 0, flatCoordinates.length, geometry.getStride(), false);\n            context.stroke();\n        }\n        if (this.text_ !== '') {\n            var flatMidpoint = geometry.getFlatMidpoint();\n            this.drawText_(flatMidpoint, 0, 2, 2);\n        }\n    };\n    /**\n     * Render a MultiLineString geometry into the canvas.  Rendering is immediate\n     * and uses the current style.\n     *\n     * @param {import(\"../../geom/MultiLineString.js\").default|import(\"../Feature.js\").default} geometry MultiLineString geometry.\n     */\n    CanvasImmediateRenderer.prototype.drawMultiLineString = function (geometry) {\n        if (this.squaredTolerance_) {\n            geometry = /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n        }\n        var geometryExtent = geometry.getExtent();\n        if (!intersects(this.extent_, geometryExtent)) {\n            return;\n        }\n        if (this.strokeState_) {\n            this.setContextStrokeState_(this.strokeState_);\n            var context = this.context_;\n            var flatCoordinates = geometry.getFlatCoordinates();\n            var offset = 0;\n            var ends = /** @type {Array<number>} */ (geometry.getEnds());\n            var stride = geometry.getStride();\n            context.beginPath();\n            for (var i = 0, ii = ends.length; i < ii; ++i) {\n                offset = this.moveToLineTo_(flatCoordinates, offset, ends[i], stride, false);\n            }\n            context.stroke();\n        }\n        if (this.text_ !== '') {\n            var flatMidpoints = geometry.getFlatMidpoints();\n            this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2);\n        }\n    };\n    /**\n     * Render a Polygon geometry into the canvas.  Rendering is immediate and uses\n     * the current style.\n     *\n     * @param {import(\"../../geom/Polygon.js\").default|import(\"../Feature.js\").default} geometry Polygon geometry.\n     */\n    CanvasImmediateRenderer.prototype.drawPolygon = function (geometry) {\n        if (this.squaredTolerance_) {\n            geometry = /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n        }\n        if (!intersects(this.extent_, geometry.getExtent())) {\n            return;\n        }\n        if (this.strokeState_ || this.fillState_) {\n            if (this.fillState_) {\n                this.setContextFillState_(this.fillState_);\n            }\n            if (this.strokeState_) {\n                this.setContextStrokeState_(this.strokeState_);\n            }\n            var context = this.context_;\n            context.beginPath();\n            this.drawRings_(geometry.getOrientedFlatCoordinates(), 0, \n            /** @type {Array<number>} */ (geometry.getEnds()), geometry.getStride());\n            if (this.fillState_) {\n                context.fill();\n            }\n            if (this.strokeState_) {\n                context.stroke();\n            }\n        }\n        if (this.text_ !== '') {\n            var flatInteriorPoint = geometry.getFlatInteriorPoint();\n            this.drawText_(flatInteriorPoint, 0, 2, 2);\n        }\n    };\n    /**\n     * Render MultiPolygon geometry into the canvas.  Rendering is immediate and\n     * uses the current style.\n     * @param {import(\"../../geom/MultiPolygon.js\").default} geometry MultiPolygon geometry.\n     */\n    CanvasImmediateRenderer.prototype.drawMultiPolygon = function (geometry) {\n        if (this.squaredTolerance_) {\n            geometry = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n        }\n        if (!intersects(this.extent_, geometry.getExtent())) {\n            return;\n        }\n        if (this.strokeState_ || this.fillState_) {\n            if (this.fillState_) {\n                this.setContextFillState_(this.fillState_);\n            }\n            if (this.strokeState_) {\n                this.setContextStrokeState_(this.strokeState_);\n            }\n            var context = this.context_;\n            var flatCoordinates = geometry.getOrientedFlatCoordinates();\n            var offset = 0;\n            var endss = geometry.getEndss();\n            var stride = geometry.getStride();\n            context.beginPath();\n            for (var i = 0, ii = endss.length; i < ii; ++i) {\n                var ends = endss[i];\n                offset = this.drawRings_(flatCoordinates, offset, ends, stride);\n            }\n            if (this.fillState_) {\n                context.fill();\n            }\n            if (this.strokeState_) {\n                context.stroke();\n            }\n        }\n        if (this.text_ !== '') {\n            var flatInteriorPoints = geometry.getFlatInteriorPoints();\n            this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2);\n        }\n    };\n    /**\n     * @param {import(\"../canvas.js\").FillState} fillState Fill state.\n     * @private\n     */\n    CanvasImmediateRenderer.prototype.setContextFillState_ = function (fillState) {\n        var context = this.context_;\n        var contextFillState = this.contextFillState_;\n        if (!contextFillState) {\n            context.fillStyle = fillState.fillStyle;\n            this.contextFillState_ = {\n                fillStyle: fillState.fillStyle,\n            };\n        }\n        else {\n            if (contextFillState.fillStyle != fillState.fillStyle) {\n                contextFillState.fillStyle = fillState.fillStyle;\n                context.fillStyle = fillState.fillStyle;\n            }\n        }\n    };\n    /**\n     * @param {import(\"../canvas.js\").StrokeState} strokeState Stroke state.\n     * @private\n     */\n    CanvasImmediateRenderer.prototype.setContextStrokeState_ = function (strokeState) {\n        var context = this.context_;\n        var contextStrokeState = this.contextStrokeState_;\n        if (!contextStrokeState) {\n            context.lineCap = strokeState.lineCap;\n            if (context.setLineDash) {\n                context.setLineDash(strokeState.lineDash);\n                context.lineDashOffset = strokeState.lineDashOffset;\n            }\n            context.lineJoin = strokeState.lineJoin;\n            context.lineWidth = strokeState.lineWidth;\n            context.miterLimit = strokeState.miterLimit;\n            context.strokeStyle = strokeState.strokeStyle;\n            this.contextStrokeState_ = {\n                lineCap: strokeState.lineCap,\n                lineDash: strokeState.lineDash,\n                lineDashOffset: strokeState.lineDashOffset,\n                lineJoin: strokeState.lineJoin,\n                lineWidth: strokeState.lineWidth,\n                miterLimit: strokeState.miterLimit,\n                strokeStyle: strokeState.strokeStyle,\n            };\n        }\n        else {\n            if (contextStrokeState.lineCap != strokeState.lineCap) {\n                contextStrokeState.lineCap = strokeState.lineCap;\n                context.lineCap = strokeState.lineCap;\n            }\n            if (context.setLineDash) {\n                if (!equals(contextStrokeState.lineDash, strokeState.lineDash)) {\n                    context.setLineDash((contextStrokeState.lineDash = strokeState.lineDash));\n                }\n                if (contextStrokeState.lineDashOffset != strokeState.lineDashOffset) {\n                    contextStrokeState.lineDashOffset = strokeState.lineDashOffset;\n                    context.lineDashOffset = strokeState.lineDashOffset;\n                }\n            }\n            if (contextStrokeState.lineJoin != strokeState.lineJoin) {\n                contextStrokeState.lineJoin = strokeState.lineJoin;\n                context.lineJoin = strokeState.lineJoin;\n            }\n            if (contextStrokeState.lineWidth != strokeState.lineWidth) {\n                contextStrokeState.lineWidth = strokeState.lineWidth;\n                context.lineWidth = strokeState.lineWidth;\n            }\n            if (contextStrokeState.miterLimit != strokeState.miterLimit) {\n                contextStrokeState.miterLimit = strokeState.miterLimit;\n                context.miterLimit = strokeState.miterLimit;\n            }\n            if (contextStrokeState.strokeStyle != strokeState.strokeStyle) {\n                contextStrokeState.strokeStyle = strokeState.strokeStyle;\n                context.strokeStyle = strokeState.strokeStyle;\n            }\n        }\n    };\n    /**\n     * @param {import(\"../canvas.js\").TextState} textState Text state.\n     * @private\n     */\n    CanvasImmediateRenderer.prototype.setContextTextState_ = function (textState) {\n        var context = this.context_;\n        var contextTextState = this.contextTextState_;\n        var textAlign = textState.textAlign\n            ? textState.textAlign\n            : defaultTextAlign;\n        if (!contextTextState) {\n            context.font = textState.font;\n            context.textAlign = /** @type {CanvasTextAlign} */ (textAlign);\n            context.textBaseline = /** @type {CanvasTextBaseline} */ (textState.textBaseline);\n            this.contextTextState_ = {\n                font: textState.font,\n                textAlign: textAlign,\n                textBaseline: textState.textBaseline,\n            };\n        }\n        else {\n            if (contextTextState.font != textState.font) {\n                contextTextState.font = textState.font;\n                context.font = textState.font;\n            }\n            if (contextTextState.textAlign != textAlign) {\n                contextTextState.textAlign = /** @type {CanvasTextAlign} */ (textAlign);\n                context.textAlign = /** @type {CanvasTextAlign} */ (textAlign);\n            }\n            if (contextTextState.textBaseline != textState.textBaseline) {\n                contextTextState.textBaseline = /** @type {CanvasTextBaseline} */ (textState.textBaseline);\n                context.textBaseline = /** @type {CanvasTextBaseline} */ (textState.textBaseline);\n            }\n        }\n    };\n    /**\n     * Set the fill and stroke style for subsequent draw operations.  To clear\n     * either fill or stroke styles, pass null for the appropriate parameter.\n     *\n     * @param {import(\"../../style/Fill.js\").default} fillStyle Fill style.\n     * @param {import(\"../../style/Stroke.js\").default} strokeStyle Stroke style.\n     */\n    CanvasImmediateRenderer.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) {\n        if (!fillStyle) {\n            this.fillState_ = null;\n        }\n        else {\n            var fillStyleColor = fillStyle.getColor();\n            this.fillState_ = {\n                fillStyle: asColorLike(fillStyleColor ? fillStyleColor : defaultFillStyle),\n            };\n        }\n        if (!strokeStyle) {\n            this.strokeState_ = null;\n        }\n        else {\n            var strokeStyleColor = strokeStyle.getColor();\n            var strokeStyleLineCap = strokeStyle.getLineCap();\n            var strokeStyleLineDash = strokeStyle.getLineDash();\n            var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n            var strokeStyleLineJoin = strokeStyle.getLineJoin();\n            var strokeStyleWidth = strokeStyle.getWidth();\n            var strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n            this.strokeState_ = {\n                lineCap: strokeStyleLineCap !== undefined\n                    ? strokeStyleLineCap\n                    : defaultLineCap,\n                lineDash: strokeStyleLineDash ? strokeStyleLineDash : defaultLineDash,\n                lineDashOffset: strokeStyleLineDashOffset\n                    ? strokeStyleLineDashOffset\n                    : defaultLineDashOffset,\n                lineJoin: strokeStyleLineJoin !== undefined\n                    ? strokeStyleLineJoin\n                    : defaultLineJoin,\n                lineWidth: this.pixelRatio_ *\n                    (strokeStyleWidth !== undefined\n                        ? strokeStyleWidth\n                        : defaultLineWidth),\n                miterLimit: strokeStyleMiterLimit !== undefined\n                    ? strokeStyleMiterLimit\n                    : defaultMiterLimit,\n                strokeStyle: asColorLike(strokeStyleColor ? strokeStyleColor : defaultStrokeStyle),\n            };\n        }\n    };\n    /**\n     * Set the image style for subsequent draw operations.  Pass null to remove\n     * the image style.\n     *\n     * @param {import(\"../../style/Image.js\").default} imageStyle Image style.\n     */\n    CanvasImmediateRenderer.prototype.setImageStyle = function (imageStyle) {\n        if (!imageStyle) {\n            this.image_ = null;\n        }\n        else {\n            var imageSize = imageStyle.getSize();\n            if (!imageSize) {\n                this.image_ = null;\n            }\n            else {\n                var imageAnchor = imageStyle.getAnchor();\n                // FIXME pixel ratio\n                var imageImage = imageStyle.getImage(1);\n                var imageOrigin = imageStyle.getOrigin();\n                var imageScale = imageStyle.getScaleArray();\n                this.imageAnchorX_ = imageAnchor[0];\n                this.imageAnchorY_ = imageAnchor[1];\n                this.imageHeight_ = imageSize[1];\n                this.image_ = imageImage;\n                this.imageOpacity_ = imageStyle.getOpacity();\n                this.imageOriginX_ = imageOrigin[0];\n                this.imageOriginY_ = imageOrigin[1];\n                this.imageRotateWithView_ = imageStyle.getRotateWithView();\n                this.imageRotation_ = imageStyle.getRotation();\n                this.imageScale_ = [\n                    this.pixelRatio_ * imageScale[0],\n                    this.pixelRatio_ * imageScale[1],\n                ];\n                this.imageWidth_ = imageSize[0];\n            }\n        }\n    };\n    /**\n     * Set the text style for subsequent draw operations.  Pass null to\n     * remove the text style.\n     *\n     * @param {import(\"../../style/Text.js\").default} textStyle Text style.\n     */\n    CanvasImmediateRenderer.prototype.setTextStyle = function (textStyle) {\n        if (!textStyle) {\n            this.text_ = '';\n        }\n        else {\n            var textFillStyle = textStyle.getFill();\n            if (!textFillStyle) {\n                this.textFillState_ = null;\n            }\n            else {\n                var textFillStyleColor = textFillStyle.getColor();\n                this.textFillState_ = {\n                    fillStyle: asColorLike(textFillStyleColor ? textFillStyleColor : defaultFillStyle),\n                };\n            }\n            var textStrokeStyle = textStyle.getStroke();\n            if (!textStrokeStyle) {\n                this.textStrokeState_ = null;\n            }\n            else {\n                var textStrokeStyleColor = textStrokeStyle.getColor();\n                var textStrokeStyleLineCap = textStrokeStyle.getLineCap();\n                var textStrokeStyleLineDash = textStrokeStyle.getLineDash();\n                var textStrokeStyleLineDashOffset = textStrokeStyle.getLineDashOffset();\n                var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();\n                var textStrokeStyleWidth = textStrokeStyle.getWidth();\n                var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();\n                this.textStrokeState_ = {\n                    lineCap: textStrokeStyleLineCap !== undefined\n                        ? textStrokeStyleLineCap\n                        : defaultLineCap,\n                    lineDash: textStrokeStyleLineDash\n                        ? textStrokeStyleLineDash\n                        : defaultLineDash,\n                    lineDashOffset: textStrokeStyleLineDashOffset\n                        ? textStrokeStyleLineDashOffset\n                        : defaultLineDashOffset,\n                    lineJoin: textStrokeStyleLineJoin !== undefined\n                        ? textStrokeStyleLineJoin\n                        : defaultLineJoin,\n                    lineWidth: textStrokeStyleWidth !== undefined\n                        ? textStrokeStyleWidth\n                        : defaultLineWidth,\n                    miterLimit: textStrokeStyleMiterLimit !== undefined\n                        ? textStrokeStyleMiterLimit\n                        : defaultMiterLimit,\n                    strokeStyle: asColorLike(textStrokeStyleColor ? textStrokeStyleColor : defaultStrokeStyle),\n                };\n            }\n            var textFont = textStyle.getFont();\n            var textOffsetX = textStyle.getOffsetX();\n            var textOffsetY = textStyle.getOffsetY();\n            var textRotateWithView = textStyle.getRotateWithView();\n            var textRotation = textStyle.getRotation();\n            var textScale = textStyle.getScaleArray();\n            var textText = textStyle.getText();\n            var textTextAlign = textStyle.getTextAlign();\n            var textTextBaseline = textStyle.getTextBaseline();\n            this.textState_ = {\n                font: textFont !== undefined ? textFont : defaultFont,\n                textAlign: textTextAlign !== undefined ? textTextAlign : defaultTextAlign,\n                textBaseline: textTextBaseline !== undefined\n                    ? textTextBaseline\n                    : defaultTextBaseline,\n            };\n            this.text_ = textText !== undefined ? textText : '';\n            this.textOffsetX_ =\n                textOffsetX !== undefined ? this.pixelRatio_ * textOffsetX : 0;\n            this.textOffsetY_ =\n                textOffsetY !== undefined ? this.pixelRatio_ * textOffsetY : 0;\n            this.textRotateWithView_ =\n                textRotateWithView !== undefined ? textRotateWithView : false;\n            this.textRotation_ = textRotation !== undefined ? textRotation : 0;\n            this.textScale_ = [\n                this.pixelRatio_ * textScale[0],\n                this.pixelRatio_ * textScale[1],\n            ];\n        }\n    };\n    return CanvasImmediateRenderer;\n}(VectorContext));\nexport default CanvasImmediateRenderer;\n//# sourceMappingURL=Immediate.js.map","/**\n * @module ol/renderer/vector\n */\nimport BuilderType from '../render/canvas/BuilderType.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport ImageState from '../ImageState.js';\nimport { getUid } from '../util.js';\n/**\n * Feature callback. The callback will be called with three arguments. The first\n * argument is one {@link module:ol/Feature feature} or {@link module:ol/render/Feature render feature}\n * at the pixel, the second is the {@link module:ol/layer/Layer layer} of the feature and will be null for\n * unmanaged layers. The third is the {@link module:ol/geom/SimpleGeometry} of the feature. For features\n * with a GeometryCollection geometry, it will be the first detected geometry from the collection.\n * @template T\n * @typedef {function(import(\"../Feature.js\").FeatureLike, import(\"../layer/Layer.js\").default, import(\"../geom/SimpleGeometry.js\").default): T} FeatureCallback\n */\n/**\n * Tolerance for geometry simplification in device pixels.\n * @type {number}\n */\nvar SIMPLIFY_TOLERANCE = 0.5;\n/**\n * @const\n * @type {Object<import(\"../geom/GeometryType.js\").default,\n *                function(import(\"../render/canvas/BuilderGroup.js\").default, import(\"../geom/Geometry.js\").default,\n *                         import(\"../style/Style.js\").default, Object): void>}\n */\nvar GEOMETRY_RENDERERS = {\n    'Point': renderPointGeometry,\n    'LineString': renderLineStringGeometry,\n    'Polygon': renderPolygonGeometry,\n    'MultiPoint': renderMultiPointGeometry,\n    'MultiLineString': renderMultiLineStringGeometry,\n    'MultiPolygon': renderMultiPolygonGeometry,\n    'GeometryCollection': renderGeometryCollectionGeometry,\n    'Circle': renderCircleGeometry,\n};\n/**\n * @param {import(\"../Feature.js\").FeatureLike} feature1 Feature 1.\n * @param {import(\"../Feature.js\").FeatureLike} feature2 Feature 2.\n * @return {number} Order.\n */\nexport function defaultOrder(feature1, feature2) {\n    return parseInt(getUid(feature1), 10) - parseInt(getUid(feature2), 10);\n}\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Squared pixel tolerance.\n */\nexport function getSquaredTolerance(resolution, pixelRatio) {\n    var tolerance = getTolerance(resolution, pixelRatio);\n    return tolerance * tolerance;\n}\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel tolerance.\n */\nexport function getTolerance(resolution, pixelRatio) {\n    return (SIMPLIFY_TOLERANCE * resolution) / pixelRatio;\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Builder group.\n * @param {import(\"../geom/Circle.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderCircleGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n    var fillStyle = style.getFill();\n    var strokeStyle = style.getStroke();\n    if (fillStyle || strokeStyle) {\n        var circleReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.CIRCLE);\n        circleReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n        circleReplay.drawCircle(geometry, feature);\n    }\n    var textStyle = style.getText();\n    if (textStyle && textStyle.getText()) {\n        var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n        textReplay.setTextStyle(textStyle);\n        textReplay.drawText(geometry, feature);\n    }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Transform from user to view projection.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n * @return {boolean} `true` if style is loading.\n */\nexport function renderFeature(replayGroup, feature, style, squaredTolerance, listener, opt_transform, opt_declutterBuilderGroup) {\n    var loading = false;\n    var imageStyle = style.getImage();\n    if (imageStyle) {\n        var imageState = imageStyle.getImageState();\n        if (imageState == ImageState.LOADED || imageState == ImageState.ERROR) {\n            imageStyle.unlistenImageChange(listener);\n        }\n        else {\n            if (imageState == ImageState.IDLE) {\n                imageStyle.load();\n            }\n            imageState = imageStyle.getImageState();\n            imageStyle.listenImageChange(listener);\n            loading = true;\n        }\n    }\n    renderFeatureInternal(replayGroup, feature, style, squaredTolerance, opt_transform, opt_declutterBuilderGroup);\n    return loading;\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderFeatureInternal(replayGroup, feature, style, squaredTolerance, opt_transform, opt_declutterBuilderGroup) {\n    var geometry = style.getGeometryFunction()(feature);\n    if (!geometry) {\n        return;\n    }\n    var simplifiedGeometry = geometry.simplifyTransformed(squaredTolerance, opt_transform);\n    var renderer = style.getRenderer();\n    if (renderer) {\n        renderGeometry(replayGroup, simplifiedGeometry, style, feature);\n    }\n    else {\n        var geometryRenderer = GEOMETRY_RENDERERS[simplifiedGeometry.getType()];\n        geometryRenderer(replayGroup, simplifiedGeometry, style, feature, opt_declutterBuilderGroup);\n    }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\nfunction renderGeometry(replayGroup, geometry, style, feature) {\n    if (geometry.getType() == GeometryType.GEOMETRY_COLLECTION) {\n        var geometries = /** @type {import(\"../geom/GeometryCollection.js\").default} */ (geometry).getGeometries();\n        for (var i = 0, ii = geometries.length; i < ii; ++i) {\n            renderGeometry(replayGroup, geometries[i], style, feature);\n        }\n        return;\n    }\n    var replay = replayGroup.getBuilder(style.getZIndex(), BuilderType.DEFAULT);\n    replay.drawCustom(\n    /** @type {import(\"../geom/SimpleGeometry.js\").default} */ (geometry), feature, style.getRenderer());\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../geom/GeometryCollection.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderGeometryCollectionGeometry(replayGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n    var geometries = geometry.getGeometriesArray();\n    var i, ii;\n    for (i = 0, ii = geometries.length; i < ii; ++i) {\n        var geometryRenderer = GEOMETRY_RENDERERS[geometries[i].getType()];\n        geometryRenderer(replayGroup, geometries[i], style, feature, opt_declutterBuilderGroup);\n    }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/LineString.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderLineStringGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n    var strokeStyle = style.getStroke();\n    if (strokeStyle) {\n        var lineStringReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.LINE_STRING);\n        lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n        lineStringReplay.drawLineString(geometry, feature);\n    }\n    var textStyle = style.getText();\n    if (textStyle && textStyle.getText()) {\n        var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n        textReplay.setTextStyle(textStyle);\n        textReplay.drawText(geometry, feature);\n    }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiLineString.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderMultiLineStringGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n    var strokeStyle = style.getStroke();\n    if (strokeStyle) {\n        var lineStringReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.LINE_STRING);\n        lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n        lineStringReplay.drawMultiLineString(geometry, feature);\n    }\n    var textStyle = style.getText();\n    if (textStyle && textStyle.getText()) {\n        var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n        textReplay.setTextStyle(textStyle);\n        textReplay.drawText(geometry, feature);\n    }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiPolygon.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderMultiPolygonGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n    var fillStyle = style.getFill();\n    var strokeStyle = style.getStroke();\n    if (strokeStyle || fillStyle) {\n        var polygonReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.POLYGON);\n        polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n        polygonReplay.drawMultiPolygon(geometry, feature);\n    }\n    var textStyle = style.getText();\n    if (textStyle && textStyle.getText()) {\n        var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n        textReplay.setTextStyle(textStyle);\n        textReplay.drawText(geometry, feature);\n    }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/Point.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderPointGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n    var imageStyle = style.getImage();\n    var textStyle = style.getText();\n    /** @type {import(\"../render/canvas.js\").DeclutterImageWithText} */\n    var declutterImageWithText;\n    if (opt_declutterBuilderGroup) {\n        builderGroup = opt_declutterBuilderGroup;\n        declutterImageWithText =\n            imageStyle && textStyle && textStyle.getText() ? {} : undefined;\n    }\n    if (imageStyle) {\n        if (imageStyle.getImageState() != ImageState.LOADED) {\n            return;\n        }\n        var imageReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.IMAGE);\n        imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n        imageReplay.drawPoint(geometry, feature);\n    }\n    if (textStyle && textStyle.getText()) {\n        var textReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.TEXT);\n        textReplay.setTextStyle(textStyle, declutterImageWithText);\n        textReplay.drawText(geometry, feature);\n    }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiPoint.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderMultiPointGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n    var imageStyle = style.getImage();\n    var textStyle = style.getText();\n    /** @type {import(\"../render/canvas.js\").DeclutterImageWithText} */\n    var declutterImageWithText;\n    if (opt_declutterBuilderGroup) {\n        builderGroup = opt_declutterBuilderGroup;\n        declutterImageWithText =\n            imageStyle && textStyle && textStyle.getText() ? {} : undefined;\n    }\n    if (imageStyle) {\n        if (imageStyle.getImageState() != ImageState.LOADED) {\n            return;\n        }\n        var imageReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.IMAGE);\n        imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n        imageReplay.drawMultiPoint(geometry, feature);\n    }\n    if (textStyle && textStyle.getText()) {\n        var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n        textReplay.setTextStyle(textStyle, declutterImageWithText);\n        textReplay.drawText(geometry, feature);\n    }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/Polygon.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderPolygonGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n    var fillStyle = style.getFill();\n    var strokeStyle = style.getStroke();\n    if (fillStyle || strokeStyle) {\n        var polygonReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.POLYGON);\n        polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n        polygonReplay.drawPolygon(geometry, feature);\n    }\n    var textStyle = style.getText();\n    if (textStyle && textStyle.getText()) {\n        var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n        textReplay.setTextStyle(textStyle);\n        textReplay.drawText(geometry, feature);\n    }\n}\n//# sourceMappingURL=vector.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/renderer/canvas/VectorLayer\n */\nimport CanvasBuilderGroup from '../../render/canvas/BuilderGroup.js';\nimport CanvasLayerRenderer from './Layer.js';\nimport ExecutorGroup from '../../render/canvas/ExecutorGroup.js';\nimport ViewHint from '../../ViewHint.js';\nimport { apply, makeInverse, makeScale, toString as transformToString, } from '../../transform.js';\nimport { buffer, containsExtent, createEmpty, getWidth, intersects as intersectsExtent, wrapX as wrapExtentX, } from '../../extent.js';\nimport { createHitDetectionImageData, hitDetect, } from '../../render/canvas/hitdetect.js';\nimport { defaultOrder as defaultRenderOrder, getTolerance as getRenderTolerance, getSquaredTolerance as getSquaredRenderTolerance, renderFeature, } from '../vector.js';\nimport { fromUserExtent, getTransformFromProjections, getUserProjection, toUserExtent, } from '../../proj.js';\nimport { getUid } from '../../util.js';\nimport { wrapX as wrapCoordinateX } from '../../coordinate.js';\n/**\n * @classdesc\n * Canvas renderer for vector layers.\n * @api\n */\nvar CanvasVectorLayerRenderer = /** @class */ (function (_super) {\n    __extends(CanvasVectorLayerRenderer, _super);\n    /**\n     * @param {import(\"../../layer/Vector.js\").default} vectorLayer Vector layer.\n     */\n    function CanvasVectorLayerRenderer(vectorLayer) {\n        var _this = _super.call(this, vectorLayer) || this;\n        /** @private */\n        _this.boundHandleStyleImageChange_ = _this.handleStyleImageChange_.bind(_this);\n        /**\n         * @type {boolean}\n         */\n        _this.animatingOrInteracting_;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.dirty_ = false;\n        /**\n         * @type {ImageData}\n         */\n        _this.hitDetectionImageData_ = null;\n        /**\n         * @type {Array<import(\"../../Feature.js\").default>}\n         */\n        _this.renderedFeatures_ = null;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.renderedRevision_ = -1;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.renderedResolution_ = NaN;\n        /**\n         * @private\n         * @type {import(\"../../extent.js\").Extent}\n         */\n        _this.renderedExtent_ = createEmpty();\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.renderedRotation_;\n        /**\n         * @private\n         * @type {import(\"../../coordinate\").Coordinate}\n         */\n        _this.renderedCenter_ = null;\n        /**\n         * @private\n         * @type {import(\"../../proj/Projection\").default}\n         */\n        _this.renderedProjection_ = null;\n        /**\n         * @private\n         * @type {function(import(\"../../Feature.js\").default, import(\"../../Feature.js\").default): number|null}\n         */\n        _this.renderedRenderOrder_ = null;\n        /**\n         * @private\n         * @type {import(\"../../render/canvas/ExecutorGroup\").default}\n         */\n        _this.replayGroup_ = null;\n        /**\n         * A new replay group had to be created by `prepareFrame()`\n         * @type {boolean}\n         */\n        _this.replayGroupChanged = true;\n        /**\n         * @type {import(\"../../render/canvas/ExecutorGroup\").default}\n         */\n        _this.declutterExecutorGroup = null;\n        /**\n         * Clipping to be performed by `renderFrame()`\n         * @type {boolean}\n         */\n        _this.clipping = true;\n        return _this;\n    }\n    /**\n     * Get a rendering container from an existing target, if compatible.\n     * @param {HTMLElement} target Potential render target.\n     * @param {string} transform CSS Transform.\n     * @param {number} opacity Opacity.\n     */\n    CanvasVectorLayerRenderer.prototype.useContainer = function (target, transform, opacity) {\n        if (opacity < 1) {\n            target = null;\n        }\n        _super.prototype.useContainer.call(this, target, transform, opacity);\n    };\n    /**\n     * @param {ExecutorGroup} executorGroup Executor group.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {import(\"rbush\").default=} opt_declutterTree Declutter tree.\n     */\n    CanvasVectorLayerRenderer.prototype.renderWorlds = function (executorGroup, frameState, opt_declutterTree) {\n        var extent = frameState.extent;\n        var viewState = frameState.viewState;\n        var center = viewState.center;\n        var resolution = viewState.resolution;\n        var projection = viewState.projection;\n        var rotation = viewState.rotation;\n        var projectionExtent = projection.getExtent();\n        var vectorSource = this.getLayer().getSource();\n        var pixelRatio = frameState.pixelRatio;\n        var viewHints = frameState.viewHints;\n        var snapToPixel = !(viewHints[ViewHint.ANIMATING] || viewHints[ViewHint.INTERACTING]);\n        var context = this.context;\n        var width = Math.round(frameState.size[0] * pixelRatio);\n        var height = Math.round(frameState.size[1] * pixelRatio);\n        var multiWorld = vectorSource.getWrapX() && projection.canWrapX();\n        var worldWidth = multiWorld ? getWidth(projectionExtent) : null;\n        var endWorld = multiWorld\n            ? Math.ceil((extent[2] - projectionExtent[2]) / worldWidth) + 1\n            : 1;\n        var world = multiWorld\n            ? Math.floor((extent[0] - projectionExtent[0]) / worldWidth)\n            : 0;\n        do {\n            var transform = this.getRenderTransform(center, resolution, rotation, pixelRatio, width, height, world * worldWidth);\n            executorGroup.execute(context, 1, transform, rotation, snapToPixel, undefined, opt_declutterTree);\n        } while (++world < endWorld);\n    };\n    /**\n     * Render declutter items for this layer\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     */\n    CanvasVectorLayerRenderer.prototype.renderDeclutter = function (frameState) {\n        if (this.declutterExecutorGroup) {\n            this.renderWorlds(this.declutterExecutorGroup, frameState, frameState.declutterTree);\n        }\n    };\n    /**\n     * Render the layer.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {HTMLElement} target Target that may be used to render content to.\n     * @return {HTMLElement} The rendered element.\n     */\n    CanvasVectorLayerRenderer.prototype.renderFrame = function (frameState, target) {\n        var pixelRatio = frameState.pixelRatio;\n        var layerState = frameState.layerStatesArray[frameState.layerIndex];\n        // set forward and inverse pixel transforms\n        makeScale(this.pixelTransform, 1 / pixelRatio, 1 / pixelRatio);\n        makeInverse(this.inversePixelTransform, this.pixelTransform);\n        var canvasTransform = transformToString(this.pixelTransform);\n        this.useContainer(target, canvasTransform, layerState.opacity);\n        var context = this.context;\n        var canvas = context.canvas;\n        var replayGroup = this.replayGroup_;\n        var declutterExecutorGroup = this.declutterExecutorGroup;\n        if ((!replayGroup || replayGroup.isEmpty()) &&\n            (!declutterExecutorGroup || declutterExecutorGroup.isEmpty())) {\n            if (!this.containerReused && canvas.width > 0) {\n                canvas.width = 0;\n            }\n            return this.container;\n        }\n        // resize and clear\n        var width = Math.round(frameState.size[0] * pixelRatio);\n        var height = Math.round(frameState.size[1] * pixelRatio);\n        if (canvas.width != width || canvas.height != height) {\n            canvas.width = width;\n            canvas.height = height;\n            if (canvas.style.transform !== canvasTransform) {\n                canvas.style.transform = canvasTransform;\n            }\n        }\n        else if (!this.containerReused) {\n            context.clearRect(0, 0, width, height);\n        }\n        this.preRender(context, frameState);\n        var viewState = frameState.viewState;\n        var projection = viewState.projection;\n        // clipped rendering if layer extent is set\n        var clipped = false;\n        if (layerState.extent && this.clipping) {\n            var layerExtent = fromUserExtent(layerState.extent, projection);\n            clipped =\n                !containsExtent(layerExtent, frameState.extent) &&\n                    intersectsExtent(layerExtent, frameState.extent);\n            if (clipped) {\n                this.clipUnrotated(context, frameState, layerExtent);\n            }\n        }\n        this.renderWorlds(replayGroup, frameState);\n        if (clipped) {\n            context.restore();\n        }\n        this.postRender(context, frameState);\n        var opacity = layerState.opacity;\n        var container = this.container;\n        if (opacity !== parseFloat(container.style.opacity)) {\n            container.style.opacity = opacity === 1 ? '' : String(opacity);\n        }\n        if (this.renderedRotation_ !== viewState.rotation) {\n            this.renderedRotation_ = viewState.rotation;\n            this.hitDetectionImageData_ = null;\n        }\n        return this.container;\n    };\n    /**\n     * Asynchronous layer level hit detection.\n     * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n     * @return {Promise<Array<import(\"../../Feature\").default>>} Promise that resolves with an array of features.\n     */\n    CanvasVectorLayerRenderer.prototype.getFeatures = function (pixel) {\n        return new Promise(\n        /**\n         * @param {function(Array<import(\"../../Feature\").default|import(\"../../render/Feature\").default>): void} resolve Resolver function.\n         * @this {CanvasVectorLayerRenderer}\n         */\n        function (resolve) {\n            if (!this.hitDetectionImageData_ && !this.animatingOrInteracting_) {\n                var size = [this.context.canvas.width, this.context.canvas.height];\n                apply(this.pixelTransform, size);\n                var center = this.renderedCenter_;\n                var resolution = this.renderedResolution_;\n                var rotation = this.renderedRotation_;\n                var projection = this.renderedProjection_;\n                var extent = this.renderedExtent_;\n                var layer = this.getLayer();\n                var transforms = [];\n                var width = size[0] / 2;\n                var height = size[1] / 2;\n                transforms.push(this.getRenderTransform(center, resolution, rotation, 0.5, width, height, 0).slice());\n                var source = layer.getSource();\n                var projectionExtent = projection.getExtent();\n                if (source.getWrapX() &&\n                    projection.canWrapX() &&\n                    !containsExtent(projectionExtent, extent)) {\n                    var startX = extent[0];\n                    var worldWidth = getWidth(projectionExtent);\n                    var world = 0;\n                    var offsetX = void 0;\n                    while (startX < projectionExtent[0]) {\n                        --world;\n                        offsetX = worldWidth * world;\n                        transforms.push(this.getRenderTransform(center, resolution, rotation, 0.5, width, height, offsetX).slice());\n                        startX += worldWidth;\n                    }\n                    world = 0;\n                    startX = extent[2];\n                    while (startX > projectionExtent[2]) {\n                        ++world;\n                        offsetX = worldWidth * world;\n                        transforms.push(this.getRenderTransform(center, resolution, rotation, 0.5, width, height, offsetX).slice());\n                        startX -= worldWidth;\n                    }\n                }\n                this.hitDetectionImageData_ = createHitDetectionImageData(size, transforms, this.renderedFeatures_, layer.getStyleFunction(), extent, resolution, rotation);\n            }\n            resolve(hitDetect(pixel, this.renderedFeatures_, this.hitDetectionImageData_));\n        }.bind(this));\n    };\n    /**\n     * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {number} hitTolerance Hit tolerance in pixels.\n     * @param {import(\"../vector.js\").FeatureCallback<T>} callback Feature callback.\n     * @param {Array<import(\"../Map.js\").HitMatch<T>>} matches The hit detected matches with tolerance.\n     * @return {T|undefined} Callback result.\n     * @template T\n     */\n    CanvasVectorLayerRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, callback, matches) {\n        var _this = this;\n        if (!this.replayGroup_) {\n            return undefined;\n        }\n        var resolution = frameState.viewState.resolution;\n        var rotation = frameState.viewState.rotation;\n        var layer = this.getLayer();\n        /** @type {!Object<string, import(\"../Map.js\").HitMatch<T>|true>} */\n        var features = {};\n        /**\n         * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n         * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n         * @param {number} distanceSq The squared distance to the click position\n         * @return {T|undefined} Callback result.\n         */\n        var featureCallback = function (feature, geometry, distanceSq) {\n            var key = getUid(feature);\n            var match = features[key];\n            if (!match) {\n                if (distanceSq === 0) {\n                    features[key] = true;\n                    return callback(feature, layer, geometry);\n                }\n                matches.push((features[key] = {\n                    feature: feature,\n                    layer: layer,\n                    geometry: geometry,\n                    distanceSq: distanceSq,\n                    callback: callback,\n                }));\n            }\n            else if (match !== true && distanceSq < match.distanceSq) {\n                if (distanceSq === 0) {\n                    features[key] = true;\n                    matches.splice(matches.lastIndexOf(match), 1);\n                    return callback(feature, layer, geometry);\n                }\n                match.geometry = geometry;\n                match.distanceSq = distanceSq;\n            }\n            return undefined;\n        };\n        var result;\n        var executorGroups = [this.replayGroup_];\n        if (this.declutterExecutorGroup) {\n            executorGroups.push(this.declutterExecutorGroup);\n        }\n        executorGroups.some(function (executorGroup) {\n            return (result = executorGroup.forEachFeatureAtCoordinate(coordinate, resolution, rotation, hitTolerance, featureCallback, executorGroup === _this.declutterExecutorGroup\n                ? frameState.declutterTree.all().map(function (item) { return item.value; })\n                : null));\n        });\n        return result;\n    };\n    /**\n     * Perform action necessary to get the layer rendered after new fonts have loaded\n     */\n    CanvasVectorLayerRenderer.prototype.handleFontsChanged = function () {\n        var layer = this.getLayer();\n        if (layer.getVisible() && this.replayGroup_) {\n            layer.changed();\n        }\n    };\n    /**\n     * Handle changes in image style state.\n     * @param {import(\"../../events/Event.js\").default} event Image style change event.\n     * @private\n     */\n    CanvasVectorLayerRenderer.prototype.handleStyleImageChange_ = function (event) {\n        this.renderIfReadyAndVisible();\n    };\n    /**\n     * Determine whether render should be called.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @return {boolean} Layer is ready to be rendered.\n     */\n    CanvasVectorLayerRenderer.prototype.prepareFrame = function (frameState) {\n        var vectorLayer = this.getLayer();\n        var vectorSource = vectorLayer.getSource();\n        if (!vectorSource) {\n            return false;\n        }\n        var animating = frameState.viewHints[ViewHint.ANIMATING];\n        var interacting = frameState.viewHints[ViewHint.INTERACTING];\n        var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();\n        var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();\n        if ((!this.dirty_ && !updateWhileAnimating && animating) ||\n            (!updateWhileInteracting && interacting)) {\n            this.animatingOrInteracting_ = true;\n            return true;\n        }\n        this.animatingOrInteracting_ = false;\n        var frameStateExtent = frameState.extent;\n        var viewState = frameState.viewState;\n        var projection = viewState.projection;\n        var resolution = viewState.resolution;\n        var pixelRatio = frameState.pixelRatio;\n        var vectorLayerRevision = vectorLayer.getRevision();\n        var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();\n        var vectorLayerRenderOrder = vectorLayer.getRenderOrder();\n        if (vectorLayerRenderOrder === undefined) {\n            vectorLayerRenderOrder = defaultRenderOrder;\n        }\n        var center = viewState.center.slice();\n        var extent = buffer(frameStateExtent, vectorLayerRenderBuffer * resolution);\n        var loadExtents = [extent.slice()];\n        var projectionExtent = projection.getExtent();\n        if (vectorSource.getWrapX() &&\n            projection.canWrapX() &&\n            !containsExtent(projectionExtent, frameState.extent)) {\n            // For the replay group, we need an extent that intersects the real world\n            // (-180° to +180°). To support geometries in a coordinate range from -540°\n            // to +540°, we add at least 1 world width on each side of the projection\n            // extent. If the viewport is wider than the world, we need to add half of\n            // the viewport width to make sure we cover the whole viewport.\n            var worldWidth = getWidth(projectionExtent);\n            var gutter = Math.max(getWidth(extent) / 2, worldWidth);\n            extent[0] = projectionExtent[0] - gutter;\n            extent[2] = projectionExtent[2] + gutter;\n            wrapCoordinateX(center, projection);\n            var loadExtent = wrapExtentX(loadExtents[0], projection);\n            // If the extent crosses the date line, we load data for both edges of the worlds\n            if (loadExtent[0] < projectionExtent[0] &&\n                loadExtent[2] < projectionExtent[2]) {\n                loadExtents.push([\n                    loadExtent[0] + worldWidth,\n                    loadExtent[1],\n                    loadExtent[2] + worldWidth,\n                    loadExtent[3],\n                ]);\n            }\n            else if (loadExtent[0] > projectionExtent[0] &&\n                loadExtent[2] > projectionExtent[2]) {\n                loadExtents.push([\n                    loadExtent[0] - worldWidth,\n                    loadExtent[1],\n                    loadExtent[2] - worldWidth,\n                    loadExtent[3],\n                ]);\n            }\n        }\n        if (!this.dirty_ &&\n            this.renderedResolution_ == resolution &&\n            this.renderedRevision_ == vectorLayerRevision &&\n            this.renderedRenderOrder_ == vectorLayerRenderOrder &&\n            containsExtent(this.renderedExtent_, extent)) {\n            this.replayGroupChanged = false;\n            return true;\n        }\n        this.replayGroup_ = null;\n        this.dirty_ = false;\n        var replayGroup = new CanvasBuilderGroup(getRenderTolerance(resolution, pixelRatio), extent, resolution, pixelRatio);\n        var declutterBuilderGroup;\n        if (this.getLayer().getDeclutter()) {\n            declutterBuilderGroup = new CanvasBuilderGroup(getRenderTolerance(resolution, pixelRatio), extent, resolution, pixelRatio);\n        }\n        var userProjection = getUserProjection();\n        var userTransform;\n        if (userProjection) {\n            for (var i = 0, ii = loadExtents.length; i < ii; ++i) {\n                vectorSource.loadFeatures(toUserExtent(loadExtents[i], projection), resolution, userProjection);\n            }\n            userTransform = getTransformFromProjections(userProjection, projection);\n        }\n        else {\n            for (var i = 0, ii = loadExtents.length; i < ii; ++i) {\n                vectorSource.loadFeatures(loadExtents[i], resolution, projection);\n            }\n        }\n        var squaredTolerance = getSquaredRenderTolerance(resolution, pixelRatio);\n        var render = \n        /**\n         * @param {import(\"../../Feature.js\").default} feature Feature.\n         * @this {CanvasVectorLayerRenderer}\n         */\n        function (feature) {\n            var styles;\n            var styleFunction = feature.getStyleFunction() || vectorLayer.getStyleFunction();\n            if (styleFunction) {\n                styles = styleFunction(feature, resolution);\n            }\n            if (styles) {\n                var dirty = this.renderFeature(feature, squaredTolerance, styles, replayGroup, userTransform, declutterBuilderGroup);\n                this.dirty_ = this.dirty_ || dirty;\n            }\n        }.bind(this);\n        var userExtent = toUserExtent(extent, projection);\n        /** @type {Array<import(\"../../Feature.js\").default>} */\n        var features = vectorSource.getFeaturesInExtent(userExtent);\n        if (vectorLayerRenderOrder) {\n            features.sort(vectorLayerRenderOrder);\n        }\n        for (var i = 0, ii = features.length; i < ii; ++i) {\n            render(features[i]);\n        }\n        this.renderedFeatures_ = features;\n        var replayGroupInstructions = replayGroup.finish();\n        var executorGroup = new ExecutorGroup(extent, resolution, pixelRatio, vectorSource.getOverlaps(), replayGroupInstructions, vectorLayer.getRenderBuffer());\n        if (declutterBuilderGroup) {\n            this.declutterExecutorGroup = new ExecutorGroup(extent, resolution, pixelRatio, vectorSource.getOverlaps(), declutterBuilderGroup.finish(), vectorLayer.getRenderBuffer());\n        }\n        this.renderedResolution_ = resolution;\n        this.renderedRevision_ = vectorLayerRevision;\n        this.renderedRenderOrder_ = vectorLayerRenderOrder;\n        this.renderedExtent_ = extent;\n        this.renderedCenter_ = center;\n        this.renderedProjection_ = projection;\n        this.replayGroup_ = executorGroup;\n        this.hitDetectionImageData_ = null;\n        this.replayGroupChanged = true;\n        return true;\n    };\n    /**\n     * @param {import(\"../../Feature.js\").default} feature Feature.\n     * @param {number} squaredTolerance Squared render tolerance.\n     * @param {import(\"../../style/Style.js\").default|Array<import(\"../../style/Style.js\").default>} styles The style or array of styles.\n     * @param {import(\"../../render/canvas/BuilderGroup.js\").default} builderGroup Builder group.\n     * @param {import(\"../../proj.js\").TransformFunction=} opt_transform Transform from user to view projection.\n     * @param {import(\"../../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n     * @return {boolean} `true` if an image is loading.\n     */\n    CanvasVectorLayerRenderer.prototype.renderFeature = function (feature, squaredTolerance, styles, builderGroup, opt_transform, opt_declutterBuilderGroup) {\n        if (!styles) {\n            return false;\n        }\n        var loading = false;\n        if (Array.isArray(styles)) {\n            for (var i = 0, ii = styles.length; i < ii; ++i) {\n                loading =\n                    renderFeature(builderGroup, feature, styles[i], squaredTolerance, this.boundHandleStyleImageChange_, opt_transform, opt_declutterBuilderGroup) || loading;\n            }\n        }\n        else {\n            loading = renderFeature(builderGroup, feature, styles, squaredTolerance, this.boundHandleStyleImageChange_, opt_transform, opt_declutterBuilderGroup);\n        }\n        return loading;\n    };\n    return CanvasVectorLayerRenderer;\n}(CanvasLayerRenderer));\nexport default CanvasVectorLayerRenderer;\n//# sourceMappingURL=VectorLayer.js.map","/**\n * @module ol/render/canvas/hitdetect\n */\nimport CanvasImmediateRenderer from './Immediate.js';\nimport GeometryType from '../../geom/GeometryType.js';\nimport IconAnchorUnits from '../../style/IconAnchorUnits.js';\nimport { Icon } from '../../style.js';\nimport { createCanvasContext2D } from '../../dom.js';\nimport { intersects } from '../../extent.js';\nimport { numberSafeCompareFunction } from '../../array.js';\n/**\n * @param {import(\"../../size.js\").Size} size Canvas size in css pixels.\n * @param {Array<import(\"../../transform.js\").Transform>} transforms Transforms\n * for rendering features to all worlds of the viewport, from coordinates to css\n * pixels.\n * @param {Array<import(\"../../Feature.js\").FeatureLike>} features\n * Features to consider for hit detection.\n * @param {import(\"../../style/Style.js\").StyleFunction|undefined} styleFunction\n * Layer style function.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {ImageData} Hit detection image data.\n */\nexport function createHitDetectionImageData(size, transforms, features, styleFunction, extent, resolution, rotation) {\n    var width = size[0] / 2;\n    var height = size[1] / 2;\n    var context = createCanvasContext2D(width, height);\n    context.imageSmoothingEnabled = false;\n    var canvas = context.canvas;\n    var renderer = new CanvasImmediateRenderer(context, 0.5, extent, null, rotation);\n    var featureCount = features.length;\n    // Stretch hit detection index to use the whole available color range\n    var indexFactor = Math.floor((256 * 256 * 256 - 1) / featureCount);\n    var featuresByZIndex = {};\n    for (var i = 1; i <= featureCount; ++i) {\n        var feature = features[i - 1];\n        var featureStyleFunction = feature.getStyleFunction() || styleFunction;\n        if (!styleFunction) {\n            continue;\n        }\n        var styles = featureStyleFunction(feature, resolution);\n        if (!styles) {\n            continue;\n        }\n        if (!Array.isArray(styles)) {\n            styles = [styles];\n        }\n        var index = i * indexFactor;\n        var color = '#' + ('000000' + index.toString(16)).slice(-6);\n        for (var j = 0, jj = styles.length; j < jj; ++j) {\n            var originalStyle = styles[j];\n            var style = originalStyle.clone();\n            var fill = style.getFill();\n            if (fill) {\n                fill.setColor(color);\n            }\n            var stroke = style.getStroke();\n            if (stroke) {\n                stroke.setColor(color);\n            }\n            style.setText(undefined);\n            var image = originalStyle.getImage();\n            if (image) {\n                var imgSize = image.getImageSize();\n                if (!imgSize) {\n                    continue;\n                }\n                var canvas_1 = document.createElement('canvas');\n                canvas_1.width = imgSize[0];\n                canvas_1.height = imgSize[1];\n                var imgContext = canvas_1.getContext('2d', { alpha: false });\n                imgContext.fillStyle = color;\n                var img = imgContext.canvas;\n                imgContext.fillRect(0, 0, img.width, img.height);\n                var width_1 = imgSize ? imgSize[0] : img.width;\n                var height_1 = imgSize ? imgSize[1] : img.height;\n                var iconContext = createCanvasContext2D(width_1, height_1);\n                iconContext.drawImage(img, 0, 0);\n                style.setImage(new Icon({\n                    img: img,\n                    imgSize: imgSize,\n                    anchor: image.getAnchor(),\n                    anchorXUnits: IconAnchorUnits.PIXELS,\n                    anchorYUnits: IconAnchorUnits.PIXELS,\n                    offset: image.getOrigin(),\n                    size: image.getSize(),\n                    opacity: image.getOpacity(),\n                    scale: image.getScale(),\n                    rotation: image.getRotation(),\n                    rotateWithView: image.getRotateWithView(),\n                }));\n            }\n            var zIndex = Number(style.getZIndex());\n            var byGeometryType = featuresByZIndex[zIndex];\n            if (!byGeometryType) {\n                byGeometryType = {};\n                featuresByZIndex[zIndex] = byGeometryType;\n                byGeometryType[GeometryType.POLYGON] = [];\n                byGeometryType[GeometryType.CIRCLE] = [];\n                byGeometryType[GeometryType.LINE_STRING] = [];\n                byGeometryType[GeometryType.POINT] = [];\n            }\n            var geometry = style.getGeometryFunction()(feature);\n            if (geometry && intersects(extent, geometry.getExtent())) {\n                byGeometryType[geometry.getType().replace('Multi', '')].push(geometry, style);\n            }\n        }\n    }\n    var zIndexKeys = Object.keys(featuresByZIndex)\n        .map(Number)\n        .sort(numberSafeCompareFunction);\n    for (var i = 0, ii = zIndexKeys.length; i < ii; ++i) {\n        var byGeometryType = featuresByZIndex[zIndexKeys[i]];\n        for (var type in byGeometryType) {\n            var geomAndStyle = byGeometryType[type];\n            for (var j = 0, jj = geomAndStyle.length; j < jj; j += 2) {\n                renderer.setStyle(geomAndStyle[j + 1]);\n                for (var k = 0, kk = transforms.length; k < kk; ++k) {\n                    renderer.setTransform(transforms[k]);\n                    renderer.drawGeometry(geomAndStyle[j]);\n                }\n            }\n        }\n    }\n    return context.getImageData(0, 0, canvas.width, canvas.height);\n}\n/**\n * @param {import(\"../../pixel\").Pixel} pixel Pixel coordinate on the hit\n * detection canvas in css pixels.\n * @param {Array<import(\"../../Feature\").FeatureLike>} features Features. Has to\n * match the `features` array that was passed to `createHitDetectionImageData()`.\n * @param {ImageData} imageData Hit detection image data generated by\n * `createHitDetectionImageData()`.\n * @return {Array<import(\"../../Feature\").FeatureLike>} features Features.\n */\nexport function hitDetect(pixel, features, imageData) {\n    var resultFeatures = [];\n    if (imageData) {\n        var index = (Math.round(pixel[0] / 2) + Math.round(pixel[1] / 2) * imageData.width) *\n            4;\n        var r = imageData.data[index];\n        var g = imageData.data[index + 1];\n        var b = imageData.data[index + 2];\n        var i = b + 256 * (g + 256 * r);\n        var indexFactor = Math.floor((256 * 256 * 256 - 1) / features.length);\n        if (i && i % indexFactor === 0) {\n            resultFeatures.push(features[i / indexFactor - 1]);\n        }\n    }\n    return resultFeatures;\n}\n//# sourceMappingURL=hitdetect.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/layer/Vector\n */\nimport BaseVectorLayer from './BaseVector.js';\nimport CanvasVectorLayerRenderer from '../renderer/canvas/VectorLayer.js';\n/**\n * @classdesc\n * Vector data that is rendered client-side.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @extends {BaseVectorLayer<import(\"../source/Vector.js\").default>}\n * @api\n */\nvar VectorLayer = /** @class */ (function (_super) {\n    __extends(VectorLayer, _super);\n    /**\n     * @param {import(\"./BaseVector.js\").Options=} opt_options Options.\n     */\n    function VectorLayer(opt_options) {\n        return _super.call(this, opt_options) || this;\n    }\n    /**\n     * Create a renderer for this layer.\n     * @return {import(\"../renderer/Layer.js\").default} A layer renderer.\n     */\n    VectorLayer.prototype.createRenderer = function () {\n        return new CanvasVectorLayerRenderer(this);\n    };\n    return VectorLayer;\n}(BaseVectorLayer));\nexport default VectorLayer;\n//# sourceMappingURL=Vector.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/geom/Polygon\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport GeometryType from './GeometryType.js';\nimport LinearRing from './LinearRing.js';\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { arrayMaxSquaredDelta, assignClosestArrayPoint } from './flat/closest.js';\nimport { closestSquaredDistanceXY, getCenter } from '../extent.js';\nimport { deflateCoordinatesArray } from './flat/deflate.js';\nimport { extend } from '../array.js';\nimport { getInteriorPointOfArray } from './flat/interiorpoint.js';\nimport { inflateCoordinatesArray } from './flat/inflate.js';\nimport { intersectsLinearRingArray } from './flat/intersectsextent.js';\nimport { linearRingsAreOriented, orientLinearRings } from './flat/orient.js';\nimport { linearRings as linearRingsArea } from './flat/area.js';\nimport { linearRingsContainsXY } from './flat/contains.js';\nimport { modulo } from '../math.js';\nimport { quantizeArray } from './flat/simplify.js';\nimport { offset as sphereOffset } from '../sphere.js';\n/**\n * @classdesc\n * Polygon geometry.\n *\n * @api\n */\nvar Polygon = /** @class */ (function (_super) {\n    __extends(Polygon, _super);\n    /**\n     * @param {!Array<Array<import(\"../coordinate.js\").Coordinate>>|!Array<number>} coordinates\n     *     Array of linear rings that define the polygon. The first linear ring of the\n     *     array defines the outer-boundary or surface of the polygon. Each subsequent\n     *     linear ring defines a hole in the surface of the polygon. A linear ring is\n     *     an array of vertices' coordinates where the first coordinate and the last are\n     *     equivalent. (For internal use, flat coordinates in combination with\n     *     `opt_layout` and `opt_ends` are also accepted.)\n     * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n     * @param {Array<number>=} opt_ends Ends (for internal use with flat coordinates).\n     */\n    function Polygon(coordinates, opt_layout, opt_ends) {\n        var _this = _super.call(this) || this;\n        /**\n         * @type {Array<number>}\n         * @private\n         */\n        _this.ends_ = [];\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.flatInteriorPointRevision_ = -1;\n        /**\n         * @private\n         * @type {import(\"../coordinate.js\").Coordinate}\n         */\n        _this.flatInteriorPoint_ = null;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.maxDelta_ = -1;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.maxDeltaRevision_ = -1;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.orientedRevision_ = -1;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        _this.orientedFlatCoordinates_ = null;\n        if (opt_layout !== undefined && opt_ends) {\n            _this.setFlatCoordinates(opt_layout, \n            /** @type {Array<number>} */ (coordinates));\n            _this.ends_ = opt_ends;\n        }\n        else {\n            _this.setCoordinates(\n            /** @type {Array<Array<import(\"../coordinate.js\").Coordinate>>} */ (coordinates), opt_layout);\n        }\n        return _this;\n    }\n    /**\n     * Append the passed linear ring to this polygon.\n     * @param {LinearRing} linearRing Linear ring.\n     * @api\n     */\n    Polygon.prototype.appendLinearRing = function (linearRing) {\n        if (!this.flatCoordinates) {\n            this.flatCoordinates = linearRing.getFlatCoordinates().slice();\n        }\n        else {\n            extend(this.flatCoordinates, linearRing.getFlatCoordinates());\n        }\n        this.ends_.push(this.flatCoordinates.length);\n        this.changed();\n    };\n    /**\n     * Make a complete copy of the geometry.\n     * @return {!Polygon} Clone.\n     * @api\n     */\n    Polygon.prototype.clone = function () {\n        var polygon = new Polygon(this.flatCoordinates.slice(), this.layout, this.ends_.slice());\n        polygon.applyProperties(this);\n        return polygon;\n    };\n    /**\n     * @param {number} x X.\n     * @param {number} y Y.\n     * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n     * @param {number} minSquaredDistance Minimum squared distance.\n     * @return {number} Minimum squared distance.\n     */\n    Polygon.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n        if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n            return minSquaredDistance;\n        }\n        if (this.maxDeltaRevision_ != this.getRevision()) {\n            this.maxDelta_ = Math.sqrt(arrayMaxSquaredDelta(this.flatCoordinates, 0, this.ends_, this.stride, 0));\n            this.maxDeltaRevision_ = this.getRevision();\n        }\n        return assignClosestArrayPoint(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n    };\n    /**\n     * @param {number} x X.\n     * @param {number} y Y.\n     * @return {boolean} Contains (x, y).\n     */\n    Polygon.prototype.containsXY = function (x, y) {\n        return linearRingsContainsXY(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y);\n    };\n    /**\n     * Return the area of the polygon on projected plane.\n     * @return {number} Area (on projected plane).\n     * @api\n     */\n    Polygon.prototype.getArea = function () {\n        return linearRingsArea(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride);\n    };\n    /**\n     * Get the coordinate array for this geometry.  This array has the structure\n     * of a GeoJSON coordinate array for polygons.\n     *\n     * @param {boolean=} opt_right Orient coordinates according to the right-hand\n     *     rule (counter-clockwise for exterior and clockwise for interior rings).\n     *     If `false`, coordinates will be oriented according to the left-hand rule\n     *     (clockwise for exterior and counter-clockwise for interior rings).\n     *     By default, coordinate orientation will depend on how the geometry was\n     *     constructed.\n     * @return {Array<Array<import(\"../coordinate.js\").Coordinate>>} Coordinates.\n     * @api\n     */\n    Polygon.prototype.getCoordinates = function (opt_right) {\n        var flatCoordinates;\n        if (opt_right !== undefined) {\n            flatCoordinates = this.getOrientedFlatCoordinates().slice();\n            orientLinearRings(flatCoordinates, 0, this.ends_, this.stride, opt_right);\n        }\n        else {\n            flatCoordinates = this.flatCoordinates;\n        }\n        return inflateCoordinatesArray(flatCoordinates, 0, this.ends_, this.stride);\n    };\n    /**\n     * @return {Array<number>} Ends.\n     */\n    Polygon.prototype.getEnds = function () {\n        return this.ends_;\n    };\n    /**\n     * @return {Array<number>} Interior point.\n     */\n    Polygon.prototype.getFlatInteriorPoint = function () {\n        if (this.flatInteriorPointRevision_ != this.getRevision()) {\n            var flatCenter = getCenter(this.getExtent());\n            this.flatInteriorPoint_ = getInteriorPointOfArray(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, flatCenter, 0);\n            this.flatInteriorPointRevision_ = this.getRevision();\n        }\n        return this.flatInteriorPoint_;\n    };\n    /**\n     * Return an interior point of the polygon.\n     * @return {Point} Interior point as XYM coordinate, where M is the\n     * length of the horizontal intersection that the point belongs to.\n     * @api\n     */\n    Polygon.prototype.getInteriorPoint = function () {\n        return new Point(this.getFlatInteriorPoint(), GeometryLayout.XYM);\n    };\n    /**\n     * Return the number of rings of the polygon,  this includes the exterior\n     * ring and any interior rings.\n     *\n     * @return {number} Number of rings.\n     * @api\n     */\n    Polygon.prototype.getLinearRingCount = function () {\n        return this.ends_.length;\n    };\n    /**\n     * Return the Nth linear ring of the polygon geometry. Return `null` if the\n     * given index is out of range.\n     * The exterior linear ring is available at index `0` and the interior rings\n     * at index `1` and beyond.\n     *\n     * @param {number} index Index.\n     * @return {LinearRing} Linear ring.\n     * @api\n     */\n    Polygon.prototype.getLinearRing = function (index) {\n        if (index < 0 || this.ends_.length <= index) {\n            return null;\n        }\n        return new LinearRing(this.flatCoordinates.slice(index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]), this.layout);\n    };\n    /**\n     * Return the linear rings of the polygon.\n     * @return {Array<LinearRing>} Linear rings.\n     * @api\n     */\n    Polygon.prototype.getLinearRings = function () {\n        var layout = this.layout;\n        var flatCoordinates = this.flatCoordinates;\n        var ends = this.ends_;\n        var linearRings = [];\n        var offset = 0;\n        for (var i = 0, ii = ends.length; i < ii; ++i) {\n            var end = ends[i];\n            var linearRing = new LinearRing(flatCoordinates.slice(offset, end), layout);\n            linearRings.push(linearRing);\n            offset = end;\n        }\n        return linearRings;\n    };\n    /**\n     * @return {Array<number>} Oriented flat coordinates.\n     */\n    Polygon.prototype.getOrientedFlatCoordinates = function () {\n        if (this.orientedRevision_ != this.getRevision()) {\n            var flatCoordinates = this.flatCoordinates;\n            if (linearRingsAreOriented(flatCoordinates, 0, this.ends_, this.stride)) {\n                this.orientedFlatCoordinates_ = flatCoordinates;\n            }\n            else {\n                this.orientedFlatCoordinates_ = flatCoordinates.slice();\n                this.orientedFlatCoordinates_.length = orientLinearRings(this.orientedFlatCoordinates_, 0, this.ends_, this.stride);\n            }\n            this.orientedRevision_ = this.getRevision();\n        }\n        return this.orientedFlatCoordinates_;\n    };\n    /**\n     * @param {number} squaredTolerance Squared tolerance.\n     * @return {Polygon} Simplified Polygon.\n     * @protected\n     */\n    Polygon.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n        var simplifiedFlatCoordinates = [];\n        var simplifiedEnds = [];\n        simplifiedFlatCoordinates.length = quantizeArray(this.flatCoordinates, 0, this.ends_, this.stride, Math.sqrt(squaredTolerance), simplifiedFlatCoordinates, 0, simplifiedEnds);\n        return new Polygon(simplifiedFlatCoordinates, GeometryLayout.XY, simplifiedEnds);\n    };\n    /**\n     * Get the type of this geometry.\n     * @return {import(\"./GeometryType.js\").default} Geometry type.\n     * @api\n     */\n    Polygon.prototype.getType = function () {\n        return GeometryType.POLYGON;\n    };\n    /**\n     * Test if the geometry and the passed extent intersect.\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @return {boolean} `true` if the geometry and the extent intersect.\n     * @api\n     */\n    Polygon.prototype.intersectsExtent = function (extent) {\n        return intersectsLinearRingArray(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, extent);\n    };\n    /**\n     * Set the coordinates of the polygon.\n     * @param {!Array<Array<import(\"../coordinate.js\").Coordinate>>} coordinates Coordinates.\n     * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n     * @api\n     */\n    Polygon.prototype.setCoordinates = function (coordinates, opt_layout) {\n        this.setLayout(opt_layout, coordinates, 2);\n        if (!this.flatCoordinates) {\n            this.flatCoordinates = [];\n        }\n        var ends = deflateCoordinatesArray(this.flatCoordinates, 0, coordinates, this.stride, this.ends_);\n        this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n        this.changed();\n    };\n    return Polygon;\n}(SimpleGeometry));\nexport default Polygon;\n/**\n * Create an approximation of a circle on the surface of a sphere.\n * @param {import(\"../coordinate.js\").Coordinate} center Center (`[lon, lat]` in degrees).\n * @param {number} radius The great-circle distance from the center to\n *     the polygon vertices.\n * @param {number=} opt_n Optional number of vertices for the resulting\n *     polygon. Default is `32`.\n * @param {number=} opt_sphereRadius Optional radius for the sphere (defaults to\n *     the Earth's mean radius using the WGS84 ellipsoid).\n * @return {Polygon} The \"circular\" polygon.\n * @api\n */\nexport function circular(center, radius, opt_n, opt_sphereRadius) {\n    var n = opt_n ? opt_n : 32;\n    /** @type {Array<number>} */\n    var flatCoordinates = [];\n    for (var i = 0; i < n; ++i) {\n        extend(flatCoordinates, sphereOffset(center, radius, (2 * Math.PI * i) / n, opt_sphereRadius));\n    }\n    flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);\n    return new Polygon(flatCoordinates, GeometryLayout.XY, [\n        flatCoordinates.length,\n    ]);\n}\n/**\n * Create a polygon from an extent. The layout used is `XY`.\n * @param {import(\"../extent.js\").Extent} extent The extent.\n * @return {Polygon} The polygon.\n * @api\n */\nexport function fromExtent(extent) {\n    var minX = extent[0];\n    var minY = extent[1];\n    var maxX = extent[2];\n    var maxY = extent[3];\n    var flatCoordinates = [\n        minX,\n        minY,\n        minX,\n        maxY,\n        maxX,\n        maxY,\n        maxX,\n        minY,\n        minX,\n        minY,\n    ];\n    return new Polygon(flatCoordinates, GeometryLayout.XY, [\n        flatCoordinates.length,\n    ]);\n}\n/**\n * Create a regular polygon from a circle.\n * @param {import(\"./Circle.js\").default} circle Circle geometry.\n * @param {number=} opt_sides Number of sides of the polygon. Default is 32.\n * @param {number=} opt_angle Start angle for the first vertex of the polygon in\n *     counter-clockwise radians. 0 means East. Default is 0.\n * @return {Polygon} Polygon geometry.\n * @api\n */\nexport function fromCircle(circle, opt_sides, opt_angle) {\n    var sides = opt_sides ? opt_sides : 32;\n    var stride = circle.getStride();\n    var layout = circle.getLayout();\n    var center = circle.getCenter();\n    var arrayLength = stride * (sides + 1);\n    var flatCoordinates = new Array(arrayLength);\n    for (var i = 0; i < arrayLength; i += stride) {\n        flatCoordinates[i] = 0;\n        flatCoordinates[i + 1] = 0;\n        for (var j = 2; j < stride; j++) {\n            flatCoordinates[i + j] = center[j];\n        }\n    }\n    var ends = [flatCoordinates.length];\n    var polygon = new Polygon(flatCoordinates, layout, ends);\n    makeRegular(polygon, center, circle.getRadius(), opt_angle);\n    return polygon;\n}\n/**\n * Modify the coordinates of a polygon to make it a regular polygon.\n * @param {Polygon} polygon Polygon geometry.\n * @param {import(\"../coordinate.js\").Coordinate} center Center of the regular polygon.\n * @param {number} radius Radius of the regular polygon.\n * @param {number=} opt_angle Start angle for the first vertex of the polygon in\n *     counter-clockwise radians. 0 means East. Default is 0.\n */\nexport function makeRegular(polygon, center, radius, opt_angle) {\n    var flatCoordinates = polygon.getFlatCoordinates();\n    var stride = polygon.getStride();\n    var sides = flatCoordinates.length / stride - 1;\n    var startAngle = opt_angle ? opt_angle : 0;\n    for (var i = 0; i <= sides; ++i) {\n        var offset = i * stride;\n        var angle = startAngle + (modulo(i, sides) * 2 * Math.PI) / sides;\n        flatCoordinates[offset] = center[0] + radius * Math.cos(angle);\n        flatCoordinates[offset + 1] = center[1] + radius * Math.sin(angle);\n    }\n    polygon.changed();\n}\n//# sourceMappingURL=Polygon.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/geom/Point\n */\nimport GeometryType from './GeometryType.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { containsXY, createOrUpdateFromCoordinate } from '../extent.js';\nimport { deflateCoordinate } from './flat/deflate.js';\nimport { squaredDistance as squaredDx } from '../math.js';\n/**\n * @classdesc\n * Point geometry.\n *\n * @api\n */\nvar Point = /** @class */ (function (_super) {\n    __extends(Point, _super);\n    /**\n     * @param {import(\"../coordinate.js\").Coordinate} coordinates Coordinates.\n     * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n     */\n    function Point(coordinates, opt_layout) {\n        var _this = _super.call(this) || this;\n        _this.setCoordinates(coordinates, opt_layout);\n        return _this;\n    }\n    /**\n     * Make a complete copy of the geometry.\n     * @return {!Point} Clone.\n     * @api\n     */\n    Point.prototype.clone = function () {\n        var point = new Point(this.flatCoordinates.slice(), this.layout);\n        point.applyProperties(this);\n        return point;\n    };\n    /**\n     * @param {number} x X.\n     * @param {number} y Y.\n     * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n     * @param {number} minSquaredDistance Minimum squared distance.\n     * @return {number} Minimum squared distance.\n     */\n    Point.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n        var flatCoordinates = this.flatCoordinates;\n        var squaredDistance = squaredDx(x, y, flatCoordinates[0], flatCoordinates[1]);\n        if (squaredDistance < minSquaredDistance) {\n            var stride = this.stride;\n            for (var i = 0; i < stride; ++i) {\n                closestPoint[i] = flatCoordinates[i];\n            }\n            closestPoint.length = stride;\n            return squaredDistance;\n        }\n        else {\n            return minSquaredDistance;\n        }\n    };\n    /**\n     * Return the coordinate of the point.\n     * @return {import(\"../coordinate.js\").Coordinate} Coordinates.\n     * @api\n     */\n    Point.prototype.getCoordinates = function () {\n        return !this.flatCoordinates ? [] : this.flatCoordinates.slice();\n    };\n    /**\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @protected\n     * @return {import(\"../extent.js\").Extent} extent Extent.\n     */\n    Point.prototype.computeExtent = function (extent) {\n        return createOrUpdateFromCoordinate(this.flatCoordinates, extent);\n    };\n    /**\n     * Get the type of this geometry.\n     * @return {import(\"./GeometryType.js\").default} Geometry type.\n     * @api\n     */\n    Point.prototype.getType = function () {\n        return GeometryType.POINT;\n    };\n    /**\n     * Test if the geometry and the passed extent intersect.\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @return {boolean} `true` if the geometry and the extent intersect.\n     * @api\n     */\n    Point.prototype.intersectsExtent = function (extent) {\n        return containsXY(extent, this.flatCoordinates[0], this.flatCoordinates[1]);\n    };\n    /**\n     * @param {!Array<*>} coordinates Coordinates.\n     * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n     * @api\n     */\n    Point.prototype.setCoordinates = function (coordinates, opt_layout) {\n        this.setLayout(opt_layout, coordinates, 0);\n        if (!this.flatCoordinates) {\n            this.flatCoordinates = [];\n        }\n        this.flatCoordinates.length = deflateCoordinate(this.flatCoordinates, 0, coordinates, this.stride);\n        this.changed();\n    };\n    return Point;\n}(SimpleGeometry));\nexport default Point;\n//# sourceMappingURL=Point.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toDate;\n\nvar _index = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nfunction toDate(argument) {\n  (0, _index.default)(1, arguments);\n  var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n  if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime());\n  } else if (typeof argument === 'number' || argStr === '[object Number]') {\n    return new Date(argument);\n  } else {\n    if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n      // eslint-disable-next-line no-console\n      console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n      console.warn(new Error().stack);\n    }\n\n    return new Date(NaN);\n  }\n}\n\nmodule.exports = exports.default;","/**\n * @module ol/featureloader\n */\nimport FormatType from './format/FormatType.js';\nimport { VOID } from './functions.js';\n/**\n *\n * @type {boolean}\n * @private\n */\nvar withCredentials = false;\n/**\n * {@link module:ol/source/Vector} sources use a function of this type to\n * load features.\n *\n * This function takes an {@link module:ol/extent~Extent} representing the area to be loaded,\n * a `{number}` representing the resolution (map units per pixel), an\n * {@link module:ol/proj/Projection} for the projection and success and failure callbacks as\n * arguments. `this` within the function is bound to the\n * {@link module:ol/source/Vector} it's called from.\n *\n * The function is responsible for loading the features and adding them to the\n * source.\n * @typedef {function(this:(import(\"./source/Vector\").default|import(\"./VectorTile.js\").default),\n *           import(\"./extent.js\").Extent,\n *           number,\n *           import(\"./proj/Projection.js\").default,\n *           function(Array<import(\"./Feature.js\").default>): void=,\n *           function(): void=): void} FeatureLoader\n * @api\n */\n/**\n * {@link module:ol/source/Vector} sources use a function of this type to\n * get the url to load features from.\n *\n * This function takes an {@link module:ol/extent~Extent} representing the area\n * to be loaded, a `{number}` representing the resolution (map units per pixel)\n * and an {@link module:ol/proj/Projection} for the projection  as\n * arguments and returns a `{string}` representing the URL.\n * @typedef {function(import(\"./extent.js\").Extent, number, import(\"./proj/Projection.js\").default): string} FeatureUrlFunction\n * @api\n */\n/**\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array<import(\"./Feature.js\").default>, import(\"./proj/Projection.js\").default): void} success Success\n *      Function called with the loaded features and optionally with the data projection.\n * @param {function(): void} failure Failure\n *      Function called when loading failed.\n */\nexport function loadFeaturesXhr(url, format, extent, resolution, projection, success, failure) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', typeof url === 'function' ? url(extent, resolution, projection) : url, true);\n    if (format.getType() == FormatType.ARRAY_BUFFER) {\n        xhr.responseType = 'arraybuffer';\n    }\n    xhr.withCredentials = withCredentials;\n    /**\n     * @param {Event} event Event.\n     * @private\n     */\n    xhr.onload = function (event) {\n        // status will be 0 for file:// urls\n        if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {\n            var type = format.getType();\n            /** @type {Document|Node|Object|string|undefined} */\n            var source = void 0;\n            if (type == FormatType.JSON || type == FormatType.TEXT) {\n                source = xhr.responseText;\n            }\n            else if (type == FormatType.XML) {\n                source = xhr.responseXML;\n                if (!source) {\n                    source = new DOMParser().parseFromString(xhr.responseText, 'application/xml');\n                }\n            }\n            else if (type == FormatType.ARRAY_BUFFER) {\n                source = /** @type {ArrayBuffer} */ (xhr.response);\n            }\n            if (source) {\n                success(\n                /** @type {Array<import(\"./Feature.js\").default>} */\n                (format.readFeatures(source, {\n                    extent: extent,\n                    featureProjection: projection,\n                })), format.readProjection(source));\n            }\n            else {\n                failure();\n            }\n        }\n        else {\n            failure();\n        }\n    };\n    /**\n     * @private\n     */\n    xhr.onerror = failure;\n    xhr.send();\n}\n/**\n * Create an XHR feature loader for a `url` and `format`. The feature loader\n * loads features (with XHR), parses the features, and adds them to the\n * vector source.\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @return {FeatureLoader} The feature loader.\n * @api\n */\nexport function xhr(url, format) {\n    /**\n     * @param {import(\"./extent.js\").Extent} extent Extent.\n     * @param {number} resolution Resolution.\n     * @param {import(\"./proj/Projection.js\").default} projection Projection.\n     * @param {function(): void=} success Success\n     *      Function called when loading succeeded.\n     * @param {function(): void=} failure Failure\n     *      Function called when loading failed.\n     * @this {import(\"./source/Vector\").default}\n     */\n    return function (extent, resolution, projection, success, failure) {\n        var source = /** @type {import(\"./source/Vector\").default} */ (this);\n        loadFeaturesXhr(url, format, extent, resolution, projection, \n        /**\n         * @param {Array<import(\"./Feature.js\").default>} features The loaded features.\n         * @param {import(\"./proj/Projection.js\").default} dataProjection Data\n         * projection.\n         */\n        function (features, dataProjection) {\n            if (success !== undefined) {\n                success(features);\n            }\n            source.addFeatures(features);\n        }, \n        /* FIXME handle error */ failure ? failure : VOID);\n    };\n}\n/**\n * Setter for the withCredentials configuration for the XHR.\n *\n * @param {boolean} xhrWithCredentials The value of withCredentials to set.\n * Compare https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/\n * @api\n */\nexport function setWithCredentials(xhrWithCredentials) {\n    withCredentials = xhrWithCredentials;\n}\n//# sourceMappingURL=featureloader.js.map","/**\n * @module ol/source/Vector\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RBush from '../structs/RBush.js';\nimport Source from './Source.js';\nimport SourceState from './State.js';\nimport VectorEventType from './VectorEventType.js';\nimport { TRUE, VOID } from '../functions.js';\nimport { all as allStrategy } from '../loadingstrategy.js';\nimport { assert } from '../asserts.js';\nimport { containsExtent, equals } from '../extent.js';\nimport { extend } from '../array.js';\nimport { getUid } from '../util.js';\nimport { getValues, isEmpty } from '../obj.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { xhr } from '../featureloader.js';\n/**\n * A function that takes an {@link module:ol/extent~Extent} and a resolution as arguments, and\n * returns an array of {@link module:ol/extent~Extent} with the extents to load. Usually this\n * is one of the standard {@link module:ol/loadingstrategy} strategies.\n *\n * @typedef {function(import(\"../extent.js\").Extent, number): Array<import(\"../extent.js\").Extent>} LoadingStrategy\n * @api\n */\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Vector} instances are instances of this\n * type.\n * @template {import(\"../geom/Geometry.js\").default} Geometry\n */\nvar VectorSourceEvent = /** @class */ (function (_super) {\n    __extends(VectorSourceEvent, _super);\n    /**\n     * @param {string} type Type.\n     * @param {import(\"../Feature.js\").default<Geometry>=} opt_feature Feature.\n     * @param {Array<import(\"../Feature.js\").default<Geometry>>=} opt_features Features.\n     */\n    function VectorSourceEvent(type, opt_feature, opt_features) {\n        var _this = _super.call(this, type) || this;\n        /**\n         * The added or removed feature for the `ADDFEATURE` and `REMOVEFEATURE` events, `undefined` otherwise.\n         * @type {import(\"../Feature.js\").default<Geometry>|undefined}\n         * @api\n         */\n        _this.feature = opt_feature;\n        /**\n         * The loaded features for the `FEATURESLOADED` event, `undefined` otherwise.\n         * @type {Array<import(\"../Feature.js\").default<Geometry>>|undefined}\n         * @api\n         */\n        _this.features = opt_features;\n        return _this;\n    }\n    return VectorSourceEvent;\n}(Event));\nexport { VectorSourceEvent };\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {Array<import(\"../Feature.js\").default>|Collection<import(\"../Feature.js\").default>} [features]\n * Features. If provided as {@link module:ol/Collection}, the features in the source\n * and the collection will stay in sync.\n * @property {import(\"../format/Feature.js\").default} [format] The feature format used by the XHR\n * feature loader when `url` is set. Required if `url` is set, otherwise ignored.\n * @property {import(\"../featureloader.js\").FeatureLoader} [loader]\n * The loader function used to load features, from a remote source for example.\n * If this is not set and `url` is set, the source will create and use an XHR\n * feature loader.\n *\n * Example:\n *\n * ```js\n * import {Vector} from 'ol/source';\n * import {GeoJSON} from 'ol/format';\n * import {bbox} from 'ol/loadingstrategy';\n *\n * var vectorSource = new Vector({\n *   format: new GeoJSON(),\n *   loader: function(extent, resolution, projection) {\n *      var proj = projection.getCode();\n *      var url = 'https://ahocevar.com/geoserver/wfs?service=WFS&' +\n *          'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +\n *          'outputFormat=application/json&srsname=' + proj + '&' +\n *          'bbox=' + extent.join(',') + ',' + proj;\n *      var xhr = new XMLHttpRequest();\n *      xhr.open('GET', url);\n *      var onError = function() {\n *        vectorSource.removeLoadedExtent(extent);\n *      }\n *      xhr.onerror = onError;\n *      xhr.onload = function() {\n *        if (xhr.status == 200) {\n *          vectorSource.addFeatures(\n *              vectorSource.getFormat().readFeatures(xhr.responseText));\n *        } else {\n *          onError();\n *        }\n *      }\n *      xhr.send();\n *    },\n *    strategy: bbox\n *  });\n * ```\n * @property {boolean} [overlaps=true] This source may have overlapping geometries.\n * Setting this to `false` (e.g. for sources with polygons that represent administrative\n * boundaries or TopoJSON sources) allows the renderer to optimise fill and\n * stroke operations.\n * @property {LoadingStrategy} [strategy] The loading strategy to use.\n * By default an {@link module:ol/loadingstrategy~all}\n * strategy is used, a one-off strategy which loads all features at once.\n * @property {string|import(\"../featureloader.js\").FeatureUrlFunction} [url]\n * Setting this option instructs the source to load features using an XHR loader\n * (see {@link module:ol/featureloader~xhr}). Use a `string` and an\n * {@link module:ol/loadingstrategy~all} for a one-off download of all features from\n * the given URL. Use a {@link module:ol/featureloader~FeatureUrlFunction} to generate the url with\n * other loading strategies.\n * Requires `format` to be set as well.\n * When default XHR feature loader is provided, the features will\n * be transformed from the data projection to the view projection\n * during parsing. If your remote data source does not advertise its projection\n * properly, this transformation will be incorrect. For some formats, the\n * default projection (usually EPSG:4326) can be overridden by setting the\n * dataProjection constructor option on the format.\n * Note that if a source contains non-feature data, such as a GeoJSON geometry\n * or a KML NetworkLink, these will be ignored. Use a custom loader to load these.\n * @property {boolean} [useSpatialIndex=true]\n * By default, an RTree is used as spatial index. When features are removed and\n * added frequently, and the total number of features is low, setting this to\n * `false` may improve performance.\n *\n * Note that\n * {@link module:ol/source/Vector~VectorSource#getFeaturesInExtent},\n * {@link module:ol/source/Vector~VectorSource#getClosestFeatureToCoordinate} and\n * {@link module:ol/source/Vector~VectorSource#getExtent} cannot be used when `useSpatialIndex` is\n * set to `false`, and {@link module:ol/source/Vector~VectorSource#forEachFeatureInExtent} will loop\n * through all features.\n *\n * When set to `false`, the features will be maintained in an\n * {@link module:ol/Collection}, which can be retrieved through\n * {@link module:ol/source/Vector~VectorSource#getFeaturesCollection}.\n * @property {boolean} [wrapX=true] Wrap the world horizontally. For vector editing across the\n * -180° and 180° meridians to work properly, this should be set to `false`. The\n * resulting geometry coordinates will then exceed the world bounds.\n */\n/**\n * @classdesc\n * Provides a source of features for vector layers. Vector features provided\n * by this source are suitable for editing. See {@link module:ol/source/VectorTile~VectorTile} for\n * vector data that is optimized for rendering.\n *\n * @fires VectorSourceEvent\n * @api\n * @template {import(\"../geom/Geometry.js\").default} Geometry\n */\nvar VectorSource = /** @class */ (function (_super) {\n    __extends(VectorSource, _super);\n    /**\n     * @param {Options=} opt_options Vector source options.\n     */\n    function VectorSource(opt_options) {\n        var _this = this;\n        var options = opt_options || {};\n        _this = _super.call(this, {\n            attributions: options.attributions,\n            projection: undefined,\n            state: SourceState.READY,\n            wrapX: options.wrapX !== undefined ? options.wrapX : true,\n        }) || this;\n        /**\n         * @private\n         * @type {import(\"../featureloader.js\").FeatureLoader}\n         */\n        _this.loader_ = VOID;\n        /**\n         * @private\n         * @type {import(\"../format/Feature.js\").default|undefined}\n         */\n        _this.format_ = options.format;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.overlaps_ = options.overlaps === undefined ? true : options.overlaps;\n        /**\n         * @private\n         * @type {string|import(\"../featureloader.js\").FeatureUrlFunction|undefined}\n         */\n        _this.url_ = options.url;\n        if (options.loader !== undefined) {\n            _this.loader_ = options.loader;\n        }\n        else if (_this.url_ !== undefined) {\n            assert(_this.format_, 7); // `format` must be set when `url` is set\n            // create a XHR feature loader for \"url\" and \"format\"\n            _this.loader_ = xhr(_this.url_, \n            /** @type {import(\"../format/Feature.js\").default} */ (_this.format_));\n        }\n        /**\n         * @private\n         * @type {LoadingStrategy}\n         */\n        _this.strategy_ =\n            options.strategy !== undefined ? options.strategy : allStrategy;\n        var useSpatialIndex = options.useSpatialIndex !== undefined ? options.useSpatialIndex : true;\n        /**\n         * @private\n         * @type {RBush<import(\"../Feature.js\").default<Geometry>>}\n         */\n        _this.featuresRtree_ = useSpatialIndex ? new RBush() : null;\n        /**\n         * @private\n         * @type {RBush<{extent: import(\"../extent.js\").Extent}>}\n         */\n        _this.loadedExtentsRtree_ = new RBush();\n        /**\n         * @private\n         * @type {!Object<string, import(\"../Feature.js\").default<Geometry>>}\n         */\n        _this.nullGeometryFeatures_ = {};\n        /**\n         * A lookup of features by id (the return from feature.getId()).\n         * @private\n         * @type {!Object<string, import(\"../Feature.js\").default<Geometry>>}\n         */\n        _this.idIndex_ = {};\n        /**\n         * A lookup of features by uid (using getUid(feature)).\n         * @private\n         * @type {!Object<string, import(\"../Feature.js\").default<Geometry>>}\n         */\n        _this.uidIndex_ = {};\n        /**\n         * @private\n         * @type {Object<string, Array<import(\"../events.js\").EventsKey>>}\n         */\n        _this.featureChangeKeys_ = {};\n        /**\n         * @private\n         * @type {Collection<import(\"../Feature.js\").default<Geometry>>}\n         */\n        _this.featuresCollection_ = null;\n        var collection, features;\n        if (Array.isArray(options.features)) {\n            features = options.features;\n        }\n        else if (options.features) {\n            collection = options.features;\n            features = collection.getArray();\n        }\n        if (!useSpatialIndex && collection === undefined) {\n            collection = new Collection(features);\n        }\n        if (features !== undefined) {\n            _this.addFeaturesInternal(features);\n        }\n        if (collection !== undefined) {\n            _this.bindFeaturesCollection_(collection);\n        }\n        return _this;\n    }\n    /**\n     * Add a single feature to the source.  If you want to add a batch of features\n     * at once, call {@link module:ol/source/Vector~VectorSource#addFeatures #addFeatures()}\n     * instead. A feature will not be added to the source if feature with\n     * the same id is already there. The reason for this behavior is to avoid\n     * feature duplication when using bbox or tile loading strategies.\n     * Note: this also applies if an {@link module:ol/Collection} is used for features,\n     * meaning that if a feature with a duplicate id is added in the collection, it will\n     * be removed from it right away.\n     * @param {import(\"../Feature.js\").default<Geometry>} feature Feature to add.\n     * @api\n     */\n    VectorSource.prototype.addFeature = function (feature) {\n        this.addFeatureInternal(feature);\n        this.changed();\n    };\n    /**\n     * Add a feature without firing a `change` event.\n     * @param {import(\"../Feature.js\").default<Geometry>} feature Feature.\n     * @protected\n     */\n    VectorSource.prototype.addFeatureInternal = function (feature) {\n        var featureKey = getUid(feature);\n        if (!this.addToIndex_(featureKey, feature)) {\n            if (this.featuresCollection_) {\n                this.featuresCollection_.remove(feature);\n            }\n            return;\n        }\n        this.setupChangeEvents_(featureKey, feature);\n        var geometry = feature.getGeometry();\n        if (geometry) {\n            var extent = geometry.getExtent();\n            if (this.featuresRtree_) {\n                this.featuresRtree_.insert(extent, feature);\n            }\n        }\n        else {\n            this.nullGeometryFeatures_[featureKey] = feature;\n        }\n        this.dispatchEvent(new VectorSourceEvent(VectorEventType.ADDFEATURE, feature));\n    };\n    /**\n     * @param {string} featureKey Unique identifier for the feature.\n     * @param {import(\"../Feature.js\").default<Geometry>} feature The feature.\n     * @private\n     */\n    VectorSource.prototype.setupChangeEvents_ = function (featureKey, feature) {\n        this.featureChangeKeys_[featureKey] = [\n            listen(feature, EventType.CHANGE, this.handleFeatureChange_, this),\n            listen(feature, ObjectEventType.PROPERTYCHANGE, this.handleFeatureChange_, this),\n        ];\n    };\n    /**\n     * @param {string} featureKey Unique identifier for the feature.\n     * @param {import(\"../Feature.js\").default<Geometry>} feature The feature.\n     * @return {boolean} The feature is \"valid\", in the sense that it is also a\n     *     candidate for insertion into the Rtree.\n     * @private\n     */\n    VectorSource.prototype.addToIndex_ = function (featureKey, feature) {\n        var valid = true;\n        var id = feature.getId();\n        if (id !== undefined) {\n            if (!(id.toString() in this.idIndex_)) {\n                this.idIndex_[id.toString()] = feature;\n            }\n            else {\n                valid = false;\n            }\n        }\n        if (valid) {\n            assert(!(featureKey in this.uidIndex_), 30); // The passed `feature` was already added to the source\n            this.uidIndex_[featureKey] = feature;\n        }\n        return valid;\n    };\n    /**\n     * Add a batch of features to the source.\n     * @param {Array<import(\"../Feature.js\").default<Geometry>>} features Features to add.\n     * @api\n     */\n    VectorSource.prototype.addFeatures = function (features) {\n        this.addFeaturesInternal(features);\n        this.changed();\n    };\n    /**\n     * Add features without firing a `change` event.\n     * @param {Array<import(\"../Feature.js\").default<Geometry>>} features Features.\n     * @protected\n     */\n    VectorSource.prototype.addFeaturesInternal = function (features) {\n        var extents = [];\n        var newFeatures = [];\n        var geometryFeatures = [];\n        for (var i = 0, length_1 = features.length; i < length_1; i++) {\n            var feature = features[i];\n            var featureKey = getUid(feature);\n            if (this.addToIndex_(featureKey, feature)) {\n                newFeatures.push(feature);\n            }\n        }\n        for (var i = 0, length_2 = newFeatures.length; i < length_2; i++) {\n            var feature = newFeatures[i];\n            var featureKey = getUid(feature);\n            this.setupChangeEvents_(featureKey, feature);\n            var geometry = feature.getGeometry();\n            if (geometry) {\n                var extent = geometry.getExtent();\n                extents.push(extent);\n                geometryFeatures.push(feature);\n            }\n            else {\n                this.nullGeometryFeatures_[featureKey] = feature;\n            }\n        }\n        if (this.featuresRtree_) {\n            this.featuresRtree_.load(extents, geometryFeatures);\n        }\n        for (var i = 0, length_3 = newFeatures.length; i < length_3; i++) {\n            this.dispatchEvent(new VectorSourceEvent(VectorEventType.ADDFEATURE, newFeatures[i]));\n        }\n    };\n    /**\n     * @param {!Collection<import(\"../Feature.js\").default<Geometry>>} collection Collection.\n     * @private\n     */\n    VectorSource.prototype.bindFeaturesCollection_ = function (collection) {\n        var modifyingCollection = false;\n        this.addEventListener(VectorEventType.ADDFEATURE, \n        /**\n         * @param {VectorSourceEvent<Geometry>} evt The vector source event\n         */\n        function (evt) {\n            if (!modifyingCollection) {\n                modifyingCollection = true;\n                collection.push(evt.feature);\n                modifyingCollection = false;\n            }\n        });\n        this.addEventListener(VectorEventType.REMOVEFEATURE, \n        /**\n         * @param {VectorSourceEvent<Geometry>} evt The vector source event\n         */\n        function (evt) {\n            if (!modifyingCollection) {\n                modifyingCollection = true;\n                collection.remove(evt.feature);\n                modifyingCollection = false;\n            }\n        });\n        collection.addEventListener(CollectionEventType.ADD, \n        /**\n         * @param {import(\"../Collection.js\").CollectionEvent} evt The collection event\n         */\n        function (evt) {\n            if (!modifyingCollection) {\n                modifyingCollection = true;\n                this.addFeature(\n                /** @type {import(\"../Feature.js\").default<Geometry>} */ (evt.element));\n                modifyingCollection = false;\n            }\n        }.bind(this));\n        collection.addEventListener(CollectionEventType.REMOVE, \n        /**\n         * @param {import(\"../Collection.js\").CollectionEvent} evt The collection event\n         */\n        function (evt) {\n            if (!modifyingCollection) {\n                modifyingCollection = true;\n                this.removeFeature(\n                /** @type {import(\"../Feature.js\").default<Geometry>} */ (evt.element));\n                modifyingCollection = false;\n            }\n        }.bind(this));\n        this.featuresCollection_ = collection;\n    };\n    /**\n     * Remove all features from the source.\n     * @param {boolean=} opt_fast Skip dispatching of {@link module:ol/source/Vector.VectorSourceEvent#removefeature} events.\n     * @api\n     */\n    VectorSource.prototype.clear = function (opt_fast) {\n        if (opt_fast) {\n            for (var featureId in this.featureChangeKeys_) {\n                var keys = this.featureChangeKeys_[featureId];\n                keys.forEach(unlistenByKey);\n            }\n            if (!this.featuresCollection_) {\n                this.featureChangeKeys_ = {};\n                this.idIndex_ = {};\n                this.uidIndex_ = {};\n            }\n        }\n        else {\n            if (this.featuresRtree_) {\n                this.featuresRtree_.forEach(this.removeFeatureInternal.bind(this));\n                for (var id in this.nullGeometryFeatures_) {\n                    this.removeFeatureInternal(this.nullGeometryFeatures_[id]);\n                }\n            }\n        }\n        if (this.featuresCollection_) {\n            this.featuresCollection_.clear();\n        }\n        if (this.featuresRtree_) {\n            this.featuresRtree_.clear();\n        }\n        this.nullGeometryFeatures_ = {};\n        var clearEvent = new VectorSourceEvent(VectorEventType.CLEAR);\n        this.dispatchEvent(clearEvent);\n        this.changed();\n    };\n    /**\n     * Iterate through all features on the source, calling the provided callback\n     * with each one.  If the callback returns any \"truthy\" value, iteration will\n     * stop and the function will return the same value.\n     * Note: this function only iterate through the feature that have a defined geometry.\n     *\n     * @param {function(import(\"../Feature.js\").default<Geometry>): T} callback Called with each feature\n     *     on the source.  Return a truthy value to stop iteration.\n     * @return {T|undefined} The return value from the last call to the callback.\n     * @template T\n     * @api\n     */\n    VectorSource.prototype.forEachFeature = function (callback) {\n        if (this.featuresRtree_) {\n            return this.featuresRtree_.forEach(callback);\n        }\n        else if (this.featuresCollection_) {\n            this.featuresCollection_.forEach(callback);\n        }\n    };\n    /**\n     * Iterate through all features whose geometries contain the provided\n     * coordinate, calling the callback with each feature.  If the callback returns\n     * a \"truthy\" value, iteration will stop and the function will return the same\n     * value.\n     *\n     * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {function(import(\"../Feature.js\").default<Geometry>): T} callback Called with each feature\n     *     whose goemetry contains the provided coordinate.\n     * @return {T|undefined} The return value from the last call to the callback.\n     * @template T\n     */\n    VectorSource.prototype.forEachFeatureAtCoordinateDirect = function (coordinate, callback) {\n        var extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]];\n        return this.forEachFeatureInExtent(extent, function (feature) {\n            var geometry = feature.getGeometry();\n            if (geometry.intersectsCoordinate(coordinate)) {\n                return callback(feature);\n            }\n            else {\n                return undefined;\n            }\n        });\n    };\n    /**\n     * Iterate through all features whose bounding box intersects the provided\n     * extent (note that the feature's geometry may not intersect the extent),\n     * calling the callback with each feature.  If the callback returns a \"truthy\"\n     * value, iteration will stop and the function will return the same value.\n     *\n     * If you are interested in features whose geometry intersects an extent, call\n     * the {@link module:ol/source/Vector~VectorSource#forEachFeatureIntersectingExtent #forEachFeatureIntersectingExtent()} method instead.\n     *\n     * When `useSpatialIndex` is set to false, this method will loop through all\n     * features, equivalent to {@link module:ol/source/Vector~VectorSource#forEachFeature #forEachFeature()}.\n     *\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {function(import(\"../Feature.js\").default<Geometry>): T} callback Called with each feature\n     *     whose bounding box intersects the provided extent.\n     * @return {T|undefined} The return value from the last call to the callback.\n     * @template T\n     * @api\n     */\n    VectorSource.prototype.forEachFeatureInExtent = function (extent, callback) {\n        if (this.featuresRtree_) {\n            return this.featuresRtree_.forEachInExtent(extent, callback);\n        }\n        else if (this.featuresCollection_) {\n            this.featuresCollection_.forEach(callback);\n        }\n    };\n    /**\n     * Iterate through all features whose geometry intersects the provided extent,\n     * calling the callback with each feature.  If the callback returns a \"truthy\"\n     * value, iteration will stop and the function will return the same value.\n     *\n     * If you only want to test for bounding box intersection, call the\n     * {@link module:ol/source/Vector~VectorSource#forEachFeatureInExtent #forEachFeatureInExtent()} method instead.\n     *\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {function(import(\"../Feature.js\").default<Geometry>): T} callback Called with each feature\n     *     whose geometry intersects the provided extent.\n     * @return {T|undefined} The return value from the last call to the callback.\n     * @template T\n     * @api\n     */\n    VectorSource.prototype.forEachFeatureIntersectingExtent = function (extent, callback) {\n        return this.forEachFeatureInExtent(extent, \n        /**\n         * @param {import(\"../Feature.js\").default<Geometry>} feature Feature.\n         * @return {T|undefined} The return value from the last call to the callback.\n         */\n        function (feature) {\n            var geometry = feature.getGeometry();\n            if (geometry.intersectsExtent(extent)) {\n                var result = callback(feature);\n                if (result) {\n                    return result;\n                }\n            }\n        });\n    };\n    /**\n     * Get the features collection associated with this source. Will be `null`\n     * unless the source was configured with `useSpatialIndex` set to `false`, or\n     * with an {@link module:ol/Collection} as `features`.\n     * @return {Collection<import(\"../Feature.js\").default<Geometry>>} The collection of features.\n     * @api\n     */\n    VectorSource.prototype.getFeaturesCollection = function () {\n        return this.featuresCollection_;\n    };\n    /**\n     * Get all features on the source in random order.\n     * @return {Array<import(\"../Feature.js\").default<Geometry>>} Features.\n     * @api\n     */\n    VectorSource.prototype.getFeatures = function () {\n        var features;\n        if (this.featuresCollection_) {\n            features = this.featuresCollection_.getArray();\n        }\n        else if (this.featuresRtree_) {\n            features = this.featuresRtree_.getAll();\n            if (!isEmpty(this.nullGeometryFeatures_)) {\n                extend(features, getValues(this.nullGeometryFeatures_));\n            }\n        }\n        return /** @type {Array<import(\"../Feature.js\").default<Geometry>>} */ (features);\n    };\n    /**\n     * Get all features whose geometry intersects the provided coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @return {Array<import(\"../Feature.js\").default<Geometry>>} Features.\n     * @api\n     */\n    VectorSource.prototype.getFeaturesAtCoordinate = function (coordinate) {\n        var features = [];\n        this.forEachFeatureAtCoordinateDirect(coordinate, function (feature) {\n            features.push(feature);\n        });\n        return features;\n    };\n    /**\n     * Get all features whose bounding box intersects the provided extent.  Note that this returns an array of\n     * all features intersecting the given extent in random order (so it may include\n     * features whose geometries do not intersect the extent).\n     *\n     * When `useSpatialIndex` is set to false, this method will return all\n     * features.\n     *\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @return {Array<import(\"../Feature.js\").default<Geometry>>} Features.\n     * @api\n     */\n    VectorSource.prototype.getFeaturesInExtent = function (extent) {\n        if (this.featuresRtree_) {\n            return this.featuresRtree_.getInExtent(extent);\n        }\n        else if (this.featuresCollection_) {\n            return this.featuresCollection_.getArray();\n        }\n        else {\n            return [];\n        }\n    };\n    /**\n     * Get the closest feature to the provided coordinate.\n     *\n     * This method is not available when the source is configured with\n     * `useSpatialIndex` set to `false`.\n     * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {function(import(\"../Feature.js\").default<Geometry>):boolean=} opt_filter Feature filter function.\n     *     The filter function will receive one argument, the {@link module:ol/Feature feature}\n     *     and it should return a boolean value. By default, no filtering is made.\n     * @return {import(\"../Feature.js\").default<Geometry>} Closest feature.\n     * @api\n     */\n    VectorSource.prototype.getClosestFeatureToCoordinate = function (coordinate, opt_filter) {\n        // Find the closest feature using branch and bound.  We start searching an\n        // infinite extent, and find the distance from the first feature found.  This\n        // becomes the closest feature.  We then compute a smaller extent which any\n        // closer feature must intersect.  We continue searching with this smaller\n        // extent, trying to find a closer feature.  Every time we find a closer\n        // feature, we update the extent being searched so that any even closer\n        // feature must intersect it.  We continue until we run out of features.\n        var x = coordinate[0];\n        var y = coordinate[1];\n        var closestFeature = null;\n        var closestPoint = [NaN, NaN];\n        var minSquaredDistance = Infinity;\n        var extent = [-Infinity, -Infinity, Infinity, Infinity];\n        var filter = opt_filter ? opt_filter : TRUE;\n        this.featuresRtree_.forEachInExtent(extent, \n        /**\n         * @param {import(\"../Feature.js\").default<Geometry>} feature Feature.\n         */\n        function (feature) {\n            if (filter(feature)) {\n                var geometry = feature.getGeometry();\n                var previousMinSquaredDistance = minSquaredDistance;\n                minSquaredDistance = geometry.closestPointXY(x, y, closestPoint, minSquaredDistance);\n                if (minSquaredDistance < previousMinSquaredDistance) {\n                    closestFeature = feature;\n                    // This is sneaky.  Reduce the extent that it is currently being\n                    // searched while the R-Tree traversal using this same extent object\n                    // is still in progress.  This is safe because the new extent is\n                    // strictly contained by the old extent.\n                    var minDistance = Math.sqrt(minSquaredDistance);\n                    extent[0] = x - minDistance;\n                    extent[1] = y - minDistance;\n                    extent[2] = x + minDistance;\n                    extent[3] = y + minDistance;\n                }\n            }\n        });\n        return closestFeature;\n    };\n    /**\n     * Get the extent of the features currently in the source.\n     *\n     * This method is not available when the source is configured with\n     * `useSpatialIndex` set to `false`.\n     * @param {import(\"../extent.js\").Extent=} opt_extent Destination extent. If provided, no new extent\n     *     will be created. Instead, that extent's coordinates will be overwritten.\n     * @return {import(\"../extent.js\").Extent} Extent.\n     * @api\n     */\n    VectorSource.prototype.getExtent = function (opt_extent) {\n        return this.featuresRtree_.getExtent(opt_extent);\n    };\n    /**\n     * Get a feature by its identifier (the value returned by feature.getId()).\n     * Note that the index treats string and numeric identifiers as the same.  So\n     * `source.getFeatureById(2)` will return a feature with id `'2'` or `2`.\n     *\n     * @param {string|number} id Feature identifier.\n     * @return {import(\"../Feature.js\").default<Geometry>} The feature (or `null` if not found).\n     * @api\n     */\n    VectorSource.prototype.getFeatureById = function (id) {\n        var feature = this.idIndex_[id.toString()];\n        return feature !== undefined ? feature : null;\n    };\n    /**\n     * Get a feature by its internal unique identifier (using `getUid`).\n     *\n     * @param {string} uid Feature identifier.\n     * @return {import(\"../Feature.js\").default<Geometry>} The feature (or `null` if not found).\n     */\n    VectorSource.prototype.getFeatureByUid = function (uid) {\n        var feature = this.uidIndex_[uid];\n        return feature !== undefined ? feature : null;\n    };\n    /**\n     * Get the format associated with this source.\n     *\n     * @return {import(\"../format/Feature.js\").default|undefined} The feature format.\n     * @api\n     */\n    VectorSource.prototype.getFormat = function () {\n        return this.format_;\n    };\n    /**\n     * @return {boolean} The source can have overlapping geometries.\n     */\n    VectorSource.prototype.getOverlaps = function () {\n        return this.overlaps_;\n    };\n    /**\n     * Get the url associated with this source.\n     *\n     * @return {string|import(\"../featureloader.js\").FeatureUrlFunction|undefined} The url.\n     * @api\n     */\n    VectorSource.prototype.getUrl = function () {\n        return this.url_;\n    };\n    /**\n     * @param {Event} event Event.\n     * @private\n     */\n    VectorSource.prototype.handleFeatureChange_ = function (event) {\n        var feature = /** @type {import(\"../Feature.js\").default<Geometry>} */ (event.target);\n        var featureKey = getUid(feature);\n        var geometry = feature.getGeometry();\n        if (!geometry) {\n            if (!(featureKey in this.nullGeometryFeatures_)) {\n                if (this.featuresRtree_) {\n                    this.featuresRtree_.remove(feature);\n                }\n                this.nullGeometryFeatures_[featureKey] = feature;\n            }\n        }\n        else {\n            var extent = geometry.getExtent();\n            if (featureKey in this.nullGeometryFeatures_) {\n                delete this.nullGeometryFeatures_[featureKey];\n                if (this.featuresRtree_) {\n                    this.featuresRtree_.insert(extent, feature);\n                }\n            }\n            else {\n                if (this.featuresRtree_) {\n                    this.featuresRtree_.update(extent, feature);\n                }\n            }\n        }\n        var id = feature.getId();\n        if (id !== undefined) {\n            var sid = id.toString();\n            if (this.idIndex_[sid] !== feature) {\n                this.removeFromIdIndex_(feature);\n                this.idIndex_[sid] = feature;\n            }\n        }\n        else {\n            this.removeFromIdIndex_(feature);\n            this.uidIndex_[featureKey] = feature;\n        }\n        this.changed();\n        this.dispatchEvent(new VectorSourceEvent(VectorEventType.CHANGEFEATURE, feature));\n    };\n    /**\n     * Returns true if the feature is contained within the source.\n     * @param {import(\"../Feature.js\").default<Geometry>} feature Feature.\n     * @return {boolean} Has feature.\n     * @api\n     */\n    VectorSource.prototype.hasFeature = function (feature) {\n        var id = feature.getId();\n        if (id !== undefined) {\n            return id in this.idIndex_;\n        }\n        else {\n            return getUid(feature) in this.uidIndex_;\n        }\n    };\n    /**\n     * @return {boolean} Is empty.\n     */\n    VectorSource.prototype.isEmpty = function () {\n        return this.featuresRtree_.isEmpty() && isEmpty(this.nullGeometryFeatures_);\n    };\n    /**\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {number} resolution Resolution.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     */\n    VectorSource.prototype.loadFeatures = function (extent, resolution, projection) {\n        var loadedExtentsRtree = this.loadedExtentsRtree_;\n        var extentsToLoad = this.strategy_(extent, resolution);\n        this.loading = false;\n        var _loop_1 = function (i, ii) {\n            var extentToLoad = extentsToLoad[i];\n            var alreadyLoaded = loadedExtentsRtree.forEachInExtent(extentToLoad, \n            /**\n             * @param {{extent: import(\"../extent.js\").Extent}} object Object.\n             * @return {boolean} Contains.\n             */\n            function (object) {\n                return containsExtent(object.extent, extentToLoad);\n            });\n            if (!alreadyLoaded) {\n                this_1.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADSTART));\n                this_1.loader_.call(this_1, extentToLoad, resolution, projection, function (features) {\n                    this.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADEND, undefined, features));\n                }.bind(this_1), function () {\n                    this.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADERROR));\n                }.bind(this_1));\n                loadedExtentsRtree.insert(extentToLoad, { extent: extentToLoad.slice() });\n                this_1.loading = this_1.loader_ !== VOID;\n            }\n        };\n        var this_1 = this;\n        for (var i = 0, ii = extentsToLoad.length; i < ii; ++i) {\n            _loop_1(i, ii);\n        }\n    };\n    VectorSource.prototype.refresh = function () {\n        this.clear(true);\n        this.loadedExtentsRtree_.clear();\n        _super.prototype.refresh.call(this);\n    };\n    /**\n     * Remove an extent from the list of loaded extents.\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @api\n     */\n    VectorSource.prototype.removeLoadedExtent = function (extent) {\n        var loadedExtentsRtree = this.loadedExtentsRtree_;\n        var obj;\n        loadedExtentsRtree.forEachInExtent(extent, function (object) {\n            if (equals(object.extent, extent)) {\n                obj = object;\n                return true;\n            }\n        });\n        if (obj) {\n            loadedExtentsRtree.remove(obj);\n        }\n    };\n    /**\n     * Remove a single feature from the source.  If you want to remove all features\n     * at once, use the {@link module:ol/source/Vector~VectorSource#clear #clear()} method\n     * instead.\n     * @param {import(\"../Feature.js\").default<Geometry>} feature Feature to remove.\n     * @api\n     */\n    VectorSource.prototype.removeFeature = function (feature) {\n        var featureKey = getUid(feature);\n        if (featureKey in this.nullGeometryFeatures_) {\n            delete this.nullGeometryFeatures_[featureKey];\n        }\n        else {\n            if (this.featuresRtree_) {\n                this.featuresRtree_.remove(feature);\n            }\n        }\n        this.removeFeatureInternal(feature);\n        this.changed();\n    };\n    /**\n     * Remove feature without firing a `change` event.\n     * @param {import(\"../Feature.js\").default<Geometry>} feature Feature.\n     * @protected\n     */\n    VectorSource.prototype.removeFeatureInternal = function (feature) {\n        var featureKey = getUid(feature);\n        this.featureChangeKeys_[featureKey].forEach(unlistenByKey);\n        delete this.featureChangeKeys_[featureKey];\n        var id = feature.getId();\n        if (id !== undefined) {\n            delete this.idIndex_[id.toString()];\n        }\n        delete this.uidIndex_[featureKey];\n        this.dispatchEvent(new VectorSourceEvent(VectorEventType.REMOVEFEATURE, feature));\n    };\n    /**\n     * Remove a feature from the id index.  Called internally when the feature id\n     * may have changed.\n     * @param {import(\"../Feature.js\").default<Geometry>} feature The feature.\n     * @return {boolean} Removed the feature from the index.\n     * @private\n     */\n    VectorSource.prototype.removeFromIdIndex_ = function (feature) {\n        var removed = false;\n        for (var id in this.idIndex_) {\n            if (this.idIndex_[id] === feature) {\n                delete this.idIndex_[id];\n                removed = true;\n                break;\n            }\n        }\n        return removed;\n    };\n    /**\n     * Set the new loader of the source. The next render cycle will use the\n     * new loader.\n     * @param {import(\"../featureloader.js\").FeatureLoader} loader The loader to set.\n     * @api\n     */\n    VectorSource.prototype.setLoader = function (loader) {\n        this.loader_ = loader;\n    };\n    /**\n     * Points the source to a new url. The next render cycle will use the new url.\n     * @param {string|import(\"../featureloader.js\").FeatureUrlFunction} url Url.\n     * @api\n     */\n    VectorSource.prototype.setUrl = function (url) {\n        assert(this.format_, 7); // `format` must be set when `url` is set\n        this.setLoader(xhr(url, this.format_));\n    };\n    return VectorSource;\n}(Source));\nexport default VectorSource;\n//# sourceMappingURL=Vector.js.map","/**\n * @module ol/util\n */\n/**\n * @return {?} Any return.\n */\nexport function abstract() {\n    return /** @type {?} */ ((function () {\n        throw new Error('Unimplemented abstract method.');\n    })());\n}\n/**\n * Counter for getUid.\n * @type {number}\n * @private\n */\nvar uidCounter_ = 0;\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {string} The unique ID for the object.\n * @api\n */\nexport function getUid(obj) {\n    return obj.ol_uid || (obj.ol_uid = String(++uidCounter_));\n}\n/**\n * OpenLayers version.\n * @type {string}\n */\nexport var VERSION = '6.5.0';\n//# sourceMappingURL=util.js.map","/**\n * @module ol/style/IconImage\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport EventTarget from '../events/Target.js';\nimport EventType from '../events/EventType.js';\nimport ImageState from '../ImageState.js';\nimport { asString } from '../color.js';\nimport { createCanvasContext2D } from '../dom.js';\nimport { shared as iconImageCache } from './IconImageCache.js';\nimport { listenImage } from '../Image.js';\n/**\n * @type {CanvasRenderingContext2D}\n */\nvar taintedTestContext = null;\nvar IconImage = /** @class */ (function (_super) {\n    __extends(IconImage, _super);\n    /**\n     * @param {HTMLImageElement|HTMLCanvasElement} image Image.\n     * @param {string|undefined} src Src.\n     * @param {import(\"../size.js\").Size} size Size.\n     * @param {?string} crossOrigin Cross origin.\n     * @param {import(\"../ImageState.js\").default} imageState Image state.\n     * @param {import(\"../color.js\").Color} color Color.\n     */\n    function IconImage(image, src, size, crossOrigin, imageState, color) {\n        var _this = _super.call(this) || this;\n        /**\n         * @private\n         * @type {HTMLImageElement|HTMLCanvasElement}\n         */\n        _this.hitDetectionImage_ = null;\n        /**\n         * @private\n         * @type {HTMLImageElement|HTMLCanvasElement}\n         */\n        _this.image_ = !image ? new Image() : image;\n        if (crossOrigin !== null) {\n            /** @type {HTMLImageElement} */ (_this.image_).crossOrigin = crossOrigin;\n        }\n        /**\n         * @private\n         * @type {Object<number, HTMLCanvasElement>}\n         */\n        _this.canvas_ = {};\n        /**\n         * @private\n         * @type {import(\"../color.js\").Color}\n         */\n        _this.color_ = color;\n        /**\n         * @private\n         * @type {?function():void}\n         */\n        _this.unlisten_ = null;\n        /**\n         * @private\n         * @type {import(\"../ImageState.js\").default}\n         */\n        _this.imageState_ = imageState;\n        /**\n         * @private\n         * @type {import(\"../size.js\").Size}\n         */\n        _this.size_ = size;\n        /**\n         * @private\n         * @type {string|undefined}\n         */\n        _this.src_ = src;\n        /**\n         * @private\n         */\n        _this.tainted_;\n        return _this;\n    }\n    /**\n     * @private\n     * @return {boolean} The image canvas is tainted.\n     */\n    IconImage.prototype.isTainted_ = function () {\n        if (this.tainted_ === undefined && this.imageState_ === ImageState.LOADED) {\n            if (!taintedTestContext) {\n                taintedTestContext = createCanvasContext2D(1, 1);\n            }\n            taintedTestContext.drawImage(this.image_, 0, 0);\n            try {\n                taintedTestContext.getImageData(0, 0, 1, 1);\n                this.tainted_ = false;\n            }\n            catch (e) {\n                taintedTestContext = null;\n                this.tainted_ = true;\n            }\n        }\n        return this.tainted_ === true;\n    };\n    /**\n     * @private\n     */\n    IconImage.prototype.dispatchChangeEvent_ = function () {\n        this.dispatchEvent(EventType.CHANGE);\n    };\n    /**\n     * @private\n     */\n    IconImage.prototype.handleImageError_ = function () {\n        this.imageState_ = ImageState.ERROR;\n        this.unlistenImage_();\n        this.dispatchChangeEvent_();\n    };\n    /**\n     * @private\n     */\n    IconImage.prototype.handleImageLoad_ = function () {\n        this.imageState_ = ImageState.LOADED;\n        if (this.size_) {\n            this.image_.width = this.size_[0];\n            this.image_.height = this.size_[1];\n        }\n        else {\n            this.size_ = [this.image_.width, this.image_.height];\n        }\n        this.unlistenImage_();\n        this.dispatchChangeEvent_();\n    };\n    /**\n     * @param {number} pixelRatio Pixel ratio.\n     * @return {HTMLImageElement|HTMLCanvasElement} Image or Canvas element.\n     */\n    IconImage.prototype.getImage = function (pixelRatio) {\n        this.replaceColor_(pixelRatio);\n        return this.canvas_[pixelRatio] ? this.canvas_[pixelRatio] : this.image_;\n    };\n    /**\n     * @param {number} pixelRatio Pixel ratio.\n     * @return {number} Image or Canvas element.\n     */\n    IconImage.prototype.getPixelRatio = function (pixelRatio) {\n        this.replaceColor_(pixelRatio);\n        return this.canvas_[pixelRatio] ? pixelRatio : 1;\n    };\n    /**\n     * @return {import(\"../ImageState.js\").default} Image state.\n     */\n    IconImage.prototype.getImageState = function () {\n        return this.imageState_;\n    };\n    /**\n     * @return {HTMLImageElement|HTMLCanvasElement} Image element.\n     */\n    IconImage.prototype.getHitDetectionImage = function () {\n        if (!this.hitDetectionImage_) {\n            if (this.isTainted_()) {\n                var width = this.size_[0];\n                var height = this.size_[1];\n                var context = createCanvasContext2D(width, height);\n                context.fillRect(0, 0, width, height);\n                this.hitDetectionImage_ = context.canvas;\n            }\n            else {\n                this.hitDetectionImage_ = this.image_;\n            }\n        }\n        return this.hitDetectionImage_;\n    };\n    /**\n     * Get the size of the icon (in pixels).\n     * @return {import(\"../size.js\").Size} Image size.\n     */\n    IconImage.prototype.getSize = function () {\n        return this.size_;\n    };\n    /**\n     * @return {string|undefined} Image src.\n     */\n    IconImage.prototype.getSrc = function () {\n        return this.src_;\n    };\n    /**\n     * Load not yet loaded URI.\n     */\n    IconImage.prototype.load = function () {\n        if (this.imageState_ == ImageState.IDLE) {\n            this.imageState_ = ImageState.LOADING;\n            try {\n                /** @type {HTMLImageElement} */ (this.image_).src = this.src_;\n            }\n            catch (e) {\n                this.handleImageError_();\n            }\n            this.unlisten_ = listenImage(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this));\n        }\n    };\n    /**\n     * @param {number} pixelRatio Pixel ratio.\n     * @private\n     */\n    IconImage.prototype.replaceColor_ = function (pixelRatio) {\n        if (!this.color_ || this.canvas_[pixelRatio]) {\n            return;\n        }\n        var canvas = document.createElement('canvas');\n        this.canvas_[pixelRatio] = canvas;\n        canvas.width = Math.ceil(this.image_.width * pixelRatio);\n        canvas.height = Math.ceil(this.image_.height * pixelRatio);\n        var ctx = canvas.getContext('2d');\n        ctx.scale(pixelRatio, pixelRatio);\n        ctx.drawImage(this.image_, 0, 0);\n        ctx.globalCompositeOperation = 'multiply';\n        // Internet Explorer 11 does not support the multiply operation.\n        // If the canvas is tainted in Internet Explorer this still produces\n        // a solid color image with the shape of the icon.\n        if (ctx.globalCompositeOperation === 'multiply' || this.isTainted_()) {\n            ctx.fillStyle = asString(this.color_);\n            ctx.fillRect(0, 0, canvas.width, canvas.height);\n            ctx.globalCompositeOperation = 'destination-in';\n            ctx.drawImage(this.image_, 0, 0);\n        }\n        else {\n            var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n            var data = imgData.data;\n            var r = this.color_[0] / 255.0;\n            var g = this.color_[1] / 255.0;\n            var b = this.color_[2] / 255.0;\n            var a = this.color_[3];\n            for (var i = 0, ii = data.length; i < ii; i += 4) {\n                data[i] *= r;\n                data[i + 1] *= g;\n                data[i + 2] *= b;\n                data[i + 3] *= a;\n            }\n            ctx.putImageData(imgData, 0, 0);\n        }\n    };\n    /**\n     * Discards event handlers which listen for load completion or errors.\n     *\n     * @private\n     */\n    IconImage.prototype.unlistenImage_ = function () {\n        if (this.unlisten_) {\n            this.unlisten_();\n            this.unlisten_ = null;\n        }\n    };\n    return IconImage;\n}(EventTarget));\n/**\n * @param {HTMLImageElement|HTMLCanvasElement} image Image.\n * @param {string} src Src.\n * @param {import(\"../size.js\").Size} size Size.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../ImageState.js\").default} imageState Image state.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {IconImage} Icon image.\n */\nexport function get(image, src, size, crossOrigin, imageState, color) {\n    var iconImage = iconImageCache.get(src, crossOrigin, color);\n    if (!iconImage) {\n        iconImage = new IconImage(image, src, size, crossOrigin, imageState, color);\n        iconImageCache.set(src, crossOrigin, color, iconImage);\n    }\n    return iconImage;\n}\nexport default IconImage;\n//# sourceMappingURL=IconImage.js.map","/**\n * @module ol/style/IconOrigin\n */\n/**\n * Icon origin. One of 'bottom-left', 'bottom-right', 'top-left', 'top-right'.\n * @enum {string}\n */\nexport default {\n    /**\n     * Origin is at bottom left\n     * @api\n     */\n    BOTTOM_LEFT: 'bottom-left',\n    /**\n     * Origin is at bottom right\n     * @api\n     */\n    BOTTOM_RIGHT: 'bottom-right',\n    /**\n     * Origin is at top left\n     * @api\n     */\n    TOP_LEFT: 'top-left',\n    /**\n     * Origin is at top right\n     * @api\n     */\n    TOP_RIGHT: 'top-right',\n};\n//# sourceMappingURL=IconOrigin.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/style/Icon\n */\nimport EventType from '../events/EventType.js';\nimport IconAnchorUnits from './IconAnchorUnits.js';\nimport IconOrigin from './IconOrigin.js';\nimport ImageState from '../ImageState.js';\nimport ImageStyle from './Image.js';\nimport { asArray } from '../color.js';\nimport { assert } from '../asserts.js';\nimport { get as getIconImage } from './IconImage.js';\nimport { getUid } from '../util.js';\n/**\n * @typedef {Object} Options\n * @property {Array<number>} [anchor=[0.5, 0.5]] Anchor. Default value is the icon center.\n * @property {import(\"./IconOrigin.js\").default} [anchorOrigin='top-left'] Origin of the anchor: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {import(\"./IconAnchorUnits.js\").default} [anchorXUnits='fraction'] Units in which the anchor x value is\n * specified. A value of `'fraction'` indicates the x value is a fraction of the icon. A value of `'pixels'` indicates\n * the x value in pixels.\n * @property {import(\"./IconAnchorUnits.js\").default} [anchorYUnits='fraction'] Units in which the anchor y value is\n * specified. A value of `'fraction'` indicates the y value is a fraction of the icon. A value of `'pixels'` indicates\n * the y value in pixels.\n * @property {import(\"../color.js\").Color|string} [color] Color to tint the icon. If not specified,\n * the icon will be left as is.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that you must provide a\n * `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {HTMLImageElement|HTMLCanvasElement} [img] Image object for the icon. If the `src` option is not provided then the\n * provided image must already be loaded. And in that case, it is required\n * to provide the size of the image, with the `imgSize` option.\n * @property {Array<number>} [offset=[0, 0]] Offset, which, together with the size and the offset origin, define the\n * sub-rectangle to use from the original icon image.\n * @property {Array<number>} [displacement=[0,0]] Displacement the icon\n * @property {import(\"./IconOrigin.js\").default} [offsetOrigin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {number} [opacity=1] Opacity of the icon.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale.\n * @property {boolean} [rotateWithView=false] Whether to rotate the icon with the view.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {import(\"../size.js\").Size} [size] Icon size in pixel. Can be used together with `offset` to define the\n * sub-rectangle to use from the origin (sprite) icon image.\n * @property {import(\"../size.js\").Size} [imgSize] Image size in pixels. Only required if `img` is set and `src` is not, and\n * for SVG images in Internet Explorer 11. The provided `imgSize` needs to match the actual size of the image.\n * @property {string} [src] Image source URI.\n */\n/**\n * @classdesc\n * Set icon style for vector features.\n * @api\n */\nvar Icon = /** @class */ (function (_super) {\n    __extends(Icon, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function Icon(opt_options) {\n        var _this = this;\n        var options = opt_options || {};\n        /**\n         * @type {number}\n         */\n        var opacity = options.opacity !== undefined ? options.opacity : 1;\n        /**\n         * @type {number}\n         */\n        var rotation = options.rotation !== undefined ? options.rotation : 0;\n        /**\n         * @type {number|import(\"../size.js\").Size}\n         */\n        var scale = options.scale !== undefined ? options.scale : 1;\n        /**\n         * @type {boolean}\n         */\n        var rotateWithView = options.rotateWithView !== undefined ? options.rotateWithView : false;\n        _this = _super.call(this, {\n            opacity: opacity,\n            rotation: rotation,\n            scale: scale,\n            displacement: options.displacement !== undefined ? options.displacement : [0, 0],\n            rotateWithView: rotateWithView,\n        }) || this;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        _this.anchor_ = options.anchor !== undefined ? options.anchor : [0.5, 0.5];\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        _this.normalizedAnchor_ = null;\n        /**\n         * @private\n         * @type {import(\"./IconOrigin.js\").default}\n         */\n        _this.anchorOrigin_ =\n            options.anchorOrigin !== undefined\n                ? options.anchorOrigin\n                : IconOrigin.TOP_LEFT;\n        /**\n         * @private\n         * @type {import(\"./IconAnchorUnits.js\").default}\n         */\n        _this.anchorXUnits_ =\n            options.anchorXUnits !== undefined\n                ? options.anchorXUnits\n                : IconAnchorUnits.FRACTION;\n        /**\n         * @private\n         * @type {import(\"./IconAnchorUnits.js\").default}\n         */\n        _this.anchorYUnits_ =\n            options.anchorYUnits !== undefined\n                ? options.anchorYUnits\n                : IconAnchorUnits.FRACTION;\n        /**\n         * @private\n         * @type {?string}\n         */\n        _this.crossOrigin_ =\n            options.crossOrigin !== undefined ? options.crossOrigin : null;\n        /**\n         * @type {HTMLImageElement|HTMLCanvasElement}\n         */\n        var image = options.img !== undefined ? options.img : null;\n        /**\n         * @type {import(\"../size.js\").Size}\n         */\n        var imgSize = options.imgSize !== undefined ? options.imgSize : null;\n        /**\n         * @type {string|undefined}\n         */\n        var src = options.src;\n        assert(!(src !== undefined && image), 4); // `image` and `src` cannot be provided at the same time\n        assert(!image || (image && imgSize), 5); // `imgSize` must be set when `image` is provided\n        if ((src === undefined || src.length === 0) && image) {\n            src = /** @type {HTMLImageElement} */ (image).src || getUid(image);\n        }\n        assert(src !== undefined && src.length > 0, 6); // A defined and non-empty `src` or `image` must be provided\n        /**\n         * @type {import(\"../ImageState.js\").default}\n         */\n        var imageState = options.src !== undefined ? ImageState.IDLE : ImageState.LOADED;\n        /**\n         * @private\n         * @type {import(\"../color.js\").Color}\n         */\n        _this.color_ = options.color !== undefined ? asArray(options.color) : null;\n        /**\n         * @private\n         * @type {import(\"./IconImage.js\").default}\n         */\n        _this.iconImage_ = getIconImage(image, \n        /** @type {string} */ (src), imgSize, _this.crossOrigin_, imageState, _this.color_);\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        _this.offset_ = options.offset !== undefined ? options.offset : [0, 0];\n        /**\n         * @private\n         * @type {import(\"./IconOrigin.js\").default}\n         */\n        _this.offsetOrigin_ =\n            options.offsetOrigin !== undefined\n                ? options.offsetOrigin\n                : IconOrigin.TOP_LEFT;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        _this.origin_ = null;\n        /**\n         * @private\n         * @type {import(\"../size.js\").Size}\n         */\n        _this.size_ = options.size !== undefined ? options.size : null;\n        return _this;\n    }\n    /**\n     * Clones the style. The underlying Image/HTMLCanvasElement is not cloned.\n     * @return {Icon} The cloned style.\n     * @api\n     */\n    Icon.prototype.clone = function () {\n        var scale = this.getScale();\n        return new Icon({\n            anchor: this.anchor_.slice(),\n            anchorOrigin: this.anchorOrigin_,\n            anchorXUnits: this.anchorXUnits_,\n            anchorYUnits: this.anchorYUnits_,\n            crossOrigin: this.crossOrigin_,\n            color: this.color_ && this.color_.slice\n                ? this.color_.slice()\n                : this.color_ || undefined,\n            src: this.getSrc(),\n            offset: this.offset_.slice(),\n            offsetOrigin: this.offsetOrigin_,\n            size: this.size_ !== null ? this.size_.slice() : undefined,\n            opacity: this.getOpacity(),\n            scale: Array.isArray(scale) ? scale.slice() : scale,\n            rotation: this.getRotation(),\n            rotateWithView: this.getRotateWithView(),\n        });\n    };\n    /**\n     * Get the anchor point in pixels. The anchor determines the center point for the\n     * symbolizer.\n     * @return {Array<number>} Anchor.\n     * @api\n     */\n    Icon.prototype.getAnchor = function () {\n        if (this.normalizedAnchor_) {\n            return this.normalizedAnchor_;\n        }\n        var anchor = this.anchor_;\n        var size = this.getSize();\n        if (this.anchorXUnits_ == IconAnchorUnits.FRACTION ||\n            this.anchorYUnits_ == IconAnchorUnits.FRACTION) {\n            if (!size) {\n                return null;\n            }\n            anchor = this.anchor_.slice();\n            if (this.anchorXUnits_ == IconAnchorUnits.FRACTION) {\n                anchor[0] *= size[0];\n            }\n            if (this.anchorYUnits_ == IconAnchorUnits.FRACTION) {\n                anchor[1] *= size[1];\n            }\n        }\n        if (this.anchorOrigin_ != IconOrigin.TOP_LEFT) {\n            if (!size) {\n                return null;\n            }\n            if (anchor === this.anchor_) {\n                anchor = this.anchor_.slice();\n            }\n            if (this.anchorOrigin_ == IconOrigin.TOP_RIGHT ||\n                this.anchorOrigin_ == IconOrigin.BOTTOM_RIGHT) {\n                anchor[0] = -anchor[0] + size[0];\n            }\n            if (this.anchorOrigin_ == IconOrigin.BOTTOM_LEFT ||\n                this.anchorOrigin_ == IconOrigin.BOTTOM_RIGHT) {\n                anchor[1] = -anchor[1] + size[1];\n            }\n        }\n        this.normalizedAnchor_ = anchor;\n        return this.normalizedAnchor_;\n    };\n    /**\n     * Set the anchor point. The anchor determines the center point for the\n     * symbolizer.\n     *\n     * @param {Array<number>} anchor Anchor.\n     * @api\n     */\n    Icon.prototype.setAnchor = function (anchor) {\n        this.anchor_ = anchor;\n        this.normalizedAnchor_ = null;\n    };\n    /**\n     * Get the icon color.\n     * @return {import(\"../color.js\").Color} Color.\n     * @api\n     */\n    Icon.prototype.getColor = function () {\n        return this.color_;\n    };\n    /**\n     * Get the image icon.\n     * @param {number} pixelRatio Pixel ratio.\n     * @return {HTMLImageElement|HTMLCanvasElement} Image or Canvas element.\n     * @api\n     */\n    Icon.prototype.getImage = function (pixelRatio) {\n        return this.iconImage_.getImage(pixelRatio);\n    };\n    /**\n     * Get the pixel ratio.\n     * @param {number} pixelRatio Pixel ratio.\n     * @return {number} The pixel ration of the image.\n     * @api\n     */\n    Icon.prototype.getPixelRatio = function (pixelRatio) {\n        return this.iconImage_.getPixelRatio(pixelRatio);\n    };\n    /**\n     * @return {import(\"../size.js\").Size} Image size.\n     */\n    Icon.prototype.getImageSize = function () {\n        return this.iconImage_.getSize();\n    };\n    /**\n     * @return {import(\"../size.js\").Size} Size of the hit-detection image.\n     */\n    Icon.prototype.getHitDetectionImageSize = function () {\n        return this.getImageSize();\n    };\n    /**\n     * @return {import(\"../ImageState.js\").default} Image state.\n     */\n    Icon.prototype.getImageState = function () {\n        return this.iconImage_.getImageState();\n    };\n    /**\n     * @return {HTMLImageElement|HTMLCanvasElement} Image element.\n     */\n    Icon.prototype.getHitDetectionImage = function () {\n        return this.iconImage_.getHitDetectionImage();\n    };\n    /**\n     * Get the origin of the symbolizer.\n     * @return {Array<number>} Origin.\n     * @api\n     */\n    Icon.prototype.getOrigin = function () {\n        if (this.origin_) {\n            return this.origin_;\n        }\n        var offset = this.offset_;\n        var displacement = this.getDisplacement();\n        if (this.offsetOrigin_ != IconOrigin.TOP_LEFT) {\n            var size = this.getSize();\n            var iconImageSize = this.iconImage_.getSize();\n            if (!size || !iconImageSize) {\n                return null;\n            }\n            offset = offset.slice();\n            if (this.offsetOrigin_ == IconOrigin.TOP_RIGHT ||\n                this.offsetOrigin_ == IconOrigin.BOTTOM_RIGHT) {\n                offset[0] = iconImageSize[0] - size[0] - offset[0];\n            }\n            if (this.offsetOrigin_ == IconOrigin.BOTTOM_LEFT ||\n                this.offsetOrigin_ == IconOrigin.BOTTOM_RIGHT) {\n                offset[1] = iconImageSize[1] - size[1] - offset[1];\n            }\n        }\n        offset[0] += displacement[0];\n        offset[1] += displacement[1];\n        this.origin_ = offset;\n        return this.origin_;\n    };\n    /**\n     * Get the image URL.\n     * @return {string|undefined} Image src.\n     * @api\n     */\n    Icon.prototype.getSrc = function () {\n        return this.iconImage_.getSrc();\n    };\n    /**\n     * Get the size of the icon (in pixels).\n     * @return {import(\"../size.js\").Size} Image size.\n     * @api\n     */\n    Icon.prototype.getSize = function () {\n        return !this.size_ ? this.iconImage_.getSize() : this.size_;\n    };\n    /**\n     * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n     */\n    Icon.prototype.listenImageChange = function (listener) {\n        this.iconImage_.addEventListener(EventType.CHANGE, listener);\n    };\n    /**\n     * Load not yet loaded URI.\n     * When rendering a feature with an icon style, the vector renderer will\n     * automatically call this method. However, you might want to call this\n     * method yourself for preloading or other purposes.\n     * @api\n     */\n    Icon.prototype.load = function () {\n        this.iconImage_.load();\n    };\n    /**\n     * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n     */\n    Icon.prototype.unlistenImageChange = function (listener) {\n        this.iconImage_.removeEventListener(EventType.CHANGE, listener);\n    };\n    return Icon;\n}(ImageStyle));\nexport default Icon;\n//# sourceMappingURL=Icon.js.map","/**\n * @module ol/events/EventType\n */\n/**\n * @enum {string}\n * @const\n */\nexport default {\n    /**\n     * Generic change event. Triggered when the revision counter is increased.\n     * @event module:ol/events/Event~BaseEvent#change\n     * @api\n     */\n    CHANGE: 'change',\n    /**\n     * Generic error event. Triggered when an error occurs.\n     * @event module:ol/events/Event~BaseEvent#error\n     * @api\n     */\n    ERROR: 'error',\n    BLUR: 'blur',\n    CLEAR: 'clear',\n    CONTEXTMENU: 'contextmenu',\n    CLICK: 'click',\n    DBLCLICK: 'dblclick',\n    DRAGENTER: 'dragenter',\n    DRAGOVER: 'dragover',\n    DROP: 'drop',\n    FOCUS: 'focus',\n    KEYDOWN: 'keydown',\n    KEYPRESS: 'keypress',\n    LOAD: 'load',\n    RESIZE: 'resize',\n    TOUCHMOVE: 'touchmove',\n    WHEEL: 'wheel',\n};\n//# sourceMappingURL=EventType.js.map","define([\n\t'../errors/RequestError',\n\t'./watch',\n\t'./handlers',\n\t'./util',\n\t'../has'/*=====,\n\t'../request',\n\t'../_base/declare' =====*/\n], function(RequestError, watch, handlers, util, has/*=====, request, declare =====*/){\n\thas.add('native-xhr', function(){\n\t\t// if true, the environment has a native XHR implementation\n\t\treturn typeof XMLHttpRequest !== 'undefined';\n\t});\n\thas.add('dojo-force-activex-xhr', function(){\n\t\treturn has('activex') && window.location.protocol === 'file:';\n\t});\n\n\thas.add('native-xhr2', function(){\n\t\tif(!has('native-xhr') || has('dojo-force-activex-xhr')){ return; }\n\t\tvar x = new XMLHttpRequest();\n\t\treturn typeof x['addEventListener'] !== 'undefined' &&\n\t\t\t(typeof opera === 'undefined' || typeof x['upload'] !== 'undefined');\n\t});\n\n\thas.add('native-formdata', function(){\n\t\t// if true, the environment has a native FormData implementation\n\t\treturn typeof FormData !== 'undefined';\n\t});\n\n\thas.add('native-blob', function(){\n\t\t// if true, the environment has a native Blob implementation\n\t\treturn typeof Blob !== 'undefined';\n\t});\n\n\thas.add('native-arraybuffer', function(){\n\t\t// if true, the environment has a native ArrayBuffer implementation\n\t\treturn typeof ArrayBuffer !== 'undefined';\n\t});\n\n\thas.add('native-response-type', function(){\n\t\treturn has('native-xhr') && typeof new XMLHttpRequest().responseType !== 'undefined';\n\t});\n\n\thas.add('native-xhr2-blob', function(){\n\t\tif(!has('native-response-type')){ return; }\n\t\tvar x = new XMLHttpRequest();\n\t\t// The URL used here does not have to be reachable as the XHR's `send` method is never called.\n\t\t// It does need to be parsable/resolvable in all cases, so it should be an absolute URL.\n\t\t// XMLHttpRequest within a Worker created from a Blob does not support relative URL paths.\n\t\tx.open('GET', 'https://dojotoolkit.org/', true);\n\t\tx.responseType = 'blob';\n\t\t// will not be set if unsupported\n\t\tvar responseType = x.responseType;\n\t\tx.abort();\n\t\treturn responseType === 'blob';\n\t});\n\n\t// Google Chrome doesn't support \"json\" response type\n\t// up to version 30, so it's intentionally not included here\n\tvar nativeResponseTypes = {\n\t\t'blob': has('native-xhr2-blob') ? 'blob' : 'arraybuffer',\n\t\t'document': 'document',\n\t\t'arraybuffer': 'arraybuffer'\n\t};\n\n\tfunction handleResponse(response, error){\n\t\tvar _xhr = response.xhr;\n\t\tresponse.status = response.xhr.status;\n\n\t\ttry {\n\t\t\t// Firefox throws an error when trying to access\n\t\t\t// xhr.responseText if response isn't text\n\t\t\tresponse.text = _xhr.responseText;\n\t\t} catch (e) {}\n\n\t\tif(response.options.handleAs === 'xml'){\n\t\t\tresponse.data = _xhr.responseXML;\n\t\t}\n\n\t\tvar handleError;\n\t\tif(error){\n\t\t\tthis.reject(error);\n\t\t}else{\n\t\t\ttry{\n\t\t\t\thandlers(response);\n\t\t\t}catch(e){\n\t\t\t\thandleError = e;\n\t\t\t}\n\t\t\tif(util.checkStatus(_xhr.status)){\n\t\t\t\tif(!handleError){\n\t\t\t\t\tthis.resolve(response);\n\t\t\t\t}else{\n\t\t\t\t\tthis.reject(handleError);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(!handleError){\n\t\t\t\t\terror = new RequestError('Unable to load ' + response.url + ' status: ' + _xhr.status, response);\n\t\t\t\t\tthis.reject(error);\n\t\t\t\t}else{\n\t\t\t\t\terror = new RequestError('Unable to load ' + response.url + ' status: ' + _xhr.status +\n\t\t\t\t\t\t' and an error in handleAs: transformation of response', response);\n\t\t\t\t\tthis.reject(error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar isValid, isReady, addListeners, cancel;\n\tif(has('native-xhr2')){\n\t\t// Any platform with XHR2 will only use the watch mechanism for timeout.\n\n\t\tisValid = function(response){\n\t\t\t// summary:\n\t\t\t//\t\tCheck to see if the request should be taken out of the watch queue\n\t\t\treturn !this.isFulfilled();\n\t\t};\n\t\tcancel = function(dfd, response){\n\t\t\t// summary:\n\t\t\t//\t\tCanceler for deferred\n\t\t\tresponse.xhr.abort();\n\t\t};\n\t\taddListeners = function(_xhr, dfd, response, uploadProgress){\n\t\t\t// summary:\n\t\t\t//\t\tAdds event listeners to the XMLHttpRequest object\n\t\t\tfunction onLoad(evt){\n\t\t\t\tdfd.handleResponse(response);\n\t\t\t}\n\t\t\tfunction onError(evt){\n\t\t\t\tvar _xhr = evt.target;\n\t\t\t\tvar error = new RequestError('Unable to load ' + response.url + ' status: ' + _xhr.status, response);\n\t\t\t\tdfd.handleResponse(response, error);\n\t\t\t}\n\n\t\t\tfunction onProgress(transferType, evt){\n\t\t\t\tresponse.transferType = transferType;\n\t\t\t\tif(evt.lengthComputable){\n\t\t\t\t\tresponse.loaded = evt.loaded;\n\t\t\t\t\tresponse.total = evt.total;\n\t\t\t\t\tdfd.progress(response);\n\t\t\t\t} else if(response.xhr.readyState === 3){\n\t\t\t\t\tresponse.loaded = ('loaded' in evt) ? evt.loaded : evt.position;\n\t\t\t\t\tdfd.progress(response);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onDownloadProgress(evt) {\n\t\t\t\treturn onProgress('download', evt);\n\t\t\t}\n\n\t\t\tfunction onUploadProgress(evt) {\n\t\t\t\treturn onProgress('upload', evt);\n\t\t\t}\n\n\t\t\t_xhr.addEventListener('load', onLoad, false);\n\t\t\t_xhr.addEventListener('error', onError, false);\n\t\t\t_xhr.addEventListener('progress', onDownloadProgress, false);\n\n\t\t\tif (uploadProgress && _xhr.upload) {\n\t\t\t\t_xhr.upload.addEventListener('progress', onUploadProgress, false);\n\t\t\t}\n\n\t\t\treturn function(){\n\t\t\t\t_xhr.removeEventListener('load', onLoad, false);\n\t\t\t\t_xhr.removeEventListener('error', onError, false);\n\t\t\t\t_xhr.removeEventListener('progress', onDownloadProgress, false);\n\t\t\t\t_xhr.upload.removeEventListener('progress', onUploadProgress, false);\n\t\t\t\t_xhr = null;\n\t\t\t};\n\t\t};\n\t}else{\n\t\tisValid = function(response){\n\t\t\treturn response.xhr.readyState; //boolean\n\t\t};\n\t\tisReady = function(response){\n\t\t\treturn 4 === response.xhr.readyState; //boolean\n\t\t};\n\t\tcancel = function(dfd, response){\n\t\t\t// summary:\n\t\t\t//\t\tcanceller function for util.deferred call.\n\t\t\tvar xhr = response.xhr;\n\t\t\tvar _at = typeof xhr.abort;\n\t\t\tif(_at === 'function' || _at === 'object' || _at === 'unknown'){\n\t\t\t\txhr.abort();\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction getHeader(headerName){\n\t\treturn this.xhr.getResponseHeader(headerName);\n\t}\n\n\tvar undefined,\n\t\tdefaultOptions = {\n\t\t\tdata: null,\n\t\t\tquery: null,\n\t\t\tsync: false,\n\t\t\tmethod: 'GET'\n\t\t};\n\tfunction xhr(url, options, returnDeferred){\n\t\tvar isFormData = has('native-formdata') && options && options.data && options.data instanceof FormData;\n\t\tvar response = util.parseArgs(\n\t\t\turl,\n\t\t\tutil.deepCreate(defaultOptions, options),\n\t\t\tisFormData\n\t\t);\n\t\turl = response.url;\n\t\toptions = response.options;\n\t\tvar hasNoData = !options.data && options.method !== 'POST' && options.method !== 'PUT';\n\n\t\tif(has('ie') <= 10){\n\t\t\t// older IE breaks point 9 in http://www.w3.org/TR/XMLHttpRequest/#the-open()-method and sends fragment, so strip it\n\t\t\turl = url.split('#')[0];\n\t\t}\n\n\t\tvar remover,\n\t\t\tlast = function(){\n\t\t\t\tremover && remover();\n\t\t\t};\n\n\t\t//Make the Deferred object for this xhr request.\n\t\tvar dfd = util.deferred(\n\t\t\tresponse,\n\t\t\tcancel,\n\t\t\tisValid,\n\t\t\tisReady,\n\t\t\thandleResponse,\n\t\t\tlast\n\t\t);\n\t\tvar _xhr = response.xhr = xhr._create();\n\n\t\tif(!_xhr){\n\t\t\t// If XHR factory somehow returns nothings,\n\t\t\t// cancel the deferred.\n\t\t\tdfd.cancel(new RequestError('XHR was not created'));\n\t\t\treturn returnDeferred ? dfd : dfd.promise;\n\t\t}\n\n\t\tresponse.getHeader = getHeader;\n\n\t\tif(addListeners){\n\t\t\tremover = addListeners(_xhr, dfd, response, options.uploadProgress);\n\t\t}\n\n\t\t// IE11 treats data: undefined different than other browsers\n\t\tvar data = typeof(options.data) === 'undefined' ? null : options.data,\n\t\t\tasync = !options.sync,\n\t\t\tmethod = options.method;\n\n\t\ttry{\n\t\t\t// IE6 won't let you call apply() on the native function.\n\t\t\t_xhr.open(method, url, async, options.user || undefined, options.password || undefined);\n\n\t\t\tif(options.withCredentials){\n\t\t\t\t_xhr.withCredentials = options.withCredentials;\n\t\t\t}\n\n\t\t\tif(has('native-response-type') && options.handleAs in nativeResponseTypes) {\n\t\t\t\t_xhr.responseType = nativeResponseTypes[options.handleAs];\n\t\t\t}\n\n\t\t\tvar headers = options.headers,\n\t\t\t\tcontentType = (isFormData || hasNoData) ? false : 'application/x-www-form-urlencoded';\n\t\t\tif(headers){\n\t\t\t\tfor(var hdr in headers){\n\t\t\t\t\tif(hdr.toLowerCase() === 'content-type'){\n\t\t\t\t\t\tcontentType = headers[hdr];\n\t\t\t\t\t}else if(headers[hdr]){\n\t\t\t\t\t\t//Only add header if it has a value. This allows for instance, skipping\n\t\t\t\t\t\t//insertion of X-Requested-With by specifying empty value.\n\t\t\t\t\t\t_xhr.setRequestHeader(hdr, headers[hdr]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(contentType && contentType !== false){\n\t\t\t\t_xhr.setRequestHeader('Content-Type', contentType);\n\t\t\t}\n\t\t\tif(!headers || !('X-Requested-With' in headers)){\n\t\t\t\t_xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\t\t\t}\n\n\t\t\tif(util.notify){\n\t\t\t\tutil.notify.emit('send', response, dfd.promise.cancel);\n\t\t\t}\n\t\t\t_xhr.send(data);\n\t\t}catch(e){\n\t\t\tdfd.reject(e);\n\t\t}\n\n\t\twatch(dfd);\n\t\t_xhr = null;\n\n\t\treturn returnDeferred ? dfd : dfd.promise;\n\t}\n\n\t/*=====\n\txhr = function(url, options){\n\t\t// summary:\n\t\t//\t\tSends a request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__Options?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.__BaseOptions = declare(request.__BaseOptions, {\n\t\t// sync: Boolean?\n\t\t//\t\tWhether to make a synchronous request or not. Default\n\t\t//\t\tis `false` (asynchronous).\n\t\t// data: String|Object|FormData?\n\t\t//\t\tData to transfer. This is ignored for GET and DELETE\n\t\t//\t\trequests.\n\t\t// headers: Object?\n\t\t//\t\tHeaders to use for the request.\n\t\t// user: String?\n\t\t//\t\tUsername to use during the request.\n\t\t// password: String?\n\t\t//\t\tPassword to use during the request.\n\t\t// withCredentials: Boolean?\n\t\t//\t\tFor cross-site requests, whether to send credentials\n\t\t//\t\tor not.\n\t\t// uploadProgress: Boolean?\n\t\t//\t\tUpload progress events cause preflighted requests. This\n\t\t//\t\toption enables upload progress event support but also\n\t\t//\t\tcauses all requests to be preflighted.\n\t});\n\txhr.__MethodOptions = declare(null, {\n\t\t// method: String?\n\t\t//\t\tThe HTTP method to use to make the request. Must be\n\t\t//\t\tuppercase. Default is `\"GET\"`.\n\t});\n\txhr.__Options = declare([xhr.__BaseOptions, xhr.__MethodOptions]);\n\n\txhr.get = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP GET request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.post = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP POST request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.put = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP PUT request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.del = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP DELETE request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\t=====*/\n\txhr._create = function(){\n\t\t// summary:\n\t\t//\t\tdoes the work of portably generating a new XMLHTTPRequest object.\n\t\tthrow new Error('XMLHTTP not available');\n\t};\n\tif(has('native-xhr') && !has('dojo-force-activex-xhr')){\n\t\txhr._create = function(){\n\t\t\treturn new XMLHttpRequest();\n\t\t};\n\t}else if(has('activex')){\n\t\ttry{\n\t\t\tnew ActiveXObject('Msxml2.XMLHTTP');\n\t\t\txhr._create = function(){\n\t\t\t\treturn new ActiveXObject('Msxml2.XMLHTTP');\n\t\t\t};\n\t\t}catch(e){\n\t\t\ttry{\n\t\t\t\tnew ActiveXObject('Microsoft.XMLHTTP');\n\t\t\t\txhr._create = function(){\n\t\t\t\t\treturn new ActiveXObject('Microsoft.XMLHTTP');\n\t\t\t\t};\n\t\t\t}catch(e){}\n\t\t}\n\t}\n\n\tutil.addCommonMethods(xhr);\n\n\treturn xhr;\n});\n","define([\"./has\"], function(has){\n\t\"use strict\";\n\tvar hasJSON = typeof JSON != \"undefined\";\n\thas.add(\"json-parse\", hasJSON); // all the parsers work fine\n\t\t// Firefox 3.5/Gecko 1.9 fails to use replacer in stringify properly https://bugzilla.mozilla.org/show_bug.cgi?id=509184\n\thas.add(\"json-stringify\", hasJSON && JSON.stringify({a:0}, function(k,v){return v||1;}) == '{\"a\":1}');\n\n\t/*=====\n\treturn {\n\t\t// summary:\n\t\t//\t\tFunctions to parse and serialize JSON\n\n\t\tparse: function(str, strict){\n\t\t\t// summary:\n\t\t\t//\t\tParses a [JSON](http://json.org) string to return a JavaScript object.\n\t\t\t// description:\n\t\t\t//\t\tThis function follows [native JSON API](https://developer.mozilla.org/en/JSON)\n\t\t\t//\t\tThrows for invalid JSON strings. This delegates to eval() if native JSON\n\t\t\t//\t\tsupport is not available. By default this will evaluate any valid JS expression.\n\t\t\t//\t\tWith the strict parameter set to true, the parser will ensure that only\n\t\t\t//\t\tvalid JSON strings are parsed (otherwise throwing an error). Without the strict\n\t\t\t//\t\tparameter, the content passed to this method must come\n\t\t\t//\t\tfrom a trusted source.\n\t\t\t// str:\n\t\t\t//\t\ta string literal of a JSON item, for instance:\n\t\t\t//\t\t`'{ \"foo\": [ \"bar\", 1, { \"baz\": \"thud\" } ] }'`\n\t\t\t// strict:\n\t\t\t//\t\tWhen set to true, this will ensure that only valid, secure JSON is ever parsed.\n\t\t\t//\t\tMake sure this is set to true for untrusted content. Note that on browsers/engines\n\t\t\t//\t\twithout native JSON support, setting this to true will run slower.\n\t\t},\n\t\tstringify: function(value, replacer, spacer){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a [JSON](http://json.org) serialization of an object.\n\t\t\t// description:\n\t\t\t//\t\tReturns a [JSON](http://json.org) serialization of an object.\n\t\t\t//\t\tThis function follows [native JSON API](https://developer.mozilla.org/en/JSON)\n\t\t\t//\t\tNote that this doesn't check for infinite recursion, so don't do that!\n\t\t\t// value:\n\t\t\t//\t\tA value to be serialized.\n\t\t\t// replacer:\n\t\t\t//\t\tA replacer function that is called for each value and can return a replacement\n\t\t\t// spacer:\n\t\t\t//\t\tA spacer string to be used for pretty printing of JSON\n\t\t\t// example:\n\t\t\t//\t\tsimple serialization of a trivial object\n\t\t\t//\t|\tdefine([\"dojo/json\"], function(JSON){\n\t\t\t// \t|\t\tvar jsonStr = JSON.stringify({ howdy: \"stranger!\", isStrange: true });\n\t\t\t//\t|\t\tdoh.is('{\"howdy\":\"stranger!\",\"isStrange\":true}', jsonStr);\n\t\t}\n\t};\n\t=====*/\n\n\tif(has(\"json-stringify\")){\n\t\treturn JSON;\n\t}else{\n\t\tvar escapeString = function(/*String*/str){\n\t\t\t// summary:\n\t\t\t//\t\tAdds escape sequences for non-visual characters, double quote and\n\t\t\t//\t\tbackslash and surrounds with double quotes to form a valid string\n\t\t\t//\t\tliteral.\n\t\t\treturn ('\"' + str.replace(/([\"\\\\])/g, '\\\\$1') + '\"').\n\t\t\t\treplace(/[\\f]/g, \"\\\\f\").replace(/[\\b]/g, \"\\\\b\").replace(/[\\n]/g, \"\\\\n\").\n\t\t\t\treplace(/[\\t]/g, \"\\\\t\").replace(/[\\r]/g, \"\\\\r\"); // string\n\t\t};\n\t\treturn {\n\t\t\tparse: has(\"json-parse\") ? JSON.parse : function(str, strict){\n\t\t\t\tif(strict && !/^([\\s\\[\\{]*(?:\"(?:\\\\.|[^\"])*\"|-?\\d[\\d\\.]*(?:[Ee][+-]?\\d+)?|null|true|false|)[\\s\\]\\}]*(?:,|:|$))+$/.test(str)){\n\t\t\t\t\tthrow new SyntaxError(\"Invalid characters in JSON\");\n\t\t\t\t}\n\t\t\t\treturn eval('(' + str + ')');\n\t\t\t},\n\t\t\tstringify: function(value, replacer, spacer){\n\t\t\t\tvar undef;\n\t\t\t\tif(typeof replacer == \"string\"){\n\t\t\t\t\tspacer = replacer;\n\t\t\t\t\treplacer = null;\n\t\t\t\t}\n\t\t\t\tfunction stringify(it, indent, key){\n\t\t\t\t\tif(replacer){\n\t\t\t\t\t\tit = replacer(key, it);\n\t\t\t\t\t}\n\t\t\t\t\tvar val, objtype = typeof it;\n\t\t\t\t\tif(objtype == \"number\"){\n\t\t\t\t\t\treturn isFinite(it) ? it + \"\" : \"null\";\n\t\t\t\t\t}\n\t\t\t\t\tif(objtype == \"boolean\"){\n\t\t\t\t\t\treturn it + \"\";\n\t\t\t\t\t}\n\t\t\t\t\tif(it === null){\n\t\t\t\t\t\treturn \"null\";\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof it == \"string\"){\n\t\t\t\t\t\treturn escapeString(it);\n\t\t\t\t\t}\n\t\t\t\t\tif(objtype == \"function\" || objtype == \"undefined\"){\n\t\t\t\t\t\treturn undef; // undefined\n\t\t\t\t\t}\n\t\t\t\t\t// short-circuit for objects that support \"json\" serialization\n\t\t\t\t\t// if they return \"self\" then just pass-through...\n\t\t\t\t\tif(typeof it.toJSON == \"function\"){\n\t\t\t\t\t\treturn stringify(it.toJSON(key), indent, key);\n\t\t\t\t\t}\n\t\t\t\t\tif(it instanceof Date){\n\t\t\t\t\t\treturn '\"{FullYear}-{Month+}-{Date}T{Hours}:{Minutes}:{Seconds}Z\"'.replace(/\\{(\\w+)(\\+)?\\}/g, function(t, prop, plus){\n\t\t\t\t\t\t\tvar num = it[\"getUTC\" + prop]() + (plus ? 1 : 0);\n\t\t\t\t\t\t\treturn num < 10 ? \"0\" + num : num;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif(it.valueOf() !== it){\n\t\t\t\t\t\t// primitive wrapper, try again unwrapped:\n\t\t\t\t\t\treturn stringify(it.valueOf(), indent, key);\n\t\t\t\t\t}\n\t\t\t\t\tvar nextIndent= spacer ? (indent + spacer) : \"\";\n\t\t\t\t\t/* we used to test for DOM nodes and throw, but FF serializes them as {}, so cross-browser consistency is probably not efficiently attainable */ \n\t\t\t\t\n\t\t\t\t\tvar sep = spacer ? \" \" : \"\";\n\t\t\t\t\tvar newLine = spacer ? \"\\n\" : \"\";\n\t\t\t\t\n\t\t\t\t\t// array\n\t\t\t\t\tif(it instanceof Array){\n\t\t\t\t\t\tvar itl = it.length, res = [];\n\t\t\t\t\t\tfor(key = 0; key < itl; key++){\n\t\t\t\t\t\t\tvar obj = it[key];\n\t\t\t\t\t\t\tval = stringify(obj, nextIndent, key);\n\t\t\t\t\t\t\tif(typeof val != \"string\"){\n\t\t\t\t\t\t\t\tval = \"null\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tres.push(newLine + nextIndent + val);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn \"[\" + res.join(\",\") + newLine + indent + \"]\";\n\t\t\t\t\t}\n\t\t\t\t\t// generic object code path\n\t\t\t\t\tvar output = [];\n\t\t\t\t\tfor(key in it){\n\t\t\t\t\t\tvar keyStr;\n\t\t\t\t\t\tif(it.hasOwnProperty(key)){\n\t\t\t\t\t\t\tif(typeof key == \"number\"){\n\t\t\t\t\t\t\t\tkeyStr = '\"' + key + '\"';\n\t\t\t\t\t\t\t}else if(typeof key == \"string\"){\n\t\t\t\t\t\t\t\tkeyStr = escapeString(key);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t// skip non-string or number keys\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tval = stringify(it[key], nextIndent, key);\n\t\t\t\t\t\t\tif(typeof val != \"string\"){\n\t\t\t\t\t\t\t\t// skip non-serializable values\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// At this point, the most non-IE browsers don't get in this branch \n\t\t\t\t\t\t\t// (they have native JSON), so push is definitely the way to\n\t\t\t\t\t\t\toutput.push(newLine + nextIndent + keyStr + \":\" + sep + val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn \"{\" + output.join(\",\") + newLine + indent + \"}\"; // String\n\t\t\t\t}\n\t\t\t\treturn stringify(value, \"\", \"\");\n\t\t\t}\n\t\t};\n\t}\n});\n","/**\n * @module ol/style/Fill\n */\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} [color=null] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n */\n/**\n * @classdesc\n * Set fill style for vector features.\n * @api\n */\nvar Fill = /** @class */ (function () {\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function Fill(opt_options) {\n        var options = opt_options || {};\n        /**\n         * @private\n         * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike}\n         */\n        this.color_ = options.color !== undefined ? options.color : null;\n    }\n    /**\n     * Clones the style. The color is not cloned if it is an {@link module:ol/colorlike~ColorLike}.\n     * @return {Fill} The cloned style.\n     * @api\n     */\n    Fill.prototype.clone = function () {\n        var color = this.getColor();\n        return new Fill({\n            color: Array.isArray(color) ? color.slice() : color || undefined,\n        });\n    };\n    /**\n     * Get the fill color.\n     * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} Color.\n     * @api\n     */\n    Fill.prototype.getColor = function () {\n        return this.color_;\n    };\n    /**\n     * Set the color.\n     *\n     * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} color Color.\n     * @api\n     */\n    Fill.prototype.setColor = function (color) {\n        this.color_ = color;\n    };\n    return Fill;\n}());\nexport default Fill;\n//# sourceMappingURL=Fill.js.map","/**\n * @module ol/style/Stroke\n */\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} [color] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n * @property {CanvasLineCap} [lineCap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {CanvasLineJoin} [lineJoin='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {Array<number>} [lineDash] Line dash pattern. Default is `null` (no dash).\n * Please note that Internet Explorer 10 and lower do not support the `setLineDash` method on\n * the `CanvasRenderingContext2D` and therefore this option will have no visual effect in these browsers.\n * @property {number} [lineDashOffset=0] Line dash offset.\n * @property {number} [miterLimit=10] Miter limit.\n * @property {number} [width] Width.\n */\n/**\n * @classdesc\n * Set stroke style for vector features.\n * Note that the defaults given are the Canvas defaults, which will be used if\n * option is not defined. The `get` functions return whatever was entered in\n * the options; they will not return the default.\n * @api\n */\nvar Stroke = /** @class */ (function () {\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function Stroke(opt_options) {\n        var options = opt_options || {};\n        /**\n         * @private\n         * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike}\n         */\n        this.color_ = options.color !== undefined ? options.color : null;\n        /**\n         * @private\n         * @type {CanvasLineCap|undefined}\n         */\n        this.lineCap_ = options.lineCap;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        this.lineDashOffset_ = options.lineDashOffset;\n        /**\n         * @private\n         * @type {CanvasLineJoin|undefined}\n         */\n        this.lineJoin_ = options.lineJoin;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        this.miterLimit_ = options.miterLimit;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        this.width_ = options.width;\n    }\n    /**\n     * Clones the style.\n     * @return {Stroke} The cloned style.\n     * @api\n     */\n    Stroke.prototype.clone = function () {\n        var color = this.getColor();\n        return new Stroke({\n            color: Array.isArray(color) ? color.slice() : color || undefined,\n            lineCap: this.getLineCap(),\n            lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,\n            lineDashOffset: this.getLineDashOffset(),\n            lineJoin: this.getLineJoin(),\n            miterLimit: this.getMiterLimit(),\n            width: this.getWidth(),\n        });\n    };\n    /**\n     * Get the stroke color.\n     * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} Color.\n     * @api\n     */\n    Stroke.prototype.getColor = function () {\n        return this.color_;\n    };\n    /**\n     * Get the line cap type for the stroke.\n     * @return {CanvasLineCap|undefined} Line cap.\n     * @api\n     */\n    Stroke.prototype.getLineCap = function () {\n        return this.lineCap_;\n    };\n    /**\n     * Get the line dash style for the stroke.\n     * @return {Array<number>} Line dash.\n     * @api\n     */\n    Stroke.prototype.getLineDash = function () {\n        return this.lineDash_;\n    };\n    /**\n     * Get the line dash offset for the stroke.\n     * @return {number|undefined} Line dash offset.\n     * @api\n     */\n    Stroke.prototype.getLineDashOffset = function () {\n        return this.lineDashOffset_;\n    };\n    /**\n     * Get the line join type for the stroke.\n     * @return {CanvasLineJoin|undefined} Line join.\n     * @api\n     */\n    Stroke.prototype.getLineJoin = function () {\n        return this.lineJoin_;\n    };\n    /**\n     * Get the miter limit for the stroke.\n     * @return {number|undefined} Miter limit.\n     * @api\n     */\n    Stroke.prototype.getMiterLimit = function () {\n        return this.miterLimit_;\n    };\n    /**\n     * Get the stroke width.\n     * @return {number|undefined} Width.\n     * @api\n     */\n    Stroke.prototype.getWidth = function () {\n        return this.width_;\n    };\n    /**\n     * Set the color.\n     *\n     * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} color Color.\n     * @api\n     */\n    Stroke.prototype.setColor = function (color) {\n        this.color_ = color;\n    };\n    /**\n     * Set the line cap.\n     *\n     * @param {CanvasLineCap|undefined} lineCap Line cap.\n     * @api\n     */\n    Stroke.prototype.setLineCap = function (lineCap) {\n        this.lineCap_ = lineCap;\n    };\n    /**\n     * Set the line dash.\n     *\n     * Please note that Internet Explorer 10 and lower [do not support][mdn] the\n     * `setLineDash` method on the `CanvasRenderingContext2D` and therefore this\n     * property will have no visual effect in these browsers.\n     *\n     * [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility\n     *\n     * @param {Array<number>} lineDash Line dash.\n     * @api\n     */\n    Stroke.prototype.setLineDash = function (lineDash) {\n        this.lineDash_ = lineDash;\n    };\n    /**\n     * Set the line dash offset.\n     *\n     * @param {number|undefined} lineDashOffset Line dash offset.\n     * @api\n     */\n    Stroke.prototype.setLineDashOffset = function (lineDashOffset) {\n        this.lineDashOffset_ = lineDashOffset;\n    };\n    /**\n     * Set the line join.\n     *\n     * @param {CanvasLineJoin|undefined} lineJoin Line join.\n     * @api\n     */\n    Stroke.prototype.setLineJoin = function (lineJoin) {\n        this.lineJoin_ = lineJoin;\n    };\n    /**\n     * Set the miter limit.\n     *\n     * @param {number|undefined} miterLimit Miter limit.\n     * @api\n     */\n    Stroke.prototype.setMiterLimit = function (miterLimit) {\n        this.miterLimit_ = miterLimit;\n    };\n    /**\n     * Set the width.\n     *\n     * @param {number|undefined} width Width.\n     * @api\n     */\n    Stroke.prototype.setWidth = function (width) {\n        this.width_ = width;\n    };\n    return Stroke;\n}());\nexport default Stroke;\n//# sourceMappingURL=Stroke.js.map","/**\n * @module ol/obj\n */\n/**\n * Polyfill for Object.assign().  Assigns enumerable and own properties from\n * one or more source objects to a target object.\n * See https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign.\n *\n * @param {!Object} target The target object.\n * @param {...Object} var_sources The source object(s).\n * @return {!Object} The modified target object.\n */\nexport var assign = typeof Object.assign === 'function'\n    ? Object.assign\n    : function (target, var_sources) {\n        if (target === undefined || target === null) {\n            throw new TypeError('Cannot convert undefined or null to object');\n        }\n        var output = Object(target);\n        for (var i = 1, ii = arguments.length; i < ii; ++i) {\n            var source = arguments[i];\n            if (source !== undefined && source !== null) {\n                for (var key in source) {\n                    if (source.hasOwnProperty(key)) {\n                        output[key] = source[key];\n                    }\n                }\n            }\n        }\n        return output;\n    };\n/**\n * Removes all properties from an object.\n * @param {Object} object The object to clear.\n */\nexport function clear(object) {\n    for (var property in object) {\n        delete object[property];\n    }\n}\n/**\n * Polyfill for Object.values().  Get an array of property values from an object.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object<K,V>} object The object from which to get the values.\n * @return {!Array<V>} The property values.\n * @template K,V\n */\nexport var getValues = typeof Object.values === 'function'\n    ? Object.values\n    : function (object) {\n        var values = [];\n        for (var property in object) {\n            values.push(object[property]);\n        }\n        return values;\n    };\n/**\n * Determine if an object has any properties.\n * @param {Object} object The object to check.\n * @return {boolean} The object is empty.\n */\nexport function isEmpty(object) {\n    var property;\n    for (property in object) {\n        return false;\n    }\n    return !property;\n}\n//# sourceMappingURL=obj.js.map","/**\n * @module ol/color\n */\nimport { assert } from './asserts.js';\nimport { clamp } from './math.js';\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array<number>} Color\n * @api\n */\n/**\n * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.\n * @const\n * @type {RegExp}\n * @private\n */\nvar HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;\n/**\n * Regular expression for matching potential named color style strings.\n * @const\n * @type {RegExp}\n * @private\n */\nvar NAMED_COLOR_RE_ = /^([a-z]*)$|^hsla?\\(.*\\)$/i;\n/**\n * Return the color as an rgba string.\n * @param {Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nexport function asString(color) {\n    if (typeof color === 'string') {\n        return color;\n    }\n    else {\n        return toString(color);\n    }\n}\n/**\n * Return named color as an rgba string.\n * @param {string} color Named color.\n * @return {string} Rgb string.\n */\nfunction fromNamed(color) {\n    var el = document.createElement('div');\n    el.style.color = color;\n    if (el.style.color !== '') {\n        document.body.appendChild(el);\n        var rgb = getComputedStyle(el).color;\n        document.body.removeChild(el);\n        return rgb;\n    }\n    else {\n        return '';\n    }\n}\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport var fromString = (function () {\n    // We maintain a small cache of parsed strings.  To provide cheap LRU-like\n    // semantics, whenever the cache grows too large we simply delete an\n    // arbitrary 25% of the entries.\n    /**\n     * @const\n     * @type {number}\n     */\n    var MAX_CACHE_SIZE = 1024;\n    /**\n     * @type {Object<string, Color>}\n     */\n    var cache = {};\n    /**\n     * @type {number}\n     */\n    var cacheSize = 0;\n    return (\n    /**\n     * @param {string} s String.\n     * @return {Color} Color.\n     */\n    function (s) {\n        var color;\n        if (cache.hasOwnProperty(s)) {\n            color = cache[s];\n        }\n        else {\n            if (cacheSize >= MAX_CACHE_SIZE) {\n                var i = 0;\n                for (var key in cache) {\n                    if ((i++ & 3) === 0) {\n                        delete cache[key];\n                        --cacheSize;\n                    }\n                }\n            }\n            color = fromStringInternal_(s);\n            cache[s] = color;\n            ++cacheSize;\n        }\n        return color;\n    });\n})();\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {Color|string} color Color.\n * @return {Color} Color.\n * @api\n */\nexport function asArray(color) {\n    if (Array.isArray(color)) {\n        return color;\n    }\n    else {\n        return fromString(color);\n    }\n}\n/**\n * @param {string} s String.\n * @private\n * @return {Color} Color.\n */\nfunction fromStringInternal_(s) {\n    var r, g, b, a, color;\n    if (NAMED_COLOR_RE_.exec(s)) {\n        s = fromNamed(s);\n    }\n    if (HEX_COLOR_RE_.exec(s)) {\n        // hex\n        var n = s.length - 1; // number of hex digits\n        var d = // number of digits per channel\n         void 0; // number of digits per channel\n        if (n <= 4) {\n            d = 1;\n        }\n        else {\n            d = 2;\n        }\n        var hasAlpha = n === 4 || n === 8;\n        r = parseInt(s.substr(1 + 0 * d, d), 16);\n        g = parseInt(s.substr(1 + 1 * d, d), 16);\n        b = parseInt(s.substr(1 + 2 * d, d), 16);\n        if (hasAlpha) {\n            a = parseInt(s.substr(1 + 3 * d, d), 16);\n        }\n        else {\n            a = 255;\n        }\n        if (d == 1) {\n            r = (r << 4) + r;\n            g = (g << 4) + g;\n            b = (b << 4) + b;\n            if (hasAlpha) {\n                a = (a << 4) + a;\n            }\n        }\n        color = [r, g, b, a / 255];\n    }\n    else if (s.indexOf('rgba(') == 0) {\n        // rgba()\n        color = s.slice(5, -1).split(',').map(Number);\n        normalize(color);\n    }\n    else if (s.indexOf('rgb(') == 0) {\n        // rgb()\n        color = s.slice(4, -1).split(',').map(Number);\n        color.push(1);\n        normalize(color);\n    }\n    else {\n        assert(false, 14); // Invalid color\n    }\n    return color;\n}\n/**\n * TODO this function is only used in the test, we probably shouldn't export it\n * @param {Color} color Color.\n * @return {Color} Clamped color.\n */\nexport function normalize(color) {\n    color[0] = clamp((color[0] + 0.5) | 0, 0, 255);\n    color[1] = clamp((color[1] + 0.5) | 0, 0, 255);\n    color[2] = clamp((color[2] + 0.5) | 0, 0, 255);\n    color[3] = clamp(color[3], 0, 1);\n    return color;\n}\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n    var r = color[0];\n    if (r != (r | 0)) {\n        r = (r + 0.5) | 0;\n    }\n    var g = color[1];\n    if (g != (g | 0)) {\n        g = (g + 0.5) | 0;\n    }\n    var b = color[2];\n    if (b != (b | 0)) {\n        b = (b + 0.5) | 0;\n    }\n    var a = color[3] === undefined ? 1 : color[3];\n    return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nexport function isStringColor(s) {\n    if (NAMED_COLOR_RE_.test(s)) {\n        s = fromNamed(s);\n    }\n    return (HEX_COLOR_RE_.test(s) || s.indexOf('rgba(') === 0 || s.indexOf('rgb(') === 0);\n}\n//# sourceMappingURL=color.js.map","/**\n * @module ol/math\n */\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n *     number within the bounds.\n */\nexport function clamp(value, min, max) {\n    return Math.min(Math.max(value, min), max);\n}\n/**\n * Return the hyperbolic cosine of a given number. The method will use the\n * native `Math.cosh` function if it is available, otherwise the hyperbolic\n * cosine will be calculated via the reference implementation of the Mozilla\n * developer network.\n *\n * @param {number} x X.\n * @return {number} Hyperbolic cosine of x.\n */\nexport var cosh = (function () {\n    // Wrapped in a iife, to save the overhead of checking for the native\n    // implementation on every invocation.\n    var cosh;\n    if ('cosh' in Math) {\n        // The environment supports the native Math.cosh function, use it…\n        cosh = Math.cosh;\n    }\n    else {\n        // … else, use the reference implementation of MDN:\n        cosh = function (x) {\n            var y = /** @type {Math} */ (Math).exp(x);\n            return (y + 1 / y) / 2;\n        };\n    }\n    return cosh;\n})();\n/**\n * Return the base 2 logarithm of a given number. The method will use the\n * native `Math.log2` function if it is available, otherwise the base 2\n * logarithm will be calculated via the reference implementation of the\n * Mozilla developer network.\n *\n * @param {number} x X.\n * @return {number} Base 2 logarithm of x.\n */\nexport var log2 = (function () {\n    // Wrapped in a iife, to save the overhead of checking for the native\n    // implementation on every invocation.\n    var log2;\n    if ('log2' in Math) {\n        // The environment supports the native Math.log2 function, use it…\n        log2 = Math.log2;\n    }\n    else {\n        // … else, use the reference implementation of MDN:\n        log2 = function (x) {\n            return Math.log(x) * Math.LOG2E;\n        };\n    }\n    return log2;\n})();\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n    var dx = x2 - x1;\n    var dy = y2 - y1;\n    if (dx !== 0 || dy !== 0) {\n        var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n        if (t > 1) {\n            x1 = x2;\n            y1 = y2;\n        }\n        else if (t > 0) {\n            x1 += dx * t;\n            y1 += dy * t;\n        }\n    }\n    return squaredDistance(x, y, x1, y1);\n}\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n    var dx = x2 - x1;\n    var dy = y2 - y1;\n    return dx * dx + dy * dy;\n}\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array<Array<number>>} mat Augmented matrix (n x n + 1 column)\n *                                     in row-major order.\n * @return {Array<number>} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n    var n = mat.length;\n    for (var i = 0; i < n; i++) {\n        // Find max in the i-th column (ignoring i - 1 first rows)\n        var maxRow = i;\n        var maxEl = Math.abs(mat[i][i]);\n        for (var r = i + 1; r < n; r++) {\n            var absValue = Math.abs(mat[r][i]);\n            if (absValue > maxEl) {\n                maxEl = absValue;\n                maxRow = r;\n            }\n        }\n        if (maxEl === 0) {\n            return null; // matrix is singular\n        }\n        // Swap max row with i-th (current) row\n        var tmp = mat[maxRow];\n        mat[maxRow] = mat[i];\n        mat[i] = tmp;\n        // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n        for (var j = i + 1; j < n; j++) {\n            var coef = -mat[j][i] / mat[i][i];\n            for (var k = i; k < n + 1; k++) {\n                if (i == k) {\n                    mat[j][k] = 0;\n                }\n                else {\n                    mat[j][k] += coef * mat[i][k];\n                }\n            }\n        }\n    }\n    // Solve Ax=b for upper triangular matrix A (mat)\n    var x = new Array(n);\n    for (var l = n - 1; l >= 0; l--) {\n        x[l] = mat[l][n] / mat[l][l];\n        for (var m = l - 1; m >= 0; m--) {\n            mat[m][n] -= mat[m][l] * x[l];\n        }\n    }\n    return x;\n}\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n    return (angleInRadians * 180) / Math.PI;\n}\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n    return (angleInDegrees * Math.PI) / 180;\n}\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n    var r = a % b;\n    return r * b < 0 ? r + b : r;\n}\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n    return a + x * (b - a);\n}\n//# sourceMappingURL=math.js.map","/**\n * @module ol/array\n */\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function=} opt_comparator Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, opt_comparator) {\n    var mid, cmp;\n    var comparator = opt_comparator || numberSafeCompareFunction;\n    var low = 0;\n    var high = haystack.length;\n    var found = false;\n    while (low < high) {\n        /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n         * to double (which gives the wrong results). */\n        mid = low + ((high - low) >> 1);\n        cmp = +comparator(haystack[mid], needle);\n        if (cmp < 0.0) {\n            /* Too low. */\n            low = mid + 1;\n        }\n        else {\n            /* Key found or too high */\n            high = mid;\n            found = !cmp;\n        }\n    }\n    /* Key not found. */\n    return found ? low : ~low;\n}\n/**\n * Compare function for array sort that is safe for numbers.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n *     argument is less than, equal to, or greater than the second.\n */\nexport function numberSafeCompareFunction(a, b) {\n    return a > b ? 1 : a < b ? -1 : 0;\n}\n/**\n * Whether the array contains the given object.\n * @param {Array<*>} arr The array to test for the presence of the element.\n * @param {*} obj The object for which to test.\n * @return {boolean} The object is in the array.\n */\nexport function includes(arr, obj) {\n    return arr.indexOf(obj) >= 0;\n}\n/**\n * @param {Array<number>} arr Array.\n * @param {number} target Target.\n * @param {number} direction 0 means return the nearest, > 0\n *    means return the largest nearest, < 0 means return the\n *    smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n    var n = arr.length;\n    if (arr[0] <= target) {\n        return 0;\n    }\n    else if (target <= arr[n - 1]) {\n        return n - 1;\n    }\n    else {\n        var i = void 0;\n        if (direction > 0) {\n            for (i = 1; i < n; ++i) {\n                if (arr[i] < target) {\n                    return i - 1;\n                }\n            }\n        }\n        else if (direction < 0) {\n            for (i = 1; i < n; ++i) {\n                if (arr[i] <= target) {\n                    return i;\n                }\n            }\n        }\n        else {\n            for (i = 1; i < n; ++i) {\n                if (arr[i] == target) {\n                    return i;\n                }\n                else if (arr[i] < target) {\n                    if (arr[i - 1] - target < target - arr[i]) {\n                        return i - 1;\n                    }\n                    else {\n                        return i;\n                    }\n                }\n            }\n        }\n        return n - 1;\n    }\n}\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n    while (begin < end) {\n        var tmp = arr[begin];\n        arr[begin] = arr[end];\n        arr[end] = tmp;\n        ++begin;\n        --end;\n    }\n}\n/**\n * @param {Array<VALUE>} arr The array to modify.\n * @param {!Array<VALUE>|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n    var extension = Array.isArray(data) ? data : [data];\n    var length = extension.length;\n    for (var i = 0; i < length; i++) {\n        arr[arr.length] = extension[i];\n    }\n}\n/**\n * @param {Array<VALUE>} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n    var i = arr.indexOf(obj);\n    var found = i > -1;\n    if (found) {\n        arr.splice(i, 1);\n    }\n    return found;\n}\n/**\n * @param {Array<VALUE>} arr The array to search in.\n * @param {function(VALUE, number, ?) : boolean} func The function to compare.\n * @template VALUE\n * @return {VALUE|null} The element found or null.\n */\nexport function find(arr, func) {\n    var length = arr.length >>> 0;\n    var value;\n    for (var i = 0; i < length; i++) {\n        value = arr[i];\n        if (func(value, i, arr)) {\n            return value;\n        }\n    }\n    return null;\n}\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n    var len1 = arr1.length;\n    if (len1 !== arr2.length) {\n        return false;\n    }\n    for (var i = 0; i < len1; i++) {\n        if (arr1[i] !== arr2[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Sort the passed array such that the relative order of equal elements is preverved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n    var length = arr.length;\n    var tmp = Array(arr.length);\n    var i;\n    for (i = 0; i < length; i++) {\n        tmp[i] = { index: i, value: arr[i] };\n    }\n    tmp.sort(function (a, b) {\n        return compareFnc(a.value, b.value) || a.index - b.index;\n    });\n    for (i = 0; i < arr.length; i++) {\n        arr[i] = tmp[i].value;\n    }\n}\n/**\n * @param {Array<*>} arr The array to search in.\n * @param {Function} func Comparison function.\n * @return {number} Return index.\n */\nexport function findIndex(arr, func) {\n    var index;\n    var found = !arr.every(function (el, idx) {\n        index = idx;\n        return !func(el, idx, arr);\n    });\n    return found ? index : -1;\n}\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function=} opt_func Comparison function.\n * @param {boolean=} opt_strict Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, opt_func, opt_strict) {\n    var compare = opt_func || numberSafeCompareFunction;\n    return arr.every(function (currentVal, index) {\n        if (index === 0) {\n            return true;\n        }\n        var res = compare(arr[index - 1], currentVal);\n        return !(res > 0 || (opt_strict && res === 0));\n    });\n}\n//# sourceMappingURL=array.js.map","define([\"./_base/lang\"], function(lang){\n\n\t// module:\n\t//\t\tdojo/io-query\n\n\tvar backstop = {};\n\n\treturn {\n\t\t// summary:\n\t\t//\t\tThis module defines query string processing functions.\n\n\t\tobjectToQuery: function objectToQuery(/*Object*/ map){\n\t\t\t// summary:\n\t\t\t//\t\ttakes a name/value mapping object and returns a string representing\n\t\t\t//\t\ta URL-encoded version of that object.\n\t\t\t// example:\n\t\t\t//\t\tthis object:\n\t\t\t//\n\t\t\t//\t|\t{\n\t\t\t//\t|\t\tblah: \"blah\",\n\t\t\t//\t|\t\tmulti: [\n\t\t\t//\t|\t\t\t\"thud\",\n\t\t\t//\t|\t\t\t\"thonk\"\n\t\t\t//\t|\t\t]\n\t\t\t//\t|\t};\n\t\t\t//\n\t\t\t//\t\tyields the following query string:\n\t\t\t//\n\t\t\t//\t|\t\"blah=blah&multi=thud&multi=thonk\"\n\n\t\t\t// FIXME: need to implement encodeAscii!!\n\t\t\tvar enc = encodeURIComponent, pairs = [];\n\t\t\tfor(var name in map){\n\t\t\t\tvar value = map[name];\n\t\t\t\tif(value != backstop[name]){\n\t\t\t\t\tvar assign = enc(name) + \"=\";\n\t\t\t\t\tif(lang.isArray(value)){\n\t\t\t\t\t\tfor(var i = 0, l = value.length; i < l; ++i){\n\t\t\t\t\t\t\tpairs.push(assign + enc(value[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tpairs.push(assign + enc(value));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pairs.join(\"&\"); // String\n\t\t},\n\n\t\tqueryToObject: function queryToObject(/*String*/ str){\n\t\t\t// summary:\n\t\t\t//\t\tCreate an object representing a de-serialized query section of a\n\t\t\t//\t\tURL. Query keys with multiple values are returned in an array.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tThis string:\n\t\t\t//\n\t\t\t//\t|\t\t\"foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&\"\n\t\t\t//\n\t\t\t//\t\tresults in this object structure:\n\t\t\t//\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tfoo: [ \"bar\", \"baz\" ],\n\t\t\t//\t|\t\t\tthinger: \" spaces =blah\",\n\t\t\t//\t|\t\t\tzonk: \"blarg\"\n\t\t\t//\t|\t\t}\n\t\t\t//\n\t\t\t//\t\tNote that spaces and other urlencoded entities are correctly\n\t\t\t//\t\thandled.\n\n        \tvar dec = decodeURIComponent, qp = str.split(\"&\"), ret = {}, name, val;\n\t\t\tfor(var i = 0, l = qp.length, item; i < l; ++i){\n\t\t\t\titem = qp[i];\n\t\t\t\tif(item.length){\n\t\t\t\t\tvar s = item.indexOf(\"=\");\n\t\t\t\t\tif(s < 0){\n\t\t\t\t\t\tname = dec(item);\n\t\t\t\t\t\tval = \"\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tname = dec(item.slice(0, s));\n\t\t\t\t\t\tval = dec(item.slice(s + 1));\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof ret[name] == \"string\"){ // inline'd type check\n\t\t\t\t\t\tret[name] = [ret[name]];\n\t\t\t\t\t}\n\n\t\t\t\t\tif(lang.isArray(ret[name])){\n\t\t\t\t\t\tret[name].push(val);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tret[name] = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ret; // Object\n\t\t}\n\t};\n});","/**\n * @module ol/asserts\n */\nimport AssertionError from './AssertionError.js';\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {number} errorCode Error code.\n */\nexport function assert(assertion, errorCode) {\n    if (!assertion) {\n        throw new AssertionError(errorCode);\n    }\n}\n//# sourceMappingURL=asserts.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { AttributeCommitter, BooleanAttributePart, EventPart, NodePart, PropertyCommitter } from './parts.js';\n/**\n * Creates Parts when a template is instantiated.\n */\nexport class DefaultTemplateProcessor {\n    /**\n     * Create parts for an attribute-position binding, given the event, attribute\n     * name, and string literals.\n     *\n     * @param element The element containing the binding\n     * @param name  The attribute name\n     * @param strings The string literals. There are always at least two strings,\n     *   event for fully-controlled bindings with a single expression.\n     */\n    handleAttributeExpressions(element, name, strings, options) {\n        const prefix = name[0];\n        if (prefix === '.') {\n            const committer = new PropertyCommitter(element, name.slice(1), strings);\n            return committer.parts;\n        }\n        if (prefix === '@') {\n            return [new EventPart(element, name.slice(1), options.eventContext)];\n        }\n        if (prefix === '?') {\n            return [new BooleanAttributePart(element, name.slice(1), strings)];\n        }\n        const committer = new AttributeCommitter(element, name, strings);\n        return committer.parts;\n    }\n    /**\n     * Create parts for a text-position binding.\n     * @param templateFactory\n     */\n    handleTextExpression(options) {\n        return new NodePart(options);\n    }\n}\nexport const defaultTemplateProcessor = new DefaultTemplateProcessor();\n//# sourceMappingURL=default-template-processor.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * -  [[html]]\n * -  [[svg]]\n * -  [[render]]\n *\n * @packageDocumentation\n */\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport { defaultTemplateProcessor } from './lib/default-template-processor.js';\nimport { SVGTemplateResult, TemplateResult } from './lib/template-result.js';\nexport { DefaultTemplateProcessor, defaultTemplateProcessor } from './lib/default-template-processor.js';\nexport { directive, isDirective } from './lib/directive.js';\n// TODO(justinfagnani): remove line when we get NodePart moving methods\nexport { removeNodes, reparentNodes } from './lib/dom.js';\nexport { noChange, nothing } from './lib/part.js';\nexport { AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isIterable, isPrimitive, NodePart, PropertyCommitter, PropertyPart } from './lib/parts.js';\nexport { parts, render } from './lib/render.js';\nexport { templateCaches, templateFactory } from './lib/template-factory.js';\nexport { TemplateInstance } from './lib/template-instance.js';\nexport { SVGTemplateResult, TemplateResult } from './lib/template-result.js';\nexport { createMarker, isTemplatePartActive, Template } from './lib/template.js';\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\nif (typeof window !== 'undefined') {\n    (window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.3.0');\n}\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nexport const html = (strings, ...values) => new TemplateResult(strings, values, 'html', defaultTemplateProcessor);\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nexport const svg = (strings, ...values) => new SVGTemplateResult(strings, values, 'svg', defaultTemplateProcessor);\n//# sourceMappingURL=lit-html.js.map","/**\n * @module ol/events\n */\nimport { clear } from './obj.js';\n/**\n * Key to use with {@link module:ol/Observable~Observable#unByKey}.\n * @typedef {Object} EventsKey\n * @property {ListenerFunction} listener\n * @property {import(\"./events/Target.js\").EventTargetLike} target\n * @property {string} type\n * @api\n */\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function((Event|import(\"./events/Event.js\").default)): (void|boolean)} ListenerFunction\n * @api\n */\n/**\n * @typedef {Object} ListenerObject\n * @property {ListenerFunction} handleEvent\n */\n/**\n * @typedef {ListenerFunction|ListenerObject} Listener\n */\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events~unlistenByKey}.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object=} opt_this Object referenced by the `this` keyword in the\n *     listener. Default is the `target`.\n * @param {boolean=} opt_once If true, add the listener as one-off listener.\n * @return {EventsKey} Unique key for the listener.\n */\nexport function listen(target, type, listener, opt_this, opt_once) {\n    if (opt_this && opt_this !== target) {\n        listener = listener.bind(opt_this);\n    }\n    if (opt_once) {\n        var originalListener_1 = listener;\n        listener = function () {\n            target.removeEventListener(type, listener);\n            originalListener_1.apply(this, arguments);\n        };\n    }\n    var eventsKey = {\n        target: target,\n        type: type,\n        listener: listener,\n    };\n    target.addEventListener(type, listener);\n    return eventsKey;\n}\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events~unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events~listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object=} opt_this Object referenced by the `this` keyword in the\n *     listener. Default is the `target`.\n * @return {EventsKey} Key for unlistenByKey.\n */\nexport function listenOnce(target, type, listener, opt_this) {\n    return listen(target, type, listener, opt_this, true);\n}\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events~listen} or {@link module:ol/events~listenOnce}.\n *\n * @param {EventsKey} key The key.\n */\nexport function unlistenByKey(key) {\n    if (key && key.target) {\n        key.target.removeEventListener(key.type, key.listener);\n        clear(key);\n    }\n}\n//# sourceMappingURL=events.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/Object\n */\nimport Event from './events/Event.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport Observable from './Observable.js';\nimport { assign, isEmpty } from './obj.js';\nimport { getUid } from './util.js';\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nvar ObjectEvent = /** @class */ (function (_super) {\n    __extends(ObjectEvent, _super);\n    /**\n     * @param {string} type The event type.\n     * @param {string} key The property name.\n     * @param {*} oldValue The old value for `key`.\n     */\n    function ObjectEvent(type, key, oldValue) {\n        var _this = _super.call(this, type) || this;\n        /**\n         * The name of the property whose value is changing.\n         * @type {string}\n         * @api\n         */\n        _this.key = key;\n        /**\n         * The old value. To get the new value use `e.target.get(e.key)` where\n         * `e` is the event object.\n         * @type {*}\n         * @api\n         */\n        _this.oldValue = oldValue;\n        return _this;\n    }\n    return ObjectEvent;\n}(Event));\nexport { ObjectEvent };\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires ObjectEvent\n * @api\n */\nvar BaseObject = /** @class */ (function (_super) {\n    __extends(BaseObject, _super);\n    /**\n     * @param {Object<string, *>=} opt_values An object with key-value pairs.\n     */\n    function BaseObject(opt_values) {\n        var _this = _super.call(this) || this;\n        // Call {@link module:ol/util~getUid} to ensure that the order of objects' ids is\n        // the same as the order in which they were created.  This also helps to\n        // ensure that object properties are always added in the same order, which\n        // helps many JavaScript engines generate faster code.\n        getUid(_this);\n        /**\n         * @private\n         * @type {Object<string, *>}\n         */\n        _this.values_ = null;\n        if (opt_values !== undefined) {\n            _this.setProperties(opt_values);\n        }\n        return _this;\n    }\n    /**\n     * Gets a value.\n     * @param {string} key Key name.\n     * @return {*} Value.\n     * @api\n     */\n    BaseObject.prototype.get = function (key) {\n        var value;\n        if (this.values_ && this.values_.hasOwnProperty(key)) {\n            value = this.values_[key];\n        }\n        return value;\n    };\n    /**\n     * Get a list of object property names.\n     * @return {Array<string>} List of property names.\n     * @api\n     */\n    BaseObject.prototype.getKeys = function () {\n        return (this.values_ && Object.keys(this.values_)) || [];\n    };\n    /**\n     * Get an object of all property names and values.\n     * @return {Object<string, *>} Object.\n     * @api\n     */\n    BaseObject.prototype.getProperties = function () {\n        return (this.values_ && assign({}, this.values_)) || {};\n    };\n    /**\n     * @return {boolean} The object has properties.\n     */\n    BaseObject.prototype.hasProperties = function () {\n        return !!this.values_;\n    };\n    /**\n     * @param {string} key Key name.\n     * @param {*} oldValue Old value.\n     */\n    BaseObject.prototype.notify = function (key, oldValue) {\n        var eventType;\n        eventType = getChangeEventType(key);\n        this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n        eventType = ObjectEventType.PROPERTYCHANGE;\n        this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n    };\n    /**\n     * Sets a value.\n     * @param {string} key Key name.\n     * @param {*} value Value.\n     * @param {boolean=} opt_silent Update without triggering an event.\n     * @api\n     */\n    BaseObject.prototype.set = function (key, value, opt_silent) {\n        var values = this.values_ || (this.values_ = {});\n        if (opt_silent) {\n            values[key] = value;\n        }\n        else {\n            var oldValue = values[key];\n            values[key] = value;\n            if (oldValue !== value) {\n                this.notify(key, oldValue);\n            }\n        }\n    };\n    /**\n     * Sets a collection of key-value pairs.  Note that this changes any existing\n     * properties and adds new ones (it does not remove any existing properties).\n     * @param {Object<string, *>} values Values.\n     * @param {boolean=} opt_silent Update without triggering an event.\n     * @api\n     */\n    BaseObject.prototype.setProperties = function (values, opt_silent) {\n        for (var key in values) {\n            this.set(key, values[key], opt_silent);\n        }\n    };\n    /**\n     * Apply any properties from another object without triggering events.\n     * @param {BaseObject} source The source object.\n     * @protected\n     */\n    BaseObject.prototype.applyProperties = function (source) {\n        if (!source.values_) {\n            return;\n        }\n        assign(this.values_ || (this.values_ = {}), source.values_);\n    };\n    /**\n     * Unsets a property.\n     * @param {string} key Key name.\n     * @param {boolean=} opt_silent Unset without triggering an event.\n     * @api\n     */\n    BaseObject.prototype.unset = function (key, opt_silent) {\n        if (this.values_ && key in this.values_) {\n            var oldValue = this.values_[key];\n            delete this.values_[key];\n            if (isEmpty(this.values_)) {\n                this.values_ = null;\n            }\n            if (!opt_silent) {\n                this.notify(key, oldValue);\n            }\n        }\n    };\n    return BaseObject;\n}(Observable));\n/**\n * @type {Object<string, string>}\n */\nvar changeEventTypeCache = {};\n/**\n * @param {string} key Key name.\n * @return {string} Change name.\n */\nexport function getChangeEventType(key) {\n    return changeEventTypeCache.hasOwnProperty(key)\n        ? changeEventTypeCache[key]\n        : (changeEventTypeCache[key] = 'change:' + key);\n}\nexport default BaseObject;\n//# sourceMappingURL=Object.js.map","/**\n * @module ol/functions\n */\nimport { equals as arrayEquals } from './array.js';\n/**\n * Always returns true.\n * @returns {boolean} true.\n */\nexport function TRUE() {\n    return true;\n}\n/**\n * Always returns false.\n * @returns {boolean} false.\n */\nexport function FALSE() {\n    return false;\n}\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() { }\n/**\n * Wrap a function in another function that remembers the last return.  If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n    var called = false;\n    /** @type {ReturnType} */\n    var lastResult;\n    /** @type {Array<any>} */\n    var lastArgs;\n    var lastThis;\n    return function () {\n        var nextArgs = Array.prototype.slice.call(arguments);\n        if (!called || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n            called = true;\n            lastThis = this;\n            lastArgs = nextArgs;\n            lastResult = fn.apply(this, arguments);\n        }\n        return lastResult;\n    };\n}\n//# sourceMappingURL=functions.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/Pointer\n */\nimport Interaction from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport { getValues } from '../obj.js';\n/**\n * @typedef {Object} Options\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleDownEvent]\n * Function handling \"down\" events. If the function returns `true` then a drag\n * sequence is started.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleDragEvent]\n * Function handling \"drag\" events. This function is called on \"move\" events\n * during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleEvent]\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. The function may return `false` to prevent the\n * propagation of the event to other interactions in the map's interactions\n * chain.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleMoveEvent]\n * Function handling \"move\" events. This function is called on \"move\" events.\n * This functions is also called during a drag sequence, so during a drag\n * sequence both the `handleDragEvent` function and this function are called.\n * If `handleDownEvent` is defined and it returns true this function will not\n * be called during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleUpEvent]\n *  Function handling \"up\" events. If the function returns `false` then the\n * current drag sequence is stopped.\n * @property {function(boolean):boolean} [stopDown]\n * Should the down event be propagated to other interactions, or should be\n * stopped?\n */\n/**\n * @classdesc\n * Base class that calls user-defined functions on `down`, `move` and `up`\n * events. This class also manages \"drag sequences\".\n *\n * When the `handleDownEvent` user function returns `true` a drag sequence is\n * started. During a drag sequence the `handleDragEvent` user function is\n * called on `move` events. The drag sequence ends when the `handleUpEvent`\n * user function is called and returns `false`.\n * @api\n */\nvar PointerInteraction = /** @class */ (function (_super) {\n    __extends(PointerInteraction, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function PointerInteraction(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        _this = _super.call(this, \n        /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)) || this;\n        if (options.handleDownEvent) {\n            _this.handleDownEvent = options.handleDownEvent;\n        }\n        if (options.handleDragEvent) {\n            _this.handleDragEvent = options.handleDragEvent;\n        }\n        if (options.handleMoveEvent) {\n            _this.handleMoveEvent = options.handleMoveEvent;\n        }\n        if (options.handleUpEvent) {\n            _this.handleUpEvent = options.handleUpEvent;\n        }\n        if (options.stopDown) {\n            _this.stopDown = options.stopDown;\n        }\n        /**\n         * @type {boolean}\n         * @protected\n         */\n        _this.handlingDownUpSequence = false;\n        /**\n         * @type {!Object<string, PointerEvent>}\n         * @private\n         */\n        _this.trackedPointers_ = {};\n        /**\n         * @type {Array<PointerEvent>}\n         * @protected\n         */\n        _this.targetPointers = [];\n        return _this;\n    }\n    /**\n     * Returns the current number of pointers involved in the interaction,\n     * e.g. `2` when two fingers are used.\n     * @return {number} The number of pointers.\n     * @api\n     */\n    PointerInteraction.prototype.getPointerCount = function () {\n        return this.targetPointers.length;\n    };\n    /**\n     * Handle pointer down events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     * @protected\n     */\n    PointerInteraction.prototype.handleDownEvent = function (mapBrowserEvent) {\n        return false;\n    };\n    /**\n     * Handle pointer drag events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @protected\n     */\n    PointerInteraction.prototype.handleDragEvent = function (mapBrowserEvent) { };\n    /**\n     * Handles the {@link module:ol/MapBrowserEvent map browser event} and may call into\n     * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are\n     * detected.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n     * @return {boolean} `false` to stop event propagation.\n     * @api\n     */\n    PointerInteraction.prototype.handleEvent = function (mapBrowserEvent) {\n        if (!mapBrowserEvent.originalEvent) {\n            return true;\n        }\n        var stopEvent = false;\n        this.updateTrackedPointers_(mapBrowserEvent);\n        if (this.handlingDownUpSequence) {\n            if (mapBrowserEvent.type == MapBrowserEventType.POINTERDRAG) {\n                this.handleDragEvent(mapBrowserEvent);\n                // prevent page scrolling during dragging\n                mapBrowserEvent.originalEvent.preventDefault();\n            }\n            else if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n                var handledUp = this.handleUpEvent(mapBrowserEvent);\n                this.handlingDownUpSequence =\n                    handledUp && this.targetPointers.length > 0;\n            }\n        }\n        else {\n            if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n                var handled = this.handleDownEvent(mapBrowserEvent);\n                this.handlingDownUpSequence = handled;\n                stopEvent = this.stopDown(handled);\n            }\n            else if (mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE) {\n                this.handleMoveEvent(mapBrowserEvent);\n            }\n        }\n        return !stopEvent;\n    };\n    /**\n     * Handle pointer move events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @protected\n     */\n    PointerInteraction.prototype.handleMoveEvent = function (mapBrowserEvent) { };\n    /**\n     * Handle pointer up events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     * @protected\n     */\n    PointerInteraction.prototype.handleUpEvent = function (mapBrowserEvent) {\n        return false;\n    };\n    /**\n     * This function is used to determine if \"down\" events should be propagated\n     * to other interactions or should be stopped.\n     * @param {boolean} handled Was the event handled by the interaction?\n     * @return {boolean} Should the `down` event be stopped?\n     */\n    PointerInteraction.prototype.stopDown = function (handled) {\n        return handled;\n    };\n    /**\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @private\n     */\n    PointerInteraction.prototype.updateTrackedPointers_ = function (mapBrowserEvent) {\n        if (isPointerDraggingEvent(mapBrowserEvent)) {\n            var event_1 = mapBrowserEvent.originalEvent;\n            var id = event_1.pointerId.toString();\n            if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n                delete this.trackedPointers_[id];\n            }\n            else if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n                this.trackedPointers_[id] = event_1;\n            }\n            else if (id in this.trackedPointers_) {\n                // update only when there was a pointerdown event for this pointer\n                this.trackedPointers_[id] = event_1;\n            }\n            this.targetPointers = getValues(this.trackedPointers_);\n        }\n    };\n    return PointerInteraction;\n}(Interaction));\n/**\n * @param {Array<PointerEvent>} pointerEvents List of events.\n * @return {import(\"../pixel.js\").Pixel} Centroid pixel.\n */\nexport function centroid(pointerEvents) {\n    var length = pointerEvents.length;\n    var clientX = 0;\n    var clientY = 0;\n    for (var i = 0; i < length; i++) {\n        clientX += pointerEvents[i].clientX;\n        clientY += pointerEvents[i].clientY;\n    }\n    return [clientX / length, clientY / length];\n}\n/**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} Whether the event is a pointerdown, pointerdrag\n *     or pointerup event.\n */\nfunction isPointerDraggingEvent(mapBrowserEvent) {\n    var type = mapBrowserEvent.type;\n    return (type === MapBrowserEventType.POINTERDOWN ||\n        type === MapBrowserEventType.POINTERDRAG ||\n        type === MapBrowserEventType.POINTERUP);\n}\nexport default PointerInteraction;\n//# sourceMappingURL=Pointer.js.map","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n  var memo;\n  return function memorize() {\n    if (typeof memo === 'undefined') {\n      // Test for IE <= 9 as proposed by Browserhacks\n      // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n      // Tests for existence of standard globals is to allow style-loader\n      // to operate correctly into non-standard environments\n      // @see https://github.com/webpack-contrib/style-loader/issues/177\n      memo = Boolean(window && document && document.all && !window.atob);\n    }\n\n    return memo;\n  };\n}();\n\nvar getTarget = function getTarget() {\n  var memo = {};\n  return function memorize(target) {\n    if (typeof memo[target] === 'undefined') {\n      var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n      if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n        try {\n          // This will throw an exception if access to iframe is blocked\n          // due to cross-origin restrictions\n          styleTarget = styleTarget.contentDocument.head;\n        } catch (e) {\n          // istanbul ignore next\n          styleTarget = null;\n        }\n      }\n\n      memo[target] = styleTarget;\n    }\n\n    return memo[target];\n  };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n\n  for (var i = 0; i < stylesInDom.length; i++) {\n    if (stylesInDom[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n\n  return result;\n}\n\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = \"\".concat(id, \" \").concat(count);\n    idCountMap[id] = count + 1;\n    var index = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3]\n    };\n\n    if (index !== -1) {\n      stylesInDom[index].references++;\n      stylesInDom[index].updater(obj);\n    } else {\n      stylesInDom.push({\n        identifier: identifier,\n        updater: addStyle(obj, options),\n        references: 1\n      });\n    }\n\n    identifiers.push(identifier);\n  }\n\n  return identifiers;\n}\n\nfunction insertStyleElement(options) {\n  var style = document.createElement('style');\n  var attributes = options.attributes || {};\n\n  if (typeof attributes.nonce === 'undefined') {\n    var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n    if (nonce) {\n      attributes.nonce = nonce;\n    }\n  }\n\n  Object.keys(attributes).forEach(function (key) {\n    style.setAttribute(key, attributes[key]);\n  });\n\n  if (typeof options.insert === 'function') {\n    options.insert(style);\n  } else {\n    var target = getTarget(options.insert || 'head');\n\n    if (!target) {\n      throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n    }\n\n    target.appendChild(style);\n  }\n\n  return style;\n}\n\nfunction removeStyleElement(style) {\n  // istanbul ignore if\n  if (style.parentNode === null) {\n    return false;\n  }\n\n  style.parentNode.removeChild(style);\n}\n/* istanbul ignore next  */\n\n\nvar replaceText = function replaceText() {\n  var textStore = [];\n  return function replace(index, replacement) {\n    textStore[index] = replacement;\n    return textStore.filter(Boolean).join('\\n');\n  };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n  var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n  /* istanbul ignore if  */\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = replaceText(index, css);\n  } else {\n    var cssNode = document.createTextNode(css);\n    var childNodes = style.childNodes;\n\n    if (childNodes[index]) {\n      style.removeChild(childNodes[index]);\n    }\n\n    if (childNodes.length) {\n      style.insertBefore(cssNode, childNodes[index]);\n    } else {\n      style.appendChild(cssNode);\n    }\n  }\n}\n\nfunction applyToTag(style, options, obj) {\n  var css = obj.css;\n  var media = obj.media;\n  var sourceMap = obj.sourceMap;\n\n  if (media) {\n    style.setAttribute('media', media);\n  } else {\n    style.removeAttribute('media');\n  }\n\n  if (sourceMap && typeof btoa !== 'undefined') {\n    css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n  } // For old IE\n\n  /* istanbul ignore if  */\n\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    while (style.firstChild) {\n      style.removeChild(style.firstChild);\n    }\n\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n  var style;\n  var update;\n  var remove;\n\n  if (options.singleton) {\n    var styleIndex = singletonCounter++;\n    style = singleton || (singleton = insertStyleElement(options));\n    update = applyToSingletonTag.bind(null, style, styleIndex, false);\n    remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n  } else {\n    style = insertStyleElement(options);\n    update = applyToTag.bind(null, style, options);\n\n    remove = function remove() {\n      removeStyleElement(style);\n    };\n  }\n\n  update(obj);\n  return function updateStyle(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n        return;\n      }\n\n      update(obj = newObj);\n    } else {\n      remove();\n    }\n  };\n}\n\nmodule.exports = function (list, options) {\n  options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n  // tags it will allow on a page\n\n  if (!options.singleton && typeof options.singleton !== 'boolean') {\n    options.singleton = isOldIE();\n  }\n\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n\n    if (Object.prototype.toString.call(newList) !== '[object Array]') {\n      return;\n    }\n\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDom[index].references--;\n    }\n\n    var newLastIdentifiers = modulesToDom(newList, options);\n\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n\n      var _index = getIndexByIdentifier(_identifier);\n\n      if (stylesInDom[_index].references === 0) {\n        stylesInDom[_index].updater();\n\n        stylesInDom.splice(_index, 1);\n      }\n    }\n\n    lastIdentifiers = newLastIdentifiers;\n  };\n};","import { WORKER_OFFSCREEN_CANVAS } from './has.js';\n/**\n * @module ol/dom\n */\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number=} opt_width Canvas width.\n * @param {number=} opt_height Canvas height.\n * @param {Array<HTMLCanvasElement>=} opt_canvasPool Canvas pool to take existing canvas from.\n * @return {CanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(opt_width, opt_height, opt_canvasPool) {\n    var canvas = opt_canvasPool && opt_canvasPool.length\n        ? opt_canvasPool.shift()\n        : WORKER_OFFSCREEN_CANVAS\n            ? new OffscreenCanvas(opt_width || 300, opt_height || 300)\n            : document.createElement('canvas');\n    if (opt_width) {\n        canvas.width = opt_width;\n    }\n    if (opt_height) {\n        canvas.height = opt_height;\n    }\n    //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n    return /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));\n}\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n    var width = element.offsetWidth;\n    var style = getComputedStyle(element);\n    width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n    return width;\n}\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n    var height = element.offsetHeight;\n    var style = getComputedStyle(element);\n    height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n    return height;\n}\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n    var parent = oldNode.parentNode;\n    if (parent) {\n        parent.replaceChild(newNode, oldNode);\n    }\n}\n/**\n * @param {Node} node The node to remove.\n * @returns {Node} The node that was removed or null.\n */\nexport function removeNode(node) {\n    return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n    while (node.lastChild) {\n        node.removeChild(node.lastChild);\n    }\n}\n/**\n * Transform the children of a parent node so they match the\n * provided list of children.  This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array<Node>} children The desired children.\n */\nexport function replaceChildren(node, children) {\n    var oldChildren = node.childNodes;\n    for (var i = 0; true; ++i) {\n        var oldChild = oldChildren[i];\n        var newChild = children[i];\n        // check if our work is done\n        if (!oldChild && !newChild) {\n            break;\n        }\n        // check if children match\n        if (oldChild === newChild) {\n            continue;\n        }\n        // check if a new child needs to be added\n        if (!oldChild) {\n            node.appendChild(newChild);\n            continue;\n        }\n        // check if an old child needs to be removed\n        if (!newChild) {\n            node.removeChild(oldChild);\n            --i;\n            continue;\n        }\n        // reorder\n        node.insertBefore(newChild, oldChild);\n    }\n}\n//# sourceMappingURL=dom.js.map","/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport { FALSE, TRUE } from '../functions.js';\nimport { MAC, WEBKIT } from '../has.js';\nimport { assert } from '../asserts.js';\n/**\n * A function that takes an {@link module:ol/MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n    var conditions = arguments;\n    /**\n     * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n     * @return {boolean} All conditions passed.\n     */\n    return function (event) {\n        var pass = true;\n        for (var i = 0, ii = conditions.length; i < ii; ++i) {\n            pass = pass && conditions[i](event);\n            if (!pass) {\n                break;\n            }\n        }\n        return pass;\n    };\n}\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport var altKeyOnly = function (mapBrowserEvent) {\n    var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n    return (originalEvent.altKey &&\n        !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n        !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport var altShiftKeysOnly = function (mapBrowserEvent) {\n    var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n    return (originalEvent.altKey &&\n        !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n        originalEvent.shiftKey);\n};\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `<div id=\"map\" tabindex=\"1\">`.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport var focus = function (event) {\n    return event.target.getTargetElement().contains(document.activeElement);\n};\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport var focusWithTabindex = function (event) {\n    return event.map.getTargetElement().hasAttribute('tabindex')\n        ? focus(event)\n        : true;\n};\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport var always = TRUE;\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport var click = function (mapBrowserEvent) {\n    return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport var mouseActionButton = function (mapBrowserEvent) {\n    var originalEvent = /** @type {MouseEvent} */ (mapBrowserEvent.originalEvent);\n    return originalEvent.button == 0 && !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport var never = FALSE;\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport var pointerMove = function (mapBrowserEvent) {\n    return mapBrowserEvent.type == 'pointermove';\n};\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport var singleClick = function (mapBrowserEvent) {\n    return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport var doubleClick = function (mapBrowserEvent) {\n    return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport var noModifierKeys = function (mapBrowserEvent) {\n    var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n    return (!originalEvent.altKey &&\n        !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n        !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport var platformModifierKeyOnly = function (mapBrowserEvent) {\n    var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n    return (!originalEvent.altKey &&\n        (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n        !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport var shiftKeyOnly = function (mapBrowserEvent) {\n    var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n    return (!originalEvent.altKey &&\n        !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n        originalEvent.shiftKey);\n};\n/**\n * Return `true` if the target element is not editable, i.e. not a `<input>`-,\n * `<select>`- or `<textarea>`-element, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if the target element is not editable.\n * @api\n */\nexport var targetNotEditable = function (mapBrowserEvent) {\n    var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n    var tagName = /** @type {Element} */ (originalEvent.target).tagName;\n    return tagName !== 'INPUT' && tagName !== 'SELECT' && tagName !== 'TEXTAREA';\n};\n/**\n * Return `true` if the event originates from a mouse device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a mouse device.\n * @api\n */\nexport var mouseOnly = function (mapBrowserEvent) {\n    var pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (mapBrowserEvent)\n        .originalEvent;\n    assert(pointerEvent !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n    // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n    return pointerEvent.pointerType == 'mouse';\n};\n/**\n * Return `true` if the event originates from a touchable device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a touchable device.\n * @api\n */\nexport var touchOnly = function (mapBrowserEvent) {\n    var pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (mapBrowserEvent)\n        .originalEvent;\n    assert(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n    // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n    return pointerEvt.pointerType === 'touch';\n};\n/**\n * Return `true` if the event originates from a digital pen.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a digital pen.\n * @api\n */\nexport var penOnly = function (mapBrowserEvent) {\n    var pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (mapBrowserEvent)\n        .originalEvent;\n    assert(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n    // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n    return pointerEvt.pointerType === 'pen';\n};\n/**\n * Return `true` if the event originates from a primary pointer in\n * contact with the surface or if the left mouse button is pressed.\n * See http://www.w3.org/TR/pointerevents/#button-states.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a primary pointer.\n * @api\n */\nexport var primaryAction = function (mapBrowserEvent) {\n    var pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (mapBrowserEvent)\n        .originalEvent;\n    assert(pointerEvent !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n    return pointerEvent.isPrimary && pointerEvent.button === 0;\n};\n//# sourceMappingURL=condition.js.map","define([\n\t\"../_base/lang\"\n], function(lang){\n\t\"use strict\";\n\n\t// module:\n\t//\t\tdojo/promise/Promise\n\n\tfunction throwAbstract(){\n\t\tthrow new TypeError(\"abstract\");\n\t}\n\n\treturn lang.extend(function Promise(){\n\t\t// summary:\n\t\t//\t\tThe public interface to a deferred.\n\t\t// description:\n\t\t//\t\tThe public interface to a deferred. All promises in Dojo are\n\t\t//\t\tinstances of this class.\n\t}, {\n\t\tthen: function(callback, errback, progback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd new callbacks to the promise.\n\t\t\t// description:\n\t\t\t//\t\tAdd new callbacks to the deferred. Callbacks can be added\n\t\t\t//\t\tbefore or after the deferred is fulfilled.\n\t\t\t// callback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is resolved.\n\t\t\t//\t\tReceives the resolution value.\n\t\t\t// errback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is rejected.\n\t\t\t//\t\tReceives the rejection error.\n\t\t\t// progback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise emits a progress\n\t\t\t//\t\tupdate. Receives the progress update.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the callback(s).\n\t\t\t//\t\tThis can be used for chaining many asynchronous operations.\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tcancel: function(reason, strict){\n\t\t\t// summary:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t// description:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t//\t\tThe deferred's (optional) canceler is invoked and the\n\t\t\t//\t\tdeferred will be left in a rejected state. Can affect other\n\t\t\t//\t\tpromises that originate with the same deferred.\n\t\t\t// reason: any\n\t\t\t//\t\tA message that may be sent to the deferred's canceler,\n\t\t\t//\t\texplaining why it's being canceled.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be canceled.\n\t\t\t// returns: any\n\t\t\t//\t\tReturns the rejection reason if the deferred was canceled\n\t\t\t//\t\tnormally.\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisResolved: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been resolved.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisRejected: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been rejected.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisFulfilled: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been resolved or rejected.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisCanceled: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been canceled.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\t\"finally\": function(callback) {\n\t\t\t// summary:\n\t\t\t//\t\tAdd a callback to the promise that will fire whether it\n\t\t\t//\t\tresolves or rejects.\n\t\t\t// description:\n\t\t\t//\t\tConforms to ES2018's `Promise.prototype.finally`.\n\t\t\t//\t\tAdd a callback to the promise that will fire whether it\n\t\t\t//\t\tresolves or rejects. No value is passed to the callback.\n\t\t\t//\t\tReturns a promise that reflects the state of the original promise,\n\t\t\t//\t\twith two exceptions:\n\t\t\t//\t\t- If the callback return a promise, the outer promise will wait\n\t\t\t//\t\tuntil the returned promise is resolved, then it will resolve\n\t\t\t//\t\twith the original value.\n\t\t\t//\t\t- If the callback throws an exception or returns a promise that\n\t\t\t//\t\tis rejected (or rejects later), the outer promise will reject\n\t\t\t//\t\twith the inner promise's rejection reason.\n\t\t\t// callback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is resolved\n\t\t\t//\t\tor rejected. Doesn't receive any value.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise that reflects the state of the original promise,\n\t\t\t//\t\twith two small exceptions (see description).\n\t\t\t//\n\n\t\t\treturn this.then(function (value){\n\t\t\t\tvar valueOrPromise = callback();\n\t\t\t\tif (valueOrPromise && typeof valueOrPromise.then === \"function\"){\n\t\t\t\t\treturn valueOrPromise.then(function (){\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}, function(reason) {\n\t\t\t\tvar valueOrPromise = callback();\n\t\t\t\tif (valueOrPromise && typeof valueOrPromise.then === \"function\"){\n\t\t\t\t\treturn valueOrPromise.then(function (){\n\t\t\t\t\t\tthrow reason;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow reason;\n\t\t\t});\n\t\t},\n\n\t\talways: function(callbackOrErrback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd a callback to be invoked when the promise is resolved\n\t\t\t//\t\tor rejected.\n\t\t\t// callbackOrErrback: Function?\n\t\t\t//\t\tA function that is used both as a callback and errback.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the callback/errback.\n\n\t\t\treturn this.then(callbackOrErrback, callbackOrErrback);\n\t\t},\n\n\t\t\"catch\": function(errback){\n\t\t    // summary:\n\t\t    //\t\tAdd new errbacks to the promise. Follows ECMA specification naming.\n\t\t    // errback: Function?\n\t\t    //\t\tCallback to be invoked when the promise is rejected.\n\t\t    // returns: dojo/promise/Promise\n\t\t    //\t\tReturns a new promise for the result of the errback.\n\n\t\t    return this.then(null, errback);\n\t\t},\n\n\t\totherwise: function(errback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd new errbacks to the promise.\n\t\t\t// errback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is rejected.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the errback.\n\n\t\t\treturn this.then(null, errback);\n\t\t},\n\n\t\ttrace: function(){\n\t\t\treturn this;\n\t\t},\n\n\t\ttraceRejected: function(){\n\t\t\treturn this;\n\t\t},\n\n\t\ttoString: function(){\n\t\t\t// returns: string\n\t\t\t//\t\tReturns `[object Promise]`.\n\n\t\t\treturn \"[object Promise]\";\n\t\t}\n\t});\n});\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/Collection\n */\nimport AssertionError from './AssertionError.js';\nimport BaseObject from './Object.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport Event from './events/Event.js';\n/**\n * @enum {string}\n * @private\n */\nvar Property = {\n    LENGTH: 'length',\n};\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n */\nvar CollectionEvent = /** @class */ (function (_super) {\n    __extends(CollectionEvent, _super);\n    /**\n     * @param {import(\"./CollectionEventType.js\").default} type Type.\n     * @param {*=} opt_element Element.\n     * @param {number=} opt_index The index of the added or removed element.\n     */\n    function CollectionEvent(type, opt_element, opt_index) {\n        var _this = _super.call(this, type) || this;\n        /**\n         * The element that is added to or removed from the collection.\n         * @type {*}\n         * @api\n         */\n        _this.element = opt_element;\n        /**\n         * The index of the added or removed element.\n         * @type {number}\n         * @api\n         */\n        _this.index = opt_index;\n        return _this;\n    }\n    return CollectionEvent;\n}(Event));\nexport { CollectionEvent };\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @fires CollectionEvent\n *\n * @template T\n * @api\n */\nvar Collection = /** @class */ (function (_super) {\n    __extends(Collection, _super);\n    /**\n     * @param {Array<T>=} opt_array Array.\n     * @param {Options=} opt_options Collection options.\n     */\n    function Collection(opt_array, opt_options) {\n        var _this = _super.call(this) || this;\n        var options = opt_options || {};\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.unique_ = !!options.unique;\n        /**\n         * @private\n         * @type {!Array<T>}\n         */\n        _this.array_ = opt_array ? opt_array : [];\n        if (_this.unique_) {\n            for (var i = 0, ii = _this.array_.length; i < ii; ++i) {\n                _this.assertUnique_(_this.array_[i], i);\n            }\n        }\n        _this.updateLength_();\n        return _this;\n    }\n    /**\n     * Remove all elements from the collection.\n     * @api\n     */\n    Collection.prototype.clear = function () {\n        while (this.getLength() > 0) {\n            this.pop();\n        }\n    };\n    /**\n     * Add elements to the collection.  This pushes each item in the provided array\n     * to the end of the collection.\n     * @param {!Array<T>} arr Array.\n     * @return {Collection<T>} This collection.\n     * @api\n     */\n    Collection.prototype.extend = function (arr) {\n        for (var i = 0, ii = arr.length; i < ii; ++i) {\n            this.push(arr[i]);\n        }\n        return this;\n    };\n    /**\n     * Iterate over each element, calling the provided callback.\n     * @param {function(T, number, Array<T>): *} f The function to call\n     *     for every element. This function takes 3 arguments (the element, the\n     *     index and the array). The return value is ignored.\n     * @api\n     */\n    Collection.prototype.forEach = function (f) {\n        var array = this.array_;\n        for (var i = 0, ii = array.length; i < ii; ++i) {\n            f(array[i], i, array);\n        }\n    };\n    /**\n     * Get a reference to the underlying Array object. Warning: if the array\n     * is mutated, no events will be dispatched by the collection, and the\n     * collection's \"length\" property won't be in sync with the actual length\n     * of the array.\n     * @return {!Array<T>} Array.\n     * @api\n     */\n    Collection.prototype.getArray = function () {\n        return this.array_;\n    };\n    /**\n     * Get the element at the provided index.\n     * @param {number} index Index.\n     * @return {T} Element.\n     * @api\n     */\n    Collection.prototype.item = function (index) {\n        return this.array_[index];\n    };\n    /**\n     * Get the length of this collection.\n     * @return {number} The length of the array.\n     * @observable\n     * @api\n     */\n    Collection.prototype.getLength = function () {\n        return this.get(Property.LENGTH);\n    };\n    /**\n     * Insert an element at the provided index.\n     * @param {number} index Index.\n     * @param {T} elem Element.\n     * @api\n     */\n    Collection.prototype.insertAt = function (index, elem) {\n        if (this.unique_) {\n            this.assertUnique_(elem);\n        }\n        this.array_.splice(index, 0, elem);\n        this.updateLength_();\n        this.dispatchEvent(new CollectionEvent(CollectionEventType.ADD, elem, index));\n    };\n    /**\n     * Remove the last element of the collection and return it.\n     * Return `undefined` if the collection is empty.\n     * @return {T|undefined} Element.\n     * @api\n     */\n    Collection.prototype.pop = function () {\n        return this.removeAt(this.getLength() - 1);\n    };\n    /**\n     * Insert the provided element at the end of the collection.\n     * @param {T} elem Element.\n     * @return {number} New length of the collection.\n     * @api\n     */\n    Collection.prototype.push = function (elem) {\n        if (this.unique_) {\n            this.assertUnique_(elem);\n        }\n        var n = this.getLength();\n        this.insertAt(n, elem);\n        return this.getLength();\n    };\n    /**\n     * Remove the first occurrence of an element from the collection.\n     * @param {T} elem Element.\n     * @return {T|undefined} The removed element or undefined if none found.\n     * @api\n     */\n    Collection.prototype.remove = function (elem) {\n        var arr = this.array_;\n        for (var i = 0, ii = arr.length; i < ii; ++i) {\n            if (arr[i] === elem) {\n                return this.removeAt(i);\n            }\n        }\n        return undefined;\n    };\n    /**\n     * Remove the element at the provided index and return it.\n     * Return `undefined` if the collection does not contain this index.\n     * @param {number} index Index.\n     * @return {T|undefined} Value.\n     * @api\n     */\n    Collection.prototype.removeAt = function (index) {\n        var prev = this.array_[index];\n        this.array_.splice(index, 1);\n        this.updateLength_();\n        this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev, index));\n        return prev;\n    };\n    /**\n     * Set the element at the provided index.\n     * @param {number} index Index.\n     * @param {T} elem Element.\n     * @api\n     */\n    Collection.prototype.setAt = function (index, elem) {\n        var n = this.getLength();\n        if (index < n) {\n            if (this.unique_) {\n                this.assertUnique_(elem, index);\n            }\n            var prev = this.array_[index];\n            this.array_[index] = elem;\n            this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev, index));\n            this.dispatchEvent(new CollectionEvent(CollectionEventType.ADD, elem, index));\n        }\n        else {\n            for (var j = n; j < index; ++j) {\n                this.insertAt(j, undefined);\n            }\n            this.insertAt(index, elem);\n        }\n    };\n    /**\n     * @private\n     */\n    Collection.prototype.updateLength_ = function () {\n        this.set(Property.LENGTH, this.array_.length);\n    };\n    /**\n     * @private\n     * @param {T} elem Element.\n     * @param {number=} opt_except Optional index to ignore.\n     */\n    Collection.prototype.assertUnique_ = function (elem, opt_except) {\n        for (var i = 0, ii = this.array_.length; i < ii; ++i) {\n            if (this.array_[i] === elem && i !== opt_except) {\n                throw new AssertionError(58);\n            }\n        }\n    };\n    return Collection;\n}(BaseObject));\nexport default Collection;\n//# sourceMappingURL=Collection.js.map","/**\n * @module ol/events/Event\n */\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nvar BaseEvent = /** @class */ (function () {\n    /**\n     * @param {string} type Type.\n     */\n    function BaseEvent(type) {\n        /**\n         * @type {boolean}\n         */\n        this.propagationStopped;\n        /**\n         * The event type.\n         * @type {string}\n         * @api\n         */\n        this.type = type;\n        /**\n         * The event target.\n         * @type {Object}\n         * @api\n         */\n        this.target = null;\n    }\n    /**\n     * Stop event propagation.\n     * @api\n     */\n    BaseEvent.prototype.preventDefault = function () {\n        this.propagationStopped = true;\n    };\n    /**\n     * Stop event propagation.\n     * @api\n     */\n    BaseEvent.prototype.stopPropagation = function () {\n        this.propagationStopped = true;\n    };\n    return BaseEvent;\n}());\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function stopPropagation(evt) {\n    evt.stopPropagation();\n}\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function preventDefault(evt) {\n    evt.preventDefault();\n}\nexport default BaseEvent;\n//# sourceMappingURL=Event.js.map","/**\n * @module ol/style/RegularShape\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport ImageState from '../ImageState.js';\nimport ImageStyle from './Image.js';\nimport { asArray } from '../color.js';\nimport { asColorLike } from '../colorlike.js';\nimport { createCanvasContext2D } from '../dom.js';\nimport { defaultFillStyle, defaultLineCap, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, } from '../render/canvas.js';\n/**\n * Specify radius for regular polygons, or radius1 and radius2 for stars.\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} points Number of points for stars and regular polygons. In case of a polygon, the number of points\n * is the number of sides.\n * @property {number} [radius] Radius of a regular polygon.\n * @property {number} [radius1] Outer radius of a star.\n * @property {number} [radius2] Inner radius of a star.\n * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up.\n * @property {Array<number>} [displacement=[0,0]] Displacement of the shape\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. Unless two dimensional scaling is required a better\n * result may be obtained with appropriate settings for `radius`, `radius1` and `radius2`.\n */\n/**\n * @typedef {Object} RenderOptions\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle]\n * @property {number} strokeWidth\n * @property {number} size\n * @property {CanvasLineCap} lineCap\n * @property {Array<number>} lineDash\n * @property {number} lineDashOffset\n * @property {CanvasLineJoin} lineJoin\n * @property {number} miterLimit\n */\n/**\n * @classdesc\n * Set regular shape style for vector features. The resulting shape will be\n * a regular polygon when `radius` is provided, or a star when `radius1` and\n * `radius2` are provided.\n * @api\n */\nvar RegularShape = /** @class */ (function (_super) {\n    __extends(RegularShape, _super);\n    /**\n     * @param {Options} options Options.\n     */\n    function RegularShape(options) {\n        var _this = this;\n        /**\n         * @type {boolean}\n         */\n        var rotateWithView = options.rotateWithView !== undefined ? options.rotateWithView : false;\n        _this = _super.call(this, {\n            opacity: 1,\n            rotateWithView: rotateWithView,\n            rotation: options.rotation !== undefined ? options.rotation : 0,\n            scale: options.scale !== undefined ? options.scale : 1,\n            displacement: options.displacement !== undefined ? options.displacement : [0, 0],\n        }) || this;\n        /**\n         * @private\n         * @type {Object<number, HTMLCanvasElement>}\n         */\n        _this.canvas_ = {};\n        /**\n         * @private\n         * @type {HTMLCanvasElement}\n         */\n        _this.hitDetectionCanvas_ = null;\n        /**\n         * @private\n         * @type {import(\"./Fill.js\").default}\n         */\n        _this.fill_ = options.fill !== undefined ? options.fill : null;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        _this.origin_ = [0, 0];\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.points_ = options.points;\n        /**\n         * @protected\n         * @type {number}\n         */\n        _this.radius_ =\n            options.radius !== undefined ? options.radius : options.radius1;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.radius2_ = options.radius2;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.angle_ = options.angle !== undefined ? options.angle : 0;\n        /**\n         * @private\n         * @type {import(\"./Stroke.js\").default}\n         */\n        _this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        _this.anchor_ = null;\n        /**\n         * @private\n         * @type {import(\"../size.js\").Size}\n         */\n        _this.size_ = null;\n        /**\n         * @private\n         * @type {import(\"../size.js\").Size}\n         */\n        _this.imageSize_ = null;\n        /**\n         * @private\n         * @type {import(\"../size.js\").Size}\n         */\n        _this.hitDetectionImageSize_ = null;\n        _this.render();\n        return _this;\n    }\n    /**\n     * Clones the style.\n     * @return {RegularShape} The cloned style.\n     * @api\n     */\n    RegularShape.prototype.clone = function () {\n        var scale = this.getScale();\n        var style = new RegularShape({\n            fill: this.getFill() ? this.getFill().clone() : undefined,\n            points: this.getPoints(),\n            radius: this.getRadius(),\n            radius2: this.getRadius2(),\n            angle: this.getAngle(),\n            stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n            rotation: this.getRotation(),\n            rotateWithView: this.getRotateWithView(),\n            scale: Array.isArray(scale) ? scale.slice() : scale,\n            displacement: this.getDisplacement().slice(),\n        });\n        style.setOpacity(this.getOpacity());\n        return style;\n    };\n    /**\n     * Get the anchor point in pixels. The anchor determines the center point for the\n     * symbolizer.\n     * @return {Array<number>} Anchor.\n     * @api\n     */\n    RegularShape.prototype.getAnchor = function () {\n        return this.anchor_;\n    };\n    /**\n     * Get the angle used in generating the shape.\n     * @return {number} Shape's rotation in radians.\n     * @api\n     */\n    RegularShape.prototype.getAngle = function () {\n        return this.angle_;\n    };\n    /**\n     * Get the fill style for the shape.\n     * @return {import(\"./Fill.js\").default} Fill style.\n     * @api\n     */\n    RegularShape.prototype.getFill = function () {\n        return this.fill_;\n    };\n    /**\n     * @return {HTMLCanvasElement} Image element.\n     */\n    RegularShape.prototype.getHitDetectionImage = function () {\n        if (!this.hitDetectionCanvas_) {\n            var renderOptions = this.createRenderOptions();\n            this.createHitDetectionCanvas_(renderOptions);\n        }\n        return this.hitDetectionCanvas_;\n    };\n    /**\n     * Get the image icon.\n     * @param {number} pixelRatio Pixel ratio.\n     * @return {HTMLCanvasElement} Image or Canvas element.\n     * @api\n     */\n    RegularShape.prototype.getImage = function (pixelRatio) {\n        if (!this.canvas_[pixelRatio || 1]) {\n            var renderOptions = this.createRenderOptions();\n            var context = createCanvasContext2D(renderOptions.size * pixelRatio || 1, renderOptions.size * pixelRatio || 1);\n            this.draw_(renderOptions, context, 0, 0, pixelRatio || 1);\n            this.canvas_[pixelRatio || 1] = context.canvas;\n        }\n        return this.canvas_[pixelRatio || 1];\n    };\n    /*\n     * Get the image pixel ratio.\n     * @param {number} pixelRatio Pixel ratio.\n     * */\n    RegularShape.prototype.getPixelRatio = function (pixelRatio) {\n        return pixelRatio;\n    };\n    /**\n     * @return {import(\"../size.js\").Size} Image size.\n     */\n    RegularShape.prototype.getImageSize = function () {\n        return this.imageSize_;\n    };\n    /**\n     * @return {import(\"../size.js\").Size} Size of the hit-detection image.\n     */\n    RegularShape.prototype.getHitDetectionImageSize = function () {\n        return this.hitDetectionImageSize_;\n    };\n    /**\n     * @return {import(\"../ImageState.js\").default} Image state.\n     */\n    RegularShape.prototype.getImageState = function () {\n        return ImageState.LOADED;\n    };\n    /**\n     * Get the origin of the symbolizer.\n     * @return {Array<number>} Origin.\n     * @api\n     */\n    RegularShape.prototype.getOrigin = function () {\n        return this.origin_;\n    };\n    /**\n     * Get the number of points for generating the shape.\n     * @return {number} Number of points for stars and regular polygons.\n     * @api\n     */\n    RegularShape.prototype.getPoints = function () {\n        return this.points_;\n    };\n    /**\n     * Get the (primary) radius for the shape.\n     * @return {number} Radius.\n     * @api\n     */\n    RegularShape.prototype.getRadius = function () {\n        return this.radius_;\n    };\n    /**\n     * Get the secondary radius for the shape.\n     * @return {number|undefined} Radius2.\n     * @api\n     */\n    RegularShape.prototype.getRadius2 = function () {\n        return this.radius2_;\n    };\n    /**\n     * Get the size of the symbolizer (in pixels).\n     * @return {import(\"../size.js\").Size} Size.\n     * @api\n     */\n    RegularShape.prototype.getSize = function () {\n        return this.size_;\n    };\n    /**\n     * Get the stroke style for the shape.\n     * @return {import(\"./Stroke.js\").default} Stroke style.\n     * @api\n     */\n    RegularShape.prototype.getStroke = function () {\n        return this.stroke_;\n    };\n    /**\n     * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n     */\n    RegularShape.prototype.listenImageChange = function (listener) { };\n    /**\n     * Load not yet loaded URI.\n     */\n    RegularShape.prototype.load = function () { };\n    /**\n     * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n     */\n    RegularShape.prototype.unlistenImageChange = function (listener) { };\n    /**\n     * @returns {RenderOptions}  The render options\n     * @protected\n     */\n    RegularShape.prototype.createRenderOptions = function () {\n        var lineCap = defaultLineCap;\n        var lineJoin = defaultLineJoin;\n        var miterLimit = 0;\n        var lineDash = null;\n        var lineDashOffset = 0;\n        var strokeStyle;\n        var strokeWidth = 0;\n        if (this.stroke_) {\n            strokeStyle = this.stroke_.getColor();\n            if (strokeStyle === null) {\n                strokeStyle = defaultStrokeStyle;\n            }\n            strokeStyle = asColorLike(strokeStyle);\n            strokeWidth = this.stroke_.getWidth();\n            if (strokeWidth === undefined) {\n                strokeWidth = defaultLineWidth;\n            }\n            lineDash = this.stroke_.getLineDash();\n            lineDashOffset = this.stroke_.getLineDashOffset();\n            lineJoin = this.stroke_.getLineJoin();\n            if (lineJoin === undefined) {\n                lineJoin = defaultLineJoin;\n            }\n            lineCap = this.stroke_.getLineCap();\n            if (lineCap === undefined) {\n                lineCap = defaultLineCap;\n            }\n            miterLimit = this.stroke_.getMiterLimit();\n            if (miterLimit === undefined) {\n                miterLimit = defaultMiterLimit;\n            }\n        }\n        var size = 2 * (this.radius_ + strokeWidth) + 1;\n        return {\n            strokeStyle: strokeStyle,\n            strokeWidth: strokeWidth,\n            size: size,\n            lineCap: lineCap,\n            lineDash: lineDash,\n            lineDashOffset: lineDashOffset,\n            lineJoin: lineJoin,\n            miterLimit: miterLimit,\n        };\n    };\n    /**\n     * @protected\n     */\n    RegularShape.prototype.render = function () {\n        var renderOptions = this.createRenderOptions();\n        var context = createCanvasContext2D(renderOptions.size, renderOptions.size);\n        this.draw_(renderOptions, context, 0, 0, 1);\n        this.canvas_ = {};\n        this.canvas_[1] = context.canvas;\n        // canvas.width and height are rounded to the closest integer\n        var size = context.canvas.width;\n        var imageSize = size;\n        var displacement = this.getDisplacement();\n        this.hitDetectionImageSize_ = [renderOptions.size, renderOptions.size];\n        this.createHitDetectionCanvas_(renderOptions);\n        this.anchor_ = [size / 2 - displacement[0], size / 2 + displacement[1]];\n        this.size_ = [size, size];\n        this.imageSize_ = [imageSize, imageSize];\n    };\n    /**\n     * @private\n     * @param {RenderOptions} renderOptions Render options.\n     * @param {CanvasRenderingContext2D} context The rendering context.\n     * @param {number} x The origin for the symbol (x).\n     * @param {number} y The origin for the symbol (y).\n     * @param {number} pixelRatio The pixel ratio.\n     */\n    RegularShape.prototype.draw_ = function (renderOptions, context, x, y, pixelRatio) {\n        var i, angle0, radiusC;\n        // reset transform\n        context.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n        // then move to (x, y)\n        context.translate(x, y);\n        context.beginPath();\n        var points = this.points_;\n        if (points === Infinity) {\n            context.arc(renderOptions.size / 2, renderOptions.size / 2, this.radius_, 0, 2 * Math.PI, true);\n        }\n        else {\n            var radius2 = this.radius2_ !== undefined ? this.radius2_ : this.radius_;\n            if (radius2 !== this.radius_) {\n                points = 2 * points;\n            }\n            for (i = 0; i <= points; i++) {\n                angle0 = (i * 2 * Math.PI) / points - Math.PI / 2 + this.angle_;\n                radiusC = i % 2 === 0 ? this.radius_ : radius2;\n                context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0), renderOptions.size / 2 + radiusC * Math.sin(angle0));\n            }\n        }\n        if (this.fill_) {\n            var color = this.fill_.getColor();\n            if (color === null) {\n                color = defaultFillStyle;\n            }\n            context.fillStyle = asColorLike(color);\n            context.fill();\n        }\n        if (this.stroke_) {\n            context.strokeStyle = renderOptions.strokeStyle;\n            context.lineWidth = renderOptions.strokeWidth;\n            if (context.setLineDash && renderOptions.lineDash) {\n                context.setLineDash(renderOptions.lineDash);\n                context.lineDashOffset = renderOptions.lineDashOffset;\n            }\n            context.lineCap = renderOptions.lineCap;\n            context.lineJoin = renderOptions.lineJoin;\n            context.miterLimit = renderOptions.miterLimit;\n            context.stroke();\n        }\n        context.closePath();\n    };\n    /**\n     * @private\n     * @param {RenderOptions} renderOptions Render options.\n     */\n    RegularShape.prototype.createHitDetectionCanvas_ = function (renderOptions) {\n        this.hitDetectionCanvas_ = this.getImage(1);\n        if (this.fill_) {\n            var color = this.fill_.getColor();\n            // determine if fill is transparent (or pattern or gradient)\n            var opacity = 0;\n            if (typeof color === 'string') {\n                color = asArray(color);\n            }\n            if (color === null) {\n                opacity = 1;\n            }\n            else if (Array.isArray(color)) {\n                opacity = color.length === 4 ? color[3] : 1;\n            }\n            if (opacity === 0) {\n                // if a transparent fill style is set, create an extra hit-detection image\n                // with a default fill style\n                var context = createCanvasContext2D(renderOptions.size, renderOptions.size);\n                this.hitDetectionCanvas_ = context.canvas;\n                this.drawHitDetectionCanvas_(renderOptions, context, 0, 0);\n            }\n        }\n    };\n    /**\n     * @private\n     * @param {RenderOptions} renderOptions Render options.\n     * @param {CanvasRenderingContext2D} context The context.\n     * @param {number} x The origin for the symbol (x).\n     * @param {number} y The origin for the symbol (y).\n     */\n    RegularShape.prototype.drawHitDetectionCanvas_ = function (renderOptions, context, x, y) {\n        // move to (x, y)\n        context.translate(x, y);\n        context.beginPath();\n        var points = this.points_;\n        if (points === Infinity) {\n            context.arc(renderOptions.size / 2, renderOptions.size / 2, this.radius_, 0, 2 * Math.PI, true);\n        }\n        else {\n            var radius2 = this.radius2_ !== undefined ? this.radius2_ : this.radius_;\n            if (radius2 !== this.radius_) {\n                points = 2 * points;\n            }\n            var i = void 0, radiusC = void 0, angle0 = void 0;\n            for (i = 0; i <= points; i++) {\n                angle0 = (i * 2 * Math.PI) / points - Math.PI / 2 + this.angle_;\n                radiusC = i % 2 === 0 ? this.radius_ : radius2;\n                context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0), renderOptions.size / 2 + radiusC * Math.sin(angle0));\n            }\n        }\n        context.fillStyle = defaultFillStyle;\n        context.fill();\n        if (this.stroke_) {\n            context.strokeStyle = renderOptions.strokeStyle;\n            context.lineWidth = renderOptions.strokeWidth;\n            if (renderOptions.lineDash) {\n                context.setLineDash(renderOptions.lineDash);\n                context.lineDashOffset = renderOptions.lineDashOffset;\n            }\n            context.stroke();\n        }\n        context.closePath();\n    };\n    return RegularShape;\n}(ImageStyle));\nexport default RegularShape;\n//# sourceMappingURL=RegularShape.js.map","define([\"./create\"], function(create){\n\t// module:\n\t//\t\tdojo/errors/CancelError\n\n\t/*=====\n\treturn function(){\n\t\t// summary:\n\t\t//\t\tDefault error if a promise is canceled without a reason.\n\t};\n\t=====*/\n\n\treturn create(\"CancelError\", null, null, { dojoType: \"cancel\", log: false });\n});\n","define([\"./kernel\", \"./config\", /*===== \"./declare\", =====*/ \"./lang\", \"../Evented\", \"./Color\", \"../aspect\", \"../sniff\", \"../dom\", \"../dom-style\"],\n\tfunction(dojo, config, /*===== declare, =====*/ lang, Evented, Color, aspect, has, dom, style){\n\t// module:\n\t//\t\tdojo/_base/fx\n\t// notes:\n\t//\t\tAnimation loosely package based on Dan Pupius' work, contributed under CLA; see\n\t//\t\thttp://pupius.co.uk/js/Toolkit.Drawing.js\n\n\tvar _mixin = lang.mixin;\n\n\t// Module export\n\tvar basefx = {\n\t\t// summary:\n\t\t//\t\tThis module defines the base dojo/_base/fx implementation.\n\t};\n\n\tvar _Line = basefx._Line = function(/*int*/ start, /*int*/ end){\n\t\t// summary:\n\t\t//\t\tObject used to generate values from a start value to an end value\n\t\t// start: int\n\t\t//\t\tBeginning value for range\n\t\t// end: int\n\t\t//\t\tEnding value for range\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t};\n\n\t_Line.prototype.getValue = function(/*float*/ n){\n\t\t// summary:\n\t\t//\t\tReturns the point on the line\n\t\t// n:\n\t\t//\t\ta floating point number greater than 0 and less than 1\n\t\treturn ((this.end - this.start) * n) + this.start; // Decimal\n\t};\n\n\tvar Animation = basefx.Animation = function(args){\n\t\t// summary:\n\t\t//\t\tA generic animation class that fires callbacks into its handlers\n\t\t//\t\tobject at various states.\n\t\t// description:\n\t\t//\t\tA generic animation class that fires callbacks into its handlers\n\t\t//\t\tobject at various states. Nearly all dojo animation functions\n\t\t//\t\treturn an instance of this method, usually without calling the\n\t\t//\t\t.play() method beforehand. Therefore, you will likely need to\n\t\t//\t\tcall .play() on instances of `Animation` when one is\n\t\t//\t\treturned.\n\t\t// args: Object\n\t\t//\t\tThe 'magic argument', mixing all the properties into this\n\t\t//\t\tanimation instance.\n\n\t\t_mixin(this, args);\n\t\tif(lang.isArray(this.curve)){\n\t\t\tthis.curve = new _Line(this.curve[0], this.curve[1]);\n\t\t}\n\n\t};\n\tAnimation.prototype = new Evented();\n\n\tlang.extend(Animation, {\n\t\t// duration: Integer\n\t\t//\t\tThe time in milliseconds the animation will take to run\n\t\tduration: 350,\n\n\t/*=====\n\t\t// curve: _Line|Array\n\t\t//\t\tA two element array of start and end values, or a `_Line` instance to be\n\t\t//\t\tused in the Animation.\n\t\tcurve: null,\n\n\t\t// easing: Function?\n\t\t//\t\tA Function to adjust the acceleration (or deceleration) of the progress\n\t\t//\t\tacross a _Line\n\t\teasing: null,\n\t=====*/\n\n\t\t// repeat: Integer?\n\t\t//\t\tThe number of times to loop the animation\n\t\trepeat: 0,\n\n\t\t// rate: Integer?\n\t\t//\t\tthe time in milliseconds to wait before advancing to next frame\n\t\t//\t\t(used as a fps timer: 1000/rate = fps)\n\t\trate: 20 /* 50 fps */,\n\n\t/*=====\n\t\t// delay: Integer?\n\t\t//\t\tThe time in milliseconds to wait before starting animation after it\n\t\t//\t\thas been .play()'ed\n\t\tdelay: null,\n\n\t\t// beforeBegin: Event?\n\t\t//\t\tSynthetic event fired before a Animation begins playing (synchronous)\n\t\tbeforeBegin: null,\n\n\t\t// onBegin: Event?\n\t\t//\t\tSynthetic event fired as a Animation begins playing (useful?)\n\t\tonBegin: null,\n\n\t\t// onAnimate: Event?\n\t\t//\t\tSynthetic event fired at each interval of the Animation\n\t\tonAnimate: null,\n\n\t\t// onEnd: Event?\n\t\t//\t\tSynthetic event fired after the final frame of the Animation\n\t\tonEnd: null,\n\n\t\t// onPlay: Event?\n\t\t//\t\tSynthetic event fired any time the Animation is play()'ed\n\t\tonPlay: null,\n\n\t\t// onPause: Event?\n\t\t//\t\tSynthetic event fired when the Animation is paused\n\t\tonPause: null,\n\n\t\t// onStop: Event\n\t\t//\t\tSynthetic event fires when the Animation is stopped\n\t\tonStop: null,\n\n\t=====*/\n\n\t\t_percent: 0,\n\t\t_startRepeatCount: 0,\n\n\t\t_getStep: function(){\n\t\t\tvar _p = this._percent,\n\t\t\t\t_e = this.easing\n\t\t\t;\n\t\t\treturn _e ? _e(_p) : _p;\n\t\t},\n\t\t_fire: function(/*Event*/ evt, /*Array?*/ args){\n\t\t\t// summary:\n\t\t\t//\t\tConvenience function.  Fire event \"evt\" and pass it the\n\t\t\t//\t\targuments specified in \"args\".\n\t\t\t// description:\n\t\t\t//\t\tConvenience function.  Fire event \"evt\" and pass it the\n\t\t\t//\t\targuments specified in \"args\".\n\t\t\t//\t\tFires the callback in the scope of this Animation\n\t\t\t//\t\tinstance.\n\t\t\t// evt:\n\t\t\t//\t\tThe event to fire.\n\t\t\t// args:\n\t\t\t//\t\tThe arguments to pass to the event.\n\t\t\tvar a = args||[];\n\t\t\tif(this[evt]){\n\t\t\t\tif(config.debugAtAllCosts){\n\t\t\t\t\tthis[evt].apply(this, a);\n\t\t\t\t}else{\n\t\t\t\t\ttry{\n\t\t\t\t\t\tthis[evt].apply(this, a);\n\t\t\t\t\t}catch(e){\n\t\t\t\t\t\t// squelch and log because we shouldn't allow exceptions in\n\t\t\t\t\t\t// synthetic event handlers to cause the internal timer to run\n\t\t\t\t\t\t// amuck, potentially pegging the CPU. I'm not a fan of this\n\t\t\t\t\t\t// squelch, but hopefully logging will make it clear what's\n\t\t\t\t\t\t// going on\n\t\t\t\t\t\tconsole.error(\"exception in animation handler for:\", evt);\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this; // Animation\n\t\t},\n\n\t\tplay: function(/*int?*/ delay, /*Boolean?*/ gotoStart){\n\t\t\t// summary:\n\t\t\t//\t\tStart the animation.\n\t\t\t// delay:\n\t\t\t//\t\tHow many milliseconds to delay before starting.\n\t\t\t// gotoStart:\n\t\t\t//\t\tIf true, starts the animation from the beginning; otherwise,\n\t\t\t//\t\tstarts it from its current position.\n\t\t\t// returns: Animation\n\t\t\t//\t\tThe instance to allow chaining.\n\n\t\t\tvar _t = this;\n\t\t\tif(_t._delayTimer){ _t._clearTimer(); }\n\t\t\tif(gotoStart){\n\t\t\t\t_t._stopTimer();\n\t\t\t\t_t._active = _t._paused = false;\n\t\t\t\t_t._percent = 0;\n\t\t\t}else if(_t._active && !_t._paused){\n\t\t\t\treturn _t;\n\t\t\t}\n\n\t\t\t_t._fire(\"beforeBegin\", [_t.node]);\n\n\t\t\tvar de = delay || _t.delay,\n\t\t\t\t_p = lang.hitch(_t, \"_play\", gotoStart);\n\n\t\t\tif(de > 0){\n\t\t\t\t_t._delayTimer = setTimeout(_p, de);\n\t\t\t\treturn _t;\n\t\t\t}\n\t\t\t_p();\n\t\t\treturn _t;\t// Animation\n\t\t},\n\n\t\t_play: function(gotoStart){\n\t\t\tvar _t = this;\n\t\t\tif(_t._delayTimer){ _t._clearTimer(); }\n\t\t\t_t._startTime = new Date().valueOf();\n\t\t\tif(_t._paused){\n\t\t\t\t_t._startTime -= _t.duration * _t._percent;\n\t\t\t}\n\n\t\t\t_t._active = true;\n\t\t\t_t._paused = false;\n\t\t\tvar value = _t.curve.getValue(_t._getStep());\n\t\t\tif(!_t._percent){\n\t\t\t\tif(!_t._startRepeatCount){\n\t\t\t\t\t_t._startRepeatCount = _t.repeat;\n\t\t\t\t}\n\t\t\t\t_t._fire(\"onBegin\", [value]);\n\t\t\t}\n\n\t\t\t_t._fire(\"onPlay\", [value]);\n\n\t\t\t_t._cycle();\n\t\t\treturn _t; // Animation\n\t\t},\n\n\t\tpause: function(){\n\t\t\t// summary:\n\t\t\t//\t\tPauses a running animation.\n\t\t\tvar _t = this;\n\t\t\tif(_t._delayTimer){ _t._clearTimer(); }\n\t\t\t_t._stopTimer();\n\t\t\tif(!_t._active){ return _t; /*Animation*/ }\n\t\t\t_t._paused = true;\n\t\t\t_t._fire(\"onPause\", [_t.curve.getValue(_t._getStep())]);\n\t\t\treturn _t; // Animation\n\t\t},\n\n\t\tgotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){\n\t\t\t// summary:\n\t\t\t//\t\tSets the progress of the animation.\n\t\t\t// percent:\n\t\t\t//\t\tA percentage in decimal notation (between and including 0.0 and 1.0).\n\t\t\t// andPlay:\n\t\t\t//\t\tIf true, play the animation after setting the progress.\n\t\t\tvar _t = this;\n\t\t\t_t._stopTimer();\n\t\t\t_t._active = _t._paused = true;\n\t\t\t_t._percent = percent;\n\t\t\tif(andPlay){ _t.play(); }\n\t\t\treturn _t; // Animation\n\t\t},\n\n\t\tstop: function(/*boolean?*/ gotoEnd){\n\t\t\t// summary:\n\t\t\t//\t\tStops a running animation.\n\t\t\t// gotoEnd:\n\t\t\t//\t\tIf true, the animation will end.\n\t\t\tvar _t = this;\n\t\t\tif(_t._delayTimer){ _t._clearTimer(); }\n\t\t\tif(!_t._timer){ return _t; /* Animation */ }\n\t\t\t_t._stopTimer();\n\t\t\tif(gotoEnd){\n\t\t\t\t_t._percent = 1;\n\t\t\t}\n\t\t\t_t._fire(\"onStop\", [_t.curve.getValue(_t._getStep())]);\n\t\t\t_t._active = _t._paused = false;\n\t\t\treturn _t; // Animation\n\t\t},\n\n\t\tdestroy: function(){\n\t\t\t// summary:\n\t\t\t//\t\tcleanup the animation\n\t\t\tthis.stop();\n\t\t},\n\n\t\tstatus: function(){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a string token representation of the status of\n\t\t\t//\t\tthe animation, one of: \"paused\", \"playing\", \"stopped\"\n\t\t\tif(this._active){\n\t\t\t\treturn this._paused ? \"paused\" : \"playing\"; // String\n\t\t\t}\n\t\t\treturn \"stopped\"; // String\n\t\t},\n\n\t\t_cycle: function(){\n\t\t\tvar _t = this;\n\t\t\tif(_t._active){\n\t\t\t\tvar curr = new Date().valueOf();\n\t\t\t\t// Allow durations of 0 (instant) by setting step to 1 - see #13798\n\t\t\t\tvar step = _t.duration === 0 ? 1 : (curr - _t._startTime) / (_t.duration);\n\n\t\t\t\tif(step >= 1){\n\t\t\t\t\tstep = 1;\n\t\t\t\t}\n\t\t\t\t_t._percent = step;\n\n\t\t\t\t// Perform easing\n\t\t\t\tif(_t.easing){\n\t\t\t\t\tstep = _t.easing(step);\n\t\t\t\t}\n\n\t\t\t\t_t._fire(\"onAnimate\", [_t.curve.getValue(step)]);\n\n\t\t\t\tif(_t._percent < 1){\n\t\t\t\t\t_t._startTimer();\n\t\t\t\t}else{\n\t\t\t\t\t_t._active = false;\n\n\t\t\t\t\tif(_t.repeat > 0){\n\t\t\t\t\t\t_t.repeat--;\n\t\t\t\t\t\t_t.play(null, true);\n\t\t\t\t\t}else if(_t.repeat == -1){\n\t\t\t\t\t\t_t.play(null, true);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(_t._startRepeatCount){\n\t\t\t\t\t\t\t_t.repeat = _t._startRepeatCount;\n\t\t\t\t\t\t\t_t._startRepeatCount = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_t._percent = 0;\n\t\t\t\t\t_t._fire(\"onEnd\", [_t.node]);\n\t\t\t\t\t!_t.repeat && _t._stopTimer();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn _t; // Animation\n\t\t},\n\n\t\t_clearTimer: function(){\n\t\t\t// summary:\n\t\t\t//\t\tClear the play delay timer\n\t\t\tclearTimeout(this._delayTimer);\n\t\t\tdelete this._delayTimer;\n\t\t}\n\n\t});\n\n\t// the local timer, stubbed into all Animation instances\n\tvar ctr = 0,\n\t\ttimer = null,\n\t\trunner = {\n\t\t\trun: function(){}\n\t\t};\n\n\tlang.extend(Animation, {\n\n\t\t_startTimer: function(){\n\t\t\tif(!this._timer){\n\t\t\t\tthis._timer = aspect.after(runner, \"run\", lang.hitch(this, \"_cycle\"), true);\n\t\t\t\tctr++;\n\t\t\t}\n\t\t\tif(!timer){\n\t\t\t\ttimer = setInterval(lang.hitch(runner, \"run\"), this.rate);\n\t\t\t}\n\t\t},\n\n\t\t_stopTimer: function(){\n\t\t\tif(this._timer){\n\t\t\t\tthis._timer.remove();\n\t\t\t\tthis._timer = null;\n\t\t\t\tctr--;\n\t\t\t}\n\t\t\tif(ctr <= 0){\n\t\t\t\tclearInterval(timer);\n\t\t\t\ttimer = null;\n\t\t\t\tctr = 0;\n\t\t\t}\n\t\t}\n\n\t});\n\n\tvar _makeFadeable =\n\t\thas(\"ie\") ? function(node){\n\t\t\t// only set the zoom if the \"tickle\" value would be the same as the\n\t\t\t// default\n\t\t\tvar ns = node.style;\n\t\t\t// don't set the width to auto if it didn't already cascade that way.\n\t\t\t// We don't want to f anyones designs\n\t\t\tif(!ns.width.length && style.get(node, \"width\") == \"auto\"){\n\t\t\t\tns.width = \"auto\";\n\t\t\t}\n\t\t} :\n\t\tfunction(){};\n\n\tbasefx._fade = function(/*Object*/ args){\n\t\t// summary:\n\t\t//\t\tReturns an animation that will fade the node defined by\n\t\t//\t\targs.node from the start to end values passed (args.start\n\t\t//\t\targs.end) (end is mandatory, start is optional)\n\n\t\targs.node = dom.byId(args.node);\n\t\tvar fArgs = _mixin({ properties: {} }, args),\n\t\t\tprops = (fArgs.properties.opacity = {});\n\n\t\tprops.start = !(\"start\" in fArgs) ?\n\t\t\tfunction(){\n\t\t\t\treturn +style.get(fArgs.node, \"opacity\")||0;\n\t\t\t} : fArgs.start;\n\t\tprops.end = fArgs.end;\n\n\t\tvar anim = basefx.animateProperty(fArgs);\n\t\taspect.after(anim, \"beforeBegin\", lang.partial(_makeFadeable, fArgs.node), true);\n\n\t\treturn anim; // Animation\n\t};\n\n\t/*=====\n\tvar __FadeArgs = declare(null, {\n\t\t// node: DOMNode|String\n\t\t//\t\tThe node referenced in the animation\n\t\t// duration: Integer?\n\t\t//\t\tDuration of the animation in milliseconds.\n\t\t// easing: Function?\n\t\t//\t\tAn easing function.\n\t});\n\t=====*/\n\n\tbasefx.fadeIn = function(/*__FadeArgs*/ args){\n\t\t// summary:\n\t\t//\t\tReturns an animation that will fade node defined in 'args' from\n\t\t//\t\tits current opacity to fully opaque.\n\t\treturn basefx._fade(_mixin({ end: 1 }, args)); // Animation\n\t};\n\n\tbasefx.fadeOut = function(/*__FadeArgs*/ args){\n\t\t// summary:\n\t\t//\t\tReturns an animation that will fade node defined in 'args'\n\t\t//\t\tfrom its current opacity to fully transparent.\n\t\treturn basefx._fade(_mixin({ end: 0 }, args)); // Animation\n\t};\n\n\tbasefx._defaultEasing = function(/*Decimal?*/ n){\n\t\t// summary:\n\t\t//\t\tThe default easing function for Animation(s)\n\t\treturn 0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2);\t// Decimal\n\t};\n\n\tvar PropLine = function(properties){\n\t\t// PropLine is an internal class which is used to model the values of\n\t\t// an a group of CSS properties across an animation lifecycle. In\n\t\t// particular, the \"getValue\" function handles getting interpolated\n\t\t// values between start and end for a particular CSS value.\n\t\tthis._properties = properties;\n\t\tfor(var p in properties){\n\t\t\tvar prop = properties[p];\n\t\t\tif(prop.start instanceof Color){\n\t\t\t\t// create a reusable temp color object to keep intermediate results\n\t\t\t\tprop.tempColor = new Color();\n\t\t\t}\n\t\t}\n\t};\n\n\tPropLine.prototype.getValue = function(r){\n\t\tvar ret = {};\n\t\tfor(var p in this._properties){\n\t\t\tvar prop = this._properties[p],\n\t\t\t\tstart = prop.start;\n\t\t\tif(start instanceof Color){\n\t\t\t\tret[p] = Color.blendColors(start, prop.end, r, prop.tempColor).toCss();\n\t\t\t}else if(!lang.isArray(start)){\n\t\t\t\tret[p] = ((prop.end - start) * r) + start + (p != \"opacity\" ? prop.units || \"px\" : 0);\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\t/*=====\n\tvar __AnimArgs = declare(__FadeArgs, {\n\t\t// properties: Object?\n\t\t//\t\tA hash map of style properties to Objects describing the transition,\n\t\t//\t\tsuch as the properties of _Line with an additional 'units' property\n\t\tproperties: {}\n\n\t\t//TODOC: add event callbacks\n\t});\n\t=====*/\n\n\tbasefx.animateProperty = function(/*__AnimArgs*/ args){\n\t\t// summary:\n\t\t//\t\tReturns an animation that will transition the properties of\n\t\t//\t\tnode defined in `args` depending how they are defined in\n\t\t//\t\t`args.properties`\n\t\t//\n\t\t// description:\n\t\t//\t\tFoundation of most `dojo/_base/fx`\n\t\t//\t\tanimations. It takes an object of \"properties\" corresponding to\n\t\t//\t\tstyle properties, and animates them in parallel over a set\n\t\t//\t\tduration.\n\t\t//\n\t\t// example:\n\t\t//\t\tA simple animation that changes the width of the specified node.\n\t\t//\t|\tbasefx.animateProperty({\n\t\t//\t|\t\tnode: \"nodeId\",\n\t\t//\t|\t\tproperties: { width: 400 },\n\t\t//\t|\t}).play();\n\t\t//\t\tDojo figures out the start value for the width and converts the\n\t\t//\t\tinteger specified for the width to the more expressive but\n\t\t//\t\tverbose form `{ width: { end: '400', units: 'px' } }` which you\n\t\t//\t\tcan also specify directly. Defaults to 'px' if omitted.\n\t\t//\n\t\t// example:\n\t\t//\t\tAnimate width, height, and padding over 2 seconds... the\n\t\t//\t\tpedantic way:\n\t\t//\t|\tbasefx.animateProperty({ node: node, duration:2000,\n\t\t//\t|\t\tproperties: {\n\t\t//\t|\t\t\twidth: { start: '200', end: '400', units:\"px\" },\n\t\t//\t|\t\t\theight: { start:'200', end: '400', units:\"px\" },\n\t\t//\t|\t\t\tpaddingTop: { start:'5', end:'50', units:\"px\" }\n\t\t//\t|\t\t}\n\t\t//\t|\t}).play();\n\t\t//\t\tNote 'paddingTop' is used over 'padding-top'. Multi-name CSS properties\n\t\t//\t\tare written using \"mixed case\", as the hyphen is illegal as an object key.\n\t\t//\n\t\t// example:\n\t\t//\t\tPlug in a different easing function and register a callback for\n\t\t//\t\twhen the animation ends. Easing functions accept values between\n\t\t//\t\tzero and one and return a value on that basis. In this case, an\n\t\t//\t\texponential-in curve.\n\t\t//\t|\tbasefx.animateProperty({\n\t\t//\t|\t\tnode: \"nodeId\",\n\t\t//\t|\t\t// dojo figures out the start value\n\t\t//\t|\t\tproperties: { width: { end: 400 } },\n\t\t//\t|\t\teasing: function(n){\n\t\t//\t|\t\t\treturn (n==0) ? 0 : Math.pow(2, 10 * (n - 1));\n\t\t//\t|\t\t},\n\t\t//\t|\t\tonEnd: function(node){\n\t\t//\t|\t\t\t// called when the animation finishes. The animation\n\t\t//\t|\t\t\t// target is passed to this function\n\t\t//\t|\t\t}\n\t\t//\t|\t}).play(500); // delay playing half a second\n\t\t//\n\t\t// example:\n\t\t//\t\tLike all `Animation`s, animateProperty returns a handle to the\n\t\t//\t\tAnimation instance, which fires the events common to Dojo FX. Use `aspect.after`\n\t\t//\t\tto access these events outside of the Animation definition:\n\t\t//\t|\tvar anim = basefx.animateProperty({\n\t\t//\t|\t\tnode:\"someId\",\n\t\t//\t|\t\tproperties:{\n\t\t//\t|\t\t\twidth:400, height:500\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\taspect.after(anim, \"onEnd\", function(){\n\t\t//\t|\t\tconsole.log(\"animation ended\");\n\t\t//\t|\t}, true);\n\t\t//\t|\t// play the animation now:\n\t\t//\t|\tanim.play();\n\t\t//\n\t\t// example:\n\t\t//\t\tEach property can be a function whose return value is substituted along.\n\t\t//\t\tAdditionally, each measurement (eg: start, end) can be a function. The node\n\t\t//\t\treference is passed directly to callbacks.\n\t\t//\t|\tbasefx.animateProperty({\n\t\t//\t|\t\tnode:\"mine\",\n\t\t//\t|\t\tproperties:{\n\t\t//\t|\t\t\theight:function(node){\n\t\t//\t|\t\t\t\t// shrink this node by 50%\n\t\t//\t|\t\t\t\treturn domGeom.position(node).h / 2\n\t\t//\t|\t\t\t},\n\t\t//\t|\t\t\twidth:{\n\t\t//\t|\t\t\t\tstart:function(node){ return 100; },\n\t\t//\t|\t\t\t\tend:function(node){ return 200; }\n\t\t//\t|\t\t\t}\n\t\t//\t|\t\t}\n\t\t//\t|\t}).play();\n\t\t//\n\n\t\tvar n = args.node = dom.byId(args.node);\n\t\tif(!args.easing){ args.easing = dojo._defaultEasing; }\n\n\t\tvar anim = new Animation(args);\n\t\taspect.after(anim, \"beforeBegin\", lang.hitch(anim, function(){\n\t\t\tvar pm = {};\n\t\t\tfor(var p in this.properties){\n\t\t\t\t// Make shallow copy of properties into pm because we overwrite\n\t\t\t\t// some values below. In particular if start/end are functions\n\t\t\t\t// we don't want to overwrite them or the functions won't be\n\t\t\t\t// called if the animation is reused.\n\t\t\t\tif(p == \"width\" || p == \"height\"){\n\t\t\t\t\tthis.node.display = \"block\";\n\t\t\t\t}\n\t\t\t\tvar prop = this.properties[p];\n\t\t\t\tif(lang.isFunction(prop)){\n\t\t\t\t\tprop = prop(n);\n\t\t\t\t}\n\t\t\t\tprop = pm[p] = _mixin({}, (lang.isObject(prop) ? prop: { end: prop }));\n\n\t\t\t\tif(lang.isFunction(prop.start)){\n\t\t\t\t\tprop.start = prop.start(n);\n\t\t\t\t}\n\t\t\t\tif(lang.isFunction(prop.end)){\n\t\t\t\t\tprop.end = prop.end(n);\n\t\t\t\t}\n\t\t\t\tvar isColor = (p.toLowerCase().indexOf(\"color\") >= 0);\n\t\t\t\tfunction getStyle(node, p){\n\t\t\t\t\t// domStyle.get(node, \"height\") can return \"auto\" or \"\" on IE; this is more reliable:\n\t\t\t\t\tvar v = { height: node.offsetHeight, width: node.offsetWidth }[p];\n\t\t\t\t\tif(v !== undefined){ return v; }\n\t\t\t\t\tv = style.get(node, p);\n\t\t\t\t\treturn (p == \"opacity\") ? +v : (isColor ? v : parseFloat(v));\n\t\t\t\t}\n\t\t\t\tif(!(\"end\" in prop)){\n\t\t\t\t\tprop.end = getStyle(n, p);\n\t\t\t\t}else if(!(\"start\" in prop)){\n\t\t\t\t\tprop.start = getStyle(n, p);\n\t\t\t\t}\n\n\t\t\t\tif(isColor){\n\t\t\t\t\tprop.start = new Color(prop.start);\n\t\t\t\t\tprop.end = new Color(prop.end);\n\t\t\t\t}else{\n\t\t\t\t\tprop.start = (p == \"opacity\") ? +prop.start : parseFloat(prop.start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.curve = new PropLine(pm);\n\t\t}), true);\n\t\taspect.after(anim, \"onAnimate\", lang.hitch(style, \"set\", anim.node), true);\n\t\treturn anim; // Animation\n\t};\n\n\tbasefx.anim = function(\t/*DOMNode|String*/\tnode,\n\t\t\t\t\t\t\t/*Object*/\t\t\tproperties,\n\t\t\t\t\t\t\t/*Integer?*/\t\tduration,\n\t\t\t\t\t\t\t/*Function?*/\t\teasing,\n\t\t\t\t\t\t\t/*Function?*/\t\tonEnd,\n\t\t\t\t\t\t\t/*Integer?*/\t\tdelay){\n\t\t// summary:\n\t\t//\t\tA simpler interface to `animateProperty()`, also returns\n\t\t//\t\tan instance of `Animation` but begins the animation\n\t\t//\t\timmediately, unlike nearly every other Dojo animation API.\n\t\t// description:\n\t\t//\t\tSimpler (but somewhat less powerful) version\n\t\t//\t\tof `animateProperty`.  It uses defaults for many basic properties\n\t\t//\t\tand allows for positional parameters to be used in place of the\n\t\t//\t\tpacked \"property bag\" which is used for other Dojo animation\n\t\t//\t\tmethods.\n\t\t//\n\t\t//\t\tThe `Animation` object returned will be already playing, so\n\t\t//\t\tcalling play() on it again is (usually) a no-op.\n\t\t// node:\n\t\t//\t\ta DOM node or the id of a node to animate CSS properties on\n\t\t// duration:\n\t\t//\t\tThe number of milliseconds over which the animation\n\t\t//\t\tshould run. Defaults to the global animation default duration\n\t\t//\t\t(350ms).\n\t\t// easing:\n\t\t//\t\tAn easing function over which to calculate acceleration\n\t\t//\t\tand deceleration of the animation through its duration.\n\t\t//\t\tA default easing algorithm is provided, but you may\n\t\t//\t\tplug in any you wish. A large selection of easing algorithms\n\t\t//\t\tare available in `dojo/fx/easing`.\n\t\t// onEnd:\n\t\t//\t\tA function to be called when the animation finishes\n\t\t//\t\trunning.\n\t\t// delay:\n\t\t//\t\tThe number of milliseconds to delay beginning the\n\t\t//\t\tanimation by. The default is 0.\n\t\t// example:\n\t\t//\t\tFade out a node\n\t\t//\t|\tbasefx.anim(\"id\", { opacity: 0 });\n\t\t// example:\n\t\t//\t\tFade out a node over a full second\n\t\t//\t|\tbasefx.anim(\"id\", { opacity: 0 }, 1000);\n\t\treturn basefx.animateProperty({ // Animation\n\t\t\tnode: node,\n\t\t\tduration: duration || Animation.prototype.duration,\n\t\t\tproperties: properties,\n\t\t\teasing: easing,\n\t\t\tonEnd: onEnd\n\t\t}).play(delay || 0);\n\t};\n\n\n\tif(has(\"extend-dojo\")){\n\t\t_mixin(dojo, basefx);\n\t\t// Alias to drop come 2.0:\n\t\tdojo._Animation = Animation;\n\t}\n\n\treturn basefx;\n});\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isDirective } from './directive.js';\nimport { removeNodes } from './dom.js';\nimport { noChange, nothing } from './part.js';\nimport { TemplateInstance } from './template-instance.js';\nimport { TemplateResult } from './template-result.js';\nimport { createMarker } from './template.js';\nexport const isPrimitive = (value) => {\n    return (value === null ||\n        !(typeof value === 'object' || typeof value === 'function'));\n};\nexport const isIterable = (value) => {\n    return Array.isArray(value) ||\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        !!(value && value[Symbol.iterator]);\n};\n/**\n * Writes attribute values to the DOM for a group of AttributeParts bound to a\n * single attribute. The value is only set once even if there are multiple parts\n * for an attribute.\n */\nexport class AttributeCommitter {\n    constructor(element, name, strings) {\n        this.dirty = true;\n        this.element = element;\n        this.name = name;\n        this.strings = strings;\n        this.parts = [];\n        for (let i = 0; i < strings.length - 1; i++) {\n            this.parts[i] = this._createPart();\n        }\n    }\n    /**\n     * Creates a single part. Override this to create a differnt type of part.\n     */\n    _createPart() {\n        return new AttributePart(this);\n    }\n    _getValue() {\n        const strings = this.strings;\n        const l = strings.length - 1;\n        const parts = this.parts;\n        // If we're assigning an attribute via syntax like:\n        //    attr=\"${foo}\"  or  attr=${foo}\n        // but not\n        //    attr=\"${foo} ${bar}\" or attr=\"${foo} baz\"\n        // then we don't want to coerce the attribute value into one long\n        // string. Instead we want to just return the value itself directly,\n        // so that sanitizeDOMValue can get the actual value rather than\n        // String(value)\n        // The exception is if v is an array, in which case we do want to smash\n        // it together into a string without calling String() on the array.\n        //\n        // This also allows trusted values (when using TrustedTypes) being\n        // assigned to DOM sinks without being stringified in the process.\n        if (l === 1 && strings[0] === '' && strings[1] === '') {\n            const v = parts[0].value;\n            if (typeof v === 'symbol') {\n                return String(v);\n            }\n            if (typeof v === 'string' || !isIterable(v)) {\n                return v;\n            }\n        }\n        let text = '';\n        for (let i = 0; i < l; i++) {\n            text += strings[i];\n            const part = parts[i];\n            if (part !== undefined) {\n                const v = part.value;\n                if (isPrimitive(v) || !isIterable(v)) {\n                    text += typeof v === 'string' ? v : String(v);\n                }\n                else {\n                    for (const t of v) {\n                        text += typeof t === 'string' ? t : String(t);\n                    }\n                }\n            }\n        }\n        text += strings[l];\n        return text;\n    }\n    commit() {\n        if (this.dirty) {\n            this.dirty = false;\n            this.element.setAttribute(this.name, this._getValue());\n        }\n    }\n}\n/**\n * A Part that controls all or part of an attribute value.\n */\nexport class AttributePart {\n    constructor(committer) {\n        this.value = undefined;\n        this.committer = committer;\n    }\n    setValue(value) {\n        if (value !== noChange && (!isPrimitive(value) || value !== this.value)) {\n            this.value = value;\n            // If the value is a not a directive, dirty the committer so that it'll\n            // call setAttribute. If the value is a directive, it'll dirty the\n            // committer if it calls setValue().\n            if (!isDirective(value)) {\n                this.committer.dirty = true;\n            }\n        }\n    }\n    commit() {\n        while (isDirective(this.value)) {\n            const directive = this.value;\n            this.value = noChange;\n            directive(this);\n        }\n        if (this.value === noChange) {\n            return;\n        }\n        this.committer.commit();\n    }\n}\n/**\n * A Part that controls a location within a Node tree. Like a Range, NodePart\n * has start and end locations and can set and update the Nodes between those\n * locations.\n *\n * NodeParts support several value types: primitives, Nodes, TemplateResults,\n * as well as arrays and iterables of those types.\n */\nexport class NodePart {\n    constructor(options) {\n        this.value = undefined;\n        this.__pendingValue = undefined;\n        this.options = options;\n    }\n    /**\n     * Appends this part into a container.\n     *\n     * This part must be empty, as its contents are not automatically moved.\n     */\n    appendInto(container) {\n        this.startNode = container.appendChild(createMarker());\n        this.endNode = container.appendChild(createMarker());\n    }\n    /**\n     * Inserts this part after the `ref` node (between `ref` and `ref`'s next\n     * sibling). Both `ref` and its next sibling must be static, unchanging nodes\n     * such as those that appear in a literal section of a template.\n     *\n     * This part must be empty, as its contents are not automatically moved.\n     */\n    insertAfterNode(ref) {\n        this.startNode = ref;\n        this.endNode = ref.nextSibling;\n    }\n    /**\n     * Appends this part into a parent part.\n     *\n     * This part must be empty, as its contents are not automatically moved.\n     */\n    appendIntoPart(part) {\n        part.__insert(this.startNode = createMarker());\n        part.__insert(this.endNode = createMarker());\n    }\n    /**\n     * Inserts this part after the `ref` part.\n     *\n     * This part must be empty, as its contents are not automatically moved.\n     */\n    insertAfterPart(ref) {\n        ref.__insert(this.startNode = createMarker());\n        this.endNode = ref.endNode;\n        ref.endNode = this.startNode;\n    }\n    setValue(value) {\n        this.__pendingValue = value;\n    }\n    commit() {\n        if (this.startNode.parentNode === null) {\n            return;\n        }\n        while (isDirective(this.__pendingValue)) {\n            const directive = this.__pendingValue;\n            this.__pendingValue = noChange;\n            directive(this);\n        }\n        const value = this.__pendingValue;\n        if (value === noChange) {\n            return;\n        }\n        if (isPrimitive(value)) {\n            if (value !== this.value) {\n                this.__commitText(value);\n            }\n        }\n        else if (value instanceof TemplateResult) {\n            this.__commitTemplateResult(value);\n        }\n        else if (value instanceof Node) {\n            this.__commitNode(value);\n        }\n        else if (isIterable(value)) {\n            this.__commitIterable(value);\n        }\n        else if (value === nothing) {\n            this.value = nothing;\n            this.clear();\n        }\n        else {\n            // Fallback, will render the string representation\n            this.__commitText(value);\n        }\n    }\n    __insert(node) {\n        this.endNode.parentNode.insertBefore(node, this.endNode);\n    }\n    __commitNode(value) {\n        if (this.value === value) {\n            return;\n        }\n        this.clear();\n        this.__insert(value);\n        this.value = value;\n    }\n    __commitText(value) {\n        const node = this.startNode.nextSibling;\n        value = value == null ? '' : value;\n        // If `value` isn't already a string, we explicitly convert it here in case\n        // it can't be implicitly converted - i.e. it's a symbol.\n        const valueAsString = typeof value === 'string' ? value : String(value);\n        if (node === this.endNode.previousSibling &&\n            node.nodeType === 3 /* Node.TEXT_NODE */) {\n            // If we only have a single text node between the markers, we can just\n            // set its value, rather than replacing it.\n            // TODO(justinfagnani): Can we just check if this.value is primitive?\n            node.data = valueAsString;\n        }\n        else {\n            this.__commitNode(document.createTextNode(valueAsString));\n        }\n        this.value = value;\n    }\n    __commitTemplateResult(value) {\n        const template = this.options.templateFactory(value);\n        if (this.value instanceof TemplateInstance &&\n            this.value.template === template) {\n            this.value.update(value.values);\n        }\n        else {\n            // Make sure we propagate the template processor from the TemplateResult\n            // so that we use its syntax extension, etc. The template factory comes\n            // from the render function options so that it can control template\n            // caching and preprocessing.\n            const instance = new TemplateInstance(template, value.processor, this.options);\n            const fragment = instance._clone();\n            instance.update(value.values);\n            this.__commitNode(fragment);\n            this.value = instance;\n        }\n    }\n    __commitIterable(value) {\n        // For an Iterable, we create a new InstancePart per item, then set its\n        // value to the item. This is a little bit of overhead for every item in\n        // an Iterable, but it lets us recurse easily and efficiently update Arrays\n        // of TemplateResults that will be commonly returned from expressions like:\n        // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n        // If _value is an array, then the previous render was of an\n        // iterable and _value will contain the NodeParts from the previous\n        // render. If _value is not an array, clear this part and make a new\n        // array for NodeParts.\n        if (!Array.isArray(this.value)) {\n            this.value = [];\n            this.clear();\n        }\n        // Lets us keep track of how many items we stamped so we can clear leftover\n        // items from a previous render\n        const itemParts = this.value;\n        let partIndex = 0;\n        let itemPart;\n        for (const item of value) {\n            // Try to reuse an existing part\n            itemPart = itemParts[partIndex];\n            // If no existing part, create a new one\n            if (itemPart === undefined) {\n                itemPart = new NodePart(this.options);\n                itemParts.push(itemPart);\n                if (partIndex === 0) {\n                    itemPart.appendIntoPart(this);\n                }\n                else {\n                    itemPart.insertAfterPart(itemParts[partIndex - 1]);\n                }\n            }\n            itemPart.setValue(item);\n            itemPart.commit();\n            partIndex++;\n        }\n        if (partIndex < itemParts.length) {\n            // Truncate the parts array so _value reflects the current state\n            itemParts.length = partIndex;\n            this.clear(itemPart && itemPart.endNode);\n        }\n    }\n    clear(startNode = this.startNode) {\n        removeNodes(this.startNode.parentNode, startNode.nextSibling, this.endNode);\n    }\n}\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nexport class BooleanAttributePart {\n    constructor(element, name, strings) {\n        this.value = undefined;\n        this.__pendingValue = undefined;\n        if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n            throw new Error('Boolean attributes can only contain a single expression');\n        }\n        this.element = element;\n        this.name = name;\n        this.strings = strings;\n    }\n    setValue(value) {\n        this.__pendingValue = value;\n    }\n    commit() {\n        while (isDirective(this.__pendingValue)) {\n            const directive = this.__pendingValue;\n            this.__pendingValue = noChange;\n            directive(this);\n        }\n        if (this.__pendingValue === noChange) {\n            return;\n        }\n        const value = !!this.__pendingValue;\n        if (this.value !== value) {\n            if (value) {\n                this.element.setAttribute(this.name, '');\n            }\n            else {\n                this.element.removeAttribute(this.name);\n            }\n            this.value = value;\n        }\n        this.__pendingValue = noChange;\n    }\n}\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nexport class PropertyCommitter extends AttributeCommitter {\n    constructor(element, name, strings) {\n        super(element, name, strings);\n        this.single =\n            (strings.length === 2 && strings[0] === '' && strings[1] === '');\n    }\n    _createPart() {\n        return new PropertyPart(this);\n    }\n    _getValue() {\n        if (this.single) {\n            return this.parts[0].value;\n        }\n        return super._getValue();\n    }\n    commit() {\n        if (this.dirty) {\n            this.dirty = false;\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            this.element[this.name] = this._getValue();\n        }\n    }\n}\nexport class PropertyPart extends AttributePart {\n}\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the third\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\n// Wrap into an IIFE because MS Edge <= v41 does not support having try/catch\n// blocks right into the body of a module\n(() => {\n    try {\n        const options = {\n            get capture() {\n                eventOptionsSupported = true;\n                return false;\n            }\n        };\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        window.addEventListener('test', options, options);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        window.removeEventListener('test', options, options);\n    }\n    catch (_e) {\n        // event options not supported\n    }\n})();\nexport class EventPart {\n    constructor(element, eventName, eventContext) {\n        this.value = undefined;\n        this.__pendingValue = undefined;\n        this.element = element;\n        this.eventName = eventName;\n        this.eventContext = eventContext;\n        this.__boundHandleEvent = (e) => this.handleEvent(e);\n    }\n    setValue(value) {\n        this.__pendingValue = value;\n    }\n    commit() {\n        while (isDirective(this.__pendingValue)) {\n            const directive = this.__pendingValue;\n            this.__pendingValue = noChange;\n            directive(this);\n        }\n        if (this.__pendingValue === noChange) {\n            return;\n        }\n        const newListener = this.__pendingValue;\n        const oldListener = this.value;\n        const shouldRemoveListener = newListener == null ||\n            oldListener != null &&\n                (newListener.capture !== oldListener.capture ||\n                    newListener.once !== oldListener.once ||\n                    newListener.passive !== oldListener.passive);\n        const shouldAddListener = newListener != null && (oldListener == null || shouldRemoveListener);\n        if (shouldRemoveListener) {\n            this.element.removeEventListener(this.eventName, this.__boundHandleEvent, this.__options);\n        }\n        if (shouldAddListener) {\n            this.__options = getOptions(newListener);\n            this.element.addEventListener(this.eventName, this.__boundHandleEvent, this.__options);\n        }\n        this.value = newListener;\n        this.__pendingValue = noChange;\n    }\n    handleEvent(event) {\n        if (typeof this.value === 'function') {\n            this.value.call(this.eventContext || this.element, event);\n        }\n        else {\n            this.value.handleEvent(event);\n        }\n    }\n}\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o) => o &&\n    (eventOptionsSupported ?\n        { capture: o.capture, passive: o.passive, once: o.once } :\n        o.capture);\n//# sourceMappingURL=parts.js.map","/**\n * @module ol/style/Text\n */\nimport Fill from './Fill.js';\nimport TextPlacement from './TextPlacement.js';\nimport { toSize } from '../size.js';\n/**\n * The default fill color to use if no fill was set at construction time; a\n * blackish `#333`.\n *\n * @const {string}\n */\nvar DEFAULT_FILL_COLOR = '#333';\n/**\n * @typedef {Object} Options\n * @property {string} [font] Font style as CSS 'font' value, see:\n * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font. Default is '10px sans-serif'\n * @property {number} [maxAngle=Math.PI/4] When `placement` is set to `'line'`, allow a maximum angle between adjacent characters.\n * The expected value is in radians, and the default is 45° (`Math.PI / 4`).\n * @property {number} [offsetX=0] Horizontal text offset in pixels. A positive will shift the text right.\n * @property {number} [offsetY=0] Vertical text offset in pixels. A positive will shift the text down.\n * @property {boolean} [overflow=false] For polygon labels or when `placement` is set to `'line'`, allow text to exceed\n * the width of the polygon at the label position or the length of the path that it follows.\n * @property {import(\"./TextPlacement.js\").default|string} [placement='point'] Text placement.\n * @property {number|import(\"../size.js\").Size} [scale] Scale.\n * @property {boolean} [rotateWithView=false] Whether to rotate the text with the view.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {string} [text] Text content.\n * @property {string} [textAlign] Text alignment. Possible values: 'left', 'right', 'center', 'end' or 'start'.\n * Default is 'center' for `placement: 'point'`. For `placement: 'line'`, the default is to let the renderer choose a\n * placement where `maxAngle` is not exceeded.\n * @property {string} [textBaseline='middle'] Text base line. Possible values: 'bottom', 'top', 'middle', 'alphabetic',\n * 'hanging', 'ideographic'.\n * @property {import(\"./Fill.js\").default} [fill] Fill style. If none is provided, we'll use a dark fill-style (#333).\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {import(\"./Fill.js\").default} [backgroundFill] Fill style for the text background when `placement` is\n * `'point'`. Default is no fill.\n * @property {import(\"./Stroke.js\").default} [backgroundStroke] Stroke style for the text background  when `placement`\n * is `'point'`. Default is no stroke.\n * @property {Array<number>} [padding=[0, 0, 0, 0]] Padding in pixels around the text for decluttering and background. The order of\n * values in the array is `[top, right, bottom, left]`.\n */\n/**\n * @classdesc\n * Set text style for vector features.\n * @api\n */\nvar Text = /** @class */ (function () {\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function Text(opt_options) {\n        var options = opt_options || {};\n        /**\n         * @private\n         * @type {string|undefined}\n         */\n        this.font_ = options.font;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        this.rotation_ = options.rotation;\n        /**\n         * @private\n         * @type {boolean|undefined}\n         */\n        this.rotateWithView_ = options.rotateWithView;\n        /**\n         * @private\n         * @type {number|import(\"../size.js\").Size|undefined}\n         */\n        this.scale_ = options.scale;\n        /**\n         * @private\n         * @type {import(\"../size.js\").Size}\n         */\n        this.scaleArray_ = toSize(options.scale !== undefined ? options.scale : 1);\n        /**\n         * @private\n         * @type {string|undefined}\n         */\n        this.text_ = options.text;\n        /**\n         * @private\n         * @type {string|undefined}\n         */\n        this.textAlign_ = options.textAlign;\n        /**\n         * @private\n         * @type {string|undefined}\n         */\n        this.textBaseline_ = options.textBaseline;\n        /**\n         * @private\n         * @type {import(\"./Fill.js\").default}\n         */\n        this.fill_ =\n            options.fill !== undefined\n                ? options.fill\n                : new Fill({ color: DEFAULT_FILL_COLOR });\n        /**\n         * @private\n         * @type {number}\n         */\n        this.maxAngle_ =\n            options.maxAngle !== undefined ? options.maxAngle : Math.PI / 4;\n        /**\n         * @private\n         * @type {import(\"./TextPlacement.js\").default|string}\n         */\n        this.placement_ =\n            options.placement !== undefined ? options.placement : TextPlacement.POINT;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        this.overflow_ = !!options.overflow;\n        /**\n         * @private\n         * @type {import(\"./Stroke.js\").default}\n         */\n        this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.offsetX_ = options.offsetX !== undefined ? options.offsetX : 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.offsetY_ = options.offsetY !== undefined ? options.offsetY : 0;\n        /**\n         * @private\n         * @type {import(\"./Fill.js\").default}\n         */\n        this.backgroundFill_ = options.backgroundFill\n            ? options.backgroundFill\n            : null;\n        /**\n         * @private\n         * @type {import(\"./Stroke.js\").default}\n         */\n        this.backgroundStroke_ = options.backgroundStroke\n            ? options.backgroundStroke\n            : null;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        this.padding_ = options.padding === undefined ? null : options.padding;\n    }\n    /**\n     * Clones the style.\n     * @return {Text} The cloned style.\n     * @api\n     */\n    Text.prototype.clone = function () {\n        var scale = this.getScale();\n        return new Text({\n            font: this.getFont(),\n            placement: this.getPlacement(),\n            maxAngle: this.getMaxAngle(),\n            overflow: this.getOverflow(),\n            rotation: this.getRotation(),\n            rotateWithView: this.getRotateWithView(),\n            scale: Array.isArray(scale) ? scale.slice() : scale,\n            text: this.getText(),\n            textAlign: this.getTextAlign(),\n            textBaseline: this.getTextBaseline(),\n            fill: this.getFill() ? this.getFill().clone() : undefined,\n            stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n            offsetX: this.getOffsetX(),\n            offsetY: this.getOffsetY(),\n            backgroundFill: this.getBackgroundFill()\n                ? this.getBackgroundFill().clone()\n                : undefined,\n            backgroundStroke: this.getBackgroundStroke()\n                ? this.getBackgroundStroke().clone()\n                : undefined,\n            padding: this.getPadding(),\n        });\n    };\n    /**\n     * Get the `overflow` configuration.\n     * @return {boolean} Let text overflow the length of the path they follow.\n     * @api\n     */\n    Text.prototype.getOverflow = function () {\n        return this.overflow_;\n    };\n    /**\n     * Get the font name.\n     * @return {string|undefined} Font.\n     * @api\n     */\n    Text.prototype.getFont = function () {\n        return this.font_;\n    };\n    /**\n     * Get the maximum angle between adjacent characters.\n     * @return {number} Angle in radians.\n     * @api\n     */\n    Text.prototype.getMaxAngle = function () {\n        return this.maxAngle_;\n    };\n    /**\n     * Get the label placement.\n     * @return {import(\"./TextPlacement.js\").default|string} Text placement.\n     * @api\n     */\n    Text.prototype.getPlacement = function () {\n        return this.placement_;\n    };\n    /**\n     * Get the x-offset for the text.\n     * @return {number} Horizontal text offset.\n     * @api\n     */\n    Text.prototype.getOffsetX = function () {\n        return this.offsetX_;\n    };\n    /**\n     * Get the y-offset for the text.\n     * @return {number} Vertical text offset.\n     * @api\n     */\n    Text.prototype.getOffsetY = function () {\n        return this.offsetY_;\n    };\n    /**\n     * Get the fill style for the text.\n     * @return {import(\"./Fill.js\").default} Fill style.\n     * @api\n     */\n    Text.prototype.getFill = function () {\n        return this.fill_;\n    };\n    /**\n     * Determine whether the text rotates with the map.\n     * @return {boolean|undefined} Rotate with map.\n     * @api\n     */\n    Text.prototype.getRotateWithView = function () {\n        return this.rotateWithView_;\n    };\n    /**\n     * Get the text rotation.\n     * @return {number|undefined} Rotation.\n     * @api\n     */\n    Text.prototype.getRotation = function () {\n        return this.rotation_;\n    };\n    /**\n     * Get the text scale.\n     * @return {number|import(\"../size.js\").Size|undefined} Scale.\n     * @api\n     */\n    Text.prototype.getScale = function () {\n        return this.scale_;\n    };\n    /**\n     * Get the symbolizer scale array.\n     * @return {import(\"../size.js\").Size} Scale array.\n     */\n    Text.prototype.getScaleArray = function () {\n        return this.scaleArray_;\n    };\n    /**\n     * Get the stroke style for the text.\n     * @return {import(\"./Stroke.js\").default} Stroke style.\n     * @api\n     */\n    Text.prototype.getStroke = function () {\n        return this.stroke_;\n    };\n    /**\n     * Get the text to be rendered.\n     * @return {string|undefined} Text.\n     * @api\n     */\n    Text.prototype.getText = function () {\n        return this.text_;\n    };\n    /**\n     * Get the text alignment.\n     * @return {string|undefined} Text align.\n     * @api\n     */\n    Text.prototype.getTextAlign = function () {\n        return this.textAlign_;\n    };\n    /**\n     * Get the text baseline.\n     * @return {string|undefined} Text baseline.\n     * @api\n     */\n    Text.prototype.getTextBaseline = function () {\n        return this.textBaseline_;\n    };\n    /**\n     * Get the background fill style for the text.\n     * @return {import(\"./Fill.js\").default} Fill style.\n     * @api\n     */\n    Text.prototype.getBackgroundFill = function () {\n        return this.backgroundFill_;\n    };\n    /**\n     * Get the background stroke style for the text.\n     * @return {import(\"./Stroke.js\").default} Stroke style.\n     * @api\n     */\n    Text.prototype.getBackgroundStroke = function () {\n        return this.backgroundStroke_;\n    };\n    /**\n     * Get the padding for the text.\n     * @return {Array<number>} Padding.\n     * @api\n     */\n    Text.prototype.getPadding = function () {\n        return this.padding_;\n    };\n    /**\n     * Set the `overflow` property.\n     *\n     * @param {boolean} overflow Let text overflow the path that it follows.\n     * @api\n     */\n    Text.prototype.setOverflow = function (overflow) {\n        this.overflow_ = overflow;\n    };\n    /**\n     * Set the font.\n     *\n     * @param {string|undefined} font Font.\n     * @api\n     */\n    Text.prototype.setFont = function (font) {\n        this.font_ = font;\n    };\n    /**\n     * Set the maximum angle between adjacent characters.\n     *\n     * @param {number} maxAngle Angle in radians.\n     * @api\n     */\n    Text.prototype.setMaxAngle = function (maxAngle) {\n        this.maxAngle_ = maxAngle;\n    };\n    /**\n     * Set the x offset.\n     *\n     * @param {number} offsetX Horizontal text offset.\n     * @api\n     */\n    Text.prototype.setOffsetX = function (offsetX) {\n        this.offsetX_ = offsetX;\n    };\n    /**\n     * Set the y offset.\n     *\n     * @param {number} offsetY Vertical text offset.\n     * @api\n     */\n    Text.prototype.setOffsetY = function (offsetY) {\n        this.offsetY_ = offsetY;\n    };\n    /**\n     * Set the text placement.\n     *\n     * @param {import(\"./TextPlacement.js\").default|string} placement Placement.\n     * @api\n     */\n    Text.prototype.setPlacement = function (placement) {\n        this.placement_ = placement;\n    };\n    /**\n     * Set whether to rotate the text with the view.\n     *\n     * @param {boolean} rotateWithView Rotate with map.\n     * @api\n     */\n    Text.prototype.setRotateWithView = function (rotateWithView) {\n        this.rotateWithView_ = rotateWithView;\n    };\n    /**\n     * Set the fill.\n     *\n     * @param {import(\"./Fill.js\").default} fill Fill style.\n     * @api\n     */\n    Text.prototype.setFill = function (fill) {\n        this.fill_ = fill;\n    };\n    /**\n     * Set the rotation.\n     *\n     * @param {number|undefined} rotation Rotation.\n     * @api\n     */\n    Text.prototype.setRotation = function (rotation) {\n        this.rotation_ = rotation;\n    };\n    /**\n     * Set the scale.\n     *\n     * @param {number|import(\"../size.js\").Size|undefined} scale Scale.\n     * @api\n     */\n    Text.prototype.setScale = function (scale) {\n        this.scale_ = scale;\n        this.scaleArray_ = toSize(scale !== undefined ? scale : 1);\n    };\n    /**\n     * Set the stroke.\n     *\n     * @param {import(\"./Stroke.js\").default} stroke Stroke style.\n     * @api\n     */\n    Text.prototype.setStroke = function (stroke) {\n        this.stroke_ = stroke;\n    };\n    /**\n     * Set the text.\n     *\n     * @param {string|undefined} text Text.\n     * @api\n     */\n    Text.prototype.setText = function (text) {\n        this.text_ = text;\n    };\n    /**\n     * Set the text alignment.\n     *\n     * @param {string|undefined} textAlign Text align.\n     * @api\n     */\n    Text.prototype.setTextAlign = function (textAlign) {\n        this.textAlign_ = textAlign;\n    };\n    /**\n     * Set the text baseline.\n     *\n     * @param {string|undefined} textBaseline Text baseline.\n     * @api\n     */\n    Text.prototype.setTextBaseline = function (textBaseline) {\n        this.textBaseline_ = textBaseline;\n    };\n    /**\n     * Set the background fill.\n     *\n     * @param {import(\"./Fill.js\").default} fill Fill style.\n     * @api\n     */\n    Text.prototype.setBackgroundFill = function (fill) {\n        this.backgroundFill_ = fill;\n    };\n    /**\n     * Set the background stroke.\n     *\n     * @param {import(\"./Stroke.js\").default} stroke Stroke style.\n     * @api\n     */\n    Text.prototype.setBackgroundStroke = function (stroke) {\n        this.backgroundStroke_ = stroke;\n    };\n    /**\n     * Set the padding (`[top, right, bottom, left]`).\n     *\n     * @param {!Array<number>} padding Padding.\n     * @api\n     */\n    Text.prototype.setPadding = function (padding) {\n        this.padding_ = padding;\n    };\n    return Text;\n}());\nexport default Text;\n//# sourceMappingURL=Text.js.map","/**\n * @module ol/coordinate\n */\nimport { getWidth } from './extent.js';\nimport { modulo } from './math.js';\nimport { padNumber } from './string.js';\n/**\n * An array of numbers representing an xy coordinate. Example: `[16, 48]`.\n * @typedef {Array<number>} Coordinate\n * @api\n */\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n *     import {add} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     add(coord, [-2, 4]);\n *     // coord is now [5.85, 51.983333]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {Coordinate} delta Delta.\n * @return {Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nexport function add(coordinate, delta) {\n    coordinate[0] += +delta[0];\n    coordinate[1] += +delta[1];\n    return coordinate;\n}\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {import(\"./geom/Circle.js\").default} circle The circle.\n * @return {Coordinate} Closest point on the circumference.\n */\nexport function closestOnCircle(coordinate, circle) {\n    var r = circle.getRadius();\n    var center = circle.getCenter();\n    var x0 = center[0];\n    var y0 = center[1];\n    var x1 = coordinate[0];\n    var y1 = coordinate[1];\n    var dx = x1 - x0;\n    var dy = y1 - y0;\n    if (dx === 0 && dy === 0) {\n        dx = 1;\n    }\n    var d = Math.sqrt(dx * dx + dy * dy);\n    var x = x0 + (r * dx) / d;\n    var y = y0 + (r * dy) / d;\n    return [x, y];\n}\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {Array<Coordinate>} segment The two coordinates\n * of the segment.\n * @return {Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nexport function closestOnSegment(coordinate, segment) {\n    var x0 = coordinate[0];\n    var y0 = coordinate[1];\n    var start = segment[0];\n    var end = segment[1];\n    var x1 = start[0];\n    var y1 = start[1];\n    var x2 = end[0];\n    var y2 = end[1];\n    var dx = x2 - x1;\n    var dy = y2 - y1;\n    var along = dx === 0 && dy === 0\n        ? 0\n        : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);\n    var x, y;\n    if (along <= 0) {\n        x = x1;\n        y = y1;\n    }\n    else if (along >= 1) {\n        x = x2;\n        y = y2;\n    }\n    else {\n        x = x1 + along * dx;\n        y = y1 + along * dy;\n    }\n    return [x, y];\n}\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n *     import {createStringXY} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     var stringifyFunc = createStringXY();\n *     var out = stringifyFunc(coord);\n *     // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n *     import {createStringXY} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     var stringifyFunc = createStringXY(2);\n *     var out = stringifyFunc(coord);\n *     // out is now '7.85, 47.98'\n *\n * @param {number=} opt_fractionDigits The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {CoordinateFormat} Coordinate format.\n * @api\n */\nexport function createStringXY(opt_fractionDigits) {\n    return (\n    /**\n     * @param {Coordinate} coordinate Coordinate.\n     * @return {string} String XY.\n     */\n    function (coordinate) {\n        return toStringXY(coordinate, opt_fractionDigits);\n    });\n}\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number=} opt_fractionDigits The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} String.\n */\nexport function degreesToStringHDMS(hemispheres, degrees, opt_fractionDigits) {\n    var normalizedDegrees = modulo(degrees + 180, 360) - 180;\n    var x = Math.abs(3600 * normalizedDegrees);\n    var dflPrecision = opt_fractionDigits || 0;\n    var precision = Math.pow(10, dflPrecision);\n    var deg = Math.floor(x / 3600);\n    var min = Math.floor((x - deg * 3600) / 60);\n    var sec = x - deg * 3600 - min * 60;\n    sec = Math.ceil(sec * precision) / precision;\n    if (sec >= 60) {\n        sec = 0;\n        min += 1;\n    }\n    if (min >= 60) {\n        min = 0;\n        deg += 1;\n    }\n    return (deg +\n        '\\u00b0 ' +\n        padNumber(min, 2) +\n        '\\u2032 ' +\n        padNumber(sec, 2, dflPrecision) +\n        '\\u2033' +\n        (normalizedDegrees == 0\n            ? ''\n            : ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0)));\n}\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n *     import {format} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     var template = 'Coordinate is ({x}|{y}).';\n *     var out = format(coord, template);\n *     // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n *     import {format} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     var template = 'Coordinate is ({x}|{y}).';\n *     var out = format(coord, template, 2);\n *     // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n *     that will be replaced by first and second coordinate values.\n * @param {number=} opt_fractionDigits The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nexport function format(coordinate, template, opt_fractionDigits) {\n    if (coordinate) {\n        return template\n            .replace('{x}', coordinate[0].toFixed(opt_fractionDigits))\n            .replace('{y}', coordinate[1].toFixed(opt_fractionDigits));\n    }\n    else {\n        return '';\n    }\n}\n/**\n * @param {Coordinate} coordinate1 First coordinate.\n * @param {Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nexport function equals(coordinate1, coordinate2) {\n    var equals = true;\n    for (var i = coordinate1.length - 1; i >= 0; --i) {\n        if (coordinate1[i] != coordinate2[i]) {\n            equals = false;\n            break;\n        }\n    }\n    return equals;\n}\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n *     import {rotate} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     var rotateRadians = Math.PI / 2; // 90 degrees\n *     rotate(coord, rotateRadians);\n *     // coord is now [-47.983333, 7.85]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {Coordinate} Coordinate.\n * @api\n */\nexport function rotate(coordinate, angle) {\n    var cosAngle = Math.cos(angle);\n    var sinAngle = Math.sin(angle);\n    var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n    var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n    coordinate[0] = x;\n    coordinate[1] = y;\n    return coordinate;\n}\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n *     import {scale as scaleCoordinate} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     var scale = 1.2;\n *     scaleCoordinate(coord, scale);\n *     // coord is now [9.42, 57.5799996]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {Coordinate} Coordinate.\n */\nexport function scale(coordinate, scale) {\n    coordinate[0] *= scale;\n    coordinate[1] *= scale;\n    return coordinate;\n}\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nexport function squaredDistance(coord1, coord2) {\n    var dx = coord1[0] - coord2[0];\n    var dy = coord1[1] - coord2[1];\n    return dx * dx + dy * dy;\n}\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nexport function distance(coord1, coord2) {\n    return Math.sqrt(squaredDistance(coord1, coord2));\n}\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {Coordinate} coordinate Coordinate of the point.\n * @param {Array<Coordinate>} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nexport function squaredDistanceToSegment(coordinate, segment) {\n    return squaredDistance(coordinate, closestOnSegment(coordinate, segment));\n}\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n *     import {toStringHDMS} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     var out = toStringHDMS(coord);\n *     // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n *     import {toStringHDMS} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     var out = toStringHDMS(coord, 1);\n *     // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number=} opt_fractionDigits The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nexport function toStringHDMS(coordinate, opt_fractionDigits) {\n    if (coordinate) {\n        return (degreesToStringHDMS('NS', coordinate[1], opt_fractionDigits) +\n            ' ' +\n            degreesToStringHDMS('EW', coordinate[0], opt_fractionDigits));\n    }\n    else {\n        return '';\n    }\n}\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n *     import {toStringXY} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     var out = toStringXY(coord);\n *     // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n *     import {toStringXY} from 'ol/coordinate';\n *\n *     var coord = [7.85, 47.983333];\n *     var out = toStringXY(coord, 1);\n *     // out is now '7.8, 48.0'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number=} opt_fractionDigits The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nexport function toStringXY(coordinate, opt_fractionDigits) {\n    return format(coordinate, '{x}, {y}', opt_fractionDigits);\n}\n/**\n * Modifies the provided coordinate in-place to be within the real world\n * extent. The lower projection extent boundary is inclusive, the upper one\n * exclusive.\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {Coordinate} The coordinate within the real world extent.\n */\nexport function wrapX(coordinate, projection) {\n    if (projection.canWrapX()) {\n        var worldWidth = getWidth(projection.getExtent());\n        var worldsAway = getWorldsAway(coordinate, projection, worldWidth);\n        if (worldsAway) {\n            coordinate[0] -= worldsAway * worldWidth;\n        }\n    }\n    return coordinate;\n}\n/**\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {number=} opt_sourceExtentWidth Width of the source extent.\n * @return {number} Offset in world widths.\n */\nexport function getWorldsAway(coordinate, projection, opt_sourceExtentWidth) {\n    var projectionExtent = projection.getExtent();\n    var worldsAway = 0;\n    if (projection.canWrapX() &&\n        (coordinate[0] < projectionExtent[0] || coordinate[0] > projectionExtent[2])) {\n        var sourceExtentWidth = opt_sourceExtentWidth || getWidth(projectionExtent);\n        worldsAway = Math.floor((coordinate[0] - projectionExtent[0]) / sourceExtentWidth);\n    }\n    return worldsAway;\n}\n//# sourceMappingURL=coordinate.js.map","define([\n\t'exports',\n\t'../errors/RequestError',\n\t'../errors/CancelError',\n\t'../Deferred',\n\t'../io-query',\n\t'../_base/array',\n\t'../_base/lang',\n\t'../promise/Promise',\n\t'../has'\n], function(exports, RequestError, CancelError, Deferred, ioQuery, array, lang, Promise, has){\n\n\tfunction isArrayBuffer(value) {\n\t\treturn has('native-arraybuffer') && value instanceof ArrayBuffer\n\t}\n\n\tfunction isBlob(value) {\n\t\treturn has('native-blob') && value instanceof Blob\n\t}\n\t\n\tfunction isElement(value) {\n\t\tif(typeof Element !== 'undefined') { //all other\n\t\t\treturn value instanceof Element;\n\t\t}\n\n\t\t//IE<=7\n\t\treturn value.nodeType === 1;\n\t}\n\n\tfunction isFormData(value) {\n\t\treturn has('native-formdata') && value instanceof FormData;\n\t}\n\n\tfunction shouldDeepCopy(value) {\n\t\treturn value &&\n\t\t\ttypeof value === 'object' &&\n\t\t\t!isFormData(value) &&\n\t\t\t!isElement(value) &&\n\t\t\t!isBlob(value) &&\n\t\t\t!isArrayBuffer(value)\n\t}\n\n\texports.deepCopy = function(target, source) {\n\t\tfor (var name in source) {\n\t\t\tvar tval = target[name],\n  \t\t\t    sval = source[name];\n\t\t\tif (name !== '__proto__' && tval !== sval) {\n\t\t\t\tif (shouldDeepCopy(sval)) {\n\t\t\t\t\tif (Object.prototype.toString.call(sval) === '[object Date]') { // use this date test to handle crossing frame boundaries\n\t\t\t\t\t\ttarget[name] = new Date(sval);\n\t\t\t\t\t} else if (lang.isArray(sval)) {\n \t\t\t\t\t\t  target[name] = exports.deepCopyArray(sval);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (tval && typeof tval === 'object') {\n\t\t\t\t\t\t\texports.deepCopy(tval, sval);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget[name] = exports.deepCopy({}, sval);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttarget[name] = sval;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn target;\n\t};\n\n\texports.deepCopyArray = function(source) {\n\t\tvar clonedArray = [];\n\t\tfor (var i = 0, l = source.length; i < l; i++) {\n\t\t\tvar svalItem = source[i];\n\t\t\tif (typeof svalItem === 'object') {\n\t\t\t\tclonedArray.push(exports.deepCopy({}, svalItem));\n\t\t\t} else {\n\t\t\t\tclonedArray.push(svalItem);\n\t\t\t}\n\t\t}\n\n\t\treturn clonedArray;\n\t};\n\n\texports.deepCreate = function deepCreate(source, properties){\n\t\tproperties = properties || {};\n\t\tvar target = lang.delegate(source),\n\t\t\tname, value;\n\n\t\tfor(name in source){\n\t\t\tvalue = source[name];\n\n\t\t\tif(value && typeof value === 'object'){\n\t\t\t\ttarget[name] = exports.deepCreate(value, properties[name]);\n\t\t\t}\n\t\t}\n\t\treturn exports.deepCopy(target, properties);\n\t};\n\n\tvar freeze = Object.freeze || function(obj){ return obj; };\n\tfunction okHandler(response){\n\t\treturn freeze(response);\n\t}\n\tfunction dataHandler (response) {\n\t\treturn response.data !== undefined ? response.data : response.text;\n\t}\n\n\texports.deferred = function deferred(response, cancel, isValid, isReady, handleResponse, last){\n\t\tvar def = new Deferred(function(reason){\n\t\t\tcancel && cancel(def, response);\n\n\t\t\tif(!reason || !(reason instanceof RequestError) && !(reason instanceof CancelError)){\n\t\t\t\treturn new CancelError('Request canceled', response);\n\t\t\t}\n\t\t\treturn reason;\n\t\t});\n\n\t\tdef.response = response;\n\t\tdef.isValid = isValid;\n\t\tdef.isReady = isReady;\n\t\tdef.handleResponse = handleResponse;\n\n\t\tfunction errHandler(error){\n\t\t\terror.response = response;\n\t\t\tthrow error;\n\t\t}\n\t\tvar responsePromise = def.then(okHandler).otherwise(errHandler);\n\n\t\tif(exports.notify){\n\t\t\tresponsePromise.then(\n\t\t\t\tlang.hitch(exports.notify, 'emit', 'load'),\n\t\t\t\tlang.hitch(exports.notify, 'emit', 'error')\n\t\t\t);\n\t\t}\n\n\t\tvar dataPromise = responsePromise.then(dataHandler);\n\n\t\t// http://bugs.dojotoolkit.org/ticket/16794\n\t\t// The following works around a leak in IE9 through the\n\t\t// prototype using lang.delegate on dataPromise and\n\t\t// assigning the result a property with a reference to\n\t\t// responsePromise.\n\t\tvar promise = new Promise();\n\t\tfor (var prop in dataPromise) {\n\t\t\tif (dataPromise.hasOwnProperty(prop)) {\n\t\t\t\tpromise[prop] = dataPromise[prop];\n\t\t\t}\n\t\t}\n\t\tpromise.response = responsePromise;\n\t\tfreeze(promise);\n\t\t// End leak fix\n\n\n\t\tif(last){\n\t\t\tdef.then(function(response){\n\t\t\t\tlast.call(def, response);\n\t\t\t}, function(error){\n\t\t\t\tlast.call(def, response, error);\n\t\t\t});\n\t\t}\n\n\t\tdef.promise = promise;\n\t\tdef.then = promise.then;\n\n\t\treturn def;\n\t};\n\n\texports.addCommonMethods = function addCommonMethods(provider, methods){\n\t\tarray.forEach(methods||['GET', 'POST', 'PUT', 'DELETE'], function(method){\n\t\t\tprovider[(method === 'DELETE' ? 'DEL' : method).toLowerCase()] = function(url, options){\n\t\t\t\toptions = lang.delegate(options||{});\n\t\t\t\toptions.method = method;\n\t\t\t\treturn provider(url, options);\n\t\t\t};\n\t\t});\n\t};\n\n\texports.parseArgs = function parseArgs(url, options, skipData){\n\t\tvar data = options.data,\n\t\t\tquery = options.query;\n\n\t\tif(data && !skipData){\n\t\t\tif(typeof data === 'object' && (!(has('native-xhr2')) || !(isArrayBuffer(data) || isBlob(data) ))){\n\t\t\t\toptions.data = ioQuery.objectToQuery(data);\n\t\t\t}\n\t\t}\n\n\t\tif(query){\n\t\t\tif(typeof query === 'object'){\n\t\t\t\tquery = ioQuery.objectToQuery(query);\n\t\t\t}\n\t\t\tif(options.preventCache){\n\t\t\t\tquery += (query ? '&' : '') + 'request.preventCache=' + (+(new Date));\n\t\t\t}\n\t\t}else if(options.preventCache){\n\t\t\tquery = 'request.preventCache=' + (+(new Date));\n\t\t}\n\n\t\tif(url && query){\n\t\t\turl += (~url.indexOf('?') ? '&' : '?') + query;\n\t\t}\n\n\t\treturn {\n\t\t\turl: url,\n\t\t\toptions: options,\n\t\t\tgetHeader: function(headerName){ return null; }\n\t\t};\n\t};\n\n\texports.checkStatus = function(stat){\n\t\tstat = stat || 0;\n\t\treturn (stat >= 200 && stat < 300) || // allow any 2XX response code\n\t\t\tstat === 304 ||                 // or, get it out of the cache\n\t\t\tstat === 1223 ||                // or, Internet Explorer mangled the status code\n\t\t\t!stat;                         // or, we're Titanium/browser chrome/chrome extension requesting a local file\n\t};\n});\n","/**\n * @module ol/proj/Units\n */\n/**\n * Projection units: `'degrees'`, `'ft'`, `'m'`, `'pixels'`, `'tile-pixels'` or\n * `'us-ft'`.\n * @enum {string}\n */\nvar Units = {\n    /**\n     * Degrees\n     * @api\n     */\n    DEGREES: 'degrees',\n    /**\n     * Feet\n     * @api\n     */\n    FEET: 'ft',\n    /**\n     * Meters\n     * @api\n     */\n    METERS: 'm',\n    /**\n     * Pixels\n     * @api\n     */\n    PIXELS: 'pixels',\n    /**\n     * Tile Pixels\n     * @api\n     */\n    TILE_PIXELS: 'tile-pixels',\n    /**\n     * US Feet\n     * @api\n     */\n    USFEET: 'us-ft',\n};\n/**\n * Meters per unit lookup table.\n * @const\n * @type {Object<Units, number>}\n * @api\n */\nexport var METERS_PER_UNIT = {};\n// use the radius of the Normal sphere\nMETERS_PER_UNIT[Units.DEGREES] = (2 * Math.PI * 6370997) / 360;\nMETERS_PER_UNIT[Units.FEET] = 0.3048;\nMETERS_PER_UNIT[Units.METERS] = 1;\nMETERS_PER_UNIT[Units.USFEET] = 1200 / 3937;\nexport default Units;\n//# sourceMappingURL=Units.js.map","/**\n * @module ol/transform\n */\nimport { assert } from './asserts.js';\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array<number>} Transform\n * @api\n */\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n/**\n * @private\n * @type {Transform}\n */\nvar tmp_ = new Array(6);\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n    return [1, 0, 0, 1, 0, 0];\n}\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n    return set(transform, 1, 0, 0, 1, 0, 0);\n}\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n    var a1 = transform1[0];\n    var b1 = transform1[1];\n    var c1 = transform1[2];\n    var d1 = transform1[3];\n    var e1 = transform1[4];\n    var f1 = transform1[5];\n    var a2 = transform2[0];\n    var b2 = transform2[1];\n    var c2 = transform2[2];\n    var d2 = transform2[3];\n    var e2 = transform2[4];\n    var f2 = transform2[5];\n    transform1[0] = a1 * a2 + c1 * b2;\n    transform1[1] = b1 * a2 + d1 * b2;\n    transform1[2] = a1 * c2 + c1 * d2;\n    transform1[3] = b1 * c2 + d1 * d2;\n    transform1[4] = a1 * e2 + c1 * f2 + e1;\n    transform1[5] = b1 * e2 + d1 * f2 + f1;\n    return transform1;\n}\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n    transform[0] = a;\n    transform[1] = b;\n    transform[2] = c;\n    transform[3] = d;\n    transform[4] = e;\n    transform[5] = f;\n    return transform;\n}\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n    transform1[0] = transform2[0];\n    transform1[1] = transform2[1];\n    transform1[2] = transform2[2];\n    transform1[3] = transform2[3];\n    transform1[4] = transform2[4];\n    transform1[5] = transform2[5];\n    return transform1;\n}\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n *     chained together.\n */\nexport function apply(transform, coordinate) {\n    var x = coordinate[0];\n    var y = coordinate[1];\n    coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n    coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n    return coordinate;\n}\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n    var cos = Math.cos(angle);\n    var sin = Math.sin(angle);\n    return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n    return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n    return set(target, x, 0, 0, y, 0, 0);\n}\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n    return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n    var sin = Math.sin(angle);\n    var cos = Math.cos(angle);\n    transform[0] = sx * cos;\n    transform[1] = sy * sin;\n    transform[2] = -sx * sin;\n    transform[3] = sy * cos;\n    transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n    transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n    return transform;\n}\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` porperty of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n    return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n    return makeInverse(source, source);\n}\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n *     the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n    var det = determinant(source);\n    assert(det !== 0, 32); // Transformation matrix cannot be inverted\n    var a = source[0];\n    var b = source[1];\n    var c = source[2];\n    var d = source[3];\n    var e = source[4];\n    var f = source[5];\n    target[0] = d / det;\n    target[1] = -b / det;\n    target[2] = -c / det;\n    target[3] = a / det;\n    target[4] = (c * f - d * e) / det;\n    target[5] = -(a * f - b * e) / det;\n    return target;\n}\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n    return mat[0] * mat[3] - mat[1] * mat[2];\n}\n/**\n * A string version of the transform.  This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n    return 'matrix(' + mat.join(', ') + ')';\n}\n//# sourceMappingURL=transform.js.map","/**\n * @module ol/render/canvas\n */\nimport BaseObject from '../Object.js';\nimport EventTarget from '../events/Target.js';\nimport { WORKER_OFFSCREEN_CANVAS } from '../has.js';\nimport { clear } from '../obj.js';\nimport { createCanvasContext2D } from '../dom.js';\nimport { getFontParameters } from '../css.js';\nimport { toString } from '../transform.js';\n/**\n * @typedef {Object} FillState\n * @property {import(\"../colorlike.js\").ColorLike} fillStyle\n */\n/**\n * @typedef Label\n * @property {number} width\n * @property {number} height\n * @property {Array<string|number>} contextInstructions\n */\n/**\n * @typedef {Object} FillStrokeState\n * @property {import(\"../colorlike.js\").ColorLike} [currentFillStyle]\n * @property {import(\"../colorlike.js\").ColorLike} [currentStrokeStyle]\n * @property {CanvasLineCap} [currentLineCap]\n * @property {Array<number>} currentLineDash\n * @property {number} [currentLineDashOffset]\n * @property {CanvasLineJoin} [currentLineJoin]\n * @property {number} [currentLineWidth]\n * @property {number} [currentMiterLimit]\n * @property {number} [lastStroke]\n * @property {import(\"../colorlike.js\").ColorLike} [fillStyle]\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle]\n * @property {CanvasLineCap} [lineCap]\n * @property {Array<number>} lineDash\n * @property {number} [lineDashOffset]\n * @property {CanvasLineJoin} [lineJoin]\n * @property {number} [lineWidth]\n * @property {number} [miterLimit]\n */\n/**\n * @typedef {Object} StrokeState\n * @property {CanvasLineCap} lineCap\n * @property {Array<number>} lineDash\n * @property {number} lineDashOffset\n * @property {CanvasLineJoin} lineJoin\n * @property {number} lineWidth\n * @property {number} miterLimit\n * @property {import(\"../colorlike.js\").ColorLike} strokeStyle\n */\n/**\n * @typedef {Object} TextState\n * @property {string} font\n * @property {string} [textAlign]\n * @property {string} textBaseline\n * @property {string} [placement]\n * @property {number} [maxAngle]\n * @property {boolean} [overflow]\n * @property {import(\"../style/Fill.js\").default} [backgroundFill]\n * @property {import(\"../style/Stroke.js\").default} [backgroundStroke]\n * @property {import(\"../size.js\").Size} [scale]\n * @property {Array<number>} [padding]\n */\n/**\n * @typedef {Object} SerializableInstructions\n * @property {Array<*>} instructions The rendering instructions.\n * @property {Array<*>} hitDetectionInstructions The rendering hit detection instructions.\n * @property {Array<number>} coordinates The array of all coordinates.\n * @property {!Object<string, TextState>} [textStates] The text states (decluttering).\n * @property {!Object<string, FillState>} [fillStates] The fill states (decluttering).\n * @property {!Object<string, StrokeState>} [strokeStates] The stroke states (decluttering).\n */\n/**\n * @typedef {Object<number, import(\"./canvas/Executor.js\").ReplayImageOrLabelArgs>} DeclutterImageWithText\n */\n/**\n * @const\n * @type {string}\n */\nexport var defaultFont = '10px sans-serif';\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport var defaultFillStyle = '#000';\n/**\n * @const\n * @type {CanvasLineCap}\n */\nexport var defaultLineCap = 'round';\n/**\n * @const\n * @type {Array<number>}\n */\nexport var defaultLineDash = [];\n/**\n * @const\n * @type {number}\n */\nexport var defaultLineDashOffset = 0;\n/**\n * @const\n * @type {CanvasLineJoin}\n */\nexport var defaultLineJoin = 'round';\n/**\n * @const\n * @type {number}\n */\nexport var defaultMiterLimit = 10;\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport var defaultStrokeStyle = '#000';\n/**\n * @const\n * @type {string}\n */\nexport var defaultTextAlign = 'center';\n/**\n * @const\n * @type {string}\n */\nexport var defaultTextBaseline = 'middle';\n/**\n * @const\n * @type {Array<number>}\n */\nexport var defaultPadding = [0, 0, 0, 0];\n/**\n * @const\n * @type {number}\n */\nexport var defaultLineWidth = 1;\n/**\n * @type {BaseObject}\n */\nexport var checkedFonts = new BaseObject();\n/**\n * The label cache for text rendering. To change the default cache size of 2048\n * entries, use {@link module:ol/structs/LRUCache#setSize}.\n * Deprecated - there is no label cache any more.\n * @type {?}\n * @api\n * @deprecated\n */\nexport var labelCache = new EventTarget();\nlabelCache.setSize = function () {\n    console.warn('labelCache is deprecated.'); //eslint-disable-line\n};\n/**\n * @type {CanvasRenderingContext2D}\n */\nvar measureContext = null;\n/**\n * @type {string}\n */\nvar measureFont;\n/**\n * @type {!Object<string, number>}\n */\nexport var textHeights = {};\n/**\n * Clears the label cache when a font becomes available.\n * @param {string} fontSpec CSS font spec.\n */\nexport var registerFont = (function () {\n    var retries = 100;\n    var size = '32px ';\n    var referenceFonts = ['monospace', 'serif'];\n    var len = referenceFonts.length;\n    var text = 'wmytzilWMYTZIL@#/&?$%10\\uF013';\n    var interval, referenceWidth;\n    /**\n     * @param {string} fontStyle Css font-style\n     * @param {string} fontWeight Css font-weight\n     * @param {*} fontFamily Css font-family\n     * @return {boolean} Font with style and weight is available\n     */\n    function isAvailable(fontStyle, fontWeight, fontFamily) {\n        var available = true;\n        for (var i = 0; i < len; ++i) {\n            var referenceFont = referenceFonts[i];\n            referenceWidth = measureTextWidth(fontStyle + ' ' + fontWeight + ' ' + size + referenceFont, text);\n            if (fontFamily != referenceFont) {\n                var width = measureTextWidth(fontStyle +\n                    ' ' +\n                    fontWeight +\n                    ' ' +\n                    size +\n                    fontFamily +\n                    ',' +\n                    referenceFont, text);\n                // If width and referenceWidth are the same, then the fallback was used\n                // instead of the font we wanted, so the font is not available.\n                available = available && width != referenceWidth;\n            }\n        }\n        if (available) {\n            return true;\n        }\n        return false;\n    }\n    function check() {\n        var done = true;\n        var fonts = checkedFonts.getKeys();\n        for (var i = 0, ii = fonts.length; i < ii; ++i) {\n            var font = fonts[i];\n            if (checkedFonts.get(font) < retries) {\n                if (isAvailable.apply(this, font.split('\\n'))) {\n                    clear(textHeights);\n                    // Make sure that loaded fonts are picked up by Safari\n                    measureContext = null;\n                    measureFont = undefined;\n                    checkedFonts.set(font, retries);\n                }\n                else {\n                    checkedFonts.set(font, checkedFonts.get(font) + 1, true);\n                    done = false;\n                }\n            }\n        }\n        if (done) {\n            clearInterval(interval);\n            interval = undefined;\n        }\n    }\n    return function (fontSpec) {\n        var font = getFontParameters(fontSpec);\n        if (!font) {\n            return;\n        }\n        var families = font.families;\n        for (var i = 0, ii = families.length; i < ii; ++i) {\n            var family = families[i];\n            var key = font.style + '\\n' + font.weight + '\\n' + family;\n            if (checkedFonts.get(key) === undefined) {\n                checkedFonts.set(key, retries, true);\n                if (!isAvailable(font.style, font.weight, family)) {\n                    checkedFonts.set(key, 0, true);\n                    if (interval === undefined) {\n                        interval = setInterval(check, 32);\n                    }\n                }\n            }\n        }\n    };\n})();\n/**\n * @param {string} font Font to use for measuring.\n * @return {import(\"../size.js\").Size} Measurement.\n */\nexport var measureTextHeight = (function () {\n    /**\n     * @type {HTMLDivElement}\n     */\n    var div;\n    return function (fontSpec) {\n        var height = textHeights[fontSpec];\n        if (height == undefined) {\n            if (WORKER_OFFSCREEN_CANVAS) {\n                var font = getFontParameters(fontSpec);\n                var metrics = measureText(fontSpec, 'Žg');\n                var lineHeight = isNaN(Number(font.lineHeight))\n                    ? 1.2\n                    : Number(font.lineHeight);\n                height =\n                    lineHeight *\n                        (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);\n            }\n            else {\n                if (!div) {\n                    div = document.createElement('div');\n                    div.innerHTML = 'M';\n                    div.style.margin = '0 !important';\n                    div.style.padding = '0 !important';\n                    div.style.position = 'absolute !important';\n                    div.style.left = '-99999px !important';\n                }\n                div.style.font = fontSpec;\n                document.body.appendChild(div);\n                height = div.offsetHeight;\n                document.body.removeChild(div);\n            }\n            textHeights[fontSpec] = height;\n        }\n        return height;\n    };\n})();\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {TextMetrics} Text metrics.\n */\nfunction measureText(font, text) {\n    if (!measureContext) {\n        measureContext = createCanvasContext2D(1, 1);\n    }\n    if (font != measureFont) {\n        measureContext.font = font;\n        measureFont = measureContext.font;\n    }\n    return measureContext.measureText(text);\n}\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {number} Width.\n */\nexport function measureTextWidth(font, text) {\n    return measureText(font, text).width;\n}\n/**\n * Measure text width using a cache.\n * @param {string} font The font.\n * @param {string} text The text to measure.\n * @param {Object<string, number>} cache A lookup of cached widths by text.\n * @returns {number} The text width.\n */\nexport function measureAndCacheTextWidth(font, text, cache) {\n    if (text in cache) {\n        return cache[text];\n    }\n    var width = measureTextWidth(font, text);\n    cache[text] = width;\n    return width;\n}\n/**\n * @param {string} font Font to use for measuring.\n * @param {Array<string>} lines Lines to measure.\n * @param {Array<number>} widths Array will be populated with the widths of\n * each line.\n * @return {number} Width of the whole text.\n */\nexport function measureTextWidths(font, lines, widths) {\n    var numLines = lines.length;\n    var width = 0;\n    for (var i = 0; i < numLines; ++i) {\n        var currentWidth = measureTextWidth(font, lines[i]);\n        width = Math.max(width, currentWidth);\n        widths.push(currentWidth);\n    }\n    return width;\n}\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n * @param {number} offsetX X offset.\n * @param {number} offsetY Y offset.\n */\nexport function rotateAtOffset(context, rotation, offsetX, offsetY) {\n    if (rotation !== 0) {\n        context.translate(offsetX, offsetY);\n        context.rotate(rotation);\n        context.translate(-offsetX, -offsetY);\n    }\n}\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../transform.js\").Transform|null} transform Transform.\n * @param {number} opacity Opacity.\n * @param {Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../size.js\").Size} scale Scale.\n */\nexport function drawImageOrLabel(context, transform, opacity, labelOrImage, originX, originY, w, h, x, y, scale) {\n    context.save();\n    if (opacity !== 1) {\n        context.globalAlpha *= opacity;\n    }\n    if (transform) {\n        context.setTransform.apply(context, transform);\n    }\n    if ( /** @type {*} */(labelOrImage).contextInstructions) {\n        // label\n        context.translate(x, y);\n        context.scale(scale[0], scale[1]);\n        executeLabelInstructions(/** @type {Label} */ (labelOrImage), context);\n    }\n    else if (scale[0] < 0 || scale[1] < 0) {\n        // flipped image\n        context.translate(x, y);\n        context.scale(scale[0], scale[1]);\n        context.drawImage(\n        /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (labelOrImage), originX, originY, w, h, 0, 0, w, h);\n    }\n    else {\n        // if image not flipped translate and scale can be avoided\n        context.drawImage(\n        /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (labelOrImage), originX, originY, w, h, x, y, w * scale[0], h * scale[1]);\n    }\n    context.restore();\n}\n/**\n * @param {Label} label Label.\n * @param {CanvasRenderingContext2D} context Context.\n */\nfunction executeLabelInstructions(label, context) {\n    var contextInstructions = label.contextInstructions;\n    for (var i = 0, ii = contextInstructions.length; i < ii; i += 2) {\n        if (Array.isArray(contextInstructions[i + 1])) {\n            context[contextInstructions[i]].apply(context, contextInstructions[i + 1]);\n        }\n        else {\n            context[contextInstructions[i]] = contextInstructions[i + 1];\n        }\n    }\n}\n/**\n * @type {HTMLCanvasElement}\n * @private\n */\nvar createTransformStringCanvas = null;\n/**\n * @param {import(\"../transform.js\").Transform} transform Transform.\n * @return {string} CSS transform.\n */\nexport function createTransformString(transform) {\n    if (WORKER_OFFSCREEN_CANVAS) {\n        return toString(transform);\n    }\n    else {\n        if (!createTransformStringCanvas) {\n            createTransformStringCanvas = createCanvasContext2D(1, 1).canvas;\n        }\n        createTransformStringCanvas.style.transform = toString(transform);\n        return createTransformStringCanvas.style.transform;\n    }\n}\n//# sourceMappingURL=canvas.js.map","define([\n\t'./request/default!'/*=====,\n\t'./_base/declare',\n\t'./promise/Promise' =====*/\n], function(request/*=====, declare, Promise =====*/){\n\t/*=====\n\trequest = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend a request using the default transport for the current platform.\n\t\t// url: String\n\t\t//\t\tThe URL to request.\n\t\t// options: dojo/request.__Options?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\trequest.__Promise = declare(Promise, {\n\t\t// response: dojo/promise/Promise\n\t\t//\t\tA promise resolving to an object representing\n\t\t//\t\tthe response from the server.\n\t});\n\trequest.__BaseOptions = declare(null, {\n\t\t// query: String|Object?\n\t\t//\t\tQuery parameters to append to the URL.\n\t\t// data: String|Object?\n\t\t//\t\tData to transfer.  This is ignored for GET and DELETE\n\t\t//\t\trequests.\n\t\t// preventCache: Boolean?\n\t\t//\t\tWhether to append a cache-busting parameter to the URL.\n\t\t// timeout: Integer?\n\t\t//\t\tMilliseconds to wait for the response.  If this time\n\t\t//\t\tpasses, the then the promise is rejected.\n\t\t// handleAs: String?\n\t\t//\t\tHow to handle the response from the server.  Default is\n\t\t//\t\t'text'.  Other values are 'json', 'javascript', and 'xml'.\n\t});\n\trequest.__MethodOptions = declare(null, {\n\t\t// method: String?\n\t\t//\t\tThe HTTP method to use to make the request.  Must be\n\t\t//\t\tuppercase.\n\t});\n\trequest.__Options = declare([request.__BaseOptions, request.__MethodOptions]);\n\n\trequest.get = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP GET request using the default transport for the current platform.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\trequest.post = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP POST request using the default transport for the current platform.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\trequest.put = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP POST request using the default transport for the current platform.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\trequest.del = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP DELETE request using the default transport for the current platform.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\t=====*/\n\treturn request;\n});\n","define([\n\t'./util',\n\t'../errors/RequestTimeoutError',\n\t'../errors/CancelError',\n\t'../_base/array',\n\t'../has!host-browser?../_base/window:',\n\t'../has!host-browser?dom-addeventlistener?:../on:'\n], function(util, RequestTimeoutError, CancelError, array, win, on){\n\t// avoid setting a timer per request. It degrades performance on IE\n\t// something fierece if we don't use unified loops.\n\tvar _inFlightIntvl = null,\n\t\t_inFlight = [];\n\n\tfunction watchInFlight(){\n\t\t// summary:\n\t\t//\t\tinternal method that checks each inflight XMLHttpRequest to see\n\t\t//\t\tif it has completed or if the timeout situation applies.\n\n\t\tvar now = +(new Date);\n\n\t\t// we need manual loop because we often modify _inFlight (and therefore 'i') while iterating\n\t\tfor(var i = 0, dfd; i < _inFlight.length && (dfd = _inFlight[i]); i++){\n\t\t\tvar response = dfd.response,\n\t\t\t\toptions = response.options;\n\t\t\tif((dfd.isCanceled && dfd.isCanceled()) || (dfd.isValid && !dfd.isValid(response))){\n\t\t\t\t_inFlight.splice(i--, 1);\n\t\t\t\twatch._onAction && watch._onAction();\n\t\t\t}else if(dfd.isReady && dfd.isReady(response)){\n\t\t\t\t_inFlight.splice(i--, 1);\n\t\t\t\tdfd.handleResponse(response);\n\t\t\t\twatch._onAction && watch._onAction();\n\t\t\t}else if(dfd.startTime){\n\t\t\t\t// did we timeout?\n\t\t\t\tif(dfd.startTime + (options.timeout || 0) < now){\n\t\t\t\t\t_inFlight.splice(i--, 1);\n\t\t\t\t\t// Cancel the request so the io module can do appropriate cleanup.\n\t\t\t\t\tdfd.cancel(new RequestTimeoutError('Timeout exceeded', response));\n\t\t\t\t\twatch._onAction && watch._onAction();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twatch._onInFlight && watch._onInFlight(dfd);\n\n\t\tif(!_inFlight.length){\n\t\t\tclearInterval(_inFlightIntvl);\n\t\t\t_inFlightIntvl = null;\n\t\t}\n\t}\n\n\tfunction watch(dfd){\n\t\t// summary:\n\t\t//\t\tWatches the io request represented by dfd to see if it completes.\n\t\t// dfd: Deferred\n\t\t//\t\tThe Deferred object to watch.\n\t\t// response: Object\n\t\t//\t\tThe object used as the value of the request promise.\n\t\t// validCheck: Function\n\t\t//\t\tFunction used to check if the IO request is still valid. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\t// ioCheck: Function\n\t\t//\t\tFunction used to check if basic IO call worked. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\t// resHandle: Function\n\t\t//\t\tFunction used to process response. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\tif(dfd.response.options.timeout){\n\t\t\tdfd.startTime = +(new Date);\n\t\t}\n\n\t\tif(dfd.isFulfilled()){\n\t\t\t// bail out if the deferred is already fulfilled\n\t\t\treturn;\n\t\t}\n\n\t\t_inFlight.push(dfd);\n\t\tif(!_inFlightIntvl){\n\t\t\t_inFlightIntvl = setInterval(watchInFlight, 50);\n\t\t}\n\n\t\t// handle sync requests separately from async:\n\t\t// http://bugs.dojotoolkit.org/ticket/8467\n\t\tif(dfd.response.options.sync){\n\t\t\twatchInFlight();\n\t\t}\n\t}\n\n\twatch.cancelAll = function cancelAll(){\n\t\t// summary:\n\t\t//\t\tCancels all pending IO requests, regardless of IO type\n\t\ttry{\n\t\t\tarray.forEach(_inFlight, function(dfd){\n\t\t\t\ttry{\n\t\t\t\t\tdfd.cancel(new CancelError('All requests canceled.'));\n\t\t\t\t}catch(e){}\n\t\t\t});\n\t\t}catch(e){}\n\t};\n\n\tif(win && on && win.doc.attachEvent){\n\t\t// Automatically call cancel all io calls on unload in IE\n\t\t// http://bugs.dojotoolkit.org/ticket/2357\n\t\ton(win.global, 'unload', function(){\n\t\t\twatch.cancelAll();\n\t\t});\n\t}\n\n\treturn watch;\n});\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/Interaction\n */\nimport BaseObject from '../Object.js';\nimport InteractionProperty from './Property.js';\nimport { easeOut, linear } from '../easing.js';\n/**\n * Object literal with config options for interactions.\n * @typedef {Object} InteractionOptions\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} handleEvent\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. If the function returns a falsy value, propagation of\n * the event to other interactions in the map's interactions chain will be\n * prevented (this includes functions with no explicit return). The interactions\n * are traversed in reverse order of the interactions collection of the map.\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * User actions that change the state of the map. Some are similar to controls,\n * but are not associated with a DOM element.\n * For example, {@link module:ol/interaction/KeyboardZoom~KeyboardZoom} is\n * functionally the same as {@link module:ol/control/Zoom~Zoom}, but triggered\n * by a keyboard event not a button element event.\n * Although interactions do not have a DOM element, some of them do render\n * vectors and so are visible on the screen.\n * @api\n */\nvar Interaction = /** @class */ (function (_super) {\n    __extends(Interaction, _super);\n    /**\n     * @param {InteractionOptions=} opt_options Options.\n     */\n    function Interaction(opt_options) {\n        var _this = _super.call(this) || this;\n        if (opt_options && opt_options.handleEvent) {\n            _this.handleEvent = opt_options.handleEvent;\n        }\n        /**\n         * @private\n         * @type {import(\"../PluggableMap.js\").default}\n         */\n        _this.map_ = null;\n        _this.setActive(true);\n        return _this;\n    }\n    /**\n     * Return whether the interaction is currently active.\n     * @return {boolean} `true` if the interaction is active, `false` otherwise.\n     * @observable\n     * @api\n     */\n    Interaction.prototype.getActive = function () {\n        return /** @type {boolean} */ (this.get(InteractionProperty.ACTIVE));\n    };\n    /**\n     * Get the map associated with this interaction.\n     * @return {import(\"../PluggableMap.js\").default} Map.\n     * @api\n     */\n    Interaction.prototype.getMap = function () {\n        return this.map_;\n    };\n    /**\n     * Handles the {@link module:ol/MapBrowserEvent map browser event}.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n     * @return {boolean} `false` to stop event propagation.\n     * @api\n     */\n    Interaction.prototype.handleEvent = function (mapBrowserEvent) {\n        return true;\n    };\n    /**\n     * Activate or deactivate the interaction.\n     * @param {boolean} active Active.\n     * @observable\n     * @api\n     */\n    Interaction.prototype.setActive = function (active) {\n        this.set(InteractionProperty.ACTIVE, active);\n    };\n    /**\n     * Remove the interaction from its current map and attach it to the new map.\n     * Subclasses may set up event handlers to get notified about changes to\n     * the map here.\n     * @param {import(\"../PluggableMap.js\").default} map Map.\n     */\n    Interaction.prototype.setMap = function (map) {\n        this.map_ = map;\n    };\n    return Interaction;\n}(BaseObject));\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {import(\"../coordinate.js\").Coordinate} delta Delta.\n * @param {number=} opt_duration Duration.\n */\nexport function pan(view, delta, opt_duration) {\n    var currentCenter = view.getCenterInternal();\n    if (currentCenter) {\n        var center = [currentCenter[0] + delta[0], currentCenter[1] + delta[1]];\n        view.animateInternal({\n            duration: opt_duration !== undefined ? opt_duration : 250,\n            easing: linear,\n            center: view.getConstrainedCenter(center),\n        });\n    }\n}\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {number} delta Delta from previous zoom level.\n * @param {import(\"../coordinate.js\").Coordinate=} opt_anchor Anchor coordinate in the user projection.\n * @param {number=} opt_duration Duration.\n */\nexport function zoomByDelta(view, delta, opt_anchor, opt_duration) {\n    var currentZoom = view.getZoom();\n    if (currentZoom === undefined) {\n        return;\n    }\n    var newZoom = view.getConstrainedZoom(currentZoom + delta);\n    var newResolution = view.getResolutionForZoom(newZoom);\n    if (view.getAnimating()) {\n        view.cancelAnimations();\n    }\n    view.animate({\n        resolution: newResolution,\n        anchor: opt_anchor,\n        duration: opt_duration !== undefined ? opt_duration : 250,\n        easing: easeOut,\n    });\n}\nexport default Interaction;\n//# sourceMappingURL=Interaction.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nexport const marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nexport const nodeMarker = `<!--${marker}-->`;\nexport const markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n/**\n * Suffix appended to all bound attribute names.\n */\nexport const boundAttributeSuffix = '$lit$';\n/**\n * An updatable Template that tracks the location of dynamic parts.\n */\nexport class Template {\n    constructor(result, element) {\n        this.parts = [];\n        this.element = element;\n        const nodesToRemove = [];\n        const stack = [];\n        // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n        const walker = document.createTreeWalker(element.content, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n        // Keeps track of the last index associated with a part. We try to delete\n        // unnecessary nodes, but we never want to associate two different parts\n        // to the same index. They must have a constant node between.\n        let lastPartIndex = 0;\n        let index = -1;\n        let partIndex = 0;\n        const { strings, values: { length } } = result;\n        while (partIndex < length) {\n            const node = walker.nextNode();\n            if (node === null) {\n                // We've exhausted the content inside a nested template element.\n                // Because we still have parts (the outer for-loop), we know:\n                // - There is a template in the stack\n                // - The walker will find a nextNode outside the template\n                walker.currentNode = stack.pop();\n                continue;\n            }\n            index++;\n            if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n                if (node.hasAttributes()) {\n                    const attributes = node.attributes;\n                    const { length } = attributes;\n                    // Per\n                    // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n                    // attributes are not guaranteed to be returned in document order.\n                    // In particular, Edge/IE can return them out of order, so we cannot\n                    // assume a correspondence between part index and attribute index.\n                    let count = 0;\n                    for (let i = 0; i < length; i++) {\n                        if (endsWith(attributes[i].name, boundAttributeSuffix)) {\n                            count++;\n                        }\n                    }\n                    while (count-- > 0) {\n                        // Get the template literal section leading up to the first\n                        // expression in this attribute\n                        const stringForPart = strings[partIndex];\n                        // Find the attribute name\n                        const name = lastAttributeNameRegex.exec(stringForPart)[2];\n                        // Find the corresponding attribute\n                        // All bound attributes have had a suffix added in\n                        // TemplateResult#getHTML to opt out of special attribute\n                        // handling. To look up the attribute value we also need to add\n                        // the suffix.\n                        const attributeLookupName = name.toLowerCase() + boundAttributeSuffix;\n                        const attributeValue = node.getAttribute(attributeLookupName);\n                        node.removeAttribute(attributeLookupName);\n                        const statics = attributeValue.split(markerRegex);\n                        this.parts.push({ type: 'attribute', index, name, strings: statics });\n                        partIndex += statics.length - 1;\n                    }\n                }\n                if (node.tagName === 'TEMPLATE') {\n                    stack.push(node);\n                    walker.currentNode = node.content;\n                }\n            }\n            else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n                const data = node.data;\n                if (data.indexOf(marker) >= 0) {\n                    const parent = node.parentNode;\n                    const strings = data.split(markerRegex);\n                    const lastIndex = strings.length - 1;\n                    // Generate a new text node for each literal section\n                    // These nodes are also used as the markers for node parts\n                    for (let i = 0; i < lastIndex; i++) {\n                        let insert;\n                        let s = strings[i];\n                        if (s === '') {\n                            insert = createMarker();\n                        }\n                        else {\n                            const match = lastAttributeNameRegex.exec(s);\n                            if (match !== null && endsWith(match[2], boundAttributeSuffix)) {\n                                s = s.slice(0, match.index) + match[1] +\n                                    match[2].slice(0, -boundAttributeSuffix.length) + match[3];\n                            }\n                            insert = document.createTextNode(s);\n                        }\n                        parent.insertBefore(insert, node);\n                        this.parts.push({ type: 'node', index: ++index });\n                    }\n                    // If there's no text, we must insert a comment to mark our place.\n                    // Else, we can trust it will stick around after cloning.\n                    if (strings[lastIndex] === '') {\n                        parent.insertBefore(createMarker(), node);\n                        nodesToRemove.push(node);\n                    }\n                    else {\n                        node.data = strings[lastIndex];\n                    }\n                    // We have a part for each match found\n                    partIndex += lastIndex;\n                }\n            }\n            else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n                if (node.data === marker) {\n                    const parent = node.parentNode;\n                    // Add a new marker node to be the startNode of the Part if any of\n                    // the following are true:\n                    //  * We don't have a previousSibling\n                    //  * The previousSibling is already the start of a previous part\n                    if (node.previousSibling === null || index === lastPartIndex) {\n                        index++;\n                        parent.insertBefore(createMarker(), node);\n                    }\n                    lastPartIndex = index;\n                    this.parts.push({ type: 'node', index });\n                    // If we don't have a nextSibling, keep this node so we have an end.\n                    // Else, we can remove it to save future costs.\n                    if (node.nextSibling === null) {\n                        node.data = '';\n                    }\n                    else {\n                        nodesToRemove.push(node);\n                        index--;\n                    }\n                    partIndex++;\n                }\n                else {\n                    let i = -1;\n                    while ((i = node.data.indexOf(marker, i + 1)) !== -1) {\n                        // Comment node has a binding marker inside, make an inactive part\n                        // The binding won't work, but subsequent bindings will\n                        // TODO (justinfagnani): consider whether it's even worth it to\n                        // make bindings in comments work\n                        this.parts.push({ type: 'node', index: -1 });\n                        partIndex++;\n                    }\n                }\n            }\n        }\n        // Remove text binding nodes after the walk to not disturb the TreeWalker\n        for (const n of nodesToRemove) {\n            n.parentNode.removeChild(n);\n        }\n    }\n}\nconst endsWith = (str, suffix) => {\n    const index = str.length - suffix.length;\n    return index >= 0 && str.slice(index) === suffix;\n};\nexport const isTemplatePartActive = (part) => part.index !== -1;\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nexport const createMarker = () => document.createComment('');\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-characters\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters, which includes every\n * space character except \" \".\n *\n * So an attribute is:\n *  * The name: any character except a control character, space character, ('),\n *    (\"), \">\", \"=\", or \"/\"\n *  * Followed by zero or more space characters\n *  * Followed by \"=\"\n *  * Followed by zero or more space characters\n *  * Followed by:\n *    * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n *    * (\") then any non-(\"), or\n *    * (') then any non-(')\n */\nexport const lastAttributeNameRegex = \n// eslint-disable-next-line no-control-regex\n/([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n//# sourceMappingURL=template.js.map","/**\n * @module ol/CollectionEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n    /**\n     * Triggered when an item is added to the collection.\n     * @event module:ol/Collection.CollectionEvent#add\n     * @api\n     */\n    ADD: 'add',\n    /**\n     * Triggered when an item is removed from the collection.\n     * @event module:ol/Collection.CollectionEvent#remove\n     * @api\n     */\n    REMOVE: 'remove',\n};\n//# sourceMappingURL=CollectionEventType.js.map","/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n    /**\n     * A true single click with no dragging and no double click. Note that this\n     * event is delayed by 250 ms to ensure that it is not a double click.\n     * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n     * @api\n     */\n    SINGLECLICK: 'singleclick',\n    /**\n     * A click with no dragging. A double click will fire two of this.\n     * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n     * @api\n     */\n    CLICK: EventType.CLICK,\n    /**\n     * A true double click, with no dragging.\n     * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n     * @api\n     */\n    DBLCLICK: EventType.DBLCLICK,\n    /**\n     * Triggered when a pointer is dragged.\n     * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n     * @api\n     */\n    POINTERDRAG: 'pointerdrag',\n    /**\n     * Triggered when a pointer is moved. Note that on touch devices this is\n     * triggered when the map is panned, so is not the same as mousemove.\n     * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n     * @api\n     */\n    POINTERMOVE: 'pointermove',\n    POINTERDOWN: 'pointerdown',\n    POINTERUP: 'pointerup',\n    POINTEROVER: 'pointerover',\n    POINTEROUT: 'pointerout',\n    POINTERENTER: 'pointerenter',\n    POINTERLEAVE: 'pointerleave',\n    POINTERCANCEL: 'pointercancel',\n};\n//# sourceMappingURL=MapBrowserEventType.js.map","/**\n * @module ol/geom/flat/deflate\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinate(flatCoordinates, offset, coordinate, stride) {\n    for (var i = 0, ii = coordinate.length; i < ii; ++i) {\n        flatCoordinates[offset++] = coordinate[i];\n    }\n    return offset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<import(\"../../coordinate.js\").Coordinate>} coordinates Coordinates.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinates(flatCoordinates, offset, coordinates, stride) {\n    for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n        var coordinate = coordinates[i];\n        for (var j = 0; j < stride; ++j) {\n            flatCoordinates[offset++] = coordinate[j];\n        }\n    }\n    return offset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<import(\"../../coordinate.js\").Coordinate>>} coordinatess Coordinatess.\n * @param {number} stride Stride.\n * @param {Array<number>=} opt_ends Ends.\n * @return {Array<number>} Ends.\n */\nexport function deflateCoordinatesArray(flatCoordinates, offset, coordinatess, stride, opt_ends) {\n    var ends = opt_ends ? opt_ends : [];\n    var i = 0;\n    for (var j = 0, jj = coordinatess.length; j < jj; ++j) {\n        var end = deflateCoordinates(flatCoordinates, offset, coordinatess[j], stride);\n        ends[i++] = end;\n        offset = end;\n    }\n    ends.length = i;\n    return ends;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<Array<import(\"../../coordinate.js\").Coordinate>>>} coordinatesss Coordinatesss.\n * @param {number} stride Stride.\n * @param {Array<Array<number>>=} opt_endss Endss.\n * @return {Array<Array<number>>} Endss.\n */\nexport function deflateMultiCoordinatesArray(flatCoordinates, offset, coordinatesss, stride, opt_endss) {\n    var endss = opt_endss ? opt_endss : [];\n    var i = 0;\n    for (var j = 0, jj = coordinatesss.length; j < jj; ++j) {\n        var ends = deflateCoordinatesArray(flatCoordinates, offset, coordinatesss[j], stride, endss[i]);\n        endss[i++] = ends;\n        offset = ends[ends.length - 1];\n    }\n    endss.length = i;\n    return endss;\n}\n//# sourceMappingURL=deflate.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/geom/SimpleGeometry\n */\nimport Geometry from './Geometry.js';\nimport GeometryLayout from './GeometryLayout.js';\nimport { abstract } from '../util.js';\nimport { createOrUpdateFromFlatCoordinates, getCenter } from '../extent.js';\nimport { rotate, scale, transform2D, translate } from './flat/transform.js';\n/**\n * @classdesc\n * Abstract base class; only used for creating subclasses; do not instantiate\n * in apps, as cannot be rendered.\n *\n * @abstract\n * @api\n */\nvar SimpleGeometry = /** @class */ (function (_super) {\n    __extends(SimpleGeometry, _super);\n    function SimpleGeometry() {\n        var _this = _super.call(this) || this;\n        /**\n         * @protected\n         * @type {import(\"./GeometryLayout.js\").default}\n         */\n        _this.layout = GeometryLayout.XY;\n        /**\n         * @protected\n         * @type {number}\n         */\n        _this.stride = 2;\n        /**\n         * @protected\n         * @type {Array<number>}\n         */\n        _this.flatCoordinates = null;\n        return _this;\n    }\n    /**\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @protected\n     * @return {import(\"../extent.js\").Extent} extent Extent.\n     */\n    SimpleGeometry.prototype.computeExtent = function (extent) {\n        return createOrUpdateFromFlatCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, extent);\n    };\n    /**\n     * @abstract\n     * @return {Array<*>} Coordinates.\n     */\n    SimpleGeometry.prototype.getCoordinates = function () {\n        return abstract();\n    };\n    /**\n     * Return the first coordinate of the geometry.\n     * @return {import(\"../coordinate.js\").Coordinate} First coordinate.\n     * @api\n     */\n    SimpleGeometry.prototype.getFirstCoordinate = function () {\n        return this.flatCoordinates.slice(0, this.stride);\n    };\n    /**\n     * @return {Array<number>} Flat coordinates.\n     */\n    SimpleGeometry.prototype.getFlatCoordinates = function () {\n        return this.flatCoordinates;\n    };\n    /**\n     * Return the last coordinate of the geometry.\n     * @return {import(\"../coordinate.js\").Coordinate} Last point.\n     * @api\n     */\n    SimpleGeometry.prototype.getLastCoordinate = function () {\n        return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride);\n    };\n    /**\n     * Return the {@link module:ol/geom/GeometryLayout layout} of the geometry.\n     * @return {import(\"./GeometryLayout.js\").default} Layout.\n     * @api\n     */\n    SimpleGeometry.prototype.getLayout = function () {\n        return this.layout;\n    };\n    /**\n     * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n     * @param {number} squaredTolerance Squared tolerance.\n     * @return {SimpleGeometry} Simplified geometry.\n     */\n    SimpleGeometry.prototype.getSimplifiedGeometry = function (squaredTolerance) {\n        if (this.simplifiedGeometryRevision !== this.getRevision()) {\n            this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n            this.simplifiedGeometryRevision = this.getRevision();\n        }\n        // If squaredTolerance is negative or if we know that simplification will not\n        // have any effect then just return this.\n        if (squaredTolerance < 0 ||\n            (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n                squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)) {\n            return this;\n        }\n        var simplifiedGeometry = this.getSimplifiedGeometryInternal(squaredTolerance);\n        var simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();\n        if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {\n            return simplifiedGeometry;\n        }\n        else {\n            // Simplification did not actually remove any coordinates.  We now know\n            // that any calls to getSimplifiedGeometry with a squaredTolerance less\n            // than or equal to the current squaredTolerance will also not have any\n            // effect.  This allows us to short circuit simplification (saving CPU\n            // cycles) and prevents the cache of simplified geometries from filling\n            // up with useless identical copies of this geometry (saving memory).\n            this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n            return this;\n        }\n    };\n    /**\n     * @param {number} squaredTolerance Squared tolerance.\n     * @return {SimpleGeometry} Simplified geometry.\n     * @protected\n     */\n    SimpleGeometry.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n        return this;\n    };\n    /**\n     * @return {number} Stride.\n     */\n    SimpleGeometry.prototype.getStride = function () {\n        return this.stride;\n    };\n    /**\n     * @param {import(\"./GeometryLayout.js\").default} layout Layout.\n     * @param {Array<number>} flatCoordinates Flat coordinates.\n     */\n    SimpleGeometry.prototype.setFlatCoordinates = function (layout, flatCoordinates) {\n        this.stride = getStrideForLayout(layout);\n        this.layout = layout;\n        this.flatCoordinates = flatCoordinates;\n    };\n    /**\n     * @abstract\n     * @param {!Array<*>} coordinates Coordinates.\n     * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n     */\n    SimpleGeometry.prototype.setCoordinates = function (coordinates, opt_layout) {\n        abstract();\n    };\n    /**\n     * @param {import(\"./GeometryLayout.js\").default|undefined} layout Layout.\n     * @param {Array<*>} coordinates Coordinates.\n     * @param {number} nesting Nesting.\n     * @protected\n     */\n    SimpleGeometry.prototype.setLayout = function (layout, coordinates, nesting) {\n        /** @type {number} */\n        var stride;\n        if (layout) {\n            stride = getStrideForLayout(layout);\n        }\n        else {\n            for (var i = 0; i < nesting; ++i) {\n                if (coordinates.length === 0) {\n                    this.layout = GeometryLayout.XY;\n                    this.stride = 2;\n                    return;\n                }\n                else {\n                    coordinates = /** @type {Array} */ (coordinates[0]);\n                }\n            }\n            stride = coordinates.length;\n            layout = getLayoutForStride(stride);\n        }\n        this.layout = layout;\n        this.stride = stride;\n    };\n    /**\n     * Apply a transform function to the coordinates of the geometry.\n     * The geometry is modified in place.\n     * If you do not want the geometry modified in place, first `clone()` it and\n     * then use this function on the clone.\n     * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n     * Called with a flat array of geometry coordinates.\n     * @api\n     */\n    SimpleGeometry.prototype.applyTransform = function (transformFn) {\n        if (this.flatCoordinates) {\n            transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);\n            this.changed();\n        }\n    };\n    /**\n     * Rotate the geometry around a given coordinate. This modifies the geometry\n     * coordinates in place.\n     * @param {number} angle Rotation angle in counter-clockwise radians.\n     * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n     * @api\n     */\n    SimpleGeometry.prototype.rotate = function (angle, anchor) {\n        var flatCoordinates = this.getFlatCoordinates();\n        if (flatCoordinates) {\n            var stride = this.getStride();\n            rotate(flatCoordinates, 0, flatCoordinates.length, stride, angle, anchor, flatCoordinates);\n            this.changed();\n        }\n    };\n    /**\n     * Scale the geometry (with an optional origin).  This modifies the geometry\n     * coordinates in place.\n     * @param {number} sx The scaling factor in the x-direction.\n     * @param {number=} opt_sy The scaling factor in the y-direction (defaults to sx).\n     * @param {import(\"../coordinate.js\").Coordinate=} opt_anchor The scale origin (defaults to the center\n     *     of the geometry extent).\n     * @api\n     */\n    SimpleGeometry.prototype.scale = function (sx, opt_sy, opt_anchor) {\n        var sy = opt_sy;\n        if (sy === undefined) {\n            sy = sx;\n        }\n        var anchor = opt_anchor;\n        if (!anchor) {\n            anchor = getCenter(this.getExtent());\n        }\n        var flatCoordinates = this.getFlatCoordinates();\n        if (flatCoordinates) {\n            var stride = this.getStride();\n            scale(flatCoordinates, 0, flatCoordinates.length, stride, sx, sy, anchor, flatCoordinates);\n            this.changed();\n        }\n    };\n    /**\n     * Translate the geometry.  This modifies the geometry coordinates in place.  If\n     * instead you want a new geometry, first `clone()` this geometry.\n     * @param {number} deltaX Delta X.\n     * @param {number} deltaY Delta Y.\n     * @api\n     */\n    SimpleGeometry.prototype.translate = function (deltaX, deltaY) {\n        var flatCoordinates = this.getFlatCoordinates();\n        if (flatCoordinates) {\n            var stride = this.getStride();\n            translate(flatCoordinates, 0, flatCoordinates.length, stride, deltaX, deltaY, flatCoordinates);\n            this.changed();\n        }\n    };\n    return SimpleGeometry;\n}(Geometry));\n/**\n * @param {number} stride Stride.\n * @return {import(\"./GeometryLayout.js\").default} layout Layout.\n */\nfunction getLayoutForStride(stride) {\n    var layout;\n    if (stride == 2) {\n        layout = GeometryLayout.XY;\n    }\n    else if (stride == 3) {\n        layout = GeometryLayout.XYZ;\n    }\n    else if (stride == 4) {\n        layout = GeometryLayout.XYZM;\n    }\n    return /** @type {import(\"./GeometryLayout.js\").default} */ (layout);\n}\n/**\n * @param {import(\"./GeometryLayout.js\").default} layout Layout.\n * @return {number} Stride.\n */\nexport function getStrideForLayout(layout) {\n    var stride;\n    if (layout == GeometryLayout.XY) {\n        stride = 2;\n    }\n    else if (layout == GeometryLayout.XYZ || layout == GeometryLayout.XYM) {\n        stride = 3;\n    }\n    else if (layout == GeometryLayout.XYZM) {\n        stride = 4;\n    }\n    return /** @type {number} */ (stride);\n}\n/**\n * @param {SimpleGeometry} simpleGeometry Simple geometry.\n * @param {import(\"../transform.js\").Transform} transform Transform.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Transformed flat coordinates.\n */\nexport function transformGeom2D(simpleGeometry, transform, opt_dest) {\n    var flatCoordinates = simpleGeometry.getFlatCoordinates();\n    if (!flatCoordinates) {\n        return null;\n    }\n    else {\n        var stride = simpleGeometry.getStride();\n        return transform2D(flatCoordinates, 0, flatCoordinates.length, stride, transform, opt_dest);\n    }\n}\nexport default SimpleGeometry;\n//# sourceMappingURL=SimpleGeometry.js.map","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","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/Observable\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport { listen, listenOnce, unlistenByKey } from './events.js';\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires import(\"./events/Event.js\").default\n * @api\n */\nvar Observable = /** @class */ (function (_super) {\n    __extends(Observable, _super);\n    function Observable() {\n        var _this = _super.call(this) || this;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.revision_ = 0;\n        return _this;\n    }\n    /**\n     * Increases the revision counter and dispatches a 'change' event.\n     * @api\n     */\n    Observable.prototype.changed = function () {\n        ++this.revision_;\n        this.dispatchEvent(EventType.CHANGE);\n    };\n    /**\n     * Get the version number for this object.  Each time the object is modified,\n     * its version number will be incremented.\n     * @return {number} Revision.\n     * @api\n     */\n    Observable.prototype.getRevision = function () {\n        return this.revision_;\n    };\n    /**\n     * Listen for a certain type of event.\n     * @param {string|Array<string>} type The event type or array of event types.\n     * @param {function(?): ?} listener The listener function.\n     * @return {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} Unique key for the listener. If\n     *     called with an array of event types as the first argument, the return\n     *     will be an array of keys.\n     * @api\n     */\n    Observable.prototype.on = function (type, listener) {\n        if (Array.isArray(type)) {\n            var len = type.length;\n            var keys = new Array(len);\n            for (var i = 0; i < len; ++i) {\n                keys[i] = listen(this, type[i], listener);\n            }\n            return keys;\n        }\n        else {\n            return listen(this, /** @type {string} */ (type), listener);\n        }\n    };\n    /**\n     * Listen once for a certain type of event.\n     * @param {string|Array<string>} type The event type or array of event types.\n     * @param {function(?): ?} listener The listener function.\n     * @return {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} Unique key for the listener. If\n     *     called with an array of event types as the first argument, the return\n     *     will be an array of keys.\n     * @api\n     */\n    Observable.prototype.once = function (type, listener) {\n        var key;\n        if (Array.isArray(type)) {\n            var len = type.length;\n            key = new Array(len);\n            for (var i = 0; i < len; ++i) {\n                key[i] = listenOnce(this, type[i], listener);\n            }\n        }\n        else {\n            key = listenOnce(this, /** @type {string} */ (type), listener);\n        }\n        /** @type {Object} */ (listener).ol_key = key;\n        return key;\n    };\n    /**\n     * Unlisten for a certain type of event.\n     * @param {string|Array<string>} type The event type or array of event types.\n     * @param {function(?): ?} listener The listener function.\n     * @api\n     */\n    Observable.prototype.un = function (type, listener) {\n        var key = /** @type {Object} */ (listener).ol_key;\n        if (key) {\n            unByKey(key);\n        }\n        else if (Array.isArray(type)) {\n            for (var i = 0, ii = type.length; i < ii; ++i) {\n                this.removeEventListener(type[i], listener);\n            }\n        }\n        else {\n            this.removeEventListener(type, listener);\n        }\n    };\n    return Observable;\n}(EventTarget));\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} key The key returned by `on()`\n *     or `once()` (or an array of keys).\n * @api\n */\nexport function unByKey(key) {\n    if (Array.isArray(key)) {\n        for (var i = 0, ii = key.length; i < ii; ++i) {\n            unlistenByKey(key[i]);\n        }\n    }\n    else {\n        unlistenByKey(/** @type {import(\"./events.js\").EventsKey} */ (key));\n    }\n}\nexport default Observable;\n//# sourceMappingURL=Observable.js.map","/**\n * @module ol/css\n */\n/**\n * @typedef {Object} FontParameters\n * @property {string} style\n * @property {string} variant\n * @property {string} weight\n * @property {string} size\n * @property {string} lineHeight\n * @property {string} family\n * @property {Array<string>} families\n */\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_HIDDEN = 'ol-hidden';\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_SELECTABLE = 'ol-selectable';\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_UNSELECTABLE = 'ol-unselectable';\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_UNSUPPORTED = 'ol-unsupported';\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_CONTROL = 'ol-control';\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_COLLAPSED = 'ol-collapsed';\n/**\n * From http://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nvar fontRegEx = new RegExp([\n    '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n    '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n    '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n    '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n    '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n    '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n    '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$',\n].join(''), 'i');\nvar fontRegExMatchIndex = [\n    'style',\n    'variant',\n    'weight',\n    'size',\n    'lineHeight',\n    'family',\n];\n/**\n * Get the list of font families from a font spec.  Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters} The font parameters (or null if the input spec is invalid).\n */\nexport var getFontParameters = function (fontSpec) {\n    var match = fontSpec.match(fontRegEx);\n    if (!match) {\n        return null;\n    }\n    var style = /** @type {FontParameters} */ ({\n        lineHeight: 'normal',\n        size: '1.2em',\n        style: 'normal',\n        weight: 'normal',\n        variant: 'normal',\n    });\n    for (var i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n        var value = match[i + 1];\n        if (value !== undefined) {\n            style[fontRegExMatchIndex[i]] = value;\n        }\n    }\n    style.families = style.family.split(/,\\s?/);\n    return style;\n};\n//# sourceMappingURL=css.js.map","/**\n * @module ol/easing\n */\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeIn(t) {\n    return Math.pow(t, 3);\n}\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeOut(t) {\n    return 1 - easeIn(1 - t);\n}\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function inAndOut(t) {\n    return 3 * t * t - 2 * t * t * t;\n}\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function linear(t) {\n    return t;\n}\n/**\n * Start slow, speed up, and at the very end slow down again.  This has the\n * same general behavior as {@link module:ol/easing~inAndOut}, but the final\n * slowdown is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function upAndDown(t) {\n    if (t < 0.5) {\n        return inAndOut(2 * t);\n    }\n    else {\n        return 1 - inAndOut(2 * (t - 0.5));\n    }\n}\n//# sourceMappingURL=easing.js.map","/**\n * @module ol/has\n */\nvar ua = typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined'\n    ? navigator.userAgent.toLowerCase()\n    : '';\n/**\n * User agent string says we are dealing with Firefox as browser.\n * @type {boolean}\n */\nexport var FIREFOX = ua.indexOf('firefox') !== -1;\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nexport var SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1;\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nexport var WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1;\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nexport var MAC = ua.indexOf('macintosh') !== -1;\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nexport var DEVICE_PIXEL_RATIO = typeof devicePixelRatio !== 'undefined' ? devicePixelRatio : 1;\n/**\n * The execution context is a worker with OffscreenCanvas available.\n * @const\n * @type {boolean}\n */\nexport var WORKER_OFFSCREEN_CANVAS = typeof WorkerGlobalScope !== 'undefined' &&\n    typeof OffscreenCanvas !== 'undefined' &&\n    self instanceof WorkerGlobalScope; //eslint-disable-line\n/**\n * Image.prototype.decode() is supported.\n * @type {boolean}\n */\nexport var IMAGE_DECODE = typeof Image !== 'undefined' && Image.prototype.decode;\n/**\n * @type {boolean}\n */\nexport var PASSIVE_EVENT_LISTENERS = (function () {\n    var passive = false;\n    try {\n        var options = Object.defineProperty({}, 'passive', {\n            get: function () {\n                passive = true;\n            },\n        });\n        window.addEventListener('_', null, options);\n        window.removeEventListener('_', null, options);\n    }\n    catch (error) {\n        // passive not supported\n    }\n    return passive;\n})();\n//# sourceMappingURL=has.js.map","/**\n * @module ol/TileState\n */\n/**\n * @enum {number}\n */\nexport default {\n    IDLE: 0,\n    LOADING: 1,\n    LOADED: 2,\n    /**\n     * Indicates that tile loading failed\n     * @type {number}\n     */\n    ERROR: 3,\n    EMPTY: 4,\n};\n//# sourceMappingURL=TileState.js.map","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * True if the custom elements polyfill is in use.\n */\nexport const isCEPolyfill = typeof window !== 'undefined' &&\n    window.customElements != null &&\n    window.customElements.polyfillWrapFlushCallback !==\n        undefined;\n/**\n * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive),\n * into another container (could be the same container), before `before`. If\n * `before` is null, it appends the nodes to the container.\n */\nexport const reparentNodes = (container, start, end = null, before = null) => {\n    while (start !== end) {\n        const n = start.nextSibling;\n        container.insertBefore(start, before);\n        start = n;\n    }\n};\n/**\n * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from\n * `container`.\n */\nexport const removeNodes = (container, start, end = null) => {\n    while (start !== end) {\n        const n = start.nextSibling;\n        container.removeChild(start);\n        start = n;\n    }\n};\n//# sourceMappingURL=dom.js.map","/**\n * @module ol/ImageState\n */\n/**\n * @enum {number}\n */\nexport default {\n    IDLE: 0,\n    LOADING: 1,\n    LOADED: 2,\n    ERROR: 3,\n    EMPTY: 4,\n};\n//# sourceMappingURL=ImageState.js.map","/**\n * @module ol/geom/flat/inflate\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array<import(\"../../coordinate.js\").Coordinate>=} opt_coordinates Coordinates.\n * @return {Array<import(\"../../coordinate.js\").Coordinate>} Coordinates.\n */\nexport function inflateCoordinates(flatCoordinates, offset, end, stride, opt_coordinates) {\n    var coordinates = opt_coordinates !== undefined ? opt_coordinates : [];\n    var i = 0;\n    for (var j = offset; j < end; j += stride) {\n        coordinates[i++] = flatCoordinates.slice(j, j + stride);\n    }\n    coordinates.length = i;\n    return coordinates;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {Array<Array<import(\"../../coordinate.js\").Coordinate>>=} opt_coordinatess Coordinatess.\n * @return {Array<Array<import(\"../../coordinate.js\").Coordinate>>} Coordinatess.\n */\nexport function inflateCoordinatesArray(flatCoordinates, offset, ends, stride, opt_coordinatess) {\n    var coordinatess = opt_coordinatess !== undefined ? opt_coordinatess : [];\n    var i = 0;\n    for (var j = 0, jj = ends.length; j < jj; ++j) {\n        var end = ends[j];\n        coordinatess[i++] = inflateCoordinates(flatCoordinates, offset, end, stride, coordinatess[i]);\n        offset = end;\n    }\n    coordinatess.length = i;\n    return coordinatess;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array<Array<Array<import(\"../../coordinate.js\").Coordinate>>>=} opt_coordinatesss\n *     Coordinatesss.\n * @return {Array<Array<Array<import(\"../../coordinate.js\").Coordinate>>>} Coordinatesss.\n */\nexport function inflateMultiCoordinatesArray(flatCoordinates, offset, endss, stride, opt_coordinatesss) {\n    var coordinatesss = opt_coordinatesss !== undefined ? opt_coordinatesss : [];\n    var i = 0;\n    for (var j = 0, jj = endss.length; j < jj; ++j) {\n        var ends = endss[j];\n        coordinatesss[i++] = inflateCoordinatesArray(flatCoordinates, offset, ends, stride, coordinatesss[i]);\n        offset = ends[ends.length - 1];\n    }\n    coordinatesss.length = i;\n    return coordinatesss;\n}\n//# sourceMappingURL=inflate.js.map","/**\n * @module ol/geom/GeometryLayout\n */\n/**\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available. Supported values are `'XY'`,\n * `'XYZ'`, `'XYM'`, `'XYZM'`.\n * @enum {string}\n */\nexport default {\n    XY: 'XY',\n    XYZ: 'XYZ',\n    XYM: 'XYM',\n    XYZM: 'XYZM',\n};\n//# sourceMappingURL=GeometryLayout.js.map","/**\n * @module ol/geom/flat/transform\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function transform2D(flatCoordinates, offset, end, stride, transform, opt_dest) {\n    var dest = opt_dest ? opt_dest : [];\n    var i = 0;\n    for (var j = offset; j < end; j += stride) {\n        var x = flatCoordinates[j];\n        var y = flatCoordinates[j + 1];\n        dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n        dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n    }\n    if (opt_dest && dest.length != i) {\n        dest.length = i;\n    }\n    return dest;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array<number>} anchor Rotation anchor point.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function rotate(flatCoordinates, offset, end, stride, angle, anchor, opt_dest) {\n    var dest = opt_dest ? opt_dest : [];\n    var cos = Math.cos(angle);\n    var sin = Math.sin(angle);\n    var anchorX = anchor[0];\n    var anchorY = anchor[1];\n    var i = 0;\n    for (var j = offset; j < end; j += stride) {\n        var deltaX = flatCoordinates[j] - anchorX;\n        var deltaY = flatCoordinates[j + 1] - anchorY;\n        dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n        dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n        for (var k = j + 2; k < j + stride; ++k) {\n            dest[i++] = flatCoordinates[k];\n        }\n    }\n    if (opt_dest && dest.length != i) {\n        dest.length = i;\n    }\n    return dest;\n}\n/**\n * Scale the coordinates.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array<number>} anchor Scale anchor point.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function scale(flatCoordinates, offset, end, stride, sx, sy, anchor, opt_dest) {\n    var dest = opt_dest ? opt_dest : [];\n    var anchorX = anchor[0];\n    var anchorY = anchor[1];\n    var i = 0;\n    for (var j = offset; j < end; j += stride) {\n        var deltaX = flatCoordinates[j] - anchorX;\n        var deltaY = flatCoordinates[j + 1] - anchorY;\n        dest[i++] = anchorX + sx * deltaX;\n        dest[i++] = anchorY + sy * deltaY;\n        for (var k = j + 2; k < j + stride; ++k) {\n            dest[i++] = flatCoordinates[k];\n        }\n    }\n    if (opt_dest && dest.length != i) {\n        dest.length = i;\n    }\n    return dest;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function translate(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) {\n    var dest = opt_dest ? opt_dest : [];\n    var i = 0;\n    for (var j = offset; j < end; j += stride) {\n        dest[i++] = flatCoordinates[j] + deltaX;\n        dest[i++] = flatCoordinates[j + 1] + deltaY;\n        for (var k = j + 2; k < j + stride; ++k) {\n            dest[i++] = flatCoordinates[k];\n        }\n    }\n    if (opt_dest && dest.length != i) {\n        dest.length = i;\n    }\n    return dest;\n}\n//# sourceMappingURL=transform.js.map","/*\r\n * (C) Copyright IBM Corp. 2012, 2016 All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *     http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nmodule.exports = undefined;\r\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/events/Target\n */\nimport Disposable from '../Disposable.js';\nimport Event from './Event.js';\nimport { VOID } from '../functions.js';\nimport { clear } from '../obj.js';\n/**\n * @typedef {EventTarget|Target} EventTargetLike\n */\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n *    `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n *    There is no event target hierarchy. When a listener calls\n *    `stopPropagation` or `preventDefault` on an event object, it means that no\n *    more listeners after this one will be called. Same as when the listener\n *    returns false.\n */\nvar Target = /** @class */ (function (_super) {\n    __extends(Target, _super);\n    /**\n     * @param {*=} opt_target Default event target for dispatched events.\n     */\n    function Target(opt_target) {\n        var _this = _super.call(this) || this;\n        /**\n         * @private\n         * @type {*}\n         */\n        _this.eventTarget_ = opt_target;\n        /**\n         * @private\n         * @type {Object<string, number>}\n         */\n        _this.pendingRemovals_ = null;\n        /**\n         * @private\n         * @type {Object<string, number>}\n         */\n        _this.dispatching_ = null;\n        /**\n         * @private\n         * @type {Object<string, Array<import(\"../events.js\").Listener>>}\n         */\n        _this.listeners_ = null;\n        return _this;\n    }\n    /**\n     * @param {string} type Type.\n     * @param {import(\"../events.js\").Listener} listener Listener.\n     */\n    Target.prototype.addEventListener = function (type, listener) {\n        if (!type || !listener) {\n            return;\n        }\n        var listeners = this.listeners_ || (this.listeners_ = {});\n        var listenersForType = listeners[type] || (listeners[type] = []);\n        if (listenersForType.indexOf(listener) === -1) {\n            listenersForType.push(listener);\n        }\n    };\n    /**\n     * Dispatches an event and calls all listeners listening for events\n     * of this type. The event parameter can either be a string or an\n     * Object with a `type` property.\n     *\n     * @param {import(\"./Event.js\").default|string} event Event object.\n     * @return {boolean|undefined} `false` if anyone called preventDefault on the\n     *     event object or if any of the listeners returned false.\n     * @api\n     */\n    Target.prototype.dispatchEvent = function (event) {\n        /** @type {import(\"./Event.js\").default|Event} */\n        var evt = typeof event === 'string' ? new Event(event) : event;\n        var type = evt.type;\n        if (!evt.target) {\n            evt.target = this.eventTarget_ || this;\n        }\n        var listeners = this.listeners_ && this.listeners_[type];\n        var propagate;\n        if (listeners) {\n            var dispatching = this.dispatching_ || (this.dispatching_ = {});\n            var pendingRemovals = this.pendingRemovals_ || (this.pendingRemovals_ = {});\n            if (!(type in dispatching)) {\n                dispatching[type] = 0;\n                pendingRemovals[type] = 0;\n            }\n            ++dispatching[type];\n            for (var i = 0, ii = listeners.length; i < ii; ++i) {\n                if ('handleEvent' in listeners[i]) {\n                    propagate = /** @type {import(\"../events.js\").ListenerObject} */ (listeners[i]).handleEvent(evt);\n                }\n                else {\n                    propagate = /** @type {import(\"../events.js\").ListenerFunction} */ (listeners[i]).call(this, evt);\n                }\n                if (propagate === false || evt.propagationStopped) {\n                    propagate = false;\n                    break;\n                }\n            }\n            --dispatching[type];\n            if (dispatching[type] === 0) {\n                var pr = pendingRemovals[type];\n                delete pendingRemovals[type];\n                while (pr--) {\n                    this.removeEventListener(type, VOID);\n                }\n                delete dispatching[type];\n            }\n            return propagate;\n        }\n    };\n    /**\n     * Clean up.\n     */\n    Target.prototype.disposeInternal = function () {\n        this.listeners_ && clear(this.listeners_);\n    };\n    /**\n     * Get the listeners for a specified event type. Listeners are returned in the\n     * order that they will be called in.\n     *\n     * @param {string} type Type.\n     * @return {Array<import(\"../events.js\").Listener>|undefined} Listeners.\n     */\n    Target.prototype.getListeners = function (type) {\n        return (this.listeners_ && this.listeners_[type]) || undefined;\n    };\n    /**\n     * @param {string=} opt_type Type. If not provided,\n     *     `true` will be returned if this event target has any listeners.\n     * @return {boolean} Has listeners.\n     */\n    Target.prototype.hasListener = function (opt_type) {\n        if (!this.listeners_) {\n            return false;\n        }\n        return opt_type\n            ? opt_type in this.listeners_\n            : Object.keys(this.listeners_).length > 0;\n    };\n    /**\n     * @param {string} type Type.\n     * @param {import(\"../events.js\").Listener} listener Listener.\n     */\n    Target.prototype.removeEventListener = function (type, listener) {\n        var listeners = this.listeners_ && this.listeners_[type];\n        if (listeners) {\n            var index = listeners.indexOf(listener);\n            if (index !== -1) {\n                if (this.pendingRemovals_ && type in this.pendingRemovals_) {\n                    // make listener a no-op, and remove later in #dispatchEvent()\n                    listeners[index] = VOID;\n                    ++this.pendingRemovals_[type];\n                }\n                else {\n                    listeners.splice(index, 1);\n                    if (listeners.length === 0) {\n                        delete this.listeners_[type];\n                    }\n                }\n            }\n        }\n    };\n    return Target;\n}(Disposable));\nexport default Target;\n//# sourceMappingURL=Target.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/layer/Layer\n */\nimport BaseLayer from './Base.js';\nimport EventType from '../events/EventType.js';\nimport LayerProperty from './Property.js';\nimport RenderEventType from '../render/EventType.js';\nimport SourceState from '../source/State.js';\nimport { assert } from '../asserts.js';\nimport { assign } from '../obj.js';\nimport { getChangeEventType } from '../Object.js';\nimport { listen, unlistenByKey } from '../events.js';\n/**\n * @typedef {function(import(\"../PluggableMap.js\").FrameState):HTMLElement} RenderFunction\n */\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"../source/Source.js\").default} [source] Source for this layer.  If not provided to the constructor,\n * the source can be set by calling {@link module:ol/layer/Layer#setSource layer.setSource(source)} after\n * construction.\n * @property {import(\"../PluggableMap.js\").default} [map] Map.\n * @property {RenderFunction} [render] Render function. Takes the frame state as input and is expected to return an\n * HTML element. Will overwrite the default rendering for the layer.\n */\n/**\n * @typedef {Object} State\n * @property {import(\"./Layer.js\").default} layer\n * @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.\n * @property {import(\"../source/State.js\").default} sourceState\n * @property {boolean} visible\n * @property {boolean} managed\n * @property {import(\"../extent.js\").Extent} [extent]\n * @property {number} zIndex\n * @property {number} maxResolution\n * @property {number} minResolution\n * @property {number} minZoom\n * @property {number} maxZoom\n */\n/**\n * @classdesc\n * Base class from which all layer types are derived. This should only be instantiated\n * in the case where a custom layer is be added to the map with a custom `render` function.\n * Such a function can be specified in the `options` object, and is expected to return an HTML element.\n *\n * A visual representation of raster or vector map data.\n * Layers group together those properties that pertain to how the data is to be\n * displayed, irrespective of the source of that data.\n *\n * Layers are usually added to a map with {@link module:ol/Map#addLayer}. Components\n * like {@link module:ol/interaction/Select~Select} use unmanaged layers\n * internally. These unmanaged layers are associated with the map using\n * {@link module:ol/layer/Layer~Layer#setMap} instead.\n *\n * A generic `change` event is fired when the state of the source changes.\n *\n * Please note that for performance reasons several layers might get rendered to\n * the same HTML element, which will cause {@link module:ol/Map~Map#forEachLayerAtPixel} to\n * give false positives. To avoid this, apply different `className` properties to the\n * layers at creation time.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n *\n * @template {import(\"../source/Source.js\").default} SourceType\n * @api\n */\nvar Layer = /** @class */ (function (_super) {\n    __extends(Layer, _super);\n    /**\n     * @param {Options} options Layer options.\n     */\n    function Layer(options) {\n        var _this = this;\n        var baseOptions = assign({}, options);\n        delete baseOptions.source;\n        _this = _super.call(this, baseOptions) || this;\n        /**\n         * @private\n         * @type {?import(\"../events.js\").EventsKey}\n         */\n        _this.mapPrecomposeKey_ = null;\n        /**\n         * @private\n         * @type {?import(\"../events.js\").EventsKey}\n         */\n        _this.mapRenderKey_ = null;\n        /**\n         * @private\n         * @type {?import(\"../events.js\").EventsKey}\n         */\n        _this.sourceChangeKey_ = null;\n        /**\n         * @private\n         * @type {import(\"../renderer/Layer.js\").default}\n         */\n        _this.renderer_ = null;\n        // Overwrite default render method with a custom one\n        if (options.render) {\n            _this.render = options.render;\n        }\n        if (options.map) {\n            _this.setMap(options.map);\n        }\n        _this.addEventListener(getChangeEventType(LayerProperty.SOURCE), _this.handleSourcePropertyChange_);\n        var source = options.source\n            ? /** @type {SourceType} */ (options.source)\n            : null;\n        _this.setSource(source);\n        return _this;\n    }\n    /**\n     * @param {Array<import(\"./Layer.js\").default>=} opt_array Array of layers (to be modified in place).\n     * @return {Array<import(\"./Layer.js\").default>} Array of layers.\n     */\n    Layer.prototype.getLayersArray = function (opt_array) {\n        var array = opt_array ? opt_array : [];\n        array.push(this);\n        return array;\n    };\n    /**\n     * @param {Array<import(\"./Layer.js\").State>=} opt_states Optional list of layer states (to be modified in place).\n     * @return {Array<import(\"./Layer.js\").State>} List of layer states.\n     */\n    Layer.prototype.getLayerStatesArray = function (opt_states) {\n        var states = opt_states ? opt_states : [];\n        states.push(this.getLayerState());\n        return states;\n    };\n    /**\n     * Get the layer source.\n     * @return {SourceType} The layer source (or `null` if not yet set).\n     * @observable\n     * @api\n     */\n    Layer.prototype.getSource = function () {\n        return /** @type {SourceType} */ (this.get(LayerProperty.SOURCE)) || null;\n    };\n    /**\n     * @return {import(\"../source/State.js\").default} Source state.\n     */\n    Layer.prototype.getSourceState = function () {\n        var source = this.getSource();\n        return !source ? SourceState.UNDEFINED : source.getState();\n    };\n    /**\n     * @private\n     */\n    Layer.prototype.handleSourceChange_ = function () {\n        this.changed();\n    };\n    /**\n     * @private\n     */\n    Layer.prototype.handleSourcePropertyChange_ = function () {\n        if (this.sourceChangeKey_) {\n            unlistenByKey(this.sourceChangeKey_);\n            this.sourceChangeKey_ = null;\n        }\n        var source = this.getSource();\n        if (source) {\n            this.sourceChangeKey_ = listen(source, EventType.CHANGE, this.handleSourceChange_, this);\n        }\n        this.changed();\n    };\n    /**\n     * @param {import(\"../pixel\").Pixel} pixel Pixel.\n     * @return {Promise<Array<import(\"../Feature\").default>>} Promise that resolves with\n     * an array of features.\n     */\n    Layer.prototype.getFeatures = function (pixel) {\n        return this.renderer_.getFeatures(pixel);\n    };\n    /**\n     * In charge to manage the rendering of the layer. One layer type is\n     * bounded with one layer renderer.\n     * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {HTMLElement} target Target which the renderer may (but need not) use\n     * for rendering its content.\n     * @return {HTMLElement} The rendered element.\n     */\n    Layer.prototype.render = function (frameState, target) {\n        var layerRenderer = this.getRenderer();\n        if (layerRenderer.prepareFrame(frameState)) {\n            return layerRenderer.renderFrame(frameState, target);\n        }\n    };\n    /**\n     * Sets the layer to be rendered on top of other layers on a map. The map will\n     * not manage this layer in its layers collection, and the callback in\n     * {@link module:ol/Map#forEachLayerAtPixel} will receive `null` as layer. This\n     * is useful for temporary layers. To remove an unmanaged layer from the map,\n     * use `#setMap(null)`.\n     *\n     * To add the layer to a map and have it managed by the map, use\n     * {@link module:ol/Map#addLayer} instead.\n     * @param {import(\"../PluggableMap.js\").default} map Map.\n     * @api\n     */\n    Layer.prototype.setMap = function (map) {\n        if (this.mapPrecomposeKey_) {\n            unlistenByKey(this.mapPrecomposeKey_);\n            this.mapPrecomposeKey_ = null;\n        }\n        if (!map) {\n            this.changed();\n        }\n        if (this.mapRenderKey_) {\n            unlistenByKey(this.mapRenderKey_);\n            this.mapRenderKey_ = null;\n        }\n        if (map) {\n            this.mapPrecomposeKey_ = listen(map, RenderEventType.PRECOMPOSE, function (evt) {\n                var renderEvent = /** @type {import(\"../render/Event.js\").default} */ (evt);\n                var layerStatesArray = renderEvent.frameState.layerStatesArray;\n                var layerState = this.getLayerState(false);\n                // A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both.\n                assert(!layerStatesArray.some(function (arrayLayerState) {\n                    return arrayLayerState.layer === layerState.layer;\n                }), 67);\n                layerStatesArray.push(layerState);\n            }, this);\n            this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map);\n            this.changed();\n        }\n    };\n    /**\n     * Set the layer source.\n     * @param {SourceType} source The layer source.\n     * @observable\n     * @api\n     */\n    Layer.prototype.setSource = function (source) {\n        this.set(LayerProperty.SOURCE, source);\n    };\n    /**\n     * Get the renderer for this layer.\n     * @return {import(\"../renderer/Layer.js\").default} The layer renderer.\n     */\n    Layer.prototype.getRenderer = function () {\n        if (!this.renderer_) {\n            this.renderer_ = this.createRenderer();\n        }\n        return this.renderer_;\n    };\n    /**\n     * @return {boolean} The layer has a renderer.\n     */\n    Layer.prototype.hasRenderer = function () {\n        return !!this.renderer_;\n    };\n    /**\n     * Create a renderer for this layer.\n     * @return {import(\"../renderer/Layer.js\").default} A layer renderer.\n     * @protected\n     */\n    Layer.prototype.createRenderer = function () {\n        return null;\n    };\n    /**\n     * Clean up.\n     */\n    Layer.prototype.disposeInternal = function () {\n        this.setSource(null);\n        _super.prototype.disposeInternal.call(this);\n    };\n    return Layer;\n}(BaseLayer));\n/**\n * Return `true` if the layer is visible and if the provided view state\n * has resolution and zoom levels that are in range of the layer's min/max.\n * @param {State} layerState Layer state.\n * @param {import(\"../View.js\").State} viewState View state.\n * @return {boolean} The layer is visible at the given view state.\n */\nexport function inView(layerState, viewState) {\n    if (!layerState.visible) {\n        return false;\n    }\n    var resolution = viewState.resolution;\n    if (resolution < layerState.minResolution ||\n        resolution >= layerState.maxResolution) {\n        return false;\n    }\n    var zoom = viewState.zoom;\n    return zoom > layerState.minZoom && zoom <= layerState.maxZoom;\n}\nexport default Layer;\n//# sourceMappingURL=Layer.js.map","/**\n * @module ol/source/State\n */\n/**\n * @enum {string}\n * State of the source, one of 'undefined', 'loading', 'ready' or 'error'.\n */\nexport default {\n    UNDEFINED: 'undefined',\n    LOADING: 'loading',\n    READY: 'ready',\n    ERROR: 'error',\n};\n//# sourceMappingURL=State.js.map","/**\n * @module ol/proj/Projection\n */\nimport { METERS_PER_UNIT } from './Units.js';\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").default|string} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link module:ol/proj/Units~METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, import(\"../coordinate.js\").Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `{number}` view resolution and an `{import(\"../coordinate.js\").Coordinate}` as arguments, and returns\n * the `{number}` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj#getPointResolution} function will be used.\n */\n/**\n * @classdesc\n * Projection definition class. One of these is created for each projection\n * supported in the application and stored in the {@link module:ol/proj} namespace.\n * You can use these in applications, but this is not required, as API params\n * and options use {@link module:ol/proj~ProjectionLike} which means the simple string\n * code will suffice.\n *\n * You can use {@link module:ol/proj~get} to retrieve the object for a particular\n * projection.\n *\n * The library includes definitions for `EPSG:4326` and `EPSG:3857`, together\n * with the following aliases:\n * * `EPSG:4326`: CRS:84, urn:ogc:def:crs:EPSG:6.6:4326,\n *     urn:ogc:def:crs:OGC:1.3:CRS84, urn:ogc:def:crs:OGC:2:84,\n *     http://www.opengis.net/gml/srs/epsg.xml#4326,\n *     urn:x-ogc:def:crs:EPSG:4326\n * * `EPSG:3857`: EPSG:102100, EPSG:102113, EPSG:900913,\n *     urn:ogc:def:crs:EPSG:6.18:3:3857,\n *     http://www.opengis.net/gml/srs/epsg.xml#3857\n *\n * If you use [proj4js](https://github.com/proj4js/proj4js), aliases can\n * be added using `proj4.defs()`. After all required projection definitions are\n * added, call the {@link module:ol/proj/proj4~register} function.\n *\n * @api\n */\nvar Projection = /** @class */ (function () {\n    /**\n     * @param {Options} options Projection options.\n     */\n    function Projection(options) {\n        /**\n         * @private\n         * @type {string}\n         */\n        this.code_ = options.code;\n        /**\n         * Units of projected coordinates. When set to `TILE_PIXELS`, a\n         * `this.extent_` and `this.worldExtent_` must be configured properly for each\n         * tile.\n         * @private\n         * @type {import(\"./Units.js\").default}\n         */\n        this.units_ = /** @type {import(\"./Units.js\").default} */ (options.units);\n        /**\n         * Validity extent of the projection in projected coordinates. For projections\n         * with `TILE_PIXELS` units, this is the extent of the tile in\n         * tile pixel space.\n         * @private\n         * @type {import(\"../extent.js\").Extent}\n         */\n        this.extent_ = options.extent !== undefined ? options.extent : null;\n        /**\n         * Extent of the world in EPSG:4326. For projections with\n         * `TILE_PIXELS` units, this is the extent of the tile in\n         * projected coordinate space.\n         * @private\n         * @type {import(\"../extent.js\").Extent}\n         */\n        this.worldExtent_ =\n            options.worldExtent !== undefined ? options.worldExtent : null;\n        /**\n         * @private\n         * @type {string}\n         */\n        this.axisOrientation_ =\n            options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n        /**\n         * @private\n         * @type {boolean}\n         */\n        this.global_ = options.global !== undefined ? options.global : false;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        this.canWrapX_ = !!(this.global_ && this.extent_);\n        /**\n         * @private\n         * @type {function(number, import(\"../coordinate.js\").Coordinate):number|undefined}\n         */\n        this.getPointResolutionFunc_ = options.getPointResolution;\n        /**\n         * @private\n         * @type {import(\"../tilegrid/TileGrid.js\").default}\n         */\n        this.defaultTileGrid_ = null;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        this.metersPerUnit_ = options.metersPerUnit;\n    }\n    /**\n     * @return {boolean} The projection is suitable for wrapping the x-axis\n     */\n    Projection.prototype.canWrapX = function () {\n        return this.canWrapX_;\n    };\n    /**\n     * Get the code for this projection, e.g. 'EPSG:4326'.\n     * @return {string} Code.\n     * @api\n     */\n    Projection.prototype.getCode = function () {\n        return this.code_;\n    };\n    /**\n     * Get the validity extent for this projection.\n     * @return {import(\"../extent.js\").Extent} Extent.\n     * @api\n     */\n    Projection.prototype.getExtent = function () {\n        return this.extent_;\n    };\n    /**\n     * Get the units of this projection.\n     * @return {import(\"./Units.js\").default} Units.\n     * @api\n     */\n    Projection.prototype.getUnits = function () {\n        return this.units_;\n    };\n    /**\n     * Get the amount of meters per unit of this projection.  If the projection is\n     * not configured with `metersPerUnit` or a units identifier, the return is\n     * `undefined`.\n     * @return {number|undefined} Meters.\n     * @api\n     */\n    Projection.prototype.getMetersPerUnit = function () {\n        return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n    };\n    /**\n     * Get the world extent for this projection.\n     * @return {import(\"../extent.js\").Extent} Extent.\n     * @api\n     */\n    Projection.prototype.getWorldExtent = function () {\n        return this.worldExtent_;\n    };\n    /**\n     * Get the axis orientation of this projection.\n     * Example values are:\n     * enu - the default easting, northing, elevation.\n     * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n     *     or south orientated transverse mercator.\n     * wnu - westing, northing, up - some planetary coordinate systems have\n     *     \"west positive\" coordinate systems\n     * @return {string} Axis orientation.\n     * @api\n     */\n    Projection.prototype.getAxisOrientation = function () {\n        return this.axisOrientation_;\n    };\n    /**\n     * Is this projection a global projection which spans the whole world?\n     * @return {boolean} Whether the projection is global.\n     * @api\n     */\n    Projection.prototype.isGlobal = function () {\n        return this.global_;\n    };\n    /**\n     * Set if the projection is a global projection which spans the whole world\n     * @param {boolean} global Whether the projection is global.\n     * @api\n     */\n    Projection.prototype.setGlobal = function (global) {\n        this.global_ = global;\n        this.canWrapX_ = !!(global && this.extent_);\n    };\n    /**\n     * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n     */\n    Projection.prototype.getDefaultTileGrid = function () {\n        return this.defaultTileGrid_;\n    };\n    /**\n     * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n     */\n    Projection.prototype.setDefaultTileGrid = function (tileGrid) {\n        this.defaultTileGrid_ = tileGrid;\n    };\n    /**\n     * Set the validity extent for this projection.\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @api\n     */\n    Projection.prototype.setExtent = function (extent) {\n        this.extent_ = extent;\n        this.canWrapX_ = !!(this.global_ && extent);\n    };\n    /**\n     * Set the world extent for this projection.\n     * @param {import(\"../extent.js\").Extent} worldExtent World extent\n     *     [minlon, minlat, maxlon, maxlat].\n     * @api\n     */\n    Projection.prototype.setWorldExtent = function (worldExtent) {\n        this.worldExtent_ = worldExtent;\n    };\n    /**\n     * Set the getPointResolution function (see {@link module:ol/proj~getPointResolution}\n     * for this projection.\n     * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n     * @api\n     */\n    Projection.prototype.setGetPointResolution = function (func) {\n        this.getPointResolutionFunc_ = func;\n    };\n    /**\n     * Get the custom point resolution function for this projection (if set).\n     * @return {function(number, import(\"../coordinate.js\").Coordinate):number|undefined} The custom point\n     * resolution function (if set).\n     */\n    Projection.prototype.getPointResolutionFunc = function () {\n        return this.getPointResolutionFunc_;\n    };\n    return Projection;\n}());\nexport default Projection;\n//# sourceMappingURL=Projection.js.map","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\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//\n//    1. Redistributions of source code must retain the above copyright notice,\n//       this list of conditions and the following disclaimer.\n//\n//    2. 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//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\nimport { squaredDistance, squaredSegmentDistance } from '../../math.js';\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array<number>=} opt_simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @return {Array<number>} Simplified line string.\n */\nexport function simplifyLineString(flatCoordinates, offset, end, stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) {\n    var simplifiedFlatCoordinates = opt_simplifiedFlatCoordinates !== undefined\n        ? opt_simplifiedFlatCoordinates\n        : [];\n    if (!highQuality) {\n        end = radialDistance(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0);\n        flatCoordinates = simplifiedFlatCoordinates;\n        offset = 0;\n        stride = 2;\n    }\n    simplifiedFlatCoordinates.length = douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0);\n    return simplifiedFlatCoordinates;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n    var n = (end - offset) / stride;\n    if (n < 3) {\n        for (; offset < end; offset += stride) {\n            simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n            simplifiedFlatCoordinates[simplifiedOffset++] =\n                flatCoordinates[offset + 1];\n        }\n        return simplifiedOffset;\n    }\n    /** @type {Array<number>} */\n    var markers = new Array(n);\n    markers[0] = 1;\n    markers[n - 1] = 1;\n    /** @type {Array<number>} */\n    var stack = [offset, end - stride];\n    var index = 0;\n    while (stack.length > 0) {\n        var last = stack.pop();\n        var first = stack.pop();\n        var maxSquaredDistance = 0;\n        var x1 = flatCoordinates[first];\n        var y1 = flatCoordinates[first + 1];\n        var x2 = flatCoordinates[last];\n        var y2 = flatCoordinates[last + 1];\n        for (var i = first + stride; i < last; i += stride) {\n            var x = flatCoordinates[i];\n            var y = flatCoordinates[i + 1];\n            var squaredDistance_1 = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n            if (squaredDistance_1 > maxSquaredDistance) {\n                index = i;\n                maxSquaredDistance = squaredDistance_1;\n            }\n        }\n        if (maxSquaredDistance > squaredTolerance) {\n            markers[(index - offset) / stride] = 1;\n            if (first + stride < index) {\n                stack.push(first, index);\n            }\n            if (index + stride < last) {\n                stack.push(index, last);\n            }\n        }\n    }\n    for (var i = 0; i < n; ++i) {\n        if (markers[i]) {\n            simplifiedFlatCoordinates[simplifiedOffset++] =\n                flatCoordinates[offset + i * stride];\n            simplifiedFlatCoordinates[simplifiedOffset++] =\n                flatCoordinates[offset + i * stride + 1];\n        }\n    }\n    return simplifiedOffset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<number>} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {\n    for (var i = 0, ii = ends.length; i < ii; ++i) {\n        var end = ends[i];\n        simplifiedOffset = douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset);\n        simplifiedEnds.push(simplifiedOffset);\n        offset = end;\n    }\n    return simplifiedOffset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<Array<number>>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(flatCoordinates, offset, endss, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n        var ends = endss[i];\n        var simplifiedEnds = [];\n        simplifiedOffset = douglasPeuckerArray(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);\n        simplifiedEndss.push(simplifiedEnds);\n        offset = ends[ends.length - 1];\n    }\n    return simplifiedOffset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n    if (end <= offset + stride) {\n        // zero or one point, no simplification possible, so copy and return\n        for (; offset < end; offset += stride) {\n            simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n            simplifiedFlatCoordinates[simplifiedOffset++] =\n                flatCoordinates[offset + 1];\n        }\n        return simplifiedOffset;\n    }\n    var x1 = flatCoordinates[offset];\n    var y1 = flatCoordinates[offset + 1];\n    // copy first point\n    simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n    simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n    var x2 = x1;\n    var y2 = y1;\n    for (offset += stride; offset < end; offset += stride) {\n        x2 = flatCoordinates[offset];\n        y2 = flatCoordinates[offset + 1];\n        if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n            // copy point at offset\n            simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n            simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n            x1 = x2;\n            y1 = y2;\n        }\n    }\n    if (x2 != x1 || y2 != y1) {\n        // copy last point\n        simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n        simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n    }\n    return simplifiedOffset;\n}\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n    return tolerance * Math.round(value / tolerance);\n}\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded.  This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string.  This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons.  This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n    // do nothing if the line is empty\n    if (offset == end) {\n        return simplifiedOffset;\n    }\n    // snap the first coordinate (P1)\n    var x1 = snap(flatCoordinates[offset], tolerance);\n    var y1 = snap(flatCoordinates[offset + 1], tolerance);\n    offset += stride;\n    // add the first coordinate to the output\n    simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n    simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n    // find the next coordinate that does not snap to the same value as the first\n    // coordinate (P2)\n    var x2, y2;\n    do {\n        x2 = snap(flatCoordinates[offset], tolerance);\n        y2 = snap(flatCoordinates[offset + 1], tolerance);\n        offset += stride;\n        if (offset == end) {\n            // all coordinates snap to the same value, the line collapses to a point\n            // push the last snapped value anyway to ensure that the output contains\n            // at least two points\n            // FIXME should we really return at least two points anyway?\n            simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n            simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n            return simplifiedOffset;\n        }\n    } while (x2 == x1 && y2 == y1);\n    while (offset < end) {\n        // snap the next coordinate (P3)\n        var x3 = snap(flatCoordinates[offset], tolerance);\n        var y3 = snap(flatCoordinates[offset + 1], tolerance);\n        offset += stride;\n        // skip P3 if it is equal to P2\n        if (x3 == x2 && y3 == y2) {\n            continue;\n        }\n        // calculate the delta between P1 and P2\n        var dx1 = x2 - x1;\n        var dy1 = y2 - y1;\n        // calculate the delta between P3 and P1\n        var dx2 = x3 - x1;\n        var dy2 = y3 - y1;\n        // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n        // P1 in the same direction then P2 is on the straight line between P1 and\n        // P3\n        if (dx1 * dy2 == dy1 * dx2 &&\n            ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n            ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))) {\n            // discard P2 and set P2 = P3\n            x2 = x3;\n            y2 = y3;\n            continue;\n        }\n        // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n        // between P3 and P1 or on the opposite half of the line to P2.  add P2,\n        // and continue with P1 = P2 and P2 = P3\n        simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n        simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n        x1 = x2;\n        y1 = y2;\n        x2 = x3;\n        y2 = y3;\n    }\n    // add the last point (P2)\n    simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n    simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n    return simplifiedOffset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<number>} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {\n    for (var i = 0, ii = ends.length; i < ii; ++i) {\n        var end = ends[i];\n        simplifiedOffset = quantize(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset);\n        simplifiedEnds.push(simplifiedOffset);\n        offset = end;\n    }\n    return simplifiedOffset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<Array<number>>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(flatCoordinates, offset, endss, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n        var ends = endss[i];\n        var simplifiedEnds = [];\n        simplifiedOffset = quantizeArray(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);\n        simplifiedEndss.push(simplifiedEnds);\n        offset = ends[ends.length - 1];\n    }\n    return simplifiedOffset;\n}\n//# sourceMappingURL=simplify.js.map","/**\n * @module ol/size\n */\n/**\n * An array of numbers representing a size: `[width, height]`.\n * @typedef {Array<number>} Size\n * @api\n */\n/**\n * Returns a buffered size.\n * @param {Size} size Size.\n * @param {number} num The amount by which to buffer.\n * @param {Size=} opt_size Optional reusable size array.\n * @return {Size} The buffered size.\n */\nexport function buffer(size, num, opt_size) {\n    if (opt_size === undefined) {\n        opt_size = [0, 0];\n    }\n    opt_size[0] = size[0] + 2 * num;\n    opt_size[1] = size[1] + 2 * num;\n    return opt_size;\n}\n/**\n * Determines if a size has a positive area.\n * @param {Size} size The size to test.\n * @return {boolean} The size has a positive area.\n */\nexport function hasArea(size) {\n    return size[0] > 0 && size[1] > 0;\n}\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n * @param {Size} size Size.\n * @param {number} ratio Ratio.\n * @param {Size=} opt_size Optional reusable size array.\n * @return {Size} The scaled size.\n */\nexport function scale(size, ratio, opt_size) {\n    if (opt_size === undefined) {\n        opt_size = [0, 0];\n    }\n    opt_size[0] = (size[0] * ratio + 0.5) | 0;\n    opt_size[1] = (size[1] * ratio + 0.5) | 0;\n    return opt_size;\n}\n/**\n * Returns an `Size` array for the passed in number (meaning: square) or\n * `Size` array.\n * (meaning: non-square),\n * @param {number|Size} size Width and height.\n * @param {Size=} opt_size Optional reusable size array.\n * @return {Size} Size.\n * @api\n */\nexport function toSize(size, opt_size) {\n    if (Array.isArray(size)) {\n        return size;\n    }\n    else {\n        if (opt_size === undefined) {\n            opt_size = [size, size];\n        }\n        else {\n            opt_size[0] = size;\n            opt_size[1] = size;\n        }\n        return opt_size;\n    }\n}\n//# sourceMappingURL=size.js.map","/**\n * @module ol/structs/RBush\n */\nimport RBush_ from 'rbush';\nimport { createOrUpdate, equals } from '../extent.js';\nimport { getUid } from '../util.js';\nimport { isEmpty } from '../obj.js';\n/**\n * @typedef {Object} Entry\n * @property {number} minX\n * @property {number} minY\n * @property {number} maxX\n * @property {number} maxY\n * @property {Object} [value]\n */\n/**\n * @classdesc\n * Wrapper around the RBush by Vladimir Agafonkin.\n * See https://github.com/mourner/rbush.\n *\n * @template T\n */\nvar RBush = /** @class */ (function () {\n    /**\n     * @param {number=} opt_maxEntries Max entries.\n     */\n    function RBush(opt_maxEntries) {\n        /**\n         * @private\n         */\n        this.rbush_ = new RBush_(opt_maxEntries);\n        /**\n         * A mapping between the objects added to this rbush wrapper\n         * and the objects that are actually added to the internal rbush.\n         * @private\n         * @type {Object<string, Entry>}\n         */\n        this.items_ = {};\n    }\n    /**\n     * Insert a value into the RBush.\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {T} value Value.\n     */\n    RBush.prototype.insert = function (extent, value) {\n        /** @type {Entry} */\n        var item = {\n            minX: extent[0],\n            minY: extent[1],\n            maxX: extent[2],\n            maxY: extent[3],\n            value: value,\n        };\n        this.rbush_.insert(item);\n        this.items_[getUid(value)] = item;\n    };\n    /**\n     * Bulk-insert values into the RBush.\n     * @param {Array<import(\"../extent.js\").Extent>} extents Extents.\n     * @param {Array<T>} values Values.\n     */\n    RBush.prototype.load = function (extents, values) {\n        var items = new Array(values.length);\n        for (var i = 0, l = values.length; i < l; i++) {\n            var extent = extents[i];\n            var value = values[i];\n            /** @type {Entry} */\n            var item = {\n                minX: extent[0],\n                minY: extent[1],\n                maxX: extent[2],\n                maxY: extent[3],\n                value: value,\n            };\n            items[i] = item;\n            this.items_[getUid(value)] = item;\n        }\n        this.rbush_.load(items);\n    };\n    /**\n     * Remove a value from the RBush.\n     * @param {T} value Value.\n     * @return {boolean} Removed.\n     */\n    RBush.prototype.remove = function (value) {\n        var uid = getUid(value);\n        // get the object in which the value was wrapped when adding to the\n        // internal rbush. then use that object to do the removal.\n        var item = this.items_[uid];\n        delete this.items_[uid];\n        return this.rbush_.remove(item) !== null;\n    };\n    /**\n     * Update the extent of a value in the RBush.\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {T} value Value.\n     */\n    RBush.prototype.update = function (extent, value) {\n        var item = this.items_[getUid(value)];\n        var bbox = [item.minX, item.minY, item.maxX, item.maxY];\n        if (!equals(bbox, extent)) {\n            this.remove(value);\n            this.insert(extent, value);\n        }\n    };\n    /**\n     * Return all values in the RBush.\n     * @return {Array<T>} All.\n     */\n    RBush.prototype.getAll = function () {\n        var items = this.rbush_.all();\n        return items.map(function (item) {\n            return item.value;\n        });\n    };\n    /**\n     * Return all values in the given extent.\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @return {Array<T>} All in extent.\n     */\n    RBush.prototype.getInExtent = function (extent) {\n        /** @type {Entry} */\n        var bbox = {\n            minX: extent[0],\n            minY: extent[1],\n            maxX: extent[2],\n            maxY: extent[3],\n        };\n        var items = this.rbush_.search(bbox);\n        return items.map(function (item) {\n            return item.value;\n        });\n    };\n    /**\n     * Calls a callback function with each value in the tree.\n     * If the callback returns a truthy value, this value is returned without\n     * checking the rest of the tree.\n     * @param {function(T): *} callback Callback.\n     * @return {*} Callback return value.\n     */\n    RBush.prototype.forEach = function (callback) {\n        return this.forEach_(this.getAll(), callback);\n    };\n    /**\n     * Calls a callback function with each value in the provided extent.\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {function(T): *} callback Callback.\n     * @return {*} Callback return value.\n     */\n    RBush.prototype.forEachInExtent = function (extent, callback) {\n        return this.forEach_(this.getInExtent(extent), callback);\n    };\n    /**\n     * @param {Array<T>} values Values.\n     * @param {function(T): *} callback Callback.\n     * @private\n     * @return {*} Callback return value.\n     */\n    RBush.prototype.forEach_ = function (values, callback) {\n        var result;\n        for (var i = 0, l = values.length; i < l; i++) {\n            result = callback(values[i]);\n            if (result) {\n                return result;\n            }\n        }\n        return result;\n    };\n    /**\n     * @return {boolean} Is empty.\n     */\n    RBush.prototype.isEmpty = function () {\n        return isEmpty(this.items_);\n    };\n    /**\n     * Remove all values from the RBush.\n     */\n    RBush.prototype.clear = function () {\n        this.rbush_.clear();\n        this.items_ = {};\n    };\n    /**\n     * @param {import(\"../extent.js\").Extent=} opt_extent Extent.\n     * @return {import(\"../extent.js\").Extent} Extent.\n     */\n    RBush.prototype.getExtent = function (opt_extent) {\n        var data = this.rbush_.toJSON();\n        return createOrUpdate(data.minX, data.minY, data.maxX, data.maxY, opt_extent);\n    };\n    /**\n     * @param {RBush} rbush R-Tree.\n     */\n    RBush.prototype.concat = function (rbush) {\n        this.rbush_.load(rbush.rbush_.all());\n        for (var i in rbush.items_) {\n            this.items_[i] = rbush.items_[i];\n        }\n    };\n    return RBush;\n}());\nexport default RBush;\n//# sourceMappingURL=RBush.js.map","/**\n * @module ol/source/VectorEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n    /**\n     * Triggered when a feature is added to the source.\n     * @event module:ol/source/Vector.VectorSourceEvent#addfeature\n     * @api\n     */\n    ADDFEATURE: 'addfeature',\n    /**\n     * Triggered when a feature is updated.\n     * @event module:ol/source/Vector.VectorSourceEvent#changefeature\n     * @api\n     */\n    CHANGEFEATURE: 'changefeature',\n    /**\n     * Triggered when the clear method is called on the source.\n     * @event module:ol/source/Vector.VectorSourceEvent#clear\n     * @api\n     */\n    CLEAR: 'clear',\n    /**\n     * Triggered when a feature is removed from the source.\n     * See {@link module:ol/source/Vector#clear source.clear()} for exceptions.\n     * @event module:ol/source/Vector.VectorSourceEvent#removefeature\n     * @api\n     */\n    REMOVEFEATURE: 'removefeature',\n    /**\n     * Triggered when features starts loading.\n     * @event module:ol/source/Vector.VectorSourceEvent#featuresloadstart\n     * @api\n     */\n    FEATURESLOADSTART: 'featuresloadstart',\n    /**\n     * Triggered when features finishes loading.\n     * @event module:ol/source/Vector.VectorSourceEvent#featuresloadend\n     * @api\n     */\n    FEATURESLOADEND: 'featuresloadend',\n    /**\n     * Triggered if feature loading results in an error.\n     * @event module:ol/source/Vector.VectorSourceEvent#featuresloaderror\n     * @api\n     */\n    FEATURESLOADERROR: 'featuresloaderror',\n};\n//# sourceMappingURL=VectorEventType.js.map","/**\n * @module ol/tilecoord\n */\n/**\n * An array of three numbers representing the location of a tile in a tile\n * grid. The order is `z` (zoom level), `x` (column), and `y` (row).\n * @typedef {Array<number>} TileCoord\n * @api\n */\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {TileCoord=} opt_tileCoord Tile coordinate.\n * @return {TileCoord} Tile coordinate.\n */\nexport function createOrUpdate(z, x, y, opt_tileCoord) {\n    if (opt_tileCoord !== undefined) {\n        opt_tileCoord[0] = z;\n        opt_tileCoord[1] = x;\n        opt_tileCoord[2] = y;\n        return opt_tileCoord;\n    }\n    else {\n        return [z, x, y];\n    }\n}\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {string} Key.\n */\nexport function getKeyZXY(z, x, y) {\n    return z + '/' + x + '/' + y;\n}\n/**\n * Get the key for a tile coord.\n * @param {TileCoord} tileCoord The tile coord.\n * @return {string} Key.\n */\nexport function getKey(tileCoord) {\n    return getKeyZXY(tileCoord[0], tileCoord[1], tileCoord[2]);\n}\n/**\n * Get a tile coord given a key.\n * @param {string} key The tile coord key.\n * @return {TileCoord} The tile coord.\n */\nexport function fromKey(key) {\n    return key.split('/').map(Number);\n}\n/**\n * @param {TileCoord} tileCoord Tile coord.\n * @return {number} Hash.\n */\nexport function hash(tileCoord) {\n    return (tileCoord[1] << tileCoord[0]) + tileCoord[2];\n}\n/**\n * @param {TileCoord} tileCoord Tile coordinate.\n * @param {!import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {boolean} Tile coordinate is within extent and zoom level range.\n */\nexport function withinExtentAndZ(tileCoord, tileGrid) {\n    var z = tileCoord[0];\n    var x = tileCoord[1];\n    var y = tileCoord[2];\n    if (tileGrid.getMinZoom() > z || z > tileGrid.getMaxZoom()) {\n        return false;\n    }\n    var tileRange = tileGrid.getFullTileRange(z);\n    if (!tileRange) {\n        return true;\n    }\n    else {\n        return tileRange.containsXY(x, y);\n    }\n}\n//# sourceMappingURL=tilecoord.js.map","/**\n * @module ol/ObjectEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n    /**\n     * Triggered when a property is changed.\n     * @event module:ol/Object.ObjectEvent#propertychange\n     * @api\n     */\n    PROPERTYCHANGE: 'propertychange',\n};\n//# sourceMappingURL=ObjectEventType.js.map","/**\n * @module ol/MapEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n    /**\n     * Triggered after a map frame is rendered.\n     * @event module:ol/MapEvent~MapEvent#postrender\n     * @api\n     */\n    POSTRENDER: 'postrender',\n    /**\n     * Triggered when the map starts moving.\n     * @event module:ol/MapEvent~MapEvent#movestart\n     * @api\n     */\n    MOVESTART: 'movestart',\n    /**\n     * Triggered after the map is moved.\n     * @event module:ol/MapEvent~MapEvent#moveend\n     * @api\n     */\n    MOVEEND: 'moveend',\n};\n//# sourceMappingURL=MapEventType.js.map","/**\n * @module ol/geom/flat/closest\n */\nimport { lerp, squaredDistance as squaredDx } from '../../math.js';\n/**\n * Returns the point on the 2D line segment flatCoordinates[offset1] to\n * flatCoordinates[offset2] that is closest to the point (x, y).  Extra\n * dimensions are linearly interpolated.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset1 Offset 1.\n * @param {number} offset2 Offset 2.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n */\nfunction assignClosest(flatCoordinates, offset1, offset2, stride, x, y, closestPoint) {\n    var x1 = flatCoordinates[offset1];\n    var y1 = flatCoordinates[offset1 + 1];\n    var dx = flatCoordinates[offset2] - x1;\n    var dy = flatCoordinates[offset2 + 1] - y1;\n    var offset;\n    if (dx === 0 && dy === 0) {\n        offset = offset1;\n    }\n    else {\n        var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n        if (t > 1) {\n            offset = offset2;\n        }\n        else if (t > 0) {\n            for (var i = 0; i < stride; ++i) {\n                closestPoint[i] = lerp(flatCoordinates[offset1 + i], flatCoordinates[offset2 + i], t);\n            }\n            closestPoint.length = stride;\n            return;\n        }\n        else {\n            offset = offset1;\n        }\n    }\n    for (var i = 0; i < stride; ++i) {\n        closestPoint[i] = flatCoordinates[offset + i];\n    }\n    closestPoint.length = stride;\n}\n/**\n * Return the squared of the largest distance between any pair of consecutive\n * coordinates.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function maxSquaredDelta(flatCoordinates, offset, end, stride, max) {\n    var x1 = flatCoordinates[offset];\n    var y1 = flatCoordinates[offset + 1];\n    for (offset += stride; offset < end; offset += stride) {\n        var x2 = flatCoordinates[offset];\n        var y2 = flatCoordinates[offset + 1];\n        var squaredDelta = squaredDx(x1, y1, x2, y2);\n        if (squaredDelta > max) {\n            max = squaredDelta;\n        }\n        x1 = x2;\n        y1 = y2;\n    }\n    return max;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max) {\n    for (var i = 0, ii = ends.length; i < ii; ++i) {\n        var end = ends[i];\n        max = maxSquaredDelta(flatCoordinates, offset, end, stride, max);\n        offset = end;\n    }\n    return max;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function multiArrayMaxSquaredDelta(flatCoordinates, offset, endss, stride, max) {\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n        var ends = endss[i];\n        max = arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max);\n        offset = ends[ends.length - 1];\n    }\n    return max;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array<number>=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestPoint(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {\n    if (offset == end) {\n        return minSquaredDistance;\n    }\n    var i, squaredDistance;\n    if (maxDelta === 0) {\n        // All points are identical, so just test the first point.\n        squaredDistance = squaredDx(x, y, flatCoordinates[offset], flatCoordinates[offset + 1]);\n        if (squaredDistance < minSquaredDistance) {\n            for (i = 0; i < stride; ++i) {\n                closestPoint[i] = flatCoordinates[offset + i];\n            }\n            closestPoint.length = stride;\n            return squaredDistance;\n        }\n        else {\n            return minSquaredDistance;\n        }\n    }\n    var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n    var index = offset + stride;\n    while (index < end) {\n        assignClosest(flatCoordinates, index - stride, index, stride, x, y, tmpPoint);\n        squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n        if (squaredDistance < minSquaredDistance) {\n            minSquaredDistance = squaredDistance;\n            for (i = 0; i < stride; ++i) {\n                closestPoint[i] = tmpPoint[i];\n            }\n            closestPoint.length = stride;\n            index += stride;\n        }\n        else {\n            // Skip ahead multiple points, because we know that all the skipped\n            // points cannot be any closer than the closest point we have found so\n            // far.  We know this because we know how close the current point is, how\n            // close the closest point we have found so far is, and the maximum\n            // distance between consecutive points.  For example, if we're currently\n            // at distance 10, the best we've found so far is 3, and that the maximum\n            // distance between consecutive points is 2, then we'll need to skip at\n            // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of\n            // finding a closer point.  We use Math.max(..., 1) to ensure that we\n            // always advance at least one point, to avoid an infinite loop.\n            index +=\n                stride *\n                    Math.max(((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) /\n                        maxDelta) |\n                        0, 1);\n        }\n    }\n    if (isRing) {\n        // Check the closing segment.\n        assignClosest(flatCoordinates, end - stride, offset, stride, x, y, tmpPoint);\n        squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n        if (squaredDistance < minSquaredDistance) {\n            minSquaredDistance = squaredDistance;\n            for (i = 0; i < stride; ++i) {\n                closestPoint[i] = tmpPoint[i];\n            }\n            closestPoint.length = stride;\n        }\n    }\n    return minSquaredDistance;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array<number>=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestArrayPoint(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {\n    var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n    for (var i = 0, ii = ends.length; i < ii; ++i) {\n        var end = ends[i];\n        minSquaredDistance = assignClosestPoint(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);\n        offset = end;\n    }\n    return minSquaredDistance;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array<number>=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestMultiArrayPoint(flatCoordinates, offset, endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {\n    var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n        var ends = endss[i];\n        minSquaredDistance = assignClosestArrayPoint(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);\n        offset = ends[ends.length - 1];\n    }\n    return minSquaredDistance;\n}\n//# sourceMappingURL=closest.js.map","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\nimport { reparentNodes } from './dom.js';\nimport { boundAttributeSuffix, lastAttributeNameRegex, marker, nodeMarker } from './template.js';\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = window.trustedTypes &&\n    trustedTypes.createPolicy('lit-html', { createHTML: (s) => s });\nconst commentMarker = ` ${marker} `;\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nexport class TemplateResult {\n    constructor(strings, values, type, processor) {\n        this.strings = strings;\n        this.values = values;\n        this.type = type;\n        this.processor = processor;\n    }\n    /**\n     * Returns a string of HTML used to create a `<template>` element.\n     */\n    getHTML() {\n        const l = this.strings.length - 1;\n        let html = '';\n        let isCommentBinding = false;\n        for (let i = 0; i < l; i++) {\n            const s = this.strings[i];\n            // For each binding we want to determine the kind of marker to insert\n            // into the template source before it's parsed by the browser's HTML\n            // parser. The marker type is based on whether the expression is in an\n            // attribute, text, or comment position.\n            //   * For node-position bindings we insert a comment with the marker\n            //     sentinel as its text content, like <!--{{lit-guid}}-->.\n            //   * For attribute bindings we insert just the marker sentinel for the\n            //     first binding, so that we support unquoted attribute bindings.\n            //     Subsequent bindings can use a comment marker because multi-binding\n            //     attributes must be quoted.\n            //   * For comment bindings we insert just the marker sentinel so we don't\n            //     close the comment.\n            //\n            // The following code scans the template source, but is *not* an HTML\n            // parser. We don't need to track the tree structure of the HTML, only\n            // whether a binding is inside a comment, and if not, if it appears to be\n            // the first binding in an attribute.\n            const commentOpen = s.lastIndexOf('<!--');\n            // We're in comment position if we have a comment open with no following\n            // comment close. Because <-- can appear in an attribute value there can\n            // be false positives.\n            isCommentBinding = (commentOpen > -1 || isCommentBinding) &&\n                s.indexOf('-->', commentOpen + 1) === -1;\n            // Check to see if we have an attribute-like sequence preceding the\n            // expression. This can match \"name=value\" like structures in text,\n            // comments, and attribute values, so there can be false-positives.\n            const attributeMatch = lastAttributeNameRegex.exec(s);\n            if (attributeMatch === null) {\n                // We're only in this branch if we don't have a attribute-like\n                // preceding sequence. For comments, this guards against unusual\n                // attribute values like <div foo=\"<!--${'bar'}\">. Cases like\n                // <!-- foo=${'bar'}--> are handled correctly in the attribute branch\n                // below.\n                html += s + (isCommentBinding ? commentMarker : nodeMarker);\n            }\n            else {\n                // For attributes we use just a marker sentinel, and also append a\n                // $lit$ suffix to the name to opt-out of attribute-specific parsing\n                // that IE and Edge do for style and certain SVG attributes.\n                html += s.substr(0, attributeMatch.index) + attributeMatch[1] +\n                    attributeMatch[2] + boundAttributeSuffix + attributeMatch[3] +\n                    marker;\n            }\n        }\n        html += this.strings[l];\n        return html;\n    }\n    getTemplateElement() {\n        const template = document.createElement('template');\n        let value = this.getHTML();\n        if (policy !== undefined) {\n            // this is secure because `this.strings` is a TemplateStringsArray.\n            // TODO: validate this when\n            // https://github.com/tc39/proposal-array-is-template-object is\n            // implemented.\n            value = policy.createHTML(value);\n        }\n        template.innerHTML = value;\n        return template;\n    }\n}\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTML in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nexport class SVGTemplateResult extends TemplateResult {\n    getHTML() {\n        return `<svg>${super.getHTML()}</svg>`;\n    }\n    getTemplateElement() {\n        const template = super.getTemplateElement();\n        const content = template.content;\n        const svgElement = content.firstChild;\n        content.removeChild(svgElement);\n        reparentNodes(content, svgElement.firstChild);\n        return template;\n    }\n}\n//# sourceMappingURL=template-result.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { marker, Template } from './template.js';\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nexport function templateFactory(result) {\n    let templateCache = templateCaches.get(result.type);\n    if (templateCache === undefined) {\n        templateCache = {\n            stringsArray: new WeakMap(),\n            keyString: new Map()\n        };\n        templateCaches.set(result.type, templateCache);\n    }\n    let template = templateCache.stringsArray.get(result.strings);\n    if (template !== undefined) {\n        return template;\n    }\n    // If the TemplateStringsArray is new, generate a key from the strings\n    // This key is shared between all templates with identical content\n    const key = result.strings.join(marker);\n    // Check if we already have a Template for this key\n    template = templateCache.keyString.get(key);\n    if (template === undefined) {\n        // If we have not seen this key before, create a new Template\n        template = new Template(result, result.getTemplateElement());\n        // Cache the Template for this key\n        templateCache.keyString.set(key, template);\n    }\n    // Cache all future queries for this TemplateStringsArray\n    templateCache.stringsArray.set(result.strings, template);\n    return template;\n}\nexport const templateCaches = new Map();\n//# sourceMappingURL=template-factory.js.map","/**\n * @module ol/reproj/common\n */\n/**\n * Default maximum allowed threshold  (in pixels) for reprojection\n * triangulation.\n * @type {number}\n */\nexport var ERROR_THRESHOLD = 0.5;\n/**\n * Enable automatic reprojection of raster sources. Default is `true`.\n * TODO: decide if we want to expose this as a build flag or remove it\n * @type {boolean}\n */\nexport var ENABLE_RASTER_REPROJECTION = true;\n//# sourceMappingURL=common.js.map","/**\n * @module ol/tilegrid/TileGrid\n */\nimport TileRange, { createOrUpdate as createOrUpdateTileRange, } from '../TileRange.js';\nimport { DEFAULT_TILE_SIZE } from './common.js';\nimport { assert } from '../asserts.js';\nimport { clamp } from '../math.js';\nimport { createOrUpdate, getTopLeft } from '../extent.js';\nimport { createOrUpdate as createOrUpdateTileCoord } from '../tilecoord.js';\nimport { isSorted, linearFindNearest } from '../array.js';\nimport { toSize } from '../size.js';\n/**\n * @private\n * @type {import(\"../tilecoord.js\").TileCoord}\n */\nvar tmpTileCoord = [0, 0, 0];\n/**\n * @typedef {Object} Options\n * @property {import(\"../extent.js\").Extent} [extent] Extent for the tile grid. No tiles outside this\n * extent will be requested by {@link module:ol/source/Tile} sources. When no `origin` or\n * `origins` are configured, the `origin` will be set to the top-left corner of the extent.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {import(\"../coordinate.js\").Coordinate} [origin] The tile grid origin, i.e. where the `x`\n * and `y` axes meet (`[z, 0, 0]`). Tile coordinates increase left to right and downwards. If not\n * specified, `extent` or `origins` must be provided.\n * @property {Array<import(\"../coordinate.js\").Coordinate>} [origins] Tile grid origins, i.e. where\n * the `x` and `y` axes meet (`[z, 0, 0]`), for each zoom level. If given, the array length\n * should match the length of the `resolutions` array, i.e. each resolution can have a different\n * origin. Tile coordinates increase left to right and downwards. If not specified, `extent` or\n * `origin` must be provided.\n * @property {!Array<number>} resolutions Resolutions. The array index of each resolution needs\n * to match the zoom level. This means that even if a `minZoom` is configured, the resolutions\n * array will have a length of `maxZoom + 1`.\n * @property {Array<import(\"../size.js\").Size>} [sizes] Number of tile rows and columns\n * of the grid for each zoom level. If specified the values\n * define each zoom level's extent together with the `origin` or `origins`.\n * A grid `extent` can be configured in addition, and will further limit the extent\n * for which tile requests are made by sources. If the bottom-left corner of\n * an extent is used as `origin` or `origins`, then the `y` value must be\n * negative because OpenLayers tile coordinates use the top left as the origin.\n * @property {number|import(\"../size.js\").Size} [tileSize] Tile size.\n * Default is `[256, 256]`.\n * @property {Array<import(\"../size.js\").Size>} [tileSizes] Tile sizes. If given, the array length\n * should match the length of the `resolutions` array, i.e. each resolution can have a different\n * tile size.\n */\n/**\n * @classdesc\n * Base class for setting the grid pattern for sources accessing tiled-image\n * servers.\n * @api\n */\nvar TileGrid = /** @class */ (function () {\n    /**\n     * @param {Options} options Tile grid options.\n     */\n    function TileGrid(options) {\n        /**\n         * @protected\n         * @type {number}\n         */\n        this.minZoom = options.minZoom !== undefined ? options.minZoom : 0;\n        /**\n         * @private\n         * @type {!Array<number>}\n         */\n        this.resolutions_ = options.resolutions;\n        assert(isSorted(this.resolutions_, function (a, b) {\n            return b - a;\n        }, true), 17); // `resolutions` must be sorted in descending order\n        // check if we've got a consistent zoom factor and origin\n        var zoomFactor;\n        if (!options.origins) {\n            for (var i = 0, ii = this.resolutions_.length - 1; i < ii; ++i) {\n                if (!zoomFactor) {\n                    zoomFactor = this.resolutions_[i] / this.resolutions_[i + 1];\n                }\n                else {\n                    if (this.resolutions_[i] / this.resolutions_[i + 1] !== zoomFactor) {\n                        zoomFactor = undefined;\n                        break;\n                    }\n                }\n            }\n        }\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        this.zoomFactor_ = zoomFactor;\n        /**\n         * @protected\n         * @type {number}\n         */\n        this.maxZoom = this.resolutions_.length - 1;\n        /**\n         * @private\n         * @type {import(\"../coordinate.js\").Coordinate}\n         */\n        this.origin_ = options.origin !== undefined ? options.origin : null;\n        /**\n         * @private\n         * @type {Array<import(\"../coordinate.js\").Coordinate>}\n         */\n        this.origins_ = null;\n        if (options.origins !== undefined) {\n            this.origins_ = options.origins;\n            assert(this.origins_.length == this.resolutions_.length, 20); // Number of `origins` and `resolutions` must be equal\n        }\n        var extent = options.extent;\n        if (extent !== undefined && !this.origin_ && !this.origins_) {\n            this.origin_ = getTopLeft(extent);\n        }\n        assert((!this.origin_ && this.origins_) || (this.origin_ && !this.origins_), 18); // Either `origin` or `origins` must be configured, never both\n        /**\n         * @private\n         * @type {Array<number|import(\"../size.js\").Size>}\n         */\n        this.tileSizes_ = null;\n        if (options.tileSizes !== undefined) {\n            this.tileSizes_ = options.tileSizes;\n            assert(this.tileSizes_.length == this.resolutions_.length, 19); // Number of `tileSizes` and `resolutions` must be equal\n        }\n        /**\n         * @private\n         * @type {number|import(\"../size.js\").Size}\n         */\n        this.tileSize_ =\n            options.tileSize !== undefined\n                ? options.tileSize\n                : !this.tileSizes_\n                    ? DEFAULT_TILE_SIZE\n                    : null;\n        assert((!this.tileSize_ && this.tileSizes_) ||\n            (this.tileSize_ && !this.tileSizes_), 22); // Either `tileSize` or `tileSizes` must be configured, never both\n        /**\n         * @private\n         * @type {import(\"../extent.js\").Extent}\n         */\n        this.extent_ = extent !== undefined ? extent : null;\n        /**\n         * @private\n         * @type {Array<import(\"../TileRange.js\").default>}\n         */\n        this.fullTileRanges_ = null;\n        /**\n         * @private\n         * @type {import(\"../size.js\").Size}\n         */\n        this.tmpSize_ = [0, 0];\n        if (options.sizes !== undefined) {\n            this.fullTileRanges_ = options.sizes.map(function (size, z) {\n                var tileRange = new TileRange(Math.min(0, size[0]), Math.max(size[0] - 1, -1), Math.min(0, size[1]), Math.max(size[1] - 1, -1));\n                if (extent) {\n                    var restrictedTileRange = this.getTileRangeForExtentAndZ(extent, z);\n                    tileRange.minX = Math.max(restrictedTileRange.minX, tileRange.minX);\n                    tileRange.maxX = Math.min(restrictedTileRange.maxX, tileRange.maxX);\n                    tileRange.minY = Math.max(restrictedTileRange.minY, tileRange.minY);\n                    tileRange.maxY = Math.min(restrictedTileRange.maxY, tileRange.maxY);\n                }\n                return tileRange;\n            }, this);\n        }\n        else if (extent) {\n            this.calculateTileRanges_(extent);\n        }\n    }\n    /**\n     * Call a function with each tile coordinate for a given extent and zoom level.\n     *\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {number} zoom Integer zoom level.\n     * @param {function(import(\"../tilecoord.js\").TileCoord): void} callback Function called with each tile coordinate.\n     * @api\n     */\n    TileGrid.prototype.forEachTileCoord = function (extent, zoom, callback) {\n        var tileRange = this.getTileRangeForExtentAndZ(extent, zoom);\n        for (var i = tileRange.minX, ii = tileRange.maxX; i <= ii; ++i) {\n            for (var j = tileRange.minY, jj = tileRange.maxY; j <= jj; ++j) {\n                callback([zoom, i, j]);\n            }\n        }\n    };\n    /**\n     * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n     * @param {function(number, import(\"../TileRange.js\").default): boolean} callback Callback.\n     * @param {import(\"../TileRange.js\").default=} opt_tileRange Temporary import(\"../TileRange.js\").default object.\n     * @param {import(\"../extent.js\").Extent=} opt_extent Temporary import(\"../extent.js\").Extent object.\n     * @return {boolean} Callback succeeded.\n     */\n    TileGrid.prototype.forEachTileCoordParentTileRange = function (tileCoord, callback, opt_tileRange, opt_extent) {\n        var tileRange, x, y;\n        var tileCoordExtent = null;\n        var z = tileCoord[0] - 1;\n        if (this.zoomFactor_ === 2) {\n            x = tileCoord[1];\n            y = tileCoord[2];\n        }\n        else {\n            tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);\n        }\n        while (z >= this.minZoom) {\n            if (this.zoomFactor_ === 2) {\n                x = Math.floor(x / 2);\n                y = Math.floor(y / 2);\n                tileRange = createOrUpdateTileRange(x, x, y, y, opt_tileRange);\n            }\n            else {\n                tileRange = this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange);\n            }\n            if (callback(z, tileRange)) {\n                return true;\n            }\n            --z;\n        }\n        return false;\n    };\n    /**\n     * Get the extent for this tile grid, if it was configured.\n     * @return {import(\"../extent.js\").Extent} Extent.\n     * @api\n     */\n    TileGrid.prototype.getExtent = function () {\n        return this.extent_;\n    };\n    /**\n     * Get the maximum zoom level for the grid.\n     * @return {number} Max zoom.\n     * @api\n     */\n    TileGrid.prototype.getMaxZoom = function () {\n        return this.maxZoom;\n    };\n    /**\n     * Get the minimum zoom level for the grid.\n     * @return {number} Min zoom.\n     * @api\n     */\n    TileGrid.prototype.getMinZoom = function () {\n        return this.minZoom;\n    };\n    /**\n     * Get the origin for the grid at the given zoom level.\n     * @param {number} z Integer zoom level.\n     * @return {import(\"../coordinate.js\").Coordinate} Origin.\n     * @api\n     */\n    TileGrid.prototype.getOrigin = function (z) {\n        if (this.origin_) {\n            return this.origin_;\n        }\n        else {\n            return this.origins_[z];\n        }\n    };\n    /**\n     * Get the resolution for the given zoom level.\n     * @param {number} z Integer zoom level.\n     * @return {number} Resolution.\n     * @api\n     */\n    TileGrid.prototype.getResolution = function (z) {\n        return this.resolutions_[z];\n    };\n    /**\n     * Get the list of resolutions for the tile grid.\n     * @return {Array<number>} Resolutions.\n     * @api\n     */\n    TileGrid.prototype.getResolutions = function () {\n        return this.resolutions_;\n    };\n    /**\n     * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n     * @param {import(\"../TileRange.js\").default=} opt_tileRange Temporary import(\"../TileRange.js\").default object.\n     * @param {import(\"../extent.js\").Extent=} opt_extent Temporary import(\"../extent.js\").Extent object.\n     * @return {import(\"../TileRange.js\").default} Tile range.\n     */\n    TileGrid.prototype.getTileCoordChildTileRange = function (tileCoord, opt_tileRange, opt_extent) {\n        if (tileCoord[0] < this.maxZoom) {\n            if (this.zoomFactor_ === 2) {\n                var minX = tileCoord[1] * 2;\n                var minY = tileCoord[2] * 2;\n                return createOrUpdateTileRange(minX, minX + 1, minY, minY + 1, opt_tileRange);\n            }\n            var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);\n            return this.getTileRangeForExtentAndZ(tileCoordExtent, tileCoord[0] + 1, opt_tileRange);\n        }\n        return null;\n    };\n    /**\n     * Get the extent for a tile range.\n     * @param {number} z Integer zoom level.\n     * @param {import(\"../TileRange.js\").default} tileRange Tile range.\n     * @param {import(\"../extent.js\").Extent=} opt_extent Temporary import(\"../extent.js\").Extent object.\n     * @return {import(\"../extent.js\").Extent} Extent.\n     */\n    TileGrid.prototype.getTileRangeExtent = function (z, tileRange, opt_extent) {\n        var origin = this.getOrigin(z);\n        var resolution = this.getResolution(z);\n        var tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n        var minX = origin[0] + tileRange.minX * tileSize[0] * resolution;\n        var maxX = origin[0] + (tileRange.maxX + 1) * tileSize[0] * resolution;\n        var minY = origin[1] + tileRange.minY * tileSize[1] * resolution;\n        var maxY = origin[1] + (tileRange.maxY + 1) * tileSize[1] * resolution;\n        return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n    };\n    /**\n     * Get a tile range for the given extent and integer zoom level.\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {number} z Integer zoom level.\n     * @param {import(\"../TileRange.js\").default=} opt_tileRange Temporary tile range object.\n     * @return {import(\"../TileRange.js\").default} Tile range.\n     */\n    TileGrid.prototype.getTileRangeForExtentAndZ = function (extent, z, opt_tileRange) {\n        var tileCoord = tmpTileCoord;\n        this.getTileCoordForXYAndZ_(extent[0], extent[3], z, false, tileCoord);\n        var minX = tileCoord[1];\n        var minY = tileCoord[2];\n        this.getTileCoordForXYAndZ_(extent[2], extent[1], z, true, tileCoord);\n        return createOrUpdateTileRange(minX, tileCoord[1], minY, tileCoord[2], opt_tileRange);\n    };\n    /**\n     * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n     * @return {import(\"../coordinate.js\").Coordinate} Tile center.\n     */\n    TileGrid.prototype.getTileCoordCenter = function (tileCoord) {\n        var origin = this.getOrigin(tileCoord[0]);\n        var resolution = this.getResolution(tileCoord[0]);\n        var tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n        return [\n            origin[0] + (tileCoord[1] + 0.5) * tileSize[0] * resolution,\n            origin[1] - (tileCoord[2] + 0.5) * tileSize[1] * resolution,\n        ];\n    };\n    /**\n     * Get the extent of a tile coordinate.\n     *\n     * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n     * @param {import(\"../extent.js\").Extent=} opt_extent Temporary extent object.\n     * @return {import(\"../extent.js\").Extent} Extent.\n     * @api\n     */\n    TileGrid.prototype.getTileCoordExtent = function (tileCoord, opt_extent) {\n        var origin = this.getOrigin(tileCoord[0]);\n        var resolution = this.getResolution(tileCoord[0]);\n        var tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n        var minX = origin[0] + tileCoord[1] * tileSize[0] * resolution;\n        var minY = origin[1] - (tileCoord[2] + 1) * tileSize[1] * resolution;\n        var maxX = minX + tileSize[0] * resolution;\n        var maxY = minY + tileSize[1] * resolution;\n        return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n    };\n    /**\n     * Get the tile coordinate for the given map coordinate and resolution.  This\n     * method considers that coordinates that intersect tile boundaries should be\n     * assigned the higher tile coordinate.\n     *\n     * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {number} resolution Resolution.\n     * @param {import(\"../tilecoord.js\").TileCoord=} opt_tileCoord Destination import(\"../tilecoord.js\").TileCoord object.\n     * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n     * @api\n     */\n    TileGrid.prototype.getTileCoordForCoordAndResolution = function (coordinate, resolution, opt_tileCoord) {\n        return this.getTileCoordForXYAndResolution_(coordinate[0], coordinate[1], resolution, false, opt_tileCoord);\n    };\n    /**\n     * Note that this method should not be called for resolutions that correspond\n     * to an integer zoom level.  Instead call the `getTileCoordForXYAndZ_` method.\n     * @param {number} x X.\n     * @param {number} y Y.\n     * @param {number} resolution Resolution (for a non-integer zoom level).\n     * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n     *     intersections go to the higher tile coordinate, let edge intersections\n     *     go to the lower tile coordinate.\n     * @param {import(\"../tilecoord.js\").TileCoord=} opt_tileCoord Temporary import(\"../tilecoord.js\").TileCoord object.\n     * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n     * @private\n     */\n    TileGrid.prototype.getTileCoordForXYAndResolution_ = function (x, y, resolution, reverseIntersectionPolicy, opt_tileCoord) {\n        var z = this.getZForResolution(resolution);\n        var scale = resolution / this.getResolution(z);\n        var origin = this.getOrigin(z);\n        var tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n        var adjustX = reverseIntersectionPolicy ? 0.5 : 0;\n        var adjustY = reverseIntersectionPolicy ? 0.5 : 0;\n        var xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);\n        var yFromOrigin = Math.floor((origin[1] - y) / resolution + adjustY);\n        var tileCoordX = (scale * xFromOrigin) / tileSize[0];\n        var tileCoordY = (scale * yFromOrigin) / tileSize[1];\n        if (reverseIntersectionPolicy) {\n            tileCoordX = Math.ceil(tileCoordX) - 1;\n            tileCoordY = Math.ceil(tileCoordY) - 1;\n        }\n        else {\n            tileCoordX = Math.floor(tileCoordX);\n            tileCoordY = Math.floor(tileCoordY);\n        }\n        return createOrUpdateTileCoord(z, tileCoordX, tileCoordY, opt_tileCoord);\n    };\n    /**\n     * Although there is repetition between this method and `getTileCoordForXYAndResolution_`,\n     * they should have separate implementations.  This method is for integer zoom\n     * levels.  The other method should only be called for resolutions corresponding\n     * to non-integer zoom levels.\n     * @param {number} x Map x coordinate.\n     * @param {number} y Map y coordinate.\n     * @param {number} z Integer zoom level.\n     * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n     *     intersections go to the higher tile coordinate, let edge intersections\n     *     go to the lower tile coordinate.\n     * @param {import(\"../tilecoord.js\").TileCoord=} opt_tileCoord Temporary import(\"../tilecoord.js\").TileCoord object.\n     * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n     * @private\n     */\n    TileGrid.prototype.getTileCoordForXYAndZ_ = function (x, y, z, reverseIntersectionPolicy, opt_tileCoord) {\n        var origin = this.getOrigin(z);\n        var resolution = this.getResolution(z);\n        var tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n        var adjustX = reverseIntersectionPolicy ? 0.5 : 0;\n        var adjustY = reverseIntersectionPolicy ? 0.5 : 0;\n        var xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);\n        var yFromOrigin = Math.floor((origin[1] - y) / resolution + adjustY);\n        var tileCoordX = xFromOrigin / tileSize[0];\n        var tileCoordY = yFromOrigin / tileSize[1];\n        if (reverseIntersectionPolicy) {\n            tileCoordX = Math.ceil(tileCoordX) - 1;\n            tileCoordY = Math.ceil(tileCoordY) - 1;\n        }\n        else {\n            tileCoordX = Math.floor(tileCoordX);\n            tileCoordY = Math.floor(tileCoordY);\n        }\n        return createOrUpdateTileCoord(z, tileCoordX, tileCoordY, opt_tileCoord);\n    };\n    /**\n     * Get a tile coordinate given a map coordinate and zoom level.\n     * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {number} z Zoom level.\n     * @param {import(\"../tilecoord.js\").TileCoord=} opt_tileCoord Destination import(\"../tilecoord.js\").TileCoord object.\n     * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n     * @api\n     */\n    TileGrid.prototype.getTileCoordForCoordAndZ = function (coordinate, z, opt_tileCoord) {\n        return this.getTileCoordForXYAndZ_(coordinate[0], coordinate[1], z, false, opt_tileCoord);\n    };\n    /**\n     * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n     * @return {number} Tile resolution.\n     */\n    TileGrid.prototype.getTileCoordResolution = function (tileCoord) {\n        return this.resolutions_[tileCoord[0]];\n    };\n    /**\n     * Get the tile size for a zoom level. The type of the return value matches the\n     * `tileSize` or `tileSizes` that the tile grid was configured with. To always\n     * get an `import(\"../size.js\").Size`, run the result through `import(\"../size.js\").Size.toSize()`.\n     * @param {number} z Z.\n     * @return {number|import(\"../size.js\").Size} Tile size.\n     * @api\n     */\n    TileGrid.prototype.getTileSize = function (z) {\n        if (this.tileSize_) {\n            return this.tileSize_;\n        }\n        else {\n            return this.tileSizes_[z];\n        }\n    };\n    /**\n     * @param {number} z Zoom level.\n     * @return {import(\"../TileRange.js\").default} Extent tile range for the specified zoom level.\n     */\n    TileGrid.prototype.getFullTileRange = function (z) {\n        if (!this.fullTileRanges_) {\n            return this.extent_\n                ? this.getTileRangeForExtentAndZ(this.extent_, z)\n                : null;\n        }\n        else {\n            return this.fullTileRanges_[z];\n        }\n    };\n    /**\n     * @param {number} resolution Resolution.\n     * @param {number=} opt_direction If 0, the nearest resolution will be used.\n     *     If 1, the nearest lower resolution will be used. If -1, the nearest\n     *     higher resolution will be used. Default is 0.\n     * @return {number} Z.\n     * @api\n     */\n    TileGrid.prototype.getZForResolution = function (resolution, opt_direction) {\n        var z = linearFindNearest(this.resolutions_, resolution, opt_direction || 0);\n        return clamp(z, this.minZoom, this.maxZoom);\n    };\n    /**\n     * @param {!import(\"../extent.js\").Extent} extent Extent for this tile grid.\n     * @private\n     */\n    TileGrid.prototype.calculateTileRanges_ = function (extent) {\n        var length = this.resolutions_.length;\n        var fullTileRanges = new Array(length);\n        for (var z = this.minZoom; z < length; ++z) {\n            fullTileRanges[z] = this.getTileRangeForExtentAndZ(extent, z);\n        }\n        this.fullTileRanges_ = fullTileRanges;\n    };\n    return TileGrid;\n}());\nexport default TileGrid;\n//# sourceMappingURL=TileGrid.js.map","/**\n * @module ol/tilegrid\n */\nimport Corner from './extent/Corner.js';\nimport TileGrid from './tilegrid/TileGrid.js';\nimport Units from './proj/Units.js';\nimport { DEFAULT_MAX_ZOOM, DEFAULT_TILE_SIZE } from './tilegrid/common.js';\nimport { METERS_PER_UNIT, get as getProjection } from './proj.js';\nimport { containsCoordinate, createOrUpdate, getCorner, getHeight, getWidth, } from './extent.js';\nimport { toSize } from './size.js';\n/**\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {!TileGrid} Default tile grid for the\n * passed projection.\n */\nexport function getForProjection(projection) {\n    var tileGrid = projection.getDefaultTileGrid();\n    if (!tileGrid) {\n        tileGrid = createForProjection(projection);\n        projection.setDefaultTileGrid(tileGrid);\n    }\n    return tileGrid;\n}\n/**\n * @param {TileGrid} tileGrid Tile grid.\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {import(\"./tilecoord.js\").TileCoord} Tile coordinate.\n */\nexport function wrapX(tileGrid, tileCoord, projection) {\n    var z = tileCoord[0];\n    var center = tileGrid.getTileCoordCenter(tileCoord);\n    var projectionExtent = extentFromProjection(projection);\n    if (!containsCoordinate(projectionExtent, center)) {\n        var worldWidth = getWidth(projectionExtent);\n        var worldsAway = Math.ceil((projectionExtent[0] - center[0]) / worldWidth);\n        center[0] += worldWidth * worldsAway;\n        return tileGrid.getTileCoordForCoordAndZ(center, z);\n    }\n    else {\n        return tileCoord;\n    }\n}\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n *     DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size=} opt_tileSize Tile size (default uses\n *     DEFAULT_TILE_SIZE).\n * @param {import(\"./extent/Corner.js\").default=} opt_corner Extent corner (default is `'top-left'`).\n * @return {!TileGrid} TileGrid instance.\n */\nexport function createForExtent(extent, opt_maxZoom, opt_tileSize, opt_corner) {\n    var corner = opt_corner !== undefined ? opt_corner : Corner.TOP_LEFT;\n    var resolutions = resolutionsFromExtent(extent, opt_maxZoom, opt_tileSize);\n    return new TileGrid({\n        extent: extent,\n        origin: getCorner(extent, corner),\n        resolutions: resolutions,\n        tileSize: opt_tileSize,\n    });\n}\n/**\n * @typedef {Object} XYZOptions\n * @property {import(\"./extent.js\").Extent} [extent] Extent for the tile grid. The origin for an XYZ tile grid is the\n * top-left corner of the extent. If `maxResolution` is not provided the zero level of the grid is defined by the resolution\n * at which one tile fits in the provided extent. If not provided, the extent of the EPSG:3857 projection is used.\n * @property {number} [maxResolution] Resolution at level zero.\n * @property {number} [maxZoom] Maximum zoom. The default is `42`. This determines the number of levels\n * in the grid set. For example, a `maxZoom` of 21 means there are 22 levels in the grid set.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {number|import(\"./size.js\").Size} [tileSize=[256, 256]] Tile size in pixels.\n */\n/**\n * Creates a tile grid with a standard XYZ tiling scheme.\n * @param {XYZOptions=} opt_options Tile grid options.\n * @return {!TileGrid} Tile grid instance.\n * @api\n */\nexport function createXYZ(opt_options) {\n    var xyzOptions = opt_options || {};\n    var extent = xyzOptions.extent || getProjection('EPSG:3857').getExtent();\n    var gridOptions = {\n        extent: extent,\n        minZoom: xyzOptions.minZoom,\n        tileSize: xyzOptions.tileSize,\n        resolutions: resolutionsFromExtent(extent, xyzOptions.maxZoom, xyzOptions.tileSize, xyzOptions.maxResolution),\n    };\n    return new TileGrid(gridOptions);\n}\n/**\n * Create a resolutions array from an extent.  A zoom factor of 2 is assumed.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n *     DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size=} opt_tileSize Tile size (default uses\n *     DEFAULT_TILE_SIZE).\n * @param {number=} opt_maxResolution Resolution at level zero.\n * @return {!Array<number>} Resolutions array.\n */\nfunction resolutionsFromExtent(extent, opt_maxZoom, opt_tileSize, opt_maxResolution) {\n    var maxZoom = opt_maxZoom !== undefined ? opt_maxZoom : DEFAULT_MAX_ZOOM;\n    var height = getHeight(extent);\n    var width = getWidth(extent);\n    var tileSize = toSize(opt_tileSize !== undefined ? opt_tileSize : DEFAULT_TILE_SIZE);\n    var maxResolution = opt_maxResolution > 0\n        ? opt_maxResolution\n        : Math.max(width / tileSize[0], height / tileSize[1]);\n    var length = maxZoom + 1;\n    var resolutions = new Array(length);\n    for (var z = 0; z < length; ++z) {\n        resolutions[z] = maxResolution / Math.pow(2, z);\n    }\n    return resolutions;\n}\n/**\n * @param {import(\"./proj.js\").ProjectionLike} projection Projection.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n *     DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size=} opt_tileSize Tile size (default uses\n *     DEFAULT_TILE_SIZE).\n * @param {import(\"./extent/Corner.js\").default=} opt_corner Extent corner (default is `'top-left'`).\n * @return {!TileGrid} TileGrid instance.\n */\nexport function createForProjection(projection, opt_maxZoom, opt_tileSize, opt_corner) {\n    var extent = extentFromProjection(projection);\n    return createForExtent(extent, opt_maxZoom, opt_tileSize, opt_corner);\n}\n/**\n * Generate a tile grid extent from a projection.  If the projection has an\n * extent, it is used.  If not, a global extent is assumed.\n * @param {import(\"./proj.js\").ProjectionLike} projection Projection.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\nexport function extentFromProjection(projection) {\n    projection = getProjection(projection);\n    var extent = projection.getExtent();\n    if (!extent) {\n        var half = (180 * METERS_PER_UNIT[Units.DEGREES]) / projection.getMetersPerUnit();\n        extent = createOrUpdate(-half, -half, half, half);\n    }\n    return extent;\n}\n//# sourceMappingURL=tilegrid.js.map","define(function(){\n    if (typeof global !== 'undefined' && typeof global !== 'function') {\n        // global spec defines a reference to the global object called 'global'\n        // https://github.com/tc39/proposal-global\n        // `global` is also defined in NodeJS\n        return global;\n    }\n    else if (typeof window !== 'undefined') {\n        // window is defined in browsers\n        return window;\n    }\n    else if (typeof self !== 'undefined') {\n        // self is defined in WebWorkers\n        return self;\n    }\n    return this;\n});\n","/**\n * @module ol/render/EventType\n */\n/**\n * @enum {string}\n */\nexport default {\n    /**\n     * Triggered before a layer is rendered.\n     * @event module:ol/render/Event~RenderEvent#prerender\n     * @api\n     */\n    PRERENDER: 'prerender',\n    /**\n     * Triggered after a layer is rendered.\n     * @event module:ol/render/Event~RenderEvent#postrender\n     * @api\n     */\n    POSTRENDER: 'postrender',\n    /**\n     * Triggered before layers are rendered.\n     * The event object will not have a `context` set.\n     * @event module:ol/render/Event~RenderEvent#precompose\n     * @api\n     */\n    PRECOMPOSE: 'precompose',\n    /**\n     * Triggered after all layers are rendered.\n     * The event object will not have a `context` set.\n     * @event module:ol/render/Event~RenderEvent#postcompose\n     * @api\n     */\n    POSTCOMPOSE: 'postcompose',\n    /**\n     * Triggered when rendering is complete, i.e. all sources and tiles have\n     * finished loading for the current viewport, and all tiles are faded in.\n     * The event object will not have a `context` set.\n     * @event module:ol/render/Event~RenderEvent#rendercomplete\n     * @api\n     */\n    RENDERCOMPLETE: 'rendercomplete',\n};\n//# sourceMappingURL=EventType.js.map","/**\n * @module ol/geom/flat/contains\n */\nimport { forEachCorner } from '../../extent.js';\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(flatCoordinates, offset, end, stride, extent) {\n    var outside = forEachCorner(extent, \n    /**\n     * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @return {boolean} Contains (x, y).\n     */\n    function (coordinate) {\n        return !linearRingContainsXY(flatCoordinates, offset, end, stride, coordinate[0], coordinate[1]);\n    });\n    return !outside;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(flatCoordinates, offset, end, stride, x, y) {\n    // http://geomalgorithms.com/a03-_inclusion.html\n    // Copyright 2000 softSurfer, 2012 Dan Sunday\n    // This code may be freely used and modified for any purpose\n    // providing that this copyright notice is included with it.\n    // SoftSurfer makes no warranty for this code, and cannot be held\n    // liable for any real or imagined damage resulting from its use.\n    // Users of this code must verify correctness for their application.\n    var wn = 0;\n    var x1 = flatCoordinates[end - stride];\n    var y1 = flatCoordinates[end - stride + 1];\n    for (; offset < end; offset += stride) {\n        var x2 = flatCoordinates[offset];\n        var y2 = flatCoordinates[offset + 1];\n        if (y1 <= y) {\n            if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n                wn++;\n            }\n        }\n        else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n            wn--;\n        }\n        x1 = x2;\n        y1 = y2;\n    }\n    return wn !== 0;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y) {\n    if (ends.length === 0) {\n        return false;\n    }\n    if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n        return false;\n    }\n    for (var i = 1, ii = ends.length; i < ii; ++i) {\n        if (linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(flatCoordinates, offset, endss, stride, x, y) {\n    if (endss.length === 0) {\n        return false;\n    }\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n        var ends = endss[i];\n        if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n            return true;\n        }\n        offset = ends[ends.length - 1];\n    }\n    return false;\n}\n//# sourceMappingURL=contains.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/geom/LinearRing\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport GeometryType from './GeometryType.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { assignClosestPoint, maxSquaredDelta } from './flat/closest.js';\nimport { closestSquaredDistanceXY } from '../extent.js';\nimport { deflateCoordinates } from './flat/deflate.js';\nimport { douglasPeucker } from './flat/simplify.js';\nimport { inflateCoordinates } from './flat/inflate.js';\nimport { linearRing as linearRingArea } from './flat/area.js';\n/**\n * @classdesc\n * Linear ring geometry. Only used as part of polygon; cannot be rendered\n * on its own.\n *\n * @api\n */\nvar LinearRing = /** @class */ (function (_super) {\n    __extends(LinearRing, _super);\n    /**\n     * @param {Array<import(\"../coordinate.js\").Coordinate>|Array<number>} coordinates Coordinates.\n     *     For internal use, flat coordinates in combination with `opt_layout` are also accepted.\n     * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n     */\n    function LinearRing(coordinates, opt_layout) {\n        var _this = _super.call(this) || this;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.maxDelta_ = -1;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.maxDeltaRevision_ = -1;\n        if (opt_layout !== undefined && !Array.isArray(coordinates[0])) {\n            _this.setFlatCoordinates(opt_layout, \n            /** @type {Array<number>} */ (coordinates));\n        }\n        else {\n            _this.setCoordinates(\n            /** @type {Array<import(\"../coordinate.js\").Coordinate>} */ (coordinates), opt_layout);\n        }\n        return _this;\n    }\n    /**\n     * Make a complete copy of the geometry.\n     * @return {!LinearRing} Clone.\n     * @api\n     */\n    LinearRing.prototype.clone = function () {\n        return new LinearRing(this.flatCoordinates.slice(), this.layout);\n    };\n    /**\n     * @param {number} x X.\n     * @param {number} y Y.\n     * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n     * @param {number} minSquaredDistance Minimum squared distance.\n     * @return {number} Minimum squared distance.\n     */\n    LinearRing.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n        if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n            return minSquaredDistance;\n        }\n        if (this.maxDeltaRevision_ != this.getRevision()) {\n            this.maxDelta_ = Math.sqrt(maxSquaredDelta(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));\n            this.maxDeltaRevision_ = this.getRevision();\n        }\n        return assignClosestPoint(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n    };\n    /**\n     * Return the area of the linear ring on projected plane.\n     * @return {number} Area (on projected plane).\n     * @api\n     */\n    LinearRing.prototype.getArea = function () {\n        return linearRingArea(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n    };\n    /**\n     * Return the coordinates of the linear ring.\n     * @return {Array<import(\"../coordinate.js\").Coordinate>} Coordinates.\n     * @api\n     */\n    LinearRing.prototype.getCoordinates = function () {\n        return inflateCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n    };\n    /**\n     * @param {number} squaredTolerance Squared tolerance.\n     * @return {LinearRing} Simplified LinearRing.\n     * @protected\n     */\n    LinearRing.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n        var simplifiedFlatCoordinates = [];\n        simplifiedFlatCoordinates.length = douglasPeucker(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0);\n        return new LinearRing(simplifiedFlatCoordinates, GeometryLayout.XY);\n    };\n    /**\n     * Get the type of this geometry.\n     * @return {import(\"./GeometryType.js\").default} Geometry type.\n     * @api\n     */\n    LinearRing.prototype.getType = function () {\n        return GeometryType.LINEAR_RING;\n    };\n    /**\n     * Test if the geometry and the passed extent intersect.\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @return {boolean} `true` if the geometry and the extent intersect.\n     * @api\n     */\n    LinearRing.prototype.intersectsExtent = function (extent) {\n        return false;\n    };\n    /**\n     * Set the coordinates of the linear ring.\n     * @param {!Array<import(\"../coordinate.js\").Coordinate>} coordinates Coordinates.\n     * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n     * @api\n     */\n    LinearRing.prototype.setCoordinates = function (coordinates, opt_layout) {\n        this.setLayout(opt_layout, coordinates, 1);\n        if (!this.flatCoordinates) {\n            this.flatCoordinates = [];\n        }\n        this.flatCoordinates.length = deflateCoordinates(this.flatCoordinates, 0, coordinates, this.stride);\n        this.changed();\n    };\n    return LinearRing;\n}(SimpleGeometry));\nexport default LinearRing;\n//# sourceMappingURL=LinearRing.js.map","/**\n * @module ol/geom/flat/intersectsextent\n */\nimport { containsExtent, createEmpty, extendFlatCoordinates, intersects, intersectsSegment, } from '../../extent.js';\nimport { forEach as forEachSegment } from './segments.js';\nimport { linearRingContainsExtent, linearRingContainsXY } from './contains.js';\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineString(flatCoordinates, offset, end, stride, extent) {\n    var coordinatesExtent = extendFlatCoordinates(createEmpty(), flatCoordinates, offset, end, stride);\n    if (!intersects(extent, coordinatesExtent)) {\n        return false;\n    }\n    if (containsExtent(extent, coordinatesExtent)) {\n        return true;\n    }\n    if (coordinatesExtent[0] >= extent[0] && coordinatesExtent[2] <= extent[2]) {\n        return true;\n    }\n    if (coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3]) {\n        return true;\n    }\n    return forEachSegment(flatCoordinates, offset, end, stride, \n    /**\n     * @param {import(\"../../coordinate.js\").Coordinate} point1 Start point.\n     * @param {import(\"../../coordinate.js\").Coordinate} point2 End point.\n     * @return {boolean} `true` if the segment and the extent intersect,\n     *     `false` otherwise.\n     */\n    function (point1, point2) {\n        return intersectsSegment(extent, point1, point2);\n    });\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineStringArray(flatCoordinates, offset, ends, stride, extent) {\n    for (var i = 0, ii = ends.length; i < ii; ++i) {\n        if (intersectsLineString(flatCoordinates, offset, ends[i], stride, extent)) {\n            return true;\n        }\n        offset = ends[i];\n    }\n    return false;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRing(flatCoordinates, offset, end, stride, extent) {\n    if (intersectsLineString(flatCoordinates, offset, end, stride, extent)) {\n        return true;\n    }\n    if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[0], extent[1])) {\n        return true;\n    }\n    if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[0], extent[3])) {\n        return true;\n    }\n    if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[2], extent[1])) {\n        return true;\n    }\n    if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[2], extent[3])) {\n        return true;\n    }\n    return false;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent) {\n    if (!intersectsLinearRing(flatCoordinates, offset, ends[0], stride, extent)) {\n        return false;\n    }\n    if (ends.length === 1) {\n        return true;\n    }\n    for (var i = 1, ii = ends.length; i < ii; ++i) {\n        if (linearRingContainsExtent(flatCoordinates, ends[i - 1], ends[i], stride, extent)) {\n            if (!intersectsLineString(flatCoordinates, ends[i - 1], ends[i], stride, extent)) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingMultiArray(flatCoordinates, offset, endss, stride, extent) {\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n        var ends = endss[i];\n        if (intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent)) {\n            return true;\n        }\n        offset = ends[ends.length - 1];\n    }\n    return false;\n}\n//# sourceMappingURL=intersectsextent.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/MapBrowserEvent\n */\nimport MapEvent from './MapEvent.js';\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map browser event.\n * @template {UIEvent} EVENT\n */\nvar MapBrowserEvent = /** @class */ (function (_super) {\n    __extends(MapBrowserEvent, _super);\n    /**\n     * @param {string} type Event type.\n     * @param {import(\"./PluggableMap.js\").default} map Map.\n     * @param {EVENT} originalEvent Original event.\n     * @param {boolean=} opt_dragging Is the map currently being dragged?\n     * @param {?import(\"./PluggableMap.js\").FrameState=} opt_frameState Frame state.\n     */\n    function MapBrowserEvent(type, map, originalEvent, opt_dragging, opt_frameState) {\n        var _this = _super.call(this, type, map, opt_frameState) || this;\n        /**\n         * The original browser event.\n         * @const\n         * @type {EVENT}\n         * @api\n         */\n        _this.originalEvent = originalEvent;\n        /**\n         * The map pixel relative to the viewport corresponding to the original browser event.\n         * @type {?import(\"./pixel.js\").Pixel}\n         */\n        _this.pixel_ = null;\n        /**\n         * The coordinate in the user projection corresponding to the original browser event.\n         * @type {?import(\"./coordinate.js\").Coordinate}\n         */\n        _this.coordinate_ = null;\n        /**\n         * Indicates if the map is currently being dragged. Only set for\n         * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n         *\n         * @type {boolean}\n         * @api\n         */\n        _this.dragging = opt_dragging !== undefined ? opt_dragging : false;\n        return _this;\n    }\n    Object.defineProperty(MapBrowserEvent.prototype, \"pixel\", {\n        /**\n         * The map pixel relative to the viewport corresponding to the original event.\n         * @type {import(\"./pixel.js\").Pixel}\n         * @api\n         */\n        get: function () {\n            if (!this.pixel_) {\n                this.pixel_ = this.map.getEventPixel(this.originalEvent);\n            }\n            return this.pixel_;\n        },\n        set: function (pixel) {\n            this.pixel_ = pixel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MapBrowserEvent.prototype, \"coordinate\", {\n        /**\n         * The coordinate corresponding to the original browser event.  This will be in the user\n         * projection if one is set.  Otherwise it will be in the view projection.\n         * @type {import(\"./coordinate.js\").Coordinate}\n         * @api\n         */\n        get: function () {\n            if (!this.coordinate_) {\n                this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);\n            }\n            return this.coordinate_;\n        },\n        set: function (coordinate) {\n            this.coordinate_ = coordinate;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Prevents the default browser action.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n     * @api\n     */\n    MapBrowserEvent.prototype.preventDefault = function () {\n        _super.prototype.preventDefault.call(this);\n        this.originalEvent.preventDefault();\n    };\n    /**\n     * Prevents further propagation of the current event.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n     * @api\n     */\n    MapBrowserEvent.prototype.stopPropagation = function () {\n        _super.prototype.stopPropagation.call(this);\n        this.originalEvent.stopPropagation();\n    };\n    return MapBrowserEvent;\n}(MapEvent));\nexport default MapBrowserEvent;\n//# sourceMappingURL=MapBrowserEvent.js.map","/**\n * @module ol/ViewHint\n */\n/**\n * @enum {number}\n */\nexport default {\n    ANIMATING: 0,\n    INTERACTING: 1,\n};\n//# sourceMappingURL=ViewHint.js.map","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var freeGlobal = require('./_freeGlobal');\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\nmodule.exports = root;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { removeNodes } from './dom.js';\nimport { NodePart } from './parts.js';\nimport { templateFactory } from './template-factory.js';\nexport const parts = new WeakMap();\n/**\n * Renders a template result or other value to a container.\n *\n * To update a container with new values, reevaluate the template literal and\n * call `render` with the new result.\n *\n * @param result Any value renderable by NodePart - typically a TemplateResult\n *     created by evaluating a template tag like `html` or `svg`.\n * @param container A DOM parent to render to. The entire contents are either\n *     replaced, or efficiently updated if the same result type was previous\n *     rendered there.\n * @param options RenderOptions for the entire render tree rendered to this\n *     container. Render options must *not* change between renders to the same\n *     container, as those changes will not effect previously rendered DOM.\n */\nexport const render = (result, container, options) => {\n    let part = parts.get(container);\n    if (part === undefined) {\n        removeNodes(container, container.firstChild);\n        parts.set(container, part = new NodePart(Object.assign({ templateFactory }, options)));\n        part.appendInto(container);\n    }\n    part.setValue(result);\n    part.commit();\n};\n//# sourceMappingURL=render.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst directives = new WeakMap();\n/**\n * Brands a function as a directive factory function so that lit-html will call\n * the function during template rendering, rather than passing as a value.\n *\n * A _directive_ is a function that takes a Part as an argument. It has the\n * signature: `(part: Part) => void`.\n *\n * A directive _factory_ is a function that takes arguments for data and\n * configuration and returns a directive. Users of directive usually refer to\n * the directive factory as the directive. For example, \"The repeat directive\".\n *\n * Usually a template author will invoke a directive factory in their template\n * with relevant arguments, which will then return a directive function.\n *\n * Here's an example of using the `repeat()` directive factory that takes an\n * array and a function to render an item:\n *\n * ```js\n * html`<ul><${repeat(items, (item) => html`<li>${item}</li>`)}</ul>`\n * ```\n *\n * When `repeat` is invoked, it returns a directive function that closes over\n * `items` and the template function. When the outer template is rendered, the\n * return directive function is called with the Part for the expression.\n * `repeat` then performs it's custom logic to render multiple items.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object.\n *\n * @example\n *\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n *   if (part.value !== v) {\n *     part.setValue(v)\n *   }\n * });\n */\nexport const directive = (f) => ((...args) => {\n    const d = f(...args);\n    directives.set(d, true);\n    return d;\n});\nexport const isDirective = (o) => {\n    return typeof o === 'function' && directives.has(o);\n};\n//# sourceMappingURL=directive.js.map","/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = {};\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nexport const nothing = {};\n//# sourceMappingURL=part.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isCEPolyfill } from './dom.js';\nimport { isTemplatePartActive } from './template.js';\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nexport class TemplateInstance {\n    constructor(template, processor, options) {\n        this.__parts = [];\n        this.template = template;\n        this.processor = processor;\n        this.options = options;\n    }\n    update(values) {\n        let i = 0;\n        for (const part of this.__parts) {\n            if (part !== undefined) {\n                part.setValue(values[i]);\n            }\n            i++;\n        }\n        for (const part of this.__parts) {\n            if (part !== undefined) {\n                part.commit();\n            }\n        }\n    }\n    _clone() {\n        // There are a number of steps in the lifecycle of a template instance's\n        // DOM fragment:\n        //  1. Clone - create the instance fragment\n        //  2. Adopt - adopt into the main document\n        //  3. Process - find part markers and create parts\n        //  4. Upgrade - upgrade custom elements\n        //  5. Update - set node, attribute, property, etc., values\n        //  6. Connect - connect to the document. Optional and outside of this\n        //     method.\n        //\n        // We have a few constraints on the ordering of these steps:\n        //  * We need to upgrade before updating, so that property values will pass\n        //    through any property setters.\n        //  * We would like to process before upgrading so that we're sure that the\n        //    cloned fragment is inert and not disturbed by self-modifying DOM.\n        //  * We want custom elements to upgrade even in disconnected fragments.\n        //\n        // Given these constraints, with full custom elements support we would\n        // prefer the order: Clone, Process, Adopt, Upgrade, Update, Connect\n        //\n        // But Safari does not implement CustomElementRegistry#upgrade, so we\n        // can not implement that order and still have upgrade-before-update and\n        // upgrade disconnected fragments. So we instead sacrifice the\n        // process-before-upgrade constraint, since in Custom Elements v1 elements\n        // must not modify their light DOM in the constructor. We still have issues\n        // when co-existing with CEv0 elements like Polymer 1, and with polyfills\n        // that don't strictly adhere to the no-modification rule because shadow\n        // DOM, which may be created in the constructor, is emulated by being placed\n        // in the light DOM.\n        //\n        // The resulting order is on native is: Clone, Adopt, Upgrade, Process,\n        // Update, Connect. document.importNode() performs Clone, Adopt, and Upgrade\n        // in one step.\n        //\n        // The Custom Elements v1 polyfill supports upgrade(), so the order when\n        // polyfilled is the more ideal: Clone, Process, Adopt, Upgrade, Update,\n        // Connect.\n        const fragment = isCEPolyfill ?\n            this.template.element.content.cloneNode(true) :\n            document.importNode(this.template.element.content, true);\n        const stack = [];\n        const parts = this.template.parts;\n        // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n        const walker = document.createTreeWalker(fragment, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n        let partIndex = 0;\n        let nodeIndex = 0;\n        let part;\n        let node = walker.nextNode();\n        // Loop through all the nodes and parts of a template\n        while (partIndex < parts.length) {\n            part = parts[partIndex];\n            if (!isTemplatePartActive(part)) {\n                this.__parts.push(undefined);\n                partIndex++;\n                continue;\n            }\n            // Progress the tree walker until we find our next part's node.\n            // Note that multiple parts may share the same node (attribute parts\n            // on a single element), so this loop may not run at all.\n            while (nodeIndex < part.index) {\n                nodeIndex++;\n                if (node.nodeName === 'TEMPLATE') {\n                    stack.push(node);\n                    walker.currentNode = node.content;\n                }\n                if ((node = walker.nextNode()) === null) {\n                    // We've exhausted the content inside a nested template element.\n                    // Because we still have parts (the outer for-loop), we know:\n                    // - There is a template in the stack\n                    // - The walker will find a nextNode outside the template\n                    walker.currentNode = stack.pop();\n                    node = walker.nextNode();\n                }\n            }\n            // We've arrived at our part's node.\n            if (part.type === 'node') {\n                const part = this.processor.handleTextExpression(this.options);\n                part.insertAfterNode(node.previousSibling);\n                this.__parts.push(part);\n            }\n            else {\n                this.__parts.push(...this.processor.handleAttributeExpressions(node, part.name, part.strings, this.options));\n            }\n            partIndex++;\n        }\n        if (isCEPolyfill) {\n            document.adoptNode(fragment);\n            customElements.upgrade(fragment);\n        }\n        return fragment;\n    }\n}\n//# sourceMappingURL=template-instance.js.map","/**\n * @module ol/colorlike\n */\nimport { toString } from './color.js';\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, pattern, or gradient. The origin for patterns and\n * gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n/**\n * @param {import(\"./color.js\").Color|ColorLike} color Color.\n * @return {ColorLike} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n    if (Array.isArray(color)) {\n        return toString(color);\n    }\n    else {\n        return color;\n    }\n}\n//# sourceMappingURL=colorlike.js.map","define([\"./_base/kernel\", \"./_base/lang\"], function(dojo, lang){\n\n// module:\n//\t\tdojo/regexp\n\nvar regexp = {\n\t// summary:\n\t//\t\tRegular expressions and Builder resources\n};\nlang.setObject(\"dojo.regexp\", regexp);\n\nregexp.escapeString = function(/*String*/str, /*String?*/except){\n\t// summary:\n\t//\t\tAdds escape sequences for special characters in regular expressions\n\t// except:\n\t//\t\ta String with special characters to be left unescaped\n\n\treturn str.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+\\-^])/g, function(ch){\n\t\tif(except && except.indexOf(ch) != -1){\n\t\t\treturn ch;\n\t\t}\n\t\treturn \"\\\\\" + ch;\n\t}); // String\n};\n\nregexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){\n\t// summary:\n\t//\t\tBuilds a regular expression that groups subexpressions\n\t// description:\n\t//\t\tA utility function used by some of the RE generators. The\n\t//\t\tsubexpressions are constructed by the function, re, in the second\n\t//\t\tparameter.  re builds one subexpression for each elem in the array\n\t//\t\ta, in the first parameter. Returns a string for a regular\n\t//\t\texpression that groups all the subexpressions.\n\t// arr:\n\t//\t\tA single value or an array of values.\n\t// re:\n\t//\t\tA function. Takes one parameter and converts it to a regular\n\t//\t\texpression.\n\t// nonCapture:\n\t//\t\tIf true, uses non-capturing match, otherwise matches are retained\n\t//\t\tby regular expression. Defaults to false\n\n\t// case 1: a is a single value.\n\tif(!(arr instanceof Array)){\n\t\treturn re(arr); // String\n\t}\n\n\t// case 2: a is an array\n\tvar b = [];\n\tfor(var i = 0; i < arr.length; i++){\n\t\t// convert each elem to a RE\n\t\tb.push(re(arr[i]));\n\t}\n\n\t // join the REs as alternatives in a RE group.\n\treturn regexp.group(b.join(\"|\"), nonCapture); // String\n};\n\nregexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){\n\t// summary:\n\t//\t\tadds group match to expression\n\t// nonCapture:\n\t//\t\tIf true, uses non-capturing match, otherwise matches are retained\n\t//\t\tby regular expression.\n\treturn \"(\" + (nonCapture ? \"?:\":\"\") + expression + \")\"; // String\n};\n\nreturn regexp;\n});\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex, Collection, isBlazor } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Tooltip, getZindexPartial } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n    __extends(TicksData, _super);\n    function TicksData() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('None')\n    ], TicksData.prototype, \"placement\", void 0);\n    __decorate([\n        Property(10)\n    ], TicksData.prototype, \"largeStep\", void 0);\n    __decorate([\n        Property(1)\n    ], TicksData.prototype, \"smallStep\", void 0);\n    __decorate([\n        Property(false)\n    ], TicksData.prototype, \"showSmallTicks\", void 0);\n    __decorate([\n        Property(null)\n    ], TicksData.prototype, \"format\", void 0);\n    return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the color track data in slider.\n * {% codeBlock src='slider/colorrange/index.md' %}{% endcodeBlock %}\n */\nvar ColorRangeData = /** @class */ (function (_super) {\n    __extends(ColorRangeData, _super);\n    function ColorRangeData() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], ColorRangeData.prototype, \"color\", void 0);\n    __decorate([\n        Property(null)\n    ], ColorRangeData.prototype, \"start\", void 0);\n    __decorate([\n        Property(null)\n    ], ColorRangeData.prototype, \"end\", void 0);\n    return ColorRangeData;\n}(ChildProperty));\nexport { ColorRangeData };\n/**\n * It illustrates the limit data in slider.\n * {% codeBlock src='slider/limits/index.md' %}{% endcodeBlock %}\n */\nvar LimitData = /** @class */ (function (_super) {\n    __extends(LimitData, _super);\n    function LimitData() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], LimitData.prototype, \"enabled\", void 0);\n    __decorate([\n        Property(null)\n    ], LimitData.prototype, \"minStart\", void 0);\n    __decorate([\n        Property(null)\n    ], LimitData.prototype, \"minEnd\", void 0);\n    __decorate([\n        Property(null)\n    ], LimitData.prototype, \"maxStart\", void 0);\n    __decorate([\n        Property(null)\n    ], LimitData.prototype, \"maxEnd\", void 0);\n    __decorate([\n        Property(false)\n    ], LimitData.prototype, \"startHandleFixed\", void 0);\n    __decorate([\n        Property(false)\n    ], LimitData.prototype, \"endHandleFixed\", void 0);\n    return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n    __extends(TooltipData, _super);\n    function TooltipData() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('')\n    ], TooltipData.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property('Before')\n    ], TooltipData.prototype, \"placement\", void 0);\n    __decorate([\n        Property('Focus')\n    ], TooltipData.prototype, \"showOn\", void 0);\n    __decorate([\n        Property(false)\n    ], TooltipData.prototype, \"isVisible\", void 0);\n    __decorate([\n        Property(null)\n    ], TooltipData.prototype, \"format\", void 0);\n    return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar bootstrap4TooltipOffset = 3;\nvar classNames = {\n    root: 'e-slider',\n    rtl: 'e-rtl',\n    sliderHiddenInput: 'e-slider-input',\n    controlWrapper: 'e-control-wrapper',\n    sliderHandle: 'e-handle',\n    rangeBar: 'e-range',\n    sliderButton: 'e-slider-button',\n    firstButton: 'e-first-button',\n    secondButton: 'e-second-button',\n    scale: 'e-scale',\n    tick: 'e-tick',\n    large: 'e-large',\n    tickValue: 'e-tick-value',\n    sliderTooltip: 'e-slider-tooltip',\n    sliderHover: 'e-slider-hover',\n    sliderFirstHandle: 'e-handle-first',\n    sliderSecondHandle: 'e-handle-second',\n    sliderDisabled: 'e-disabled',\n    sliderContainer: 'e-slider-container',\n    horizontalTooltipBefore: 'e-slider-horizontal-before',\n    horizontalTooltipAfter: 'e-slider-horizontal-after',\n    verticalTooltipBefore: 'e-slider-vertical-before',\n    verticalTooltipAfter: 'e-slider-vertical-after',\n    materialTooltip: 'e-material-tooltip',\n    materialTooltipOpen: 'e-material-tooltip-open',\n    materialTooltipActive: 'e-tooltip-active',\n    materialSlider: 'e-material-slider',\n    sliderTrack: 'e-slider-track',\n    sliderHorizantalColor: 'e-slider-horizantal-color',\n    sliderVerticalColor: 'e-slider-vertical-color',\n    sliderHandleFocused: 'e-handle-focused',\n    verticalSlider: 'e-vertical',\n    horizontalSlider: 'e-horizontal',\n    sliderHandleStart: 'e-handle-start',\n    sliderTooltipStart: 'e-material-tooltip-start',\n    sliderTabHandle: 'e-tab-handle',\n    sliderButtonIcon: 'e-button-icon',\n    sliderSmallSize: 'e-small-size',\n    sliderTickPosition: 'e-tick-pos',\n    sliderFirstTick: 'e-first-tick',\n    sliderLastTick: 'e-last-tick',\n    sliderButtonClass: 'e-slider-btn',\n    sliderTooltipWrapper: 'e-tooltip-wrap',\n    sliderTabTrack: 'e-tab-track',\n    sliderTabRange: 'e-tab-range',\n    sliderActiveHandle: 'e-handle-active',\n    sliderMaterialHandle: 'e-material-handle',\n    sliderMaterialRange: 'e-material-range',\n    sliderMaterialDefault: 'e-material-default',\n    materialTooltipShow: 'e-material-tooltip-show',\n    materialTooltipHide: 'e-material-tooltip-hide',\n    readonly: 'e-read-only',\n    limits: 'e-limits',\n    limitBarDefault: 'e-limit-bar',\n    limitBarFirst: 'e-limit-first',\n    limitBarSecond: 'e-limit-second',\n    dragHorizontal: 'e-drag-horizontal',\n    dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n * <div id='slider'></div>\n * ```\n * ```typescript\n * <script>\n *   var sliderObj = new Slider({ value: 10 });\n *   sliderObj.appendTo('#slider');\n * </script>\n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n    __extends(Slider, _super);\n    function Slider(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.horDir = 'left';\n        _this.verDir = 'bottom';\n        _this.transition = {\n            handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n                'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n            rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n        };\n        _this.transitionOnMaterialTooltip = {\n            handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n            rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n        };\n        _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n        _this.customAriaText = null;\n        _this.drag = true;\n        _this.initialTooltip = true;\n        return _this;\n    }\n    Slider.prototype.preRender = function () {\n        var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n        this.l10n = new L10n('slider', localeText, this.locale);\n        this.isElementFocused = false;\n        this.tickElementCollection = [];\n        this.tooltipFormatInfo = {};\n        this.ticksFormatInfo = {};\n        this.initCultureInfo();\n        this.initCultureFunc();\n        this.formChecker();\n    };\n    Slider.prototype.formChecker = function () {\n        var formElement = closest(this.element, 'form');\n        if (formElement) {\n            this.isForm = true;\n            // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n            // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n            if (!isNullOrUndefined(this.formResetValue)) {\n                this.setProperties({ 'value': this.formResetValue }, true);\n            }\n            this.formResetValue = this.value;\n            if (this.type === 'Range' &&\n                (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n                this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n            }\n            else if (isNullOrUndefined(this.formResetValue)) {\n                this.formResetValue = parseFloat(formatUnit(this.min));\n            }\n            this.formElement = formElement;\n        }\n        else {\n            this.isForm = false;\n        }\n    };\n    Slider.prototype.initCultureFunc = function () {\n        this.internationalization = new Internationalization(this.locale);\n    };\n    Slider.prototype.initCultureInfo = function () {\n        this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n        this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n    };\n    Slider.prototype.formatString = function (value, formatInfo) {\n        var formatValue = null;\n        var formatString = null;\n        if ((value || value === 0)) {\n            formatValue = this.formatNumber(value);\n            var numberOfDecimals = this.numberOfDecimals(value);\n            formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n        }\n        return { elementVal: formatValue, formatString: formatString };\n    };\n    ;\n    Slider.prototype.formatNumber = function (value) {\n        var numberOfDecimals = this.numberOfDecimals(value);\n        return this.internationalization.getNumberFormat({\n            maximumFractionDigits: numberOfDecimals,\n            minimumFractionDigits: numberOfDecimals, useGrouping: false\n        })(value);\n    };\n    ;\n    Slider.prototype.numberOfDecimals = function (value) {\n        var decimalPart = value.toString().split('.')[1];\n        var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n        return numberOfDecimals;\n    };\n    Slider.prototype.makeRoundNumber = function (value, precision) {\n        var decimals = precision || 0;\n        return Number(value.toFixed(decimals));\n    };\n    ;\n    Slider.prototype.fractionalToInteger = function (value) {\n        value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n        var tens = 1;\n        for (var i = 0; i < this.noOfDecimals; i++) {\n            tens *= 10;\n        }\n        value = Number((value * tens).toFixed(0));\n        return value;\n    };\n    /**\n     * To Initialize the control rendering\n     * @private\n     */\n    Slider.prototype.render = function () {\n        if (!isBlazor() || !this.isServerRendered) {\n            this.initialize();\n        }\n        this.initRender();\n        this.wireEvents();\n        this.setZindex();\n        this.renderComplete();\n    };\n    Slider.prototype.initialize = function () {\n        addClass([this.element], classNames.root);\n        this.setCSSClass();\n    };\n    Slider.prototype.setElementWidth = function (width) {\n        if (!isNullOrUndefined(width)) {\n            if (typeof width === 'number') {\n                this.sliderContainer.style.width = formatUnit(width);\n            }\n            else if (typeof width === 'string') {\n                this.sliderContainer.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n            }\n        }\n    };\n    Slider.prototype.setCSSClass = function (oldCSSClass) {\n        if (oldCSSClass) {\n            removeClass([this.element], oldCSSClass.split(' '));\n        }\n        if (this.cssClass) {\n            addClass([this.element], this.cssClass.split(' '));\n        }\n    };\n    Slider.prototype.setEnabled = function () {\n        if (!this.enabled) {\n            addClass([this.sliderContainer], [classNames.sliderDisabled]);\n            if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n                this.tooltipElement.classList.add(classNames.sliderDisabled);\n            }\n            this.unwireEvents();\n        }\n        else {\n            removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n            if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n                this.tooltipElement.classList.remove(classNames.sliderDisabled);\n            }\n            this.wireEvents();\n        }\n    };\n    Slider.prototype.getTheme = function (container) {\n        var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n        return theme.replace(/['\"]+/g, '');\n    };\n    /**\n     * Initialize the rendering\n     * @private\n     */\n    Slider.prototype.initRender = function () {\n        if (isBlazor() && this.isServerRendered) {\n            this.sliderContainer = this.element.parentElement;\n            this.sliderTrack = this.element.querySelector('.e-slider-track');\n            this.hiddenInput = this.element.parentElement.querySelector('.e-slider-input');\n        }\n        else {\n            this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n            this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n            this.sliderContainer.appendChild(this.element);\n            this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n            this.element.appendChild(this.sliderTrack);\n        }\n        this.setElementWidth(this.width);\n        this.element.tabIndex = -1;\n        this.getThemeInitialization();\n        this.setHandler();\n        this.createRangeBar();\n        if (this.limits.enabled) {\n            this.createLimitBar();\n        }\n        if (!isBlazor() || !this.isServerRendered) {\n            this.setOrientClass();\n            this.hiddenInput = (this.createElement('input', {\n                attrs: {\n                    type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n                    name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n                        '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n                }\n            }));\n            this.hiddenInput.tabIndex = -1;\n            this.sliderContainer.appendChild(this.hiddenInput);\n        }\n        if (this.showButtons) {\n            this.setButtons();\n        }\n        this.setEnableRTL();\n        if (this.type === 'Range') {\n            this.rangeValueUpdate();\n        }\n        else {\n            this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n        }\n        this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n            [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n                this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n        this.previousChanged = this.previousVal;\n        if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n            this.element.removeAttribute('name');\n        }\n        this.setValue();\n        if (this.limits.enabled) {\n            this.setLimitBar();\n        }\n        if (this.ticks.placement !== 'None') {\n            this.renderScale();\n        }\n        if (this.tooltip.isVisible) {\n            this.renderTooltip();\n        }\n        if (!isBlazor() || !this.isServerRendered) {\n            if (!this.enabled) {\n                addClass([this.sliderContainer], [classNames.sliderDisabled]);\n            }\n            else {\n                removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n            }\n            if (this.readonly) {\n                addClass([this.sliderContainer], [classNames.readonly]);\n            }\n            else {\n                removeClass([this.sliderContainer], [classNames.readonly]);\n            }\n        }\n    };\n    Slider.prototype.getThemeInitialization = function () {\n        this.isMaterial = this.getTheme(this.sliderContainer) === 'material'\n            || this.getTheme(this.sliderContainer) === 'material-dark';\n        this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap'\n            || this.getTheme(this.sliderContainer) === 'bootstrap-dark';\n        this.isBootstrap4 = this.getTheme(this.sliderContainer) === 'bootstrap4';\n        this.isMaterialTooltip = this.isMaterial && this.type !== 'Range' && this.tooltip.isVisible;\n    };\n    Slider.prototype.createRangeBar = function () {\n        if (this.type !== 'Default') {\n            this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n            this.element.appendChild(this.rangeBar);\n            if (this.drag && this.type === 'Range') {\n                if (this.orientation === 'Horizontal') {\n                    this.rangeBar.classList.add(classNames.dragHorizontal);\n                }\n                else {\n                    this.rangeBar.classList.add(classNames.dragVertical);\n                }\n            }\n        }\n    };\n    Slider.prototype.createLimitBar = function () {\n        if (isBlazor() && this.isServerRendered) {\n            this.limitBarFirst = this.element.querySelectorAll('.e-limits')[0];\n            if (this.type === 'Range') {\n                this.limitBarSecond = this.element.querySelectorAll('.e-limit-second')[0];\n            }\n        }\n        else {\n            var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n                classNames.limitBarFirst;\n            firstElementClassName += ' ' + classNames.limits;\n            this.limitBarFirst = (this.createElement('div', {\n                attrs: { class: firstElementClassName }\n            }));\n            this.element.appendChild(this.limitBarFirst);\n            if (this.type === 'Range') {\n                this.limitBarSecond = (this.createElement('div', {\n                    attrs: {\n                        class: classNames.limitBarSecond + ' ' + classNames.limits\n                    }\n                }));\n                this.element.appendChild(this.limitBarSecond);\n            }\n        }\n    };\n    Slider.prototype.setOrientClass = function () {\n        if (this.orientation !== 'Vertical') {\n            this.sliderContainer.classList.remove(classNames.verticalSlider);\n            this.sliderContainer.classList.add(classNames.horizontalSlider);\n            this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n            if (this.type === 'Range') {\n                this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n            }\n        }\n        else {\n            this.sliderContainer.classList.remove(classNames.horizontalSlider);\n            this.sliderContainer.classList.add(classNames.verticalSlider);\n            this.firstHandle.setAttribute('aria-orientation', 'vertical');\n            if (this.type === 'Range') {\n                this.secondHandle.setAttribute('aria-orientation', 'vertical');\n            }\n        }\n    };\n    Slider.prototype.setAriaAttributes = function (element) {\n        var _this = this;\n        var min = this.min;\n        var max = this.max;\n        if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n            min = this.customValues[0];\n            max = this.customValues[this.customValues.length - 1];\n        }\n        if (this.type !== 'Range') {\n            attributes(element, {\n                'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n            });\n        }\n        else {\n            var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n                [[min.toString(), (this.customValues[this.value[1]]).toString()],\n                    [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n                [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n            range.forEach(function (range, index) {\n                var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n                if (element) {\n                    attributes(element, {\n                        'aria-valuemin': range[0], 'aria-valuemax': range[1]\n                    });\n                }\n            });\n        }\n    };\n    Slider.prototype.createSecondHandle = function () {\n        if (isBlazor() && this.isServerRendered) {\n            this.secondHandle = this.element.querySelector('.e-handle-second');\n        }\n        else {\n            this.secondHandle = this.createElement('div', {\n                attrs: {\n                    class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n                }\n            });\n            this.secondHandle.classList.add(classNames.sliderSecondHandle);\n            this.element.appendChild(this.secondHandle);\n        }\n    };\n    Slider.prototype.createFirstHandle = function () {\n        if (isBlazor() && this.isServerRendered) {\n            this.firstHandle = this.element.querySelector('.e-handle-first');\n        }\n        else {\n            this.firstHandle = this.createElement('div', {\n                attrs: {\n                    class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n                }\n            });\n            this.firstHandle.classList.add(classNames.sliderFirstHandle);\n            this.element.appendChild(this.firstHandle);\n        }\n        if (this.isMaterialTooltip) {\n            this.materialHandle = this.createElement('div', {\n                attrs: {\n                    class: classNames.sliderHandle + ' ' +\n                        classNames.sliderMaterialHandle\n                }\n            });\n            this.element.appendChild(this.materialHandle);\n        }\n    };\n    Slider.prototype.wireFirstHandleEvt = function (destroy) {\n        if (!destroy) {\n            EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n            EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n            EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n            EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n        }\n        else {\n            EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n            EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n            EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n            EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n        }\n    };\n    Slider.prototype.wireSecondHandleEvt = function (destroy) {\n        if (!destroy) {\n            EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n            EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n            EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n            EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n        }\n        else {\n            EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n            EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n            EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n            EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n        }\n    };\n    Slider.prototype.handleStart = function () {\n        if (this.type !== 'Range') {\n            this.firstHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n            if (this.isMaterialTooltip) {\n                this.materialHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n                if (this.tooltipElement) {\n                    this.tooltipElement.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderTooltipStart);\n                }\n            }\n        }\n    };\n    Slider.prototype.transitionEnd = function (e) {\n        if (e.propertyName !== 'transform') {\n            this.handleStart();\n            this.getHandle().style.transition = 'none';\n            if (this.type !== 'Default') {\n                this.rangeBar.style.transition = 'none';\n            }\n            if (this.isMaterial && this.tooltip.isVisible && this.type === 'Default') {\n                this.tooltipElement.style.transition = this.transition.handle;\n            }\n            this.tooltipToggle(this.getHandle());\n            this.closeTooltip();\n        }\n    };\n    Slider.prototype.handleFocusOut = function () {\n        if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n            this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n        }\n        if (this.type === 'Range') {\n            if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n                this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n            }\n        }\n    };\n    Slider.prototype.handleFocus = function (e) {\n        this.focusSliderElement();\n        this.sliderBarClick(e);\n        if (e.currentTarget === this.firstHandle) {\n            this.firstHandle.classList.add(classNames.sliderHandleFocused);\n        }\n        else {\n            this.secondHandle.classList.add(classNames.sliderHandleFocused);\n        }\n        EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n        EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n    };\n    Slider.prototype.handleOver = function (e) {\n        if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n            this.tooltipToggle(e.currentTarget);\n        }\n    };\n    Slider.prototype.handleLeave = function (e) {\n        if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n            !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n            !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n            this.closeTooltip();\n        }\n    };\n    Slider.prototype.setHandler = function () {\n        if (this.min > this.max) {\n            this.min = this.max;\n        }\n        this.createFirstHandle();\n        if (this.type === 'Range') {\n            this.createSecondHandle();\n        }\n    };\n    Slider.prototype.setEnableRTL = function () {\n        if (!isBlazor() || !this.isServerRendered) {\n            this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n                removeClass([this.sliderContainer], classNames.rtl);\n            var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n            if (this.enableRtl) {\n                this.horDir = 'right';\n                this.verDir = 'bottom';\n            }\n            else {\n                this.horDir = 'left';\n                this.verDir = 'bottom';\n            }\n            var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n            if (preDir !== currDir) {\n                if (this.orientation === 'Horizontal') {\n                    setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n                    if (this.type === 'Range') {\n                        setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n                    }\n                }\n            }\n        }\n        this.setBarColor();\n    };\n    Slider.prototype.tooltipValue = function () {\n        var _this = this;\n        var text;\n        var args = {\n            value: this.value,\n            text: ''\n        };\n        if (this.initialTooltip) {\n            this.initialTooltip = false;\n            if (isBlazor() && this.isServerRendered) {\n                args.text = this.formatContent(this.tooltipFormatInfo, false);\n            }\n            else {\n                this.setTooltipContent();\n                args.text = text = this.tooltipObj.content;\n            }\n            this.trigger('tooltipChange', args, function (observedArgs) {\n                _this.addTooltipClass(observedArgs.text);\n                if (text !== observedArgs.text) {\n                    _this.customAriaText = observedArgs.text;\n                    _this.tooltipObj.content = observedArgs.text;\n                    _this.setAriaAttrValue(_this.firstHandle);\n                    if (_this.type === 'Range') {\n                        _this.setAriaAttrValue(_this.secondHandle);\n                    }\n                }\n            });\n            if (this.isMaterialTooltip) {\n                this.setPreviousVal('change', this.value);\n            }\n        }\n    };\n    Slider.prototype.setTooltipContent = function () {\n        var content;\n        content = this.formatContent(this.tooltipFormatInfo, false);\n        this.tooltipObj.content = content;\n    };\n    Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n        var content = '';\n        var handle1 = this.handleVal1;\n        var handle2 = this.handleVal2;\n        if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n            handle1 = this.customValues[this.handleVal1];\n            handle2 = this.customValues[this.handleVal2];\n        }\n        if (!ariaContent) {\n            if (this.type === 'Range') {\n                if (this.enableRtl && this.orientation !== 'Vertical') {\n                    content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n                        .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n                        (handle2.toString() + ' - ' + handle1.toString());\n                }\n                else {\n                    content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n                        .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n                        (handle1.toString() + ' - ' + handle2.toString());\n                }\n            }\n            else {\n                if (!isNullOrUndefined(handle1)) {\n                    content = (!isNullOrUndefined(formatInfo.format)) ?\n                        this.formatString(handle1, formatInfo).formatString : handle1.toString();\n                }\n            }\n            return content;\n        }\n        else {\n            if (this.type === 'Range') {\n                if (this.enableRtl && this.orientation !== 'Vertical') {\n                    content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n                        (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n                            this.formatString(handle1, formatInfo).elementVal) :\n                        (handle2.toString() + ' - ' + handle1.toString());\n                }\n                else {\n                    content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n                        (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n                            this.formatString(handle2, formatInfo).elementVal) :\n                        (handle1.toString() + ' - ' + handle2.toString());\n                }\n            }\n            else {\n                if (!isNullOrUndefined(handle1)) {\n                    content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n                        this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n                }\n            }\n            return content;\n        }\n    };\n    Slider.prototype.addTooltipClass = function (content) {\n        if (this.isMaterialTooltip) {\n            var count = content.toString().length;\n            if (!this.tooltipElement) {\n                var cssClass = count > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n                this.tooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n            }\n            else {\n                var cssClass = count > 4 ?\n                    { oldCss: classNames.sliderMaterialDefault, newCss: classNames.sliderMaterialRange } :\n                    { oldCss: classNames.sliderMaterialRange, newCss: classNames.sliderMaterialDefault };\n                this.tooltipElement.classList.remove(cssClass.oldCss);\n                if (!this.tooltipElement.classList.contains(cssClass.newCss)) {\n                    this.tooltipElement.classList.add(cssClass.newCss);\n                    this.tooltipElement.style.transform = count > 4 ? 'scale(1)' :\n                        this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n                }\n            }\n        }\n    };\n    Slider.prototype.tooltipPlacement = function () {\n        return this.orientation === 'Horizontal' ? (this.tooltip.placement === 'Before' ? 'TopCenter' : 'BottomCenter') :\n            (this.tooltip.placement === 'Before' ? 'LeftCenter' : 'RightCenter');\n    };\n    Slider.prototype.tooltipBeforeOpen = function (args) {\n        this.tooltipElement = args.element;\n        if (this.tooltip.cssClass) {\n            addClass([this.tooltipElement], this.tooltip.cssClass.split(' ').filter(function (css) { return css; }));\n        }\n        args.target.removeAttribute('aria-describedby');\n        if (this.isMaterialTooltip) {\n            this.tooltipElement.firstElementChild.classList.add(classNames.materialTooltipHide);\n            this.handleStart();\n            this.setTooltipTransform();\n        }\n    };\n    Slider.prototype.tooltipCollision = function (position) {\n        if (this.isBootstrap || this.isBootstrap4 || (this.isMaterial && !this.isMaterialTooltip)) {\n            var tooltipOffsetValue = this.isBootstrap4 ? bootstrap4TooltipOffset : bootstrapTooltipOffset;\n            switch (position) {\n                case 'TopCenter':\n                    this.tooltipObj.setProperties({ 'offsetY': -(tooltipOffsetValue) }, false);\n                    break;\n                case 'BottomCenter':\n                    this.tooltipObj.setProperties({ 'offsetY': tooltipOffsetValue }, false);\n                    break;\n                case 'LeftCenter':\n                    this.tooltipObj.setProperties({ 'offsetX': -(tooltipOffsetValue) }, false);\n                    break;\n                case 'RightCenter':\n                    this.tooltipObj.setProperties({ 'offsetX': tooltipOffsetValue }, false);\n                    break;\n            }\n        }\n    };\n    Slider.prototype.materialTooltipEventCallBack = function (event) {\n        this.sliderBarClick(event);\n        EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n        EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n    };\n    Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n        if (this.isMaterialTooltip) {\n            if (!destroy) {\n                EventHandler.add(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack, this);\n            }\n            else {\n                EventHandler.remove(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack);\n            }\n        }\n    };\n    Slider.prototype.tooltipPositionCalculation = function (position) {\n        var cssClass;\n        switch (position) {\n            case 'TopCenter':\n                cssClass = classNames.horizontalTooltipBefore;\n                break;\n            case 'BottomCenter':\n                cssClass = classNames.horizontalTooltipAfter;\n                break;\n            case 'LeftCenter':\n                cssClass = classNames.verticalTooltipBefore;\n                break;\n            case 'RightCenter':\n                cssClass = classNames.verticalTooltipAfter;\n                break;\n        }\n        return cssClass;\n    };\n    Slider.prototype.getTooltipTransformProperties = function (className) {\n        var transformProperties;\n        if (this.tooltipElement) {\n            var position = this.orientation === 'Horizontal' ?\n                ((this.tooltipElement.clientHeight + 14) - (this.tooltipElement.clientHeight / 2)) :\n                ((this.tooltipElement.clientWidth + 14) - (this.tooltipElement.clientWidth / 2));\n            transformProperties = this.orientation === 'Horizontal' ?\n                (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n                    { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n                (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n                    { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n        }\n        return transformProperties;\n    };\n    Slider.prototype.openMaterialTooltip = function () {\n        var _this = this;\n        if (this.isMaterialTooltip) {\n            this.refreshTooltip(this.firstHandle);\n            var tooltipContentElement = this.tooltipElement.firstElementChild;\n            tooltipContentElement.classList.remove(classNames.materialTooltipHide);\n            tooltipContentElement.classList.add(classNames.materialTooltipShow);\n            this.firstHandle.style.cursor = 'default';\n            this.tooltipElement.style.transition = this.scaleTransform;\n            this.tooltipElement.classList.add(classNames.materialTooltipOpen);\n            this.materialHandle.style.transform = 'scale(0)';\n            if (tooltipContentElement.innerText.length > 4) {\n                this.tooltipElement.style.transform = 'scale(1)';\n            }\n            else {\n                this.tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n            }\n            if (this.type === 'Default') {\n                setTimeout(function () { _this.tooltipElement.style.transition = _this.transition.handle; }, 2500);\n            }\n            else {\n                setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n            }\n        }\n    };\n    Slider.prototype.closeMaterialTooltip = function () {\n        var _this = this;\n        if (this.isMaterialTooltip) {\n            var tooltipContentElement = this.tooltipElement.firstElementChild;\n            this.tooltipElement.style.transition = this.scaleTransform;\n            tooltipContentElement.classList.remove(classNames.materialTooltipShow);\n            tooltipContentElement.classList.add(classNames.materialTooltipHide);\n            this.firstHandle.style.cursor = '-webkit-grab';\n            this.firstHandle.style.cursor = 'grab';\n            if (this.materialHandle) {\n                this.materialHandle.style.transform = 'scale(1)';\n            }\n            this.tooltipElement.classList.remove(classNames.materialTooltipOpen);\n            this.setTooltipTransform();\n            this.tooltipTarget = undefined;\n            setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n        }\n    };\n    Slider.prototype.checkTooltipPosition = function (args) {\n        var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n        if (this.tooltipCollidedPosition === undefined ||\n            this.tooltipCollidedPosition !== args.collidedPosition || !args.element.classList.contains(tooltipClass)) {\n            if (this.isMaterialTooltip) {\n                if (tooltipClass !== undefined) {\n                    args.element.classList.remove(this.previousTooltipClass);\n                    args.element.classList.add(tooltipClass);\n                    this.previousTooltipClass = tooltipClass;\n                }\n                if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n                    args.element.firstElementChild.innerText.length <= 4) {\n                    args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n                }\n            }\n            this.tooltipCollidedPosition = args.collidedPosition;\n        }\n        if (this.isMaterialTooltip && this.tooltipElement && this.tooltipElement.style.transform.indexOf('translate') !== -1) {\n            this.setTooltipTransform();\n        }\n    };\n    Slider.prototype.setTooltipTransform = function () {\n        var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n        if (this.tooltipElement.firstElementChild.innerText.length > 4) {\n            this.tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n        }\n        else {\n            this.tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n        }\n    };\n    Slider.prototype.renderTooltip = function () {\n        this.tooltipObj = new Tooltip({\n            showTipPointer: this.isBootstrap || this.isMaterial || this.isBootstrap4,\n            cssClass: classNames.sliderTooltip,\n            height: this.isMaterial ? 30 : 'auto',\n            animation: { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } },\n            opensOn: 'Custom',\n            beforeOpen: this.tooltipBeforeOpen.bind(this),\n            beforeCollision: this.checkTooltipPosition.bind(this),\n            beforeClose: this.tooltipBeforeClose.bind(this),\n            enableHtmlSanitizer: this.enableHtmlSanitizer\n        });\n        this.tooltipObj.appendTo(this.firstHandle);\n        this.initializeTooltipProps();\n    };\n    Slider.prototype.initializeTooltipProps = function () {\n        var tooltipShowOn = this.isMaterialTooltip ? 'Always' : (this.tooltip.showOn === 'Auto' ? 'Hover' : this.tooltip.showOn);\n        this.setProperties({ tooltip: { showOn: tooltipShowOn } }, true);\n        this.tooltipObj.position = this.tooltipPlacement();\n        this.tooltipCollision(this.tooltipObj.position);\n        [this.firstHandle, this.rangeBar, this.secondHandle].forEach(function (handle) {\n            if (!isNullOrUndefined(handle)) {\n                handle.style.transition = 'none';\n            }\n        });\n        if (this.isMaterialTooltip) {\n            this.sliderContainer.classList.add(classNames.materialSlider);\n            if (!isBlazor()) {\n                this.tooltipValue();\n            }\n            this.tooltipObj.animation.close.effect = 'None';\n            this.tooltipObj.open(this.firstHandle);\n        }\n    };\n    Slider.prototype.tooltipBeforeClose = function () {\n        this.tooltipElement = undefined;\n        this.tooltipCollidedPosition = undefined;\n    };\n    Slider.prototype.setButtons = function () {\n        if (isBlazor() && this.isServerRendered) {\n            this.firstBtn = this.element.parentElement.querySelector('.e-slider-button.e-first-button');\n            this.secondBtn = this.element.parentElement.querySelector('.e-slider-button.e-second-button');\n        }\n        else {\n            this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n            this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n            this.firstBtn.tabIndex = -1;\n            this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n            this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n            this.secondBtn.tabIndex = -1;\n            this.sliderContainer.classList.add(classNames.sliderButtonClass);\n            this.sliderContainer.appendChild(this.firstBtn);\n            this.sliderContainer.appendChild(this.secondBtn);\n            this.sliderContainer.appendChild(this.element);\n            this.buttonTitle();\n        }\n    };\n    Slider.prototype.buttonTitle = function () {\n        var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n        this.l10n.setLocale(this.locale);\n        var decrementTitle = this.l10n.getConstant('decrementTitle');\n        var incrementTitle = this.l10n.getConstant('incrementTitle');\n        attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n        attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n    };\n    Slider.prototype.buttonFocusOut = function () {\n        if (this.isMaterial) {\n            this.getHandle().classList.remove('e-large-thumb-size');\n        }\n    };\n    Slider.prototype.repeatButton = function (args) {\n        var hVal = this.handleValueUpdate();\n        var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n        var value;\n        if (args.target.parentElement.classList.contains(classNames.firstButton)\n            || args.target.classList.contains(classNames.firstButton)) {\n            enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n                (value = this.add(hVal, parseFloat(this.step.toString()), false));\n        }\n        else if (args.target.parentElement.classList.contains(classNames.secondButton)\n            || (args.target.classList.contains(classNames.secondButton))) {\n            enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n                (value = this.add(hVal, parseFloat(this.step.toString()), true));\n        }\n        if (this.limits.enabled) {\n            value = this.getLimitCorrectedValues(value);\n        }\n        if (value >= this.min && value <= this.max) {\n            this.changeHandleValue(value);\n            this.tooltipToggle(this.getHandle());\n        }\n    };\n    Slider.prototype.repeatHandlerMouse = function (args) {\n        args.preventDefault();\n        if (args.type === ('mousedown') || args.type === ('touchstart')) {\n            this.buttonClick(args);\n            this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n        }\n    };\n    Slider.prototype.materialChange = function () {\n        if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n            this.getHandle().classList.add('e-large-thumb-size');\n        }\n    };\n    Slider.prototype.repeatHandlerUp = function (e) {\n        this.changeEvent('changed', e);\n        this.closeTooltip();\n        clearInterval(this.repeatInterval);\n        this.getHandle().focus();\n    };\n    Slider.prototype.customTickCounter = function (bigNum) {\n        var tickCount = 4;\n        if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n            if (bigNum > 4) {\n                tickCount = 3;\n            }\n            if (bigNum > 7) {\n                tickCount = 2;\n            }\n            if (bigNum > 14) {\n                tickCount = 1;\n            }\n            if (bigNum > 28) {\n                tickCount = 0;\n            }\n        }\n        return tickCount;\n    };\n    // tslint:disable-next-line:max-func-body-length\n    Slider.prototype.renderScale = function () {\n        var liElementPosition = 0;\n        var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n        var spanText;\n        this.noOfDecimals = this.numberOfDecimals(this.step);\n        if (isBlazor() && this.isServerRendered) {\n            this.ul = this.element.querySelector('ul');\n        }\n        else {\n            this.ul = this.createElement('ul', {\n                className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n                attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n            });\n        }\n        this.ul.style.zIndex = '-1';\n        if (Browser.isAndroid && orien === 'h') {\n            this.ul.classList.add(classNames.sliderTickPosition);\n        }\n        var smallStep = this.ticks.smallStep;\n        if (!this.ticks.showSmallTicks) {\n            this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n                (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n        }\n        else if (smallStep <= 0) {\n            smallStep = parseFloat(formatUnit(this.step));\n        }\n        var min = this.fractionalToInteger(this.min);\n        var max = this.fractionalToInteger(this.max);\n        var steps = this.fractionalToInteger(smallStep);\n        var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n        var customStep = this.customTickCounter(bigNum);\n        var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n            (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n        if (!isBlazor() || !this.isServerRendered) {\n            this.element.appendChild(this.ul);\n        }\n        var li;\n        var start = parseFloat(this.min.toString());\n        if (orien === 'v') {\n            start = parseFloat(this.max.toString());\n        }\n        var left = 0;\n        var islargeTick;\n        var tickWidth = 100 / count;\n        if (tickWidth === Infinity) {\n            tickWidth = 5;\n        }\n        for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n            this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n            li = (this.createElement('li', {\n                attrs: {\n                    class: classNames.tick, role: 'presentation', tabIndex: '-1',\n                    'aria-hidden': 'true'\n                }\n            }));\n            if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n                islargeTick = i % (customStep + 1) === 0;\n                if (islargeTick) {\n                    if (orien === 'h') {\n                        start = this.customValues[k];\n                        k++;\n                    }\n                    else {\n                        start = this.customValues[y];\n                        y--;\n                    }\n                    li.setAttribute('title', start.toString());\n                }\n            }\n            else {\n                li.setAttribute('title', start.toString());\n                if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n                    this.numberOfDecimals(this.step) === 0) {\n                    if (orien === 'h') {\n                        islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n                    }\n                    else {\n                        islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n                    }\n                }\n                else {\n                    var largestep = this.fractionalToInteger(this.ticks.largeStep);\n                    var startValue = this.fractionalToInteger(start);\n                    if (orien === 'h') {\n                        islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n                    }\n                    else {\n                        islargeTick = (Math.abs(startValue - parseFloat(max.toString())) % largestep === 0) ? true : false;\n                    }\n                }\n            }\n            if (islargeTick) {\n                li.classList.add(classNames.large);\n            }\n            (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n            var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n            if (islargeTick) {\n                for (var j = 0; j < repeat; j++) {\n                    this.createTick(li, start, tickWidth);\n                }\n                if (isBlazor() && this.isServerRendered && isNullOrUndefined(this.customValues)) {\n                    this.updateTicksValues(start, this.ul.children[liElementPosition]);\n                    liElementPosition++;\n                }\n            }\n            else if (isNullOrUndefined(this.customValues)) {\n                this.formatTicksValue(li, start);\n                if (isBlazor() && this.isServerRendered && isNullOrUndefined(this.customValues)) {\n                    this.updateTicksValues(start, this.ul.children[liElementPosition]);\n                    liElementPosition++;\n                }\n            }\n            if (!isBlazor() || !this.isServerRendered) {\n                this.ul.appendChild(li);\n            }\n            this.tickElementCollection.push(li);\n            var decimalPoints = void 0;\n            if (isNullOrUndefined(this.customValues)) {\n                if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n                    decimalPoints = this.numberOfDecimals(smallStep);\n                }\n                else {\n                    decimalPoints = this.numberOfDecimals(start);\n                }\n                if (orien === 'h') {\n                    start = this.makeRoundNumber(start + smallStep, decimalPoints);\n                }\n                else {\n                    start = this.makeRoundNumber(start - smallStep, decimalPoints);\n                }\n                left = this.makeRoundNumber(left + smallStep, decimalPoints);\n            }\n        }\n        this.ticksAlignment(orien, tickWidth);\n    };\n    Slider.prototype.updateTicksValues = function (start, liElement) {\n        if (liElement.childElementCount > 0) {\n            for (var i = 0; i < liElement.childElementCount; i++) {\n                this.blazortTicksValue(liElement, start, liElement.children[i]);\n            }\n        }\n        else {\n            this.blazortTicksValue(liElement, start, null);\n        }\n    };\n    Slider.prototype.blazortTicksValue = function (li, start, span) {\n        var _this = this;\n        var tickText = this.formatNumber(start);\n        var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n            this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n        var eventArgs = { value: start, text: text, tickElement: li };\n        this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n            li.setAttribute('title', observedArgs.text.toString());\n            if (span) {\n                if (_this.enableHtmlSanitizer) {\n                    span.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n                }\n                else {\n                    span.innerHTML = observedArgs.text.toString();\n                }\n            }\n        });\n    };\n    Slider.prototype.ticksAlignment = function (orien, tickWidth, triggerEvent) {\n        if (triggerEvent === void 0) { triggerEvent = true; }\n        this.firstChild = this.ul.firstElementChild;\n        this.lastChild = this.ul.lastElementChild;\n        this.firstChild.classList.add(classNames.sliderFirstTick);\n        this.lastChild.classList.add(classNames.sliderLastTick);\n        this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n        if (orien === 'h') {\n            this.firstChild.style.width = tickWidth / 2 + '%';\n            this.lastChild.style.width = tickWidth / 2 + '%';\n        }\n        else {\n            this.firstChild.style.height = tickWidth / 2 + '%';\n            this.lastChild.style.height = tickWidth / 2 + '%';\n        }\n        var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n        if (triggerEvent) {\n            this.trigger('renderedTicks', eventArgs);\n        }\n        this.scaleAlignment();\n    };\n    Slider.prototype.createTick = function (li, start, tickWidth) {\n        var span = this.createElement('span', {\n            className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n            attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n        });\n        li.appendChild(span);\n        if (isNullOrUndefined(this.customValues)) {\n            this.formatTicksValue(li, start, span, tickWidth);\n        }\n        else {\n            if (this.enableHtmlSanitizer) {\n                span.innerHTML = SanitizeHtmlHelper.sanitize(start.toString());\n            }\n            else {\n                span.innerHTML = start.toString();\n            }\n        }\n    };\n    Slider.prototype.formatTicksValue = function (li, start, spanElement, tickWidth) {\n        var _this = this;\n        var tickText = this.formatNumber(start);\n        var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n            this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n        var eventArgs = { value: start, text: text, tickElement: li };\n        this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n            li.setAttribute('title', observedArgs.text.toString());\n            if (spanElement) {\n                if (_this.enableHtmlSanitizer) {\n                    spanElement.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n                }\n                else {\n                    spanElement.innerHTML = observedArgs.text.toString();\n                }\n            }\n            if (!isNullOrUndefined(_this.renderingTicks) && isBlazor()) {\n                var orien = _this.orientation === 'Horizontal' ? 'h' : 'v';\n                _this.ticksAlignment(orien, tickWidth, false);\n            }\n        });\n    };\n    Slider.prototype.scaleAlignment = function () {\n        this.tickValuePosition();\n        var smallTick = 12;\n        var largeTick = 20;\n        var half = largeTick / 2;\n        var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n        if (this.orientation === 'Vertical') {\n            (this.element.getBoundingClientRect().width <= 15) ?\n                this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n                this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n        }\n        else {\n            (this.element.getBoundingClientRect().height <= 15) ?\n                this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n                this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n        }\n    };\n    Slider.prototype.tickValuePosition = function () {\n        this.firstChild = this.element.querySelector('ul').children[0];\n        var first = this.firstChild.getBoundingClientRect();\n        var firstChild;\n        var otherChild;\n        var smallStep = this.ticks.smallStep;\n        var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n        if (this.firstChild.children.length > 0) {\n            firstChild = this.firstChild.children[0].getBoundingClientRect();\n        }\n        var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n                classNames.large + ' .' + classNames.tickValue)];\n        var other;\n        if (this.ticks.placement === 'Both') {\n            other = [].slice.call(tickElements[0], 2);\n        }\n        else {\n            other = [].slice.call(tickElements[0], 1);\n        }\n        var tickWidth = this.orientation === 'Vertical' ?\n            (first.height * 2) : (first.width * 2);\n        for (var i = 0; i < this.firstChild.children.length; i++) {\n            if (this.orientation === 'Vertical') {\n                if (!isBlazor() || !this.isServerRendered) {\n                    this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n                }\n            }\n            else {\n                if (!this.enableRtl) {\n                    this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n                }\n                else {\n                    this.firstChild.children[i].style.left = (tickWidth -\n                        this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n                }\n            }\n        }\n        for (var i = 0; i < other.length; i++) {\n            otherChild = other[i].getBoundingClientRect();\n            if (this.orientation === 'Vertical') {\n                if (!isBlazor() || !this.isServerRendered) {\n                    setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n                }\n            }\n            else {\n                setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n            }\n        }\n        if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n            this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n            if (this.ticks.placement === 'Both') {\n                if (!isBlazor()) {\n                    this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n                }\n            }\n        }\n        if (count === 0) {\n            if (this.orientation === 'Horizontal') {\n                if (!this.enableRtl) {\n                    this.firstChild.classList.remove(classNames.sliderLastTick);\n                    if (!isBlazor()) {\n                        this.firstChild.style.left = this.firstHandle.style.left;\n                    }\n                }\n                else {\n                    this.firstChild.classList.remove(classNames.sliderLastTick);\n                    this.firstChild.style.right = this.firstHandle.style.right;\n                    if (!isBlazor()) {\n                        this.firstChild.children[0].style.left =\n                            (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n                        if (this.ticks.placement === 'Both') {\n                            this.firstChild.children[1].style.left =\n                                (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n                        }\n                    }\n                }\n            }\n            if (!isBlazor() || !this.isServerRendered) {\n                if (this.orientation === 'Vertical') {\n                    this.firstChild.classList.remove(classNames.sliderLastTick);\n                }\n            }\n        }\n        if (isBlazor() && this.isServerRendered) {\n            var args = void 0;\n            if (this.firstChild != null) {\n                if (this.orientation === 'Horizontal') {\n                    args = { firstTickPostion: this.firstChild.children[0].style.left };\n                }\n                else {\n                    args = { firstTickPostion: -(firstChild.height / 2) + 'px' };\n                }\n            }\n            if (other[0] != null) {\n                if (this.orientation === 'Horizontal') {\n                    args = { otherTicksPosition: other[0].style.left };\n                }\n                else {\n                    args = { otherTicksPosition: (tickWidth - otherChild.height) / 2 + 'px' };\n                }\n            }\n            if (this.firstChild != null && other[0] != null) {\n                if (this.orientation === 'Horizontal') {\n                    args = {\n                        firstTickPostion: this.firstChild.children[0].style.left,\n                        otherTicksPosition: other[0].style.left\n                    };\n                }\n                else {\n                    args = {\n                        firstTickPostion: -(firstChild.height / 2) + 'px',\n                        otherTicksPosition: (tickWidth - otherChild.height) / 2 + 'px'\n                    };\n                }\n            }\n            // tslint:disable\n            this.interopAdaptor.invokeMethodAsync('SliderTicksData', args);\n            // tslint:enable\n        }\n    };\n    Slider.prototype.setAriaAttrValue = function (element) {\n        var ariaValueText;\n        var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n        var text = !isTickFormatted ?\n            this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n        var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n            this.formatContent(this.tooltipFormatInfo, true);\n        text = (!this.customAriaText) ? (text) : (this.customAriaText);\n        if (text.split(' - ').length === 2) {\n            ariaValueText = text.split(' - ');\n        }\n        else {\n            ariaValueText = [text, text];\n        }\n        this.setAriaAttributes(element);\n        if (this.type !== 'Range') {\n            attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n        }\n        else {\n            (!this.enableRtl) ? ((element === this.firstHandle) ?\n                attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n                attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n                ((element === this.firstHandle) ?\n                    attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n                    attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n        }\n    };\n    Slider.prototype.handleValueUpdate = function () {\n        var hVal;\n        if (this.type === 'Range') {\n            if (this.activeHandle === 1) {\n                hVal = this.handleVal1;\n            }\n            else {\n                hVal = this.handleVal2;\n            }\n        }\n        else {\n            hVal = this.handleVal1;\n        }\n        return hVal;\n    };\n    Slider.prototype.getLimitCorrectedValues = function (value) {\n        if (this.type === 'MinRange' || this.type === 'Default') {\n            value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n        }\n        else {\n            if (this.activeHandle === 1) {\n                value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n            }\n            else {\n                value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n            }\n        }\n        return value;\n    };\n    Slider.prototype.focusSliderElement = function () {\n        if (!this.isElementFocused) {\n            this.element.focus();\n            this.isElementFocused = true;\n        }\n    };\n    Slider.prototype.buttonClick = function (args) {\n        this.focusSliderElement();\n        var value;\n        var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n        var hVal = this.handleValueUpdate();\n        if ((args.keyCode === 40) || (args.keyCode === 37)\n            || args.currentTarget.classList.contains(classNames.firstButton)) {\n            enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n                (value = this.add(hVal, parseFloat(this.step.toString()), false));\n        }\n        else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n            args.currentTarget.classList.contains(classNames.secondButton)) {\n            enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n                (value = this.add(hVal, parseFloat(this.step.toString()), true));\n        }\n        else if ((args.keyCode === 33\n            || args.currentTarget.classList.contains(classNames.firstButton))) {\n            enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n                (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n        }\n        else if ((args.keyCode === 34) ||\n            args.currentTarget.classList.contains(classNames.secondButton)) {\n            enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n                (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n        }\n        else if ((args.keyCode === 36)) {\n            value = parseFloat(this.min.toString());\n        }\n        else if ((args.keyCode === 35)) {\n            value = parseFloat(this.max.toString());\n        }\n        if (this.limits.enabled) {\n            value = this.getLimitCorrectedValues(value);\n        }\n        this.changeHandleValue(value);\n        if (this.isMaterial && !this.tooltip.isVisible &&\n            !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n            this.materialChange();\n        }\n        this.tooltipToggle(this.getHandle());\n        this.getHandle().focus();\n        if (args.currentTarget.classList.contains(classNames.firstButton)) {\n            EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n        }\n        if (args.currentTarget.classList.contains(classNames.secondButton)) {\n            EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n        }\n    };\n    Slider.prototype.tooltipToggle = function (target) {\n        if (this.isMaterialTooltip) {\n            !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n                this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n        }\n        else {\n            !this.tooltipElement ? this.openTooltip(target) : this.refreshTooltip(target);\n        }\n    };\n    Slider.prototype.buttonUp = function (args) {\n        if (args.currentTarget.classList.contains(classNames.firstButton)) {\n            EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n        }\n        if (args.currentTarget.classList.contains(classNames.secondButton)) {\n            EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n        }\n    };\n    Slider.prototype.setRangeBar = function () {\n        if (this.orientation === 'Horizontal') {\n            if (this.type === 'MinRange') {\n                this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n                setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n            }\n            else {\n                this.enableRtl ? (this.rangeBar.style.right =\n                    this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n                setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n            }\n        }\n        else {\n            if (this.type === 'MinRange') {\n                this.rangeBar.style.bottom = '0px';\n                setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n            }\n            else {\n                this.rangeBar.style.bottom = this.handlePos1 + 'px';\n                setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n            }\n        }\n    };\n    Slider.prototype.checkValidValueAndPos = function (value) {\n        value = this.checkHandleValue(value);\n        value = this.checkHandlePosition(value);\n        return value;\n    };\n    Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n        if (this.orientation === 'Horizontal') {\n            if (!this.enableRtl) {\n                this.limitBarFirst.style.left = fromMinPostion + 'px';\n                this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n            }\n            else {\n                this.limitBarFirst.style.right = fromMinPostion + 'px';\n                this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n            }\n        }\n        else {\n            this.limitBarFirst.style.bottom = fromMinPostion + 'px';\n            this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + 'px';\n        }\n        if (this.type === 'Range') {\n            if (this.orientation === 'Horizontal') {\n                if (!this.enableRtl) {\n                    this.limitBarSecond.style.left = toMinPostion + 'px';\n                    this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n                }\n                else {\n                    this.limitBarSecond.style.right = toMinPostion + 'px';\n                    this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n                }\n            }\n            else {\n                this.limitBarSecond.style.bottom = toMinPostion + 'px';\n                this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + 'px';\n            }\n        }\n    };\n    Slider.prototype.setLimitBar = function () {\n        if (this.type === 'Default' || this.type === 'MinRange') {\n            var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n            fromPosition = this.checkValidValueAndPos(fromPosition);\n            var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n            toPosition = this.checkValidValueAndPos(toPosition);\n            this.setLimitBarPositions(fromPosition, toPosition);\n        }\n        else if (this.type === 'Range') {\n            var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n            fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n            var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n            fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n            var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n            toMinPostion = this.checkValidValueAndPos(toMinPostion);\n            var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n            toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n            this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n        }\n    };\n    Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n        if (isNullOrUndefined(minValue)) {\n            minValue = this.min;\n            if (isNullOrUndefined(currentValue) && limitBar) {\n                currentValue = minValue;\n            }\n        }\n        if (isNullOrUndefined(maxValue)) {\n            maxValue = this.max;\n            if (isNullOrUndefined(currentValue) && limitBar) {\n                currentValue = maxValue;\n            }\n        }\n        if (currentValue < minValue) {\n            currentValue = minValue;\n        }\n        if (currentValue > maxValue) {\n            currentValue = maxValue;\n        }\n        return [currentValue, this.checkHandlePosition(currentValue)];\n    };\n    Slider.prototype.setValue = function () {\n        if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n            this.min = 0;\n            this.max = this.customValues.length - 1;\n            this.setBarColor();\n        }\n        this.setAriaAttributes(this.firstHandle);\n        this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n            this.checkHandleValue(parseFloat(this.value.toString()));\n        this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n        this.preHandlePos1 = this.handlePos1;\n        isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n            this.activeHandle = this.activeHandle;\n        if (this.type === 'Default' || this.type === 'MinRange') {\n            if (this.limits.enabled) {\n                var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n                this.handleVal1 = values[0];\n                this.handlePos1 = values[1];\n                this.preHandlePos1 = this.handlePos1;\n            }\n            this.setHandlePosition(null);\n            this.handleStart();\n            this.value = this.handleVal1;\n            this.setAriaAttrValue(this.firstHandle);\n            this.changeEvent('changed', null);\n        }\n        else {\n            this.validateRangeValue();\n        }\n        if (this.type !== 'Default') {\n            this.setRangeBar();\n        }\n        if (this.limits.enabled) {\n            this.setLimitBar();\n        }\n    };\n    Slider.prototype.rangeValueUpdate = function () {\n        if (this.value === null || typeof (this.value) !== 'object') {\n            this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n        }\n    };\n    Slider.prototype.validateRangeValue = function () {\n        this.rangeValueUpdate();\n        this.setRangeValue();\n    };\n    Slider.prototype.modifyZindex = function () {\n        if (this.type === 'Range') {\n            if (this.activeHandle === 1) {\n                this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n                this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n            }\n            else {\n                this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n                this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n            }\n        }\n        else if (this.isMaterialTooltip && this.tooltipElement) {\n            this.tooltipElement.style.zIndex = getZindexPartial(this.element) + '';\n        }\n    };\n    Slider.prototype.setHandlePosition = function (event) {\n        var _this = this;\n        var handle;\n        var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n        if (this.isMaterialTooltip) {\n            handle = [this.firstHandle, this.materialHandle];\n        }\n        else {\n            handle = [this.getHandle()];\n        }\n        this.handleStart();\n        handle.forEach(function (handle) {\n            if (_this.orientation === 'Horizontal') {\n                _this.enableRtl ? (handle.style.right =\n                    pos + \"px\") : (handle.style.left = pos + \"px\");\n            }\n            else {\n                handle.style.bottom = pos + \"px\";\n            }\n            if (isBlazor() && _this.isServerRendered) {\n                handle.style.removeProperty('visibility');\n            }\n        });\n        this.changeEvent('change', event);\n    };\n    Slider.prototype.getHandle = function () {\n        return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n    };\n    Slider.prototype.setRangeValue = function () {\n        this.updateRangeValue();\n        this.activeHandle = 1;\n        this.setHandlePosition(null);\n        this.activeHandle = 2;\n        this.setHandlePosition(null);\n        this.activeHandle = 1;\n    };\n    Slider.prototype.changeEvent = function (eventName, e) {\n        var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n        if (this.type !== 'Range') {\n            this.setProperties({ 'value': this.handleVal1 }, true);\n            if (previous !== this.value && (!this.isMaterialTooltip || !this.initialTooltip)) {\n                this.trigger(eventName, this.changeEventArgs(eventName, e));\n                this.initialTooltip = true;\n                this.setPreviousVal(eventName, this.value);\n            }\n            this.setAriaAttrValue(this.firstHandle);\n        }\n        else {\n            var value = this.value = [this.handleVal1, this.handleVal2];\n            this.setProperties({ 'value': value }, true);\n            if (previous.length === this.value.length\n                && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n                this.initialTooltip = false;\n                this.trigger(eventName, this.changeEventArgs(eventName, e));\n                this.initialTooltip = true;\n                this.setPreviousVal(eventName, this.value);\n            }\n            this.setAriaAttrValue(this.getHandle());\n        }\n        this.hiddenInput.value = this.value.toString();\n    };\n    Slider.prototype.changeEventArgs = function (eventName, e) {\n        var eventArgs;\n        if (this.tooltip.isVisible && this.tooltipObj && this.initialTooltip) {\n            if (!isBlazor() || !this.isServerRendered) {\n                this.tooltipValue();\n            }\n            eventArgs = {\n                value: this.value,\n                previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n                action: eventName, text: this.tooltipObj.content, isInteracted: isNullOrUndefined(e) ? false : true\n            };\n        }\n        else {\n            eventArgs = {\n                value: this.value,\n                previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n                action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n                    (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n                        (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n                            this.formatString(this.value[1], this.ticksFormatInfo).formatString)),\n                isInteracted: isNullOrUndefined(e) ? false : true\n            };\n        }\n        return eventArgs;\n    };\n    Slider.prototype.setPreviousVal = function (eventName, value) {\n        if (eventName === 'change') {\n            this.previousVal = value;\n        }\n        else {\n            this.previousChanged = value;\n        }\n    };\n    Slider.prototype.updateRangeValue = function () {\n        var values = this.value.toString().split(',').map(Number);\n        if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n            this.value = [values[1], values[0]];\n        }\n        else {\n            this.value = [values[0], values[1]];\n        }\n        if (this.enableRtl && this.orientation !== 'Vertical') {\n            this.handleVal1 = this.checkHandleValue(this.value[1]);\n            this.handleVal2 = this.checkHandleValue(this.value[0]);\n        }\n        else {\n            this.handleVal1 = this.checkHandleValue(this.value[0]);\n            this.handleVal2 = this.checkHandleValue(this.value[1]);\n        }\n        this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n        this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n        if (this.handlePos1 > this.handlePos2) {\n            this.handlePos1 = this.handlePos2;\n            this.handleVal1 = this.handleVal2;\n        }\n        this.preHandlePos1 = this.handlePos1;\n        this.preHandlePos2 = this.handlePos2;\n        if (this.limits.enabled) {\n            this.activeHandle = 1;\n            var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n            this.handleVal1 = values_1[0];\n            this.handlePos1 = values_1[1];\n            this.preHandlePos1 = this.handlePos1;\n            this.activeHandle = 2;\n            values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n            this.handleVal2 = values_1[0];\n            this.handlePos2 = values_1[1];\n            this.preHandlePos2 = this.handlePos2;\n        }\n    };\n    Slider.prototype.checkHandlePosition = function (value) {\n        var pos;\n        value = (100 *\n            (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n        if (this.orientation === 'Horizontal') {\n            pos = this.element.getBoundingClientRect().width * (value / 100);\n        }\n        else {\n            pos = this.element.getBoundingClientRect().height * (value / 100);\n        }\n        if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n            if (this.orientation === 'Horizontal') {\n                pos = this.element.getBoundingClientRect().width;\n            }\n            else {\n                pos = this.element.getBoundingClientRect().height;\n            }\n        }\n        return pos;\n    };\n    Slider.prototype.checkHandleValue = function (value) {\n        if (this.min > this.max) {\n            this.min = this.max;\n        }\n        if (this.min === this.max) {\n            return (parseFloat(formatUnit(this.max)));\n        }\n        var handle = this.tempStartEnd();\n        if (value < handle.start) {\n            value = handle.start;\n        }\n        else if (value > handle.end) {\n            value = handle.end;\n        }\n        return value;\n    };\n    /**\n     * It is used to reposition slider.\n     * @returns void\n     */\n    Slider.prototype.reposition = function () {\n        var _this = this;\n        this.firstHandle.style.transition = 'none';\n        if (this.type !== 'Default') {\n            this.rangeBar.style.transition = 'none';\n        }\n        if (this.type === 'Range') {\n            this.secondHandle.style.transition = 'none';\n        }\n        this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n        if (this.handleVal2) {\n            this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n        }\n        if (this.orientation === 'Horizontal') {\n            this.enableRtl ? this.firstHandle.style.right =\n                this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n            if (this.isMaterialTooltip) {\n                this.enableRtl ? this.materialHandle.style.right =\n                    this.handlePos1 + \"px\" : this.materialHandle.style.left = this.handlePos1 + \"px\";\n            }\n            if (this.type === 'MinRange') {\n                this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n                setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n            }\n            else if (this.type === 'Range') {\n                this.enableRtl ? this.secondHandle.style.right =\n                    this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n                this.enableRtl ? (this.rangeBar.style.right =\n                    this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n                setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n            }\n        }\n        else {\n            this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n            if (this.isMaterialTooltip) {\n                this.materialHandle.style.bottom = this.handlePos1 + \"px\";\n            }\n            if (this.type === 'MinRange') {\n                this.rangeBar.style.bottom = '0px';\n                setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n            }\n            else if (this.type === 'Range') {\n                this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n                this.rangeBar.style.bottom = this.handlePos1 + 'px';\n                setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n            }\n        }\n        if (this.limits.enabled) {\n            this.setLimitBar();\n        }\n        if (this.ticks.placement !== 'None' && this.ul) {\n            if (!isBlazor()) {\n                this.removeElement(this.ul);\n                this.ul = undefined;\n            }\n            this.renderScale();\n            if (isBlazor()) {\n                this.tickValuePosition();\n            }\n        }\n        this.handleStart();\n        if (!this.tooltip.isVisible) {\n            setTimeout(function () {\n                _this.firstHandle.style.transition = _this.scaleTransform;\n                if (_this.type === 'Range') {\n                    _this.secondHandle.style.transition = _this.scaleTransform;\n                }\n            });\n        }\n        if (!isBlazor() || !this.isServerRendered) {\n            this.refreshTooltip(this.tooltipTarget);\n        }\n        this.setBarColor();\n    };\n    Slider.prototype.changeHandleValue = function (value) {\n        var position = null;\n        if (this.activeHandle === 1) {\n            if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n                this.handleVal1 = this.checkHandleValue(value);\n                this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n                if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n                    this.handlePos1 = this.handlePos2;\n                    this.handleVal1 = this.handleVal2;\n                }\n                if (this.handlePos1 !== this.preHandlePos1) {\n                    position = this.preHandlePos1 = this.handlePos1;\n                }\n            }\n            this.modifyZindex();\n        }\n        else {\n            if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n                this.handleVal2 = this.checkHandleValue(value);\n                this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n                if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n                    this.handlePos2 = this.handlePos1;\n                    this.handleVal2 = this.handleVal1;\n                }\n                if (this.handlePos2 !== this.preHandlePos2) {\n                    position = this.preHandlePos2 = this.handlePos2;\n                }\n            }\n            this.modifyZindex();\n        }\n        if (position !== null) {\n            if (this.type !== 'Default') {\n                this.setRangeBar();\n            }\n            this.setHandlePosition(null);\n        }\n    };\n    Slider.prototype.tempStartEnd = function () {\n        if (this.min > this.max) {\n            return {\n                start: this.max,\n                end: this.min\n            };\n        }\n        else {\n            return {\n                start: this.min,\n                end: this.max\n            };\n        }\n    };\n    Slider.prototype.xyToPosition = function (position) {\n        var pos;\n        if (this.min === this.max) {\n            return 100;\n        }\n        if (this.orientation === 'Horizontal') {\n            var left = position.x - this.element.getBoundingClientRect().left;\n            var num = this.element.offsetWidth / 100;\n            this.val = (left / num);\n        }\n        else {\n            var top_1 = position.y - this.element.getBoundingClientRect().top;\n            var num = this.element.offsetHeight / 100;\n            this.val = 100 - (top_1 / num);\n        }\n        var val = this.stepValueCalculation(this.val);\n        if (val < 0) {\n            val = 0;\n        }\n        else if (val > 100) {\n            val = 100;\n        }\n        if (this.enableRtl && this.orientation !== 'Vertical') {\n            val = 100 - val;\n        }\n        if (this.orientation === 'Horizontal') {\n            pos = this.element.getBoundingClientRect().width * (val / 100);\n        }\n        else {\n            pos = this.element.getBoundingClientRect().height * (val / 100);\n        }\n        return pos;\n    };\n    Slider.prototype.stepValueCalculation = function (value) {\n        if (this.step === 0) {\n            this.step = 1;\n        }\n        var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n        var remain = value % Math.abs(percentStep);\n        if (remain !== 0) {\n            if ((percentStep / 2) > remain) {\n                value -= remain;\n            }\n            else {\n                value += Math.abs(percentStep) - remain;\n            }\n        }\n        return value;\n    };\n    Slider.prototype.add = function (a, b, addition) {\n        var precision;\n        var x = Math.pow(10, precision || 3);\n        var val;\n        if (addition) {\n            val = (Math.round(a * x) + Math.round(b * x)) / x;\n        }\n        else {\n            val = (Math.round(a * x) - Math.round(b * x)) / x;\n        }\n        return val;\n    };\n    Slider.prototype.positionToValue = function (pos) {\n        var val;\n        var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n        if (this.orientation === 'Horizontal') {\n            val = (pos / this.element.getBoundingClientRect().width) * diff;\n        }\n        else {\n            val = (pos / this.element.getBoundingClientRect().height) * diff;\n        }\n        var total = this.add(val, parseFloat(this.min.toString()), true);\n        return (total);\n    };\n    Slider.prototype.sliderBarClick = function (evt) {\n        evt.preventDefault();\n        var pos;\n        if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n            pos = { x: evt.clientX, y: evt.clientY };\n        }\n        else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n            pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n        }\n        var handlepos = this.xyToPosition(pos);\n        var handleVal = this.positionToValue(handlepos);\n        if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n            this.activeHandle = 2;\n            if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n                if (this.limits.enabled) {\n                    var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n                    handleVal = value[0];\n                    handlepos = value[1];\n                }\n                this.secondHandle.classList.add(classNames.sliderActiveHandle);\n                this.handlePos2 = this.preHandlePos2 = handlepos;\n                this.handleVal2 = handleVal;\n            }\n            this.modifyZindex();\n            this.secondHandle.focus();\n        }\n        else {\n            this.activeHandle = 1;\n            if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n                if (this.limits.enabled) {\n                    var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n                    handleVal = value[0];\n                    handlepos = value[1];\n                }\n                this.firstHandle.classList.add(classNames.sliderActiveHandle);\n                this.handlePos1 = this.preHandlePos1 = handlepos;\n                this.handleVal1 = handleVal;\n            }\n            this.modifyZindex();\n            this.firstHandle.focus();\n        }\n        if (this.isMaterialTooltip) {\n            this.tooltipElement.classList.add(classNames.materialTooltipActive);\n        }\n        var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n        if (focusedElement && this.getHandle() !== focusedElement) {\n            focusedElement.classList.remove(classNames.sliderTabHandle);\n        }\n        var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n        if (evt.target === handle) {\n            if (this.isMaterial && !this.tooltip.isVisible &&\n                !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n                this.materialChange();\n            }\n            this.sliderBarUp(evt);\n            this.tooltipToggle(this.getHandle());\n            return;\n        }\n        if (!this.checkRepeatedValue(handleVal)) {\n            return;\n        }\n        var transition = this.isMaterial && this.tooltip.isVisible ?\n            this.transitionOnMaterialTooltip : this.transition;\n        this.getHandle().style.transition = transition.handle;\n        if (this.type !== 'Default') {\n            this.rangeBar.style.transition = transition.rangeBar;\n        }\n        this.setHandlePosition(evt);\n        if (this.isMaterialTooltip) {\n            this.initialTooltip = false;\n        }\n        this.changeEvent('changed', evt);\n        if (this.type !== 'Default') {\n            this.setRangeBar();\n        }\n    };\n    Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n        if (handleNumber === 1) {\n            this.handleVal1 = assignValue;\n            this.handleVal2 = this.handleVal1 + this.minDiff;\n        }\n        else if (handleNumber === 2) {\n            this.handleVal2 = assignValue;\n            this.handleVal1 = this.handleVal2 - this.minDiff;\n        }\n        this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n        this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n    };\n    Slider.prototype.dragRangeBarMove = function (event) {\n        var _a, _b;\n        if (event.type !== 'touchmove') {\n            event.preventDefault();\n        }\n        this.rangeBarDragged = true;\n        var pos;\n        this.rangeBar.style.transition = 'none';\n        this.firstHandle.style.transition = 'none';\n        this.secondHandle.style.transition = 'none';\n        var xPostion;\n        var yPostion;\n        if (event.type === 'mousemove') {\n            _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n        }\n        else {\n            _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n        }\n        if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n            if (!this.enableRtl) {\n                pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n            }\n            else {\n                pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n            }\n            this.handlePos1 = this.xyToPosition(pos);\n            this.handleVal1 = this.positionToValue(this.handlePos1);\n            if (!this.enableRtl) {\n                pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n            }\n            else {\n                pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n            }\n            this.handlePos2 = this.xyToPosition(pos);\n            this.handleVal2 = this.positionToValue(this.handlePos2);\n            if (this.limits.enabled) {\n                var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n                this.handleVal1 = value[0];\n                this.handlePos1 = value[1];\n                if (this.handleVal1 === this.limits.minEnd) {\n                    this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n                }\n                if (this.handleVal1 === this.limits.minStart) {\n                    this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n                }\n                value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n                this.handleVal2 = value[0];\n                this.handlePos2 = value[1];\n                if (this.handleVal2 === this.limits.maxStart) {\n                    this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n                }\n                if (this.handleVal2 === this.limits.maxEnd) {\n                    this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n                }\n            }\n            if (this.handleVal2 === this.max) {\n                this.handleValueAdjust(this.handleVal2, this.max, 2);\n            }\n            if (this.handleVal1 === this.min) {\n                this.handleValueAdjust(this.handleVal1, this.min, 1);\n            }\n        }\n        this.activeHandle = 1;\n        this.setHandlePosition(event);\n        this.activeHandle = 2;\n        this.setHandlePosition(event);\n        this.tooltipToggle(this.rangeBar);\n        this.setRangeBar();\n    };\n    Slider.prototype.sliderBarUp = function (event) {\n        this.changeEvent('changed', event);\n        this.handleFocusOut();\n        this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n        if (this.type === 'Range') {\n            this.initialTooltip = false;\n            this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n        }\n        this.closeTooltip();\n        if (this.isMaterial) {\n            this.getHandle().classList.remove('e-large-thumb-size');\n            if (this.isMaterialTooltip) {\n                this.tooltipElement.classList.remove(classNames.materialTooltipActive);\n            }\n        }\n        EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n        EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n    };\n    Slider.prototype.sliderBarMove = function (evt) {\n        if (evt.type !== 'touchmove') {\n            evt.preventDefault();\n        }\n        var pos;\n        if (evt.type === 'mousemove') {\n            pos = { x: evt.clientX, y: evt.clientY };\n        }\n        else {\n            pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n        }\n        var handlepos = this.xyToPosition(pos);\n        var handleVal = this.positionToValue(handlepos);\n        handlepos = Math.round(handlepos);\n        if (this.type !== 'Range' && this.activeHandle === 1) {\n            if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n                if (this.limits.enabled) {\n                    var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n                    handlepos = valueAndPostion[1];\n                    handleVal = valueAndPostion[0];\n                }\n                this.handlePos1 = handlepos;\n                this.handleVal1 = handleVal;\n            }\n            this.firstHandle.classList.add(classNames.sliderActiveHandle);\n        }\n        if (this.type === 'Range') {\n            if (this.activeHandle === 1) {\n                this.firstHandle.classList.add(classNames.sliderActiveHandle);\n                if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n                    if (handlepos > this.handlePos2) {\n                        handlepos = this.handlePos2;\n                        handleVal = this.handleVal2;\n                    }\n                    if (handlepos !== this.preHandlePos1) {\n                        if (this.limits.enabled) {\n                            var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n                            handleVal = value[0];\n                            handlepos = value[1];\n                        }\n                        this.handlePos1 = this.preHandlePos1 = handlepos;\n                        this.handleVal1 = handleVal;\n                        this.activeHandle = 1;\n                    }\n                }\n            }\n            else if (this.activeHandle === 2) {\n                this.secondHandle.classList.add(classNames.sliderActiveHandle);\n                if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n                    if (handlepos < this.handlePos1) {\n                        handlepos = this.handlePos1;\n                        handleVal = this.handleVal1;\n                    }\n                    if (handlepos !== this.preHandlePos2) {\n                        if (this.limits.enabled) {\n                            var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n                            handleVal = value[0];\n                            handlepos = value[1];\n                        }\n                        this.handlePos2 = this.preHandlePos2 = handlepos;\n                        this.handleVal2 = handleVal;\n                        this.activeHandle = 2;\n                    }\n                }\n            }\n        }\n        if (!this.checkRepeatedValue(handleVal)) {\n            return;\n        }\n        this.getHandle().style.transition = this.scaleTransform;\n        if (this.type !== 'Default') {\n            this.rangeBar.style.transition = 'none';\n        }\n        this.setHandlePosition(evt);\n        if (this.isMaterial && !this.tooltip.isVisible &&\n            !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n            this.materialChange();\n        }\n        this.tooltipToggle(this.getHandle());\n        if (this.type !== 'Default') {\n            this.setRangeBar();\n        }\n    };\n    Slider.prototype.dragRangeBarUp = function (event) {\n        if (!this.rangeBarDragged) {\n            this.focusSliderElement();\n            this.sliderBarClick(event);\n        }\n        this.changeEvent('changed', event);\n        this.closeTooltip();\n        EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n        EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n        this.rangeBarDragged = false;\n    };\n    Slider.prototype.checkRepeatedValue = function (currentValue) {\n        if (this.type === 'Range') {\n            var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n                this.previousVal[1] : this.previousVal[0]) :\n                (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n            if (currentValue === previousVal) {\n                return 0;\n            }\n        }\n        else {\n            if (currentValue === this.previousVal) {\n                return 0;\n            }\n        }\n        return 1;\n    };\n    Slider.prototype.refreshTooltip = function (target) {\n        if (this.tooltip.isVisible && this.tooltipObj) {\n            this.tooltipValue();\n            if (target) {\n                this.tooltipObj.refresh(target);\n                this.tooltipTarget = target;\n            }\n        }\n    };\n    Slider.prototype.openTooltip = function (target) {\n        if (this.tooltip.isVisible && this.tooltipObj && !this.isMaterialTooltip) {\n            this.tooltipValue();\n            this.tooltipObj.open(target);\n            this.tooltipTarget = target;\n        }\n    };\n    Slider.prototype.closeTooltip = function () {\n        if (this.tooltip.isVisible && this.tooltipObj && this.tooltip.showOn !== 'Always' && !this.isMaterialTooltip) {\n            this.tooltipValue();\n            this.tooltipObj.close();\n            this.tooltipTarget = undefined;\n        }\n    };\n    Slider.prototype.keyDown = function (event) {\n        switch (event.keyCode) {\n            case 37:\n            case 38:\n            case 39:\n            case 40:\n            case 33:\n            case 34:\n            case 36:\n            case 35:\n                event.preventDefault();\n                this.buttonClick(event);\n                break;\n        }\n    };\n    Slider.prototype.wireButtonEvt = function (destroy) {\n        if (!destroy) {\n            EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n            EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n            EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n            EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n            EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n            EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n            EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n            EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n        }\n        else {\n            EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n            EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n            EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n            EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n            EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n            EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n            EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n            EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n        }\n    };\n    Slider.prototype.rangeBarMousedown = function (event) {\n        var _a, _b;\n        event.preventDefault();\n        this.focusSliderElement();\n        if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n            var xPostion = void 0;\n            var yPostion = void 0;\n            if (event.type === 'mousedown') {\n                _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n            }\n            else if (event.type === 'touchstart') {\n                _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n            }\n            if (this.orientation === 'Horizontal') {\n                this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n                this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n            }\n            else {\n                this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n                this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n            }\n            this.minDiff = this.handleVal2 - this.handleVal1;\n            this.tooltipToggle(this.rangeBar);\n            var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n            if (focusedElement) {\n                focusedElement.classList.remove(classNames.sliderTabHandle);\n            }\n            EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n            EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n        }\n    };\n    Slider.prototype.elementClick = function (event) {\n        event.preventDefault();\n        this.focusSliderElement();\n        this.sliderBarClick(event);\n    };\n    Slider.prototype.wireEvents = function () {\n        this.onresize = this.reposition.bind(this);\n        window.addEventListener('resize', this.onresize);\n        if (this.enabled && !this.readonly) {\n            EventHandler.add(this.element, 'click', this.elementClick, this);\n            if (this.type === 'Range' && this.drag) {\n                EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n            }\n            EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n            EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n            EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n            EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n            this.wireFirstHandleEvt(false);\n            if (this.type === 'Range') {\n                this.wireSecondHandleEvt(false);\n            }\n            if (this.showButtons) {\n                this.wireButtonEvt(false);\n            }\n            this.wireMaterialTooltipEvent(false);\n            if (this.isForm) {\n                EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n            }\n        }\n    };\n    Slider.prototype.unwireEvents = function () {\n        EventHandler.remove(this.element, 'click', this.elementClick);\n        if (this.type === 'Range' && this.drag) {\n            EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n        }\n        EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n        EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n        EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n        EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n        this.wireFirstHandleEvt(true);\n        if (this.type === 'Range') {\n            this.wireSecondHandleEvt(true);\n        }\n        if (this.showButtons) {\n            this.wireButtonEvt(true);\n        }\n        this.wireMaterialTooltipEvent(true);\n        EventHandler.remove(this.element, 'reset', this.formResetHandler);\n    };\n    Slider.prototype.formResetHandler = function () {\n        this.setProperties({ 'value': this.formResetValue }, true);\n        this.setValue();\n    };\n    Slider.prototype.keyUp = function (event) {\n        if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n            this.focusSliderElement();\n            if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n                if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n                    this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n                }\n                event.target.classList.add(classNames.sliderTabHandle);\n                var parentElement = event.target.parentElement;\n                if (parentElement === this.element) {\n                    parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n                    if (this.type === 'Range' || this.type === 'MinRange') {\n                        parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n                    }\n                }\n                if (this.type === 'Range') {\n                    (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n                        this.activeHandle = 2 : this.activeHandle = 1;\n                }\n                this.getHandle().focus();\n                this.tooltipToggle(this.getHandle());\n            }\n        }\n        this.closeTooltip();\n        this.changeEvent('changed', event);\n    };\n    Slider.prototype.hover = function (event) {\n        if (!isNullOrUndefined(event)) {\n            if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n                event.type === 'pointermove' || event.type === 'touchstart') {\n                this.sliderContainer.classList.add(classNames.sliderHover);\n            }\n            else {\n                this.sliderContainer.classList.remove(classNames.sliderHover);\n            }\n        }\n    };\n    Slider.prototype.sliderFocusOut = function (event) {\n        if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n            event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n            this.closeMaterialTooltip();\n            if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n                this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n            }\n            if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n                this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n                if ((this.type === 'Range' || this.type === 'MinRange') &&\n                    this.element.querySelector('.' + classNames.sliderTabRange)) {\n                    this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n                }\n            }\n            this.hiddenInput.focus();\n            this.hiddenInput.blur();\n            this.isElementFocused = false;\n        }\n    };\n    Slider.prototype.removeElement = function (element) {\n        if (element.parentNode) {\n            element.parentNode.removeChild(element);\n        }\n    };\n    Slider.prototype.changeSliderType = function (type, args) {\n        if (this.isMaterialTooltip && this.materialHandle) {\n            this.sliderContainer.classList.remove(classNames.materialSlider);\n            this.removeElement(this.materialHandle);\n            this.materialHandle = undefined;\n        }\n        this.removeElement(this.firstHandle);\n        this.firstHandle = undefined;\n        if (type !== 'Default') {\n            if (type === 'Range') {\n                this.removeElement(this.secondHandle);\n                this.secondHandle = undefined;\n            }\n            this.removeElement(this.rangeBar);\n            this.rangeBar = undefined;\n        }\n        if (this.tooltip.isVisible && !isNullOrUndefined(this.tooltipObj)) {\n            this.tooltipObj.destroy();\n            this.tooltipElement = undefined;\n            this.tooltipCollidedPosition = undefined;\n        }\n        if (this.limits.enabled) {\n            if (type === 'MinRange' || type === 'Default') {\n                if (!isNullOrUndefined(this.limitBarFirst)) {\n                    this.removeElement(this.limitBarFirst);\n                    this.limitBarFirst = undefined;\n                }\n            }\n            else {\n                if (!isNullOrUndefined(this.limitBarSecond)) {\n                    this.removeElement(this.limitBarSecond);\n                    this.limitBarSecond = undefined;\n                }\n            }\n        }\n        this.activeHandle = 1;\n        this.getThemeInitialization();\n        if (this.type === 'Range') {\n            this.rangeValueUpdate();\n        }\n        this.createRangeBar();\n        if (this.limits.enabled) {\n            this.createLimitBar();\n        }\n        this.setHandler();\n        this.setOrientClass();\n        this.wireFirstHandleEvt(false);\n        if (this.type === 'Range') {\n            this.wireSecondHandleEvt(false);\n        }\n        this.setValue();\n        if (this.tooltip.isVisible) {\n            this.renderTooltip();\n            this.wireMaterialTooltipEvent(false);\n        }\n        this.setBarColor();\n        if ((!isBlazor() && !this.isServerRendered) || args !== 'tooltip') {\n            this.updateConfig();\n        }\n    };\n    Slider.prototype.changeRtl = function () {\n        if (!this.enableRtl && this.type === 'Range') {\n            this.value = [this.handleVal2, this.handleVal1];\n        }\n        this.updateConfig();\n        if (this.tooltip.isVisible) {\n            this.tooltipObj.refresh(this.firstHandle);\n        }\n        if (this.showButtons) {\n            var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n            attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n            attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n        }\n    };\n    Slider.prototype.changeOrientation = function () {\n        this.changeSliderType(this.type, 'null');\n    };\n    Slider.prototype.updateConfig = function () {\n        this.setEnableRTL();\n        this.setValue();\n        if (this.tooltip.isVisible) {\n            if (!isBlazor()) {\n                this.refreshTooltip(this.tooltipTarget);\n            }\n        }\n        if (this.ticks.placement !== 'None') {\n            if (this.ul) {\n                this.removeElement(this.ul);\n                this.ul = undefined;\n                this.renderScale();\n            }\n        }\n        this.limitsPropertyChange();\n    };\n    Slider.prototype.limitsPropertyChange = function () {\n        if (this.limits.enabled) {\n            if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n                this.createLimitBar();\n            }\n            if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n                this.createLimitBar();\n            }\n            this.setLimitBar();\n            this.setValue();\n        }\n        else {\n            if (!isNullOrUndefined(this.limitBarFirst)) {\n                detach(this.limitBarFirst);\n            }\n            if (!isNullOrUndefined(this.limitBarSecond)) {\n                detach(this.limitBarSecond);\n            }\n        }\n    };\n    /**\n     * Get the properties to be maintained in the persisted state.\n     * @private\n     */\n    Slider.prototype.getPersistData = function () {\n        var keyEntity = ['value'];\n        return this.addOnPersist(keyEntity);\n    };\n    /**\n     * Removes the component from the DOM and detaches all its related event handlers.\n     * Also it removes the attributes and classes.\n     * @method destroy\n     * @return {void}\n     */\n    Slider.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.unwireEvents();\n        window.removeEventListener('resize', this.onresize);\n        removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n        this.firstHandle.removeAttribute('aria-orientation');\n        if (this.type === 'Range') {\n            this.secondHandle.removeAttribute('aria-orientation');\n        }\n        if (!isBlazor() && !this.isServerRendered) {\n            this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n            detach(this.sliderContainer);\n        }\n        if (this.tooltip.isVisible) {\n            this.tooltipObj.destroy();\n        }\n        if (isBlazor() && this.isMaterialTooltip && !isNullOrUndefined(this.materialHandle)) {\n            this.materialHandle.remove();\n        }\n        if (!isBlazor() && !this.isServerRendered) {\n            this.element.innerHTML = '';\n        }\n    };\n    /**\n     * Calls internally if any of the property value is changed.\n     * @private\n     */\n    // tslint:disable-next-line\n    Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var _this = this;\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'cssClass':\n                    this.setCSSClass(oldProp.cssClass);\n                    break;\n                case 'value':\n                    if (newProp && oldProp) {\n                        var value = isNullOrUndefined(newProp.value) ?\n                            (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n                        this.setProperties({ 'value': value }, true);\n                        if (!isNullOrUndefined(oldProp.value) && oldProp.value.toString() !== value.toString()) {\n                            this.setValue();\n                            if (!isBlazor() || !this.isServerRendered) {\n                                this.refreshTooltip(this.tooltipTarget);\n                            }\n                            if (this.type === 'Range') {\n                                if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n                                    this.activeHandle = 1;\n                                }\n                                else {\n                                    this.activeHandle = 2;\n                                }\n                            }\n                        }\n                    }\n                    break;\n                case 'min':\n                case 'step':\n                case 'max':\n                    if (isBlazor() && this.isServerRendered) {\n                        this.isServerRendered = false;\n                    }\n                    this.setMinMaxValue();\n                    if (isBlazor() && !this.isServerRendered) {\n                        this.isServerRendered = true;\n                    }\n                    break;\n                case 'tooltip':\n                    if (isBlazor() && this.isServerRendered) {\n                        this.isServerRendered = false;\n                    }\n                    if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n                        this.setTooltip(prop);\n                    }\n                    if (isBlazor() && !this.isServerRendered) {\n                        this.isServerRendered = true;\n                    }\n                    break;\n                case 'type':\n                    if (isBlazor() && this.isServerRendered) {\n                        this.isServerRendered = false;\n                    }\n                    if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n                        && !isNullOrUndefined(oldProp.type)) {\n                        this.changeSliderType(oldProp.type, prop);\n                        this.setZindex();\n                    }\n                    if (isBlazor() && !this.isServerRendered) {\n                        this.isServerRendered = true;\n                    }\n                    break;\n                case 'enableRtl':\n                    if (isBlazor() && this.isServerRendered) {\n                        if (this.isMaterialTooltip) {\n                            this.sliderContainer.classList.add(classNames.materialSlider);\n                        }\n                        this.isServerRendered = false;\n                    }\n                    if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n                        this.rtl = oldProp.enableRtl;\n                        this.changeRtl();\n                    }\n                    if (isBlazor() && !this.isServerRendered) {\n                        this.isServerRendered = true;\n                    }\n                    break;\n                case 'limits':\n                    this.limitsPropertyChange();\n                    break;\n                case 'orientation':\n                    if (isBlazor() && this.isServerRendered) {\n                        this.isServerRendered = false;\n                    }\n                    this.changeOrientation();\n                    if (isBlazor() && !this.isServerRendered) {\n                        this.isServerRendered = true;\n                    }\n                    break;\n                case 'ticks':\n                    if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n                        if (!isBlazor() || !this.isServerRendered) {\n                            detach(this.ul);\n                        }\n                        Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n                            if (className.match(/e-scale-/)) {\n                                _this.sliderContainer.classList.remove(className);\n                            }\n                        });\n                    }\n                    if (this.ticks.placement !== 'None') {\n                        this.renderScale();\n                        this.setZindex();\n                    }\n                    break;\n                case 'locale':\n                    if (this.showButtons) {\n                        this.buttonTitle();\n                    }\n                    break;\n                case 'showButtons':\n                    if (newProp.showButtons) {\n                        this.setButtons();\n                        this.reposition();\n                        if (this.enabled && !this.readonly) {\n                            this.wireButtonEvt(false);\n                        }\n                    }\n                    else {\n                        if (!isBlazor() || !this.isServerRendered) {\n                            if (this.firstBtn && this.secondBtn) {\n                                this.sliderContainer.removeChild(this.firstBtn);\n                                this.sliderContainer.removeChild(this.secondBtn);\n                                this.sliderContainer.classList.remove(classNames.sliderButtonClass);\n                                this.firstBtn = undefined;\n                                this.secondBtn = undefined;\n                                this.reposition();\n                            }\n                        }\n                    }\n                    if (isBlazor() && this.isServerRendered) {\n                        if (this.isMaterialTooltip) {\n                            this.sliderContainer.classList.add(classNames.materialSlider);\n                        }\n                    }\n                    break;\n                case 'enabled':\n                    this.setEnabled();\n                    if (isBlazor() && this.isServerRendered) {\n                        if (this.isMaterialTooltip) {\n                            this.sliderContainer.classList.add(classNames.materialSlider);\n                        }\n                    }\n                    break;\n                case 'readonly':\n                    this.setReadOnly();\n                    if (isBlazor() && this.isServerRendered) {\n                        if (this.isMaterialTooltip) {\n                            this.sliderContainer.classList.add(classNames.materialSlider);\n                        }\n                    }\n                    break;\n                case 'customValues':\n                    if (isBlazor() && this.isServerRendered) {\n                        this.isServerRendered = false;\n                    }\n                    this.setValue();\n                    this.reposition();\n                    if (isBlazor() && !this.isServerRendered) {\n                        this.isServerRendered = true;\n                    }\n                    break;\n                case 'colorRange':\n                    if (isBlazor() && this.isServerRendered) {\n                        this.isServerRendered = false;\n                    }\n                    this.reposition();\n                    if (isBlazor() && !this.isServerRendered) {\n                        this.isServerRendered = true;\n                    }\n                    break;\n                case 'width':\n                    this.setElementWidth(newProp.width);\n                    this.setMinMaxValue();\n                    if (this.limits) {\n                        this.limitsPropertyChange();\n                    }\n                    break;\n            }\n        }\n    };\n    Slider.prototype.setReadOnly = function () {\n        if (this.readonly) {\n            this.unwireEvents();\n            this.sliderContainer.classList.add(classNames.readonly);\n        }\n        else {\n            this.wireEvents();\n            this.sliderContainer.classList.remove(classNames.readonly);\n        }\n    };\n    Slider.prototype.setMinMaxValue = function () {\n        var _this = this;\n        this.setValue();\n        if (!isBlazor()) {\n            this.refreshTooltip(this.tooltipTarget);\n        }\n        if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n            if (this.ul) {\n                detach(this.ul);\n                Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n                    if (className.match(/e-scale-/)) {\n                        _this.sliderContainer.classList.remove(className);\n                    }\n                });\n            }\n        }\n        if (this.ticks.placement !== 'None') {\n            this.renderScale();\n            this.setZindex();\n        }\n    };\n    Slider.prototype.setZindex = function () {\n        this.zIndex = 6;\n        if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n            this.ul.style.zIndex = (this.zIndex + -7) + '';\n            this.element.style.zIndex = (this.zIndex + 2) + '';\n        }\n        if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n            this.element.style.zIndex = (this.zIndex + 2) + '';\n        }\n        this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n        if (this.type === 'Range') {\n            this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n        }\n    };\n    Slider.prototype.setTooltip = function (args) {\n        this.changeSliderType(this.type, args);\n    };\n    Slider.prototype.setBarColor = function () {\n        var trackPosition;\n        var trackClassName;\n        var child = this.sliderTrack.lastElementChild;\n        while (child) {\n            this.sliderTrack.removeChild(child);\n            child = this.sliderTrack.lastElementChild;\n        }\n        for (var i = 0; i < this.colorRange.length; i++) {\n            if (!isNullOrUndefined(this.colorRange[i].start) && !isNullOrUndefined(this.colorRange[i].end)) {\n                if (this.colorRange[i].end > this.colorRange[i].start) {\n                    if (this.colorRange[i].start < this.min) {\n                        this.colorRange[i].start = this.min;\n                    }\n                    if (this.colorRange[i].end > this.max) {\n                        this.colorRange[i].end = this.max;\n                    }\n                    var startingPosition = this.checkHandlePosition(this.colorRange[i].start);\n                    var endPosition = this.checkHandlePosition(this.colorRange[i].end);\n                    var trackContainer = this.createElement('div');\n                    trackContainer.style.backgroundColor = this.colorRange[i].color;\n                    trackContainer.style.border = '1px solid ' + this.colorRange[i].color;\n                    if (this.orientation === 'Horizontal') {\n                        trackClassName = classNames.sliderHorizantalColor;\n                        if (this.enableRtl) {\n                            if (isNullOrUndefined(this.customValues)) {\n                                trackPosition = this.checkHandlePosition(this.max) - this.checkHandlePosition(this.colorRange[i].end);\n                            }\n                            else {\n                                trackPosition = this.checkHandlePosition(this.customValues.length - this.colorRange[i].end - 1);\n                            }\n                        }\n                        else {\n                            trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n                        }\n                        trackContainer.style.width = endPosition - startingPosition + 'px';\n                        trackContainer.style.left = trackPosition + 'px';\n                    }\n                    else {\n                        trackClassName = classNames.sliderVerticalColor;\n                        trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n                        trackContainer.style.height = endPosition - startingPosition + 'px';\n                        trackContainer.style.bottom = trackPosition + 'px';\n                    }\n                    trackContainer.classList.add(trackClassName);\n                    this.sliderTrack.appendChild(trackContainer);\n                }\n            }\n        }\n    };\n    /**\n     * Gets the component name\n     * @private\n     */\n    Slider.prototype.getModuleName = function () {\n        return 'slider';\n    };\n    __decorate([\n        Property(null)\n    ], Slider.prototype, \"value\", void 0);\n    __decorate([\n        Property(null)\n    ], Slider.prototype, \"customValues\", void 0);\n    __decorate([\n        Property(1)\n    ], Slider.prototype, \"step\", void 0);\n    __decorate([\n        Property(null)\n    ], Slider.prototype, \"width\", void 0);\n    __decorate([\n        Property(0)\n    ], Slider.prototype, \"min\", void 0);\n    __decorate([\n        Property(100)\n    ], Slider.prototype, \"max\", void 0);\n    __decorate([\n        Property(false)\n    ], Slider.prototype, \"readonly\", void 0);\n    __decorate([\n        Property('Default')\n    ], Slider.prototype, \"type\", void 0);\n    __decorate([\n        Collection([{}], ColorRangeData)\n    ], Slider.prototype, \"colorRange\", void 0);\n    __decorate([\n        Complex({}, TicksData)\n    ], Slider.prototype, \"ticks\", void 0);\n    __decorate([\n        Complex({}, LimitData)\n    ], Slider.prototype, \"limits\", void 0);\n    __decorate([\n        Property(true)\n    ], Slider.prototype, \"enabled\", void 0);\n    __decorate([\n        Complex({}, TooltipData)\n    ], Slider.prototype, \"tooltip\", void 0);\n    __decorate([\n        Property(false)\n    ], Slider.prototype, \"showButtons\", void 0);\n    __decorate([\n        Property(true)\n    ], Slider.prototype, \"enableAnimation\", void 0);\n    __decorate([\n        Property('Horizontal')\n    ], Slider.prototype, \"orientation\", void 0);\n    __decorate([\n        Property('')\n    ], Slider.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], Slider.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Event()\n    ], Slider.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], Slider.prototype, \"change\", void 0);\n    __decorate([\n        Event()\n    ], Slider.prototype, \"changed\", void 0);\n    __decorate([\n        Event()\n    ], Slider.prototype, \"renderingTicks\", void 0);\n    __decorate([\n        Event()\n    ], Slider.prototype, \"renderedTicks\", void 0);\n    __decorate([\n        Event()\n    ], Slider.prototype, \"tooltipChange\", void 0);\n    Slider = __decorate([\n        NotifyPropertyChanges\n    ], Slider);\n    return Slider;\n}(Component));\nexport { Slider };\n","import { detach, getUniqueID, rippleEffect, setValue, attributes } from '@syncfusion/ej2-base';\nimport { getValue, addClass, deleteObject } from '@syncfusion/ej2-base';\n/**\n * Initialize wrapper element for angular.\n * @private\n */\nexport function wrapperInitialize(createElement, tag, type, element, WRAPPER, role) {\n    var input = element;\n    if (element.tagName === tag) {\n        var ejInstance = getValue('ej2_instances', element);\n        input = createElement('input', { attrs: { 'type': type } });\n        var props = ['change', 'cssClass', 'label', 'labelPosition', 'id'];\n        for (var index = 0, len = element.attributes.length; index < len; index++) {\n            if (props.indexOf(element.attributes[index].nodeName) === -1) {\n                input.setAttribute(element.attributes[index].nodeName, element.attributes[index].nodeValue);\n            }\n        }\n        attributes(element, { 'class': WRAPPER, 'role': role, 'aria-checked': 'false' });\n        element.appendChild(input);\n        setValue('ej2_instances', ejInstance, input);\n        deleteObject(element, 'ej2_instances');\n    }\n    return input;\n}\nexport function getTextNode(element) {\n    var node;\n    var childnode = element.childNodes;\n    for (var i = 0; i < childnode.length; i++) {\n        node = childnode[i];\n        if (node.nodeType === 3) {\n            return node;\n        }\n    }\n    return null;\n}\n/**\n * Destroy the button components.\n * @private\n */\nexport function destroy(ejInst, wrapper, tagName) {\n    if (tagName === 'INPUT') {\n        wrapper.parentNode.insertBefore(ejInst.element, wrapper);\n        detach(wrapper);\n        ejInst.element.checked = false;\n        ['name', 'value', 'disabled'].forEach(function (key) {\n            ejInst.element.removeAttribute(key);\n        });\n    }\n    else {\n        ['role', 'aria-checked', 'class'].forEach(function (key) {\n            wrapper.removeAttribute(key);\n        });\n        wrapper.innerHTML = '';\n    }\n}\nexport function preRender(proxy, control, wrapper, element, moduleName) {\n    element = wrapperInitialize(proxy.createElement, control, 'checkbox', element, wrapper, moduleName);\n    proxy.element = element;\n    if (proxy.element.getAttribute('type') !== 'checkbox') {\n        proxy.element.setAttribute('type', 'checkbox');\n    }\n    if (!proxy.element.id) {\n        proxy.element.id = getUniqueID('e-' + moduleName);\n    }\n}\n/**\n * Creates CheckBox component UI with theming and ripple support.\n * @private\n */\nexport function createCheckBox(createElement, enableRipple, options) {\n    if (enableRipple === void 0) { enableRipple = false; }\n    if (options === void 0) { options = {}; }\n    var wrapper = createElement('div', { className: 'e-checkbox-wrapper e-css' });\n    if (options.cssClass) {\n        addClass([wrapper], options.cssClass.split(' '));\n    }\n    if (options.enableRtl) {\n        wrapper.classList.add('e-rtl');\n    }\n    if (enableRipple) {\n        var rippleSpan = createElement('span', { className: 'e-ripple-container' });\n        rippleEffect(rippleSpan, { isCenterRipple: true, duration: 400 });\n        wrapper.appendChild(rippleSpan);\n    }\n    var frameSpan = createElement('span', { className: 'e-frame e-icons' });\n    if (options.checked) {\n        frameSpan.classList.add('e-check');\n    }\n    wrapper.appendChild(frameSpan);\n    if (options.label) {\n        var labelSpan = createElement('span', { className: 'e-label', innerHTML: options.label });\n        wrapper.appendChild(labelSpan);\n    }\n    return wrapper;\n}\nexport function rippleMouseHandler(e, rippleSpan) {\n    if (rippleSpan) {\n        var event_1 = document.createEvent('MouseEvents');\n        event_1.initEvent(e.type, false, true);\n        rippleSpan.dispatchEvent(event_1);\n    }\n}\n/**\n * Append hidden input to given element\n * @private\n */\nexport function setHiddenInput(proxy, wrap) {\n    if (proxy.element.getAttribute('ejs-for')) {\n        wrap.appendChild(proxy.createElement('input', {\n            attrs: { 'name': proxy.name || proxy.element.name, 'value': 'false', 'type': 'hidden' }\n        }));\n    }\n}\n","/**\n * @module ol/Disposable\n */\n/**\n * @classdesc\n * Objects that need to clean up after themselves.\n */\nvar Disposable = /** @class */ (function () {\n    function Disposable() {\n        /**\n         * The object has already been disposed.\n         * @type {boolean}\n         * @protected\n         */\n        this.disposed = false;\n    }\n    /**\n     * Clean up.\n     */\n    Disposable.prototype.dispose = function () {\n        if (!this.disposed) {\n            this.disposed = true;\n            this.disposeInternal();\n        }\n    };\n    /**\n     * Extension point for disposable objects.\n     * @protected\n     */\n    Disposable.prototype.disposeInternal = function () { };\n    return Disposable;\n}());\nexport default Disposable;\n//# sourceMappingURL=Disposable.js.map","/**\n * @module ol/rotationconstraint\n */\nimport { toRadians } from './math.js';\n/**\n * @typedef {function((number|undefined), boolean=): (number|undefined)} Type\n */\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function disable(rotation) {\n    if (rotation !== undefined) {\n        return 0;\n    }\n    else {\n        return undefined;\n    }\n}\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function none(rotation) {\n    if (rotation !== undefined) {\n        return rotation;\n    }\n    else {\n        return undefined;\n    }\n}\n/**\n * @param {number} n N.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToN(n) {\n    var theta = (2 * Math.PI) / n;\n    return (\n    /**\n     * @param {number|undefined} rotation Rotation.\n     * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n     * @return {number|undefined} Rotation.\n     */\n    function (rotation, opt_isMoving) {\n        if (opt_isMoving) {\n            return rotation;\n        }\n        if (rotation !== undefined) {\n            rotation = Math.floor(rotation / theta + 0.5) * theta;\n            return rotation;\n        }\n        else {\n            return undefined;\n        }\n    });\n}\n/**\n * @param {number=} opt_tolerance Tolerance.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToZero(opt_tolerance) {\n    var tolerance = opt_tolerance || toRadians(5);\n    return (\n    /**\n     * @param {number|undefined} rotation Rotation.\n     * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n     * @return {number|undefined} Rotation.\n     */\n    function (rotation, opt_isMoving) {\n        if (opt_isMoving) {\n            return rotation;\n        }\n        if (rotation !== undefined) {\n            if (Math.abs(rotation) <= tolerance) {\n                return 0;\n            }\n            else {\n                return rotation;\n            }\n        }\n        else {\n            return undefined;\n        }\n    });\n}\n//# sourceMappingURL=rotationconstraint.js.map","/**\n * @module ol/geom/flat/area\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRing(flatCoordinates, offset, end, stride) {\n    var twiceArea = 0;\n    var x1 = flatCoordinates[end - stride];\n    var y1 = flatCoordinates[end - stride + 1];\n    for (; offset < end; offset += stride) {\n        var x2 = flatCoordinates[offset];\n        var y2 = flatCoordinates[offset + 1];\n        twiceArea += y1 * x2 - x1 * y2;\n        x1 = x2;\n        y1 = y2;\n    }\n    return twiceArea / 2;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRings(flatCoordinates, offset, ends, stride) {\n    var area = 0;\n    for (var i = 0, ii = ends.length; i < ii; ++i) {\n        var end = ends[i];\n        area += linearRing(flatCoordinates, offset, end, stride);\n        offset = end;\n    }\n    return area;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n    var area = 0;\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n        var ends = endss[i];\n        area += linearRings(flatCoordinates, offset, ends, stride);\n        offset = ends[ends.length - 1];\n    }\n    return area;\n}\n//# sourceMappingURL=area.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/geom/Geometry\n */\nimport BaseObject from '../Object.js';\nimport Units from '../proj/Units.js';\nimport { abstract } from '../util.js';\nimport { compose as composeTransform, create as createTransform, } from '../transform.js';\nimport { createEmpty, createOrUpdateEmpty, getHeight, returnOrUpdate, } from '../extent.js';\nimport { get as getProjection, getTransform } from '../proj.js';\nimport { memoizeOne } from '../functions.js';\nimport { transform2D } from './flat/transform.js';\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nvar tmpTransform = createTransform();\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @abstract\n * @api\n */\nvar Geometry = /** @class */ (function (_super) {\n    __extends(Geometry, _super);\n    function Geometry() {\n        var _this = _super.call(this) || this;\n        /**\n         * @private\n         * @type {import(\"../extent.js\").Extent}\n         */\n        _this.extent_ = createEmpty();\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.extentRevision_ = -1;\n        /**\n         * @protected\n         * @type {number}\n         */\n        _this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n        /**\n         * @protected\n         * @type {number}\n         */\n        _this.simplifiedGeometryRevision = 0;\n        /**\n         * Get a transformed and simplified version of the geometry.\n         * @abstract\n         * @param {number} revision The geometry revision.\n         * @param {number} squaredTolerance Squared tolerance.\n         * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n         * @return {Geometry} Simplified geometry.\n         */\n        _this.simplifyTransformedInternal = memoizeOne(function (revision, squaredTolerance, opt_transform) {\n            if (!opt_transform) {\n                return this.getSimplifiedGeometry(squaredTolerance);\n            }\n            var clone = this.clone();\n            clone.applyTransform(opt_transform);\n            return clone.getSimplifiedGeometry(squaredTolerance);\n        });\n        return _this;\n    }\n    /**\n     * Get a transformed and simplified version of the geometry.\n     * @abstract\n     * @param {number} squaredTolerance Squared tolerance.\n     * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n     * @return {Geometry} Simplified geometry.\n     */\n    Geometry.prototype.simplifyTransformed = function (squaredTolerance, opt_transform) {\n        return this.simplifyTransformedInternal(this.getRevision(), squaredTolerance, opt_transform);\n    };\n    /**\n     * Make a complete copy of the geometry.\n     * @abstract\n     * @return {!Geometry} Clone.\n     */\n    Geometry.prototype.clone = function () {\n        return abstract();\n    };\n    /**\n     * @abstract\n     * @param {number} x X.\n     * @param {number} y Y.\n     * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n     * @param {number} minSquaredDistance Minimum squared distance.\n     * @return {number} Minimum squared distance.\n     */\n    Geometry.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n        return abstract();\n    };\n    /**\n     * @param {number} x X.\n     * @param {number} y Y.\n     * @return {boolean} Contains (x, y).\n     */\n    Geometry.prototype.containsXY = function (x, y) {\n        var coord = this.getClosestPoint([x, y]);\n        return coord[0] === x && coord[1] === y;\n    };\n    /**\n     * Return the closest point of the geometry to the passed point as\n     * {@link module:ol/coordinate~Coordinate coordinate}.\n     * @param {import(\"../coordinate.js\").Coordinate} point Point.\n     * @param {import(\"../coordinate.js\").Coordinate=} opt_closestPoint Closest point.\n     * @return {import(\"../coordinate.js\").Coordinate} Closest point.\n     * @api\n     */\n    Geometry.prototype.getClosestPoint = function (point, opt_closestPoint) {\n        var closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN];\n        this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n        return closestPoint;\n    };\n    /**\n     * Returns true if this geometry includes the specified coordinate. If the\n     * coordinate is on the boundary of the geometry, returns false.\n     * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @return {boolean} Contains coordinate.\n     * @api\n     */\n    Geometry.prototype.intersectsCoordinate = function (coordinate) {\n        return this.containsXY(coordinate[0], coordinate[1]);\n    };\n    /**\n     * @abstract\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @protected\n     * @return {import(\"../extent.js\").Extent} extent Extent.\n     */\n    Geometry.prototype.computeExtent = function (extent) {\n        return abstract();\n    };\n    /**\n     * Get the extent of the geometry.\n     * @param {import(\"../extent.js\").Extent=} opt_extent Extent.\n     * @return {import(\"../extent.js\").Extent} extent Extent.\n     * @api\n     */\n    Geometry.prototype.getExtent = function (opt_extent) {\n        if (this.extentRevision_ != this.getRevision()) {\n            var extent = this.computeExtent(this.extent_);\n            if (isNaN(extent[0]) || isNaN(extent[1])) {\n                createOrUpdateEmpty(extent);\n            }\n            this.extentRevision_ = this.getRevision();\n        }\n        return returnOrUpdate(this.extent_, opt_extent);\n    };\n    /**\n     * Rotate the geometry around a given coordinate. This modifies the geometry\n     * coordinates in place.\n     * @abstract\n     * @param {number} angle Rotation angle in radians.\n     * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n     * @api\n     */\n    Geometry.prototype.rotate = function (angle, anchor) {\n        abstract();\n    };\n    /**\n     * Scale the geometry (with an optional origin).  This modifies the geometry\n     * coordinates in place.\n     * @abstract\n     * @param {number} sx The scaling factor in the x-direction.\n     * @param {number=} opt_sy The scaling factor in the y-direction (defaults to sx).\n     * @param {import(\"../coordinate.js\").Coordinate=} opt_anchor The scale origin (defaults to the center\n     *     of the geometry extent).\n     * @api\n     */\n    Geometry.prototype.scale = function (sx, opt_sy, opt_anchor) {\n        abstract();\n    };\n    /**\n     * Create a simplified version of this geometry.  For linestrings, this uses\n     * the [Douglas Peucker](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm)\n     * algorithm.  For polygons, a quantization-based\n     * simplification is used to preserve topology.\n     * @param {number} tolerance The tolerance distance for simplification.\n     * @return {Geometry} A new, simplified version of the original geometry.\n     * @api\n     */\n    Geometry.prototype.simplify = function (tolerance) {\n        return this.getSimplifiedGeometry(tolerance * tolerance);\n    };\n    /**\n     * Create a simplified version of this geometry using the Douglas Peucker\n     * algorithm.\n     * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.\n     * @abstract\n     * @param {number} squaredTolerance Squared tolerance.\n     * @return {Geometry} Simplified geometry.\n     */\n    Geometry.prototype.getSimplifiedGeometry = function (squaredTolerance) {\n        return abstract();\n    };\n    /**\n     * Get the type of this geometry.\n     * @abstract\n     * @return {import(\"./GeometryType.js\").default} Geometry type.\n     */\n    Geometry.prototype.getType = function () {\n        return abstract();\n    };\n    /**\n     * Apply a transform function to the coordinates of the geometry.\n     * The geometry is modified in place.\n     * If you do not want the geometry modified in place, first `clone()` it and\n     * then use this function on the clone.\n     * @abstract\n     * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n     * Called with a flat array of geometry coordinates.\n     */\n    Geometry.prototype.applyTransform = function (transformFn) {\n        abstract();\n    };\n    /**\n     * Test if the geometry and the passed extent intersect.\n     * @abstract\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @return {boolean} `true` if the geometry and the extent intersect.\n     */\n    Geometry.prototype.intersectsExtent = function (extent) {\n        return abstract();\n    };\n    /**\n     * Translate the geometry.  This modifies the geometry coordinates in place.  If\n     * instead you want a new geometry, first `clone()` this geometry.\n     * @abstract\n     * @param {number} deltaX Delta X.\n     * @param {number} deltaY Delta Y.\n     * @api\n     */\n    Geometry.prototype.translate = function (deltaX, deltaY) {\n        abstract();\n    };\n    /**\n     * Transform each coordinate of the geometry from one coordinate reference\n     * system to another. The geometry is modified in place.\n     * For example, a line will be transformed to a line and a circle to a circle.\n     * If you do not want the geometry modified in place, first `clone()` it and\n     * then use this function on the clone.\n     *\n     * @param {import(\"../proj.js\").ProjectionLike} source The current projection.  Can be a\n     *     string identifier or a {@link module:ol/proj/Projection~Projection} object.\n     * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection.  Can be a\n     *     string identifier or a {@link module:ol/proj/Projection~Projection} object.\n     * @return {Geometry} This geometry.  Note that original geometry is\n     *     modified in place.\n     * @api\n     */\n    Geometry.prototype.transform = function (source, destination) {\n        /** @type {import(\"../proj/Projection.js\").default} */\n        var sourceProj = getProjection(source);\n        var transformFn = sourceProj.getUnits() == Units.TILE_PIXELS\n            ? function (inCoordinates, outCoordinates, stride) {\n                var pixelExtent = sourceProj.getExtent();\n                var projectedExtent = sourceProj.getWorldExtent();\n                var scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n                composeTransform(tmpTransform, projectedExtent[0], projectedExtent[3], scale, -scale, 0, 0, 0);\n                transform2D(inCoordinates, 0, inCoordinates.length, stride, tmpTransform, outCoordinates);\n                return getTransform(sourceProj, destination)(inCoordinates, outCoordinates, stride);\n            }\n            : getTransform(sourceProj, destination);\n        this.applyTransform(transformFn);\n        return this;\n    };\n    return Geometry;\n}(BaseObject));\nexport default Geometry;\n//# sourceMappingURL=Geometry.js.map","/**\n * @module ol/proj/transforms\n */\nimport { isEmpty } from '../obj.js';\n/**\n * @private\n * @type {!Object<string, Object<string, import(\"../proj.js\").TransformFunction>>}\n */\nvar transforms = {};\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n    transforms = {};\n}\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n    var sourceCode = source.getCode();\n    var destinationCode = destination.getCode();\n    if (!(sourceCode in transforms)) {\n        transforms[sourceCode] = {};\n    }\n    transforms[sourceCode][destinationCode] = transformFn;\n}\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection.  This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n    var sourceCode = source.getCode();\n    var destinationCode = destination.getCode();\n    var transform = transforms[sourceCode][destinationCode];\n    delete transforms[sourceCode][destinationCode];\n    if (isEmpty(transforms[sourceCode])) {\n        delete transforms[sourceCode];\n    }\n    return transform;\n}\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|undefined} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n    var transform;\n    if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n        transform = transforms[sourceCode][destinationCode];\n    }\n    return transform;\n}\n//# sourceMappingURL=transforms.js.map","/**\n * @module ol/tilegrid/common\n */\n/**\n * Default maximum zoom for default tile grids.\n * @type {number}\n */\nexport var DEFAULT_MAX_ZOOM = 42;\n/**\n * Default tile size.\n * @type {number}\n */\nexport var DEFAULT_TILE_SIZE = 256;\n//# sourceMappingURL=common.js.map","var baseFor = require('./_baseFor'),\n    castFunction = require('./_castFunction'),\n    keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n  return object == null\n    ? object\n    : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","define([\"../_base/lang\"], function(lang){\n\treturn function(name, ctor, base, props){\n\t\tbase = base || Error;\n\n\t\tvar ErrorCtor = function(message){\n\t\t\tif(base === Error){\n\t\t\t\tif(Error.captureStackTrace){\n\t\t\t\t\tError.captureStackTrace(this, ErrorCtor);\n\t\t\t\t}\n\n\t\t\t\t// Error.call() operates on the returned error\n\t\t\t\t// object rather than operating on |this|\n\t\t\t\tvar err = Error.call(this, message),\n\t\t\t\t\tprop;\n\n\t\t\t\t// Copy own properties from err to |this|\n\t\t\t\tfor(prop in err){\n\t\t\t\t\tif(err.hasOwnProperty(prop)){\n\t\t\t\t\t\tthis[prop] = err[prop];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// messsage is non-enumerable in ES5\n\t\t\t\tthis.message = message;\n\t\t\t\t// stack is non-enumerable in at least Firefox\n\t\t\t\tthis.stack = err.stack;\n\t\t\t}else{\n\t\t\t\tbase.apply(this, arguments);\n\t\t\t}\n\t\t\tif(ctor){\n\t\t\t\tctor.apply(this, arguments);\n\t\t\t}\n\t\t};\n\n\t\tErrorCtor.prototype = lang.delegate(base.prototype, props);\n\t\tErrorCtor.prototype.name = name;\n\t\tErrorCtor.prototype.constructor = ErrorCtor;\n\n\t\treturn ErrorCtor;\n\t};\n});\n","define(['./create'], function(create){\n\t// module:\n\t//\t\tdojo/errors/RequestError\n\n\t/*=====\n\t return function(){\n\t\t // summary:\n\t\t //\t\tTODOC\n\t };\n\t =====*/\n\n\treturn create(\"RequestError\", function(message, response){\n\t\tthis.response = response;\n\t});\n});\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/Image\n */\nimport EventType from './events/EventType.js';\nimport ImageBase from './ImageBase.js';\nimport ImageState from './ImageState.js';\nimport { IMAGE_DECODE } from './has.js';\nimport { getHeight } from './extent.js';\nimport { listenOnce, unlistenByKey } from './events.js';\n/**\n * A function that takes an {@link module:ol/Image~Image} for the image and a\n * `{string}` for the src as arguments. It is supposed to make it so the\n * underlying image {@link module:ol/Image~Image#getImage} is assigned the\n * content specified by the src. If not specified, the default is\n *\n *     function(image, src) {\n *       image.getImage().src = src;\n *     }\n *\n * Providing a custom `imageLoadFunction` can be useful to load images with\n * post requests or - in general - through XHR requests, where the src of the\n * image element would be set to a data URI when the content is loaded.\n *\n * @typedef {function(ImageWrapper, string): void} LoadFunction\n * @api\n */\nvar ImageWrapper = /** @class */ (function (_super) {\n    __extends(ImageWrapper, _super);\n    /**\n     * @param {import(\"./extent.js\").Extent} extent Extent.\n     * @param {number|undefined} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {string} src Image source URI.\n     * @param {?string} crossOrigin Cross origin.\n     * @param {LoadFunction} imageLoadFunction Image load function.\n     */\n    function ImageWrapper(extent, resolution, pixelRatio, src, crossOrigin, imageLoadFunction) {\n        var _this = _super.call(this, extent, resolution, pixelRatio, ImageState.IDLE) || this;\n        /**\n         * @private\n         * @type {string}\n         */\n        _this.src_ = src;\n        /**\n         * @private\n         * @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement}\n         */\n        _this.image_ = new Image();\n        if (crossOrigin !== null) {\n            _this.image_.crossOrigin = crossOrigin;\n        }\n        /**\n         * @private\n         * @type {?function():void}\n         */\n        _this.unlisten_ = null;\n        /**\n         * @protected\n         * @type {import(\"./ImageState.js\").default}\n         */\n        _this.state = ImageState.IDLE;\n        /**\n         * @private\n         * @type {LoadFunction}\n         */\n        _this.imageLoadFunction_ = imageLoadFunction;\n        return _this;\n    }\n    /**\n     * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n     * @api\n     */\n    ImageWrapper.prototype.getImage = function () {\n        return this.image_;\n    };\n    /**\n     * Tracks loading or read errors.\n     *\n     * @private\n     */\n    ImageWrapper.prototype.handleImageError_ = function () {\n        this.state = ImageState.ERROR;\n        this.unlistenImage_();\n        this.changed();\n    };\n    /**\n     * Tracks successful image load.\n     *\n     * @private\n     */\n    ImageWrapper.prototype.handleImageLoad_ = function () {\n        if (this.resolution === undefined) {\n            this.resolution = getHeight(this.extent) / this.image_.height;\n        }\n        this.state = ImageState.LOADED;\n        this.unlistenImage_();\n        this.changed();\n    };\n    /**\n     * Load the image or retry if loading previously failed.\n     * Loading is taken care of by the tile queue, and calling this method is\n     * only needed for preloading or for reloading in case of an error.\n     * @api\n     */\n    ImageWrapper.prototype.load = function () {\n        if (this.state == ImageState.IDLE || this.state == ImageState.ERROR) {\n            this.state = ImageState.LOADING;\n            this.changed();\n            this.imageLoadFunction_(this, this.src_);\n            this.unlisten_ = listenImage(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this));\n        }\n    };\n    /**\n     * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image.\n     */\n    ImageWrapper.prototype.setImage = function (image) {\n        this.image_ = image;\n    };\n    /**\n     * Discards event handlers which listen for load completion or errors.\n     *\n     * @private\n     */\n    ImageWrapper.prototype.unlistenImage_ = function () {\n        if (this.unlisten_) {\n            this.unlisten_();\n            this.unlisten_ = null;\n        }\n    };\n    return ImageWrapper;\n}(ImageBase));\n/**\n * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image element.\n * @param {function():any} loadHandler Load callback function.\n * @param {function():any} errorHandler Error callback function.\n * @return {function():void} Callback to stop listening.\n */\nexport function listenImage(image, loadHandler, errorHandler) {\n    var img = /** @type {HTMLImageElement} */ (image);\n    if (img.src && IMAGE_DECODE) {\n        var promise = img.decode();\n        var listening_1 = true;\n        var unlisten = function () {\n            listening_1 = false;\n        };\n        promise\n            .then(function () {\n            if (listening_1) {\n                loadHandler();\n            }\n        })\n            .catch(function (error) {\n            if (listening_1) {\n                // FIXME: Unconditionally call errorHandler() when this bug is fixed upstream:\n                //        https://bugs.webkit.org/show_bug.cgi?id=198527\n                if (error.name === 'EncodingError' &&\n                    error.message === 'Invalid image type.') {\n                    loadHandler();\n                }\n                else {\n                    errorHandler();\n                }\n            }\n        });\n        return unlisten;\n    }\n    var listenerKeys = [\n        listenOnce(img, EventType.LOAD, loadHandler),\n        listenOnce(img, EventType.ERROR, errorHandler),\n    ];\n    return function unlisten() {\n        listenerKeys.forEach(unlistenByKey);\n    };\n}\nexport default ImageWrapper;\n//# sourceMappingURL=Image.js.map","/**\n * @module ol/loadingstrategy\n */\n/**\n * Strategy function for loading all features with a single request.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array<import(\"./extent.js\").Extent>} Extents.\n * @api\n */\nexport function all(extent, resolution) {\n    return [[-Infinity, -Infinity, Infinity, Infinity]];\n}\n/**\n * Strategy function for loading features based on the view's extent and\n * resolution.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array<import(\"./extent.js\").Extent>} Extents.\n * @api\n */\nexport function bbox(extent, resolution) {\n    return [extent];\n}\n/**\n * Creates a strategy function for loading features based on a tile grid.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {function(import(\"./extent.js\").Extent, number): Array<import(\"./extent.js\").Extent>} Loading strategy.\n * @api\n */\nexport function tile(tileGrid) {\n    return (\n    /**\n     * @param {import(\"./extent.js\").Extent} extent Extent.\n     * @param {number} resolution Resolution.\n     * @return {Array<import(\"./extent.js\").Extent>} Extents.\n     */\n    function (extent, resolution) {\n        var z = tileGrid.getZForResolution(resolution);\n        var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);\n        /** @type {Array<import(\"./extent.js\").Extent>} */\n        var extents = [];\n        /** @type {import(\"./tilecoord.js\").TileCoord} */\n        var tileCoord = [z, 0, 0];\n        for (tileCoord[1] = tileRange.minX; tileCoord[1] <= tileRange.maxX; ++tileCoord[1]) {\n            for (tileCoord[2] = tileRange.minY; tileCoord[2] <= tileRange.maxY; ++tileCoord[2]) {\n                extents.push(tileGrid.getTileCoordExtent(tileCoord));\n            }\n        }\n        return extents;\n    });\n}\n//# sourceMappingURL=loadingstrategy.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/source/Source\n */\nimport BaseObject from '../Object.js';\nimport SourceState from './State.js';\nimport { abstract } from '../util.js';\nimport { get as getProjection } from '../proj.js';\n/**\n * A function that returns a string or an array of strings representing source\n * attributions.\n *\n * @typedef {function(import(\"../PluggableMap.js\").FrameState): (string|Array<string>)} Attribution\n */\n/**\n * A type that can be used to provide attribution information for data sources.\n *\n * It represents either\n * * a simple string (e.g. `'© Acme Inc.'`)\n * * an array of simple strings (e.g. `['© Acme Inc.', '© Bacme Inc.']`)\n * * a function that returns a string or array of strings ({@link module:ol/source/Source~Attribution})\n *\n * @typedef {string|Array<string>|Attribution} AttributionLike\n */\n/**\n * @typedef {Object} Options\n * @property {AttributionLike} [attributions]\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {import(\"./State.js\").default} [state='ready']\n * @property {boolean} [wrapX=false]\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for {@link module:ol/layer/Layer~Layer} sources.\n *\n * A generic `change` event is triggered when the state of the source changes.\n * @abstract\n * @api\n */\nvar Source = /** @class */ (function (_super) {\n    __extends(Source, _super);\n    /**\n     * @param {Options} options Source options.\n     */\n    function Source(options) {\n        var _this = _super.call(this) || this;\n        /**\n         * @private\n         * @type {import(\"../proj/Projection.js\").default}\n         */\n        _this.projection_ = getProjection(options.projection);\n        /**\n         * @private\n         * @type {?Attribution}\n         */\n        _this.attributions_ = adaptAttributions(options.attributions);\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.attributionsCollapsible_ =\n            options.attributionsCollapsible !== undefined\n                ? options.attributionsCollapsible\n                : true;\n        /**\n         * This source is currently loading data. Sources that defer loading to the\n         * map's tile queue never set this to `true`.\n         * @type {boolean}\n         */\n        _this.loading = false;\n        /**\n         * @private\n         * @type {import(\"./State.js\").default}\n         */\n        _this.state_ =\n            options.state !== undefined ? options.state : SourceState.READY;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.wrapX_ = options.wrapX !== undefined ? options.wrapX : false;\n        return _this;\n    }\n    /**\n     * Get the attribution function for the source.\n     * @return {?Attribution} Attribution function.\n     */\n    Source.prototype.getAttributions = function () {\n        return this.attributions_;\n    };\n    /**\n     * @return {boolean} Attributions are collapsible.\n     */\n    Source.prototype.getAttributionsCollapsible = function () {\n        return this.attributionsCollapsible_;\n    };\n    /**\n     * Get the projection of the source.\n     * @return {import(\"../proj/Projection.js\").default} Projection.\n     * @api\n     */\n    Source.prototype.getProjection = function () {\n        return this.projection_;\n    };\n    /**\n     * @abstract\n     * @return {Array<number>|undefined} Resolutions.\n     */\n    Source.prototype.getResolutions = function () {\n        return abstract();\n    };\n    /**\n     * Get the state of the source, see {@link module:ol/source/State~State} for possible states.\n     * @return {import(\"./State.js\").default} State.\n     * @api\n     */\n    Source.prototype.getState = function () {\n        return this.state_;\n    };\n    /**\n     * @return {boolean|undefined} Wrap X.\n     */\n    Source.prototype.getWrapX = function () {\n        return this.wrapX_;\n    };\n    /**\n     * @return {Object|undefined} Context options.\n     */\n    Source.prototype.getContextOptions = function () {\n        return undefined;\n    };\n    /**\n     * Refreshes the source. The source will be cleared, and data from the server will be reloaded.\n     * @api\n     */\n    Source.prototype.refresh = function () {\n        this.changed();\n    };\n    /**\n     * Set the attributions of the source.\n     * @param {AttributionLike|undefined} attributions Attributions.\n     *     Can be passed as `string`, `Array<string>`, {@link module:ol/source/Source~Attribution},\n     *     or `undefined`.\n     * @api\n     */\n    Source.prototype.setAttributions = function (attributions) {\n        this.attributions_ = adaptAttributions(attributions);\n        this.changed();\n    };\n    /**\n     * Set the state of the source.\n     * @param {import(\"./State.js\").default} state State.\n     */\n    Source.prototype.setState = function (state) {\n        this.state_ = state;\n        this.changed();\n    };\n    return Source;\n}(BaseObject));\n/**\n * Turns the attributions option into an attributions function.\n * @param {AttributionLike|undefined} attributionLike The attribution option.\n * @return {?Attribution} An attribution function (or null).\n */\nfunction adaptAttributions(attributionLike) {\n    if (!attributionLike) {\n        return null;\n    }\n    if (Array.isArray(attributionLike)) {\n        return function (frameState) {\n            return attributionLike;\n        };\n    }\n    if (typeof attributionLike === 'function') {\n        return attributionLike;\n    }\n    return function (frameState) {\n        return [attributionLike];\n    };\n}\nexport default Source;\n//# sourceMappingURL=Source.js.map","/**\n * @module ol/source/common\n */\n/**\n * Default WMS version.\n * @type {string}\n */\nexport var DEFAULT_WMS_VERSION = '1.3.0';\n/**\n * Context options to disable image smoothing.\n * @type {Object}\n */\nexport var IMAGE_SMOOTHING_DISABLED = {\n    imageSmoothingEnabled: false,\n    msImageSmoothingEnabled: false,\n};\n//# sourceMappingURL=common.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isValid;\n\nvar _index = _interopRequireDefault(require(\"../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n *   if the first argument is not an instance of Date.\n *   Instead, argument is converted beforehand using `toDate`.\n *\n *   Examples:\n *\n *   | `isValid` argument        | Before v2.0.0 | v2.0.0 onward |\n *   |---------------------------|---------------|---------------|\n *   | `new Date()`              | `true`        | `true`        |\n *   | `new Date('2016-01-01')`  | `true`        | `true`        |\n *   | `new Date('')`            | `false`       | `false`       |\n *   | `new Date(1488370835081)` | `true`        | `true`        |\n *   | `new Date(NaN)`           | `false`       | `false`       |\n *   | `'2016-01-01'`            | `TypeError`   | `false`       |\n *   | `''`                      | `TypeError`   | `false`       |\n *   | `1488370835081`           | `TypeError`   | `true`        |\n *   | `NaN`                     | `TypeError`   | `false`       |\n *\n *   We introduce this change to make *date-fns* consistent with ECMAScript behavior\n *   that try to coerce arguments to the expected type\n *   (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * var result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * var result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */\nfunction isValid(dirtyDate) {\n  (0, _index2.default)(1, arguments);\n  var date = (0, _index.default)(dirtyDate);\n  return !isNaN(date);\n}\n\nmodule.exports = exports.default;","/**\n * Position library\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar elementRect;\nvar popupRect;\nvar element;\nvar parentDocument;\nvar fixedParent = false;\nexport function calculateRelativeBasedPosition(anchor, element) {\n    var fixedElement = false;\n    var anchorPos = { left: 0, top: 0 };\n    var tempAnchor = anchor;\n    if (!anchor || !element) {\n        return anchorPos;\n    }\n    if (isNullOrUndefined(element.offsetParent) && element.style.position === 'fixed') {\n        fixedElement = true;\n    }\n    while ((element.offsetParent || fixedElement) && anchor && element.offsetParent !== anchor) {\n        anchorPos.left += anchor.offsetLeft;\n        anchorPos.top += anchor.offsetTop;\n        anchor = anchor.offsetParent;\n    }\n    anchor = tempAnchor;\n    while ((element.offsetParent || fixedElement) && anchor && element.offsetParent !== anchor) {\n        anchorPos.left -= anchor.scrollLeft;\n        anchorPos.top -= anchor.scrollTop;\n        anchor = anchor.parentElement;\n    }\n    return anchorPos;\n}\nexport function calculatePosition(currentElement, positionX, positionY, parentElement, targetValues) {\n    (positionY + positionX === 'topright') ? popupRect = undefined : popupRect = targetValues;\n    popupRect = targetValues;\n    fixedParent = parentElement ? true : false;\n    if (!currentElement) {\n        return { left: 0, top: 0 };\n    }\n    if (!positionX) {\n        positionX = 'left';\n    }\n    if (!positionY) {\n        positionY = 'top';\n    }\n    parentDocument = currentElement.ownerDocument;\n    element = currentElement;\n    var pos = { left: 0, top: 0 };\n    return updatePosition(positionX.toLowerCase(), positionY.toLowerCase(), pos);\n}\nfunction setPosx(value, pos) {\n    pos.left = value;\n}\nfunction setPosy(value, pos) {\n    pos.top = value;\n}\nfunction updatePosition(posX, posY, pos) {\n    elementRect = element.getBoundingClientRect();\n    switch (posY + posX) {\n        case 'topcenter':\n            setPosx(getElementHCenter(), pos);\n            setPosy(getElementTop(), pos);\n            break;\n        case 'topright':\n            setPosx(getElementRight(), pos);\n            setPosy(getElementTop(), pos);\n            break;\n        case 'centercenter':\n            setPosx(getElementHCenter(), pos);\n            setPosy(getElementVCenter(), pos);\n            break;\n        case 'centerright':\n            setPosx(getElementRight(), pos);\n            setPosy(getElementVCenter(), pos);\n            break;\n        case 'centerleft':\n            setPosx(getElementLeft(), pos);\n            setPosy(getElementVCenter(), pos);\n            break;\n        case 'bottomcenter':\n            setPosx(getElementHCenter(), pos);\n            setPosy(getElementBottom(), pos);\n            break;\n        case 'bottomright':\n            setPosx(getElementRight(), pos);\n            setPosy(getElementBottom(), pos);\n            break;\n        case 'bottomleft':\n            setPosx(getElementLeft(), pos);\n            setPosy(getElementBottom(), pos);\n            break;\n        default:\n        case 'topleft':\n            setPosx(getElementLeft(), pos);\n            setPosy(getElementTop(), pos);\n            break;\n    }\n    return pos;\n}\nfunction getBodyScrollTop() {\n    return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\nfunction getBodyScrollLeft() {\n    return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\nfunction getElementBottom() {\n    return fixedParent ? elementRect.bottom : elementRect.bottom + getBodyScrollTop();\n}\nfunction getElementVCenter() {\n    return getElementTop() + (elementRect.height / 2);\n}\nfunction getElementTop() {\n    return fixedParent ? elementRect.top : elementRect.top + getBodyScrollTop();\n}\nfunction getElementLeft() {\n    return elementRect.left + getBodyScrollLeft();\n}\nfunction getElementRight() {\n    return elementRect.right + getBodyScrollLeft() - (popupRect ? popupRect.width : 0);\n}\nfunction getElementHCenter() {\n    return getElementLeft() + (elementRect.width / 2);\n}\n","import { DataUtil } from './util';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Query class is used to build query which is used by the DataManager to communicate with datasource.\n */\nvar Query = /** @class */ (function () {\n    /**\n     * Constructor for Query class.\n     * @param  {string|string[]} from?\n     * @hidden\n     */\n    function Query(from) {\n        /** @hidden */\n        this.subQuery = null;\n        /** @hidden */\n        this.isChild = false;\n        /** @hidden */\n        this.distincts = [];\n        this.queries = [];\n        this.key = '';\n        this.fKey = '';\n        if (typeof from === 'string') {\n            this.fromTable = from;\n        }\n        else if (from && from instanceof Array) {\n            this.lookups = from;\n        }\n        this.expands = [];\n        this.sortedColumns = [];\n        this.groupedColumns = [];\n        this.subQuery = null;\n        this.isChild = false;\n        this.params = [];\n        this.lazyLoad = [];\n        return this;\n    }\n    /**\n     * Sets the primary key.\n     * @param  {string} field - Defines the column field.\n     */\n    Query.prototype.setKey = function (field) {\n        this.key = field;\n        return this;\n    };\n    /**\n     * Sets default DataManager to execute query.\n     * @param  {DataManager} dataManager - Defines the DataManager.\n     */\n    Query.prototype.using = function (dataManager) {\n        this.dataManager = dataManager;\n        return this;\n    };\n    /**\n     * Executes query with the given DataManager.\n     * @param  {DataManager} dataManager - Defines the DataManager.\n     * @param  {Function} done - Defines the success callback.\n     * @param  {Function} fail - Defines the failure callback.\n     * @param  {Function} always - Defines the callback which will be invoked on either success or failure.\n     *\n     * <pre>\n     * let dataManager: DataManager = new DataManager([{ ID: '10' }, { ID: '2' }, { ID: '1' }, { ID: '20' }]);\n     * let query: Query = new Query();\n     * query.sortBy('ID', (x: string, y: string): number => { return parseInt(x, 10) - parseInt(y, 10) });\n     * let promise: Promise< Object > = query.execute(dataManager);\n     * promise.then((e: { result: Object }) => { });\n     * </pre>\n     */\n    Query.prototype.execute = function (dataManager, done, fail, always) {\n        dataManager = dataManager || this.dataManager;\n        if (dataManager) {\n            return dataManager.executeQuery(this, done, fail, always);\n        }\n        return DataUtil.throwError('Query - execute() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n    };\n    /**\n     * Executes query with the local datasource.\n     * @param  {DataManager} dataManager - Defines the DataManager.\n     */\n    Query.prototype.executeLocal = function (dataManager) {\n        dataManager = dataManager || this.dataManager;\n        if (dataManager) {\n            return dataManager.executeLocal(this);\n        }\n        return DataUtil.throwError('Query - executeLocal() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n    };\n    /**\n     * Creates deep copy of the Query object.\n     */\n    Query.prototype.clone = function () {\n        var cloned = new Query();\n        cloned.queries = this.queries.slice(0);\n        cloned.key = this.key;\n        cloned.isChild = this.isChild;\n        cloned.dataManager = this.dataManager;\n        cloned.fromTable = this.fromTable;\n        cloned.params = this.params.slice(0);\n        cloned.expands = this.expands.slice(0);\n        cloned.sortedColumns = this.sortedColumns.slice(0);\n        cloned.groupedColumns = this.groupedColumns.slice(0);\n        cloned.subQuerySelector = this.subQuerySelector;\n        cloned.subQuery = this.subQuery;\n        cloned.fKey = this.fKey;\n        cloned.isCountRequired = this.isCountRequired;\n        cloned.distincts = this.distincts.slice(0);\n        cloned.lazyLoad = this.lazyLoad.slice(0);\n        return cloned;\n    };\n    /**\n     * Specifies the name of table to retrieve data in query execution.\n     * @param  {string} tableName - Defines the table name.\n     */\n    Query.prototype.from = function (tableName) {\n        this.fromTable = tableName;\n        return this;\n    };\n    /**\n     * Adds additional parameter which will be sent along with the request which will be generated while DataManager execute.\n     * @param  {string} key - Defines the key of additional parameter.\n     * @param  {Function|string} value - Defines the value for the key.\n     */\n    Query.prototype.addParams = function (key, value) {\n        if (typeof value === 'function') {\n            this.params.push({ key: key, fn: value });\n        }\n        else {\n            this.params.push({ key: key, value: value });\n        }\n        return this;\n    };\n    /**\n     * @hidden\n     */\n    Query.prototype.distinct = function (fields) {\n        if (typeof fields === 'string') {\n            this.distincts = [].slice.call([fields], 0);\n        }\n        else {\n            this.distincts = fields.slice(0);\n        }\n        return this;\n    };\n    /**\n     * Expands the related table.\n     * @param  {string|Object[]} tables\n     */\n    Query.prototype.expand = function (tables) {\n        if (typeof tables === 'string') {\n            this.expands = [].slice.call([tables], 0);\n        }\n        else {\n            this.expands = tables.slice(0);\n        }\n        return this;\n    };\n    /**\n     * Filter data with given filter criteria.\n     * @param  {string|Predicate} fieldName - Defines the column field or Predicate.\n     * @param  {string} operator - Defines the operator how to filter data.\n     * @param  {string|number|boolean} value - Defines the values to match with data.\n     * @param  {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n     * filter data with case insensitive.\n     */\n    Query.prototype.where = function (fieldName, operator, value, ignoreCase, ignoreAccent) {\n        operator = operator ? (operator).toLowerCase() : null;\n        var predicate = null;\n        if (typeof fieldName === 'string') {\n            predicate = new Predicate(fieldName, operator, value, ignoreCase, ignoreAccent);\n        }\n        else if (fieldName instanceof Predicate) {\n            predicate = fieldName;\n        }\n        this.queries.push({\n            fn: 'onWhere',\n            e: predicate\n        });\n        return this;\n    };\n    /**\n     * Search data with given search criteria.\n     * @param  {string|number|boolean} searchKey - Defines the search key.\n     * @param  {string|string[]} fieldNames - Defines the collection of column fields.\n     * @param  {string} operator - Defines the operator how to search data.\n     * @param  {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n     * filter data with case insensitive.\n     */\n    Query.prototype.search = function (searchKey, fieldNames, operator, ignoreCase, ignoreAccent) {\n        if (typeof fieldNames === 'string') {\n            fieldNames = [fieldNames];\n        }\n        if (!operator || operator === 'none') {\n            operator = 'contains';\n        }\n        var comparer = DataUtil.fnOperators[operator];\n        this.queries.push({\n            fn: 'onSearch',\n            e: {\n                fieldNames: fieldNames,\n                operator: operator,\n                searchKey: searchKey,\n                ignoreCase: ignoreCase,\n                ignoreAccent: ignoreAccent,\n                comparer: comparer\n            }\n        });\n        return this;\n    };\n    /**\n     * Sort the data with given sort criteria.\n     * By default, sort direction is ascending.\n     * @param  {string|string[]} fieldName - Defines the single or collection of column fields.\n     * @param  {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n     */\n    Query.prototype.sortBy = function (fieldName, comparer, isFromGroup) {\n        return this.sortByForeignKey(fieldName, comparer, isFromGroup);\n    };\n    /**\n     * Sort the data with given sort criteria.\n     * By default, sort direction is ascending.\n     * @param  {string|string[]} fieldName - Defines the single or collection of column fields.\n     * @param  {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n     * @param  {string} direction - Defines the sort direction .\n     */\n    Query.prototype.sortByForeignKey = function (fieldName, comparer, isFromGroup, direction) {\n        var order = !isNullOrUndefined(direction) ? direction : 'ascending';\n        var sorts;\n        var temp;\n        if (typeof fieldName === 'string' && DataUtil.endsWith(fieldName.toLowerCase(), ' desc')) {\n            fieldName = fieldName.replace(/ desc$/i, '');\n            comparer = 'descending';\n        }\n        if (!comparer || typeof comparer === 'string') {\n            order = comparer ? comparer.toLowerCase() : 'ascending';\n            comparer = DataUtil.fnSort(comparer);\n        }\n        if (isFromGroup) {\n            sorts = Query.filterQueries(this.queries, 'onSortBy');\n            for (var i = 0; i < sorts.length; i++) {\n                temp = sorts[i].e.fieldName;\n                if (typeof temp === 'string') {\n                    if (temp === fieldName) {\n                        return this;\n                    }\n                }\n                else if (temp instanceof Array) {\n                    for (var j = 0; j < temp.length; j++) {\n                        if (temp[j] === fieldName || fieldName.toLowerCase() === temp[j] + ' desc') {\n                            return this;\n                        }\n                    }\n                }\n            }\n        }\n        this.queries.push({\n            fn: 'onSortBy',\n            e: {\n                fieldName: fieldName,\n                comparer: comparer,\n                direction: order\n            }\n        });\n        return this;\n    };\n    /**\n     * Sorts data in descending order.\n     * @param  {string} fieldName - Defines the column field.\n     */\n    Query.prototype.sortByDesc = function (fieldName) {\n        return this.sortBy(fieldName, 'descending');\n    };\n    /**\n     * Groups data with the given field name.\n     * @param  {string} fieldName - Defines the column field.\n     */\n    Query.prototype.group = function (fieldName, fn, format) {\n        this.sortBy(fieldName, null, true);\n        this.queries.push({\n            fn: 'onGroup',\n            e: {\n                fieldName: fieldName,\n                comparer: fn ? fn : null,\n                format: format ? format : null\n            }\n        });\n        return this;\n    };\n    /**\n     * Gets data based on the given page index and size.\n     * @param  {number} pageIndex - Defines the current page index.\n     * @param  {number} pageSize - Defines the no of records per page.\n     */\n    Query.prototype.page = function (pageIndex, pageSize) {\n        this.queries.push({\n            fn: 'onPage',\n            e: {\n                pageIndex: pageIndex,\n                pageSize: pageSize\n            }\n        });\n        return this;\n    };\n    /**\n     * Gets data based on the given start and end index.\n     * @param  {number} start - Defines the start index of the datasource.\n     * @param  {number} end - Defines the end index of the datasource.\n     */\n    Query.prototype.range = function (start, end) {\n        this.queries.push({\n            fn: 'onRange',\n            e: {\n                start: start,\n                end: end\n            }\n        });\n        return this;\n    };\n    /**\n     * Gets data from the top of the data source based on given number of records count.\n     * @param  {number} nos - Defines the no of records to retrieve from datasource.\n     */\n    Query.prototype.take = function (nos) {\n        this.queries.push({\n            fn: 'onTake',\n            e: {\n                nos: nos\n            }\n        });\n        return this;\n    };\n    /**\n     * Skips data with given number of records count from the top of the data source.\n     * @param  {number} nos - Defines the no of records skip in the datasource.\n     */\n    Query.prototype.skip = function (nos) {\n        this.queries.push({\n            fn: 'onSkip',\n            e: { nos: nos }\n        });\n        return this;\n    };\n    /**\n     * Selects specified columns from the data source.\n     * @param  {string|string[]} fieldNames - Defines the collection of column fields.\n     */\n    Query.prototype.select = function (fieldNames) {\n        if (typeof fieldNames === 'string') {\n            fieldNames = [].slice.call([fieldNames], 0);\n        }\n        this.queries.push({\n            fn: 'onSelect',\n            e: { fieldNames: fieldNames }\n        });\n        return this;\n    };\n    /**\n     * Gets the records in hierarchical relationship from two tables. It requires the foreign key to relate two tables.\n     * @param  {Query} query - Defines the query to relate two tables.\n     * @param  {Function} selectorFn - Defines the custom function to select records.\n     */\n    Query.prototype.hierarchy = function (query, selectorFn) {\n        this.subQuerySelector = selectorFn;\n        this.subQuery = query;\n        return this;\n    };\n    /**\n     * Sets the foreign key which is used to get data from the related table.\n     * @param  {string} key - Defines the foreign key.\n     */\n    Query.prototype.foreignKey = function (key) {\n        this.fKey = key;\n        return this;\n    };\n    /**\n     * It is used to get total number of records in the DataManager execution result.\n     */\n    Query.prototype.requiresCount = function () {\n        this.isCountRequired = true;\n        return this;\n    };\n    //type - sum, avg, min, max\n    /**\n     * Aggregate the data with given type and field name.\n     * @param  {string} type - Defines the aggregate type.\n     * @param  {string} field - Defines the column field to aggregate.\n     */\n    Query.prototype.aggregate = function (type, field) {\n        this.queries.push({\n            fn: 'onAggregates',\n            e: { field: field, type: type }\n        });\n        return this;\n    };\n    /**\n     * Pass array of filterColumn query for performing filter operation.\n     * @param  {QueryOptions[]} queries\n     * @param  {string} name\n     * @hidden\n     */\n    Query.filterQueries = function (queries, name) {\n        return queries.filter(function (q) {\n            return q.fn === name;\n        });\n    };\n    /**\n     * To get the list of queries which is already filtered in current data source.\n     * @param  {Object[]} queries\n     * @param  {string[]} singles\n     * @hidden\n     */\n    Query.filterQueryLists = function (queries, singles) {\n        var filtered = queries.filter(function (q) {\n            return singles.indexOf(q.fn) !== -1;\n        });\n        var res = {};\n        for (var i = 0; i < filtered.length; i++) {\n            if (!res[filtered[i].fn]) {\n                res[filtered[i].fn] = filtered[i].e;\n            }\n        }\n        return res;\n    };\n    return Query;\n}());\nexport { Query };\n/**\n * Predicate class is used to generate complex filter criteria.\n * This will be used by DataManager to perform multiple filtering operation.\n */\nvar Predicate = /** @class */ (function () {\n    /**\n     * Constructor for Predicate class.\n     * @param  {string|Predicate} field\n     * @param  {string} operator\n     * @param  {string|number|boolean|Predicate|Predicate[]} value\n     * @param  {boolean=false} ignoreCase\n     * @hidden\n     */\n    function Predicate(field, operator, value, ignoreCase, ignoreAccent) {\n        if (ignoreCase === void 0) { ignoreCase = false; }\n        /** @hidden */\n        this.ignoreAccent = false;\n        /** @hidden */\n        this.isComplex = false;\n        if (typeof field === 'string') {\n            this.field = field;\n            this.operator = operator.toLowerCase();\n            this.value = value;\n            this.ignoreCase = ignoreCase;\n            this.ignoreAccent = ignoreAccent;\n            this.isComplex = false;\n            this.comparer = DataUtil.fnOperators.processOperator(this.operator);\n        }\n        else if (field instanceof Predicate && value instanceof Predicate || value instanceof Array) {\n            this.isComplex = true;\n            this.condition = operator.toLowerCase();\n            this.predicates = [field];\n            if (value instanceof Array) {\n                [].push.apply(this.predicates, value);\n            }\n            else {\n                this.predicates.push(value);\n            }\n        }\n        return this;\n    }\n    /**\n     * Adds n-number of new predicates on existing predicate with “and” condition.\n     * @param  {Object[]} args - Defines the collection of predicates.\n     */\n    Predicate.and = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return Predicate.combinePredicates([].slice.call(args, 0), 'and');\n    };\n    /**\n     * Adds new predicate on existing predicate with “and” condition.\n     * @param  {string} field - Defines the column field.\n     * @param  {string} operator - Defines the operator how to filter data.\n     * @param  {string} value - Defines the values to match with data.\n     * @param  {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n     * filter data with case insensitive.\n     */\n    Predicate.prototype.and = function (field, operator, value, ignoreCase, ignoreAccent) {\n        return Predicate.combine(this, field, operator, value, 'and', ignoreCase, ignoreAccent);\n    };\n    /**\n     * Adds n-number of new predicates on existing predicate with “or” condition.\n     * @param  {Object[]} args - Defines the collection of predicates.\n     */\n    Predicate.or = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return Predicate.combinePredicates([].slice.call(args, 0), 'or');\n    };\n    /**\n     * Adds new predicate on existing predicate with “or” condition.\n     * @param  {string} field - Defines the column field.\n     * @param  {string} operator - Defines the operator how to filter data.\n     * @param  {string} value - Defines the values to match with data.\n     * @param  {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n     * filter data with case insensitive.\n     */\n    Predicate.prototype.or = function (field, operator, value, ignoreCase, ignoreAccent) {\n        return Predicate.combine(this, field, operator, value, 'or', ignoreCase, ignoreAccent);\n    };\n    /**\n     * Converts plain JavaScript object to Predicate object.\n     * @param  {Predicate[]|Predicate} json - Defines single or collection of Predicate.\n     */\n    Predicate.fromJson = function (json) {\n        if (json instanceof Array) {\n            var res = [];\n            for (var i = 0, len = json.length; i < len; i++) {\n                res.push(this.fromJSONData(json[i]));\n            }\n            return res;\n        }\n        var pred = json;\n        return this.fromJSONData(pred);\n    };\n    /**\n     * Validate the record based on the predicates.\n     * @param  {Object} record - Defines the datasource record.\n     */\n    Predicate.prototype.validate = function (record) {\n        var predicate = this.predicates ? this.predicates : [];\n        var isAnd;\n        var ret;\n        if (!this.isComplex && this.comparer) {\n            return this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n        }\n        isAnd = this.condition === 'and';\n        for (var i = 0; i < predicate.length; i++) {\n            ret = predicate[i].validate(record);\n            if (isAnd) {\n                if (!ret) {\n                    return false;\n                }\n            }\n            else {\n                if (ret) {\n                    return true;\n                }\n            }\n        }\n        return isAnd;\n    };\n    /**\n     * Converts predicates to plain JavaScript.\n     * This method is uses Json stringify when serializing Predicate object.\n     */\n    Predicate.prototype.toJson = function () {\n        var predicates;\n        var p;\n        if (this.isComplex) {\n            predicates = [];\n            p = this.predicates;\n            for (var i = 0; i < p.length; i++) {\n                predicates.push(p[i].toJson());\n            }\n        }\n        return {\n            isComplex: this.isComplex,\n            field: this.field,\n            operator: this.operator,\n            value: this.value,\n            ignoreCase: this.ignoreCase,\n            ignoreAccent: this.ignoreAccent,\n            condition: this.condition,\n            predicates: predicates\n        };\n    };\n    Predicate.combinePredicates = function (predicates, operator) {\n        if (predicates.length === 1) {\n            if (!(predicates[0] instanceof Array)) {\n                return predicates[0];\n            }\n            predicates = predicates[0];\n        }\n        return new Predicate(predicates[0], operator, predicates.slice(1));\n    };\n    Predicate.combine = function (pred, field, operator, value, condition, ignoreCase, ignoreAccent) {\n        if (field instanceof Predicate) {\n            return Predicate[condition](pred, field);\n        }\n        if (typeof field === 'string') {\n            return Predicate[condition](pred, new Predicate(field, operator, value, ignoreCase, ignoreAccent));\n        }\n        return DataUtil.throwError('Predicate - ' + condition + ' : invalid arguments');\n    };\n    Predicate.fromJSONData = function (json) {\n        var preds = json.predicates || [];\n        var len = preds.length;\n        var predicates = [];\n        var result;\n        for (var i = 0; i < len; i++) {\n            predicates.push(this.fromJSONData(preds[i]));\n        }\n        if (!json.isComplex) {\n            result = new Predicate(json.field, json.operator, json.value, json.ignoreCase, json.ignoreAccent);\n        }\n        else {\n            result = new Predicate(predicates[0], json.condition, predicates.slice(1));\n        }\n        return result;\n    };\n    return Predicate;\n}());\nexport { Predicate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from './manager';\nimport { Query } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Data manager common utility methods.\n * @hidden\n */\nvar DataUtil = /** @class */ (function () {\n    function DataUtil() {\n    }\n    /**\n     * Returns the value by invoking the provided parameter function.\n     * If the paramater is not of type function then it will be returned as it is.\n     * @param  {Function|string|string[]|number} value\n     * @param  {Object} inst?\n     * @hidden\n     */\n    DataUtil.getValue = function (value, inst) {\n        if (typeof value === 'function') {\n            return value.call(inst || {});\n        }\n        return value;\n    };\n    /**\n     * Returns true if the input string ends with given string.\n     * @param  {string} input\n     * @param  {string} substr\n     */\n    DataUtil.endsWith = function (input, substr) {\n        return input.slice && input.slice(-substr.length) === substr;\n    };\n    /**\n     * Returns true if the input string starts with given string.\n     * @param  {string} str\n     * @param  {string} startstr\n     */\n    DataUtil.startsWith = function (input, start) {\n        return input.slice(0, start.length) === start;\n    };\n    /**\n     * To return the sorting function based on the string.\n     * @param  {string} order\n     * @hidden\n     */\n    DataUtil.fnSort = function (order) {\n        order = order ? DataUtil.toLowerCase(order) : 'ascending';\n        if (order === 'ascending') {\n            return this.fnAscending;\n        }\n        return this.fnDescending;\n    };\n    /**\n     * Comparer function which is used to sort the data in ascending order.\n     * @param  {string|number} x\n     * @param  {string|number} y\n     * @returns number\n     */\n    DataUtil.fnAscending = function (x, y) {\n        if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n            return -1;\n        }\n        if (y === null || y === undefined) {\n            return -1;\n        }\n        if (typeof x === 'string') {\n            return x.localeCompare(y);\n        }\n        if (x === null || x === undefined) {\n            return 1;\n        }\n        return x - y;\n    };\n    /**\n     * Comparer function which is used to sort the data in descending order.\n     * @param  {string|number} x\n     * @param  {string|number} y\n     * @returns number\n     */\n    DataUtil.fnDescending = function (x, y) {\n        if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n            return -1;\n        }\n        if (y === null || y === undefined) {\n            return 1;\n        }\n        if (typeof x === 'string') {\n            return x.localeCompare(y) * -1;\n        }\n        if (x === null || x === undefined) {\n            return -1;\n        }\n        return y - x;\n    };\n    DataUtil.extractFields = function (obj, fields) {\n        var newObj = {};\n        for (var i = 0; i < fields.length; i++) {\n            newObj = this.setValue(fields[i], this.getObject(fields[i], obj), newObj);\n        }\n        return newObj;\n    };\n    /**\n     * Select objects by given fields from jsonArray.\n     * @param  {Object[]} jsonArray\n     * @param  {string[]} fields\n     */\n    DataUtil.select = function (jsonArray, fields) {\n        var newData = [];\n        for (var i = 0; i < jsonArray.length; i++) {\n            newData.push(this.extractFields(jsonArray[i], fields));\n        }\n        return newData;\n    };\n    /**\n     * Group the input data based on the field name.\n     * It also performs aggregation of the grouped records based on the aggregates paramater.\n     * @param  {Object[]} jsonArray\n     * @param  {string} field?\n     * @param  {Object[]} agg?\n     * @param  {number} level?\n     * @param  {Object[]} groupDs?\n     */\n    DataUtil.group = function (jsonArray, field, aggregates, level, groupDs, format, isLazyLoad) {\n        level = level || 1;\n        var jsonData = jsonArray;\n        var guid = 'GroupGuid';\n        if (jsonData.GroupGuid === consts[guid]) {\n            var _loop_1 = function (j) {\n                if (!isNullOrUndefined(groupDs)) {\n                    var indx = -1;\n                    var temp = groupDs.filter(function (e) { return e.key === jsonData[j].key; });\n                    indx = groupDs.indexOf(temp[0]);\n                    jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, groupDs[indx].items, format, isLazyLoad);\n                    jsonData[j].count = groupDs[indx].count;\n                }\n                else {\n                    jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, null, format, isLazyLoad);\n                    jsonData[j].count = jsonData[j].items.length;\n                }\n            };\n            var this_1 = this;\n            for (var j = 0; j < jsonData.length; j++) {\n                _loop_1(j);\n            }\n            jsonData.childLevels += 1;\n            return jsonData;\n        }\n        var grouped = {};\n        var groupedArray = [];\n        groupedArray.GroupGuid = consts[guid];\n        groupedArray.level = level;\n        groupedArray.childLevels = 0;\n        groupedArray.records = jsonData;\n        var _loop_2 = function (i) {\n            var val = this_2.getVal(jsonData, i, field);\n            if (!isNullOrUndefined(format)) {\n                val = format(val, field);\n            }\n            if (!grouped[val]) {\n                grouped[val] = {\n                    key: val,\n                    count: 0,\n                    items: [],\n                    aggregates: {},\n                    field: field\n                };\n                groupedArray.push(grouped[val]);\n                if (!isNullOrUndefined(groupDs)) {\n                    var tempObj = groupDs.filter(function (e) { return e.key === grouped[val].key; });\n                    grouped[val].count = tempObj[0].count;\n                }\n            }\n            grouped[val].count = !isNullOrUndefined(groupDs) ? grouped[val].count : grouped[val].count += 1;\n            if (!isLazyLoad || (isLazyLoad && aggregates.length)) {\n                grouped[val].items.push(jsonData[i]);\n            }\n        };\n        var this_2 = this;\n        for (var i = 0; i < jsonData.length; i++) {\n            _loop_2(i);\n        }\n        if (aggregates && aggregates.length) {\n            var _loop_3 = function (i) {\n                var res = {};\n                var fn = void 0;\n                var aggs = aggregates;\n                for (var j = 0; j < aggregates.length; j++) {\n                    fn = DataUtil.aggregates[aggregates[j].type];\n                    if (!isNullOrUndefined(groupDs)) {\n                        var temp = groupDs.filter(function (e) { return e.key === groupedArray[i].key; });\n                        if (fn) {\n                            res[aggs[j].field + ' - ' + aggs[j].type] = fn(temp[0].items, aggs[j].field);\n                        }\n                    }\n                    else {\n                        if (fn) {\n                            res[aggs[j].field + ' - ' + aggs[j].type] = fn(groupedArray[i].items, aggs[j].field);\n                        }\n                    }\n                }\n                groupedArray[i].aggregates = res;\n            };\n            for (var i = 0; i < groupedArray.length; i++) {\n                _loop_3(i);\n            }\n        }\n        if (isLazyLoad && groupedArray.length && aggregates.length) {\n            for (var i = 0; i < groupedArray.length; i++) {\n                groupedArray[i].items = [];\n            }\n        }\n        return jsonData.length && groupedArray || jsonData;\n    };\n    /**\n     * It is used to categorize the multiple items based on a specific field in jsonArray.\n     * The hierarchical queries are commonly required when you use foreign key binding.\n     * @param  {string} fKey\n     * @param  {string} from\n     * @param  {Object[]} source\n     * @param  {Group} lookup?\n     * @param  {string} pKey?\n     * @hidden\n     */\n    DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n        var i;\n        var grp = {};\n        var temp;\n        if (lookup.result) {\n            lookup = lookup.result;\n        }\n        if (lookup.GroupGuid) {\n            this.throwError('DataManager: Do not have support Grouping in hierarchy');\n        }\n        for (i = 0; i < lookup.length; i++) {\n            var fKeyData = this.getObject(fKey, lookup[i]);\n            temp = grp[fKeyData] || (grp[fKeyData] = []);\n            temp.push(lookup[i]);\n        }\n        for (i = 0; i < source.length; i++) {\n            var fKeyData = this.getObject(pKey || fKey, source[i]);\n            source[i][from] = grp[fKeyData];\n        }\n    };\n    /**\n     * The method used to get the field names which started with specified characters.\n     * @param  {Object} obj\n     * @param  {string[]} fields?\n     * @param  {string} prefix?\n     * @hidden\n     */\n    DataUtil.getFieldList = function (obj, fields, prefix) {\n        if (prefix === undefined) {\n            prefix = '';\n        }\n        if (fields === undefined || fields === null) {\n            return this.getFieldList(obj, [], prefix);\n        }\n        var copyObj = obj;\n        var keys = Object.keys(obj);\n        for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n            var prop = keys_1[_i];\n            if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n                this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n            }\n            else {\n                fields.push(prefix + prop);\n            }\n        }\n        return fields;\n    };\n    /**\n     * Gets the value of the property in the given object.\n     * The complex object can be accessed by providing the field names concatenated with dot(.).\n     * @param  {string} nameSpace - The name of the property to be accessed.\n     * @param  {Object} from - Defines the source object.\n     */\n    DataUtil.getObject = function (nameSpace, from) {\n        if (!nameSpace) {\n            return from;\n        }\n        if (!from) {\n            return undefined;\n        }\n        if (nameSpace.indexOf('.') === -1) {\n            return from[nameSpace];\n        }\n        var value = from;\n        var splits = nameSpace.split('.');\n        for (var i = 0; i < splits.length; i++) {\n            if (value == null) {\n                break;\n            }\n            value = value[splits[i]];\n        }\n        return value;\n    };\n    /**\n     * To set value for the nameSpace in desired object.\n     * @param {string} nameSpace - String value to the get the inner object.\n     * @param {Object} value - Value that you need to set.\n     * @param {Object} obj - Object to get the inner object value.\n     * @return { [key: string]: Object; } | Object\n     * @hidden\n     */\n    DataUtil.setValue = function (nameSpace, value, obj) {\n        var keys = nameSpace.toString().split('.');\n        var start = obj || {};\n        var fromObj = start;\n        var i;\n        var length = keys.length;\n        var key;\n        for (i = 0; i < length; i++) {\n            key = keys[i];\n            if (i + 1 === length) {\n                fromObj[key] = value === undefined ? undefined : value;\n            }\n            else if (isNullOrUndefined(fromObj[key])) {\n                fromObj[key] = {};\n            }\n            fromObj = fromObj[key];\n        }\n        return start;\n    };\n    /**\n     * Sort the given data based on the field and comparer.\n     * @param  {Object[]} ds - Defines the input data.\n     * @param  {string} field - Defines the field to be sorted.\n     * @param  {Function} comparer - Defines the comparer function used to sort the records.\n     */\n    DataUtil.sort = function (ds, field, comparer) {\n        if (ds.length <= 1) {\n            return ds;\n        }\n        var middle = parseInt((ds.length / 2).toString(), 10);\n        var left = ds.slice(0, middle);\n        var right = ds.slice(middle);\n        left = this.sort(left, field, comparer);\n        right = this.sort(right, field, comparer);\n        return this.merge(left, right, field, comparer);\n    };\n    DataUtil.ignoreDiacritics = function (value) {\n        if (typeof value !== 'string') {\n            return value;\n        }\n        var result = value.split('');\n        var newValue = result.map(function (temp) { return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp; });\n        return newValue.join('');\n    };\n    DataUtil.merge = function (left, right, fieldName, comparer) {\n        var result = [];\n        var current;\n        while (left.length > 0 || right.length > 0) {\n            if (left.length > 0 && right.length > 0) {\n                if (comparer) {\n                    current = comparer(this.getVal(left, 0, fieldName), this.getVal(right, 0, fieldName), left[0], right[0]) <= 0 ? left : right;\n                }\n                else {\n                    current = left[0][fieldName] < left[0][fieldName] ? left : right;\n                }\n            }\n            else {\n                current = left.length > 0 ? left : right;\n            }\n            result.push(current.shift());\n        }\n        return result;\n    };\n    DataUtil.getVal = function (array, index, field) {\n        return field ? this.getObject(field, array[index]) : array[index];\n    };\n    DataUtil.toLowerCase = function (val) {\n        return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';\n    };\n    /**\n     * To perform the filter operation with specified adaptor and returns the result.\n     * @param  {Object} adaptor\n     * @param  {string} fnName\n     * @param  {Object} param1?\n     * @param  {Object} param2?\n     * @hidden\n     */\n    DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n        if (fnName in adaptor) {\n            var res = adaptor[fnName](param1, param2);\n            if (!isNullOrUndefined(res)) {\n                param1 = res;\n            }\n        }\n        return param1;\n    };\n    DataUtil.getAddParams = function (adp, dm, query) {\n        var req = {};\n        DataUtil.callAdaptorFunction(adp, 'addParams', {\n            dm: dm,\n            query: query,\n            params: query.params,\n            reqParams: req\n        });\n        return req;\n    };\n    /**\n     * Checks wheather the given input is a plain object or not.\n     * @param  {Object|Object[]} obj\n     */\n    DataUtil.isPlainObject = function (obj) {\n        return (!!obj) && (obj.constructor === Object);\n    };\n    /**\n     * Returns true when the browser cross origin request.\n     */\n    DataUtil.isCors = function () {\n        var xhr = null;\n        var request = 'XMLHttpRequest';\n        try {\n            xhr = new window[request]();\n        }\n        catch (e) {\n            // No exception handling\n        }\n        return !!xhr && ('withCredentials' in xhr);\n    };\n    /**\n     * Generate random GUID value which will be prefixed with the given value.\n     * @param  {string} prefix\n     */\n    DataUtil.getGuid = function (prefix) {\n        var hexs = '0123456789abcdef';\n        var rand;\n        return (prefix || '') + '00000000-0000-4000-0000-000000000000'.replace(/0/g, function (val, i) {\n            if ('crypto' in window && 'getRandomValues' in crypto) {\n                var arr = new Uint8Array(1);\n                window.crypto.getRandomValues(arr);\n                rand = arr[0] % 16 | 0;\n            }\n            else {\n                rand = Math.random() * 16 | 0;\n            }\n            return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n        });\n    };\n    /**\n     * Checks wheather the given value is null or not.\n     * @param  {string|Object} val\n     * @returns boolean\n     */\n    DataUtil.isNull = function (val) {\n        return val === undefined || val === null;\n    };\n    /**\n     * To get the required items from collection of objects.\n     * @param  {Object[]} array\n     * @param  {string} field\n     * @param  {Function} comparer\n     * @returns Object\n     * @hidden\n     */\n    DataUtil.getItemFromComparer = function (array, field, comparer) {\n        var keyVal;\n        var current;\n        var key;\n        var i = 0;\n        var castRequired = typeof DataUtil.getVal(array, 0, field) === 'string';\n        if (array.length) {\n            while (isNullOrUndefined(keyVal) && i < array.length) {\n                keyVal = DataUtil.getVal(array, i, field);\n                key = array[i++];\n            }\n        }\n        for (; i < array.length; i++) {\n            current = DataUtil.getVal(array, i, field);\n            if (isNullOrUndefined(current)) {\n                continue;\n            }\n            if (castRequired) {\n                keyVal = +keyVal;\n                current = +current;\n            }\n            if (comparer(keyVal, current) > 0) {\n                keyVal = current;\n                key = array[i];\n            }\n        }\n        return key;\n    };\n    /**\n     * To get distinct values of Array or Array of Objects.\n     * @param  {Object[]} json\n     * @param  {string} field\n     * @param  {boolean} requiresCompleteRecord\n     * @returns Object[]\n     * * distinct array of objects is return when requiresCompleteRecord set as true.\n     * @hidden\n     */\n    DataUtil.distinct = function (json, fieldName, requiresCompleteRecord) {\n        requiresCompleteRecord = isNullOrUndefined(requiresCompleteRecord) ? false : requiresCompleteRecord;\n        var result = [];\n        var val;\n        var tmp = {};\n        json.forEach(function (data, index) {\n            val = typeof (json[index]) === 'object' ? DataUtil.getVal(json, index, fieldName) : json[index];\n            if (!(val in tmp)) {\n                result.push(!requiresCompleteRecord ? val : json[index]);\n                tmp[val] = 1;\n            }\n        });\n        return result;\n    };\n    /**\n     * Specifies the value which will be used to adjust the date value to server timezone.\n     * @default null\n     */\n    DataUtil.serverTimezoneOffset = null;\n    /**\n     * Species whether are not to be parsed with serverTimezoneOffset value.\n     * @hidden\n     */\n    DataUtil.timeZoneHandling = true;\n    /**\n     * Throw error with the given string as message.\n     * @param  {string} er\n     */\n    DataUtil.throwError = function (error) {\n        try {\n            throw new Error(error);\n        }\n        catch (e) {\n            throw e.message + '\\n' + e.stack;\n        }\n    };\n    DataUtil.aggregates = {\n        /**\n         * Calculate sum of the given field in the data.\n         * @param  {Object[]} ds\n         * @param  {string} field\n         */\n        sum: function (ds, field) {\n            var result = 0;\n            var val;\n            var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n            for (var i = 0; i < ds.length; i++) {\n                val = DataUtil.getVal(ds, i, field);\n                if (!isNaN(val) && val !== null) {\n                    if (castRequired) {\n                        val = +val;\n                    }\n                    result += val;\n                }\n            }\n            return result;\n        },\n        /**\n         * Calculate average value of the given field in the data.\n         * @param  {Object[]} ds\n         * @param  {string} field\n         */\n        average: function (ds, field) {\n            return DataUtil.aggregates.sum(ds, field) / ds.length;\n        },\n        /**\n         * Returns the min value of the data based on the field.\n         * @param  {Object[]} ds\n         * @param  {string|Function} field\n         */\n        min: function (ds, field) {\n            var comparer;\n            if (typeof field === 'function') {\n                comparer = field;\n                field = null;\n            }\n            return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n        },\n        /**\n         * Returns the max value of the data based on the field.\n         * @param  {Object[]} ds\n         * @param  {string} field\n         * @returns number\n         */\n        max: function (ds, field) {\n            var comparer;\n            if (typeof field === 'function') {\n                comparer = field;\n                field = null;\n            }\n            return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n        },\n        /**\n         * Returns the total number of true value present in the data based on the given boolean field name.\n         * @param  {Object[]} ds\n         * @param  {string} field\n         */\n        truecount: function (ds, field) {\n            return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n        },\n        /**\n         * Returns the total number of false value present in the data based on the given boolean field name.\n         * @param  {Object[]} ds\n         * @param  {string} field\n         */\n        falsecount: function (ds, field) {\n            return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n        },\n        /**\n         * Returns the length of the given data.\n         * @param  {Object[]} ds\n         * @param  {string} field?\n         * @returns number\n         */\n        count: function (ds, field) {\n            return ds.length;\n        }\n    };\n    /**\n     * Specifies the Object with filter operators.\n     */\n    DataUtil.operatorSymbols = {\n        '<': 'lessthan',\n        '>': 'greaterthan',\n        '<=': 'lessthanorequal',\n        '>=': 'greaterthanorequal',\n        '==': 'equal',\n        '!=': 'notequal',\n        '*=': 'contains',\n        '$=': 'endswith',\n        '^=': 'startswith'\n    };\n    /**\n     * Specifies the Object with filter operators which will be used for OData filter query generation.\n     * * It will be used for date/number type filter query.\n     */\n    DataUtil.odBiOperator = {\n        '<': ' lt ',\n        '>': ' gt ',\n        '<=': ' le ',\n        '>=': ' ge ',\n        '==': ' eq ',\n        '!=': ' ne ',\n        'lessthan': ' lt ',\n        'lessthanorequal': ' le ',\n        'greaterthan': ' gt ',\n        'greaterthanorequal': ' ge ',\n        'equal': ' eq ',\n        'notequal': ' ne '\n    };\n    /**\n     * Specifies the Object with filter operators which will be used for OData filter query generation.\n     * It will be used for string type filter query.\n     */\n    DataUtil.odUniOperator = {\n        '$=': 'endswith',\n        '^=': 'startswith',\n        '*=': 'substringof',\n        'endswith': 'endswith',\n        'startswith': 'startswith',\n        'contains': 'substringof'\n    };\n    /**\n     * Specifies the Object with filter operators which will be used for ODataV4 filter query generation.\n     * It will be used for string type filter query.\n     */\n    DataUtil.odv4UniOperator = {\n        '$=': 'endswith',\n        '^=': 'startswith',\n        '*=': 'contains',\n        'endswith': 'endswith',\n        'startswith': 'startswith',\n        'contains': 'contains'\n    };\n    DataUtil.diacritics = {\n        '\\u24B6': 'A',\n        '\\uFF21': 'A',\n        '\\u00C0': 'A',\n        '\\u00C1': 'A',\n        '\\u00C2': 'A',\n        '\\u1EA6': 'A',\n        '\\u1EA4': 'A',\n        '\\u1EAA': 'A',\n        '\\u1EA8': 'A',\n        '\\u00C3': 'A',\n        '\\u0100': 'A',\n        '\\u0102': 'A',\n        '\\u1EB0': 'A',\n        '\\u1EAE': 'A',\n        '\\u1EB4': 'A',\n        '\\u1EB2': 'A',\n        '\\u0226': 'A',\n        '\\u01E0': 'A',\n        '\\u00C4': 'A',\n        '\\u01DE': 'A',\n        '\\u1EA2': 'A',\n        '\\u00C5': 'A',\n        '\\u01FA': 'A',\n        '\\u01CD': 'A',\n        '\\u0200': 'A',\n        '\\u0202': 'A',\n        '\\u1EA0': 'A',\n        '\\u1EAC': 'A',\n        '\\u1EB6': 'A',\n        '\\u1E00': 'A',\n        '\\u0104': 'A',\n        '\\u023A': 'A',\n        '\\u2C6F': 'A',\n        '\\uA732': 'AA',\n        '\\u00C6': 'AE',\n        '\\u01FC': 'AE',\n        '\\u01E2': 'AE',\n        '\\uA734': 'AO',\n        '\\uA736': 'AU',\n        '\\uA738': 'AV',\n        '\\uA73A': 'AV',\n        '\\uA73C': 'AY',\n        '\\u24B7': 'B',\n        '\\uFF22': 'B',\n        '\\u1E02': 'B',\n        '\\u1E04': 'B',\n        '\\u1E06': 'B',\n        '\\u0243': 'B',\n        '\\u0182': 'B',\n        '\\u0181': 'B',\n        '\\u24B8': 'C',\n        '\\uFF23': 'C',\n        '\\u0106': 'C',\n        '\\u0108': 'C',\n        '\\u010A': 'C',\n        '\\u010C': 'C',\n        '\\u00C7': 'C',\n        '\\u1E08': 'C',\n        '\\u0187': 'C',\n        '\\u023B': 'C',\n        '\\uA73E': 'C',\n        '\\u24B9': 'D',\n        '\\uFF24': 'D',\n        '\\u1E0A': 'D',\n        '\\u010E': 'D',\n        '\\u1E0C': 'D',\n        '\\u1E10': 'D',\n        '\\u1E12': 'D',\n        '\\u1E0E': 'D',\n        '\\u0110': 'D',\n        '\\u018B': 'D',\n        '\\u018A': 'D',\n        '\\u0189': 'D',\n        '\\uA779': 'D',\n        '\\u01F1': 'DZ',\n        '\\u01C4': 'DZ',\n        '\\u01F2': 'Dz',\n        '\\u01C5': 'Dz',\n        '\\u24BA': 'E',\n        '\\uFF25': 'E',\n        '\\u00C8': 'E',\n        '\\u00C9': 'E',\n        '\\u00CA': 'E',\n        '\\u1EC0': 'E',\n        '\\u1EBE': 'E',\n        '\\u1EC4': 'E',\n        '\\u1EC2': 'E',\n        '\\u1EBC': 'E',\n        '\\u0112': 'E',\n        '\\u1E14': 'E',\n        '\\u1E16': 'E',\n        '\\u0114': 'E',\n        '\\u0116': 'E',\n        '\\u00CB': 'E',\n        '\\u1EBA': 'E',\n        '\\u011A': 'E',\n        '\\u0204': 'E',\n        '\\u0206': 'E',\n        '\\u1EB8': 'E',\n        '\\u1EC6': 'E',\n        '\\u0228': 'E',\n        '\\u1E1C': 'E',\n        '\\u0118': 'E',\n        '\\u1E18': 'E',\n        '\\u1E1A': 'E',\n        '\\u0190': 'E',\n        '\\u018E': 'E',\n        '\\u24BB': 'F',\n        '\\uFF26': 'F',\n        '\\u1E1E': 'F',\n        '\\u0191': 'F',\n        '\\uA77B': 'F',\n        '\\u24BC': 'G',\n        '\\uFF27': 'G',\n        '\\u01F4': 'G',\n        '\\u011C': 'G',\n        '\\u1E20': 'G',\n        '\\u011E': 'G',\n        '\\u0120': 'G',\n        '\\u01E6': 'G',\n        '\\u0122': 'G',\n        '\\u01E4': 'G',\n        '\\u0193': 'G',\n        '\\uA7A0': 'G',\n        '\\uA77D': 'G',\n        '\\uA77E': 'G',\n        '\\u24BD': 'H',\n        '\\uFF28': 'H',\n        '\\u0124': 'H',\n        '\\u1E22': 'H',\n        '\\u1E26': 'H',\n        '\\u021E': 'H',\n        '\\u1E24': 'H',\n        '\\u1E28': 'H',\n        '\\u1E2A': 'H',\n        '\\u0126': 'H',\n        '\\u2C67': 'H',\n        '\\u2C75': 'H',\n        '\\uA78D': 'H',\n        '\\u24BE': 'I',\n        '\\uFF29': 'I',\n        '\\u00CC': 'I',\n        '\\u00CD': 'I',\n        '\\u00CE': 'I',\n        '\\u0128': 'I',\n        '\\u012A': 'I',\n        '\\u012C': 'I',\n        '\\u0130': 'I',\n        '\\u00CF': 'I',\n        '\\u1E2E': 'I',\n        '\\u1EC8': 'I',\n        '\\u01CF': 'I',\n        '\\u0208': 'I',\n        '\\u020A': 'I',\n        '\\u1ECA': 'I',\n        '\\u012E': 'I',\n        '\\u1E2C': 'I',\n        '\\u0197': 'I',\n        '\\u24BF': 'J',\n        '\\uFF2A': 'J',\n        '\\u0134': 'J',\n        '\\u0248': 'J',\n        '\\u24C0': 'K',\n        '\\uFF2B': 'K',\n        '\\u1E30': 'K',\n        '\\u01E8': 'K',\n        '\\u1E32': 'K',\n        '\\u0136': 'K',\n        '\\u1E34': 'K',\n        '\\u0198': 'K',\n        '\\u2C69': 'K',\n        '\\uA740': 'K',\n        '\\uA742': 'K',\n        '\\uA744': 'K',\n        '\\uA7A2': 'K',\n        '\\u24C1': 'L',\n        '\\uFF2C': 'L',\n        '\\u013F': 'L',\n        '\\u0139': 'L',\n        '\\u013D': 'L',\n        '\\u1E36': 'L',\n        '\\u1E38': 'L',\n        '\\u013B': 'L',\n        '\\u1E3C': 'L',\n        '\\u1E3A': 'L',\n        '\\u0141': 'L',\n        '\\u023D': 'L',\n        '\\u2C62': 'L',\n        '\\u2C60': 'L',\n        '\\uA748': 'L',\n        '\\uA746': 'L',\n        '\\uA780': 'L',\n        '\\u01C7': 'LJ',\n        '\\u01C8': 'Lj',\n        '\\u24C2': 'M',\n        '\\uFF2D': 'M',\n        '\\u1E3E': 'M',\n        '\\u1E40': 'M',\n        '\\u1E42': 'M',\n        '\\u2C6E': 'M',\n        '\\u019C': 'M',\n        '\\u24C3': 'N',\n        '\\uFF2E': 'N',\n        '\\u01F8': 'N',\n        '\\u0143': 'N',\n        '\\u00D1': 'N',\n        '\\u1E44': 'N',\n        '\\u0147': 'N',\n        '\\u1E46': 'N',\n        '\\u0145': 'N',\n        '\\u1E4A': 'N',\n        '\\u1E48': 'N',\n        '\\u0220': 'N',\n        '\\u019D': 'N',\n        '\\uA790': 'N',\n        '\\uA7A4': 'N',\n        '\\u01CA': 'NJ',\n        '\\u01CB': 'Nj',\n        '\\u24C4': 'O',\n        '\\uFF2F': 'O',\n        '\\u00D2': 'O',\n        '\\u00D3': 'O',\n        '\\u00D4': 'O',\n        '\\u1ED2': 'O',\n        '\\u1ED0': 'O',\n        '\\u1ED6': 'O',\n        '\\u1ED4': 'O',\n        '\\u00D5': 'O',\n        '\\u1E4C': 'O',\n        '\\u022C': 'O',\n        '\\u1E4E': 'O',\n        '\\u014C': 'O',\n        '\\u1E50': 'O',\n        '\\u1E52': 'O',\n        '\\u014E': 'O',\n        '\\u022E': 'O',\n        '\\u0230': 'O',\n        '\\u00D6': 'O',\n        '\\u022A': 'O',\n        '\\u1ECE': 'O',\n        '\\u0150': 'O',\n        '\\u01D1': 'O',\n        '\\u020C': 'O',\n        '\\u020E': 'O',\n        '\\u01A0': 'O',\n        '\\u1EDC': 'O',\n        '\\u1EDA': 'O',\n        '\\u1EE0': 'O',\n        '\\u1EDE': 'O',\n        '\\u1EE2': 'O',\n        '\\u1ECC': 'O',\n        '\\u1ED8': 'O',\n        '\\u01EA': 'O',\n        '\\u01EC': 'O',\n        '\\u00D8': 'O',\n        '\\u01FE': 'O',\n        '\\u0186': 'O',\n        '\\u019F': 'O',\n        '\\uA74A': 'O',\n        '\\uA74C': 'O',\n        '\\u01A2': 'OI',\n        '\\uA74E': 'OO',\n        '\\u0222': 'OU',\n        '\\u24C5': 'P',\n        '\\uFF30': 'P',\n        '\\u1E54': 'P',\n        '\\u1E56': 'P',\n        '\\u01A4': 'P',\n        '\\u2C63': 'P',\n        '\\uA750': 'P',\n        '\\uA752': 'P',\n        '\\uA754': 'P',\n        '\\u24C6': 'Q',\n        '\\uFF31': 'Q',\n        '\\uA756': 'Q',\n        '\\uA758': 'Q',\n        '\\u024A': 'Q',\n        '\\u24C7': 'R',\n        '\\uFF32': 'R',\n        '\\u0154': 'R',\n        '\\u1E58': 'R',\n        '\\u0158': 'R',\n        '\\u0210': 'R',\n        '\\u0212': 'R',\n        '\\u1E5A': 'R',\n        '\\u1E5C': 'R',\n        '\\u0156': 'R',\n        '\\u1E5E': 'R',\n        '\\u024C': 'R',\n        '\\u2C64': 'R',\n        '\\uA75A': 'R',\n        '\\uA7A6': 'R',\n        '\\uA782': 'R',\n        '\\u24C8': 'S',\n        '\\uFF33': 'S',\n        '\\u1E9E': 'S',\n        '\\u015A': 'S',\n        '\\u1E64': 'S',\n        '\\u015C': 'S',\n        '\\u1E60': 'S',\n        '\\u0160': 'S',\n        '\\u1E66': 'S',\n        '\\u1E62': 'S',\n        '\\u1E68': 'S',\n        '\\u0218': 'S',\n        '\\u015E': 'S',\n        '\\u2C7E': 'S',\n        '\\uA7A8': 'S',\n        '\\uA784': 'S',\n        '\\u24C9': 'T',\n        '\\uFF34': 'T',\n        '\\u1E6A': 'T',\n        '\\u0164': 'T',\n        '\\u1E6C': 'T',\n        '\\u021A': 'T',\n        '\\u0162': 'T',\n        '\\u1E70': 'T',\n        '\\u1E6E': 'T',\n        '\\u0166': 'T',\n        '\\u01AC': 'T',\n        '\\u01AE': 'T',\n        '\\u023E': 'T',\n        '\\uA786': 'T',\n        '\\uA728': 'TZ',\n        '\\u24CA': 'U',\n        '\\uFF35': 'U',\n        '\\u00D9': 'U',\n        '\\u00DA': 'U',\n        '\\u00DB': 'U',\n        '\\u0168': 'U',\n        '\\u1E78': 'U',\n        '\\u016A': 'U',\n        '\\u1E7A': 'U',\n        '\\u016C': 'U',\n        '\\u00DC': 'U',\n        '\\u01DB': 'U',\n        '\\u01D7': 'U',\n        '\\u01D5': 'U',\n        '\\u01D9': 'U',\n        '\\u1EE6': 'U',\n        '\\u016E': 'U',\n        '\\u0170': 'U',\n        '\\u01D3': 'U',\n        '\\u0214': 'U',\n        '\\u0216': 'U',\n        '\\u01AF': 'U',\n        '\\u1EEA': 'U',\n        '\\u1EE8': 'U',\n        '\\u1EEE': 'U',\n        '\\u1EEC': 'U',\n        '\\u1EF0': 'U',\n        '\\u1EE4': 'U',\n        '\\u1E72': 'U',\n        '\\u0172': 'U',\n        '\\u1E76': 'U',\n        '\\u1E74': 'U',\n        '\\u0244': 'U',\n        '\\u24CB': 'V',\n        '\\uFF36': 'V',\n        '\\u1E7C': 'V',\n        '\\u1E7E': 'V',\n        '\\u01B2': 'V',\n        '\\uA75E': 'V',\n        '\\u0245': 'V',\n        '\\uA760': 'VY',\n        '\\u24CC': 'W',\n        '\\uFF37': 'W',\n        '\\u1E80': 'W',\n        '\\u1E82': 'W',\n        '\\u0174': 'W',\n        '\\u1E86': 'W',\n        '\\u1E84': 'W',\n        '\\u1E88': 'W',\n        '\\u2C72': 'W',\n        '\\u24CD': 'X',\n        '\\uFF38': 'X',\n        '\\u1E8A': 'X',\n        '\\u1E8C': 'X',\n        '\\u24CE': 'Y',\n        '\\uFF39': 'Y',\n        '\\u1EF2': 'Y',\n        '\\u00DD': 'Y',\n        '\\u0176': 'Y',\n        '\\u1EF8': 'Y',\n        '\\u0232': 'Y',\n        '\\u1E8E': 'Y',\n        '\\u0178': 'Y',\n        '\\u1EF6': 'Y',\n        '\\u1EF4': 'Y',\n        '\\u01B3': 'Y',\n        '\\u024E': 'Y',\n        '\\u1EFE': 'Y',\n        '\\u24CF': 'Z',\n        '\\uFF3A': 'Z',\n        '\\u0179': 'Z',\n        '\\u1E90': 'Z',\n        '\\u017B': 'Z',\n        '\\u017D': 'Z',\n        '\\u1E92': 'Z',\n        '\\u1E94': 'Z',\n        '\\u01B5': 'Z',\n        '\\u0224': 'Z',\n        '\\u2C7F': 'Z',\n        '\\u2C6B': 'Z',\n        '\\uA762': 'Z',\n        '\\u24D0': 'a',\n        '\\uFF41': 'a',\n        '\\u1E9A': 'a',\n        '\\u00E0': 'a',\n        '\\u00E1': 'a',\n        '\\u00E2': 'a',\n        '\\u1EA7': 'a',\n        '\\u1EA5': 'a',\n        '\\u1EAB': 'a',\n        '\\u1EA9': 'a',\n        '\\u00E3': 'a',\n        '\\u0101': 'a',\n        '\\u0103': 'a',\n        '\\u1EB1': 'a',\n        '\\u1EAF': 'a',\n        '\\u1EB5': 'a',\n        '\\u1EB3': 'a',\n        '\\u0227': 'a',\n        '\\u01E1': 'a',\n        '\\u00E4': 'a',\n        '\\u01DF': 'a',\n        '\\u1EA3': 'a',\n        '\\u00E5': 'a',\n        '\\u01FB': 'a',\n        '\\u01CE': 'a',\n        '\\u0201': 'a',\n        '\\u0203': 'a',\n        '\\u1EA1': 'a',\n        '\\u1EAD': 'a',\n        '\\u1EB7': 'a',\n        '\\u1E01': 'a',\n        '\\u0105': 'a',\n        '\\u2C65': 'a',\n        '\\u0250': 'a',\n        '\\uA733': 'aa',\n        '\\u00E6': 'ae',\n        '\\u01FD': 'ae',\n        '\\u01E3': 'ae',\n        '\\uA735': 'ao',\n        '\\uA737': 'au',\n        '\\uA739': 'av',\n        '\\uA73B': 'av',\n        '\\uA73D': 'ay',\n        '\\u24D1': 'b',\n        '\\uFF42': 'b',\n        '\\u1E03': 'b',\n        '\\u1E05': 'b',\n        '\\u1E07': 'b',\n        '\\u0180': 'b',\n        '\\u0183': 'b',\n        '\\u0253': 'b',\n        '\\u24D2': 'c',\n        '\\uFF43': 'c',\n        '\\u0107': 'c',\n        '\\u0109': 'c',\n        '\\u010B': 'c',\n        '\\u010D': 'c',\n        '\\u00E7': 'c',\n        '\\u1E09': 'c',\n        '\\u0188': 'c',\n        '\\u023C': 'c',\n        '\\uA73F': 'c',\n        '\\u2184': 'c',\n        '\\u24D3': 'd',\n        '\\uFF44': 'd',\n        '\\u1E0B': 'd',\n        '\\u010F': 'd',\n        '\\u1E0D': 'd',\n        '\\u1E11': 'd',\n        '\\u1E13': 'd',\n        '\\u1E0F': 'd',\n        '\\u0111': 'd',\n        '\\u018C': 'd',\n        '\\u0256': 'd',\n        '\\u0257': 'd',\n        '\\uA77A': 'd',\n        '\\u01F3': 'dz',\n        '\\u01C6': 'dz',\n        '\\u24D4': 'e',\n        '\\uFF45': 'e',\n        '\\u00E8': 'e',\n        '\\u00E9': 'e',\n        '\\u00EA': 'e',\n        '\\u1EC1': 'e',\n        '\\u1EBF': 'e',\n        '\\u1EC5': 'e',\n        '\\u1EC3': 'e',\n        '\\u1EBD': 'e',\n        '\\u0113': 'e',\n        '\\u1E15': 'e',\n        '\\u1E17': 'e',\n        '\\u0115': 'e',\n        '\\u0117': 'e',\n        '\\u00EB': 'e',\n        '\\u1EBB': 'e',\n        '\\u011B': 'e',\n        '\\u0205': 'e',\n        '\\u0207': 'e',\n        '\\u1EB9': 'e',\n        '\\u1EC7': 'e',\n        '\\u0229': 'e',\n        '\\u1E1D': 'e',\n        '\\u0119': 'e',\n        '\\u1E19': 'e',\n        '\\u1E1B': 'e',\n        '\\u0247': 'e',\n        '\\u025B': 'e',\n        '\\u01DD': 'e',\n        '\\u24D5': 'f',\n        '\\uFF46': 'f',\n        '\\u1E1F': 'f',\n        '\\u0192': 'f',\n        '\\uA77C': 'f',\n        '\\u24D6': 'g',\n        '\\uFF47': 'g',\n        '\\u01F5': 'g',\n        '\\u011D': 'g',\n        '\\u1E21': 'g',\n        '\\u011F': 'g',\n        '\\u0121': 'g',\n        '\\u01E7': 'g',\n        '\\u0123': 'g',\n        '\\u01E5': 'g',\n        '\\u0260': 'g',\n        '\\uA7A1': 'g',\n        '\\u1D79': 'g',\n        '\\uA77F': 'g',\n        '\\u24D7': 'h',\n        '\\uFF48': 'h',\n        '\\u0125': 'h',\n        '\\u1E23': 'h',\n        '\\u1E27': 'h',\n        '\\u021F': 'h',\n        '\\u1E25': 'h',\n        '\\u1E29': 'h',\n        '\\u1E2B': 'h',\n        '\\u1E96': 'h',\n        '\\u0127': 'h',\n        '\\u2C68': 'h',\n        '\\u2C76': 'h',\n        '\\u0265': 'h',\n        '\\u0195': 'hv',\n        '\\u24D8': 'i',\n        '\\uFF49': 'i',\n        '\\u00EC': 'i',\n        '\\u00ED': 'i',\n        '\\u00EE': 'i',\n        '\\u0129': 'i',\n        '\\u012B': 'i',\n        '\\u012D': 'i',\n        '\\u00EF': 'i',\n        '\\u1E2F': 'i',\n        '\\u1EC9': 'i',\n        '\\u01D0': 'i',\n        '\\u0209': 'i',\n        '\\u020B': 'i',\n        '\\u1ECB': 'i',\n        '\\u012F': 'i',\n        '\\u1E2D': 'i',\n        '\\u0268': 'i',\n        '\\u0131': 'i',\n        '\\u24D9': 'j',\n        '\\uFF4A': 'j',\n        '\\u0135': 'j',\n        '\\u01F0': 'j',\n        '\\u0249': 'j',\n        '\\u24DA': 'k',\n        '\\uFF4B': 'k',\n        '\\u1E31': 'k',\n        '\\u01E9': 'k',\n        '\\u1E33': 'k',\n        '\\u0137': 'k',\n        '\\u1E35': 'k',\n        '\\u0199': 'k',\n        '\\u2C6A': 'k',\n        '\\uA741': 'k',\n        '\\uA743': 'k',\n        '\\uA745': 'k',\n        '\\uA7A3': 'k',\n        '\\u24DB': 'l',\n        '\\uFF4C': 'l',\n        '\\u0140': 'l',\n        '\\u013A': 'l',\n        '\\u013E': 'l',\n        '\\u1E37': 'l',\n        '\\u1E39': 'l',\n        '\\u013C': 'l',\n        '\\u1E3D': 'l',\n        '\\u1E3B': 'l',\n        '\\u017F': 'l',\n        '\\u0142': 'l',\n        '\\u019A': 'l',\n        '\\u026B': 'l',\n        '\\u2C61': 'l',\n        '\\uA749': 'l',\n        '\\uA781': 'l',\n        '\\uA747': 'l',\n        '\\u01C9': 'lj',\n        '\\u24DC': 'm',\n        '\\uFF4D': 'm',\n        '\\u1E3F': 'm',\n        '\\u1E41': 'm',\n        '\\u1E43': 'm',\n        '\\u0271': 'm',\n        '\\u026F': 'm',\n        '\\u24DD': 'n',\n        '\\uFF4E': 'n',\n        '\\u01F9': 'n',\n        '\\u0144': 'n',\n        '\\u00F1': 'n',\n        '\\u1E45': 'n',\n        '\\u0148': 'n',\n        '\\u1E47': 'n',\n        '\\u0146': 'n',\n        '\\u1E4B': 'n',\n        '\\u1E49': 'n',\n        '\\u019E': 'n',\n        '\\u0272': 'n',\n        '\\u0149': 'n',\n        '\\uA791': 'n',\n        '\\uA7A5': 'n',\n        '\\u01CC': 'nj',\n        '\\u24DE': 'o',\n        '\\uFF4F': 'o',\n        '\\u00F2': 'o',\n        '\\u00F3': 'o',\n        '\\u00F4': 'o',\n        '\\u1ED3': 'o',\n        '\\u1ED1': 'o',\n        '\\u1ED7': 'o',\n        '\\u1ED5': 'o',\n        '\\u00F5': 'o',\n        '\\u1E4D': 'o',\n        '\\u022D': 'o',\n        '\\u1E4F': 'o',\n        '\\u014D': 'o',\n        '\\u1E51': 'o',\n        '\\u1E53': 'o',\n        '\\u014F': 'o',\n        '\\u022F': 'o',\n        '\\u0231': 'o',\n        '\\u00F6': 'o',\n        '\\u022B': 'o',\n        '\\u1ECF': 'o',\n        '\\u0151': 'o',\n        '\\u01D2': 'o',\n        '\\u020D': 'o',\n        '\\u020F': 'o',\n        '\\u01A1': 'o',\n        '\\u1EDD': 'o',\n        '\\u1EDB': 'o',\n        '\\u1EE1': 'o',\n        '\\u1EDF': 'o',\n        '\\u1EE3': 'o',\n        '\\u1ECD': 'o',\n        '\\u1ED9': 'o',\n        '\\u01EB': 'o',\n        '\\u01ED': 'o',\n        '\\u00F8': 'o',\n        '\\u01FF': 'o',\n        '\\u0254': 'o',\n        '\\uA74B': 'o',\n        '\\uA74D': 'o',\n        '\\u0275': 'o',\n        '\\u01A3': 'oi',\n        '\\u0223': 'ou',\n        '\\uA74F': 'oo',\n        '\\u24DF': 'p',\n        '\\uFF50': 'p',\n        '\\u1E55': 'p',\n        '\\u1E57': 'p',\n        '\\u01A5': 'p',\n        '\\u1D7D': 'p',\n        '\\uA751': 'p',\n        '\\uA753': 'p',\n        '\\uA755': 'p',\n        '\\u24E0': 'q',\n        '\\uFF51': 'q',\n        '\\u024B': 'q',\n        '\\uA757': 'q',\n        '\\uA759': 'q',\n        '\\u24E1': 'r',\n        '\\uFF52': 'r',\n        '\\u0155': 'r',\n        '\\u1E59': 'r',\n        '\\u0159': 'r',\n        '\\u0211': 'r',\n        '\\u0213': 'r',\n        '\\u1E5B': 'r',\n        '\\u1E5D': 'r',\n        '\\u0157': 'r',\n        '\\u1E5F': 'r',\n        '\\u024D': 'r',\n        '\\u027D': 'r',\n        '\\uA75B': 'r',\n        '\\uA7A7': 'r',\n        '\\uA783': 'r',\n        '\\u24E2': 's',\n        '\\uFF53': 's',\n        '\\u00DF': 's',\n        '\\u015B': 's',\n        '\\u1E65': 's',\n        '\\u015D': 's',\n        '\\u1E61': 's',\n        '\\u0161': 's',\n        '\\u1E67': 's',\n        '\\u1E63': 's',\n        '\\u1E69': 's',\n        '\\u0219': 's',\n        '\\u015F': 's',\n        '\\u023F': 's',\n        '\\uA7A9': 's',\n        '\\uA785': 's',\n        '\\u1E9B': 's',\n        '\\u24E3': 't',\n        '\\uFF54': 't',\n        '\\u1E6B': 't',\n        '\\u1E97': 't',\n        '\\u0165': 't',\n        '\\u1E6D': 't',\n        '\\u021B': 't',\n        '\\u0163': 't',\n        '\\u1E71': 't',\n        '\\u1E6F': 't',\n        '\\u0167': 't',\n        '\\u01AD': 't',\n        '\\u0288': 't',\n        '\\u2C66': 't',\n        '\\uA787': 't',\n        '\\uA729': 'tz',\n        '\\u24E4': 'u',\n        '\\uFF55': 'u',\n        '\\u00F9': 'u',\n        '\\u00FA': 'u',\n        '\\u00FB': 'u',\n        '\\u0169': 'u',\n        '\\u1E79': 'u',\n        '\\u016B': 'u',\n        '\\u1E7B': 'u',\n        '\\u016D': 'u',\n        '\\u00FC': 'u',\n        '\\u01DC': 'u',\n        '\\u01D8': 'u',\n        '\\u01D6': 'u',\n        '\\u01DA': 'u',\n        '\\u1EE7': 'u',\n        '\\u016F': 'u',\n        '\\u0171': 'u',\n        '\\u01D4': 'u',\n        '\\u0215': 'u',\n        '\\u0217': 'u',\n        '\\u01B0': 'u',\n        '\\u1EEB': 'u',\n        '\\u1EE9': 'u',\n        '\\u1EEF': 'u',\n        '\\u1EED': 'u',\n        '\\u1EF1': 'u',\n        '\\u1EE5': 'u',\n        '\\u1E73': 'u',\n        '\\u0173': 'u',\n        '\\u1E77': 'u',\n        '\\u1E75': 'u',\n        '\\u0289': 'u',\n        '\\u24E5': 'v',\n        '\\uFF56': 'v',\n        '\\u1E7D': 'v',\n        '\\u1E7F': 'v',\n        '\\u028B': 'v',\n        '\\uA75F': 'v',\n        '\\u028C': 'v',\n        '\\uA761': 'vy',\n        '\\u24E6': 'w',\n        '\\uFF57': 'w',\n        '\\u1E81': 'w',\n        '\\u1E83': 'w',\n        '\\u0175': 'w',\n        '\\u1E87': 'w',\n        '\\u1E85': 'w',\n        '\\u1E98': 'w',\n        '\\u1E89': 'w',\n        '\\u2C73': 'w',\n        '\\u24E7': 'x',\n        '\\uFF58': 'x',\n        '\\u1E8B': 'x',\n        '\\u1E8D': 'x',\n        '\\u24E8': 'y',\n        '\\uFF59': 'y',\n        '\\u1EF3': 'y',\n        '\\u00FD': 'y',\n        '\\u0177': 'y',\n        '\\u1EF9': 'y',\n        '\\u0233': 'y',\n        '\\u1E8F': 'y',\n        '\\u00FF': 'y',\n        '\\u1EF7': 'y',\n        '\\u1E99': 'y',\n        '\\u1EF5': 'y',\n        '\\u01B4': 'y',\n        '\\u024F': 'y',\n        '\\u1EFF': 'y',\n        '\\u24E9': 'z',\n        '\\uFF5A': 'z',\n        '\\u017A': 'z',\n        '\\u1E91': 'z',\n        '\\u017C': 'z',\n        '\\u017E': 'z',\n        '\\u1E93': 'z',\n        '\\u1E95': 'z',\n        '\\u01B6': 'z',\n        '\\u0225': 'z',\n        '\\u0240': 'z',\n        '\\u2C6C': 'z',\n        '\\uA763': 'z',\n        '\\u0386': '\\u0391',\n        '\\u0388': '\\u0395',\n        '\\u0389': '\\u0397',\n        '\\u038A': '\\u0399',\n        '\\u03AA': '\\u0399',\n        '\\u038C': '\\u039F',\n        '\\u038E': '\\u03A5',\n        '\\u03AB': '\\u03A5',\n        '\\u038F': '\\u03A9',\n        '\\u03AC': '\\u03B1',\n        '\\u03AD': '\\u03B5',\n        '\\u03AE': '\\u03B7',\n        '\\u03AF': '\\u03B9',\n        '\\u03CA': '\\u03B9',\n        '\\u0390': '\\u03B9',\n        '\\u03CC': '\\u03BF',\n        '\\u03CD': '\\u03C5',\n        '\\u03CB': '\\u03C5',\n        '\\u03B0': '\\u03C5',\n        '\\u03C9': '\\u03C9',\n        '\\u03C2': '\\u03C3'\n    };\n    DataUtil.fnOperators = {\n        /**\n         * Returns true when the actual input is equal to the given input.\n         * @param  {string|number|boolean} actual\n         * @param  {string|number|boolean} expected\n         * @param  {boolean} ignoreCase?\n         * @param  {boolean} ignoreAccent?\n         */\n        equal: function (actual, expected, ignoreCase, ignoreAccent) {\n            if (ignoreAccent) {\n                actual = DataUtil.ignoreDiacritics(actual);\n                expected = DataUtil.ignoreDiacritics(expected);\n            }\n            if (ignoreCase) {\n                return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n            }\n            return actual === expected;\n        },\n        /**\n         * Returns true when the actual input is not equal to the given input.\n         * @param  {string|number|boolean} actual\n         * @param  {string|number|boolean} expected\n         * @param  {boolean} ignoreCase?\n         */\n        notequal: function (actual, expected, ignoreCase, ignoreAccent) {\n            if (ignoreAccent) {\n                actual = DataUtil.ignoreDiacritics(actual);\n                expected = DataUtil.ignoreDiacritics(expected);\n            }\n            return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n        },\n        /**\n         * Returns true when the actual input is less than to the given input.\n         * @param  {string|number|boolean} actual\n         * @param  {string|number|boolean} expected\n         * @param  {boolean} ignoreCase?\n         */\n        lessthan: function (actual, expected, ignoreCase) {\n            if (ignoreCase) {\n                return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n            }\n            return actual < expected;\n        },\n        /**\n         * Returns true when the actual input is greater than to the given input.\n         * @param  {string|number|boolean} actual\n         * @param  {string|number|boolean} expected\n         * @param  {boolean} ignoreCase?\n         */\n        greaterthan: function (actual, expected, ignoreCase) {\n            if (ignoreCase) {\n                return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n            }\n            return actual > expected;\n        },\n        /**\n         * Returns true when the actual input is less than or equal to the given input.\n         * @param  {string|number|boolean} actual\n         * @param  {string|number|boolean} expected\n         * @param  {boolean} ignoreCase?\n         */\n        lessthanorequal: function (actual, expected, ignoreCase) {\n            if (ignoreCase) {\n                return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n            }\n            return actual <= expected;\n        },\n        /**\n         * Returns true when the actual input is greater than or equal to the given input.\n         * @param  {string|number|boolean} actual\n         * @param  {string|number|boolean} expected\n         * @param  {boolean} ignoreCase?\n         */\n        greaterthanorequal: function (actual, expected, ignoreCase) {\n            if (ignoreCase) {\n                return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n            }\n            return actual >= expected;\n        },\n        /**\n         * Returns true when the actual input contains the given string.\n         * @param  {string|number} actual\n         * @param  {string|number} expected\n         * @param  {boolean} ignoreCase?\n         */\n        contains: function (actual, expected, ignoreCase, ignoreAccent) {\n            if (ignoreAccent) {\n                actual = DataUtil.ignoreDiacritics(actual);\n                expected = DataUtil.ignoreDiacritics(expected);\n            }\n            if (ignoreCase) {\n                return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n                    DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n            }\n            return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n                actual.toString().indexOf(expected) !== -1;\n        },\n        /**\n         * Returns true when the given input value is not null.\n         * @param  {string|number} actual\n         * @returns boolean\n         */\n        notnull: function (actual) {\n            return actual !== null;\n        },\n        /**\n         * Returns true when the given input value is null.\n         * @param  {string|number} actual\n         * @returns boolean\n         */\n        isnull: function (actual) {\n            return actual === null;\n        },\n        /**\n         * Returns true when the actual input starts with the given string\n         * @param  {string} actual\n         * @param  {string} expected\n         * @param  {boolean} ignoreCase?\n         */\n        startswith: function (actual, expected, ignoreCase, ignoreAccent) {\n            if (ignoreAccent) {\n                actual = DataUtil.ignoreDiacritics(actual);\n                expected = DataUtil.ignoreDiacritics(expected);\n            }\n            if (ignoreCase) {\n                return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n            }\n            return actual && expected && DataUtil.startsWith(actual, expected);\n        },\n        /**\n         * Returns true when the actual input ends with the given string.\n         * @param  {string} actual\n         * @param  {string} expected\n         * @param  {boolean} ignoreCase?\n         */\n        endswith: function (actual, expected, ignoreCase, ignoreAccent) {\n            if (ignoreAccent) {\n                actual = DataUtil.ignoreDiacritics(actual);\n                expected = DataUtil.ignoreDiacritics(expected);\n            }\n            if (ignoreCase) {\n                return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n            }\n            return actual && expected && DataUtil.endsWith(actual, expected);\n        },\n        /**\n         * It will return the filter operator based on the filter symbol.\n         * @param  {string} operator\n         * @hidden\n         */\n        processSymbols: function (operator) {\n            var fnName = DataUtil.operatorSymbols[operator];\n            if (fnName) {\n                var fn = DataUtil.fnOperators[fnName];\n                return fn;\n            }\n            return DataUtil.throwError('Query - Process Operator : Invalid operator');\n        },\n        /**\n         * It will return the valid filter operator based on the specified operators.\n         * @param  {string} operator\n         * @hidden\n         */\n        processOperator: function (operator) {\n            var fn = DataUtil.fnOperators[operator];\n            if (fn) {\n                return fn;\n            }\n            return DataUtil.fnOperators.processSymbols(operator);\n        }\n    };\n    /**\n     * To perform the parse operation on JSON data, like convert to string from JSON or convert to JSON from string.\n     */\n    DataUtil.parse = {\n        /**\n         * Parse the given string to the plain JavaScript object.\n         * @param  {string|Object|Object[]} jsonText\n         */\n        parseJson: function (jsonText) {\n            if (typeof jsonText === 'string') {\n                jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n            }\n            else if (jsonText instanceof Array) {\n                DataUtil.parse.iterateAndReviveArray(jsonText);\n            }\n            else if (typeof jsonText === 'object' && jsonText !== null) {\n                DataUtil.parse.iterateAndReviveJson(jsonText);\n            }\n            return jsonText;\n        },\n        /**\n         * It will perform on array of values.\n         * @param  {string[]|Object[]} array\n         * @hidden\n         */\n        iterateAndReviveArray: function (array) {\n            for (var i = 0; i < array.length; i++) {\n                if (typeof array[i] === 'object' && array[i] !== null) {\n                    DataUtil.parse.iterateAndReviveJson(array[i]);\n                }\n                else if (typeof array[i] === 'string' && !/^[\\s]*\\[|^[\\s]*\\{(.)+:|\\\"/g.test(array[i])) {\n                    array[i] = DataUtil.parse.jsonReviver('', array[i]);\n                }\n                else {\n                    array[i] = DataUtil.parse.parseJson(array[i]);\n                }\n            }\n        },\n        /**\n         * It will perform on JSON values\n         * @param  {JSON} json\n         * @hidden\n         */\n        iterateAndReviveJson: function (json) {\n            var value;\n            var keys = Object.keys(json);\n            for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n                var prop = keys_2[_i];\n                if (DataUtil.startsWith(prop, '__')) {\n                    continue;\n                }\n                value = json[prop];\n                if (typeof value === 'object') {\n                    if (value instanceof Array) {\n                        DataUtil.parse.iterateAndReviveArray(value);\n                    }\n                    else if (value) {\n                        DataUtil.parse.iterateAndReviveJson(value);\n                    }\n                }\n                else {\n                    json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n                }\n            }\n        },\n        /**\n         * It will perform on JSON values\n         * @param  {string} field\n         * @param  {string|Date} value\n         * @hidden\n         */\n        jsonReviver: function (field, value) {\n            if (typeof value === 'string') {\n                var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n                var offSet = DataUtil.timeZoneHandling ? DataUtil.serverTimezoneOffset : null;\n                if (ms) {\n                    return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), offSet, true);\n                }\n                else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n                    var isUTC = value.indexOf('Z') > -1 || value.indexOf('z') > -1;\n                    var arr = value.split(/[^0-9.]/);\n                    if (isUTC) {\n                        value = DataUtil.dateParse\n                            .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), DataUtil.serverTimezoneOffset, false);\n                    }\n                    else {\n                        var utcFormat = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10));\n                        var hrs = parseInt(arr[6], 10);\n                        var mins = parseInt(arr[7], 10);\n                        if (isNaN(hrs) && isNaN(mins)) {\n                            return utcFormat;\n                        }\n                        if (value.indexOf('+') > -1) {\n                            utcFormat.setHours(utcFormat.getHours() - hrs, utcFormat.getMinutes() - mins);\n                        }\n                        else {\n                            utcFormat.setHours(utcFormat.getHours() + hrs, utcFormat.getMinutes() + mins);\n                        }\n                        value = DataUtil.dateParse\n                            .toTimeZone(utcFormat, DataUtil.serverTimezoneOffset, false);\n                    }\n                    if (DataUtil.serverTimezoneOffset == null) {\n                        value = DataUtil.dateParse.addSelfOffset(value);\n                    }\n                }\n            }\n            return value;\n        },\n        /**\n         * Check wheather the given value is JSON or not.\n         * @param  {Object[]} jsonData\n         */\n        isJson: function (jsonData) {\n            if (typeof jsonData[0] === 'string') {\n                return jsonData;\n            }\n            return DataUtil.parse.parseJson(jsonData);\n        },\n        /**\n         * Checks wheather the given value is GUID or not.\n         * @param  {string} value\n         */\n        isGuid: function (value) {\n            var regex = /[A-Fa-f0-9]{8}(?:-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}/i;\n            var match = regex.exec(value);\n            return match != null;\n        },\n        /**\n         * The method used to replace the value based on the type.\n         * @param  {Object} value\n         * @param  {boolean} stringify\n         * @hidden\n         */\n        replacer: function (value, stringify) {\n            if (DataUtil.isPlainObject(value)) {\n                return DataUtil.parse.jsonReplacer(value, stringify);\n            }\n            if (value instanceof Array) {\n                return DataUtil.parse.arrayReplacer(value);\n            }\n            if (value instanceof Date) {\n                return DataUtil.parse.jsonReplacer({ val: value }, stringify).val;\n            }\n            return value;\n        },\n        /**\n         * It will replace the JSON value.\n         * @param  {string} key\n         * @param  {Object} val\n         * @hidden\n         */\n        jsonReplacer: function (val, stringify) {\n            var value;\n            var keys = Object.keys(val);\n            for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n                var prop = keys_3[_i];\n                value = val[prop];\n                if (!(value instanceof Date)) {\n                    continue;\n                }\n                var d = value;\n                if (DataUtil.serverTimezoneOffset == null) {\n                    val[prop] = DataUtil.dateParse.toTimeZone(d, null).toJSON();\n                }\n                else {\n                    d = new Date(+d + DataUtil.serverTimezoneOffset * 3600000);\n                    val[prop] = DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(d), null).toJSON();\n                }\n            }\n            return val;\n        },\n        /**\n         * It will replace the Array of value.\n         * @param  {string} key\n         * @param  {Object[]} val\n         * @hidden\n         */\n        arrayReplacer: function (val) {\n            for (var i = 0; i < val.length; i++) {\n                if (DataUtil.isPlainObject(val[i])) {\n                    val[i] = DataUtil.parse.jsonReplacer(val[i]);\n                }\n                else if (val[i] instanceof Date) {\n                    val[i] = DataUtil.parse.jsonReplacer({ date: val[i] }).date;\n                }\n            }\n            return val;\n        },\n        /**\n         * It will replace the Date object with respective to UTC format value.\n         * @param  {string} key\n         * @param  {any} value\n         * @hidden\n         */\n        /* tslint:disable-next-line:no-any */\n        jsonDateReplacer: function (key, value) {\n            if (key === 'value' && value) {\n                if (typeof value === 'string') {\n                    var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n                    if (ms) {\n                        value = DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), null, true);\n                    }\n                    else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n                        var arr = value.split(/[^0-9]/);\n                        value = DataUtil.dateParse\n                            .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), null, true);\n                    }\n                }\n                if (value instanceof Date) {\n                    value = DataUtil.dateParse.addSelfOffset(value);\n                    if (DataUtil.serverTimezoneOffset === null) {\n                        return DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(value), null).toJSON();\n                    }\n                    else {\n                        value = DataUtil.dateParse.toTimeZone(value, (((value.getTimezoneOffset() / 60) * 2)\n                            - DataUtil.serverTimezoneOffset), false);\n                        return value.toJSON();\n                    }\n                }\n            }\n            return value;\n        }\n    };\n    /**\n     * @hidden\n     */\n    DataUtil.dateParse = {\n        addSelfOffset: function (input) {\n            return new Date(+input - (input.getTimezoneOffset() * 60000));\n        },\n        toUTC: function (input) {\n            return new Date(+input + (input.getTimezoneOffset() * 60000));\n        },\n        toTimeZone: function (input, offset, utc) {\n            if (offset === null) {\n                return input;\n            }\n            var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n            return new Date(+unix - (offset * 3600000));\n        },\n        toLocalTime: function (input) {\n            var datefn = input;\n            var timeZone = -datefn.getTimezoneOffset();\n            var differenceString = timeZone >= 0 ? '+' : '-';\n            var localtimefn = function (num) {\n                var norm = Math.floor(Math.abs(num));\n                return (norm < 10 ? '0' : '') + norm;\n            };\n            var val = datefn.getFullYear() + '-' + localtimefn(datefn.getMonth() + 1) + '-' + localtimefn(datefn.getDate()) +\n                'T' + localtimefn(datefn.getHours()) +\n                ':' + localtimefn(datefn.getMinutes()) +\n                ':' + localtimefn(datefn.getSeconds()) +\n                differenceString + localtimefn(timeZone / 60) +\n                ':' + localtimefn(timeZone % 60);\n            return val;\n        }\n    };\n    return DataUtil;\n}());\nexport { DataUtil };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_RIGHTOVERLAY = 'e-scroll-right-overlay';\nvar CLS_LEFTOVERLAY = 'e-scroll-left-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n * <div id=\"scroll\"/>\n * <script>\n *   var scrollObj = new HScroll();\n *   scrollObj.appendTo(\"#scroll\");\n * </script>\n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n    __extends(HScroll, _super);\n    /**\n     * Initializes a new instance of the HScroll class.\n     * @param options  - Specifies HScroll model properties as options.\n     * @param element  - Specifies the element for which horizontal scrolling applies.\n     */\n    function HScroll(options, element) {\n        return _super.call(this, options, element) || this;\n    }\n    /**\n     * Initialize the event handler\n     * @private\n     */\n    HScroll.prototype.preRender = function () {\n        this.browser = Browser.info.name;\n        this.browserCheck = this.browser === 'mozilla';\n        this.isDevice = Browser.isDevice;\n        this.customStep = true;\n        var element = this.element;\n        this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n        this.initialize();\n        if (element.id === '') {\n            element.id = getUniqueID('hscroll');\n            this.uniqueId = true;\n        }\n        element.style.display = 'block';\n        if (this.enableRtl) {\n            element.classList.add(CLS_RTL);\n        }\n    };\n    /**\n     * To Initialize the horizontal scroll  rendering\n     * @private\n     */\n    HScroll.prototype.render = function () {\n        this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n        EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n        if (!this.isDevice) {\n            this.createNavIcon(this.element);\n        }\n        else {\n            this.element.classList.add(CLS_DEVICE);\n            this.createOverlay(this.element);\n        }\n        this.setScrollState();\n    };\n    HScroll.prototype.setScrollState = function () {\n        if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n            this.scrollStep = this.scrollEle.offsetWidth;\n            this.customStep = false;\n        }\n        else {\n            this.customStep = true;\n        }\n    };\n    HScroll.prototype.initialize = function () {\n        var scrollEle = this.createElement('div', { className: CLS_HSCROLLCON });\n        var scrollDiv = this.createElement('div', { className: CLS_HSCROLLBAR });\n        scrollDiv.setAttribute('tabindex', '-1');\n        var ele = this.element;\n        var innerEle = [].slice.call(ele.children);\n        for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n            var ele_1 = innerEle_1[_i];\n            scrollEle.appendChild(ele_1);\n        }\n        scrollDiv.appendChild(scrollEle);\n        ele.appendChild(scrollDiv);\n        scrollDiv.style.overflowX = 'hidden';\n        this.scrollEle = scrollDiv;\n        this.scrollItems = scrollEle;\n    };\n    HScroll.prototype.getPersistData = function () {\n        var keyEntity = ['scrollStep'];\n        return this.addOnPersist(keyEntity);\n    };\n    /**\n     * Returns the current module name.\n     * @returns string\n     * @private\n     */\n    HScroll.prototype.getModuleName = function () {\n        return 'hScroll';\n    };\n    /**\n     * Removes the control from the DOM and also removes all its related events.\n     * @returns void\n     */\n    HScroll.prototype.destroy = function () {\n        var ele = this.element;\n        ele.style.display = '';\n        ele.classList.remove(CLS_ROOT);\n        ele.classList.remove(CLS_DEVICE);\n        var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n        var overlay = selectAll('.' + CLS_OVERLAY, ele);\n        [].slice.call(overlay).forEach(function (ele) {\n            detach(ele);\n        });\n        for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n            var elem = _a[_i];\n            ele.appendChild(elem);\n        }\n        if (this.uniqueId) {\n            this.element.removeAttribute('id');\n        }\n        detach(this.scrollEle);\n        if (nav.length > 0) {\n            detach(nav[0]);\n            if (!isNullOrUndefined(nav[1])) {\n                detach(nav[1]);\n            }\n        }\n        EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n        this.touchModule.destroy();\n        this.touchModule = null;\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * Specifies the value to disable/enable the HScroll component.\n     * When set to `true` , the component will be disabled.\n     * @param  {boolean} value - Based on this Boolean value, HScroll will be enabled (false) or disabled (true).\n     * @returns void.\n     */\n    HScroll.prototype.disable = function (value) {\n        var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n        value ? this.element.classList.add(CLS_DISABLE) : this.element.classList.remove(CLS_DISABLE);\n        [].slice.call(navEles).forEach(function (el) {\n            el.setAttribute('tabindex', !value ? '0' : '-1');\n        });\n    };\n    HScroll.prototype.createOverlay = function (element) {\n        var id = element.id.concat('_nav');\n        var rightOverlayEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_RIGHTOVERLAY });\n        var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n        var rightEle = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n        var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        rightEle.appendChild(navItem);\n        var leftEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_LEFTOVERLAY });\n        if (this.ieCheck) {\n            rightEle.classList.add('e-ie-align');\n        }\n        element.appendChild(rightOverlayEle);\n        element.appendChild(rightEle);\n        element.insertBefore(leftEle, element.firstChild);\n        this.eventBinding([rightEle]);\n    };\n    HScroll.prototype.createNavIcon = function (element) {\n        var id = element.id.concat('_nav');\n        var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n        var nav = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n        nav.setAttribute('aria-disabled', 'false');\n        var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n        var navEle = this.createElement('div', { id: id.concat('_left'), className: clsLeft + ' ' + CLS_DISABLE });\n        navEle.setAttribute('aria-disabled', 'true');\n        var navLeftItem = this.createElement('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        navEle.appendChild(navLeftItem);\n        nav.appendChild(navItem);\n        element.appendChild(nav);\n        element.insertBefore(navEle, element.firstChild);\n        if (this.ieCheck) {\n            nav.classList.add('e-ie-align');\n            navEle.classList.add('e-ie-align');\n        }\n        this.eventBinding([nav, navEle]);\n    };\n    HScroll.prototype.onKeyPress = function (e) {\n        var _this = this;\n        if (e.key === 'Enter') {\n            var timeoutFun_1 = function () {\n                _this.keyTimeout = true;\n                _this.eleScrolling(10, e.target, true);\n            };\n            this.keyTimer = window.setTimeout(function () {\n                timeoutFun_1();\n            }, 100);\n        }\n    };\n    HScroll.prototype.onKeyUp = function (e) {\n        if (e.key !== 'Enter') {\n            return;\n        }\n        if (this.keyTimeout) {\n            this.keyTimeout = false;\n        }\n        else {\n            e.target.click();\n        }\n        clearTimeout(this.keyTimer);\n    };\n    HScroll.prototype.eventBinding = function (ele) {\n        var _this = this;\n        [].slice.call(ele).forEach(function (el) {\n            new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n            el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n            el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n            el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n            el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n            el.addEventListener('contextmenu', function (e) {\n                e.preventDefault();\n            });\n            EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n        });\n    };\n    HScroll.prototype.repeatScroll = function () {\n        clearInterval(this.timeout);\n    };\n    HScroll.prototype.tabHoldHandler = function (e) {\n        var _this = this;\n        var trgt = e.originalEvent.target;\n        trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n        var scrollDis = 10;\n        var timeoutFun = function () {\n            _this.eleScrolling(scrollDis, trgt, true);\n        };\n        this.timeout = window.setInterval(function () {\n            timeoutFun();\n        }, 50);\n    };\n    HScroll.prototype.contains = function (ele, className) {\n        return ele.classList.contains(className);\n    };\n    HScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n        var element = this.scrollEle;\n        var rootEle = this.element;\n        var classList = trgt.classList;\n        if (classList.contains(CLS_HSCROLLNAV)) {\n            classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n        }\n        if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n            scrollDis = -scrollDis;\n        }\n        var scrlLeft = element.scrollLeft;\n        if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n            if (classList.contains(CLS_NAVRIGHTARROW)) {\n                this.frameScrollRequest(scrollDis, 'add', isContinuous);\n            }\n            else {\n                this.frameScrollRequest(scrollDis, '', isContinuous);\n            }\n        }\n        else {\n            if (classList.contains(CLS_NAVLEFTARROW)) {\n                this.frameScrollRequest(scrollDis, 'add', isContinuous);\n            }\n            else {\n                this.frameScrollRequest(scrollDis, '', isContinuous);\n            }\n        }\n    };\n    HScroll.prototype.clickEventHandler = function (e) {\n        this.eleScrolling(this.scrollStep, e.target, false);\n    };\n    HScroll.prototype.swipeHandler = function (e) {\n        var swipeEle = this.scrollEle;\n        var distance;\n        if (e.velocity <= 1) {\n            distance = e.distanceX / (e.velocity * 10);\n        }\n        else {\n            distance = e.distanceX / e.velocity;\n        }\n        var start = 0.5;\n        var animate = function () {\n            var step = Math.sin(start);\n            if (step <= 0) {\n                window.cancelAnimationFrame(step);\n            }\n            else {\n                if (e.swipeDirection === 'Left') {\n                    swipeEle.scrollLeft += distance * step;\n                }\n                else if (e.swipeDirection === 'Right') {\n                    swipeEle.scrollLeft -= distance * step;\n                }\n                start -= 0.5;\n                window.requestAnimationFrame(animate);\n            }\n        };\n        animate();\n    };\n    HScroll.prototype.scrollUpdating = function (scrollVal, action) {\n        if (action === 'add') {\n            this.scrollEle.scrollLeft += scrollVal;\n        }\n        else {\n            this.scrollEle.scrollLeft -= scrollVal;\n        }\n    };\n    HScroll.prototype.frameScrollRequest = function (scrollVal, action, isContinuous) {\n        var _this = this;\n        var step = 10;\n        if (isContinuous) {\n            this.scrollUpdating(scrollVal, action);\n            return;\n        }\n        if (!this.customStep) {\n            [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n                scrollVal -= el.offsetWidth;\n            });\n        }\n        var animate = function () {\n            var scrollValue;\n            var scrollStep;\n            if (_this.contains(_this.element, CLS_RTL) && _this.browserCheck) {\n                scrollValue = -scrollVal;\n                scrollStep = -step;\n            }\n            else {\n                scrollValue = scrollVal;\n                scrollStep = step;\n            }\n            if (scrollValue < step) {\n                window.cancelAnimationFrame(scrollStep);\n            }\n            else {\n                _this.scrollUpdating(scrollStep, action);\n                scrollVal -= scrollStep;\n                window.requestAnimationFrame(animate);\n            }\n        };\n        animate();\n    };\n    HScroll.prototype.touchHandler = function (e) {\n        var ele = this.scrollEle;\n        var distance;\n        distance = e.distanceX;\n        if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n            distance = -distance;\n        }\n        if (e.scrollDirection === 'Left') {\n            ele.scrollLeft = ele.scrollLeft + distance;\n        }\n        else if (e.scrollDirection === 'Right') {\n            ele.scrollLeft = ele.scrollLeft - distance;\n        }\n    };\n    HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n        if (this.isDevice) {\n            var arrowEle = isNullOrUndefined(addDisable) ? removeDisable : addDisable;\n            var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n            if (isNullOrUndefined(addDisable)) {\n                classList(arrowIcon, [CLS_NAVRIGHTARROW], [CLS_NAVLEFTARROW]);\n            }\n            else {\n                classList(arrowIcon, [CLS_NAVLEFTARROW], [CLS_NAVRIGHTARROW]);\n            }\n        }\n        else {\n            addDisable.classList.add(CLS_DISABLE);\n            addDisable.setAttribute('aria-disabled', 'true');\n            addDisable.removeAttribute('tabindex');\n            removeDisable.classList.remove(CLS_DISABLE);\n            removeDisable.setAttribute('aria-disabled', 'false');\n            removeDisable.setAttribute('tabindex', '0');\n        }\n        this.repeatScroll();\n    };\n    HScroll.prototype.scrollHandler = function (e) {\n        var target = e.target;\n        var width = target.offsetWidth;\n        var rootEle = this.element;\n        var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n        var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n        var leftOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n        var rightOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n        var scrollLeft = target.scrollLeft;\n        if (scrollLeft <= 0) {\n            scrollLeft = -scrollLeft;\n        }\n        if (this.isDevice) {\n            if (this.enableRtl && !(this.browserCheck || this.ieCheck)) {\n                leftOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n                rightOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n            }\n            if (scrollLeft < OVERLAY_MAXWID) {\n                leftOverlay.style.width = scrollLeft + 'px';\n            }\n            else {\n                leftOverlay.style.width = '40px';\n            }\n            if ((target.scrollWidth - Math.ceil(width + scrollLeft)) < OVERLAY_MAXWID) {\n                rightOverlay.style.width = (target.scrollWidth - Math.ceil(width + scrollLeft)) + 'px';\n            }\n            else {\n                rightOverlay.style.width = '40px';\n            }\n        }\n        if (scrollLeft === 0) {\n            if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n                this.arrowDisabling(navLeftEle, navRightEle);\n            }\n            else {\n                this.arrowDisabling(navRightEle, navLeftEle);\n            }\n        }\n        else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n            if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n                this.arrowDisabling(navRightEle, navLeftEle);\n            }\n            else {\n                this.arrowDisabling(navLeftEle, navRightEle);\n            }\n        }\n        else {\n            var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n            if (disEle) {\n                disEle.classList.remove(CLS_DISABLE);\n                disEle.setAttribute('aria-disabled', 'false');\n                disEle.setAttribute('tabindex', '0');\n            }\n        }\n    };\n    /**\n     * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n     * @param  {HScrollModel} newProp\n     * @param  {HScrollModel} oldProp\n     * @returns void\n     * @private\n     */\n    HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'scrollStep':\n                    this.setScrollState();\n                    break;\n                case 'enableRtl':\n                    newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n                    break;\n            }\n        }\n    };\n    __decorate([\n        Property(null)\n    ], HScroll.prototype, \"scrollStep\", void 0);\n    HScroll = __decorate([\n        NotifyPropertyChanges\n    ], HScroll);\n    return HScroll;\n}(Component));\nexport { HScroll };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID, removeClass } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach, createElement as buildTag } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-vscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_VSCROLLBAR = 'e-vscroll-bar';\nvar CLS_VSCROLLCON = 'e-vscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVUPARROW = 'e-nav-up-arrow';\nvar CLS_NAVDOWNARROW = 'e-nav-down-arrow';\nvar CLS_VSCROLLNAV = 'e-scroll-nav';\nvar CLS_VSCROLLNAVUP = 'e-scroll-up-nav';\nvar CLS_VSCROLLNAVDOWN = 'e-scroll-down-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_UPOVERLAY = 'e-scroll-up-overlay';\nvar CLS_DOWNOVERLAY = 'e-scroll-down-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * VScroll module is introduces vertical scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs vertical scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n * <div id=\"scroll\"/>\n * <script>\n *   var scrollObj = new VScroll();\n *   scrollObj.appendTo(\"#scroll\");\n * </script>\n * ```\n */\nvar VScroll = /** @class */ (function (_super) {\n    __extends(VScroll, _super);\n    /**\n     * Initializes a new instance of the VScroll class.\n     * @param options  - Specifies VScroll model properties as options.\n     * @param element  - Specifies the element for which vertical scrolling applies.\n     */\n    function VScroll(options, element) {\n        return _super.call(this, options, element) || this;\n    }\n    /**\n     * Initialize the event handler\n     * @private\n     */\n    VScroll.prototype.preRender = function () {\n        this.browser = Browser.info.name;\n        this.browserCheck = this.browser === 'mozilla';\n        this.isDevice = Browser.isDevice;\n        this.customStep = true;\n        var ele = this.element;\n        this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n        this.initialize();\n        if (ele.id === '') {\n            ele.id = getUniqueID('vscroll');\n            this.uniqueId = true;\n        }\n        ele.style.display = 'block';\n        if (this.enableRtl) {\n            ele.classList.add(CLS_RTL);\n        }\n    };\n    /**\n     * To Initialize the vertical scroll rendering\n     * @private\n     */\n    VScroll.prototype.render = function () {\n        this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n        EventHandler.add(this.scrollEle, 'scroll', this.scrollEventHandler, this);\n        if (!this.isDevice) {\n            this.createNavIcon(this.element);\n        }\n        else {\n            this.element.classList.add(CLS_DEVICE);\n            this.createOverlayElement(this.element);\n        }\n        this.setScrollState();\n        EventHandler.add(this.element, 'wheel', this.wheelEventHandler, this);\n    };\n    VScroll.prototype.setScrollState = function () {\n        if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n            this.scrollStep = this.scrollEle.offsetHeight;\n            this.customStep = false;\n        }\n        else {\n            this.customStep = true;\n        }\n    };\n    VScroll.prototype.initialize = function () {\n        var scrollCnt = buildTag('div', { className: CLS_VSCROLLCON });\n        var scrollBar = buildTag('div', { className: CLS_VSCROLLBAR });\n        scrollBar.setAttribute('tabindex', '-1');\n        var ele = this.element;\n        var innerEle = [].slice.call(ele.children);\n        for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n            var ele_1 = innerEle_1[_i];\n            scrollCnt.appendChild(ele_1);\n        }\n        scrollBar.appendChild(scrollCnt);\n        ele.appendChild(scrollBar);\n        scrollBar.style.overflowY = 'hidden';\n        this.scrollEle = scrollBar;\n        this.scrollItems = scrollCnt;\n    };\n    VScroll.prototype.getPersistData = function () {\n        var keyEntity = ['scrollStep'];\n        return this.addOnPersist(keyEntity);\n    };\n    /**\n     * Returns the current module name.\n     * @returns string\n     * @private\n     */\n    VScroll.prototype.getModuleName = function () {\n        return 'vScroll';\n    };\n    /**\n     * Removes the control from the DOM and also removes all its related events.\n     * @returns void\n     */\n    VScroll.prototype.destroy = function () {\n        var el = this.element;\n        el.style.display = '';\n        removeClass([this.element], [CLS_ROOT, CLS_DEVICE]);\n        var navs = selectAll('.e-' + el.id + '_nav.' + CLS_VSCROLLNAV, el);\n        var overlays = selectAll('.' + CLS_OVERLAY, el);\n        [].slice.call(overlays).forEach(function (ele) {\n            detach(ele);\n        });\n        for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n            var elem = _a[_i];\n            el.appendChild(elem);\n        }\n        if (this.uniqueId) {\n            this.element.removeAttribute('id');\n        }\n        detach(this.scrollEle);\n        if (navs.length > 0) {\n            detach(navs[0]);\n            if (!isNullOrUndefined(navs[1])) {\n                detach(navs[1]);\n            }\n        }\n        EventHandler.remove(this.scrollEle, 'scroll', this.scrollEventHandler);\n        this.touchModule.destroy();\n        this.touchModule = null;\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * Specifies the value to disable/enable the VScroll component.\n     * When set to `true` , the component will be disabled.\n     * @param  {boolean} value - Based on this Boolean value, VScroll will be enabled (false) or disabled (true).\n     * @returns void.\n     */\n    VScroll.prototype.disable = function (value) {\n        var navEle = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n        value ? this.element.classList.add(CLS_DISABLE) : this.element.classList.remove(CLS_DISABLE);\n        [].slice.call(navEle).forEach(function (el) {\n            el.setAttribute('tabindex', !value ? '0' : '-1');\n        });\n    };\n    VScroll.prototype.createOverlayElement = function (element) {\n        var id = element.id.concat('_nav');\n        var downOverlayEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_DOWNOVERLAY });\n        var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n        var downEle = buildTag('div', { id: id.concat('down'), className: clsDown });\n        var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        downEle.appendChild(navItem);\n        var upEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_UPOVERLAY });\n        if (this.ieCheck) {\n            downEle.classList.add('e-ie-align');\n        }\n        element.appendChild(downOverlayEle);\n        element.appendChild(downEle);\n        element.insertBefore(upEle, element.firstChild);\n        this.eventBinding([downEle]);\n    };\n    VScroll.prototype.createNavIcon = function (element) {\n        var id = element.id.concat('_nav');\n        var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n        var nav = buildTag('div', { id: id.concat('_down'), className: clsDown });\n        nav.setAttribute('aria-disabled', 'false');\n        var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        var clsUp = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVUP);\n        var navElement = buildTag('div', { id: id.concat('_up'), className: clsUp + ' ' + CLS_DISABLE });\n        navElement.setAttribute('aria-disabled', 'true');\n        var navUpItem = buildTag('div', { className: CLS_NAVUPARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        navElement.appendChild(navUpItem);\n        nav.appendChild(navItem);\n        nav.setAttribute('tabindex', '0');\n        element.appendChild(nav);\n        element.insertBefore(navElement, element.firstChild);\n        if (this.ieCheck) {\n            nav.classList.add('e-ie-align');\n            navElement.classList.add('e-ie-align');\n        }\n        this.eventBinding([nav, navElement]);\n    };\n    VScroll.prototype.onKeyPress = function (ev) {\n        var _this = this;\n        if (ev.key === 'Enter') {\n            var timeoutFun_1 = function () {\n                _this.keyTimeout = true;\n                _this.eleScrolling(10, ev.target, true);\n            };\n            this.keyTimer = window.setTimeout(function () { timeoutFun_1(); }, 100);\n        }\n    };\n    VScroll.prototype.onKeyUp = function (ev) {\n        if (ev.key !== 'Enter') {\n            return;\n        }\n        if (this.keyTimeout) {\n            this.keyTimeout = false;\n        }\n        else {\n            ev.target.click();\n        }\n        clearTimeout(this.keyTimer);\n    };\n    VScroll.prototype.eventBinding = function (element) {\n        var _this = this;\n        [].slice.call(element).forEach(function (ele) {\n            new Touch(ele, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n            ele.addEventListener('keydown', _this.onKeyPress.bind(_this));\n            ele.addEventListener('keyup', _this.onKeyUp.bind(_this));\n            ele.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n            ele.addEventListener('touchend', _this.repeatScroll.bind(_this));\n            ele.addEventListener('contextmenu', function (e) {\n                e.preventDefault();\n            });\n            EventHandler.add(ele, 'click', _this.clickEventHandler, _this);\n        });\n    };\n    VScroll.prototype.repeatScroll = function () {\n        clearInterval(this.timeout);\n    };\n    VScroll.prototype.tabHoldHandler = function (ev) {\n        var _this = this;\n        var trgt = ev.originalEvent.target;\n        trgt = this.contains(trgt, CLS_VSCROLLNAV) ? trgt.firstElementChild : trgt;\n        var scrollDistance = 10;\n        var timeoutFun = function () {\n            _this.eleScrolling(scrollDistance, trgt, true);\n        };\n        this.timeout = window.setInterval(function () { timeoutFun(); }, 50);\n    };\n    VScroll.prototype.contains = function (element, className) {\n        return element.classList.contains(className);\n    };\n    VScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n        var rootElement = this.element;\n        var classList = trgt.classList;\n        if (classList.contains(CLS_VSCROLLNAV)) {\n            classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n        }\n        if (classList.contains(CLS_NAVDOWNARROW)) {\n            this.frameScrollRequest(scrollDis, 'add', isContinuous);\n        }\n        else if (classList.contains(CLS_NAVUPARROW)) {\n            this.frameScrollRequest(scrollDis, '', isContinuous);\n        }\n    };\n    VScroll.prototype.clickEventHandler = function (event) {\n        this.eleScrolling(this.scrollStep, event.target, false);\n    };\n    VScroll.prototype.wheelEventHandler = function (e) {\n        e.preventDefault();\n        this.frameScrollRequest(this.scrollStep, (e.deltaY > 0 ? 'add' : ''), false);\n    };\n    VScroll.prototype.swipeHandler = function (e) {\n        var swipeElement = this.scrollEle;\n        var distance;\n        if (e.velocity <= 1) {\n            distance = e.distanceY / (e.velocity * 10);\n        }\n        else {\n            distance = e.distanceY / e.velocity;\n        }\n        var start = 0.5;\n        var animate = function () {\n            var step = Math.sin(start);\n            if (step <= 0) {\n                window.cancelAnimationFrame(step);\n            }\n            else {\n                if (e.swipeDirection === 'Up') {\n                    swipeElement.scrollTop += distance * step;\n                }\n                else if (e.swipeDirection === 'Down') {\n                    swipeElement.scrollTop -= distance * step;\n                }\n                start -= 0.02;\n                window.requestAnimationFrame(animate);\n            }\n        };\n        animate();\n    };\n    VScroll.prototype.scrollUpdating = function (scrollVal, action) {\n        if (action === 'add') {\n            this.scrollEle.scrollTop += scrollVal;\n        }\n        else {\n            this.scrollEle.scrollTop -= scrollVal;\n        }\n    };\n    VScroll.prototype.frameScrollRequest = function (scrollValue, action, isContinuous) {\n        var _this = this;\n        var step = 10;\n        if (isContinuous) {\n            this.scrollUpdating(scrollValue, action);\n            return;\n        }\n        if (!this.customStep) {\n            [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n                scrollValue -= el.offsetHeight;\n            });\n        }\n        var animate = function () {\n            if (scrollValue < step) {\n                window.cancelAnimationFrame(step);\n            }\n            else {\n                _this.scrollUpdating(step, action);\n                scrollValue -= step;\n                window.requestAnimationFrame(animate);\n            }\n        };\n        animate();\n    };\n    VScroll.prototype.touchHandler = function (e) {\n        var el = this.scrollEle;\n        var distance;\n        distance = e.distanceY;\n        if (e.scrollDirection === 'Up') {\n            el.scrollTop = el.scrollTop + distance;\n        }\n        else if (e.scrollDirection === 'Down') {\n            el.scrollTop = el.scrollTop - distance;\n        }\n    };\n    VScroll.prototype.arrowDisabling = function (addDisableCls, removeDisableCls) {\n        if (this.isDevice) {\n            var arrowEle = isNullOrUndefined(addDisableCls) ? removeDisableCls : addDisableCls;\n            var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n            if (isNullOrUndefined(addDisableCls)) {\n                classList(arrowIcon, [CLS_NAVDOWNARROW], [CLS_NAVUPARROW]);\n            }\n            else {\n                classList(arrowIcon, [CLS_NAVUPARROW], [CLS_NAVDOWNARROW]);\n            }\n        }\n        else {\n            addDisableCls.classList.add(CLS_DISABLE);\n            addDisableCls.setAttribute('aria-disabled', 'true');\n            addDisableCls.removeAttribute('tabindex');\n            removeDisableCls.classList.remove(CLS_DISABLE);\n            removeDisableCls.setAttribute('aria-disabled', 'false');\n            removeDisableCls.setAttribute('tabindex', '0');\n        }\n        this.repeatScroll();\n    };\n    VScroll.prototype.scrollEventHandler = function (e) {\n        var target = e.target;\n        var height = target.offsetHeight;\n        var rootEle = this.element;\n        var navUpEle = this.element.querySelector('.' + CLS_VSCROLLNAVUP);\n        var navDownEle = this.element.querySelector('.' + CLS_VSCROLLNAVDOWN);\n        var upOverlay = this.element.querySelector('.' + CLS_UPOVERLAY);\n        var downOverlay = this.element.querySelector('.' + CLS_DOWNOVERLAY);\n        var scrollTop = target.scrollTop;\n        if (scrollTop <= 0) {\n            scrollTop = -scrollTop;\n        }\n        if (this.isDevice) {\n            if (scrollTop < OVERLAY_MAXWID) {\n                upOverlay.style.height = scrollTop + 'px';\n            }\n            else {\n                upOverlay.style.height = '40px';\n            }\n            if ((target.scrollHeight - Math.ceil(height + scrollTop)) < OVERLAY_MAXWID) {\n                downOverlay.style.height = (target.scrollHeight - Math.ceil(height + scrollTop)) + 'px';\n            }\n            else {\n                downOverlay.style.height = '40px';\n            }\n        }\n        if (scrollTop === 0) {\n            this.arrowDisabling(navUpEle, navDownEle);\n        }\n        else if (Math.ceil(height + scrollTop + .1) >= target.scrollHeight) {\n            this.arrowDisabling(navDownEle, navUpEle);\n        }\n        else {\n            var disEle = this.element.querySelector('.' + CLS_VSCROLLNAV + '.' + CLS_DISABLE);\n            if (disEle) {\n                disEle.classList.remove(CLS_DISABLE);\n                disEle.setAttribute('aria-disabled', 'false');\n                disEle.setAttribute('tabindex', '0');\n            }\n        }\n    };\n    /**\n     * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n     * @param  {VScrollModel} newProp\n     * @param  {VScrollModel} oldProp\n     * @returns void\n     * @private\n     */\n    VScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'scrollStep':\n                    this.setScrollState();\n                    break;\n                case 'enableRtl':\n                    newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n                    break;\n            }\n        }\n    };\n    __decorate([\n        Property(null)\n    ], VScroll.prototype, \"scrollStep\", void 0);\n    VScroll = __decorate([\n        NotifyPropertyChanges\n    ], VScroll);\n    return VScroll;\n}(Component));\nexport { VScroll };\n","import { select, detach } from '@syncfusion/ej2-base';\nimport { VScroll } from './v-scroll';\nimport { HScroll } from './h-scroll';\n/**\n * Used to add scroll in menu.\n * @hidden\n */\nexport function addScrolling(createElement, container, content, scrollType, enableRtl, offset) {\n    var containerOffset;\n    var contentOffset;\n    if (scrollType === 'vscroll') {\n        containerOffset = offset || container.getBoundingClientRect().height;\n        contentOffset = content.getBoundingClientRect().height;\n    }\n    else {\n        containerOffset = container.getBoundingClientRect().width;\n        contentOffset = content.getBoundingClientRect().width;\n    }\n    if (containerOffset < contentOffset) {\n        var scrollEle = createElement('div', { className: 'e-menu-' + scrollType });\n        container.appendChild(scrollEle);\n        scrollEle.appendChild(content);\n        if (offset) {\n            scrollEle.style.overflow = 'hidden';\n            scrollEle.style.height = offset + 'px';\n        }\n        else {\n            scrollEle.style.maxHeight = container.style.maxHeight;\n            container.style.overflow = 'hidden';\n        }\n        var scrollObj = void 0;\n        if (scrollType === 'vscroll') {\n            scrollObj = new VScroll({ enableRtl: enableRtl }, scrollEle);\n            scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetHeight / 2;\n        }\n        else {\n            scrollObj = new HScroll({ enableRtl: enableRtl }, scrollEle);\n            scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetWidth;\n        }\n        return scrollEle;\n    }\n    else {\n        return content;\n    }\n}\n/**\n * Used to destroy the scroll option.\n * @hidden\n */\nexport function destroyScroll(scrollObj, element, skipEle) {\n    if (scrollObj) {\n        var menu = select('.e-menu-parent', element);\n        if (menu) {\n            if (!skipEle || skipEle === menu) {\n                scrollObj.destroy();\n                element.parentElement.appendChild(menu);\n                detach(element);\n            }\n        }\n        else {\n            scrollObj.destroy();\n            detach(element);\n        }\n    }\n}\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents, Touch } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { Browser, Collection, setValue, getValue, getUniqueID, getInstance, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { select, selectAll, closest, detach, append, rippleEffect, isVisible, Complex, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { getZindexPartial, calculatePosition, isCollide, fit, Popup } from '@syncfusion/ej2-popups';\nimport { updateBlazorTemplate, resetBlazorTemplate, blazorTemplates, extend, SanitizeHtmlHelper, isBlazor } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nimport { addScrolling, destroyScroll } from '../common/menu-scroll';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar DOWNARROW = 'downarrow';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar HOME = 'home';\nvar END = 'end';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\nvar RTL = 'e-rtl';\nvar POPUP = 'e-menu-popup';\nvar TEMPLATE_PROPERTY = 'Template';\n/**\n * Configures the field options of the Menu.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n    __extends(FieldSettings, _super);\n    function FieldSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('id')\n    ], FieldSettings.prototype, \"itemId\", void 0);\n    __decorate([\n        Property('parentId')\n    ], FieldSettings.prototype, \"parentId\", void 0);\n    __decorate([\n        Property('text')\n    ], FieldSettings.prototype, \"text\", void 0);\n    __decorate([\n        Property('iconCss')\n    ], FieldSettings.prototype, \"iconCss\", void 0);\n    __decorate([\n        Property('url')\n    ], FieldSettings.prototype, \"url\", void 0);\n    __decorate([\n        Property('separator')\n    ], FieldSettings.prototype, \"separator\", void 0);\n    __decorate([\n        Property('items')\n    ], FieldSettings.prototype, \"children\", void 0);\n    return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Specifies menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n    __extends(MenuItem, _super);\n    function MenuItem() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], MenuItem.prototype, \"iconCss\", void 0);\n    __decorate([\n        Property('')\n    ], MenuItem.prototype, \"id\", void 0);\n    __decorate([\n        Property(false)\n    ], MenuItem.prototype, \"separator\", void 0);\n    __decorate([\n        Collection([], MenuItem)\n    ], MenuItem.prototype, \"items\", void 0);\n    __decorate([\n        Property('')\n    ], MenuItem.prototype, \"text\", void 0);\n    __decorate([\n        Property('')\n    ], MenuItem.prototype, \"url\", void 0);\n    return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * Animation configuration settings.\n */\nvar MenuAnimationSettings = /** @class */ (function (_super) {\n    __extends(MenuAnimationSettings, _super);\n    function MenuAnimationSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('SlideDown')\n    ], MenuAnimationSettings.prototype, \"effect\", void 0);\n    __decorate([\n        Property(400)\n    ], MenuAnimationSettings.prototype, \"duration\", void 0);\n    __decorate([\n        Property('ease')\n    ], MenuAnimationSettings.prototype, \"easing\", void 0);\n    return MenuAnimationSettings;\n}(ChildProperty));\nexport { MenuAnimationSettings };\n/**\n * @private\n * Base class for Menu and ContextMenu components.\n */\nvar MenuBase = /** @class */ (function (_super) {\n    __extends(MenuBase, _super);\n    /**\n     * Constructor for creating the widget.\n     * @private\n     */\n    function MenuBase(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.navIdx = [];\n        _this.animation = new Animation({});\n        _this.isTapHold = false;\n        _this.tempItem = [];\n        return _this;\n    }\n    /**\n     * Initialized third party configuration settings.\n     * @private\n     */\n    MenuBase.prototype.preRender = function () {\n        if (!this.isMenu) {\n            var ul = void 0;\n            if (this.element.tagName === 'EJS-CONTEXTMENU') {\n                ul = this.createElement('ul', {\n                    id: getUniqueID(this.getModuleName()), className: 'e-control e-lib e-' + this.getModuleName()\n                });\n                var ejInst = getValue('ej2_instances', this.element);\n                removeClass([this.element], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n                this.clonedElement = this.element;\n                this.element = ul;\n                setValue('ej2_instances', ejInst, this.element);\n            }\n            else {\n                ul = this.createElement('ul', { id: getUniqueID(this.getModuleName()) });\n                append([].slice.call(this.element.cloneNode(true).children), ul);\n                var refEle = this.element.nextElementSibling;\n                refEle ? this.element.parentElement.insertBefore(ul, refEle) : this.element.parentElement.appendChild(ul);\n                this.clonedElement = ul;\n            }\n            this.clonedElement.style.display = 'none';\n        }\n        if (this.element.tagName === 'EJS-MENU') {\n            var ele = this.element;\n            var ejInstance = getValue('ej2_instances', ele);\n            var ul = this.createElement('ul');\n            var wrapper = this.createElement('EJS-MENU', { className: 'e-' + this.getModuleName() + '-wrapper' });\n            for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n                ul.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n            }\n            ele.parentNode.insertBefore(wrapper, ele);\n            detach(ele);\n            ele = ul;\n            wrapper.appendChild(ele);\n            setValue('ej2_instances', ejInstance, ele);\n            this.clonedElement = wrapper;\n            this.element = ele;\n            if (!this.element.id) {\n                this.element.id = getUniqueID(this.getModuleName());\n            }\n        }\n    };\n    /**\n     * Initialize the control rendering\n     * @private\n     */\n    MenuBase.prototype.render = function () {\n        this.initialize();\n        this.renderItems();\n        if (this.isMenu && this.template && isBlazor()) {\n            var menuTemplateId = this.element.id + TEMPLATE_PROPERTY;\n            resetBlazorTemplate(menuTemplateId, TEMPLATE_PROPERTY);\n            if (Object.keys(blazorTemplates).length) {\n                extend(this.tempItem, blazorTemplates[menuTemplateId], [], true);\n            }\n            updateBlazorTemplate(menuTemplateId, TEMPLATE_PROPERTY, this);\n        }\n        this.wireEvents();\n        this.renderComplete();\n    };\n    MenuBase.prototype.initialize = function () {\n        var wrapper = this.getWrapper();\n        if (!wrapper) {\n            wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n            if (this.isMenu) {\n                this.element.parentElement.insertBefore(wrapper, this.element);\n            }\n            else {\n                document.body.appendChild(wrapper);\n            }\n        }\n        if (this.cssClass) {\n            addClass([wrapper], this.cssClass.split(' '));\n        }\n        if (this.enableRtl) {\n            wrapper.classList.add(RTL);\n        }\n        wrapper.appendChild(this.element);\n        if (this.isMenu && this.hamburgerMode) {\n            if (!this.target) {\n                this.createHeaderContainer(wrapper);\n            }\n        }\n    };\n    MenuBase.prototype.renderItems = function () {\n        if (!this.items.length) {\n            var items = ListBase.createJsonFromElement(this.element, { fields: { child: 'items' } });\n            this.setProperties({ items: items }, true);\n            if (isBlazor()) {\n                this.element = this.removeChildElement(this.element);\n            }\n            else {\n                this.element.innerHTML = '';\n            }\n        }\n        var ul = this.createItems(this.items);\n        append(Array.prototype.slice.call(ul.children), this.element);\n        this.element.classList.add('e-menu-parent');\n        if (this.isMenu) {\n            if (!this.hamburgerMode && this.element.classList.contains('e-vertical')) {\n                this.setBlankIconStyle(this.element);\n            }\n            if (this.enableScrolling) {\n                var wrapper = this.getWrapper();\n                this.element.classList.contains('e-vertical') ?\n                    addScrolling(this.createElement, wrapper, this.element, 'vscroll', this.enableRtl)\n                    : addScrolling(this.createElement, wrapper, this.element, 'hscroll', this.enableRtl);\n            }\n        }\n    };\n    MenuBase.prototype.wireEvents = function () {\n        var wrapper = this.getWrapper();\n        if (this.target) {\n            var target = void 0;\n            var targetElems = selectAll(this.target);\n            for (var i = 0, len = targetElems.length; i < len; i++) {\n                target = targetElems[i];\n                if (this.isMenu) {\n                    EventHandler.add(target, 'click', this.menuHeaderClickHandler, this);\n                }\n                else {\n                    if (Browser.isIos) {\n                        new Touch(target, { tapHold: this.touchHandler.bind(this) });\n                    }\n                    else {\n                        EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n                    }\n                }\n            }\n            this.targetElement = target;\n            if (!this.isMenu) {\n                EventHandler.add(this.targetElement, 'scroll', this.scrollHandler, this);\n                for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n                    var parent_1 = _a[_i];\n                    EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);\n                }\n            }\n        }\n        if (!Browser.isDevice) {\n            this.delegateMoverHandler = this.moverHandler.bind(this);\n            this.delegateMouseDownHandler = this.mouseDownHandler.bind(this);\n            EventHandler.add(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler, this);\n            EventHandler.add(document, 'mousedown', this.delegateMouseDownHandler, this);\n        }\n        this.delegateClickHandler = this.clickHandler.bind(this);\n        EventHandler.add(document, 'click', this.delegateClickHandler, this);\n        this.wireKeyboardEvent(wrapper);\n        this.rippleFn = rippleEffect(wrapper, { selector: '.' + ITEM });\n    };\n    MenuBase.prototype.wireKeyboardEvent = function (element) {\n        var keyConfigs = {\n            downarrow: DOWNARROW,\n            uparrow: UPARROW,\n            enter: ENTER,\n            leftarrow: LEFTARROW,\n            rightarrow: RIGHTARROW,\n            escape: ESCAPE\n        };\n        if (this.isMenu) {\n            keyConfigs.home = HOME;\n            keyConfigs.end = END;\n        }\n        new KeyboardEvents(element, {\n            keyAction: this.keyBoardHandler.bind(this),\n            keyConfigs: keyConfigs\n        });\n    };\n    MenuBase.prototype.mouseDownHandler = function (e) {\n        if (closest(e.target, '.e-' + this.getModuleName() + '-wrapper') !== this.getWrapper()\n            && (!closest(e.target, '.e-' + this.getModuleName() + '-popup'))) {\n            this.closeMenu(this.isMenu ? null : this.navIdx.length, e);\n        }\n    };\n    MenuBase.prototype.keyBoardHandler = function (e) {\n        var actionName = '';\n        var trgt = e.target;\n        var actionNeeded = this.isMenu && !this.hamburgerMode && !this.element.classList.contains('e-vertical')\n            && this.navIdx.length < 1;\n        e.preventDefault();\n        if (this.enableScrolling && e.keyCode === 13 && trgt.classList.contains('e-scroll-nav')) {\n            this.removeLIStateByClass([FOCUSED, SELECTED], [closest(trgt, '.e-' + this.getModuleName() + '-wrapper')]);\n        }\n        if (actionNeeded) {\n            switch (e.action) {\n                case RIGHTARROW:\n                    actionName = RIGHTARROW;\n                    e.action = DOWNARROW;\n                    break;\n                case LEFTARROW:\n                    actionName = LEFTARROW;\n                    e.action = UPARROW;\n                    break;\n                case DOWNARROW:\n                    actionName = DOWNARROW;\n                    e.action = RIGHTARROW;\n                    break;\n                case UPARROW:\n                    actionName = UPARROW;\n                    e.action = '';\n                    break;\n            }\n        }\n        else if (this.enableRtl) {\n            switch (e.action) {\n                case LEFTARROW:\n                    actionNeeded = true;\n                    actionName = LEFTARROW;\n                    e.action = RIGHTARROW;\n                    break;\n                case RIGHTARROW:\n                    actionNeeded = true;\n                    actionName = RIGHTARROW;\n                    e.action = LEFTARROW;\n                    break;\n            }\n        }\n        switch (e.action) {\n            case DOWNARROW:\n            case UPARROW:\n            case END:\n            case HOME:\n                this.upDownKeyHandler(e);\n                break;\n            case RIGHTARROW:\n                this.rightEnterKeyHandler(e);\n                break;\n            case LEFTARROW:\n                this.leftEscKeyHandler(e);\n                break;\n            case ENTER:\n                if (this.hamburgerMode && trgt.tagName === 'SPAN' && trgt.classList.contains('e-menu-icon')) {\n                    this.menuHeaderClickHandler(e);\n                }\n                else {\n                    this.rightEnterKeyHandler(e);\n                }\n                break;\n            case ESCAPE:\n                this.leftEscKeyHandler(e);\n                break;\n        }\n        if (actionNeeded) {\n            e.action = actionName;\n        }\n    };\n    MenuBase.prototype.upDownKeyHandler = function (e) {\n        var cul = this.getUlByNavIdx();\n        var defaultIdx = (e.action === DOWNARROW || e.action === HOME) ? 0 : cul.childElementCount - 1;\n        var fliIdx = defaultIdx;\n        var fli = this.getLIByClass(cul, FOCUSED);\n        if (fli) {\n            if (e.action !== END && e.action !== HOME) {\n                fliIdx = this.getIdx(cul, fli);\n            }\n            fli.classList.remove(FOCUSED);\n            if (e.action !== END && e.action !== HOME) {\n                e.action === DOWNARROW ? fliIdx++ : fliIdx--;\n                if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n                    fliIdx = defaultIdx;\n                }\n            }\n        }\n        var cli = cul.children[fliIdx];\n        fliIdx = this.isValidLI(cli, fliIdx, e.action);\n        cul.children[fliIdx].classList.add(FOCUSED);\n        cul.children[fliIdx].focus();\n    };\n    MenuBase.prototype.isValidLI = function (cli, index, action) {\n        var wrapper = this.getWrapper();\n        var cul = this.getUlByNavIdx();\n        if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n            ((action === DOWNARROW) || (action === RIGHTARROW)) ? index++ : index--;\n        }\n        cli = cul.children[index];\n        if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n            index = this.isValidLI(cli, index, action);\n        }\n        return index;\n    };\n    MenuBase.prototype.getUlByNavIdx = function (navIdxLen) {\n        if (navIdxLen === void 0) { navIdxLen = this.navIdx.length; }\n        if (this.isMenu) {\n            var popup = [this.getWrapper()].concat([].slice.call(selectAll('.' + POPUP)))[navIdxLen];\n            return isNullOrUndefined(popup) ? null : select('.e-menu-parent', popup);\n        }\n        else {\n            return this.getWrapper().children[navIdxLen];\n        }\n    };\n    MenuBase.prototype.rightEnterKeyHandler = function (e) {\n        var eventArgs;\n        var cul = this.getUlByNavIdx();\n        var fli = this.getLIByClass(cul, FOCUSED);\n        if (fli) {\n            var fliIdx = this.getIdx(cul, fli);\n            var navIdx = this.navIdx.concat(fliIdx);\n            var index = void 0;\n            var item = this.getItem(navIdx);\n            if (item.items.length) {\n                this.navIdx.push(fliIdx);\n                this.keyType = 'right';\n                this.action = e.action;\n                this.openMenu(fli, item, -1, -1, e);\n            }\n            else {\n                if (e.action === ENTER) {\n                    if (this.isMenu && this.navIdx.length === 0) {\n                        this.removeLIStateByClass([SELECTED], [this.getWrapper()]);\n                    }\n                    else {\n                        fli.classList.remove(FOCUSED);\n                    }\n                    fli.classList.add(SELECTED);\n                    eventArgs = { element: fli, item: item, event: e };\n                    this.trigger('select', eventArgs);\n                    this.closeMenu(null, e);\n                }\n            }\n        }\n    };\n    MenuBase.prototype.leftEscKeyHandler = function (e) {\n        if (this.navIdx.length) {\n            this.keyType = 'left';\n            this.closeMenu(this.navIdx.length, e);\n        }\n        else {\n            if (e.action === ESCAPE) {\n                this.closeMenu(null, e);\n            }\n        }\n    };\n    MenuBase.prototype.scrollHandler = function (e) {\n        this.closeMenu(null, e);\n    };\n    MenuBase.prototype.touchHandler = function (e) {\n        this.isTapHold = true;\n        this.cmenuHandler(e.originalEvent);\n    };\n    MenuBase.prototype.cmenuHandler = function (e) {\n        e.preventDefault();\n        this.isCMenu = true;\n        this.pageX = e.changedTouches ? e.changedTouches[0].pageX + 1 : e.pageX + 1;\n        this.pageY = e.changedTouches ? e.changedTouches[0].pageY + 1 : e.pageY + 1;\n        this.closeMenu(null, e);\n        if (this.isCMenu) {\n            if (this.canOpen(e.target)) {\n                this.openMenu(null, null, this.pageY, this.pageX, e);\n            }\n            this.isCMenu = false;\n        }\n    };\n    // tslint:disable-next-line:max-func-body-length\n    MenuBase.prototype.closeMenu = function (ulIndex, e, isIterated) {\n        var _this = this;\n        if (ulIndex === void 0) { ulIndex = 0; }\n        if (e === void 0) { e = null; }\n        if (this.isMenuVisible()) {\n            var sli = void 0;\n            var ul_1;\n            var item_1;\n            var wrapper = this.getWrapper();\n            var beforeCloseArgs = void 0;\n            var items_1;\n            var popups = this.getPopups();\n            var isClose = false;\n            var cnt = this.isMenu ? popups.length + 1 : wrapper.childElementCount;\n            ul_1 = this.isMenu && cnt !== 1 ? select('.e-ul', popups[cnt - 2])\n                : selectAll('.e-menu-parent', wrapper)[cnt - 1];\n            if (this.isMenu && ul_1.classList.contains('e-menu')) {\n                sli = this.getLIByClass(ul_1, SELECTED);\n                if (sli) {\n                    sli.classList.remove(SELECTED);\n                }\n                isClose = true;\n            }\n            if (!isClose) {\n                var liElem_1 = e && e.target && this.getLI(e.target);\n                item_1 = this.navIdx.length ? this.getItem(this.navIdx) : null;\n                items_1 = item_1 ? item_1.items : this.items;\n                beforeCloseArgs = { element: ul_1, parentItem: this.isMenu && isBlazor() ? this.getMenuItemModel(item_1, ulIndex) : item_1,\n                    items: items_1, event: e, cancel: false, isFocused: true };\n                this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n                    var popupEle;\n                    var closeArgs;\n                    var popupId = '';\n                    var popupObj;\n                    var isOpen = !observedCloseArgs.cancel;\n                    if (isOpen || _this.isCMenu) {\n                        if (_this.isMenu) {\n                            popupEle = closest(ul_1, '.' + POPUP);\n                            if (_this.hamburgerMode) {\n                                popupEle.parentElement.style.minHeight = '';\n                                closest(ul_1, '.e-menu-item').setAttribute('aria-expanded', 'false');\n                            }\n                            _this.unWireKeyboardEvent(popupEle);\n                            destroyScroll(getInstance(popupEle.children[0], VScroll), popupEle.children[0]);\n                            popupObj = getInstance(popupEle, Popup);\n                            popupObj.hide();\n                            popupId = popupEle.id;\n                            popupObj.destroy();\n                            detach(popupEle);\n                        }\n                        else {\n                            _this.toggleAnimation(ul_1, false);\n                        }\n                        closeArgs = { element: ul_1, parentItem: item_1, items: items_1 };\n                        _this.trigger('onClose', closeArgs);\n                        _this.navIdx.pop();\n                    }\n                    _this.updateReactTemplate();\n                    var trgtliId;\n                    var closedLi;\n                    var trgtLi;\n                    var trgtpopUp = _this.getWrapper() && _this.getUlByNavIdx();\n                    if (_this.isCMenu) {\n                        if (_this.canOpen(e.target)) {\n                            _this.openMenu(null, null, _this.pageY, _this.pageX, e);\n                        }\n                        _this.isCMenu = false;\n                    }\n                    if (_this.isMenu && trgtpopUp && popupId.length) {\n                        trgtliId = new RegExp('(.*)-ej2menu-' + _this.element.id + '-popup').exec(popupId)[1];\n                        closedLi = trgtpopUp.querySelector('[id=\"' + trgtliId + '\"]');\n                        trgtLi = (liElem_1 && trgtpopUp.querySelector('[id=\"' + liElem_1.id + '\"]'));\n                    }\n                    var submenus = liElem_1 && liElem_1.querySelectorAll('.e-menu-item');\n                    if (isOpen && _this.hamburgerMode && ulIndex && !(submenus.length)) {\n                        _this.afterCloseMenu(e);\n                    }\n                    else if (isOpen && !_this.hamburgerMode && _this.navIdx.length && closedLi && !trgtLi) {\n                        var ele = (e && e.target.classList.contains('e-vscroll'))\n                            ? closest(e.target, '.e-menu-wrapper') : null;\n                        if (ele) {\n                            ele = ele.querySelector('.e-menu-item');\n                            if (_this.showItemOnClick || (ele && _this.getIndex(ele.id, true).length <= _this.navIdx.length)) {\n                                _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e, true);\n                            }\n                        }\n                        else {\n                            _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e);\n                        }\n                    }\n                    else if (isOpen && !isIterated && !ulIndex && ((_this.hamburgerMode && _this.navIdx.length) ||\n                        _this.navIdx.length === 1)) {\n                        _this.closeMenu(null, e);\n                    }\n                    else if (isOpen && isNullOrUndefined(ulIndex) && _this.navIdx.length) {\n                        _this.closeMenu(null, e);\n                    }\n                    else if (isOpen && !_this.isMenu && !ulIndex && _this.navIdx.length === 0 && !_this.isMenusClosed) {\n                        _this.isMenusClosed = true;\n                        _this.closeMenu(0, e);\n                    }\n                    else if (isOpen && _this.isMenu && e && e.target &&\n                        _this.navIdx.length !== 0 && closest(e.target, '.e-menu-parent.e-control')) {\n                        _this.closeMenu(0, e);\n                    }\n                    else {\n                        if (isOpen && (_this.keyType === 'right' || _this.keyType === 'click')) {\n                            _this.afterCloseMenu(e);\n                        }\n                        else {\n                            var cul = _this.getUlByNavIdx();\n                            var sli_1 = _this.getLIByClass(cul, SELECTED);\n                            if (sli_1) {\n                                sli_1.setAttribute('aria-expanded', 'false');\n                                sli_1.classList.remove(SELECTED);\n                                if (observedCloseArgs.isFocused && liElem_1) {\n                                    sli_1.classList.add(FOCUSED);\n                                    sli_1.focus();\n                                }\n                            }\n                            if (!isOpen && _this.hamburgerMode && liElem_1 && liElem_1.getAttribute('aria-expanded') === 'false' &&\n                                liElem_1.getAttribute('aria-haspopup') === 'true') {\n                                if (closest(liElem_1, '.e-menu-parent.e-control')) {\n                                    _this.navIdx = [];\n                                }\n                                else {\n                                    _this.navIdx.pop();\n                                }\n                                _this.navIdx.push(_this.cliIdx);\n                                var item_2 = _this.getItem(_this.navIdx);\n                                liElem_1.setAttribute('aria-expanded', 'true');\n                                _this.openMenu(liElem_1, item_2, -1, -1, e);\n                            }\n                        }\n                    }\n                    _this.removeStateWrapper();\n                });\n            }\n        }\n    };\n    MenuBase.prototype.updateReactTemplate = function () {\n        // tslint:disable\n        if (this.isReact && this.template && this.navIdx.length === 0) {\n            // tslint:disable\n            var portals = this.portals.splice(0, this.items.length);\n            this.clearTemplate(['template']);\n            // tslint:disable\n            this.portals = portals;\n            this.renderReactTemplates();\n        }\n    };\n    MenuBase.prototype.getMenuItemModel = function (item, level) {\n        if (isNullOrUndefined(item)) {\n            return null;\n        }\n        if (isNullOrUndefined(level)) {\n            level = 0;\n        }\n        var fields = this.getFields(level);\n        return { text: item[fields.text], id: item[fields.id], items: item[fields.child], separator: item[fields.separator],\n            iconCss: item[fields.iconCss], url: item[fields.url] };\n    };\n    MenuBase.prototype.getPopups = function () {\n        var _this = this;\n        var popups = [];\n        [].slice.call(document.querySelectorAll('.' + POPUP)).forEach(function (elem) {\n            if (_this.getIndex(elem.querySelector('.' + ITEM).id, true).length) {\n                popups.push(elem);\n            }\n        });\n        return popups;\n    };\n    MenuBase.prototype.isMenuVisible = function () {\n        return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n    };\n    MenuBase.prototype.canOpen = function (target) {\n        var canOpen = true;\n        if (this.filter) {\n            canOpen = false;\n            var filter = this.filter.split(' ');\n            for (var i = 0, len = filter.length; i < len; i++) {\n                if (closest(target, '.' + filter[i])) {\n                    canOpen = true;\n                    break;\n                }\n            }\n        }\n        return canOpen;\n    };\n    MenuBase.prototype.openMenu = function (li, item, top, left, e, target) {\n        if (top === void 0) { top = 0; }\n        if (left === void 0) { left = 0; }\n        if (e === void 0) { e = null; }\n        if (target === void 0) { target = this.targetElement; }\n        var eventArgs;\n        var wrapper = this.getWrapper();\n        this.lItem = li;\n        var elemId = this.element.id !== '' ? this.element.id : 'menu';\n        this.isMenusClosed = false;\n        if (isNullOrUndefined(top)) {\n            top = -1;\n        }\n        if (isNullOrUndefined(left)) {\n            left = -1;\n        }\n        if (li) {\n            this.uList = this.createItems(item[this.getField('children', this.navIdx.length - 1)]);\n            if (!this.isMenu && Browser.isDevice) {\n                wrapper.lastChild.style.display = 'none';\n                var data = {\n                    text: item[this.getField('text')].toString(), iconCss: ICONS + ' e-previous'\n                };\n                var hdata = new MenuItem(this.items[0], 'items', data, true);\n                var hli = this.createItems([hdata]).children[0];\n                hli.classList.add(HEADER);\n                this.uList.insertBefore(hli, this.uList.children[0]);\n            }\n            if (this.isMenu) {\n                this.popupWrapper = this.createElement('div', {\n                    className: 'e-' + this.getModuleName() + '-wrapper ' + POPUP, id: li.id + '-ej2menu-' + elemId + '-popup'\n                });\n                if (this.hamburgerMode) {\n                    top = li.offsetHeight;\n                    li.appendChild(this.popupWrapper);\n                }\n                else {\n                    document.body.appendChild(this.popupWrapper);\n                }\n                this.isNestedOrVertical = this.element.classList.contains('e-vertical') || this.navIdx.length !== 1;\n                this.popupObj = this.generatePopup(this.popupWrapper, this.uList, li, this.isNestedOrVertical);\n                if (this.template) {\n                    this.renderReactTemplates();\n                }\n                if (this.hamburgerMode) {\n                    this.calculateIndentSize(this.uList, li);\n                }\n                else {\n                    if (this.cssClass) {\n                        addClass([this.popupWrapper], this.cssClass.split(' '));\n                    }\n                    this.popupObj.hide();\n                }\n                this.triggerBeforeOpen(li, this.uList, item, e, 0, 0, 'menu');\n            }\n            else {\n                this.uList.style.zIndex = this.element.style.zIndex;\n                wrapper.appendChild(this.uList);\n                this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n            }\n        }\n        else {\n            this.uList = this.element;\n            this.uList.style.zIndex = getZindexPartial(target ? target : this.element).toString();\n            this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n        }\n        if (this.isMenu && this.template && isBlazor()) {\n            var menuTemplateId = this.element.id + TEMPLATE_PROPERTY;\n            if (Object.keys(blazorTemplates).length) {\n                var itemFromBlazorTemplate = blazorTemplates[menuTemplateId];\n                this.tempItem = this.tempItem.concat(itemFromBlazorTemplate);\n                blazorTemplates[menuTemplateId] = this.tempItem;\n            }\n            updateBlazorTemplate(menuTemplateId, TEMPLATE_PROPERTY, this);\n        }\n    };\n    MenuBase.prototype.calculateIndentSize = function (ul, li) {\n        var liStyle = getComputedStyle(li);\n        var liIndent = parseInt(liStyle.textIndent, 10);\n        if (this.navIdx.length < 2 && !li.classList.contains('e-blankicon')) {\n            liIndent *= 2;\n        }\n        else {\n            liIndent += (liIndent / 4);\n        }\n        ul.style.textIndent = liIndent + 'px';\n        var blankIconElem = ul.querySelectorAll('.e-blankicon');\n        if (blankIconElem && blankIconElem.length) {\n            var menuIconElem = ul.querySelector('.e-menu-icon');\n            var menuIconElemStyle = getComputedStyle(menuIconElem);\n            var blankIconIndent = (parseInt(menuIconElemStyle.marginRight, 10) + menuIconElem.offsetWidth + liIndent);\n            for (var i = 0; i < blankIconElem.length; i++) {\n                blankIconElem[i].style.textIndent = blankIconIndent + 'px';\n            }\n        }\n    };\n    MenuBase.prototype.generatePopup = function (popupWrapper, ul, li, isNestedOrVertical) {\n        var _this = this;\n        var popupObj = new Popup(popupWrapper, {\n            actionOnScroll: this.hamburgerMode ? 'none' : 'reposition',\n            relateTo: li,\n            collision: this.hamburgerMode ? { X: 'none', Y: 'none' } : { X: isNestedOrVertical ||\n                    this.enableRtl ? 'none' : 'flip', Y: 'fit' },\n            position: (isNestedOrVertical && !this.hamburgerMode) ? { X: 'right', Y: 'top' } : { X: 'left', Y: 'bottom' },\n            targetType: 'relative',\n            enableRtl: this.enableRtl,\n            content: ul,\n            open: function () {\n                var scrollEle = select('.e-menu-vscroll', popupObj.element);\n                if (scrollEle) {\n                    scrollEle.style.height = 'inherit';\n                    scrollEle.style.maxHeight = '';\n                }\n                var ul = select('.e-ul', popupObj.element);\n                popupObj.element.style.maxHeight = '';\n                ul.focus();\n                _this.triggerOpen(ul);\n            }\n        });\n        return popupObj;\n    };\n    MenuBase.prototype.createHeaderContainer = function (wrapper) {\n        wrapper = wrapper || this.getWrapper();\n        var spanElem = this.createElement('span', { className: 'e-' + this.getModuleName() + '-header' });\n        var tempTitle = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.title) : this.title;\n        var spanTitle = this.createElement('span', {\n            className: 'e-' + this.getModuleName() + '-title', innerHTML: tempTitle\n        });\n        var spanIcon = this.createElement('span', {\n            className: 'e-icons e-' + this.getModuleName() + '-icon', attrs: { 'tabindex': '0' }\n        });\n        spanElem.appendChild(spanTitle);\n        spanElem.appendChild(spanIcon);\n        wrapper.insertBefore(spanElem, this.element);\n    };\n    MenuBase.prototype.openHamburgerMenu = function (e) {\n        if (this.hamburgerMode) {\n            var eventArgs = void 0;\n            this.triggerBeforeOpen(null, this.element, null, e, 0, 0, 'hamburger');\n        }\n    };\n    MenuBase.prototype.closeHamburgerMenu = function (e) {\n        var _this = this;\n        if (this.hamburgerMode) {\n            var beforeCloseArgs = void 0;\n            beforeCloseArgs = { element: this.element, parentItem: null, event: e, items: this.items, cancel: false };\n            this.trigger('beforeClose', beforeCloseArgs, function (observedHamburgerCloseArgs) {\n                if (!observedHamburgerCloseArgs.cancel) {\n                    _this.closeMenu(null, e);\n                    _this.element.classList.add('e-hide-menu');\n                    _this.trigger('onClose', { element: _this.element, parentItem: null, items: _this.items });\n                }\n            });\n        }\n    };\n    MenuBase.prototype.callFit = function (element, x, y, top, left) {\n        return fit(element, null, { X: x, Y: y }, { top: top, left: left });\n    };\n    MenuBase.prototype.triggerBeforeOpen = function (li, ul, item, e, top, left, type) {\n        var _this = this;\n        var navIdx = this.getIndex(li ? li.id : null, true);\n        var items = li ? item[this.getField('children', this.navIdx.length - 1)] : this.items;\n        var eventArgs = {\n            element: ul, items: items, parentItem: this.isMenu && isBlazor() ? this.getMenuItemModel(item, this.navIdx.length - 1) :\n                item, event: e, cancel: false, top: top, left: left\n        };\n        var menuType = type;\n        var collide;\n        this.trigger('beforeOpen', eventArgs, function (observedOpenArgs) {\n            switch (menuType) {\n                case 'menu':\n                    if (!_this.hamburgerMode) {\n                        _this.top = observedOpenArgs.top;\n                        _this.left = observedOpenArgs.left;\n                    }\n                    _this.popupWrapper.style.display = 'block';\n                    if (!_this.hamburgerMode) {\n                        _this.popupWrapper.style.maxHeight = _this.popupWrapper.getBoundingClientRect().height + 'px';\n                        if (_this.enableScrolling) {\n                            addScrolling(_this.createElement, _this.popupWrapper, _this.uList, 'vscroll', _this.enableRtl);\n                        }\n                        _this.checkScrollOffset(e);\n                    }\n                    if (!_this.hamburgerMode && !_this.left && !_this.top) {\n                        _this.popupObj.refreshPosition(_this.lItem, true);\n                        _this.left = parseInt(_this.popupWrapper.style.left, 10);\n                        _this.top = parseInt(_this.popupWrapper.style.top, 10);\n                        if (_this.enableRtl) {\n                            _this.left =\n                                _this.isNestedOrVertical ? _this.left - _this.popupWrapper.offsetWidth - _this.lItem.parentElement.offsetWidth + 2\n                                    : _this.left - _this.popupWrapper.offsetWidth + _this.lItem.offsetWidth;\n                        }\n                        collide = isCollide(_this.popupWrapper, null, _this.left, _this.top);\n                        if ((_this.isNestedOrVertical || _this.enableRtl) && (collide.indexOf('right') > -1\n                            || collide.indexOf('left') > -1)) {\n                            _this.popupObj.collision.X = 'none';\n                            var offWidth = closest(_this.lItem, '.e-' + _this.getModuleName() + '-wrapper').offsetWidth;\n                            _this.left =\n                                _this.enableRtl ? calculatePosition(_this.lItem, _this.isNestedOrVertical ? 'right' : 'left', 'top').left\n                                    : _this.left - _this.popupWrapper.offsetWidth - offWidth + 2;\n                        }\n                        collide = isCollide(_this.popupWrapper, null, _this.left, _this.top);\n                        if (collide.indexOf('left') > -1 || collide.indexOf('right') > -1) {\n                            _this.left = _this.callFit(_this.popupWrapper, true, false, _this.top, _this.left).left;\n                        }\n                        _this.popupWrapper.style.left = _this.left + 'px';\n                    }\n                    else {\n                        _this.popupObj.collision = { X: 'none', Y: 'none' };\n                    }\n                    _this.popupWrapper.style.display = '';\n                    break;\n                case 'none':\n                    _this.top = observedOpenArgs.top;\n                    _this.left = observedOpenArgs.left;\n                    break;\n                case 'hamburger':\n                    if (!observedOpenArgs.cancel) {\n                        _this.element.classList.remove('e-hide-menu');\n                        _this.triggerOpen(_this.element);\n                    }\n                    break;\n            }\n            if (menuType !== 'hamburger') {\n                if (observedOpenArgs.cancel) {\n                    if (_this.isMenu) {\n                        _this.popupObj.destroy();\n                        detach(_this.popupWrapper);\n                    }\n                    else if (ul.className.indexOf('e-ul') > -1) {\n                        detach(ul);\n                    }\n                    _this.navIdx.pop();\n                }\n                else {\n                    if (_this.isMenu) {\n                        if (_this.hamburgerMode) {\n                            _this.popupWrapper.style.top = _this.top + 'px';\n                            _this.popupWrapper.style.left = 0 + 'px';\n                            _this.toggleAnimation(_this.popupWrapper);\n                        }\n                        else {\n                            _this.setBlankIconStyle(_this.popupWrapper);\n                            _this.wireKeyboardEvent(_this.popupWrapper);\n                            rippleEffect(_this.popupWrapper, { selector: '.' + ITEM });\n                            _this.popupWrapper.style.left = _this.left + 'px';\n                            _this.popupWrapper.style.top = _this.top + 'px';\n                            var animationOptions = _this.animationSettings.effect !== 'None' ? {\n                                name: _this.animationSettings.effect, duration: _this.animationSettings.duration,\n                                timingFunction: _this.animationSettings.easing\n                            } : null;\n                            _this.popupObj.show(animationOptions, _this.lItem);\n                        }\n                    }\n                    else {\n                        _this.setBlankIconStyle(_this.uList);\n                        _this.setPosition(_this.lItem, _this.uList, _this.top, _this.left);\n                        _this.toggleAnimation(_this.uList);\n                    }\n                }\n            }\n            if (_this.keyType === 'right') {\n                var cul = _this.getUlByNavIdx();\n                li.classList.remove(FOCUSED);\n                var index = void 0;\n                if (_this.isMenu && _this.navIdx.length === 1) {\n                    _this.removeLIStateByClass([SELECTED], [_this.getWrapper()]);\n                }\n                li.classList.add(SELECTED);\n                if (_this.action === ENTER) {\n                    var eventArgs_1 = { element: li, item: item, event: e };\n                    _this.trigger('select', eventArgs_1);\n                }\n                li.focus();\n                cul = _this.getUlByNavIdx();\n                index = _this.isValidLI(cul.children[0], 0, _this.action);\n                cul.children[index].classList.add(FOCUSED);\n                cul.children[index].focus();\n            }\n        });\n    };\n    MenuBase.prototype.setBlankIconStyle = function (menu) {\n        var blankIconList = [].slice.call(menu.getElementsByClassName('e-blankicon'));\n        if (!blankIconList.length) {\n            return;\n        }\n        var iconLi = menu.querySelector('.e-menu-item:not(.e-blankicon):not(.e-separator)');\n        var icon = iconLi.querySelector('.e-menu-icon');\n        if (!icon) {\n            return;\n        }\n        var cssProp = this.enableRtl ? { padding: 'paddingRight', margin: 'marginLeft' } :\n            { padding: 'paddingLeft', margin: 'marginRight' };\n        var iconCssProps = getComputedStyle(icon);\n        var iconSize = parseInt(iconCssProps.fontSize, 10);\n        if (!!parseInt(iconCssProps.width, 10) && parseInt(iconCssProps.width, 10) > iconSize) {\n            iconSize = parseInt(iconCssProps.width, 10);\n        }\n        // tslint:disable\n        var size = iconSize + parseInt(iconCssProps[cssProp.margin], 10) + parseInt(getComputedStyle(iconLi)[cssProp.padding], 10) + \"px\";\n        blankIconList.forEach(function (li) {\n            li.style[cssProp.padding] = size;\n        });\n        // tslint:enable\n    };\n    MenuBase.prototype.checkScrollOffset = function (e) {\n        var wrapper = this.getWrapper();\n        if (wrapper.children[0].classList.contains('e-menu-hscroll') && this.navIdx.length === 1) {\n            var trgt = isNullOrUndefined(e) ? this.element : closest(e.target, '.' + ITEM);\n            var offsetEle = select('.e-hscroll-bar', wrapper);\n            var offsetLeft = void 0;\n            var offsetRight = void 0;\n            if (offsetEle.scrollLeft > trgt.offsetLeft) {\n                offsetEle.scrollLeft -= (offsetEle.scrollLeft - trgt.offsetLeft);\n            }\n            offsetLeft = offsetEle.scrollLeft + offsetEle.offsetWidth;\n            offsetRight = trgt.offsetLeft + trgt.offsetWidth;\n            if (offsetLeft < offsetRight) {\n                offsetEle.scrollLeft += (offsetRight - offsetLeft);\n            }\n        }\n    };\n    MenuBase.prototype.setPosition = function (li, ul, top, left) {\n        var px = 'px';\n        this.toggleVisiblity(ul);\n        if (ul === this.element || (left > -1 && top > -1)) {\n            var collide = isCollide(ul, null, left, top);\n            if (collide.indexOf('right') > -1) {\n                left = left - ul.offsetWidth;\n            }\n            if (collide.indexOf('bottom') > -1) {\n                var offset = this.callFit(ul, false, true, top, left);\n                top = offset.top - 20;\n                if (top < 0) {\n                    var newTop = (pageYOffset + document.documentElement.clientHeight) - ul.getBoundingClientRect().height;\n                    if (newTop > -1) {\n                        top = newTop;\n                    }\n                }\n            }\n            collide = isCollide(ul, null, left, top);\n            if (collide.indexOf('left') > -1) {\n                var offset = this.callFit(ul, true, false, top, left);\n                left = offset.left;\n            }\n        }\n        else {\n            if (Browser.isDevice) {\n                top = Number(this.element.style.top.replace(px, ''));\n                left = Number(this.element.style.left.replace(px, ''));\n            }\n            else {\n                var x = this.enableRtl ? 'left' : 'right';\n                var offset = calculatePosition(li, x, 'top');\n                top = offset.top;\n                left = offset.left;\n                var collide = isCollide(ul, null, this.enableRtl ? left - ul.offsetWidth : left, top);\n                var xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n                if (xCollision) {\n                    offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n                    left = offset.left;\n                }\n                if (this.enableRtl || xCollision) {\n                    left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n                }\n                if (collide.indexOf('bottom') > -1) {\n                    offset = this.callFit(ul, false, true, top, left);\n                    top = offset.top;\n                }\n            }\n        }\n        this.toggleVisiblity(ul, false);\n        ul.style.top = top + px;\n        ul.style.left = left + px;\n    };\n    MenuBase.prototype.toggleVisiblity = function (ul, isVisible) {\n        if (isVisible === void 0) { isVisible = true; }\n        ul.style.visibility = isVisible ? 'hidden' : '';\n        ul.style.display = isVisible ? 'block' : 'none';\n    };\n    MenuBase.prototype.createItems = function (items) {\n        var _this = this;\n        var level = this.navIdx ? this.navIdx.length : 0;\n        var fields = this.getFields(level);\n        // tslint:disable-next-line:no-any\n        if (isBlazor() && this.template && items.length && items[0].properties) {\n            var itemsObj_1 = [];\n            items.forEach(function (item, index) {\n                itemsObj_1.push({});\n                itemsObj_1[index][fields.text] = item[fields.text];\n                if (!item[fields.id]) {\n                    item[fields.id] = getUniqueID('menuitem');\n                }\n                itemsObj_1[index][fields.id] = item[fields.id];\n                itemsObj_1[index][fields.iconCss] = item[fields.iconCss];\n                itemsObj_1[index][fields.url] = item[fields.url];\n                itemsObj_1[index][fields.child] = item[fields.child];\n                itemsObj_1[index][fields.separator] = item[fields.separator];\n            });\n            items = itemsObj_1;\n        }\n        var showIcon = this.hasField(items, this.getField('iconCss', level));\n        var listBaseOptions = {\n            showIcon: showIcon,\n            moduleName: 'menu',\n            fields: fields,\n            template: this.template,\n            itemNavigable: true,\n            itemCreating: function (args) {\n                if (!args.curData[args.fields[fields.id]]) {\n                    args.curData[args.fields[fields.id]] = getUniqueID('menuitem');\n                }\n                args.curData.htmlAttributes = {\n                    role: 'menuitem',\n                    tabindex: '-1'\n                };\n                if (_this.isMenu && !args.curData[_this.getField('separator', level)]) {\n                    args.curData.htmlAttributes['aria-label'] = args.curData[args.fields.text];\n                }\n                if (args.curData[args.fields[fields.iconCss]] === '') {\n                    args.curData[args.fields[fields.iconCss]] = null;\n                }\n            },\n            itemCreated: function (args) {\n                if (args.curData[_this.getField('separator', level)]) {\n                    args.item.classList.add(SEPARATOR);\n                    args.item.removeAttribute('role');\n                }\n                if (showIcon && !args.curData[args.fields.iconCss]\n                    && !args.curData[_this.getField('separator', level)]) {\n                    args.item.classList.add('e-blankicon');\n                }\n                if (args.curData[args.fields.child]\n                    && args.curData[args.fields.child].length) {\n                    var span = _this.createElement('span', { className: ICONS + ' ' + CARET });\n                    args.item.appendChild(span);\n                    args.item.setAttribute('aria-haspopup', 'true');\n                    args.item.setAttribute('aria-expanded', 'false');\n                    if (!_this.isMenu) {\n                        args.item.removeAttribute('role');\n                    }\n                    args.item.classList.add('e-menu-caret-icon');\n                }\n                if (_this.isMenu && _this.template) {\n                    args.item.setAttribute('id', args.curData[args.fields.id].toString());\n                    args.item.removeAttribute('data-uid');\n                    if (args.item.classList.contains('e-level-1')) {\n                        args.item.classList.remove('e-level-1');\n                    }\n                    if (args.item.classList.contains('e-has-child')) {\n                        args.item.classList.remove('e-has-child');\n                    }\n                }\n                var eventArgs = { item: args.curData, element: args.item };\n                _this.trigger('beforeItemRender', eventArgs);\n            }\n        };\n        this.setProperties({ 'items': this.items }, true);\n        if (this.isMenu) {\n            listBaseOptions.templateID = this.element.id + TEMPLATE_PROPERTY;\n        }\n        var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template, this);\n        ul.setAttribute('tabindex', '0');\n        if (this.isMenu) {\n            ul.setAttribute('role', 'menu');\n        }\n        return ul;\n    };\n    MenuBase.prototype.moverHandler = function (e) {\n        var trgt = e.target;\n        this.liTrgt = trgt;\n        var cli = this.getLI(trgt);\n        var wrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : this.getWrapper();\n        var hdrWrapper = this.getWrapper();\n        var regex = new RegExp('-ej2menu-(.*)-popup');\n        var ulId;\n        var isDifferentElem = false;\n        if (!wrapper) {\n            return;\n        }\n        if (wrapper.id !== '') {\n            ulId = regex.exec(wrapper.id)[1];\n        }\n        else {\n            ulId = wrapper.querySelector('ul').id;\n        }\n        if (ulId !== this.element.id) {\n            this.removeLIStateByClass([FOCUSED, SELECTED], [this.getWrapper()]);\n            if (this.navIdx.length) {\n                isDifferentElem = true;\n            }\n            else {\n                return;\n            }\n        }\n        if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper') && !isDifferentElem) {\n            this.removeLIStateByClass([FOCUSED], this.isMenu ? [wrapper].concat(this.getPopups()) : [wrapper]);\n            this.removeLIStateByClass([FOCUSED], this.isMenu ? [hdrWrapper].concat(this.getPopups()) : [hdrWrapper]);\n            cli.classList.add(FOCUSED);\n            if (!this.showItemOnClick) {\n                this.clickHandler(e);\n            }\n        }\n        else if (this.isMenu && this.showItemOnClick && !isDifferentElem) {\n            this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n        }\n        if (this.isMenu) {\n            if (!this.showItemOnClick && (trgt.parentElement !== wrapper && !closest(trgt, '.e-' + this.getModuleName() + '-popup'))\n                && (!cli || (cli && !this.getIndex(cli.id, true).length))) {\n                this.removeLIStateByClass([FOCUSED], [wrapper]);\n                if (this.navIdx.length) {\n                    this.isClosed = true;\n                    this.closeMenu(null, e);\n                }\n            }\n            else if (isDifferentElem && !this.showItemOnClick) {\n                if (this.navIdx.length) {\n                    this.isClosed = true;\n                    this.closeMenu(null, e);\n                }\n            }\n            if (!this.isClosed) {\n                this.removeStateWrapper();\n            }\n            this.isClosed = false;\n        }\n    };\n    MenuBase.prototype.removeStateWrapper = function () {\n        if (this.liTrgt) {\n            var wrapper = closest(this.liTrgt, '.e-menu-vscroll');\n            if (this.liTrgt.tagName === 'DIV' && wrapper) {\n                this.removeLIStateByClass([FOCUSED, SELECTED], [wrapper]);\n            }\n        }\n    };\n    MenuBase.prototype.removeLIStateByClass = function (classList, element) {\n        var li;\n        var _loop_1 = function (i) {\n            classList.forEach(function (className) {\n                li = select('.' + className, element[i]);\n                if (li) {\n                    li.classList.remove(className);\n                }\n            });\n        };\n        for (var i = 0; i < element.length; i++) {\n            _loop_1(i);\n        }\n    };\n    MenuBase.prototype.getField = function (propName, level) {\n        if (level === void 0) { level = 0; }\n        var fieldName = this.fields[propName];\n        return typeof fieldName === 'string' ? fieldName :\n            (!fieldName[level] ? fieldName[fieldName.length - 1].toString()\n                : fieldName[level].toString());\n    };\n    MenuBase.prototype.getFields = function (level) {\n        if (level === void 0) { level = 0; }\n        return {\n            id: this.getField('itemId', level),\n            iconCss: this.getField('iconCss', level),\n            text: this.getField('text', level),\n            url: this.getField('url', level),\n            child: this.getField('children', level),\n            separator: this.getField('separator', level)\n        };\n    };\n    MenuBase.prototype.hasField = function (items, field) {\n        for (var i = 0, len = items.length; i < len; i++) {\n            if (items[i][field]) {\n                return true;\n            }\n        }\n        return false;\n    };\n    MenuBase.prototype.menuHeaderClickHandler = function (e) {\n        if (closest(e.target, '.e-menu-wrapper').querySelector('ul.e-menu-parent').id !== this.element.id) {\n            return;\n        }\n        this.element.classList.contains('e-hide-menu') ? this.openHamburgerMenu(e) : this.closeHamburgerMenu(e);\n    };\n    MenuBase.prototype.clickHandler = function (e) {\n        if (this.isTapHold) {\n            this.isTapHold = false;\n        }\n        else {\n            var wrapper = this.getWrapper();\n            var trgt = e.target;\n            var cli = this.cli = this.getLI(trgt);\n            var regex = new RegExp('-ej2menu-(.*)-popup');\n            var cliWrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : null;\n            var isInstLI = cli && cliWrapper && (this.isMenu ? this.getIndex(cli.id, true).length > 0\n                : wrapper.firstElementChild.id === cliWrapper.firstElementChild.id);\n            if (Browser.isDevice && this.isMenu) {\n                this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n                this.mouseDownHandler(e);\n            }\n            if (cli && cliWrapper && this.isMenu) {\n                var cliWrapperId = cliWrapper.id ? regex.exec(cliWrapper.id)[1] : cliWrapper.querySelector('.e-menu-parent').id;\n                if (this.element.id !== cliWrapperId) {\n                    return;\n                }\n            }\n            if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n                this.setLISelected(cli);\n                var navIdx = this.getIndex(cli.id, true);\n                var item = this.getItem(navIdx);\n                var eventArgs = { element: cli, item: item, event: e };\n                this.trigger('select', eventArgs);\n            }\n            if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {\n                var ul = void 0;\n                if (cli.classList.contains(HEADER)) {\n                    ul = wrapper.children[this.navIdx.length - 1];\n                    this.toggleAnimation(ul);\n                    var sli = this.getLIByClass(ul, SELECTED);\n                    if (sli) {\n                        sli.classList.remove(SELECTED);\n                    }\n                    detach(cli.parentNode);\n                    this.navIdx.pop();\n                }\n                else {\n                    if (!cli.classList.contains(SEPARATOR)) {\n                        this.showSubMenu = true;\n                        var cul = cli.parentNode;\n                        this.cliIdx = this.getIdx(cul, cli);\n                        if (this.isMenu || !Browser.isDevice) {\n                            var culIdx = this.isMenu ? Array.prototype.indexOf.call([wrapper].concat(this.getPopups()), closest(cul, '.' + 'e-' + this.getModuleName() + '-wrapper'))\n                                : this.getIdx(wrapper, cul);\n                            if (this.navIdx[culIdx] === this.cliIdx) {\n                                this.showSubMenu = false;\n                            }\n                            if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || this.showSubMenu)) {\n                                var sli = this.getLIByClass(cul, SELECTED);\n                                if (sli) {\n                                    sli.classList.remove(SELECTED);\n                                }\n                                this.isClosed = true;\n                                this.keyType = 'click';\n                                if (this.showItemOnClick) {\n                                    this.setLISelected(cli);\n                                }\n                                this.closeMenu(culIdx + 1, e);\n                                if (this.showItemOnClick) {\n                                    this.setLISelected(cli);\n                                }\n                            }\n                        }\n                        if (!this.isClosed) {\n                            this.afterCloseMenu(e);\n                        }\n                        this.isClosed = false;\n                    }\n                }\n            }\n            else {\n                if (this.isMenu && trgt.tagName === 'DIV' && this.navIdx.length && closest(trgt, '.e-menu-vscroll')) {\n                    var popupEle = closest(trgt, '.' + POPUP);\n                    var cIdx = Array.prototype.indexOf.call(this.getPopups(), popupEle) + 1;\n                    if (cIdx < this.navIdx.length) {\n                        this.closeMenu(cIdx + 1, e);\n                        if (popupEle) {\n                            this.removeLIStateByClass([FOCUSED, SELECTED], [popupEle]);\n                        }\n                    }\n                }\n                else if (this.isMenu && this.hamburgerMode && trgt.tagName === 'SPAN'\n                    && trgt.classList.contains('e-menu-icon')) {\n                    this.menuHeaderClickHandler(e);\n                }\n                else {\n                    if (trgt.tagName !== 'UL' || (this.isMenu ? trgt.parentElement.classList.contains('e-menu-wrapper') &&\n                        !this.getIndex(trgt.querySelector('.' + ITEM).id, true).length : trgt.parentElement !== wrapper)) {\n                        if (!cli) {\n                            this.removeLIStateByClass([SELECTED], [wrapper]);\n                        }\n                        if (!cli || !cli.querySelector('.' + CARET)) {\n                            this.closeMenu(null, e);\n                        }\n                    }\n                }\n            }\n        }\n    };\n    MenuBase.prototype.afterCloseMenu = function (e) {\n        var isHeader;\n        if (this.showSubMenu) {\n            if (this.showItemOnClick && this.navIdx.length === 0) {\n                isHeader = closest(e.target, '.e-menu-parent.e-control');\n            }\n            else {\n                isHeader = closest(this.element, '.e-menu-parent.e-control');\n            }\n            var idx = this.navIdx.concat(this.cliIdx);\n            var item = this.getItem(idx);\n            if (item && item[this.getField('children', idx.length - 1)] &&\n                item[this.getField('children', idx.length - 1)].length) {\n                if (e.type === 'mouseover' || (Browser.isDevice && this.isMenu)) {\n                    this.setLISelected(this.cli);\n                }\n                if ((!this.hamburgerMode && isHeader) || (this.hamburgerMode && this.cli.getAttribute('aria-expanded') === 'false')) {\n                    this.cli.setAttribute('aria-expanded', 'true');\n                    this.navIdx.push(this.cliIdx);\n                    this.openMenu(this.cli, item, null, null, e);\n                }\n            }\n            else {\n                if (e.type !== 'mouseover') {\n                    this.closeMenu(null, e);\n                }\n            }\n            if (!isHeader) {\n                var cul = this.getUlByNavIdx();\n                var sli = this.getLIByClass(cul, SELECTED);\n                if (sli) {\n                    sli.setAttribute('aria-expanded', 'false');\n                    sli.classList.remove(SELECTED);\n                }\n            }\n        }\n        this.keyType = '';\n    };\n    MenuBase.prototype.setLISelected = function (li) {\n        var sli = this.getLIByClass(li.parentElement, SELECTED);\n        if (sli) {\n            sli.classList.remove(SELECTED);\n        }\n        if (!this.isMenu) {\n            li.classList.remove(FOCUSED);\n        }\n        li.classList.add(SELECTED);\n    };\n    MenuBase.prototype.getLIByClass = function (ul, classname) {\n        for (var i = 0, len = ul.children.length; i < len; i++) {\n            if (ul.children[i].classList.contains(classname)) {\n                return ul.children[i];\n            }\n        }\n        return null;\n    };\n    /**\n     * This method is used to get the index of the menu item in the Menu based on the argument.\n     * @param item - item be passed to get the index | id to be passed to get the item index.\n     * @param isUniqueId - Set `true` if it is a unique id.\n     * @returns void\n     */\n    MenuBase.prototype.getItemIndex = function (item, isUniqueId) {\n        var idx;\n        if (typeof item === 'string') {\n            idx = item;\n        }\n        else {\n            idx = item.id;\n        }\n        var isText = (isUniqueId === false) ? false : true;\n        var navIdx = this.getIndex(idx, isText);\n        return navIdx;\n    };\n    /**\n     * This method is used to set the menu item in the Menu based on the argument.\n     * @param item - item need to be updated.\n     * @param id - id to be passed to update the item.\n     * @param isUniqueId - Set `true` if it is a unique id.\n     * @returns void\n     */\n    MenuBase.prototype.setItem = function (item, id, isUniqueId) {\n        var idx = id ? id : item.id;\n        var isText = (isUniqueId === false) ? false : true;\n        var navIdx = this.getIndex(idx, isText);\n        var newItem = this.getItem(navIdx);\n        newItem.iconCss = item.iconCss;\n        newItem.id = item.id;\n        newItem.text = item.text;\n        newItem.url = item.url;\n        newItem.separator = item.separator;\n        newItem.items = item.items;\n    };\n    MenuBase.prototype.getItem = function (navIdx) {\n        navIdx = navIdx.slice();\n        var idx = navIdx.pop();\n        var items = this.getItems(navIdx);\n        return items[idx];\n    };\n    MenuBase.prototype.getItems = function (navIdx) {\n        var items = this.items;\n        for (var i = 0; i < navIdx.length; i++) {\n            items = items[navIdx[i]][this.getField('children', i)];\n        }\n        return items;\n    };\n    MenuBase.prototype.setItems = function (newItems, navIdx) {\n        var items = this.getItems(navIdx);\n        items.splice(0, items.length);\n        for (var i = 0; i < newItems.length; i++) {\n            items.splice(i, 0, newItems[i]);\n        }\n    };\n    MenuBase.prototype.getIdx = function (ul, li, skipHdr) {\n        if (skipHdr === void 0) { skipHdr = true; }\n        var idx = Array.prototype.indexOf.call(ul.querySelectorAll('li'), li);\n        if (this.isMenu && this.template && isBlazor()) {\n            idx = Array.prototype.indexOf.call(ul.querySelectorAll(li.tagName), li);\n        }\n        else {\n            idx = Array.prototype.indexOf.call(ul.children, li);\n        }\n        if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n            idx--;\n        }\n        return idx;\n    };\n    MenuBase.prototype.getLI = function (elem) {\n        if (elem.tagName === 'LI' && elem.classList.contains('e-menu-item')) {\n            return elem;\n        }\n        return closest(elem, 'li.e-menu-item');\n    };\n    MenuBase.prototype.updateItemsByNavIdx = function () {\n        var items = this.items;\n        var count = 0;\n        for (var index = 0; index < this.navIdx.length; index++) {\n            items = items[index].items;\n            if (!items) {\n                break;\n            }\n            count++;\n            var ul = this.getUlByNavIdx(count);\n            if (!ul) {\n                break;\n            }\n            this.updateItem(ul, items);\n        }\n    };\n    MenuBase.prototype.removeChildElement = function (elem) {\n        while (elem.firstElementChild) {\n            elem.removeChild(elem.firstElementChild);\n        }\n        return elem;\n    };\n    /**\n     * Called internally if any of the property value changed\n     * @private\n     * @param {MenuBaseModel} newProp\n     * @param {MenuBaseModel} oldProp\n     * @returns void\n     */\n    MenuBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var _this = this;\n        var wrapper = this.getWrapper();\n        var _loop_2 = function (prop) {\n            switch (prop) {\n                case 'cssClass':\n                    if (oldProp.cssClass) {\n                        removeClass([wrapper], oldProp.cssClass.split(' '));\n                    }\n                    if (newProp.cssClass) {\n                        addClass([wrapper], newProp.cssClass.split(' '));\n                    }\n                    break;\n                case 'enableRtl':\n                    wrapper.classList.toggle(RTL);\n                    break;\n                case 'showItemOnClick':\n                    this_1.unWireEvents();\n                    this_1.showItemOnClick = newProp.showItemOnClick;\n                    this_1.wireEvents();\n                    break;\n                case 'enableScrolling':\n                    if (newProp.enableScrolling) {\n                        var ul_2;\n                        this_1.element.classList.contains('e-vertical') ?\n                            addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl)\n                            : addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);\n                        this_1.getPopups().forEach(function (wrapper) {\n                            ul_2 = select('.e-ul', wrapper);\n                            addScrolling(_this.createElement, wrapper, ul_2, 'vscroll', _this.enableRtl);\n                        });\n                    }\n                    else {\n                        var ul_3 = wrapper.children[0];\n                        this_1.element.classList.contains('e-vertical') ? destroyScroll(getInstance(ul_3, VScroll), ul_3)\n                            : destroyScroll(getInstance(ul_3, HScroll), ul_3);\n                        wrapper.style.overflow = '';\n                        wrapper.appendChild(this_1.element);\n                        this_1.getPopups().forEach(function (wrapper) {\n                            ul_3 = wrapper.children[0];\n                            destroyScroll(getInstance(ul_3, VScroll), ul_3);\n                            wrapper.style.overflow = '';\n                        });\n                    }\n                    break;\n                case 'items':\n                    var idx = void 0;\n                    var navIdx = void 0;\n                    var item = void 0;\n                    if (!Object.keys(oldProp.items).length) {\n                        this_1.updateItem(this_1.element, this_1.items);\n                        for (var i = 1, count = wrapper.childElementCount; i < count; i++) {\n                            detach(wrapper.lastElementChild);\n                        }\n                        if (this_1.isMenu && isBlazor()) {\n                            this_1.updateItemsByNavIdx();\n                        }\n                        else {\n                            this_1.navIdx = [];\n                        }\n                    }\n                    else {\n                        var keys = Object.keys(newProp.items);\n                        for (var i = 0; i < keys.length; i++) {\n                            navIdx = this_1.getChangedItemIndex(newProp, [], Number(keys[i]));\n                            if (navIdx.length <= this_1.getWrapper().children.length) {\n                                idx = navIdx.pop();\n                                item = this_1.getItems(navIdx);\n                                this_1.insertAfter([item[idx]], item[idx].text);\n                                this_1.removeItem(item, navIdx, idx);\n                                this_1.setItems(item, navIdx);\n                            }\n                            navIdx.length = 0;\n                        }\n                    }\n                    break;\n            }\n        };\n        var this_1 = this;\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            _loop_2(prop);\n        }\n    };\n    MenuBase.prototype.updateItem = function (ul, items) {\n        if (isBlazor()) {\n            ul = this.removeChildElement(ul);\n        }\n        else {\n            ul.innerHTML = '';\n        }\n        var lis = [].slice.call(this.createItems(items).children);\n        lis.forEach(function (li) {\n            ul.appendChild(li);\n        });\n    };\n    MenuBase.prototype.getChangedItemIndex = function (newProp, index, idx) {\n        index.push(idx);\n        var key = Object.keys(newProp.items[idx]).pop();\n        if (key === 'items') {\n            var item = newProp.items[idx];\n            var popStr = Object.keys(item.items).pop();\n            if (popStr) {\n                this.getChangedItemIndex(item, index, Number(popStr));\n            }\n        }\n        else {\n            if (key === 'isParentArray' && index.length > 1) {\n                index.pop();\n            }\n        }\n        return index;\n    };\n    MenuBase.prototype.removeItem = function (item, navIdx, idx) {\n        item.splice(idx, 1);\n        var uls = this.getWrapper().children;\n        if (navIdx.length < uls.length) {\n            detach(uls[navIdx.length].children[idx]);\n        }\n    };\n    /**\n     * Used to unwire the bind events.\n     * @private\n     */\n    MenuBase.prototype.unWireEvents = function (targetSelctor) {\n        if (targetSelctor === void 0) { targetSelctor = this.target; }\n        var wrapper = this.getWrapper();\n        if (targetSelctor) {\n            var target = void 0;\n            var touchModule = void 0;\n            var targetElems = selectAll(targetSelctor);\n            for (var i = 0, len = targetElems.length; i < len; i++) {\n                target = targetElems[i];\n                if (this.isMenu) {\n                    EventHandler.remove(target, 'click', this.menuHeaderClickHandler);\n                }\n                else {\n                    if (Browser.isIos) {\n                        touchModule = getInstance(target, Touch);\n                        if (touchModule) {\n                            touchModule.destroy();\n                        }\n                    }\n                    else {\n                        EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n                    }\n                }\n            }\n            if (!this.isMenu) {\n                EventHandler.remove(this.targetElement, 'scroll', this.scrollHandler);\n                for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n                    var parent_2 = _a[_i];\n                    EventHandler.remove(parent_2, 'scroll', this.scrollHandler);\n                }\n            }\n        }\n        if (!Browser.isDevice) {\n            EventHandler.remove(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler);\n            EventHandler.remove(document, 'mousedown', this.delegateMouseDownHandler);\n        }\n        EventHandler.remove(document, 'click', this.delegateClickHandler);\n        this.unWireKeyboardEvent(wrapper);\n        this.rippleFn();\n    };\n    MenuBase.prototype.unWireKeyboardEvent = function (element) {\n        var keyboardModule = getInstance(element, KeyboardEvents);\n        if (keyboardModule) {\n            keyboardModule.destroy();\n        }\n    };\n    MenuBase.prototype.toggleAnimation = function (ul, isMenuOpen) {\n        var _this = this;\n        if (isMenuOpen === void 0) { isMenuOpen = true; }\n        var pUlHeight;\n        var pElement;\n        if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n            this.end(ul, isMenuOpen);\n        }\n        else {\n            this.animation.animate(ul, {\n                name: this.animationSettings.effect,\n                duration: this.animationSettings.duration,\n                timingFunction: this.animationSettings.easing,\n                begin: function (options) {\n                    if (_this.hamburgerMode) {\n                        pElement = options.element.parentElement;\n                        options.element.style.position = 'absolute';\n                        pUlHeight = pElement.offsetHeight;\n                        options.element.style.maxHeight = options.element.offsetHeight + 'px';\n                        pElement.style.maxHeight = '';\n                    }\n                    else {\n                        options.element.style.display = 'block';\n                        options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n                    }\n                },\n                progress: function (options) {\n                    if (_this.hamburgerMode) {\n                        pElement.style.minHeight = (pUlHeight + options.element.offsetHeight) + 'px';\n                    }\n                },\n                end: function (options) {\n                    if (_this.hamburgerMode) {\n                        options.element.style.position = '';\n                        options.element.style.maxHeight = '';\n                        pElement.style.minHeight = '';\n                        options.element.style.top = 0 + 'px';\n                        options.element.children[0].focus();\n                        _this.triggerOpen(options.element.children[0]);\n                    }\n                    else {\n                        _this.end(options.element, isMenuOpen);\n                    }\n                }\n            });\n        }\n    };\n    MenuBase.prototype.triggerOpen = function (ul) {\n        var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n        var eventArgs = {\n            element: ul, parentItem: item, items: item ? item.items : this.items\n        };\n        this.trigger('onOpen', eventArgs);\n    };\n    MenuBase.prototype.end = function (ul, isMenuOpen) {\n        if (isMenuOpen) {\n            ul.style.display = 'block';\n            ul.style.maxHeight = '';\n            this.triggerOpen(ul);\n            if (ul.querySelector('.' + FOCUSED)) {\n                ul.querySelector('.' + FOCUSED).focus();\n            }\n            else {\n                var ele = void 0;\n                ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n                if (ele) {\n                    ele.querySelector('.' + SELECTED).focus();\n                }\n                else {\n                    this.element.focus();\n                }\n            }\n        }\n        else {\n            if (ul === this.element) {\n                var fli = this.getLIByClass(this.element, FOCUSED);\n                if (fli) {\n                    fli.classList.remove(FOCUSED);\n                }\n                var sli = this.getLIByClass(this.element, SELECTED);\n                if (sli) {\n                    sli.classList.remove(SELECTED);\n                }\n                ul.style.display = 'none';\n            }\n            else {\n                detach(ul);\n            }\n        }\n    };\n    /**\n     * Get the properties to be maintained in the persisted state.\n     * @returns string\n     */\n    MenuBase.prototype.getPersistData = function () {\n        return '';\n    };\n    /**\n     * Get wrapper element.\n     * @returns Element\n     * @private\n     */\n    MenuBase.prototype.getWrapper = function () {\n        return closest(this.element, '.e-' + this.getModuleName() + '-wrapper');\n    };\n    MenuBase.prototype.getIndex = function (data, isUniqueId, items, nIndex, isCallBack, level) {\n        if (items === void 0) { items = this.items; }\n        if (nIndex === void 0) { nIndex = []; }\n        if (isCallBack === void 0) { isCallBack = false; }\n        if (level === void 0) { level = 0; }\n        var item;\n        level = isCallBack ? level + 1 : 0;\n        for (var i = 0, len = items.length; i < len; i++) {\n            item = items[i];\n            if ((isUniqueId ? item[this.getField('itemId', level)] : item[this.getField('text', level)]) === data) {\n                nIndex.push(i);\n                break;\n            }\n            else if (item[this.getField('children', level)]\n                && item[this.getField('children', level)].length) {\n                nIndex = this.getIndex(data, isUniqueId, item[this.getField('children', level)], nIndex, true, level);\n                if (nIndex[nIndex.length - 1] === -1) {\n                    if (i !== len - 1) {\n                        nIndex.pop();\n                    }\n                }\n                else {\n                    nIndex.unshift(i);\n                    break;\n                }\n            }\n            else {\n                if (i === len - 1) {\n                    nIndex.push(-1);\n                }\n            }\n        }\n        return (!isCallBack && nIndex[0] === -1) ? [] : nIndex;\n    };\n    /**\n     * This method is used to enable or disable the menu items in the Menu based on the items and enable argument.\n     * @param items Text items that needs to be enabled/disabled.\n     * @param enable Set `true`/`false` to enable/disable the list items.\n     * @param isUniqueId - Set `true` if it is a unique id.\n     * @returns void\n     */\n    MenuBase.prototype.enableItems = function (items, enable, isUniqueId) {\n        if (enable === void 0) { enable = true; }\n        var ul;\n        var idx;\n        var navIdx;\n        var disabled = DISABLED;\n        var skipItem;\n        for (var i = 0; i < items.length; i++) {\n            navIdx = this.getIndex(items[i], isUniqueId);\n            if (this.navIdx.length) {\n                if (navIdx.length !== 1) {\n                    skipItem = false;\n                    for (var i_1 = 0, len = navIdx.length - 1; i_1 < len; i_1++) {\n                        if (navIdx[i_1] !== this.navIdx[i_1]) {\n                            skipItem = true;\n                            break;\n                        }\n                    }\n                    if (skipItem) {\n                        continue;\n                    }\n                }\n            }\n            else {\n                if (navIdx.length !== 1) {\n                    continue;\n                }\n            }\n            idx = navIdx.pop();\n            ul = this.getUlByNavIdx(navIdx.length);\n            if (ul) {\n                if (enable) {\n                    if (this.isMenu) {\n                        ul.children[idx].classList.remove(disabled);\n                        ul.children[idx].removeAttribute('aria-disabled');\n                    }\n                    else {\n                        if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n                            ul.children[idx + 1].classList.remove(disabled);\n                        }\n                        else {\n                            ul.children[idx].classList.remove(disabled);\n                        }\n                    }\n                }\n                else {\n                    if (this.isMenu) {\n                        ul.children[idx].classList.add(disabled);\n                        ul.children[idx].setAttribute('aria-disabled', 'true');\n                    }\n                    else {\n                        if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n                            ul.children[idx + 1].classList.add(disabled);\n                        }\n                        else {\n                            ul.children[idx].classList.add(disabled);\n                        }\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * This method is used to show the menu items in the Menu based on the items text.\n     * @param items Text items that needs to be shown.\n     * @param isUniqueId - Set `true` if it is a unique id.\n     * @returns void\n     */\n    MenuBase.prototype.showItems = function (items, isUniqueId) {\n        this.showHideItems(items, false, isUniqueId);\n    };\n    /**\n     * This method is used to hide the menu items in the Menu based on the items text.\n     * @param items Text items that needs to be hidden.\n     * @returns void\n     */\n    MenuBase.prototype.hideItems = function (items, isUniqueId) {\n        this.showHideItems(items, true, isUniqueId);\n    };\n    MenuBase.prototype.showHideItems = function (items, ishide, isUniqueId) {\n        var ul;\n        var index;\n        var navIdx;\n        for (var i = 0; i < items.length; i++) {\n            navIdx = this.getIndex(items[i], isUniqueId);\n            index = navIdx.pop();\n            ul = this.getUlByNavIdx(navIdx.length);\n            if (ul) {\n                if (ishide) {\n                    if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n                        ul.children[index + 1].classList.add(HIDE);\n                    }\n                    else {\n                        ul.children[index].classList.add(HIDE);\n                    }\n                }\n                else {\n                    if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n                        ul.children[index + 1].classList.remove(HIDE);\n                    }\n                    else {\n                        ul.children[index].classList.remove(HIDE);\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * It is used to remove the menu items from the Menu based on the items text.\n     * @param items Text items that needs to be removed.\n     * @returns void\n     */\n    MenuBase.prototype.removeItems = function (items, isUniqueId) {\n        var idx;\n        var navIdx;\n        var iitems;\n        for (var i = 0; i < items.length; i++) {\n            navIdx = this.getIndex(items[i], isUniqueId);\n            idx = navIdx.pop();\n            iitems = this.getItems(navIdx);\n            this.removeItem(iitems, navIdx, idx);\n        }\n    };\n    /**\n     * It is used to insert the menu items after the specified menu item text.\n     * @param items Items that needs to be inserted.\n     * @param text Text item after that the element to be inserted.\n     * @returns void\n     */\n    MenuBase.prototype.insertAfter = function (items, text, isUniqueId) {\n        this.insertItems(items, text, isUniqueId);\n    };\n    /**\n     * It is used to insert the menu items before the specified menu item text.\n     * @param items Items that needs to be inserted.\n     * @param text Text item before that the element to be inserted.\n     * @param isUniqueId - Set `true` if it is a unique id.\n     * @returns void\n     */\n    MenuBase.prototype.insertBefore = function (items, text, isUniqueId) {\n        this.insertItems(items, text, isUniqueId, false);\n    };\n    MenuBase.prototype.insertItems = function (items, text, isUniqueId, isAfter) {\n        if (isAfter === void 0) { isAfter = true; }\n        var li;\n        var idx;\n        var navIdx;\n        var iitems;\n        var menuitem;\n        var showIcon;\n        for (var i = 0; i < items.length; i++) {\n            navIdx = this.getIndex(text, isUniqueId);\n            idx = navIdx.pop();\n            iitems = this.getItems(navIdx);\n            menuitem = new MenuItem(iitems[0], 'items', items[i], true);\n            iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n            var uls = this.isMenu ? [this.getWrapper()].concat(this.getPopups()) : [].slice.call(this.getWrapper().children);\n            if (navIdx.length < uls.length) {\n                idx = isAfter ? idx + 1 : idx;\n                showIcon = this.hasField(iitems, this.getField('iconCss', navIdx.length - 1));\n                li = this.createItems(iitems).children[idx];\n                var ul = this.isMenu ? select('.e-menu-parent', uls[navIdx.length]) : uls[navIdx.length];\n                ul.insertBefore(li, ul.children[idx]);\n            }\n        }\n    };\n    MenuBase.prototype.removeAttributes = function () {\n        var _this = this;\n        ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n            _this.element.style.removeProperty(key);\n        });\n        ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n            if (key === 'class' && _this.element.classList.contains('e-menu-parent')) {\n                _this.element.classList.remove('e-menu-parent');\n            }\n            if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n                _this.element.removeAttribute(key);\n            }\n            if (_this.isMenu && key === 'class' && _this.element.classList.contains('e-vertical')) {\n                _this.element.classList.remove('e-vertical');\n            }\n        });\n    };\n    /**\n     * Destroys the widget.\n     * @returns void\n     */\n    MenuBase.prototype.destroy = function () {\n        var wrapper = this.getWrapper();\n        if (wrapper) {\n            this.unWireEvents();\n            if (!this.isMenu) {\n                this.clonedElement.style.display = '';\n                if (this.clonedElement.tagName === 'EJS-CONTEXTMENU') {\n                    addClass([this.clonedElement], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n                    this.element = this.clonedElement;\n                }\n                else {\n                    if (this.refreshing && this.clonedElement.childElementCount && this.clonedElement.children[0].tagName === 'LI') {\n                        this.setProperties({ 'items': [] }, true);\n                    }\n                    if (document.getElementById(this.clonedElement.id)) {\n                        var refEle = this.clonedElement.nextElementSibling;\n                        refEle && refEle !== wrapper ? this.clonedElement.parentElement.insertBefore(this.element, refEle) :\n                            this.clonedElement.parentElement.appendChild(this.element);\n                        if (isBlazor()) {\n                            this.element = this.removeChildElement(this.element);\n                        }\n                        else {\n                            this.element.innerHTML = '';\n                        }\n                        append([].slice.call(this.clonedElement.children), this.element);\n                        detach(this.clonedElement);\n                        this.removeAttributes();\n                    }\n                }\n                this.clonedElement = null;\n            }\n            else {\n                this.closeMenu();\n                if (isBlazor()) {\n                    this.element = this.removeChildElement(this.element);\n                }\n                else {\n                    this.element.innerHTML = '';\n                }\n                this.removeAttributes();\n                wrapper.parentNode.insertBefore(this.element, wrapper);\n            }\n            if (this.isMenu && this.clonedElement) {\n                detach(this.element);\n                wrapper.style.display = '';\n                wrapper.classList.remove('e-' + this.getModuleName() + '-wrapper');\n                wrapper.removeAttribute('data-ripple');\n            }\n            else {\n                detach(wrapper);\n            }\n            _super.prototype.destroy.call(this);\n            if (this.template) {\n                this.clearTemplate(['template']);\n            }\n        }\n    };\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"beforeItemRender\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"beforeOpen\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"onOpen\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"beforeClose\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"onClose\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"select\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"created\", void 0);\n    __decorate([\n        Property('')\n    ], MenuBase.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], MenuBase.prototype, \"showItemOnClick\", void 0);\n    __decorate([\n        Property('')\n    ], MenuBase.prototype, \"target\", void 0);\n    __decorate([\n        Property('')\n    ], MenuBase.prototype, \"filter\", void 0);\n    __decorate([\n        Property(null)\n    ], MenuBase.prototype, \"template\", void 0);\n    __decorate([\n        Property(false)\n    ], MenuBase.prototype, \"enableScrolling\", void 0);\n    __decorate([\n        Property(false)\n    ], MenuBase.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Complex({ itemId: \"id\", text: \"text\", parentId: \"parentId\", iconCss: \"iconCss\", url: \"url\", separator: \"separator\", children: \"items\" }, FieldSettings)\n    ], MenuBase.prototype, \"fields\", void 0);\n    __decorate([\n        Collection([], MenuItem)\n    ], MenuBase.prototype, \"items\", void 0);\n    __decorate([\n        Complex({ duration: 400, easing: 'ease', effect: 'SlideDown' }, MenuAnimationSettings)\n    ], MenuBase.prototype, \"animationSettings\", void 0);\n    MenuBase = __decorate([\n        NotifyPropertyChanges\n    ], MenuBase);\n    return MenuBase;\n}(Component));\nexport { MenuBase };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// <reference path='../common/menu-base-model.d.ts'/>\nimport { attributes, getUniqueID, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { getZindexPartial } from '@syncfusion/ej2-popups';\nimport { MenuBase, MenuItem } from '../common/menu-base';\n/**\n * The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.\n * ```html\n * <div id = 'target'></div>\n * <ul id = 'contextmenu'></ul>\n * ```\n * ```typescript\n * <script>\n * var contextMenuObj = new ContextMenu({items: [{ text: 'Cut' }, { text: 'Copy' },{ text: 'Paste' }], target: '#target'});\n * </script>\n * ```\n */\nvar ContextMenu = /** @class */ (function (_super) {\n    __extends(ContextMenu, _super);\n    /**\n     * Constructor for creating the widget.\n     * @private\n     */\n    function ContextMenu(options, element) {\n        return _super.call(this, options, element) || this;\n    }\n    /**\n     * For internal use only - prerender processing.\n     * @private\n     */\n    ContextMenu.prototype.preRender = function () {\n        this.isMenu = false;\n        this.element.id = this.element.id || getUniqueID('ej2-contextmenu');\n        _super.prototype.preRender.call(this);\n    };\n    ContextMenu.prototype.initialize = function () {\n        _super.prototype.initialize.call(this);\n        attributes(this.element, { 'role': 'context menu', 'tabindex': '0' });\n        this.element.style.zIndex = getZindexPartial(this.element).toString();\n    };\n    /**\n     * This method is used to open the ContextMenu in specified position.\n     * @param top - To specify ContextMenu vertical positioning.\n     * @param left - To specify ContextMenu horizontal positioning.\n     * @param target - To calculate z-index for ContextMenu based upon the specified target.\n     * @method open\n     * @returns void\n     */\n    ContextMenu.prototype.open = function (top, left, target) {\n        _super.prototype.openMenu.call(this, null, null, top, left, null, target);\n    };\n    /**\n     * Closes the ContextMenu if it is opened.\n     */\n    ContextMenu.prototype.close = function () {\n        _super.prototype.closeMenu.call(this);\n    };\n    /**\n     * Called internally if any of the property value changed\n     * @private\n     * @param {ContextMenuModel} newProp\n     * @param {ContextMenuModel} oldProp\n     * @returns void\n     */\n    ContextMenu.prototype.onPropertyChanged = function (newProp, oldProp) {\n        _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'filter':\n                    this.close();\n                    this.filter = newProp.filter;\n                    break;\n                case 'target':\n                    this.unWireEvents(oldProp.target);\n                    this.wireEvents();\n                    break;\n            }\n        }\n    };\n    /**\n     * Get module name.\n     * @returns string\n     * @private\n     */\n    ContextMenu.prototype.getModuleName = function () {\n        return 'contextmenu';\n    };\n    __decorate([\n        Property('')\n    ], ContextMenu.prototype, \"target\", void 0);\n    __decorate([\n        Property('')\n    ], ContextMenu.prototype, \"filter\", void 0);\n    __decorate([\n        Collection([], MenuItem)\n    ], ContextMenu.prototype, \"items\", void 0);\n    ContextMenu = __decorate([\n        NotifyPropertyChanges\n    ], ContextMenu);\n    return ContextMenu;\n}(MenuBase));\nexport { ContextMenu };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isUndefined, Browser, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { rippleEffect, Animation, remove } from '@syncfusion/ej2-base';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { updateBlazorTemplate, resetBlazorTemplate, isBlazor, getElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, closest, matches, detach, select, selectAll, isVisible, append } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined as isNOU, Touch, getValue, setValue, extend, merge, attributes } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-treeview';\nvar CONTROL = 'e-control';\nvar COLLAPSIBLE = 'e-icon-collapsible';\nvar EXPANDABLE = 'e-icon-expandable';\nvar LISTITEM = 'e-list-item';\nvar LISTTEXT = 'e-list-text';\nvar LISTICON = 'e-list-icon';\nvar LISTIMG = 'e-list-img';\nvar LISTURL = 'e-list-url';\nvar PARENTITEM = 'e-list-parent';\nvar HOVER = 'e-hover';\nvar ACTIVE = 'e-active';\nvar LOAD = 'e-icons-spinner';\nvar PROCESS = 'e-process';\nvar ICON = 'e-icons';\nvar TEXTWRAP = 'e-text-content';\nvar INPUT = 'e-input';\nvar INPUTGROUP = 'e-input-group';\nvar TREEINPUT = 'e-tree-input';\nvar EDITING = 'e-editing';\nvar RTL = 'e-rtl';\nvar INTERACTION = 'e-interaction';\nvar DRAGITEM = 'e-drag-item';\nvar DROPPABLE = 'e-droppable';\nvar DRAGGING = 'e-dragging';\nvar SIBLING = 'e-sibling';\nvar DROPIN = 'e-drop-in';\nvar DROPNEXT = 'e-drop-next';\nvar DROPOUT = 'e-drop-out';\nvar NODROP = 'e-no-drop';\nvar FULLROWWRAP = 'e-fullrow-wrap';\nvar FULLROW = 'e-fullrow';\nvar SELECTED = 'e-selected';\nvar EXPANDED = 'e-expanded';\nvar NODECOLLAPSED = 'e-node-collapsed';\nvar DISABLE = 'e-disable';\nvar CONTENT = 'e-content';\nvar DOWNTAIL = 'e-downtail';\nvar DROPCOUNT = 'e-drop-count';\nvar CHECK = 'e-check';\nvar INDETERMINATE = 'e-stop';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar RIPPLE = 'e-ripple';\nvar RIPPLEELMENT = 'e-ripple-element';\nvar FOCUS = 'e-node-focus';\nvar IMAGE = 'e-list-img';\nvar BIGGER = 'e-bigger';\nvar SMALL = 'e-small';\nvar CHILD = 'e-has-child';\nvar ITEM_ANIMATION_ACTIVE = 'e-animation-active';\nvar DISABLED = 'e-disabled';\nvar treeAriaAttr = {\n    treeRole: 'tree',\n    itemRole: 'treeitem',\n    listRole: 'group',\n    itemText: '',\n    wrapperRole: '',\n};\n/**\n * Configures the fields to bind to the properties of node in the TreeView component.\n */\nvar FieldsSettings = /** @class */ (function (_super) {\n    __extends(FieldsSettings, _super);\n    function FieldsSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('child')\n    ], FieldsSettings.prototype, \"child\", void 0);\n    __decorate([\n        Property([])\n    ], FieldsSettings.prototype, \"dataSource\", void 0);\n    __decorate([\n        Property('expanded')\n    ], FieldsSettings.prototype, \"expanded\", void 0);\n    __decorate([\n        Property('hasChildren')\n    ], FieldsSettings.prototype, \"hasChildren\", void 0);\n    __decorate([\n        Property('htmlAttributes')\n    ], FieldsSettings.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Property('iconCss')\n    ], FieldsSettings.prototype, \"iconCss\", void 0);\n    __decorate([\n        Property('id')\n    ], FieldsSettings.prototype, \"id\", void 0);\n    __decorate([\n        Property('imageUrl')\n    ], FieldsSettings.prototype, \"imageUrl\", void 0);\n    __decorate([\n        Property('isChecked')\n    ], FieldsSettings.prototype, \"isChecked\", void 0);\n    __decorate([\n        Property('parentID')\n    ], FieldsSettings.prototype, \"parentID\", void 0);\n    __decorate([\n        Property(null)\n    ], FieldsSettings.prototype, \"query\", void 0);\n    __decorate([\n        Property('selected')\n    ], FieldsSettings.prototype, \"selected\", void 0);\n    __decorate([\n        Property(null)\n    ], FieldsSettings.prototype, \"tableName\", void 0);\n    __decorate([\n        Property('text')\n    ], FieldsSettings.prototype, \"text\", void 0);\n    __decorate([\n        Property('tooltip')\n    ], FieldsSettings.prototype, \"tooltip\", void 0);\n    __decorate([\n        Property('navigateUrl')\n    ], FieldsSettings.prototype, \"navigateUrl\", void 0);\n    return FieldsSettings;\n}(ChildProperty));\nexport { FieldsSettings };\n/**\n * Configures animation settings for the TreeView component.\n */\nvar ActionSettings = /** @class */ (function (_super) {\n    __extends(ActionSettings, _super);\n    function ActionSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('SlideDown')\n    ], ActionSettings.prototype, \"effect\", void 0);\n    __decorate([\n        Property(400)\n    ], ActionSettings.prototype, \"duration\", void 0);\n    __decorate([\n        Property('linear')\n    ], ActionSettings.prototype, \"easing\", void 0);\n    return ActionSettings;\n}(ChildProperty));\nexport { ActionSettings };\n/**\n * Configures the animation settings for expanding and collapsing nodes in TreeView.\n */\nvar NodeAnimationSettings = /** @class */ (function (_super) {\n    __extends(NodeAnimationSettings, _super);\n    function NodeAnimationSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, ActionSettings)\n    ], NodeAnimationSettings.prototype, \"collapse\", void 0);\n    __decorate([\n        Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, ActionSettings)\n    ], NodeAnimationSettings.prototype, \"expand\", void 0);\n    return NodeAnimationSettings;\n}(ChildProperty));\nexport { NodeAnimationSettings };\n/**\n * The TreeView component is used to represent hierarchical data in a tree like structure with advanced\n * functions to perform edit, drag and drop, selection with check-box, and more.\n * ```html\n *  <div id=\"tree\"></div>\n * ```\n * ```typescript\n *  let treeObj: TreeView = new TreeView();\n *  treeObj.appendTo('#tree');\n * ```\n */\nvar TreeView = /** @class */ (function (_super) {\n    __extends(TreeView, _super);\n    function TreeView(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.isRefreshed = false;\n        _this.preventExpand = false;\n        _this.checkedElement = [];\n        _this.disableNode = [];\n        _this.validArr = [];\n        _this.expandChildren = [];\n        _this.isFieldChange = false;\n        _this.changeDataSource = false;\n        _this.isBlazorExpandedNodes = [];\n        _this.mouseDownStatus = false;\n        return _this;\n    }\n    TreeView_1 = TreeView;\n    /**\n     * Get component name.\n     * @returns string\n     * @private\n     */\n    TreeView.prototype.getModuleName = function () {\n        return 'treeview';\n    };\n    /**\n     * Initialize the event handler\n     */\n    TreeView.prototype.preRender = function () {\n        var _this = this;\n        this.isBlazorPlatform = (isBlazor() && this.isServerRendered);\n        this.checkActionNodes = [];\n        this.parentNodeCheck = [];\n        this.dragStartAction = false;\n        this.isAnimate = false;\n        this.keyConfigs = {\n            escape: 'escape',\n            end: 'end',\n            enter: 'enter',\n            f2: 'f2',\n            home: 'home',\n            moveDown: 'downarrow',\n            moveLeft: 'leftarrow',\n            moveRight: 'rightarrow',\n            moveUp: 'uparrow',\n            ctrlDown: 'ctrl+downarrow',\n            ctrlUp: 'ctrl+uparrow',\n            ctrlEnter: 'ctrl+enter',\n            ctrlHome: 'ctrl+home',\n            ctrlEnd: 'ctrl+end',\n            ctrlA: 'ctrl+A',\n            shiftDown: 'shift+downarrow',\n            shiftUp: 'shift+uparrow',\n            shiftEnter: 'shift+enter',\n            shiftHome: 'shift+home',\n            shiftEnd: 'shift+end',\n            csDown: 'ctrl+shift+downarrow',\n            csUp: 'ctrl+shift+uparrow',\n            csEnter: 'ctrl+shift+enter',\n            csHome: 'ctrl+shift+home',\n            csEnd: 'ctrl+shift+end',\n            space: 'space',\n        };\n        this.listBaseOption = {\n            expandCollapse: true,\n            showIcon: true,\n            expandIconClass: EXPANDABLE,\n            ariaAttributes: treeAriaAttr,\n            expandIconPosition: 'Left',\n            itemCreated: function (e) {\n                _this.beforeNodeCreate(e);\n            },\n            enableHtmlSanitizer: this.enableHtmlSanitizer,\n            itemNavigable: this.fullRowNavigable,\n        };\n        this.updateListProp(this.fields);\n        this.aniObj = new Animation({});\n        this.treeList = [];\n        this.isLoaded = false;\n        this.isInitalExpand = false;\n        this.expandChildren = [];\n        this.index = 0;\n        this.setTouchClass();\n        if (isNOU(this.selectedNodes)) {\n            this.setProperties({ selectedNodes: [] }, true);\n        }\n        if (isNOU(this.checkedNodes)) {\n            this.setProperties({ checkedNodes: [] }, true);\n        }\n        if (isNOU(this.expandedNodes)) {\n            this.setProperties({ expandedNodes: [] }, true);\n        }\n        else {\n            this.isInitalExpand = true;\n        }\n    };\n    /**\n     * Get the properties to be maintained in the persisted state.\n     * @returns string\n     * @hidden\n     */\n    TreeView.prototype.getPersistData = function () {\n        var keyEntity = ['selectedNodes', 'checkedNodes', 'expandedNodes'];\n        return this.addOnPersist(keyEntity);\n    };\n    /**\n     * To Initialize the control rendering\n     * @private\n     */\n    TreeView.prototype.render = function () {\n        this.initialRender = true;\n        this.blazorInitialRender = false;\n        this.initialize();\n        this.setDataBinding(false);\n        this.setDisabledMode();\n        this.setExpandOnType();\n        if (!this.disabled) {\n            this.setRipple();\n        }\n        this.wireEditingEvents(this.allowEditing);\n        this.setDragAndDrop(this.allowDragAndDrop);\n        if (!this.disabled) {\n            this.wireEvents();\n        }\n        if (!this.isBlazorPlatform) {\n            this.initialRender = false;\n        }\n        this.renderComplete();\n    };\n    TreeView.prototype.initialize = function () {\n        if (!this.isBlazorPlatform) {\n            this.element.setAttribute('role', 'tree');\n            this.element.setAttribute('tabindex', '0');\n            this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n            this.setCssClass(null, this.cssClass);\n            this.setEnableRtl();\n            this.setFullRow(this.fullRowSelect);\n        }\n        this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n    };\n    TreeView.prototype.setDisabledMode = function () {\n        if (this.disabled) {\n            this.element.classList.add(DISABLED);\n        }\n        else {\n            this.element.classList.remove(DISABLED);\n        }\n    };\n    TreeView.prototype.setEnableRtl = function () {\n        this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n    };\n    TreeView.prototype.setRipple = function () {\n        var tempStr = '.' + FULLROW + ',.' + TEXTWRAP;\n        var rippleModel = {\n            selector: tempStr,\n            ignore: '.' + TEXTWRAP + ' > .' + ICON + ',.' + INPUTGROUP + ',.' + INPUT + ', .' + CHECKBOXWRAP\n        };\n        this.rippleFn = rippleEffect(this.element, rippleModel);\n        var iconModel = {\n            selector: '.' + TEXTWRAP + ' > .' + ICON,\n            isCenterRipple: true,\n        };\n        this.rippleIconFn = rippleEffect(this.element, iconModel);\n    };\n    TreeView.prototype.setFullRow = function (isEnabled) {\n        isEnabled ? addClass([this.element], FULLROWWRAP) : removeClass([this.element], FULLROWWRAP);\n    };\n    TreeView.prototype.setMultiSelect = function (isEnabled) {\n        var firstUl = select('.' + PARENTITEM, this.element);\n        if (isEnabled) {\n            firstUl.setAttribute('aria-multiselectable', 'true');\n        }\n        else {\n            firstUl.removeAttribute('aria-multiselectable');\n        }\n    };\n    TreeView.prototype.templateComplier = function (template) {\n        if (template) {\n            var e = void 0;\n            this.element.classList.add(INTERACTION);\n            try {\n                if (document.querySelectorAll(template).length) {\n                    return compile(document.querySelector(template).innerHTML.trim());\n                }\n            }\n            catch (e) {\n                return compile(template);\n            }\n        }\n        this.element.classList.remove(INTERACTION);\n        return undefined;\n    };\n    TreeView.prototype.setDataBinding = function (changeDataSource) {\n        var _this = this;\n        this.treeList.push('false');\n        if (this.fields.dataSource instanceof DataManager) {\n            // tslint:disable\n            this.isOffline = (this.isBlazorPlatform ? this.fields.dataSource.offline :\n                this.fields.dataSource.dataSource.offline);\n            if (this.fields.dataSource.ready) {\n                this.fields.dataSource.ready.then(function (e) {\n                    // tslint:disable\n                    _this.isOffline = (_this.isBlazorPlatform ? _this.fields.dataSource.offline :\n                        _this.fields.dataSource.dataSource.offline);\n                    if (_this.fields.dataSource instanceof DataManager && _this.isOffline) {\n                        _this.treeList.pop();\n                        _this.treeData = e.result;\n                        _this.isNumberTypeId = _this.getType();\n                        _this.setRootData();\n                        _this.renderItems(true);\n                        if (_this.treeList.length === 0 && !_this.isLoaded) {\n                            _this.finalize();\n                        }\n                    }\n                }).catch(function (e) {\n                    _this.trigger('actionFailure', { error: e });\n                });\n            }\n            else {\n                this.fields.dataSource.executeQuery(this.getQuery(this.fields)).then(function (e) {\n                    _this.treeList.pop();\n                    _this.treeData = e.result;\n                    _this.isNumberTypeId = _this.getType();\n                    _this.setRootData();\n                    if (changeDataSource) {\n                        _this.changeDataSource = true;\n                    }\n                    _this.renderItems(true);\n                    _this.changeDataSource = false;\n                    if (_this.treeList.length === 0 && !_this.isLoaded) {\n                        _this.finalize();\n                    }\n                }).catch(function (e) {\n                    _this.trigger('actionFailure', { error: e });\n                });\n            }\n        }\n        else {\n            this.treeList.pop();\n            if (isNOU(this.fields.dataSource)) {\n                this.rootData = this.treeData = [];\n            }\n            else {\n                this.treeData = JSON.parse(JSON.stringify(this.fields.dataSource));\n                this.setRootData();\n            }\n            this.isNumberTypeId = this.getType();\n            this.renderItems(false);\n        }\n        if (this.treeList.length === 0 && !this.isLoaded) {\n            this.finalize();\n        }\n    };\n    TreeView.prototype.getQuery = function (mapper, value) {\n        if (value === void 0) { value = null; }\n        var columns = [];\n        var query;\n        if (!mapper.query) {\n            query = new Query();\n            var prop = this.getActualProperties(mapper);\n            for (var _i = 0, _a = Object.keys(prop); _i < _a.length; _i++) {\n                var col = _a[_i];\n                if (col !== 'dataSource' && col !== 'tableName' && col !== 'child' && !!mapper[col]\n                    && col !== 'url' && columns.indexOf(mapper[col]) === -1) {\n                    columns.push(mapper[col]);\n                }\n            }\n            query.select(columns);\n            if (prop.hasOwnProperty('tableName')) {\n                query.from(mapper.tableName);\n            }\n        }\n        else {\n            query = mapper.query.clone();\n        }\n        ListBase.addSorting(this.sortOrder, mapper.text, query);\n        if (!isNOU(value) && !isNOU(mapper.parentID)) {\n            query.where(mapper.parentID, 'equal', (this.isNumberTypeId ? parseFloat(value) : value));\n        }\n        return query;\n    };\n    TreeView.prototype.getType = function () {\n        return this.treeData[0] ? ((typeof getValue(this.fields.id, this.treeData[0]) === 'number') ? true : false) : false;\n    };\n    TreeView.prototype.setRootData = function () {\n        this.dataType = this.getDataType(this.treeData, this.fields);\n        if (this.dataType === 1) {\n            this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n            var rootItems = this.getChildNodes(this.treeData, undefined, true);\n            if (isNOU(rootItems)) {\n                this.rootData = [];\n            }\n            else {\n                this.rootData = rootItems;\n            }\n        }\n        else {\n            this.rootData = this.treeData;\n        }\n    };\n    TreeView.prototype.renderItems = function (isSorted) {\n        // tslint:disable\n        if (!this.isBlazorPlatform || (this.isBlazorPlatform && this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) || this.changeDataSource) {\n            this.listBaseOption.ariaAttributes.level = 1;\n            var sortedData = this.getSortedData(this.rootData);\n            this.ulElement = ListBase.createList(this.createElement, isSorted ? this.rootData : sortedData, this.listBaseOption);\n            this.element.appendChild(this.ulElement);\n            var rootNodes = this.ulElement.querySelectorAll('.e-list-item');\n            if (this.loadOnDemand === false) {\n                var i = 0;\n                while (i < rootNodes.length) {\n                    this.renderChildNodes(rootNodes[i], true, null, true);\n                    i++;\n                }\n            }\n            var parentEle = selectAll('.' + PARENTITEM, this.element);\n            if ((parentEle.length === 1 && (rootNodes && rootNodes.length !== 0)) || this.loadOnDemand) {\n                this.finalizeNode(this.element);\n            }\n        }\n        this.updateTemplateForBlazor();\n        this.parentNodeCheck = [];\n        this.parentCheckData = [];\n        this.updateCheckedStateFromDS();\n        if (this.autoCheck && this.showCheckBox && !this.isLoaded) {\n            this.updateParentCheckState();\n        }\n    };\n    TreeView.prototype.updateTemplateForBlazor = function () {\n        if (this.nodeTemplate && this.isBlazorPlatform && !this.isStringTemplate) {\n            this.updateBlazorTemplate();\n        }\n    };\n    /**\n     * Update the checkedNodes from datasource at initial rendering\n     */\n    TreeView.prototype.updateCheckedStateFromDS = function (id) {\n        if (this.treeData && this.showCheckBox) {\n            if (this.dataType === 1) {\n                var mapper = this.fields;\n                var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.isChecked, 'equal', true, false));\n                for (var i = 0; i < resultData.length; i++) {\n                    var resultId = resultData[i][this.fields.id] ? resultData[i][this.fields.id].toString() : null;\n                    var resultPId = resultData[i][this.fields.parentID] ? resultData[i][this.fields.parentID].toString() : null;\n                    if (this.checkedNodes.indexOf(resultId) === -1 && !(this.isLoaded)) {\n                        this.checkedNodes.push(resultId);\n                    }\n                    if (resultData[i][this.fields.hasChildren]) {\n                        var id_1 = resultData[i][this.fields.id];\n                        var childData = new DataManager(this.treeData).\n                            executeLocal(new Query().where(mapper.parentID, 'equal', id_1, false));\n                        for (var child = 0; child < childData.length; child++) {\n                            var childId = childData[child][this.fields.id] ? childData[child][this.fields.id].toString() : null;\n                            if (this.checkedNodes.indexOf(childId) === -1 && this.autoCheck) {\n                                this.checkedNodes.push(childId);\n                            }\n                        }\n                    }\n                }\n                for (var i = 0; i < this.checkedNodes.length; i++) {\n                    var mapper_1 = this.fields;\n                    var checkState = new DataManager(this.treeData).\n                        executeLocal(new Query().where(mapper_1.id, 'equal', this.checkedNodes[i], true));\n                    if (checkState[0] && this.autoCheck) {\n                        this.getCheckedNodeDetails(mapper_1, checkState);\n                        this.checkIndeterminateState(checkState[0]);\n                    }\n                    var checkedData = new DataManager(this.treeData).\n                        executeLocal(new Query().where(mapper_1.parentID, 'equal', this.checkedNodes[i], true));\n                    for (var index = 0; index < checkedData.length; index++) {\n                        var checkedId = checkedData[index][this.fields.id] ? checkedData[index][this.fields.id].toString() : null;\n                        if (this.checkedNodes.indexOf(checkedId) === -1 && this.autoCheck) {\n                            this.checkedNodes.push(checkedId);\n                        }\n                    }\n                }\n            }\n            else if (this.dataType === 2 || (this.fields.dataSource instanceof DataManager &&\n                this.isOffline)) {\n                for (var index = 0; index < this.treeData.length; index++) {\n                    var fieldId = this.treeData[index][this.fields.id] ? this.treeData[index][this.fields.id].toString() : '';\n                    if (this.treeData[index][this.fields.isChecked] && !(this.isLoaded) && this.checkedNodes.indexOf(fieldId) === -1) {\n                        this.checkedNodes.push(fieldId);\n                    }\n                    var childItems = getValue(this.fields.child.toString(), this.treeData[index]);\n                    if (childItems) {\n                        this.updateChildCheckState(childItems, this.treeData[index]);\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * To check whether the list data has sub child and to change the parent check state accordingly\n     */\n    TreeView.prototype.getCheckedNodeDetails = function (mapper, checkNodes) {\n        var id = checkNodes[0][this.fields.parentID] ? checkNodes[0][this.fields.parentID].toString() : null;\n        var count = 0;\n        var element = this.element.querySelector('[data-uid=\"' + checkNodes[0][this.fields.id] + '\"]');\n        var parentEle = this.element.querySelector('[data-uid=\"' + checkNodes[0][this.fields.parentID] + '\"]');\n        if (!element && !parentEle) {\n            var len = this.parentNodeCheck.length;\n            if (this.parentNodeCheck.indexOf(id) === -1) {\n                this.parentNodeCheck.push(id);\n            }\n            var childNodes = this.getChildNodes(this.treeData, id);\n            for (var i = 0; i < childNodes.length; i++) {\n                var childId = childNodes[i][this.fields.id] ? childNodes[i][this.fields.id].toString() : null;\n                if (this.checkedNodes.indexOf(childId) !== -1) {\n                    count++;\n                }\n                if (count === childNodes.length && this.checkedNodes.indexOf(id) === -1) {\n                    this.checkedNodes.push(id);\n                }\n            }\n            var preElement = new DataManager(this.treeData).\n                executeLocal(new Query().where(mapper.id, 'equal', id, true));\n            this.getCheckedNodeDetails(mapper, preElement);\n        }\n        else if (parentEle) {\n            var check = select('.' + CHECK, parentEle);\n            if (!check) {\n                this.changeState(parentEle, 'indeterminate', null, true, true);\n            }\n        }\n    };\n    /**\n     * Update the checkedNodes and parent state when all the child Nodes are in checkedstate at initial rendering\n     */\n    TreeView.prototype.updateParentCheckState = function () {\n        var indeterminate = selectAll('.' + INDETERMINATE, this.element);\n        var childCheckedElement;\n        for (var i = 0; i < indeterminate.length; i++) {\n            var node = closest(indeterminate[i], '.' + LISTITEM);\n            var nodeId = node.getAttribute('data-uid').toString();\n            if (this.dataType === 1) {\n                childCheckedElement = new DataManager(this.treeData).\n                    executeLocal(new Query().where(this.fields.parentID, 'equal', nodeId, true));\n            }\n            else {\n                childCheckedElement = this.getChildNodes(this.treeData, nodeId);\n            }\n            var count = 0;\n            if (childCheckedElement) {\n                for (var j = 0; j < childCheckedElement.length; j++) {\n                    var childId = childCheckedElement[j][this.fields.id].toString();\n                    if (this.checkedNodes.indexOf(childId) !== -1) {\n                        count++;\n                    }\n                }\n                if (count === childCheckedElement.length) {\n                    var nodeCheck = node.getAttribute('data-uid');\n                    if (this.checkedNodes.indexOf(nodeCheck) === -1) {\n                        this.checkedNodes.push(nodeCheck);\n                    }\n                    this.changeState(node, 'check', null, true, true);\n                }\n                else if (count === 0 && this.checkedNodes.length === 0) {\n                    this.changeState(node, 'uncheck', null, true, true);\n                }\n            }\n        }\n    };\n    /**\n     * Change the parent to indeterminate state whenever the child is in checked state which is not rendered in DOM\n     */\n    TreeView.prototype.checkIndeterminateState = function (data) {\n        var element;\n        if (this.dataType === 1) {\n            element = this.element.querySelector('[data-uid=\"' + data[this.fields.parentID] + '\"]');\n        }\n        else {\n            element = this.element.querySelector('[data-uid=\"' + data[this.fields.id] + '\"]');\n        }\n        if (element) {\n            var ariaChecked = element.querySelector('.' + CHECKBOXWRAP).getAttribute('aria-checked');\n            if (ariaChecked !== 'true') {\n                this.changeState(element, 'indeterminate', null, true, true);\n            }\n        }\n        else if (this.dataType === 2) {\n            var len = this.parentNodeCheck.length;\n            if (this.parentNodeCheck.indexOf(data[this.fields.id].toString()) === -1) {\n                this.parentNodeCheck.push(data[this.fields.id].toString());\n            }\n        }\n    };\n    /**\n     * Update the checkedNodes for child and subchild from datasource (hierarchical datasource) at initial rendering\n     */\n    TreeView.prototype.updateChildCheckState = function (childItems, treeData) {\n        var count = 0;\n        var checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : '';\n        for (var index = 0; index < childItems.length; index++) {\n            var checkedChild = childItems[index][this.fields.id] ? childItems[index][this.fields.id].toString() : '';\n            if (childItems[index][this.fields.isChecked] && !(this.isLoaded) && this.checkedNodes.indexOf(checkedChild) === -1) {\n                this.checkedNodes.push(checkedChild);\n            }\n            if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1 && this.autoCheck) {\n                this.checkedNodes.push(checkedChild);\n            }\n            if (this.checkedNodes.indexOf(checkedChild) !== -1 && this.autoCheck) {\n                count++;\n            }\n            var subChildItems = getValue(this.fields.child.toString(), childItems[index]);\n            if (subChildItems) {\n                this.parentCheckData.push(treeData);\n                this.updateChildCheckState(subChildItems, childItems[index]);\n            }\n            if (count === childItems.length && this.autoCheck && this.checkedNodes.indexOf(checkedParent) === -1) {\n                this.checkedNodes.push(checkedParent);\n            }\n        }\n        if (count !== 0 && this.autoCheck) {\n            this.checkIndeterminateState(treeData);\n            for (var len = 0; len < this.parentCheckData.length; len++) {\n                if ((treeData !== this.parentCheckData[len]) && (this.parentCheckData[len])) {\n                    this.checkIndeterminateState(this.parentCheckData[len]);\n                }\n            }\n        }\n        this.parentCheckData = [];\n    };\n    TreeView.prototype.beforeNodeCreate = function (e) {\n        if (this.showCheckBox) {\n            var checkboxEle = createCheckBox(this.createElement, true, { cssClass: this.touchClass });\n            checkboxEle.setAttribute('role', 'checkbox');\n            var icon = select('div.' + ICON, e.item);\n            var id = e.item.getAttribute('data-uid');\n            e.item.childNodes[0].insertBefore(checkboxEle, e.item.childNodes[0].childNodes[isNOU(icon) ? 0 : 1]);\n            var checkValue = getValue(e.fields.isChecked, e.curData);\n            if (this.checkedNodes.indexOf(id) > -1) {\n                select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n                checkboxEle.setAttribute('aria-checked', 'true');\n                this.addCheck(e.item);\n            }\n            else if (!isNOU(checkValue) && checkValue.toString() === 'true') {\n                select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n                checkboxEle.setAttribute('aria-checked', 'true');\n                this.addCheck(e.item);\n            }\n            else {\n                checkboxEle.setAttribute('aria-checked', 'false');\n            }\n            var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n            EventHandler.add(frame, 'mousedown', this.frameMouseHandler, this);\n            EventHandler.add(frame, 'mouseup', this.frameMouseHandler, this);\n        }\n        if (this.fullRowSelect) {\n            this.createFullRow(e.item);\n        }\n        if (this.allowMultiSelection && !e.item.classList.contains(SELECTED)) {\n            e.item.setAttribute('aria-selected', 'false');\n        }\n        var fields = e.fields;\n        this.addActionClass(e, fields.selected, SELECTED);\n        this.addActionClass(e, fields.expanded, EXPANDED);\n        if (!isNOU(this.nodeTemplateFn)) {\n            var textEle = e.item.querySelector('.' + LISTTEXT);\n            var dataId = e.item.getAttribute('data-uid');\n            textEle.innerHTML = '';\n            this.renderNodeTemplate(e.curData, textEle, dataId);\n        }\n        var eventArgs = {\n            node: e.item,\n            nodeData: e.curData,\n            text: e.text,\n        };\n        if (!this.isRefreshed) {\n            this.trigger('drawNode', eventArgs);\n        }\n    };\n    TreeView.prototype.frameMouseHandler = function (e) {\n        var rippleSpan = select('.' + CHECKBOXRIPPLE, e.target.parentElement);\n        rippleMouseHandler(e, rippleSpan);\n    };\n    TreeView.prototype.addActionClass = function (e, action, cssClass) {\n        var data = e.curData;\n        var actionValue = getValue(action, data);\n        if (!isNOU(actionValue) && actionValue.toString() !== 'false') {\n            e.item.classList.add(cssClass);\n        }\n    };\n    TreeView.prototype.getDataType = function (ds, mapper) {\n        if (this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n            for (var i = 0; i < ds.length; i++) {\n                if (this.isOffline) {\n                    if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i])) && !isNOU(getValue(mapper.parentID, ds[i]))) {\n                        return 1;\n                    }\n                }\n                else if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i]))) {\n                    return 1;\n                }\n            }\n            return 2;\n        }\n        for (var i = 0, len = ds.length; i < len; i++) {\n            if ((typeof mapper.child === 'string') && !isNOU(getValue(mapper.child, ds[i]))) {\n                return 2;\n            }\n            if (!isNOU(getValue(mapper.parentID, ds[i])) || !isNOU(getValue(mapper.hasChildren, ds[i]))) {\n                return 1;\n            }\n        }\n        return 1;\n    };\n    TreeView.prototype.getGroupedData = function (dataSource, groupBy) {\n        var cusQuery = new Query().group(groupBy);\n        var ds = ListBase.getDataSource(dataSource, cusQuery);\n        var grpItem = [];\n        for (var j = 0; j < ds.length; j++) {\n            var itemObj = ds[j].items;\n            grpItem.push(itemObj);\n        }\n        return grpItem;\n    };\n    TreeView.prototype.getSortedData = function (list) {\n        if (list && this.sortOrder !== 'None') {\n            list = ListBase.getDataSource(list, ListBase.addSorting(this.sortOrder, this.fields.text));\n        }\n        return list;\n    };\n    TreeView.prototype.finalizeNode = function (element) {\n        var iNodes = selectAll('.' + IMAGE, element);\n        for (var k = 0; k < iNodes.length; k++) {\n            iNodes[k].setAttribute('alt', IMAGE);\n        }\n        if (this.isLoaded) {\n            var sNodes = selectAll('.' + SELECTED, element);\n            for (var i = 0; i < sNodes.length; i++) {\n                this.selectNode(sNodes[i], null);\n                break;\n            }\n            removeClass(sNodes, SELECTED);\n        }\n        var cNodes = selectAll('.' + LISTITEM + ':not(.' + EXPANDED + ')', element);\n        for (var j = 0; j < cNodes.length; j++) {\n            var icon = select('div.' + ICON, cNodes[j]);\n            if (icon && icon.classList.contains(EXPANDABLE)) {\n                this.disableExpandAttr(cNodes[j]);\n            }\n        }\n        var eNodes = selectAll('.' + EXPANDED, element);\n        if (!this.isInitalExpand) {\n            for (var i = 0; i < eNodes.length; i++) {\n                this.renderChildNodes(eNodes[i]);\n            }\n        }\n        removeClass(eNodes, EXPANDED);\n        this.updateList();\n        if (this.isLoaded) {\n            this.updateCheckedProp();\n        }\n    };\n    TreeView.prototype.updateCheckedProp = function () {\n        if (this.showCheckBox) {\n            var nodes = [].concat([], this.checkedNodes);\n            this.setProperties({ checkedNodes: nodes }, true);\n        }\n    };\n    TreeView.prototype.ensureIndeterminate = function () {\n        if (this.autoCheck) {\n            var liElement = selectAll('li', this.element);\n            var ulElement = void 0;\n            for (var i = 0; i < liElement.length; i++) {\n                if (liElement[i].classList.contains(LISTITEM)) {\n                    ulElement = select('.' + PARENTITEM, liElement[i]);\n                    if (ulElement) {\n                        this.ensureParentCheckState(liElement[i]);\n                    }\n                    else {\n                        this.ensureChildCheckState(liElement[i]);\n                    }\n                }\n            }\n        }\n        else {\n            var indeterminate = selectAll('.' + INDETERMINATE, this.element);\n            for (var i = 0; i < indeterminate.length; i++) {\n                indeterminate[i].classList.remove(INDETERMINATE);\n            }\n        }\n    };\n    TreeView.prototype.ensureParentCheckState = function (element) {\n        if (!isNOU(element)) {\n            if (element.classList.contains(ROOT)) {\n                return;\n            }\n            var ulElement = element;\n            if (element.classList.contains(LISTITEM)) {\n                ulElement = select('.' + PARENTITEM, element);\n            }\n            var checkedNodes = selectAll('.' + CHECK, ulElement);\n            var indeterminateNodes = selectAll('.' + INDETERMINATE, ulElement);\n            var nodes = selectAll('.' + LISTITEM, ulElement);\n            var checkBoxEle = element.getElementsByClassName(CHECKBOXWRAP)[0];\n            if (nodes.length === checkedNodes.length) {\n                this.changeState(checkBoxEle, 'check', null, true, true);\n            }\n            else if (checkedNodes.length > 0 || indeterminateNodes.length > 0) {\n                this.changeState(checkBoxEle, 'indeterminate', null, true, true);\n            }\n            else if (checkedNodes.length === 0) {\n                this.changeState(checkBoxEle, 'uncheck', null, true, true);\n            }\n            var parentUL = closest(element, '.' + PARENTITEM);\n            if (!isNOU(parentUL)) {\n                var currentParent = closest(parentUL, '.' + LISTITEM);\n                this.ensureParentCheckState(currentParent);\n            }\n        }\n    };\n    TreeView.prototype.ensureChildCheckState = function (element, e) {\n        if (!isNOU(element)) {\n            var childElement = select('.' + PARENTITEM, element);\n            var checkBoxes = void 0;\n            if (!isNOU(childElement)) {\n                checkBoxes = selectAll('.' + CHECKBOXWRAP, childElement);\n                var isChecked = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n                var parentCheck = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(INDETERMINATE);\n                var childCheck = childElement.querySelectorAll('li');\n                var expandState = childElement.parentElement.getAttribute('aria-expanded');\n                var checkedState = void 0;\n                for (var index = 0; index < checkBoxes.length; index++) {\n                    var childId = childCheck[index].getAttribute('data-uid');\n                    if (!isNOU(this.currentLoadData) && !isNOU(getValue(this.fields.isChecked, this.currentLoadData[index]))) {\n                        checkedState = getValue(this.fields.isChecked, this.currentLoadData[index]) ? 'check' : 'uncheck';\n                        if (this.ele !== -1) {\n                            checkedState = isChecked ? 'check' : 'uncheck';\n                        }\n                        if ((checkedState === 'uncheck') && (!isUndefined(this.parentNodeCheck) && this.autoCheck\n                            && this.parentNodeCheck.indexOf(childId) !== -1)) {\n                            this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n                            checkedState = 'indeterminate';\n                        }\n                    }\n                    else {\n                        var isNodeChecked = checkBoxes[index].getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n                        if (isChecked) {\n                            checkedState = 'check';\n                        }\n                        else if (isNodeChecked && !this.isLoaded) {\n                            checkedState = 'check';\n                        }\n                        else if (this.checkedNodes.indexOf(childId) !== -1 && this.isLoaded && (parentCheck || isChecked)) {\n                            checkedState = 'check';\n                        }\n                        else if (childCheck[index].classList.contains(CHILD) && (!isUndefined(this.parentNodeCheck) && this.autoCheck\n                            && (isChecked || parentCheck) && this.parentNodeCheck.indexOf(childId) !== -1)) {\n                            checkedState = 'indeterminate';\n                            this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n                        }\n                        else if (this.dataType === 1 && (!isUndefined(this.parentNodeCheck) && this.autoCheck &&\n                            (isChecked || parentCheck) && this.parentNodeCheck.indexOf(childId) !== -1)) {\n                            checkedState = 'indeterminate';\n                            this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n                        }\n                        else {\n                            checkedState = 'uncheck';\n                        }\n                    }\n                    this.changeState(checkBoxes[index], checkedState, e, true, true);\n                }\n            }\n            if (this.autoCheck && this.isLoaded) {\n                this.updateParentCheckState();\n            }\n        }\n    };\n    TreeView.prototype.doCheckBoxAction = function (nodes, doCheck) {\n        var li = selectAll('.' + LISTITEM, this.element);\n        if (!isNOU(nodes)) {\n            for (var len = nodes.length; len >= 0; len--) {\n                var liEle = void 0;\n                if (nodes.length === 1) {\n                    liEle = this.getElement(nodes[len - 1]);\n                }\n                else {\n                    liEle = this.getElement(nodes[len]);\n                }\n                if (isNOU(liEle)) {\n                    var node = void 0;\n                    node = nodes[len - nodes.length] ? nodes[len - nodes.length].toString() : nodes[len] ? nodes[len].toString() : null;\n                    if (node !== '' && doCheck && node) {\n                        this.setValidCheckedNode(node);\n                        this.dynamicCheckState(node, doCheck);\n                    }\n                    else if (this.checkedNodes.indexOf(node) !== -1 && node !== '' && !doCheck) {\n                        this.checkedNodes.splice(this.checkedNodes.indexOf(node), 1);\n                        var childItems = this.getChildNodes(this.treeData, node);\n                        if (childItems) {\n                            for (var i = 0; i < childItems.length; i++) {\n                                var id = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : null;\n                                if (this.checkedNodes.indexOf(id) !== -1) {\n                                    this.checkedNodes.splice(this.checkedNodes.indexOf(id), 1);\n                                }\n                            }\n                            if (this.parentNodeCheck.indexOf(node) !== -1) {\n                                this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(node), 1);\n                            }\n                        }\n                        if (node) {\n                            this.dynamicCheckState(node, doCheck);\n                        }\n                        this.updateField(this.treeData, this.fields, node, 'isChecked', null);\n                    }\n                    continue;\n                }\n                var checkBox = select('.' + PARENTITEM + ' .' + CHECKBOXWRAP, liEle);\n                this.validateCheckNode(checkBox, !doCheck, liEle, null);\n            }\n        }\n        else {\n            var checkBoxes = selectAll('.' + CHECKBOXWRAP, this.element);\n            if (this.loadOnDemand) {\n                for (var index = 0; index < checkBoxes.length; index++) {\n                    this.updateFieldChecked(checkBoxes[index], doCheck);\n                    this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck', null, null, null, doCheck);\n                }\n            }\n            else {\n                for (var index = 0; index < checkBoxes.length; index++) {\n                    this.updateFieldChecked(checkBoxes[index], doCheck);\n                    this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck');\n                }\n            }\n        }\n        if (nodes) {\n            for (var j = 0; j < nodes.length; j++) {\n                var node = nodes[j] ? nodes[j].toString() : '';\n                if (!doCheck) {\n                    this.updateField(this.treeData, this.fields, node, 'isChecked', null);\n                }\n            }\n        }\n        if (this.autoCheck) {\n            this.updateParentCheckState();\n        }\n    };\n    TreeView.prototype.updateFieldChecked = function (checkbox, doCheck) {\n        var currLi = closest(checkbox, '.' + LISTITEM);\n        var id = currLi.getAttribute('data-uid');\n        var nodeDetails = this.getNodeData(currLi);\n        if (nodeDetails.isChecked === 'true' && !doCheck) {\n            this.updateField(this.treeData, this.fields, id, 'isChecked', null);\n        }\n    };\n    /**\n     * Changes the parent and child  check state while changing the checkedNodes via setmodel\n     */\n    TreeView.prototype.dynamicCheckState = function (node, doCheck) {\n        if (this.dataType === 1) {\n            var count = 0;\n            var resultId = new DataManager(this.treeData).executeLocal(new Query().where(this.fields.id, 'equal', node, true));\n            if (resultId[0]) {\n                var id = resultId[0][this.fields.id] ? resultId[0][this.fields.id].toString() : null;\n                var parent_1 = resultId[0][this.fields.parentID] ? resultId[0][this.fields.parentID].toString() : null;\n                var parentElement = this.element.querySelector('[data-uid=\"' + parent_1 + '\"]');\n                var indeterminate = parentElement ? select('.' + INDETERMINATE, parentElement) : null;\n                var check = parentElement ? select('.' + CHECK, parentElement) : null;\n                var element = this.element.querySelector('[data-uid=\"' + id + '\"]');\n                var childNodes = this.getChildNodes(this.treeData, parent_1);\n                if (childNodes) {\n                    for (var i = 0; i < childNodes.length; i++) {\n                        var childId = childNodes[i][this.fields.id] ? childNodes[i][this.fields.id].toString() : null;\n                        if (this.checkedNodes.indexOf(childId) !== -1) {\n                            count++;\n                        }\n                    }\n                }\n                if (this.checkedNodes.indexOf(node) !== -1 && parentElement && (id === node) && this.autoCheck) {\n                    this.changeState(parentElement, 'indeterminate', null);\n                }\n                else if (this.checkedNodes.indexOf(node) === -1 && element && (id === node) && !doCheck) {\n                    this.changeState(element, 'uncheck', null);\n                }\n                else if (this.checkedNodes.indexOf(node) !== -1 && element && (id === node) && doCheck) {\n                    this.changeState(element, 'check', null);\n                }\n                else if (this.checkedNodes.indexOf(node) === -1 && !element && parentElement && (id === node) && this.autoCheck\n                    && count !== 0) {\n                    this.changeState(parentElement, 'indeterminate', null);\n                }\n                else if (this.checkedNodes.indexOf(node) === -1 && !element && parentElement && (id === node) && this.autoCheck\n                    && count === 0) {\n                    this.changeState(parentElement, 'uncheck', null);\n                }\n                else if (!element && !parentElement && (id === node) && this.autoCheck) {\n                    this.updateIndeterminate(node, doCheck);\n                }\n            }\n        }\n        else if (this.dataType === 2 || (this.fields.dataSource instanceof DataManager &&\n            this.isOffline)) {\n            var id = void 0;\n            var parentElement = void 0;\n            var check = void 0;\n            for (var i = 0; i < this.treeData.length; i++) {\n                id = this.treeData[i][this.fields.id] ? this.treeData[i][this.fields.id].toString() : '';\n                parentElement = this.element.querySelector('[data-uid=\"' + id + '\"]');\n                check = parentElement ? select('.' + CHECK, parentElement) : null;\n                if (this.checkedNodes.indexOf(id) === -1 && parentElement && check && !doCheck) {\n                    this.changeState(parentElement, 'uncheck', null);\n                }\n                var subChild = getValue(this.fields.child.toString(), this.treeData[i]);\n                if (subChild) {\n                    this.updateChildIndeterminate(subChild, id, node, doCheck, id);\n                }\n            }\n        }\n    };\n    /**\n     * updates the parent and child  check state while changing the checkedNodes via setmodel for listData\n     */\n    TreeView.prototype.updateIndeterminate = function (node, doCheck) {\n        var indeterminateData = this.getTreeData(node);\n        var count = 0;\n        var parent;\n        if (this.dataType === 1) {\n            parent = indeterminateData[0][this.fields.parentID] ? indeterminateData[0][this.fields.parentID].toString() : null;\n        }\n        var childNodes = this.getChildNodes(this.treeData, parent);\n        if (childNodes) {\n            for (var i = 0; i < childNodes.length; i++) {\n                var childId = childNodes[i][this.fields.id] ? childNodes[i][this.fields.id].toString() : null;\n                if (this.checkedNodes.indexOf(childId) !== -1) {\n                    count++;\n                }\n            }\n        }\n        var parentElement = this.element.querySelector('[data-uid=\"' + parent + '\"]');\n        if (parentElement && doCheck) {\n            this.changeState(parentElement, 'indeterminate', null);\n        }\n        else if (!doCheck && parentElement && this.parentNodeCheck.indexOf(parent) === -1 && count !== 0) {\n            this.changeState(parentElement, 'indeterminate', null);\n        }\n        else if (!doCheck && parentElement && this.parentNodeCheck.indexOf(parent) === -1 && count === 0) {\n            this.changeState(parentElement, 'uncheck', null);\n        }\n        else if (!parentElement) {\n            if (!doCheck && this.checkedNodes.indexOf(parent) === -1 && this.parentNodeCheck.indexOf(parent) !== -1) {\n                this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(parent), 1);\n            }\n            else if (doCheck && this.checkedNodes.indexOf(parent) === -1 && this.parentNodeCheck.indexOf(parent) === -1) {\n                this.parentNodeCheck.push(parent);\n            }\n            else if (!doCheck && this.checkedNodes.indexOf(parent) !== -1 && this.parentNodeCheck.indexOf(parent) === -1\n                && count !== 0) {\n                this.parentNodeCheck.push(parent);\n            }\n            this.updateIndeterminate(parent, doCheck);\n            if (this.checkedNodes.indexOf(parent) !== -1 && !doCheck) {\n                this.checkedNodes.splice(this.checkedNodes.indexOf(parent), 1);\n            }\n        }\n    };\n    /**\n     * updates the parent and child  check state while changing the checkedNodes via setmodel for hierarchical data\n     */\n    TreeView.prototype.updateChildIndeterminate = function (subChild, parent, node, doCheck, child) {\n        var count = 0;\n        for (var j = 0; j < subChild.length; j++) {\n            var subId = subChild[j][this.fields.id] ? subChild[j][this.fields.id].toString() : '';\n            if (this.checkedNodes.indexOf(subId) !== -1) {\n                count++;\n            }\n            var parentElement = this.element.querySelector('[data-uid=\"' + parent + '\"]');\n            var indeterminate = parentElement ? select('.' + INDETERMINATE, parentElement) : null;\n            var check = parentElement ? select('.' + CHECK, parentElement) : null;\n            var element = this.element.querySelector('[data-uid=\"' + subId + '\"]');\n            var childElementCheck = element ? select('.' + CHECK, element) : null;\n            if (this.checkedNodes.indexOf(node) !== -1 && parentElement && (subId === node) && this.autoCheck) {\n                this.changeState(parentElement, 'indeterminate', null);\n            }\n            else if (this.checkedNodes.indexOf(node) === -1 && parentElement && !element && (subId === node) && !doCheck) {\n                if (this.autoCheck) {\n                    this.changeState(parentElement, 'uncheck', null);\n                }\n                else {\n                    if (count !== 0) {\n                        this.changeState(parentElement, 'indeterminate', null);\n                    }\n                    else {\n                        this.changeState(parentElement, 'uncheck', null);\n                    }\n                }\n            }\n            else if (this.checkedNodes.indexOf(node) === -1 && element && (subId === node) && !doCheck) {\n                this.changeState(element, 'uncheck', null);\n            }\n            else if (this.checkedNodes.indexOf(node) === -1 && indeterminate && (subId === node) && this.autoCheck && count === 0\n                && !doCheck) {\n                indeterminate.classList.remove(INDETERMINATE);\n            }\n            else if (this.checkedNodes.indexOf(node) === -1 && !element && check && (subId === node) && count === 0) {\n                this.changeState(parentElement, 'uncheck', null);\n            }\n            else if (this.checkedNodes.indexOf(subId) === -1 && element && childElementCheck && count === 0) {\n                this.changeState(element, 'uncheck', null);\n            }\n            else if (!element && !parentElement && (subId === node) || (this.parentNodeCheck.indexOf(parent) !== -1) && this.autoCheck) {\n                var childElement = this.element.querySelector('[data-uid=\"' + child + '\"]');\n                if (doCheck && count !== 0) {\n                    this.changeState(childElement, 'indeterminate', null);\n                }\n                else if (doCheck && count === subChild.length && this.checkedNodes.indexOf(parent) === -1) {\n                    this.checkedNodes.push(parent);\n                }\n                else if (!doCheck && count === 0 && this.parentNodeCheck.indexOf(parent) !== -1) {\n                    this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(parent));\n                }\n                if (this.parentNodeCheck.indexOf(parent) === -1) {\n                    this.parentNodeCheck.push(parent);\n                }\n            }\n            var innerChild = getValue(this.fields.child.toString(), subChild[j]);\n            if (innerChild) {\n                this.updateChildIndeterminate(innerChild, subId, node, doCheck, child);\n            }\n        }\n    };\n    TreeView.prototype.changeState = function (wrapper, state, e, isPrevent, isAdd, doCheck) {\n        var _this = this;\n        var eventArgs;\n        var currLi = closest(wrapper, '.' + LISTITEM);\n        if (!isPrevent) {\n            this.checkActionNodes = [];\n            eventArgs = this.getCheckEvent(currLi, state, e);\n            this.trigger('nodeChecking', eventArgs, function (observedArgs) {\n                if (!observedArgs.cancel) {\n                    _this.nodeCheckAction(wrapper, state, currLi, observedArgs, e, isPrevent, isAdd, doCheck);\n                }\n            });\n        }\n        else {\n            this.nodeCheckAction(wrapper, state, currLi, eventArgs, e, isPrevent, isAdd, doCheck);\n        }\n    };\n    TreeView.prototype.nodeCheckAction = function (wrapper, state, currLi, eventArgs, e, isPrevent, isAdd, doCheck) {\n        var ariaState;\n        var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n        if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n            frameSpan.classList.remove(INDETERMINATE);\n            frameSpan.classList.add(CHECK);\n            this.addCheck(currLi);\n            ariaState = 'true';\n        }\n        else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n            removeClass([frameSpan], [CHECK, INDETERMINATE]);\n            this.removeCheck(currLi);\n            ariaState = 'false';\n        }\n        else if (state === 'indeterminate' && this.autoCheck) {\n            frameSpan.classList.remove(CHECK);\n            frameSpan.classList.add(INDETERMINATE);\n            this.removeCheck(currLi);\n            ariaState = 'mixed';\n        }\n        ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n        if (!isNOU(ariaState)) {\n            wrapper.setAttribute('aria-checked', ariaState);\n        }\n        if (isAdd) {\n            var data = [].concat([], this.checkActionNodes);\n            eventArgs = this.getCheckEvent(currLi, state, e);\n            if (isUndefined(isPrevent)) {\n                eventArgs.data = data;\n            }\n        }\n        if (doCheck !== undefined) {\n            this.ensureStateChange(currLi, doCheck);\n        }\n        if (!isPrevent) {\n            if (!isNOU(ariaState)) {\n                wrapper.setAttribute('aria-checked', ariaState);\n                this.allowServerDataBinding = true;\n                this.updateServerProperties(\"check\");\n                this.allowServerDataBinding = false;\n                eventArgs.data[0].checked = ariaState;\n                this.trigger('nodeChecked', eventArgs);\n                this.checkActionNodes = [];\n            }\n        }\n    };\n    TreeView.prototype.addCheck = function (liEle) {\n        var id = liEle.getAttribute('data-uid');\n        if (!isNOU(id) && this.checkedNodes.indexOf(id) === -1) {\n            this.checkedNodes.push(id);\n        }\n    };\n    TreeView.prototype.removeCheck = function (liEle) {\n        var index = this.checkedNodes.indexOf(liEle.getAttribute('data-uid'));\n        if (index > -1) {\n            this.checkedNodes.splice(index, 1);\n        }\n    };\n    TreeView.prototype.getCheckEvent = function (currLi, action, e) {\n        this.checkActionNodes.push(this.getNodeData(currLi));\n        var nodeData = this.checkActionNodes;\n        return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, data: nodeData };\n    };\n    TreeView.prototype.finalize = function () {\n        var firstUl = select('.' + PARENTITEM, this.element);\n        if (!isNullOrUndefined(firstUl)) {\n            firstUl.setAttribute('role', treeAriaAttr.treeRole);\n            this.setMultiSelect(this.allowMultiSelection);\n            var firstNode = select('.' + LISTITEM, this.element);\n            if (firstNode) {\n                addClass([firstNode], FOCUS);\n                this.updateIdAttr(null, firstNode);\n            }\n            this.renderReactTemplates();\n            this.hasPid = this.rootData[0] ? this.rootData[0].hasOwnProperty(this.fields.parentID) : false;\n            this.doExpandAction();\n        }\n    };\n    TreeView.prototype.doExpandAction = function () {\n        var eUids = this.expandedNodes;\n        if (this.isInitalExpand && eUids.length > 0) {\n            this.setProperties({ expandedNodes: [] }, true);\n            if (this.isBlazorPlatform && !this.initialRender) {\n                return;\n            }\n            // tslint:disable\n            if (this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n                this.expandGivenNodes(eUids);\n            }\n            else {\n                for (var i = 0; i < eUids.length; i++) {\n                    var eNode = select('[data-uid=\"' + eUids[i] + '\"]', this.element);\n                    if (!isNOU(eNode)) {\n                        var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n                        if (!isNOU(icon)) {\n                            this.expandAction(eNode, icon, null);\n                        }\n                    }\n                    else {\n                        if (eUids[i] && this.expandChildren.indexOf(eUids[i]) === -1) {\n                            this.expandChildren.push(eUids[i].toString());\n                        }\n                        continue;\n                    }\n                }\n                this.afterFinalized();\n            }\n        }\n        else {\n            this.afterFinalized();\n        }\n    };\n    TreeView.prototype.expandGivenNodes = function (arr) {\n        var proxy = this;\n        this.expandCallback(arr[this.index], function () {\n            proxy.index++;\n            if (proxy.index < arr.length) {\n                proxy.expandGivenNodes(arr);\n            }\n            else {\n                proxy.afterFinalized();\n            }\n        });\n    };\n    TreeView.prototype.expandCallback = function (eUid, callback) {\n        var eNode = select('[data-uid=\"' + eUid + '\"]', this.element);\n        if (!isNOU(eNode)) {\n            var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n            if (!isNOU(icon)) {\n                this.expandAction(eNode, icon, null, false, callback);\n            }\n            else {\n                callback();\n            }\n        }\n        else {\n            callback();\n        }\n    };\n    TreeView.prototype.afterFinalized = function () {\n        if (!this.isBlazorPlatform || (this.isBlazorPlatform && !this.initialRender)) {\n            this.doSelectionAction();\n        }\n        this.updateCheckedProp();\n        if (this.isBlazorPlatform) {\n            if (this.initialRender) {\n                this.setCheckedNodes(this.checkedNodes);\n            }\n            this.updateInstance();\n            this.initialRender = false;\n        }\n        this.isAnimate = true;\n        this.isInitalExpand = false;\n        if (!this.isLoaded || this.isFieldChange) {\n            var eventArgs = { data: this.treeData };\n            this.trigger('dataBound', eventArgs);\n        }\n        this.isLoaded = true;\n    };\n    TreeView.prototype.doSelectionAction = function () {\n        var sNodes = selectAll('.' + SELECTED, this.element);\n        var sUids = this.selectedNodes;\n        if (sUids.length > 0) {\n            this.setProperties({ selectedNodes: [] }, true);\n            for (var i = 0; i < sUids.length; i++) {\n                var sNode = select('[data-uid=\"' + sUids[i] + '\"]', this.element);\n                if (sNode && !(sNode.classList.contains('e-active'))) {\n                    this.selectNode(sNode, null, true);\n                }\n                else {\n                    this.selectedNodes.push(sUids[i]);\n                }\n                if (!this.allowMultiSelection) {\n                    break;\n                }\n            }\n        }\n        else {\n            this.selectGivenNodes(sNodes);\n        }\n        removeClass(sNodes, SELECTED);\n    };\n    TreeView.prototype.selectGivenNodes = function (sNodes) {\n        for (var i = 0; i < sNodes.length; i++) {\n            if (!sNodes[i].classList.contains('e-disable')) {\n                this.selectNode(sNodes[i], null, true);\n            }\n            if (!this.allowMultiSelection) {\n                break;\n            }\n        }\n    };\n    TreeView.prototype.clickHandler = function (event) {\n        var target = event.originalEvent.target;\n        EventHandler.remove(this.element, 'contextmenu', this.preventContextMenu);\n        if (!target || this.dragStartAction) {\n            return;\n        }\n        else {\n            var classList = target.classList;\n            var li = closest(target, '.' + LISTITEM);\n            if (!li) {\n                return;\n            }\n            else if (event.originalEvent.which !== 3) {\n                var rippleElement = select('.' + RIPPLEELMENT, li);\n                var rippleIcons = select('.' + ICON, li);\n                this.removeHover();\n                this.setFocusElement(li);\n                if (this.showCheckBox && !li.classList.contains('e-disable')) {\n                    var checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n                    if (!isNOU(checkWrapper)) {\n                        var checkElement = select('.' + CHECKBOXFRAME, checkWrapper);\n                        this.validateCheckNode(checkWrapper, checkElement.classList.contains(CHECK), li, event.originalEvent);\n                        this.triggerClickEvent(event.originalEvent, li);\n                        return;\n                    }\n                }\n                if (classList.contains(EXPANDABLE)) {\n                    this.expandAction(li, target, event);\n                }\n                else if (classList.contains(COLLAPSIBLE)) {\n                    this.collapseNode(li, target, event);\n                }\n                else if (rippleElement && rippleIcons) {\n                    if (rippleIcons.classList.contains(RIPPLE) && rippleIcons.classList.contains(EXPANDABLE)) {\n                        this.expandAction(li, rippleIcons, event);\n                    }\n                    else if (rippleIcons.classList.contains(RIPPLE) && rippleIcons.classList.contains(COLLAPSIBLE)) {\n                        this.collapseNode(li, rippleIcons, event);\n                    }\n                    else if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n                        this.toggleSelect(li, event.originalEvent, false);\n                    }\n                }\n                else {\n                    if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n                        this.toggleSelect(li, event.originalEvent, false);\n                    }\n                }\n            }\n            this.triggerClickEvent(event.originalEvent, li);\n        }\n    };\n    TreeView.prototype.nodeCheckedEvent = function (wrapper, isCheck, e) {\n        var currLi = closest(wrapper, '.' + LISTITEM);\n        var eventArgs = this.getCheckEvent(wrapper, isCheck ? 'uncheck' : 'check', e);\n        eventArgs.data = eventArgs.data.splice(0, eventArgs.data.length - 1);\n        this.trigger('nodeChecked', eventArgs);\n    };\n    TreeView.prototype.triggerClickEvent = function (e, li) {\n        var eventArgs = {\n            event: e,\n            node: li,\n        };\n        this.trigger('nodeClicked', eventArgs);\n    };\n    TreeView.prototype.expandNode = function (currLi, icon, loaded) {\n        var _this = this;\n        this.renderReactTemplates();\n        if (icon.classList.contains(LOAD)) {\n            this.hideSpinner(icon);\n        }\n        if (!this.initialRender) {\n            icon.classList.add('interaction');\n        }\n        if (loaded !== true || (loaded === true && currLi.classList.contains('e-expanded'))) {\n            if (this.preventExpand !== true) {\n                removeClass([icon], EXPANDABLE);\n                addClass([icon], COLLAPSIBLE);\n                var start_1 = 0;\n                var end_1 = 0;\n                var proxy_1 = this;\n                var ul_1 = select('.' + PARENTITEM, currLi);\n                var liEle_1 = currLi;\n                this.setHeight(liEle_1, ul_1);\n                var activeElement_1 = select('.' + LISTITEM + '.' + ACTIVE, currLi);\n                if (this.isAnimate && !this.isRefreshed) {\n                    this.aniObj.animate(ul_1, {\n                        name: this.animation.expand.effect,\n                        duration: this.animation.expand.duration,\n                        timingFunction: this.animation.expand.easing,\n                        begin: function (args) {\n                            liEle_1.style.overflow = 'hidden';\n                            if (!isNullOrUndefined(activeElement_1) && activeElement_1 instanceof HTMLElement) {\n                                activeElement_1.classList.add(ITEM_ANIMATION_ACTIVE);\n                            }\n                            start_1 = liEle_1.offsetHeight;\n                            end_1 = select('.' + TEXTWRAP, currLi).offsetHeight;\n                        },\n                        progress: function (args) {\n                            args.element.style.display = 'block';\n                            proxy_1.animateHeight(args, start_1, end_1);\n                        },\n                        end: function (args) {\n                            args.element.style.display = 'block';\n                            if (!isNullOrUndefined(activeElement_1) && activeElement_1 instanceof HTMLElement) {\n                                activeElement_1.classList.remove(ITEM_ANIMATION_ACTIVE);\n                            }\n                            _this.expandedNode(liEle_1, ul_1, icon);\n                        }\n                    });\n                }\n                else {\n                    this.expandedNode(liEle_1, ul_1, icon);\n                }\n            }\n        }\n        else {\n            var ul = select('.' + PARENTITEM, currLi);\n            ul.style.display = 'none';\n            if (this.fields.dataSource instanceof DataManager === true) {\n                this.preventExpand = false;\n            }\n        }\n        if (this.initialRender) {\n            icon.classList.add('interaction');\n        }\n    };\n    TreeView.prototype.expandedNode = function (currLi, ul, icon) {\n        ul.style.display = 'block';\n        currLi.style.display = 'block';\n        currLi.style.overflow = '';\n        currLi.style.height = '';\n        removeClass([icon], PROCESS);\n        this.addExpand(currLi);\n        this.allowServerDataBinding = true;\n        this.updateServerProperties(\"expand\");\n        this.allowServerDataBinding = false;\n        if (this.isLoaded && this.expandArgs && !this.isRefreshed) {\n            this.expandArgs = this.getExpandEvent(currLi, null);\n            this.trigger('nodeExpanded', this.expandArgs);\n        }\n    };\n    TreeView.prototype.addExpand = function (liEle) {\n        liEle.setAttribute('aria-expanded', 'true');\n        removeClass([liEle], NODECOLLAPSED);\n        var id = liEle.getAttribute('data-uid');\n        if (!isNOU(id) && this.expandedNodes.indexOf(id) === -1) {\n            this.expandedNodes.push(id);\n        }\n    };\n    TreeView.prototype.collapseNode = function (currLi, icon, e) {\n        var _this = this;\n        if (icon.classList.contains(PROCESS)) {\n            return;\n        }\n        else {\n            addClass([icon], PROCESS);\n        }\n        var colArgs;\n        if (this.isLoaded) {\n            colArgs = this.getExpandEvent(currLi, e);\n            this.trigger('nodeCollapsing', colArgs, function (observedArgs) {\n                if (observedArgs.cancel) {\n                    removeClass([icon], PROCESS);\n                }\n                else {\n                    _this.nodeCollapseAction(currLi, icon, observedArgs);\n                }\n            });\n        }\n        else {\n            this.nodeCollapseAction(currLi, icon, colArgs);\n        }\n    };\n    TreeView.prototype.nodeCollapseAction = function (currLi, icon, colArgs) {\n        var _this = this;\n        removeClass([icon], COLLAPSIBLE);\n        addClass([icon], EXPANDABLE);\n        var start = 0;\n        var end = 0;\n        var proxy = this;\n        var ul = select('.' + PARENTITEM, currLi);\n        var liEle = currLi;\n        var activeElement = select('.' + LISTITEM + '.' + ACTIVE, currLi);\n        if (this.isAnimate) {\n            this.aniObj.animate(ul, {\n                name: this.animation.collapse.effect,\n                duration: this.animation.collapse.duration,\n                timingFunction: this.animation.collapse.easing,\n                begin: function (args) {\n                    liEle.style.overflow = 'hidden';\n                    if (!isNullOrUndefined(activeElement) && activeElement instanceof HTMLElement) {\n                        activeElement.classList.add(ITEM_ANIMATION_ACTIVE);\n                    }\n                    start = select('.' + TEXTWRAP, currLi).offsetHeight;\n                    end = liEle.offsetHeight;\n                },\n                progress: function (args) {\n                    proxy.animateHeight(args, start, end);\n                },\n                end: function (args) {\n                    args.element.style.display = 'none';\n                    if (!isNullOrUndefined(activeElement) && activeElement instanceof HTMLElement) {\n                        activeElement.classList.remove(ITEM_ANIMATION_ACTIVE);\n                    }\n                    _this.collapsedNode(liEle, ul, icon, colArgs);\n                }\n            });\n        }\n        else {\n            this.collapsedNode(liEle, ul, icon, colArgs);\n        }\n    };\n    TreeView.prototype.collapsedNode = function (liEle, ul, icon, colArgs) {\n        ul.style.display = 'none';\n        liEle.style.overflow = '';\n        liEle.style.height = '';\n        removeClass([icon], PROCESS);\n        this.allowServerDataBinding = true;\n        this.updateServerProperties(\"expand\");\n        this.allowServerDataBinding = false;\n        this.removeExpand(liEle);\n        if (this.isLoaded) {\n            colArgs = this.getExpandEvent(liEle, null);\n            this.trigger('nodeCollapsed', colArgs);\n        }\n    };\n    TreeView.prototype.removeExpand = function (liEle, toRemove) {\n        if (toRemove) {\n            liEle.removeAttribute('aria-expanded');\n        }\n        else {\n            this.disableExpandAttr(liEle);\n        }\n        var index = this.expandedNodes.indexOf(liEle.getAttribute('data-uid'));\n        if (index > -1) {\n            this.expandedNodes.splice(index, 1);\n        }\n    };\n    TreeView.prototype.disableExpandAttr = function (liEle) {\n        liEle.setAttribute('aria-expanded', 'false');\n        addClass([liEle], NODECOLLAPSED);\n    };\n    TreeView.prototype.setHeight = function (currLi, ul) {\n        ul.style.display = 'block';\n        ul.style.visibility = 'hidden';\n        currLi.style.height = currLi.offsetHeight + 'px';\n        ul.style.display = 'none';\n        ul.style.visibility = '';\n    };\n    TreeView.prototype.animateHeight = function (args, start, end) {\n        var remaining = (args.duration - args.timeStamp) / args.duration;\n        var currentHeight = (end - start) * remaining + start;\n        args.element.parentElement.style.height = currentHeight + 'px';\n    };\n    TreeView.prototype.renderChildNodes = function (parentLi, expandChild, callback, loaded) {\n        var _this = this;\n        var eicon = select('div.' + ICON, parentLi);\n        if (isNOU(eicon)) {\n            return;\n        }\n        this.showSpinner(eicon);\n        var childItems;\n        // tslint:disable\n        if (this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n            var level = this.parents(parentLi, '.' + PARENTITEM).length;\n            var mapper_2 = this.getChildFields(this.fields, level, 1);\n            if (isNOU(mapper_2) || isNOU(mapper_2.dataSource)) {\n                detach(eicon);\n                this.removeExpand(parentLi, true);\n                return;\n            }\n            this.treeList.push('false');\n            if (this.fields.dataSource instanceof DataManager && this.isOffline) {\n                this.treeList.pop();\n                childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n                this.loadChild(childItems, mapper_2, eicon, parentLi, expandChild, callback, loaded);\n                this.updateTemplateForBlazor();\n            }\n            else {\n                mapper_2.dataSource.executeQuery(this.getQuery(mapper_2, parentLi.getAttribute('data-uid'))).then(function (e) {\n                    _this.treeList.pop();\n                    childItems = e.result;\n                    if (_this.dataType === 1) {\n                        _this.dataType = 2;\n                    }\n                    _this.loadChild(childItems, mapper_2, eicon, parentLi, expandChild, callback, loaded);\n                    _this.updateTemplateForBlazor();\n                }).catch(function (e) {\n                    _this.trigger('actionFailure', { error: e });\n                });\n            }\n        }\n        else {\n            childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n            this.currentLoadData = this.getSortedData(childItems);\n            if (isNOU(childItems) || childItems.length === 0) {\n                detach(eicon);\n                this.removeExpand(parentLi, true);\n                return;\n            }\n            else {\n                if (!this.isBlazorPlatform || !this.initialRender) {\n                    this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n                    parentLi.appendChild(ListBase.createList(this.createElement, this.currentLoadData, this.listBaseOption));\n                }\n                this.expandNode(parentLi, eicon, loaded);\n                this.setSelectionForChildNodes(childItems);\n                this.ensureCheckNode(parentLi);\n                this.finalizeNode(parentLi);\n                if (this.loadOnDemand && this.nodeTemplate && this.isBlazorPlatform && !this.isStringTemplate) {\n                    this.updateBlazorTemplate();\n                }\n                this.disableTreeNodes(childItems);\n                this.renderSubChild(parentLi, expandChild, loaded);\n            }\n        }\n    };\n    TreeView.prototype.loadChild = function (childItems, mapper, eicon, parentLi, expandChild, callback, loaded) {\n        this.currentLoadData = childItems;\n        if (isNOU(childItems) || childItems.length === 0) {\n            detach(eicon);\n            this.removeExpand(parentLi, true);\n        }\n        else {\n            this.updateListProp(mapper);\n            if (this.fields.dataSource instanceof DataManager && !this.isOffline) {\n                var id = parentLi.getAttribute('data-uid');\n                var nodeData = this.getNodeObject(id);\n                setValue('child', childItems, nodeData);\n            }\n            this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n            parentLi.appendChild(ListBase.createList(this.createElement, childItems, this.listBaseOption));\n            this.expandNode(parentLi, eicon, loaded);\n            this.setSelectionForChildNodes(childItems);\n            this.ensureCheckNode(parentLi);\n            this.finalizeNode(parentLi);\n            this.disableTreeNodes(childItems);\n            this.renderSubChild(parentLi, expandChild, loaded);\n        }\n        if (callback) {\n            callback();\n        }\n        if (this.treeList.length === 0 && !this.isLoaded) {\n            this.finalize();\n        }\n    };\n    TreeView.prototype.disableTreeNodes = function (childItems) {\n        var i = 0;\n        while (i < childItems.length) {\n            var id = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : null;\n            if (this.disableNode !== undefined && this.disableNode.indexOf(id) !== -1) {\n                this.doDisableAction([id]);\n            }\n            i++;\n        }\n    };\n    /**\n     * Sets the child Item in selectedState while rendering the child node\n     */\n    TreeView.prototype.setSelectionForChildNodes = function (nodes) {\n        var i;\n        for (i = 0; i < nodes.length; i++) {\n            var id = nodes[i][this.fields.id] ? nodes[i][this.fields.id].toString() : null;\n            if (this.selectedNodes !== undefined && this.selectedNodes.indexOf(id) !== -1) {\n                this.doSelectionAction();\n            }\n        }\n    };\n    TreeView.prototype.ensureCheckNode = function (element) {\n        if (this.showCheckBox) {\n            this.ele = (this.checkedElement) ? this.checkedElement.indexOf(element.getAttribute('data-uid')) : null;\n            if (this.autoCheck) {\n                this.ensureChildCheckState(element);\n                this.ensureParentCheckState(element);\n            }\n        }\n        this.currentLoadData = null;\n    };\n    TreeView.prototype.getFields = function (mapper, nodeLevel, dataLevel) {\n        if (nodeLevel === dataLevel) {\n            return mapper;\n        }\n        else {\n            return this.getFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n        }\n    };\n    TreeView.prototype.getChildFields = function (mapper, nodeLevel, dataLevel) {\n        var childData;\n        if (nodeLevel === dataLevel) {\n            return this.getChildMapper(mapper);\n        }\n        else {\n            return this.getChildFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n        }\n    };\n    TreeView.prototype.getChildMapper = function (mapper) {\n        return (typeof mapper.child === 'string' || isNOU(mapper.child)) ? mapper : mapper.child;\n    };\n    TreeView.prototype.getChildNodes = function (obj, parentId, isRoot) {\n        if (isRoot === void 0) { isRoot = false; }\n        var childNodes;\n        if (isNOU(obj)) {\n            return childNodes;\n        }\n        else if (this.dataType === 1) {\n            return this.getChildGroup(this.groupedData, parentId, isRoot);\n        }\n        else {\n            if (typeof this.fields.child === 'string') {\n                for (var i = 0, objlen = obj.length; i < objlen; i++) {\n                    var dataId = getValue(this.fields.id, obj[i]);\n                    if (dataId && dataId.toString() === parentId) {\n                        return getValue(this.fields.child, obj[i]);\n                    }\n                    else if (!isNOU(getValue(this.fields.child, obj[i]))) {\n                        childNodes = this.getChildNodes(getValue(this.fields.child, obj[i]), parentId);\n                        if (childNodes !== undefined) {\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n        return childNodes;\n    };\n    TreeView.prototype.getChildGroup = function (data, parentId, isRoot) {\n        var childNodes;\n        if (isNOU(data)) {\n            return childNodes;\n        }\n        for (var i = 0, objlen = data.length; i < objlen; i++) {\n            if (!isNOU(data[i][0]) && !isNOU(getValue(this.fields.parentID, data[i][0]))) {\n                if (getValue(this.fields.parentID, data[i][0]).toString() === parentId) {\n                    return data[i];\n                }\n            }\n            else if (isRoot) {\n                return data[i];\n            }\n            else {\n                return [];\n            }\n        }\n        return childNodes;\n    };\n    TreeView.prototype.renderSubChild = function (element, expandChild, loaded) {\n        if (expandChild) {\n            var cIcons = selectAll('.' + EXPANDABLE, element);\n            for (var i = 0, len = cIcons.length; i < len; i++) {\n                var icon = cIcons[i];\n                if (element.querySelector('.e-icons') !== cIcons[i]) {\n                    var curLi = closest(icon, '.' + LISTITEM);\n                    this.expandArgs = this.getExpandEvent(curLi, null);\n                    if (loaded !== true) {\n                        this.trigger('nodeExpanding', this.expandArgs);\n                    }\n                    this.renderChildNodes(curLi, expandChild, null, loaded);\n                }\n            }\n        }\n    };\n    TreeView.prototype.toggleSelect = function (li, e, multiSelect) {\n        if (!li.classList.contains('e-disable')) {\n            if (this.allowMultiSelection && ((e && e.ctrlKey) || multiSelect) && this.isActive(li)) {\n                this.unselectNode(li, e);\n            }\n            else {\n                this.selectNode(li, e, multiSelect);\n            }\n        }\n    };\n    TreeView.prototype.isActive = function (li) {\n        return li.classList.contains(ACTIVE) ? true : false;\n    };\n    TreeView.prototype.selectNode = function (li, e, multiSelect) {\n        var _this = this;\n        if (isNOU(li) || (!this.allowMultiSelection && this.isActive(li) && !isNOU(e))) {\n            this.setFocusElement(li);\n            return;\n        }\n        var eventArgs;\n        if (this.isLoaded) {\n            eventArgs = this.getSelectEvent(li, 'select', e);\n            this.trigger('nodeSelecting', eventArgs, function (observedArgs) {\n                if (!observedArgs.cancel) {\n                    _this.nodeSelectAction(li, e, observedArgs, multiSelect);\n                }\n            });\n        }\n        else {\n            this.nodeSelectAction(li, e, eventArgs, multiSelect);\n        }\n    };\n    TreeView.prototype.nodeSelectAction = function (li, e, eventArgs, multiSelect) {\n        if (!this.allowMultiSelection || (!multiSelect && (!e || (e && !e.ctrlKey)))) {\n            this.removeSelectAll();\n        }\n        if (this.allowMultiSelection && e && e.shiftKey) {\n            if (!this.startNode) {\n                this.startNode = li;\n            }\n            var startIndex = this.liList.indexOf(this.startNode);\n            var endIndex = this.liList.indexOf(li);\n            if (startIndex > endIndex) {\n                var temp = startIndex;\n                startIndex = endIndex;\n                endIndex = temp;\n            }\n            for (var i = startIndex; i <= endIndex; i++) {\n                var currNode = this.liList[i];\n                if (isVisible(currNode) && !currNode.classList.contains('e-disable')) {\n                    this.addSelect(currNode);\n                }\n            }\n        }\n        else {\n            this.startNode = li;\n            this.addSelect(li);\n        }\n        this.setFocusElement(li);\n        if (this.isLoaded) {\n            this.allowServerDataBinding = true;\n            this.updateServerProperties(\"select\");\n            this.allowServerDataBinding = false;\n            eventArgs.nodeData = this.getNodeData(li);\n            this.trigger('nodeSelected', eventArgs);\n        }\n    };\n    TreeView.prototype.unselectNode = function (li, e) {\n        var _this = this;\n        var eventArgs;\n        if (this.isLoaded) {\n            eventArgs = this.getSelectEvent(li, 'un-select', e);\n            this.trigger('nodeSelecting', eventArgs, function (observedArgs) {\n                if (!observedArgs.cancel) {\n                    _this.allowServerDataBinding = true;\n                    _this.updateServerProperties(\"select\");\n                    _this.allowServerDataBinding = false;\n                    _this.nodeUnselectAction(li, observedArgs);\n                }\n            });\n        }\n        else {\n            this.nodeUnselectAction(li, eventArgs);\n        }\n    };\n    TreeView.prototype.nodeUnselectAction = function (li, eventArgs) {\n        this.removeSelect(li);\n        this.setFocusElement(li);\n        if (this.isLoaded) {\n            this.allowServerDataBinding = true;\n            this.updateServerProperties(\"select\");\n            this.allowServerDataBinding = false;\n            eventArgs.nodeData = this.getNodeData(li);\n            this.trigger('nodeSelected', eventArgs);\n        }\n    };\n    TreeView.prototype.setFocusElement = function (li) {\n        if (!isNOU(li)) {\n            var focusedNode = this.getFocusedNode();\n            if (focusedNode) {\n                removeClass([focusedNode], FOCUS);\n            }\n            addClass([li], FOCUS);\n            this.updateIdAttr(focusedNode, li);\n        }\n    };\n    TreeView.prototype.addSelect = function (liEle) {\n        liEle.setAttribute('aria-selected', 'true');\n        addClass([liEle], ACTIVE);\n        var id = liEle.getAttribute('data-uid');\n        if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n            this.selectedNodes.push(id);\n        }\n    };\n    TreeView.prototype.removeSelect = function (liEle) {\n        if (this.allowMultiSelection) {\n            liEle.setAttribute('aria-selected', 'false');\n        }\n        else {\n            liEle.removeAttribute('aria-selected');\n        }\n        removeClass([liEle], ACTIVE);\n        var index = this.selectedNodes.indexOf(liEle.getAttribute('data-uid'));\n        if (index > -1) {\n            this.selectedNodes.splice(index, 1);\n        }\n    };\n    TreeView.prototype.removeSelectAll = function () {\n        var selectedLI = this.element.querySelectorAll('.' + ACTIVE);\n        for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n            var ele = selectedLI_1[_i];\n            if (this.allowMultiSelection) {\n                ele.setAttribute('aria-selected', 'false');\n            }\n            else {\n                ele.removeAttribute('aria-selected');\n            }\n        }\n        removeClass(selectedLI, ACTIVE);\n        this.setProperties({ selectedNodes: [] }, true);\n    };\n    TreeView.prototype.getSelectEvent = function (currLi, action, e) {\n        var nodeData = this.getNodeData(currLi);\n        return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData };\n    };\n    TreeView.prototype.setExpandOnType = function () {\n        this.expandOnType = (this.expandOn === 'Auto') ? (Browser.isDevice ? 'Click' : 'DblClick') : this.expandOn;\n    };\n    TreeView.prototype.expandHandler = function (e) {\n        var target = e.originalEvent.target;\n        if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n            target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n            target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n            return;\n        }\n        else {\n            this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n        }\n    };\n    TreeView.prototype.expandCollapseAction = function (currLi, e) {\n        var icon = select('div.' + ICON, currLi);\n        if (!icon || icon.classList.contains(PROCESS)) {\n            return;\n        }\n        else {\n            var classList = icon.classList;\n            if (classList.contains(EXPANDABLE)) {\n                this.expandAction(currLi, icon, e);\n            }\n            else if (classList.contains(COLLAPSIBLE)) {\n                this.collapseNode(currLi, icon, e);\n            }\n        }\n    };\n    TreeView.prototype.expandAction = function (currLi, icon, e, expandChild, callback) {\n        var _this = this;\n        if (icon.classList.contains(PROCESS)) {\n            return;\n        }\n        else {\n            addClass([icon], PROCESS);\n        }\n        if (this.isLoaded && !this.isRefreshed) {\n            this.expandArgs = this.getExpandEvent(currLi, e);\n            this.trigger('nodeExpanding', this.expandArgs, function (observedArgs) {\n                if (observedArgs.cancel) {\n                    removeClass([icon], PROCESS);\n                }\n                else {\n                    _this.nodeExpandAction(currLi, icon, expandChild, callback);\n                }\n            });\n        }\n        else {\n            this.nodeExpandAction(currLi, icon, expandChild, callback);\n        }\n    };\n    TreeView.prototype.nodeExpandAction = function (currLi, icon, expandChild, callback) {\n        var ul = select('.' + PARENTITEM, currLi);\n        if (ul && ul.nodeName === 'UL') {\n            this.expandNode(currLi, icon);\n        }\n        else {\n            this.renderChildNodes(currLi, expandChild, callback);\n            var liEles = selectAll('.' + LISTITEM, currLi);\n            for (var i = 0; i < liEles.length; i++) {\n                var id = this.getId(liEles[i]);\n                if (this.expandChildren.indexOf(id) !== -1 && this.expandChildren !== undefined) {\n                    var icon_1 = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEles[i]));\n                    if (!isNOU(icon_1)) {\n                        this.expandAction(liEles[i], icon_1, null);\n                    }\n                    this.expandChildren.splice(this.expandChildren.indexOf(id), 1);\n                }\n            }\n        }\n    };\n    TreeView.prototype.keyActionHandler = function (e) {\n        var _this = this;\n        var target = e.target;\n        var focusedNode = this.getFocusedNode();\n        if (target && target.classList.contains(INPUT)) {\n            var inpEle = target;\n            if (e.action === 'enter') {\n                inpEle.blur();\n                this.element.focus();\n                addClass([focusedNode], HOVER);\n            }\n            else if (e.action === 'escape') {\n                inpEle.value = this.oldText;\n                inpEle.blur();\n                this.element.focus();\n                addClass([focusedNode], HOVER);\n            }\n            return;\n        }\n        e.preventDefault();\n        var eventArgs = {\n            cancel: false,\n            event: e,\n            node: focusedNode,\n        };\n        this.trigger('keyPress', eventArgs, function (observedArgs) {\n            if (!observedArgs.cancel) {\n                switch (e.action) {\n                    case 'space':\n                        if (_this.showCheckBox) {\n                            _this.checkNode(e);\n                        }\n                        break;\n                    case 'moveRight':\n                        _this.openNode(_this.enableRtl ? false : true, e);\n                        break;\n                    case 'moveLeft':\n                        _this.openNode(_this.enableRtl ? true : false, e);\n                        break;\n                    case 'shiftDown':\n                        _this.shiftKeySelect(true, e);\n                        break;\n                    case 'moveDown':\n                    case 'ctrlDown':\n                    case 'csDown':\n                        _this.navigateNode(true);\n                        break;\n                    case 'shiftUp':\n                        _this.shiftKeySelect(false, e);\n                        break;\n                    case 'moveUp':\n                    case 'ctrlUp':\n                    case 'csUp':\n                        _this.navigateNode(false);\n                        break;\n                    case 'home':\n                    case 'shiftHome':\n                    case 'ctrlHome':\n                    case 'csHome':\n                        _this.navigateRootNode(true);\n                        break;\n                    case 'end':\n                    case 'shiftEnd':\n                    case 'ctrlEnd':\n                    case 'csEnd':\n                        _this.navigateRootNode(false);\n                        break;\n                    case 'enter':\n                    case 'ctrlEnter':\n                    case 'shiftEnter':\n                    case 'csEnter':\n                        _this.toggleSelect(focusedNode, e);\n                        break;\n                    case 'f2':\n                        if (_this.allowEditing && !focusedNode.classList.contains('e-disable')) {\n                            _this.createTextbox(focusedNode, e);\n                        }\n                        break;\n                    case 'ctrlA':\n                        if (_this.allowMultiSelection) {\n                            var sNodes = selectAll('.' + LISTITEM + ':not(.' + ACTIVE + ')', _this.element);\n                            _this.selectGivenNodes(sNodes);\n                        }\n                        break;\n                }\n            }\n        });\n    };\n    TreeView.prototype.navigateToFocus = function (isUp) {\n        var focusNode = this.getFocusedNode().querySelector('.' + TEXTWRAP);\n        var pos = focusNode.getBoundingClientRect();\n        var parent = this.getScrollParent(this.element);\n        if (!isNOU(parent)) {\n            var parentPos = parent.getBoundingClientRect();\n            if (pos.bottom > parentPos.bottom) {\n                parent.scrollTop += pos.bottom - parentPos.bottom;\n            }\n            else if (pos.top < parentPos.top) {\n                parent.scrollTop -= parentPos.top - pos.top;\n            }\n        }\n        var isVisible = this.isVisibleInViewport(focusNode);\n        if (!isVisible) {\n            focusNode.scrollIntoView(isUp);\n        }\n    };\n    TreeView.prototype.isVisibleInViewport = function (txtWrap) {\n        var pos = txtWrap.getBoundingClientRect();\n        return (pos.top >= 0 && pos.left >= 0 && pos.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n            pos.right <= (window.innerWidth || document.documentElement.clientWidth));\n    };\n    TreeView.prototype.getScrollParent = function (node) {\n        if (isNOU(node)) {\n            return null;\n        }\n        return (node.scrollHeight > node.clientHeight) ? node : this.getScrollParent(node.parentElement);\n    };\n    TreeView.prototype.shiftKeySelect = function (isTowards, e) {\n        if (this.allowMultiSelection) {\n            var focusedNode = this.getFocusedNode();\n            var nextNode = isTowards ? this.getNextNode(focusedNode) : this.getPrevNode(focusedNode);\n            this.removeHover();\n            this.setFocusElement(nextNode);\n            this.toggleSelect(nextNode, e, false);\n            this.navigateToFocus(!isTowards);\n        }\n        else {\n            this.navigateNode(isTowards);\n        }\n    };\n    TreeView.prototype.checkNode = function (e) {\n        var focusedNode = this.getFocusedNode();\n        var checkWrap = select('.' + CHECKBOXWRAP, focusedNode);\n        var isChecked = select(' .' + CHECKBOXFRAME, checkWrap).classList.contains(CHECK);\n        if (!focusedNode.classList.contains('e-disable')) {\n            if (focusedNode.getElementsByClassName(\"e-checkbox-disabled\").length == 0) {\n                this.validateCheckNode(checkWrap, isChecked, focusedNode, e);\n            }\n        }\n    };\n    TreeView.prototype.validateCheckNode = function (checkWrap, isCheck, li, e) {\n        var _this = this;\n        var currLi = closest(checkWrap, '.' + LISTITEM);\n        this.checkActionNodes = [];\n        var ariaState = !isCheck ? 'true' : 'false';\n        if (!isNOU(ariaState)) {\n            checkWrap.setAttribute('aria-checked', ariaState);\n        }\n        var eventArgs = this.getCheckEvent(currLi, isCheck ? 'uncheck' : 'check', e);\n        this.trigger('nodeChecking', eventArgs, function (observedArgs) {\n            if (!observedArgs.cancel) {\n                _this.nodeCheckingAction(checkWrap, isCheck, li, observedArgs, e);\n            }\n        });\n    };\n    TreeView.prototype.nodeCheckingAction = function (checkWrap, isCheck, li, eventArgs, e) {\n        if (this.checkedElement.indexOf(li.getAttribute('data-uid')) === -1) {\n            this.checkedElement.push(li.getAttribute('data-uid'));\n            var child = this.getChildNodes(this.treeData, li.getAttribute('data-uid'));\n            (child !== null) ? this.allCheckNode(child, this.checkedElement, null, null, false) : child = null;\n        }\n        this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n        if (this.autoCheck) {\n            this.ensureChildCheckState(li);\n            this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n            var doCheck = void 0;\n            if (eventArgs.action === 'check') {\n                doCheck = true;\n            }\n            else if (eventArgs.action === 'uncheck') {\n                doCheck = false;\n            }\n            this.ensureStateChange(li, doCheck);\n        }\n        this.allowServerDataBinding = true;\n        this.updateServerProperties(\"check\");\n        this.allowServerDataBinding = false;\n        this.nodeCheckedEvent(checkWrap, isCheck, e);\n    };\n    /**\n     * Update checkedNodes when UI interaction happens before the child node renders in DOM\n     */\n    TreeView.prototype.ensureStateChange = function (li, doCheck) {\n        var childElement = select('.' + PARENTITEM, li);\n        var parentIndex = li.getAttribute('data-uid');\n        var mapper = this.fields;\n        if (this.dataType === 1 && this.autoCheck) {\n            var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.parentID, 'equal', parentIndex, true));\n            for (var i = 0; i < resultData.length; i++) {\n                var resultId = resultData[i][this.fields.id] ? resultData[i][this.fields.id].toString() : null;\n                var isCheck = resultData[i][this.fields.isChecked] ? resultData[i][this.fields.isChecked].toString() : null;\n                if (this.checkedNodes.indexOf(parentIndex) !== -1 && this.checkedNodes.indexOf(resultId) === -1) {\n                    this.checkedNodes.push(resultId);\n                    var childItems = this.getChildNodes(this.treeData, resultId);\n                    this.getChildItems(childItems, doCheck);\n                    if (this.parentNodeCheck.indexOf(resultId) !== -1) {\n                        this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(resultId), 1);\n                    }\n                }\n                else if (this.checkedNodes.indexOf(parentIndex) === -1 && childElement === null &&\n                    this.checkedNodes.indexOf(resultId) !== -1) {\n                    this.checkedNodes.splice(this.checkedNodes.indexOf(resultId), 1);\n                    if (isCheck === 'true') {\n                        this.updateField(this.treeData, this.fields, resultId, 'isChecked', null);\n                    }\n                    if (this.checkedNodes.indexOf(parentIndex) === -1 && childElement === null ||\n                        this.parentNodeCheck.indexOf(resultId) !== -1) {\n                        var childNodes = this.getChildNodes(this.treeData, resultId);\n                        this.getChildItems(childNodes, doCheck);\n                        if (this.parentNodeCheck.indexOf(resultId) !== -1) {\n                            this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(resultId), 1);\n                        }\n                    }\n                }\n                else {\n                    var childItems = this.getChildNodes(this.treeData, resultId);\n                    this.getChildItems(childItems, doCheck);\n                }\n            }\n        }\n        else if (this.dataType === 1 && !this.autoCheck) {\n            if (!doCheck) {\n                var checkedData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.isChecked, 'equal', true, false));\n                for (var i = 0; i < checkedData.length; i++) {\n                    var id = checkedData[i][this.fields.id] ? checkedData[i][this.fields.id].toString() : null;\n                    if (this.checkedNodes.indexOf(id) !== -1) {\n                        this.checkedNodes.splice(this.checkedNodes.indexOf(id), 1);\n                    }\n                    this.updateField(this.treeData, this.fields, id, 'isChecked', null);\n                }\n                this.checkedNodes = [];\n            }\n            else {\n                for (var i = 0; i < this.treeData.length; i++) {\n                    var checkedId = this.treeData[i][this.fields.id] ? this.treeData[i][this.fields.id].toString() : null;\n                    if (this.checkedNodes.indexOf(checkedId) === -1) {\n                        this.checkedNodes.push(checkedId);\n                    }\n                }\n            }\n        }\n        else {\n            var childItems = this.getChildNodes(this.treeData, parentIndex);\n            if (childItems) {\n                this.childStateChange(childItems, parentIndex, childElement, doCheck);\n            }\n        }\n    };\n    TreeView.prototype.getChildItems = function (childItems, doCheck) {\n        for (var i = 0; i < childItems.length; i++) {\n            var childId = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : null;\n            var childIsCheck = childItems[i][this.fields.isChecked] ? childItems[i][this.fields.isChecked].toString() :\n                null;\n            if (this.checkedNodes.indexOf(childId) !== -1 && !doCheck) {\n                this.checkedNodes.splice(this.checkedNodes.indexOf(childId), 1);\n            }\n            if (this.checkedNodes.indexOf(childId) === -1 && doCheck) {\n                this.checkedNodes.push(childId);\n            }\n            if (childIsCheck === 'true' && !doCheck) {\n                this.updateField(this.treeData, this.fields, childId, 'isChecked', null);\n            }\n            var subChildItems = this.getChildNodes(this.treeData, childId);\n            if (subChildItems.length > 0) {\n                this.getChildItems(subChildItems, doCheck);\n            }\n        }\n    };\n    /**\n     * Update checkedNodes when UI interaction happens before the child node renders in DOM for hierarchical DS\n     */\n    TreeView.prototype.childStateChange = function (childItems, parent, childElement, doCheck) {\n        for (var i = 0; i < childItems.length; i++) {\n            var checkedChild = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : '';\n            var isCheck = childItems[i][this.fields.isChecked] ? childItems[i][this.fields.isChecked].toString() : null;\n            if (this.autoCheck) {\n                if (this.checkedNodes.indexOf(parent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1) {\n                    this.checkedNodes.push(checkedChild);\n                    if (this.parentNodeCheck.indexOf(checkedChild) !== -1) {\n                        this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(checkedChild), 1);\n                    }\n                }\n                else if (this.checkedNodes.indexOf(parent) === -1 && this.checkedNodes.indexOf(checkedChild) !== -1 && !doCheck) {\n                    this.checkedNodes.splice(this.checkedNodes.indexOf(checkedChild), 1);\n                    if (isCheck === 'true') {\n                        this.updateField(this.treeData, this.fields, checkedChild, 'isChecked', null);\n                    }\n                }\n            }\n            else if (!this.autoCheck) {\n                if (!doCheck) {\n                    if (this.checkedNodes.indexOf(checkedChild) !== -1) {\n                        this.checkedNodes.splice(this.checkedNodes.indexOf(checkedChild), 1);\n                    }\n                    this.updateField(this.treeData, this.fields, checkedChild, 'isChecked', null);\n                    this.checkedNodes = [];\n                }\n                else {\n                    if (this.checkedNodes.indexOf(checkedChild) === -1) {\n                        this.checkedNodes.push(checkedChild);\n                    }\n                }\n            }\n            var subChild = this.getChildNodes([childItems[i]], checkedChild);\n            if (subChild) {\n                this.childStateChange(subChild, parent, childElement, doCheck);\n            }\n        }\n    };\n    //This method can be used to get all child nodes of a parent by passing the children of a parent along with 'validateCheck' set to false\n    TreeView.prototype.allCheckNode = function (child, newCheck, checked, childCheck, validateCheck) {\n        if (child) {\n            for (var length_1 = 0; length_1 < child.length; length_1++) {\n                var childId = getValue(this.fields.id, child[length_1]);\n                var check = this.element.querySelector('[data-uid=\"' + childId + '\"]');\n                //Validates isChecked case while no UI interaction has been performed on the node or it's parent\n                if (validateCheck !== false && this.checkedElement.indexOf(childId.toString()) === -1) {\n                    if (((check === null && !isNOU(child[length_1][this.fields.isChecked]) && newCheck.indexOf(childId.toString()) === -1)\n                        || childCheck === 0 || checked === 2)) {\n                        (child[length_1][this.fields.isChecked] !== false || checked === 2) ? newCheck.push(childId.toString())\n                            : childCheck = null;\n                        childCheck = (child[length_1][this.fields.isChecked] !== false || checked === 2) ? 0 : null;\n                    }\n                }\n                //Pushes child checked node done thro' UI interaction\n                if (newCheck.indexOf(childId.toString()) === -1 && isNOU(checked)) {\n                    newCheck.push(childId.toString());\n                }\n                //Gets if any next level children are available for child nodes\n                if (getValue(this.fields.hasChildren, child[length_1]) === true ||\n                    getValue(this.fields.child.toString(), child[length_1])) {\n                    var id = getValue(this.fields.id, child[length_1]);\n                    var childId_1 = this.getChildNodes(this.treeData, id.toString());\n                    if (childId_1) {\n                        (isNOU(validateCheck)) ? this.allCheckNode(childId_1, newCheck, checked, childCheck) :\n                            this.allCheckNode(childId_1, newCheck, checked, childCheck, validateCheck);\n                        childCheck = null;\n                    }\n                }\n                childCheck = null;\n            }\n        }\n    };\n    TreeView.prototype.openNode = function (toBeOpened, e) {\n        var focusedNode = this.getFocusedNode();\n        var icon = select('div.' + ICON, focusedNode);\n        if (toBeOpened) {\n            if (!icon) {\n                return;\n            }\n            else if (icon.classList.contains(EXPANDABLE)) {\n                this.expandAction(focusedNode, icon, e);\n            }\n            else {\n                this.focusNextNode(focusedNode, true);\n            }\n        }\n        else {\n            if (icon && icon.classList.contains(COLLAPSIBLE)) {\n                this.collapseNode(focusedNode, icon, e);\n            }\n            else {\n                var parentLi = closest(closest(focusedNode, '.' + PARENTITEM), '.' + LISTITEM);\n                if (!parentLi) {\n                    return;\n                }\n                else {\n                    if (!parentLi.classList.contains('e-disable')) {\n                        this.setFocus(focusedNode, parentLi);\n                        this.navigateToFocus(true);\n                    }\n                }\n            }\n        }\n    };\n    TreeView.prototype.navigateNode = function (isTowards) {\n        var focusedNode = this.getFocusedNode();\n        this.focusNextNode(focusedNode, isTowards);\n    };\n    TreeView.prototype.navigateRootNode = function (isBackwards) {\n        var focusedNode = this.getFocusedNode();\n        var rootNode = isBackwards ? this.getRootNode() : this.getEndNode();\n        if (!rootNode.classList.contains('e-disable')) {\n            this.setFocus(focusedNode, rootNode);\n            this.navigateToFocus(isBackwards);\n        }\n    };\n    TreeView.prototype.getFocusedNode = function () {\n        var selectedItem;\n        var fNode = select('.' + LISTITEM + '.' + FOCUS, this.element);\n        if (isNOU(fNode)) {\n            selectedItem = select('.' + LISTITEM, this.element);\n        }\n        return isNOU(fNode) ? (isNOU(selectedItem) ? this.element.firstElementChild : selectedItem) : fNode;\n    };\n    TreeView.prototype.focusNextNode = function (li, isTowards) {\n        var nextNode = isTowards ? this.getNextNode(li) : this.getPrevNode(li);\n        this.setFocus(li, nextNode);\n        this.navigateToFocus(!isTowards);\n        if (nextNode.classList.contains('e-disable')) {\n            var lastChild = nextNode.lastChild;\n            if (nextNode.previousSibling == null && nextNode.classList.contains('e-level-1')) {\n                this.focusNextNode(nextNode, true);\n            }\n            else if (nextNode.nextSibling == null && nextNode.classList.contains('e-node-collapsed')) {\n                this.focusNextNode(nextNode, false);\n            }\n            else if (nextNode.nextSibling == null && lastChild.classList.contains('e-text-content')) {\n                this.focusNextNode(nextNode, false);\n            }\n            else {\n                this.focusNextNode(nextNode, isTowards);\n            }\n        }\n    };\n    TreeView.prototype.getNextNode = function (li) {\n        var index = this.liList.indexOf(li);\n        var nextNode;\n        do {\n            index++;\n            nextNode = this.liList[index];\n            if (isNOU(nextNode)) {\n                return li;\n            }\n        } while (!isVisible(nextNode));\n        return nextNode;\n    };\n    TreeView.prototype.getPrevNode = function (li) {\n        var index = this.liList.indexOf(li);\n        var prevNode;\n        do {\n            index--;\n            prevNode = this.liList[index];\n            if (isNOU(prevNode)) {\n                return li;\n            }\n        } while (!isVisible(prevNode));\n        return prevNode;\n    };\n    TreeView.prototype.getRootNode = function () {\n        var index = 0;\n        var rootNode;\n        do {\n            rootNode = this.liList[index];\n            index++;\n        } while (!isVisible(rootNode));\n        return rootNode;\n    };\n    TreeView.prototype.getEndNode = function () {\n        var index = this.liList.length - 1;\n        var endNode;\n        do {\n            endNode = this.liList[index];\n            index--;\n        } while (!isVisible(endNode));\n        return endNode;\n    };\n    TreeView.prototype.setFocus = function (preNode, nextNode) {\n        removeClass([preNode], [HOVER, FOCUS]);\n        if (!nextNode.classList.contains('e-disable')) {\n            addClass([nextNode], [HOVER, FOCUS]);\n            this.updateIdAttr(preNode, nextNode);\n        }\n    };\n    TreeView.prototype.updateIdAttr = function (preNode, nextNode) {\n        this.element.removeAttribute('aria-activedescendant');\n        if (preNode) {\n            preNode.removeAttribute('id');\n        }\n        nextNode.setAttribute('id', this.element.id + '_active');\n        this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n    };\n    TreeView.prototype.focusIn = function () {\n        if (!this.mouseDownStatus) {\n            addClass([this.getFocusedNode()], HOVER);\n        }\n        this.mouseDownStatus = false;\n    };\n    TreeView.prototype.focusOut = function () {\n        removeClass([this.getFocusedNode()], HOVER);\n    };\n    TreeView.prototype.onMouseOver = function (e) {\n        var target = e.target;\n        var classList = target.classList;\n        var currentLi = closest(target, '.' + LISTITEM);\n        if (!currentLi || classList.contains(PARENTITEM) || classList.contains(LISTITEM)) {\n            this.removeHover();\n            return;\n        }\n        else {\n            if (currentLi && !currentLi.classList.contains('e-disable')) {\n                this.setHover(currentLi);\n            }\n        }\n    };\n    TreeView.prototype.setHover = function (li) {\n        if (!li.classList.contains(HOVER)) {\n            this.removeHover();\n            addClass([li], HOVER);\n        }\n    };\n    ;\n    TreeView.prototype.onMouseLeave = function (e) {\n        this.removeHover();\n    };\n    TreeView.prototype.removeHover = function () {\n        var hoveredNode = selectAll('.' + HOVER, this.element);\n        if (hoveredNode && hoveredNode.length) {\n            removeClass(hoveredNode, HOVER);\n        }\n    };\n    ;\n    TreeView.prototype.getNodeData = function (currLi, fromDS) {\n        if (!isNOU(currLi) && currLi.classList.contains(LISTITEM) &&\n            !isNOU(closest(currLi, '.' + CONTROL)) && closest(currLi, '.' + CONTROL).classList.contains(ROOT)) {\n            var id = currLi.getAttribute('data-uid');\n            var text = this.getText(currLi, fromDS);\n            var pNode = closest(currLi.parentNode, '.' + LISTITEM);\n            var pid = pNode ? pNode.getAttribute('data-uid') : null;\n            var selected = currLi.classList.contains(ACTIVE);\n            var expanded = (currLi.getAttribute('aria-expanded') === 'true') ? true : false;\n            var hasChildren = (currLi.getAttribute('aria-expanded') === null) ? false : true;\n            if (this.isBlazorPlatform) {\n                hasChildren = currLi.getAttribute('aria-expanded') === 'true' ? true : (currLi.querySelector('.e-icon-expandable') || currLi.querySelector('.e-icon-collapsible')) != null ? true : false;\n            }\n            var checked = null;\n            if (this.showCheckBox) {\n                checked = select('.' + CHECKBOXWRAP, currLi).getAttribute('aria-checked');\n            }\n            return {\n                id: id, text: text, parentID: pid, selected: selected, expanded: expanded,\n                isChecked: checked, hasChildren: hasChildren\n            };\n        }\n        return { id: '', text: '', parentID: '', selected: false, expanded: false, isChecked: '', hasChildren: false };\n    };\n    TreeView.prototype.getText = function (currLi, fromDS) {\n        if (fromDS) {\n            var nodeData = this.getNodeObject(currLi.getAttribute('data-uid'));\n            var level = parseFloat(currLi.getAttribute('aria-level'));\n            var nodeFields = this.getFields(this.fields, level, 1);\n            return getValue(nodeFields.text, nodeData);\n        }\n        return select('.' + LISTTEXT, currLi).textContent;\n    };\n    TreeView.prototype.getExpandEvent = function (currLi, e) {\n        var nodeData = this.getNodeData(currLi);\n        return { cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData, event: e };\n    };\n    TreeView.prototype.renderNodeTemplate = function (data, textEle, dataId) {\n        var tempArr = this.nodeTemplateFn(data, this, 'nodeTemplate' + dataId, this.element.id + 'nodeTemplate', this.isStringTemplate, undefined, textEle);\n        if (tempArr) {\n            tempArr = Array.prototype.slice.call(tempArr);\n            append(tempArr, textEle);\n        }\n    };\n    TreeView.prototype.destroyTemplate = function (liEle) {\n        this.clearTemplate(['nodeTemplate' + liEle.getAttribute('data-uid')]);\n    };\n    TreeView.prototype.reRenderNodes = function () {\n        this.updateListProp(this.fields);\n        resetBlazorTemplate(this.element.id + 'nodeTemplate', 'NodeTemplate');\n        if (this.isBlazorPlatform) {\n            this.ulElement = this.element.querySelector('.e-list-parent.e-ul');\n            this.ulElement.parentElement.removeChild(this.ulElement);\n        }\n        else {\n            this.element.innerHTML = '';\n        }\n        if (!isNOU(this.nodeTemplateFn)) {\n            this.clearTemplate();\n        }\n        this.setTouchClass();\n        this.setProperties({ selectedNodes: [], checkedNodes: [], expandedNodes: [] }, true);\n        this.checkedElement = [];\n        this.isLoaded = false;\n        this.setDataBinding(true);\n    };\n    TreeView.prototype.setCssClass = function (oldClass, newClass) {\n        if (!isNOU(oldClass) && oldClass !== '') {\n            removeClass([this.element], oldClass.split(' '));\n        }\n        if (!isNOU(newClass) && newClass !== '') {\n            addClass([this.element], newClass.split(' '));\n        }\n    };\n    TreeView.prototype.editingHandler = function (e) {\n        var target = e.target;\n        if (!target || target.classList.contains(ROOT) || target.classList.contains(PARENTITEM) ||\n            target.classList.contains(LISTITEM) || target.classList.contains(ICON) ||\n            target.classList.contains(INPUT) || target.classList.contains(INPUTGROUP)) {\n            return;\n        }\n        else {\n            var liEle = closest(target, '.' + LISTITEM);\n            this.createTextbox(liEle, e);\n        }\n    };\n    TreeView.prototype.createTextbox = function (liEle, e) {\n        var _this = this;\n        var oldInpEle = select('.' + TREEINPUT, this.element);\n        if (oldInpEle) {\n            oldInpEle.blur();\n        }\n        var textEle = select('.' + LISTTEXT, liEle);\n        this.updateOldText(liEle);\n        var innerEle = this.createElement('input', { className: TREEINPUT, attrs: { value: this.oldText } });\n        var eventArgs = this.getEditEvent(liEle, null, innerEle.outerHTML);\n        this.trigger('nodeEditing', eventArgs, function (observedArgs) {\n            if (!observedArgs.cancel) {\n                var inpWidth = textEle.offsetWidth + 5;\n                var style = 'width:' + inpWidth + 'px';\n                addClass([liEle], EDITING);\n                if (!isNOU(_this.nodeTemplateFn)) {\n                    _this.destroyTemplate(liEle);\n                }\n                textEle.innerHTML = eventArgs.innerHtml;\n                var inpEle = select('.' + TREEINPUT, textEle);\n                _this.inputObj = Input.createInput({\n                    element: inpEle,\n                    properties: {\n                        enableRtl: _this.enableRtl,\n                    }\n                }, _this.createElement);\n                _this.inputObj.container.setAttribute('style', style);\n                inpEle.focus();\n                var inputEle = inpEle;\n                inputEle.setSelectionRange(0, inputEle.value.length);\n                _this.wireInputEvents(inpEle);\n            }\n        });\n    };\n    TreeView.prototype.updateOldText = function (liEle) {\n        var id = liEle.getAttribute('data-uid');\n        this.editData = this.getNodeObject(id);\n        var level = parseFloat(liEle.getAttribute('aria-level'));\n        this.editFields = this.getFields(this.fields, level, 1);\n        this.oldText = getValue(this.editFields.text, this.editData);\n    };\n    TreeView.prototype.inputFocusOut = function (e) {\n        if (!select('.' + TREEINPUT, this.element)) {\n            return;\n        }\n        var target = e.target;\n        var newText = target.value;\n        var txtEle = closest(target, '.' + LISTTEXT);\n        var liEle = closest(target, '.' + LISTITEM);\n        detach(this.inputObj.container);\n        if (this.fields.dataSource instanceof DataManager && !this.isOffline && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n            this.crudOperation('update', null, liEle, newText, null, null, true);\n        }\n        else {\n            this.appendNewText(liEle, txtEle, newText, true);\n        }\n    };\n    TreeView.prototype.appendNewText = function (liEle, txtEle, newText, isInput) {\n        var _this = this;\n        var eventArgs = this.getEditEvent(liEle, newText, null);\n        this.trigger('nodeEdited', eventArgs, function (observedArgs) {\n            newText = observedArgs.cancel ? observedArgs.oldText : observedArgs.newText;\n            _this.updateText(liEle, txtEle, newText, isInput);\n            if (observedArgs.oldText !== newText) {\n                _this.triggerEvent();\n            }\n        });\n    };\n    TreeView.prototype.updateText = function (liEle, txtEle, newText, isInput) {\n        var newData = setValue(this.editFields.text, newText, this.editData);\n        if (!isNOU(this.nodeTemplateFn)) {\n            txtEle.innerText = '';\n            var dataId = liEle.getAttribute('data-uid');\n            this.renderNodeTemplate(newData, txtEle, dataId);\n            this.updateBlazorTemplate();\n            this.renderReactTemplates();\n        }\n        else {\n            txtEle.innerText = newText;\n        }\n        if (isInput) {\n            removeClass([liEle], EDITING);\n            txtEle.focus();\n        }\n    };\n    TreeView.prototype.getElement = function (ele) {\n        if (isNOU(ele)) {\n            return null;\n        }\n        else if (typeof ele === 'string') {\n            return this.element.querySelector('[data-uid=\"' + ele + '\"]');\n        }\n        else if (typeof ele === 'object') {\n            return getElement(ele);\n        }\n        else {\n            return null;\n        }\n    };\n    TreeView.prototype.getId = function (ele) {\n        if (isNOU(ele)) {\n            return null;\n        }\n        else if (typeof ele === 'string') {\n            return ele;\n        }\n        else if (typeof ele === 'object') {\n            return (getElement(ele)).getAttribute('data-uid');\n        }\n        else {\n            return null;\n        }\n    };\n    TreeView.prototype.getEditEvent = function (liEle, newText, inpEle) {\n        var data = this.getNodeData(liEle);\n        return { cancel: false, newText: newText, node: liEle, nodeData: data, oldText: this.oldText, innerHtml: inpEle };\n    };\n    TreeView.prototype.getNodeObject = function (id) {\n        var childNodes;\n        if (isNOU(id)) {\n            return childNodes;\n        }\n        else if (this.dataType === 1) {\n            for (var i = 0, objlen = this.treeData.length; i < objlen; i++) {\n                var dataId = getValue(this.fields.id, this.treeData[i]);\n                if (!isNOU(this.treeData[i]) && !isNOU(dataId) && dataId.toString() === id) {\n                    return this.treeData[i];\n                }\n            }\n        }\n        else {\n            return this.getChildNodeObject(this.treeData, this.fields, id);\n        }\n        return childNodes;\n    };\n    TreeView.prototype.getChildNodeObject = function (obj, mapper, id) {\n        var newList;\n        if (isNOU(obj)) {\n            return newList;\n        }\n        for (var i = 0, objlen = obj.length; i < objlen; i++) {\n            var dataId = getValue(mapper.id, obj[i]);\n            if (obj[i] && dataId && dataId.toString() === id) {\n                return obj[i];\n            }\n            else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n                var childData = getValue(mapper.child, obj[i]);\n                newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n                if (newList !== undefined) {\n                    break;\n                }\n            }\n            else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n                var child = 'child';\n                newList = this.getChildNodeObject(getValue(child, obj[i]), this.getChildMapper(mapper), id);\n                if (newList !== undefined) {\n                    break;\n                }\n            }\n        }\n        return newList;\n    };\n    TreeView.prototype.setDragAndDrop = function (toBind) {\n        if (toBind && !this.disabled) {\n            this.initializeDrag();\n        }\n        else {\n            this.destroyDrag();\n        }\n    };\n    // tslint:disable-next-line:max-func-body-length\n    TreeView.prototype.initializeDrag = function () {\n        var _this = this;\n        var virtualEle;\n        var proxy = this;\n        this.dragObj = new Draggable(this.element, {\n            enableTailMode: true, enableAutoScroll: true,\n            dragArea: this.dragArea,\n            dragTarget: '.' + TEXTWRAP,\n            helper: function (e) {\n                _this.dragTarget = e.sender.target;\n                var dragRoot = closest(_this.dragTarget, '.' + ROOT);\n                var dragWrap = closest(_this.dragTarget, '.' + TEXTWRAP);\n                _this.dragLi = closest(_this.dragTarget, '.' + LISTITEM);\n                if (_this.fullRowSelect && !dragWrap && _this.dragTarget.classList.contains(FULLROW)) {\n                    dragWrap = _this.dragTarget.nextElementSibling;\n                }\n                if (!_this.dragTarget || !e.element.isSameNode(dragRoot) || !dragWrap ||\n                    _this.dragTarget.classList.contains(ROOT) || _this.dragTarget.classList.contains(PARENTITEM) ||\n                    _this.dragTarget.classList.contains(LISTITEM) || _this.dragLi.classList.contains('e-disable')) {\n                    return false;\n                }\n                var cloneEle = (dragWrap.cloneNode(true));\n                if (isNOU(select('div.' + ICON, cloneEle))) {\n                    var icon = proxy.createElement('div', { className: ICON + ' ' + EXPANDABLE });\n                    cloneEle.insertBefore(icon, cloneEle.children[0]);\n                }\n                var cssClass = DRAGITEM + ' ' + ROOT + ' ' + _this.cssClass + ' ' + (_this.enableRtl ? RTL : '');\n                virtualEle = proxy.createElement('div', { className: cssClass });\n                virtualEle.appendChild(cloneEle);\n                var nLen = _this.selectedNodes.length;\n                if (nLen > 1 && _this.allowMultiSelection && _this.dragLi.classList.contains(ACTIVE)) {\n                    var cNode = proxy.createElement('span', { className: DROPCOUNT, innerHTML: '' + nLen });\n                    virtualEle.appendChild(cNode);\n                }\n                document.body.appendChild(virtualEle);\n                document.body.style.cursor = '';\n                _this.dragData = _this.getNodeData(_this.dragLi);\n                return virtualEle;\n            },\n            dragStart: function (e) {\n                addClass([_this.element], DRAGGING);\n                var listItem = closest(e.target, '.e-list-item');\n                var level;\n                if (listItem) {\n                    level = parseInt(listItem.getAttribute('aria-level'), 10);\n                }\n                var eventArgs = _this.getDragEvent(e.event, _this, null, e.target, null, virtualEle, level);\n                if (eventArgs.draggedNode.classList.contains(EDITING)) {\n                    _this.dragObj.intDestroy(e.event);\n                    _this.dragCancelAction(virtualEle);\n                }\n                else {\n                    _this.trigger('nodeDragStart', eventArgs, function (observedArgs) {\n                        if (observedArgs.cancel) {\n                            _this.dragObj.intDestroy(e.event);\n                            _this.dragCancelAction(virtualEle);\n                        }\n                        else {\n                            _this.dragStartAction = true;\n                        }\n                        if (isBlazor()) {\n                            e.bindEvents(getElement(e.dragElement));\n                        }\n                    });\n                }\n            },\n            drag: function (e) {\n                _this.dragObj.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20 } });\n                _this.dragAction(e, virtualEle);\n            },\n            dragStop: function (e) {\n                removeClass([_this.element], DRAGGING);\n                _this.removeVirtualEle();\n                var dropTarget = e.target;\n                var preventTargetExpand = false;\n                var dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n                var isHelperElement = true;\n                if (!dropTarget || !dropRoot) {\n                    detach(e.helper);\n                    document.body.style.cursor = '';\n                    isHelperElement = false;\n                }\n                var listItem = closest(dropTarget, '.e-list-item');\n                var level;\n                if (listItem) {\n                    level = parseInt(listItem.getAttribute('aria-level'), 10);\n                }\n                var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget, null, e.helper, level);\n                eventArgs.preventTargetExpand = preventTargetExpand;\n                if ((_this.isBlazorPlatform && _this.dragStartAction) || !_this.isBlazorPlatform) {\n                    _this.trigger('nodeDragStop', eventArgs, function (observedArgs) {\n                        _this.dragParent = observedArgs.draggedParentNode;\n                        _this.preventExpand = observedArgs.preventTargetExpand;\n                        if (observedArgs.cancel) {\n                            if (e.helper.parentNode) {\n                                detach(e.helper);\n                            }\n                            document.body.style.cursor = '';\n                            isHelperElement = false;\n                        }\n                        _this.dragStartAction = false;\n                        if (_this.isBlazorPlatform && isHelperElement) {\n                            _this.dropAction(e, true);\n                        }\n                    });\n                }\n            }\n        });\n        this.dropObj = new Droppable(this.element, {\n            out: function (e) {\n                if (!isNOU(e) && !e.target.classList.contains(SIBLING)) {\n                    document.body.style.cursor = 'not-allowed';\n                }\n            },\n            over: function (e) {\n                document.body.style.cursor = '';\n            },\n            drop: function (e) {\n                if (!_this.isBlazorPlatform) {\n                    _this.dropAction(e);\n                }\n            }\n        });\n    };\n    TreeView.prototype.dragCancelAction = function (virtualEle) {\n        detach(virtualEle);\n        removeClass([this.element], DRAGGING);\n        this.dragStartAction = false;\n    };\n    TreeView.prototype.dragAction = function (e, virtualEle) {\n        var dropRoot = closest(e.target, '.' + DROPPABLE);\n        var dropWrap = closest(e.target, '.' + TEXTWRAP);\n        var icon = select('div.' + ICON, virtualEle);\n        removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n        this.removeVirtualEle();\n        document.body.style.cursor = '';\n        var classList = e.target.classList;\n        if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n            dropWrap = e.target.nextElementSibling;\n        }\n        if (dropRoot) {\n            var dropLi = closest(e.target, '.' + LISTITEM);\n            var checkWrapper = closest(e.target, '.' + CHECKBOXWRAP);\n            var collapse = closest(e.target, '.' + COLLAPSIBLE);\n            var expand = closest(e.target, '.' + EXPANDABLE);\n            if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n                (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n                if ((dropLi && e && (!expand && !collapse) && (e.event.offsetY < 7) && !checkWrapper) || (((expand && e.event.offsetY < 5) || (collapse && e.event.offsetX < 3)))) {\n                    addClass([icon], DROPNEXT);\n                    var virEle = this.createElement('div', { className: SIBLING });\n                    var index = this.fullRowSelect ? (1) : (0);\n                    dropLi.insertBefore(virEle, dropLi.children[index]);\n                }\n                else if ((dropLi && e && (!expand && !collapse) && (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10)) && !checkWrapper) || (((expand && e.event.offsetY > 19) || (collapse && e.event.offsetX > 19)))) {\n                    addClass([icon], DROPNEXT);\n                    var virEle = this.createElement('div', { className: SIBLING });\n                    var index = this.fullRowSelect ? (2) : (1);\n                    dropLi.insertBefore(virEle, dropLi.children[index]);\n                }\n                else {\n                    addClass([icon], DROPIN);\n                }\n            }\n            else if (e.target.nodeName === 'LI' && (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi))) {\n                addClass([icon], DROPNEXT);\n                this.renderVirtualEle(e);\n            }\n            else if (e.target.classList.contains(SIBLING)) {\n                addClass([icon], DROPNEXT);\n            }\n            else {\n                addClass([icon], DROPOUT);\n            }\n        }\n        else {\n            addClass([icon], NODROP);\n            document.body.style.cursor = 'not-allowed';\n        }\n        var listItem = closest(e.target, '.e-list-item');\n        var level;\n        if (listItem) {\n            level = parseInt(listItem.getAttribute('aria-level'), 10);\n        }\n        var eventArgs = this.getDragEvent(e.event, this, e.target, e.target, null, virtualEle, level);\n        if (eventArgs.dropIndicator) {\n            removeClass([icon], eventArgs.dropIndicator);\n        }\n        this.trigger('nodeDragging', eventArgs);\n        if (eventArgs.dropIndicator) {\n            addClass([icon], eventArgs.dropIndicator);\n        }\n    };\n    // tslint:disable\n    TreeView.prototype.dropAction = function (e, isBlazorDrop) {\n        var offsetY = e.event.offsetY;\n        var dropTarget = e.target;\n        var dragObj;\n        var level;\n        var drop = false;\n        var dragInstance;\n        if (!isBlazorDrop) {\n            dragInstance = e.dragData.draggable;\n        }\n        else {\n            dragInstance = e.element;\n        }\n        for (var i = 0; i < dragInstance.ej2_instances.length; i++) {\n            if (dragInstance.ej2_instances[i] instanceof TreeView_1) {\n                dragObj = dragInstance.ej2_instances[i];\n                break;\n            }\n        }\n        if (dragObj && dragObj.dragTarget) {\n            var dragTarget = dragObj.dragTarget;\n            var dragLi = (closest(dragTarget, '.' + LISTITEM));\n            var dropLi = (closest(dropTarget, '.' + LISTITEM));\n            if (dropLi == null && dropTarget.classList.contains(ROOT)) {\n                dropLi = dropTarget.firstElementChild;\n            }\n            if (!isBlazorDrop) {\n                detach(e.droppedElement);\n            }\n            else {\n                detach(e.helper);\n            }\n            document.body.style.cursor = '';\n            if (!dropLi || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n                if (this.fields.dataSource instanceof DataManager === false) {\n                    this.preventExpand = false;\n                }\n                return;\n            }\n            if (dragObj.allowMultiSelection && dragLi.classList.contains(ACTIVE)) {\n                var sNodes = selectAll('.' + ACTIVE, dragObj.element);\n                if (e.target.offsetHeight <= 33 && offsetY > e.target.offsetHeight - 10 && offsetY > 6) {\n                    for (var i = sNodes.length - 1; i >= 0; i--) {\n                        if (dropLi.isSameNode(sNodes[i]) || this.isDescendant(sNodes[i], dropLi)) {\n                            continue;\n                        }\n                        this.appendNode(dropTarget, sNodes[i], dropLi, e, dragObj, offsetY);\n                    }\n                }\n                else {\n                    for (var i = 0; i < sNodes.length; i++) {\n                        if (dropLi.isSameNode(sNodes[i]) || this.isDescendant(sNodes[i], dropLi)) {\n                            continue;\n                        }\n                        this.appendNode(dropTarget, sNodes[i], dropLi, e, dragObj, offsetY);\n                    }\n                }\n            }\n            else {\n                this.appendNode(dropTarget, dragLi, dropLi, e, dragObj, offsetY);\n            }\n            level = parseInt(dragLi.getAttribute('aria-level'), 10);\n            drop = true;\n        }\n        if (this.fields.dataSource instanceof DataManager === false) {\n            this.preventExpand = false;\n        }\n        if (!isBlazorDrop) {\n            this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.dragData.draggedElement, null, level, drop));\n        }\n        else {\n            this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.element, null, level, drop));\n        }\n        this.triggerEvent();\n    };\n    TreeView.prototype.appendNode = function (dropTarget, dragLi, dropLi, e, dragObj, offsetY) {\n        var checkWrapper = closest(dropTarget, '.' + CHECKBOXWRAP);\n        var collapse = closest(e.target, '.' + COLLAPSIBLE);\n        var expand = closest(e.target, '.' + EXPANDABLE);\n        if (!dragLi.classList.contains('e-disable') && !checkWrapper && ((expand && e.event.offsetY < 5) || (collapse && e.event.offsetX < 3) || (expand && e.event.offsetY > 19) || (collapse && e.event.offsetX > 19) || (!expand && !collapse))) {\n            if (dropTarget.nodeName === 'LI') {\n                this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n            }\n            else if (dropTarget.firstElementChild && dropTarget.classList.contains(ROOT)) {\n                if (dropTarget.firstElementChild.nodeName === 'UL') {\n                    this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n                }\n            }\n            else if ((dropTarget.classList.contains('e-icon-collapsible')) || (dropTarget.classList.contains('e-icon-expandable'))) {\n                this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n            }\n            else {\n                this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY);\n            }\n        }\n        else {\n            this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY, true);\n        }\n    };\n    TreeView.prototype.dropAsSiblingNode = function (dragLi, dropLi, e, dragObj) {\n        var dropUl = closest(dropLi, '.' + PARENTITEM);\n        var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n        var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n        var pre;\n        if (e.target.offsetHeight > 0 && e.event.offsetY > e.target.offsetHeight - 2) {\n            pre = false;\n        }\n        else if (e.event.offsetY < 2) {\n            pre = true;\n        }\n        else if (e.target.classList.contains('e-icon-expandable') || (e.target.classList.contains('e-icon-collapsible'))) {\n            if ((e.event.offsetY < 5) || (e.event.offsetX < 3)) {\n                pre = true;\n            }\n            else if ((e.event.offsetY > 15) || (e.event.offsetX > 17)) {\n                pre = false;\n            }\n        }\n        if ((e.target.classList.contains('e-icon-expandable')) || (e.target.classList.contains('e-icon-collapsible'))) {\n            var target = e.target.closest('li');\n            dropUl.insertBefore(dragLi, pre ? target : target.nextElementSibling);\n        }\n        else {\n            dropUl.insertBefore(dragLi, pre ? e.target : e.target.nextElementSibling);\n        }\n        this.moveData(dragLi, dropLi, dropUl, pre, dragObj);\n        this.updateElement(dragParentUl, dragParentLi);\n        this.updateAriaLevel(dragLi);\n        if (dragObj.element.id === this.element.id) {\n            this.updateList();\n        }\n        else {\n            dragObj.updateInstance();\n            this.updateInstance();\n        }\n    };\n    TreeView.prototype.dropAsChildNode = function (dragLi, dropLi, dragObj, index, e, pos, isCheck) {\n        var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n        var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n        var dropParentUl = closest(dropLi, '.' + PARENTITEM);\n        if (e && (pos < 7) && !isCheck) {\n            dropParentUl.insertBefore(dragLi, dropLi);\n            this.moveData(dragLi, dropLi, dropParentUl, true, dragObj);\n        }\n        else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10)) && !isCheck) {\n            dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n            this.moveData(dragLi, dropLi, dropParentUl, false, dragObj);\n        }\n        else {\n            var dropUl = this.expandParent(dropLi);\n            var childLi = dropUl.childNodes[index];\n            dropUl.insertBefore(dragLi, childLi);\n            this.moveData(dragLi, childLi, dropUl, true, dragObj);\n        }\n        this.updateElement(dragParentUl, dragParentLi);\n        this.updateAriaLevel(dragLi);\n        if (dragObj.element.id === this.element.id) {\n            this.updateList();\n        }\n        else {\n            dragObj.updateInstance();\n            this.updateInstance();\n        }\n    };\n    TreeView.prototype.moveData = function (dragLi, dropLi, dropUl, pre, dragObj) {\n        var dropParentLi = closest(dropUl, '.' + LISTITEM);\n        var id = this.getId(dragLi);\n        var removedData = dragObj.updateChildField(dragObj.treeData, dragObj.fields, id, null, null, true);\n        var refId = this.getId(dropLi);\n        var index = this.getDataPos(this.treeData, this.fields, refId);\n        var parentId = this.getId(dropParentLi);\n        if (this.dataType === 1) {\n            this.updateField(this.treeData, this.fields, parentId, 'hasChildren', true);\n            var pos = isNOU(index) ? this.treeData.length : (pre ? index : index + 1);\n            if (isNOU(parentId) && !this.hasPid) {\n                delete removedData[0][this.fields.parentID];\n            }\n            else {\n                var currPid = this.isNumberTypeId ? parseFloat(parentId) : parentId;\n                setValue(this.fields.parentID, currPid, removedData[0]);\n            }\n            this.treeData.splice(pos, 0, removedData[0]);\n            if (dragObj.element.id !== this.element.id) {\n                var childData = dragObj.removeChildNodes(id);\n                pos++;\n                for (var i = 0, len = childData.length; i < len; i++) {\n                    this.treeData.splice(pos, 0, childData[i]);\n                    pos++;\n                }\n                dragObj.groupedData = dragObj.getGroupedData(dragObj.treeData, dragObj.fields.parentID);\n            }\n            this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n        }\n        else {\n            this.addChildData(this.treeData, this.fields, parentId, removedData, pre ? index : index + 1);\n        }\n    };\n    TreeView.prototype.expandParent = function (dropLi) {\n        var dropIcon = select('div.' + ICON, dropLi);\n        if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && this.preventExpand !== true) {\n            this.expandAction(dropLi, dropIcon, null);\n        }\n        var dropUl = select('.' + PARENTITEM, dropLi);\n        if (this.preventExpand === true && !dropUl && dropIcon) {\n            this.renderChildNodes(dropLi);\n        }\n        dropUl = select('.' + PARENTITEM, dropLi);\n        if (!isNOU(dropUl) && this.preventExpand === true) {\n            dropUl.style.display = 'none';\n        }\n        if (!isNOU(dropUl) && this.preventExpand === false) {\n            dropUl.style.display = 'block';\n        }\n        if (isNOU(dropUl) && this.preventExpand === true) {\n            if (isNOU(dropIcon)) {\n                ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n            }\n            var icon = select('div.' + ICON, dropLi);\n            if (icon) {\n                icon.classList.add('e-icon-expandable');\n            }\n            dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n            dropLi.appendChild(dropUl);\n            if (icon) {\n                removeClass([icon], COLLAPSIBLE);\n            }\n            else {\n                ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n            }\n            dropLi.setAttribute('aria-expanded', 'false');\n            dropUl.style.display = 'none';\n        }\n        if (isNOU(dropUl)) {\n            this.trigger('nodeExpanding', this.getExpandEvent(dropLi, null));\n            if (isNOU(dropIcon)) {\n                ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n            }\n            var icon = select('div.' + ICON, dropLi);\n            if (icon) {\n                removeClass([icon], EXPANDABLE);\n            }\n            else {\n                ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n                icon = select('div.' + ICON, dropLi);\n                removeClass([icon], EXPANDABLE);\n            }\n            dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n            dropLi.appendChild(dropUl);\n            this.addExpand(dropLi);\n            this.trigger('nodeExpanded', this.getExpandEvent(dropLi, null));\n        }\n        return dropUl;\n    };\n    TreeView.prototype.updateElement = function (dragParentUl, dragParentLi) {\n        if (dragParentLi && dragParentUl.childElementCount === 0) {\n            var dragIcon = select('div.' + ICON, dragParentLi);\n            detach(dragParentUl);\n            detach(dragIcon);\n            var parentId = this.getId(dragParentLi);\n            this.updateField(this.treeData, this.fields, parentId, 'hasChildren', false);\n            this.removeExpand(dragParentLi, true);\n        }\n    };\n    TreeView.prototype.updateAriaLevel = function (dragLi) {\n        var level = this.parents(dragLi, '.' + PARENTITEM).length;\n        dragLi.setAttribute('aria-level', '' + level);\n        this.updateChildAriaLevel(select('.' + PARENTITEM, dragLi), level + 1);\n    };\n    TreeView.prototype.updateChildAriaLevel = function (element, level) {\n        if (!isNOU(element)) {\n            var cNodes = element.childNodes;\n            for (var i = 0, len = cNodes.length; i < len; i++) {\n                var liEle = cNodes[i];\n                liEle.setAttribute('aria-level', '' + level);\n                this.updateChildAriaLevel(select('.' + PARENTITEM, liEle), level + 1);\n            }\n        }\n    };\n    TreeView.prototype.renderVirtualEle = function (e) {\n        var pre;\n        if (e.event.offsetY > e.target.offsetHeight - 2) {\n            pre = false;\n        }\n        else if (e.event.offsetY < 2) {\n            pre = true;\n        }\n        var virEle = this.createElement('div', { className: SIBLING });\n        var index = this.fullRowSelect ? (pre ? 1 : 2) : (pre ? 0 : 1);\n        e.target.insertBefore(virEle, e.target.children[index]);\n    };\n    TreeView.prototype.removeVirtualEle = function () {\n        var sibEle = select('.' + SIBLING);\n        if (sibEle) {\n            detach(sibEle);\n        }\n    };\n    TreeView.prototype.destroyDrag = function () {\n        if (this.dragObj && this.dropObj) {\n            this.dragObj.destroy();\n            this.dropObj.destroy();\n        }\n    };\n    TreeView.prototype.getDragEvent = function (event, obj, dropTarget, target, dragNode, cloneEle, level, drop) {\n        var dropLi = dropTarget ? closest(dropTarget, '.' + LISTITEM) : null;\n        var dropData = dropLi ? this.getNodeData(dropLi) : null;\n        var draggedNode = obj ? obj.dragLi : dragNode;\n        var draggedNodeData = obj ? obj.dragData : null;\n        var newParent = dropTarget ? this.parents(dropTarget, '.' + LISTITEM) : null;\n        var dragLiParent = obj.dragLi.parentElement;\n        var dragParent = obj.dragLi ? closest(dragLiParent, '.' + LISTITEM) : null;\n        var targetParent = null;\n        var indexValue = null;\n        var iconCss = [DROPNEXT, DROPIN, DROPOUT, NODROP];\n        var iconClass = null;\n        var node = (drop === true) ? draggedNode : dropLi;\n        var index = node ? closest(node, '.e-list-parent') : null;\n        var i = 0;\n        var position = null;\n        dragParent = (obj.dragLi && dragParent === null) ? closest(dragLiParent, '.' + ROOT) : dragParent;\n        dragParent = (drop === true) ? this.dragParent : dragParent;\n        if (cloneEle) {\n            while (i < 4) {\n                if (select('.' + ICON, cloneEle).classList.contains(iconCss[i])) {\n                    iconClass = iconCss[i];\n                    break;\n                }\n                i++;\n            }\n        }\n        if (index) {\n            var dropTar = 0;\n            for (i = 0; i < index.childElementCount; i++) {\n                dropTar = (drop !== true && index.children[i] === draggedNode && dropLi !== draggedNode) ? ++dropTar : dropTar;\n                if ((drop !== true && index.children[i].classList.contains('e-hover'))) {\n                    indexValue = (event.offsetY >= 23) ? i + 1 : i;\n                    break;\n                }\n                else if (index.children[i] === node) {\n                    indexValue = (event.offsetY >= 23) ? i : i;\n                    break;\n                }\n            }\n            indexValue = (dropTar !== 0) ? --indexValue : indexValue;\n            position = (iconClass == \"e-drop-in\") ? \"Inside\" : ((event.offsetY < 7) ? \"Before\" : \"After\");\n        }\n        if (dropTarget) {\n            if (newParent.length === 0) {\n                targetParent = null;\n            }\n            else if (dropTarget.classList.contains(LISTITEM)) {\n                targetParent = newParent[0];\n            }\n            else {\n                targetParent = newParent[1];\n            }\n        }\n        if (dropLi === draggedNode) {\n            targetParent = dropLi;\n        }\n        if (dropTarget && target.offsetHeight <= 33 && event.offsetY < target.offsetHeight - 10 && event.offsetY > 6) {\n            targetParent = dropLi;\n            if (drop !== true) {\n                level = ++level;\n                var parent_2 = targetParent ? select('.e-list-parent', targetParent) : null;\n                indexValue = (parent_2) ? parent_2.children.length : 0;\n                if (!(this.fields.dataSource instanceof DataManager) && parent_2 === null && targetParent) {\n                    var parent_3 = targetParent.hasAttribute('data-uid') ?\n                        this.getChildNodes(this.fields.dataSource, targetParent.getAttribute('data-uid').toString()) : null;\n                    indexValue = (parent_3) ? parent_3.length : 0;\n                }\n            }\n        }\n        return {\n            cancel: false,\n            clonedNode: cloneEle,\n            event: event,\n            draggedNode: draggedNode,\n            draggedNodeData: draggedNodeData,\n            droppedNode: dropLi,\n            droppedNodeData: dropData,\n            dropIndex: indexValue,\n            dropLevel: level,\n            draggedParentNode: dragParent,\n            dropTarget: targetParent,\n            dropIndicator: iconClass,\n            target: target,\n            position: position,\n        };\n    };\n    TreeView.prototype.addFullRow = function (toAdd) {\n        var len = this.liList.length;\n        if (toAdd) {\n            for (var i = 0; i < len; i++) {\n                this.createFullRow(this.liList[i]);\n            }\n        }\n        else {\n            for (var i = 0; i < len; i++) {\n                var rowDiv = select('.' + FULLROW, this.liList[i]);\n                detach(rowDiv);\n            }\n        }\n    };\n    TreeView.prototype.createFullRow = function (item) {\n        var rowDiv = this.createElement('div', { className: FULLROW });\n        item.insertBefore(rowDiv, item.childNodes[0]);\n    };\n    TreeView.prototype.addMultiSelect = function (toAdd) {\n        if (toAdd) {\n            var liEles = selectAll('.' + LISTITEM + ':not([aria-selected=\"true\"])', this.element);\n            for (var _i = 0, liEles_1 = liEles; _i < liEles_1.length; _i++) {\n                var ele = liEles_1[_i];\n                ele.setAttribute('aria-selected', 'false');\n            }\n        }\n        else {\n            var liEles = selectAll('.' + LISTITEM + '[aria-selected=\"false\"]', this.element);\n            for (var _a = 0, liEles_2 = liEles; _a < liEles_2.length; _a++) {\n                var ele = liEles_2[_a];\n                ele.removeAttribute('aria-selected');\n            }\n        }\n    };\n    TreeView.prototype.collapseByLevel = function (element, level, excludeHiddenNodes) {\n        if (level > 0 && !isNOU(element)) {\n            var cNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n            for (var i = 0, len = cNodes.length; i < len; i++) {\n                var liEle = cNodes[i];\n                var icon = select('.' + COLLAPSIBLE, select('.' + TEXTWRAP, liEle));\n                if (!isNOU(icon)) {\n                    this.collapseNode(liEle, icon, null);\n                }\n                this.collapseByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n            }\n        }\n    };\n    TreeView.prototype.collapseAllNodes = function (excludeHiddenNodes) {\n        var cIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + COLLAPSIBLE, this.element));\n        for (var i = 0, len = cIcons.length; i < len; i++) {\n            var icon = cIcons[i];\n            var liEle = closest(icon, '.' + LISTITEM);\n            this.collapseNode(liEle, icon, null);\n        }\n    };\n    TreeView.prototype.expandByLevel = function (element, level, excludeHiddenNodes) {\n        if (level > 0 && !isNOU(element)) {\n            var eNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n            for (var i = 0, len = eNodes.length; i < len; i++) {\n                var liEle = eNodes[i];\n                var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEle));\n                if (!isNOU(icon)) {\n                    this.expandAction(liEle, icon, null);\n                }\n                this.expandByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n            }\n        }\n    };\n    TreeView.prototype.expandAllNodes = function (excludeHiddenNodes) {\n        var eIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + EXPANDABLE, this.element));\n        for (var i = 0, len = eIcons.length; i < len; i++) {\n            var icon = eIcons[i];\n            var liEle = closest(icon, '.' + LISTITEM);\n            this.expandAction(liEle, icon, null, true);\n        }\n    };\n    TreeView.prototype.getVisibleNodes = function (excludeHiddenNodes, nodes) {\n        var vNodes = Array.prototype.slice.call(nodes);\n        if (excludeHiddenNodes) {\n            for (var i = 0; i < vNodes.length; i++) {\n                if (!isVisible(vNodes[i])) {\n                    vNodes.splice(i, 1);\n                    i--;\n                }\n            }\n        }\n        return vNodes;\n    };\n    TreeView.prototype.removeNode = function (node) {\n        var dragParentUl = closest(node, '.' + PARENTITEM);\n        var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n        if (!isNOU(this.nodeTemplateFn)) {\n            this.destroyTemplate(node);\n        }\n        detach(node);\n        this.updateElement(dragParentUl, dragParentLi);\n        this.updateInstance();\n        this.removeData(node);\n    };\n    TreeView.prototype.updateInstance = function () {\n        this.updateList();\n        this.updateSelectedNodes();\n        this.updateExpandedNodes();\n        this.allowServerDataBinding = false;\n        this.updateServerProperties(\"expand\");\n        this.updateServerProperties(\"check\");\n        this.updateServerProperties(\"select\");\n        this.allowServerDataBinding = true;\n    };\n    TreeView.prototype.updateServerProperties = function (action) {\n        if (this.isBlazorPlatform) {\n            if (action == \"expand\") {\n                this.isBlazorExpandedNodes = this.expandedNodes;\n                this.setProperties({ expandedNodes: [] }, true);\n            }\n            else if (action == \"check\") {\n                this.setProperties({ checkedNodes: this.checkedNodes }, true);\n            }\n            else {\n                this.setProperties({ selectedNodes: this.selectedNodes }, true);\n            }\n        }\n    };\n    TreeView.prototype.updateList = function () {\n        this.liList = Array.prototype.slice.call(selectAll('.' + LISTITEM, this.element));\n    };\n    TreeView.prototype.updateSelectedNodes = function () {\n        if (!this.isBlazorPlatform || (this.isBlazorPlatform && !this.initialRender)) {\n            this.setProperties({ selectedNodes: [] }, true);\n            var sNodes = selectAll('.' + ACTIVE, this.element);\n            this.selectGivenNodes(sNodes);\n        }\n        else if (this.isBlazorPlatform && this.initialRender) {\n            var sNodes = selectAll('.' + ACTIVE, this.element);\n            for (var a = 0; a < sNodes.length; a++) {\n                var id = sNodes[a].getAttribute(\"data-uid\").toString();\n                if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n                    this.selectedNodes.push(id);\n                }\n            }\n        }\n    };\n    TreeView.prototype.updateExpandedNodes = function () {\n        if (!this.isBlazorPlatform || (this.isBlazorPlatform && !this.initialRender)) {\n            this.setProperties({ expandedNodes: [] }, true);\n            var eNodes = selectAll('[aria-expanded=\"true\"]', this.element);\n            for (var i = 0, len = eNodes.length; i < len; i++) {\n                this.addExpand(eNodes[i]);\n            }\n        }\n        else if (this.isBlazorPlatform && this.initialRender) {\n            var eNodes = selectAll('[aria-expanded=\"true\"]', this.element);\n            for (var a = 0; a < eNodes.length; a++) {\n                var id = eNodes[a].getAttribute(\"data-uid\").toString();\n                if (!isNOU(id) && this.expandedNodes.indexOf(id) === -1) {\n                    this.expandedNodes.push(id);\n                }\n            }\n        }\n    };\n    TreeView.prototype.removeData = function (node) {\n        if (this.dataType === 1) {\n            var dm = new DataManager(this.treeData);\n            var id = this.getId(node);\n            var data = {};\n            var newId = this.isNumberTypeId ? parseFloat(id) : id;\n            data[this.fields.id] = newId;\n            dm.remove(this.fields.id, data);\n            this.removeChildNodes(id);\n        }\n        else {\n            var id = this.getId(node);\n            this.updateChildField(this.treeData, this.fields, id, null, null, true);\n        }\n    };\n    TreeView.prototype.removeChildNodes = function (parentId) {\n        var cNodes = this.getChildGroup(this.groupedData, parentId, false);\n        var childData = [];\n        if (cNodes) {\n            for (var i = 0, len = cNodes.length; i < len; i++) {\n                var dm = new DataManager(this.treeData);\n                var id = getValue(this.fields.id, cNodes[i]).toString();\n                var data = {};\n                var currId = this.isNumberTypeId ? parseFloat(id) : id;\n                data[this.fields.id] = currId;\n                var nodeData = dm.remove(this.fields.id, data);\n                childData.push(nodeData[0]);\n                this.removeChildNodes(id);\n            }\n        }\n        return childData;\n    };\n    TreeView.prototype.doGivenAction = function (nodes, selector, toExpand) {\n        for (var i = 0, len = nodes.length; i < len; i++) {\n            var liEle = this.getElement(nodes[i]);\n            if (isNOU(liEle)) {\n                continue;\n            }\n            var icon = select('.' + selector, select('.' + TEXTWRAP, liEle));\n            if (!isNOU(icon)) {\n                toExpand ? this.expandAction(liEle, icon, null) : this.collapseNode(liEle, icon, null);\n            }\n        }\n    };\n    TreeView.prototype.addGivenNodes = function (nodes, dropLi, index, isRemote, dropEle) {\n        if (nodes.length === 0) {\n            return;\n        }\n        var sNodes = this.getSortedData(nodes);\n        var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n        if (isRemote) {\n            this.updateMapper(level);\n        }\n        var li = ListBase.createListItemFromJson(this.createElement, sNodes, this.listBaseOption, level);\n        var dropUl;\n        if (!dropEle) {\n            dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n        }\n        else {\n            dropUl = dropEle;\n        }\n        var refNode = dropUl.childNodes[index];\n        for (var i = 0; i < li.length; i++) {\n            dropUl.insertBefore(li[i], refNode);\n        }\n        if (this.nodeTemplate && this.isBlazorPlatform && !this.isStringTemplate) {\n            this.updateBlazorTemplate();\n        }\n        var id = this.getId(dropLi);\n        if (this.dataType === 1) {\n            this.updateField(this.treeData, this.fields, id, 'hasChildren', true);\n            var refId = this.getId(refNode);\n            var pos = isNOU(refId) ? this.treeData.length : this.getDataPos(this.treeData, this.fields, refId);\n            for (var j = 0; j < nodes.length; j++) {\n                if (!isNOU(id)) {\n                    var currId = this.isNumberTypeId ? parseFloat(id) : id;\n                    setValue(this.fields.parentID, currId, nodes[j]);\n                }\n                this.treeData.splice(pos, 0, nodes[j]);\n                pos++;\n            }\n        }\n        else {\n            this.addChildData(this.treeData, this.fields, id, nodes, index);\n        }\n        this.finalizeNode(dropUl);\n    };\n    TreeView.prototype.updateMapper = function (level) {\n        var mapper = (level === 1) ? this.fields : this.getChildFields(this.fields, level - 1, 1);\n        this.updateListProp(mapper);\n    };\n    TreeView.prototype.updateListProp = function (mapper) {\n        var prop = this.getActualProperties(mapper);\n        this.listBaseOption.fields = prop;\n        this.listBaseOption.fields.url = prop.hasOwnProperty('navigateUrl') ? prop.navigateUrl : 'navigateUrl';\n    };\n    TreeView.prototype.getDataPos = function (obj, mapper, id) {\n        var pos = null;\n        for (var i = 0, objlen = obj.length; i < objlen; i++) {\n            var nodeId = getValue(mapper.id, obj[i]);\n            if (obj[i] && nodeId && nodeId.toString() === id) {\n                return i;\n            }\n            else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n                var data = getValue(mapper.child, obj[i]);\n                pos = this.getDataPos(data, this.getChildMapper(mapper), id);\n                if (pos !== null) {\n                    break;\n                }\n            }\n            else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n                var items = getValue('child', obj[i]);\n                pos = this.getDataPos(items, this.getChildMapper(mapper), id);\n                if (pos !== null) {\n                    break;\n                }\n            }\n        }\n        return pos;\n    };\n    TreeView.prototype.addChildData = function (obj, mapper, id, data, index) {\n        var updated;\n        if (isNOU(id)) {\n            index = isNOU(index) ? obj.length : index;\n            for (var k = 0, len = data.length; k < len; k++) {\n                obj.splice(index, 0, data[k]);\n                index++;\n            }\n            return updated;\n        }\n        for (var i = 0, objlen = obj.length; i < objlen; i++) {\n            var nodeId = getValue(mapper.id, obj[i]);\n            if (obj[i] && nodeId && nodeId.toString() === id) {\n                if ((typeof mapper.child === 'string' && (obj[i].hasOwnProperty(mapper.child) && obj[i][mapper.child] !== null)) ||\n                    ((this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) && obj[i].hasOwnProperty('child'))) {\n                    var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n                    var childData = getValue(key, obj[i]);\n                    if (isNOU(childData)) {\n                        childData = [];\n                    }\n                    index = isNOU(index) ? childData.length : index;\n                    for (var k = 0, len = data.length; k < len; k++) {\n                        childData.splice(index, 0, data[k]);\n                        index++;\n                    }\n                }\n                else {\n                    var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n                    obj[i][key] = data;\n                }\n                return true;\n            }\n            else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n                var childObj = getValue(mapper.child, obj[i]);\n                updated = this.addChildData(childObj, this.getChildMapper(mapper), id, data, index);\n                if (updated !== undefined) {\n                    break;\n                }\n            }\n            else if ((this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) && !isNOU(getValue('child', obj[i]))) {\n                var childData = getValue('child', obj[i]);\n                updated = this.addChildData(childData, this.getChildMapper(mapper), id, data, index);\n                if (updated !== undefined) {\n                    break;\n                }\n            }\n        }\n        return updated;\n    };\n    TreeView.prototype.doDisableAction = function (nodes) {\n        var validNodes = this.nodeType(nodes);\n        var validID = this.checkValidId(validNodes);\n        this.validArr = [];\n        for (var i = 0, len = validID.length; i < len; i++) {\n            var id = validID[i][this.fields.id].toString();\n            if (id && this.disableNode.indexOf(id) === -1) {\n                this.disableNode.push(id);\n            }\n            var liEle = this.getElement(id);\n            if (liEle) {\n                liEle.setAttribute('aria-disabled', 'true');\n                addClass([liEle], DISABLE);\n            }\n        }\n    };\n    TreeView.prototype.doEnableAction = function (nodes) {\n        var strNodes = this.nodeType(nodes);\n        for (var i = 0, len = strNodes.length; i < len; i++) {\n            var liEle = this.getElement(strNodes[i]);\n            var id = strNodes[i];\n            if (id && this.disableNode.indexOf(id) !== -1) {\n                this.disableNode.splice(this.disableNode.indexOf(id), 1);\n            }\n            if (liEle) {\n                liEle.removeAttribute('aria-disabled');\n                removeClass([liEle], DISABLE);\n            }\n        }\n    };\n    TreeView.prototype.nodeType = function (nodes) {\n        var validID = [];\n        for (var i = 0, len = nodes.length; i < len; i++) {\n            var id = void 0;\n            if (typeof nodes[i] == \"string\") {\n                id = (nodes[i]) ? nodes[i].toString() : null;\n            }\n            else if (typeof nodes[i] === \"object\") {\n                id = nodes[i] ? nodes[i].getAttribute(\"data-uid\").toString() : null;\n            }\n            if (validID.indexOf(id) == -1) {\n                validID.push(id);\n            }\n        }\n        return validID;\n    };\n    TreeView.prototype.checkValidId = function (node) {\n        var _this = this;\n        if (this.dataType === 1) {\n            this.validArr = this.treeData.filter(function (data) {\n                return node.indexOf(data[_this.fields.id] ? data[_this.fields.id].toString() : null) !== -1;\n            });\n        }\n        else if (this.dataType === 2) {\n            for (var k = 0; k < this.treeData.length; k++) {\n                var id = this.treeData[k][this.fields.id] ? this.treeData[k][this.fields.id].toString() : null;\n                if (node.indexOf(id) !== -1) {\n                    this.validArr.push(this.treeData[k]);\n                }\n                var childItems = getValue(this.fields.child.toString(), this.treeData[k]);\n                if (childItems) {\n                    this.filterNestedChild(childItems, node);\n                }\n            }\n        }\n        return this.validArr;\n    };\n    TreeView.prototype.filterNestedChild = function (treeData, nodes) {\n        for (var k = 0; k < treeData.length; k++) {\n            var id = treeData[k][this.fields.id] ? treeData[k][this.fields.id].toString() : null;\n            if (nodes.indexOf(id) !== -1) {\n                this.validArr.push(treeData[k]);\n            }\n            var childItems = getValue(this.fields.child.toString(), treeData[k]);\n            if (childItems) {\n                this.filterNestedChild(childItems, nodes);\n            }\n        }\n    };\n    TreeView.prototype.setTouchClass = function () {\n        var ele = closest(this.element, '.' + BIGGER);\n        this.touchClass = isNOU(ele) ? '' : SMALL;\n    };\n    TreeView.prototype.updatePersistProp = function () {\n        this.removeField(this.treeData, this.fields, ['selected', 'expanded']);\n        var sleNodes = this.selectedNodes;\n        for (var l = 0, slelen = sleNodes.length; l < slelen; l++) {\n            this.updateField(this.treeData, this.fields, sleNodes[l], 'selected', true);\n        }\n        var enodes = this.expandedNodes;\n        if (this.isBlazorPlatform) {\n            enodes = this.isBlazorExpandedNodes;\n        }\n        for (var k = 0, nodelen = enodes.length; k < nodelen; k++) {\n            this.updateField(this.treeData, this.fields, enodes[k], 'expanded', true);\n        }\n        if (this.showCheckBox) {\n            this.removeField(this.treeData, this.fields, ['isChecked']);\n            var cnodes = this.checkedNodes;\n            for (var m = 0, nodelen = cnodes.length; m < nodelen; m++) {\n                this.updateField(this.treeData, this.fields, cnodes[m], 'isChecked', true);\n            }\n        }\n    };\n    TreeView.prototype.removeField = function (obj, mapper, names) {\n        if (isNOU(obj) || isNOU(mapper)) {\n            return;\n        }\n        for (var i = 0, objlen = obj.length; i < objlen; i++) {\n            for (var j = 0; j < names.length; j++) {\n                var field = this.getMapperProp(mapper, names[j]);\n                if (!isNOU(obj[i][field])) {\n                    delete obj[i][field];\n                }\n            }\n            if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n                this.removeField(getValue(mapper.child, obj[i]), this.getChildMapper(mapper), names);\n            }\n            else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n                this.removeField(getValue('child', obj[i]), this.getChildMapper(mapper), names);\n            }\n        }\n    };\n    TreeView.prototype.getMapperProp = function (mapper, fieldName) {\n        switch (fieldName) {\n            case 'selected':\n                return !isNOU(mapper.selected) ? mapper.selected : 'selected';\n            case 'expanded':\n                return !isNOU(mapper.expanded) ? mapper.expanded : 'expanded';\n            case 'isChecked':\n                return !isNOU(mapper.isChecked) ? mapper.isChecked : 'isChecked';\n            case 'hasChildren':\n                return !isNOU(mapper.hasChildren) ? mapper.hasChildren : 'hasChildren';\n            default:\n                return fieldName;\n        }\n    };\n    TreeView.prototype.updateField = function (obj, mapper, id, key, value) {\n        var childNodes;\n        if (isNOU(id)) {\n            return;\n        }\n        else if (this.dataType === 1) {\n            var newId = this.isNumberTypeId ? parseFloat(id) : id;\n            var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', newId, false));\n            setValue(this.getMapperProp(mapper, key), value, resultData[0]);\n        }\n        else {\n            this.updateChildField(obj, mapper, id, key, value);\n        }\n    };\n    TreeView.prototype.updateChildField = function (obj, mapper, id, key, value, remove) {\n        var removedData;\n        if (isNOU(obj)) {\n            return removedData;\n        }\n        for (var i = 0, objlen = obj.length; i < objlen; i++) {\n            var nodeId = getValue(mapper.id, obj[i]);\n            if (obj[i] && nodeId && nodeId.toString() === id) {\n                if (remove) {\n                    removedData = obj.splice(i, 1);\n                }\n                else {\n                    setValue(this.getMapperProp(mapper, key), value, obj[i]);\n                    removedData = [];\n                }\n                return removedData;\n            }\n            else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n                var childData = getValue(mapper.child, obj[i]);\n                removedData = this.updateChildField(childData, this.getChildMapper(mapper), id, key, value, remove);\n                if (removedData !== undefined) {\n                    break;\n                }\n            }\n            else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n                var childItems = getValue('child', obj[i]);\n                removedData = this.updateChildField(childItems, this.getChildMapper(mapper), id, key, value, remove);\n                if (removedData !== undefined) {\n                    break;\n                }\n            }\n        }\n        return removedData;\n    };\n    TreeView.prototype.triggerEvent = function () {\n        this.updateTemplateForBlazor();\n        this.renderReactTemplates();\n        var eventArgs = { data: this.treeData };\n        this.trigger('dataSourceChanged', eventArgs);\n    };\n    TreeView.prototype.updateBlazorTemplate = function () {\n        updateBlazorTemplate(this.element.id + 'nodeTemplate', 'NodeTemplate', this, false);\n    };\n    TreeView.prototype.clientUpdateInitial = function () {\n        this.blazorInitialRender = true;\n    };\n    TreeView.prototype.wireInputEvents = function (inpEle) {\n        EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n    };\n    TreeView.prototype.wireEditingEvents = function (toBind) {\n        var _this = this;\n        if (toBind && !this.disabled) {\n            var proxy_2 = this;\n            this.touchEditObj = new Touch(this.element, {\n                tap: function (e) {\n                    if (_this.isDoubleTapped(e) && e.tapCount === 2) {\n                        e.originalEvent.preventDefault();\n                        proxy_2.editingHandler(e.originalEvent);\n                    }\n                }\n            });\n        }\n        else {\n            if (this.touchEditObj) {\n                this.touchEditObj.destroy();\n            }\n        }\n    };\n    TreeView.prototype.wireClickEvent = function (toBind) {\n        if (toBind) {\n            var proxy_3 = this;\n            this.touchClickObj = new Touch(this.element, {\n                tap: function (e) {\n                    proxy_3.clickHandler(e);\n                }\n            });\n        }\n        else {\n            if (this.touchClickObj) {\n                this.touchClickObj.destroy();\n            }\n        }\n    };\n    TreeView.prototype.wireExpandOnEvent = function (toBind) {\n        var _this = this;\n        if (toBind) {\n            var proxy_4 = this;\n            this.touchExpandObj = new Touch(this.element, {\n                tap: function (e) {\n                    if ((_this.expandOnType === 'Click' || (_this.expandOnType === 'DblClick' && _this.isDoubleTapped(e) && e.tapCount === 2))\n                        && e.originalEvent.which !== 3) {\n                        proxy_4.expandHandler(e);\n                    }\n                }\n            });\n        }\n        else {\n            if (this.touchExpandObj) {\n                this.touchExpandObj.destroy();\n            }\n        }\n    };\n    TreeView.prototype.mouseDownHandler = function (e) {\n        this.mouseDownStatus = true;\n        if (e.shiftKey || e.ctrlKey) {\n            e.preventDefault();\n        }\n        if (e.ctrlKey && this.allowMultiSelection) {\n            EventHandler.add(this.element, 'contextmenu', this.preventContextMenu, this);\n        }\n    };\n    ;\n    TreeView.prototype.preventContextMenu = function (e) {\n        e.preventDefault();\n    };\n    TreeView.prototype.wireEvents = function () {\n        EventHandler.add(this.element, 'mousedown', this.mouseDownHandler, this);\n        this.wireClickEvent(true);\n        if (this.expandOnType !== 'None') {\n            this.wireExpandOnEvent(true);\n        }\n        EventHandler.add(this.element, 'focus', this.focusIn, this);\n        EventHandler.add(this.element, 'blur', this.focusOut, this);\n        EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n        EventHandler.add(this.element, 'mouseout', this.onMouseLeave, this);\n        this.keyboardModule = new KeyboardEvents(this.element, {\n            keyAction: this.keyActionHandler.bind(this),\n            keyConfigs: this.keyConfigs,\n            eventName: 'keydown',\n        });\n    };\n    TreeView.prototype.unWireEvents = function () {\n        EventHandler.remove(this.element, 'mousedown', this.mouseDownHandler);\n        this.wireClickEvent(false);\n        this.wireExpandOnEvent(false);\n        EventHandler.remove(this.element, 'focus', this.focusIn);\n        EventHandler.remove(this.element, 'blur', this.focusOut);\n        EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n        EventHandler.remove(this.element, 'mouseout', this.onMouseLeave);\n        if (!this.disabled) {\n            this.keyboardModule.destroy();\n        }\n    };\n    TreeView.prototype.parents = function (element, selector) {\n        var matched = [];\n        var el = element.parentNode;\n        while (!isNOU(el)) {\n            if (matches(el, selector)) {\n                matched.push(el);\n            }\n            el = el.parentNode;\n        }\n        return matched;\n    };\n    TreeView.prototype.isDoubleTapped = function (e) {\n        var target = e.originalEvent.target;\n        var secondTap;\n        if (target && e.tapCount) {\n            if (e.tapCount === 1) {\n                this.firstTap = closest(target, '.' + LISTITEM);\n            }\n            else if (e.tapCount === 2) {\n                secondTap = closest(target, '.' + LISTITEM);\n            }\n        }\n        return (this.firstTap === secondTap);\n    };\n    TreeView.prototype.isDescendant = function (parent, child) {\n        var node = child.parentNode;\n        while (!isNOU(node)) {\n            if (node === parent) {\n                return true;\n            }\n            node = node.parentNode;\n        }\n        return false;\n    };\n    TreeView.prototype.showSpinner = function (element) {\n        addClass([element], LOAD);\n        createSpinner({\n            target: element,\n            width: Browser.isDevice ? 16 : 14\n        }, this.createElement);\n        showSpinner(element);\n    };\n    TreeView.prototype.hideSpinner = function (element) {\n        hideSpinner(element);\n        element.innerHTML = '';\n        removeClass([element], LOAD);\n    };\n    TreeView.prototype.setCheckedNodes = function (nodes) {\n        nodes = JSON.parse(JSON.stringify(nodes));\n        this.uncheckAll(this.checkedNodes);\n        this.setIndeterminate(nodes);\n        if (nodes.length > 0) {\n            this.checkAll(nodes);\n        }\n    };\n    /**\n     * Checks whether the checkedNodes entered are valid and sets the valid checkedNodes while changing via setmodel\n     */\n    TreeView.prototype.setValidCheckedNode = function (node) {\n        if (this.dataType === 1) {\n            var mapper = this.fields;\n            var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', node, true));\n            if (resultData[0]) {\n                this.setChildCheckState(resultData, node, resultData[0]);\n                if (this.autoCheck) {\n                    var parent_4 = resultData[0][this.fields.parentID] ? resultData[0][this.fields.parentID].toString() : null;\n                    var childNodes = this.getChildNodes(this.treeData, parent_4);\n                    var count = 0;\n                    for (var len = 0; len < childNodes.length; len++) {\n                        var childId = childNodes[len][this.fields.id].toString();\n                        if (this.checkedNodes.indexOf(childId) !== -1) {\n                            count++;\n                        }\n                    }\n                    if (count === childNodes.length && this.checkedNodes.indexOf(parent_4) === -1 && parent_4) {\n                        this.checkedNodes.push(parent_4);\n                    }\n                }\n            }\n        }\n        else if (this.dataType === 2) {\n            for (var a = 0; a < this.treeData.length; a++) {\n                var index = this.treeData[a][this.fields.id] ? this.treeData[a][this.fields.id].toString() : '';\n                if (index === node && this.checkedNodes.indexOf(node) === -1) {\n                    this.checkedNodes.push(node);\n                    break;\n                }\n                var childItems = getValue(this.fields.child.toString(), this.treeData[a]);\n                if (childItems) {\n                    this.setChildCheckState(childItems, node, this.treeData[a]);\n                }\n            }\n        }\n    };\n    /**\n     * Checks whether the checkedNodes entered are valid and sets the valid checkedNodes while changing via setmodel(for hierarchical DS)\n     */\n    TreeView.prototype.setChildCheckState = function (childItems, node, treeData) {\n        var checkedParent;\n        var count = 0;\n        if (this.dataType === 1) {\n            if (treeData) {\n                checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : null;\n            }\n            for (var index = 0; index < childItems.length; index++) {\n                var checkNode = childItems[index][this.fields.id] ? childItems[index][this.fields.id].toString() : null;\n                if (treeData && checkedParent && this.autoCheck) {\n                    if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkNode) === -1) {\n                        this.checkedNodes.push(checkNode);\n                    }\n                }\n                if (checkNode === node && this.checkedNodes.indexOf(node) === -1) {\n                    this.checkedNodes.push(node);\n                }\n                var subChildItems = this.getChildNodes(this.treeData, checkNode);\n                if (subChildItems) {\n                    this.setChildCheckState(subChildItems, node, treeData);\n                }\n            }\n        }\n        else {\n            if (treeData) {\n                checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : '';\n            }\n            for (var index = 0; index < childItems.length; index++) {\n                var checkedChild = childItems[index][this.fields.id] ? childItems[index][this.fields.id].toString() : '';\n                if (treeData && checkedParent && this.autoCheck) {\n                    if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1) {\n                        this.checkedNodes.push(checkedChild);\n                    }\n                }\n                if (checkedChild === node && this.checkedNodes.indexOf(node) === -1) {\n                    this.checkedNodes.push(node);\n                }\n                var subChildItems = getValue(this.fields.child.toString(), childItems[index]);\n                if (subChildItems) {\n                    this.setChildCheckState(subChildItems, node, childItems[index]);\n                }\n                if (this.checkedNodes.indexOf(checkedChild) !== -1 && this.autoCheck) {\n                    count++;\n                }\n                if (count === childItems.length && this.checkedNodes.indexOf(checkedParent) === -1 && this.autoCheck) {\n                    this.checkedNodes.push(checkedParent);\n                }\n            }\n        }\n    };\n    TreeView.prototype.setIndeterminate = function (nodes) {\n        for (var i = 0; i < nodes.length; i++) {\n            this.setValidCheckedNode(nodes[i]);\n        }\n    };\n    TreeView.prototype.updatePosition = function (id, newData, isRefreshChild, childValue) {\n        if (this.dataType === 1) {\n            var pos = this.getDataPos(this.treeData, this.fields, id);\n            this.treeData.splice(pos, 1, newData);\n            if (isRefreshChild) {\n                this.removeChildNodes(id);\n                for (var j = 0; j < childValue.length; j++) {\n                    this.treeData.splice(pos, 0, childValue[j]);\n                    pos++;\n                }\n            }\n            this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n        }\n        else {\n            this.updateChildPosition(this.treeData, this.fields, id, [newData], undefined);\n        }\n    };\n    TreeView.prototype.updateChildPosition = function (treeData, mapper, currID, newData, index) {\n        var found;\n        for (var i = 0, objlen = treeData.length; i < objlen; i++) {\n            var nodeId = getValue(mapper.id, treeData[i]);\n            if (treeData[i] && nodeId && nodeId.toString() === currID) {\n                treeData[i] = newData[0];\n                return true;\n            }\n            else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, treeData[i]))) {\n                var childObj = getValue(mapper.child, treeData[i]);\n                found = this.updateChildPosition(childObj, this.getChildMapper(mapper), currID, newData, index);\n                if (found !== undefined) {\n                    break;\n                }\n            }\n            else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', treeData[i]))) {\n                var childData = getValue('child', treeData[i]);\n                found = this.updateChildPosition(childData, this.getChildMapper(mapper), currID, newData, index);\n                if (found !== undefined) {\n                    break;\n                }\n            }\n        }\n        return found;\n    };\n    TreeView.prototype.dynamicState = function () {\n        this.setDragAndDrop(this.allowDragAndDrop);\n        this.wireEditingEvents(this.allowEditing);\n        if (!this.disabled) {\n            this.wireEvents();\n            this.setRipple();\n        }\n        else {\n            this.unWireEvents();\n            this.rippleFn();\n            this.rippleIconFn();\n        }\n    };\n    TreeView.prototype.crudOperation = function (operation, nodes, target, newText, newNode, index, prevent) {\n        var _this = this;\n        var data = this.fields.dataSource;\n        var matchedArr = [];\n        var query = this.getQuery(this.fields);\n        var key = this.fields.id;\n        var crud;\n        var changes = {\n            addedRecords: [],\n            deletedRecords: [],\n            changedRecords: []\n        };\n        var nodesID = [];\n        if (nodes) {\n            nodesID = this.nodeType(nodes);\n        }\n        else if (target) {\n            if (typeof target == \"string\") {\n                nodesID[0] = target.toString();\n            }\n            else if (typeof target === \"object\") {\n                nodesID[0] = target.getAttribute(\"data-uid\").toString();\n            }\n        }\n        for (var i = 0, len = nodesID.length; i < len; i++) {\n            var liEle = this.getElement(nodesID[i]);\n            if (isNullOrUndefined(liEle)) {\n                continue;\n            }\n            var removedData = this.getNodeObject(nodesID[i]);\n            matchedArr.push(removedData);\n        }\n        switch (operation) {\n            case 'delete':\n                if (nodes.length == 1) {\n                    crud = data.remove(key, matchedArr[0], query.fromTable, query);\n                }\n                else {\n                    changes.deletedRecords = matchedArr;\n                    crud = data.saveChanges(changes, key, query.fromTable, query);\n                }\n                crud.then(function (e) { return _this.deleteSuccess(nodesID); })\n                    .catch(function (e) { return _this.dmFailure(e); });\n                break;\n            case 'update':\n                matchedArr[0][this.fields.text] = newText;\n                crud = data.update(key, matchedArr[0], query.fromTable, query);\n                crud.then(function (e) { return _this.editSucess(target, newText, prevent); })\n                    .catch(function (e) { return _this.dmFailure(e, target, prevent); });\n                break;\n            case 'insert':\n                if (newNode.length == 1) {\n                    crud = data.insert(newNode[0], query.fromTable, query);\n                }\n                else {\n                    var arr = [];\n                    for (var i = 0, len = newNode.length; i < len; i++) {\n                        arr.push(newNode[i]);\n                    }\n                    changes.addedRecords = arr;\n                    crud = data.saveChanges(changes, key, query.fromTable, query);\n                }\n                crud.then(function (e) {\n                    var dropLi = _this.getElement(target);\n                    _this.addSuccess(newNode, dropLi, index);\n                    _this.preventExpand = false;\n                }).catch(function (e) { return _this.dmFailure(e); });\n                break;\n        }\n    };\n    TreeView.prototype.deleteSuccess = function (nodes) {\n        for (var i = 0, len = nodes.length; i < len; i++) {\n            var liEle = this.getElement(nodes[i]);\n            if (isNOU(liEle)) {\n                continue;\n            }\n            this.removeNode(liEle);\n        }\n        if (this.dataType === 1) {\n            this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n        }\n        this.triggerEvent();\n    };\n    TreeView.prototype.editSucess = function (target, newText, prevent) {\n        var liEle = this.getElement(target);\n        var txtEle = select('.' + LISTTEXT, liEle);\n        this.appendNewText(liEle, txtEle, newText, prevent);\n    };\n    TreeView.prototype.addSuccess = function (nodes, dropLi, index) {\n        var dropUl;\n        var icon = dropLi ? dropLi.querySelector('.' + ICON) : null;\n        var proxy = this;\n        if (dropLi && icon && icon.classList.contains(EXPANDABLE) &&\n            dropLi.querySelector('.' + PARENTITEM) === null) {\n            proxy.renderChildNodes(dropLi, null, function () {\n                dropUl = dropLi.querySelector('.' + PARENTITEM);\n                proxy.addGivenNodes(nodes, dropLi, index, true, dropUl);\n                proxy.triggerEvent();\n            });\n        }\n        else {\n            this.addGivenNodes(nodes, dropLi, index, true);\n            this.triggerEvent();\n        }\n    };\n    TreeView.prototype.dmFailure = function (e, target, prevent) {\n        if (target) {\n            this.updatePreviousText(target, prevent);\n        }\n        this.trigger('actionFailure', { error: e });\n    };\n    TreeView.prototype.updatePreviousText = function (target, prevent) {\n        var liEle = this.getElement(target);\n        var txtEle = select('.' + LISTTEXT, liEle);\n        this.updateText(liEle, txtEle, this.oldText, prevent);\n    };\n    /**\n     * Called internally if any of the property value changed.\n     * @param  {TreeView} newProp\n     * @param  {TreeView} oldProp\n     * @returns void\n     * @private\n     */\n    // tslint:disable-next-line:max-func-body-length\n    TreeView.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'allowDragAndDrop':\n                    this.setDragAndDrop(this.allowDragAndDrop);\n                    break;\n                case 'dragArea':\n                    if (this.allowDragAndDrop) {\n                        this.dragObj.dragArea = this.dragArea;\n                    }\n                    break;\n                case 'allowEditing':\n                    this.wireEditingEvents(this.allowEditing);\n                    break;\n                case 'allowMultiSelection':\n                    if (this.selectedNodes.length > 1) {\n                        var sNode = this.getElement(this.selectedNodes[0]);\n                        this.isLoaded = false;\n                        this.removeSelectAll();\n                        this.selectNode(sNode, null);\n                        this.isLoaded = true;\n                    }\n                    this.setMultiSelect(this.allowMultiSelection);\n                    this.addMultiSelect(this.allowMultiSelection);\n                    break;\n                case 'checkedNodes':\n                    if (this.showCheckBox) {\n                        this.checkedNodes = oldProp.checkedNodes;\n                        this.setCheckedNodes(newProp.checkedNodes);\n                    }\n                    break;\n                case 'autoCheck':\n                    if (this.showCheckBox) {\n                        this.autoCheck = newProp.autoCheck;\n                        this.ensureIndeterminate();\n                    }\n                    break;\n                case 'cssClass':\n                    this.setCssClass(oldProp.cssClass, newProp.cssClass);\n                    break;\n                case 'enableRtl':\n                    this.setEnableRtl();\n                    break;\n                case 'expandedNodes':\n                    this.isAnimate = false;\n                    if (!this.isBlazorPlatform) {\n                        this.setProperties({ expandedNodes: [] }, true);\n                    }\n                    this.collapseAll();\n                    this.isInitalExpand = true;\n                    if (!this.isBlazorPlatform) {\n                        this.setProperties({ expandedNodes: isNOU(newProp.expandedNodes) ? [] : newProp.expandedNodes }, true);\n                    }\n                    this.doExpandAction();\n                    this.isInitalExpand = false;\n                    this.isAnimate = true;\n                    break;\n                case 'expandOn':\n                    this.wireExpandOnEvent(false);\n                    this.setExpandOnType();\n                    if (this.expandOnType !== 'None' && !this.disabled) {\n                        this.wireExpandOnEvent(true);\n                    }\n                    break;\n                case 'disabled':\n                    this.setDisabledMode();\n                    this.dynamicState();\n                    break;\n                case 'fields':\n                    this.isAnimate = false;\n                    this.isFieldChange = true;\n                    this.initialRender = true;\n                    if (!this.blazorInitialRender) {\n                        this.reRenderNodes();\n                    }\n                    this.blazorInitialRender = false;\n                    this.initialRender = false;\n                    this.isAnimate = true;\n                    this.isFieldChange = false;\n                    break;\n                case 'fullRowSelect':\n                    this.setFullRow(this.fullRowSelect);\n                    this.addFullRow(this.fullRowSelect);\n                    break;\n                case 'loadOnDemand':\n                    if (this.loadOnDemand === false && !this.onLoaded) {\n                        var nodes = this.element.querySelectorAll('li');\n                        var i = 0;\n                        while (i < nodes.length) {\n                            if (nodes[i].getAttribute('aria-expanded') !== 'true') {\n                                this.renderChildNodes(nodes[i], true, null, true);\n                            }\n                            i++;\n                        }\n                        this.onLoaded = true;\n                    }\n                    break;\n                case 'nodeTemplate':\n                    this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n                    this.reRenderNodes();\n                    break;\n                case 'selectedNodes':\n                    this.removeSelectAll();\n                    this.setProperties({ selectedNodes: newProp.selectedNodes }, true);\n                    this.doSelectionAction();\n                    break;\n                case 'showCheckBox':\n                    this.reRenderNodes();\n                    break;\n                case 'sortOrder':\n                    this.reRenderNodes();\n                    break;\n                case 'fullRowNavigable':\n                    this.setProperties({ fullRowNavigable: newProp.fullRowNavigable }, true);\n                    this.listBaseOption.itemNavigable = newProp.fullRowNavigable;\n                    this.reRenderNodes();\n                    break;\n            }\n        }\n    };\n    /**\n     * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n     */\n    TreeView.prototype.destroy = function () {\n        resetBlazorTemplate(this.element.id + 'nodeTemplate', 'NodeTemplate');\n        this.clearTemplate();\n        this.element.removeAttribute('aria-activedescendant');\n        this.element.removeAttribute('tabindex');\n        this.unWireEvents();\n        this.wireEditingEvents(false);\n        if (!this.disabled) {\n            this.rippleFn();\n            this.rippleIconFn();\n        }\n        this.setCssClass(this.cssClass, null);\n        this.setDragAndDrop(false);\n        this.setFullRow(false);\n        if (this.isBlazorPlatform) {\n            this.ulElement = this.element.querySelector('.e-list-parent.e-ul');\n        }\n        if (this.ulElement && this.ulElement.parentElement) {\n            this.ulElement.parentElement.removeChild(this.ulElement);\n        }\n        if (!this.isBlazorPlatform) {\n            _super.prototype.destroy.call(this);\n        }\n    };\n    /**\n     * Adds the collection of TreeView nodes based on target and index position. If target node is not specified,\n     * then the nodes are added as children of the given parentID or in the root level of TreeView.\n     * @param  { { [key: string]: Object }[] } nodes - Specifies the array of JSON data that has to be added.\n     * @param  { string | Element } target - Specifies ID of TreeView node/TreeView node as target element.\n     * @param  { number } index - Specifies the index to place the newly added nodes in the target element.\n     * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n     */\n    TreeView.prototype.addNodes = function (nodes, target, index, preventTargetExpand) {\n        if (isNOU(nodes)) {\n            return;\n        }\n        nodes = JSON.parse(JSON.stringify(nodes));\n        var dropLi = this.getElement(target);\n        this.preventExpand = preventTargetExpand;\n        if (this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n            if (!this.isOffline) {\n                this.crudOperation('insert', null, target, null, nodes, index, this.preventExpand);\n            }\n            else {\n                this.addSuccess(nodes, dropLi, index);\n            }\n        }\n        else if (this.dataType === 2) {\n            this.addGivenNodes(nodes, dropLi, index);\n        }\n        else {\n            if (dropLi) {\n                this.addGivenNodes(nodes, dropLi, index);\n            }\n            else {\n                nodes = this.getSortedData(nodes);\n                for (var i = 0; i < nodes.length; i++) {\n                    var pid = getValue(this.fields.parentID, nodes[i]);\n                    dropLi = pid ? this.getElement(pid.toString()) : pid;\n                    this.addGivenNodes([nodes[i]], dropLi, index);\n                }\n            }\n            this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n        }\n        this.updateCheckedStateFromDS();\n        if (this.showCheckBox && dropLi) {\n            this.ensureParentCheckState(dropLi);\n        }\n        if ((this.fields.dataSource instanceof DataManager === false) || (this.fields.dataSource instanceof DataManager) && (this.fields.dataSource.adaptorName === 'BlazorAdaptor')) {\n            this.preventExpand = false;\n            this.triggerEvent();\n        }\n    };\n    /**\n     * Instead of clicking on the TreeView node for editing, we can enable it by using\n     * `beginEdit` property. On passing the node ID or element through this property, the edit textBox\n     * will be created for the particular node thus allowing us to edit it.\n     * @param  {string | Element} node - Specifies ID of TreeView node/TreeView node.\n     */\n    TreeView.prototype.beginEdit = function (node) {\n        var ele = this.getElement(node);\n        if (isNOU(ele) || this.disabled) {\n            return;\n        }\n        this.createTextbox(ele, null);\n    };\n    /**\n     * Checks all the unchecked nodes. You can also check specific nodes by passing array of unchecked nodes\n     * as argument to this method.\n     * @param  {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n     */\n    TreeView.prototype.checkAll = function (nodes) {\n        if (this.showCheckBox) {\n            this.doCheckBoxAction(nodes, true);\n        }\n    };\n    /**\n     * Collapses all the expanded TreeView nodes. You can collapse specific nodes by passing array of nodes as argument to this method.\n     * You can also collapse all the nodes excluding the hidden nodes by setting **excludeHiddenNodes** to true. If you want to collapse\n     * a specific level of nodes, set **level** as argument to collapseAll method.\n     * @param  {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/ array of TreeView node.\n     * @param  {number} level - TreeView nodes will collapse up to the given level.\n     * @param  {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes of TreeView when collapsing all nodes.\n     */\n    TreeView.prototype.collapseAll = function (nodes, level, excludeHiddenNodes) {\n        if (!isNOU(nodes)) {\n            this.doGivenAction(nodes, COLLAPSIBLE, false);\n        }\n        else {\n            if (level > 0) {\n                this.collapseByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n            }\n            else {\n                this.collapseAllNodes(excludeHiddenNodes);\n            }\n        }\n    };\n    /**\n     * Disables the collection of nodes by passing the ID of nodes or node elements in the array.\n     * @param  {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n     */\n    TreeView.prototype.disableNodes = function (nodes) {\n        if (!isNOU(nodes)) {\n            this.doDisableAction(nodes);\n        }\n    };\n    /**\n     * Enables the collection of disabled nodes by passing the ID of nodes or node elements in the array.\n     * @param  {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n     */\n    TreeView.prototype.enableNodes = function (nodes) {\n        if (!isNOU(nodes)) {\n            this.doEnableAction(nodes);\n        }\n    };\n    /**\n     * Ensures visibility of the TreeView node by using node ID or node element.\n     * When many TreeView nodes are present and we need to find a particular node, `ensureVisible` property\n     * helps bring the node to visibility by expanding the TreeView and scrolling to the specific node.\n     * @param  {string | Element} node - Specifies ID of TreeView node/TreeView nodes.\n     */\n    TreeView.prototype.ensureVisible = function (node) {\n        var liEle = this.getElement(node);\n        if (isNOU(liEle)) {\n            return;\n        }\n        var parents = this.parents(liEle, '.' + LISTITEM);\n        this.expandAll(parents);\n        setTimeout(function () { liEle.scrollIntoView(true); }, 450);\n    };\n    /**\n     * Expands all the collapsed TreeView nodes. You can expand the specific nodes by passing the array of collapsed nodes\n     * as argument to this method. You can also expand all the collapsed nodes by excluding the hidden nodes by setting\n     * **excludeHiddenNodes** to true to this method. To expand a specific level of nodes, set **level** as argument to expandAll method.\n     * @param  {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n     * @param  {number} level - TreeView nodes will expand up to the given level.\n     * @param  {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes when expanding all nodes.\n     */\n    TreeView.prototype.expandAll = function (nodes, level, excludeHiddenNodes) {\n        if (!isNOU(nodes)) {\n            this.doGivenAction(nodes, EXPANDABLE, true);\n        }\n        else {\n            if (level > 0) {\n                this.expandByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n            }\n            else {\n                this.expandAllNodes(excludeHiddenNodes);\n            }\n        }\n    };\n    /**\n     * Gets all the checked nodes including child, whether it is loaded or not.\n     */\n    TreeView.prototype.getAllCheckedNodes = function () {\n        var checkNodes = this.checkedNodes;\n        return checkNodes;\n    };\n    /**\n    * Gets all the disabled nodes including child, whether it is loaded or not.\n    */\n    TreeView.prototype.getDisabledNodes = function () {\n        var disabledNodes = this.disableNode;\n        return disabledNodes;\n    };\n    /**\n     * Get the node's data such as id, text, parentID, selected, isChecked, and expanded by passing the node element or it's ID.\n     * @param  {string | Element} node - Specifies ID of TreeView node/TreeView node.\n     * @BlazorType NodeData\n     */\n    TreeView.prototype.getNode = function (node) {\n        var ele = this.getElement(node);\n        return this.getNodeData(ele, true);\n    };\n    /**\n     * To get the updated data source of TreeView after performing some operation like drag and drop, node editing,\n     * node selecting/unSelecting, node expanding/collapsing, node checking/unChecking, adding and removing node.\n     * * If you pass the ID of TreeView node as arguments for this method then it will return the updated data source\n     * of the corresponding node otherwise it will return the entire updated data source of TreeView.\n     * * The updated data source also contains custom attributes if you specified in data source.\n     * @param  {string | Element} node - Specifies ID of TreeView node/TreeView node.\n     * @isGenericType true\n     */\n    TreeView.prototype.getTreeData = function (node) {\n        var id = this.getId(node);\n        this.updatePersistProp();\n        if (isNOU(id)) {\n            return this.treeData;\n        }\n        else {\n            var data = this.getNodeObject(id);\n            return isNOU(data) ? [] : [data];\n        }\n    };\n    /**\n     * Moves the collection of nodes within the same TreeView based on target or its index position.\n     * @param  {string[] | Element[]} sourceNodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n     * @param  {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n     * @param  {number} index - Specifies the index to place the moved nodes in the target element.\n     * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n     */\n    TreeView.prototype.moveNodes = function (sourceNodes, target, index, preventTargetExpand) {\n        var dropLi = this.getElement(target);\n        if (isNOU(dropLi)) {\n            return;\n        }\n        for (var i = 0; i < sourceNodes.length; i++) {\n            var dragLi = this.getElement(sourceNodes[i]);\n            if (isNOU(dragLi) || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n                continue;\n            }\n            this.preventExpand = preventTargetExpand;\n            this.dropAsChildNode(dragLi, dropLi, this, index);\n        }\n        if (this.fields.dataSource instanceof DataManager === false) {\n            this.preventExpand = false;\n        }\n        this.triggerEvent();\n    };\n    /**\n     * Refreshes a particular node of the TreeView.\n     * @param  {string | Element} target - Specifies the ID of TreeView node or TreeView node as target element.\n     * @param  {{ [key: string]: Object }[]} newData - Specifies the new data of TreeView node.\n     */\n    TreeView.prototype.refreshNode = function (target, newData) {\n        if (isNOU(target) || isNOU(newData)) {\n            return;\n        }\n        var id;\n        var isRefreshChild = false;\n        if (this.dataType == 1 && newData.length > 1) {\n            isRefreshChild = true;\n        }\n        else if (this.dataType == 2 && newData.length === 1) {\n            var updatedChildValue = getValue(this.fields.child.toString(), newData[0]);\n            if (!isNOU(updatedChildValue)) {\n                isRefreshChild = true;\n            }\n        }\n        var liEle = this.getElement(target);\n        id = liEle ? liEle.getAttribute('data-uid') : ((target) ? target.toString() : null);\n        this.refreshData = this.getNodeObject(id);\n        newData = JSON.parse(JSON.stringify(newData));\n        // tslint:disable\n        var newNodeData;\n        var parentData;\n        if (this.dataType == 1 && isRefreshChild) {\n            for (var k = 0; k < newData.length; k++) {\n                if (isNOU(newData[k][this.fields.parentID])) {\n                    parentData = newData[k];\n                    newData.splice(k, 1);\n                    break;\n                }\n            }\n            newNodeData = extend({}, this.refreshData, parentData);\n        }\n        else {\n            newNodeData = extend({}, this.refreshData, newData[0]);\n        }\n        if (isNOU(liEle)) {\n            this.updatePosition(id, newNodeData, isRefreshChild, newData);\n            return;\n        }\n        this.isRefreshed = true;\n        var level = parseFloat(liEle.getAttribute('aria-level'));\n        var newliEle = ListBase.createListItemFromJson(this.createElement, [newNodeData], this.listBaseOption, level);\n        var ul = select('.' + PARENTITEM, liEle);\n        var childItems = getValue(this.fields.child.toString(), newNodeData);\n        if ((isRefreshChild && ul) || (isRefreshChild && !isNOU(childItems))) {\n            var parentEle = liEle.parentElement;\n            var index = Array.prototype.indexOf.call(parentEle.childNodes, liEle);\n            remove(liEle);\n            parentEle.insertBefore(newliEle[0], parentEle.childNodes[index]);\n            this.updatePosition(id, newNodeData, isRefreshChild, newData);\n            if (isRefreshChild && ul) {\n                this.expandAll([id]);\n            }\n        }\n        else {\n            var txtEle = select('.' + TEXTWRAP, liEle);\n            var newTextEle = select('.' + TEXTWRAP, newliEle[0]);\n            var icon = select('div.' + ICON, txtEle);\n            var newIcon = select('div.' + ICON, newTextEle);\n            if (icon && newIcon) {\n                if (newIcon.classList.contains(EXPANDABLE) && icon.classList.contains(COLLAPSIBLE)) {\n                    removeClass([newIcon], EXPANDABLE);\n                    addClass([newIcon], COLLAPSIBLE);\n                }\n                else if (newIcon.classList.contains(COLLAPSIBLE) && icon.classList.contains(EXPANDABLE)) {\n                    removeClass([newIcon], COLLAPSIBLE);\n                    addClass([newIcon], EXPANDABLE);\n                }\n                else if (icon.classList.contains('interaction')) {\n                    addClass([newIcon], 'interaction');\n                }\n            }\n            remove(txtEle);\n            var fullEle = select('.' + FULLROW, liEle);\n            fullEle.parentNode.insertBefore(newTextEle, fullEle.nextSibling);\n            this.updatePosition(id, newNodeData, isRefreshChild, newData);\n        }\n        liEle = this.getElement(target);\n        if (newNodeData[this.fields.tooltip]) {\n            liEle.setAttribute(\"title\", newNodeData[this.fields.tooltip]);\n        }\n        if (newNodeData.hasOwnProperty(this.fields.htmlAttributes) && newNodeData[this.fields.htmlAttributes]) {\n            var attr = {};\n            merge(attr, newNodeData[this.fields.htmlAttributes]);\n            if (attr.class) {\n                addClass([liEle], attr.class.split(' '));\n                delete attr.class;\n            }\n            else {\n                attributes(liEle, attr);\n            }\n        }\n        if (this.selectedNodes.indexOf(id) !== -1) {\n            liEle.setAttribute('aria-selected', 'true');\n            addClass([liEle], ACTIVE);\n        }\n        this.isRefreshed = false;\n        this.triggerEvent();\n    };\n    /**\n     * Removes the collection of TreeView nodes by passing the array of node details as argument to this method.\n     * @param  {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n     */\n    TreeView.prototype.removeNodes = function (nodes) {\n        if (!isNOU(nodes)) {\n            if (this.fields.dataSource instanceof DataManager && !this.isOffline && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n                this.crudOperation('delete', nodes);\n            }\n            else {\n                this.deleteSuccess(nodes);\n            }\n        }\n    };\n    /**\n     * Replaces the text of the TreeView node with the given text.\n     * @param  {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n     * @param  {string} newText - Specifies the new text of TreeView node.\n     */\n    TreeView.prototype.updateNode = function (target, newText) {\n        var _this = this;\n        if (isNOU(target) || isNOU(newText) || !this.allowEditing) {\n            return;\n        }\n        var liEle = this.getElement(target);\n        if (isNOU(liEle)) {\n            return;\n        }\n        var txtEle = select('.' + LISTTEXT, liEle);\n        this.updateOldText(liEle);\n        var eventArgs = this.getEditEvent(liEle, null, null);\n        this.trigger('nodeEditing', eventArgs, function (observedArgs) {\n            if (!observedArgs.cancel) {\n                if (_this.fields.dataSource instanceof DataManager && !_this.isOffline && (_this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n                    _this.crudOperation('update', null, target, newText, null, null, false);\n                }\n                else {\n                    _this.appendNewText(liEle, txtEle, newText, false);\n                }\n            }\n        });\n    };\n    /**\n     * Unchecks all the checked nodes. You can also uncheck the specific nodes by passing array of checked nodes\n     * as argument to this method.\n     * @param  {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n     */\n    TreeView.prototype.uncheckAll = function (nodes) {\n        if (this.showCheckBox) {\n            this.doCheckBoxAction(nodes, false);\n        }\n    };\n    var TreeView_1;\n    __decorate([\n        Property(false)\n    ], TreeView.prototype, \"allowDragAndDrop\", void 0);\n    __decorate([\n        Property(false)\n    ], TreeView.prototype, \"allowEditing\", void 0);\n    __decorate([\n        Property(false)\n    ], TreeView.prototype, \"allowMultiSelection\", void 0);\n    __decorate([\n        Complex({}, NodeAnimationSettings)\n    ], TreeView.prototype, \"animation\", void 0);\n    __decorate([\n        Property()\n    ], TreeView.prototype, \"checkedNodes\", void 0);\n    __decorate([\n        Property('')\n    ], TreeView.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], TreeView.prototype, \"disabled\", void 0);\n    __decorate([\n        Property(null)\n    ], TreeView.prototype, \"dragArea\", void 0);\n    __decorate([\n        Property(false)\n    ], TreeView.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Property(false)\n    ], TreeView.prototype, \"enablePersistence\", void 0);\n    __decorate([\n        Property()\n    ], TreeView.prototype, \"expandedNodes\", void 0);\n    __decorate([\n        Property('Auto')\n    ], TreeView.prototype, \"expandOn\", void 0);\n    __decorate([\n        Complex({}, FieldsSettings)\n    ], TreeView.prototype, \"fields\", void 0);\n    __decorate([\n        Property(true)\n    ], TreeView.prototype, \"fullRowSelect\", void 0);\n    __decorate([\n        Property(true)\n    ], TreeView.prototype, \"loadOnDemand\", void 0);\n    __decorate([\n        Property()\n    ], TreeView.prototype, \"locale\", void 0);\n    __decorate([\n        Property()\n    ], TreeView.prototype, \"nodeTemplate\", void 0);\n    __decorate([\n        Property()\n    ], TreeView.prototype, \"selectedNodes\", void 0);\n    __decorate([\n        Property('None')\n    ], TreeView.prototype, \"sortOrder\", void 0);\n    __decorate([\n        Property(false)\n    ], TreeView.prototype, \"showCheckBox\", void 0);\n    __decorate([\n        Property(true)\n    ], TreeView.prototype, \"autoCheck\", void 0);\n    __decorate([\n        Property(false)\n    ], TreeView.prototype, \"fullRowNavigable\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"actionFailure\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"dataBound\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"dataSourceChanged\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"drawNode\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"destroyed\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"keyPress\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeChecked\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeChecking\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeClicked\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeCollapsed\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeCollapsing\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeDragging\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeDragStart\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeDragStop\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeDropped\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeEdited\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeEditing\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeExpanded\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeExpanding\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeSelected\", void 0);\n    __decorate([\n        Event()\n    ], TreeView.prototype, \"nodeSelecting\", void 0);\n    TreeView = TreeView_1 = __decorate([\n        NotifyPropertyChanges\n    ], TreeView);\n    return TreeView;\n}(Component));\nexport { TreeView };\n","/**\n * @module ol/geom/flat/reverse\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nexport function coordinates(flatCoordinates, offset, end, stride) {\n    while (offset < end - stride) {\n        for (var i = 0; i < stride; ++i) {\n            var tmp = flatCoordinates[offset + i];\n            flatCoordinates[offset + i] = flatCoordinates[end - stride + i];\n            flatCoordinates[end - stride + i] = tmp;\n        }\n        offset += stride;\n        end -= stride;\n    }\n}\n//# sourceMappingURL=reverse.js.map","/**\n * @module ol/geom/flat/orient\n */\nimport { coordinates as reverseCoordinates } from './reverse.js';\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n    // http://tinyurl.com/clockwise-method\n    // https://github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrlinearring.cpp\n    var edge = 0;\n    var x1 = flatCoordinates[end - stride];\n    var y1 = flatCoordinates[end - stride + 1];\n    for (; offset < end; offset += stride) {\n        var x2 = flatCoordinates[offset];\n        var y2 = flatCoordinates[offset + 1];\n        edge += (x2 - x1) * (y2 + y1);\n        x1 = x2;\n        y1 = y2;\n    }\n    return edge === 0 ? undefined : edge > 0;\n}\n/**\n * Determines if linear rings are oriented.  By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Test for right-hand orientation\n *     (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(flatCoordinates, offset, ends, stride, opt_right) {\n    var right = opt_right !== undefined ? opt_right : false;\n    for (var i = 0, ii = ends.length; i < ii; ++i) {\n        var end = ends[i];\n        var isClockwise = linearRingIsClockwise(flatCoordinates, offset, end, stride);\n        if (i === 0) {\n            if ((right && isClockwise) || (!right && !isClockwise)) {\n                return false;\n            }\n        }\n        else {\n            if ((right && !isClockwise) || (!right && isClockwise)) {\n                return false;\n            }\n        }\n        offset = end;\n    }\n    return true;\n}\n/**\n * Determines if linear rings are oriented.  By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Test for right-hand orientation\n *     (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(flatCoordinates, offset, endss, stride, opt_right) {\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n        var ends = endss[i];\n        if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, opt_right)) {\n            return false;\n        }\n        if (ends.length) {\n            offset = ends[ends.length - 1];\n        }\n    }\n    return true;\n}\n/**\n * Orient coordinates in a flat array of linear rings.  By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings).  To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(flatCoordinates, offset, ends, stride, opt_right) {\n    var right = opt_right !== undefined ? opt_right : false;\n    for (var i = 0, ii = ends.length; i < ii; ++i) {\n        var end = ends[i];\n        var isClockwise = linearRingIsClockwise(flatCoordinates, offset, end, stride);\n        var reverse = i === 0\n            ? (right && isClockwise) || (!right && !isClockwise)\n            : (right && !isClockwise) || (!right && isClockwise);\n        if (reverse) {\n            reverseCoordinates(flatCoordinates, offset, end, stride);\n        }\n        offset = end;\n    }\n    return offset;\n}\n/**\n * Orient coordinates in a flat array of linear rings.  By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings).  To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(flatCoordinates, offset, endss, stride, opt_right) {\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n        offset = orientLinearRings(flatCoordinates, offset, endss[i], stride, opt_right);\n    }\n    return offset;\n}\n//# sourceMappingURL=orient.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/renderer/Layer\n */\nimport EventType from '../events/EventType.js';\nimport ImageState from '../ImageState.js';\nimport Observable from '../Observable.js';\nimport SourceState from '../source/State.js';\nimport { abstract } from '../util.js';\n/**\n * @template {import(\"../layer/Layer.js\").default} LayerType\n */\nvar LayerRenderer = /** @class */ (function (_super) {\n    __extends(LayerRenderer, _super);\n    /**\n     * @param {LayerType} layer Layer.\n     */\n    function LayerRenderer(layer) {\n        var _this = _super.call(this) || this;\n        /** @private */\n        _this.boundHandleImageChange_ = _this.handleImageChange_.bind(_this);\n        /**\n         * @protected\n         * @type {LayerType}\n         */\n        _this.layer_ = layer;\n        /**\n         * @type {import(\"../render/canvas/ExecutorGroup\").default}\n         */\n        _this.declutterExecutorGroup = null;\n        return _this;\n    }\n    /**\n     * Asynchronous layer level hit detection.\n     * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n     * @return {Promise<Array<import(\"../Feature\").default>>} Promise that resolves with\n     * an array of features.\n     */\n    LayerRenderer.prototype.getFeatures = function (pixel) {\n        return abstract();\n    };\n    /**\n     * Determine whether render should be called.\n     * @abstract\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     * @return {boolean} Layer is ready to be rendered.\n     */\n    LayerRenderer.prototype.prepareFrame = function (frameState) {\n        return abstract();\n    };\n    /**\n     * Render the layer.\n     * @abstract\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {HTMLElement} target Target that may be used to render content to.\n     * @return {HTMLElement} The rendered element.\n     */\n    LayerRenderer.prototype.renderFrame = function (frameState, target) {\n        return abstract();\n    };\n    /**\n     * @param {Object<number, Object<string, import(\"../Tile.js\").default>>} tiles Lookup of loaded tiles by zoom level.\n     * @param {number} zoom Zoom level.\n     * @param {import(\"../Tile.js\").default} tile Tile.\n     * @return {boolean|void} If `false`, the tile will not be considered loaded.\n     */\n    LayerRenderer.prototype.loadedTileCallback = function (tiles, zoom, tile) {\n        if (!tiles[zoom]) {\n            tiles[zoom] = {};\n        }\n        tiles[zoom][tile.tileCoord.toString()] = tile;\n        return undefined;\n    };\n    /**\n     * Create a function that adds loaded tiles to the tile lookup.\n     * @param {import(\"../source/Tile.js\").default} source Tile source.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection of the tiles.\n     * @param {Object<number, Object<string, import(\"../Tile.js\").default>>} tiles Lookup of loaded tiles by zoom level.\n     * @return {function(number, import(\"../TileRange.js\").default):boolean} A function that can be\n     *     called with a zoom level and a tile range to add loaded tiles to the lookup.\n     * @protected\n     */\n    LayerRenderer.prototype.createLoadedTileFinder = function (source, projection, tiles) {\n        return (\n        /**\n         * @param {number} zoom Zoom level.\n         * @param {import(\"../TileRange.js\").default} tileRange Tile range.\n         * @return {boolean} The tile range is fully loaded.\n         * @this {LayerRenderer}\n         */\n        function (zoom, tileRange) {\n            var callback = this.loadedTileCallback.bind(this, tiles, zoom);\n            return source.forEachLoadedTile(projection, zoom, tileRange, callback);\n        }.bind(this));\n    };\n    /**\n     * @abstract\n     * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {number} hitTolerance Hit tolerance in pixels.\n     * @param {import(\"./vector.js\").FeatureCallback<T>} callback Feature callback.\n     * @param {Array<import(\"./Map.js\").HitMatch<T>>} matches The hit detected matches with tolerance.\n     * @return {T|undefined} Callback result.\n     * @template T\n     */\n    LayerRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, callback, matches) {\n        return undefined;\n    };\n    /**\n     * @abstract\n     * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n     * @param {number} hitTolerance Hit tolerance in pixels.\n     * @return {Uint8ClampedArray|Uint8Array} The result.  If there is no data at the pixel\n     *    location, null will be returned.  If there is data, but pixel values cannot be\n     *    returned, and empty array will be returned.\n     */\n    LayerRenderer.prototype.getDataAtPixel = function (pixel, frameState, hitTolerance) {\n        return abstract();\n    };\n    /**\n     * @return {LayerType} Layer.\n     */\n    LayerRenderer.prototype.getLayer = function () {\n        return this.layer_;\n    };\n    /**\n     * Perform action necessary to get the layer rendered after new fonts have loaded\n     * @abstract\n     */\n    LayerRenderer.prototype.handleFontsChanged = function () { };\n    /**\n     * Handle changes in image state.\n     * @param {import(\"../events/Event.js\").default} event Image change event.\n     * @private\n     */\n    LayerRenderer.prototype.handleImageChange_ = function (event) {\n        var image = /** @type {import(\"../Image.js\").default} */ (event.target);\n        if (image.getState() === ImageState.LOADED) {\n            this.renderIfReadyAndVisible();\n        }\n    };\n    /**\n     * Load the image if not already loaded, and register the image change\n     * listener if needed.\n     * @param {import(\"../ImageBase.js\").default} image Image.\n     * @return {boolean} `true` if the image is already loaded, `false` otherwise.\n     * @protected\n     */\n    LayerRenderer.prototype.loadImage = function (image) {\n        var imageState = image.getState();\n        if (imageState != ImageState.LOADED && imageState != ImageState.ERROR) {\n            image.addEventListener(EventType.CHANGE, this.boundHandleImageChange_);\n        }\n        if (imageState == ImageState.IDLE) {\n            image.load();\n            imageState = image.getState();\n        }\n        return imageState == ImageState.LOADED;\n    };\n    /**\n     * @protected\n     */\n    LayerRenderer.prototype.renderIfReadyAndVisible = function () {\n        var layer = this.getLayer();\n        if (layer.getVisible() && layer.getSourceState() == SourceState.READY) {\n            layer.changed();\n        }\n    };\n    return LayerRenderer;\n}(Observable));\nexport default LayerRenderer;\n//# sourceMappingURL=Layer.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/renderer/canvas/Layer\n */\nimport LayerRenderer from '../Layer.js';\nimport RenderEvent from '../../render/Event.js';\nimport RenderEventType from '../../render/EventType.js';\nimport { apply as applyTransform, compose as composeTransform, create as createTransform, } from '../../transform.js';\nimport { containsCoordinate, getBottomLeft, getBottomRight, getTopLeft, getTopRight, } from '../../extent.js';\nimport { createCanvasContext2D } from '../../dom.js';\nimport { rotateAtOffset } from '../../render/canvas.js';\n/**\n * @abstract\n * @template {import(\"../../layer/Layer.js\").default} LayerType\n */\nvar CanvasLayerRenderer = /** @class */ (function (_super) {\n    __extends(CanvasLayerRenderer, _super);\n    /**\n     * @param {LayerType} layer Layer.\n     */\n    function CanvasLayerRenderer(layer) {\n        var _this = _super.call(this, layer) || this;\n        /**\n         * @protected\n         * @type {HTMLElement}\n         */\n        _this.container = null;\n        /**\n         * @protected\n         * @type {number}\n         */\n        _this.renderedResolution;\n        /**\n         * A temporary transform.  The values in this transform should only be used in a\n         * function that sets the values.\n         * @protected\n         * @type {import(\"../../transform.js\").Transform}\n         */\n        _this.tempTransform = createTransform();\n        /**\n         * The transform for rendered pixels to viewport CSS pixels.  This transform must\n         * be set when rendering a frame and may be used by other functions after rendering.\n         * @protected\n         * @type {import(\"../../transform.js\").Transform}\n         */\n        _this.pixelTransform = createTransform();\n        /**\n         * The transform for viewport CSS pixels to rendered pixels.  This transform must\n         * be set when rendering a frame and may be used by other functions after rendering.\n         * @protected\n         * @type {import(\"../../transform.js\").Transform}\n         */\n        _this.inversePixelTransform = createTransform();\n        /**\n         * @type {CanvasRenderingContext2D}\n         */\n        _this.context = null;\n        /**\n         * @type {boolean}\n         */\n        _this.containerReused = false;\n        return _this;\n    }\n    /**\n     * Get a rendering container from an existing target, if compatible.\n     * @param {HTMLElement} target Potential render target.\n     * @param {string} transform CSS Transform.\n     * @param {number} opacity Opacity.\n     */\n    CanvasLayerRenderer.prototype.useContainer = function (target, transform, opacity) {\n        var layerClassName = this.getLayer().getClassName();\n        var container, context;\n        if (target &&\n            target.style.opacity === '' &&\n            target.className === layerClassName) {\n            var canvas = target.firstElementChild;\n            if (canvas instanceof HTMLCanvasElement) {\n                context = canvas.getContext('2d');\n            }\n        }\n        if (context &&\n            (context.canvas.width === 0 ||\n                context.canvas.style.transform === transform)) {\n            // Container of the previous layer renderer can be used.\n            this.container = target;\n            this.context = context;\n            this.containerReused = true;\n        }\n        else if (this.containerReused) {\n            // Previously reused container cannot be used any more.\n            this.container = null;\n            this.context = null;\n            this.containerReused = false;\n        }\n        if (!this.container) {\n            container = document.createElement('div');\n            container.className = layerClassName;\n            var style = container.style;\n            style.position = 'absolute';\n            style.width = '100%';\n            style.height = '100%';\n            context = createCanvasContext2D();\n            var canvas = context.canvas;\n            container.appendChild(canvas);\n            style = canvas.style;\n            style.position = 'absolute';\n            style.left = '0';\n            style.transformOrigin = 'top left';\n            this.container = container;\n            this.context = context;\n        }\n    };\n    /**\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {import(\"../../extent.js\").Extent} extent Clip extent.\n     * @protected\n     */\n    CanvasLayerRenderer.prototype.clip = function (context, frameState, extent) {\n        var pixelRatio = frameState.pixelRatio;\n        var halfWidth = (frameState.size[0] * pixelRatio) / 2;\n        var halfHeight = (frameState.size[1] * pixelRatio) / 2;\n        var rotation = frameState.viewState.rotation;\n        var topLeft = getTopLeft(extent);\n        var topRight = getTopRight(extent);\n        var bottomRight = getBottomRight(extent);\n        var bottomLeft = getBottomLeft(extent);\n        applyTransform(frameState.coordinateToPixelTransform, topLeft);\n        applyTransform(frameState.coordinateToPixelTransform, topRight);\n        applyTransform(frameState.coordinateToPixelTransform, bottomRight);\n        applyTransform(frameState.coordinateToPixelTransform, bottomLeft);\n        context.save();\n        rotateAtOffset(context, -rotation, halfWidth, halfHeight);\n        context.beginPath();\n        context.moveTo(topLeft[0] * pixelRatio, topLeft[1] * pixelRatio);\n        context.lineTo(topRight[0] * pixelRatio, topRight[1] * pixelRatio);\n        context.lineTo(bottomRight[0] * pixelRatio, bottomRight[1] * pixelRatio);\n        context.lineTo(bottomLeft[0] * pixelRatio, bottomLeft[1] * pixelRatio);\n        context.clip();\n        rotateAtOffset(context, rotation, halfWidth, halfHeight);\n    };\n    /**\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {import(\"../../extent.js\").Extent} extent Clip extent.\n     * @protected\n     */\n    CanvasLayerRenderer.prototype.clipUnrotated = function (context, frameState, extent) {\n        var topLeft = getTopLeft(extent);\n        var topRight = getTopRight(extent);\n        var bottomRight = getBottomRight(extent);\n        var bottomLeft = getBottomLeft(extent);\n        applyTransform(frameState.coordinateToPixelTransform, topLeft);\n        applyTransform(frameState.coordinateToPixelTransform, topRight);\n        applyTransform(frameState.coordinateToPixelTransform, bottomRight);\n        applyTransform(frameState.coordinateToPixelTransform, bottomLeft);\n        var inverted = this.inversePixelTransform;\n        applyTransform(inverted, topLeft);\n        applyTransform(inverted, topRight);\n        applyTransform(inverted, bottomRight);\n        applyTransform(inverted, bottomLeft);\n        context.save();\n        context.beginPath();\n        context.moveTo(Math.round(topLeft[0]), Math.round(topLeft[1]));\n        context.lineTo(Math.round(topRight[0]), Math.round(topRight[1]));\n        context.lineTo(Math.round(bottomRight[0]), Math.round(bottomRight[1]));\n        context.lineTo(Math.round(bottomLeft[0]), Math.round(bottomLeft[1]));\n        context.clip();\n    };\n    /**\n     * @param {import(\"../../render/EventType.js\").default} type Event type.\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @private\n     */\n    CanvasLayerRenderer.prototype.dispatchRenderEvent_ = function (type, context, frameState) {\n        var layer = this.getLayer();\n        if (layer.hasListener(type)) {\n            var event_1 = new RenderEvent(type, this.inversePixelTransform, frameState, context);\n            layer.dispatchEvent(event_1);\n        }\n    };\n    /**\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @protected\n     */\n    CanvasLayerRenderer.prototype.preRender = function (context, frameState) {\n        this.dispatchRenderEvent_(RenderEventType.PRERENDER, context, frameState);\n    };\n    /**\n     * @param {CanvasRenderingContext2D} context Context.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @protected\n     */\n    CanvasLayerRenderer.prototype.postRender = function (context, frameState) {\n        this.dispatchRenderEvent_(RenderEventType.POSTRENDER, context, frameState);\n    };\n    /**\n     * Creates a transform for rendering to an element that will be rotated after rendering.\n     * @param {import(\"../../coordinate.js\").Coordinate} center Center.\n     * @param {number} resolution Resolution.\n     * @param {number} rotation Rotation.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {number} width Width of the rendered element (in pixels).\n     * @param {number} height Height of the rendered element (in pixels).\n     * @param {number} offsetX Offset on the x-axis in view coordinates.\n     * @protected\n     * @return {!import(\"../../transform.js\").Transform} Transform.\n     */\n    CanvasLayerRenderer.prototype.getRenderTransform = function (center, resolution, rotation, pixelRatio, width, height, offsetX) {\n        var dx1 = width / 2;\n        var dy1 = height / 2;\n        var sx = pixelRatio / resolution;\n        var sy = -sx;\n        var dx2 = -center[0] + offsetX;\n        var dy2 = -center[1];\n        return composeTransform(this.tempTransform, dx1, dy1, sx, sy, -rotation, dx2, dy2);\n    };\n    /**\n     * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState FrameState.\n     * @param {number} hitTolerance Hit tolerance in pixels.\n     * @return {Uint8ClampedArray|Uint8Array} The result.  If there is no data at the pixel\n     *    location, null will be returned.  If there is data, but pixel values cannot be\n     *    returned, and empty array will be returned.\n     */\n    CanvasLayerRenderer.prototype.getDataAtPixel = function (pixel, frameState, hitTolerance) {\n        var renderPixel = applyTransform(this.inversePixelTransform, pixel.slice());\n        var context = this.context;\n        var layer = this.getLayer();\n        var layerExtent = layer.getExtent();\n        if (layerExtent) {\n            var renderCoordinate = applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n            /** get only data inside of the layer extent */\n            if (!containsCoordinate(layerExtent, renderCoordinate)) {\n                return null;\n            }\n        }\n        var data;\n        try {\n            var x = Math.round(renderPixel[0]);\n            var y = Math.round(renderPixel[1]);\n            var newCanvas = document.createElement('canvas');\n            var newContext = newCanvas.getContext('2d');\n            newCanvas.width = 1;\n            newCanvas.height = 1;\n            newContext.clearRect(0, 0, 1, 1);\n            newContext.drawImage(context.canvas, x, y, 1, 1, 0, 0, 1, 1);\n            data = newContext.getImageData(0, 0, 1, 1).data;\n        }\n        catch (err) {\n            if (err.name === 'SecurityError') {\n                // tainted canvas, we assume there is data at the given pixel (although there might not be)\n                return new Uint8Array();\n            }\n            return data;\n        }\n        if (data[3] === 0) {\n            return null;\n        }\n        return data;\n    };\n    return CanvasLayerRenderer;\n}(LayerRenderer));\nexport default CanvasLayerRenderer;\n//# sourceMappingURL=Layer.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/AssertionError\n */\nimport { VERSION } from './util.js';\n/**\n * Error object thrown when an assertion failed. This is an ECMA-262 Error,\n * extended with a `code` property.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error.\n */\nvar AssertionError = /** @class */ (function (_super) {\n    __extends(AssertionError, _super);\n    /**\n     * @param {number} code Error code.\n     */\n    function AssertionError(code) {\n        var _this = this;\n        var path = VERSION === 'latest' ? VERSION : 'v' + VERSION.split('-')[0];\n        var message = 'Assertion failed. See https://openlayers.org/en/' +\n            path +\n            '/doc/errors/#' +\n            code +\n            ' for details.';\n        _this = _super.call(this, message) || this;\n        /**\n         * Error code. The meaning of the code can be found on\n         * https://openlayers.org/en/latest/doc/errors/ (replace `latest` with\n         * the version found in the OpenLayers script's header comment if a version\n         * other than the latest is used).\n         * @type {number}\n         * @api\n         */\n        _this.code = code;\n        /**\n         * @type {string}\n         */\n        _this.name = 'AssertionError';\n        // Re-assign message, see https://github.com/Rich-Harris/buble/issues/40\n        _this.message = message;\n        return _this;\n    }\n    return AssertionError;\n}(Error));\nexport default AssertionError;\n//# sourceMappingURL=AssertionError.js.map","/**\n * @module ol/layer/Property\n */\n/**\n * @enum {string}\n */\nexport default {\n    OPACITY: 'opacity',\n    VISIBLE: 'visible',\n    EXTENT: 'extent',\n    Z_INDEX: 'zIndex',\n    MAX_RESOLUTION: 'maxResolution',\n    MIN_RESOLUTION: 'minResolution',\n    MAX_ZOOM: 'maxZoom',\n    MIN_ZOOM: 'minZoom',\n    SOURCE: 'source',\n};\n//# sourceMappingURL=Property.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/layer/Base\n */\nimport BaseObject from '../Object.js';\nimport LayerProperty from './Property.js';\nimport { abstract } from '../util.js';\nimport { assert } from '../asserts.js';\nimport { assign } from '../obj.js';\nimport { clamp } from '../math.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Note that with {@link module:ol/layer/Base} and all its subclasses, any property set in\n * the options is set as a {@link module:ol/Object} property on the layer object, so\n * is observable, and has get/set accessors.\n *\n * @api\n */\nvar BaseLayer = /** @class */ (function (_super) {\n    __extends(BaseLayer, _super);\n    /**\n     * @param {Options} options Layer options.\n     */\n    function BaseLayer(options) {\n        var _this = _super.call(this) || this;\n        /**\n         * @type {Object<string, *>}\n         */\n        var properties = assign({}, options);\n        properties[LayerProperty.OPACITY] =\n            options.opacity !== undefined ? options.opacity : 1;\n        assert(typeof properties[LayerProperty.OPACITY] === 'number', 64); // Layer opacity must be a number\n        properties[LayerProperty.VISIBLE] =\n            options.visible !== undefined ? options.visible : true;\n        properties[LayerProperty.Z_INDEX] = options.zIndex;\n        properties[LayerProperty.MAX_RESOLUTION] =\n            options.maxResolution !== undefined ? options.maxResolution : Infinity;\n        properties[LayerProperty.MIN_RESOLUTION] =\n            options.minResolution !== undefined ? options.minResolution : 0;\n        properties[LayerProperty.MIN_ZOOM] =\n            options.minZoom !== undefined ? options.minZoom : -Infinity;\n        properties[LayerProperty.MAX_ZOOM] =\n            options.maxZoom !== undefined ? options.maxZoom : Infinity;\n        /**\n         * @type {string}\n         * @private\n         */\n        _this.className_ =\n            properties.className !== undefined ? options.className : 'ol-layer';\n        delete properties.className;\n        _this.setProperties(properties);\n        /**\n         * @type {import(\"./Layer.js\").State}\n         * @private\n         */\n        _this.state_ = null;\n        return _this;\n    }\n    /**\n     * @return {string} CSS class name.\n     */\n    BaseLayer.prototype.getClassName = function () {\n        return this.className_;\n    };\n    /**\n     * This method is not meant to be called by layers or layer renderers because the state\n     * is incorrect if the layer is included in a layer group.\n     *\n     * @param {boolean=} opt_managed Layer is managed.\n     * @return {import(\"./Layer.js\").State} Layer state.\n     */\n    BaseLayer.prototype.getLayerState = function (opt_managed) {\n        /** @type {import(\"./Layer.js\").State} */\n        var state = this.state_ ||\n            /** @type {?} */ ({\n                layer: this,\n                managed: opt_managed === undefined ? true : opt_managed,\n            });\n        var zIndex = this.getZIndex();\n        state.opacity = clamp(Math.round(this.getOpacity() * 100) / 100, 0, 1);\n        state.sourceState = this.getSourceState();\n        state.visible = this.getVisible();\n        state.extent = this.getExtent();\n        state.zIndex =\n            zIndex !== undefined ? zIndex : state.managed === false ? Infinity : 0;\n        state.maxResolution = this.getMaxResolution();\n        state.minResolution = Math.max(this.getMinResolution(), 0);\n        state.minZoom = this.getMinZoom();\n        state.maxZoom = this.getMaxZoom();\n        this.state_ = state;\n        return state;\n    };\n    /**\n     * @abstract\n     * @param {Array<import(\"./Layer.js\").default>=} opt_array Array of layers (to be\n     *     modified in place).\n     * @return {Array<import(\"./Layer.js\").default>} Array of layers.\n     */\n    BaseLayer.prototype.getLayersArray = function (opt_array) {\n        return abstract();\n    };\n    /**\n     * @abstract\n     * @param {Array<import(\"./Layer.js\").State>=} opt_states Optional list of layer\n     *     states (to be modified in place).\n     * @return {Array<import(\"./Layer.js\").State>} List of layer states.\n     */\n    BaseLayer.prototype.getLayerStatesArray = function (opt_states) {\n        return abstract();\n    };\n    /**\n     * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it\n     * will be visible regardless of extent.\n     * @return {import(\"../extent.js\").Extent|undefined} The layer extent.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.getExtent = function () {\n        return /** @type {import(\"../extent.js\").Extent|undefined} */ (this.get(LayerProperty.EXTENT));\n    };\n    /**\n     * Return the maximum resolution of the layer.\n     * @return {number} The maximum resolution of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.getMaxResolution = function () {\n        return /** @type {number} */ (this.get(LayerProperty.MAX_RESOLUTION));\n    };\n    /**\n     * Return the minimum resolution of the layer.\n     * @return {number} The minimum resolution of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.getMinResolution = function () {\n        return /** @type {number} */ (this.get(LayerProperty.MIN_RESOLUTION));\n    };\n    /**\n     * Return the minimum zoom level of the layer.\n     * @return {number} The minimum zoom level of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.getMinZoom = function () {\n        return /** @type {number} */ (this.get(LayerProperty.MIN_ZOOM));\n    };\n    /**\n     * Return the maximum zoom level of the layer.\n     * @return {number} The maximum zoom level of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.getMaxZoom = function () {\n        return /** @type {number} */ (this.get(LayerProperty.MAX_ZOOM));\n    };\n    /**\n     * Return the opacity of the layer (between 0 and 1).\n     * @return {number} The opacity of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.getOpacity = function () {\n        return /** @type {number} */ (this.get(LayerProperty.OPACITY));\n    };\n    /**\n     * @abstract\n     * @return {import(\"../source/State.js\").default} Source state.\n     */\n    BaseLayer.prototype.getSourceState = function () {\n        return abstract();\n    };\n    /**\n     * Return the visibility of the layer (`true` or `false`).\n     * @return {boolean} The visibility of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.getVisible = function () {\n        return /** @type {boolean} */ (this.get(LayerProperty.VISIBLE));\n    };\n    /**\n     * Return the Z-index of the layer, which is used to order layers before\n     * rendering. The default Z-index is 0.\n     * @return {number} The Z-index of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.getZIndex = function () {\n        return /** @type {number} */ (this.get(LayerProperty.Z_INDEX));\n    };\n    /**\n     * Set the extent at which the layer is visible.  If `undefined`, the layer\n     * will be visible at all extents.\n     * @param {import(\"../extent.js\").Extent|undefined} extent The extent of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.setExtent = function (extent) {\n        this.set(LayerProperty.EXTENT, extent);\n    };\n    /**\n     * Set the maximum resolution at which the layer is visible.\n     * @param {number} maxResolution The maximum resolution of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.setMaxResolution = function (maxResolution) {\n        this.set(LayerProperty.MAX_RESOLUTION, maxResolution);\n    };\n    /**\n     * Set the minimum resolution at which the layer is visible.\n     * @param {number} minResolution The minimum resolution of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.setMinResolution = function (minResolution) {\n        this.set(LayerProperty.MIN_RESOLUTION, minResolution);\n    };\n    /**\n     * Set the maximum zoom (exclusive) at which the layer is visible.\n     * Note that the zoom levels for layer visibility are based on the\n     * view zoom level, which may be different from a tile source zoom level.\n     * @param {number} maxZoom The maximum zoom of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.setMaxZoom = function (maxZoom) {\n        this.set(LayerProperty.MAX_ZOOM, maxZoom);\n    };\n    /**\n     * Set the minimum zoom (inclusive) at which the layer is visible.\n     * Note that the zoom levels for layer visibility are based on the\n     * view zoom level, which may be different from a tile source zoom level.\n     * @param {number} minZoom The minimum zoom of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.setMinZoom = function (minZoom) {\n        this.set(LayerProperty.MIN_ZOOM, minZoom);\n    };\n    /**\n     * Set the opacity of the layer, allowed values range from 0 to 1.\n     * @param {number} opacity The opacity of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.setOpacity = function (opacity) {\n        assert(typeof opacity === 'number', 64); // Layer opacity must be a number\n        this.set(LayerProperty.OPACITY, opacity);\n    };\n    /**\n     * Set the visibility of the layer (`true` or `false`).\n     * @param {boolean} visible The visibility of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.setVisible = function (visible) {\n        this.set(LayerProperty.VISIBLE, visible);\n    };\n    /**\n     * Set Z-index of the layer, which is used to order layers before rendering.\n     * The default Z-index is 0.\n     * @param {number} zindex The z-index of the layer.\n     * @observable\n     * @api\n     */\n    BaseLayer.prototype.setZIndex = function (zindex) {\n        this.set(LayerProperty.Z_INDEX, zindex);\n    };\n    /**\n     * Clean up.\n     */\n    BaseLayer.prototype.disposeInternal = function () {\n        if (this.state_) {\n            this.state_.layer = null;\n            this.state_ = null;\n        }\n        _super.prototype.disposeInternal.call(this);\n    };\n    return BaseLayer;\n}(BaseObject));\nexport default BaseLayer;\n//# sourceMappingURL=Base.js.map","/**\n * @module ol/interaction/Property\n */\n/**\n * @enum {string}\n */\nexport default {\n    ACTIVE: 'active',\n};\n//# sourceMappingURL=Property.js.map","/**\n * @module ol/extent/Relationship\n */\n/**\n * Relationship to an extent.\n * @enum {number}\n */\nexport default {\n    UNKNOWN: 0,\n    INTERSECTING: 1,\n    ABOVE: 2,\n    RIGHT: 4,\n    BELOW: 8,\n    LEFT: 16,\n};\n//# sourceMappingURL=Relationship.js.map","/**\n * @module ol/extent/Corner\n */\n/**\n * Extent corner.\n * @enum {string}\n */\nexport default {\n    BOTTOM_LEFT: 'bottom-left',\n    BOTTOM_RIGHT: 'bottom-right',\n    TOP_LEFT: 'top-left',\n    TOP_RIGHT: 'top-right',\n};\n//# sourceMappingURL=Corner.js.map","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport { linearRingsContainsXY } from './contains.js';\nimport { numberSafeCompareFunction } from '../../array.js';\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {Array<number>} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(flatCoordinates, offset, ends, stride, flatCenters, flatCentersOffset, opt_dest) {\n    var i, ii, x, x1, x2, y1, y2;\n    var y = flatCenters[flatCentersOffset + 1];\n    /** @type {Array<number>} */\n    var intersections = [];\n    // Calculate intersections with the horizontal line\n    for (var r = 0, rr = ends.length; r < rr; ++r) {\n        var end = ends[r];\n        x1 = flatCoordinates[end - stride];\n        y1 = flatCoordinates[end - stride + 1];\n        for (i = offset; i < end; i += stride) {\n            x2 = flatCoordinates[i];\n            y2 = flatCoordinates[i + 1];\n            if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n                x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n                intersections.push(x);\n            }\n            x1 = x2;\n            y1 = y2;\n        }\n    }\n    // Find the longest segment of the horizontal line that has its center point\n    // inside the linear ring.\n    var pointX = NaN;\n    var maxSegmentLength = -Infinity;\n    intersections.sort(numberSafeCompareFunction);\n    x1 = intersections[0];\n    for (i = 1, ii = intersections.length; i < ii; ++i) {\n        x2 = intersections[i];\n        var segmentLength = Math.abs(x2 - x1);\n        if (segmentLength > maxSegmentLength) {\n            x = (x1 + x2) / 2;\n            if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n                pointX = x;\n                maxSegmentLength = segmentLength;\n            }\n        }\n        x1 = x2;\n    }\n    if (isNaN(pointX)) {\n        // There is no horizontal line that has its center point inside the linear\n        // ring.  Use the center of the the linear ring's extent.\n        pointX = flatCenters[flatCentersOffset];\n    }\n    if (opt_dest) {\n        opt_dest.push(pointX, y, maxSegmentLength);\n        return opt_dest;\n    }\n    else {\n        return [pointX, y, maxSegmentLength];\n    }\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array<number>} flatCenters Flat centers.\n * @return {Array<number>} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(flatCoordinates, offset, endss, stride, flatCenters) {\n    var interiorPoints = [];\n    for (var i = 0, ii = endss.length; i < ii; ++i) {\n        var ends = endss[i];\n        interiorPoints = getInteriorPointOfArray(flatCoordinates, offset, ends, stride, flatCenters, 2 * i, interiorPoints);\n        offset = ends[ends.length - 1];\n    }\n    return interiorPoints;\n}\n//# sourceMappingURL=interiorpoint.js.map","/**\n * @module ol/sphere\n */\nimport GeometryType from './geom/GeometryType.js';\nimport { toDegrees, toRadians } from './math.js';\n/**\n * Object literal with options for the {@link getLength} or {@link getArea}\n * functions.\n * @typedef {Object} SphereMetricOptions\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857']\n * Projection of the  geometry.  By default, the geometry is assumed to be in\n * Web Mercator.\n * @property {number} [radius=6371008.8] Sphere radius.  By default, the\n * [mean Earth radius](https://en.wikipedia.org/wiki/Earth_radius#Mean_radius)\n * for the WGS84 ellipsoid is used.\n */\n/**\n * The mean Earth radius (1/3 * (2a + b)) for the WGS84 ellipsoid.\n * https://en.wikipedia.org/wiki/Earth_radius#Mean_radius\n * @type {number}\n */\nexport var DEFAULT_RADIUS = 6371008.8;\n/**\n * Get the great circle distance (in meters) between two geographic coordinates.\n * @param {Array} c1 Starting coordinate.\n * @param {Array} c2 Ending coordinate.\n * @param {number=} opt_radius The sphere radius to use.  Defaults to the Earth's\n *     mean radius using the WGS84 ellipsoid.\n * @return {number} The great circle distance between the points (in meters).\n * @api\n */\nexport function getDistance(c1, c2, opt_radius) {\n    var radius = opt_radius || DEFAULT_RADIUS;\n    var lat1 = toRadians(c1[1]);\n    var lat2 = toRadians(c2[1]);\n    var deltaLatBy2 = (lat2 - lat1) / 2;\n    var deltaLonBy2 = toRadians(c2[0] - c1[0]) / 2;\n    var a = Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) +\n        Math.sin(deltaLonBy2) *\n            Math.sin(deltaLonBy2) *\n            Math.cos(lat1) *\n            Math.cos(lat2);\n    return 2 * radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n}\n/**\n * Get the cumulative great circle length of linestring coordinates (geographic).\n * @param {Array} coordinates Linestring coordinates.\n * @param {number} radius The sphere radius to use.\n * @return {number} The length (in meters).\n */\nfunction getLengthInternal(coordinates, radius) {\n    var length = 0;\n    for (var i = 0, ii = coordinates.length; i < ii - 1; ++i) {\n        length += getDistance(coordinates[i], coordinates[i + 1], radius);\n    }\n    return length;\n}\n/**\n * Get the spherical length of a geometry.  This length is the sum of the\n * great circle distances between coordinates.  For polygons, the length is\n * the sum of all rings.  For points, the length is zero.  For multi-part\n * geometries, the length is the sum of the length of each part.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions=} opt_options Options for the\n * length calculation.  By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical length (in meters).\n * @api\n */\nexport function getLength(geometry, opt_options) {\n    var options = opt_options || {};\n    var radius = options.radius || DEFAULT_RADIUS;\n    var projection = options.projection || 'EPSG:3857';\n    var type = geometry.getType();\n    if (type !== GeometryType.GEOMETRY_COLLECTION) {\n        geometry = geometry.clone().transform(projection, 'EPSG:4326');\n    }\n    var length = 0;\n    var coordinates, coords, i, ii, j, jj;\n    switch (type) {\n        case GeometryType.POINT:\n        case GeometryType.MULTI_POINT: {\n            break;\n        }\n        case GeometryType.LINE_STRING:\n        case GeometryType.LINEAR_RING: {\n            coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n            length = getLengthInternal(coordinates, radius);\n            break;\n        }\n        case GeometryType.MULTI_LINE_STRING:\n        case GeometryType.POLYGON: {\n            coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n            for (i = 0, ii = coordinates.length; i < ii; ++i) {\n                length += getLengthInternal(coordinates[i], radius);\n            }\n            break;\n        }\n        case GeometryType.MULTI_POLYGON: {\n            coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n            for (i = 0, ii = coordinates.length; i < ii; ++i) {\n                coords = coordinates[i];\n                for (j = 0, jj = coords.length; j < jj; ++j) {\n                    length += getLengthInternal(coords[j], radius);\n                }\n            }\n            break;\n        }\n        case GeometryType.GEOMETRY_COLLECTION: {\n            var geometries = /** @type {import(\"./geom/GeometryCollection.js\").default} */ (geometry).getGeometries();\n            for (i = 0, ii = geometries.length; i < ii; ++i) {\n                length += getLength(geometries[i], opt_options);\n            }\n            break;\n        }\n        default: {\n            throw new Error('Unsupported geometry type: ' + type);\n        }\n    }\n    return length;\n}\n/**\n * Returns the spherical area for a list of coordinates.\n *\n * [Reference](https://trs-new.jpl.nasa.gov/handle/2014/40409)\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for\n * Polygons on a Sphere\", JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007\n *\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates List of coordinates of a linear\n * ring. If the ring is oriented clockwise, the area will be positive,\n * otherwise it will be negative.\n * @param {number} radius The sphere radius.\n * @return {number} Area (in square meters).\n */\nfunction getAreaInternal(coordinates, radius) {\n    var area = 0;\n    var len = coordinates.length;\n    var x1 = coordinates[len - 1][0];\n    var y1 = coordinates[len - 1][1];\n    for (var i = 0; i < len; i++) {\n        var x2 = coordinates[i][0];\n        var y2 = coordinates[i][1];\n        area +=\n            toRadians(x2 - x1) *\n                (2 + Math.sin(toRadians(y1)) + Math.sin(toRadians(y2)));\n        x1 = x2;\n        y1 = y2;\n    }\n    return (area * radius * radius) / 2.0;\n}\n/**\n * Get the spherical area of a geometry.  This is the area (in meters) assuming\n * that polygon edges are segments of great circles on a sphere.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions=} opt_options Options for the area\n *     calculation.  By default, geometries are assumed to be in 'EPSG:3857'.\n *     You can change this by providing a `projection` option.\n * @return {number} The spherical area (in square meters).\n * @api\n */\nexport function getArea(geometry, opt_options) {\n    var options = opt_options || {};\n    var radius = options.radius || DEFAULT_RADIUS;\n    var projection = options.projection || 'EPSG:3857';\n    var type = geometry.getType();\n    if (type !== GeometryType.GEOMETRY_COLLECTION) {\n        geometry = geometry.clone().transform(projection, 'EPSG:4326');\n    }\n    var area = 0;\n    var coordinates, coords, i, ii, j, jj;\n    switch (type) {\n        case GeometryType.POINT:\n        case GeometryType.MULTI_POINT:\n        case GeometryType.LINE_STRING:\n        case GeometryType.MULTI_LINE_STRING:\n        case GeometryType.LINEAR_RING: {\n            break;\n        }\n        case GeometryType.POLYGON: {\n            coordinates = /** @type {import(\"./geom/Polygon.js\").default} */ (geometry).getCoordinates();\n            area = Math.abs(getAreaInternal(coordinates[0], radius));\n            for (i = 1, ii = coordinates.length; i < ii; ++i) {\n                area -= Math.abs(getAreaInternal(coordinates[i], radius));\n            }\n            break;\n        }\n        case GeometryType.MULTI_POLYGON: {\n            coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n            for (i = 0, ii = coordinates.length; i < ii; ++i) {\n                coords = coordinates[i];\n                area += Math.abs(getAreaInternal(coords[0], radius));\n                for (j = 1, jj = coords.length; j < jj; ++j) {\n                    area -= Math.abs(getAreaInternal(coords[j], radius));\n                }\n            }\n            break;\n        }\n        case GeometryType.GEOMETRY_COLLECTION: {\n            var geometries = /** @type {import(\"./geom/GeometryCollection.js\").default} */ (geometry).getGeometries();\n            for (i = 0, ii = geometries.length; i < ii; ++i) {\n                area += getArea(geometries[i], opt_options);\n            }\n            break;\n        }\n        default: {\n            throw new Error('Unsupported geometry type: ' + type);\n        }\n    }\n    return area;\n}\n/**\n * Returns the coordinate at the given distance and bearing from `c1`.\n *\n * @param {import(\"./coordinate.js\").Coordinate} c1 The origin point (`[lon, lat]` in degrees).\n * @param {number} distance The great-circle distance between the origin\n *     point and the target point.\n * @param {number} bearing The bearing (in radians).\n * @param {number=} opt_radius The sphere radius to use.  Defaults to the Earth's\n *     mean radius using the WGS84 ellipsoid.\n * @return {import(\"./coordinate.js\").Coordinate} The target point.\n */\nexport function offset(c1, distance, bearing, opt_radius) {\n    var radius = opt_radius || DEFAULT_RADIUS;\n    var lat1 = toRadians(c1[1]);\n    var lon1 = toRadians(c1[0]);\n    var dByR = distance / radius;\n    var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) +\n        Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));\n    var lon = lon1 +\n        Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));\n    return [toDegrees(lon), toDegrees(lat)];\n}\n//# sourceMappingURL=sphere.js.map","/**\n * @module ol/geom/flat/segments\n */\n/**\n * This function calls `callback` for each segment of the flat coordinates\n * array. If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {function(import(\"../../coordinate.js\").Coordinate, import(\"../../coordinate.js\").Coordinate): T} callback Function\n *     called for each segment.\n * @return {T|boolean} Value.\n * @template T\n */\nexport function forEach(flatCoordinates, offset, end, stride, callback) {\n    var point1 = [flatCoordinates[offset], flatCoordinates[offset + 1]];\n    var point2 = [];\n    var ret;\n    for (; offset + stride < end; offset += stride) {\n        point2[0] = flatCoordinates[offset + stride];\n        point2[1] = flatCoordinates[offset + stride + 1];\n        ret = callback(point1, point2);\n        if (ret) {\n            return ret;\n        }\n        point1[0] = point2[0];\n        point1[1] = point2[1];\n    }\n    return false;\n}\n//# sourceMappingURL=segments.js.map","/**\n * @module ol/render/Event\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport Event from '../events/Event.js';\nvar RenderEvent = /** @class */ (function (_super) {\n    __extends(RenderEvent, _super);\n    /**\n     * @param {import(\"./EventType.js\").default} type Type.\n     * @param {import(\"../transform.js\").Transform=} opt_inversePixelTransform Transform for\n     *     CSS pixels to rendered pixels.\n     * @param {import(\"../PluggableMap.js\").FrameState=} opt_frameState Frame state.\n     * @param {?CanvasRenderingContext2D=} opt_context Context.\n     */\n    function RenderEvent(type, opt_inversePixelTransform, opt_frameState, opt_context) {\n        var _this = _super.call(this, type) || this;\n        /**\n         * Transform from CSS pixels (relative to the top-left corner of the map viewport)\n         * to rendered pixels on this event's `context`. Only available when a Canvas renderer is used, null otherwise.\n         * @type {import(\"../transform.js\").Transform|undefined}\n         * @api\n         */\n        _this.inversePixelTransform = opt_inversePixelTransform;\n        /**\n         * An object representing the current render frame state.\n         * @type {import(\"../PluggableMap.js\").FrameState|undefined}\n         * @api\n         */\n        _this.frameState = opt_frameState;\n        /**\n         * Canvas context. Not available when the event is dispatched by the map. Only available\n         * when a Canvas renderer is used, null otherwise.\n         * @type {CanvasRenderingContext2D|null|undefined}\n         * @api\n         */\n        _this.context = opt_context;\n        return _this;\n    }\n    return RenderEvent;\n}(Event));\nexport default RenderEvent;\n//# sourceMappingURL=Event.js.map","/**\n * @module ol/style/IconImageCache\n */\nimport { asString } from '../color.js';\n/**\n * @classdesc\n * Singleton class. Available through {@link module:ol/style/IconImageCache~shared}.\n */\nvar IconImageCache = /** @class */ (function () {\n    function IconImageCache() {\n        /**\n         * @type {!Object<string, import(\"./IconImage.js\").default>}\n         * @private\n         */\n        this.cache_ = {};\n        /**\n         * @type {number}\n         * @private\n         */\n        this.cacheSize_ = 0;\n        /**\n         * @type {number}\n         * @private\n         */\n        this.maxCacheSize_ = 32;\n    }\n    /**\n     * FIXME empty description for jsdoc\n     */\n    IconImageCache.prototype.clear = function () {\n        this.cache_ = {};\n        this.cacheSize_ = 0;\n    };\n    /**\n     * @return {boolean} Can expire cache.\n     */\n    IconImageCache.prototype.canExpireCache = function () {\n        return this.cacheSize_ > this.maxCacheSize_;\n    };\n    /**\n     * FIXME empty description for jsdoc\n     */\n    IconImageCache.prototype.expire = function () {\n        if (this.canExpireCache()) {\n            var i = 0;\n            for (var key in this.cache_) {\n                var iconImage = this.cache_[key];\n                if ((i++ & 3) === 0 && !iconImage.hasListener()) {\n                    delete this.cache_[key];\n                    --this.cacheSize_;\n                }\n            }\n        }\n    };\n    /**\n     * @param {string} src Src.\n     * @param {?string} crossOrigin Cross origin.\n     * @param {import(\"../color.js\").Color} color Color.\n     * @return {import(\"./IconImage.js\").default} Icon image.\n     */\n    IconImageCache.prototype.get = function (src, crossOrigin, color) {\n        var key = getKey(src, crossOrigin, color);\n        return key in this.cache_ ? this.cache_[key] : null;\n    };\n    /**\n     * @param {string} src Src.\n     * @param {?string} crossOrigin Cross origin.\n     * @param {import(\"../color.js\").Color} color Color.\n     * @param {import(\"./IconImage.js\").default} iconImage Icon image.\n     */\n    IconImageCache.prototype.set = function (src, crossOrigin, color, iconImage) {\n        var key = getKey(src, crossOrigin, color);\n        this.cache_[key] = iconImage;\n        ++this.cacheSize_;\n    };\n    /**\n     * Set the cache size of the icon cache. Default is `32`. Change this value when\n     * your map uses more than 32 different icon images and you are not caching icon\n     * styles on the application level.\n     * @param {number} maxCacheSize Cache max size.\n     * @api\n     */\n    IconImageCache.prototype.setSize = function (maxCacheSize) {\n        this.maxCacheSize_ = maxCacheSize;\n        this.expire();\n    };\n    return IconImageCache;\n}());\n/**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {string} Cache key.\n */\nfunction getKey(src, crossOrigin, color) {\n    var colorString = color ? asString(color) : 'null';\n    return crossOrigin + ':' + src + ':' + colorString;\n}\nexport default IconImageCache;\n/**\n * The {@link module:ol/style/IconImageCache~IconImageCache} for\n * {@link module:ol/style/Icon~Icon} images.\n * @api\n */\nexport var shared = new IconImageCache();\n//# sourceMappingURL=IconImageCache.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/MapEvent\n */\nimport Event from './events/Event.js';\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map event.\n */\nvar MapEvent = /** @class */ (function (_super) {\n    __extends(MapEvent, _super);\n    /**\n     * @param {string} type Event type.\n     * @param {import(\"./PluggableMap.js\").default} map Map.\n     * @param {?import(\"./PluggableMap.js\").FrameState=} opt_frameState Frame state.\n     */\n    function MapEvent(type, map, opt_frameState) {\n        var _this = _super.call(this, type) || this;\n        /**\n         * The map where the event occurred.\n         * @type {import(\"./PluggableMap.js\").default}\n         * @api\n         */\n        _this.map = map;\n        /**\n         * The frame state at the time of the event.\n         * @type {?import(\"./PluggableMap.js\").FrameState}\n         * @api\n         */\n        _this.frameState = opt_frameState !== undefined ? opt_frameState : null;\n        return _this;\n    }\n    return MapEvent;\n}(Event));\nexport default MapEvent;\n//# sourceMappingURL=MapEvent.js.map","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n  return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","define([\"./kernel\", \"./lang\", \"./array\", \"./config\"], function(dojo, lang, ArrayUtil, config){\n\n\tvar Color = dojo.Color = function(/*Array|String|Object*/ color){\n\t\t// summary:\n\t\t//\t\tTakes a named string, hex string, array of rgb or rgba values,\n\t\t//\t\tan object with r, g, b, and a properties, or another `Color` object\n\t\t//\t\tand creates a new Color instance to work from.\n\t\t//\n\t\t// example:\n\t\t//\t\tWork with a Color instance:\n\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t//\t|\t\tvar c = new Color();\n\t\t//\t|\t\tc.setColor([0,0,0]); // black\n\t\t//\t|\t\tvar hex = c.toHex(); // #000000\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tWork with a node's color:\n\t\t//\t| \n\t\t//\t|\trequire([\"dojo/_base/color\", \"dojo/dom-style\"], function(Color, domStyle){\n\t\t//\t|\t\tvar color = domStyle(\"someNode\", \"backgroundColor\");\n\t\t//\t|\t\tvar n = new Color(color);\n\t\t//\t|\t\t// adjust the color some\n\t\t//\t|\t\tn.r *= .5;\n\t\t//\t|\t\tconsole.log(n.toString()); // rgb(128, 255, 255);\n\t\t//\t|\t});\n\t\tif(color){ this.setColor(color); }\n\t};\n\n\t// FIXME:\n\t// there's got to be a more space-efficient way to encode or discover\n\t// these!! Use hex?\n\tColor.named = {\n\t\t// summary:\n\t\t//\t\tDictionary list of all CSS named colors, by name. Values are 3-item arrays with corresponding RG and B values.\n\t\t\"black\":  [0,0,0],\n\t\t\"silver\": [192,192,192],\n\t\t\"gray\":\t  [128,128,128],\n\t\t\"white\":  [255,255,255],\n\t\t\"maroon\": [128,0,0],\n\t\t\"red\":\t  [255,0,0],\n\t\t\"purple\": [128,0,128],\n\t\t\"fuchsia\":[255,0,255],\n\t\t\"green\":  [0,128,0],\n\t\t\"lime\":\t  [0,255,0],\n\t\t\"olive\":  [128,128,0],\n\t\t\"yellow\": [255,255,0],\n\t\t\"navy\":\t  [0,0,128],\n\t\t\"blue\":\t  [0,0,255],\n\t\t\"teal\":\t  [0,128,128],\n\t\t\"aqua\":\t  [0,255,255],\n\t\t\"transparent\": config.transparentColor || [0,0,0,0]\n\t};\n\n\tlang.extend(Color, {\n\t\tr: 255, g: 255, b: 255, a: 1,\n\t\t_set: function(r, g, b, a){\n\t\t\tvar t = this; t.r = r; t.g = g; t.b = b; t.a = a;\n\t\t},\n\t\tsetColor: function(/*Array|String|Object*/ color){\n\t\t\t// summary:\n\t\t\t//\t\tTakes a named string, hex string, array of rgb or rgba values,\n\t\t\t//\t\tan object with r, g, b, and a properties, or another `Color` object\n\t\t\t//\t\tand sets this color instance to that value.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t\t//\t|\t\tvar c = new Color(); // no color\n\t\t\t//\t|\t\tc.setColor(\"#ededed\"); // greyish\n\t\t\t//\t|\t});\n\t\t\tif(lang.isString(color)){\n\t\t\t\tColor.fromString(color, this);\n\t\t\t}else if(lang.isArray(color)){\n\t\t\t\tColor.fromArray(color, this);\n\t\t\t}else{\n\t\t\t\tthis._set(color.r, color.g, color.b, color.a);\n\t\t\t\tif(!(color instanceof Color)){ this.sanitize(); }\n\t\t\t}\n\t\t\treturn this;\t// Color\n\t\t},\n\t\tsanitize: function(){\n\t\t\t// summary:\n\t\t\t//\t\tEnsures the object has correct attributes\n\t\t\t// description:\n\t\t\t//\t\tthe default implementation does nothing, include dojo.colors to\n\t\t\t//\t\taugment it with real checks\n\t\t\treturn this;\t// Color\n\t\t},\n\t\ttoRgb: function(){\n\t\t\t// summary:\n\t\t\t//\t\tReturns 3 component array of rgb values\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t\t//\t|\t\tvar c = new Color(\"#000000\");\n\t\t\t//\t|\t\tconsole.log(c.toRgb()); // [0,0,0]\n\t\t\t//\t|\t});\n\t\t\tvar t = this;\n\t\t\treturn [t.r, t.g, t.b]; // Array\n\t\t},\n\t\ttoRgba: function(){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a 4 component array of rgba values from the color\n\t\t\t//\t\trepresented by this object.\n\t\t\tvar t = this;\n\t\t\treturn [t.r, t.g, t.b, t.a];\t// Array\n\t\t},\n\t\ttoHex: function(){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a CSS color string in hexadecimal representation\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t\t//\t|\t\tconsole.log(new Color([0,0,0]).toHex()); // #000000\n\t\t\t//\t|\t});\n\t\t\tvar arr = ArrayUtil.map([\"r\", \"g\", \"b\"], function(x){\n\t\t\t\tvar s = this[x].toString(16);\n\t\t\t\treturn s.length < 2 ? \"0\" + s : s;\n\t\t\t}, this);\n\t\t\treturn \"#\" + arr.join(\"\");\t// String\n\t\t},\n\t\ttoCss: function(/*Boolean?*/ includeAlpha){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a css color string in rgb(a) representation\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t\t//\t|\t\tvar c = new Color(\"#FFF\").toCss();\n\t\t\t//\t|\t\tconsole.log(c); // rgb('255','255','255')\n\t\t\t//\t|\t});\n\t\t\tvar t = this, rgb = t.r + \", \" + t.g + \", \" + t.b;\n\t\t\treturn (includeAlpha ? \"rgba(\" + rgb + \", \" + t.a : \"rgb(\" + rgb) + \")\";\t// String\n\t\t},\n\t\ttoString: function(){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a visual representation of the color\n\t\t\treturn this.toCss(true); // String\n\t\t}\n\t});\n\n\tColor.blendColors = dojo.blendColors = function(\n\t\t/*Color*/ start,\n\t\t/*Color*/ end,\n\t\t/*Number*/ weight,\n\t\t/*Color?*/ obj\n\t){\n\t\t// summary:\n\t\t//\t\tBlend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend,\n\t\t//\t\tcan reuse a previously allocated Color object for the result\n\t\tvar t = obj || new Color();\n\t\tt.r = Math.round(start.r + (end.r - start.r) * weight);\n\t\tt.g = Math.round(start.g + (end.g - start.g) * weight);\n\t\tt.b = Math.round(start.b + (end.b - start.b) * weight);\n\t\tt.a = start.a + (end.a - start.a) * weight;\n\t\treturn t.sanitize();\t// Color\n\t};\n\n\tColor.fromRgb = dojo.colorFromRgb = function(/*String*/ color, /*Color?*/ obj){\n\t\t// summary:\n\t\t//\t\tReturns a `Color` instance from a string of the form\n\t\t//\t\t\"rgb(...)\" or \"rgba(...)\". Optionally accepts a `Color`\n\t\t//\t\tobject to update with the parsed value and return instead of\n\t\t//\t\tcreating a new object.\n\t\t// returns:\n\t\t//\t\tA Color object. If obj is passed, it will be the return value.\n\t\tvar m = color.toLowerCase().match(/^rgba?\\(([\\s\\.,0-9]+)\\)/);\n\t\treturn m && Color.fromArray(m[1].split(/\\s*,\\s*/), obj);\t// Color\n\t};\n\n\tColor.fromHex = dojo.colorFromHex = function(/*String*/ color, /*Color?*/ obj){\n\t\t// summary:\n\t\t//\t\tConverts a hex string with a '#' prefix to a color object.\n\t\t//\t\tSupports 12-bit #rgb shorthand. Optionally accepts a\n\t\t//\t\t`Color` object to update with the parsed value.\n\t\t//\n\t\t// returns:\n\t\t//\t\tA Color object. If obj is passed, it will be the return value.\n\t\t//\n\t\t// example:\n\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t//\t|\t\tvar thing = new Color().fromHex(\"#ededed\"); // grey, longhand\n\t\t//\t|\t\tvar thing2 = new Color().fromHex(\"#000\"); // black, shorthand\n\t\t//\t|\t});\n\t\tvar t = obj || new Color(),\n\t\t\tbits = (color.length == 4) ? 4 : 8,\n\t\t\tmask = (1 << bits) - 1;\n\t\tcolor = Number(\"0x\" + color.substr(1));\n\t\tif(isNaN(color)){\n\t\t\treturn null; // Color\n\t\t}\n\t\tArrayUtil.forEach([\"b\", \"g\", \"r\"], function(x){\n\t\t\tvar c = color & mask;\n\t\t\tcolor >>= bits;\n\t\t\tt[x] = bits == 4 ? 17 * c : c;\n\t\t});\n\t\tt.a = 1;\n\t\treturn t;\t// Color\n\t};\n\n\tColor.fromArray = dojo.colorFromArray = function(/*Array*/ a, /*Color?*/ obj){\n\t\t// summary:\n\t\t//\t\tBuilds a `Color` from a 3 or 4 element array, mapping each\n\t\t//\t\telement in sequence to the rgb(a) values of the color.\n\t\t// example:\n\t\t//\t\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t//\t\t|\t\tvar myColor = new Color().fromArray([237,237,237,0.5]); // grey, 50% alpha\n\t\t//\t\t|\t});\n\t\t// returns:\n\t\t//\t\tA Color object. If obj is passed, it will be the return value.\n\t\tvar t = obj || new Color();\n\t\tt._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3]));\n\t\tif(isNaN(t.a)){ t.a = 1; }\n\t\treturn t.sanitize();\t// Color\n\t};\n\n\tColor.fromString = dojo.colorFromString = function(/*String*/ str, /*Color?*/ obj){\n\t\t// summary:\n\t\t//\t\tParses `str` for a color value. Accepts hex, rgb, and rgba\n\t\t//\t\tstyle color values.\n\t\t// description:\n\t\t//\t\tAcceptable input values for str may include arrays of any form\n\t\t//\t\taccepted by dojo.colorFromArray, hex strings such as \"#aaaaaa\", or\n\t\t//\t\trgb or rgba strings such as \"rgb(133, 200, 16)\" or \"rgba(10, 10,\n\t\t//\t\t10, 50)\"\n\t\t// returns:\n\t\t//\t\tA Color object. If obj is passed, it will be the return value.\n\t\tvar a = Color.named[str];\n\t\treturn a && Color.fromArray(a, obj) || Color.fromRgb(str, obj) || Color.fromHex(str, obj);\t// Color\n\t};\n\n\treturn Color;\n});\n","/**\n * @module ol/style/IconAnchorUnits\n */\n/**\n * Icon anchor units. One of 'fraction', 'pixels'.\n * @enum {string}\n */\nexport default {\n    /**\n     * Anchor is a fraction\n     * @api\n     */\n    FRACTION: 'fraction',\n    /**\n     * Anchor is in pixels\n     * @api\n     */\n    PIXELS: 'pixels',\n};\n//# sourceMappingURL=IconAnchorUnits.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/ImageBase\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport { abstract } from './util.js';\n/**\n * @abstract\n */\nvar ImageBase = /** @class */ (function (_super) {\n    __extends(ImageBase, _super);\n    /**\n     * @param {import(\"./extent.js\").Extent} extent Extent.\n     * @param {number|undefined} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"./ImageState.js\").default} state State.\n     */\n    function ImageBase(extent, resolution, pixelRatio, state) {\n        var _this = _super.call(this) || this;\n        /**\n         * @protected\n         * @type {import(\"./extent.js\").Extent}\n         */\n        _this.extent = extent;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.pixelRatio_ = pixelRatio;\n        /**\n         * @protected\n         * @type {number|undefined}\n         */\n        _this.resolution = resolution;\n        /**\n         * @protected\n         * @type {import(\"./ImageState.js\").default}\n         */\n        _this.state = state;\n        return _this;\n    }\n    /**\n     * @protected\n     */\n    ImageBase.prototype.changed = function () {\n        this.dispatchEvent(EventType.CHANGE);\n    };\n    /**\n     * @return {import(\"./extent.js\").Extent} Extent.\n     */\n    ImageBase.prototype.getExtent = function () {\n        return this.extent;\n    };\n    /**\n     * @abstract\n     * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n     */\n    ImageBase.prototype.getImage = function () {\n        return abstract();\n    };\n    /**\n     * @return {number} PixelRatio.\n     */\n    ImageBase.prototype.getPixelRatio = function () {\n        return this.pixelRatio_;\n    };\n    /**\n     * @return {number} Resolution.\n     */\n    ImageBase.prototype.getResolution = function () {\n        return /** @type {number} */ (this.resolution);\n    };\n    /**\n     * @return {import(\"./ImageState.js\").default} State.\n     */\n    ImageBase.prototype.getState = function () {\n        return this.state;\n    };\n    /**\n     * Load not yet loaded URI.\n     * @abstract\n     */\n    ImageBase.prototype.load = function () {\n        abstract();\n    };\n    return ImageBase;\n}(EventTarget));\nexport default ImageBase;\n//# sourceMappingURL=ImageBase.js.map","/**\n * @module ol/style/Image\n */\nimport { abstract } from '../util.js';\nimport { toSize } from '../size.js';\n/**\n * @typedef {Object} Options\n * @property {number} opacity\n * @property {boolean} rotateWithView\n * @property {number} rotation\n * @property {number|import(\"../size.js\").Size} scale\n * @property {Array<number>} displacement\n */\n/**\n * @classdesc\n * A base class used for creating subclasses and not instantiated in\n * apps. Base class for {@link module:ol/style/Icon~Icon}, {@link module:ol/style/Circle~CircleStyle} and\n * {@link module:ol/style/RegularShape~RegularShape}.\n * @abstract\n * @api\n */\nvar ImageStyle = /** @class */ (function () {\n    /**\n     * @param {Options} options Options.\n     */\n    function ImageStyle(options) {\n        /**\n         * @private\n         * @type {number}\n         */\n        this.opacity_ = options.opacity;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        this.rotateWithView_ = options.rotateWithView;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.rotation_ = options.rotation;\n        /**\n         * @private\n         * @type {number|import(\"../size.js\").Size}\n         */\n        this.scale_ = options.scale;\n        /**\n         * @private\n         * @type {import(\"../size.js\").Size}\n         */\n        this.scaleArray_ = toSize(options.scale);\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        this.displacement_ = options.displacement;\n    }\n    /**\n     * Clones the style.\n     * @return {ImageStyle} The cloned style.\n     * @api\n     */\n    ImageStyle.prototype.clone = function () {\n        var scale = this.getScale();\n        return new ImageStyle({\n            opacity: this.getOpacity(),\n            scale: Array.isArray(scale) ? scale.slice() : scale,\n            rotation: this.getRotation(),\n            rotateWithView: this.getRotateWithView(),\n            displacement: this.getDisplacement().slice(),\n        });\n    };\n    /**\n     * Get the symbolizer opacity.\n     * @return {number} Opacity.\n     * @api\n     */\n    ImageStyle.prototype.getOpacity = function () {\n        return this.opacity_;\n    };\n    /**\n     * Determine whether the symbolizer rotates with the map.\n     * @return {boolean} Rotate with map.\n     * @api\n     */\n    ImageStyle.prototype.getRotateWithView = function () {\n        return this.rotateWithView_;\n    };\n    /**\n     * Get the symoblizer rotation.\n     * @return {number} Rotation.\n     * @api\n     */\n    ImageStyle.prototype.getRotation = function () {\n        return this.rotation_;\n    };\n    /**\n     * Get the symbolizer scale.\n     * @return {number|import(\"../size.js\").Size} Scale.\n     * @api\n     */\n    ImageStyle.prototype.getScale = function () {\n        return this.scale_;\n    };\n    /**\n     * Get the symbolizer scale array.\n     * @return {import(\"../size.js\").Size} Scale array.\n     */\n    ImageStyle.prototype.getScaleArray = function () {\n        return this.scaleArray_;\n    };\n    /**\n     * Get the displacement of the shape\n     * @return {Array<number>} Shape's center displacement\n     * @api\n     */\n    ImageStyle.prototype.getDisplacement = function () {\n        return this.displacement_;\n    };\n    /**\n     * Get the anchor point in pixels. The anchor determines the center point for the\n     * symbolizer.\n     * @abstract\n     * @return {Array<number>} Anchor.\n     */\n    ImageStyle.prototype.getAnchor = function () {\n        return abstract();\n    };\n    /**\n     * Get the image element for the symbolizer.\n     * @abstract\n     * @param {number} pixelRatio Pixel ratio.\n     * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n     */\n    ImageStyle.prototype.getImage = function (pixelRatio) {\n        return abstract();\n    };\n    /**\n     * @abstract\n     * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n     */\n    ImageStyle.prototype.getHitDetectionImage = function () {\n        return abstract();\n    };\n    /*\n     * Get the image pixel ratio.\n     * @param {number} pixelRatio Pixel ratio.\n     * */\n    ImageStyle.prototype.getPixelRatio = function (pixelRatio) {\n        return 1;\n    };\n    /**\n     * @abstract\n     * @return {import(\"../ImageState.js\").default} Image state.\n     */\n    ImageStyle.prototype.getImageState = function () {\n        return abstract();\n    };\n    /**\n     * @abstract\n     * @return {import(\"../size.js\").Size} Image size.\n     */\n    ImageStyle.prototype.getImageSize = function () {\n        return abstract();\n    };\n    /**\n     * @abstract\n     * @return {import(\"../size.js\").Size} Size of the hit-detection image.\n     */\n    ImageStyle.prototype.getHitDetectionImageSize = function () {\n        return abstract();\n    };\n    /**\n     * Get the origin of the symbolizer.\n     * @abstract\n     * @return {Array<number>} Origin.\n     */\n    ImageStyle.prototype.getOrigin = function () {\n        return abstract();\n    };\n    /**\n     * Get the size of the symbolizer (in pixels).\n     * @abstract\n     * @return {import(\"../size.js\").Size} Size.\n     */\n    ImageStyle.prototype.getSize = function () {\n        return abstract();\n    };\n    /**\n     * Set the opacity.\n     *\n     * @param {number} opacity Opacity.\n     * @api\n     */\n    ImageStyle.prototype.setOpacity = function (opacity) {\n        this.opacity_ = opacity;\n    };\n    /**\n     * Set whether to rotate the style with the view.\n     *\n     * @param {boolean} rotateWithView Rotate with map.\n     * @api\n     */\n    ImageStyle.prototype.setRotateWithView = function (rotateWithView) {\n        this.rotateWithView_ = rotateWithView;\n    };\n    /**\n     * Set the rotation.\n     *\n     * @param {number} rotation Rotation.\n     * @api\n     */\n    ImageStyle.prototype.setRotation = function (rotation) {\n        this.rotation_ = rotation;\n    };\n    /**\n     * Set the scale.\n     *\n     * @param {number|import(\"../size.js\").Size} scale Scale.\n     * @api\n     */\n    ImageStyle.prototype.setScale = function (scale) {\n        this.scale_ = scale;\n        this.scaleArray_ = toSize(scale);\n    };\n    /**\n     * @abstract\n     * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n     */\n    ImageStyle.prototype.listenImageChange = function (listener) {\n        abstract();\n    };\n    /**\n     * Load not yet loaded URI.\n     * @abstract\n     */\n    ImageStyle.prototype.load = function () {\n        abstract();\n    };\n    /**\n     * @abstract\n     * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n     */\n    ImageStyle.prototype.unlistenImageChange = function (listener) {\n        abstract();\n    };\n    return ImageStyle;\n}());\nexport default ImageStyle;\n//# sourceMappingURL=Image.js.map","/**\n * @module ol/style/TextPlacement\n */\n/**\n * Text placement. One of `'point'`, `'line'`. Default is `'point'`. Note that\n * `'line'` requires the underlying geometry to be a {@link module:ol/geom/LineString~LineString},\n * {@link module:ol/geom/Polygon~Polygon}, {@link module:ol/geom/MultiLineString~MultiLineString} or\n * {@link module:ol/geom/MultiPolygon~MultiPolygon}.\n * @enum {string}\n */\nexport default {\n    POINT: 'point',\n    LINE: 'line',\n};\n//# sourceMappingURL=TextPlacement.js.map","/**\n * @module ol/geom/flat/length\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Length.\n */\nexport function lineStringLength(flatCoordinates, offset, end, stride) {\n    var x1 = flatCoordinates[offset];\n    var y1 = flatCoordinates[offset + 1];\n    var length = 0;\n    for (var i = offset + stride; i < end; i += stride) {\n        var x2 = flatCoordinates[i];\n        var y2 = flatCoordinates[i + 1];\n        length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n        x1 = x2;\n        y1 = y2;\n    }\n    return length;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Perimeter.\n */\nexport function linearRingLength(flatCoordinates, offset, end, stride) {\n    var perimeter = lineStringLength(flatCoordinates, offset, end, stride);\n    var dx = flatCoordinates[end - stride] - flatCoordinates[offset];\n    var dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1];\n    perimeter += Math.sqrt(dx * dx + dy * dy);\n    return perimeter;\n}\n//# sourceMappingURL=length.js.map","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){\"use strict\";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d<x;){for(i(n,d,x),d++,x--;h(n[d],p)<0;)d++;for(;h(n[x],p)>0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return t<i?-1:t>i?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r<i.length;r++)if(n(t,i[r]))return r;return-1}function a(t,i){h(t,0,t.children.length,i,t)}function h(t,i,n,r,e){e||(e=p(null)),e.minX=1/0,e.minY=1/0,e.maxX=-1/0,e.maxY=-1/0;for(var a=i;a<n;a++){var h=t.children[a];o(e,t.leaf?r(h):h)}return e}function o(t,i){return t.minX=Math.min(t.minX,i.minX),t.minY=Math.min(t.minY,i.minY),t.maxX=Math.max(t.maxX,i.maxX),t.maxY=Math.max(t.maxY,i.maxY),t}function s(t,i){return t.minX-i.minX}function l(t,i){return t.minY-i.minY}function f(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function u(t){return t.maxX-t.minX+(t.maxY-t.minY)}function m(t,i){return t.minX<=i.minX&&t.minY<=i.minY&&i.maxX<=t.maxX&&i.maxY<=t.maxY}function c(t,i){return i.minX<=t.maxX&&i.minY<=t.maxY&&i.maxX>=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a<i.children.length;a++){var h=i.children[a],o=i.leaf?r(h):h;c(t,o)&&(i.leaf?n.push(h):m(t,o)?this._all(h,n):e.push(h))}i=e.pop()}return n},r.prototype.collides=function(t){var i=this.data;if(!c(t,i))return!1;for(var n=[];i;){for(var r=0;r<i.children.length;r++){var e=i.children[r],a=i.leaf?this.toBBox(e):e;if(c(t,a)){if(i.leaf||m(t,a))return!0;n.push(e)}}i=n.pop()}return!1},r.prototype.load=function(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(var i=0;i<t.length;i++)this.insert(t[i]);return this}var n=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){var r=this.data;this.data=n,n=r}this._insert(n,this.data.height-n.height-1,!0)}else this.data=n;return this},r.prototype.insert=function(t){return t&&this._insert(t,this.data.height-1),this},r.prototype.clear=function(){return this.data=p([]),this},r.prototype.remove=function(t,i){if(!t)return this;for(var n,r,a,h=this.data,o=this.toBBox(t),s=[],l=[];h||s.length;){if(h||(h=s.pop(),r=s[s.length-1],n=l.pop(),a=!0),h.leaf){var f=e(t,h.children,i);if(-1!==f)return h.children.splice(f,1),s.push(h),this._condense(s),this}a||h.leaf||!m(h,o)?r?(n++,h=r.children[n],a=!1):h=null:(s.push(h),l.push(n),n=0,r=h,h=h.children[0])}return this},r.prototype.toBBox=function(t){return t},r.prototype.compareMinX=function(t,i){return t.minX-i.minX},r.prototype.compareMinY=function(t,i){return t.minY-i.minY},r.prototype.toJSON=function(){return this.data},r.prototype.fromJSON=function(t){return this.data=t,this},r.prototype._all=function(t,i){for(var n=[];t;)t.leaf?i.push.apply(i,t.children):n.push.apply(n,t.children),t=n.pop();return i},r.prototype._build=function(t,i,n,r){var e,h=n-i+1,o=this._maxEntries;if(h<=o)return a(e=p(t.slice(i,n+1)),this.toBBox),e;r||(r=Math.ceil(Math.log(h)/Math.log(o)),o=Math.ceil(h/Math.pow(o,r-1))),(e=p([])).leaf=!1,e.height=r;var s=Math.ceil(h/o),l=s*Math.ceil(Math.sqrt(o));d(t,i,n,l,this.compareMinX);for(var f=i;f<=n;f+=l){var u=Math.min(f+l-1,n);d(t,f,u,s,this.compareMinY);for(var m=f;m<=u;m+=s){var c=Math.min(m+s-1,u);e.children.push(this._build(t,m,c,r-1))}}return a(e,this.toBBox),e},r.prototype._chooseSubtree=function(t,i,n,r){for(;r.push(i),!i.leaf&&r.length-1!==n;){for(var e=1/0,a=1/0,h=void 0,o=0;o<i.children.length;o++){var s=i.children[o],l=f(s),u=(m=t,c=s,(Math.max(c.maxX,m.maxX)-Math.min(c.minX,m.minX))*(Math.max(c.maxY,m.maxY)-Math.min(c.minY,m.minY))-l);u<a?(a=u,e=l<e?l:e,h=s):u===a&&l<e&&(e=l,h=s)}i=h||i.children[0]}var m,c;return i},r.prototype._insert=function(t,i,n){var r=n?t:this.toBBox(t),e=[],a=this._chooseSubtree(r,this.data,i,e);for(a.children.push(t),o(a,r);i>=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v<m?(m=v,r=p,c=M<c?M:c):v===m&&M<c&&(c=M,r=p)}return r||n-i},r.prototype._chooseSplitAxis=function(t,i,n){var r=t.leaf?this.compareMinX:s,e=t.leaf?this.compareMinY:l;this._allDistMargin(t,i,n,r)<this._allDistMargin(t,i,n,e)&&t.children.sort(r)},r.prototype._allDistMargin=function(t,i,n,r){t.children.sort(r);for(var e=this.toBBox,a=h(t,0,i,e),s=h(t,n-i,n,e),l=u(a)+u(s),f=i;f<n-i;f++){var m=t.children[f];o(a,t.leaf?e(m):m),l+=u(a)}for(var c=n-i-1;c>=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});\n","/**\n * @module ol/format/FormatType\n */\n/**\n * @enum {string}\n */\nexport default {\n    ARRAY_BUFFER: 'arraybuffer',\n    JSON: 'json',\n    TEXT: 'text',\n    XML: 'xml',\n};\n//# sourceMappingURL=FormatType.js.map","/**\n * @module ol/TileRange\n */\n/**\n * A representation of a contiguous block of tiles.  A tile range is specified\n * by its min/max tile coordinates and is inclusive of coordinates.\n */\nvar TileRange = /** @class */ (function () {\n    /**\n     * @param {number} minX Minimum X.\n     * @param {number} maxX Maximum X.\n     * @param {number} minY Minimum Y.\n     * @param {number} maxY Maximum Y.\n     */\n    function TileRange(minX, maxX, minY, maxY) {\n        /**\n         * @type {number}\n         */\n        this.minX = minX;\n        /**\n         * @type {number}\n         */\n        this.maxX = maxX;\n        /**\n         * @type {number}\n         */\n        this.minY = minY;\n        /**\n         * @type {number}\n         */\n        this.maxY = maxY;\n    }\n    /**\n     * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n     * @return {boolean} Contains tile coordinate.\n     */\n    TileRange.prototype.contains = function (tileCoord) {\n        return this.containsXY(tileCoord[1], tileCoord[2]);\n    };\n    /**\n     * @param {TileRange} tileRange Tile range.\n     * @return {boolean} Contains.\n     */\n    TileRange.prototype.containsTileRange = function (tileRange) {\n        return (this.minX <= tileRange.minX &&\n            tileRange.maxX <= this.maxX &&\n            this.minY <= tileRange.minY &&\n            tileRange.maxY <= this.maxY);\n    };\n    /**\n     * @param {number} x Tile coordinate x.\n     * @param {number} y Tile coordinate y.\n     * @return {boolean} Contains coordinate.\n     */\n    TileRange.prototype.containsXY = function (x, y) {\n        return this.minX <= x && x <= this.maxX && this.minY <= y && y <= this.maxY;\n    };\n    /**\n     * @param {TileRange} tileRange Tile range.\n     * @return {boolean} Equals.\n     */\n    TileRange.prototype.equals = function (tileRange) {\n        return (this.minX == tileRange.minX &&\n            this.minY == tileRange.minY &&\n            this.maxX == tileRange.maxX &&\n            this.maxY == tileRange.maxY);\n    };\n    /**\n     * @param {TileRange} tileRange Tile range.\n     */\n    TileRange.prototype.extend = function (tileRange) {\n        if (tileRange.minX < this.minX) {\n            this.minX = tileRange.minX;\n        }\n        if (tileRange.maxX > this.maxX) {\n            this.maxX = tileRange.maxX;\n        }\n        if (tileRange.minY < this.minY) {\n            this.minY = tileRange.minY;\n        }\n        if (tileRange.maxY > this.maxY) {\n            this.maxY = tileRange.maxY;\n        }\n    };\n    /**\n     * @return {number} Height.\n     */\n    TileRange.prototype.getHeight = function () {\n        return this.maxY - this.minY + 1;\n    };\n    /**\n     * @return {import(\"./size.js\").Size} Size.\n     */\n    TileRange.prototype.getSize = function () {\n        return [this.getWidth(), this.getHeight()];\n    };\n    /**\n     * @return {number} Width.\n     */\n    TileRange.prototype.getWidth = function () {\n        return this.maxX - this.minX + 1;\n    };\n    /**\n     * @param {TileRange} tileRange Tile range.\n     * @return {boolean} Intersects.\n     */\n    TileRange.prototype.intersects = function (tileRange) {\n        return (this.minX <= tileRange.maxX &&\n            this.maxX >= tileRange.minX &&\n            this.minY <= tileRange.maxY &&\n            this.maxY >= tileRange.minY);\n    };\n    return TileRange;\n}());\n/**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n * @param {TileRange=} tileRange TileRange.\n * @return {TileRange} Tile range.\n */\nexport function createOrUpdate(minX, maxX, minY, maxY, tileRange) {\n    if (tileRange !== undefined) {\n        tileRange.minX = minX;\n        tileRange.maxX = maxX;\n        tileRange.minY = minY;\n        tileRange.maxY = maxY;\n        return tileRange;\n    }\n    else {\n        return new TileRange(minX, maxX, minY, maxY);\n    }\n}\nexport default TileRange;\n//# sourceMappingURL=TileRange.js.map","/**\n * @module ol/reproj\n */\nimport { IMAGE_SMOOTHING_DISABLED } from './source/common.js';\nimport { assign } from './obj.js';\nimport { containsCoordinate, createEmpty, extend, forEachCorner, getCenter, getHeight, getTopLeft, getWidth, } from './extent.js';\nimport { createCanvasContext2D } from './dom.js';\nimport { getPointResolution, transform } from './proj.js';\nimport { solveLinearSystem } from './math.js';\nvar brokenDiagonalRendering_;\n/**\n * This draws a small triangle into a canvas by setting the triangle as the clip region\n * and then drawing a (too large) rectangle\n *\n * @param {CanvasRenderingContext2D} ctx The context in which to draw the triangle\n * @param {number} u1 The x-coordinate of the second point. The first point is 0,0.\n * @param {number} v1 The y-coordinate of the second point.\n * @param {number} u2 The x-coordinate of the third point.\n * @param {number} v2 The y-coordinate of the third point.\n */\nfunction drawTestTriangle(ctx, u1, v1, u2, v2) {\n    ctx.beginPath();\n    ctx.moveTo(0, 0);\n    ctx.lineTo(u1, v1);\n    ctx.lineTo(u2, v2);\n    ctx.closePath();\n    ctx.save();\n    ctx.clip();\n    ctx.fillRect(0, 0, Math.max(u1, u2) + 1, Math.max(v1, v2));\n    ctx.restore();\n}\n/**\n * Given the data from getImageData, see if the right values appear at the provided offset.\n * Returns true if either the color or transparency is off\n *\n * @param {Uint8ClampedArray} data The data returned from getImageData\n * @param {number} offset The pixel offset from the start of data.\n * @return {boolean} true if the diagonal rendering is broken\n */\nfunction verifyBrokenDiagonalRendering(data, offset) {\n    // the values ought to be close to the rgba(210, 0, 0, 0.75)\n    return (Math.abs(data[offset * 4] - 210) > 2 ||\n        Math.abs(data[offset * 4 + 3] - 0.75 * 255) > 2);\n}\n/**\n * Determines if the current browser configuration can render triangular clip regions correctly.\n * This value is cached so the function is only expensive the first time called.\n * Firefox on Windows (as of now) does not if HWA is enabled. See https://bugzilla.mozilla.org/show_bug.cgi?id=1606976\n * IE also doesn't. Chrome works, and everything seems to work on OSX and Android. This function caches the\n * result. I suppose that it is conceivably possible that a browser might flip modes while the app is\n * running, but lets hope not.\n *\n * @return {boolean} true if the Diagonal Rendering is broken.\n */\nfunction isBrokenDiagonalRendering() {\n    if (brokenDiagonalRendering_ === undefined) {\n        var ctx = document.createElement('canvas').getContext('2d');\n        ctx.globalCompositeOperation = 'lighter';\n        ctx.fillStyle = 'rgba(210, 0, 0, 0.75)';\n        drawTestTriangle(ctx, 4, 5, 4, 0);\n        drawTestTriangle(ctx, 4, 5, 0, 5);\n        var data = ctx.getImageData(0, 0, 3, 3).data;\n        brokenDiagonalRendering_ =\n            verifyBrokenDiagonalRendering(data, 0) ||\n                verifyBrokenDiagonalRendering(data, 4) ||\n                verifyBrokenDiagonalRendering(data, 8);\n    }\n    return brokenDiagonalRendering_;\n}\n/**\n * Calculates ideal resolution to use from the source in order to achieve\n * pixel mapping as close as possible to 1:1 during reprojection.\n * The resolution is calculated regardless of what resolutions\n * are actually available in the dataset (TileGrid, Image, ...).\n *\n * @param {import(\"./proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"./proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"./coordinate.js\").Coordinate} targetCenter Target center.\n * @param {number} targetResolution Target resolution.\n * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.\n */\nexport function calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution) {\n    var sourceCenter = transform(targetCenter, targetProj, sourceProj);\n    // calculate the ideal resolution of the source data\n    var sourceResolution = getPointResolution(targetProj, targetResolution, targetCenter);\n    var targetMetersPerUnit = targetProj.getMetersPerUnit();\n    if (targetMetersPerUnit !== undefined) {\n        sourceResolution *= targetMetersPerUnit;\n    }\n    var sourceMetersPerUnit = sourceProj.getMetersPerUnit();\n    if (sourceMetersPerUnit !== undefined) {\n        sourceResolution /= sourceMetersPerUnit;\n    }\n    // Based on the projection properties, the point resolution at the specified\n    // coordinates may be slightly different. We need to reverse-compensate this\n    // in order to achieve optimal results.\n    var sourceExtent = sourceProj.getExtent();\n    if (!sourceExtent || containsCoordinate(sourceExtent, sourceCenter)) {\n        var compensationFactor = getPointResolution(sourceProj, sourceResolution, sourceCenter) /\n            sourceResolution;\n        if (isFinite(compensationFactor) && compensationFactor > 0) {\n            sourceResolution /= compensationFactor;\n        }\n    }\n    return sourceResolution;\n}\n/**\n * Calculates ideal resolution to use from the source in order to achieve\n * pixel mapping as close as possible to 1:1 during reprojection.\n * The resolution is calculated regardless of what resolutions\n * are actually available in the dataset (TileGrid, Image, ...).\n *\n * @param {import(\"./proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"./proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"./extent.js\").Extent} targetExtent Target extent\n * @param {number} targetResolution Target resolution.\n * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.\n */\nexport function calculateSourceExtentResolution(sourceProj, targetProj, targetExtent, targetResolution) {\n    var targetCenter = getCenter(targetExtent);\n    var sourceResolution = calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution);\n    if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n        forEachCorner(targetExtent, function (corner) {\n            sourceResolution = calculateSourceResolution(sourceProj, targetProj, corner, targetResolution);\n            return isFinite(sourceResolution) && sourceResolution > 0;\n        });\n    }\n    return sourceResolution;\n}\n/**\n * Renders the source data into new canvas based on the triangulation.\n *\n * @param {number} width Width of the canvas.\n * @param {number} height Height of the canvas.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} sourceResolution Source resolution.\n * @param {import(\"./extent.js\").Extent} sourceExtent Extent of the data source.\n * @param {number} targetResolution Target resolution.\n * @param {import(\"./extent.js\").Extent} targetExtent Target extent.\n * @param {import(\"./reproj/Triangulation.js\").default} triangulation\n * Calculated triangulation.\n * @param {Array<{extent: import(\"./extent.js\").Extent,\n *                 image: (HTMLCanvasElement|HTMLImageElement|HTMLVideoElement)}>} sources\n * Array of sources.\n * @param {number} gutter Gutter of the sources.\n * @param {boolean=} opt_renderEdges Render reprojection edges.\n * @param {object=} opt_contextOptions Properties to set on the canvas context.\n * @return {HTMLCanvasElement} Canvas with reprojected data.\n */\nexport function render(width, height, pixelRatio, sourceResolution, sourceExtent, targetResolution, targetExtent, triangulation, sources, gutter, opt_renderEdges, opt_contextOptions) {\n    var context = createCanvasContext2D(Math.round(pixelRatio * width), Math.round(pixelRatio * height));\n    assign(context, opt_contextOptions);\n    if (sources.length === 0) {\n        return context.canvas;\n    }\n    context.scale(pixelRatio, pixelRatio);\n    function pixelRound(value) {\n        return Math.round(value * pixelRatio) / pixelRatio;\n    }\n    context.globalCompositeOperation = 'lighter';\n    var sourceDataExtent = createEmpty();\n    sources.forEach(function (src, i, arr) {\n        extend(sourceDataExtent, src.extent);\n    });\n    var canvasWidthInUnits = getWidth(sourceDataExtent);\n    var canvasHeightInUnits = getHeight(sourceDataExtent);\n    var stitchContext = createCanvasContext2D(Math.round((pixelRatio * canvasWidthInUnits) / sourceResolution), Math.round((pixelRatio * canvasHeightInUnits) / sourceResolution));\n    assign(stitchContext, opt_contextOptions);\n    var stitchScale = pixelRatio / sourceResolution;\n    sources.forEach(function (src, i, arr) {\n        var xPos = src.extent[0] - sourceDataExtent[0];\n        var yPos = -(src.extent[3] - sourceDataExtent[3]);\n        var srcWidth = getWidth(src.extent);\n        var srcHeight = getHeight(src.extent);\n        // This test should never fail -- but it does. Need to find a fix the upstream condition\n        if (src.image.width > 0 && src.image.height > 0) {\n            stitchContext.drawImage(src.image, gutter, gutter, src.image.width - 2 * gutter, src.image.height - 2 * gutter, xPos * stitchScale, yPos * stitchScale, srcWidth * stitchScale, srcHeight * stitchScale);\n        }\n    });\n    var targetTopLeft = getTopLeft(targetExtent);\n    triangulation.getTriangles().forEach(function (triangle, i, arr) {\n        /* Calculate affine transform (src -> dst)\n         * Resulting matrix can be used to transform coordinate\n         * from `sourceProjection` to destination pixels.\n         *\n         * To optimize number of context calls and increase numerical stability,\n         * we also do the following operations:\n         * trans(-topLeftExtentCorner), scale(1 / targetResolution), scale(1, -1)\n         * here before solving the linear system so [ui, vi] are pixel coordinates.\n         *\n         * Src points: xi, yi\n         * Dst points: ui, vi\n         * Affine coefficients: aij\n         *\n         * | x0 y0 1  0  0 0 |   |a00|   |u0|\n         * | x1 y1 1  0  0 0 |   |a01|   |u1|\n         * | x2 y2 1  0  0 0 | x |a02| = |u2|\n         * |  0  0 0 x0 y0 1 |   |a10|   |v0|\n         * |  0  0 0 x1 y1 1 |   |a11|   |v1|\n         * |  0  0 0 x2 y2 1 |   |a12|   |v2|\n         */\n        var source = triangle.source;\n        var target = triangle.target;\n        var x0 = source[0][0], y0 = source[0][1];\n        var x1 = source[1][0], y1 = source[1][1];\n        var x2 = source[2][0], y2 = source[2][1];\n        // Make sure that everything is on pixel boundaries\n        var u0 = pixelRound((target[0][0] - targetTopLeft[0]) / targetResolution);\n        var v0 = pixelRound(-(target[0][1] - targetTopLeft[1]) / targetResolution);\n        var u1 = pixelRound((target[1][0] - targetTopLeft[0]) / targetResolution);\n        var v1 = pixelRound(-(target[1][1] - targetTopLeft[1]) / targetResolution);\n        var u2 = pixelRound((target[2][0] - targetTopLeft[0]) / targetResolution);\n        var v2 = pixelRound(-(target[2][1] - targetTopLeft[1]) / targetResolution);\n        // Shift all the source points to improve numerical stability\n        // of all the subsequent calculations. The [x0, y0] is used here.\n        // This is also used to simplify the linear system.\n        var sourceNumericalShiftX = x0;\n        var sourceNumericalShiftY = y0;\n        x0 = 0;\n        y0 = 0;\n        x1 -= sourceNumericalShiftX;\n        y1 -= sourceNumericalShiftY;\n        x2 -= sourceNumericalShiftX;\n        y2 -= sourceNumericalShiftY;\n        var augmentedMatrix = [\n            [x1, y1, 0, 0, u1 - u0],\n            [x2, y2, 0, 0, u2 - u0],\n            [0, 0, x1, y1, v1 - v0],\n            [0, 0, x2, y2, v2 - v0],\n        ];\n        var affineCoefs = solveLinearSystem(augmentedMatrix);\n        if (!affineCoefs) {\n            return;\n        }\n        context.save();\n        context.beginPath();\n        if (isBrokenDiagonalRendering() ||\n            opt_contextOptions === IMAGE_SMOOTHING_DISABLED) {\n            // Make sure that all lines are horizontal or vertical\n            context.moveTo(u1, v1);\n            // This is the diagonal line. Do it in 4 steps\n            var steps = 4;\n            var ud = u0 - u1;\n            var vd = v0 - v1;\n            for (var step = 0; step < steps; step++) {\n                // Go horizontally\n                context.lineTo(u1 + pixelRound(((step + 1) * ud) / steps), v1 + pixelRound((step * vd) / (steps - 1)));\n                // Go vertically\n                if (step != steps - 1) {\n                    context.lineTo(u1 + pixelRound(((step + 1) * ud) / steps), v1 + pixelRound(((step + 1) * vd) / (steps - 1)));\n                }\n            }\n            // We are almost at u0r, v0r\n            context.lineTo(u2, v2);\n        }\n        else {\n            context.moveTo(u1, v1);\n            context.lineTo(u0, v0);\n            context.lineTo(u2, v2);\n        }\n        context.clip();\n        context.transform(affineCoefs[0], affineCoefs[2], affineCoefs[1], affineCoefs[3], u0, v0);\n        context.translate(sourceDataExtent[0] - sourceNumericalShiftX, sourceDataExtent[3] - sourceNumericalShiftY);\n        context.scale(sourceResolution / pixelRatio, -sourceResolution / pixelRatio);\n        context.drawImage(stitchContext.canvas, 0, 0);\n        context.restore();\n    });\n    if (opt_renderEdges) {\n        context.save();\n        context.globalCompositeOperation = 'source-over';\n        context.strokeStyle = 'black';\n        context.lineWidth = 1;\n        triangulation.getTriangles().forEach(function (triangle, i, arr) {\n            var target = triangle.target;\n            var u0 = (target[0][0] - targetTopLeft[0]) / targetResolution;\n            var v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;\n            var u1 = (target[1][0] - targetTopLeft[0]) / targetResolution;\n            var v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;\n            var u2 = (target[2][0] - targetTopLeft[0]) / targetResolution;\n            var v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;\n            context.beginPath();\n            context.moveTo(u1, v1);\n            context.lineTo(u0, v0);\n            context.lineTo(u2, v2);\n            context.closePath();\n            context.stroke();\n        });\n        context.restore();\n    }\n    return context.canvas;\n}\n//# sourceMappingURL=reproj.js.map","/**\n * @module ol/reproj/Triangulation\n */\nimport { boundingExtent, createEmpty, extendCoordinate, getArea, getBottomLeft, getBottomRight, getTopLeft, getTopRight, getWidth, intersects, } from '../extent.js';\nimport { getTransform } from '../proj.js';\nimport { log2, modulo } from '../math.js';\n/**\n * Single triangle; consists of 3 source points and 3 target points.\n * @typedef {Object} Triangle\n * @property {Array<import(\"../coordinate.js\").Coordinate>} source\n * @property {Array<import(\"../coordinate.js\").Coordinate>} target\n */\n/**\n * Maximum number of subdivision steps during raster reprojection triangulation.\n * Prevents high memory usage and large number of proj4 calls (for certain\n * transformations and areas). At most `2*(2^this)` triangles are created for\n * each triangulated extent (tile/image).\n * @type {number}\n */\nvar MAX_SUBDIVISION = 10;\n/**\n * Maximum allowed size of triangle relative to world width. When transforming\n * corners of world extent between certain projections, the resulting\n * triangulation seems to have zero error and no subdivision is performed. If\n * the triangle width is more than this (relative to world width; 0-1),\n * subdivison is forced (up to `MAX_SUBDIVISION`). Default is `0.25`.\n * @type {number}\n */\nvar MAX_TRIANGLE_WIDTH = 0.25;\n/**\n * @classdesc\n * Class containing triangulation of the given target extent.\n * Used for determining source data and the reprojection itself.\n */\nvar Triangulation = /** @class */ (function () {\n    /**\n     * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection.\n     * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n     * @param {import(\"../extent.js\").Extent} targetExtent Target extent to triangulate.\n     * @param {import(\"../extent.js\").Extent} maxSourceExtent Maximal source extent that can be used.\n     * @param {number} errorThreshold Acceptable error (in source units).\n     * @param {?number} opt_destinationResolution The (optional) resolution of the destination.\n     */\n    function Triangulation(sourceProj, targetProj, targetExtent, maxSourceExtent, errorThreshold, opt_destinationResolution) {\n        /**\n         * @type {import(\"../proj/Projection.js\").default}\n         * @private\n         */\n        this.sourceProj_ = sourceProj;\n        /**\n         * @type {import(\"../proj/Projection.js\").default}\n         * @private\n         */\n        this.targetProj_ = targetProj;\n        /** @type {!Object<string, import(\"../coordinate.js\").Coordinate>} */\n        var transformInvCache = {};\n        var transformInv = getTransform(this.targetProj_, this.sourceProj_);\n        /**\n         * @param {import(\"../coordinate.js\").Coordinate} c A coordinate.\n         * @return {import(\"../coordinate.js\").Coordinate} Transformed coordinate.\n         * @private\n         */\n        this.transformInv_ = function (c) {\n            var key = c[0] + '/' + c[1];\n            if (!transformInvCache[key]) {\n                transformInvCache[key] = transformInv(c);\n            }\n            return transformInvCache[key];\n        };\n        /**\n         * @type {import(\"../extent.js\").Extent}\n         * @private\n         */\n        this.maxSourceExtent_ = maxSourceExtent;\n        /**\n         * @type {number}\n         * @private\n         */\n        this.errorThresholdSquared_ = errorThreshold * errorThreshold;\n        /**\n         * @type {Array<Triangle>}\n         * @private\n         */\n        this.triangles_ = [];\n        /**\n         * Indicates that the triangulation crosses edge of the source projection.\n         * @type {boolean}\n         * @private\n         */\n        this.wrapsXInSource_ = false;\n        /**\n         * @type {boolean}\n         * @private\n         */\n        this.canWrapXInSource_ =\n            this.sourceProj_.canWrapX() &&\n                !!maxSourceExtent &&\n                !!this.sourceProj_.getExtent() &&\n                getWidth(maxSourceExtent) == getWidth(this.sourceProj_.getExtent());\n        /**\n         * @type {?number}\n         * @private\n         */\n        this.sourceWorldWidth_ = this.sourceProj_.getExtent()\n            ? getWidth(this.sourceProj_.getExtent())\n            : null;\n        /**\n         * @type {?number}\n         * @private\n         */\n        this.targetWorldWidth_ = this.targetProj_.getExtent()\n            ? getWidth(this.targetProj_.getExtent())\n            : null;\n        var destinationTopLeft = getTopLeft(targetExtent);\n        var destinationTopRight = getTopRight(targetExtent);\n        var destinationBottomRight = getBottomRight(targetExtent);\n        var destinationBottomLeft = getBottomLeft(targetExtent);\n        var sourceTopLeft = this.transformInv_(destinationTopLeft);\n        var sourceTopRight = this.transformInv_(destinationTopRight);\n        var sourceBottomRight = this.transformInv_(destinationBottomRight);\n        var sourceBottomLeft = this.transformInv_(destinationBottomLeft);\n        /*\n         * The maxSubdivision controls how many splittings of the target area can\n         * be done. The idea here is to do a linear mapping of the target areas\n         * but the actual overal reprojection (can be) extremely non-linear. The\n         * default value of MAX_SUBDIVISION was chosen based on mapping a 256x256\n         * tile size. However this function is also called to remap canvas rendered\n         * layers which can be much larger. This calculation increases the maxSubdivision\n         * value by the right factor so that each 256x256 pixel area has\n         * MAX_SUBDIVISION divisions.\n         */\n        var maxSubdivision = MAX_SUBDIVISION +\n            (opt_destinationResolution\n                ? Math.max(0, Math.ceil(log2(getArea(targetExtent) /\n                    (opt_destinationResolution *\n                        opt_destinationResolution *\n                        256 *\n                        256))))\n                : 0);\n        this.addQuad_(destinationTopLeft, destinationTopRight, destinationBottomRight, destinationBottomLeft, sourceTopLeft, sourceTopRight, sourceBottomRight, sourceBottomLeft, maxSubdivision);\n        if (this.wrapsXInSource_) {\n            var leftBound_1 = Infinity;\n            this.triangles_.forEach(function (triangle, i, arr) {\n                leftBound_1 = Math.min(leftBound_1, triangle.source[0][0], triangle.source[1][0], triangle.source[2][0]);\n            });\n            // Shift triangles to be as close to `leftBound` as possible\n            // (if the distance is more than `worldWidth / 2` it can be closer.\n            this.triangles_.forEach(function (triangle) {\n                if (Math.max(triangle.source[0][0], triangle.source[1][0], triangle.source[2][0]) -\n                    leftBound_1 >\n                    this.sourceWorldWidth_ / 2) {\n                    var newTriangle = [\n                        [triangle.source[0][0], triangle.source[0][1]],\n                        [triangle.source[1][0], triangle.source[1][1]],\n                        [triangle.source[2][0], triangle.source[2][1]],\n                    ];\n                    if (newTriangle[0][0] - leftBound_1 > this.sourceWorldWidth_ / 2) {\n                        newTriangle[0][0] -= this.sourceWorldWidth_;\n                    }\n                    if (newTriangle[1][0] - leftBound_1 > this.sourceWorldWidth_ / 2) {\n                        newTriangle[1][0] -= this.sourceWorldWidth_;\n                    }\n                    if (newTriangle[2][0] - leftBound_1 > this.sourceWorldWidth_ / 2) {\n                        newTriangle[2][0] -= this.sourceWorldWidth_;\n                    }\n                    // Rarely (if the extent contains both the dateline and prime meridian)\n                    // the shift can in turn break some triangles.\n                    // Detect this here and don't shift in such cases.\n                    var minX = Math.min(newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);\n                    var maxX = Math.max(newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);\n                    if (maxX - minX < this.sourceWorldWidth_ / 2) {\n                        triangle.source = newTriangle;\n                    }\n                }\n            }.bind(this));\n        }\n        transformInvCache = {};\n    }\n    /**\n     * Adds triangle to the triangulation.\n     * @param {import(\"../coordinate.js\").Coordinate} a The target a coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} b The target b coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} c The target c coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} aSrc The source a coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} bSrc The source b coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} cSrc The source c coordinate.\n     * @private\n     */\n    Triangulation.prototype.addTriangle_ = function (a, b, c, aSrc, bSrc, cSrc) {\n        this.triangles_.push({\n            source: [aSrc, bSrc, cSrc],\n            target: [a, b, c],\n        });\n    };\n    /**\n     * Adds quad (points in clock-wise order) to the triangulation\n     * (and reprojects the vertices) if valid.\n     * Performs quad subdivision if needed to increase precision.\n     *\n     * @param {import(\"../coordinate.js\").Coordinate} a The target a coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} b The target b coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} c The target c coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} d The target d coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} aSrc The source a coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} bSrc The source b coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} cSrc The source c coordinate.\n     * @param {import(\"../coordinate.js\").Coordinate} dSrc The source d coordinate.\n     * @param {number} maxSubdivision Maximal allowed subdivision of the quad.\n     * @private\n     */\n    Triangulation.prototype.addQuad_ = function (a, b, c, d, aSrc, bSrc, cSrc, dSrc, maxSubdivision) {\n        var sourceQuadExtent = boundingExtent([aSrc, bSrc, cSrc, dSrc]);\n        var sourceCoverageX = this.sourceWorldWidth_\n            ? getWidth(sourceQuadExtent) / this.sourceWorldWidth_\n            : null;\n        var sourceWorldWidth = /** @type {number} */ (this.sourceWorldWidth_);\n        // when the quad is wrapped in the source projection\n        // it covers most of the projection extent, but not fully\n        var wrapsX = this.sourceProj_.canWrapX() &&\n            sourceCoverageX > 0.5 &&\n            sourceCoverageX < 1;\n        var needsSubdivision = false;\n        if (maxSubdivision > 0) {\n            if (this.targetProj_.isGlobal() && this.targetWorldWidth_) {\n                var targetQuadExtent = boundingExtent([a, b, c, d]);\n                var targetCoverageX = getWidth(targetQuadExtent) / this.targetWorldWidth_;\n                needsSubdivision =\n                    targetCoverageX > MAX_TRIANGLE_WIDTH || needsSubdivision;\n            }\n            if (!wrapsX && this.sourceProj_.isGlobal() && sourceCoverageX) {\n                needsSubdivision =\n                    sourceCoverageX > MAX_TRIANGLE_WIDTH || needsSubdivision;\n            }\n        }\n        if (!needsSubdivision && this.maxSourceExtent_) {\n            if (isFinite(sourceQuadExtent[0]) &&\n                isFinite(sourceQuadExtent[1]) &&\n                isFinite(sourceQuadExtent[2]) &&\n                isFinite(sourceQuadExtent[3])) {\n                if (!intersects(sourceQuadExtent, this.maxSourceExtent_)) {\n                    // whole quad outside source projection extent -> ignore\n                    return;\n                }\n            }\n        }\n        var isNotFinite = 0;\n        if (!needsSubdivision) {\n            if (!isFinite(aSrc[0]) ||\n                !isFinite(aSrc[1]) ||\n                !isFinite(bSrc[0]) ||\n                !isFinite(bSrc[1]) ||\n                !isFinite(cSrc[0]) ||\n                !isFinite(cSrc[1]) ||\n                !isFinite(dSrc[0]) ||\n                !isFinite(dSrc[1])) {\n                if (maxSubdivision > 0) {\n                    needsSubdivision = true;\n                }\n                else {\n                    // It might be the case that only 1 of the points is infinite. In this case\n                    // we can draw a single triangle with the other three points\n                    isNotFinite =\n                        (!isFinite(aSrc[0]) || !isFinite(aSrc[1]) ? 8 : 0) +\n                            (!isFinite(bSrc[0]) || !isFinite(bSrc[1]) ? 4 : 0) +\n                            (!isFinite(cSrc[0]) || !isFinite(cSrc[1]) ? 2 : 0) +\n                            (!isFinite(dSrc[0]) || !isFinite(dSrc[1]) ? 1 : 0);\n                    if (isNotFinite != 1 &&\n                        isNotFinite != 2 &&\n                        isNotFinite != 4 &&\n                        isNotFinite != 8) {\n                        return;\n                    }\n                }\n            }\n        }\n        if (maxSubdivision > 0) {\n            if (!needsSubdivision) {\n                var center = [(a[0] + c[0]) / 2, (a[1] + c[1]) / 2];\n                var centerSrc = this.transformInv_(center);\n                var dx = void 0;\n                if (wrapsX) {\n                    var centerSrcEstimX = (modulo(aSrc[0], sourceWorldWidth) +\n                        modulo(cSrc[0], sourceWorldWidth)) /\n                        2;\n                    dx = centerSrcEstimX - modulo(centerSrc[0], sourceWorldWidth);\n                }\n                else {\n                    dx = (aSrc[0] + cSrc[0]) / 2 - centerSrc[0];\n                }\n                var dy = (aSrc[1] + cSrc[1]) / 2 - centerSrc[1];\n                var centerSrcErrorSquared = dx * dx + dy * dy;\n                needsSubdivision = centerSrcErrorSquared > this.errorThresholdSquared_;\n            }\n            if (needsSubdivision) {\n                if (Math.abs(a[0] - c[0]) <= Math.abs(a[1] - c[1])) {\n                    // split horizontally (top & bottom)\n                    var bc = [(b[0] + c[0]) / 2, (b[1] + c[1]) / 2];\n                    var bcSrc = this.transformInv_(bc);\n                    var da = [(d[0] + a[0]) / 2, (d[1] + a[1]) / 2];\n                    var daSrc = this.transformInv_(da);\n                    this.addQuad_(a, b, bc, da, aSrc, bSrc, bcSrc, daSrc, maxSubdivision - 1);\n                    this.addQuad_(da, bc, c, d, daSrc, bcSrc, cSrc, dSrc, maxSubdivision - 1);\n                }\n                else {\n                    // split vertically (left & right)\n                    var ab = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];\n                    var abSrc = this.transformInv_(ab);\n                    var cd = [(c[0] + d[0]) / 2, (c[1] + d[1]) / 2];\n                    var cdSrc = this.transformInv_(cd);\n                    this.addQuad_(a, ab, cd, d, aSrc, abSrc, cdSrc, dSrc, maxSubdivision - 1);\n                    this.addQuad_(ab, b, c, cd, abSrc, bSrc, cSrc, cdSrc, maxSubdivision - 1);\n                }\n                return;\n            }\n        }\n        if (wrapsX) {\n            if (!this.canWrapXInSource_) {\n                return;\n            }\n            this.wrapsXInSource_ = true;\n        }\n        // Exactly zero or one of *Src is not finite\n        // The triangles must have the diagonal line as the first side\n        // This is to allow easy code in reproj.s to make it straight for broken\n        // browsers that can't handle diagonal clipping\n        if ((isNotFinite & 0xb) == 0) {\n            this.addTriangle_(a, c, d, aSrc, cSrc, dSrc);\n        }\n        if ((isNotFinite & 0xe) == 0) {\n            this.addTriangle_(a, c, b, aSrc, cSrc, bSrc);\n        }\n        if (isNotFinite) {\n            // Try the other two triangles\n            if ((isNotFinite & 0xd) == 0) {\n                this.addTriangle_(b, d, a, bSrc, dSrc, aSrc);\n            }\n            if ((isNotFinite & 0x7) == 0) {\n                this.addTriangle_(b, d, c, bSrc, dSrc, cSrc);\n            }\n        }\n    };\n    /**\n     * Calculates extent of the 'source' coordinates from all the triangles.\n     *\n     * @return {import(\"../extent.js\").Extent} Calculated extent.\n     */\n    Triangulation.prototype.calculateSourceExtent = function () {\n        var extent = createEmpty();\n        this.triangles_.forEach(function (triangle, i, arr) {\n            var src = triangle.source;\n            extendCoordinate(extent, src[0]);\n            extendCoordinate(extent, src[1]);\n            extendCoordinate(extent, src[2]);\n        });\n        return extent;\n    };\n    /**\n     * @return {Array<Triangle>} Array of the calculated triangles.\n     */\n    Triangulation.prototype.getTriangles = function () {\n        return this.triangles_;\n    };\n    return Triangulation;\n}());\nexport default Triangulation;\n//# sourceMappingURL=Triangulation.js.map","/**\n * Collision module.\n */\nimport { calculatePosition } from './position';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar parentDocument;\nvar targetContainer;\nexport function fit(element, viewPortElement, axis, position) {\n    if (viewPortElement === void 0) { viewPortElement = null; }\n    if (axis === void 0) { axis = { X: false, Y: false }; }\n    if (!axis.Y && !axis.X) {\n        return { left: 0, top: 0 };\n    }\n    var elemData = element.getBoundingClientRect();\n    targetContainer = viewPortElement;\n    parentDocument = element.ownerDocument;\n    if (!position) {\n        position = calculatePosition(element, 'left', 'top');\n    }\n    if (axis.X) {\n        var containerWidth = targetContainer ? getTargetContainerWidth() : getViewPortWidth();\n        var containerLeft = ContainerLeft();\n        var containerRight = ContainerRight();\n        var overLeft = containerLeft - position.left;\n        var overRight = position.left + elemData.width - containerRight;\n        if (elemData.width > containerWidth) {\n            if (overLeft > 0 && overRight <= 0) {\n                position.left = containerRight - elemData.width;\n            }\n            else if (overRight > 0 && overLeft <= 0) {\n                position.left = containerLeft;\n            }\n            else {\n                position.left = overLeft > overRight ? (containerRight - elemData.width) : containerLeft;\n            }\n        }\n        else if (overLeft > 0) {\n            position.left += overLeft;\n        }\n        else if (overRight > 0) {\n            position.left -= overRight;\n        }\n    }\n    if (axis.Y) {\n        var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n        var containerTop = ContainerTop();\n        var containerBottom = ContainerBottom();\n        var overTop = containerTop - position.top;\n        var overBottom = position.top + elemData.height - containerBottom;\n        if (elemData.height > containerHeight) {\n            if (overTop > 0 && overBottom <= 0) {\n                position.top = containerBottom - elemData.height;\n            }\n            else if (overBottom > 0 && overTop <= 0) {\n                position.top = containerTop;\n            }\n            else {\n                position.top = overTop > overBottom ? (containerBottom - elemData.height) : containerTop;\n            }\n        }\n        else if (overTop > 0) {\n            position.top += overTop;\n        }\n        else if (overBottom > 0) {\n            position.top -= overBottom;\n        }\n    }\n    return position;\n}\nexport function isCollide(element, viewPortElement, x, y) {\n    if (viewPortElement === void 0) { viewPortElement = null; }\n    var elemOffset = calculatePosition(element, 'left', 'top');\n    if (x) {\n        elemOffset.left = x;\n    }\n    if (y) {\n        elemOffset.top = y;\n    }\n    var data = [];\n    targetContainer = viewPortElement;\n    parentDocument = element.ownerDocument;\n    var elementRect = element.getBoundingClientRect();\n    var top = elemOffset.top;\n    var left = elemOffset.left;\n    var right = elemOffset.left + elementRect.width;\n    var bottom = elemOffset.top + elementRect.height;\n    var topData = '';\n    var leftData = '';\n    var yAxis = topCollideCheck(top, bottom);\n    var xAxis = leftCollideCheck(left, right);\n    if (yAxis.topSide) {\n        data.push('top');\n    }\n    if (xAxis.rightSide) {\n        data.push('right');\n    }\n    if (xAxis.leftSide) {\n        data.push('left');\n    }\n    if (yAxis.bottomSide) {\n        data.push('bottom');\n    }\n    return data;\n}\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, axis, fixedParent) {\n    if (viewPortElement === void 0) { viewPortElement = null; }\n    if (axis === void 0) { axis = { X: true, Y: true }; }\n    if (!target || !element || !positionX || !positionY || (!axis.X && !axis.Y)) {\n        return;\n    }\n    var tEdge = { TL: null,\n        TR: null,\n        BL: null,\n        BR: null };\n    var eEdge = {\n        TL: null,\n        TR: null,\n        BL: null,\n        BR: null\n    };\n    var oldVisibility = element.style.visibility;\n    element.style.visibility = 'hidden';\n    element.style.display = 'block';\n    var elementRect = element.getBoundingClientRect();\n    element.style.removeProperty('display');\n    element.style.visibility = oldVisibility;\n    var pos = {\n        posX: positionX, posY: positionY, offsetX: offsetX, offsetY: offsetY, position: { left: 0, top: 0 }\n    };\n    targetContainer = viewPortElement;\n    parentDocument = target.ownerDocument;\n    updateElementData(target, tEdge, pos, fixedParent, elementRect);\n    setPosition(eEdge, pos, elementRect);\n    if (axis.X) {\n        leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n    }\n    if (axis.Y && tEdge.TL.top > -1) {\n        topFlip(target, eEdge, tEdge, pos, elementRect, true);\n    }\n    setPopup(element, pos, elementRect);\n}\nfunction setPopup(element, pos, elementRect) {\n    var left = 0;\n    var top = 0;\n    if (element.offsetParent != null\n        && (getComputedStyle(element.offsetParent).position === 'absolute' ||\n            getComputedStyle(element.offsetParent).position === 'relative')) {\n        var data = calculatePosition(element.offsetParent, 'left', 'top', false, elementRect);\n        left = data.left;\n        top = data.top;\n    }\n    element.style.top = (pos.position.top + pos.offsetY - (top)) + 'px';\n    element.style.left = (pos.position.left + pos.offsetX - (left)) + 'px';\n}\nfunction updateElementData(target, edge, pos, fixedParent, elementRect) {\n    pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent, elementRect);\n    edge.TL = calculatePosition(target, 'left', 'top', fixedParent, elementRect);\n    edge.TR = calculatePosition(target, 'right', 'top', fixedParent, elementRect);\n    edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent, elementRect);\n    edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent, elementRect);\n}\nfunction setPosition(eStatus, pos, elementRect) {\n    eStatus.TL = { top: pos.position.top + pos.offsetY, left: pos.position.left + pos.offsetX };\n    eStatus.TR = { top: eStatus.TL.top, left: eStatus.TL.left + elementRect.width };\n    eStatus.BL = { top: eStatus.TL.top + elementRect.height,\n        left: eStatus.TL.left };\n    eStatus.BR = { top: eStatus.TL.top + elementRect.height,\n        left: eStatus.TL.left + elementRect.width };\n}\nfunction leftCollideCheck(left, right) {\n    var leftSide = false;\n    var rightSide = false;\n    if (((left - getBodyScrollLeft()) < ContainerLeft())) {\n        leftSide = true;\n    }\n    if (right > ContainerRight()) {\n        rightSide = true;\n    }\n    return { leftSide: leftSide, rightSide: rightSide };\n}\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n    var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n    if ((tEdge.TL.left - getBodyScrollLeft()) <= ContainerLeft()) {\n        collideSide.leftSide = false;\n    }\n    if (tEdge.TR.left >= ContainerRight()) {\n        collideSide.rightSide = false;\n    }\n    if ((collideSide.leftSide && !collideSide.rightSide) || (!collideSide.leftSide && collideSide.rightSide)) {\n        if (pos.posX === 'right') {\n            pos.posX = 'left';\n        }\n        else {\n            pos.posX = 'right';\n        }\n        pos.offsetX = pos.offsetX + elementRect.width;\n        pos.offsetX = -1 * pos.offsetX;\n        pos.position = calculatePosition(target, pos.posX, pos.posY, false);\n        setPosition(edge, pos, elementRect);\n        if (deepCheck) {\n            leftFlip(target, edge, tEdge, pos, elementRect, false);\n        }\n    }\n}\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n    var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n    if ((tEdge.TL.top - getBodyScrollTop()) <= ContainerTop()) {\n        collideSide.topSide = false;\n    }\n    if (tEdge.BL.top >= ContainerBottom() && target.getBoundingClientRect().bottom < window.innerHeight) {\n        collideSide.bottomSide = false;\n    }\n    if ((collideSide.topSide && !collideSide.bottomSide) || (!collideSide.topSide && collideSide.bottomSide)) {\n        if (pos.posY === 'top') {\n            pos.posY = 'bottom';\n        }\n        else {\n            pos.posY = 'top';\n        }\n        pos.offsetY = pos.offsetY + elementRect.height;\n        pos.offsetY = -1 * pos.offsetY;\n        pos.position = calculatePosition(target, pos.posX, pos.posY, false, elementRect);\n        setPosition(edge, pos, elementRect);\n        if (deepCheck) {\n            topFlip(target, edge, tEdge, pos, elementRect, false);\n        }\n    }\n}\nfunction topCollideCheck(top, bottom) {\n    var topSide = false;\n    var bottomSide = false;\n    if ((top - getBodyScrollTop()) < ContainerTop()) {\n        topSide = true;\n    }\n    if (bottom > ContainerBottom()) {\n        bottomSide = true;\n    }\n    return { topSide: topSide, bottomSide: bottomSide };\n}\nfunction getTargetContainerWidth() {\n    return targetContainer.getBoundingClientRect().width;\n}\nfunction getTargetContainerHeight() {\n    return targetContainer.getBoundingClientRect().height;\n}\nfunction getTargetContainerLeft() {\n    return targetContainer.getBoundingClientRect().left;\n}\nfunction getTargetContainerTop() {\n    return targetContainer.getBoundingClientRect().top;\n}\nfunction ContainerTop() {\n    if (targetContainer) {\n        return getTargetContainerTop();\n    }\n    return 0;\n}\nfunction ContainerLeft() {\n    if (targetContainer) {\n        return getTargetContainerLeft();\n    }\n    return 0;\n}\nfunction ContainerRight() {\n    if (targetContainer) {\n        return (getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth());\n    }\n    return (getBodyScrollLeft() + getViewPortWidth());\n}\nfunction ContainerBottom() {\n    if (targetContainer) {\n        return (getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight());\n    }\n    return (getBodyScrollTop() + getViewPortHeight());\n}\nfunction getBodyScrollTop() {\n    // if(targetContainer)\n    //     return targetContainer.scrollTop;\n    return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\nfunction getBodyScrollLeft() {\n    // if(targetContainer)\n    //     return targetContainer.scrollLeft;\n    return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\nfunction getViewPortHeight() {\n    return window.innerHeight;\n}\nfunction getViewPortWidth() {\n    var windowWidth = window.innerWidth;\n    var offsetWidth = (isNullOrUndefined(document.documentElement)) ? 0 : document.documentElement.offsetWidth;\n    return windowWidth - (windowWidth - offsetWidth);\n}\n","import { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n    RTL: 'e-rtl',\n    DISABLE: 'e-disabled',\n    INPUT: 'e-input',\n    TEXTAREA: 'e-multi-line-input',\n    INPUTGROUP: 'e-input-group',\n    FLOATINPUT: 'e-float-input',\n    FLOATLINE: 'e-float-line',\n    FLOATTEXT: 'e-float-text',\n    CLEARICON: 'e-clear-icon',\n    CLEARICONHIDE: 'e-clear-icon-hide',\n    LABELTOP: 'e-label-top',\n    LABELBOTTOM: 'e-label-bottom',\n    NOFLOATLABEL: 'e-no-float-label',\n    INPUTCUSTOMTAG: 'e-input-custom-tag',\n    FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\nexport var Input;\n(function (Input) {\n    var privateInputObj = {\n        container: null,\n        buttons: [],\n        clearButton: null\n    };\n    var floatType;\n    /**\n     * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n     * ```\n     * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n     * ```\n     * @param args\n     */\n    function createInput(args, internalCreateElement) {\n        var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n        var inputObject = { container: null, buttons: [], clearButton: null };\n        floatType = args.floatLabelType;\n        if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n            inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n            args.element.parentNode.insertBefore(inputObject.container, args.element);\n            addClass([args.element], CLASSNAMES.INPUT);\n            inputObject.container.appendChild(args.element);\n        }\n        else {\n            createFloatingInput(args, inputObject, makeElement);\n        }\n        bindInitialEvent(args);\n        if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) &&\n            args.properties.showClearButton && args.element.tagName !== 'TEXTAREA') {\n            setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n            inputObject.clearButton.setAttribute('role', 'button');\n            if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n                addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n            }\n        }\n        if (!isNullOrUndefined(args.buttons) && args.element.tagName !== 'TEXTAREA') {\n            for (var i = 0; i < args.buttons.length; i++) {\n                inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n            }\n        }\n        if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n            addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n        }\n        validateInputType(inputObject.container, args.element);\n        inputObject = setPropertyValue(args, inputObject);\n        privateInputObj = inputObject;\n        return inputObject;\n    }\n    Input.createInput = createInput;\n    function bindInitialEvent(args) {\n        checkInputValue(args.floatLabelType, args.element);\n        args.element.addEventListener('focus', function () {\n            var parent = getParentNode(this);\n            if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n                || parent.classList.contains('e-filled')) {\n                parent.classList.add('e-input-focus');\n            }\n        });\n        args.element.addEventListener('blur', function () {\n            var parent = getParentNode(this);\n            if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n                || parent.classList.contains('e-filled')) {\n                parent.classList.remove('e-input-focus');\n            }\n        });\n        args.element.addEventListener('input', function () {\n            checkInputValue(floatType, args.element);\n        });\n    }\n    Input.bindInitialEvent = bindInitialEvent;\n    function checkInputValue(floatLabelType, inputElement) {\n        var inputValue = inputElement.value;\n        if (inputValue !== '' && !isNullOrUndefined(inputValue) && inputElement.parentElement) {\n            inputElement.parentElement.classList.add('e-valid-input');\n        }\n        else if (floatLabelType !== 'Always' && inputElement.parentElement) {\n            inputElement.parentElement.classList.remove('e-valid-input');\n        }\n    }\n    function _focusFn() {\n        var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n        if (!isNullOrUndefined(label)) {\n            addClass([label], CLASSNAMES.LABELTOP);\n            if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n                removeClass([label], CLASSNAMES.LABELBOTTOM);\n            }\n        }\n    }\n    function _blurFn() {\n        var parent = getParentNode(this);\n        if ((parent.getElementsByTagName('textarea')[0]) ? parent.getElementsByTagName('textarea')[0].value === '' :\n            parent.getElementsByTagName('input')[0].value === '') {\n            var label = parent.getElementsByClassName('e-float-text')[0];\n            if (!isNullOrUndefined(label)) {\n                if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n                    removeClass([label], CLASSNAMES.LABELTOP);\n                }\n                addClass([label], CLASSNAMES.LABELBOTTOM);\n            }\n        }\n    }\n    function wireFloatingEvents(element) {\n        element.addEventListener('focus', _focusFn);\n        element.addEventListener('blur', _blurFn);\n    }\n    Input.wireFloatingEvents = wireFloatingEvents;\n    function unwireFloatingEvents(element) {\n        element.removeEventListener('focus', _focusFn);\n        element.removeEventListener('blur', _blurFn);\n    }\n    function createFloatingInput(args, inputObject, internalCreateElement) {\n        var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n        var inputElement;\n        var floatLinelement;\n        var floatLabelElement;\n        if (args.floatLabelType === 'Auto') {\n            wireFloatingEvents(args.element);\n        }\n        if (isNullOrUndefined(inputObject.container)) {\n            inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n            args.element.parentNode.insertBefore(inputObject.container, args.element);\n        }\n        else {\n            if (!isNullOrUndefined(args.customTag)) {\n                inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n            }\n            inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n        }\n        floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n        floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n        if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n            floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n            attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n        }\n        if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n            floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n            args.element.removeAttribute('placeholder');\n        }\n        if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n            args.properties.placeholder !== '') {\n            floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n        }\n        if (!floatLabelElement.innerText) {\n            inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n        }\n        if (inputObject.container.classList.contains('e-float-icon-left')) {\n            var inputWrap = inputObject.container.querySelector('.e-input-in-wrap');\n            inputWrap.appendChild(args.element);\n            inputWrap.appendChild(floatLinelement);\n            inputWrap.appendChild(floatLabelElement);\n        }\n        else {\n            inputObject.container.appendChild(args.element);\n            inputObject.container.appendChild(floatLinelement);\n            inputObject.container.appendChild(floatLabelElement);\n        }\n        updateLabelState(args.element.value, floatLabelElement);\n        if (args.floatLabelType === 'Always') {\n            if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n                removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n            }\n            addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n        }\n        if (args.floatLabelType === 'Auto') {\n            args.element.addEventListener('input', function (event) {\n                updateLabelState(args.element.value, floatLabelElement);\n            });\n            args.element.addEventListener('blur', function (event) {\n                updateLabelState(args.element.value, floatLabelElement);\n            });\n        }\n        if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n            floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n        }\n    }\n    function checkFloatLabelType(type, container) {\n        if (type === 'Always' && container.classList.contains('e-outline')) {\n            container.classList.add('e-valid-input');\n        }\n    }\n    function setPropertyValue(args, inputObject) {\n        if (!isNullOrUndefined(args.properties)) {\n            for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n                var prop = _a[_i];\n                switch (prop) {\n                    case 'cssClass':\n                        setCssClass(args.properties.cssClass, [inputObject.container]);\n                        checkFloatLabelType(args.floatLabelType, inputObject.container);\n                        break;\n                    case 'enabled':\n                        setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n                        break;\n                    case 'enableRtl':\n                        setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n                        break;\n                    case 'placeholder':\n                        setPlaceholder(args.properties.placeholder, args.element);\n                        break;\n                    case 'readonly':\n                        setReadonly(args.properties.readonly, args.element);\n                        break;\n                }\n            }\n        }\n        return inputObject;\n    }\n    function updateIconState(value, button) {\n        if (value) {\n            removeClass([button], CLASSNAMES.CLEARICONHIDE);\n        }\n        else {\n            addClass([button], CLASSNAMES.CLEARICONHIDE);\n        }\n    }\n    function updateLabelState(value, label) {\n        if (value) {\n            addClass([label], CLASSNAMES.LABELTOP);\n            if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n                removeClass([label], CLASSNAMES.LABELBOTTOM);\n            }\n        }\n        else {\n            if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n                removeClass([label], CLASSNAMES.LABELTOP);\n            }\n            addClass([label], CLASSNAMES.LABELBOTTOM);\n        }\n    }\n    function getParentNode(element) {\n        var parentNode = isNullOrUndefined(element.parentNode) ? element\n            : element.parentNode;\n        if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n            parentNode = parentNode.parentNode;\n        }\n        return parentNode;\n    }\n    /**\n     * To create clear button.\n     */\n    function createClearButton(element, inputObject, initial, internalCreateElement) {\n        var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n        var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n        var container = inputObject.container;\n        if (!isNullOrUndefined(initial)) {\n            container.appendChild(button);\n        }\n        else {\n            var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n                inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n            baseElement.insertAdjacentElement('afterend', button);\n        }\n        if (!isNullOrUndefined(container) &&\n            container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n            addClass([container], CLASSNAMES.INPUTGROUP);\n        }\n        addClass([button], CLASSNAMES.CLEARICONHIDE);\n        wireClearBtnEvents(element, button, container);\n        button.setAttribute('aria-label', 'close');\n        return button;\n    }\n    function wireClearBtnEvents(element, button, container) {\n        button.addEventListener('click', function (event) {\n            if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n                event.preventDefault();\n                if (element !== document.activeElement) {\n                    element.focus();\n                }\n                element.value = '';\n                addClass([button], CLASSNAMES.CLEARICONHIDE);\n            }\n        });\n        element.addEventListener('input', function (event) {\n            updateIconState(element.value, button);\n        });\n        element.addEventListener('focus', function (event) {\n            updateIconState(element.value, button);\n        });\n        element.addEventListener('blur', function (event) {\n            setTimeout(function () { addClass([button], CLASSNAMES.CLEARICONHIDE); }, 200);\n        });\n    }\n    Input.wireClearBtnEvents = wireClearBtnEvents;\n    function validateLabel(element, floatLabelType) {\n        var parent = getParentNode(element);\n        if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n            var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n            updateLabelState(element.value, label);\n        }\n    }\n    /**\n     * To create input box contianer.\n     */\n    function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n        var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n        var container;\n        if (!isNullOrUndefined(args.customTag)) {\n            container = makeElement(args.customTag, { className: className });\n            container.classList.add(tagClass);\n        }\n        else {\n            container = makeElement(tag, { className: className });\n        }\n        container.classList.add('e-control-wrapper');\n        return container;\n    }\n    function encodePlaceHolder(placeholder) {\n        var result = '';\n        if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n            var spanEle = document.createElement('span');\n            spanEle.innerHTML = '<input  placeholder=\"' + placeholder + '\"/>';\n            var hiddenInput = (spanEle.children[0]);\n            result = hiddenInput.placeholder;\n        }\n        return result;\n    }\n    /**\n     * Sets the value to the input element.\n     * ```\n     * E.g : Input.setValue('content', element, \"Auto\", true );\n     * ```\n     * @param value - Specify the value of the input element.\n     * @param element - The element on which the specified value is updated.\n     * @param floatLabelType - Specify the float label type of the input element.\n     * @param clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n     */\n    function setValue(value, element, floatLabelType, clearButton) {\n        element.value = value;\n        if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n            validateLabel(element, floatLabelType);\n        }\n        if (!isNullOrUndefined(clearButton) && clearButton) {\n            var parentElement = getParentNode(element);\n            if (!isNullOrUndefined(parentElement)) {\n                var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n                if (!isNullOrUndefined(button)) {\n                    if (element.value && parentElement.classList.contains('e-input-focus')) {\n                        removeClass([button], CLASSNAMES.CLEARICONHIDE);\n                    }\n                    else {\n                        addClass([button], CLASSNAMES.CLEARICONHIDE);\n                    }\n                }\n            }\n        }\n        checkInputValue(floatLabelType, element);\n    }\n    Input.setValue = setValue;\n    /**\n     * Sets the single or multiple cssClass to wrapper of input element.\n     * ```\n     * E.g : Input.setCssClass('e-custom-class', [element]);\n     * ```\n     * @param cssClass - Css class names which are needed to add.\n     * @param elements - The elements which are needed to add / remove classes.\n     * @param oldClass - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n     */\n    function setCssClass(cssClass, elements, oldClass) {\n        if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n            removeClass(elements, oldClass.split(' '));\n        }\n        if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n            addClass(elements, cssClass.split(' '));\n        }\n    }\n    Input.setCssClass = setCssClass;\n    /**\n     * Set the width to the wrapper of input element.\n     * ```\n     * E.g : Input.setWidth('200px', container);\n     * ```\n     * @param width - Width value which is need to add.\n     * @param container - The element on which the width is need to add.\n     */\n    function setWidth(width, container) {\n        if (typeof width === 'number') {\n            container.style.width = formatUnit(width);\n        }\n        else if (typeof width === 'string') {\n            container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n        }\n    }\n    Input.setWidth = setWidth;\n    /**\n     * Set the placeholder attribute to the input element.\n     * ```\n     * E.g : Input.setPlaceholder('Search here', element);\n     * ```\n     * @param placeholder - Placeholder value which is need to add.\n     * @param element - The element on which the placeholder is need to add.\n     */\n    function setPlaceholder(placeholder, element) {\n        var parentElement;\n        placeholder = encodePlaceHolder(placeholder);\n        parentElement = getParentNode(element);\n        if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n            if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n                parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n                parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n                element.removeAttribute('placeholder');\n            }\n            else {\n                parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n                parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n            }\n        }\n        else {\n            if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n                attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n            }\n            else {\n                element.removeAttribute('placeholder');\n                element.removeAttribute('aria-placeholder');\n            }\n        }\n    }\n    Input.setPlaceholder = setPlaceholder;\n    /**\n     * Set the read only attribute to the input element\n     * ```\n     * E.g : Input.setReadonly(true, element);\n     * ```\n     * @param isReadonly\n     * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n     * @param element\n     * - The element which is need to enable read only.\n     */\n    function setReadonly(isReadonly, element, floatLabelType) {\n        if (isReadonly) {\n            attributes(element, { readonly: '' });\n        }\n        else {\n            element.removeAttribute('readonly');\n        }\n        if (!isNullOrUndefined(floatLabelType)) {\n            validateLabel(element, floatLabelType);\n        }\n    }\n    Input.setReadonly = setReadonly;\n    /**\n     * Displays the element direction from right to left when its enabled.\n     * ```\n     * E.g : Input.setEnableRtl(true, [inputObj.container]);\n     * ```\n     * @param isRtl\n     * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n     * @param elements\n     * - The elements that are needed to enable/disable RTL.\n     */\n    function setEnableRtl(isRtl, elements) {\n        if (isRtl) {\n            addClass(elements, CLASSNAMES.RTL);\n        }\n        else {\n            removeClass(elements, CLASSNAMES.RTL);\n        }\n    }\n    Input.setEnableRtl = setEnableRtl;\n    /**\n     * Enables or disables the given input element.\n     * ```\n     * E.g : Input.setEnabled(false, element);\n     * ```\n     * @param isEnable\n     * - Boolean value to specify whether to enable or disable.\n     * @param element\n     * - Element to be enabled or disabled.\n     */\n    function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n        var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n        var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n        if (isEnable) {\n            element.classList.remove(CLASSNAMES.DISABLE);\n            removeAttributes(disabledAttrs, element);\n            if (considerWrapper) {\n                removeClass([inputContainer], CLASSNAMES.DISABLE);\n            }\n        }\n        else {\n            element.classList.add(CLASSNAMES.DISABLE);\n            addAttributes(disabledAttrs, element);\n            if (considerWrapper) {\n                addClass([inputContainer], CLASSNAMES.DISABLE);\n            }\n        }\n        if (!isNullOrUndefined(floatLabelType)) {\n            validateLabel(element, floatLabelType);\n        }\n    }\n    Input.setEnabled = setEnabled;\n    function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n        var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n        if (isClear) {\n            inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n        }\n        else {\n            remove(inputObject.clearButton);\n            inputObject.clearButton = null;\n        }\n    }\n    Input.setClearButton = setClearButton;\n    /**\n     * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n     * ```\n     * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n     * ```\n     * @param attrs\n     *  - Array of attributes which are need to removed from the element.\n     * @param element\n     *  - Element on which the attributes are needed to be removed.\n     */\n    function removeAttributes(attrs, element) {\n        for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n            var key = _a[_i];\n            var parentElement = void 0;\n            parentElement = getParentNode(element);\n            if (key === 'disabled') {\n                element.classList.remove(CLASSNAMES.DISABLE);\n            }\n            if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n                parentElement.classList.remove(CLASSNAMES.DISABLE);\n            }\n            if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n                parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n            }\n            else {\n                element.removeAttribute(key);\n            }\n        }\n    }\n    Input.removeAttributes = removeAttributes;\n    /**\n     * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n     * ```\n     * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n     * ```\n     * @param attrs\n     * - Array of attributes which is added to element.\n     * @param element\n     * - Element on which the attributes are needed to be added.\n     */\n    function addAttributes(attrs, element) {\n        for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n            var key = _a[_i];\n            var parentElement = void 0;\n            parentElement = getParentNode(element);\n            if (key === 'disabled') {\n                element.classList.add(CLASSNAMES.DISABLE);\n            }\n            if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n                parentElement.classList.add(CLASSNAMES.DISABLE);\n            }\n            if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n                parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n            }\n            else {\n                element.setAttribute(key, attrs[key]);\n            }\n        }\n    }\n    Input.addAttributes = addAttributes;\n    function removeFloating(input) {\n        var container = input.container;\n        if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n            var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') :\n                container.querySelector('input');\n            var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n            var clearButton = container.querySelector('.e-clear-icon') !== null;\n            detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n            detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n            classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n            unwireFloatingEvents(inputEle);\n            attributes(inputEle, { 'placeholder': placeholder });\n            inputEle.classList.add(CLASSNAMES.INPUT);\n            if (!clearButton && inputEle.tagName === 'INPUT') {\n                inputEle.removeAttribute('required');\n            }\n        }\n    }\n    Input.removeFloating = removeFloating;\n    function addFloating(input, type, placeholder, internalCreateElement) {\n        var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n        var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n        floatType = type;\n        if (type !== 'Never') {\n            var customTag = container.tagName;\n            customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n            var args = { element: input, floatLabelType: type, customTag: customTag, properties: { placeholder: placeholder } };\n            var iconEle = container.querySelector('.e-clear-icon');\n            var inputObj = { container: container };\n            input.classList.remove(CLASSNAMES.INPUT);\n            createFloatingInput(args, inputObj, makeElement);\n            var isPrependIcon = container.classList.contains('e-float-icon-left');\n            if (isNullOrUndefined(iconEle)) {\n                if (isPrependIcon) {\n                    var inputWrap = container.querySelector('.e-input-in-wrap');\n                    iconEle = inputWrap.querySelector('.e-input-group-icon');\n                }\n                else {\n                    iconEle = container.querySelector('.e-input-group-icon');\n                }\n            }\n            if (isNullOrUndefined(iconEle)) {\n                if (isPrependIcon) {\n                    iconEle = container.querySelector('.e-input-group-icon');\n                }\n                if (isNullOrUndefined(iconEle)) {\n                    container.classList.remove(CLASSNAMES.INPUTGROUP);\n                }\n            }\n            else {\n                var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n                var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n                var wrapper = isPrependIcon ? container.querySelector('.e-input-in-wrap') : container;\n                wrapper.insertBefore(input, iconEle);\n                wrapper.insertBefore(floatLine, iconEle);\n                wrapper.insertBefore(floatText, iconEle);\n            }\n        }\n        checkFloatLabelType(type, input.parentElement);\n    }\n    Input.addFloating = addFloating;\n    /**\n     * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n     * ```\n     * E.g : Input.setRipple(true, [inputObjects]);\n     * ```\n     * @param isRipple\n     * - Boolean value to specify whether to enable the ripple effect.\n     * @param inputObject\n     * - Specify the collection of input objects.\n     */\n    function setRipple(isRipple, inputObj) {\n        for (var i = 0; i < inputObj.length; i++) {\n            _internalRipple(isRipple, inputObj[i].container);\n        }\n    }\n    Input.setRipple = setRipple;\n    function _internalRipple(isRipple, container, button) {\n        var argsButton = [];\n        argsButton.push(button);\n        var buttons = isNullOrUndefined(button) ?\n            container.querySelectorAll('.e-input-group-icon') : argsButton;\n        if (isRipple && buttons.length > 0) {\n            for (var index = 0; index < buttons.length; index++) {\n                buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n                buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n            }\n        }\n        else if (buttons.length > 0) {\n            for (var index = 0; index < buttons.length; index++) {\n                buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n                buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n            }\n        }\n    }\n    function _onMouseRipple(container, button) {\n        if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n            button.classList.add('e-input-btn-ripple');\n        }\n    }\n    function _onMouseDownRipple() {\n        var ele = this;\n        var parentEle = this.parentElement;\n        while (!parentEle.classList.contains('e-input-group')) {\n            parentEle = parentEle.parentElement;\n        }\n        _onMouseRipple(parentEle, ele);\n    }\n    function _onMouseUpRipple() {\n        var ele = this;\n        setTimeout(function () { ele.classList.remove('e-input-btn-ripple'); }, 500);\n    }\n    function createIconEle(iconClass, makeElement) {\n        var button = makeElement('span', { className: iconClass });\n        button.classList.add('e-input-group-icon');\n        return button;\n    }\n    /**\n     * Creates a new span element with the given icons added and append it in container element.\n     * ```\n     * E.g : Input.addIcon('append', 'e-icon-spin', inputObj.container, inputElement);\n     * ```\n     * @param position - Specify the icon placement on the input.Possible values are append and prepend.\n     * @param iconClass - Icon classes which are need to add to the span element which is going to created.\n     * Span element acts as icon or button element for input.\n     * @param container - The container on which created span element is going to append.\n     * @param inputElement - The inputElement on which created span element is going to prepend.\n     */\n    // tslint:disable\n    function addIcon(position, icons, container, input, internalCreate) {\n        // tslint:enable\n        var result = typeof (icons) === 'string' ? icons.split(',')\n            : icons;\n        if (position.toLowerCase() === 'append') {\n            for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n                var icon = result_1[_i];\n                appendSpan(icon, container, internalCreate);\n            }\n        }\n        else {\n            for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n                var icon = result_2[_a];\n                prependSpan(icon, container, input, internalCreate);\n            }\n        }\n    }\n    Input.addIcon = addIcon;\n    /**\n     * Creates a new span element with the given icons added and prepend it in input element.\n     * ```\n     * E.g : Input.prependSpan('e-icon-spin', inputObj.container, inputElement);\n     * ```\n     * @param iconClass - Icon classes which are need to add to the span element which is going to created.\n     * Span element acts as icon or button element for input.\n     * @param container - The container on which created span element is going to append.\n     * @param inputElement - The inputElement on which created span element is going to prepend.\n     */\n    // tslint:disable\n    function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n        // tslint:enable\n        var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n        var button = createIconEle(iconClass, makeElement);\n        container.classList.add('e-float-icon-left');\n        var innerWrapper = container.querySelector('.e-input-in-wrap');\n        if (isNullOrUndefined(innerWrapper)) {\n            innerWrapper = makeElement('span', { className: 'e-input-in-wrap' });\n            inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n            var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n            innerWrapper.appendChild(inputElement);\n            for (var i = 0; i < result.length; i++) {\n                innerWrapper.appendChild(result[i]);\n            }\n        }\n        innerWrapper.parentNode.insertBefore(button, innerWrapper);\n        if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n            container.classList.add(CLASSNAMES.INPUTGROUP);\n        }\n        _internalRipple(true, container, button);\n        return button;\n    }\n    Input.prependSpan = prependSpan;\n    /**\n     * Creates a new span element with the given icons added and append it in container element.\n     * ```\n     * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n     * ```\n     * @param iconClass - Icon classes which are need to add to the span element which is going to created.\n     * Span element acts as icon or button element for input.\n     * @param container - The container on which created span element is going to append.\n     */\n    function appendSpan(iconClass, container, internalCreateElement) {\n        var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n        var button = createIconEle(iconClass, makeElement);\n        if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n            container.classList.add(CLASSNAMES.INPUTGROUP);\n        }\n        var wrap = (container.classList.contains('e-float-icon-left')) ? container.querySelector('.e-input-in-wrap') :\n            container;\n        wrap.appendChild(button);\n        _internalRipple(true, container, button);\n        return button;\n    }\n    Input.appendSpan = appendSpan;\n    function validateInputType(containerElement, input) {\n        if (input.type === 'hidden') {\n            containerElement.classList.add('e-hidden');\n        }\n        else if (containerElement.classList.contains('e-hidden')) {\n            containerElement.classList.remove('e-hidden');\n        }\n    }\n    Input.validateInputType = validateInputType;\n})(Input || (Input = {}));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/Tile\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport TileState from './TileState.js';\nimport { abstract } from './util.js';\nimport { easeIn } from './easing.js';\n/**\n * A function that takes an {@link module:ol/Tile} for the tile and a\n * `{string}` for the url as arguments. The default is\n * ```js\n * source.setTileLoadFunction(function(tile, src) {\n *   tile.getImage().src = src;\n * });\n * ```\n * For more fine grained control, the load function can use fetch or XMLHttpRequest and involve\n * error handling:\n *\n * ```js\n * import TileState from 'ol/TileState';\n *\n * source.setTileLoadFunction(function(tile, src) {\n *   var xhr = new XMLHttpRequest();\n *   xhr.responseType = 'blob';\n *   xhr.addEventListener('loadend', function (evt) {\n *     var data = this.response;\n *     if (data !== undefined) {\n *       tile.getImage().src = URL.createObjectURL(data);\n *     } else {\n *       tile.setState(TileState.ERROR);\n *     }\n *   });\n *   xhr.addEventListener('error', function () {\n *     tile.setState(TileState.ERROR);\n *   });\n *   xhr.open('GET', src);\n *   xhr.send();\n * });\n * ```\n *\n * @typedef {function(Tile, string): void} LoadFunction\n * @api\n */\n/**\n * {@link module:ol/source/Tile~Tile} sources use a function of this type to get\n * the url that provides a tile for a given tile coordinate.\n *\n * This function takes an {@link module:ol/tilecoord~TileCoord} for the tile\n * coordinate, a `{number}` representing the pixel ratio and a\n * {@link module:ol/proj/Projection} for the projection  as arguments\n * and returns a `{string}` representing the tile URL, or undefined if no tile\n * should be requested for the passed tile coordinate.\n *\n * @typedef {function(import(\"./tilecoord.js\").TileCoord, number,\n *           import(\"./proj/Projection.js\").default): (string|undefined)} UrlFunction\n * @api\n */\n/**\n * @typedef {Object} Options\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @api\n */\n/**\n * @classdesc\n * Base class for tiles.\n *\n * @abstract\n */\nvar Tile = /** @class */ (function (_super) {\n    __extends(Tile, _super);\n    /**\n     * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n     * @param {import(\"./TileState.js\").default} state State.\n     * @param {Options=} opt_options Tile options.\n     */\n    function Tile(tileCoord, state, opt_options) {\n        var _this = _super.call(this) || this;\n        var options = opt_options ? opt_options : {};\n        /**\n         * @type {import(\"./tilecoord.js\").TileCoord}\n         */\n        _this.tileCoord = tileCoord;\n        /**\n         * @protected\n         * @type {import(\"./TileState.js\").default}\n         */\n        _this.state = state;\n        /**\n         * An \"interim\" tile for this tile. The interim tile may be used while this\n         * one is loading, for \"smooth\" transitions when changing params/dimensions\n         * on the source.\n         * @type {Tile}\n         */\n        _this.interimTile = null;\n        /**\n         * The tile is available at the highest possible resolution. Subclasses can\n         * set this to `false` initially. Tile load listeners will not be\n         * unregistered before this is set to `true` and a `#changed()` is called.\n         * @type {boolean}\n         */\n        _this.hifi = true;\n        /**\n         * A key assigned to the tile. This is used by the tile source to determine\n         * if this tile can effectively be used, or if a new tile should be created\n         * and this one be used as an interim tile for this new tile.\n         * @type {string}\n         */\n        _this.key = '';\n        /**\n         * The duration for the opacity transition.\n         * @type {number}\n         */\n        _this.transition_ =\n            options.transition === undefined ? 250 : options.transition;\n        /**\n         * Lookup of start times for rendering transitions.  If the start time is\n         * equal to -1, the transition is complete.\n         * @type {Object<string, number>}\n         */\n        _this.transitionStarts_ = {};\n        return _this;\n    }\n    /**\n     * @protected\n     */\n    Tile.prototype.changed = function () {\n        this.dispatchEvent(EventType.CHANGE);\n    };\n    /**\n     * Called by the tile cache when the tile is removed from the cache due to expiry\n     */\n    Tile.prototype.release = function () { };\n    /**\n     * @return {string} Key.\n     */\n    Tile.prototype.getKey = function () {\n        return this.key + '/' + this.tileCoord;\n    };\n    /**\n     * Get the interim tile most suitable for rendering using the chain of interim\n     * tiles. This corresponds to the  most recent tile that has been loaded, if no\n     * such tile exists, the original tile is returned.\n     * @return {!Tile} Best tile for rendering.\n     */\n    Tile.prototype.getInterimTile = function () {\n        if (!this.interimTile) {\n            //empty chain\n            return this;\n        }\n        var tile = this.interimTile;\n        // find the first loaded tile and return it. Since the chain is sorted in\n        // decreasing order of creation time, there is no need to search the remainder\n        // of the list (all those tiles correspond to older requests and will be\n        // cleaned up by refreshInterimChain)\n        do {\n            if (tile.getState() == TileState.LOADED) {\n                // Show tile immediately instead of fading it in after loading, because\n                // the interim tile is in place already\n                this.transition_ = 0;\n                return tile;\n            }\n            tile = tile.interimTile;\n        } while (tile);\n        // we can not find a better tile\n        return this;\n    };\n    /**\n     * Goes through the chain of interim tiles and discards sections of the chain\n     * that are no longer relevant.\n     */\n    Tile.prototype.refreshInterimChain = function () {\n        if (!this.interimTile) {\n            return;\n        }\n        var tile = this.interimTile;\n        var prev = /** @type {Tile} */ (this);\n        do {\n            if (tile.getState() == TileState.LOADED) {\n                //we have a loaded tile, we can discard the rest of the list\n                //we would could abort any LOADING tile request\n                //older than this tile (i.e. any LOADING tile following this entry in the chain)\n                tile.interimTile = null;\n                break;\n            }\n            else if (tile.getState() == TileState.LOADING) {\n                //keep this LOADING tile any loaded tiles later in the chain are\n                //older than this tile, so we're still interested in the request\n                prev = tile;\n            }\n            else if (tile.getState() == TileState.IDLE) {\n                //the head of the list is the most current tile, we don't need\n                //to start any other requests for this chain\n                prev.interimTile = tile.interimTile;\n            }\n            else {\n                prev = tile;\n            }\n            tile = prev.interimTile;\n        } while (tile);\n    };\n    /**\n     * Get the tile coordinate for this tile.\n     * @return {import(\"./tilecoord.js\").TileCoord} The tile coordinate.\n     * @api\n     */\n    Tile.prototype.getTileCoord = function () {\n        return this.tileCoord;\n    };\n    /**\n     * @return {import(\"./TileState.js\").default} State.\n     */\n    Tile.prototype.getState = function () {\n        return this.state;\n    };\n    /**\n     * Sets the state of this tile. If you write your own {@link module:ol/Tile~LoadFunction tileLoadFunction} ,\n     * it is important to set the state correctly to {@link module:ol/TileState~ERROR}\n     * when the tile cannot be loaded. Otherwise the tile cannot be removed from\n     * the tile queue and will block other requests.\n     * @param {import(\"./TileState.js\").default} state State.\n     * @api\n     */\n    Tile.prototype.setState = function (state) {\n        if (this.state !== TileState.ERROR && this.state > state) {\n            throw new Error('Tile load sequence violation');\n        }\n        this.state = state;\n        this.changed();\n    };\n    /**\n     * Load the image or retry if loading previously failed.\n     * Loading is taken care of by the tile queue, and calling this method is\n     * only needed for preloading or for reloading in case of an error.\n     * @abstract\n     * @api\n     */\n    Tile.prototype.load = function () {\n        abstract();\n    };\n    /**\n     * Get the alpha value for rendering.\n     * @param {string} id An id for the renderer.\n     * @param {number} time The render frame time.\n     * @return {number} A number between 0 and 1.\n     */\n    Tile.prototype.getAlpha = function (id, time) {\n        if (!this.transition_) {\n            return 1;\n        }\n        var start = this.transitionStarts_[id];\n        if (!start) {\n            start = time;\n            this.transitionStarts_[id] = start;\n        }\n        else if (start === -1) {\n            return 1;\n        }\n        var delta = time - start + 1000 / 60; // avoid rendering at 0\n        if (delta >= this.transition_) {\n            return 1;\n        }\n        return easeIn(delta / this.transition_);\n    };\n    /**\n     * Determine if a tile is in an alpha transition.  A tile is considered in\n     * transition if tile.getAlpha() has not yet been called or has been called\n     * and returned 1.\n     * @param {string} id An id for the renderer.\n     * @return {boolean} The tile is in transition.\n     */\n    Tile.prototype.inTransition = function (id) {\n        if (!this.transition_) {\n            return false;\n        }\n        return this.transitionStarts_[id] !== -1;\n    };\n    /**\n     * Mark a transition as complete.\n     * @param {string} id An id for the renderer.\n     */\n    Tile.prototype.endTransition = function (id) {\n        if (this.transition_) {\n            this.transitionStarts_[id] = -1;\n        }\n    };\n    return Tile;\n}(EventTarget));\nexport default Tile;\n//# sourceMappingURL=Tile.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/ImageTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\nimport { createCanvasContext2D } from './dom.js';\nimport { listenImage } from './Image.js';\nvar ImageTile = /** @class */ (function (_super) {\n    __extends(ImageTile, _super);\n    /**\n     * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n     * @param {import(\"./TileState.js\").default} state State.\n     * @param {string} src Image source URI.\n     * @param {?string} crossOrigin Cross origin.\n     * @param {import(\"./Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n     * @param {import(\"./Tile.js\").Options=} opt_options Tile options.\n     */\n    function ImageTile(tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) {\n        var _this = _super.call(this, tileCoord, state, opt_options) || this;\n        /**\n         * @private\n         * @type {?string}\n         */\n        _this.crossOrigin_ = crossOrigin;\n        /**\n         * Image URI\n         *\n         * @private\n         * @type {string}\n         */\n        _this.src_ = src;\n        _this.key = src;\n        /**\n         * @private\n         * @type {HTMLImageElement|HTMLCanvasElement}\n         */\n        _this.image_ = new Image();\n        if (crossOrigin !== null) {\n            _this.image_.crossOrigin = crossOrigin;\n        }\n        /**\n         * @private\n         * @type {?function():void}\n         */\n        _this.unlisten_ = null;\n        /**\n         * @private\n         * @type {import(\"./Tile.js\").LoadFunction}\n         */\n        _this.tileLoadFunction_ = tileLoadFunction;\n        return _this;\n    }\n    /**\n     * Get the HTML image element for this tile (may be a Canvas, Image, or Video).\n     * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n     * @api\n     */\n    ImageTile.prototype.getImage = function () {\n        return this.image_;\n    };\n    /**\n     * Tracks loading or read errors.\n     *\n     * @private\n     */\n    ImageTile.prototype.handleImageError_ = function () {\n        this.state = TileState.ERROR;\n        this.unlistenImage_();\n        this.image_ = getBlankImage();\n        this.changed();\n    };\n    /**\n     * Tracks successful image load.\n     *\n     * @private\n     */\n    ImageTile.prototype.handleImageLoad_ = function () {\n        var image = /** @type {HTMLImageElement} */ (this.image_);\n        if (image.naturalWidth && image.naturalHeight) {\n            this.state = TileState.LOADED;\n        }\n        else {\n            this.state = TileState.EMPTY;\n        }\n        this.unlistenImage_();\n        this.changed();\n    };\n    /**\n     * Load not yet loaded URI.\n     * @api\n     */\n    ImageTile.prototype.load = function () {\n        if (this.state == TileState.ERROR) {\n            this.state = TileState.IDLE;\n            this.image_ = new Image();\n            if (this.crossOrigin_ !== null) {\n                this.image_.crossOrigin = this.crossOrigin_;\n            }\n        }\n        if (this.state == TileState.IDLE) {\n            this.state = TileState.LOADING;\n            this.changed();\n            this.tileLoadFunction_(this, this.src_);\n            this.unlisten_ = listenImage(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this));\n        }\n    };\n    /**\n     * Discards event handlers which listen for load completion or errors.\n     *\n     * @private\n     */\n    ImageTile.prototype.unlistenImage_ = function () {\n        if (this.unlisten_) {\n            this.unlisten_();\n            this.unlisten_ = null;\n        }\n    };\n    return ImageTile;\n}(Tile));\n/**\n * Get a 1-pixel blank image.\n * @return {HTMLCanvasElement} Blank image.\n */\nfunction getBlankImage() {\n    var ctx = createCanvasContext2D(1, 1);\n    ctx.fillStyle = 'rgba(0,0,0,0)';\n    ctx.fillRect(0, 0, 1, 1);\n    return ctx.canvas;\n}\nexport default ImageTile;\n//# sourceMappingURL=ImageTile.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/reproj/Tile\n */\nimport { ERROR_THRESHOLD } from './common.js';\nimport EventType from '../events/EventType.js';\nimport Tile from '../Tile.js';\nimport TileState from '../TileState.js';\nimport Triangulation from './Triangulation.js';\nimport { calculateSourceExtentResolution, render as renderReprojected, } from '../reproj.js';\nimport { clamp } from '../math.js';\nimport { getArea, getIntersection } from '../extent.js';\nimport { listen, unlistenByKey } from '../events.js';\n/**\n * @typedef {function(number, number, number, number) : import(\"../Tile.js\").default} FunctionType\n */\n/**\n * @classdesc\n * Class encapsulating single reprojected tile.\n * See {@link module:ol/source/TileImage~TileImage}.\n *\n */\nvar ReprojTile = /** @class */ (function (_super) {\n    __extends(ReprojTile, _super);\n    /**\n     * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection.\n     * @param {import(\"../tilegrid/TileGrid.js\").default} sourceTileGrid Source tile grid.\n     * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n     * @param {import(\"../tilegrid/TileGrid.js\").default} targetTileGrid Target tile grid.\n     * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Coordinate of the tile.\n     * @param {import(\"../tilecoord.js\").TileCoord} wrappedTileCoord Coordinate of the tile wrapped in X.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {number} gutter Gutter of the source tiles.\n     * @param {FunctionType} getTileFunction\n     *     Function returning source tiles (z, x, y, pixelRatio).\n     * @param {number=} opt_errorThreshold Acceptable reprojection error (in px).\n     * @param {boolean=} opt_renderEdges Render reprojection edges.\n     * @param {object=} opt_contextOptions Properties to set on the canvas context.\n     */\n    function ReprojTile(sourceProj, sourceTileGrid, targetProj, targetTileGrid, tileCoord, wrappedTileCoord, pixelRatio, gutter, getTileFunction, opt_errorThreshold, opt_renderEdges, opt_contextOptions) {\n        var _this = _super.call(this, tileCoord, TileState.IDLE) || this;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.renderEdges_ = opt_renderEdges !== undefined ? opt_renderEdges : false;\n        /**\n         * @private\n         * @type {object}\n         */\n        _this.contextOptions_ = opt_contextOptions;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.pixelRatio_ = pixelRatio;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.gutter_ = gutter;\n        /**\n         * @private\n         * @type {HTMLCanvasElement}\n         */\n        _this.canvas_ = null;\n        /**\n         * @private\n         * @type {import(\"../tilegrid/TileGrid.js\").default}\n         */\n        _this.sourceTileGrid_ = sourceTileGrid;\n        /**\n         * @private\n         * @type {import(\"../tilegrid/TileGrid.js\").default}\n         */\n        _this.targetTileGrid_ = targetTileGrid;\n        /**\n         * @private\n         * @type {import(\"../tilecoord.js\").TileCoord}\n         */\n        _this.wrappedTileCoord_ = wrappedTileCoord ? wrappedTileCoord : tileCoord;\n        /**\n         * @private\n         * @type {!Array<import(\"../Tile.js\").default>}\n         */\n        _this.sourceTiles_ = [];\n        /**\n         * @private\n         * @type {?Array<import(\"../events.js\").EventsKey>}\n         */\n        _this.sourcesListenerKeys_ = null;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.sourceZ_ = 0;\n        var targetExtent = targetTileGrid.getTileCoordExtent(_this.wrappedTileCoord_);\n        var maxTargetExtent = _this.targetTileGrid_.getExtent();\n        var maxSourceExtent = _this.sourceTileGrid_.getExtent();\n        var limitedTargetExtent = maxTargetExtent\n            ? getIntersection(targetExtent, maxTargetExtent)\n            : targetExtent;\n        if (getArea(limitedTargetExtent) === 0) {\n            // Tile is completely outside range -> EMPTY\n            // TODO: is it actually correct that the source even creates the tile ?\n            _this.state = TileState.EMPTY;\n            return _this;\n        }\n        var sourceProjExtent = sourceProj.getExtent();\n        if (sourceProjExtent) {\n            if (!maxSourceExtent) {\n                maxSourceExtent = sourceProjExtent;\n            }\n            else {\n                maxSourceExtent = getIntersection(maxSourceExtent, sourceProjExtent);\n            }\n        }\n        var targetResolution = targetTileGrid.getResolution(_this.wrappedTileCoord_[0]);\n        var sourceResolution = calculateSourceExtentResolution(sourceProj, targetProj, limitedTargetExtent, targetResolution);\n        if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n            // invalid sourceResolution -> EMPTY\n            // probably edges of the projections when no extent is defined\n            _this.state = TileState.EMPTY;\n            return _this;\n        }\n        var errorThresholdInPixels = opt_errorThreshold !== undefined ? opt_errorThreshold : ERROR_THRESHOLD;\n        /**\n         * @private\n         * @type {!import(\"./Triangulation.js\").default}\n         */\n        _this.triangulation_ = new Triangulation(sourceProj, targetProj, limitedTargetExtent, maxSourceExtent, sourceResolution * errorThresholdInPixels, targetResolution);\n        if (_this.triangulation_.getTriangles().length === 0) {\n            // no valid triangles -> EMPTY\n            _this.state = TileState.EMPTY;\n            return _this;\n        }\n        _this.sourceZ_ = sourceTileGrid.getZForResolution(sourceResolution);\n        var sourceExtent = _this.triangulation_.calculateSourceExtent();\n        if (maxSourceExtent) {\n            if (sourceProj.canWrapX()) {\n                sourceExtent[1] = clamp(sourceExtent[1], maxSourceExtent[1], maxSourceExtent[3]);\n                sourceExtent[3] = clamp(sourceExtent[3], maxSourceExtent[1], maxSourceExtent[3]);\n            }\n            else {\n                sourceExtent = getIntersection(sourceExtent, maxSourceExtent);\n            }\n        }\n        if (!getArea(sourceExtent)) {\n            _this.state = TileState.EMPTY;\n        }\n        else {\n            var sourceRange = sourceTileGrid.getTileRangeForExtentAndZ(sourceExtent, _this.sourceZ_);\n            for (var srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {\n                for (var srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {\n                    var tile = getTileFunction(_this.sourceZ_, srcX, srcY, pixelRatio);\n                    if (tile) {\n                        _this.sourceTiles_.push(tile);\n                    }\n                }\n            }\n            if (_this.sourceTiles_.length === 0) {\n                _this.state = TileState.EMPTY;\n            }\n        }\n        return _this;\n    }\n    /**\n     * Get the HTML Canvas element for this tile.\n     * @return {HTMLCanvasElement} Canvas.\n     */\n    ReprojTile.prototype.getImage = function () {\n        return this.canvas_;\n    };\n    /**\n     * @private\n     */\n    ReprojTile.prototype.reproject_ = function () {\n        var sources = [];\n        this.sourceTiles_.forEach(function (tile, i, arr) {\n            if (tile && tile.getState() == TileState.LOADED) {\n                sources.push({\n                    extent: this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord),\n                    image: tile.getImage(),\n                });\n            }\n        }.bind(this));\n        this.sourceTiles_.length = 0;\n        if (sources.length === 0) {\n            this.state = TileState.ERROR;\n        }\n        else {\n            var z = this.wrappedTileCoord_[0];\n            var size = this.targetTileGrid_.getTileSize(z);\n            var width = typeof size === 'number' ? size : size[0];\n            var height = typeof size === 'number' ? size : size[1];\n            var targetResolution = this.targetTileGrid_.getResolution(z);\n            var sourceResolution = this.sourceTileGrid_.getResolution(this.sourceZ_);\n            var targetExtent = this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);\n            this.canvas_ = renderReprojected(width, height, this.pixelRatio_, sourceResolution, this.sourceTileGrid_.getExtent(), targetResolution, targetExtent, this.triangulation_, sources, this.gutter_, this.renderEdges_, this.contextOptions_);\n            this.state = TileState.LOADED;\n        }\n        this.changed();\n    };\n    /**\n     * Load not yet loaded URI.\n     */\n    ReprojTile.prototype.load = function () {\n        if (this.state == TileState.IDLE) {\n            this.state = TileState.LOADING;\n            this.changed();\n            var leftToLoad_1 = 0;\n            this.sourcesListenerKeys_ = [];\n            this.sourceTiles_.forEach(function (tile, i, arr) {\n                var state = tile.getState();\n                if (state == TileState.IDLE || state == TileState.LOADING) {\n                    leftToLoad_1++;\n                    var sourceListenKey_1 = listen(tile, EventType.CHANGE, function (e) {\n                        var state = tile.getState();\n                        if (state == TileState.LOADED ||\n                            state == TileState.ERROR ||\n                            state == TileState.EMPTY) {\n                            unlistenByKey(sourceListenKey_1);\n                            leftToLoad_1--;\n                            if (leftToLoad_1 === 0) {\n                                this.unlistenSources_();\n                                this.reproject_();\n                            }\n                        }\n                    }, this);\n                    this.sourcesListenerKeys_.push(sourceListenKey_1);\n                }\n            }.bind(this));\n            this.sourceTiles_.forEach(function (tile, i, arr) {\n                var state = tile.getState();\n                if (state == TileState.IDLE) {\n                    tile.load();\n                }\n            });\n            if (leftToLoad_1 === 0) {\n                setTimeout(this.reproject_.bind(this), 0);\n            }\n        }\n    };\n    /**\n     * @private\n     */\n    ReprojTile.prototype.unlistenSources_ = function () {\n        this.sourcesListenerKeys_.forEach(unlistenByKey);\n        this.sourcesListenerKeys_ = null;\n    };\n    return ReprojTile;\n}(Tile));\nexport default ReprojTile;\n//# sourceMappingURL=Tile.js.map","/**\n * @module ol/structs/LRUCache\n */\nimport { assert } from '../asserts.js';\n/**\n * @typedef {Object} Entry\n * @property {string} key_\n * @property {Object} newer\n * @property {Object} older\n * @property {*} value_\n */\n/**\n * @classdesc\n * Implements a Least-Recently-Used cache where the keys do not conflict with\n * Object's properties (e.g. 'hasOwnProperty' is not allowed as a key). Expiring\n * items from the cache is the responsibility of the user.\n *\n * @fires import(\"../events/Event.js\").default\n * @template T\n */\nvar LRUCache = /** @class */ (function () {\n    /**\n     * @param {number=} opt_highWaterMark High water mark.\n     */\n    function LRUCache(opt_highWaterMark) {\n        /**\n         * Desired max cache size after expireCache(). If set to 0, no cache entries\n         * will be pruned at all.\n         * @type {number}\n         */\n        this.highWaterMark =\n            opt_highWaterMark !== undefined ? opt_highWaterMark : 2048;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.count_ = 0;\n        /**\n         * @private\n         * @type {!Object<string, Entry>}\n         */\n        this.entries_ = {};\n        /**\n         * @private\n         * @type {?Entry}\n         */\n        this.oldest_ = null;\n        /**\n         * @private\n         * @type {?Entry}\n         */\n        this.newest_ = null;\n    }\n    /**\n     * @return {boolean} Can expire cache.\n     */\n    LRUCache.prototype.canExpireCache = function () {\n        return this.highWaterMark > 0 && this.getCount() > this.highWaterMark;\n    };\n    /**\n     * FIXME empty description for jsdoc\n     */\n    LRUCache.prototype.clear = function () {\n        this.count_ = 0;\n        this.entries_ = {};\n        this.oldest_ = null;\n        this.newest_ = null;\n    };\n    /**\n     * @param {string} key Key.\n     * @return {boolean} Contains key.\n     */\n    LRUCache.prototype.containsKey = function (key) {\n        return this.entries_.hasOwnProperty(key);\n    };\n    /**\n     * @param {function(T, string, LRUCache<T>): ?} f The function\n     *     to call for every entry from the oldest to the newer. This function takes\n     *     3 arguments (the entry value, the entry key and the LRUCache object).\n     *     The return value is ignored.\n     */\n    LRUCache.prototype.forEach = function (f) {\n        var entry = this.oldest_;\n        while (entry) {\n            f(entry.value_, entry.key_, this);\n            entry = entry.newer;\n        }\n    };\n    /**\n     * @param {string} key Key.\n     * @param {*=} opt_options Options (reserverd for subclasses).\n     * @return {T} Value.\n     */\n    LRUCache.prototype.get = function (key, opt_options) {\n        var entry = this.entries_[key];\n        assert(entry !== undefined, 15); // Tried to get a value for a key that does not exist in the cache\n        if (entry === this.newest_) {\n            return entry.value_;\n        }\n        else if (entry === this.oldest_) {\n            this.oldest_ = /** @type {Entry} */ (this.oldest_.newer);\n            this.oldest_.older = null;\n        }\n        else {\n            entry.newer.older = entry.older;\n            entry.older.newer = entry.newer;\n        }\n        entry.newer = null;\n        entry.older = this.newest_;\n        this.newest_.newer = entry;\n        this.newest_ = entry;\n        return entry.value_;\n    };\n    /**\n     * Remove an entry from the cache.\n     * @param {string} key The entry key.\n     * @return {T} The removed entry.\n     */\n    LRUCache.prototype.remove = function (key) {\n        var entry = this.entries_[key];\n        assert(entry !== undefined, 15); // Tried to get a value for a key that does not exist in the cache\n        if (entry === this.newest_) {\n            this.newest_ = /** @type {Entry} */ (entry.older);\n            if (this.newest_) {\n                this.newest_.newer = null;\n            }\n        }\n        else if (entry === this.oldest_) {\n            this.oldest_ = /** @type {Entry} */ (entry.newer);\n            if (this.oldest_) {\n                this.oldest_.older = null;\n            }\n        }\n        else {\n            entry.newer.older = entry.older;\n            entry.older.newer = entry.newer;\n        }\n        delete this.entries_[key];\n        --this.count_;\n        return entry.value_;\n    };\n    /**\n     * @return {number} Count.\n     */\n    LRUCache.prototype.getCount = function () {\n        return this.count_;\n    };\n    /**\n     * @return {Array<string>} Keys.\n     */\n    LRUCache.prototype.getKeys = function () {\n        var keys = new Array(this.count_);\n        var i = 0;\n        var entry;\n        for (entry = this.newest_; entry; entry = entry.older) {\n            keys[i++] = entry.key_;\n        }\n        return keys;\n    };\n    /**\n     * @return {Array<T>} Values.\n     */\n    LRUCache.prototype.getValues = function () {\n        var values = new Array(this.count_);\n        var i = 0;\n        var entry;\n        for (entry = this.newest_; entry; entry = entry.older) {\n            values[i++] = entry.value_;\n        }\n        return values;\n    };\n    /**\n     * @return {T} Last value.\n     */\n    LRUCache.prototype.peekLast = function () {\n        return this.oldest_.value_;\n    };\n    /**\n     * @return {string} Last key.\n     */\n    LRUCache.prototype.peekLastKey = function () {\n        return this.oldest_.key_;\n    };\n    /**\n     * Get the key of the newest item in the cache.  Throws if the cache is empty.\n     * @return {string} The newest key.\n     */\n    LRUCache.prototype.peekFirstKey = function () {\n        return this.newest_.key_;\n    };\n    /**\n     * @return {T} value Value.\n     */\n    LRUCache.prototype.pop = function () {\n        var entry = this.oldest_;\n        delete this.entries_[entry.key_];\n        if (entry.newer) {\n            entry.newer.older = null;\n        }\n        this.oldest_ = /** @type {Entry} */ (entry.newer);\n        if (!this.oldest_) {\n            this.newest_ = null;\n        }\n        --this.count_;\n        return entry.value_;\n    };\n    /**\n     * @param {string} key Key.\n     * @param {T} value Value.\n     */\n    LRUCache.prototype.replace = function (key, value) {\n        this.get(key); // update `newest_`\n        this.entries_[key].value_ = value;\n    };\n    /**\n     * @param {string} key Key.\n     * @param {T} value Value.\n     */\n    LRUCache.prototype.set = function (key, value) {\n        assert(!(key in this.entries_), 16); // Tried to set a value for a key that is used already\n        var entry = {\n            key_: key,\n            newer: null,\n            older: this.newest_,\n            value_: value,\n        };\n        if (!this.newest_) {\n            this.oldest_ = entry;\n        }\n        else {\n            this.newest_.newer = entry;\n        }\n        this.newest_ = entry;\n        this.entries_[key] = entry;\n        ++this.count_;\n    };\n    /**\n     * Set a maximum number of entries for the cache.\n     * @param {number} size Cache size.\n     * @api\n     */\n    LRUCache.prototype.setSize = function (size) {\n        this.highWaterMark = size;\n    };\n    return LRUCache;\n}());\nexport default LRUCache;\n//# sourceMappingURL=LRUCache.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/TileCache\n */\nimport LRUCache from './structs/LRUCache.js';\nimport { fromKey, getKey } from './tilecoord.js';\nvar TileCache = /** @class */ (function (_super) {\n    __extends(TileCache, _super);\n    function TileCache() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @param {!Object<string, boolean>} usedTiles Used tiles.\n     */\n    TileCache.prototype.expireCache = function (usedTiles) {\n        while (this.canExpireCache()) {\n            var tile = this.peekLast();\n            if (tile.getKey() in usedTiles) {\n                break;\n            }\n            else {\n                this.pop().release();\n            }\n        }\n    };\n    /**\n     * Prune all tiles from the cache that don't have the same z as the newest tile.\n     */\n    TileCache.prototype.pruneExceptNewestZ = function () {\n        if (this.getCount() === 0) {\n            return;\n        }\n        var key = this.peekFirstKey();\n        var tileCoord = fromKey(key);\n        var z = tileCoord[0];\n        this.forEach(function (tile) {\n            if (tile.tileCoord[0] !== z) {\n                this.remove(getKey(tile.tileCoord));\n                tile.release();\n            }\n        }.bind(this));\n    };\n    return TileCache;\n}(LRUCache));\nexport default TileCache;\n//# sourceMappingURL=TileCache.js.map","/**\n * @module ol/source/TileEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n    /**\n     * Triggered when a tile starts loading.\n     * @event module:ol/source/Tile.TileSourceEvent#tileloadstart\n     * @api\n     */\n    TILELOADSTART: 'tileloadstart',\n    /**\n     * Triggered when a tile finishes loading, either when its data is loaded,\n     * or when loading was aborted because the tile is no longer needed.\n     * @event module:ol/source/Tile.TileSourceEvent#tileloadend\n     * @api\n     */\n    TILELOADEND: 'tileloadend',\n    /**\n     * Triggered if tile loading results in an error.\n     * @event module:ol/source/Tile.TileSourceEvent#tileloaderror\n     * @api\n     */\n    TILELOADERROR: 'tileloaderror',\n};\n//# sourceMappingURL=TileEventType.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/source/Tile\n */\nimport Event from '../events/Event.js';\nimport Source from './Source.js';\nimport TileCache from '../TileCache.js';\nimport TileState from '../TileState.js';\nimport { abstract } from '../util.js';\nimport { assert } from '../asserts.js';\nimport { equivalent } from '../proj.js';\nimport { getKeyZXY, withinExtentAndZ } from '../tilecoord.js';\nimport { getForProjection as getTileGridForProjection, wrapX, } from '../tilegrid.js';\nimport { scale as scaleSize, toSize } from '../size.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions]\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize]\n * @property {boolean} [opaque=false] Whether the layer is opaque.\n * @property {number} [tilePixelRatio]\n * @property {import(\"../proj.js\").ProjectionLike} [projection]\n * @property {import(\"./State.js\").default} [state]\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid]\n * @property {boolean} [wrapX=true]\n * @property {number} [transition]\n * @property {string} [key]\n * @property {number} [zDirection=0]\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for sources providing images divided into a tile grid.\n * @abstract\n * @api\n */\nvar TileSource = /** @class */ (function (_super) {\n    __extends(TileSource, _super);\n    /**\n     * @param {Options} options SourceTile source options.\n     */\n    function TileSource(options) {\n        var _this = _super.call(this, {\n            attributions: options.attributions,\n            attributionsCollapsible: options.attributionsCollapsible,\n            projection: options.projection,\n            state: options.state,\n            wrapX: options.wrapX,\n        }) || this;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.opaque_ = options.opaque !== undefined ? options.opaque : false;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.tilePixelRatio_ =\n            options.tilePixelRatio !== undefined ? options.tilePixelRatio : 1;\n        /**\n         * @protected\n         * @type {import(\"../tilegrid/TileGrid.js\").default}\n         */\n        _this.tileGrid = options.tileGrid !== undefined ? options.tileGrid : null;\n        var tileSize = [256, 256];\n        var tileGrid = options.tileGrid;\n        if (tileGrid) {\n            toSize(tileGrid.getTileSize(tileGrid.getMinZoom()), tileSize);\n        }\n        /**\n         * @protected\n         * @type {import(\"../TileCache.js\").default}\n         */\n        _this.tileCache = new TileCache(options.cacheSize || 0);\n        /**\n         * @protected\n         * @type {import(\"../size.js\").Size}\n         */\n        _this.tmpSize = [0, 0];\n        /**\n         * @private\n         * @type {string}\n         */\n        _this.key_ = options.key || '';\n        /**\n         * @protected\n         * @type {import(\"../Tile.js\").Options}\n         */\n        _this.tileOptions = { transition: options.transition };\n        /**\n         * zDirection hint, read by the renderer. Indicates which resolution should be used\n         * by a renderer if the views resolution does not match any resolution of the tile source.\n         * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n         * will be used. If -1, the nearest higher resolution will be used.\n         * @type {number}\n         */\n        _this.zDirection = options.zDirection ? options.zDirection : 0;\n        return _this;\n    }\n    /**\n     * @return {boolean} Can expire cache.\n     */\n    TileSource.prototype.canExpireCache = function () {\n        return this.tileCache.canExpireCache();\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @param {!Object<string, boolean>} usedTiles Used tiles.\n     */\n    TileSource.prototype.expireCache = function (projection, usedTiles) {\n        var tileCache = this.getTileCacheForProjection(projection);\n        if (tileCache) {\n            tileCache.expireCache(usedTiles);\n        }\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @param {number} z Zoom level.\n     * @param {import(\"../TileRange.js\").default} tileRange Tile range.\n     * @param {function(import(\"../Tile.js\").default):(boolean|void)} callback Called with each\n     *     loaded tile.  If the callback returns `false`, the tile will not be\n     *     considered loaded.\n     * @return {boolean} The tile range is fully covered with loaded tiles.\n     */\n    TileSource.prototype.forEachLoadedTile = function (projection, z, tileRange, callback) {\n        var tileCache = this.getTileCacheForProjection(projection);\n        if (!tileCache) {\n            return false;\n        }\n        var covered = true;\n        var tile, tileCoordKey, loaded;\n        for (var x = tileRange.minX; x <= tileRange.maxX; ++x) {\n            for (var y = tileRange.minY; y <= tileRange.maxY; ++y) {\n                tileCoordKey = getKeyZXY(z, x, y);\n                loaded = false;\n                if (tileCache.containsKey(tileCoordKey)) {\n                    tile = /** @type {!import(\"../Tile.js\").default} */ (tileCache.get(tileCoordKey));\n                    loaded = tile.getState() === TileState.LOADED;\n                    if (loaded) {\n                        loaded = callback(tile) !== false;\n                    }\n                }\n                if (!loaded) {\n                    covered = false;\n                }\n            }\n        }\n        return covered;\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {number} Gutter.\n     */\n    TileSource.prototype.getGutterForProjection = function (projection) {\n        return 0;\n    };\n    /**\n     * Return the key to be used for all tiles in the source.\n     * @return {string} The key for all tiles.\n     * @protected\n     */\n    TileSource.prototype.getKey = function () {\n        return this.key_;\n    };\n    /**\n     * Set the value to be used as the key for all tiles in the source.\n     * @param {string} key The key for tiles.\n     * @protected\n     */\n    TileSource.prototype.setKey = function (key) {\n        if (this.key_ !== key) {\n            this.key_ = key;\n            this.changed();\n        }\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {boolean} Opaque.\n     */\n    TileSource.prototype.getOpaque = function (projection) {\n        return this.opaque_;\n    };\n    /**\n     * @return {Array<number>} Resolutions.\n     */\n    TileSource.prototype.getResolutions = function () {\n        return this.tileGrid.getResolutions();\n    };\n    /**\n     * @abstract\n     * @param {number} z Tile coordinate z.\n     * @param {number} x Tile coordinate x.\n     * @param {number} y Tile coordinate y.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {!import(\"../Tile.js\").default} Tile.\n     */\n    TileSource.prototype.getTile = function (z, x, y, pixelRatio, projection) {\n        return abstract();\n    };\n    /**\n     * Return the tile grid of the tile source.\n     * @return {import(\"../tilegrid/TileGrid.js\").default} Tile grid.\n     * @api\n     */\n    TileSource.prototype.getTileGrid = function () {\n        return this.tileGrid;\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {!import(\"../tilegrid/TileGrid.js\").default} Tile grid.\n     */\n    TileSource.prototype.getTileGridForProjection = function (projection) {\n        if (!this.tileGrid) {\n            return getTileGridForProjection(projection);\n        }\n        else {\n            return this.tileGrid;\n        }\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {import(\"../TileCache.js\").default} Tile cache.\n     * @protected\n     */\n    TileSource.prototype.getTileCacheForProjection = function (projection) {\n        assert(equivalent(this.getProjection(), projection), 68 // A VectorTile source can only be rendered if it has a projection compatible with the view projection.\n        );\n        return this.tileCache;\n    };\n    /**\n     * Get the tile pixel ratio for this source. Subclasses may override this\n     * method, which is meant to return a supported pixel ratio that matches the\n     * provided `pixelRatio` as close as possible.\n     * @param {number} pixelRatio Pixel ratio.\n     * @return {number} Tile pixel ratio.\n     */\n    TileSource.prototype.getTilePixelRatio = function (pixelRatio) {\n        return this.tilePixelRatio_;\n    };\n    /**\n     * @param {number} z Z.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {import(\"../size.js\").Size} Tile size.\n     */\n    TileSource.prototype.getTilePixelSize = function (z, pixelRatio, projection) {\n        var tileGrid = this.getTileGridForProjection(projection);\n        var tilePixelRatio = this.getTilePixelRatio(pixelRatio);\n        var tileSize = toSize(tileGrid.getTileSize(z), this.tmpSize);\n        if (tilePixelRatio == 1) {\n            return tileSize;\n        }\n        else {\n            return scaleSize(tileSize, tilePixelRatio, this.tmpSize);\n        }\n    };\n    /**\n     * Returns a tile coordinate wrapped around the x-axis. When the tile coordinate\n     * is outside the resolution and extent range of the tile grid, `null` will be\n     * returned.\n     * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n     * @param {import(\"../proj/Projection.js\").default=} opt_projection Projection.\n     * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate to be passed to the tileUrlFunction or\n     *     null if no tile URL should be created for the passed `tileCoord`.\n     */\n    TileSource.prototype.getTileCoordForTileUrlFunction = function (tileCoord, opt_projection) {\n        var projection = opt_projection !== undefined ? opt_projection : this.getProjection();\n        var tileGrid = this.getTileGridForProjection(projection);\n        if (this.getWrapX() && projection.isGlobal()) {\n            tileCoord = wrapX(tileGrid, tileCoord, projection);\n        }\n        return withinExtentAndZ(tileCoord, tileGrid) ? tileCoord : null;\n    };\n    /**\n     * Remove all cached tiles from the source. The next render cycle will fetch new tiles.\n     * @api\n     */\n    TileSource.prototype.clear = function () {\n        this.tileCache.clear();\n    };\n    TileSource.prototype.refresh = function () {\n        this.clear();\n        _super.prototype.refresh.call(this);\n    };\n    /**\n     * Increases the cache size if needed\n     * @param {number} tileCount Minimum number of tiles needed.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     */\n    TileSource.prototype.updateCacheSize = function (tileCount, projection) {\n        var tileCache = this.getTileCacheForProjection(projection);\n        if (tileCount > tileCache.highWaterMark) {\n            tileCache.highWaterMark = tileCount;\n        }\n    };\n    /**\n     * Marks a tile coord as being used, without triggering a load.\n     * @abstract\n     * @param {number} z Tile coordinate z.\n     * @param {number} x Tile coordinate x.\n     * @param {number} y Tile coordinate y.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     */\n    TileSource.prototype.useTile = function (z, x, y, projection) { };\n    return TileSource;\n}(Source));\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Tile~TileSource} instances are instances of this\n * type.\n */\nvar TileSourceEvent = /** @class */ (function (_super) {\n    __extends(TileSourceEvent, _super);\n    /**\n     * @param {string} type Type.\n     * @param {import(\"../Tile.js\").default} tile The tile.\n     */\n    function TileSourceEvent(type, tile) {\n        var _this = _super.call(this, type) || this;\n        /**\n         * The tile related to the event.\n         * @type {import(\"../Tile.js\").default}\n         * @api\n         */\n        _this.tile = tile;\n        return _this;\n    }\n    return TileSourceEvent;\n}(Event));\nexport { TileSourceEvent };\nexport default TileSource;\n//# sourceMappingURL=Tile.js.map","/**\n * @module ol/tileurlfunction\n */\nimport { assert } from './asserts.js';\nimport { modulo } from './math.js';\nimport { hash as tileCoordHash } from './tilecoord.js';\n/**\n * @param {string} template Template.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTemplate(template, tileGrid) {\n    var zRegEx = /\\{z\\}/g;\n    var xRegEx = /\\{x\\}/g;\n    var yRegEx = /\\{y\\}/g;\n    var dashYRegEx = /\\{-y\\}/g;\n    return (\n    /**\n     * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile Coordinate.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"./proj/Projection.js\").default} projection Projection.\n     * @return {string|undefined} Tile URL.\n     */\n    function (tileCoord, pixelRatio, projection) {\n        if (!tileCoord) {\n            return undefined;\n        }\n        else {\n            return template\n                .replace(zRegEx, tileCoord[0].toString())\n                .replace(xRegEx, tileCoord[1].toString())\n                .replace(yRegEx, tileCoord[2].toString())\n                .replace(dashYRegEx, function () {\n                var z = tileCoord[0];\n                var range = tileGrid.getFullTileRange(z);\n                assert(range, 55); // The {-y} placeholder requires a tile grid with extent\n                var y = range.getHeight() - tileCoord[2] - 1;\n                return y.toString();\n            });\n        }\n    });\n}\n/**\n * @param {Array<string>} templates Templates.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTemplates(templates, tileGrid) {\n    var len = templates.length;\n    var tileUrlFunctions = new Array(len);\n    for (var i = 0; i < len; ++i) {\n        tileUrlFunctions[i] = createFromTemplate(templates[i], tileGrid);\n    }\n    return createFromTileUrlFunctions(tileUrlFunctions);\n}\n/**\n * @param {Array<import(\"./Tile.js\").UrlFunction>} tileUrlFunctions Tile URL Functions.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTileUrlFunctions(tileUrlFunctions) {\n    if (tileUrlFunctions.length === 1) {\n        return tileUrlFunctions[0];\n    }\n    return (\n    /**\n     * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile Coordinate.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"./proj/Projection.js\").default} projection Projection.\n     * @return {string|undefined} Tile URL.\n     */\n    function (tileCoord, pixelRatio, projection) {\n        if (!tileCoord) {\n            return undefined;\n        }\n        else {\n            var h = tileCoordHash(tileCoord);\n            var index = modulo(h, tileUrlFunctions.length);\n            return tileUrlFunctions[index](tileCoord, pixelRatio, projection);\n        }\n    });\n}\n/**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {string|undefined} Tile URL.\n */\nexport function nullTileUrlFunction(tileCoord, pixelRatio, projection) {\n    return undefined;\n}\n/**\n * @param {string} url URL.\n * @return {Array<string>} Array of urls.\n */\nexport function expandUrl(url) {\n    var urls = [];\n    var match = /\\{([a-z])-([a-z])\\}/.exec(url);\n    if (match) {\n        // char range\n        var startCharCode = match[1].charCodeAt(0);\n        var stopCharCode = match[2].charCodeAt(0);\n        var charCode = void 0;\n        for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {\n            urls.push(url.replace(match[0], String.fromCharCode(charCode)));\n        }\n        return urls;\n    }\n    match = /\\{(\\d+)-(\\d+)\\}/.exec(url);\n    if (match) {\n        // number range\n        var stop_1 = parseInt(match[2], 10);\n        for (var i = parseInt(match[1], 10); i <= stop_1; i++) {\n            urls.push(url.replace(match[0], i.toString()));\n        }\n        return urls;\n    }\n    urls.push(url);\n    return urls;\n}\n//# sourceMappingURL=tileurlfunction.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/source/UrlTile\n */\nimport TileEventType from './TileEventType.js';\nimport TileSource, { TileSourceEvent } from './Tile.js';\nimport TileState from '../TileState.js';\nimport { createFromTemplates, expandUrl } from '../tileurlfunction.js';\nimport { getKeyZXY } from '../tilecoord.js';\nimport { getUid } from '../util.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions]\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize]\n * @property {boolean} [opaque=false] Whether the layer is opaque.\n * @property {import(\"../proj.js\").ProjectionLike} [projection]\n * @property {import(\"./State.js\").default} [state]\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid]\n * @property {import(\"../Tile.js\").LoadFunction} tileLoadFunction\n * @property {number} [tilePixelRatio]\n * @property {import(\"../Tile.js\").UrlFunction} [tileUrlFunction]\n * @property {string} [url]\n * @property {Array<string>} [urls]\n * @property {boolean} [wrapX=true]\n * @property {number} [transition]\n * @property {string} [key]\n * @property {number} [zDirection=0]\n */\n/**\n * @classdesc\n * Base class for sources providing tiles divided into a tile grid over http.\n *\n * @fires import(\"./Tile.js\").TileSourceEvent\n */\nvar UrlTile = /** @class */ (function (_super) {\n    __extends(UrlTile, _super);\n    /**\n     * @param {Options} options Image tile options.\n     */\n    function UrlTile(options) {\n        var _this = _super.call(this, {\n            attributions: options.attributions,\n            cacheSize: options.cacheSize,\n            opaque: options.opaque,\n            projection: options.projection,\n            state: options.state,\n            tileGrid: options.tileGrid,\n            tilePixelRatio: options.tilePixelRatio,\n            wrapX: options.wrapX,\n            transition: options.transition,\n            key: options.key,\n            attributionsCollapsible: options.attributionsCollapsible,\n            zDirection: options.zDirection,\n        }) || this;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.generateTileUrlFunction_ =\n            _this.tileUrlFunction === UrlTile.prototype.tileUrlFunction;\n        /**\n         * @protected\n         * @type {import(\"../Tile.js\").LoadFunction}\n         */\n        _this.tileLoadFunction = options.tileLoadFunction;\n        if (options.tileUrlFunction) {\n            _this.tileUrlFunction = options.tileUrlFunction;\n        }\n        /**\n         * @protected\n         * @type {!Array<string>|null}\n         */\n        _this.urls = null;\n        if (options.urls) {\n            _this.setUrls(options.urls);\n        }\n        else if (options.url) {\n            _this.setUrl(options.url);\n        }\n        /**\n         * @private\n         * @type {!Object<string, boolean>}\n         */\n        _this.tileLoadingKeys_ = {};\n        return _this;\n    }\n    /**\n     * Return the tile load function of the source.\n     * @return {import(\"../Tile.js\").LoadFunction} TileLoadFunction\n     * @api\n     */\n    UrlTile.prototype.getTileLoadFunction = function () {\n        return this.tileLoadFunction;\n    };\n    /**\n     * Return the tile URL function of the source.\n     * @return {import(\"../Tile.js\").UrlFunction} TileUrlFunction\n     * @api\n     */\n    UrlTile.prototype.getTileUrlFunction = function () {\n        return Object.getPrototypeOf(this).tileUrlFunction === this.tileUrlFunction\n            ? this.tileUrlFunction.bind(this)\n            : this.tileUrlFunction;\n    };\n    /**\n     * Return the URLs used for this source.\n     * When a tileUrlFunction is used instead of url or urls,\n     * null will be returned.\n     * @return {!Array<string>|null} URLs.\n     * @api\n     */\n    UrlTile.prototype.getUrls = function () {\n        return this.urls;\n    };\n    /**\n     * Handle tile change events.\n     * @param {import(\"../events/Event.js\").default} event Event.\n     * @protected\n     */\n    UrlTile.prototype.handleTileChange = function (event) {\n        var tile = /** @type {import(\"../Tile.js\").default} */ (event.target);\n        var uid = getUid(tile);\n        var tileState = tile.getState();\n        var type;\n        if (tileState == TileState.LOADING) {\n            this.tileLoadingKeys_[uid] = true;\n            type = TileEventType.TILELOADSTART;\n        }\n        else if (uid in this.tileLoadingKeys_) {\n            delete this.tileLoadingKeys_[uid];\n            type =\n                tileState == TileState.ERROR\n                    ? TileEventType.TILELOADERROR\n                    : tileState == TileState.LOADED\n                        ? TileEventType.TILELOADEND\n                        : undefined;\n        }\n        if (type != undefined) {\n            this.dispatchEvent(new TileSourceEvent(type, tile));\n        }\n    };\n    /**\n     * Set the tile load function of the source.\n     * @param {import(\"../Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n     * @api\n     */\n    UrlTile.prototype.setTileLoadFunction = function (tileLoadFunction) {\n        this.tileCache.clear();\n        this.tileLoadFunction = tileLoadFunction;\n        this.changed();\n    };\n    /**\n     * Set the tile URL function of the source.\n     * @param {import(\"../Tile.js\").UrlFunction} tileUrlFunction Tile URL function.\n     * @param {string=} key Optional new tile key for the source.\n     * @api\n     */\n    UrlTile.prototype.setTileUrlFunction = function (tileUrlFunction, key) {\n        this.tileUrlFunction = tileUrlFunction;\n        this.tileCache.pruneExceptNewestZ();\n        if (typeof key !== 'undefined') {\n            this.setKey(key);\n        }\n        else {\n            this.changed();\n        }\n    };\n    /**\n     * Set the URL to use for requests.\n     * @param {string} url URL.\n     * @api\n     */\n    UrlTile.prototype.setUrl = function (url) {\n        var urls = expandUrl(url);\n        this.urls = urls;\n        this.setUrls(urls);\n    };\n    /**\n     * Set the URLs to use for requests.\n     * @param {Array<string>} urls URLs.\n     * @api\n     */\n    UrlTile.prototype.setUrls = function (urls) {\n        this.urls = urls;\n        var key = urls.join('\\n');\n        if (this.generateTileUrlFunction_) {\n            this.setTileUrlFunction(createFromTemplates(urls, this.tileGrid), key);\n        }\n        else {\n            this.setKey(key);\n        }\n    };\n    /**\n     * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {string|undefined} Tile URL.\n     */\n    UrlTile.prototype.tileUrlFunction = function (tileCoord, pixelRatio, projection) {\n        return undefined;\n    };\n    /**\n     * Marks a tile coord as being used, without triggering a load.\n     * @param {number} z Tile coordinate z.\n     * @param {number} x Tile coordinate x.\n     * @param {number} y Tile coordinate y.\n     */\n    UrlTile.prototype.useTile = function (z, x, y) {\n        var tileCoordKey = getKeyZXY(z, x, y);\n        if (this.tileCache.containsKey(tileCoordKey)) {\n            this.tileCache.get(tileCoordKey);\n        }\n    };\n    return UrlTile;\n}(TileSource));\nexport default UrlTile;\n//# sourceMappingURL=UrlTile.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/source/TileImage\n */\nimport EventType from '../events/EventType.js';\nimport ImageTile from '../ImageTile.js';\nimport ReprojTile from '../reproj/Tile.js';\nimport TileCache from '../TileCache.js';\nimport TileState from '../TileState.js';\nimport UrlTile from './UrlTile.js';\nimport { ENABLE_RASTER_REPROJECTION } from '../reproj/common.js';\nimport { IMAGE_SMOOTHING_DISABLED } from './common.js';\nimport { equivalent, get as getProjection } from '../proj.js';\nimport { getKey, getKeyZXY } from '../tilecoord.js';\nimport { getForProjection as getTileGridForProjection } from '../tilegrid.js';\nimport { getUid } from '../util.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Initial tile cache size. Will auto-grow to hold at least the number of tiles in the viewport.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [imageSmoothing=true] Enable image smoothing.\n * @property {boolean} [opaque=false] Whether the layer is opaque.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {import(\"./State.js\").default} [state] Source state.\n * @property {typeof import(\"../ImageTile.js\").default} [tileClass] Class used to instantiate image tiles.\n * Default is {@link module:ol/ImageTile~ImageTile}.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] Tile grid.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n *   imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service. For example, if the tile\n * service advertizes 256px by 256px tiles but actually sends 512px\n * by 512px images (for retina/hidpi devices) then `tilePixelRatio`\n * should be set to `2`.\n * @property {import(\"../Tile.js\").UrlFunction} [tileUrlFunction] Optional function to get tile URL given a tile coordinate and the projection.\n * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.\n * A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`, may be\n * used instead of defining each one separately in the `urls` option.\n * @property {Array<string>} [urls] An array of URL templates.\n * @property {boolean} [wrapX] Whether to wrap the world horizontally. The default, is to\n * request out-of-bounds tiles from the server. When set to `false`, only one\n * world will be rendered. When set to `true`, tiles will be requested for one\n * world only, but they will be wrapped horizontally to render multiple worlds.\n * @property {number} [transition] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {string} [key] Optional tile key for proper cache fetching\n * @property {number} [zDirection=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n */\n/**\n * @classdesc\n * Base class for sources providing images divided into a tile grid.\n *\n * @fires import(\"./Tile.js\").TileSourceEvent\n * @api\n */\nvar TileImage = /** @class */ (function (_super) {\n    __extends(TileImage, _super);\n    /**\n     * @param {!Options} options Image tile options.\n     */\n    function TileImage(options) {\n        var _this = _super.call(this, {\n            attributions: options.attributions,\n            cacheSize: options.cacheSize,\n            opaque: options.opaque,\n            projection: options.projection,\n            state: options.state,\n            tileGrid: options.tileGrid,\n            tileLoadFunction: options.tileLoadFunction\n                ? options.tileLoadFunction\n                : defaultTileLoadFunction,\n            tilePixelRatio: options.tilePixelRatio,\n            tileUrlFunction: options.tileUrlFunction,\n            url: options.url,\n            urls: options.urls,\n            wrapX: options.wrapX,\n            transition: options.transition,\n            key: options.key,\n            attributionsCollapsible: options.attributionsCollapsible,\n            zDirection: options.zDirection,\n        }) || this;\n        /**\n         * @protected\n         * @type {?string}\n         */\n        _this.crossOrigin =\n            options.crossOrigin !== undefined ? options.crossOrigin : null;\n        /**\n         * @protected\n         * @type {typeof ImageTile}\n         */\n        _this.tileClass =\n            options.tileClass !== undefined ? options.tileClass : ImageTile;\n        /**\n         * @protected\n         * @type {!Object<string, TileCache>}\n         */\n        _this.tileCacheForProjection = {};\n        /**\n         * @protected\n         * @type {!Object<string, import(\"../tilegrid/TileGrid.js\").default>}\n         */\n        _this.tileGridForProjection = {};\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.reprojectionErrorThreshold_ = options.reprojectionErrorThreshold;\n        /**\n         * @private\n         * @type {object|undefined}\n         */\n        _this.contextOptions_ =\n            options.imageSmoothing === false ? IMAGE_SMOOTHING_DISABLED : undefined;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.renderReprojectionEdges_ = false;\n        return _this;\n    }\n    /**\n     * @return {boolean} Can expire cache.\n     */\n    TileImage.prototype.canExpireCache = function () {\n        if (!ENABLE_RASTER_REPROJECTION) {\n            return _super.prototype.canExpireCache.call(this);\n        }\n        if (this.tileCache.canExpireCache()) {\n            return true;\n        }\n        else {\n            for (var key in this.tileCacheForProjection) {\n                if (this.tileCacheForProjection[key].canExpireCache()) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @param {!Object<string, boolean>} usedTiles Used tiles.\n     */\n    TileImage.prototype.expireCache = function (projection, usedTiles) {\n        if (!ENABLE_RASTER_REPROJECTION) {\n            _super.prototype.expireCache.call(this, projection, usedTiles);\n            return;\n        }\n        var usedTileCache = this.getTileCacheForProjection(projection);\n        this.tileCache.expireCache(this.tileCache == usedTileCache ? usedTiles : {});\n        for (var id in this.tileCacheForProjection) {\n            var tileCache = this.tileCacheForProjection[id];\n            tileCache.expireCache(tileCache == usedTileCache ? usedTiles : {});\n        }\n    };\n    /**\n     * @return {Object|undefined} Context options.\n     */\n    TileImage.prototype.getContextOptions = function () {\n        return this.contextOptions_;\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {number} Gutter.\n     */\n    TileImage.prototype.getGutterForProjection = function (projection) {\n        if (ENABLE_RASTER_REPROJECTION &&\n            this.getProjection() &&\n            projection &&\n            !equivalent(this.getProjection(), projection)) {\n            return 0;\n        }\n        else {\n            return this.getGutter();\n        }\n    };\n    /**\n     * @return {number} Gutter.\n     */\n    TileImage.prototype.getGutter = function () {\n        return 0;\n    };\n    /**\n     * Return the key to be used for all tiles in the source.\n     * @return {string} The key for all tiles.\n     * @protected\n     */\n    TileImage.prototype.getKey = function () {\n        return (_super.prototype.getKey.call(this) +\n            (this.contextOptions_ ? '\\n' + JSON.stringify(this.contextOptions_) : ''));\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {boolean} Opaque.\n     */\n    TileImage.prototype.getOpaque = function (projection) {\n        if (ENABLE_RASTER_REPROJECTION &&\n            this.getProjection() &&\n            projection &&\n            !equivalent(this.getProjection(), projection)) {\n            return false;\n        }\n        else {\n            return _super.prototype.getOpaque.call(this, projection);\n        }\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {!import(\"../tilegrid/TileGrid.js\").default} Tile grid.\n     */\n    TileImage.prototype.getTileGridForProjection = function (projection) {\n        if (!ENABLE_RASTER_REPROJECTION) {\n            return _super.prototype.getTileGridForProjection.call(this, projection);\n        }\n        var thisProj = this.getProjection();\n        if (this.tileGrid && (!thisProj || equivalent(thisProj, projection))) {\n            return this.tileGrid;\n        }\n        else {\n            var projKey = getUid(projection);\n            if (!(projKey in this.tileGridForProjection)) {\n                this.tileGridForProjection[projKey] = getTileGridForProjection(projection);\n            }\n            return this.tileGridForProjection[projKey];\n        }\n    };\n    /**\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {import(\"../TileCache.js\").default} Tile cache.\n     */\n    TileImage.prototype.getTileCacheForProjection = function (projection) {\n        if (!ENABLE_RASTER_REPROJECTION) {\n            return _super.prototype.getTileCacheForProjection.call(this, projection);\n        }\n        var thisProj = this.getProjection();\n        if (!thisProj || equivalent(thisProj, projection)) {\n            return this.tileCache;\n        }\n        else {\n            var projKey = getUid(projection);\n            if (!(projKey in this.tileCacheForProjection)) {\n                this.tileCacheForProjection[projKey] = new TileCache(this.tileCache.highWaterMark);\n            }\n            return this.tileCacheForProjection[projKey];\n        }\n    };\n    /**\n     * @param {number} z Tile coordinate z.\n     * @param {number} x Tile coordinate x.\n     * @param {number} y Tile coordinate y.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @param {string} key The key set on the tile.\n     * @return {!import(\"../Tile.js\").default} Tile.\n     * @private\n     */\n    TileImage.prototype.createTile_ = function (z, x, y, pixelRatio, projection, key) {\n        var tileCoord = [z, x, y];\n        var urlTileCoord = this.getTileCoordForTileUrlFunction(tileCoord, projection);\n        var tileUrl = urlTileCoord\n            ? this.tileUrlFunction(urlTileCoord, pixelRatio, projection)\n            : undefined;\n        var tile = new this.tileClass(tileCoord, tileUrl !== undefined ? TileState.IDLE : TileState.EMPTY, tileUrl !== undefined ? tileUrl : '', this.crossOrigin, this.tileLoadFunction, this.tileOptions);\n        tile.key = key;\n        tile.addEventListener(EventType.CHANGE, this.handleTileChange.bind(this));\n        return tile;\n    };\n    /**\n     * @param {number} z Tile coordinate z.\n     * @param {number} x Tile coordinate x.\n     * @param {number} y Tile coordinate y.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {!import(\"../Tile.js\").default} Tile.\n     */\n    TileImage.prototype.getTile = function (z, x, y, pixelRatio, projection) {\n        var sourceProjection = this.getProjection();\n        if (!ENABLE_RASTER_REPROJECTION ||\n            !sourceProjection ||\n            !projection ||\n            equivalent(sourceProjection, projection)) {\n            return this.getTileInternal(z, x, y, pixelRatio, sourceProjection || projection);\n        }\n        else {\n            var cache = this.getTileCacheForProjection(projection);\n            var tileCoord = [z, x, y];\n            var tile = void 0;\n            var tileCoordKey = getKey(tileCoord);\n            if (cache.containsKey(tileCoordKey)) {\n                tile = cache.get(tileCoordKey);\n            }\n            var key = this.getKey();\n            if (tile && tile.key == key) {\n                return tile;\n            }\n            else {\n                var sourceTileGrid = this.getTileGridForProjection(sourceProjection);\n                var targetTileGrid = this.getTileGridForProjection(projection);\n                var wrappedTileCoord = this.getTileCoordForTileUrlFunction(tileCoord, projection);\n                var newTile = new ReprojTile(sourceProjection, sourceTileGrid, projection, targetTileGrid, tileCoord, wrappedTileCoord, this.getTilePixelRatio(pixelRatio), this.getGutter(), function (z, x, y, pixelRatio) {\n                    return this.getTileInternal(z, x, y, pixelRatio, sourceProjection);\n                }.bind(this), this.reprojectionErrorThreshold_, this.renderReprojectionEdges_, this.contextOptions_);\n                newTile.key = key;\n                if (tile) {\n                    newTile.interimTile = tile;\n                    newTile.refreshInterimChain();\n                    cache.replace(tileCoordKey, newTile);\n                }\n                else {\n                    cache.set(tileCoordKey, newTile);\n                }\n                return newTile;\n            }\n        }\n    };\n    /**\n     * @param {number} z Tile coordinate z.\n     * @param {number} x Tile coordinate x.\n     * @param {number} y Tile coordinate y.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {!import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {!import(\"../Tile.js\").default} Tile.\n     * @protected\n     */\n    TileImage.prototype.getTileInternal = function (z, x, y, pixelRatio, projection) {\n        var tile = null;\n        var tileCoordKey = getKeyZXY(z, x, y);\n        var key = this.getKey();\n        if (!this.tileCache.containsKey(tileCoordKey)) {\n            tile = this.createTile_(z, x, y, pixelRatio, projection, key);\n            this.tileCache.set(tileCoordKey, tile);\n        }\n        else {\n            tile = this.tileCache.get(tileCoordKey);\n            if (tile.key != key) {\n                // The source's params changed. If the tile has an interim tile and if we\n                // can use it then we use it. Otherwise we create a new tile.  In both\n                // cases we attempt to assign an interim tile to the new tile.\n                var interimTile = tile;\n                tile = this.createTile_(z, x, y, pixelRatio, projection, key);\n                //make the new tile the head of the list,\n                if (interimTile.getState() == TileState.IDLE) {\n                    //the old tile hasn't begun loading yet, and is now outdated, so we can simply discard it\n                    tile.interimTile = interimTile.interimTile;\n                }\n                else {\n                    tile.interimTile = interimTile;\n                }\n                tile.refreshInterimChain();\n                this.tileCache.replace(tileCoordKey, tile);\n            }\n        }\n        return tile;\n    };\n    /**\n     * Sets whether to render reprojection edges or not (usually for debugging).\n     * @param {boolean} render Render the edges.\n     * @api\n     */\n    TileImage.prototype.setRenderReprojectionEdges = function (render) {\n        if (!ENABLE_RASTER_REPROJECTION ||\n            this.renderReprojectionEdges_ == render) {\n            return;\n        }\n        this.renderReprojectionEdges_ = render;\n        for (var id in this.tileCacheForProjection) {\n            this.tileCacheForProjection[id].clear();\n        }\n        this.changed();\n    };\n    /**\n     * Sets the tile grid to use when reprojecting the tiles to the given\n     * projection instead of the default tile grid for the projection.\n     *\n     * This can be useful when the default tile grid cannot be created\n     * (e.g. projection has no extent defined) or\n     * for optimization reasons (custom tile size, resolutions, ...).\n     *\n     * @param {import(\"../proj.js\").ProjectionLike} projection Projection.\n     * @param {import(\"../tilegrid/TileGrid.js\").default} tilegrid Tile grid to use for the projection.\n     * @api\n     */\n    TileImage.prototype.setTileGridForProjection = function (projection, tilegrid) {\n        if (ENABLE_RASTER_REPROJECTION) {\n            var proj = getProjection(projection);\n            if (proj) {\n                var projKey = getUid(proj);\n                if (!(projKey in this.tileGridForProjection)) {\n                    this.tileGridForProjection[projKey] = tilegrid;\n                }\n            }\n        }\n    };\n    return TileImage;\n}(UrlTile));\n/**\n * @param {ImageTile} imageTile Image tile.\n * @param {string} src Source.\n */\nfunction defaultTileLoadFunction(imageTile, src) {\n    /** @type {HTMLImageElement|HTMLVideoElement} */ (imageTile.getImage()).src = src;\n}\nexport default TileImage;\n//# sourceMappingURL=TileImage.js.map","/**\n * @module ol/source/XYZ\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport TileImage from './TileImage.js';\nimport { createXYZ, extentFromProjection } from '../tilegrid.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Initial tile cache size. Will auto-grow to hold at least the number of tiles in the viewport.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [imageSmoothing=true] Enable image smoothing.\n * @property {boolean} [opaque=false] Whether the layer is opaque.\n * @property {import(\"../proj.js\").ProjectionLike} [projection='EPSG:3857'] Projection.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {number} [maxZoom=42] Optional max zoom level. Not used if `tileGrid` is provided.\n * @property {number} [minZoom=0] Optional min zoom level. Not used if `tileGrid` is provided.\n * @property {number} [maxResolution] Optional tile grid resolution at level zero. Not used if `tileGrid` is provided.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] Tile grid.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n *   imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service.\n * For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px\n * by 512px images (for retina/hidpi devices) then `tilePixelRatio`\n * should be set to `2`.\n * @property {number|import(\"../size.js\").Size} [tileSize=[256, 256]] The tile size used by the tile service.\n * Not used if `tileGrid` is provided.\n * @property {import(\"../Tile.js\").UrlFunction} [tileUrlFunction] Optional function to get\n * tile URL given a tile coordinate and the projection.\n * Required if `url` or `urls` are not provided.\n * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`,\n * and `{z}` placeholders. A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`,\n * may be used instead of defining each one separately in the `urls` option.\n * @property {Array<string>} [urls] An array of URL templates.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n * @property {number} [transition=250] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {number} [zDirection=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n */\n/**\n * @classdesc\n * Layer source for tile data with URLs in a set XYZ format that are\n * defined in a URL template. By default, this follows the widely-used\n * Google grid where `x` 0 and `y` 0 are in the top left. Grids like\n * TMS where `x` 0 and `y` 0 are in the bottom left can be used by\n * using the `{-y}` placeholder in the URL template, so long as the\n * source does not have a custom tile grid. In this case\n * a `tileUrlFunction` can be used, such as:\n * ```js\n *  tileUrlFunction: function(coordinate) {\n *    return 'http://mapserver.com/' + coordinate[0] + '/' +\n *      coordinate[1] + '/' + (-coordinate[2] - 1) + '.png';\n *  }\n * ```\n * @api\n */\nvar XYZ = /** @class */ (function (_super) {\n    __extends(XYZ, _super);\n    /**\n     * @param {Options=} opt_options XYZ options.\n     */\n    function XYZ(opt_options) {\n        var _this = this;\n        var options = opt_options || {};\n        var projection = options.projection !== undefined ? options.projection : 'EPSG:3857';\n        var tileGrid = options.tileGrid !== undefined\n            ? options.tileGrid\n            : createXYZ({\n                extent: extentFromProjection(projection),\n                maxResolution: options.maxResolution,\n                maxZoom: options.maxZoom,\n                minZoom: options.minZoom,\n                tileSize: options.tileSize,\n            });\n        _this = _super.call(this, {\n            attributions: options.attributions,\n            cacheSize: options.cacheSize,\n            crossOrigin: options.crossOrigin,\n            imageSmoothing: options.imageSmoothing,\n            opaque: options.opaque,\n            projection: projection,\n            reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n            tileGrid: tileGrid,\n            tileLoadFunction: options.tileLoadFunction,\n            tilePixelRatio: options.tilePixelRatio,\n            tileUrlFunction: options.tileUrlFunction,\n            url: options.url,\n            urls: options.urls,\n            wrapX: options.wrapX !== undefined ? options.wrapX : true,\n            transition: options.transition,\n            attributionsCollapsible: options.attributionsCollapsible,\n            zDirection: options.zDirection,\n        }) || this;\n        return _this;\n    }\n    return XYZ;\n}(TileImage));\nexport default XYZ;\n//# sourceMappingURL=XYZ.js.map","/**\n * @module ol/ViewProperty\n */\n/**\n * @enum {string}\n */\nexport default {\n    CENTER: 'center',\n    RESOLUTION: 'resolution',\n    ROTATION: 'rotation',\n};\n//# sourceMappingURL=ViewProperty.js.map","/**\n * @module ol/centerconstraint\n */\nimport { clamp } from './math.js';\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array<number>=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n    return (\n    /**\n     * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n     * @param {number} resolution Resolution.\n     * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n     * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n     * @param {Array<number>=} opt_centerShift Shift between map center and viewport center.\n     * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n     */\n    function (center, resolution, size, opt_isMoving, opt_centerShift) {\n        if (center) {\n            var viewWidth = onlyCenter ? 0 : size[0] * resolution;\n            var viewHeight = onlyCenter ? 0 : size[1] * resolution;\n            var shiftX = opt_centerShift ? opt_centerShift[0] : 0;\n            var shiftY = opt_centerShift ? opt_centerShift[1] : 0;\n            var minX = extent[0] + viewWidth / 2 + shiftX;\n            var maxX = extent[2] - viewWidth / 2 + shiftX;\n            var minY = extent[1] + viewHeight / 2 + shiftY;\n            var maxY = extent[3] - viewHeight / 2 + shiftY;\n            // note: when zooming out of bounds, min and max values for x and y may\n            // end up inverted (min > max); this has to be accounted for\n            if (minX > maxX) {\n                minX = (maxX + minX) / 2;\n                maxX = minX;\n            }\n            if (minY > maxY) {\n                minY = (maxY + minY) / 2;\n                maxY = minY;\n            }\n            var x = clamp(center[0], minX, maxX);\n            var y = clamp(center[1], minY, maxY);\n            var ratio = 30 * resolution;\n            // during an interaction, allow some overscroll\n            if (opt_isMoving && smooth) {\n                x +=\n                    -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n                        ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n                y +=\n                    -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n                        ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n            }\n            return [x, y];\n        }\n        else {\n            return undefined;\n        }\n    });\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate=} center Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n    return center;\n}\n//# sourceMappingURL=centerconstraint.js.map","/**\n * @module ol/resolutionconstraint\n */\nimport { clamp } from './math.js';\nimport { getHeight, getWidth } from './extent.js';\nimport { linearFindNearest } from './array.js';\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(resolution, maxExtent, viewportSize, showFullExtent) {\n    var xResolution = getWidth(maxExtent) / viewportSize[0];\n    var yResolution = getHeight(maxExtent) / viewportSize[1];\n    if (showFullExtent) {\n        return Math.min(resolution, Math.max(xResolution, yResolution));\n    }\n    return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n *  - at 1, ln(x) is 0\n *  - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n    var result = Math.min(resolution, maxResolution);\n    var ratio = 50;\n    result *=\n        Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n            1;\n    if (minResolution) {\n        result = Math.max(result, minResolution);\n        result /=\n            Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n                ratio +\n                1;\n    }\n    return clamp(result, minResolution / 2, maxResolution * 2);\n}\n/**\n * @param {Array<number>} resolutions Resolutions.\n * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent=} opt_maxExtent Maximum allowed extent.\n * @param {boolean=} opt_showFullExtent If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n    return (\n    /**\n     * @param {number|undefined} resolution Resolution.\n     * @param {number} direction Direction.\n     * @param {import(\"./size.js\").Size} size Viewport size.\n     * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n     * @return {number|undefined} Resolution.\n     */\n    function (resolution, direction, size, opt_isMoving) {\n        if (resolution !== undefined) {\n            var maxResolution = resolutions[0];\n            var minResolution = resolutions[resolutions.length - 1];\n            var cappedMaxRes = opt_maxExtent\n                ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n                : maxResolution;\n            // during interacting or animating, allow intermediary values\n            if (opt_isMoving) {\n                var smooth = opt_smooth !== undefined ? opt_smooth : true;\n                if (!smooth) {\n                    return clamp(resolution, minResolution, cappedMaxRes);\n                }\n                return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n            }\n            var capped = Math.min(cappedMaxRes, resolution);\n            var z = Math.floor(linearFindNearest(resolutions, capped, direction));\n            if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n                return resolutions[z + 1];\n            }\n            return resolutions[z];\n        }\n        else {\n            return undefined;\n        }\n    });\n}\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number=} opt_minResolution Minimum resolution.\n * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent=} opt_maxExtent Maximum allowed extent.\n * @param {boolean=} opt_showFullExtent If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n    return (\n    /**\n     * @param {number|undefined} resolution Resolution.\n     * @param {number} direction Direction.\n     * @param {import(\"./size.js\").Size} size Viewport size.\n     * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n     * @return {number|undefined} Resolution.\n     */\n    function (resolution, direction, size, opt_isMoving) {\n        if (resolution !== undefined) {\n            var cappedMaxRes = opt_maxExtent\n                ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n                : maxResolution;\n            var minResolution = opt_minResolution !== undefined ? opt_minResolution : 0;\n            // during interacting or animating, allow intermediary values\n            if (opt_isMoving) {\n                var smooth = opt_smooth !== undefined ? opt_smooth : true;\n                if (!smooth) {\n                    return clamp(resolution, minResolution, cappedMaxRes);\n                }\n                return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n            }\n            var tolerance = 1e-9;\n            var minZoomLevel = Math.ceil(Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance);\n            var offset = -direction * (0.5 - tolerance) + 0.5;\n            var capped = Math.min(cappedMaxRes, resolution);\n            var cappedZoomLevel = Math.floor(Math.log(maxResolution / capped) / Math.log(power) + offset);\n            var zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n            var newResolution = maxResolution / Math.pow(power, zoomLevel);\n            return clamp(newResolution, minResolution, cappedMaxRes);\n        }\n        else {\n            return undefined;\n        }\n    });\n}\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent=} opt_maxExtent Maximum allowed extent.\n * @param {boolean=} opt_showFullExtent If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n    return (\n    /**\n     * @param {number|undefined} resolution Resolution.\n     * @param {number} direction Direction.\n     * @param {import(\"./size.js\").Size} size Viewport size.\n     * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n     * @return {number|undefined} Resolution.\n     */\n    function (resolution, direction, size, opt_isMoving) {\n        if (resolution !== undefined) {\n            var cappedMaxRes = opt_maxExtent\n                ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n                : maxResolution;\n            var smooth = opt_smooth !== undefined ? opt_smooth : true;\n            if (!smooth || !opt_isMoving) {\n                return clamp(resolution, minResolution, cappedMaxRes);\n            }\n            return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n        }\n        else {\n            return undefined;\n        }\n    });\n}\n//# sourceMappingURL=resolutionconstraint.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/View\n */\nimport BaseObject from './Object.js';\nimport GeometryType from './geom/GeometryType.js';\nimport Units from './proj/Units.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport { DEFAULT_TILE_SIZE } from './tilegrid/common.js';\nimport { METERS_PER_UNIT, createProjection, fromUserCoordinate, fromUserExtent, getUserProjection, toUserCoordinate, toUserExtent, } from './proj.js';\nimport { VOID } from './functions.js';\nimport { add as addCoordinate, equals as coordinatesEqual, rotate as rotateCoordinate, } from './coordinate.js';\nimport { assert } from './asserts.js';\nimport { assign } from './obj.js';\nimport { none as centerNone, createExtent } from './centerconstraint.js';\nimport { clamp, modulo } from './math.js';\nimport { createMinMaxResolution } from './resolutionconstraint.js';\nimport { createSnapToN, createSnapToZero, disable, none as rotationNone, } from './rotationconstraint.js';\nimport { createSnapToPower, createSnapToResolutions, } from './resolutionconstraint.js';\nimport { easeOut } from './easing.js';\nimport { equals } from './coordinate.js';\nimport { getCenter, getForViewAndSize, getHeight, getWidth, isEmpty, } from './extent.js';\nimport { inAndOut } from './easing.js';\nimport { linearFindNearest } from './array.js';\nimport { fromExtent as polygonFromExtent } from './geom/Polygon.js';\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter]\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter]\n * @property {number} [sourceResolution]\n * @property {number} [targetResolution]\n * @property {number} [sourceRotation]\n * @property {number} [targetRotation]\n * @property {import(\"./coordinate.js\").Coordinate} [anchor]\n * @property {number} start\n * @property {number} duration\n * @property {boolean} complete\n * @property {function(number):number} easing\n * @property {function(boolean):void} callback\n */\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center\n * @property {import(\"./resolutionconstraint.js\").Type} resolution\n * @property {import(\"./rotationconstraint.js\").Type} rotation\n */\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to fit\n * the extent into. Default is the current size of the first map in the DOM that\n * uses this view, or `[100, 100]` if no such map is found.\n * @property {!Array<number>} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing~inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration.  The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint.  It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`.  If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`.  Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`.  Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge.  If `true` the map\n * may show multiple worlds at low zoom levels.  Only used if the `projection` is\n * global.  Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array<number>} [resolutions] Resolutions to determine the\n * resolution constraint. If set the `maxResolution`, `minResolution`,\n * `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array<number>} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation.  If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing~inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration.  The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center\n * @property {import(\"./proj/Projection.js\").default} projection\n * @property {number} resolution\n * @property {number} rotation\n * @property {number} zoom\n */\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nvar DEFAULT_MIN_ZOOM = 0;\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Spherical Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `opt_anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nvar View = /** @class */ (function (_super) {\n    __extends(View, _super);\n    /**\n     * @param {ViewOptions=} opt_options View options.\n     */\n    function View(opt_options) {\n        var _this = _super.call(this) || this;\n        var options = assign({}, opt_options);\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        _this.hints_ = [0, 0];\n        /**\n         * @private\n         * @type {Array<Array<Animation>>}\n         */\n        _this.animations_ = [];\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.updateAnimationKey_;\n        /**\n         * @private\n         * @const\n         * @type {import(\"./proj/Projection.js\").default}\n         */\n        _this.projection_ = createProjection(options.projection, 'EPSG:3857');\n        /**\n         * @private\n         * @type {import(\"./size.js\").Size}\n         */\n        _this.viewportSize_ = [100, 100];\n        /**\n         * @private\n         * @type {import(\"./coordinate.js\").Coordinate|undefined}\n         */\n        _this.targetCenter_ = null;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.targetResolution_;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.targetRotation_;\n        /**\n         * @private\n         * @type {import(\"./coordinate.js\").Coordinate|undefined}\n         */\n        _this.cancelAnchor_ = undefined;\n        if (options.center) {\n            options.center = fromUserCoordinate(options.center, _this.projection_);\n        }\n        if (options.extent) {\n            options.extent = fromUserExtent(options.extent, _this.projection_);\n        }\n        _this.applyOptions_(options);\n        return _this;\n    }\n    /**\n     * Set up the view with the given options.\n     * @param {ViewOptions} options View options.\n     */\n    View.prototype.applyOptions_ = function (options) {\n        /**\n         * @type {Object<string, *>}\n         */\n        var properties = {};\n        var resolutionConstraintInfo = createResolutionConstraint(options);\n        /**\n         * @private\n         * @type {number}\n         */\n        this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.minResolution_ = resolutionConstraintInfo.minResolution;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n        /**\n         * @private\n         * @type {Array<number>|undefined}\n         */\n        this.resolutions_ = options.resolutions;\n        /**\n         * Padding (in css pixels).\n         * If the map viewport is partially covered with other content (overlays) along\n         * its edges, this setting allows to shift the center of the viewport away from that\n         * content. The order of the values in the array is top, right, bottom, left.\n         * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n         * @type {Array<number>|undefined}\n         * @api\n         */\n        this.padding = options.padding;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.minZoom_ = resolutionConstraintInfo.minZoom;\n        var centerConstraint = createCenterConstraint(options);\n        var resolutionConstraint = resolutionConstraintInfo.constraint;\n        var rotationConstraint = createRotationConstraint(options);\n        /**\n         * @private\n         * @type {Constraints}\n         */\n        this.constraints_ = {\n            center: centerConstraint,\n            resolution: resolutionConstraint,\n            rotation: rotationConstraint,\n        };\n        this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n        this.setCenterInternal(options.center !== undefined ? options.center : null);\n        if (options.resolution !== undefined) {\n            this.setResolution(options.resolution);\n        }\n        else if (options.zoom !== undefined) {\n            this.setZoom(options.zoom);\n        }\n        this.setProperties(properties);\n        /**\n         * @private\n         * @type {ViewOptions}\n         */\n        this.options_ = options;\n    };\n    /**\n     * Get an updated version of the view options used to construct the view.  The\n     * current resolution (or zoom), center, and rotation are applied to any stored\n     * options.  The provided options can be used to apply new min/max zoom or\n     * resolution limits.\n     * @param {ViewOptions} newOptions New options to be applied.\n     * @return {ViewOptions} New options updated with the current view state.\n     */\n    View.prototype.getUpdatedOptions_ = function (newOptions) {\n        var options = assign({}, this.options_);\n        // preserve resolution (or zoom)\n        if (options.resolution !== undefined) {\n            options.resolution = this.getResolution();\n        }\n        else {\n            options.zoom = this.getZoom();\n        }\n        // preserve center\n        options.center = this.getCenterInternal();\n        // preserve rotation\n        options.rotation = this.getRotation();\n        return assign({}, options, newOptions);\n    };\n    /**\n     * Animate the view.  The view's center, zoom (or resolution), and rotation\n     * can be animated for smooth transitions between view states.  For example,\n     * to animate the view to a new zoom level:\n     *\n     *     view.animate({zoom: view.getZoom() + 1});\n     *\n     * By default, the animation lasts one second and uses in-and-out easing.  You\n     * can customize this behavior by including `duration` (in milliseconds) and\n     * `easing` options (see {@link module:ol/easing}).\n     *\n     * To chain together multiple animations, call the method with multiple\n     * animation objects.  For example, to first zoom and then pan:\n     *\n     *     view.animate({zoom: 10}, {center: [0, 0]});\n     *\n     * If you provide a function as the last argument to the animate method, it\n     * will get called at the end of an animation series.  The callback will be\n     * called with `true` if the animation series completed on its own or `false`\n     * if it was cancelled.\n     *\n     * Animations are cancelled by user interactions (e.g. dragging the map) or by\n     * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n     * (or another method that calls one of these).\n     *\n     * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n     *     options.  Multiple animations can be run in series by passing multiple\n     *     options objects.  To run multiple animations in parallel, call the method\n     *     multiple times.  An optional callback can be provided as a final\n     *     argument.  The callback will be called with a boolean indicating whether\n     *     the animation completed without being cancelled.\n     * @api\n     */\n    View.prototype.animate = function (var_args) {\n        if (this.isDef() && !this.getAnimating()) {\n            this.resolveConstraints(0);\n        }\n        var args = new Array(arguments.length);\n        for (var i = 0; i < args.length; ++i) {\n            var options = arguments[i];\n            if (options.center) {\n                options = assign({}, options);\n                options.center = fromUserCoordinate(options.center, this.getProjection());\n            }\n            if (options.anchor) {\n                options = assign({}, options);\n                options.anchor = fromUserCoordinate(options.anchor, this.getProjection());\n            }\n            args[i] = options;\n        }\n        this.animateInternal.apply(this, args);\n    };\n    /**\n     * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n     */\n    View.prototype.animateInternal = function (var_args) {\n        var animationCount = arguments.length;\n        var callback;\n        if (animationCount > 1 &&\n            typeof arguments[animationCount - 1] === 'function') {\n            callback = arguments[animationCount - 1];\n            --animationCount;\n        }\n        if (!this.isDef()) {\n            // if view properties are not yet set, shortcut to the final state\n            var state = arguments[animationCount - 1];\n            if (state.center) {\n                this.setCenterInternal(state.center);\n            }\n            if (state.zoom !== undefined) {\n                this.setZoom(state.zoom);\n            }\n            if (state.rotation !== undefined) {\n                this.setRotation(state.rotation);\n            }\n            if (callback) {\n                animationCallback(callback, true);\n            }\n            return;\n        }\n        var start = Date.now();\n        var center = this.targetCenter_.slice();\n        var resolution = this.targetResolution_;\n        var rotation = this.targetRotation_;\n        var series = [];\n        for (var i = 0; i < animationCount; ++i) {\n            var options = /** @type {AnimationOptions} */ (arguments[i]);\n            var animation = {\n                start: start,\n                complete: false,\n                anchor: options.anchor,\n                duration: options.duration !== undefined ? options.duration : 1000,\n                easing: options.easing || inAndOut,\n                callback: callback,\n            };\n            if (options.center) {\n                animation.sourceCenter = center;\n                animation.targetCenter = options.center.slice();\n                center = animation.targetCenter;\n            }\n            if (options.zoom !== undefined) {\n                animation.sourceResolution = resolution;\n                animation.targetResolution = this.getResolutionForZoom(options.zoom);\n                resolution = animation.targetResolution;\n            }\n            else if (options.resolution) {\n                animation.sourceResolution = resolution;\n                animation.targetResolution = options.resolution;\n                resolution = animation.targetResolution;\n            }\n            if (options.rotation !== undefined) {\n                animation.sourceRotation = rotation;\n                var delta = modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n                animation.targetRotation = rotation + delta;\n                rotation = animation.targetRotation;\n            }\n            // check if animation is a no-op\n            if (isNoopAnimation(animation)) {\n                animation.complete = true;\n                // we still push it onto the series for callback handling\n            }\n            else {\n                start += animation.duration;\n            }\n            series.push(animation);\n        }\n        this.animations_.push(series);\n        this.setHint(ViewHint.ANIMATING, 1);\n        this.updateAnimations_();\n    };\n    /**\n     * Determine if the view is being animated.\n     * @return {boolean} The view is being animated.\n     * @api\n     */\n    View.prototype.getAnimating = function () {\n        return this.hints_[ViewHint.ANIMATING] > 0;\n    };\n    /**\n     * Determine if the user is interacting with the view, such as panning or zooming.\n     * @return {boolean} The view is being interacted with.\n     * @api\n     */\n    View.prototype.getInteracting = function () {\n        return this.hints_[ViewHint.INTERACTING] > 0;\n    };\n    /**\n     * Cancel any ongoing animations.\n     * @api\n     */\n    View.prototype.cancelAnimations = function () {\n        this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n        var anchor;\n        for (var i = 0, ii = this.animations_.length; i < ii; ++i) {\n            var series = this.animations_[i];\n            if (series[0].callback) {\n                animationCallback(series[0].callback, false);\n            }\n            if (!anchor) {\n                for (var j = 0, jj = series.length; j < jj; ++j) {\n                    var animation = series[j];\n                    if (!animation.complete) {\n                        anchor = animation.anchor;\n                        break;\n                    }\n                }\n            }\n        }\n        this.animations_.length = 0;\n        this.cancelAnchor_ = anchor;\n    };\n    /**\n     * Update all animations.\n     */\n    View.prototype.updateAnimations_ = function () {\n        if (this.updateAnimationKey_ !== undefined) {\n            cancelAnimationFrame(this.updateAnimationKey_);\n            this.updateAnimationKey_ = undefined;\n        }\n        if (!this.getAnimating()) {\n            return;\n        }\n        var now = Date.now();\n        var more = false;\n        for (var i = this.animations_.length - 1; i >= 0; --i) {\n            var series = this.animations_[i];\n            var seriesComplete = true;\n            for (var j = 0, jj = series.length; j < jj; ++j) {\n                var animation = series[j];\n                if (animation.complete) {\n                    continue;\n                }\n                var elapsed = now - animation.start;\n                var fraction = animation.duration > 0 ? elapsed / animation.duration : 1;\n                if (fraction >= 1) {\n                    animation.complete = true;\n                    fraction = 1;\n                }\n                else {\n                    seriesComplete = false;\n                }\n                var progress = animation.easing(fraction);\n                if (animation.sourceCenter) {\n                    var x0 = animation.sourceCenter[0];\n                    var y0 = animation.sourceCenter[1];\n                    var x1 = animation.targetCenter[0];\n                    var y1 = animation.targetCenter[1];\n                    var x = x0 + progress * (x1 - x0);\n                    var y = y0 + progress * (y1 - y0);\n                    this.targetCenter_ = [x, y];\n                }\n                if (animation.sourceResolution && animation.targetResolution) {\n                    var resolution = progress === 1\n                        ? animation.targetResolution\n                        : animation.sourceResolution +\n                            progress *\n                                (animation.targetResolution - animation.sourceResolution);\n                    if (animation.anchor) {\n                        var size = this.getViewportSize_(this.getRotation());\n                        var constrainedResolution = this.constraints_.resolution(resolution, 0, size, true);\n                        this.targetCenter_ = this.calculateCenterZoom(constrainedResolution, animation.anchor);\n                    }\n                    this.targetResolution_ = resolution;\n                    this.applyTargetState_(true);\n                }\n                if (animation.sourceRotation !== undefined &&\n                    animation.targetRotation !== undefined) {\n                    var rotation = progress === 1\n                        ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n                            Math.PI\n                        : animation.sourceRotation +\n                            progress *\n                                (animation.targetRotation - animation.sourceRotation);\n                    if (animation.anchor) {\n                        var constrainedRotation = this.constraints_.rotation(rotation, true);\n                        this.targetCenter_ = this.calculateCenterRotate(constrainedRotation, animation.anchor);\n                    }\n                    this.targetRotation_ = rotation;\n                }\n                this.applyTargetState_(true);\n                more = true;\n                if (!animation.complete) {\n                    break;\n                }\n            }\n            if (seriesComplete) {\n                this.animations_[i] = null;\n                this.setHint(ViewHint.ANIMATING, -1);\n                var callback = series[0].callback;\n                if (callback) {\n                    animationCallback(callback, true);\n                }\n            }\n        }\n        // prune completed series\n        this.animations_ = this.animations_.filter(Boolean);\n        if (more && this.updateAnimationKey_ === undefined) {\n            this.updateAnimationKey_ = requestAnimationFrame(this.updateAnimations_.bind(this));\n        }\n    };\n    /**\n     * @param {number} rotation Target rotation.\n     * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n     * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n     */\n    View.prototype.calculateCenterRotate = function (rotation, anchor) {\n        var center;\n        var currentCenter = this.getCenterInternal();\n        if (currentCenter !== undefined) {\n            center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n            rotateCoordinate(center, rotation - this.getRotation());\n            addCoordinate(center, anchor);\n        }\n        return center;\n    };\n    /**\n     * @param {number} resolution Target resolution.\n     * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n     * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n     */\n    View.prototype.calculateCenterZoom = function (resolution, anchor) {\n        var center;\n        var currentCenter = this.getCenterInternal();\n        var currentResolution = this.getResolution();\n        if (currentCenter !== undefined && currentResolution !== undefined) {\n            var x = anchor[0] -\n                (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n            var y = anchor[1] -\n                (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n            center = [x, y];\n        }\n        return center;\n    };\n    /**\n     * Returns the current viewport size.\n     * @private\n     * @param {number=} opt_rotation Take into account the rotation of the viewport when giving the size\n     * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n     */\n    View.prototype.getViewportSize_ = function (opt_rotation) {\n        var size = this.viewportSize_;\n        if (opt_rotation) {\n            var w = size[0];\n            var h = size[1];\n            return [\n                Math.abs(w * Math.cos(opt_rotation)) +\n                    Math.abs(h * Math.sin(opt_rotation)),\n                Math.abs(w * Math.sin(opt_rotation)) +\n                    Math.abs(h * Math.cos(opt_rotation)),\n            ];\n        }\n        else {\n            return size;\n        }\n    };\n    /**\n     * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n     * to avoid performance hit and layout reflow.\n     * This should be done on map size change.\n     * Note: the constraints are not resolved during an animation to avoid stopping it\n     * @param {import(\"./size.js\").Size=} opt_size Viewport size; if undefined, [100, 100] is assumed\n     */\n    View.prototype.setViewportSize = function (opt_size) {\n        this.viewportSize_ = Array.isArray(opt_size)\n            ? opt_size.slice()\n            : [100, 100];\n        if (!this.getAnimating()) {\n            this.resolveConstraints(0);\n        }\n    };\n    /**\n     * Get the view center.\n     * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n     * @observable\n     * @api\n     */\n    View.prototype.getCenter = function () {\n        var center = this.getCenterInternal();\n        if (!center) {\n            return center;\n        }\n        return toUserCoordinate(center, this.getProjection());\n    };\n    /**\n     * Get the view center without transforming to user projection.\n     * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n     */\n    View.prototype.getCenterInternal = function () {\n        return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (this.get(ViewProperty.CENTER));\n    };\n    /**\n     * @return {Constraints} Constraints.\n     */\n    View.prototype.getConstraints = function () {\n        return this.constraints_;\n    };\n    /**\n     * @return {boolean} Resolution constraint is set\n     */\n    View.prototype.getConstrainResolution = function () {\n        return this.options_.constrainResolution;\n    };\n    /**\n     * @param {Array<number>=} opt_hints Destination array.\n     * @return {Array<number>} Hint.\n     */\n    View.prototype.getHints = function (opt_hints) {\n        if (opt_hints !== undefined) {\n            opt_hints[0] = this.hints_[0];\n            opt_hints[1] = this.hints_[1];\n            return opt_hints;\n        }\n        else {\n            return this.hints_.slice();\n        }\n    };\n    /**\n     * Calculate the extent for the current view state and the passed size.\n     * The size is the pixel dimensions of the box into which the calculated extent\n     * should fit. In most cases you want to get the extent of the entire map,\n     * that is `map.getSize()`.\n     * @param {import(\"./size.js\").Size=} opt_size Box pixel size. If not provided, the size\n     * of the map that uses this view will be used.\n     * @return {import(\"./extent.js\").Extent} Extent.\n     * @api\n     */\n    View.prototype.calculateExtent = function (opt_size) {\n        var extent = this.calculateExtentInternal(opt_size);\n        return toUserExtent(extent, this.getProjection());\n    };\n    /**\n     * @param {import(\"./size.js\").Size=} opt_size Box pixel size. If not provided,\n     * the map's last known viewport size will be used.\n     * @return {import(\"./extent.js\").Extent} Extent.\n     */\n    View.prototype.calculateExtentInternal = function (opt_size) {\n        var size = opt_size || this.getViewportSize_();\n        var center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (this.getCenterInternal());\n        assert(center, 1); // The view center is not defined\n        var resolution = /** @type {!number} */ (this.getResolution());\n        assert(resolution !== undefined, 2); // The view resolution is not defined\n        var rotation = /** @type {!number} */ (this.getRotation());\n        assert(rotation !== undefined, 3); // The view rotation is not defined\n        return getForViewAndSize(center, resolution, rotation, size);\n    };\n    /**\n     * Get the maximum resolution of the view.\n     * @return {number} The maximum resolution of the view.\n     * @api\n     */\n    View.prototype.getMaxResolution = function () {\n        return this.maxResolution_;\n    };\n    /**\n     * Get the minimum resolution of the view.\n     * @return {number} The minimum resolution of the view.\n     * @api\n     */\n    View.prototype.getMinResolution = function () {\n        return this.minResolution_;\n    };\n    /**\n     * Get the maximum zoom level for the view.\n     * @return {number} The maximum zoom level.\n     * @api\n     */\n    View.prototype.getMaxZoom = function () {\n        return /** @type {number} */ (this.getZoomForResolution(this.minResolution_));\n    };\n    /**\n     * Set a new maximum zoom level for the view.\n     * @param {number} zoom The maximum zoom level.\n     * @api\n     */\n    View.prototype.setMaxZoom = function (zoom) {\n        this.applyOptions_(this.getUpdatedOptions_({ maxZoom: zoom }));\n    };\n    /**\n     * Get the minimum zoom level for the view.\n     * @return {number} The minimum zoom level.\n     * @api\n     */\n    View.prototype.getMinZoom = function () {\n        return /** @type {number} */ (this.getZoomForResolution(this.maxResolution_));\n    };\n    /**\n     * Set a new minimum zoom level for the view.\n     * @param {number} zoom The minimum zoom level.\n     * @api\n     */\n    View.prototype.setMinZoom = function (zoom) {\n        this.applyOptions_(this.getUpdatedOptions_({ minZoom: zoom }));\n    };\n    /**\n     * Set whether the view shoud allow intermediary zoom levels.\n     * @param {boolean} enabled Whether the resolution is constrained.\n     * @api\n     */\n    View.prototype.setConstrainResolution = function (enabled) {\n        this.applyOptions_(this.getUpdatedOptions_({ constrainResolution: enabled }));\n    };\n    /**\n     * Get the view projection.\n     * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n     * @api\n     */\n    View.prototype.getProjection = function () {\n        return this.projection_;\n    };\n    /**\n     * Get the view resolution.\n     * @return {number|undefined} The resolution of the view.\n     * @observable\n     * @api\n     */\n    View.prototype.getResolution = function () {\n        return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n    };\n    /**\n     * Get the resolutions for the view. This returns the array of resolutions\n     * passed to the constructor of the View, or undefined if none were given.\n     * @return {Array<number>|undefined} The resolutions of the view.\n     * @api\n     */\n    View.prototype.getResolutions = function () {\n        return this.resolutions_;\n    };\n    /**\n     * Get the resolution for a provided extent (in map units) and size (in pixels).\n     * @param {import(\"./extent.js\").Extent} extent Extent.\n     * @param {import(\"./size.js\").Size=} opt_size Box pixel size.\n     * @return {number} The resolution at which the provided extent will render at\n     *     the given size.\n     * @api\n     */\n    View.prototype.getResolutionForExtent = function (extent, opt_size) {\n        return this.getResolutionForExtentInternal(fromUserExtent(extent, this.getProjection()), opt_size);\n    };\n    /**\n     * Get the resolution for a provided extent (in map units) and size (in pixels).\n     * @param {import(\"./extent.js\").Extent} extent Extent.\n     * @param {import(\"./size.js\").Size=} opt_size Box pixel size.\n     * @return {number} The resolution at which the provided extent will render at\n     *     the given size.\n     */\n    View.prototype.getResolutionForExtentInternal = function (extent, opt_size) {\n        var size = opt_size || this.getViewportSize_();\n        var xResolution = getWidth(extent) / size[0];\n        var yResolution = getHeight(extent) / size[1];\n        return Math.max(xResolution, yResolution);\n    };\n    /**\n     * Return a function that returns a value between 0 and 1 for a\n     * resolution. Exponential scaling is assumed.\n     * @param {number=} opt_power Power.\n     * @return {function(number): number} Resolution for value function.\n     */\n    View.prototype.getResolutionForValueFunction = function (opt_power) {\n        var power = opt_power || 2;\n        var maxResolution = this.getConstrainedResolution(this.maxResolution_);\n        var minResolution = this.minResolution_;\n        var max = Math.log(maxResolution / minResolution) / Math.log(power);\n        return (\n        /**\n         * @param {number} value Value.\n         * @return {number} Resolution.\n         */\n        function (value) {\n            var resolution = maxResolution / Math.pow(power, value * max);\n            return resolution;\n        });\n    };\n    /**\n     * Get the view rotation.\n     * @return {number} The rotation of the view in radians.\n     * @observable\n     * @api\n     */\n    View.prototype.getRotation = function () {\n        return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n    };\n    /**\n     * Return a function that returns a resolution for a value between\n     * 0 and 1. Exponential scaling is assumed.\n     * @param {number=} opt_power Power.\n     * @return {function(number): number} Value for resolution function.\n     */\n    View.prototype.getValueForResolutionFunction = function (opt_power) {\n        var logPower = Math.log(opt_power || 2);\n        var maxResolution = this.getConstrainedResolution(this.maxResolution_);\n        var minResolution = this.minResolution_;\n        var max = Math.log(maxResolution / minResolution) / logPower;\n        return (\n        /**\n         * @param {number} resolution Resolution.\n         * @return {number} Value.\n         */\n        function (resolution) {\n            var value = Math.log(maxResolution / resolution) / logPower / max;\n            return value;\n        });\n    };\n    /**\n     * Returns the size of the viewport minus padding.\n     * @private\n     * @param {number=} opt_rotation Take into account the rotation of the viewport when giving the size\n     * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n     */\n    View.prototype.getViewportSizeMinusPadding_ = function (opt_rotation) {\n        var size = this.getViewportSize_(opt_rotation);\n        var padding = this.padding;\n        if (padding) {\n            size = [\n                size[0] - padding[1] - padding[3],\n                size[1] - padding[0] - padding[2],\n            ];\n        }\n        return size;\n    };\n    /**\n     * @return {State} View state.\n     */\n    View.prototype.getState = function () {\n        var projection = this.getProjection();\n        var resolution = /** @type {number} */ (this.getResolution());\n        var rotation = this.getRotation();\n        var center = /** @type {import(\"./coordinate.js\").Coordinate} */ (this.getCenterInternal());\n        var padding = this.padding;\n        if (padding) {\n            var reducedSize = this.getViewportSizeMinusPadding_();\n            center = calculateCenterOn(center, this.getViewportSize_(), [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]], resolution, rotation);\n        }\n        return {\n            center: center.slice(0),\n            projection: projection !== undefined ? projection : null,\n            resolution: resolution,\n            rotation: rotation,\n            zoom: this.getZoom(),\n        };\n    };\n    /**\n     * Get the current zoom level. This method may return non-integer zoom levels\n     * if the view does not constrain the resolution, or if an interaction or\n     * animation is underway.\n     * @return {number|undefined} Zoom.\n     * @api\n     */\n    View.prototype.getZoom = function () {\n        var zoom;\n        var resolution = this.getResolution();\n        if (resolution !== undefined) {\n            zoom = this.getZoomForResolution(resolution);\n        }\n        return zoom;\n    };\n    /**\n     * Get the zoom level for a resolution.\n     * @param {number} resolution The resolution.\n     * @return {number|undefined} The zoom level for the provided resolution.\n     * @api\n     */\n    View.prototype.getZoomForResolution = function (resolution) {\n        var offset = this.minZoom_ || 0;\n        var max, zoomFactor;\n        if (this.resolutions_) {\n            var nearest = linearFindNearest(this.resolutions_, resolution, 1);\n            offset = nearest;\n            max = this.resolutions_[nearest];\n            if (nearest == this.resolutions_.length - 1) {\n                zoomFactor = 2;\n            }\n            else {\n                zoomFactor = max / this.resolutions_[nearest + 1];\n            }\n        }\n        else {\n            max = this.maxResolution_;\n            zoomFactor = this.zoomFactor_;\n        }\n        return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n    };\n    /**\n     * Get the resolution for a zoom level.\n     * @param {number} zoom Zoom level.\n     * @return {number} The view resolution for the provided zoom level.\n     * @api\n     */\n    View.prototype.getResolutionForZoom = function (zoom) {\n        if (this.resolutions_) {\n            if (this.resolutions_.length <= 1) {\n                return 0;\n            }\n            var baseLevel = clamp(Math.floor(zoom), 0, this.resolutions_.length - 2);\n            var zoomFactor = this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n            return (this.resolutions_[baseLevel] /\n                Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1)));\n        }\n        else {\n            return (this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_));\n        }\n    };\n    /**\n     * Fit the given geometry or extent based on the given map size and border.\n     * The size is pixel dimensions of the box to fit the extent into.\n     * In most cases you will want to use the map size, that is `map.getSize()`.\n     * Takes care of the map angle.\n     * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n     *     extent to fit the view to.\n     * @param {FitOptions=} opt_options Options.\n     * @api\n     */\n    View.prototype.fit = function (geometryOrExtent, opt_options) {\n        /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n        var geometry;\n        assert(Array.isArray(geometryOrExtent) ||\n            typeof ( /** @type {?} */(geometryOrExtent).getSimplifiedGeometry) ===\n                'function', 24); // Invalid extent or geometry provided as `geometry`\n        if (Array.isArray(geometryOrExtent)) {\n            assert(!isEmpty(geometryOrExtent), 25); // Cannot fit empty extent provided as `geometry`\n            var extent = fromUserExtent(geometryOrExtent, this.getProjection());\n            geometry = polygonFromExtent(extent);\n        }\n        else if (geometryOrExtent.getType() === GeometryType.CIRCLE) {\n            var extent = fromUserExtent(geometryOrExtent.getExtent(), this.getProjection());\n            geometry = polygonFromExtent(extent);\n            geometry.rotate(this.getRotation(), getCenter(extent));\n        }\n        else {\n            var userProjection = getUserProjection();\n            if (userProjection) {\n                geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometryOrExtent\n                    .clone()\n                    .transform(userProjection, this.getProjection()));\n            }\n            else {\n                geometry = geometryOrExtent;\n            }\n        }\n        this.fitInternal(geometry, opt_options);\n    };\n    /**\n     * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n     * @param {FitOptions=} opt_options Options.\n     */\n    View.prototype.fitInternal = function (geometry, opt_options) {\n        var options = opt_options || {};\n        var size = options.size;\n        if (!size) {\n            size = this.getViewportSizeMinusPadding_();\n        }\n        var padding = options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n        var nearest = options.nearest !== undefined ? options.nearest : false;\n        var minResolution;\n        if (options.minResolution !== undefined) {\n            minResolution = options.minResolution;\n        }\n        else if (options.maxZoom !== undefined) {\n            minResolution = this.getResolutionForZoom(options.maxZoom);\n        }\n        else {\n            minResolution = 0;\n        }\n        var coords = geometry.getFlatCoordinates();\n        // calculate rotated extent\n        var rotation = this.getRotation();\n        var cosAngle = Math.cos(-rotation);\n        var sinAngle = Math.sin(-rotation);\n        var minRotX = +Infinity;\n        var minRotY = +Infinity;\n        var maxRotX = -Infinity;\n        var maxRotY = -Infinity;\n        var stride = geometry.getStride();\n        for (var i = 0, ii = coords.length; i < ii; i += stride) {\n            var rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n            var rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n            minRotX = Math.min(minRotX, rotX);\n            minRotY = Math.min(minRotY, rotY);\n            maxRotX = Math.max(maxRotX, rotX);\n            maxRotY = Math.max(maxRotY, rotY);\n        }\n        // calculate resolution\n        var resolution = this.getResolutionForExtentInternal([minRotX, minRotY, maxRotX, maxRotY], [size[0] - padding[1] - padding[3], size[1] - padding[0] - padding[2]]);\n        resolution = isNaN(resolution)\n            ? minResolution\n            : Math.max(resolution, minResolution);\n        resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n        // calculate center\n        sinAngle = -sinAngle; // go back to original rotation\n        var centerRotX = (minRotX + maxRotX) / 2;\n        var centerRotY = (minRotY + maxRotY) / 2;\n        centerRotX += ((padding[1] - padding[3]) / 2) * resolution;\n        centerRotY += ((padding[0] - padding[2]) / 2) * resolution;\n        var centerX = centerRotX * cosAngle - centerRotY * sinAngle;\n        var centerY = centerRotY * cosAngle + centerRotX * sinAngle;\n        var center = this.getConstrainedCenter([centerX, centerY], resolution);\n        var callback = options.callback ? options.callback : VOID;\n        if (options.duration !== undefined) {\n            this.animateInternal({\n                resolution: resolution,\n                center: center,\n                duration: options.duration,\n                easing: options.easing,\n            }, callback);\n        }\n        else {\n            this.targetResolution_ = resolution;\n            this.targetCenter_ = center;\n            this.applyTargetState_(false, true);\n            animationCallback(callback, true);\n        }\n    };\n    /**\n     * Center on coordinate and view position.\n     * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {import(\"./size.js\").Size} size Box pixel size.\n     * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n     * @api\n     */\n    View.prototype.centerOn = function (coordinate, size, position) {\n        this.centerOnInternal(fromUserCoordinate(coordinate, this.getProjection()), size, position);\n    };\n    /**\n     * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {import(\"./size.js\").Size} size Box pixel size.\n     * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n     */\n    View.prototype.centerOnInternal = function (coordinate, size, position) {\n        this.setCenterInternal(calculateCenterOn(coordinate, size, position, this.getResolution(), this.getRotation()));\n    };\n    /**\n     * Calculates the shift between map and viewport center.\n     * @param {import(\"./coordinate.js\").Coordinate} center Center.\n     * @param {number} resolution Resolution.\n     * @param {number} rotation Rotation.\n     * @param {import(\"./size.js\").Size} size Size.\n     * @return {Array<number>|undefined} Center shift.\n     */\n    View.prototype.calculateCenterShift = function (center, resolution, rotation, size) {\n        var centerShift;\n        var padding = this.padding;\n        if (padding && center) {\n            var reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n            var shiftedCenter = calculateCenterOn(center, size, [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]], resolution, rotation);\n            centerShift = [\n                center[0] - shiftedCenter[0],\n                center[1] - shiftedCenter[1],\n            ];\n        }\n        return centerShift;\n    };\n    /**\n     * @return {boolean} Is defined.\n     */\n    View.prototype.isDef = function () {\n        return !!this.getCenterInternal() && this.getResolution() !== undefined;\n    };\n    /**\n     * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n     * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n     * @api\n     */\n    View.prototype.adjustCenter = function (deltaCoordinates) {\n        var center = toUserCoordinate(this.targetCenter_, this.getProjection());\n        this.setCenter([\n            center[0] + deltaCoordinates[0],\n            center[1] + deltaCoordinates[1],\n        ]);\n    };\n    /**\n     * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n     * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n     */\n    View.prototype.adjustCenterInternal = function (deltaCoordinates) {\n        var center = this.targetCenter_;\n        this.setCenterInternal([\n            center[0] + deltaCoordinates[0],\n            center[1] + deltaCoordinates[1],\n        ]);\n    };\n    /**\n     * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n     * constraint will apply.\n     * @param {number} ratio The ratio to apply on the view resolution.\n     * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n     * @api\n     */\n    View.prototype.adjustResolution = function (ratio, opt_anchor) {\n        var anchor = opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n        this.adjustResolutionInternal(ratio, anchor);\n    };\n    /**\n     * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n     * constraint will apply.\n     * @param {number} ratio The ratio to apply on the view resolution.\n     * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n     */\n    View.prototype.adjustResolutionInternal = function (ratio, opt_anchor) {\n        var isMoving = this.getAnimating() || this.getInteracting();\n        var size = this.getViewportSize_(this.getRotation());\n        var newResolution = this.constraints_.resolution(this.targetResolution_ * ratio, 0, size, isMoving);\n        if (opt_anchor) {\n            this.targetCenter_ = this.calculateCenterZoom(newResolution, opt_anchor);\n        }\n        this.targetResolution_ *= ratio;\n        this.applyTargetState_();\n    };\n    /**\n     * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n     * constraint will apply.\n     * @param {number} delta Relative value to add to the zoom level.\n     * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n     * @api\n     */\n    View.prototype.adjustZoom = function (delta, opt_anchor) {\n        this.adjustResolution(Math.pow(this.zoomFactor_, -delta), opt_anchor);\n    };\n    /**\n     * Adds a value to the view rotation, optionally using an anchor. Any rotation\n     * constraint will apply.\n     * @param {number} delta Relative value to add to the zoom rotation, in radians.\n     * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The rotation center.\n     * @api\n     */\n    View.prototype.adjustRotation = function (delta, opt_anchor) {\n        if (opt_anchor) {\n            opt_anchor = fromUserCoordinate(opt_anchor, this.getProjection());\n        }\n        this.adjustRotationInternal(delta, opt_anchor);\n    };\n    /**\n     * @param {number} delta Relative value to add to the zoom rotation, in radians.\n     * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The rotation center.\n     */\n    View.prototype.adjustRotationInternal = function (delta, opt_anchor) {\n        var isMoving = this.getAnimating() || this.getInteracting();\n        var newRotation = this.constraints_.rotation(this.targetRotation_ + delta, isMoving);\n        if (opt_anchor) {\n            this.targetCenter_ = this.calculateCenterRotate(newRotation, opt_anchor);\n        }\n        this.targetRotation_ += delta;\n        this.applyTargetState_();\n    };\n    /**\n     * Set the center of the current view. Any extent constraint will apply.\n     * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n     * @observable\n     * @api\n     */\n    View.prototype.setCenter = function (center) {\n        this.setCenterInternal(fromUserCoordinate(center, this.getProjection()));\n    };\n    /**\n     * Set the center using the view projection (not the user projection).\n     * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n     */\n    View.prototype.setCenterInternal = function (center) {\n        this.targetCenter_ = center;\n        this.applyTargetState_();\n    };\n    /**\n     * @param {import(\"./ViewHint.js\").default} hint Hint.\n     * @param {number} delta Delta.\n     * @return {number} New value.\n     */\n    View.prototype.setHint = function (hint, delta) {\n        this.hints_[hint] += delta;\n        this.changed();\n        return this.hints_[hint];\n    };\n    /**\n     * Set the resolution for this view. Any resolution constraint will apply.\n     * @param {number|undefined} resolution The resolution of the view.\n     * @observable\n     * @api\n     */\n    View.prototype.setResolution = function (resolution) {\n        this.targetResolution_ = resolution;\n        this.applyTargetState_();\n    };\n    /**\n     * Set the rotation for this view. Any rotation constraint will apply.\n     * @param {number} rotation The rotation of the view in radians.\n     * @observable\n     * @api\n     */\n    View.prototype.setRotation = function (rotation) {\n        this.targetRotation_ = rotation;\n        this.applyTargetState_();\n    };\n    /**\n     * Zoom to a specific zoom level. Any resolution constrain will apply.\n     * @param {number} zoom Zoom level.\n     * @api\n     */\n    View.prototype.setZoom = function (zoom) {\n        this.setResolution(this.getResolutionForZoom(zoom));\n    };\n    /**\n     * Recompute rotation/resolution/center based on target values.\n     * Note: we have to compute rotation first, then resolution and center considering that\n     * parameters can influence one another in case a view extent constraint is present.\n     * @param {boolean=} opt_doNotCancelAnims Do not cancel animations.\n     * @param {boolean=} opt_forceMoving Apply constraints as if the view is moving.\n     * @private\n     */\n    View.prototype.applyTargetState_ = function (opt_doNotCancelAnims, opt_forceMoving) {\n        var isMoving = this.getAnimating() || this.getInteracting() || opt_forceMoving;\n        // compute rotation\n        var newRotation = this.constraints_.rotation(this.targetRotation_, isMoving);\n        var size = this.getViewportSize_(newRotation);\n        var newResolution = this.constraints_.resolution(this.targetResolution_, 0, size, isMoving);\n        var newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, isMoving, this.calculateCenterShift(this.targetCenter_, newResolution, newRotation, size));\n        if (this.get(ViewProperty.ROTATION) !== newRotation) {\n            this.set(ViewProperty.ROTATION, newRotation);\n        }\n        if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n            this.set(ViewProperty.RESOLUTION, newResolution);\n        }\n        if (!this.get(ViewProperty.CENTER) ||\n            !equals(this.get(ViewProperty.CENTER), newCenter)) {\n            this.set(ViewProperty.CENTER, newCenter);\n        }\n        if (this.getAnimating() && !opt_doNotCancelAnims) {\n            this.cancelAnimations();\n        }\n        this.cancelAnchor_ = undefined;\n    };\n    /**\n     * If any constraints need to be applied, an animation will be triggered.\n     * This is typically done on interaction end.\n     * Note: calling this with a duration of 0 will apply the constrained values straight away,\n     * without animation.\n     * @param {number=} opt_duration The animation duration in ms.\n     * @param {number=} opt_resolutionDirection Which direction to zoom.\n     * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n     */\n    View.prototype.resolveConstraints = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n        var duration = opt_duration !== undefined ? opt_duration : 200;\n        var direction = opt_resolutionDirection || 0;\n        var newRotation = this.constraints_.rotation(this.targetRotation_);\n        var size = this.getViewportSize_(newRotation);\n        var newResolution = this.constraints_.resolution(this.targetResolution_, direction, size);\n        var newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, false, this.calculateCenterShift(this.targetCenter_, newResolution, newRotation, size));\n        if (duration === 0 && !this.cancelAnchor_) {\n            this.targetResolution_ = newResolution;\n            this.targetRotation_ = newRotation;\n            this.targetCenter_ = newCenter;\n            this.applyTargetState_();\n            return;\n        }\n        var anchor = opt_anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n        this.cancelAnchor_ = undefined;\n        if (this.getResolution() !== newResolution ||\n            this.getRotation() !== newRotation ||\n            !this.getCenterInternal() ||\n            !equals(this.getCenterInternal(), newCenter)) {\n            if (this.getAnimating()) {\n                this.cancelAnimations();\n            }\n            this.animateInternal({\n                rotation: newRotation,\n                center: newCenter,\n                resolution: newResolution,\n                duration: duration,\n                easing: easeOut,\n                anchor: anchor,\n            });\n        }\n    };\n    /**\n     * Notify the View that an interaction has started.\n     * The view state will be resolved to a stable one if needed\n     * (depending on its constraints).\n     * @api\n     */\n    View.prototype.beginInteraction = function () {\n        this.resolveConstraints(0);\n        this.setHint(ViewHint.INTERACTING, 1);\n    };\n    /**\n     * Notify the View that an interaction has ended. The view state will be resolved\n     * to a stable one if needed (depending on its constraints).\n     * @param {number=} opt_duration Animation duration in ms.\n     * @param {number=} opt_resolutionDirection Which direction to zoom.\n     * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n     * @api\n     */\n    View.prototype.endInteraction = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n        var anchor = opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n        this.endInteractionInternal(opt_duration, opt_resolutionDirection, anchor);\n    };\n    /**\n     * Notify the View that an interaction has ended. The view state will be resolved\n     * to a stable one if needed (depending on its constraints).\n     * @param {number=} opt_duration Animation duration in ms.\n     * @param {number=} opt_resolutionDirection Which direction to zoom.\n     * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n     */\n    View.prototype.endInteractionInternal = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n        this.setHint(ViewHint.INTERACTING, -1);\n        this.resolveConstraints(opt_duration, opt_resolutionDirection, opt_anchor);\n    };\n    /**\n     * Get a valid position for the view center according to the current constraints.\n     * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n     * @param {number=} opt_targetResolution Target resolution. If not supplied, the current one will be used.\n     * This is useful to guess a valid center position at a different zoom level.\n     * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n     */\n    View.prototype.getConstrainedCenter = function (targetCenter, opt_targetResolution) {\n        var size = this.getViewportSize_(this.getRotation());\n        return this.constraints_.center(targetCenter, opt_targetResolution || this.getResolution(), size);\n    };\n    /**\n     * Get a valid zoom level according to the current view constraints.\n     * @param {number|undefined} targetZoom Target zoom.\n     * @param {number=} [opt_direction=0] Indicate which resolution should be used\n     * by a renderer if the view resolution does not match any resolution of the tile source.\n     * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n     * will be used. If -1, the nearest higher resolution will be used.\n     * @return {number|undefined} Valid zoom level.\n     */\n    View.prototype.getConstrainedZoom = function (targetZoom, opt_direction) {\n        var targetRes = this.getResolutionForZoom(targetZoom);\n        return this.getZoomForResolution(this.getConstrainedResolution(targetRes, opt_direction));\n    };\n    /**\n     * Get a valid resolution according to the current view constraints.\n     * @param {number|undefined} targetResolution Target resolution.\n     * @param {number=} [opt_direction=0] Indicate which resolution should be used\n     * by a renderer if the view resolution does not match any resolution of the tile source.\n     * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n     * will be used. If -1, the nearest higher resolution will be used.\n     * @return {number|undefined} Valid resolution.\n     */\n    View.prototype.getConstrainedResolution = function (targetResolution, opt_direction) {\n        var direction = opt_direction || 0;\n        var size = this.getViewportSize_(this.getRotation());\n        return this.constraints_.resolution(targetResolution, direction, size);\n    };\n    return View;\n}(BaseObject));\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n    setTimeout(function () {\n        callback(returnValue);\n    }, 0);\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n    if (options.extent !== undefined) {\n        var smooth = options.smoothExtentConstraint !== undefined\n            ? options.smoothExtentConstraint\n            : true;\n        return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n    }\n    var projection = createProjection(options.projection, 'EPSG:3857');\n    if (options.multiWorld !== true && projection.isGlobal()) {\n        var extent = projection.getExtent().slice();\n        extent[0] = -Infinity;\n        extent[2] = Infinity;\n        return createExtent(extent, false, false);\n    }\n    return centerNone;\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n *     minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n    var resolutionConstraint;\n    var maxResolution;\n    var minResolution;\n    // TODO: move these to be ol constants\n    // see https://github.com/openlayers/openlayers/issues/2076\n    var defaultMaxZoom = 28;\n    var defaultZoomFactor = 2;\n    var minZoom = options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n    var maxZoom = options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n    var zoomFactor = options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n    var multiWorld = options.multiWorld !== undefined ? options.multiWorld : false;\n    var smooth = options.smoothResolutionConstraint !== undefined\n        ? options.smoothResolutionConstraint\n        : true;\n    var showFullExtent = options.showFullExtent !== undefined ? options.showFullExtent : false;\n    var projection = createProjection(options.projection, 'EPSG:3857');\n    var projExtent = projection.getExtent();\n    var constrainOnlyCenter = options.constrainOnlyCenter;\n    var extent = options.extent;\n    if (!multiWorld && !extent && projection.isGlobal()) {\n        constrainOnlyCenter = false;\n        extent = projExtent;\n    }\n    if (options.resolutions !== undefined) {\n        var resolutions = options.resolutions;\n        maxResolution = resolutions[minZoom];\n        minResolution =\n            resolutions[maxZoom] !== undefined\n                ? resolutions[maxZoom]\n                : resolutions[resolutions.length - 1];\n        if (options.constrainResolution) {\n            resolutionConstraint = createSnapToResolutions(resolutions, smooth, !constrainOnlyCenter && extent, showFullExtent);\n        }\n        else {\n            resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n        }\n    }\n    else {\n        // calculate the default min and max resolution\n        var size = !projExtent\n            ? // use an extent that can fit the whole world if need be\n                (360 * METERS_PER_UNIT[Units.DEGREES]) / projection.getMetersPerUnit()\n            : Math.max(getWidth(projExtent), getHeight(projExtent));\n        var defaultMaxResolution = size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n        var defaultMinResolution = defaultMaxResolution /\n            Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n        // user provided maxResolution takes precedence\n        maxResolution = options.maxResolution;\n        if (maxResolution !== undefined) {\n            minZoom = 0;\n        }\n        else {\n            maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n        }\n        // user provided minResolution takes precedence\n        minResolution = options.minResolution;\n        if (minResolution === undefined) {\n            if (options.maxZoom !== undefined) {\n                if (options.maxResolution !== undefined) {\n                    minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n                }\n                else {\n                    minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n                }\n            }\n            else {\n                minResolution = defaultMinResolution;\n            }\n        }\n        // given discrete zoom levels, minResolution may be different than provided\n        maxZoom =\n            minZoom +\n                Math.floor(Math.log(maxResolution / minResolution) / Math.log(zoomFactor));\n        minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n        if (options.constrainResolution) {\n            resolutionConstraint = createSnapToPower(zoomFactor, maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n        }\n        else {\n            resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n        }\n    }\n    return {\n        constraint: resolutionConstraint,\n        maxResolution: maxResolution,\n        minResolution: minResolution,\n        minZoom: minZoom,\n        zoomFactor: zoomFactor,\n    };\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n    var enableRotation = options.enableRotation !== undefined ? options.enableRotation : true;\n    if (enableRotation) {\n        var constrainRotation = options.constrainRotation;\n        if (constrainRotation === undefined || constrainRotation === true) {\n            return createSnapToZero();\n        }\n        else if (constrainRotation === false) {\n            return rotationNone;\n        }\n        else if (typeof constrainRotation === 'number') {\n            return createSnapToN(constrainRotation);\n        }\n        else {\n            return rotationNone;\n        }\n    }\n    else {\n        return disable;\n    }\n}\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n    if (animation.sourceCenter && animation.targetCenter) {\n        if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n            return false;\n        }\n    }\n    if (animation.sourceResolution !== animation.targetResolution) {\n        return false;\n    }\n    if (animation.sourceRotation !== animation.targetRotation) {\n        return false;\n    }\n    return true;\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n    // calculate rotated position\n    var cosAngle = Math.cos(-rotation);\n    var sinAngle = Math.sin(-rotation);\n    var rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n    var rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n    rotX += (size[0] / 2 - position[0]) * resolution;\n    rotY += (position[1] - size[1] / 2) * resolution;\n    // go back to original angle\n    sinAngle = -sinAngle; // go back to original rotation\n    var centerX = rotX * cosAngle - rotY * sinAngle;\n    var centerY = rotY * cosAngle + rotX * sinAngle;\n    return [centerX, centerY];\n}\nexport default View;\n//# sourceMappingURL=View.js.map","var api = require(\"!../style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../mini-css-extract-plugin/dist/loader.js!../css-loader/dist/cjs.js??ref--5-2!../postcss-loader/src/index.js??ref--5-3!../less-loader/dist/cjs.js??ref--5-4!./ol.css\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","var assignValue = require('./_assignValue'),\n    castPath = require('./_castPath'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nmodule.exports = baseSet;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","define([\n\t\"./tracer\",\n\t\"../has\",\n\t\"../_base/lang\",\n\t\"../_base/array\"\n], function(tracer, has, lang, arrayUtil){\n\thas.add(\"config-useDeferredInstrumentation\", \"report-unhandled-rejections\");\n\n\tfunction logError(error, rejection, deferred){\n\t\tif(error && error.log === false){\n\t\t\treturn;\n\t\t}\n\t\tvar stack = \"\";\n\t\tif(error && error.stack){\n\t\t\tstack += error.stack;\n\t\t}\n\t\tif(rejection && rejection.stack){\n\t\t\tstack += \"\\n    ----------------------------------------\\n    rejected\" + rejection.stack.split(\"\\n\").slice(1).join(\"\\n\").replace(/^\\s+/, \" \");\n\t\t}\n\t\tif(deferred && deferred.stack){\n\t\t\tstack += \"\\n    ----------------------------------------\\n\" + deferred.stack;\n\t\t}\n\t\tconsole.error(error, stack);\n\t}\n\n\tfunction reportRejections(error, handled, rejection, deferred){\n\t\tif(!handled){\n\t\t\tlogError(error, rejection, deferred);\n\t\t}\n\t}\n\n\tvar errors = [];\n\tvar activeTimeout = false;\n\tvar unhandledWait = 1000;\n\tfunction trackUnhandledRejections(error, handled, rejection, deferred){\n\t\t// try to find the existing tracking object\n\t\tif(!arrayUtil.some(errors, function(obj){\n\t\t\tif(obj.error === error){\n\t\t\t\t// found the tracking object for this error\n\t\t\t\tif(handled){\n\t\t\t\t\t// if handled, update the state\n\t\t\t\t\tobj.handled = true;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t})){\n\t\t\t// no tracking object has been setup, create one\n\t\t\terrors.push({\n\t\t\t\terror: error,\n\t\t\t\trejection: rejection,\n\t\t\t\thandled: handled,\n\t\t\t\tdeferred: deferred,\n\t\t\t\ttimestamp: new Date().getTime()\n\t\t\t});\n\t\t}\n\n\t\tif(!activeTimeout){\n\t\t\tactiveTimeout = setTimeout(logRejected, unhandledWait);\n\t\t}\n\t}\n\n\tfunction logRejected(){\n\t\tvar now = new Date().getTime();\n\t\tvar reportBefore = now - unhandledWait;\n\t\terrors = arrayUtil.filter(errors, function(obj){\n\t\t\t// only report the error if we have waited long enough and\n\t\t\t// it hasn't been handled\n\t\t\tif(obj.timestamp < reportBefore){\n\t\t\t\tif(!obj.handled){\n\t\t\t\t\tlogError(obj.error, obj.rejection, obj.deferred);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tif(errors.length){\n\t\t\tactiveTimeout = setTimeout(logRejected, errors[0].timestamp + unhandledWait - now);\n\t\t}else{\n\t\t\tactiveTimeout = false;\n\t\t}\n\t}\n\n\treturn function(Deferred){\n\t\t// summary:\n\t\t//\t\tInitialize instrumentation for the Deferred class.\n\t\t// description:\n\t\t//\t\tInitialize instrumentation for the Deferred class.\n\t\t//\t\tDone automatically by `dojo/Deferred` if the\n\t\t//\t\t`deferredInstrumentation` and `useDeferredInstrumentation`\n\t\t//\t\tconfig options are set.\n\t\t//\n\t\t//\t\tSets up `dojo/promise/tracer` to log to the console.\n\t\t//\n\t\t//\t\tSets up instrumentation of rejected deferreds so unhandled\n\t\t//\t\terrors are logged to the console.\n\n\t\tvar usage = has(\"config-useDeferredInstrumentation\");\n\t\tif(usage){\n\t\t\ttracer.on(\"resolved\", lang.hitch(console, \"log\", \"resolved\"));\n\t\t\ttracer.on(\"rejected\", lang.hitch(console, \"log\", \"rejected\"));\n\t\t\ttracer.on(\"progress\", lang.hitch(console, \"log\", \"progress\"));\n\n\t\t\tvar args = [];\n\t\t\tif(typeof usage === \"string\"){\n\t\t\t\targs = usage.split(\",\");\n\t\t\t\tusage = args.shift();\n\t\t\t}\n\t\t\tif(usage === \"report-rejections\"){\n\t\t\t\tDeferred.instrumentRejected = reportRejections;\n\t\t\t}else if(usage === \"report-unhandled-rejections\" || usage === true || usage === 1){\n\t\t\t\tDeferred.instrumentRejected = trackUnhandledRejections;\n\t\t\t\tunhandledWait = parseInt(args[0], 10) || unhandledWait;\n\t\t\t}else{\n\t\t\t\tthrow new Error(\"Unsupported instrumentation usage <\" + usage + \">\");\n\t\t\t}\n\t\t}\n\t};\n});\n","define([\n\t\"../_base/lang\",\n\t\"./Promise\",\n\t\"../Evented\"\n], function(lang, Promise, Evented){\n\t\"use strict\";\n\n\t// module:\n\t//\t\tdojo/promise/tracer\n\n\t/*=====\n\treturn {\n\t\t// summary:\n\t\t//\t\tTrace promise fulfillment.\n\t\t// description:\n\t\t//\t\tTrace promise fulfillment. Calling `.trace()` or `.traceError()` on a\n\t\t//\t\tpromise enables tracing. Will emit `resolved`, `rejected` or `progress`\n\t\t//\t\tevents.\n\n\t\ton: function(type, listener){\n\t\t\t// summary:\n\t\t\t//\t\tSubscribe to traces.\n\t\t\t// description:\n\t\t\t//\t\tSee `dojo/Evented#on()`.\n\t\t\t// type: String\n\t\t\t//\t\t`resolved`, `rejected`, or `progress`\n\t\t\t// listener: Function\n\t\t\t//\t\tThe listener is passed the traced value and any arguments\n\t\t\t//\t\tthat were used with the `.trace()` call.\n\t\t}\n\t};\n\t=====*/\n\n\tvar evented = new Evented;\n\tvar emit = evented.emit;\n\tevented.emit = null;\n\t// Emit events asynchronously since they should not change the promise state.\n\tfunction emitAsync(args){\n\t\tsetTimeout(function(){\n\t\t\temit.apply(evented, args);\n\t\t}, 0);\n\t}\n\n\tPromise.prototype.trace = function(){\n\t\t// summary:\n\t\t//\t\tTrace the promise.\n\t\t// description:\n\t\t//\t\tTracing allows you to transparently log progress,\n\t\t//\t\tresolution and rejection of promises, without affecting the\n\t\t//\t\tpromise itself. Any arguments passed to `trace()` are\n\t\t//\t\temitted in trace events. See `dojo/promise/tracer` on how\n\t\t//\t\tto handle traces.\n\t\t// returns: dojo/promise/Promise\n\t\t//\t\tThe promise instance `trace()` is called on.\n\n\t\tvar args = lang._toArray(arguments);\n\t\tthis.then(\n\t\t\tfunction(value){ emitAsync([\"resolved\", value].concat(args)); },\n\t\t\tfunction(error){ emitAsync([\"rejected\", error].concat(args)); },\n\t\t\tfunction(update){ emitAsync([\"progress\", update].concat(args)); }\n\t\t);\n\t\treturn this;\n\t};\n\n\tPromise.prototype.traceRejected = function(){\n\t\t// summary:\n\t\t//\t\tTrace rejection of the promise.\n\t\t// description:\n\t\t//\t\tTracing allows you to transparently log progress,\n\t\t//\t\tresolution and rejection of promises, without affecting the\n\t\t//\t\tpromise itself. Any arguments passed to `trace()` are\n\t\t//\t\temitted in trace events. See `dojo/promise/tracer` on how\n\t\t//\t\tto handle traces.\n\t\t// returns: dojo/promise/Promise\n\t\t//\t\tThe promise instance `traceRejected()` is called on.\n\n\t\tvar args = lang._toArray(arguments);\n\t\tthis.otherwise(function(error){\n\t\t\temitAsync([\"rejected\", error].concat(args));\n\t\t});\n\t\treturn this;\n\t};\n\n\treturn evented;\n});\n","define(['./create', './RequestError'], function(create, RequestError){\n\t// module:\n\t//\t\tdojo/errors/RequestTimeoutError\n\n\t/*=====\n\t return function(){\n\t\t // summary:\n\t\t //\t\tTODOC\n\t };\n\t =====*/\n\n\treturn create(\"RequestTimeoutError\", null, RequestError, {\n\t\tdojoType: \"timeout\"\n\t});\n});\n","define([\n\t'../json',\n\t'../_base/kernel',\n\t'../_base/array',\n\t'../has',\n\t'../has!dom?../selector/_loader' // only included for has() qsa tests\n], function(JSON, kernel, array, has){\n\thas.add('activex', typeof ActiveXObject !== 'undefined');\n\thas.add('dom-parser', function(global){\n\t\treturn 'DOMParser' in global;\n\t});\n\n\tvar handleXML;\n\tif(has('activex')){\n\t\t// GUIDs obtained from http://msdn.microsoft.com/en-us/library/ms757837(VS.85).aspx\n\t\tvar dp = [\n\t\t\t'Msxml2.DOMDocument.6.0',\n\t\t\t'Msxml2.DOMDocument.4.0',\n\t\t\t'MSXML2.DOMDocument.3.0',\n\t\t\t'MSXML.DOMDocument' // 2.0\n\t\t];\n\t\tvar lastParser;\n\n\t\thandleXML = function(response){\n\t\t\tvar result = response.data;\n\t\t\tvar text = response.text;\n\n\t\t\tif(result && has('dom-qsa2.1') && !result.querySelectorAll && has('dom-parser')){\n\t\t\t\t// http://bugs.dojotoolkit.org/ticket/15631\n\t\t\t\t// IE9 supports a CSS3 querySelectorAll implementation, but the DOM implementation\n\t\t\t\t// returned by IE9 xhr.responseXML does not. Manually create the XML DOM to gain\n\t\t\t\t// the fuller-featured implementation and avoid bugs caused by the inconsistency\n\t\t\t\tresult = new DOMParser().parseFromString(text, 'application/xml');\n\t\t\t}\n\n\t\t\tfunction createDocument(p) {\n\t\t\t\t\ttry{\n\t\t\t\t\t\tvar dom = new ActiveXObject(p);\n\t\t\t\t\t\tdom.async = false;\n\t\t\t\t\t\tdom.loadXML(text);\n\t\t\t\t\t\tresult = dom;\n\t\t\t\t\t\tlastParser = p;\n\t\t\t\t\t}catch(e){ return false; }\n\t\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif(!result || !result.documentElement){\n\t\t\t\t// The creation of an ActiveX object is expensive, so we cache the\n\t\t\t\t// parser type to avoid trying all parser types each time we handle a\n\t\t\t\t// document. There is some concern that some parser types might fail\n\t\t\t\t// depending on the document being parsed. If parsing using the cached\n\t\t\t\t// parser type fails, we do the more expensive operation of finding one\n\t\t\t\t// that works for the given document.\n\t\t\t\t// https://bugs.dojotoolkit.org/ticket/15246\n\t\t\t\tif(!lastParser || !createDocument(lastParser)) {\n\t\t\t\t\tarray.some(dp, createDocument);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tvar handleNativeResponse = function(response) {\n\t\tif(!has('native-xhr2-blob') && response.options.handleAs === 'blob' && typeof Blob !== 'undefined'){\n\t\t\treturn new Blob([ response.xhr.response ], { type: response.xhr.getResponseHeader('Content-Type') });\n\t\t}\n\n\t\treturn response.xhr.response;\n\t}\n\n\tvar handlers = {\n\t\t'javascript': function(response){\n\t\t\treturn kernel.eval(response.text || '');\n\t\t},\n\t\t'json': function(response){\n\t\t\treturn JSON.parse(response.text || null);\n\t\t},\n\t\t'xml': handleXML,\n\t\t'blob': handleNativeResponse,\n\t\t'arraybuffer': handleNativeResponse,\n\t\t'document': handleNativeResponse\n\t};\n\n\tfunction handle(response){\n\t\tvar handler = handlers[response.options.handleAs];\n\n\t\tresponse.data = handler ? handler(response) : (response.data || response.text);\n\n\t\treturn response;\n\t}\n\n\thandle.register = function(name, handler){\n\t\thandlers[name] = handler;\n\t};\n\n\treturn handle;\n});\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isPrimitive } from '../lib/parts.js';\nimport { directive, NodePart } from '../lit-html.js';\n// For each part, remember the value that was last rendered to the part by the\n// unsafeHTML directive, and the DocumentFragment that was last set as a value.\n// The DocumentFragment is used as a unique key to check if the last value\n// rendered to the part was with unsafeHTML. If not, we'll always re-render the\n// value passed to unsafeHTML.\nconst previousValues = new WeakMap();\n/**\n * Renders the result as HTML, rather than text.\n *\n * Note, this is unsafe to use with any user-provided input that hasn't been\n * sanitized or escaped, as it may lead to cross-site-scripting\n * vulnerabilities.\n */\nexport const unsafeHTML = directive((value) => (part) => {\n    if (!(part instanceof NodePart)) {\n        throw new Error('unsafeHTML can only be used in text bindings');\n    }\n    const previousValue = previousValues.get(part);\n    if (previousValue !== undefined && isPrimitive(value) &&\n        value === previousValue.value && part.value === previousValue.fragment) {\n        return;\n    }\n    const template = document.createElement('template');\n    template.innerHTML = value; // innerHTML casts to string internally\n    const fragment = document.importNode(template.content, true);\n    part.setValue(fragment);\n    previousValues.set(part, { value, fragment });\n});\n//# sourceMappingURL=unsafe-html.js.map","/**\n * @module ol/source/OSM\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport XYZ from './XYZ.js';\n/**\n * The attribution containing a link to the OpenStreetMap Copyright and License\n * page.\n * @const\n * @type {string}\n * @api\n */\nexport var ATTRIBUTION = '&#169; ' +\n    '<a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> ' +\n    'contributors.';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {number} [cacheSize] Initial tile cache size. Will auto-grow to hold at least the number of tiles in the viewport.\n * @property {null|string} [crossOrigin='anonymous'] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [imageSmoothing=true] Enable image smoothing.\n * @property {number} [maxZoom=19] Max zoom.\n * @property {boolean} [opaque=true] Whether the layer is opaque.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n *   imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [transition=250] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {string} [url='https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'] URL template.\n * Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n */\n/**\n * @classdesc\n * Layer source for the OpenStreetMap tile server.\n * @api\n */\nvar OSM = /** @class */ (function (_super) {\n    __extends(OSM, _super);\n    /**\n     * @param {Options=} [opt_options] Open Street Map options.\n     */\n    function OSM(opt_options) {\n        var _this = this;\n        var options = opt_options || {};\n        var attributions;\n        if (options.attributions !== undefined) {\n            attributions = options.attributions;\n        }\n        else {\n            attributions = [ATTRIBUTION];\n        }\n        var crossOrigin = options.crossOrigin !== undefined ? options.crossOrigin : 'anonymous';\n        var url = options.url !== undefined\n            ? options.url\n            : 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n        _this = _super.call(this, {\n            attributions: attributions,\n            attributionsCollapsible: false,\n            cacheSize: options.cacheSize,\n            crossOrigin: crossOrigin,\n            imageSmoothing: options.imageSmoothing,\n            maxZoom: options.maxZoom !== undefined ? options.maxZoom : 19,\n            opaque: options.opaque !== undefined ? options.opaque : true,\n            reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n            tileLoadFunction: options.tileLoadFunction,\n            transition: options.transition,\n            url: url,\n            wrapX: options.wrapX,\n        }) || this;\n        return _this;\n    }\n    return OSM;\n}(XYZ));\nexport default OSM;\n//# sourceMappingURL=OSM.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = max;\n\nvar _index = _interopRequireDefault(require(\"../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `max` function now accepts an array of dates rather than spread arguments.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   var date1 = new Date(1989, 6, 10)\n *   var date2 = new Date(1987, 1, 11)\n *   var maxDate = max(date1, date2)\n *\n *   // v2.0.0 onward:\n *   var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n *   var maxDate = max(dates)\n *   ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * var result = max([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nfunction max(dirtyDatesArray) {\n  (0, _index2.default)(1, arguments);\n  var datesArray; // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n\n  if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray; // If `dirtyDatesArray` is Array-like Object, convert to Array.\n  } else if (typeof dirtyDatesArray === 'object' && dirtyDatesArray !== null) {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray);\n  } else {\n    // `dirtyDatesArray` is non-iterable, return Invalid Date\n    return new Date(NaN);\n  }\n\n  var result;\n  datesArray.forEach(function (dirtyDate) {\n    var currentDate = (0, _index.default)(dirtyDate);\n\n    if (result === undefined || result < currentDate || isNaN(currentDate)) {\n      result = currentDate;\n    }\n  });\n  return result || new Date(NaN);\n}\n\nmodule.exports = exports.default;","define([\"./_base/kernel\", \"./regexp\"], function(dojo, regexp){\n\n// module:\n//\t\tdojo/cookie\n\n/*=====\nvar __cookieProps = {\n\t// expires: Date|String|Number?\n\t//\t\tIf a number, the number of days from today at which the cookie\n\t//\t\twill expire. If a date, the date past which the cookie will expire.\n\t//\t\tIf expires is in the past, the cookie will be deleted.\n\t//\t\tIf expires is omitted or is 0, the cookie will expire when the browser closes.\n\t// path: String?\n\t//\t\tThe path to use for the cookie.\n\t// domain: String?\n\t//\t\tThe domain to use for the cookie.\n\t// secure: Boolean?\n\t//\t\tWhether to only send the cookie on secure connections\n};\n=====*/\n\n\ndojo.cookie = function(/*String*/name, /*String?*/ value, /*__cookieProps?*/ props){\n\t// summary:\n\t//\t\tGet or set a cookie.\n\t// description:\n\t//\t\tIf one argument is passed, returns the value of the cookie\n\t//\t\tFor two or more arguments, acts as a setter.\n\t// name:\n\t//\t\tName of the cookie\n\t// value:\n\t//\t\tValue for the cookie\n\t// props:\n\t//\t\tProperties for the cookie\n\t// example:\n\t//\t\tset a cookie with the JSON-serialized contents of an object which\n\t//\t\twill expire 5 days from now:\n\t//\t|\trequire([\"dojo/cookie\", \"dojo/json\"], function(cookie, json){\n\t//\t|\t\tcookie(\"configObj\", json.stringify(config, {expires: 5 }));\n\t//\t|\t});\n\t//\n\t// example:\n\t//\t\tde-serialize a cookie back into a JavaScript object:\n\t//\t|\trequire([\"dojo/cookie\", \"dojo/json\"], function(cookie, json){\n\t//\t|\t\tconfig = json.parse(cookie(\"configObj\"));\n\t//\t|\t});\n\t//\n\t// example:\n\t//\t\tdelete a cookie:\n\t//\t|\trequire([\"dojo/cookie\"], function(cookie){\n\t//\t|\t\tcookie(\"configObj\", null, {expires: -1});\n\t//\t|\t});\n\tvar c = document.cookie, ret;\n\tif(arguments.length == 1){\n\t\tvar matches = c.match(new RegExp(\"(?:^|; )\" + regexp.escapeString(name) + \"=([^;]*)\"));\n\t\tret = matches ? decodeURIComponent(matches[1]) : undefined; \n\t}else{\n\t\tprops = props || {};\n// FIXME: expires=0 seems to disappear right away, not on close? (FF3)  Change docs?\n\t\tvar exp = props.expires;\n\t\tif(typeof exp == \"number\"){\n\t\t\tvar d = new Date();\n\t\t\td.setTime(d.getTime() + exp*24*60*60*1000);\n\t\t\texp = props.expires = d;\n\t\t}\n\t\tif(exp && exp.toUTCString){ props.expires = exp.toUTCString(); }\n\n\t\tvalue = encodeURIComponent(value);\n\t\tvar updatedCookie = name + \"=\" + value, propName;\n\t\tfor(propName in props){\n\t\t\tupdatedCookie += \"; \" + propName;\n\t\t\tvar propValue = props[propName];\n\t\t\tif(propValue !== true){ updatedCookie += \"=\" + propValue; }\n\t\t}\n\t\tdocument.cookie = updatedCookie;\n\t}\n\treturn ret; // String|undefined\n};\n\ndojo.cookie.isSupported = function(){\n\t// summary:\n\t//\t\tUse to determine if the current browser supports cookies or not.\n\t//\n\t//\t\tReturns true if user allows cookies.\n\t//\t\tReturns false if user doesn't allow cookies.\n\n\tif(!(\"cookieEnabled\" in navigator)){\n\t\tthis(\"__djCookieTest__\", \"CookiesAllowed\");\n\t\tnavigator.cookieEnabled = this(\"__djCookieTest__\") == \"CookiesAllowed\";\n\t\tif(navigator.cookieEnabled){\n\t\t\tthis(\"__djCookieTest__\", \"\", {expires: -1});\n\t\t}\n\t}\n\treturn navigator.cookieEnabled;\n};\n\nreturn dojo.cookie;\n});\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { setStyleAttribute, addClass, removeClass, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { calculatePosition, calculateRelativeBasedPosition } from '../common/position';\nimport { Animation, Property, Event, Component } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { flip, fit, isCollide } from '../common/collision';\n/**\n * Specifies the offset position values.\n */\nvar PositionData = /** @class */ (function (_super) {\n    __extends(PositionData, _super);\n    function PositionData() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('left')\n    ], PositionData.prototype, \"X\", void 0);\n    __decorate([\n        Property('top')\n    ], PositionData.prototype, \"Y\", void 0);\n    return PositionData;\n}(ChildProperty));\nexport { PositionData };\n// don't use space in classNames\nvar CLASSNAMES = {\n    ROOT: 'e-popup',\n    RTL: 'e-rtl',\n    OPEN: 'e-popup-open',\n    CLOSE: 'e-popup-close'\n};\n/**\n * Represents the Popup Component\n * ```html\n * <div id=\"popup\" style=\"position:absolute;height:100px;width:100px;\">\n * <div style=\"margin:35px 25px;\">Popup Content</div></div>\n * ```\n * ```typescript\n * <script>\n *   var popupObj = new Popup();\n *   popupObj.appendTo(\"#popup\");\n * </script>\n * ```\n */\nvar Popup = /** @class */ (function (_super) {\n    __extends(Popup, _super);\n    function Popup(element, options) {\n        return _super.call(this, options, element) || this;\n    }\n    /**\n     * Called internally if any of the property value changed.\n     * @private\n     */\n    Popup.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'width':\n                    setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n                    break;\n                case 'height':\n                    setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n                    break;\n                case 'zIndex':\n                    setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n                    break;\n                case 'enableRtl':\n                    this.setEnableRtl();\n                    break;\n                case 'position':\n                case 'relateTo':\n                    this.refreshPosition();\n                    break;\n                case 'offsetX':\n                    var x = newProp.offsetX - oldProp.offsetX;\n                    this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n                    break;\n                case 'offsetY':\n                    var y = newProp.offsetY - oldProp.offsetY;\n                    this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n                    break;\n                case 'content':\n                    this.setContent();\n                    break;\n                case 'actionOnScroll':\n                    if (newProp.actionOnScroll !== 'none') {\n                        this.wireScrollEvents();\n                    }\n                    else {\n                        this.unwireScrollEvents();\n                    }\n                    break;\n            }\n        }\n    };\n    /**\n     * gets the Component module name.\n     * @private\n     */\n    Popup.prototype.getModuleName = function () {\n        return 'popup';\n    };\n    /**\n     * To resolve if any collision occurs.\n     */\n    Popup.prototype.resolveCollision = function () {\n        this.checkCollision();\n    };\n    /**\n     * gets the persisted state properties of the Component.\n     */\n    Popup.prototype.getPersistData = function () {\n        return this.addOnPersist([]);\n    };\n    /**\n     * To destroy the control.\n     */\n    Popup.prototype.destroy = function () {\n        this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL, CLASSNAMES.OPEN, CLASSNAMES.CLOSE);\n        this.unwireEvents();\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * To Initialize the control rendering\n     * @private\n     */\n    Popup.prototype.render = function () {\n        this.element.classList.add(CLASSNAMES.ROOT);\n        var styles = {};\n        if (this.zIndex !== 1000) {\n            styles.zIndex = this.zIndex;\n        }\n        if (this.width !== 'auto') {\n            styles.width = formatUnit(this.width);\n        }\n        if (this.height !== 'auto') {\n            styles.height = formatUnit(this.height);\n        }\n        setStyleAttribute(this.element, styles);\n        this.fixedParent = false;\n        this.setEnableRtl();\n        this.setContent();\n    };\n    Popup.prototype.wireEvents = function () {\n        if (Browser.isDevice) {\n            EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n        }\n        if (this.actionOnScroll !== 'none') {\n            this.wireScrollEvents();\n        }\n    };\n    Popup.prototype.wireScrollEvents = function () {\n        if (this.getRelateToElement()) {\n            for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n                var parent_1 = _a[_i];\n                EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n            }\n        }\n    };\n    Popup.prototype.unwireEvents = function () {\n        if (Browser.isDevice) {\n            EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n        }\n        if (this.actionOnScroll !== 'none') {\n            this.unwireScrollEvents();\n        }\n    };\n    Popup.prototype.unwireScrollEvents = function () {\n        if (this.getRelateToElement()) {\n            for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n                var parent_2 = _a[_i];\n                EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n            }\n        }\n    };\n    Popup.prototype.getRelateToElement = function () {\n        var relateToElement = this.relateTo === '' || isNullOrUndefined(this.relateTo) ?\n            document.body : this.relateTo;\n        this.setProperties({ relateTo: relateToElement }, true);\n        return ((typeof this.relateTo) === 'string') ?\n            document.querySelector(this.relateTo) : this.relateTo;\n    };\n    Popup.prototype.scrollRefresh = function (e) {\n        if (this.actionOnScroll === 'reposition') {\n            if (!(this.element.offsetParent === e.target ||\n                (this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' &&\n                    e.target.parentElement == null))) {\n                this.refreshPosition();\n            }\n        }\n        else if (this.actionOnScroll === 'hide') {\n            this.hide();\n        }\n        if (this.actionOnScroll !== 'none') {\n            if (this.getRelateToElement()) {\n                var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n                if (!targetVisible && !this.targetInvisibleStatus) {\n                    this.trigger('targetExitViewport');\n                    this.targetInvisibleStatus = true;\n                }\n                else if (targetVisible) {\n                    this.targetInvisibleStatus = false;\n                }\n            }\n        }\n    };\n    /**\n     * This method is to get the element visibility on viewport when scroll\n     * the page. This method will returns true even though 1 px of element\n     * part is in visible.\n     */\n    Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n        var scrollParents = this.getScrollableParent(relateToElement);\n        for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n            if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        return true;\n    };\n    Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n        var rect = this.checkGetBoundingClientRect(relateToElement);\n        if (!rect.height || !rect.width) {\n            return false;\n        }\n        if (!isNullOrUndefined(this.checkGetBoundingClientRect(scrollElement))) {\n            var parent_4 = scrollElement.getBoundingClientRect();\n            return !(rect.bottom < parent_4.top) &&\n                (!(rect.bottom > parent_4.bottom) &&\n                    (!(rect.right > parent_4.right) &&\n                        !(rect.left < parent_4.left)));\n        }\n        else {\n            var win = window;\n            var windowView = {\n                top: win.scrollY,\n                left: win.scrollX,\n                right: win.scrollX + win.outerWidth,\n                bottom: win.scrollY + win.outerHeight\n            };\n            var off = calculatePosition(relateToElement);\n            var ele = {\n                top: off.top,\n                left: off.left,\n                right: off.left + rect.width,\n                bottom: off.top + rect.height\n            };\n            var elementView = {\n                top: windowView.bottom - ele.top,\n                left: windowView.right - ele.left,\n                bottom: ele.bottom - windowView.top,\n                right: ele.right - windowView.left\n            };\n            return elementView.top > 0\n                && elementView.left > 0\n                && elementView.right > 0\n                && elementView.bottom > 0;\n        }\n    };\n    /**\n     * Initialize the event handler\n     * @private\n     */\n    Popup.prototype.preRender = function () {\n        //There is no event handler\n    };\n    Popup.prototype.setEnableRtl = function () {\n        this.reposition();\n        this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n    };\n    Popup.prototype.setContent = function () {\n        if (!isNullOrUndefined(this.content)) {\n            this.element.innerHTML = '';\n            if (typeof (this.content) === 'string') {\n                this.element.textContent = this.content;\n            }\n            else {\n                this.element.appendChild(this.content);\n            }\n        }\n    };\n    Popup.prototype.orientationOnChange = function () {\n        var _this = this;\n        setTimeout(function () {\n            _this.refreshPosition();\n        }, 200);\n    };\n    /**\n     * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n     */\n    Popup.prototype.refreshPosition = function (target, collision) {\n        if (!isNullOrUndefined(target)) {\n            this.checkFixedParent(target);\n        }\n        this.reposition();\n        if (!collision) {\n            this.checkCollision();\n        }\n    };\n    Popup.prototype.reposition = function () {\n        var pos;\n        var position;\n        var relateToElement = this.getRelateToElement();\n        if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n            pos = { left: this.position.X, top: this.position.Y };\n        }\n        else if ((typeof this.position.X === 'string' && typeof this.position.Y === 'number') ||\n            (typeof this.position.X === 'number' && typeof this.position.Y === 'string')) {\n            var display = this.element.style.display;\n            var parentDisplay = void 0;\n            this.element.style.display = 'block';\n            if (this.element.classList.contains('e-dlg-modal')) {\n                parentDisplay = this.element.parentElement.style.display;\n                this.element.parentElement.style.display = 'block';\n            }\n            position = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n            if (typeof this.position.X === 'string') {\n                pos = { left: position.left, top: this.position.Y };\n            }\n            else {\n                pos = { left: this.position.X, top: position.top };\n            }\n            this.element.style.display = display;\n            if (this.element.classList.contains('e-dlg-modal')) {\n                this.element.parentElement.style.display = parentDisplay;\n            }\n        }\n        else if (relateToElement) {\n            var display = this.element.style.display;\n            this.element.style.display = 'block';\n            pos = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n            this.element.style.display = display;\n        }\n        else {\n            pos = { left: 0, top: 0 };\n        }\n        if (!isNullOrUndefined(pos)) {\n            this.element.style.left = pos.left + 'px';\n            this.element.style.top = pos.top + 'px';\n        }\n    };\n    Popup.prototype.checkGetBoundingClientRect = function (ele) {\n        var eleRect;\n        try {\n            eleRect = ele.getBoundingClientRect();\n            return eleRect;\n        }\n        catch (error) {\n            return null;\n        }\n    };\n    Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n        var eleRect = this.checkGetBoundingClientRect(ele);\n        var anchorRect = this.checkGetBoundingClientRect(anchorEle);\n        if (isNullOrUndefined(eleRect) || isNullOrUndefined(anchorRect)) {\n            return null;\n        }\n        var anchor = anchorEle;\n        var anchorPos = { left: 0, top: 0 };\n        if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n            anchorPos = calculatePosition(anchorEle);\n        }\n        else {\n            if ((ele.classList.contains('e-dlg-modal') && anchor.tagName !== 'BODY')) {\n                ele = ele.parentElement;\n            }\n            anchorPos = calculateRelativeBasedPosition(anchor, ele);\n        }\n        switch (position.X) {\n            default:\n            case 'left':\n                break;\n            case 'center':\n                if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n                    anchorPos.left += (window.innerWidth / 2 - eleRect.width / 2);\n                }\n                else if (this.targetType === 'container') {\n                    anchorPos.left += (anchorRect.width / 2 - eleRect.width / 2);\n                }\n                else {\n                    anchorPos.left += (anchorRect.width / 2);\n                }\n                break;\n            case 'right':\n                if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n                    anchorPos.left += (window.innerWidth - eleRect.width);\n                }\n                else if (this.targetType === 'container') {\n                    anchorPos.left += (anchorRect.width - eleRect.width);\n                }\n                else {\n                    anchorPos.left += (anchorRect.width);\n                }\n                break;\n        }\n        switch (position.Y) {\n            default:\n            case 'top':\n                break;\n            case 'center':\n                if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n                    anchorPos.top += (window.innerHeight / 2 - eleRect.height / 2);\n                }\n                else if (this.targetType === 'container') {\n                    anchorPos.top += (anchorRect.height / 2 - eleRect.height / 2);\n                }\n                else {\n                    anchorPos.top += (anchorRect.height / 2);\n                }\n                break;\n            case 'bottom':\n                if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n                    anchorPos.top += (window.innerHeight - eleRect.height);\n                }\n                else if (this.targetType === 'container') {\n                    anchorPos.top += (anchorRect.height - eleRect.height);\n                }\n                else {\n                    anchorPos.top += (anchorRect.height);\n                }\n                break;\n        }\n        anchorPos.left += offsetX;\n        anchorPos.top += offsetY;\n        return anchorPos;\n    };\n    Popup.prototype.callFlip = function (param) {\n        var relateToElement = this.getRelateToElement();\n        flip(this.element, relateToElement, this.offsetX, this.offsetY, this.position.X, this.position.Y, this.viewPortElement, param, this.fixedParent);\n    };\n    Popup.prototype.callFit = function (param) {\n        if (isCollide(this.element, this.viewPortElement).length !== 0) {\n            if (isNullOrUndefined(this.viewPortElement)) {\n                var data = fit(this.element, this.viewPortElement, param);\n                if (param.X) {\n                    this.element.style.left = data.left + 'px';\n                }\n                if (param.Y) {\n                    this.element.style.top = data.top + 'px';\n                }\n            }\n            else {\n                var elementRect = this.checkGetBoundingClientRect(this.element);\n                var viewPortRect = this.checkGetBoundingClientRect(this.viewPortElement);\n                if (isNullOrUndefined(elementRect) || isNullOrUndefined(viewPortRect)) {\n                    return null;\n                }\n                if (param && param.Y === true) {\n                    if (viewPortRect.top > elementRect.top) {\n                        this.element.style.top = '0px';\n                    }\n                    else if (viewPortRect.bottom < elementRect.bottom) {\n                        this.element.style.top = parseInt(this.element.style.top, 10) - (elementRect.bottom - viewPortRect.bottom) + 'px';\n                    }\n                }\n                if (param && param.X === true) {\n                    if (viewPortRect.right < elementRect.right) {\n                        this.element.style.left = parseInt(this.element.style.left, 10) - (elementRect.right - viewPortRect.right) + 'px';\n                    }\n                    else if (viewPortRect.left > elementRect.left) {\n                        this.element.style.left = parseInt(this.element.style.left, 10) + (viewPortRect.left - elementRect.left) + 'px';\n                    }\n                }\n            }\n        }\n    };\n    Popup.prototype.checkCollision = function () {\n        var horz = this.collision.X;\n        var vert = this.collision.Y;\n        if (horz === 'none' && vert === 'none') {\n            return;\n        }\n        if (horz === 'flip' && vert === 'flip') {\n            this.callFlip({ X: true, Y: true });\n        }\n        else if (horz === 'fit' && vert === 'fit') {\n            this.callFit({ X: true, Y: true });\n        }\n        else {\n            if (horz === 'flip') {\n                this.callFlip({ X: true, Y: false });\n            }\n            else if (vert === 'flip') {\n                this.callFlip({ Y: true, X: false });\n            }\n            if (horz === 'fit') {\n                this.callFit({ X: true, Y: false });\n            }\n            else if (vert === 'fit') {\n                this.callFit({ X: false, Y: true });\n            }\n        }\n    };\n    /**\n     * Shows the popup element from screen.\n     * @param { AnimationModel | Function } collisionOrAnimationOptions? - To pass animation options or collision function.\n     * @param { Function } collision? - To pass the collision function.\n     * @param { HTMLElement } relativeElement? - To calculate the zIndex value dynamically.\n     */\n    Popup.prototype.show = function (animationOptions, relativeElement) {\n        var _this = this;\n        this.wireEvents();\n        if (this.zIndex === 1000 || !isNullOrUndefined(relativeElement)) {\n            var zIndexElement = (isNullOrUndefined(relativeElement)) ? this.element : relativeElement;\n            this.zIndex = getZindexPartial(zIndexElement);\n            setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n        }\n        animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n            animationOptions : this.showAnimation;\n        if (this.collision.X !== 'none' || this.collision.Y !== 'none') {\n            removeClass([this.element], CLASSNAMES.CLOSE);\n            addClass([this.element], CLASSNAMES.OPEN);\n            this.checkCollision();\n            removeClass([this.element], CLASSNAMES.OPEN);\n            addClass([this.element], CLASSNAMES.CLOSE);\n        }\n        if (!isNullOrUndefined(animationOptions)) {\n            animationOptions.begin = function () {\n                if (!_this.isDestroyed) {\n                    removeClass([_this.element], CLASSNAMES.CLOSE);\n                    addClass([_this.element], CLASSNAMES.OPEN);\n                }\n            };\n            animationOptions.end = function () {\n                if (!_this.isDestroyed) {\n                    _this.trigger('open');\n                }\n            };\n            new Animation(animationOptions).animate(this.element);\n        }\n        else {\n            removeClass([this.element], CLASSNAMES.CLOSE);\n            addClass([this.element], CLASSNAMES.OPEN);\n            this.trigger('open');\n        }\n    };\n    /**\n     * Hides the popup element from screen.\n     * @param { AnimationModel } animationOptions? - To give the animation options.\n     */\n    Popup.prototype.hide = function (animationOptions) {\n        var _this = this;\n        animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n            animationOptions : this.hideAnimation;\n        if (!isNullOrUndefined(animationOptions)) {\n            animationOptions.end = function () {\n                if (!_this.isDestroyed) {\n                    removeClass([_this.element], CLASSNAMES.OPEN);\n                    addClass([_this.element], CLASSNAMES.CLOSE);\n                    _this.trigger('close');\n                }\n            };\n            new Animation(animationOptions).animate(this.element);\n        }\n        else {\n            removeClass([this.element], CLASSNAMES.OPEN);\n            addClass([this.element], CLASSNAMES.CLOSE);\n            this.trigger('close');\n        }\n        this.unwireEvents();\n    };\n    /**\n     * Gets scrollable parent elements for the given element.\n     * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n     */\n    Popup.prototype.getScrollableParent = function (element) {\n        this.checkFixedParent(element);\n        return getScrollableParent(element, this.fixedParent);\n    };\n    Popup.prototype.checkFixedParent = function (element) {\n        var parent = element.parentElement;\n        while (parent && parent.tagName !== 'HTML') {\n            var parentStyle = getComputedStyle(parent);\n            if (parentStyle.position === 'fixed' && this.element.offsetParent && this.element.offsetParent.tagName === 'BODY') {\n                this.element.style.position = 'fixed';\n                this.fixedParent = true;\n            }\n            parent = parent.parentElement;\n            if (isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed'\n                && this.element.style.position === 'fixed') {\n                this.fixedParent = true;\n            }\n        }\n    };\n    __decorate([\n        Property('auto')\n    ], Popup.prototype, \"height\", void 0);\n    __decorate([\n        Property('auto')\n    ], Popup.prototype, \"width\", void 0);\n    __decorate([\n        Property(null)\n    ], Popup.prototype, \"content\", void 0);\n    __decorate([\n        Property('container')\n    ], Popup.prototype, \"targetType\", void 0);\n    __decorate([\n        Property(null)\n    ], Popup.prototype, \"viewPortElement\", void 0);\n    __decorate([\n        Property({ X: 'none', Y: 'none' })\n    ], Popup.prototype, \"collision\", void 0);\n    __decorate([\n        Property('')\n    ], Popup.prototype, \"relateTo\", void 0);\n    __decorate([\n        Complex({}, PositionData)\n    ], Popup.prototype, \"position\", void 0);\n    __decorate([\n        Property(0)\n    ], Popup.prototype, \"offsetX\", void 0);\n    __decorate([\n        Property(0)\n    ], Popup.prototype, \"offsetY\", void 0);\n    __decorate([\n        Property(1000)\n    ], Popup.prototype, \"zIndex\", void 0);\n    __decorate([\n        Property(false)\n    ], Popup.prototype, \"enableRtl\", void 0);\n    __decorate([\n        Property('reposition')\n    ], Popup.prototype, \"actionOnScroll\", void 0);\n    __decorate([\n        Property(null)\n    ], Popup.prototype, \"showAnimation\", void 0);\n    __decorate([\n        Property(null)\n    ], Popup.prototype, \"hideAnimation\", void 0);\n    __decorate([\n        Event()\n    ], Popup.prototype, \"open\", void 0);\n    __decorate([\n        Event()\n    ], Popup.prototype, \"close\", void 0);\n    __decorate([\n        Event()\n    ], Popup.prototype, \"targetExitViewport\", void 0);\n    Popup = __decorate([\n        NotifyPropertyChanges\n    ], Popup);\n    return Popup;\n}(Component));\nexport { Popup };\n/**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @private\n */\nexport function getScrollableParent(element, fixedParent) {\n    var eleStyle = getComputedStyle(element);\n    var scrollParents = [];\n    var overflowRegex = /(auto|scroll)/;\n    var parent = element.parentElement;\n    while (parent && parent.tagName !== 'HTML') {\n        var parentStyle = getComputedStyle(parent);\n        if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static')\n            && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n            scrollParents.push(parent);\n        }\n        parent = parent.parentElement;\n    }\n    if (!fixedParent) {\n        scrollParents.push(document);\n    }\n    return scrollParents;\n}\n/**\n * Gets the maximum z-index of the given element.\n * @param { HTMLElement } element - Specify the element to get the maximum z-index of it.\n * @private\n */\nexport function getZindexPartial(element) {\n    // upto body traversal\n    var parent = element.parentElement;\n    var parentZindex = [];\n    while (parent) {\n        if (parent.tagName !== 'BODY') {\n            var index = document.defaultView.getComputedStyle(parent, null).getPropertyValue('z-index');\n            var position = document.defaultView.getComputedStyle(parent, null).getPropertyValue('position');\n            if (index !== 'auto' && position !== 'static') {\n                parentZindex.push(index);\n            }\n            parent = parent.parentElement;\n        }\n        else {\n            break;\n        }\n    }\n    //Body direct children element traversal\n    var childrenZindex = [];\n    for (var i = 0; i < document.body.children.length; i++) {\n        if (!element.isEqualNode(document.body.children[i])) {\n            var index = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('z-index');\n            var position = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('position');\n            if (index !== 'auto' && position !== 'static') {\n                childrenZindex.push(index);\n            }\n        }\n    }\n    childrenZindex.push('999');\n    var siblingsZindex = [];\n    if (!isNullOrUndefined(element.parentElement) && element.parentElement.tagName !== 'BODY') {\n        var childNodes = [].slice.call(element.parentElement.children);\n        for (var i = 0; i < childNodes.length; i++) {\n            var index = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('z-index');\n            var position = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('position');\n            if (index !== 'auto' && position !== 'static') {\n                siblingsZindex.push(index);\n            }\n        }\n    }\n    var finalValue = parentZindex.concat(childrenZindex, siblingsZindex);\n    var currentZindexValue = Math.max.apply(Math, finalValue) + 1;\n    // Checking the max-zindex value\n    return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n/**\n * Gets the maximum z-index of the page.\n * @param { HTMLElement } tagName - Specify the tagName to get the maximum z-index of it.\n * @private\n */\nexport function getMaxZindex(tagName) {\n    if (tagName === void 0) { tagName = ['*']; }\n    var maxZindex = [];\n    for (var i = 0; i < tagName.length; i++) {\n        var elements = document.getElementsByTagName(tagName[i]);\n        for (var i_1 = 0; i_1 < elements.length; i_1++) {\n            var index = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('z-index');\n            var position = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('position');\n            if (index !== 'auto' && position !== 'static') {\n                maxZindex.push(index);\n            }\n        }\n    }\n    var currentZindexValue = Math.max.apply(Math, maxZindex) + 1;\n    return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport { TRUE } from '../functions.js';\nimport { abstract } from '../util.js';\nimport { compose as composeTransform, makeInverse } from '../transform.js';\nimport { getWidth } from '../extent.js';\nimport { shared as iconImageCache } from '../style/IconImageCache.js';\nimport { inView } from '../layer/Layer.js';\nimport { wrapX } from '../coordinate.js';\n/**\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature\n * @property {import(\"../layer/Layer.js\").default} layer\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry\n * @property {number} distanceSq\n * @property {import(\"./vector.js\").FeatureCallback<T>} callback\n * @template T\n */\n/**\n * @abstract\n */\nvar MapRenderer = /** @class */ (function (_super) {\n    __extends(MapRenderer, _super);\n    /**\n     * @param {import(\"../PluggableMap.js\").default} map Map.\n     */\n    function MapRenderer(map) {\n        var _this = _super.call(this) || this;\n        /**\n         * @private\n         * @type {import(\"../PluggableMap.js\").default}\n         */\n        _this.map_ = map;\n        return _this;\n    }\n    /**\n     * @abstract\n     * @param {import(\"../render/EventType.js\").default} type Event type.\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     */\n    MapRenderer.prototype.dispatchRenderEvent = function (type, frameState) {\n        abstract();\n    };\n    /**\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n     * @protected\n     */\n    MapRenderer.prototype.calculateMatrices2D = function (frameState) {\n        var viewState = frameState.viewState;\n        var coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n        var pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n        composeTransform(coordinateToPixelTransform, frameState.size[0] / 2, frameState.size[1] / 2, 1 / viewState.resolution, -1 / viewState.resolution, -viewState.rotation, -viewState.center[0], -viewState.center[1]);\n        makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n    };\n    /**\n     * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n     * @param {number} hitTolerance Hit tolerance in pixels.\n     * @param {boolean} checkWrapped Check for wrapped geometries.\n     * @param {import(\"./vector.js\").FeatureCallback<T>} callback Feature callback.\n     * @param {S} thisArg Value to use as `this` when executing `callback`.\n     * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n     *     function, only layers which are visible and for which this function\n     *     returns `true` will be tested for features.  By default, all visible\n     *     layers will be tested.\n     * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n     * @return {T|undefined} Callback result.\n     * @template S,T,U\n     */\n    MapRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, checkWrapped, callback, thisArg, layerFilter, thisArg2) {\n        var result;\n        var viewState = frameState.viewState;\n        /**\n         * @param {boolean} managed Managed layer.\n         * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n         * @param {import(\"../layer/Layer.js\").default} layer Layer.\n         * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n         * @return {T|undefined} Callback result.\n         */\n        function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n            return callback.call(thisArg, feature, managed ? layer : null, geometry);\n        }\n        var projection = viewState.projection;\n        var translatedCoordinate = wrapX(coordinate.slice(), projection);\n        var offsets = [[0, 0]];\n        if (projection.canWrapX() && checkWrapped) {\n            var projectionExtent = projection.getExtent();\n            var worldWidth = getWidth(projectionExtent);\n            offsets.push([-worldWidth, 0], [worldWidth, 0]);\n        }\n        var layerStates = frameState.layerStatesArray;\n        var numLayers = layerStates.length;\n        var matches = /** @type {Array<HitMatch<T>>} */ ([]);\n        var tmpCoord = [];\n        for (var i = 0; i < offsets.length; i++) {\n            for (var j = numLayers - 1; j >= 0; --j) {\n                var layerState = layerStates[j];\n                var layer = layerState.layer;\n                if (layer.hasRenderer() &&\n                    inView(layerState, viewState) &&\n                    layerFilter.call(thisArg2, layer)) {\n                    var layerRenderer = layer.getRenderer();\n                    var source = layer.getSource();\n                    if (layerRenderer && source) {\n                        var coordinates = source.getWrapX()\n                            ? translatedCoordinate\n                            : coordinate;\n                        var callback_1 = forEachFeatureAtCoordinate.bind(null, layerState.managed);\n                        tmpCoord[0] = coordinates[0] + offsets[i][0];\n                        tmpCoord[1] = coordinates[1] + offsets[i][1];\n                        result = layerRenderer.forEachFeatureAtCoordinate(tmpCoord, frameState, hitTolerance, callback_1, matches);\n                    }\n                    if (result) {\n                        return result;\n                    }\n                }\n            }\n        }\n        if (matches.length === 0) {\n            return undefined;\n        }\n        var order = 1 / matches.length;\n        matches.forEach(function (m, i) { return (m.distanceSq += i * order); });\n        matches.sort(function (a, b) { return a.distanceSq - b.distanceSq; });\n        matches.some(function (m) {\n            return (result = m.callback(m.feature, m.layer, m.geometry));\n        });\n        return result;\n    };\n    /**\n     * @abstract\n     * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n     * @param {number} hitTolerance Hit tolerance in pixels.\n     * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n     *     callback.\n     * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n     *     function, only layers which are visible and for which this function\n     *     returns `true` will be tested for features.  By default, all visible\n     *     layers will be tested.\n     * @return {T|undefined} Callback result.\n     * @template T\n     */\n    MapRenderer.prototype.forEachLayerAtPixel = function (pixel, frameState, hitTolerance, callback, layerFilter) {\n        return abstract();\n    };\n    /**\n     * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n     * @param {number} hitTolerance Hit tolerance in pixels.\n     * @param {boolean} checkWrapped Check for wrapped geometries.\n     * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n     *     function, only layers which are visible and for which this function\n     *     returns `true` will be tested for features.  By default, all visible\n     *     layers will be tested.\n     * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n     * @return {boolean} Is there a feature at the given coordinate?\n     * @template U\n     */\n    MapRenderer.prototype.hasFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, checkWrapped, layerFilter, thisArg) {\n        var hasFeature = this.forEachFeatureAtCoordinate(coordinate, frameState, hitTolerance, checkWrapped, TRUE, this, layerFilter, thisArg);\n        return hasFeature !== undefined;\n    };\n    /**\n     * @return {import(\"../PluggableMap.js\").default} Map.\n     */\n    MapRenderer.prototype.getMap = function () {\n        return this.map_;\n    };\n    /**\n     * Render.\n     * @abstract\n     * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     */\n    MapRenderer.prototype.renderFrame = function (frameState) {\n        abstract();\n    };\n    /**\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     * @protected\n     */\n    MapRenderer.prototype.scheduleExpireIconCache = function (frameState) {\n        if (iconImageCache.canExpireCache()) {\n            frameState.postRenderFunctions.push(expireIconCache);\n        }\n    };\n    return MapRenderer;\n}(Disposable));\n/**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n    iconImageCache.expire();\n}\nexport default MapRenderer;\n//# sourceMappingURL=Map.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/renderer/Composite\n */\nimport MapRenderer from './Map.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport SourceState from '../source/State.js';\nimport { CLASS_UNSELECTABLE } from '../css.js';\nimport { checkedFonts } from '../render/canvas.js';\nimport { inView } from '../layer/Layer.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { replaceChildren } from '../dom.js';\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nvar CompositeMapRenderer = /** @class */ (function (_super) {\n    __extends(CompositeMapRenderer, _super);\n    /**\n     * @param {import(\"../PluggableMap.js\").default} map Map.\n     */\n    function CompositeMapRenderer(map) {\n        var _this = _super.call(this, map) || this;\n        /**\n         * @type {import(\"../events.js\").EventsKey}\n         */\n        _this.fontChangeListenerKey_ = listen(checkedFonts, ObjectEventType.PROPERTYCHANGE, map.redrawText.bind(map));\n        /**\n         * @private\n         * @type {HTMLDivElement}\n         */\n        _this.element_ = document.createElement('div');\n        var style = _this.element_.style;\n        style.position = 'absolute';\n        style.width = '100%';\n        style.height = '100%';\n        style.zIndex = '0';\n        _this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n        var container = map.getViewport();\n        container.insertBefore(_this.element_, container.firstChild || null);\n        /**\n         * @private\n         * @type {Array<HTMLElement>}\n         */\n        _this.children_ = [];\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.renderedVisible_ = true;\n        return _this;\n    }\n    /**\n     * @param {import(\"../render/EventType.js\").default} type Event type.\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     */\n    CompositeMapRenderer.prototype.dispatchRenderEvent = function (type, frameState) {\n        var map = this.getMap();\n        if (map.hasListener(type)) {\n            var event_1 = new RenderEvent(type, undefined, frameState);\n            map.dispatchEvent(event_1);\n        }\n    };\n    CompositeMapRenderer.prototype.disposeInternal = function () {\n        unlistenByKey(this.fontChangeListenerKey_);\n        this.element_.parentNode.removeChild(this.element_);\n        _super.prototype.disposeInternal.call(this);\n    };\n    /**\n     * Render.\n     * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     */\n    CompositeMapRenderer.prototype.renderFrame = function (frameState) {\n        if (!frameState) {\n            if (this.renderedVisible_) {\n                this.element_.style.display = 'none';\n                this.renderedVisible_ = false;\n            }\n            return;\n        }\n        this.calculateMatrices2D(frameState);\n        this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n        var layerStatesArray = frameState.layerStatesArray.sort(function (a, b) {\n            return a.zIndex - b.zIndex;\n        });\n        var viewState = frameState.viewState;\n        this.children_.length = 0;\n        /**\n         * @type {Array<import(\"../layer/BaseVector.js\").default>}\n         */\n        var declutterLayers = [];\n        var previousElement = null;\n        for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n            var layerState = layerStatesArray[i];\n            frameState.layerIndex = i;\n            if (!inView(layerState, viewState) ||\n                (layerState.sourceState != SourceState.READY &&\n                    layerState.sourceState != SourceState.UNDEFINED)) {\n                continue;\n            }\n            var layer = layerState.layer;\n            var element = layer.render(frameState, previousElement);\n            if (!element) {\n                continue;\n            }\n            if (element !== previousElement) {\n                this.children_.push(element);\n                previousElement = element;\n            }\n            if ('getDeclutter' in layer) {\n                declutterLayers.push(layer);\n            }\n        }\n        for (var i = declutterLayers.length - 1; i >= 0; --i) {\n            declutterLayers[i].renderDeclutter(frameState);\n        }\n        replaceChildren(this.element_, this.children_);\n        this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n        if (!this.renderedVisible_) {\n            this.element_.style.display = '';\n            this.renderedVisible_ = true;\n        }\n        this.scheduleExpireIconCache(frameState);\n    };\n    /**\n     * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n     * @param {number} hitTolerance Hit tolerance in pixels.\n     * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n     *     callback.\n     * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n     *     function, only layers which are visible and for which this function\n     *     returns `true` will be tested for features.  By default, all visible\n     *     layers will be tested.\n     * @return {T|undefined} Callback result.\n     * @template T\n     */\n    CompositeMapRenderer.prototype.forEachLayerAtPixel = function (pixel, frameState, hitTolerance, callback, layerFilter) {\n        var viewState = frameState.viewState;\n        var layerStates = frameState.layerStatesArray;\n        var numLayers = layerStates.length;\n        for (var i = numLayers - 1; i >= 0; --i) {\n            var layerState = layerStates[i];\n            var layer = layerState.layer;\n            if (layer.hasRenderer() &&\n                inView(layerState, viewState) &&\n                layerFilter(layer)) {\n                var layerRenderer = layer.getRenderer();\n                var data = layerRenderer.getDataAtPixel(pixel, frameState, hitTolerance);\n                if (data) {\n                    var result = callback(layer, data);\n                    if (result) {\n                        return result;\n                    }\n                }\n            }\n        }\n        return undefined;\n    };\n    return CompositeMapRenderer;\n}(MapRenderer));\nexport default CompositeMapRenderer;\n//# sourceMappingURL=Composite.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/layer/Group\n */\nimport BaseLayer from './Base.js';\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport EventType from '../events/EventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport SourceState from '../source/State.js';\nimport { assert } from '../asserts.js';\nimport { assign, clear } from '../obj.js';\nimport { getChangeEventType } from '../Object.js';\nimport { getIntersection } from '../extent.js';\nimport { getUid } from '../util.js';\nimport { listen, unlistenByKey } from '../events.js';\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array<import(\"./Base.js\").default>|import(\"../Collection.js\").default<import(\"./Base.js\").default>} [layers] Child layers.\n */\n/**\n * @enum {string}\n * @private\n */\nvar Property = {\n    LAYERS: 'layers',\n};\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @api\n */\nvar LayerGroup = /** @class */ (function (_super) {\n    __extends(LayerGroup, _super);\n    /**\n     * @param {Options=} opt_options Layer options.\n     */\n    function LayerGroup(opt_options) {\n        var _this = this;\n        var options = opt_options || {};\n        var baseOptions = /** @type {Options} */ (assign({}, options));\n        delete baseOptions.layers;\n        var layers = options.layers;\n        _this = _super.call(this, baseOptions) || this;\n        /**\n         * @private\n         * @type {Array<import(\"../events.js\").EventsKey>}\n         */\n        _this.layersListenerKeys_ = [];\n        /**\n         * @private\n         * @type {Object<string, Array<import(\"../events.js\").EventsKey>>}\n         */\n        _this.listenerKeys_ = {};\n        _this.addEventListener(getChangeEventType(Property.LAYERS), _this.handleLayersChanged_);\n        if (layers) {\n            if (Array.isArray(layers)) {\n                layers = new Collection(layers.slice(), { unique: true });\n            }\n            else {\n                assert(typeof ( /** @type {?} */(layers).getArray) === 'function', 43); // Expected `layers` to be an array or a `Collection`\n            }\n        }\n        else {\n            layers = new Collection(undefined, { unique: true });\n        }\n        _this.setLayers(layers);\n        return _this;\n    }\n    /**\n     * @private\n     */\n    LayerGroup.prototype.handleLayerChange_ = function () {\n        this.changed();\n    };\n    /**\n     * @private\n     */\n    LayerGroup.prototype.handleLayersChanged_ = function () {\n        this.layersListenerKeys_.forEach(unlistenByKey);\n        this.layersListenerKeys_.length = 0;\n        var layers = this.getLayers();\n        this.layersListenerKeys_.push(listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this), listen(layers, CollectionEventType.REMOVE, this.handleLayersRemove_, this));\n        for (var id in this.listenerKeys_) {\n            this.listenerKeys_[id].forEach(unlistenByKey);\n        }\n        clear(this.listenerKeys_);\n        var layersArray = layers.getArray();\n        for (var i = 0, ii = layersArray.length; i < ii; i++) {\n            var layer = layersArray[i];\n            this.listenerKeys_[getUid(layer)] = [\n                listen(layer, ObjectEventType.PROPERTYCHANGE, this.handleLayerChange_, this),\n                listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n            ];\n        }\n        this.changed();\n    };\n    /**\n     * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n     * @private\n     */\n    LayerGroup.prototype.handleLayersAdd_ = function (collectionEvent) {\n        var layer = /** @type {import(\"./Base.js\").default} */ (collectionEvent.element);\n        this.listenerKeys_[getUid(layer)] = [\n            listen(layer, ObjectEventType.PROPERTYCHANGE, this.handleLayerChange_, this),\n            listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n        ];\n        this.changed();\n    };\n    /**\n     * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n     * @private\n     */\n    LayerGroup.prototype.handleLayersRemove_ = function (collectionEvent) {\n        var layer = /** @type {import(\"./Base.js\").default} */ (collectionEvent.element);\n        var key = getUid(layer);\n        this.listenerKeys_[key].forEach(unlistenByKey);\n        delete this.listenerKeys_[key];\n        this.changed();\n    };\n    /**\n     * Returns the {@link module:ol/Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n     * in this group.\n     * @return {!import(\"../Collection.js\").default<import(\"./Base.js\").default>} Collection of\n     *   {@link module:ol/layer/Base layers} that are part of this group.\n     * @observable\n     * @api\n     */\n    LayerGroup.prototype.getLayers = function () {\n        return /** @type {!import(\"../Collection.js\").default<import(\"./Base.js\").default>} */ (this.get(Property.LAYERS));\n    };\n    /**\n     * Set the {@link module:ol/Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n     * in this group.\n     * @param {!import(\"../Collection.js\").default<import(\"./Base.js\").default>} layers Collection of\n     *   {@link module:ol/layer/Base layers} that are part of this group.\n     * @observable\n     * @api\n     */\n    LayerGroup.prototype.setLayers = function (layers) {\n        this.set(Property.LAYERS, layers);\n    };\n    /**\n     * @param {Array<import(\"./Layer.js\").default>=} opt_array Array of layers (to be modified in place).\n     * @return {Array<import(\"./Layer.js\").default>} Array of layers.\n     */\n    LayerGroup.prototype.getLayersArray = function (opt_array) {\n        var array = opt_array !== undefined ? opt_array : [];\n        this.getLayers().forEach(function (layer) {\n            layer.getLayersArray(array);\n        });\n        return array;\n    };\n    /**\n     * @param {Array<import(\"./Layer.js\").State>=} opt_states Optional list of layer states (to be modified in place).\n     * @return {Array<import(\"./Layer.js\").State>} List of layer states.\n     */\n    LayerGroup.prototype.getLayerStatesArray = function (opt_states) {\n        var states = opt_states !== undefined ? opt_states : [];\n        var pos = states.length;\n        this.getLayers().forEach(function (layer) {\n            layer.getLayerStatesArray(states);\n        });\n        var ownLayerState = this.getLayerState();\n        for (var i = pos, ii = states.length; i < ii; i++) {\n            var layerState = states[i];\n            layerState.opacity *= ownLayerState.opacity;\n            layerState.visible = layerState.visible && ownLayerState.visible;\n            layerState.maxResolution = Math.min(layerState.maxResolution, ownLayerState.maxResolution);\n            layerState.minResolution = Math.max(layerState.minResolution, ownLayerState.minResolution);\n            layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);\n            layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);\n            if (ownLayerState.extent !== undefined) {\n                if (layerState.extent !== undefined) {\n                    layerState.extent = getIntersection(layerState.extent, ownLayerState.extent);\n                }\n                else {\n                    layerState.extent = ownLayerState.extent;\n                }\n            }\n        }\n        return states;\n    };\n    /**\n     * @return {import(\"../source/State.js\").default} Source state.\n     */\n    LayerGroup.prototype.getSourceState = function () {\n        return SourceState.READY;\n    };\n    return LayerGroup;\n}(BaseLayer));\nexport default LayerGroup;\n//# sourceMappingURL=Group.js.map","/**\n * @module ol/pointer/EventType\n */\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n    POINTERMOVE: 'pointermove',\n    POINTERDOWN: 'pointerdown',\n    POINTERUP: 'pointerup',\n    POINTEROVER: 'pointerover',\n    POINTEROUT: 'pointerout',\n    POINTERENTER: 'pointerenter',\n    POINTERLEAVE: 'pointerleave',\n    POINTERCANCEL: 'pointercancel',\n};\n//# sourceMappingURL=EventType.js.map","/**\n * @module ol/MapBrowserEventHandler\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport { DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS } from './has.js';\nimport { listen, unlistenByKey } from './events.js';\nvar MapBrowserEventHandler = /** @class */ (function (_super) {\n    __extends(MapBrowserEventHandler, _super);\n    /**\n     * @param {import(\"./PluggableMap.js\").default} map The map with the viewport to listen to events on.\n     * @param {number=} moveTolerance The minimal distance the pointer must travel to trigger a move.\n     */\n    function MapBrowserEventHandler(map, moveTolerance) {\n        var _this = _super.call(this, map) || this;\n        /**\n         * This is the element that we will listen to the real events on.\n         * @type {import(\"./PluggableMap.js\").default}\n         * @private\n         */\n        _this.map_ = map;\n        /**\n         * @type {any}\n         * @private\n         */\n        _this.clickTimeoutId_;\n        /**\n         * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n         * @type {boolean}\n         */\n        _this.emulateClicks_ = false;\n        /**\n         * @type {boolean}\n         * @private\n         */\n        _this.dragging_ = false;\n        /**\n         * @type {!Array<import(\"./events.js\").EventsKey>}\n         * @private\n         */\n        _this.dragListenerKeys_ = [];\n        /**\n         * @type {number}\n         * @private\n         */\n        _this.moveTolerance_ = moveTolerance\n            ? moveTolerance * DEVICE_PIXEL_RATIO\n            : DEVICE_PIXEL_RATIO;\n        /**\n         * The most recent \"down\" type event (or null if none have occurred).\n         * Set on pointerdown.\n         * @type {PointerEvent}\n         * @private\n         */\n        _this.down_ = null;\n        var element = _this.map_.getViewport();\n        /**\n         * @type {number}\n         * @private\n         */\n        _this.activePointers_ = 0;\n        /**\n         * @type {!Object<number, boolean>}\n         * @private\n         */\n        _this.trackedTouches_ = {};\n        _this.element_ = element;\n        /**\n         * @type {?import(\"./events.js\").EventsKey}\n         * @private\n         */\n        _this.pointerdownListenerKey_ = listen(element, PointerEventType.POINTERDOWN, _this.handlePointerDown_, _this);\n        /**\n         * @type {PointerEvent}\n         * @private\n         */\n        _this.originalPointerMoveEvent_;\n        /**\n         * @type {?import(\"./events.js\").EventsKey}\n         * @private\n         */\n        _this.relayedListenerKey_ = listen(element, PointerEventType.POINTERMOVE, _this.relayEvent_, _this);\n        /**\n         * @private\n         */\n        _this.boundHandleTouchMove_ = _this.handleTouchMove_.bind(_this);\n        _this.element_.addEventListener(EventType.TOUCHMOVE, _this.boundHandleTouchMove_, PASSIVE_EVENT_LISTENERS ? { passive: false } : false);\n        return _this;\n    }\n    /**\n     * @param {PointerEvent} pointerEvent Pointer\n     * event.\n     * @private\n     */\n    MapBrowserEventHandler.prototype.emulateClick_ = function (pointerEvent) {\n        var newEvent = new MapBrowserEvent(MapBrowserEventType.CLICK, this.map_, pointerEvent);\n        this.dispatchEvent(newEvent);\n        if (this.clickTimeoutId_ !== undefined) {\n            // double-click\n            clearTimeout(this.clickTimeoutId_);\n            this.clickTimeoutId_ = undefined;\n            newEvent = new MapBrowserEvent(MapBrowserEventType.DBLCLICK, this.map_, pointerEvent);\n            this.dispatchEvent(newEvent);\n        }\n        else {\n            // click\n            this.clickTimeoutId_ = setTimeout(\n            /** @this {MapBrowserEventHandler} */\n            function () {\n                this.clickTimeoutId_ = undefined;\n                var newEvent = new MapBrowserEvent(MapBrowserEventType.SINGLECLICK, this.map_, pointerEvent);\n                this.dispatchEvent(newEvent);\n            }.bind(this), 250);\n        }\n    };\n    /**\n     * Keeps track on how many pointers are currently active.\n     *\n     * @param {PointerEvent} pointerEvent Pointer\n     * event.\n     * @private\n     */\n    MapBrowserEventHandler.prototype.updateActivePointers_ = function (pointerEvent) {\n        var event = pointerEvent;\n        if (event.type == MapBrowserEventType.POINTERUP ||\n            event.type == MapBrowserEventType.POINTERCANCEL) {\n            delete this.trackedTouches_[event.pointerId];\n        }\n        else if (event.type == MapBrowserEventType.POINTERDOWN) {\n            this.trackedTouches_[event.pointerId] = true;\n        }\n        this.activePointers_ = Object.keys(this.trackedTouches_).length;\n    };\n    /**\n     * @param {PointerEvent} pointerEvent Pointer\n     * event.\n     * @private\n     */\n    MapBrowserEventHandler.prototype.handlePointerUp_ = function (pointerEvent) {\n        this.updateActivePointers_(pointerEvent);\n        var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERUP, this.map_, pointerEvent);\n        this.dispatchEvent(newEvent);\n        // We emulate click events on left mouse button click, touch contact, and pen\n        // contact. isMouseActionButton returns true in these cases (evt.button is set\n        // to 0).\n        // See http://www.w3.org/TR/pointerevents/#button-states\n        // We only fire click, singleclick, and doubleclick if nobody has called\n        // event.stopPropagation() or event.preventDefault().\n        if (this.emulateClicks_ &&\n            !newEvent.propagationStopped &&\n            !this.dragging_ &&\n            this.isMouseActionButton_(pointerEvent)) {\n            this.emulateClick_(this.down_);\n        }\n        if (this.activePointers_ === 0) {\n            this.dragListenerKeys_.forEach(unlistenByKey);\n            this.dragListenerKeys_.length = 0;\n            this.dragging_ = false;\n            this.down_ = null;\n        }\n    };\n    /**\n     * @param {PointerEvent} pointerEvent Pointer\n     * event.\n     * @return {boolean} If the left mouse button was pressed.\n     * @private\n     */\n    MapBrowserEventHandler.prototype.isMouseActionButton_ = function (pointerEvent) {\n        return pointerEvent.button === 0;\n    };\n    /**\n     * @param {PointerEvent} pointerEvent Pointer\n     * event.\n     * @private\n     */\n    MapBrowserEventHandler.prototype.handlePointerDown_ = function (pointerEvent) {\n        this.emulateClicks_ = this.activePointers_ === 0;\n        this.updateActivePointers_(pointerEvent);\n        var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERDOWN, this.map_, pointerEvent);\n        this.dispatchEvent(newEvent);\n        this.down_ = pointerEvent;\n        if (this.dragListenerKeys_.length === 0) {\n            var doc = this.map_.getOwnerDocument();\n            this.dragListenerKeys_.push(listen(doc, MapBrowserEventType.POINTERMOVE, this.handlePointerMove_, this), listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this), \n            /* Note that the listener for `pointercancel is set up on\n             * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n             * the `pointerup` and `pointermove` listeners.\n             *\n             * The reason for this is the following: `TouchSource.vacuumTouches_()`\n             * issues `pointercancel` events, when there was no `touchend` for a\n             * `touchstart`. Now, let's say a first `touchstart` is registered on\n             * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n             * But `documentPointerEventHandler_` doesn't know about the first\n             * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n             * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n             * only registered there.\n             */\n            listen(this.element_, MapBrowserEventType.POINTERCANCEL, this.handlePointerUp_, this));\n            if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n                this.dragListenerKeys_.push(listen(this.element_.getRootNode(), MapBrowserEventType.POINTERUP, this.handlePointerUp_, this));\n            }\n        }\n    };\n    /**\n     * @param {PointerEvent} pointerEvent Pointer\n     * event.\n     * @private\n     */\n    MapBrowserEventHandler.prototype.handlePointerMove_ = function (pointerEvent) {\n        // Between pointerdown and pointerup, pointermove events are triggered.\n        // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n        // moved a significant distance.\n        if (this.isMoving_(pointerEvent)) {\n            this.dragging_ = true;\n            var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERDRAG, this.map_, pointerEvent, this.dragging_);\n            this.dispatchEvent(newEvent);\n        }\n    };\n    /**\n     * Wrap and relay a pointer event.  Note that this requires that the type\n     * string for the MapBrowserEvent matches the PointerEvent type.\n     * @param {PointerEvent} pointerEvent Pointer\n     * event.\n     * @private\n     */\n    MapBrowserEventHandler.prototype.relayEvent_ = function (pointerEvent) {\n        this.originalPointerMoveEvent_ = pointerEvent;\n        var dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n        this.dispatchEvent(new MapBrowserEvent(pointerEvent.type, this.map_, pointerEvent, dragging));\n    };\n    /**\n     * Flexible handling of a `touch-action: none` css equivalent: because calling\n     * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n     * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n     * when an interaction (currently `DragPan` handles the event.\n     * @param {TouchEvent} event Event.\n     * @private\n     */\n    MapBrowserEventHandler.prototype.handleTouchMove_ = function (event) {\n        // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n        // may not be initialized yet when we get here on a platform without native pointer events.\n        if (!this.originalPointerMoveEvent_ ||\n            this.originalPointerMoveEvent_.defaultPrevented) {\n            event.preventDefault();\n        }\n    };\n    /**\n     * @param {PointerEvent} pointerEvent Pointer\n     * event.\n     * @return {boolean} Is moving.\n     * @private\n     */\n    MapBrowserEventHandler.prototype.isMoving_ = function (pointerEvent) {\n        return (this.dragging_ ||\n            Math.abs(pointerEvent.clientX - this.down_.clientX) >\n                this.moveTolerance_ ||\n            Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_);\n    };\n    /**\n     * Clean up.\n     */\n    MapBrowserEventHandler.prototype.disposeInternal = function () {\n        if (this.relayedListenerKey_) {\n            unlistenByKey(this.relayedListenerKey_);\n            this.relayedListenerKey_ = null;\n        }\n        this.element_.removeEventListener(EventType.TOUCHMOVE, this.boundHandleTouchMove_);\n        if (this.pointerdownListenerKey_) {\n            unlistenByKey(this.pointerdownListenerKey_);\n            this.pointerdownListenerKey_ = null;\n        }\n        this.dragListenerKeys_.forEach(unlistenByKey);\n        this.dragListenerKeys_.length = 0;\n        this.element_ = null;\n        _super.prototype.disposeInternal.call(this);\n    };\n    return MapBrowserEventHandler;\n}(EventTarget));\nexport default MapBrowserEventHandler;\n//# sourceMappingURL=MapBrowserEventHandler.js.map","/**\n * @module ol/MapProperty\n */\n/**\n * @enum {string}\n */\nexport default {\n    LAYERGROUP: 'layergroup',\n    SIZE: 'size',\n    TARGET: 'target',\n    VIEW: 'view',\n};\n//# sourceMappingURL=MapProperty.js.map","/**\n * @module ol/structs/PriorityQueue\n */\nimport { assert } from '../asserts.js';\nimport { clear } from '../obj.js';\n/**\n * @type {number}\n */\nexport var DROP = Infinity;\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See http://closure-library.googlecode.com/svn/docs/closure_goog_structs_heap.js.source.html\n * and http://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nvar PriorityQueue = /** @class */ (function () {\n    /**\n     * @param {function(T): number} priorityFunction Priority function.\n     * @param {function(T): string} keyFunction Key function.\n     */\n    function PriorityQueue(priorityFunction, keyFunction) {\n        /**\n         * @type {function(T): number}\n         * @private\n         */\n        this.priorityFunction_ = priorityFunction;\n        /**\n         * @type {function(T): string}\n         * @private\n         */\n        this.keyFunction_ = keyFunction;\n        /**\n         * @type {Array<T>}\n         * @private\n         */\n        this.elements_ = [];\n        /**\n         * @type {Array<number>}\n         * @private\n         */\n        this.priorities_ = [];\n        /**\n         * @type {!Object<string, boolean>}\n         * @private\n         */\n        this.queuedElements_ = {};\n    }\n    /**\n     * FIXME empty description for jsdoc\n     */\n    PriorityQueue.prototype.clear = function () {\n        this.elements_.length = 0;\n        this.priorities_.length = 0;\n        clear(this.queuedElements_);\n    };\n    /**\n     * Remove and return the highest-priority element. O(log N).\n     * @return {T} Element.\n     */\n    PriorityQueue.prototype.dequeue = function () {\n        var elements = this.elements_;\n        var priorities = this.priorities_;\n        var element = elements[0];\n        if (elements.length == 1) {\n            elements.length = 0;\n            priorities.length = 0;\n        }\n        else {\n            elements[0] = elements.pop();\n            priorities[0] = priorities.pop();\n            this.siftUp_(0);\n        }\n        var elementKey = this.keyFunction_(element);\n        delete this.queuedElements_[elementKey];\n        return element;\n    };\n    /**\n     * Enqueue an element. O(log N).\n     * @param {T} element Element.\n     * @return {boolean} The element was added to the queue.\n     */\n    PriorityQueue.prototype.enqueue = function (element) {\n        assert(!(this.keyFunction_(element) in this.queuedElements_), 31); // Tried to enqueue an `element` that was already added to the queue\n        var priority = this.priorityFunction_(element);\n        if (priority != DROP) {\n            this.elements_.push(element);\n            this.priorities_.push(priority);\n            this.queuedElements_[this.keyFunction_(element)] = true;\n            this.siftDown_(0, this.elements_.length - 1);\n            return true;\n        }\n        return false;\n    };\n    /**\n     * @return {number} Count.\n     */\n    PriorityQueue.prototype.getCount = function () {\n        return this.elements_.length;\n    };\n    /**\n     * Gets the index of the left child of the node at the given index.\n     * @param {number} index The index of the node to get the left child for.\n     * @return {number} The index of the left child.\n     * @private\n     */\n    PriorityQueue.prototype.getLeftChildIndex_ = function (index) {\n        return index * 2 + 1;\n    };\n    /**\n     * Gets the index of the right child of the node at the given index.\n     * @param {number} index The index of the node to get the right child for.\n     * @return {number} The index of the right child.\n     * @private\n     */\n    PriorityQueue.prototype.getRightChildIndex_ = function (index) {\n        return index * 2 + 2;\n    };\n    /**\n     * Gets the index of the parent of the node at the given index.\n     * @param {number} index The index of the node to get the parent for.\n     * @return {number} The index of the parent.\n     * @private\n     */\n    PriorityQueue.prototype.getParentIndex_ = function (index) {\n        return (index - 1) >> 1;\n    };\n    /**\n     * Make this a heap. O(N).\n     * @private\n     */\n    PriorityQueue.prototype.heapify_ = function () {\n        var i;\n        for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n            this.siftUp_(i);\n        }\n    };\n    /**\n     * @return {boolean} Is empty.\n     */\n    PriorityQueue.prototype.isEmpty = function () {\n        return this.elements_.length === 0;\n    };\n    /**\n     * @param {string} key Key.\n     * @return {boolean} Is key queued.\n     */\n    PriorityQueue.prototype.isKeyQueued = function (key) {\n        return key in this.queuedElements_;\n    };\n    /**\n     * @param {T} element Element.\n     * @return {boolean} Is queued.\n     */\n    PriorityQueue.prototype.isQueued = function (element) {\n        return this.isKeyQueued(this.keyFunction_(element));\n    };\n    /**\n     * @param {number} index The index of the node to move down.\n     * @private\n     */\n    PriorityQueue.prototype.siftUp_ = function (index) {\n        var elements = this.elements_;\n        var priorities = this.priorities_;\n        var count = elements.length;\n        var element = elements[index];\n        var priority = priorities[index];\n        var startIndex = index;\n        while (index < count >> 1) {\n            var lIndex = this.getLeftChildIndex_(index);\n            var rIndex = this.getRightChildIndex_(index);\n            var smallerChildIndex = rIndex < count && priorities[rIndex] < priorities[lIndex]\n                ? rIndex\n                : lIndex;\n            elements[index] = elements[smallerChildIndex];\n            priorities[index] = priorities[smallerChildIndex];\n            index = smallerChildIndex;\n        }\n        elements[index] = element;\n        priorities[index] = priority;\n        this.siftDown_(startIndex, index);\n    };\n    /**\n     * @param {number} startIndex The index of the root.\n     * @param {number} index The index of the node to move up.\n     * @private\n     */\n    PriorityQueue.prototype.siftDown_ = function (startIndex, index) {\n        var elements = this.elements_;\n        var priorities = this.priorities_;\n        var element = elements[index];\n        var priority = priorities[index];\n        while (index > startIndex) {\n            var parentIndex = this.getParentIndex_(index);\n            if (priorities[parentIndex] > priority) {\n                elements[index] = elements[parentIndex];\n                priorities[index] = priorities[parentIndex];\n                index = parentIndex;\n            }\n            else {\n                break;\n            }\n        }\n        elements[index] = element;\n        priorities[index] = priority;\n    };\n    /**\n     * FIXME empty description for jsdoc\n     */\n    PriorityQueue.prototype.reprioritize = function () {\n        var priorityFunction = this.priorityFunction_;\n        var elements = this.elements_;\n        var priorities = this.priorities_;\n        var index = 0;\n        var n = elements.length;\n        var element, i, priority;\n        for (i = 0; i < n; ++i) {\n            element = elements[i];\n            priority = priorityFunction(element);\n            if (priority == DROP) {\n                delete this.queuedElements_[this.keyFunction_(element)];\n            }\n            else {\n                priorities[index] = priority;\n                elements[index++] = element;\n            }\n        }\n        elements.length = index;\n        priorities.length = index;\n        this.heapify_();\n    };\n    return PriorityQueue;\n}());\nexport default PriorityQueue;\n//# sourceMappingURL=PriorityQueue.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/TileQueue\n */\nimport EventType from './events/EventType.js';\nimport PriorityQueue, { DROP } from './structs/PriorityQueue.js';\nimport TileState from './TileState.js';\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import(\"./coordinate.js\").Coordinate, number): number} PriorityFunction\n */\nvar TileQueue = /** @class */ (function (_super) {\n    __extends(TileQueue, _super);\n    /**\n     * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n     * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n     */\n    function TileQueue(tilePriorityFunction, tileChangeCallback) {\n        var _this = _super.call(this, \n        /**\n         * @param {Array} element Element.\n         * @return {number} Priority.\n         */\n        function (element) {\n            return tilePriorityFunction.apply(null, element);\n        }, \n        /**\n         * @param {Array} element Element.\n         * @return {string} Key.\n         */\n        function (element) {\n            return /** @type {import(\"./Tile.js\").default} */ (element[0]).getKey();\n        }) || this;\n        /** @private */\n        _this.boundHandleTileChange_ = _this.handleTileChange.bind(_this);\n        /**\n         * @private\n         * @type {function(): ?}\n         */\n        _this.tileChangeCallback_ = tileChangeCallback;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.tilesLoading_ = 0;\n        /**\n         * @private\n         * @type {!Object<string,boolean>}\n         */\n        _this.tilesLoadingKeys_ = {};\n        return _this;\n    }\n    /**\n     * @param {Array} element Element.\n     * @return {boolean} The element was added to the queue.\n     */\n    TileQueue.prototype.enqueue = function (element) {\n        var added = _super.prototype.enqueue.call(this, element);\n        if (added) {\n            var tile = element[0];\n            tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n        }\n        return added;\n    };\n    /**\n     * @return {number} Number of tiles loading.\n     */\n    TileQueue.prototype.getTilesLoading = function () {\n        return this.tilesLoading_;\n    };\n    /**\n     * @param {import(\"./events/Event.js\").default} event Event.\n     * @protected\n     */\n    TileQueue.prototype.handleTileChange = function (event) {\n        var tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n        var state = tile.getState();\n        if ((tile.hifi && state === TileState.LOADED) ||\n            state === TileState.ERROR ||\n            state === TileState.EMPTY) {\n            tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n            var tileKey = tile.getKey();\n            if (tileKey in this.tilesLoadingKeys_) {\n                delete this.tilesLoadingKeys_[tileKey];\n                --this.tilesLoading_;\n            }\n            this.tileChangeCallback_();\n        }\n    };\n    /**\n     * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n     * @param {number} maxNewLoads Maximum number of new tiles to load.\n     */\n    TileQueue.prototype.loadMoreTiles = function (maxTotalLoading, maxNewLoads) {\n        var newLoads = 0;\n        var state, tile, tileKey;\n        while (this.tilesLoading_ < maxTotalLoading &&\n            newLoads < maxNewLoads &&\n            this.getCount() > 0) {\n            tile = /** @type {import(\"./Tile.js\").default} */ (this.dequeue()[0]);\n            tileKey = tile.getKey();\n            state = tile.getState();\n            if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n                this.tilesLoadingKeys_[tileKey] = true;\n                ++this.tilesLoading_;\n                ++newLoads;\n                tile.load();\n            }\n        }\n    };\n    return TileQueue;\n}(PriorityQueue));\nexport default TileQueue;\n/**\n * @param {import('./PluggableMap.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(frameState, tile, tileSourceKey, tileCenter, tileResolution) {\n    // Filter out tiles at higher zoom levels than the current zoom level, or that\n    // are outside the visible extent.\n    if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n        return DROP;\n    }\n    if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n        return DROP;\n    }\n    // Prioritize the highest zoom level tiles closest to the focus.\n    // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n    // Within a zoom level, tiles are prioritized by the distance in pixels between\n    // the center of the tile and the center of the viewport.  The factor of 65536\n    // means that the prioritization should behave as desired for tiles up to\n    // 65536 * Math.log(2) = 45426 pixels from the focus.\n    var center = frameState.viewState.center;\n    var deltaX = tileCenter[0] - center[0];\n    var deltaY = tileCenter[1] - center[1];\n    return (65536 * Math.log(tileResolution) +\n        Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution);\n}\n//# sourceMappingURL=TileQueue.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/PluggableMap\n */\nimport BaseObject, { getChangeEventType } from './Object.js';\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport EventType from './events/EventType.js';\nimport LayerGroup from './layer/Group.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport RenderEventType from './render/EventType.js';\nimport TileQueue, { getTilePriority } from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport { DEVICE_PIXEL_RATIO, IMAGE_DECODE, PASSIVE_EVENT_LISTENERS, } from './has.js';\nimport { TRUE } from './functions.js';\nimport { apply as applyTransform, create as createTransform, } from './transform.js';\nimport { assert } from './asserts.js';\nimport { clone, createOrUpdateEmpty, equals, getForViewAndSize, isEmpty, } from './extent.js';\nimport { fromUserCoordinate, toUserCoordinate } from './proj.js';\nimport { hasArea } from './size.js';\nimport { listen, unlistenByKey } from './events.js';\nimport { removeNode } from './dom.js';\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform\n * @property {import(\"rbush\").default} declutterTree\n * @property {null|import(\"./extent.js\").Extent} extent\n * @property {number} index\n * @property {Array<import(\"./layer/Layer.js\").State>} layerStatesArray\n * @property {number} layerIndex\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform\n * @property {Array<PostRenderFunction>} postRenderFunctions\n * @property {import(\"./size.js\").Size} size\n * @property {TileQueue} tileQueue\n * @property {!Object<string, Object<string, boolean>>} usedTiles\n * @property {Array<number>} viewHints\n * @property {!Object<string, Object<string, boolean>>} wantedTiles\n */\n/**\n * @typedef {function(PluggableMap, ?FrameState): any} PostRenderFunction\n */\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for for wrapped geometries inside the range of\n *   +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection<import(\"./control/Control.js\").default>} [controls]\n * @property {Collection<import(\"./interaction/Interaction.js\").default>} [interactions]\n * @property {HTMLElement|Document} keyboardEventTarget\n * @property {Collection<import(\"./Overlay.js\").default>} overlays\n * @property {Object<string, *>} values\n */\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection<import(\"./control/Control.js\").default>|Array<import(\"./control/Control.js\").default>} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control~defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection<import(\"./interaction/Interaction.js\").default>|Array<import(\"./interaction/Interaction.js\").default>} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction~defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array<import(\"./layer/Base.js\").default>|Collection<import(\"./layer/Base.js\").default>|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection<import(\"./Overlay.js\").default>|Array<import(\"./Overlay.js\").default>} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * @property {View} [view] The map's view.  No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n/**\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nvar PluggableMap = /** @class */ (function (_super) {\n    __extends(PluggableMap, _super);\n    /**\n     * @param {MapOptions} options Map options.\n     */\n    function PluggableMap(options) {\n        var _this = _super.call(this) || this;\n        var optionsInternal = createOptionsInternal(options);\n        /** @private */\n        _this.boundHandleBrowserEvent_ = _this.handleBrowserEvent.bind(_this);\n        /**\n         * @type {number}\n         * @private\n         */\n        _this.maxTilesLoading_ =\n            options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.pixelRatio_ =\n            options.pixelRatio !== undefined\n                ? options.pixelRatio\n                : DEVICE_PIXEL_RATIO;\n        /**\n         * @private\n         * @type {*}\n         */\n        _this.postRenderTimeoutHandle_;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.animationDelayKey_;\n        /**\n         * @private\n         */\n        _this.animationDelay_ = /** @this {PluggableMap} */ function () {\n            this.animationDelayKey_ = undefined;\n            this.renderFrame_(Date.now());\n        }.bind(_this);\n        /**\n         * @private\n         * @type {import(\"./transform.js\").Transform}\n         */\n        _this.coordinateToPixelTransform_ = createTransform();\n        /**\n         * @private\n         * @type {import(\"./transform.js\").Transform}\n         */\n        _this.pixelToCoordinateTransform_ = createTransform();\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.frameIndex_ = 0;\n        /**\n         * @private\n         * @type {?FrameState}\n         */\n        _this.frameState_ = null;\n        /**\n         * The extent at the previous 'moveend' event.\n         * @private\n         * @type {import(\"./extent.js\").Extent}\n         */\n        _this.previousExtent_ = null;\n        /**\n         * @private\n         * @type {?import(\"./events.js\").EventsKey}\n         */\n        _this.viewPropertyListenerKey_ = null;\n        /**\n         * @private\n         * @type {?import(\"./events.js\").EventsKey}\n         */\n        _this.viewChangeListenerKey_ = null;\n        /**\n         * @private\n         * @type {?Array<import(\"./events.js\").EventsKey>}\n         */\n        _this.layerGroupPropertyListenerKeys_ = null;\n        /**\n         * @private\n         * @type {!HTMLElement}\n         */\n        _this.viewport_ = document.createElement('div');\n        _this.viewport_.className =\n            'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n        _this.viewport_.style.position = 'relative';\n        _this.viewport_.style.overflow = 'hidden';\n        _this.viewport_.style.width = '100%';\n        _this.viewport_.style.height = '100%';\n        /**\n         * @private\n         * @type {!HTMLElement}\n         */\n        _this.overlayContainer_ = document.createElement('div');\n        _this.overlayContainer_.style.position = 'absolute';\n        _this.overlayContainer_.style.zIndex = '0';\n        _this.overlayContainer_.style.width = '100%';\n        _this.overlayContainer_.style.height = '100%';\n        _this.overlayContainer_.style.pointerEvents = 'none';\n        _this.overlayContainer_.className = 'ol-overlaycontainer';\n        _this.viewport_.appendChild(_this.overlayContainer_);\n        /**\n         * @private\n         * @type {!HTMLElement}\n         */\n        _this.overlayContainerStopEvent_ = document.createElement('div');\n        _this.overlayContainerStopEvent_.style.position = 'absolute';\n        _this.overlayContainerStopEvent_.style.zIndex = '0';\n        _this.overlayContainerStopEvent_.style.width = '100%';\n        _this.overlayContainerStopEvent_.style.height = '100%';\n        _this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n        _this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n        _this.viewport_.appendChild(_this.overlayContainerStopEvent_);\n        /**\n         * @private\n         * @type {MapBrowserEventHandler}\n         */\n        _this.mapBrowserEventHandler_ = null;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.moveTolerance_ = options.moveTolerance;\n        /**\n         * @private\n         * @type {HTMLElement|Document}\n         */\n        _this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n        /**\n         * @private\n         * @type {?Array<import(\"./events.js\").EventsKey>}\n         */\n        _this.keyHandlerKeys_ = null;\n        /**\n         * @type {Collection<import(\"./control/Control.js\").default>}\n         * @protected\n         */\n        _this.controls = optionsInternal.controls || new Collection();\n        /**\n         * @type {Collection<import(\"./interaction/Interaction.js\").default>}\n         * @protected\n         */\n        _this.interactions = optionsInternal.interactions || new Collection();\n        /**\n         * @type {Collection<import(\"./Overlay.js\").default>}\n         * @private\n         */\n        _this.overlays_ = optionsInternal.overlays;\n        /**\n         * A lookup of overlays by id.\n         * @private\n         * @type {Object<string, import(\"./Overlay.js\").default>}\n         */\n        _this.overlayIdIndex_ = {};\n        /**\n         * @type {import(\"./renderer/Map.js\").default}\n         * @private\n         */\n        _this.renderer_ = null;\n        /**\n         * @type {undefined|function(Event): void}\n         * @private\n         */\n        _this.handleResize_;\n        /**\n         * @private\n         * @type {!Array<PostRenderFunction>}\n         */\n        _this.postRenderFunctions_ = [];\n        /**\n         * @private\n         * @type {TileQueue}\n         */\n        _this.tileQueue_ = new TileQueue(_this.getTilePriority.bind(_this), _this.handleTileChange_.bind(_this));\n        _this.addEventListener(getChangeEventType(MapProperty.LAYERGROUP), _this.handleLayerGroupChanged_);\n        _this.addEventListener(getChangeEventType(MapProperty.VIEW), _this.handleViewChanged_);\n        _this.addEventListener(getChangeEventType(MapProperty.SIZE), _this.handleSizeChanged_);\n        _this.addEventListener(getChangeEventType(MapProperty.TARGET), _this.handleTargetChanged_);\n        // setProperties will trigger the rendering of the map if the map\n        // is \"defined\" already.\n        _this.setProperties(optionsInternal.values);\n        _this.controls.forEach(\n        /**\n         * @param {import(\"./control/Control.js\").default} control Control.\n         * @this {PluggableMap}\n         */\n        function (control) {\n            control.setMap(this);\n        }.bind(_this));\n        _this.controls.addEventListener(CollectionEventType.ADD, \n        /**\n         * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n         */\n        function (event) {\n            event.element.setMap(this);\n        }.bind(_this));\n        _this.controls.addEventListener(CollectionEventType.REMOVE, \n        /**\n         * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n         */\n        function (event) {\n            event.element.setMap(null);\n        }.bind(_this));\n        _this.interactions.forEach(\n        /**\n         * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n         * @this {PluggableMap}\n         */\n        function (interaction) {\n            interaction.setMap(this);\n        }.bind(_this));\n        _this.interactions.addEventListener(CollectionEventType.ADD, \n        /**\n         * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n         */\n        function (event) {\n            event.element.setMap(this);\n        }.bind(_this));\n        _this.interactions.addEventListener(CollectionEventType.REMOVE, \n        /**\n         * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n         */\n        function (event) {\n            event.element.setMap(null);\n        }.bind(_this));\n        _this.overlays_.forEach(_this.addOverlayInternal_.bind(_this));\n        _this.overlays_.addEventListener(CollectionEventType.ADD, \n        /**\n         * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n         */\n        function (event) {\n            this.addOverlayInternal_(\n            /** @type {import(\"./Overlay.js\").default} */ (event.element));\n        }.bind(_this));\n        _this.overlays_.addEventListener(CollectionEventType.REMOVE, \n        /**\n         * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n         */\n        function (event) {\n            var overlay = /** @type {import(\"./Overlay.js\").default} */ (event.element);\n            var id = overlay.getId();\n            if (id !== undefined) {\n                delete this.overlayIdIndex_[id.toString()];\n            }\n            event.element.setMap(null);\n        }.bind(_this));\n        return _this;\n    }\n    /**\n     * @abstract\n     * @return {import(\"./renderer/Map.js\").default} The map renderer\n     */\n    PluggableMap.prototype.createRenderer = function () {\n        throw new Error('Use a map type that has a createRenderer method');\n    };\n    /**\n     * Add the given control to the map.\n     * @param {import(\"./control/Control.js\").default} control Control.\n     * @api\n     */\n    PluggableMap.prototype.addControl = function (control) {\n        this.getControls().push(control);\n    };\n    /**\n     * Add the given interaction to the map. If you want to add an interaction\n     * at another point of the collection use `getInteraction()` and the methods\n     * available on {@link module:ol/Collection~Collection}. This can be used to\n     * stop the event propagation from the handleEvent function. The interactions\n     * get to handle the events in the reverse order of this collection.\n     * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n     * @api\n     */\n    PluggableMap.prototype.addInteraction = function (interaction) {\n        this.getInteractions().push(interaction);\n    };\n    /**\n     * Adds the given layer to the top of this map. If you want to add a layer\n     * elsewhere in the stack, use `getLayers()` and the methods available on\n     * {@link module:ol/Collection~Collection}.\n     * @param {import(\"./layer/Base.js\").default} layer Layer.\n     * @api\n     */\n    PluggableMap.prototype.addLayer = function (layer) {\n        var layers = this.getLayerGroup().getLayers();\n        layers.push(layer);\n    };\n    /**\n     * Add the given overlay to the map.\n     * @param {import(\"./Overlay.js\").default} overlay Overlay.\n     * @api\n     */\n    PluggableMap.prototype.addOverlay = function (overlay) {\n        this.getOverlays().push(overlay);\n    };\n    /**\n     * This deals with map's overlay collection changes.\n     * @param {import(\"./Overlay.js\").default} overlay Overlay.\n     * @private\n     */\n    PluggableMap.prototype.addOverlayInternal_ = function (overlay) {\n        var id = overlay.getId();\n        if (id !== undefined) {\n            this.overlayIdIndex_[id.toString()] = overlay;\n        }\n        overlay.setMap(this);\n    };\n    /**\n     *\n     * Clean up.\n     */\n    PluggableMap.prototype.disposeInternal = function () {\n        this.setTarget(null);\n        _super.prototype.disposeInternal.call(this);\n    };\n    /**\n     * Detect features that intersect a pixel on the viewport, and execute a\n     * callback with each intersecting feature. Layers included in the detection can\n     * be configured through the `layerFilter` option in `opt_options`.\n     * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n     * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n     *     called with two arguments. The first argument is one\n     *     {@link module:ol/Feature feature} or\n     *     {@link module:ol/render/Feature render feature} at the pixel, the second is\n     *     the {@link module:ol/layer/Layer layer} of the feature and will be null for\n     *     unmanaged layers. To stop detection, callback functions can return a\n     *     truthy value.\n     * @param {AtPixelOptions=} opt_options Optional options.\n     * @return {T|undefined} Callback result, i.e. the return value of last\n     * callback execution, or the first truthy callback return value.\n     * @template S,T\n     * @api\n     */\n    PluggableMap.prototype.forEachFeatureAtPixel = function (pixel, callback, opt_options) {\n        if (!this.frameState_) {\n            return;\n        }\n        var coordinate = this.getCoordinateFromPixelInternal(pixel);\n        opt_options = opt_options !== undefined ? opt_options : {};\n        var hitTolerance = opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n        var layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n        var checkWrapped = opt_options.checkWrapped !== false;\n        return this.renderer_.forEachFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, callback, null, layerFilter, null);\n    };\n    /**\n     * Get all features that intersect a pixel on the viewport.\n     * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n     * @param {AtPixelOptions=} opt_options Optional options.\n     * @return {Array<import(\"./Feature.js\").FeatureLike>} The detected features or\n     * an empty array if none were found.\n     * @api\n     */\n    PluggableMap.prototype.getFeaturesAtPixel = function (pixel, opt_options) {\n        var features = [];\n        this.forEachFeatureAtPixel(pixel, function (feature) {\n            features.push(feature);\n        }, opt_options);\n        return features;\n    };\n    /**\n     * Detect layers that have a color value at a pixel on the viewport, and\n     * execute a callback with each matching layer. Layers included in the\n     * detection can be configured through `opt_layerFilter`.\n     *\n     * Note: this may give false positives unless the map layers have had different `className`\n     * properties assigned to them.\n     *\n     * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n     * @param {function(this: S, import(\"./layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback\n     *     Layer callback. This callback will receive two arguments: first is the\n     *     {@link module:ol/layer/Layer layer}, second argument is an array representing\n     *     [R, G, B, A] pixel values (0 - 255) and will be `null` for layer types\n     *     that do not currently support this argument. To stop detection, callback\n     *     functions can return a truthy value.\n     * @param {AtPixelOptions=} opt_options Configuration options.\n     * @return {T|undefined} Callback result, i.e. the return value of last\n     * callback execution, or the first truthy callback return value.\n     * @template S,T\n     * @api\n     */\n    PluggableMap.prototype.forEachLayerAtPixel = function (pixel, callback, opt_options) {\n        if (!this.frameState_) {\n            return;\n        }\n        var options = opt_options || {};\n        var hitTolerance = options.hitTolerance !== undefined ? options.hitTolerance : 0;\n        var layerFilter = options.layerFilter || TRUE;\n        return this.renderer_.forEachLayerAtPixel(pixel, this.frameState_, hitTolerance, callback, layerFilter);\n    };\n    /**\n     * Detect if features intersect a pixel on the viewport. Layers included in the\n     * detection can be configured through `opt_layerFilter`.\n     * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n     * @param {AtPixelOptions=} opt_options Optional options.\n     * @return {boolean} Is there a feature at the given pixel?\n     * @api\n     */\n    PluggableMap.prototype.hasFeatureAtPixel = function (pixel, opt_options) {\n        if (!this.frameState_) {\n            return false;\n        }\n        var coordinate = this.getCoordinateFromPixelInternal(pixel);\n        opt_options = opt_options !== undefined ? opt_options : {};\n        var layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n        var hitTolerance = opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n        var checkWrapped = opt_options.checkWrapped !== false;\n        return this.renderer_.hasFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, layerFilter, null);\n    };\n    /**\n     * Returns the coordinate in user projection for a browser event.\n     * @param {MouseEvent} event Event.\n     * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n     * @api\n     */\n    PluggableMap.prototype.getEventCoordinate = function (event) {\n        return this.getCoordinateFromPixel(this.getEventPixel(event));\n    };\n    /**\n     * Returns the coordinate in view projection for a browser event.\n     * @param {MouseEvent} event Event.\n     * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n     */\n    PluggableMap.prototype.getEventCoordinateInternal = function (event) {\n        return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n    };\n    /**\n     * Returns the map pixel position for a browser event relative to the viewport.\n     * @param {UIEvent} event Event.\n     * @return {import(\"./pixel.js\").Pixel} Pixel.\n     * @api\n     */\n    PluggableMap.prototype.getEventPixel = function (event) {\n        var viewportPosition = this.viewport_.getBoundingClientRect();\n        var eventPosition = \n        //FIXME Are we really calling this with a TouchEvent anywhere?\n        'changedTouches' in event\n            ? /** @type {TouchEvent} */ (event).changedTouches[0]\n            : /** @type {MouseEvent} */ (event);\n        return [\n            eventPosition.clientX - viewportPosition.left,\n            eventPosition.clientY - viewportPosition.top,\n        ];\n    };\n    /**\n     * Get the target in which this map is rendered.\n     * Note that this returns what is entered as an option or in setTarget:\n     * if that was an element, it returns an element; if a string, it returns that.\n     * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n     *     map is rendered in.\n     * @observable\n     * @api\n     */\n    PluggableMap.prototype.getTarget = function () {\n        return /** @type {HTMLElement|string|undefined} */ (this.get(MapProperty.TARGET));\n    };\n    /**\n     * Get the DOM element into which this map is rendered. In contrast to\n     * `getTarget` this method always return an `Element`, or `null` if the\n     * map has no target.\n     * @return {HTMLElement} The element that the map is rendered in.\n     * @api\n     */\n    PluggableMap.prototype.getTargetElement = function () {\n        var target = this.getTarget();\n        if (target !== undefined) {\n            return typeof target === 'string'\n                ? document.getElementById(target)\n                : target;\n        }\n        else {\n            return null;\n        }\n    };\n    /**\n     * Get the coordinate for a given pixel.  This returns a coordinate in the\n     * user projection.\n     * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n     * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n     * @api\n     */\n    PluggableMap.prototype.getCoordinateFromPixel = function (pixel) {\n        return toUserCoordinate(this.getCoordinateFromPixelInternal(pixel), this.getView().getProjection());\n    };\n    /**\n     * Get the coordinate for a given pixel.  This returns a coordinate in the\n     * map view projection.\n     * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n     * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n     */\n    PluggableMap.prototype.getCoordinateFromPixelInternal = function (pixel) {\n        var frameState = this.frameState_;\n        if (!frameState) {\n            return null;\n        }\n        else {\n            return applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n        }\n    };\n    /**\n     * Get the map controls. Modifying this collection changes the controls\n     * associated with the map.\n     * @return {Collection<import(\"./control/Control.js\").default>} Controls.\n     * @api\n     */\n    PluggableMap.prototype.getControls = function () {\n        return this.controls;\n    };\n    /**\n     * Get the map overlays. Modifying this collection changes the overlays\n     * associated with the map.\n     * @return {Collection<import(\"./Overlay.js\").default>} Overlays.\n     * @api\n     */\n    PluggableMap.prototype.getOverlays = function () {\n        return this.overlays_;\n    };\n    /**\n     * Get an overlay by its identifier (the value returned by overlay.getId()).\n     * Note that the index treats string and numeric identifiers as the same. So\n     * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n     * @param {string|number} id Overlay identifier.\n     * @return {import(\"./Overlay.js\").default} Overlay.\n     * @api\n     */\n    PluggableMap.prototype.getOverlayById = function (id) {\n        var overlay = this.overlayIdIndex_[id.toString()];\n        return overlay !== undefined ? overlay : null;\n    };\n    /**\n     * Get the map interactions. Modifying this collection changes the interactions\n     * associated with the map.\n     *\n     * Interactions are used for e.g. pan, zoom and rotate.\n     * @return {Collection<import(\"./interaction/Interaction.js\").default>} Interactions.\n     * @api\n     */\n    PluggableMap.prototype.getInteractions = function () {\n        return this.interactions;\n    };\n    /**\n     * Get the layergroup associated with this map.\n     * @return {LayerGroup} A layer group containing the layers in this map.\n     * @observable\n     * @api\n     */\n    PluggableMap.prototype.getLayerGroup = function () {\n        return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n    };\n    /**\n     * Get the collection of layers associated with this map.\n     * @return {!Collection<import(\"./layer/Base.js\").default>} Layers.\n     * @api\n     */\n    PluggableMap.prototype.getLayers = function () {\n        var layers = this.getLayerGroup().getLayers();\n        return layers;\n    };\n    /**\n     * @return {boolean} Layers have sources that are still loading.\n     */\n    PluggableMap.prototype.getLoading = function () {\n        var layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n        for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n            var layer = layerStatesArray[i].layer;\n            var source = /** @type {import(\"./layer/Layer.js\").default} */ (layer).getSource();\n            if (source && source.loading) {\n                return true;\n            }\n        }\n        return false;\n    };\n    /**\n     * Get the pixel for a coordinate.  This takes a coordinate in the user\n     * projection and returns the corresponding pixel.\n     * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n     * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n     * @api\n     */\n    PluggableMap.prototype.getPixelFromCoordinate = function (coordinate) {\n        var viewCoordinate = fromUserCoordinate(coordinate, this.getView().getProjection());\n        return this.getPixelFromCoordinateInternal(viewCoordinate);\n    };\n    /**\n     * Get the pixel for a coordinate.  This takes a coordinate in the map view\n     * projection and returns the corresponding pixel.\n     * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n     * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n     */\n    PluggableMap.prototype.getPixelFromCoordinateInternal = function (coordinate) {\n        var frameState = this.frameState_;\n        if (!frameState) {\n            return null;\n        }\n        else {\n            return applyTransform(frameState.coordinateToPixelTransform, coordinate.slice(0, 2));\n        }\n    };\n    /**\n     * Get the map renderer.\n     * @return {import(\"./renderer/Map.js\").default} Renderer\n     */\n    PluggableMap.prototype.getRenderer = function () {\n        return this.renderer_;\n    };\n    /**\n     * Get the size of this map.\n     * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n     * @observable\n     * @api\n     */\n    PluggableMap.prototype.getSize = function () {\n        return /** @type {import(\"./size.js\").Size|undefined} */ (this.get(MapProperty.SIZE));\n    };\n    /**\n     * Get the view associated with this map. A view manages properties such as\n     * center and resolution.\n     * @return {View} The view that controls this map.\n     * @observable\n     * @api\n     */\n    PluggableMap.prototype.getView = function () {\n        return /** @type {View} */ (this.get(MapProperty.VIEW));\n    };\n    /**\n     * Get the element that serves as the map viewport.\n     * @return {HTMLElement} Viewport.\n     * @api\n     */\n    PluggableMap.prototype.getViewport = function () {\n        return this.viewport_;\n    };\n    /**\n     * Get the element that serves as the container for overlays.  Elements added to\n     * this container will let mousedown and touchstart events through to the map,\n     * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n     * events.\n     * @return {!HTMLElement} The map's overlay container.\n     */\n    PluggableMap.prototype.getOverlayContainer = function () {\n        return this.overlayContainer_;\n    };\n    /**\n     * Get the element that serves as a container for overlays that don't allow\n     * event propagation. Elements added to this container won't let mousedown and\n     * touchstart events through to the map, so clicks and gestures on an overlay\n     * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n     * @return {!HTMLElement} The map's overlay container that stops events.\n     */\n    PluggableMap.prototype.getOverlayContainerStopEvent = function () {\n        return this.overlayContainerStopEvent_;\n    };\n    /**\n     * @return {!Document} The document where the map is displayed.\n     */\n    PluggableMap.prototype.getOwnerDocument = function () {\n        return this.getTargetElement()\n            ? this.getTargetElement().ownerDocument\n            : document;\n    };\n    /**\n     * @param {import(\"./Tile.js\").default} tile Tile.\n     * @param {string} tileSourceKey Tile source key.\n     * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n     * @param {number} tileResolution Tile resolution.\n     * @return {number} Tile priority.\n     */\n    PluggableMap.prototype.getTilePriority = function (tile, tileSourceKey, tileCenter, tileResolution) {\n        return getTilePriority(this.frameState_, tile, tileSourceKey, tileCenter, tileResolution);\n    };\n    /**\n     * @param {UIEvent} browserEvent Browser event.\n     * @param {string=} opt_type Type.\n     */\n    PluggableMap.prototype.handleBrowserEvent = function (browserEvent, opt_type) {\n        var type = opt_type || browserEvent.type;\n        var mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n        this.handleMapBrowserEvent(mapBrowserEvent);\n    };\n    /**\n     * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n     */\n    PluggableMap.prototype.handleMapBrowserEvent = function (mapBrowserEvent) {\n        if (!this.frameState_) {\n            // With no view defined, we cannot translate pixels into geographical\n            // coordinates so interactions cannot be used.\n            return;\n        }\n        var originalEvent = /** @type {PointerEvent} */ (mapBrowserEvent.originalEvent);\n        var eventType = originalEvent.type;\n        if (eventType === PointerEventType.POINTERDOWN ||\n            eventType === EventType.WHEEL ||\n            eventType === EventType.KEYDOWN) {\n            var doc = this.getOwnerDocument();\n            var rootNode = this.viewport_.getRootNode\n                ? this.viewport_.getRootNode()\n                : doc;\n            var target = 'host' in rootNode // ShadowRoot\n                ? /** @type {ShadowRoot} */ (rootNode).elementFromPoint(originalEvent.clientX, originalEvent.clientY)\n                : /** @type {Node} */ (originalEvent.target);\n            if (\n            // Abort if the target is a child of the container for elements whose events are not meant\n            // to be handled by map interactions.\n            this.overlayContainerStopEvent_.contains(target) ||\n                // Abort if the event target is a child of the container that is no longer in the page.\n                // It's possible for the target to no longer be in the page if it has been removed in an\n                // event listener, this might happen in a Control that recreates it's content based on\n                // user interaction either manually or via a render in something like https://reactjs.org/\n                !(rootNode === doc ? doc.documentElement : rootNode).contains(target)) {\n                return;\n            }\n        }\n        mapBrowserEvent.frameState = this.frameState_;\n        if (this.dispatchEvent(mapBrowserEvent) !== false) {\n            var interactionsArray = this.getInteractions().getArray().slice();\n            for (var i = interactionsArray.length - 1; i >= 0; i--) {\n                var interaction = interactionsArray[i];\n                if (interaction.getMap() !== this ||\n                    !interaction.getActive() ||\n                    !this.getTargetElement()) {\n                    continue;\n                }\n                var cont = interaction.handleEvent(mapBrowserEvent);\n                if (!cont || mapBrowserEvent.propagationStopped) {\n                    break;\n                }\n            }\n        }\n    };\n    /**\n     * @protected\n     */\n    PluggableMap.prototype.handlePostRender = function () {\n        var frameState = this.frameState_;\n        // Manage the tile queue\n        // Image loads are expensive and a limited resource, so try to use them\n        // efficiently:\n        // * When the view is static we allow a large number of parallel tile loads\n        //   to complete the frame as quickly as possible.\n        // * When animating or interacting, image loads can cause janks, so we reduce\n        //   the maximum number of loads per frame and limit the number of parallel\n        //   tile loads to remain reactive to view changes and to reduce the chance of\n        //   loading tiles that will quickly disappear from view.\n        var tileQueue = this.tileQueue_;\n        if (!tileQueue.isEmpty()) {\n            var maxTotalLoading = this.maxTilesLoading_;\n            var maxNewLoads = maxTotalLoading;\n            if (frameState) {\n                var hints = frameState.viewHints;\n                if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) {\n                    var lowOnFrameBudget = !IMAGE_DECODE && Date.now() - frameState.time > 8;\n                    maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n                    maxNewLoads = lowOnFrameBudget ? 0 : 2;\n                }\n            }\n            if (tileQueue.getTilesLoading() < maxTotalLoading) {\n                tileQueue.reprioritize(); // FIXME only call if view has changed\n                tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n            }\n        }\n        if (frameState &&\n            this.hasListener(RenderEventType.RENDERCOMPLETE) &&\n            !frameState.animate &&\n            !this.tileQueue_.getTilesLoading() &&\n            !this.getLoading()) {\n            this.renderer_.dispatchRenderEvent(RenderEventType.RENDERCOMPLETE, frameState);\n        }\n        var postRenderFunctions = this.postRenderFunctions_;\n        for (var i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n            postRenderFunctions[i](this, frameState);\n        }\n        postRenderFunctions.length = 0;\n    };\n    /**\n     * @private\n     */\n    PluggableMap.prototype.handleSizeChanged_ = function () {\n        if (this.getView() && !this.getView().getAnimating()) {\n            this.getView().resolveConstraints(0);\n        }\n        this.render();\n    };\n    /**\n     * @private\n     */\n    PluggableMap.prototype.handleTargetChanged_ = function () {\n        // target may be undefined, null, a string or an Element.\n        // If it's a string we convert it to an Element before proceeding.\n        // If it's not now an Element we remove the viewport from the DOM.\n        // If it's an Element we append the viewport element to it.\n        var targetElement;\n        if (this.getTarget()) {\n            targetElement = this.getTargetElement();\n        }\n        if (this.mapBrowserEventHandler_) {\n            for (var i = 0, ii = this.keyHandlerKeys_.length; i < ii; ++i) {\n                unlistenByKey(this.keyHandlerKeys_[i]);\n            }\n            this.keyHandlerKeys_ = null;\n            this.viewport_.removeEventListener(EventType.CONTEXTMENU, this.boundHandleBrowserEvent_);\n            this.viewport_.removeEventListener(EventType.WHEEL, this.boundHandleBrowserEvent_);\n            if (this.handleResize_ !== undefined) {\n                removeEventListener(EventType.RESIZE, this.handleResize_, false);\n                this.handleResize_ = undefined;\n            }\n            this.mapBrowserEventHandler_.dispose();\n            this.mapBrowserEventHandler_ = null;\n            removeNode(this.viewport_);\n        }\n        if (!targetElement) {\n            if (this.renderer_) {\n                clearTimeout(this.postRenderTimeoutHandle_);\n                this.postRenderTimeoutHandle_ = undefined;\n                this.postRenderFunctions_.length = 0;\n                this.renderer_.dispose();\n                this.renderer_ = null;\n            }\n            if (this.animationDelayKey_) {\n                cancelAnimationFrame(this.animationDelayKey_);\n                this.animationDelayKey_ = undefined;\n            }\n        }\n        else {\n            targetElement.appendChild(this.viewport_);\n            if (!this.renderer_) {\n                this.renderer_ = this.createRenderer();\n            }\n            this.mapBrowserEventHandler_ = new MapBrowserEventHandler(this, this.moveTolerance_);\n            for (var key in MapBrowserEventType) {\n                this.mapBrowserEventHandler_.addEventListener(MapBrowserEventType[key], this.handleMapBrowserEvent.bind(this));\n            }\n            this.viewport_.addEventListener(EventType.CONTEXTMENU, this.boundHandleBrowserEvent_, false);\n            this.viewport_.addEventListener(EventType.WHEEL, this.boundHandleBrowserEvent_, PASSIVE_EVENT_LISTENERS ? { passive: false } : false);\n            var keyboardEventTarget = !this.keyboardEventTarget_\n                ? targetElement\n                : this.keyboardEventTarget_;\n            this.keyHandlerKeys_ = [\n                listen(keyboardEventTarget, EventType.KEYDOWN, this.handleBrowserEvent, this),\n                listen(keyboardEventTarget, EventType.KEYPRESS, this.handleBrowserEvent, this),\n            ];\n            if (!this.handleResize_) {\n                this.handleResize_ = this.updateSize.bind(this);\n                window.addEventListener(EventType.RESIZE, this.handleResize_, false);\n            }\n        }\n        this.updateSize();\n        // updateSize calls setSize, so no need to call this.render\n        // ourselves here.\n    };\n    /**\n     * @private\n     */\n    PluggableMap.prototype.handleTileChange_ = function () {\n        this.render();\n    };\n    /**\n     * @private\n     */\n    PluggableMap.prototype.handleViewPropertyChanged_ = function () {\n        this.render();\n    };\n    /**\n     * @private\n     */\n    PluggableMap.prototype.handleViewChanged_ = function () {\n        if (this.viewPropertyListenerKey_) {\n            unlistenByKey(this.viewPropertyListenerKey_);\n            this.viewPropertyListenerKey_ = null;\n        }\n        if (this.viewChangeListenerKey_) {\n            unlistenByKey(this.viewChangeListenerKey_);\n            this.viewChangeListenerKey_ = null;\n        }\n        var view = this.getView();\n        if (view) {\n            this.updateViewportSize_();\n            this.viewPropertyListenerKey_ = listen(view, ObjectEventType.PROPERTYCHANGE, this.handleViewPropertyChanged_, this);\n            this.viewChangeListenerKey_ = listen(view, EventType.CHANGE, this.handleViewPropertyChanged_, this);\n            view.resolveConstraints(0);\n        }\n        this.render();\n    };\n    /**\n     * @private\n     */\n    PluggableMap.prototype.handleLayerGroupChanged_ = function () {\n        if (this.layerGroupPropertyListenerKeys_) {\n            this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n            this.layerGroupPropertyListenerKeys_ = null;\n        }\n        var layerGroup = this.getLayerGroup();\n        if (layerGroup) {\n            this.layerGroupPropertyListenerKeys_ = [\n                listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n                listen(layerGroup, EventType.CHANGE, this.render, this),\n            ];\n        }\n        this.render();\n    };\n    /**\n     * @return {boolean} Is rendered.\n     */\n    PluggableMap.prototype.isRendered = function () {\n        return !!this.frameState_;\n    };\n    /**\n     * Requests an immediate render in a synchronous manner.\n     * @api\n     */\n    PluggableMap.prototype.renderSync = function () {\n        if (this.animationDelayKey_) {\n            cancelAnimationFrame(this.animationDelayKey_);\n        }\n        this.animationDelay_();\n    };\n    /**\n     * Redraws all text after new fonts have loaded\n     */\n    PluggableMap.prototype.redrawText = function () {\n        var layerStates = this.getLayerGroup().getLayerStatesArray();\n        for (var i = 0, ii = layerStates.length; i < ii; ++i) {\n            var layer = layerStates[i].layer;\n            if (layer.hasRenderer()) {\n                layer.getRenderer().handleFontsChanged();\n            }\n        }\n    };\n    /**\n     * Request a map rendering (at the next animation frame).\n     * @api\n     */\n    PluggableMap.prototype.render = function () {\n        if (this.renderer_ && this.animationDelayKey_ === undefined) {\n            this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n        }\n    };\n    /**\n     * Remove the given control from the map.\n     * @param {import(\"./control/Control.js\").default} control Control.\n     * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n     *     if the control was not found).\n     * @api\n     */\n    PluggableMap.prototype.removeControl = function (control) {\n        return this.getControls().remove(control);\n    };\n    /**\n     * Remove the given interaction from the map.\n     * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n     * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n     *     undefined if the interaction was not found).\n     * @api\n     */\n    PluggableMap.prototype.removeInteraction = function (interaction) {\n        return this.getInteractions().remove(interaction);\n    };\n    /**\n     * Removes the given layer from the map.\n     * @param {import(\"./layer/Base.js\").default} layer Layer.\n     * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n     *     layer was not found).\n     * @api\n     */\n    PluggableMap.prototype.removeLayer = function (layer) {\n        var layers = this.getLayerGroup().getLayers();\n        return layers.remove(layer);\n    };\n    /**\n     * Remove the given overlay from the map.\n     * @param {import(\"./Overlay.js\").default} overlay Overlay.\n     * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n     *     if the overlay was not found).\n     * @api\n     */\n    PluggableMap.prototype.removeOverlay = function (overlay) {\n        return this.getOverlays().remove(overlay);\n    };\n    /**\n     * @param {number} time Time.\n     * @private\n     */\n    PluggableMap.prototype.renderFrame_ = function (time) {\n        var _this = this;\n        var size = this.getSize();\n        var view = this.getView();\n        var previousFrameState = this.frameState_;\n        /** @type {?FrameState} */\n        var frameState = null;\n        if (size !== undefined && hasArea(size) && view && view.isDef()) {\n            var viewHints = view.getHints(this.frameState_ ? this.frameState_.viewHints : undefined);\n            var viewState = view.getState();\n            frameState = {\n                animate: false,\n                coordinateToPixelTransform: this.coordinateToPixelTransform_,\n                declutterTree: null,\n                extent: getForViewAndSize(viewState.center, viewState.resolution, viewState.rotation, size),\n                index: this.frameIndex_++,\n                layerIndex: 0,\n                layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n                pixelRatio: this.pixelRatio_,\n                pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n                postRenderFunctions: [],\n                size: size,\n                tileQueue: this.tileQueue_,\n                time: time,\n                usedTiles: {},\n                viewState: viewState,\n                viewHints: viewHints,\n                wantedTiles: {},\n            };\n        }\n        this.frameState_ = frameState;\n        this.renderer_.renderFrame(frameState);\n        if (frameState) {\n            if (frameState.animate) {\n                this.render();\n            }\n            Array.prototype.push.apply(this.postRenderFunctions_, frameState.postRenderFunctions);\n            if (previousFrameState) {\n                var moveStart = !this.previousExtent_ ||\n                    (!isEmpty(this.previousExtent_) &&\n                        !equals(frameState.extent, this.previousExtent_));\n                if (moveStart) {\n                    this.dispatchEvent(new MapEvent(MapEventType.MOVESTART, this, previousFrameState));\n                    this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n                }\n            }\n            var idle = this.previousExtent_ &&\n                !frameState.viewHints[ViewHint.ANIMATING] &&\n                !frameState.viewHints[ViewHint.INTERACTING] &&\n                !equals(frameState.extent, this.previousExtent_);\n            if (idle) {\n                this.dispatchEvent(new MapEvent(MapEventType.MOVEEND, this, frameState));\n                clone(frameState.extent, this.previousExtent_);\n            }\n        }\n        this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n        if (!this.postRenderTimeoutHandle_) {\n            this.postRenderTimeoutHandle_ = setTimeout(function () {\n                _this.postRenderTimeoutHandle_ = undefined;\n                _this.handlePostRender();\n            }, 0);\n        }\n    };\n    /**\n     * Sets the layergroup of this map.\n     * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n     * @observable\n     * @api\n     */\n    PluggableMap.prototype.setLayerGroup = function (layerGroup) {\n        this.set(MapProperty.LAYERGROUP, layerGroup);\n    };\n    /**\n     * Set the size of this map.\n     * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n     * @observable\n     * @api\n     */\n    PluggableMap.prototype.setSize = function (size) {\n        this.set(MapProperty.SIZE, size);\n    };\n    /**\n     * Set the target element to render this map into.\n     * @param {HTMLElement|string|undefined} target The Element or id of the Element\n     *     that the map is rendered in.\n     * @observable\n     * @api\n     */\n    PluggableMap.prototype.setTarget = function (target) {\n        this.set(MapProperty.TARGET, target);\n    };\n    /**\n     * Set the view for this map.\n     * @param {View} view The view that controls this map.\n     * @observable\n     * @api\n     */\n    PluggableMap.prototype.setView = function (view) {\n        this.set(MapProperty.VIEW, view);\n    };\n    /**\n     * Force a recalculation of the map viewport size.  This should be called when\n     * third-party code changes the size of the map viewport.\n     * @api\n     */\n    PluggableMap.prototype.updateSize = function () {\n        var targetElement = this.getTargetElement();\n        if (!targetElement) {\n            this.setSize(undefined);\n        }\n        else {\n            var computedStyle = getComputedStyle(targetElement);\n            this.setSize([\n                targetElement.offsetWidth -\n                    parseFloat(computedStyle['borderLeftWidth']) -\n                    parseFloat(computedStyle['paddingLeft']) -\n                    parseFloat(computedStyle['paddingRight']) -\n                    parseFloat(computedStyle['borderRightWidth']),\n                targetElement.offsetHeight -\n                    parseFloat(computedStyle['borderTopWidth']) -\n                    parseFloat(computedStyle['paddingTop']) -\n                    parseFloat(computedStyle['paddingBottom']) -\n                    parseFloat(computedStyle['borderBottomWidth']),\n            ]);\n        }\n        this.updateViewportSize_();\n    };\n    /**\n     * Recomputes the viewport size and save it on the view object (if any)\n     * @private\n     */\n    PluggableMap.prototype.updateViewportSize_ = function () {\n        var view = this.getView();\n        if (view) {\n            var size = undefined;\n            var computedStyle = getComputedStyle(this.viewport_);\n            if (computedStyle.width && computedStyle.height) {\n                size = [\n                    parseInt(computedStyle.width, 10),\n                    parseInt(computedStyle.height, 10),\n                ];\n            }\n            view.setViewportSize(size);\n        }\n    };\n    return PluggableMap;\n}(BaseObject));\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n    /**\n     * @type {HTMLElement|Document}\n     */\n    var keyboardEventTarget = null;\n    if (options.keyboardEventTarget !== undefined) {\n        keyboardEventTarget =\n            typeof options.keyboardEventTarget === 'string'\n                ? document.getElementById(options.keyboardEventTarget)\n                : options.keyboardEventTarget;\n    }\n    /**\n     * @type {Object<string, *>}\n     */\n    var values = {};\n    var layerGroup = options.layers &&\n        typeof ( /** @type {?} */(options.layers).getLayers) === 'function'\n        ? /** @type {LayerGroup} */ (options.layers)\n        : new LayerGroup({ layers: /** @type {Collection} */ (options.layers) });\n    values[MapProperty.LAYERGROUP] = layerGroup;\n    values[MapProperty.TARGET] = options.target;\n    values[MapProperty.VIEW] =\n        options.view !== undefined ? options.view : new View();\n    var controls;\n    if (options.controls !== undefined) {\n        if (Array.isArray(options.controls)) {\n            controls = new Collection(options.controls.slice());\n        }\n        else {\n            assert(typeof ( /** @type {?} */(options.controls).getArray) === 'function', 47); // Expected `controls` to be an array or an `import(\"./Collection.js\").Collection`\n            controls = /** @type {Collection} */ (options.controls);\n        }\n    }\n    var interactions;\n    if (options.interactions !== undefined) {\n        if (Array.isArray(options.interactions)) {\n            interactions = new Collection(options.interactions.slice());\n        }\n        else {\n            assert(typeof ( /** @type {?} */(options.interactions).getArray) ===\n                'function', 48); // Expected `interactions` to be an array or an `import(\"./Collection.js\").Collection`\n            interactions = /** @type {Collection} */ (options.interactions);\n        }\n    }\n    var overlays;\n    if (options.overlays !== undefined) {\n        if (Array.isArray(options.overlays)) {\n            overlays = new Collection(options.overlays.slice());\n        }\n        else {\n            assert(typeof ( /** @type {?} */(options.overlays).getArray) === 'function', 49); // Expected `overlays` to be an array or an `import(\"./Collection.js\").Collection`\n            overlays = options.overlays;\n        }\n    }\n    else {\n        overlays = new Collection();\n    }\n    return {\n        controls: controls,\n        interactions: interactions,\n        keyboardEventTarget: keyboardEventTarget,\n        overlays: overlays,\n        values: values,\n    };\n}\nexport default PluggableMap;\n//# sourceMappingURL=PluggableMap.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/control/Control\n */\nimport BaseObject from '../Object.js';\nimport MapEventType from '../MapEventType.js';\nimport { VOID } from '../functions.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { removeNode } from '../dom.js';\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * var myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nvar Control = /** @class */ (function (_super) {\n    __extends(Control, _super);\n    /**\n     * @param {Options} options Control options.\n     */\n    function Control(options) {\n        var _this = _super.call(this) || this;\n        var element = options.element;\n        if (element && !options.target && !element.style.pointerEvents) {\n            element.style.pointerEvents = 'auto';\n        }\n        /**\n         * @protected\n         * @type {HTMLElement}\n         */\n        _this.element = element ? element : null;\n        /**\n         * @private\n         * @type {HTMLElement}\n         */\n        _this.target_ = null;\n        /**\n         * @private\n         * @type {import(\"../PluggableMap.js\").default}\n         */\n        _this.map_ = null;\n        /**\n         * @protected\n         * @type {!Array<import(\"../events.js\").EventsKey>}\n         */\n        _this.listenerKeys = [];\n        if (options.render) {\n            _this.render = options.render;\n        }\n        if (options.target) {\n            _this.setTarget(options.target);\n        }\n        return _this;\n    }\n    /**\n     * Clean up.\n     */\n    Control.prototype.disposeInternal = function () {\n        removeNode(this.element);\n        _super.prototype.disposeInternal.call(this);\n    };\n    /**\n     * Get the map associated with this control.\n     * @return {import(\"../PluggableMap.js\").default} Map.\n     * @api\n     */\n    Control.prototype.getMap = function () {\n        return this.map_;\n    };\n    /**\n     * Remove the control from its current map and attach it to the new map.\n     * Subclasses may set up event handlers to get notified about changes to\n     * the map here.\n     * @param {import(\"../PluggableMap.js\").default} map Map.\n     * @api\n     */\n    Control.prototype.setMap = function (map) {\n        if (this.map_) {\n            removeNode(this.element);\n        }\n        for (var i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n            unlistenByKey(this.listenerKeys[i]);\n        }\n        this.listenerKeys.length = 0;\n        this.map_ = map;\n        if (this.map_) {\n            var target = this.target_\n                ? this.target_\n                : map.getOverlayContainerStopEvent();\n            target.appendChild(this.element);\n            if (this.render !== VOID) {\n                this.listenerKeys.push(listen(map, MapEventType.POSTRENDER, this.render, this));\n            }\n            map.render();\n        }\n    };\n    /**\n     * Renders the control.\n     * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n     * @api\n     */\n    Control.prototype.render = function (mapEvent) { };\n    /**\n     * This function is used to set a target element for the control. It has no\n     * effect if it is called after the control has been added to the map (i.e.\n     * after `setMap` is called on the control). If no `target` is set in the\n     * options passed to the control constructor and if `setTarget` is not called\n     * then the control is added to the map's overlay container.\n     * @param {HTMLElement|string} target Target.\n     * @api\n     */\n    Control.prototype.setTarget = function (target) {\n        this.target_ =\n            typeof target === 'string' ? document.getElementById(target) : target;\n    };\n    return Control;\n}(BaseObject));\nexport default Control;\n//# sourceMappingURL=Control.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/control/Attribution\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE } from '../css.js';\nimport { equals } from '../array.js';\nimport { inView } from '../layer/Layer.js';\nimport { removeChildren, replaceNode } from '../dom.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='»'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n */\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nvar Attribution = /** @class */ (function (_super) {\n    __extends(Attribution, _super);\n    /**\n     * @param {Options=} opt_options Attribution options.\n     */\n    function Attribution(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        _this = _super.call(this, {\n            element: document.createElement('div'),\n            render: options.render,\n            target: options.target,\n        }) || this;\n        /**\n         * @private\n         * @type {HTMLElement}\n         */\n        _this.ulElement_ = document.createElement('ul');\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.collapsed_ =\n            options.collapsed !== undefined ? options.collapsed : true;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.userCollapsed_ = _this.collapsed_;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.overrideCollapsible_ = options.collapsible !== undefined;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.collapsible_ =\n            options.collapsible !== undefined ? options.collapsible : true;\n        if (!_this.collapsible_) {\n            _this.collapsed_ = false;\n        }\n        var className = options.className !== undefined ? options.className : 'ol-attribution';\n        var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n        var expandClassName = options.expandClassName !== undefined\n            ? options.expandClassName\n            : className + '-expand';\n        var collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\\u00BB';\n        var collapseClassName = options.collapseClassName !== undefined\n            ? options.collapseClassName\n            : className + '-collpase';\n        if (typeof collapseLabel === 'string') {\n            /**\n             * @private\n             * @type {HTMLElement}\n             */\n            _this.collapseLabel_ = document.createElement('span');\n            _this.collapseLabel_.textContent = collapseLabel;\n            _this.collapseLabel_.className = collapseClassName;\n        }\n        else {\n            _this.collapseLabel_ = collapseLabel;\n        }\n        var label = options.label !== undefined ? options.label : 'i';\n        if (typeof label === 'string') {\n            /**\n             * @private\n             * @type {HTMLElement}\n             */\n            _this.label_ = document.createElement('span');\n            _this.label_.textContent = label;\n            _this.label_.className = expandClassName;\n        }\n        else {\n            _this.label_ = label;\n        }\n        var activeLabel = _this.collapsible_ && !_this.collapsed_ ? _this.collapseLabel_ : _this.label_;\n        var button = document.createElement('button');\n        button.setAttribute('type', 'button');\n        button.title = tipLabel;\n        button.appendChild(activeLabel);\n        button.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this), false);\n        var cssClasses = className +\n            ' ' +\n            CLASS_UNSELECTABLE +\n            ' ' +\n            CLASS_CONTROL +\n            (_this.collapsed_ && _this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n            (_this.collapsible_ ? '' : ' ol-uncollapsible');\n        var element = _this.element;\n        element.className = cssClasses;\n        element.appendChild(_this.ulElement_);\n        element.appendChild(button);\n        /**\n         * A list of currently rendered resolutions.\n         * @type {Array<string>}\n         * @private\n         */\n        _this.renderedAttributions_ = [];\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.renderedVisible_ = true;\n        return _this;\n    }\n    /**\n     * Collect a list of visible attributions and set the collapsible state.\n     * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     * @return {Array<string>} Attributions.\n     * @private\n     */\n    Attribution.prototype.collectSourceAttributions_ = function (frameState) {\n        /**\n         * Used to determine if an attribution already exists.\n         * @type {!Object<string, boolean>}\n         */\n        var lookup = {};\n        /**\n         * A list of visible attributions.\n         * @type {Array<string>}\n         */\n        var visibleAttributions = [];\n        var collapsible = true;\n        var layerStatesArray = frameState.layerStatesArray;\n        for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n            var layerState = layerStatesArray[i];\n            if (!inView(layerState, frameState.viewState)) {\n                continue;\n            }\n            var source = /** @type {import(\"../layer/Layer.js\").default} */ (layerState.layer).getSource();\n            if (!source) {\n                continue;\n            }\n            var attributionGetter = source.getAttributions();\n            if (!attributionGetter) {\n                continue;\n            }\n            var attributions = attributionGetter(frameState);\n            if (!attributions) {\n                continue;\n            }\n            collapsible =\n                collapsible && source.getAttributionsCollapsible() !== false;\n            if (Array.isArray(attributions)) {\n                for (var j = 0, jj = attributions.length; j < jj; ++j) {\n                    if (!(attributions[j] in lookup)) {\n                        visibleAttributions.push(attributions[j]);\n                        lookup[attributions[j]] = true;\n                    }\n                }\n            }\n            else {\n                if (!(attributions in lookup)) {\n                    visibleAttributions.push(attributions);\n                    lookup[attributions] = true;\n                }\n            }\n        }\n        if (!this.overrideCollapsible_) {\n            this.setCollapsible(collapsible);\n        }\n        return visibleAttributions;\n    };\n    /**\n     * @private\n     * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n     */\n    Attribution.prototype.updateElement_ = function (frameState) {\n        if (!frameState) {\n            if (this.renderedVisible_) {\n                this.element.style.display = 'none';\n                this.renderedVisible_ = false;\n            }\n            return;\n        }\n        var attributions = this.collectSourceAttributions_(frameState);\n        var visible = attributions.length > 0;\n        if (this.renderedVisible_ != visible) {\n            this.element.style.display = visible ? '' : 'none';\n            this.renderedVisible_ = visible;\n        }\n        if (equals(attributions, this.renderedAttributions_)) {\n            return;\n        }\n        removeChildren(this.ulElement_);\n        // append the attributions\n        for (var i = 0, ii = attributions.length; i < ii; ++i) {\n            var element = document.createElement('li');\n            element.innerHTML = attributions[i];\n            this.ulElement_.appendChild(element);\n        }\n        this.renderedAttributions_ = attributions;\n    };\n    /**\n     * @param {MouseEvent} event The event to handle\n     * @private\n     */\n    Attribution.prototype.handleClick_ = function (event) {\n        event.preventDefault();\n        this.handleToggle_();\n        this.userCollapsed_ = this.collapsed_;\n    };\n    /**\n     * @private\n     */\n    Attribution.prototype.handleToggle_ = function () {\n        this.element.classList.toggle(CLASS_COLLAPSED);\n        if (this.collapsed_) {\n            replaceNode(this.collapseLabel_, this.label_);\n        }\n        else {\n            replaceNode(this.label_, this.collapseLabel_);\n        }\n        this.collapsed_ = !this.collapsed_;\n    };\n    /**\n     * Return `true` if the attribution is collapsible, `false` otherwise.\n     * @return {boolean} True if the widget is collapsible.\n     * @api\n     */\n    Attribution.prototype.getCollapsible = function () {\n        return this.collapsible_;\n    };\n    /**\n     * Set whether the attribution should be collapsible.\n     * @param {boolean} collapsible True if the widget is collapsible.\n     * @api\n     */\n    Attribution.prototype.setCollapsible = function (collapsible) {\n        if (this.collapsible_ === collapsible) {\n            return;\n        }\n        this.collapsible_ = collapsible;\n        this.element.classList.toggle('ol-uncollapsible');\n        if (this.userCollapsed_) {\n            this.handleToggle_();\n        }\n    };\n    /**\n     * Collapse or expand the attribution according to the passed parameter. Will\n     * not do anything if the attribution isn't collapsible or if the current\n     * collapsed state is already the one requested.\n     * @param {boolean} collapsed True if the widget is collapsed.\n     * @api\n     */\n    Attribution.prototype.setCollapsed = function (collapsed) {\n        this.userCollapsed_ = collapsed;\n        if (!this.collapsible_ || this.collapsed_ === collapsed) {\n            return;\n        }\n        this.handleToggle_();\n    };\n    /**\n     * Return `true` when the attribution is currently collapsed or `false`\n     * otherwise.\n     * @return {boolean} True if the widget is collapsed.\n     * @api\n     */\n    Attribution.prototype.getCollapsed = function () {\n        return this.collapsed_;\n    };\n    /**\n     * Update the attribution element.\n     * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n     * @override\n     */\n    Attribution.prototype.render = function (mapEvent) {\n        this.updateElement_(mapEvent.frameState);\n    };\n    return Attribution;\n}(Control));\nexport default Attribution;\n//# sourceMappingURL=Attribution.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/control/Rotate\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE } from '../css.js';\nimport { easeOut } from '../easing.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nvar Rotate = /** @class */ (function (_super) {\n    __extends(Rotate, _super);\n    /**\n     * @param {Options=} opt_options Rotate options.\n     */\n    function Rotate(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        _this = _super.call(this, {\n            element: document.createElement('div'),\n            render: options.render,\n            target: options.target,\n        }) || this;\n        var className = options.className !== undefined ? options.className : 'ol-rotate';\n        var label = options.label !== undefined ? options.label : '\\u21E7';\n        var compassClassName = options.compassClassName !== undefined\n            ? options.compassClassName\n            : 'ol-compass';\n        /**\n         * @type {HTMLElement}\n         * @private\n         */\n        _this.label_ = null;\n        if (typeof label === 'string') {\n            _this.label_ = document.createElement('span');\n            _this.label_.className = compassClassName;\n            _this.label_.textContent = label;\n        }\n        else {\n            _this.label_ = label;\n            _this.label_.classList.add(compassClassName);\n        }\n        var tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n        var button = document.createElement('button');\n        button.className = className + '-reset';\n        button.setAttribute('type', 'button');\n        button.title = tipLabel;\n        button.appendChild(_this.label_);\n        button.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this), false);\n        var cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n        var element = _this.element;\n        element.className = cssClasses;\n        element.appendChild(button);\n        _this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n        /**\n         * @type {number}\n         * @private\n         */\n        _this.duration_ = options.duration !== undefined ? options.duration : 250;\n        /**\n         * @type {boolean}\n         * @private\n         */\n        _this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.rotation_ = undefined;\n        if (_this.autoHide_) {\n            _this.element.classList.add(CLASS_HIDDEN);\n        }\n        return _this;\n    }\n    /**\n     * @param {MouseEvent} event The event to handle\n     * @private\n     */\n    Rotate.prototype.handleClick_ = function (event) {\n        event.preventDefault();\n        if (this.callResetNorth_ !== undefined) {\n            this.callResetNorth_();\n        }\n        else {\n            this.resetNorth_();\n        }\n    };\n    /**\n     * @private\n     */\n    Rotate.prototype.resetNorth_ = function () {\n        var map = this.getMap();\n        var view = map.getView();\n        if (!view) {\n            // the map does not have a view, so we can't act\n            // upon it\n            return;\n        }\n        var rotation = view.getRotation();\n        if (rotation !== undefined) {\n            if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n                view.animate({\n                    rotation: 0,\n                    duration: this.duration_,\n                    easing: easeOut,\n                });\n            }\n            else {\n                view.setRotation(0);\n            }\n        }\n    };\n    /**\n     * Update the rotate control element.\n     * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n     * @override\n     */\n    Rotate.prototype.render = function (mapEvent) {\n        var frameState = mapEvent.frameState;\n        if (!frameState) {\n            return;\n        }\n        var rotation = frameState.viewState.rotation;\n        if (rotation != this.rotation_) {\n            var transform = 'rotate(' + rotation + 'rad)';\n            if (this.autoHide_) {\n                var contains = this.element.classList.contains(CLASS_HIDDEN);\n                if (!contains && rotation === 0) {\n                    this.element.classList.add(CLASS_HIDDEN);\n                }\n                else if (contains && rotation !== 0) {\n                    this.element.classList.remove(CLASS_HIDDEN);\n                }\n            }\n            this.label_.style.transform = transform;\n        }\n        this.rotation_ = rotation;\n    };\n    return Rotate;\n}(Control));\nexport default Rotate;\n//# sourceMappingURL=Rotate.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/control/Zoom\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_CONTROL, CLASS_UNSELECTABLE } from '../css.js';\nimport { easeOut } from '../easing.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='-'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nvar Zoom = /** @class */ (function (_super) {\n    __extends(Zoom, _super);\n    /**\n     * @param {Options=} opt_options Zoom options.\n     */\n    function Zoom(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        _this = _super.call(this, {\n            element: document.createElement('div'),\n            target: options.target,\n        }) || this;\n        var className = options.className !== undefined ? options.className : 'ol-zoom';\n        var delta = options.delta !== undefined ? options.delta : 1;\n        var zoomInClassName = options.zoomInClassName !== undefined\n            ? options.zoomInClassName\n            : className + '-in';\n        var zoomOutClassName = options.zoomOutClassName !== undefined\n            ? options.zoomOutClassName\n            : className + '-out';\n        var zoomInLabel = options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n        var zoomOutLabel = options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2212';\n        var zoomInTipLabel = options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n        var zoomOutTipLabel = options.zoomOutTipLabel !== undefined\n            ? options.zoomOutTipLabel\n            : 'Zoom out';\n        var inElement = document.createElement('button');\n        inElement.className = zoomInClassName;\n        inElement.setAttribute('type', 'button');\n        inElement.title = zoomInTipLabel;\n        inElement.appendChild(typeof zoomInLabel === 'string'\n            ? document.createTextNode(zoomInLabel)\n            : zoomInLabel);\n        inElement.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this, delta), false);\n        var outElement = document.createElement('button');\n        outElement.className = zoomOutClassName;\n        outElement.setAttribute('type', 'button');\n        outElement.title = zoomOutTipLabel;\n        outElement.appendChild(typeof zoomOutLabel === 'string'\n            ? document.createTextNode(zoomOutLabel)\n            : zoomOutLabel);\n        outElement.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this, -delta), false);\n        var cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n        var element = _this.element;\n        element.className = cssClasses;\n        element.appendChild(inElement);\n        element.appendChild(outElement);\n        /**\n         * @type {number}\n         * @private\n         */\n        _this.duration_ = options.duration !== undefined ? options.duration : 250;\n        return _this;\n    }\n    /**\n     * @param {number} delta Zoom delta.\n     * @param {MouseEvent} event The event to handle\n     * @private\n     */\n    Zoom.prototype.handleClick_ = function (delta, event) {\n        event.preventDefault();\n        this.zoomByDelta_(delta);\n    };\n    /**\n     * @param {number} delta Zoom delta.\n     * @private\n     */\n    Zoom.prototype.zoomByDelta_ = function (delta) {\n        var map = this.getMap();\n        var view = map.getView();\n        if (!view) {\n            // the map does not have a view, so we can't act\n            // upon it\n            return;\n        }\n        var currentZoom = view.getZoom();\n        if (currentZoom !== undefined) {\n            var newZoom = view.getConstrainedZoom(currentZoom + delta);\n            if (this.duration_ > 0) {\n                if (view.getAnimating()) {\n                    view.cancelAnimations();\n                }\n                view.animate({\n                    zoom: newZoom,\n                    duration: this.duration_,\n                    easing: easeOut,\n                });\n            }\n            else {\n                view.setZoom(newZoom);\n            }\n        }\n    };\n    return Zoom;\n}(Control));\nexport default Zoom;\n//# sourceMappingURL=Zoom.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport Interaction, { zoomByDelta } from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nvar DoubleClickZoom = /** @class */ (function (_super) {\n    __extends(DoubleClickZoom, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function DoubleClickZoom(opt_options) {\n        var _this = _super.call(this) || this;\n        var options = opt_options ? opt_options : {};\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.delta_ = options.delta ? options.delta : 1;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.duration_ = options.duration !== undefined ? options.duration : 250;\n        return _this;\n    }\n    /**\n     * Handles the {@link module:ol/MapBrowserEvent map browser event} (if it was a\n     * doubleclick) and eventually zooms the map.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n     * @return {boolean} `false` to stop event propagation.\n     */\n    DoubleClickZoom.prototype.handleEvent = function (mapBrowserEvent) {\n        var stopEvent = false;\n        if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n            var browserEvent = /** @type {MouseEvent} */ (mapBrowserEvent.originalEvent);\n            var map = mapBrowserEvent.map;\n            var anchor = mapBrowserEvent.coordinate;\n            var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n            var view = map.getView();\n            zoomByDelta(view, delta, anchor, this.duration_);\n            browserEvent.preventDefault();\n            stopEvent = true;\n        }\n        return !stopEvent;\n    };\n    return DoubleClickZoom;\n}(Interaction));\nexport default DoubleClickZoom;\n//# sourceMappingURL=DoubleClickZoom.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/DragPan\n */\nimport PointerInteraction, { centroid as centroidFromPointers, } from './Pointer.js';\nimport { FALSE } from '../functions.js';\nimport { all, focusWithTabindex, noModifierKeys, primaryAction, } from '../events/condition.js';\nimport { easeOut } from '../easing.js';\nimport { rotate as rotateCoordinate, scale as scaleCoordinate, } from '../coordinate.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition~noModifierKeys} and {@link module:ol/events/condition~primaryAction}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {import(\"../Kinetic.js\").default} [kinetic] Kinetic inertia to apply to the pan.\n */\n/**\n * @classdesc\n * Allows the user to pan the map by dragging the map.\n * @api\n */\nvar DragPan = /** @class */ (function (_super) {\n    __extends(DragPan, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function DragPan(opt_options) {\n        var _this = _super.call(this, {\n            stopDown: FALSE,\n        }) || this;\n        var options = opt_options ? opt_options : {};\n        /**\n         * @private\n         * @type {import(\"../Kinetic.js\").default|undefined}\n         */\n        _this.kinetic_ = options.kinetic;\n        /**\n         * @type {import(\"../pixel.js\").Pixel}\n         */\n        _this.lastCentroid = null;\n        /**\n         * @type {number}\n         */\n        _this.lastPointersCount_;\n        /**\n         * @type {boolean}\n         */\n        _this.panning_ = false;\n        var condition = options.condition\n            ? options.condition\n            : all(noModifierKeys, primaryAction);\n        /**\n         * @private\n         * @type {import(\"../events/condition.js\").Condition}\n         */\n        _this.condition_ = options.onFocusOnly\n            ? all(focusWithTabindex, condition)\n            : condition;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.noKinetic_ = false;\n        return _this;\n    }\n    /**\n     * Handle pointer drag events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     */\n    DragPan.prototype.handleDragEvent = function (mapBrowserEvent) {\n        if (!this.panning_) {\n            this.panning_ = true;\n            this.getMap().getView().beginInteraction();\n        }\n        var targetPointers = this.targetPointers;\n        var centroid = centroidFromPointers(targetPointers);\n        if (targetPointers.length == this.lastPointersCount_) {\n            if (this.kinetic_) {\n                this.kinetic_.update(centroid[0], centroid[1]);\n            }\n            if (this.lastCentroid) {\n                var delta = [\n                    this.lastCentroid[0] - centroid[0],\n                    centroid[1] - this.lastCentroid[1],\n                ];\n                var map = mapBrowserEvent.map;\n                var view = map.getView();\n                scaleCoordinate(delta, view.getResolution());\n                rotateCoordinate(delta, view.getRotation());\n                view.adjustCenterInternal(delta);\n            }\n        }\n        else if (this.kinetic_) {\n            // reset so we don't overestimate the kinetic energy after\n            // after one finger down, tiny drag, second finger down\n            this.kinetic_.begin();\n        }\n        this.lastCentroid = centroid;\n        this.lastPointersCount_ = targetPointers.length;\n        mapBrowserEvent.originalEvent.preventDefault();\n    };\n    /**\n     * Handle pointer up events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     */\n    DragPan.prototype.handleUpEvent = function (mapBrowserEvent) {\n        var map = mapBrowserEvent.map;\n        var view = map.getView();\n        if (this.targetPointers.length === 0) {\n            if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {\n                var distance = this.kinetic_.getDistance();\n                var angle = this.kinetic_.getAngle();\n                var center = view.getCenterInternal();\n                var centerpx = map.getPixelFromCoordinateInternal(center);\n                var dest = map.getCoordinateFromPixelInternal([\n                    centerpx[0] - distance * Math.cos(angle),\n                    centerpx[1] - distance * Math.sin(angle),\n                ]);\n                view.animateInternal({\n                    center: view.getConstrainedCenter(dest),\n                    duration: 500,\n                    easing: easeOut,\n                });\n            }\n            if (this.panning_) {\n                this.panning_ = false;\n                view.endInteraction();\n            }\n            return false;\n        }\n        else {\n            if (this.kinetic_) {\n                // reset so we don't overestimate the kinetic energy after\n                // after one finger up, tiny drag, second finger up\n                this.kinetic_.begin();\n            }\n            this.lastCentroid = null;\n            return true;\n        }\n    };\n    /**\n     * Handle pointer down events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     */\n    DragPan.prototype.handleDownEvent = function (mapBrowserEvent) {\n        if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {\n            var map = mapBrowserEvent.map;\n            var view = map.getView();\n            this.lastCentroid = null;\n            // stop any current animation\n            if (view.getAnimating()) {\n                view.cancelAnimations();\n            }\n            if (this.kinetic_) {\n                this.kinetic_.begin();\n            }\n            // No kinetic as soon as more than one pointer on the screen is\n            // detected. This is to prevent nasty pans after pinch.\n            this.noKinetic_ = this.targetPointers.length > 1;\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    return DragPan;\n}(PointerInteraction));\nexport default DragPan;\n//# sourceMappingURL=DragPan.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/DragRotate\n */\nimport PointerInteraction from './Pointer.js';\nimport { FALSE } from '../functions.js';\nimport { altShiftKeysOnly, mouseActionButton, mouseOnly, } from '../events/condition.js';\nimport { disable } from '../rotationconstraint.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an\n * {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition~altShiftKeysOnly}.\n * @property {number} [duration=250] Animation duration in milliseconds.\n */\n/**\n * @classdesc\n * Allows the user to rotate the map by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when the alt and shift keys are held down.\n *\n * This interaction is only supported for mouse devices.\n * @api\n */\nvar DragRotate = /** @class */ (function (_super) {\n    __extends(DragRotate, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function DragRotate(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        _this = _super.call(this, {\n            stopDown: FALSE,\n        }) || this;\n        /**\n         * @private\n         * @type {import(\"../events/condition.js\").Condition}\n         */\n        _this.condition_ = options.condition ? options.condition : altShiftKeysOnly;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.lastAngle_ = undefined;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.duration_ = options.duration !== undefined ? options.duration : 250;\n        return _this;\n    }\n    /**\n     * Handle pointer drag events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     */\n    DragRotate.prototype.handleDragEvent = function (mapBrowserEvent) {\n        if (!mouseOnly(mapBrowserEvent)) {\n            return;\n        }\n        var map = mapBrowserEvent.map;\n        var view = map.getView();\n        if (view.getConstraints().rotation === disable) {\n            return;\n        }\n        var size = map.getSize();\n        var offset = mapBrowserEvent.pixel;\n        var theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);\n        if (this.lastAngle_ !== undefined) {\n            var delta = theta - this.lastAngle_;\n            view.adjustRotationInternal(-delta);\n        }\n        this.lastAngle_ = theta;\n    };\n    /**\n     * Handle pointer up events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     */\n    DragRotate.prototype.handleUpEvent = function (mapBrowserEvent) {\n        if (!mouseOnly(mapBrowserEvent)) {\n            return true;\n        }\n        var map = mapBrowserEvent.map;\n        var view = map.getView();\n        view.endInteraction(this.duration_);\n        return false;\n    };\n    /**\n     * Handle pointer down events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     */\n    DragRotate.prototype.handleDownEvent = function (mapBrowserEvent) {\n        if (!mouseOnly(mapBrowserEvent)) {\n            return false;\n        }\n        if (mouseActionButton(mapBrowserEvent) &&\n            this.condition_(mapBrowserEvent)) {\n            var map = mapBrowserEvent.map;\n            map.getView().beginInteraction();\n            this.lastAngle_ = undefined;\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    return DragRotate;\n}(PointerInteraction));\nexport default DragRotate;\n//# sourceMappingURL=DragRotate.js.map","/**\n * @module ol/render/Box\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport Disposable from '../Disposable.js';\nimport Polygon from '../geom/Polygon.js';\nvar RenderBox = /** @class */ (function (_super) {\n    __extends(RenderBox, _super);\n    /**\n     * @param {string} className CSS class name.\n     */\n    function RenderBox(className) {\n        var _this = _super.call(this) || this;\n        /**\n         * @type {import(\"../geom/Polygon.js\").default}\n         * @private\n         */\n        _this.geometry_ = null;\n        /**\n         * @type {HTMLDivElement}\n         * @private\n         */\n        _this.element_ = document.createElement('div');\n        _this.element_.style.position = 'absolute';\n        _this.element_.style.pointerEvents = 'auto';\n        _this.element_.className = 'ol-box ' + className;\n        /**\n         * @private\n         * @type {import(\"../PluggableMap.js\").default}\n         */\n        _this.map_ = null;\n        /**\n         * @private\n         * @type {import(\"../pixel.js\").Pixel}\n         */\n        _this.startPixel_ = null;\n        /**\n         * @private\n         * @type {import(\"../pixel.js\").Pixel}\n         */\n        _this.endPixel_ = null;\n        return _this;\n    }\n    /**\n     * Clean up.\n     */\n    RenderBox.prototype.disposeInternal = function () {\n        this.setMap(null);\n    };\n    /**\n     * @private\n     */\n    RenderBox.prototype.render_ = function () {\n        var startPixel = this.startPixel_;\n        var endPixel = this.endPixel_;\n        var px = 'px';\n        var style = this.element_.style;\n        style.left = Math.min(startPixel[0], endPixel[0]) + px;\n        style.top = Math.min(startPixel[1], endPixel[1]) + px;\n        style.width = Math.abs(endPixel[0] - startPixel[0]) + px;\n        style.height = Math.abs(endPixel[1] - startPixel[1]) + px;\n    };\n    /**\n     * @param {import(\"../PluggableMap.js\").default} map Map.\n     */\n    RenderBox.prototype.setMap = function (map) {\n        if (this.map_) {\n            this.map_.getOverlayContainer().removeChild(this.element_);\n            var style = this.element_.style;\n            style.left = 'inherit';\n            style.top = 'inherit';\n            style.width = 'inherit';\n            style.height = 'inherit';\n        }\n        this.map_ = map;\n        if (this.map_) {\n            this.map_.getOverlayContainer().appendChild(this.element_);\n        }\n    };\n    /**\n     * @param {import(\"../pixel.js\").Pixel} startPixel Start pixel.\n     * @param {import(\"../pixel.js\").Pixel} endPixel End pixel.\n     */\n    RenderBox.prototype.setPixels = function (startPixel, endPixel) {\n        this.startPixel_ = startPixel;\n        this.endPixel_ = endPixel;\n        this.createOrUpdateGeometry();\n        this.render_();\n    };\n    /**\n     * Creates or updates the cached geometry.\n     */\n    RenderBox.prototype.createOrUpdateGeometry = function () {\n        var startPixel = this.startPixel_;\n        var endPixel = this.endPixel_;\n        var pixels = [\n            startPixel,\n            [startPixel[0], endPixel[1]],\n            endPixel,\n            [endPixel[0], startPixel[1]],\n        ];\n        var coordinates = pixels.map(this.map_.getCoordinateFromPixelInternal, this.map_);\n        // close the polygon\n        coordinates[4] = coordinates[0].slice();\n        if (!this.geometry_) {\n            this.geometry_ = new Polygon([coordinates]);\n        }\n        else {\n            this.geometry_.setCoordinates([coordinates]);\n        }\n    };\n    /**\n     * @return {import(\"../geom/Polygon.js\").default} Geometry.\n     */\n    RenderBox.prototype.getGeometry = function () {\n        return this.geometry_;\n    };\n    return RenderBox;\n}(Disposable));\nexport default RenderBox;\n//# sourceMappingURL=Box.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/DragBox\n */\n// FIXME draw drag box\nimport Event from '../events/Event.js';\nimport PointerInteraction from './Pointer.js';\nimport RenderBox from '../render/Box.js';\nimport { mouseActionButton } from '../events/condition.js';\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s and returns a `{boolean}`. If the condition is met,\n * true should be returned.\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default, import(\"../pixel.js\").Pixel, import(\"../pixel.js\").Pixel):boolean} EndCondition\n */\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragbox'] CSS class name for styling the box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link ol/events/condition~mouseActionButton}.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the default\n * `boxEndCondition` function.\n * @property {EndCondition} [boxEndCondition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s to indicate whether a `boxend` event should be fired.\n * Default is `true` if the area of the box is bigger than the `minArea` option.\n * @property {function(this:DragBox, import(\"../MapBrowserEvent.js\").default):void} [onBoxEnd] Code to execute just\n * before `boxend` is fired.\n */\n/**\n * @enum {string}\n */\nvar DragBoxEventType = {\n    /**\n     * Triggered upon drag box start.\n     * @event DragBoxEvent#boxstart\n     * @api\n     */\n    BOXSTART: 'boxstart',\n    /**\n     * Triggered on drag when box is active.\n     * @event DragBoxEvent#boxdrag\n     * @api\n     */\n    BOXDRAG: 'boxdrag',\n    /**\n     * Triggered upon drag box end.\n     * @event DragBoxEvent#boxend\n     * @api\n     */\n    BOXEND: 'boxend',\n    /**\n     * Triggered upon drag box canceled.\n     * @event DragBoxEvent#boxcancel\n     * @api\n     */\n    BOXCANCEL: 'boxcancel',\n};\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/DragBox~DragBox} instances are instances of\n * this type.\n */\nvar DragBoxEvent = /** @class */ (function (_super) {\n    __extends(DragBoxEvent, _super);\n    /**\n     * @param {string} type The event type.\n     * @param {import(\"../coordinate.js\").Coordinate} coordinate The event coordinate.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Originating event.\n     */\n    function DragBoxEvent(type, coordinate, mapBrowserEvent) {\n        var _this = _super.call(this, type) || this;\n        /**\n         * The coordinate of the drag event.\n         * @const\n         * @type {import(\"../coordinate.js\").Coordinate}\n         * @api\n         */\n        _this.coordinate = coordinate;\n        /**\n         * @const\n         * @type {import(\"../MapBrowserEvent.js\").default}\n         * @api\n         */\n        _this.mapBrowserEvent = mapBrowserEvent;\n        return _this;\n    }\n    return DragBoxEvent;\n}(Event));\nexport { DragBoxEvent };\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when the shift or other key is held down. This is used, for example,\n * for zooming to a specific area of the map\n * (see {@link module:ol/interaction/DragZoom~DragZoom} and\n * {@link module:ol/interaction/DragRotateAndZoom}).\n *\n * @fires DragBoxEvent\n * @api\n */\nvar DragBox = /** @class */ (function (_super) {\n    __extends(DragBox, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function DragBox(opt_options) {\n        var _this = _super.call(this) || this;\n        var options = opt_options ? opt_options : {};\n        /**\n         * @type {import(\"../render/Box.js\").default}\n         * @private\n         */\n        _this.box_ = new RenderBox(options.className || 'ol-dragbox');\n        /**\n         * @type {number}\n         * @private\n         */\n        _this.minArea_ = options.minArea !== undefined ? options.minArea : 64;\n        if (options.onBoxEnd) {\n            _this.onBoxEnd = options.onBoxEnd;\n        }\n        /**\n         * @type {import(\"../pixel.js\").Pixel}\n         * @private\n         */\n        _this.startPixel_ = null;\n        /**\n         * @private\n         * @type {import(\"../events/condition.js\").Condition}\n         */\n        _this.condition_ = options.condition ? options.condition : mouseActionButton;\n        /**\n         * @private\n         * @type {EndCondition}\n         */\n        _this.boxEndCondition_ = options.boxEndCondition\n            ? options.boxEndCondition\n            : _this.defaultBoxEndCondition;\n        return _this;\n    }\n    /**\n     * The default condition for determining whether the boxend event\n     * should fire.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent The originating MapBrowserEvent\n     *     leading to the box end.\n     * @param {import(\"../pixel.js\").Pixel} startPixel The starting pixel of the box.\n     * @param {import(\"../pixel.js\").Pixel} endPixel The end pixel of the box.\n     * @return {boolean} Whether or not the boxend condition should be fired.\n     */\n    DragBox.prototype.defaultBoxEndCondition = function (mapBrowserEvent, startPixel, endPixel) {\n        var width = endPixel[0] - startPixel[0];\n        var height = endPixel[1] - startPixel[1];\n        return width * width + height * height >= this.minArea_;\n    };\n    /**\n     * Returns geometry of last drawn box.\n     * @return {import(\"../geom/Polygon.js\").default} Geometry.\n     * @api\n     */\n    DragBox.prototype.getGeometry = function () {\n        return this.box_.getGeometry();\n    };\n    /**\n     * Handle pointer drag events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     */\n    DragBox.prototype.handleDragEvent = function (mapBrowserEvent) {\n        this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);\n        this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXDRAG, mapBrowserEvent.coordinate, mapBrowserEvent));\n    };\n    /**\n     * Handle pointer up events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     */\n    DragBox.prototype.handleUpEvent = function (mapBrowserEvent) {\n        this.box_.setMap(null);\n        var completeBox = this.boxEndCondition_(mapBrowserEvent, this.startPixel_, mapBrowserEvent.pixel);\n        if (completeBox) {\n            this.onBoxEnd(mapBrowserEvent);\n        }\n        this.dispatchEvent(new DragBoxEvent(completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL, mapBrowserEvent.coordinate, mapBrowserEvent));\n        return false;\n    };\n    /**\n     * Handle pointer down events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     */\n    DragBox.prototype.handleDownEvent = function (mapBrowserEvent) {\n        if (this.condition_(mapBrowserEvent)) {\n            this.startPixel_ = mapBrowserEvent.pixel;\n            this.box_.setMap(mapBrowserEvent.map);\n            this.box_.setPixels(this.startPixel_, this.startPixel_);\n            this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXSTART, mapBrowserEvent.coordinate, mapBrowserEvent));\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    /**\n     * Function to execute just before `onboxend` is fired\n     * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n     */\n    DragBox.prototype.onBoxEnd = function (event) { };\n    return DragBox;\n}(PointerInteraction));\nexport default DragBox;\n//# sourceMappingURL=DragBox.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/DragZoom\n */\nimport DragBox from './DragBox.js';\nimport { createOrUpdateFromCoordinates, getBottomLeft, getCenter, getTopRight, scaleFromCenter, } from '../extent.js';\nimport { easeOut } from '../easing.js';\nimport { shiftKeyOnly } from '../events/condition.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragzoom'] CSS class name for styling the\n * box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition~shiftKeyOnly}.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {boolean} [out=false] Use interaction for zooming out.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the parent default\n * `boxEndCondition` function.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when a key, shift by default, is held down.\n *\n * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or\n * your custom one configured with `className`.\n * @api\n */\nvar DragZoom = /** @class */ (function (_super) {\n    __extends(DragZoom, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function DragZoom(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        var condition = options.condition ? options.condition : shiftKeyOnly;\n        _this = _super.call(this, {\n            condition: condition,\n            className: options.className || 'ol-dragzoom',\n            minArea: options.minArea,\n        }) || this;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.duration_ = options.duration !== undefined ? options.duration : 200;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.out_ = options.out !== undefined ? options.out : false;\n        return _this;\n    }\n    /**\n     * Function to execute just before `onboxend` is fired\n     * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n     */\n    DragZoom.prototype.onBoxEnd = function (event) {\n        var map = this.getMap();\n        var view = /** @type {!import(\"../View.js\").default} */ (map.getView());\n        var size = /** @type {!import(\"../size.js\").Size} */ (map.getSize());\n        var extent = this.getGeometry().getExtent();\n        if (this.out_) {\n            var mapExtent = view.calculateExtentInternal(size);\n            var boxPixelExtent = createOrUpdateFromCoordinates([\n                map.getPixelFromCoordinateInternal(getBottomLeft(extent)),\n                map.getPixelFromCoordinateInternal(getTopRight(extent)),\n            ]);\n            var factor = view.getResolutionForExtentInternal(boxPixelExtent, size);\n            scaleFromCenter(mapExtent, 1 / factor);\n            extent = mapExtent;\n        }\n        var resolution = view.getConstrainedResolution(view.getResolutionForExtentInternal(extent, size));\n        var center = view.getConstrainedCenter(getCenter(extent), resolution);\n        view.animateInternal({\n            resolution: resolution,\n            center: center,\n            duration: this.duration_,\n            easing: easeOut,\n        });\n    };\n    return DragZoom;\n}(DragBox));\nexport default DragZoom;\n//# sourceMappingURL=DragZoom.js.map","/**\n * @module ol/events/KeyCode\n */\n/**\n * @enum {number}\n * @const\n */\nexport default {\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n};\n//# sourceMappingURL=KeyCode.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/KeyboardPan\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, { pan } from './Interaction.js';\nimport KeyCode from '../events/KeyCode.js';\nimport { noModifierKeys, targetNotEditable } from '../events/condition.js';\nimport { rotate as rotateCoordinate } from '../coordinate.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition~noModifierKeys} and\n * {@link module:ol/events/condition~targetNotEditable}.\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {number} [pixelDelta=128] The amount of pixels to pan on each key\n * press.\n */\n/**\n * @classdesc\n * Allows the user to pan the map using keyboard arrows.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}.\n * @api\n */\nvar KeyboardPan = /** @class */ (function (_super) {\n    __extends(KeyboardPan, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function KeyboardPan(opt_options) {\n        var _this = _super.call(this) || this;\n        var options = opt_options || {};\n        /**\n         * @private\n         * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Browser event.\n         * @return {boolean} Combined condition result.\n         */\n        _this.defaultCondition_ = function (mapBrowserEvent) {\n            return (noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent));\n        };\n        /**\n         * @private\n         * @type {import(\"../events/condition.js\").Condition}\n         */\n        _this.condition_ =\n            options.condition !== undefined\n                ? options.condition\n                : _this.defaultCondition_;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.duration_ = options.duration !== undefined ? options.duration : 100;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.pixelDelta_ =\n            options.pixelDelta !== undefined ? options.pixelDelta : 128;\n        return _this;\n    }\n    /**\n     * Handles the {@link module:ol/MapBrowserEvent map browser event} if it was a\n     * `KeyEvent`, and decides the direction to pan to (if an arrow key was\n     * pressed).\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n     * @return {boolean} `false` to stop event propagation.\n     * @this {KeyboardPan}\n     */\n    KeyboardPan.prototype.handleEvent = function (mapBrowserEvent) {\n        var stopEvent = false;\n        if (mapBrowserEvent.type == EventType.KEYDOWN) {\n            var keyEvent = /** @type {KeyboardEvent} */ (mapBrowserEvent.originalEvent);\n            var keyCode = keyEvent.keyCode;\n            if (this.condition_(mapBrowserEvent) &&\n                (keyCode == KeyCode.DOWN ||\n                    keyCode == KeyCode.LEFT ||\n                    keyCode == KeyCode.RIGHT ||\n                    keyCode == KeyCode.UP)) {\n                var map = mapBrowserEvent.map;\n                var view = map.getView();\n                var mapUnitsDelta = view.getResolution() * this.pixelDelta_;\n                var deltaX = 0, deltaY = 0;\n                if (keyCode == KeyCode.DOWN) {\n                    deltaY = -mapUnitsDelta;\n                }\n                else if (keyCode == KeyCode.LEFT) {\n                    deltaX = -mapUnitsDelta;\n                }\n                else if (keyCode == KeyCode.RIGHT) {\n                    deltaX = mapUnitsDelta;\n                }\n                else {\n                    deltaY = mapUnitsDelta;\n                }\n                var delta = [deltaX, deltaY];\n                rotateCoordinate(delta, view.getRotation());\n                pan(view, delta, this.duration_);\n                keyEvent.preventDefault();\n                stopEvent = true;\n            }\n        }\n        return !stopEvent;\n    };\n    return KeyboardPan;\n}(Interaction));\nexport default KeyboardPan;\n//# sourceMappingURL=KeyboardPan.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/KeyboardZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, { zoomByDelta } from './Interaction.js';\nimport { targetNotEditable } from '../events/condition.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition~targetNotEditable}.\n * @property {number} [delta=1] The zoom level delta on each key press.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map using keyboard + and -.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardPan~KeyboardPan}.\n * @api\n */\nvar KeyboardZoom = /** @class */ (function (_super) {\n    __extends(KeyboardZoom, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function KeyboardZoom(opt_options) {\n        var _this = _super.call(this) || this;\n        var options = opt_options ? opt_options : {};\n        /**\n         * @private\n         * @type {import(\"../events/condition.js\").Condition}\n         */\n        _this.condition_ = options.condition ? options.condition : targetNotEditable;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.delta_ = options.delta ? options.delta : 1;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.duration_ = options.duration !== undefined ? options.duration : 100;\n        return _this;\n    }\n    /**\n     * Handles the {@link module:ol/MapBrowserEvent map browser event} if it was a\n     * `KeyEvent`, and decides whether to zoom in or out (depending on whether the\n     * key pressed was '+' or '-').\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n     * @return {boolean} `false` to stop event propagation.\n     * @this {KeyboardZoom}\n     */\n    KeyboardZoom.prototype.handleEvent = function (mapBrowserEvent) {\n        var stopEvent = false;\n        if (mapBrowserEvent.type == EventType.KEYDOWN ||\n            mapBrowserEvent.type == EventType.KEYPRESS) {\n            var keyEvent = /** @type {KeyboardEvent} */ (mapBrowserEvent.originalEvent);\n            var charCode = keyEvent.charCode;\n            if (this.condition_(mapBrowserEvent) &&\n                (charCode == '+'.charCodeAt(0) || charCode == '-'.charCodeAt(0))) {\n                var map = mapBrowserEvent.map;\n                var delta = charCode == '+'.charCodeAt(0) ? this.delta_ : -this.delta_;\n                var view = map.getView();\n                zoomByDelta(view, delta, undefined, this.duration_);\n                keyEvent.preventDefault();\n                stopEvent = true;\n            }\n        }\n        return !stopEvent;\n    };\n    return KeyboardZoom;\n}(Interaction));\nexport default KeyboardZoom;\n//# sourceMappingURL=KeyboardZoom.js.map","/**\n * @module ol/Kinetic\n */\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nvar Kinetic = /** @class */ (function () {\n    /**\n     * @param {number} decay Rate of decay (must be negative).\n     * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n     * @param {number} delay Delay to consider to calculate the kinetic\n     *     initial values (milliseconds).\n     */\n    function Kinetic(decay, minVelocity, delay) {\n        /**\n         * @private\n         * @type {number}\n         */\n        this.decay_ = decay;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.minVelocity_ = minVelocity;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.delay_ = delay;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        this.points_ = [];\n        /**\n         * @private\n         * @type {number}\n         */\n        this.angle_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        this.initialVelocity_ = 0;\n    }\n    /**\n     * FIXME empty description for jsdoc\n     */\n    Kinetic.prototype.begin = function () {\n        this.points_.length = 0;\n        this.angle_ = 0;\n        this.initialVelocity_ = 0;\n    };\n    /**\n     * @param {number} x X.\n     * @param {number} y Y.\n     */\n    Kinetic.prototype.update = function (x, y) {\n        this.points_.push(x, y, Date.now());\n    };\n    /**\n     * @return {boolean} Whether we should do kinetic animation.\n     */\n    Kinetic.prototype.end = function () {\n        if (this.points_.length < 6) {\n            // at least 2 points are required (i.e. there must be at least 6 elements\n            // in the array)\n            return false;\n        }\n        var delay = Date.now() - this.delay_;\n        var lastIndex = this.points_.length - 3;\n        if (this.points_[lastIndex + 2] < delay) {\n            // the last tracked point is too old, which means that the user stopped\n            // panning before releasing the map\n            return false;\n        }\n        // get the first point which still falls into the delay time\n        var firstIndex = lastIndex - 3;\n        while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n            firstIndex -= 3;\n        }\n        var duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n        // we don't want a duration of 0 (divide by zero)\n        // we also make sure the user panned for a duration of at least one frame\n        // (1/60s) to compute sane displacement values\n        if (duration < 1000 / 60) {\n            return false;\n        }\n        var dx = this.points_[lastIndex] - this.points_[firstIndex];\n        var dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n        this.angle_ = Math.atan2(dy, dx);\n        this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n        return this.initialVelocity_ > this.minVelocity_;\n    };\n    /**\n     * @return {number} Total distance travelled (pixels).\n     */\n    Kinetic.prototype.getDistance = function () {\n        return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n    };\n    /**\n     * @return {number} Angle of the kinetic panning animation (radians).\n     */\n    Kinetic.prototype.getAngle = function () {\n        return this.angle_;\n    };\n    return Kinetic;\n}());\nexport default Kinetic;\n//# sourceMappingURL=Kinetic.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/MouseWheelZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, { zoomByDelta } from './Interaction.js';\nimport { DEVICE_PIXEL_RATIO, FIREFOX } from '../has.js';\nimport { all, always, focusWithTabindex } from '../events/condition.js';\nimport { clamp } from '../math.js';\n/**\n * @enum {string}\n */\nexport var Mode = {\n    TRACKPAD: 'trackpad',\n    WHEEL: 'wheel',\n};\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition~always}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {number} [maxDelta=1] Maximum mouse wheel delta.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [timeout=80] Mouse wheel timeout duration in milliseconds.\n * @property {boolean} [useAnchor=true] Enable zooming using the mouse's\n * location as the anchor. When set to `false`, zooming in and out will zoom to\n * the center of the screen instead of zooming on the mouse's location.\n * @property {boolean} [constrainResolution=false] If true, the mouse wheel zoom\n * event will always animate to the closest zoom level after an interaction;\n * false means intermediary zoom levels are allowed.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map by scrolling the mouse wheel.\n * @api\n */\nvar MouseWheelZoom = /** @class */ (function (_super) {\n    __extends(MouseWheelZoom, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function MouseWheelZoom(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        _this = _super.call(this, \n        /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)) || this;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.totalDelta_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.lastDelta_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.maxDelta_ = options.maxDelta !== undefined ? options.maxDelta : 1;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.duration_ = options.duration !== undefined ? options.duration : 250;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.timeout_ = options.timeout !== undefined ? options.timeout : 80;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.useAnchor_ =\n            options.useAnchor !== undefined ? options.useAnchor : true;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.constrainResolution_ =\n            options.constrainResolution !== undefined\n                ? options.constrainResolution\n                : false;\n        var condition = options.condition ? options.condition : always;\n        /**\n         * @private\n         * @type {import(\"../events/condition.js\").Condition}\n         */\n        _this.condition_ = options.onFocusOnly\n            ? all(focusWithTabindex, condition)\n            : condition;\n        /**\n         * @private\n         * @type {?import(\"../coordinate.js\").Coordinate}\n         */\n        _this.lastAnchor_ = null;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.startTime_ = undefined;\n        /**\n         * @private\n         * @type {?}\n         */\n        _this.timeoutId_;\n        /**\n         * @private\n         * @type {Mode|undefined}\n         */\n        _this.mode_ = undefined;\n        /**\n         * Trackpad events separated by this delay will be considered separate\n         * interactions.\n         * @type {number}\n         */\n        _this.trackpadEventGap_ = 400;\n        /**\n         * @type {?}\n         */\n        _this.trackpadTimeoutId_;\n        /**\n         * The number of delta values per zoom level\n         * @private\n         * @type {number}\n         */\n        _this.deltaPerZoom_ = 300;\n        return _this;\n    }\n    /**\n     * @private\n     */\n    MouseWheelZoom.prototype.endInteraction_ = function () {\n        this.trackpadTimeoutId_ = undefined;\n        var view = this.getMap().getView();\n        view.endInteraction(undefined, this.lastDelta_ ? (this.lastDelta_ > 0 ? 1 : -1) : 0, this.lastAnchor_);\n    };\n    /**\n     * Handles the {@link module:ol/MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually\n     * zooms the map.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n     * @return {boolean} `false` to stop event propagation.\n     */\n    MouseWheelZoom.prototype.handleEvent = function (mapBrowserEvent) {\n        if (!this.condition_(mapBrowserEvent)) {\n            return true;\n        }\n        var type = mapBrowserEvent.type;\n        if (type !== EventType.WHEEL) {\n            return true;\n        }\n        var map = mapBrowserEvent.map;\n        var wheelEvent = /** @type {WheelEvent} */ (mapBrowserEvent.originalEvent);\n        wheelEvent.preventDefault();\n        if (this.useAnchor_) {\n            this.lastAnchor_ = mapBrowserEvent.coordinate;\n        }\n        // Delta normalisation inspired by\n        // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js\n        var delta;\n        if (mapBrowserEvent.type == EventType.WHEEL) {\n            delta = wheelEvent.deltaY;\n            if (FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n                delta /= DEVICE_PIXEL_RATIO;\n            }\n            if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n                delta *= 40;\n            }\n        }\n        if (delta === 0) {\n            return false;\n        }\n        else {\n            this.lastDelta_ = delta;\n        }\n        var now = Date.now();\n        if (this.startTime_ === undefined) {\n            this.startTime_ = now;\n        }\n        if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {\n            this.mode_ = Math.abs(delta) < 4 ? Mode.TRACKPAD : Mode.WHEEL;\n        }\n        var view = map.getView();\n        if (this.mode_ === Mode.TRACKPAD &&\n            !(view.getConstrainResolution() || this.constrainResolution_)) {\n            if (this.trackpadTimeoutId_) {\n                clearTimeout(this.trackpadTimeoutId_);\n            }\n            else {\n                if (view.getAnimating()) {\n                    view.cancelAnimations();\n                }\n                view.beginInteraction();\n            }\n            this.trackpadTimeoutId_ = setTimeout(this.endInteraction_.bind(this), this.timeout_);\n            view.adjustZoom(-delta / this.deltaPerZoom_, this.lastAnchor_);\n            this.startTime_ = now;\n            return false;\n        }\n        this.totalDelta_ += delta;\n        var timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);\n        clearTimeout(this.timeoutId_);\n        this.timeoutId_ = setTimeout(this.handleWheelZoom_.bind(this, map), timeLeft);\n        return false;\n    };\n    /**\n     * @private\n     * @param {import(\"../PluggableMap.js\").default} map Map.\n     */\n    MouseWheelZoom.prototype.handleWheelZoom_ = function (map) {\n        var view = map.getView();\n        if (view.getAnimating()) {\n            view.cancelAnimations();\n        }\n        var delta = -clamp(this.totalDelta_, -this.maxDelta_ * this.deltaPerZoom_, this.maxDelta_ * this.deltaPerZoom_) / this.deltaPerZoom_;\n        if (view.getConstrainResolution() || this.constrainResolution_) {\n            // view has a zoom constraint, zoom by 1\n            delta = delta ? (delta > 0 ? 1 : -1) : 0;\n        }\n        zoomByDelta(view, delta, this.lastAnchor_, this.duration_);\n        this.mode_ = undefined;\n        this.totalDelta_ = 0;\n        this.lastAnchor_ = null;\n        this.startTime_ = undefined;\n        this.timeoutId_ = undefined;\n    };\n    /**\n     * Enable or disable using the mouse's location as an anchor when zooming\n     * @param {boolean} useAnchor true to zoom to the mouse's location, false\n     * to zoom to the center of the map\n     * @api\n     */\n    MouseWheelZoom.prototype.setMouseAnchor = function (useAnchor) {\n        this.useAnchor_ = useAnchor;\n        if (!useAnchor) {\n            this.lastAnchor_ = null;\n        }\n    };\n    return MouseWheelZoom;\n}(Interaction));\nexport default MouseWheelZoom;\n//# sourceMappingURL=MouseWheelZoom.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/PinchRotate\n */\nimport PointerInteraction, { centroid as centroidFromPointers, } from './Pointer.js';\nimport { FALSE } from '../functions.js';\nimport { disable } from '../rotationconstraint.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] The duration of the animation in\n * milliseconds.\n * @property {number} [threshold=0.3] Minimal angle in radians to start a rotation.\n */\n/**\n * @classdesc\n * Allows the user to rotate the map by twisting with two fingers\n * on a touch screen.\n * @api\n */\nvar PinchRotate = /** @class */ (function (_super) {\n    __extends(PinchRotate, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function PinchRotate(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        var pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (options);\n        if (!pointerOptions.stopDown) {\n            pointerOptions.stopDown = FALSE;\n        }\n        _this = _super.call(this, pointerOptions) || this;\n        /**\n         * @private\n         * @type {import(\"../coordinate.js\").Coordinate}\n         */\n        _this.anchor_ = null;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.lastAngle_ = undefined;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.rotating_ = false;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.rotationDelta_ = 0.0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.duration_ = options.duration !== undefined ? options.duration : 250;\n        return _this;\n    }\n    /**\n     * Handle pointer drag events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     */\n    PinchRotate.prototype.handleDragEvent = function (mapBrowserEvent) {\n        var rotationDelta = 0.0;\n        var touch0 = this.targetPointers[0];\n        var touch1 = this.targetPointers[1];\n        // angle between touches\n        var angle = Math.atan2(touch1.clientY - touch0.clientY, touch1.clientX - touch0.clientX);\n        if (this.lastAngle_ !== undefined) {\n            var delta = angle - this.lastAngle_;\n            this.rotationDelta_ += delta;\n            if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {\n                this.rotating_ = true;\n            }\n            rotationDelta = delta;\n        }\n        this.lastAngle_ = angle;\n        var map = mapBrowserEvent.map;\n        var view = map.getView();\n        if (view.getConstraints().rotation === disable) {\n            return;\n        }\n        // rotate anchor point.\n        // FIXME: should be the intersection point between the lines:\n        //     touch0,touch1 and previousTouch0,previousTouch1\n        var viewportPosition = map.getViewport().getBoundingClientRect();\n        var centroid = centroidFromPointers(this.targetPointers);\n        centroid[0] -= viewportPosition.left;\n        centroid[1] -= viewportPosition.top;\n        this.anchor_ = map.getCoordinateFromPixelInternal(centroid);\n        // rotate\n        if (this.rotating_) {\n            map.render();\n            view.adjustRotationInternal(rotationDelta, this.anchor_);\n        }\n    };\n    /**\n     * Handle pointer up events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     */\n    PinchRotate.prototype.handleUpEvent = function (mapBrowserEvent) {\n        if (this.targetPointers.length < 2) {\n            var map = mapBrowserEvent.map;\n            var view = map.getView();\n            view.endInteraction(this.duration_);\n            return false;\n        }\n        else {\n            return true;\n        }\n    };\n    /**\n     * Handle pointer down events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     */\n    PinchRotate.prototype.handleDownEvent = function (mapBrowserEvent) {\n        if (this.targetPointers.length >= 2) {\n            var map = mapBrowserEvent.map;\n            this.anchor_ = null;\n            this.lastAngle_ = undefined;\n            this.rotating_ = false;\n            this.rotationDelta_ = 0.0;\n            if (!this.handlingDownUpSequence) {\n                map.getView().beginInteraction();\n            }\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    return PinchRotate;\n}(PointerInteraction));\nexport default PinchRotate;\n//# sourceMappingURL=PinchRotate.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/interaction/PinchZoom\n */\nimport PointerInteraction, { centroid as centroidFromPointers, } from './Pointer.js';\nimport { FALSE } from '../functions.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=400] Animation duration in milliseconds.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map by pinching with two fingers\n * on a touch screen.\n * @api\n */\nvar PinchZoom = /** @class */ (function (_super) {\n    __extends(PinchZoom, _super);\n    /**\n     * @param {Options=} opt_options Options.\n     */\n    function PinchZoom(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        var pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (options);\n        if (!pointerOptions.stopDown) {\n            pointerOptions.stopDown = FALSE;\n        }\n        _this = _super.call(this, pointerOptions) || this;\n        /**\n         * @private\n         * @type {import(\"../coordinate.js\").Coordinate}\n         */\n        _this.anchor_ = null;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.duration_ = options.duration !== undefined ? options.duration : 400;\n        /**\n         * @private\n         * @type {number|undefined}\n         */\n        _this.lastDistance_ = undefined;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.lastScaleDelta_ = 1;\n        return _this;\n    }\n    /**\n     * Handle pointer drag events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     */\n    PinchZoom.prototype.handleDragEvent = function (mapBrowserEvent) {\n        var scaleDelta = 1.0;\n        var touch0 = this.targetPointers[0];\n        var touch1 = this.targetPointers[1];\n        var dx = touch0.clientX - touch1.clientX;\n        var dy = touch0.clientY - touch1.clientY;\n        // distance between touches\n        var distance = Math.sqrt(dx * dx + dy * dy);\n        if (this.lastDistance_ !== undefined) {\n            scaleDelta = this.lastDistance_ / distance;\n        }\n        this.lastDistance_ = distance;\n        var map = mapBrowserEvent.map;\n        var view = map.getView();\n        if (scaleDelta != 1.0) {\n            this.lastScaleDelta_ = scaleDelta;\n        }\n        // scale anchor point.\n        var viewportPosition = map.getViewport().getBoundingClientRect();\n        var centroid = centroidFromPointers(this.targetPointers);\n        centroid[0] -= viewportPosition.left;\n        centroid[1] -= viewportPosition.top;\n        this.anchor_ = map.getCoordinateFromPixelInternal(centroid);\n        // scale, bypass the resolution constraint\n        map.render();\n        view.adjustResolutionInternal(scaleDelta, this.anchor_);\n    };\n    /**\n     * Handle pointer up events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     */\n    PinchZoom.prototype.handleUpEvent = function (mapBrowserEvent) {\n        if (this.targetPointers.length < 2) {\n            var map = mapBrowserEvent.map;\n            var view = map.getView();\n            var direction = this.lastScaleDelta_ > 1 ? 1 : -1;\n            view.endInteraction(this.duration_, direction);\n            return false;\n        }\n        else {\n            return true;\n        }\n    };\n    /**\n     * Handle pointer down events.\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n     * @return {boolean} If the event was consumed.\n     */\n    PinchZoom.prototype.handleDownEvent = function (mapBrowserEvent) {\n        if (this.targetPointers.length >= 2) {\n            var map = mapBrowserEvent.map;\n            this.anchor_ = null;\n            this.lastDistance_ = undefined;\n            this.lastScaleDelta_ = 1;\n            if (!this.handlingDownUpSequence) {\n                map.getView().beginInteraction();\n            }\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    return PinchZoom;\n}(PointerInteraction));\nexport default PinchZoom;\n//# sourceMappingURL=PinchZoom.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/Map\n */\nimport CompositeMapRenderer from './renderer/Composite.js';\nimport PluggableMap from './PluggableMap.js';\nimport { assign } from './obj.js';\nimport { defaults as defaultControls } from './control.js';\nimport { defaults as defaultInteractions } from './interaction.js';\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n *     import Map from 'ol/Map';\n *     import View from 'ol/View';\n *     import TileLayer from 'ol/layer/Tile';\n *     import OSM from 'ol/source/OSM';\n *\n *     var map = new Map({\n *       view: new View({\n *         center: [0, 0],\n *         zoom: 1\n *       }),\n *       layers: [\n *         new TileLayer({\n *           source: new OSM()\n *         })\n *       ],\n *       target: 'map'\n *     });\n *\n * The above snippet creates a map using a {@link module:ol/layer/Tile} to\n * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM\n * element with the id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link module:ol/Overlay~Overlay} for the difference). The map\n * itself is placed in a further element within the viewport.\n *\n * Layers are stored as a {@link module:ol/Collection~Collection} in\n * layerGroups. A top-level group is provided by the library. This is what is\n * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the\n * options are added to this group, and `addLayer` and `removeLayer` change the\n * layer collection in the group. `getLayers` is a convenience function for\n * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~Group}\n * is a subclass of {@link module:ol/layer/Base}, so layers entered in the\n * options or added with `addLayer` can be groups, which can contain further\n * groups, and so on.\n *\n * @api\n */\nvar Map = /** @class */ (function (_super) {\n    __extends(Map, _super);\n    /**\n     * @param {import(\"./PluggableMap.js\").MapOptions} options Map options.\n     */\n    function Map(options) {\n        var _this = this;\n        options = assign({}, options);\n        if (!options.controls) {\n            options.controls = defaultControls();\n        }\n        if (!options.interactions) {\n            options.interactions = defaultInteractions({\n                onFocusOnly: true,\n            });\n        }\n        _this = _super.call(this, options) || this;\n        return _this;\n    }\n    Map.prototype.createRenderer = function () {\n        return new CompositeMapRenderer(this);\n    };\n    return Map;\n}(PluggableMap));\nexport default Map;\n//# sourceMappingURL=Map.js.map","/**\n * @module ol/control\n */\nimport Attribution from './control/Attribution.js';\nimport Collection from './Collection.js';\nimport Rotate from './control/Rotate.js';\nimport Zoom from './control/Zoom.js';\nexport { default as Attribution } from './control/Attribution.js';\nexport { default as Control } from './control/Control.js';\nexport { default as FullScreen } from './control/FullScreen.js';\nexport { default as MousePosition } from './control/MousePosition.js';\nexport { default as OverviewMap } from './control/OverviewMap.js';\nexport { default as Rotate } from './control/Rotate.js';\nexport { default as ScaleLine } from './control/ScaleLine.js';\nexport { default as Zoom } from './control/Zoom.js';\nexport { default as ZoomSlider } from './control/ZoomSlider.js';\nexport { default as ZoomToExtent } from './control/ZoomToExtent.js';\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./control/Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./control/Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./control/Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n * @api\n */\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * * {@link module:ol/control/Zoom~Zoom}\n * * {@link module:ol/control/Rotate~Rotate}\n * * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions=} opt_options\n * Defaults options.\n * @return {Collection<import(\"./control/Control.js\").default>}\n * Controls.\n * @api\n */\nexport function defaults(opt_options) {\n    var options = opt_options ? opt_options : {};\n    var controls = new Collection();\n    var zoomControl = options.zoom !== undefined ? options.zoom : true;\n    if (zoomControl) {\n        controls.push(new Zoom(options.zoomOptions));\n    }\n    var rotateControl = options.rotate !== undefined ? options.rotate : true;\n    if (rotateControl) {\n        controls.push(new Rotate(options.rotateOptions));\n    }\n    var attributionControl = options.attribution !== undefined ? options.attribution : true;\n    if (attributionControl) {\n        controls.push(new Attribution(options.attributionOptions));\n    }\n    return controls;\n}\n//# sourceMappingURL=control.js.map","/**\n * @module ol/interaction\n */\nimport Collection from './Collection.js';\nimport DoubleClickZoom from './interaction/DoubleClickZoom.js';\nimport DragPan from './interaction/DragPan.js';\nimport DragRotate from './interaction/DragRotate.js';\nimport DragZoom from './interaction/DragZoom.js';\nimport KeyboardPan from './interaction/KeyboardPan.js';\nimport KeyboardZoom from './interaction/KeyboardZoom.js';\nimport Kinetic from './Kinetic.js';\nimport MouseWheelZoom from './interaction/MouseWheelZoom.js';\nimport PinchRotate from './interaction/PinchRotate.js';\nimport PinchZoom from './interaction/PinchZoom.js';\nexport { default as DoubleClickZoom } from './interaction/DoubleClickZoom.js';\nexport { default as DragAndDrop } from './interaction/DragAndDrop.js';\nexport { default as DragBox } from './interaction/DragBox.js';\nexport { default as DragPan } from './interaction/DragPan.js';\nexport { default as DragRotate } from './interaction/DragRotate.js';\nexport { default as DragRotateAndZoom } from './interaction/DragRotateAndZoom.js';\nexport { default as DragZoom } from './interaction/DragZoom.js';\nexport { default as Draw } from './interaction/Draw.js';\nexport { default as Extent } from './interaction/Extent.js';\nexport { default as Interaction } from './interaction/Interaction.js';\nexport { default as KeyboardPan } from './interaction/KeyboardPan.js';\nexport { default as KeyboardZoom } from './interaction/KeyboardZoom.js';\nexport { default as Modify } from './interaction/Modify.js';\nexport { default as MouseWheelZoom } from './interaction/MouseWheelZoom.js';\nexport { default as PinchRotate } from './interaction/PinchRotate.js';\nexport { default as PinchZoom } from './interaction/PinchZoom.js';\nexport { default as Pointer } from './interaction/Pointer.js';\nexport { default as Select } from './interaction/Select.js';\nexport { default as Snap } from './interaction/Snap.js';\nexport { default as Translate } from './interaction/Translate.js';\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [altShiftDragRotate=true] Whether Alt-Shift-drag rotate is\n * desired.\n * @property {boolean} [onFocusOnly=false] Interact only when the map has the\n * focus. This affects the `MouseWheelZoom` and `DragPan` interactions and is\n * useful when page scroll is desired for maps that do not have the browser's\n * focus.\n * @property {boolean} [doubleClickZoom=true] Whether double click zoom is\n * desired.\n * @property {boolean} [keyboard=true] Whether keyboard interaction is desired.\n * @property {boolean} [mouseWheelZoom=true] Whether mousewheel zoom is desired.\n * @property {boolean} [shiftDragZoom=true] Whether Shift-drag zoom is desired.\n * @property {boolean} [dragPan=true] Whether drag pan is desired.\n * @property {boolean} [pinchRotate=true] Whether pinch rotate is desired.\n * @property {boolean} [pinchZoom=true] Whether pinch zoom is desired.\n * @property {number} [zoomDelta] Zoom level delta when using keyboard or double click zoom.\n * @property {number} [zoomDuration] Duration of the zoom animation in\n * milliseconds.\n */\n/**\n * Set of interactions included in maps by default. Specific interactions can be\n * excluded by setting the appropriate option to false in the constructor\n * options, but the order of the interactions is fixed.  If you want to specify\n * a different order for interactions, you will need to create your own\n * {@link module:ol/interaction/Interaction} instances and insert\n * them into a {@link module:ol/Collection} in the order you want\n * before creating your {@link module:ol/Map~Map} instance. Changing the order can\n * be of interest if the event propagation needs to be stopped at a point.\n * The default set of interactions, in sequence, is:\n * * {@link module:ol/interaction/DragRotate~DragRotate}\n * * {@link module:ol/interaction/DoubleClickZoom~DoubleClickZoom}\n * * {@link module:ol/interaction/DragPan~DragPan}\n * * {@link module:ol/interaction/PinchRotate~PinchRotate}\n * * {@link module:ol/interaction/PinchZoom~PinchZoom}\n * * {@link module:ol/interaction/KeyboardPan~KeyboardPan}\n * * {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}\n * * {@link module:ol/interaction/MouseWheelZoom~MouseWheelZoom}\n * * {@link module:ol/interaction/DragZoom~DragZoom}\n *\n * @param {DefaultsOptions=} opt_options Defaults options.\n * @return {import(\"./Collection.js\").default<import(\"./interaction/Interaction.js\").default>}\n * A collection of interactions to be used with the {@link module:ol/Map~Map}\n * constructor's `interactions` option.\n * @api\n */\nexport function defaults(opt_options) {\n    var options = opt_options ? opt_options : {};\n    var interactions = new Collection();\n    var kinetic = new Kinetic(-0.005, 0.05, 100);\n    var altShiftDragRotate = options.altShiftDragRotate !== undefined\n        ? options.altShiftDragRotate\n        : true;\n    if (altShiftDragRotate) {\n        interactions.push(new DragRotate());\n    }\n    var doubleClickZoom = options.doubleClickZoom !== undefined ? options.doubleClickZoom : true;\n    if (doubleClickZoom) {\n        interactions.push(new DoubleClickZoom({\n            delta: options.zoomDelta,\n            duration: options.zoomDuration,\n        }));\n    }\n    var dragPan = options.dragPan !== undefined ? options.dragPan : true;\n    if (dragPan) {\n        interactions.push(new DragPan({\n            onFocusOnly: options.onFocusOnly,\n            kinetic: kinetic,\n        }));\n    }\n    var pinchRotate = options.pinchRotate !== undefined ? options.pinchRotate : true;\n    if (pinchRotate) {\n        interactions.push(new PinchRotate());\n    }\n    var pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;\n    if (pinchZoom) {\n        interactions.push(new PinchZoom({\n            duration: options.zoomDuration,\n        }));\n    }\n    var keyboard = options.keyboard !== undefined ? options.keyboard : true;\n    if (keyboard) {\n        interactions.push(new KeyboardPan());\n        interactions.push(new KeyboardZoom({\n            delta: options.zoomDelta,\n            duration: options.zoomDuration,\n        }));\n    }\n    var mouseWheelZoom = options.mouseWheelZoom !== undefined ? options.mouseWheelZoom : true;\n    if (mouseWheelZoom) {\n        interactions.push(new MouseWheelZoom({\n            onFocusOnly: options.onFocusOnly,\n            duration: options.zoomDuration,\n        }));\n    }\n    var shiftDragZoom = options.shiftDragZoom !== undefined ? options.shiftDragZoom : true;\n    if (shiftDragZoom) {\n        interactions.push(new DragZoom({\n            duration: options.zoomDuration,\n        }));\n    }\n    return interactions;\n}\n//# sourceMappingURL=interaction.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isTemplatePartActive } from './template.js';\nconst walkerNodeFilter = 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */;\n/**\n * Removes the list of nodes from a Template safely. In addition to removing\n * nodes from the Template, the Template part indices are updated to match\n * the mutated Template DOM.\n *\n * As the template is walked the removal state is tracked and\n * part indices are adjusted as needed.\n *\n * div\n *   div#1 (remove) <-- start removing (removing node is div#1)\n *     div\n *       div#2 (remove)  <-- continue removing (removing node is still div#1)\n *         div\n * div <-- stop removing since previous sibling is the removing node (div#1,\n * removed 4 nodes)\n */\nexport function removeNodesFromTemplate(template, nodesToRemove) {\n    const { element: { content }, parts } = template;\n    const walker = document.createTreeWalker(content, walkerNodeFilter, null, false);\n    let partIndex = nextActiveIndexInTemplateParts(parts);\n    let part = parts[partIndex];\n    let nodeIndex = -1;\n    let removeCount = 0;\n    const nodesToRemoveInTemplate = [];\n    let currentRemovingNode = null;\n    while (walker.nextNode()) {\n        nodeIndex++;\n        const node = walker.currentNode;\n        // End removal if stepped past the removing node\n        if (node.previousSibling === currentRemovingNode) {\n            currentRemovingNode = null;\n        }\n        // A node to remove was found in the template\n        if (nodesToRemove.has(node)) {\n            nodesToRemoveInTemplate.push(node);\n            // Track node we're removing\n            if (currentRemovingNode === null) {\n                currentRemovingNode = node;\n            }\n        }\n        // When removing, increment count by which to adjust subsequent part indices\n        if (currentRemovingNode !== null) {\n            removeCount++;\n        }\n        while (part !== undefined && part.index === nodeIndex) {\n            // If part is in a removed node deactivate it by setting index to -1 or\n            // adjust the index as needed.\n            part.index = currentRemovingNode !== null ? -1 : part.index - removeCount;\n            // go to the next active part.\n            partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n            part = parts[partIndex];\n        }\n    }\n    nodesToRemoveInTemplate.forEach((n) => n.parentNode.removeChild(n));\n}\nconst countNodes = (node) => {\n    let count = (node.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */) ? 0 : 1;\n    const walker = document.createTreeWalker(node, walkerNodeFilter, null, false);\n    while (walker.nextNode()) {\n        count++;\n    }\n    return count;\n};\nconst nextActiveIndexInTemplateParts = (parts, startIndex = -1) => {\n    for (let i = startIndex + 1; i < parts.length; i++) {\n        const part = parts[i];\n        if (isTemplatePartActive(part)) {\n            return i;\n        }\n    }\n    return -1;\n};\n/**\n * Inserts the given node into the Template, optionally before the given\n * refNode. In addition to inserting the node into the Template, the Template\n * part indices are updated to match the mutated Template DOM.\n */\nexport function insertNodeIntoTemplate(template, node, refNode = null) {\n    const { element: { content }, parts } = template;\n    // If there's no refNode, then put node at end of template.\n    // No part indices need to be shifted in this case.\n    if (refNode === null || refNode === undefined) {\n        content.appendChild(node);\n        return;\n    }\n    const walker = document.createTreeWalker(content, walkerNodeFilter, null, false);\n    let partIndex = nextActiveIndexInTemplateParts(parts);\n    let insertCount = 0;\n    let walkerIndex = -1;\n    while (walker.nextNode()) {\n        walkerIndex++;\n        const walkerNode = walker.currentNode;\n        if (walkerNode === refNode) {\n            insertCount = countNodes(node);\n            refNode.parentNode.insertBefore(node, refNode);\n        }\n        while (partIndex !== -1 && parts[partIndex].index === walkerIndex) {\n            // If we've inserted the node, simply adjust all subsequent parts\n            if (insertCount > 0) {\n                while (partIndex !== -1) {\n                    parts[partIndex].index += insertCount;\n                    partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n                }\n                return;\n            }\n            partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n        }\n    }\n}\n//# sourceMappingURL=modify-template.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * Module to add shady DOM/shady CSS polyfill support to lit-html template\n * rendering. See the [[render]] method for details.\n *\n * @packageDocumentation\n */\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport { removeNodes } from './dom.js';\nimport { insertNodeIntoTemplate, removeNodesFromTemplate } from './modify-template.js';\nimport { parts, render as litRender } from './render.js';\nimport { templateCaches } from './template-factory.js';\nimport { TemplateInstance } from './template-instance.js';\nimport { marker, Template } from './template.js';\nexport { html, svg, TemplateResult } from '../lit-html.js';\n// Get a key to lookup in `templateCaches`.\nconst getTemplateCacheKey = (type, scopeName) => `${type}--${scopeName}`;\nlet compatibleShadyCSSVersion = true;\nif (typeof window.ShadyCSS === 'undefined') {\n    compatibleShadyCSSVersion = false;\n}\nelse if (typeof window.ShadyCSS.prepareTemplateDom === 'undefined') {\n    console.warn(`Incompatible ShadyCSS version detected. ` +\n        `Please update to at least @webcomponents/webcomponentsjs@2.0.2 and ` +\n        `@webcomponents/shadycss@1.3.1.`);\n    compatibleShadyCSSVersion = false;\n}\n/**\n * Template factory which scopes template DOM using ShadyCSS.\n * @param scopeName {string}\n */\nexport const shadyTemplateFactory = (scopeName) => (result) => {\n    const cacheKey = getTemplateCacheKey(result.type, scopeName);\n    let templateCache = templateCaches.get(cacheKey);\n    if (templateCache === undefined) {\n        templateCache = {\n            stringsArray: new WeakMap(),\n            keyString: new Map()\n        };\n        templateCaches.set(cacheKey, templateCache);\n    }\n    let template = templateCache.stringsArray.get(result.strings);\n    if (template !== undefined) {\n        return template;\n    }\n    const key = result.strings.join(marker);\n    template = templateCache.keyString.get(key);\n    if (template === undefined) {\n        const element = result.getTemplateElement();\n        if (compatibleShadyCSSVersion) {\n            window.ShadyCSS.prepareTemplateDom(element, scopeName);\n        }\n        template = new Template(result, element);\n        templateCache.keyString.set(key, template);\n    }\n    templateCache.stringsArray.set(result.strings, template);\n    return template;\n};\nconst TEMPLATE_TYPES = ['html', 'svg'];\n/**\n * Removes all style elements from Templates for the given scopeName.\n */\nconst removeStylesFromLitTemplates = (scopeName) => {\n    TEMPLATE_TYPES.forEach((type) => {\n        const templates = templateCaches.get(getTemplateCacheKey(type, scopeName));\n        if (templates !== undefined) {\n            templates.keyString.forEach((template) => {\n                const { element: { content } } = template;\n                // IE 11 doesn't support the iterable param Set constructor\n                const styles = new Set();\n                Array.from(content.querySelectorAll('style')).forEach((s) => {\n                    styles.add(s);\n                });\n                removeNodesFromTemplate(template, styles);\n            });\n        }\n    });\n};\nconst shadyRenderSet = new Set();\n/**\n * For the given scope name, ensures that ShadyCSS style scoping is performed.\n * This is done just once per scope name so the fragment and template cannot\n * be modified.\n * (1) extracts styles from the rendered fragment and hands them to ShadyCSS\n * to be scoped and appended to the document\n * (2) removes style elements from all lit-html Templates for this scope name.\n *\n * Note, <style> elements can only be placed into templates for the\n * initial rendering of the scope. If <style> elements are included in templates\n * dynamically rendered to the scope (after the first scope render), they will\n * not be scoped and the <style> will be left in the template and rendered\n * output.\n */\nconst prepareTemplateStyles = (scopeName, renderedDOM, template) => {\n    shadyRenderSet.add(scopeName);\n    // If `renderedDOM` is stamped from a Template, then we need to edit that\n    // Template's underlying template element. Otherwise, we create one here\n    // to give to ShadyCSS, which still requires one while scoping.\n    const templateElement = !!template ? template.element : document.createElement('template');\n    // Move styles out of rendered DOM and store.\n    const styles = renderedDOM.querySelectorAll('style');\n    const { length } = styles;\n    // If there are no styles, skip unnecessary work\n    if (length === 0) {\n        // Ensure prepareTemplateStyles is called to support adding\n        // styles via `prepareAdoptedCssText` since that requires that\n        // `prepareTemplateStyles` is called.\n        //\n        // ShadyCSS will only update styles containing @apply in the template\n        // given to `prepareTemplateStyles`. If no lit Template was given,\n        // ShadyCSS will not be able to update uses of @apply in any relevant\n        // template. However, this is not a problem because we only create the\n        // template for the purpose of supporting `prepareAdoptedCssText`,\n        // which doesn't support @apply at all.\n        window.ShadyCSS.prepareTemplateStyles(templateElement, scopeName);\n        return;\n    }\n    const condensedStyle = document.createElement('style');\n    // Collect styles into a single style. This helps us make sure ShadyCSS\n    // manipulations will not prevent us from being able to fix up template\n    // part indices.\n    // NOTE: collecting styles is inefficient for browsers but ShadyCSS\n    // currently does this anyway. When it does not, this should be changed.\n    for (let i = 0; i < length; i++) {\n        const style = styles[i];\n        style.parentNode.removeChild(style);\n        condensedStyle.textContent += style.textContent;\n    }\n    // Remove styles from nested templates in this scope.\n    removeStylesFromLitTemplates(scopeName);\n    // And then put the condensed style into the \"root\" template passed in as\n    // `template`.\n    const content = templateElement.content;\n    if (!!template) {\n        insertNodeIntoTemplate(template, condensedStyle, content.firstChild);\n    }\n    else {\n        content.insertBefore(condensedStyle, content.firstChild);\n    }\n    // Note, it's important that ShadyCSS gets the template that `lit-html`\n    // will actually render so that it can update the style inside when\n    // needed (e.g. @apply native Shadow DOM case).\n    window.ShadyCSS.prepareTemplateStyles(templateElement, scopeName);\n    const style = content.querySelector('style');\n    if (window.ShadyCSS.nativeShadow && style !== null) {\n        // When in native Shadow DOM, ensure the style created by ShadyCSS is\n        // included in initially rendered output (`renderedDOM`).\n        renderedDOM.insertBefore(style.cloneNode(true), renderedDOM.firstChild);\n    }\n    else if (!!template) {\n        // When no style is left in the template, parts will be broken as a\n        // result. To fix this, we put back the style node ShadyCSS removed\n        // and then tell lit to remove that node from the template.\n        // There can be no style in the template in 2 cases (1) when Shady DOM\n        // is in use, ShadyCSS removes all styles, (2) when native Shadow DOM\n        // is in use ShadyCSS removes the style if it contains no content.\n        // NOTE, ShadyCSS creates its own style so we can safely add/remove\n        // `condensedStyle` here.\n        content.insertBefore(condensedStyle, content.firstChild);\n        const removes = new Set();\n        removes.add(condensedStyle);\n        removeNodesFromTemplate(template, removes);\n    }\n};\n/**\n * Extension to the standard `render` method which supports rendering\n * to ShadowRoots when the ShadyDOM (https://github.com/webcomponents/shadydom)\n * and ShadyCSS (https://github.com/webcomponents/shadycss) polyfills are used\n * or when the webcomponentsjs\n * (https://github.com/webcomponents/webcomponentsjs) polyfill is used.\n *\n * Adds a `scopeName` option which is used to scope element DOM and stylesheets\n * when native ShadowDOM is unavailable. The `scopeName` will be added to\n * the class attribute of all rendered DOM. In addition, any style elements will\n * be automatically re-written with this `scopeName` selector and moved out\n * of the rendered DOM and into the document `<head>`.\n *\n * It is common to use this render method in conjunction with a custom element\n * which renders a shadowRoot. When this is done, typically the element's\n * `localName` should be used as the `scopeName`.\n *\n * In addition to DOM scoping, ShadyCSS also supports a basic shim for css\n * custom properties (needed only on older browsers like IE11) and a shim for\n * a deprecated feature called `@apply` that supports applying a set of css\n * custom properties to a given location.\n *\n * Usage considerations:\n *\n * * Part values in `<style>` elements are only applied the first time a given\n * `scopeName` renders. Subsequent changes to parts in style elements will have\n * no effect. Because of this, parts in style elements should only be used for\n * values that will never change, for example parts that set scope-wide theme\n * values or parts which render shared style elements.\n *\n * * Note, due to a limitation of the ShadyDOM polyfill, rendering in a\n * custom element's `constructor` is not supported. Instead rendering should\n * either done asynchronously, for example at microtask timing (for example\n * `Promise.resolve()`), or be deferred until the first time the element's\n * `connectedCallback` runs.\n *\n * Usage considerations when using shimmed custom properties or `@apply`:\n *\n * * Whenever any dynamic changes are made which affect\n * css custom properties, `ShadyCSS.styleElement(element)` must be called\n * to update the element. There are two cases when this is needed:\n * (1) the element is connected to a new parent, (2) a class is added to the\n * element that causes it to match different custom properties.\n * To address the first case when rendering a custom element, `styleElement`\n * should be called in the element's `connectedCallback`.\n *\n * * Shimmed custom properties may only be defined either for an entire\n * shadowRoot (for example, in a `:host` rule) or via a rule that directly\n * matches an element with a shadowRoot. In other words, instead of flowing from\n * parent to child as do native css custom properties, shimmed custom properties\n * flow only from shadowRoots to nested shadowRoots.\n *\n * * When using `@apply` mixing css shorthand property names with\n * non-shorthand names (for example `border` and `border-width`) is not\n * supported.\n */\nexport const render = (result, container, options) => {\n    if (!options || typeof options !== 'object' || !options.scopeName) {\n        throw new Error('The `scopeName` option is required.');\n    }\n    const scopeName = options.scopeName;\n    const hasRendered = parts.has(container);\n    const needsScoping = compatibleShadyCSSVersion &&\n        container.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */ &&\n        !!container.host;\n    // Handle first render to a scope specially...\n    const firstScopeRender = needsScoping && !shadyRenderSet.has(scopeName);\n    // On first scope render, render into a fragment; this cannot be a single\n    // fragment that is reused since nested renders can occur synchronously.\n    const renderContainer = firstScopeRender ? document.createDocumentFragment() : container;\n    litRender(result, renderContainer, Object.assign({ templateFactory: shadyTemplateFactory(scopeName) }, options));\n    // When performing first scope render,\n    // (1) We've rendered into a fragment so that there's a chance to\n    // `prepareTemplateStyles` before sub-elements hit the DOM\n    // (which might cause them to render based on a common pattern of\n    // rendering in a custom element's `connectedCallback`);\n    // (2) Scope the template with ShadyCSS one time only for this scope.\n    // (3) Render the fragment into the container and make sure the\n    // container knows its `part` is the one we just rendered. This ensures\n    // DOM will be re-used on subsequent renders.\n    if (firstScopeRender) {\n        const part = parts.get(renderContainer);\n        parts.delete(renderContainer);\n        // ShadyCSS might have style sheets (e.g. from `prepareAdoptedCssText`)\n        // that should apply to `renderContainer` even if the rendered value is\n        // not a TemplateInstance. However, it will only insert scoped styles\n        // into the document if `prepareTemplateStyles` has already been called\n        // for the given scope name.\n        const template = part.value instanceof TemplateInstance ?\n            part.value.template :\n            undefined;\n        prepareTemplateStyles(scopeName, renderContainer, template);\n        removeNodes(container, container.firstChild);\n        container.appendChild(renderContainer);\n        parts.set(container, part);\n    }\n    // After elements have hit the DOM, update styling if this is the\n    // initial render to this container.\n    // This is needed whenever dynamic changes are made so it would be\n    // safest to do every render; however, this would regress performance\n    // so we leave it up to the user to call `ShadyCSS.styleElement`\n    // for dynamic changes.\n    if (!hasRendered && needsScoping) {\n        window.ShadyCSS.styleElement(container.host);\n    }\n};\n//# sourceMappingURL=shady-render.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nvar _a;\n/**\n * Use this module if you want to create your own base class extending\n * [[UpdatingElement]].\n * @packageDocumentation\n */\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\nwindow.JSCompiler_renameProperty =\n    (prop, _obj) => prop;\nexport const defaultConverter = {\n    toAttribute(value, type) {\n        switch (type) {\n            case Boolean:\n                return value ? '' : null;\n            case Object:\n            case Array:\n                // if the value is `null` or `undefined` pass this through\n                // to allow removing/no change behavior.\n                return value == null ? value : JSON.stringify(value);\n        }\n        return value;\n    },\n    fromAttribute(value, type) {\n        switch (type) {\n            case Boolean:\n                return value !== null;\n            case Number:\n                return value === null ? null : Number(value);\n            case Object:\n            case Array:\n                return JSON.parse(value);\n        }\n        return value;\n    }\n};\n/**\n * Change function that returns true if `value` is different from `oldValue`.\n * This method is used as the default for a property's `hasChanged` function.\n */\nexport const notEqual = (value, old) => {\n    // This ensures (old==NaN, value==NaN) always returns false\n    return old !== value && (old === old || value === value);\n};\nconst defaultPropertyDeclaration = {\n    attribute: true,\n    type: String,\n    converter: defaultConverter,\n    reflect: false,\n    hasChanged: notEqual\n};\nconst STATE_HAS_UPDATED = 1;\nconst STATE_UPDATE_REQUESTED = 1 << 2;\nconst STATE_IS_REFLECTING_TO_ATTRIBUTE = 1 << 3;\nconst STATE_IS_REFLECTING_TO_PROPERTY = 1 << 4;\n/**\n * The Closure JS Compiler doesn't currently have good support for static\n * property semantics where \"this\" is dynamic (e.g.\n * https://github.com/google/closure-compiler/issues/3177 and others) so we use\n * this hack to bypass any rewriting by the compiler.\n */\nconst finalized = 'finalized';\n/**\n * Base element class which manages element properties and attributes. When\n * properties change, the `update` method is asynchronously called. This method\n * should be supplied by subclassers to render updates as desired.\n * @noInheritDoc\n */\nexport class UpdatingElement extends HTMLElement {\n    constructor() {\n        super();\n        this.initialize();\n    }\n    /**\n     * Returns a list of attributes corresponding to the registered properties.\n     * @nocollapse\n     */\n    static get observedAttributes() {\n        // note: piggy backing on this to ensure we're finalized.\n        this.finalize();\n        const attributes = [];\n        // Use forEach so this works even if for/of loops are compiled to for loops\n        // expecting arrays\n        this._classProperties.forEach((v, p) => {\n            const attr = this._attributeNameForProperty(p, v);\n            if (attr !== undefined) {\n                this._attributeToPropertyMap.set(attr, p);\n                attributes.push(attr);\n            }\n        });\n        return attributes;\n    }\n    /**\n     * Ensures the private `_classProperties` property metadata is created.\n     * In addition to `finalize` this is also called in `createProperty` to\n     * ensure the `@property` decorator can add property metadata.\n     */\n    /** @nocollapse */\n    static _ensureClassProperties() {\n        // ensure private storage for property declarations.\n        if (!this.hasOwnProperty(JSCompiler_renameProperty('_classProperties', this))) {\n            this._classProperties = new Map();\n            // NOTE: Workaround IE11 not supporting Map constructor argument.\n            const superProperties = Object.getPrototypeOf(this)._classProperties;\n            if (superProperties !== undefined) {\n                superProperties.forEach((v, k) => this._classProperties.set(k, v));\n            }\n        }\n    }\n    /**\n     * Creates a property accessor on the element prototype if one does not exist\n     * and stores a PropertyDeclaration for the property with the given options.\n     * The property setter calls the property's `hasChanged` property option\n     * or uses a strict identity check to determine whether or not to request\n     * an update.\n     *\n     * This method may be overridden to customize properties; however,\n     * when doing so, it's important to call `super.createProperty` to ensure\n     * the property is setup correctly. This method calls\n     * `getPropertyDescriptor` internally to get a descriptor to install.\n     * To customize what properties do when they are get or set, override\n     * `getPropertyDescriptor`. To customize the options for a property,\n     * implement `createProperty` like this:\n     *\n     * static createProperty(name, options) {\n     *   options = Object.assign(options, {myOption: true});\n     *   super.createProperty(name, options);\n     * }\n     *\n     * @nocollapse\n     */\n    static createProperty(name, options = defaultPropertyDeclaration) {\n        // Note, since this can be called by the `@property` decorator which\n        // is called before `finalize`, we ensure storage exists for property\n        // metadata.\n        this._ensureClassProperties();\n        this._classProperties.set(name, options);\n        // Do not generate an accessor if the prototype already has one, since\n        // it would be lost otherwise and that would never be the user's intention;\n        // Instead, we expect users to call `requestUpdate` themselves from\n        // user-defined accessors. Note that if the super has an accessor we will\n        // still overwrite it\n        if (options.noAccessor || this.prototype.hasOwnProperty(name)) {\n            return;\n        }\n        const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n        const descriptor = this.getPropertyDescriptor(name, key, options);\n        if (descriptor !== undefined) {\n            Object.defineProperty(this.prototype, name, descriptor);\n        }\n    }\n    /**\n     * Returns a property descriptor to be defined on the given named property.\n     * If no descriptor is returned, the property will not become an accessor.\n     * For example,\n     *\n     *   class MyElement extends LitElement {\n     *     static getPropertyDescriptor(name, key, options) {\n     *       const defaultDescriptor =\n     *           super.getPropertyDescriptor(name, key, options);\n     *       const setter = defaultDescriptor.set;\n     *       return {\n     *         get: defaultDescriptor.get,\n     *         set(value) {\n     *           setter.call(this, value);\n     *           // custom action.\n     *         },\n     *         configurable: true,\n     *         enumerable: true\n     *       }\n     *     }\n     *   }\n     *\n     * @nocollapse\n     */\n    static getPropertyDescriptor(name, key, options) {\n        return {\n            // tslint:disable-next-line:no-any no symbol in index\n            get() {\n                return this[key];\n            },\n            set(value) {\n                const oldValue = this[name];\n                this[key] = value;\n                this\n                    .requestUpdateInternal(name, oldValue, options);\n            },\n            configurable: true,\n            enumerable: true\n        };\n    }\n    /**\n     * Returns the property options associated with the given property.\n     * These options are defined with a PropertyDeclaration via the `properties`\n     * object or the `@property` decorator and are registered in\n     * `createProperty(...)`.\n     *\n     * Note, this method should be considered \"final\" and not overridden. To\n     * customize the options for a given property, override `createProperty`.\n     *\n     * @nocollapse\n     * @final\n     */\n    static getPropertyOptions(name) {\n        return this._classProperties && this._classProperties.get(name) ||\n            defaultPropertyDeclaration;\n    }\n    /**\n     * Creates property accessors for registered properties and ensures\n     * any superclasses are also finalized.\n     * @nocollapse\n     */\n    static finalize() {\n        // finalize any superclasses\n        const superCtor = Object.getPrototypeOf(this);\n        if (!superCtor.hasOwnProperty(finalized)) {\n            superCtor.finalize();\n        }\n        this[finalized] = true;\n        this._ensureClassProperties();\n        // initialize Map populated in observedAttributes\n        this._attributeToPropertyMap = new Map();\n        // make any properties\n        // Note, only process \"own\" properties since this element will inherit\n        // any properties defined on the superClass, and finalization ensures\n        // the entire prototype chain is finalized.\n        if (this.hasOwnProperty(JSCompiler_renameProperty('properties', this))) {\n            const props = this.properties;\n            // support symbols in properties (IE11 does not support this)\n            const propKeys = [\n                ...Object.getOwnPropertyNames(props),\n                ...(typeof Object.getOwnPropertySymbols === 'function') ?\n                    Object.getOwnPropertySymbols(props) :\n                    []\n            ];\n            // This for/of is ok because propKeys is an array\n            for (const p of propKeys) {\n                // note, use of `any` is due to TypeSript lack of support for symbol in\n                // index types\n                // tslint:disable-next-line:no-any no symbol in index\n                this.createProperty(p, props[p]);\n            }\n        }\n    }\n    /**\n     * Returns the property name for the given attribute `name`.\n     * @nocollapse\n     */\n    static _attributeNameForProperty(name, options) {\n        const attribute = options.attribute;\n        return attribute === false ?\n            undefined :\n            (typeof attribute === 'string' ?\n                attribute :\n                (typeof name === 'string' ? name.toLowerCase() : undefined));\n    }\n    /**\n     * Returns true if a property should request an update.\n     * Called when a property value is set and uses the `hasChanged`\n     * option for the property if present or a strict identity check.\n     * @nocollapse\n     */\n    static _valueHasChanged(value, old, hasChanged = notEqual) {\n        return hasChanged(value, old);\n    }\n    /**\n     * Returns the property value for the given attribute value.\n     * Called via the `attributeChangedCallback` and uses the property's\n     * `converter` or `converter.fromAttribute` property option.\n     * @nocollapse\n     */\n    static _propertyValueFromAttribute(value, options) {\n        const type = options.type;\n        const converter = options.converter || defaultConverter;\n        const fromAttribute = (typeof converter === 'function' ? converter : converter.fromAttribute);\n        return fromAttribute ? fromAttribute(value, type) : value;\n    }\n    /**\n     * Returns the attribute value for the given property value. If this\n     * returns undefined, the property will *not* be reflected to an attribute.\n     * If this returns null, the attribute will be removed, otherwise the\n     * attribute will be set to the value.\n     * This uses the property's `reflect` and `type.toAttribute` property options.\n     * @nocollapse\n     */\n    static _propertyValueToAttribute(value, options) {\n        if (options.reflect === undefined) {\n            return;\n        }\n        const type = options.type;\n        const converter = options.converter;\n        const toAttribute = converter && converter.toAttribute ||\n            defaultConverter.toAttribute;\n        return toAttribute(value, type);\n    }\n    /**\n     * Performs element initialization. By default captures any pre-set values for\n     * registered properties.\n     */\n    initialize() {\n        this._updateState = 0;\n        this._updatePromise =\n            new Promise((res) => this._enableUpdatingResolver = res);\n        this._changedProperties = new Map();\n        this._saveInstanceProperties();\n        // ensures first update will be caught by an early access of\n        // `updateComplete`\n        this.requestUpdateInternal();\n    }\n    /**\n     * Fixes any properties set on the instance before upgrade time.\n     * Otherwise these would shadow the accessor and break these properties.\n     * The properties are stored in a Map which is played back after the\n     * constructor runs. Note, on very old versions of Safari (<=9) or Chrome\n     * (<=41), properties created for native platform properties like (`id` or\n     * `name`) may not have default values set in the element constructor. On\n     * these browsers native properties appear on instances and therefore their\n     * default value will overwrite any element default (e.g. if the element sets\n     * this.id = 'id' in the constructor, the 'id' will become '' since this is\n     * the native platform default).\n     */\n    _saveInstanceProperties() {\n        // Use forEach so this works even if for/of loops are compiled to for loops\n        // expecting arrays\n        this.constructor\n            ._classProperties.forEach((_v, p) => {\n            if (this.hasOwnProperty(p)) {\n                const value = this[p];\n                delete this[p];\n                if (!this._instanceProperties) {\n                    this._instanceProperties = new Map();\n                }\n                this._instanceProperties.set(p, value);\n            }\n        });\n    }\n    /**\n     * Applies previously saved instance properties.\n     */\n    _applyInstanceProperties() {\n        // Use forEach so this works even if for/of loops are compiled to for loops\n        // expecting arrays\n        // tslint:disable-next-line:no-any\n        this._instanceProperties.forEach((v, p) => this[p] = v);\n        this._instanceProperties = undefined;\n    }\n    connectedCallback() {\n        // Ensure first connection completes an update. Updates cannot complete\n        // before connection.\n        this.enableUpdating();\n    }\n    enableUpdating() {\n        if (this._enableUpdatingResolver !== undefined) {\n            this._enableUpdatingResolver();\n            this._enableUpdatingResolver = undefined;\n        }\n    }\n    /**\n     * Allows for `super.disconnectedCallback()` in extensions while\n     * reserving the possibility of making non-breaking feature additions\n     * when disconnecting at some point in the future.\n     */\n    disconnectedCallback() {\n    }\n    /**\n     * Synchronizes property values when attributes change.\n     */\n    attributeChangedCallback(name, old, value) {\n        if (old !== value) {\n            this._attributeToProperty(name, value);\n        }\n    }\n    _propertyToAttribute(name, value, options = defaultPropertyDeclaration) {\n        const ctor = this.constructor;\n        const attr = ctor._attributeNameForProperty(name, options);\n        if (attr !== undefined) {\n            const attrValue = ctor._propertyValueToAttribute(value, options);\n            // an undefined value does not change the attribute.\n            if (attrValue === undefined) {\n                return;\n            }\n            // Track if the property is being reflected to avoid\n            // setting the property again via `attributeChangedCallback`. Note:\n            // 1. this takes advantage of the fact that the callback is synchronous.\n            // 2. will behave incorrectly if multiple attributes are in the reaction\n            // stack at time of calling. However, since we process attributes\n            // in `update` this should not be possible (or an extreme corner case\n            // that we'd like to discover).\n            // mark state reflecting\n            this._updateState = this._updateState | STATE_IS_REFLECTING_TO_ATTRIBUTE;\n            if (attrValue == null) {\n                this.removeAttribute(attr);\n            }\n            else {\n                this.setAttribute(attr, attrValue);\n            }\n            // mark state not reflecting\n            this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_ATTRIBUTE;\n        }\n    }\n    _attributeToProperty(name, value) {\n        // Use tracking info to avoid deserializing attribute value if it was\n        // just set from a property setter.\n        if (this._updateState & STATE_IS_REFLECTING_TO_ATTRIBUTE) {\n            return;\n        }\n        const ctor = this.constructor;\n        // Note, hint this as an `AttributeMap` so closure clearly understands\n        // the type; it has issues with tracking types through statics\n        // tslint:disable-next-line:no-unnecessary-type-assertion\n        const propName = ctor._attributeToPropertyMap.get(name);\n        if (propName !== undefined) {\n            const options = ctor.getPropertyOptions(propName);\n            // mark state reflecting\n            this._updateState = this._updateState | STATE_IS_REFLECTING_TO_PROPERTY;\n            this[propName] =\n                // tslint:disable-next-line:no-any\n                ctor._propertyValueFromAttribute(value, options);\n            // mark state not reflecting\n            this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_PROPERTY;\n        }\n    }\n    /**\n     * This protected version of `requestUpdate` does not access or return the\n     * `updateComplete` promise. This promise can be overridden and is therefore\n     * not free to access.\n     */\n    requestUpdateInternal(name, oldValue, options) {\n        let shouldRequestUpdate = true;\n        // If we have a property key, perform property update steps.\n        if (name !== undefined) {\n            const ctor = this.constructor;\n            options = options || ctor.getPropertyOptions(name);\n            if (ctor._valueHasChanged(this[name], oldValue, options.hasChanged)) {\n                if (!this._changedProperties.has(name)) {\n                    this._changedProperties.set(name, oldValue);\n                }\n                // Add to reflecting properties set.\n                // Note, it's important that every change has a chance to add the\n                // property to `_reflectingProperties`. This ensures setting\n                // attribute + property reflects correctly.\n                if (options.reflect === true &&\n                    !(this._updateState & STATE_IS_REFLECTING_TO_PROPERTY)) {\n                    if (this._reflectingProperties === undefined) {\n                        this._reflectingProperties = new Map();\n                    }\n                    this._reflectingProperties.set(name, options);\n                }\n            }\n            else {\n                // Abort the request if the property should not be considered changed.\n                shouldRequestUpdate = false;\n            }\n        }\n        if (!this._hasRequestedUpdate && shouldRequestUpdate) {\n            this._updatePromise = this._enqueueUpdate();\n        }\n    }\n    /**\n     * Requests an update which is processed asynchronously. This should\n     * be called when an element should update based on some state not triggered\n     * by setting a property. In this case, pass no arguments. It should also be\n     * called when manually implementing a property setter. In this case, pass the\n     * property `name` and `oldValue` to ensure that any configured property\n     * options are honored. Returns the `updateComplete` Promise which is resolved\n     * when the update completes.\n     *\n     * @param name {PropertyKey} (optional) name of requesting property\n     * @param oldValue {any} (optional) old value of requesting property\n     * @returns {Promise} A Promise that is resolved when the update completes.\n     */\n    requestUpdate(name, oldValue) {\n        this.requestUpdateInternal(name, oldValue);\n        return this.updateComplete;\n    }\n    /**\n     * Sets up the element to asynchronously update.\n     */\n    async _enqueueUpdate() {\n        this._updateState = this._updateState | STATE_UPDATE_REQUESTED;\n        try {\n            // Ensure any previous update has resolved before updating.\n            // This `await` also ensures that property changes are batched.\n            await this._updatePromise;\n        }\n        catch (e) {\n            // Ignore any previous errors. We only care that the previous cycle is\n            // done. Any error should have been handled in the previous update.\n        }\n        const result = this.performUpdate();\n        // If `performUpdate` returns a Promise, we await it. This is done to\n        // enable coordinating updates with a scheduler. Note, the result is\n        // checked to avoid delaying an additional microtask unless we need to.\n        if (result != null) {\n            await result;\n        }\n        return !this._hasRequestedUpdate;\n    }\n    get _hasRequestedUpdate() {\n        return (this._updateState & STATE_UPDATE_REQUESTED);\n    }\n    get hasUpdated() {\n        return (this._updateState & STATE_HAS_UPDATED);\n    }\n    /**\n     * Performs an element update. Note, if an exception is thrown during the\n     * update, `firstUpdated` and `updated` will not be called.\n     *\n     * You can override this method to change the timing of updates. If this\n     * method is overridden, `super.performUpdate()` must be called.\n     *\n     * For instance, to schedule updates to occur just before the next frame:\n     *\n     * ```\n     * protected async performUpdate(): Promise<unknown> {\n     *   await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n     *   super.performUpdate();\n     * }\n     * ```\n     */\n    performUpdate() {\n        // Abort any update if one is not pending when this is called.\n        // This can happen if `performUpdate` is called early to \"flush\"\n        // the update.\n        if (!this._hasRequestedUpdate) {\n            return;\n        }\n        // Mixin instance properties once, if they exist.\n        if (this._instanceProperties) {\n            this._applyInstanceProperties();\n        }\n        let shouldUpdate = false;\n        const changedProperties = this._changedProperties;\n        try {\n            shouldUpdate = this.shouldUpdate(changedProperties);\n            if (shouldUpdate) {\n                this.update(changedProperties);\n            }\n            else {\n                this._markUpdated();\n            }\n        }\n        catch (e) {\n            // Prevent `firstUpdated` and `updated` from running when there's an\n            // update exception.\n            shouldUpdate = false;\n            // Ensure element can accept additional updates after an exception.\n            this._markUpdated();\n            throw e;\n        }\n        if (shouldUpdate) {\n            if (!(this._updateState & STATE_HAS_UPDATED)) {\n                this._updateState = this._updateState | STATE_HAS_UPDATED;\n                this.firstUpdated(changedProperties);\n            }\n            this.updated(changedProperties);\n        }\n    }\n    _markUpdated() {\n        this._changedProperties = new Map();\n        this._updateState = this._updateState & ~STATE_UPDATE_REQUESTED;\n    }\n    /**\n     * Returns a Promise that resolves when the element has completed updating.\n     * The Promise value is a boolean that is `true` if the element completed the\n     * update without triggering another update. The Promise result is `false` if\n     * a property was set inside `updated()`. If the Promise is rejected, an\n     * exception was thrown during the update.\n     *\n     * To await additional asynchronous work, override the `_getUpdateComplete`\n     * method. For example, it is sometimes useful to await a rendered element\n     * before fulfilling this Promise. To do this, first await\n     * `super._getUpdateComplete()`, then any subsequent state.\n     *\n     * @returns {Promise} The Promise returns a boolean that indicates if the\n     * update resolved without triggering another update.\n     */\n    get updateComplete() {\n        return this._getUpdateComplete();\n    }\n    /**\n     * Override point for the `updateComplete` promise.\n     *\n     * It is not safe to override the `updateComplete` getter directly due to a\n     * limitation in TypeScript which means it is not possible to call a\n     * superclass getter (e.g. `super.updateComplete.then(...)`) when the target\n     * language is ES5 (https://github.com/microsoft/TypeScript/issues/338).\n     * This method should be overridden instead. For example:\n     *\n     *   class MyElement extends LitElement {\n     *     async _getUpdateComplete() {\n     *       await super._getUpdateComplete();\n     *       await this._myChild.updateComplete;\n     *     }\n     *   }\n     */\n    _getUpdateComplete() {\n        return this._updatePromise;\n    }\n    /**\n     * Controls whether or not `update` should be called when the element requests\n     * an update. By default, this method always returns `true`, but this can be\n     * customized to control when to update.\n     *\n     * @param _changedProperties Map of changed properties with old values\n     */\n    shouldUpdate(_changedProperties) {\n        return true;\n    }\n    /**\n     * Updates the element. This method reflects property values to attributes.\n     * It can be overridden to render and keep updated element DOM.\n     * Setting properties inside this method will *not* trigger\n     * another update.\n     *\n     * @param _changedProperties Map of changed properties with old values\n     */\n    update(_changedProperties) {\n        if (this._reflectingProperties !== undefined &&\n            this._reflectingProperties.size > 0) {\n            // Use forEach so this works even if for/of loops are compiled to for\n            // loops expecting arrays\n            this._reflectingProperties.forEach((v, k) => this._propertyToAttribute(k, this[k], v));\n            this._reflectingProperties = undefined;\n        }\n        this._markUpdated();\n    }\n    /**\n     * Invoked whenever the element is updated. Implement to perform\n     * post-updating tasks via DOM APIs, for example, focusing an element.\n     *\n     * Setting properties inside this method will trigger the element to update\n     * again after this update cycle completes.\n     *\n     * @param _changedProperties Map of changed properties with old values\n     */\n    updated(_changedProperties) {\n    }\n    /**\n     * Invoked when the element is first updated. Implement to perform one time\n     * work on the element after update.\n     *\n     * Setting properties inside this method will trigger the element to update\n     * again after this update cycle completes.\n     *\n     * @param _changedProperties Map of changed properties with old values\n     */\n    firstUpdated(_changedProperties) {\n    }\n}\n_a = finalized;\n/**\n * Marks class as having finished creating properties.\n */\nUpdatingElement[_a] = true;\n//# sourceMappingURL=updating-element.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst legacyCustomElement = (tagName, clazz) => {\n    window.customElements.define(tagName, clazz);\n    // Cast as any because TS doesn't recognize the return type as being a\n    // subtype of the decorated class when clazz is typed as\n    // `Constructor<HTMLElement>` for some reason.\n    // `Constructor<HTMLElement>` is helpful to make sure the decorator is\n    // applied to elements however.\n    // tslint:disable-next-line:no-any\n    return clazz;\n};\nconst standardCustomElement = (tagName, descriptor) => {\n    const { kind, elements } = descriptor;\n    return {\n        kind,\n        elements,\n        // This callback is called once the class is otherwise fully defined\n        finisher(clazz) {\n            window.customElements.define(tagName, clazz);\n        }\n    };\n};\n/**\n * Class decorator factory that defines the decorated class as a custom element.\n *\n * ```\n * @customElement('my-element')\n * class MyElement {\n *   render() {\n *     return html``;\n *   }\n * }\n * ```\n * @category Decorator\n * @param tagName The name of the custom element to define.\n */\nexport const customElement = (tagName) => (classOrDescriptor) => (typeof classOrDescriptor === 'function') ?\n    legacyCustomElement(tagName, classOrDescriptor) :\n    standardCustomElement(tagName, classOrDescriptor);\nconst standardProperty = (options, element) => {\n    // When decorating an accessor, pass it through and add property metadata.\n    // Note, the `hasOwnProperty` check in `createProperty` ensures we don't\n    // stomp over the user's accessor.\n    if (element.kind === 'method' && element.descriptor &&\n        !('value' in element.descriptor)) {\n        return Object.assign(Object.assign({}, element), { finisher(clazz) {\n                clazz.createProperty(element.key, options);\n            } });\n    }\n    else {\n        // createProperty() takes care of defining the property, but we still\n        // must return some kind of descriptor, so return a descriptor for an\n        // unused prototype field. The finisher calls createProperty().\n        return {\n            kind: 'field',\n            key: Symbol(),\n            placement: 'own',\n            descriptor: {},\n            // When @babel/plugin-proposal-decorators implements initializers,\n            // do this instead of the initializer below. See:\n            // https://github.com/babel/babel/issues/9260 extras: [\n            //   {\n            //     kind: 'initializer',\n            //     placement: 'own',\n            //     initializer: descriptor.initializer,\n            //   }\n            // ],\n            initializer() {\n                if (typeof element.initializer === 'function') {\n                    this[element.key] = element.initializer.call(this);\n                }\n            },\n            finisher(clazz) {\n                clazz.createProperty(element.key, options);\n            }\n        };\n    }\n};\nconst legacyProperty = (options, proto, name) => {\n    proto.constructor\n        .createProperty(name, options);\n};\n/**\n * A property decorator which creates a LitElement property which reflects a\n * corresponding attribute value. A [[`PropertyDeclaration`]] may optionally be\n * supplied to configure property features.\n *\n * This decorator should only be used for public fields. Private or protected\n * fields should use the [[`internalProperty`]] decorator.\n *\n * @example\n * ```ts\n * class MyElement {\n *   @property({ type: Boolean })\n *   clicked = false;\n * }\n * ```\n * @category Decorator\n * @ExportDecoratedItems\n */\nexport function property(options) {\n    // tslint:disable-next-line:no-any decorator\n    return (protoOrDescriptor, name) => (name !== undefined) ?\n        legacyProperty(options, protoOrDescriptor, name) :\n        standardProperty(options, protoOrDescriptor);\n}\n/**\n * Declares a private or protected property that still triggers updates to the\n * element when it changes.\n *\n * Properties declared this way must not be used from HTML or HTML templating\n * systems, they're solely for properties internal to the element. These\n * properties may be renamed by optimization tools like closure compiler.\n * @category Decorator\n */\nexport function internalProperty(options) {\n    return property({ attribute: false, hasChanged: options === null || options === void 0 ? void 0 : options.hasChanged });\n}\n/**\n * A property decorator that converts a class property into a getter that\n * executes a querySelector on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n * @param cache An optional boolean which when true performs the DOM query only\n * once and caches the result.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n *\n * ```ts\n * class MyElement {\n *   @query('#first')\n *   first;\n *\n *   render() {\n *     return html`\n *       <div id=\"first\"></div>\n *       <div id=\"second\"></div>\n *     `;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function query(selector, cache) {\n    return (protoOrDescriptor, \n    // tslint:disable-next-line:no-any decorator\n    name) => {\n        const descriptor = {\n            get() {\n                return this.renderRoot.querySelector(selector);\n            },\n            enumerable: true,\n            configurable: true,\n        };\n        if (cache) {\n            const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n            descriptor.get = function () {\n                if (this[key] === undefined) {\n                    (this[key] =\n                        this.renderRoot.querySelector(selector));\n                }\n                return this[key];\n            };\n        }\n        return (name !== undefined) ?\n            legacyQuery(descriptor, protoOrDescriptor, name) :\n            standardQuery(descriptor, protoOrDescriptor);\n    };\n}\n// Note, in the future, we may extend this decorator to support the use case\n// where the queried element may need to do work to become ready to interact\n// with (e.g. load some implementation code). If so, we might elect to\n// add a second argument defining a function that can be run to make the\n// queried element loaded/updated/ready.\n/**\n * A property decorator that converts a class property into a getter that\n * returns a promise that resolves to the result of a querySelector on the\n * element's renderRoot done after the element's `updateComplete` promise\n * resolves. When the queried property may change with element state, this\n * decorator can be used instead of requiring users to await the\n * `updateComplete` before accessing the property.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n * ```ts\n * class MyElement {\n *   @queryAsync('#first')\n *   first;\n *\n *   render() {\n *     return html`\n *       <div id=\"first\"></div>\n *       <div id=\"second\"></div>\n *     `;\n *   }\n * }\n *\n * // external usage\n * async doSomethingWithFirst() {\n *  (await aMyElement.first).doSomething();\n * }\n * ```\n * @category Decorator\n */\nexport function queryAsync(selector) {\n    return (protoOrDescriptor, \n    // tslint:disable-next-line:no-any decorator\n    name) => {\n        const descriptor = {\n            async get() {\n                await this.updateComplete;\n                return this.renderRoot.querySelector(selector);\n            },\n            enumerable: true,\n            configurable: true,\n        };\n        return (name !== undefined) ?\n            legacyQuery(descriptor, protoOrDescriptor, name) :\n            standardQuery(descriptor, protoOrDescriptor);\n    };\n}\n/**\n * A property decorator that converts a class property into a getter\n * that executes a querySelectorAll on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See:\n * https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll\n *\n * @example\n * ```ts\n * class MyElement {\n *   @queryAll('div')\n *   divs;\n *\n *   render() {\n *     return html`\n *       <div id=\"first\"></div>\n *       <div id=\"second\"></div>\n *     `;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAll(selector) {\n    return (protoOrDescriptor, \n    // tslint:disable-next-line:no-any decorator\n    name) => {\n        const descriptor = {\n            get() {\n                return this.renderRoot.querySelectorAll(selector);\n            },\n            enumerable: true,\n            configurable: true,\n        };\n        return (name !== undefined) ?\n            legacyQuery(descriptor, protoOrDescriptor, name) :\n            standardQuery(descriptor, protoOrDescriptor);\n    };\n}\nconst legacyQuery = (descriptor, proto, name) => {\n    Object.defineProperty(proto, name, descriptor);\n};\nconst standardQuery = (descriptor, element) => ({\n    kind: 'method',\n    placement: 'prototype',\n    key: element.key,\n    descriptor,\n});\nconst standardEventOptions = (options, element) => {\n    return Object.assign(Object.assign({}, element), { finisher(clazz) {\n            Object.assign(clazz.prototype[element.key], options);\n        } });\n};\nconst legacyEventOptions = \n// tslint:disable-next-line:no-any legacy decorator\n(options, proto, name) => {\n    Object.assign(proto[name], options);\n};\n/**\n * Adds event listener options to a method used as an event listener in a\n * lit-html template.\n *\n * @param options An object that specifies event listener options as accepted by\n * `EventTarget#addEventListener` and `EventTarget#removeEventListener`.\n *\n * Current browsers support the `capture`, `passive`, and `once` options. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters\n *\n * @example\n * ```ts\n * class MyElement {\n *   clicked = false;\n *\n *   render() {\n *     return html`\n *       <div @click=${this._onClick}`>\n *         <button></button>\n *       </div>\n *     `;\n *   }\n *\n *   @eventOptions({capture: true})\n *   _onClick(e) {\n *     this.clicked = true;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function eventOptions(options) {\n    // Return value typed as any to prevent TypeScript from complaining that\n    // standard decorator function signature does not match TypeScript decorator\n    // signature\n    // TODO(kschaaf): unclear why it was only failing on this decorator and not\n    // the others\n    return ((protoOrDescriptor, name) => (name !== undefined) ?\n        legacyEventOptions(options, protoOrDescriptor, name) :\n        standardEventOptions(options, protoOrDescriptor));\n}\n// x-browser support for matches\n// tslint:disable-next-line:no-any\nconst ElementProto = Element.prototype;\nconst legacyMatches = ElementProto.msMatchesSelector || ElementProto.webkitMatchesSelector;\n/**\n * A property decorator that converts a class property into a getter that\n * returns the `assignedNodes` of the given named `slot`. Note, the type of\n * this property should be annotated as `NodeListOf<HTMLElement>`.\n *\n * @param slotName A string name of the slot.\n * @param flatten A boolean which when true flattens the assigned nodes,\n * meaning any assigned nodes that are slot elements are replaced with their\n * assigned nodes.\n * @param selector A string which filters the results to elements that match\n * the given css selector.\n *\n * * @example\n * ```ts\n * class MyElement {\n *   @queryAssignedNodes('list', true, '.item')\n *   listItems;\n *\n *   render() {\n *     return html`\n *       <slot name=\"list\"></slot>\n *     `;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAssignedNodes(slotName = '', flatten = false, selector = '') {\n    return (protoOrDescriptor, \n    // tslint:disable-next-line:no-any decorator\n    name) => {\n        const descriptor = {\n            get() {\n                const slotSelector = `slot${slotName ? `[name=${slotName}]` : ':not([name])'}`;\n                const slot = this.renderRoot.querySelector(slotSelector);\n                let nodes = slot && slot.assignedNodes({ flatten });\n                if (nodes && selector) {\n                    nodes = nodes.filter((node) => node.nodeType === Node.ELEMENT_NODE &&\n                        node.matches ?\n                        node.matches(selector) :\n                        legacyMatches.call(node, selector));\n                }\n                return nodes;\n            },\n            enumerable: true,\n            configurable: true,\n        };\n        return (name !== undefined) ?\n            legacyQuery(descriptor, protoOrDescriptor, name) :\n            standardQuery(descriptor, protoOrDescriptor);\n    };\n}\n//# sourceMappingURL=decorators.js.map","/**\n@license\nCopyright (c) 2019 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\nexport const supportsAdoptingStyleSheets = (window.ShadowRoot) &&\n    (window.ShadyCSS === undefined || window.ShadyCSS.nativeShadow) &&\n    ('adoptedStyleSheets' in Document.prototype) &&\n    ('replace' in CSSStyleSheet.prototype);\nconst constructionToken = Symbol();\nexport class CSSResult {\n    constructor(cssText, safeToken) {\n        if (safeToken !== constructionToken) {\n            throw new Error('CSSResult is not constructable. Use `unsafeCSS` or `css` instead.');\n        }\n        this.cssText = cssText;\n    }\n    // Note, this is a getter so that it's lazy. In practice, this means\n    // stylesheets are not created until the first element instance is made.\n    get styleSheet() {\n        if (this._styleSheet === undefined) {\n            // Note, if `supportsAdoptingStyleSheets` is true then we assume\n            // CSSStyleSheet is constructable.\n            if (supportsAdoptingStyleSheets) {\n                this._styleSheet = new CSSStyleSheet();\n                this._styleSheet.replaceSync(this.cssText);\n            }\n            else {\n                this._styleSheet = null;\n            }\n        }\n        return this._styleSheet;\n    }\n    toString() {\n        return this.cssText;\n    }\n}\n/**\n * Wrap a value for interpolation in a [[`css`]] tagged template literal.\n *\n * This is unsafe because untrusted CSS text can be used to phone home\n * or exfiltrate data to an attacker controlled site. Take care to only use\n * this with trusted input.\n */\nexport const unsafeCSS = (value) => {\n    return new CSSResult(String(value), constructionToken);\n};\nconst textFromCSSResult = (value) => {\n    if (value instanceof CSSResult) {\n        return value.cssText;\n    }\n    else if (typeof value === 'number') {\n        return value;\n    }\n    else {\n        throw new Error(`Value passed to 'css' function must be a 'css' function result: ${value}. Use 'unsafeCSS' to pass non-literal values, but\n            take care to ensure page security.`);\n    }\n};\n/**\n * Template tag which which can be used with LitElement's [[LitElement.styles |\n * `styles`]] property to set element styles. For security reasons, only literal\n * string values may be used. To incorporate non-literal values [[`unsafeCSS`]]\n * may be used inside a template string part.\n */\nexport const css = (strings, ...values) => {\n    const cssText = values.reduce((acc, v, idx) => acc + textFromCSSResult(v) + strings[idx + 1], strings[0]);\n    return new CSSResult(cssText, constructionToken);\n};\n//# sourceMappingURL=css-tag.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * The main LitElement module, which defines the [[`LitElement`]] base class and\n * related APIs.\n *\n *  LitElement components can define a template and a set of observed\n * properties. Changing an observed property triggers a re-render of the\n * element.\n *\n *  Import [[`LitElement`]] and [[`html`]] from this module to create a\n * component:\n *\n *  ```js\n * import {LitElement, html} from 'lit-element';\n *\n * class MyElement extends LitElement {\n *\n *   // Declare observed properties\n *   static get properties() {\n *     return {\n *       adjective: {}\n *     }\n *   }\n *\n *   constructor() {\n *     this.adjective = 'awesome';\n *   }\n *\n *   // Define the element's template\n *   render() {\n *     return html`<p>your ${adjective} template here</p>`;\n *   }\n * }\n *\n * customElements.define('my-element', MyElement);\n * ```\n *\n * `LitElement` extends [[`UpdatingElement`]] and adds lit-html templating.\n * The `UpdatingElement` class is provided for users that want to build\n * their own custom element base classes that don't use lit-html.\n *\n * @packageDocumentation\n */\nimport { render } from 'lit-html/lib/shady-render.js';\nimport { UpdatingElement } from './lib/updating-element.js';\nexport * from './lib/updating-element.js';\nexport * from './lib/decorators.js';\nexport { html, svg, TemplateResult, SVGTemplateResult } from 'lit-html/lit-html.js';\nimport { supportsAdoptingStyleSheets, unsafeCSS } from './lib/css-tag.js';\nexport * from './lib/css-tag.js';\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for LitElement usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litElementVersions'] || (window['litElementVersions'] = []))\n    .push('2.4.0');\n/**\n * Sentinal value used to avoid calling lit-html's render function when\n * subclasses do not implement `render`\n */\nconst renderNotImplemented = {};\n/**\n * Base element class that manages element properties and attributes, and\n * renders a lit-html template.\n *\n * To define a component, subclass `LitElement` and implement a\n * `render` method to provide the component's template. Define properties\n * using the [[`properties`]] property or the [[`property`]] decorator.\n */\nexport class LitElement extends UpdatingElement {\n    /**\n     * Return the array of styles to apply to the element.\n     * Override this method to integrate into a style management system.\n     *\n     * @nocollapse\n     */\n    static getStyles() {\n        return this.styles;\n    }\n    /** @nocollapse */\n    static _getUniqueStyles() {\n        // Only gather styles once per class\n        if (this.hasOwnProperty(JSCompiler_renameProperty('_styles', this))) {\n            return;\n        }\n        // Take care not to call `this.getStyles()` multiple times since this\n        // generates new CSSResults each time.\n        // TODO(sorvell): Since we do not cache CSSResults by input, any\n        // shared styles will generate new stylesheet objects, which is wasteful.\n        // This should be addressed when a browser ships constructable\n        // stylesheets.\n        const userStyles = this.getStyles();\n        if (Array.isArray(userStyles)) {\n            // De-duplicate styles preserving the _last_ instance in the set.\n            // This is a performance optimization to avoid duplicated styles that can\n            // occur especially when composing via subclassing.\n            // The last item is kept to try to preserve the cascade order with the\n            // assumption that it's most important that last added styles override\n            // previous styles.\n            const addStyles = (styles, set) => styles.reduceRight((set, s) => \n            // Note: On IE set.add() does not return the set\n            Array.isArray(s) ? addStyles(s, set) : (set.add(s), set), set);\n            // Array.from does not work on Set in IE, otherwise return\n            // Array.from(addStyles(userStyles, new Set<CSSResult>())).reverse()\n            const set = addStyles(userStyles, new Set());\n            const styles = [];\n            set.forEach((v) => styles.unshift(v));\n            this._styles = styles;\n        }\n        else {\n            this._styles = userStyles === undefined ? [] : [userStyles];\n        }\n        // Ensure that there are no invalid CSSStyleSheet instances here. They are\n        // invalid in two conditions.\n        // (1) the sheet is non-constructible (`sheet` of a HTMLStyleElement), but\n        //     this is impossible to check except via .replaceSync or use\n        // (2) the ShadyCSS polyfill is enabled (:. supportsAdoptingStyleSheets is\n        //     false)\n        this._styles = this._styles.map((s) => {\n            if (s instanceof CSSStyleSheet && !supportsAdoptingStyleSheets) {\n                // Flatten the cssText from the passed constructible stylesheet (or\n                // undetectable non-constructible stylesheet). The user might have\n                // expected to update their stylesheets over time, but the alternative\n                // is a crash.\n                const cssText = Array.prototype.slice.call(s.cssRules)\n                    .reduce((css, rule) => css + rule.cssText, '');\n                return unsafeCSS(cssText);\n            }\n            return s;\n        });\n    }\n    /**\n     * Performs element initialization. By default this calls\n     * [[`createRenderRoot`]] to create the element [[`renderRoot`]] node and\n     * captures any pre-set values for registered properties.\n     */\n    initialize() {\n        super.initialize();\n        this.constructor._getUniqueStyles();\n        this.renderRoot = this.createRenderRoot();\n        // Note, if renderRoot is not a shadowRoot, styles would/could apply to the\n        // element's getRootNode(). While this could be done, we're choosing not to\n        // support this now since it would require different logic around de-duping.\n        if (window.ShadowRoot && this.renderRoot instanceof window.ShadowRoot) {\n            this.adoptStyles();\n        }\n    }\n    /**\n     * Returns the node into which the element should render and by default\n     * creates and returns an open shadowRoot. Implement to customize where the\n     * element's DOM is rendered. For example, to render into the element's\n     * childNodes, return `this`.\n     * @returns {Element|DocumentFragment} Returns a node into which to render.\n     */\n    createRenderRoot() {\n        return this.attachShadow({ mode: 'open' });\n    }\n    /**\n     * Applies styling to the element shadowRoot using the [[`styles`]]\n     * property. Styling will apply using `shadowRoot.adoptedStyleSheets` where\n     * available and will fallback otherwise. When Shadow DOM is polyfilled,\n     * ShadyCSS scopes styles and adds them to the document. When Shadow DOM\n     * is available but `adoptedStyleSheets` is not, styles are appended to the\n     * end of the `shadowRoot` to [mimic spec\n     * behavior](https://wicg.github.io/construct-stylesheets/#using-constructed-stylesheets).\n     */\n    adoptStyles() {\n        const styles = this.constructor._styles;\n        if (styles.length === 0) {\n            return;\n        }\n        // There are three separate cases here based on Shadow DOM support.\n        // (1) shadowRoot polyfilled: use ShadyCSS\n        // (2) shadowRoot.adoptedStyleSheets available: use it\n        // (3) shadowRoot.adoptedStyleSheets polyfilled: append styles after\n        // rendering\n        if (window.ShadyCSS !== undefined && !window.ShadyCSS.nativeShadow) {\n            window.ShadyCSS.ScopingShim.prepareAdoptedCssText(styles.map((s) => s.cssText), this.localName);\n        }\n        else if (supportsAdoptingStyleSheets) {\n            this.renderRoot.adoptedStyleSheets =\n                styles.map((s) => s instanceof CSSStyleSheet ? s : s.styleSheet);\n        }\n        else {\n            // This must be done after rendering so the actual style insertion is done\n            // in `update`.\n            this._needsShimAdoptedStyleSheets = true;\n        }\n    }\n    connectedCallback() {\n        super.connectedCallback();\n        // Note, first update/render handles styleElement so we only call this if\n        // connected after first update.\n        if (this.hasUpdated && window.ShadyCSS !== undefined) {\n            window.ShadyCSS.styleElement(this);\n        }\n    }\n    /**\n     * Updates the element. This method reflects property values to attributes\n     * and calls `render` to render DOM via lit-html. Setting properties inside\n     * this method will *not* trigger another update.\n     * @param _changedProperties Map of changed properties with old values\n     */\n    update(changedProperties) {\n        // Setting properties in `render` should not trigger an update. Since\n        // updates are allowed after super.update, it's important to call `render`\n        // before that.\n        const templateResult = this.render();\n        super.update(changedProperties);\n        // If render is not implemented by the component, don't call lit-html render\n        if (templateResult !== renderNotImplemented) {\n            this.constructor\n                .render(templateResult, this.renderRoot, { scopeName: this.localName, eventContext: this });\n        }\n        // When native Shadow DOM is used but adoptedStyles are not supported,\n        // insert styling after rendering to ensure adoptedStyles have highest\n        // priority.\n        if (this._needsShimAdoptedStyleSheets) {\n            this._needsShimAdoptedStyleSheets = false;\n            this.constructor._styles.forEach((s) => {\n                const style = document.createElement('style');\n                style.textContent = s.cssText;\n                this.renderRoot.appendChild(style);\n            });\n        }\n    }\n    /**\n     * Invoked on each update to perform rendering tasks. This method may return\n     * any value renderable by lit-html's `NodePart` - typically a\n     * `TemplateResult`. Setting properties inside this method will *not* trigger\n     * the element to update.\n     */\n    render() {\n        return renderNotImplemented;\n    }\n}\n/**\n * Ensure this class is marked as `finalized` as an optimization ensuring\n * it will not needlessly try to `finalize`.\n *\n * Note this property name is a string to prevent breaking Closure JS Compiler\n * optimizations. See updating-element.ts for more information.\n */\nLitElement['finalized'] = true;\n/**\n * Reference to the underlying library method used to render the element's\n * DOM. By default, points to the `render` method from lit-html's shady-render\n * module.\n *\n * **Most users will never need to touch this property.**\n *\n * This  property should not be confused with the `render` instance method,\n * which should be overridden to define a template for the element.\n *\n * Advanced users creating a new base class based on LitElement can override\n * this property to point to a custom render method with a signature that\n * matches [shady-render's `render`\n * method](https://lit-html.polymer-project.org/api/modules/shady_render.html#render).\n *\n * @nocollapse\n */\nLitElement.render = render;\n//# sourceMappingURL=lit-element.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/layer/BaseTile\n */\nimport Layer from './Layer.js';\nimport TileProperty from './TileProperty.js';\nimport { assign } from '../obj.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {import(\"../source/Tile.js\").default} [source] Source for this layer.\n * @property {import(\"../PluggableMap.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link module:ol/Map#addLayer}.\n * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.\n */\n/**\n * @classdesc\n * For layer sources that provide pre-rendered, tiled images in grids that are\n * organized by zoom levels for specific resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @extends {Layer<import(\"../source/Tile.js\").default>}\n * @api\n */\nvar BaseTileLayer = /** @class */ (function (_super) {\n    __extends(BaseTileLayer, _super);\n    /**\n     * @param {Options=} opt_options Tile layer options.\n     */\n    function BaseTileLayer(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        var baseOptions = assign({}, options);\n        delete baseOptions.preload;\n        delete baseOptions.useInterimTilesOnError;\n        _this = _super.call(this, baseOptions) || this;\n        _this.setPreload(options.preload !== undefined ? options.preload : 0);\n        _this.setUseInterimTilesOnError(options.useInterimTilesOnError !== undefined\n            ? options.useInterimTilesOnError\n            : true);\n        return _this;\n    }\n    /**\n     * Return the level as number to which we will preload tiles up to.\n     * @return {number} The level to preload tiles up to.\n     * @observable\n     * @api\n     */\n    BaseTileLayer.prototype.getPreload = function () {\n        return /** @type {number} */ (this.get(TileProperty.PRELOAD));\n    };\n    /**\n     * Set the level as number to which we will preload tiles up to.\n     * @param {number} preload The level to preload tiles up to.\n     * @observable\n     * @api\n     */\n    BaseTileLayer.prototype.setPreload = function (preload) {\n        this.set(TileProperty.PRELOAD, preload);\n    };\n    /**\n     * Whether we use interim tiles on error.\n     * @return {boolean} Use interim tiles on error.\n     * @observable\n     * @api\n     */\n    BaseTileLayer.prototype.getUseInterimTilesOnError = function () {\n        return /** @type {boolean} */ (this.get(TileProperty.USE_INTERIM_TILES_ON_ERROR));\n    };\n    /**\n     * Set whether we use interim tiles on error.\n     * @param {boolean} useInterimTilesOnError Use interim tiles on error.\n     * @observable\n     * @api\n     */\n    BaseTileLayer.prototype.setUseInterimTilesOnError = function (useInterimTilesOnError) {\n        this.set(TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);\n    };\n    return BaseTileLayer;\n}(Layer));\nexport default BaseTileLayer;\n//# sourceMappingURL=BaseTile.js.map","/**\n * @module ol/layer/TileProperty\n */\n/**\n * @enum {string}\n */\nexport default {\n    PRELOAD: 'preload',\n    USE_INTERIM_TILES_ON_ERROR: 'useInterimTilesOnError',\n};\n//# sourceMappingURL=TileProperty.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/renderer/canvas/TileLayer\n */\nimport CanvasLayerRenderer from './Layer.js';\nimport TileRange from '../../TileRange.js';\nimport TileState from '../../TileState.js';\nimport { apply as applyTransform, compose as composeTransform, makeInverse, } from '../../transform.js';\nimport { assign } from '../../obj.js';\nimport { createEmpty, equals, getIntersection, getTopLeft, } from '../../extent.js';\nimport { createTransformString } from '../../render/canvas.js';\nimport { fromUserExtent } from '../../proj.js';\nimport { getUid } from '../../util.js';\nimport { numberSafeCompareFunction } from '../../array.js';\n/**\n * @classdesc\n * Canvas renderer for tile layers.\n * @api\n */\nvar CanvasTileLayerRenderer = /** @class */ (function (_super) {\n    __extends(CanvasTileLayerRenderer, _super);\n    /**\n     * @param {import(\"../../layer/Tile.js\").default|import(\"../../layer/VectorTile.js\").default} tileLayer Tile layer.\n     */\n    function CanvasTileLayerRenderer(tileLayer) {\n        var _this = _super.call(this, tileLayer) || this;\n        /**\n         * Rendered extent has changed since the previous `renderFrame()` call\n         * @type {boolean}\n         */\n        _this.extentChanged = true;\n        /**\n         * @private\n         * @type {?import(\"../../extent.js\").Extent}\n         */\n        _this.renderedExtent_ = null;\n        /**\n         * @protected\n         * @type {number}\n         */\n        _this.renderedPixelRatio;\n        /**\n         * @protected\n         * @type {import(\"../../proj/Projection.js\").default}\n         */\n        _this.renderedProjection = null;\n        /**\n         * @protected\n         * @type {number}\n         */\n        _this.renderedRevision;\n        /**\n         * @protected\n         * @type {!Array<import(\"../../Tile.js\").default>}\n         */\n        _this.renderedTiles = [];\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.newTiles_ = false;\n        /**\n         * @protected\n         * @type {import(\"../../extent.js\").Extent}\n         */\n        _this.tmpExtent = createEmpty();\n        /**\n         * @private\n         * @type {import(\"../../TileRange.js\").default}\n         */\n        _this.tmpTileRange_ = new TileRange(0, 0, 0, 0);\n        return _this;\n    }\n    /**\n     * @protected\n     * @param {import(\"../../Tile.js\").default} tile Tile.\n     * @return {boolean} Tile is drawable.\n     */\n    CanvasTileLayerRenderer.prototype.isDrawableTile = function (tile) {\n        var tileLayer = this.getLayer();\n        var tileState = tile.getState();\n        var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();\n        return (tileState == TileState.LOADED ||\n            tileState == TileState.EMPTY ||\n            (tileState == TileState.ERROR && !useInterimTilesOnError));\n    };\n    /**\n     * @param {number} z Tile coordinate z.\n     * @param {number} x Tile coordinate x.\n     * @param {number} y Tile coordinate y.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @return {!import(\"../../Tile.js\").default} Tile.\n     */\n    CanvasTileLayerRenderer.prototype.getTile = function (z, x, y, frameState) {\n        var pixelRatio = frameState.pixelRatio;\n        var projection = frameState.viewState.projection;\n        var tileLayer = this.getLayer();\n        var tileSource = tileLayer.getSource();\n        var tile = tileSource.getTile(z, x, y, pixelRatio, projection);\n        if (tile.getState() == TileState.ERROR) {\n            if (!tileLayer.getUseInterimTilesOnError()) {\n                // When useInterimTilesOnError is false, we consider the error tile as loaded.\n                tile.setState(TileState.LOADED);\n            }\n            else if (tileLayer.getPreload() > 0) {\n                // Preloaded tiles for lower resolutions might have finished loading.\n                this.newTiles_ = true;\n            }\n        }\n        if (!this.isDrawableTile(tile)) {\n            tile = tile.getInterimTile();\n        }\n        return tile;\n    };\n    /**\n     * @param {Object<number, Object<string, import(\"../../Tile.js\").default>>} tiles Lookup of loaded tiles by zoom level.\n     * @param {number} zoom Zoom level.\n     * @param {import(\"../../Tile.js\").default} tile Tile.\n     * @return {boolean|void} If `false`, the tile will not be considered loaded.\n     */\n    CanvasTileLayerRenderer.prototype.loadedTileCallback = function (tiles, zoom, tile) {\n        if (this.isDrawableTile(tile)) {\n            return _super.prototype.loadedTileCallback.call(this, tiles, zoom, tile);\n        }\n        return false;\n    };\n    /**\n     * Determine whether render should be called.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @return {boolean} Layer is ready to be rendered.\n     */\n    CanvasTileLayerRenderer.prototype.prepareFrame = function (frameState) {\n        return !!this.getLayer().getSource();\n    };\n    /**\n     * Render the layer.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {HTMLElement} target Target that may be used to render content to.\n     * @return {HTMLElement} The rendered element.\n     */\n    CanvasTileLayerRenderer.prototype.renderFrame = function (frameState, target) {\n        var layerState = frameState.layerStatesArray[frameState.layerIndex];\n        var viewState = frameState.viewState;\n        var projection = viewState.projection;\n        var viewResolution = viewState.resolution;\n        var viewCenter = viewState.center;\n        var rotation = viewState.rotation;\n        var pixelRatio = frameState.pixelRatio;\n        var tileLayer = this.getLayer();\n        var tileSource = tileLayer.getSource();\n        var sourceRevision = tileSource.getRevision();\n        var tileGrid = tileSource.getTileGridForProjection(projection);\n        var z = tileGrid.getZForResolution(viewResolution, tileSource.zDirection);\n        var tileResolution = tileGrid.getResolution(z);\n        var extent = frameState.extent;\n        var layerExtent = layerState.extent && fromUserExtent(layerState.extent, projection);\n        if (layerExtent) {\n            extent = getIntersection(extent, fromUserExtent(layerState.extent, projection));\n        }\n        var tilePixelRatio = tileSource.getTilePixelRatio(pixelRatio);\n        // desired dimensions of the canvas in pixels\n        var width = Math.round(frameState.size[0] * tilePixelRatio);\n        var height = Math.round(frameState.size[1] * tilePixelRatio);\n        if (rotation) {\n            var size = Math.round(Math.sqrt(width * width + height * height));\n            width = size;\n            height = size;\n        }\n        var dx = (tileResolution * width) / 2 / tilePixelRatio;\n        var dy = (tileResolution * height) / 2 / tilePixelRatio;\n        var canvasExtent = [\n            viewCenter[0] - dx,\n            viewCenter[1] - dy,\n            viewCenter[0] + dx,\n            viewCenter[1] + dy,\n        ];\n        var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);\n        /**\n         * @type {Object<number, Object<string, import(\"../../Tile.js\").default>>}\n         */\n        var tilesToDrawByZ = {};\n        tilesToDrawByZ[z] = {};\n        var findLoadedTiles = this.createLoadedTileFinder(tileSource, projection, tilesToDrawByZ);\n        var tmpExtent = this.tmpExtent;\n        var tmpTileRange = this.tmpTileRange_;\n        this.newTiles_ = false;\n        for (var x = tileRange.minX; x <= tileRange.maxX; ++x) {\n            for (var y = tileRange.minY; y <= tileRange.maxY; ++y) {\n                var tile = this.getTile(z, x, y, frameState);\n                if (this.isDrawableTile(tile)) {\n                    var uid = getUid(this);\n                    if (tile.getState() == TileState.LOADED) {\n                        tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;\n                        var inTransition = tile.inTransition(uid);\n                        if (!this.newTiles_ &&\n                            (inTransition || this.renderedTiles.indexOf(tile) === -1)) {\n                            this.newTiles_ = true;\n                        }\n                    }\n                    if (tile.getAlpha(uid, frameState.time) === 1) {\n                        // don't look for alt tiles if alpha is 1\n                        continue;\n                    }\n                }\n                var childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent);\n                var covered = false;\n                if (childTileRange) {\n                    covered = findLoadedTiles(z + 1, childTileRange);\n                }\n                if (!covered) {\n                    tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, tmpTileRange, tmpExtent);\n                }\n            }\n        }\n        var canvasScale = tileResolution / viewResolution;\n        // set forward and inverse pixel transforms\n        composeTransform(this.pixelTransform, frameState.size[0] / 2, frameState.size[1] / 2, 1 / tilePixelRatio, 1 / tilePixelRatio, rotation, -width / 2, -height / 2);\n        var canvasTransform = createTransformString(this.pixelTransform);\n        this.useContainer(target, canvasTransform, layerState.opacity);\n        var context = this.context;\n        var canvas = context.canvas;\n        makeInverse(this.inversePixelTransform, this.pixelTransform);\n        // set scale transform for calculating tile positions on the canvas\n        composeTransform(this.tempTransform, width / 2, height / 2, canvasScale, canvasScale, 0, -width / 2, -height / 2);\n        if (canvas.width != width || canvas.height != height) {\n            canvas.width = width;\n            canvas.height = height;\n        }\n        else if (!this.containerReused) {\n            context.clearRect(0, 0, width, height);\n        }\n        if (layerExtent) {\n            this.clipUnrotated(context, frameState, layerExtent);\n        }\n        assign(context, tileSource.getContextOptions());\n        this.preRender(context, frameState);\n        this.renderedTiles.length = 0;\n        /** @type {Array<number>} */\n        var zs = Object.keys(tilesToDrawByZ).map(Number);\n        zs.sort(numberSafeCompareFunction);\n        var clips, clipZs, currentClip;\n        if (layerState.opacity === 1 &&\n            (!this.containerReused ||\n                tileSource.getOpaque(frameState.viewState.projection))) {\n            zs = zs.reverse();\n        }\n        else {\n            clips = [];\n            clipZs = [];\n        }\n        for (var i = zs.length - 1; i >= 0; --i) {\n            var currentZ = zs[i];\n            var currentTilePixelSize = tileSource.getTilePixelSize(currentZ, pixelRatio, projection);\n            var currentResolution = tileGrid.getResolution(currentZ);\n            var currentScale = currentResolution / tileResolution;\n            var dx_1 = currentTilePixelSize[0] * currentScale * canvasScale;\n            var dy_1 = currentTilePixelSize[1] * currentScale * canvasScale;\n            var originTileCoord = tileGrid.getTileCoordForCoordAndZ(getTopLeft(canvasExtent), currentZ);\n            var originTileExtent = tileGrid.getTileCoordExtent(originTileCoord);\n            var origin_1 = applyTransform(this.tempTransform, [\n                (tilePixelRatio * (originTileExtent[0] - canvasExtent[0])) /\n                    tileResolution,\n                (tilePixelRatio * (canvasExtent[3] - originTileExtent[3])) /\n                    tileResolution,\n            ]);\n            var tileGutter = tilePixelRatio * tileSource.getGutterForProjection(projection);\n            var tilesToDraw = tilesToDrawByZ[currentZ];\n            for (var tileCoordKey in tilesToDraw) {\n                var tile = /** @type {import(\"../../ImageTile.js\").default} */ (tilesToDraw[tileCoordKey]);\n                var tileCoord = tile.tileCoord;\n                // Calculate integer positions and sizes so that tiles align\n                var floatX = origin_1[0] - (originTileCoord[1] - tileCoord[1]) * dx_1;\n                var nextX = Math.round(floatX + dx_1);\n                var floatY = origin_1[1] - (originTileCoord[2] - tileCoord[2]) * dy_1;\n                var nextY = Math.round(floatY + dy_1);\n                var x = Math.round(floatX);\n                var y = Math.round(floatY);\n                var w = nextX - x;\n                var h = nextY - y;\n                var transition = z === currentZ;\n                var inTransition = transition && tile.getAlpha(getUid(this), frameState.time) !== 1;\n                if (!inTransition) {\n                    if (clips) {\n                        // Clip mask for regions in this tile that already filled by a higher z tile\n                        context.save();\n                        currentClip = [x, y, x + w, y, x + w, y + h, x, y + h];\n                        for (var i_1 = 0, ii = clips.length; i_1 < ii; ++i_1) {\n                            if (z !== currentZ && currentZ < clipZs[i_1]) {\n                                var clip = clips[i_1];\n                                context.beginPath();\n                                // counter-clockwise (outer ring) for current tile\n                                context.moveTo(currentClip[0], currentClip[1]);\n                                context.lineTo(currentClip[2], currentClip[3]);\n                                context.lineTo(currentClip[4], currentClip[5]);\n                                context.lineTo(currentClip[6], currentClip[7]);\n                                // clockwise (inner ring) for higher z tile\n                                context.moveTo(clip[6], clip[7]);\n                                context.lineTo(clip[4], clip[5]);\n                                context.lineTo(clip[2], clip[3]);\n                                context.lineTo(clip[0], clip[1]);\n                                context.clip();\n                            }\n                        }\n                        clips.push(currentClip);\n                        clipZs.push(currentZ);\n                    }\n                    else {\n                        context.clearRect(x, y, w, h);\n                    }\n                }\n                this.drawTileImage(tile, frameState, x, y, w, h, tileGutter, transition, layerState.opacity);\n                if (clips && !inTransition) {\n                    context.restore();\n                }\n                this.renderedTiles.push(tile);\n                this.updateUsedTiles(frameState.usedTiles, tileSource, tile);\n            }\n        }\n        this.renderedRevision = sourceRevision;\n        this.renderedResolution = tileResolution;\n        this.extentChanged =\n            !this.renderedExtent_ || !equals(this.renderedExtent_, canvasExtent);\n        this.renderedExtent_ = canvasExtent;\n        this.renderedPixelRatio = pixelRatio;\n        this.renderedProjection = projection;\n        this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload());\n        this.scheduleExpireCache(frameState, tileSource);\n        this.postRender(context, frameState);\n        if (layerState.extent) {\n            context.restore();\n        }\n        if (canvasTransform !== canvas.style.transform) {\n            canvas.style.transform = canvasTransform;\n        }\n        return this.container;\n    };\n    /**\n     * @param {import(\"../../ImageTile.js\").default} tile Tile.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {number} x Left of the tile.\n     * @param {number} y Top of the tile.\n     * @param {number} w Width of the tile.\n     * @param {number} h Height of the tile.\n     * @param {number} gutter Tile gutter.\n     * @param {boolean} transition Apply an alpha transition.\n     * @param {number} opacity Opacity.\n     */\n    CanvasTileLayerRenderer.prototype.drawTileImage = function (tile, frameState, x, y, w, h, gutter, transition, opacity) {\n        var image = this.getTileImage(tile);\n        if (!image) {\n            return;\n        }\n        var uid = getUid(this);\n        var tileAlpha = transition ? tile.getAlpha(uid, frameState.time) : 1;\n        var alpha = opacity * tileAlpha;\n        var alphaChanged = alpha !== this.context.globalAlpha;\n        if (alphaChanged) {\n            this.context.save();\n            this.context.globalAlpha = alpha;\n        }\n        this.context.drawImage(image, gutter, gutter, image.width - 2 * gutter, image.height - 2 * gutter, x, y, w, h);\n        if (alphaChanged) {\n            this.context.restore();\n        }\n        if (tileAlpha !== 1) {\n            frameState.animate = true;\n        }\n        else if (transition) {\n            tile.endTransition(uid);\n        }\n    };\n    /**\n     * @return {HTMLCanvasElement} Image\n     */\n    CanvasTileLayerRenderer.prototype.getImage = function () {\n        var context = this.context;\n        return context ? context.canvas : null;\n    };\n    /**\n     * Get the image from a tile.\n     * @param {import(\"../../ImageTile.js\").default} tile Tile.\n     * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n     * @protected\n     */\n    CanvasTileLayerRenderer.prototype.getTileImage = function (tile) {\n        return tile.getImage();\n    };\n    /**\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {import(\"../../source/Tile.js\").default} tileSource Tile source.\n     * @protected\n     */\n    CanvasTileLayerRenderer.prototype.scheduleExpireCache = function (frameState, tileSource) {\n        if (tileSource.canExpireCache()) {\n            /**\n             * @param {import(\"../../source/Tile.js\").default} tileSource Tile source.\n             * @param {import(\"../../PluggableMap.js\").default} map Map.\n             * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n             */\n            var postRenderFunction = function (tileSource, map, frameState) {\n                var tileSourceKey = getUid(tileSource);\n                if (tileSourceKey in frameState.usedTiles) {\n                    tileSource.expireCache(frameState.viewState.projection, frameState.usedTiles[tileSourceKey]);\n                }\n            }.bind(null, tileSource);\n            frameState.postRenderFunctions.push(\n            /** @type {import(\"../../PluggableMap.js\").PostRenderFunction} */ (postRenderFunction));\n        }\n    };\n    /**\n     * @param {!Object<string, !Object<string, boolean>>} usedTiles Used tiles.\n     * @param {import(\"../../source/Tile.js\").default} tileSource Tile source.\n     * @param {import('../../Tile.js').default} tile Tile.\n     * @protected\n     */\n    CanvasTileLayerRenderer.prototype.updateUsedTiles = function (usedTiles, tileSource, tile) {\n        // FIXME should we use tilesToDrawByZ instead?\n        var tileSourceKey = getUid(tileSource);\n        if (!(tileSourceKey in usedTiles)) {\n            usedTiles[tileSourceKey] = {};\n        }\n        usedTiles[tileSourceKey][tile.getKey()] = true;\n    };\n    /**\n     * Manage tile pyramid.\n     * This function performs a number of functions related to the tiles at the\n     * current zoom and lower zoom levels:\n     * - registers idle tiles in frameState.wantedTiles so that they are not\n     *   discarded by the tile queue\n     * - enqueues missing tiles\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {import(\"../../source/Tile.js\").default} tileSource Tile source.\n     * @param {import(\"../../tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../../proj/Projection.js\").default} projection Projection.\n     * @param {import(\"../../extent.js\").Extent} extent Extent.\n     * @param {number} currentZ Current Z.\n     * @param {number} preload Load low resolution tiles up to 'preload' levels.\n     * @param {function(import(\"../../Tile.js\").default)=} opt_tileCallback Tile callback.\n     * @protected\n     */\n    CanvasTileLayerRenderer.prototype.manageTilePyramid = function (frameState, tileSource, tileGrid, pixelRatio, projection, extent, currentZ, preload, opt_tileCallback) {\n        var tileSourceKey = getUid(tileSource);\n        if (!(tileSourceKey in frameState.wantedTiles)) {\n            frameState.wantedTiles[tileSourceKey] = {};\n        }\n        var wantedTiles = frameState.wantedTiles[tileSourceKey];\n        var tileQueue = frameState.tileQueue;\n        var minZoom = tileGrid.getMinZoom();\n        var tileCount = 0;\n        var tile, tileRange, tileResolution, x, y, z;\n        for (z = minZoom; z <= currentZ; ++z) {\n            tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z, tileRange);\n            tileResolution = tileGrid.getResolution(z);\n            for (x = tileRange.minX; x <= tileRange.maxX; ++x) {\n                for (y = tileRange.minY; y <= tileRange.maxY; ++y) {\n                    if (currentZ - z <= preload) {\n                        ++tileCount;\n                        tile = tileSource.getTile(z, x, y, pixelRatio, projection);\n                        if (tile.getState() == TileState.IDLE) {\n                            wantedTiles[tile.getKey()] = true;\n                            if (!tileQueue.isKeyQueued(tile.getKey())) {\n                                tileQueue.enqueue([\n                                    tile,\n                                    tileSourceKey,\n                                    tileGrid.getTileCoordCenter(tile.tileCoord),\n                                    tileResolution,\n                                ]);\n                            }\n                        }\n                        if (opt_tileCallback !== undefined) {\n                            opt_tileCallback(tile);\n                        }\n                    }\n                    else {\n                        tileSource.useTile(z, x, y, projection);\n                    }\n                }\n            }\n        }\n        tileSource.updateCacheSize(tileCount, projection);\n    };\n    return CanvasTileLayerRenderer;\n}(CanvasLayerRenderer));\n/**\n * @function\n * @return {import(\"../../layer/Tile.js\").default|import(\"../../layer/VectorTile.js\").default}\n */\nCanvasTileLayerRenderer.prototype.getLayer;\nexport default CanvasTileLayerRenderer;\n//# sourceMappingURL=TileLayer.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/layer/Tile\n */\nimport BaseTileLayer from './BaseTile.js';\nimport CanvasTileLayerRenderer from '../renderer/canvas/TileLayer.js';\n/**\n * @classdesc\n * For layer sources that provide pre-rendered, tiled images in grids that are\n * organized by zoom levels for specific resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @api\n */\nvar TileLayer = /** @class */ (function (_super) {\n    __extends(TileLayer, _super);\n    /**\n     * @param {import(\"./BaseTile.js\").Options=} opt_options Tile layer options.\n     */\n    function TileLayer(opt_options) {\n        return _super.call(this, opt_options) || this;\n    }\n    /**\n     * Create a renderer for this layer.\n     * @return {import(\"../renderer/Layer.js\").default} A layer renderer.\n     * @protected\n     */\n    TileLayer.prototype.createRenderer = function () {\n        return new CanvasTileLayerRenderer(this);\n    };\n    return TileLayer;\n}(BaseTileLayer));\nexport default TileLayer;\n//# sourceMappingURL=Tile.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/reproj/Image\n */\nimport { ERROR_THRESHOLD } from './common.js';\nimport EventType from '../events/EventType.js';\nimport ImageBase from '../ImageBase.js';\nimport ImageState from '../ImageState.js';\nimport Triangulation from './Triangulation.js';\nimport { calculateSourceResolution, render as renderReprojected, } from '../reproj.js';\nimport { getCenter, getHeight, getIntersection, getWidth } from '../extent.js';\nimport { listen, unlistenByKey } from '../events.js';\n/**\n * @typedef {function(import(\"../extent.js\").Extent, number, number) : import(\"../ImageBase.js\").default} FunctionType\n */\n/**\n * @classdesc\n * Class encapsulating single reprojected image.\n * See {@link module:ol/source/Image~ImageSource}.\n */\nvar ReprojImage = /** @class */ (function (_super) {\n    __extends(ReprojImage, _super);\n    /**\n     * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection (of the data).\n     * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n     * @param {import(\"../extent.js\").Extent} targetExtent Target extent.\n     * @param {number} targetResolution Target resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {FunctionType} getImageFunction\n     *     Function returning source images (extent, resolution, pixelRatio).\n     * @param {object=} opt_contextOptions Properties to set on the canvas context.\n     */\n    function ReprojImage(sourceProj, targetProj, targetExtent, targetResolution, pixelRatio, getImageFunction, opt_contextOptions) {\n        var _this = this;\n        var maxSourceExtent = sourceProj.getExtent();\n        var maxTargetExtent = targetProj.getExtent();\n        var limitedTargetExtent = maxTargetExtent\n            ? getIntersection(targetExtent, maxTargetExtent)\n            : targetExtent;\n        var targetCenter = getCenter(limitedTargetExtent);\n        var sourceResolution = calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution);\n        var errorThresholdInPixels = ERROR_THRESHOLD;\n        var triangulation = new Triangulation(sourceProj, targetProj, limitedTargetExtent, maxSourceExtent, sourceResolution * errorThresholdInPixels, targetResolution);\n        var sourceExtent = triangulation.calculateSourceExtent();\n        var sourceImage = getImageFunction(sourceExtent, sourceResolution, pixelRatio);\n        var state = sourceImage ? ImageState.IDLE : ImageState.EMPTY;\n        var sourcePixelRatio = sourceImage ? sourceImage.getPixelRatio() : 1;\n        _this = _super.call(this, targetExtent, targetResolution, sourcePixelRatio, state) || this;\n        /**\n         * @private\n         * @type {import(\"../proj/Projection.js\").default}\n         */\n        _this.targetProj_ = targetProj;\n        /**\n         * @private\n         * @type {import(\"../extent.js\").Extent}\n         */\n        _this.maxSourceExtent_ = maxSourceExtent;\n        /**\n         * @private\n         * @type {!import(\"./Triangulation.js\").default}\n         */\n        _this.triangulation_ = triangulation;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.targetResolution_ = targetResolution;\n        /**\n         * @private\n         * @type {import(\"../extent.js\").Extent}\n         */\n        _this.targetExtent_ = targetExtent;\n        /**\n         * @private\n         * @type {import(\"../ImageBase.js\").default}\n         */\n        _this.sourceImage_ = sourceImage;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.sourcePixelRatio_ = sourcePixelRatio;\n        /**\n         * @private\n         * @type {object}\n         */\n        _this.contextOptions_ = opt_contextOptions;\n        /**\n         * @private\n         * @type {HTMLCanvasElement}\n         */\n        _this.canvas_ = null;\n        /**\n         * @private\n         * @type {?import(\"../events.js\").EventsKey}\n         */\n        _this.sourceListenerKey_ = null;\n        return _this;\n    }\n    /**\n     * Clean up.\n     */\n    ReprojImage.prototype.disposeInternal = function () {\n        if (this.state == ImageState.LOADING) {\n            this.unlistenSource_();\n        }\n        _super.prototype.disposeInternal.call(this);\n    };\n    /**\n     * @return {HTMLCanvasElement} Image.\n     */\n    ReprojImage.prototype.getImage = function () {\n        return this.canvas_;\n    };\n    /**\n     * @return {import(\"../proj/Projection.js\").default} Projection.\n     */\n    ReprojImage.prototype.getProjection = function () {\n        return this.targetProj_;\n    };\n    /**\n     * @private\n     */\n    ReprojImage.prototype.reproject_ = function () {\n        var sourceState = this.sourceImage_.getState();\n        if (sourceState == ImageState.LOADED) {\n            var width = getWidth(this.targetExtent_) / this.targetResolution_;\n            var height = getHeight(this.targetExtent_) / this.targetResolution_;\n            this.canvas_ = renderReprojected(width, height, this.sourcePixelRatio_, this.sourceImage_.getResolution(), this.maxSourceExtent_, this.targetResolution_, this.targetExtent_, this.triangulation_, [\n                {\n                    extent: this.sourceImage_.getExtent(),\n                    image: this.sourceImage_.getImage(),\n                },\n            ], 0, undefined, this.contextOptions_);\n        }\n        this.state = sourceState;\n        this.changed();\n    };\n    /**\n     * Load not yet loaded URI.\n     */\n    ReprojImage.prototype.load = function () {\n        if (this.state == ImageState.IDLE) {\n            this.state = ImageState.LOADING;\n            this.changed();\n            var sourceState = this.sourceImage_.getState();\n            if (sourceState == ImageState.LOADED || sourceState == ImageState.ERROR) {\n                this.reproject_();\n            }\n            else {\n                this.sourceListenerKey_ = listen(this.sourceImage_, EventType.CHANGE, function (e) {\n                    var sourceState = this.sourceImage_.getState();\n                    if (sourceState == ImageState.LOADED ||\n                        sourceState == ImageState.ERROR) {\n                        this.unlistenSource_();\n                        this.reproject_();\n                    }\n                }, this);\n                this.sourceImage_.load();\n            }\n        }\n    };\n    /**\n     * @private\n     */\n    ReprojImage.prototype.unlistenSource_ = function () {\n        unlistenByKey(\n        /** @type {!import(\"../events.js\").EventsKey} */ (this.sourceListenerKey_));\n        this.sourceListenerKey_ = null;\n    };\n    return ReprojImage;\n}(ImageBase));\nexport default ReprojImage;\n//# sourceMappingURL=Image.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/source/Image\n */\nimport Event from '../events/Event.js';\nimport ImageState from '../ImageState.js';\nimport ReprojImage from '../reproj/Image.js';\nimport Source from './Source.js';\nimport { ENABLE_RASTER_REPROJECTION } from '../reproj/common.js';\nimport { IMAGE_SMOOTHING_DISABLED } from './common.js';\nimport { abstract } from '../util.js';\nimport { equals } from '../extent.js';\nimport { equivalent } from '../proj.js';\nimport { linearFindNearest } from '../array.js';\n/**\n * @enum {string}\n */\nexport var ImageSourceEventType = {\n    /**\n     * Triggered when an image starts loading.\n     * @event module:ol/source/Image.ImageSourceEvent#imageloadstart\n     * @api\n     */\n    IMAGELOADSTART: 'imageloadstart',\n    /**\n     * Triggered when an image finishes loading.\n     * @event module:ol/source/Image.ImageSourceEvent#imageloadend\n     * @api\n     */\n    IMAGELOADEND: 'imageloadend',\n    /**\n     * Triggered if image loading results in an error.\n     * @event module:ol/source/Image.ImageSourceEvent#imageloaderror\n     * @api\n     */\n    IMAGELOADERROR: 'imageloaderror',\n};\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Image~ImageSource} instances are instances of this\n * type.\n */\nvar ImageSourceEvent = /** @class */ (function (_super) {\n    __extends(ImageSourceEvent, _super);\n    /**\n     * @param {string} type Type.\n     * @param {import(\"../Image.js\").default} image The image.\n     */\n    function ImageSourceEvent(type, image) {\n        var _this = _super.call(this, type) || this;\n        /**\n         * The image related to the event.\n         * @type {import(\"../Image.js\").default}\n         * @api\n         */\n        _this.image = image;\n        return _this;\n    }\n    return ImageSourceEvent;\n}(Event));\nexport { ImageSourceEvent };\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions]\n * @property {boolean} [imageSmoothing=true] Enable image smoothing.\n * @property {import(\"../proj.js\").ProjectionLike} [projection]\n * @property {Array<number>} [resolutions]\n * @property {import(\"./State.js\").default} [state]\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for sources providing a single image.\n * @abstract\n * @fires module:ol/source/Image.ImageSourceEvent\n * @api\n */\nvar ImageSource = /** @class */ (function (_super) {\n    __extends(ImageSource, _super);\n    /**\n     * @param {Options} options Single image source options.\n     */\n    function ImageSource(options) {\n        var _this = _super.call(this, {\n            attributions: options.attributions,\n            projection: options.projection,\n            state: options.state,\n        }) || this;\n        /**\n         * @private\n         * @type {Array<number>}\n         */\n        _this.resolutions_ =\n            options.resolutions !== undefined ? options.resolutions : null;\n        /**\n         * @private\n         * @type {import(\"../reproj/Image.js\").default}\n         */\n        _this.reprojectedImage_ = null;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.reprojectedRevision_ = 0;\n        /**\n         * @private\n         * @type {object|undefined}\n         */\n        _this.contextOptions_ =\n            options.imageSmoothing === false ? IMAGE_SMOOTHING_DISABLED : undefined;\n        return _this;\n    }\n    /**\n     * @return {Array<number>} Resolutions.\n     */\n    ImageSource.prototype.getResolutions = function () {\n        return this.resolutions_;\n    };\n    /**\n     * @return {Object|undefined} Context options.\n     */\n    ImageSource.prototype.getContextOptions = function () {\n        return this.contextOptions_;\n    };\n    /**\n     * @protected\n     * @param {number} resolution Resolution.\n     * @return {number} Resolution.\n     */\n    ImageSource.prototype.findNearestResolution = function (resolution) {\n        if (this.resolutions_) {\n            var idx = linearFindNearest(this.resolutions_, resolution, 0);\n            resolution = this.resolutions_[idx];\n        }\n        return resolution;\n    };\n    /**\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {import(\"../ImageBase.js\").default} Single image.\n     */\n    ImageSource.prototype.getImage = function (extent, resolution, pixelRatio, projection) {\n        var sourceProjection = this.getProjection();\n        if (!ENABLE_RASTER_REPROJECTION ||\n            !sourceProjection ||\n            !projection ||\n            equivalent(sourceProjection, projection)) {\n            if (sourceProjection) {\n                projection = sourceProjection;\n            }\n            return this.getImageInternal(extent, resolution, pixelRatio, projection);\n        }\n        else {\n            if (this.reprojectedImage_) {\n                if (this.reprojectedRevision_ == this.getRevision() &&\n                    equivalent(this.reprojectedImage_.getProjection(), projection) &&\n                    this.reprojectedImage_.getResolution() == resolution &&\n                    equals(this.reprojectedImage_.getExtent(), extent)) {\n                    return this.reprojectedImage_;\n                }\n                this.reprojectedImage_.dispose();\n                this.reprojectedImage_ = null;\n            }\n            this.reprojectedImage_ = new ReprojImage(sourceProjection, projection, extent, resolution, pixelRatio, function (extent, resolution, pixelRatio) {\n                return this.getImageInternal(extent, resolution, pixelRatio, sourceProjection);\n            }.bind(this), this.contextOptions_);\n            this.reprojectedRevision_ = this.getRevision();\n            return this.reprojectedImage_;\n        }\n    };\n    /**\n     * @abstract\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {import(\"../ImageBase.js\").default} Single image.\n     * @protected\n     */\n    ImageSource.prototype.getImageInternal = function (extent, resolution, pixelRatio, projection) {\n        return abstract();\n    };\n    /**\n     * Handle image change events.\n     * @param {import(\"../events/Event.js\").default} event Event.\n     * @protected\n     */\n    ImageSource.prototype.handleImageChange = function (event) {\n        var image = /** @type {import(\"../Image.js\").default} */ (event.target);\n        switch (image.getState()) {\n            case ImageState.LOADING:\n                this.loading = true;\n                this.dispatchEvent(new ImageSourceEvent(ImageSourceEventType.IMAGELOADSTART, image));\n                break;\n            case ImageState.LOADED:\n                this.loading = false;\n                this.dispatchEvent(new ImageSourceEvent(ImageSourceEventType.IMAGELOADEND, image));\n                break;\n            case ImageState.ERROR:\n                this.loading = false;\n                this.dispatchEvent(new ImageSourceEvent(ImageSourceEventType.IMAGELOADERROR, image));\n                break;\n            default:\n            // pass\n        }\n    };\n    return ImageSource;\n}(Source));\n/**\n * Default image load function for image sources that use import(\"../Image.js\").Image image\n * instances.\n * @param {import(\"../Image.js\").default} image Image.\n * @param {string} src Source.\n */\nexport function defaultImageLoadFunction(image, src) {\n    /** @type {HTMLImageElement|HTMLVideoElement} */ (image.getImage()).src = src;\n}\nexport default ImageSource;\n//# sourceMappingURL=Image.js.map","/**\n * @module ol/source/ImageArcGISRest\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport EventType from '../events/EventType.js';\nimport ImageSource, { defaultImageLoadFunction } from './Image.js';\nimport ImageWrapper from '../Image.js';\nimport { appendParams } from '../uri.js';\nimport { assert } from '../asserts.js';\nimport { assign } from '../obj.js';\nimport { containsExtent, getHeight, getWidth } from '../extent.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [hidpi=true] Use the `ol/Map#pixelRatio` value when requesting the image from\n * the remote server.\n * @property {import(\"../Image.js\").LoadFunction} [imageLoadFunction] Optional function to load an image given\n * a URL.\n * @property {boolean} [imageSmoothing=true] Enable image smoothing.\n * @property {Object<string,*>} [params] ArcGIS Rest parameters. This field is optional. Service\n * defaults will be used for any fields not specified. `FORMAT` is `PNG32` by default. `F` is\n * `IMAGE` by default. `TRANSPARENT` is `true` by default.  `BBOX`, `SIZE`, `BBOXSR`, and `IMAGESR`\n * will be set dynamically. Set `LAYERS` to override the default service layer visibility. See\n * {@link http://resources.arcgis.com/en/help/arcgis-rest-api/index.html#/Export_Map/02r3000000v7000000/}\n * for further reference.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {number} [ratio=1.5] Ratio. `1` means image requests are the size of the map viewport,\n * `2` means twice the size of the map viewport, and so on.\n * @property {Array<number>} [resolutions] Resolutions. If specified, requests will be made for\n * these resolutions only.\n * @property {string} [url] ArcGIS Rest service URL for a Map Service or Image Service. The url\n * should include /MapServer or /ImageServer.\n */\n/**\n * @classdesc\n * Source for data from ArcGIS Rest services providing single, untiled images.\n * Useful when underlying map service has labels.\n *\n * If underlying map service is not using labels,\n * take advantage of ol image caching and use\n * {@link module:ol/source/TileArcGISRest} data source.\n *\n * @fires module:ol/source/Image.ImageSourceEvent\n * @api\n */\nvar ImageArcGISRest = /** @class */ (function (_super) {\n    __extends(ImageArcGISRest, _super);\n    /**\n     * @param {Options=} opt_options Image ArcGIS Rest Options.\n     */\n    function ImageArcGISRest(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        _this = _super.call(this, {\n            attributions: options.attributions,\n            imageSmoothing: options.imageSmoothing,\n            projection: options.projection,\n            resolutions: options.resolutions,\n        }) || this;\n        /**\n         * @private\n         * @type {?string}\n         */\n        _this.crossOrigin_ =\n            options.crossOrigin !== undefined ? options.crossOrigin : null;\n        /**\n         * @private\n         * @type {boolean}\n         */\n        _this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;\n        /**\n         * @private\n         * @type {string|undefined}\n         */\n        _this.url_ = options.url;\n        /**\n         * @private\n         * @type {import(\"../Image.js\").LoadFunction}\n         */\n        _this.imageLoadFunction_ =\n            options.imageLoadFunction !== undefined\n                ? options.imageLoadFunction\n                : defaultImageLoadFunction;\n        /**\n         * @private\n         * @type {!Object}\n         */\n        _this.params_ = options.params || {};\n        /**\n         * @private\n         * @type {import(\"../Image.js\").default}\n         */\n        _this.image_ = null;\n        /**\n         * @private\n         * @type {import(\"../size.js\").Size}\n         */\n        _this.imageSize_ = [0, 0];\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.renderedRevision_ = 0;\n        /**\n         * @private\n         * @type {number}\n         */\n        _this.ratio_ = options.ratio !== undefined ? options.ratio : 1.5;\n        return _this;\n    }\n    /**\n     * Get the user-provided params, i.e. those passed to the constructor through\n     * the \"params\" option, and possibly updated using the updateParams method.\n     * @return {Object} Params.\n     * @api\n     */\n    ImageArcGISRest.prototype.getParams = function () {\n        return this.params_;\n    };\n    /**\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {number} resolution Resolution.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @return {import(\"../Image.js\").default} Single image.\n     */\n    ImageArcGISRest.prototype.getImageInternal = function (extent, resolution, pixelRatio, projection) {\n        if (this.url_ === undefined) {\n            return null;\n        }\n        resolution = this.findNearestResolution(resolution);\n        pixelRatio = this.hidpi_ ? pixelRatio : 1;\n        var image = this.image_;\n        if (image &&\n            this.renderedRevision_ == this.getRevision() &&\n            image.getResolution() == resolution &&\n            image.getPixelRatio() == pixelRatio &&\n            containsExtent(image.getExtent(), extent)) {\n            return image;\n        }\n        var params = {\n            'F': 'image',\n            'FORMAT': 'PNG32',\n            'TRANSPARENT': true,\n        };\n        assign(params, this.params_);\n        extent = extent.slice();\n        var centerX = (extent[0] + extent[2]) / 2;\n        var centerY = (extent[1] + extent[3]) / 2;\n        if (this.ratio_ != 1) {\n            var halfWidth = (this.ratio_ * getWidth(extent)) / 2;\n            var halfHeight = (this.ratio_ * getHeight(extent)) / 2;\n            extent[0] = centerX - halfWidth;\n            extent[1] = centerY - halfHeight;\n            extent[2] = centerX + halfWidth;\n            extent[3] = centerY + halfHeight;\n        }\n        var imageResolution = resolution / pixelRatio;\n        // Compute an integer width and height.\n        var width = Math.ceil(getWidth(extent) / imageResolution);\n        var height = Math.ceil(getHeight(extent) / imageResolution);\n        // Modify the extent to match the integer width and height.\n        extent[0] = centerX - (imageResolution * width) / 2;\n        extent[2] = centerX + (imageResolution * width) / 2;\n        extent[1] = centerY - (imageResolution * height) / 2;\n        extent[3] = centerY + (imageResolution * height) / 2;\n        this.imageSize_[0] = width;\n        this.imageSize_[1] = height;\n        var url = this.getRequestUrl_(extent, this.imageSize_, pixelRatio, projection, params);\n        this.image_ = new ImageWrapper(extent, resolution, pixelRatio, url, this.crossOrigin_, this.imageLoadFunction_);\n        this.renderedRevision_ = this.getRevision();\n        this.image_.addEventListener(EventType.CHANGE, this.handleImageChange.bind(this));\n        return this.image_;\n    };\n    /**\n     * Return the image load function of the source.\n     * @return {import(\"../Image.js\").LoadFunction} The image load function.\n     * @api\n     */\n    ImageArcGISRest.prototype.getImageLoadFunction = function () {\n        return this.imageLoadFunction_;\n    };\n    /**\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {import(\"../size.js\").Size} size Size.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     * @param {Object} params Params.\n     * @return {string} Request URL.\n     * @private\n     */\n    ImageArcGISRest.prototype.getRequestUrl_ = function (extent, size, pixelRatio, projection, params) {\n        // ArcGIS Server only wants the numeric portion of the projection ID.\n        var srid = projection.getCode().split(':').pop();\n        params['SIZE'] = size[0] + ',' + size[1];\n        params['BBOX'] = extent.join(',');\n        params['BBOXSR'] = srid;\n        params['IMAGESR'] = srid;\n        params['DPI'] = Math.round(90 * pixelRatio);\n        var url = this.url_;\n        var modifiedUrl = url\n            .replace(/MapServer\\/?$/, 'MapServer/export')\n            .replace(/ImageServer\\/?$/, 'ImageServer/exportImage');\n        if (modifiedUrl == url) {\n            assert(false, 50); // `options.featureTypes` should be an Array\n        }\n        return appendParams(modifiedUrl, params);\n    };\n    /**\n     * Return the URL used for this ArcGIS source.\n     * @return {string|undefined} URL.\n     * @api\n     */\n    ImageArcGISRest.prototype.getUrl = function () {\n        return this.url_;\n    };\n    /**\n     * Set the image load function of the source.\n     * @param {import(\"../Image.js\").LoadFunction} imageLoadFunction Image load function.\n     * @api\n     */\n    ImageArcGISRest.prototype.setImageLoadFunction = function (imageLoadFunction) {\n        this.image_ = null;\n        this.imageLoadFunction_ = imageLoadFunction;\n        this.changed();\n    };\n    /**\n     * Set the URL to use for requests.\n     * @param {string|undefined} url URL.\n     * @api\n     */\n    ImageArcGISRest.prototype.setUrl = function (url) {\n        if (url != this.url_) {\n            this.url_ = url;\n            this.image_ = null;\n            this.changed();\n        }\n    };\n    /**\n     * Update the user-provided params.\n     * @param {Object} params Params.\n     * @api\n     */\n    ImageArcGISRest.prototype.updateParams = function (params) {\n        assign(this.params_, params);\n        this.image_ = null;\n        this.changed();\n    };\n    return ImageArcGISRest;\n}(ImageSource));\nexport default ImageArcGISRest;\n//# sourceMappingURL=ImageArcGISRest.js.map","/**\n * @module ol/uri\n */\n/**\n * Appends query parameters to a URI.\n *\n * @param {string} uri The original URI, which may already have query data.\n * @param {!Object} params An object where keys are URI-encoded parameter keys,\n *     and the values are arbitrary types or arrays.\n * @return {string} The new URI.\n */\nexport function appendParams(uri, params) {\n    var keyParams = [];\n    // Skip any null or undefined parameter values\n    Object.keys(params).forEach(function (k) {\n        if (params[k] !== null && params[k] !== undefined) {\n            keyParams.push(k + '=' + encodeURIComponent(params[k]));\n        }\n    });\n    var qs = keyParams.join('&');\n    // remove any trailing ? or &\n    uri = uri.replace(/[?&]$/, '');\n    // append ? or & depending on whether uri has existing parameters\n    uri = uri.indexOf('?') === -1 ? uri + '?' : uri + '&';\n    return uri + qs;\n}\n//# sourceMappingURL=uri.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/layer/BaseImage\n */\nimport Layer from './Layer.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"../PluggableMap.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link module:ol/Map#addLayer}.\n * @property {import(\"../source/Image.js\").default} [source] Source for this layer.\n */\n/**\n * @classdesc\n * Server-rendered images that are available for arbitrary extents and\n * resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @extends {Layer<import(\"../source/Image.js\").default>}\n * @api\n */\nvar BaseImageLayer = /** @class */ (function (_super) {\n    __extends(BaseImageLayer, _super);\n    /**\n     * @param {Options=} opt_options Layer options.\n     */\n    function BaseImageLayer(opt_options) {\n        var _this = this;\n        var options = opt_options ? opt_options : {};\n        _this = _super.call(this, options) || this;\n        return _this;\n    }\n    return BaseImageLayer;\n}(Layer));\nexport default BaseImageLayer;\n//# sourceMappingURL=BaseImage.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/renderer/canvas/ImageLayer\n */\nimport CanvasLayerRenderer from './Layer.js';\nimport ViewHint from '../../ViewHint.js';\nimport { ENABLE_RASTER_REPROJECTION } from '../../reproj/common.js';\nimport { assign } from '../../obj.js';\nimport { compose as composeTransform, makeInverse } from '../../transform.js';\nimport { containsExtent, intersects } from '../../extent.js';\nimport { createTransformString } from '../../render/canvas.js';\nimport { fromUserExtent } from '../../proj.js';\nimport { getIntersection, isEmpty } from '../../extent.js';\n/**\n * @classdesc\n * Canvas renderer for image layers.\n * @api\n */\nvar CanvasImageLayerRenderer = /** @class */ (function (_super) {\n    __extends(CanvasImageLayerRenderer, _super);\n    /**\n     * @param {import(\"../../layer/Image.js\").default} imageLayer Image layer.\n     */\n    function CanvasImageLayerRenderer(imageLayer) {\n        var _this = _super.call(this, imageLayer) || this;\n        /**\n         * @protected\n         * @type {?import(\"../../ImageBase.js\").default}\n         */\n        _this.image_ = null;\n        return _this;\n    }\n    /**\n     * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n     */\n    CanvasImageLayerRenderer.prototype.getImage = function () {\n        return !this.image_ ? null : this.image_.getImage();\n    };\n    /**\n     * Determine whether render should be called.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @return {boolean} Layer is ready to be rendered.\n     */\n    CanvasImageLayerRenderer.prototype.prepareFrame = function (frameState) {\n        var layerState = frameState.layerStatesArray[frameState.layerIndex];\n        var pixelRatio = frameState.pixelRatio;\n        var viewState = frameState.viewState;\n        var viewResolution = viewState.resolution;\n        var imageSource = this.getLayer().getSource();\n        var hints = frameState.viewHints;\n        var renderedExtent = frameState.extent;\n        if (layerState.extent !== undefined) {\n            renderedExtent = getIntersection(renderedExtent, fromUserExtent(layerState.extent, viewState.projection));\n        }\n        if (!hints[ViewHint.ANIMATING] &&\n            !hints[ViewHint.INTERACTING] &&\n            !isEmpty(renderedExtent)) {\n            if (imageSource) {\n                var projection = viewState.projection;\n                if (!ENABLE_RASTER_REPROJECTION) {\n                    var sourceProjection = imageSource.getProjection();\n                    if (sourceProjection) {\n                        projection = sourceProjection;\n                    }\n                }\n                var image = imageSource.getImage(renderedExtent, viewResolution, pixelRatio, projection);\n                if (image && this.loadImage(image)) {\n                    this.image_ = image;\n                }\n            }\n            else {\n                this.image_ = null;\n            }\n        }\n        return !!this.image_;\n    };\n    /**\n     * Render the layer.\n     * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n     * @param {HTMLElement} target Target that may be used to render content to.\n     * @return {HTMLElement} The rendered element.\n     */\n    CanvasImageLayerRenderer.prototype.renderFrame = function (frameState, target) {\n        var image = this.image_;\n        var imageExtent = image.getExtent();\n        var imageResolution = image.getResolution();\n        var imagePixelRatio = image.getPixelRatio();\n        var layerState = frameState.layerStatesArray[frameState.layerIndex];\n        var pixelRatio = frameState.pixelRatio;\n        var viewState = frameState.viewState;\n        var viewCenter = viewState.center;\n        var viewResolution = viewState.resolution;\n        var size = frameState.size;\n        var scale = (pixelRatio * imageResolution) / (viewResolution * imagePixelRatio);\n        var width = Math.round(size[0] * pixelRatio);\n        var height = Math.round(size[1] * pixelRatio);\n        var rotation = viewState.rotation;\n        if (rotation) {\n            var size_1 = Math.round(Math.sqrt(width * width + height * height));\n            width = size_1;\n            height = size_1;\n        }\n        // set forward and inverse pixel transforms\n        composeTransform(this.pixelTransform, frameState.size[0] / 2, frameState.size[1] / 2, 1 / pixelRatio, 1 / pixelRatio, rotation, -width / 2, -height / 2);\n        makeInverse(this.inversePixelTransform, this.pixelTransform);\n        var canvasTransform = createTransformString(this.pixelTransform);\n        this.useContainer(target, canvasTransform, layerState.opacity);\n        var context = this.context;\n        var canvas = context.canvas;\n        if (canvas.width != width || canvas.height != height) {\n            canvas.width = width;\n            canvas.height = height;\n        }\n        else if (!this.containerReused) {\n            context.clearRect(0, 0, width, height);\n        }\n        // clipped rendering if layer extent is set\n        var clipped = false;\n        if (layerState.extent) {\n            var layerExtent = fromUserExtent(layerState.extent, viewState.projection);\n            clipped =\n                !containsExtent(layerExtent, frameState.extent) &&\n                    intersects(layerExtent, frameState.extent);\n            if (clipped) {\n                this.clipUnrotated(context, frameState, layerExtent);\n            }\n        }\n        var img = image.getImage();\n        var transform = composeTransform(this.tempTransform, width / 2, height / 2, scale, scale, 0, (imagePixelRatio * (imageExtent[0] - viewCenter[0])) / imageResolution, (imagePixelRatio * (viewCenter[1] - imageExtent[3])) / imageResolution);\n        this.renderedResolution = (imageResolution * pixelRatio) / imagePixelRatio;\n        var dx = transform[4];\n        var dy = transform[5];\n        var dw = img.width * transform[0];\n        var dh = img.height * transform[3];\n        assign(context, this.getLayer().getSource().getContextOptions());\n        this.preRender(context, frameState);\n        if (dw >= 0.5 && dh >= 0.5) {\n            var opacity = layerState.opacity;\n            var previousAlpha = void 0;\n            if (opacity !== 1) {\n                previousAlpha = this.context.globalAlpha;\n                this.context.globalAlpha = opacity;\n            }\n            this.context.drawImage(img, 0, 0, +img.width, +img.height, Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh));\n            if (opacity !== 1) {\n                this.context.globalAlpha = previousAlpha;\n            }\n        }\n        this.postRender(context, frameState);\n        if (clipped) {\n            context.restore();\n        }\n        if (canvasTransform !== canvas.style.transform) {\n            canvas.style.transform = canvasTransform;\n        }\n        return this.container;\n    };\n    return CanvasImageLayerRenderer;\n}(CanvasLayerRenderer));\nexport default CanvasImageLayerRenderer;\n//# sourceMappingURL=ImageLayer.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/layer/Image\n */\nimport BaseImageLayer from './BaseImage.js';\nimport CanvasImageLayerRenderer from '../renderer/canvas/ImageLayer.js';\n/**\n * @classdesc\n * Server-rendered images that are available for arbitrary extents and\n * resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @api\n */\nvar ImageLayer = /** @class */ (function (_super) {\n    __extends(ImageLayer, _super);\n    /**\n     * @param {import(\"./BaseImage.js\").Options=} opt_options Layer options.\n     */\n    function ImageLayer(opt_options) {\n        return _super.call(this, opt_options) || this;\n    }\n    /**\n     * Create a renderer for this layer.\n     * @return {import(\"../renderer/Layer.js\").default} A layer renderer.\n     */\n    ImageLayer.prototype.createRenderer = function () {\n        return new CanvasImageLayerRenderer(this);\n    };\n    return ImageLayer;\n}(BaseImageLayer));\nexport default ImageLayer;\n//# sourceMappingURL=Image.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { merge, extend, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query, Predicate } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Adaptors are specific data source type aware interfaces that are used by DataManager to communicate with DataSource.\n * This is the base adaptor class that other adaptors can extend.\n * @hidden\n */\nvar Adaptor = /** @class */ (function () {\n    /**\n     * Constructor for Adaptor class\n     * @param  {DataOptions} ds?\n     * @hidden\n     * @returns aggregates\n     */\n    function Adaptor(ds) {\n        // common options for all the adaptors \n        this.options = {\n            from: 'table',\n            requestType: 'json',\n            sortBy: 'sorted',\n            select: 'select',\n            skip: 'skip',\n            group: 'group',\n            take: 'take',\n            search: 'search',\n            count: 'requiresCounts',\n            where: 'where',\n            aggregates: 'aggregates',\n            expand: 'expand'\n        };\n        /**\n         * Specifies the type of adaptor.\n         * @default Adaptor\n         */\n        this.type = Adaptor;\n        this.dataSource = ds;\n        this.pvt = {};\n    }\n    /**\n     * Returns the data from the query processing.\n     * @param  {Object} data\n     * @param  {DataOptions} ds?\n     * @param  {Query} query?\n     * @param  {XMLHttpRequest} xhr?\n     * @returns Object\n     */\n    Adaptor.prototype.processResponse = function (data, ds, query, xhr) {\n        return data;\n    };\n    return Adaptor;\n}());\nexport { Adaptor };\n/**\n * JsonAdaptor is used to process JSON data. It contains methods to process the given JSON data based on the queries.\n * @hidden\n */\nvar JsonAdaptor = /** @class */ (function (_super) {\n    __extends(JsonAdaptor, _super);\n    function JsonAdaptor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Process the JSON data based on the provided queries.\n     * @param  {DataManager} dataManager\n     * @param  {Query} query\n     * @returns Object\n     */\n    JsonAdaptor.prototype.processQuery = function (dataManager, query) {\n        var result = dataManager.dataSource.json.slice(0);\n        var count = result.length;\n        var countFlg = true;\n        var ret;\n        var key;\n        var lazyLoad = {};\n        var keyCount = 0;\n        var group = [];\n        var page;\n        for (var i = 0; i < query.lazyLoad.length; i++) {\n            keyCount++;\n            lazyLoad[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n        }\n        var agg = {};\n        for (var i = 0; i < query.queries.length; i++) {\n            key = query.queries[i];\n            if ((key.fn === 'onPage' || key.fn === 'onGroup') && query.lazyLoad.length) {\n                if (key.fn === 'onGroup') {\n                    group.push(key.e);\n                }\n                if (key.fn === 'onPage') {\n                    page = key.e;\n                }\n                continue;\n            }\n            ret = this[key.fn].call(this, result, key.e, query);\n            if (key.fn === 'onAggregates') {\n                agg[key.e.field + ' - ' + key.e.type] = ret;\n            }\n            else {\n                result = ret !== undefined ? ret : result;\n            }\n            if (key.fn === 'onPage' || key.fn === 'onSkip' || key.fn === 'onTake' || key.fn === 'onRange') {\n                countFlg = false;\n            }\n            if (countFlg) {\n                count = result.length;\n            }\n        }\n        if (keyCount) {\n            var args = {\n                query: query, lazyLoad: lazyLoad, result: result, group: group, page: page\n            };\n            var lazyLoadData = this.lazyLoadGroup(args);\n            result = lazyLoadData.result;\n            count = lazyLoadData.count;\n        }\n        if (query.isCountRequired) {\n            result = {\n                result: result,\n                count: count,\n                aggregates: agg\n            };\n        }\n        return result;\n    };\n    /**\n     * Perform lazy load grouping in JSON array based on the given query and lazy load details.\n     * @param  {LazyLoadGroupArgs} args\n     */\n    JsonAdaptor.prototype.lazyLoadGroup = function (args) {\n        var count = 0;\n        var agg = this.getAggregate(args.query);\n        var result = args.result;\n        if (!isNullOrUndefined(args.lazyLoad.onDemandGroupInfo)) {\n            var req = args.lazyLoad.onDemandGroupInfo;\n            for (var i = req.where.length - 1; i >= 0; i--) {\n                result = this.onWhere(result, req.where[i]);\n            }\n            if (args.group.length !== req.level) {\n                var field = args.group[req.level].fieldName;\n                result = DataUtil.group(result, field, agg, null, null, args.group[0].comparer, true);\n            }\n            count = result.length;\n            var data = result;\n            result = result.slice(req.skip);\n            result = result.slice(0, req.take);\n            if (args.group.length !== req.level) {\n                this.formGroupResult(result, data);\n            }\n        }\n        else {\n            var field = args.group[0].fieldName;\n            result = DataUtil.group(result, field, agg, null, null, args.group[0].comparer, true);\n            count = result.length;\n            var data = result;\n            if (args.page) {\n                result = this.onPage(result, args.page, args.query);\n            }\n            this.formGroupResult(result, data);\n        }\n        return { result: result, count: count };\n    };\n    JsonAdaptor.prototype.formGroupResult = function (result, data) {\n        if (result.length && data.length) {\n            var uid = 'GroupGuid';\n            var childLevel = 'childLevels';\n            var level = 'level';\n            var records = 'records';\n            result[uid] = data[uid];\n            result[childLevel] = data[childLevel];\n            result[level] = data[level];\n            result[records] = data[records];\n        }\n        return result;\n    };\n    /**\n     * Separate the aggregate query from the given queries\n     * @param  {Query} query\n     */\n    JsonAdaptor.prototype.getAggregate = function (query) {\n        var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n        var agg = [];\n        if (aggQuery.length) {\n            var tmp = void 0;\n            for (var i = 0; i < aggQuery.length; i++) {\n                tmp = aggQuery[i].e;\n                agg.push({ type: tmp.type, field: DataUtil.getValue(tmp.field, query) });\n            }\n        }\n        return agg;\n    };\n    /**\n     * Performs batch update in the JSON array which add, remove and update records.\n     * @param  {DataManager} dm\n     * @param  {CrudOptions} changes\n     * @param  {RemoteArgs} e\n     */\n    JsonAdaptor.prototype.batchRequest = function (dm, changes, e) {\n        var i;\n        var deletedRecordsLen = changes.deletedRecords.length;\n        for (i = 0; i < changes.addedRecords.length; i++) {\n            this.insert(dm, changes.addedRecords[i]);\n        }\n        for (i = 0; i < changes.changedRecords.length; i++) {\n            this.update(dm, e.key, changes.changedRecords[i]);\n        }\n        for (i = 0; i < deletedRecordsLen; i++) {\n            this.remove(dm, e.key, changes.deletedRecords[i]);\n        }\n        return changes;\n    };\n    /**\n     * Performs filter operation with the given data and where query.\n     * @param  {Object[]} ds\n     * @param  {{validate:Function}} e\n     */\n    JsonAdaptor.prototype.onWhere = function (ds, e) {\n        if (!ds || !ds.length) {\n            return ds;\n        }\n        return ds.filter(function (obj) {\n            if (e) {\n                return e.validate(obj);\n            }\n        });\n    };\n    /**\n     * Returns aggregate function based on the aggregate type.\n     * @param  {Object[]} ds\n     * @param  {{field:string} e\n     * @param  {string}} type\n     */\n    JsonAdaptor.prototype.onAggregates = function (ds, e) {\n        var fn = DataUtil.aggregates[e.type];\n        if (!ds || !fn || ds.length === 0) {\n            return null;\n        }\n        return fn(ds, e.field);\n    };\n    /**\n     * Performs search operation based on the given query.\n     * @param  {Object[]} ds\n     * @param  {QueryOptions} e\n     */\n    JsonAdaptor.prototype.onSearch = function (ds, e) {\n        if (!ds || !ds.length) {\n            return ds;\n        }\n        if (e.fieldNames.length === 0) {\n            DataUtil.getFieldList(ds[0], e.fieldNames);\n        }\n        return ds.filter(function (obj) {\n            for (var j = 0; j < e.fieldNames.length; j++) {\n                if (e.comparer.call(obj, DataUtil.getObject(e.fieldNames[j], obj), e.searchKey, e.ignoreCase, e.ignoreAccent)) {\n                    return true;\n                }\n            }\n            return false;\n        });\n    };\n    /**\n     * Sort the data with given direction and field.\n     * @param  {Object[]} ds\n     * @param  {{comparer:(a:Object} e\n     * @param  {Object} b\n     */\n    JsonAdaptor.prototype.onSortBy = function (ds, e, query) {\n        if (!ds || !ds.length) {\n            return ds;\n        }\n        var fnCompare;\n        var field = DataUtil.getValue(e.fieldName, query);\n        if (!field) {\n            return ds.sort(e.comparer);\n        }\n        if (field instanceof Array) {\n            field = field.slice(0);\n            for (var i = field.length - 1; i >= 0; i--) {\n                if (!field[i]) {\n                    continue;\n                }\n                fnCompare = e.comparer;\n                if (DataUtil.endsWith(field[i], ' desc')) {\n                    fnCompare = DataUtil.fnSort('descending');\n                    field[i] = field[i].replace(' desc', '');\n                }\n                ds = DataUtil.sort(ds, field[i], fnCompare);\n            }\n            return ds;\n        }\n        return DataUtil.sort(ds, field, e.comparer);\n    };\n    /**\n     * Group the data based on the given query.\n     * @param  {Object[]} ds\n     * @param  {QueryOptions} e\n     * @param  {Query} query\n     */\n    JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n        if (!ds || !ds.length) {\n            return ds;\n        }\n        var agg = this.getAggregate(query);\n        return DataUtil.group(ds, DataUtil.getValue(e.fieldName, query), agg, null, null, e.comparer);\n    };\n    /**\n     * Retrieves records based on the given page index and size.\n     * @param  {Object[]} ds\n     * @param  {{pageSize:number} e\n     * @param  {number}} pageIndex\n     * @param  {Query} query\n     */\n    JsonAdaptor.prototype.onPage = function (ds, e, query) {\n        var size = DataUtil.getValue(e.pageSize, query);\n        var start = (DataUtil.getValue(e.pageIndex, query) - 1) * size;\n        var end = start + size;\n        if (!ds || !ds.length) {\n            return ds;\n        }\n        return ds.slice(start, end);\n    };\n    /**\n     * Retrieves records based on the given start and end index from query.\n     * @param  {Object[]} ds\n     * @param  {{start:number} e\n     * @param  {number}} end\n     */\n    JsonAdaptor.prototype.onRange = function (ds, e) {\n        if (!ds || !ds.length) {\n            return ds;\n        }\n        return ds.slice(DataUtil.getValue(e.start), DataUtil.getValue(e.end));\n    };\n    /**\n     * Picks the given count of records from the top of the datasource.\n     * @param  {Object[]} ds\n     * @param  {{nos:number}} e\n     */\n    JsonAdaptor.prototype.onTake = function (ds, e) {\n        if (!ds || !ds.length) {\n            return ds;\n        }\n        return ds.slice(0, DataUtil.getValue(e.nos));\n    };\n    /**\n     * Skips the given count of records from the data source.\n     * @param  {Object[]} ds\n     * @param  {{nos:number}} e\n     */\n    JsonAdaptor.prototype.onSkip = function (ds, e) {\n        if (!ds || !ds.length) {\n            return ds;\n        }\n        return ds.slice(DataUtil.getValue(e.nos));\n    };\n    /**\n     * Selects specified columns from the data source.\n     * @param  {Object[]} ds\n     * @param  {{fieldNames:string}} e\n     */\n    JsonAdaptor.prototype.onSelect = function (ds, e) {\n        if (!ds || !ds.length) {\n            return ds;\n        }\n        return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n    };\n    /**\n     * Inserts new record in the table.\n     * @param  {DataManager} dm\n     * @param  {Object} data\n     * @param  {number} position\n     */\n    JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n        if (isNullOrUndefined(position)) {\n            return dm.dataSource.json.push(data);\n        }\n        else {\n            return dm.dataSource.json.splice(position, 0, data);\n        }\n    };\n    /**\n     * Remove the data from the dataSource based on the key field value.\n     * @param  {DataManager} dm\n     * @param  {string} keyField\n     * @param  {Object} value\n     * @param  {string} tableName?\n     * @returns null\n     */\n    JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n        var ds = dm.dataSource.json;\n        var i;\n        if (typeof value === 'object' && !(value instanceof Date)) {\n            value = DataUtil.getObject(keyField, value);\n        }\n        for (i = 0; i < ds.length; i++) {\n            if (DataUtil.getObject(keyField, ds[i]) === value) {\n                break;\n            }\n        }\n        return i !== ds.length ? ds.splice(i, 1) : null;\n    };\n    /**\n     * Updates existing record and saves the changes to the table.\n     * @param  {DataManager} dm\n     * @param  {string} keyField\n     * @param  {Object} value\n     * @param  {string} tableName?\n     * @returns null\n     */\n    JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n        var ds = dm.dataSource.json;\n        var i;\n        var key;\n        if (!isNullOrUndefined(keyField)) {\n            key = getValue(keyField, value);\n        }\n        for (i = 0; i < ds.length; i++) {\n            if (!isNullOrUndefined(keyField) && (getValue(keyField, ds[i])) === key) {\n                break;\n            }\n        }\n        return i < ds.length ? merge(ds[i], value) : null;\n    };\n    return JsonAdaptor;\n}(Adaptor));\nexport { JsonAdaptor };\n/**\n * URL Adaptor of DataManager can be used when you are required to use remote service to retrieve data.\n * It interacts with server-side for all DataManager Queries and CRUD operations.\n * @hidden\n */\nvar UrlAdaptor = /** @class */ (function (_super) {\n    __extends(UrlAdaptor, _super);\n    function UrlAdaptor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Process the query to generate request body.\n     * @param  {DataManager} dm\n     * @param  {Query} query\n     * @param  {Object[]} hierarchyFilters?\n     * @returns p\n     */\n    // tslint:disable-next-line:max-func-body-length\n    UrlAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n        var queries = this.getQueryRequest(query);\n        var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n        var params = query.params;\n        var url = dm.dataSource.url;\n        var temp;\n        var skip;\n        var take = null;\n        var options = this.options;\n        var request = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n        // calc Paging & Range\n        if ('onPage' in singles) {\n            temp = singles.onPage;\n            skip = DataUtil.getValue(temp.pageIndex, query);\n            take = DataUtil.getValue(temp.pageSize, query);\n            skip = (skip - 1) * take;\n        }\n        else if ('onRange' in singles) {\n            temp = singles.onRange;\n            skip = temp.start;\n            take = temp.end - temp.start;\n        }\n        // Sorting\n        for (var i = 0; i < queries.sorts.length; i++) {\n            temp = DataUtil.getValue(queries.sorts[i].e.fieldName, query);\n            request.sorts.push(DataUtil.callAdaptorFunction(this, 'onEachSort', { name: temp, direction: queries.sorts[i].e.direction }, query));\n        }\n        // hierarchy\n        if (hierarchyFilters) {\n            temp = this.getFiltersFrom(hierarchyFilters, query);\n            if (temp) {\n                request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n            }\n        }\n        // Filters\n        for (var i = 0; i < queries.filters.length; i++) {\n            request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query));\n            var keys_3 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n            for (var _i = 0, keys_1 = keys_3; _i < keys_1.length; _i++) {\n                var prop = keys_1[_i];\n                if (DataUtil.isNull((request)[prop])) {\n                    delete request[prop];\n                }\n            }\n        }\n        // Searches\n        for (var i = 0; i < queries.searches.length; i++) {\n            temp = queries.searches[i].e;\n            request.searches.push(DataUtil.callAdaptorFunction(this, 'onEachSearch', {\n                fields: temp.fieldNames,\n                operator: temp.operator,\n                key: temp.searchKey,\n                ignoreCase: temp.ignoreCase\n            }, query));\n        }\n        // Grouping\n        for (var i = 0; i < queries.groups.length; i++) {\n            request.groups.push(DataUtil.getValue(queries.groups[i].e.fieldName, query));\n        }\n        // aggregates\n        for (var i = 0; i < queries.aggregates.length; i++) {\n            temp = queries.aggregates[i].e;\n            request.aggregates.push({ type: temp.type, field: DataUtil.getValue(temp.field, query) });\n        }\n        var req = {};\n        this.getRequestQuery(options, query, singles, request, req);\n        // Params\n        DataUtil.callAdaptorFunction(this, 'addParams', { dm: dm, query: query, params: params, reqParams: req });\n        if (query.lazyLoad.length) {\n            for (var i = 0; i < query.lazyLoad.length; i++) {\n                req[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n            }\n        }\n        // cleanup\n        var keys = Object.keys(req);\n        for (var _a = 0, keys_2 = keys; _a < keys_2.length; _a++) {\n            var prop = keys_2[_a];\n            if (DataUtil.isNull(req[prop]) || req[prop] === '' || req[prop].length === 0) {\n                delete req[prop];\n            }\n        }\n        if (!(options.skip in req && options.take in req) && take !== null) {\n            req[options.skip] = DataUtil.callAdaptorFunction(this, 'onSkip', skip, query);\n            req[options.take] = DataUtil.callAdaptorFunction(this, 'onTake', take, query);\n        }\n        var p = this.pvt;\n        this.pvt = {};\n        if (this.options.requestType === 'json') {\n            return {\n                data: JSON.stringify(req, DataUtil.parse.jsonDateReplacer),\n                url: url,\n                pvtData: p,\n                type: 'POST',\n                contentType: 'application/json; charset=utf-8'\n            };\n        }\n        temp = this.convertToQueryString(req, query, dm);\n        temp = (dm.dataSource.url.indexOf('?') !== -1 ? '&' : '/') + temp;\n        return {\n            type: 'GET', url: temp.length ? url.replace(/\\/*$/, temp) : url, pvtData: p\n        };\n    };\n    UrlAdaptor.prototype.getRequestQuery = function (options, query, singles, request, request1) {\n        var param = 'param';\n        var req = request1;\n        req[options.from] = query.fromTable;\n        if (options.apply && query.distincts.length) {\n            req[options.apply] = 'onDistinct' in this ? DataUtil.callAdaptorFunction(this, 'onDistinct', query.distincts) : '';\n        }\n        if (!query.distincts.length && options.expand) {\n            req[options.expand] = 'onExpand' in this && 'onSelect' in singles ?\n                DataUtil.callAdaptorFunction(this, 'onExpand', { selects: DataUtil.getValue(singles.onSelect.fieldNames, query), expands: query.expands }, query) : query.expands;\n        }\n        req[options.select] = 'onSelect' in singles && !query.distincts.length ?\n            DataUtil.callAdaptorFunction(this, 'onSelect', DataUtil.getValue(singles.onSelect.fieldNames, query), query) : '';\n        req[options.count] = query.isCountRequired ? DataUtil.callAdaptorFunction(this, 'onCount', query.isCountRequired, query) : '';\n        req[options.search] = request.searches.length ? DataUtil.callAdaptorFunction(this, 'onSearch', request.searches, query) : '';\n        req[options.skip] = 'onSkip' in singles ?\n            DataUtil.callAdaptorFunction(this, 'onSkip', DataUtil.getValue(singles.onSkip.nos, query), query) : '';\n        req[options.take] = 'onTake' in singles ?\n            DataUtil.callAdaptorFunction(this, 'onTake', DataUtil.getValue(singles.onTake.nos, query), query) : '';\n        req[options.where] = request.filters.length || request.searches.length ?\n            DataUtil.callAdaptorFunction(this, 'onWhere', request.filters, query) : '';\n        req[options.sortBy] = request.sorts.length ? DataUtil.callAdaptorFunction(this, 'onSortBy', request.sorts, query) : '';\n        req[options.group] = request.groups.length ? DataUtil.callAdaptorFunction(this, 'onGroup', request.groups, query) : '';\n        req[options.aggregates] = request.aggregates.length ?\n            DataUtil.callAdaptorFunction(this, 'onAggregates', request.aggregates, query) : '';\n        req[param] = [];\n    };\n    /**\n     * Convert the object from processQuery to string which can be added query string.\n     * @param  {Object} req\n     * @param  {Query} query\n     * @param  {DataManager} dm\n     */\n    UrlAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n        return '';\n        // this needs to be overridden\n    };\n    /**\n     * Return the data from the data manager processing.\n     * @param  {DataResult} data\n     * @param  {DataOptions} ds?\n     * @param  {Query} query?\n     * @param  {XMLHttpRequest} xhr?\n     * @param  {Object} request?\n     * @param  {CrudOptions} changes?\n     */\n    UrlAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n        if (xhr && xhr.getResponseHeader('Content-Type') &&\n            xhr.getResponseHeader('Content-Type').indexOf('application/json') !== -1) {\n            var handleTimeZone = DataUtil.timeZoneHandling;\n            if (ds && !ds.timeZoneHandling) {\n                DataUtil.timeZoneHandling = false;\n            }\n            data = DataUtil.parse.parseJson(data);\n            DataUtil.timeZoneHandling = handleTimeZone;\n        }\n        var requests = request;\n        var pvt = requests.pvtData || {};\n        var groupDs = data ? data.groupDs : [];\n        if (xhr && xhr.getResponseHeader('Content-Type') &&\n            xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n            return (query.isCountRequired ? { result: [], count: 0 } : []);\n        }\n        var d = JSON.parse(requests.data);\n        if (d && d.action === 'batch' && data && data.addedRecords) {\n            changes.addedRecords = data.addedRecords;\n            return changes;\n        }\n        if (data && data.d) {\n            data = data.d;\n        }\n        var args = {};\n        if (data && 'count' in data) {\n            args.count = data.count;\n        }\n        args.result = data && data.result ? data.result : data;\n        var isExpand = false;\n        if (Array.isArray(data.result) && data.result.length) {\n            var key = 'key';\n            var val = 'value';\n            var level = 'level';\n            if (!isNullOrUndefined(data.result[0][key])) {\n                args.result = this.formRemoteGroupedData(args.result, 1, pvt.groups.length - 1);\n            }\n            if (query && query.lazyLoad.length && pvt.groups.length) {\n                for (var i = 0; i < query.lazyLoad.length; i++) {\n                    if (query.lazyLoad[i][key] === 'onDemandGroupInfo') {\n                        var value = query.lazyLoad[i][val][level];\n                        if (pvt.groups.length === value) {\n                            isExpand = true;\n                        }\n                    }\n                }\n            }\n        }\n        if (!isExpand) {\n            this.getAggregateResult(pvt, data, args, groupDs, query);\n        }\n        return DataUtil.isNull(args.count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n    };\n    UrlAdaptor.prototype.formRemoteGroupedData = function (data, level, childLevel) {\n        for (var i = 0; i < data.length; i++) {\n            if (data[i].items.length && Object.keys(data[i].items[0]).indexOf('key') > -1) {\n                this.formRemoteGroupedData(data[i].items, level + 1, childLevel - 1);\n            }\n        }\n        var uid = 'GroupGuid';\n        var childLvl = 'childLevels';\n        var lvl = 'level';\n        var records = 'records';\n        data[uid] = consts[uid];\n        data[lvl] = level;\n        data[childLvl] = childLevel;\n        data[records] = data[0].items.length ? this.getGroupedRecords(data, !isNullOrUndefined(data[0].items[records])) : [];\n        return data;\n    };\n    UrlAdaptor.prototype.getGroupedRecords = function (data, hasRecords) {\n        var childGroupedRecords = [];\n        var records = 'records';\n        for (var i = 0; i < data.length; i++) {\n            if (!hasRecords) {\n                for (var j = 0; j < data[i].items.length; j++) {\n                    childGroupedRecords.push(data[i].items[j]);\n                }\n            }\n            else {\n                childGroupedRecords = childGroupedRecords.concat(data[i].items[records]);\n            }\n        }\n        return childGroupedRecords;\n    };\n    /**\n     * Add the group query to the adaptor`s option.\n     * @param  {Object[]} e\n     * @returns void\n     */\n    UrlAdaptor.prototype.onGroup = function (e) {\n        this.pvt.groups = e;\n        return e;\n    };\n    /**\n     * Add the aggregate query to the adaptor`s option.\n     * @param  {Aggregates[]} e\n     * @returns void\n     */\n    UrlAdaptor.prototype.onAggregates = function (e) {\n        this.pvt.aggregates = e;\n    };\n    /**\n     * Prepare the request body based on the newly added, removed and updated records.\n     * The result is used by the batch request.\n     * @param  {DataManager} dm\n     * @param  {CrudOptions} changes\n     * @param  {Object} e\n     */\n    UrlAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n        var url;\n        var key;\n        return {\n            type: 'POST',\n            url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.removeUrl || dm.dataSource.url,\n            contentType: 'application/json; charset=utf-8',\n            dataType: 'json',\n            data: JSON.stringify(extend({}, {\n                changed: changes.changedRecords,\n                added: changes.addedRecords,\n                deleted: changes.deletedRecords,\n                action: 'batch',\n                table: e[url],\n                key: e[key]\n            }, DataUtil.getAddParams(this, dm, query)))\n        };\n    };\n    /**\n     * Method will trigger before send the request to server side.\n     * Used to set the custom header or modify the request options.\n     * @param  {DataManager} dm\n     * @param  {XMLHttpRequest} request\n     * @returns void\n     */\n    UrlAdaptor.prototype.beforeSend = function (dm, request) {\n        // need to extend this method\n    };\n    /**\n     * Prepare and returns request body which is used to insert a new record in the table.\n     * @param  {DataManager} dm\n     * @param  {Object} data\n     * @param  {string} tableName\n     */\n    UrlAdaptor.prototype.insert = function (dm, data, tableName, query) {\n        return {\n            url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n            data: JSON.stringify(extend({}, {\n                value: data,\n                table: tableName,\n                action: 'insert'\n            }, DataUtil.getAddParams(this, dm, query)))\n        };\n    };\n    /**\n     * Prepare and return request body which is used to remove record from the table.\n     * @param  {DataManager} dm\n     * @param  {string} keyField\n     * @param  {number|string} value\n     * @param  {string} tableName\n     */\n    UrlAdaptor.prototype.remove = function (dm, keyField, value, tableName, query) {\n        return {\n            type: 'POST',\n            url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n            data: JSON.stringify(extend({}, {\n                key: value,\n                keyColumn: keyField,\n                table: tableName,\n                action: 'remove'\n            }, DataUtil.getAddParams(this, dm, query)))\n        };\n    };\n    /**\n     * Prepare and return request body which is used to update record.\n     * @param  {DataManager} dm\n     * @param  {string} keyField\n     * @param  {Object} value\n     * @param  {string} tableName\n     */\n    UrlAdaptor.prototype.update = function (dm, keyField, value, tableName, query) {\n        return {\n            type: 'POST',\n            url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n            data: JSON.stringify(extend({}, {\n                value: value,\n                action: 'update',\n                keyColumn: keyField,\n                key: DataUtil.getObject(keyField, value),\n                table: tableName\n            }, DataUtil.getAddParams(this, dm, query)))\n        };\n    };\n    /**\n     * To generate the predicate based on the filtered query.\n     * @param  {Object[]|string[]|number[]} data\n     * @param  {Query} query\n     * @hidden\n     */\n    UrlAdaptor.prototype.getFiltersFrom = function (data, query) {\n        var key = query.fKey;\n        var value;\n        var prop = key;\n        var pKey = query.key;\n        var predicats = [];\n        if (typeof data[0] !== 'object') {\n            prop = null;\n        }\n        for (var i = 0; i < data.length; i++) {\n            if (typeof data[0] === 'object') {\n                value = DataUtil.getObject(pKey || prop, data[i]);\n            }\n            else {\n                value = data[i];\n            }\n            predicats.push(new Predicate(key, 'equal', value));\n        }\n        return Predicate.or(predicats);\n    };\n    UrlAdaptor.prototype.getAggregateResult = function (pvt, data, args, groupDs, query) {\n        var pData = data;\n        if (data && data.result) {\n            pData = data.result;\n        }\n        if (pvt && pvt.aggregates && pvt.aggregates.length) {\n            var agg = pvt.aggregates;\n            var fn = void 0;\n            var aggregateData = pData;\n            var res = {};\n            if (data.aggregate) {\n                aggregateData = data.aggregate;\n            }\n            for (var i = 0; i < agg.length; i++) {\n                fn = DataUtil.aggregates[agg[i].type];\n                if (fn) {\n                    res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n                }\n            }\n            args.aggregates = res;\n        }\n        var key = 'key';\n        var isServerGrouping = Array.isArray(data.result) && data.result.length && !isNullOrUndefined(data.result[0][key]);\n        if (pvt && pvt.groups && pvt.groups.length && !isServerGrouping) {\n            var groups = pvt.groups;\n            for (var i = 0; i < groups.length; i++) {\n                var level = null;\n                if (!isNullOrUndefined(groupDs)) {\n                    groupDs = DataUtil.group(groupDs, groups[i]);\n                }\n                var groupQuery = Query.filterQueries(query.queries, 'onGroup')[i].e;\n                pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs, groupQuery.comparer);\n            }\n            args.result = pData;\n        }\n        return args;\n    };\n    UrlAdaptor.prototype.getQueryRequest = function (query) {\n        var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n        req.sorts = Query.filterQueries(query.queries, 'onSortBy');\n        req.groups = Query.filterQueries(query.queries, 'onGroup');\n        req.filters = Query.filterQueries(query.queries, 'onWhere');\n        req.searches = Query.filterQueries(query.queries, 'onSearch');\n        req.aggregates = Query.filterQueries(query.queries, 'onAggregates');\n        return req;\n    };\n    UrlAdaptor.prototype.addParams = function (options) {\n        var req = options.reqParams;\n        if (options.params.length) {\n            req.params = {};\n        }\n        for (var _i = 0, _a = options.params; _i < _a.length; _i++) {\n            var tmp = _a[_i];\n            if (req[tmp.key]) {\n                throw new Error('Query() - addParams: Custom Param is conflicting other request arguments');\n            }\n            req[tmp.key] = tmp.value;\n            if (tmp.fn) {\n                req[tmp.key] = tmp.fn.call(options.query, tmp.key, options.query, options.dm);\n            }\n            req.params[tmp.key] = req[tmp.key];\n        }\n    };\n    return UrlAdaptor;\n}(Adaptor));\nexport { UrlAdaptor };\n/**\n * OData Adaptor that is extended from URL Adaptor, is used for consuming data through OData Service.\n * @hidden\n */\nvar ODataAdaptor = /** @class */ (function (_super) {\n    __extends(ODataAdaptor, _super);\n    function ODataAdaptor(props) {\n        var _this = _super.call(this) || this;\n        // options replaced the default adaptor options\n        _this.options = extend({}, _this.options, {\n            requestType: 'get',\n            accept: 'application/json;odata=light;q=1,application/json;odata=verbose;q=0.5',\n            multipartAccept: 'multipart/mixed',\n            sortBy: '$orderby',\n            select: '$select',\n            skip: '$skip',\n            take: '$top',\n            count: '$inlinecount',\n            where: '$filter',\n            expand: '$expand',\n            batch: '$batch',\n            changeSet: '--changeset_',\n            batchPre: 'batch_',\n            contentId: 'Content-Id: ',\n            batchContent: 'Content-Type: multipart/mixed; boundary=',\n            changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n            batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n            updateType: 'PUT'\n        });\n        extend(_this.options, props || {});\n        return _this;\n    }\n    ODataAdaptor.prototype.getModuleName = function () {\n        return 'ODataAdaptor';\n    };\n    /**\n     * Generate request string based on the filter criteria from query.\n     * @param  {Predicate} pred\n     * @param  {boolean} requiresCast?\n     */\n    ODataAdaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n        var returnValue = '';\n        var operator;\n        var guid;\n        var val = predicate.value;\n        var type = typeof val;\n        var field = predicate.field ? ODataAdaptor.getField(predicate.field) : null;\n        if (val instanceof Date) {\n            val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n        }\n        if (type === 'string') {\n            val = encodeURIComponent(val);\n            val = '\\'' + val + '\\'';\n            if (requiresCast) {\n                field = 'cast(' + field + ', \\'Edm.String\\')';\n            }\n            if (DataUtil.parse.isGuid(val)) {\n                guid = 'guid';\n            }\n            if (predicate.ignoreCase) {\n                if (!guid) {\n                    field = 'tolower(' + field + ')';\n                }\n                val = val.toLowerCase();\n            }\n        }\n        operator = DataUtil.odBiOperator[predicate.operator];\n        if (operator) {\n            returnValue += field;\n            returnValue += operator;\n            if (guid) {\n                returnValue += guid;\n            }\n            return returnValue + val;\n        }\n        if (!isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor') {\n            operator = DataUtil.odv4UniOperator[predicate.operator];\n        }\n        else {\n            operator = DataUtil.odUniOperator[predicate.operator];\n        }\n        if (operator === 'substringof') {\n            var temp = val;\n            val = field;\n            field = temp;\n        }\n        returnValue += operator + '(';\n        returnValue += field + ',';\n        if (guid) {\n            returnValue += guid;\n        }\n        returnValue += val + ')';\n        return returnValue;\n    };\n    ODataAdaptor.prototype.addParams = function (options) {\n        _super.prototype.addParams.call(this, options);\n        delete options.reqParams.params;\n    };\n    /**\n     * Generate request string based on the multiple filter criteria from query.\n     * @param  {Predicate} pred\n     * @param  {boolean} requiresCast?\n     */\n    ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n        var res = [];\n        for (var i = 0; i < predicate.predicates.length; i++) {\n            res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n        }\n        return res.join(' ' + predicate.condition + ' ');\n    };\n    /**\n     * Generate query string based on the multiple filter criteria from query.\n     * @param  {Predicate} filter\n     * @param  {boolean} requiresCast?\n     */\n    ODataAdaptor.prototype.onEachWhere = function (filter, query, requiresCast) {\n        return filter.isComplex ? this.onComplexPredicate(filter, query, requiresCast) : this.onPredicate(filter, query, requiresCast);\n    };\n    /**\n     * Generate query string based on the multiple filter criteria from query.\n     * @param  {string[]} filters\n     */\n    ODataAdaptor.prototype.onWhere = function (filters) {\n        if (this.pvt.search) {\n            filters.push(this.onEachWhere(this.pvt.search, null, true));\n        }\n        return filters.join(' and ');\n    };\n    /**\n     * Generate query string based on the multiple search criteria from query.\n     * @param  {{fields:string[]} e\n     * @param  {string} operator\n     * @param  {string} key\n     * @param  {boolean}} ignoreCase\n     */\n    ODataAdaptor.prototype.onEachSearch = function (e) {\n        if (e.fields && e.fields.length === 0) {\n            DataUtil.throwError('Query() - Search : oData search requires list of field names to search');\n        }\n        var filter = this.pvt.search || [];\n        for (var i = 0; i < e.fields.length; i++) {\n            filter.push(new Predicate(e.fields[i], e.operator, e.key, e.ignoreCase));\n        }\n        this.pvt.search = filter;\n    };\n    /**\n     * Generate query string based on the search criteria from query.\n     * @param  {Object} e\n     */\n    ODataAdaptor.prototype.onSearch = function (e) {\n        this.pvt.search = Predicate.or(this.pvt.search);\n        return '';\n    };\n    /**\n     * Generate query string based on multiple sort criteria from query.\n     * @param  {QueryOptions} e\n     */\n    ODataAdaptor.prototype.onEachSort = function (e) {\n        var res = [];\n        if (e.name instanceof Array) {\n            for (var i = 0; i < e.name.length; i++) {\n                res.push(ODataAdaptor.getField(e.name[i]) + (e.direction === 'descending' ? ' desc' : ''));\n            }\n        }\n        else {\n            res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n        }\n        return res.join(',');\n    };\n    /**\n     * Returns sort query string.\n     * @param  {string[]} e\n     */\n    ODataAdaptor.prototype.onSortBy = function (e) {\n        return e.reverse().join(',');\n    };\n    /**\n     * Adds the group query to the adaptor option.\n     * @param  {Object[]} e\n     * @returns string\n     */\n    ODataAdaptor.prototype.onGroup = function (e) {\n        this.pvt.groups = e;\n        return [];\n    };\n    /**\n     * Returns the select query string.\n     * @param  {string[]} e\n     */\n    ODataAdaptor.prototype.onSelect = function (e) {\n        for (var i = 0; i < e.length; i++) {\n            e[i] = ODataAdaptor.getField(e[i]);\n        }\n        return e.join(',');\n    };\n    /**\n     * Add the aggregate query to the adaptor option.\n     * @param  {Object[]} e\n     * @returns string\n     */\n    ODataAdaptor.prototype.onAggregates = function (e) {\n        this.pvt.aggregates = e;\n        return '';\n    };\n    /**\n     * Returns the query string which requests total count from the data source.\n     * @param  {boolean} e\n     * @returns string\n     */\n    ODataAdaptor.prototype.onCount = function (e) {\n        return e === true ? 'allpages' : '';\n    };\n    /**\n     * Method will trigger before send the request to server side.\n     * Used to set the custom header or modify the request options.\n     * @param  {DataManager} dm\n     * @param  {XMLHttpRequest} request\n     * @param  {Ajax} settings?\n     */\n    ODataAdaptor.prototype.beforeSend = function (dm, request, settings) {\n        if (DataUtil.endsWith(settings.url, this.options.batch) && settings.type.toLowerCase() === 'post') {\n            request.setRequestHeader('Accept', this.options.multipartAccept);\n            request.setRequestHeader('DataServiceVersion', '2.0');\n            request.overrideMimeType('text/plain; charset=x-user-defined');\n        }\n        else {\n            request.setRequestHeader('Accept', this.options.accept);\n        }\n        request.setRequestHeader('DataServiceVersion', '2.0');\n        request.setRequestHeader('MaxDataServiceVersion', '2.0');\n    };\n    /**\n     * Returns the data from the query processing.\n     * @param  {DataResult} data\n     * @param  {DataOptions} ds?\n     * @param  {Query} query?\n     * @param  {XMLHttpRequest} xhr?\n     * @param  {Ajax} request?\n     * @param  {CrudOptions} changes?\n     * @returns aggregateResult\n     */\n    ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n        var metaCheck = 'odata.metadata';\n        if ((request && request.type === 'GET') && !this.rootUrl && data[metaCheck]) {\n            var dataUrls = data[metaCheck].split('/$metadata#');\n            this.rootUrl = dataUrls[0];\n            this.resourceTableName = dataUrls[1];\n        }\n        var pvtData = 'pvtData';\n        if (!isNullOrUndefined(data.d)) {\n            var dataCopy = ((query && query.isCountRequired) ? data.d.results : data.d);\n            var metaData = '__metadata';\n            if (!isNullOrUndefined(dataCopy)) {\n                for (var i = 0; i < dataCopy.length; i++) {\n                    if (!isNullOrUndefined(dataCopy[i][metaData])) {\n                        delete dataCopy[i][metaData];\n                    }\n                }\n            }\n        }\n        var pvt = request && request[pvtData];\n        var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n        if (emptyAndBatch) {\n            return emptyAndBatch;\n        }\n        var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n        var count = null;\n        var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n        if (query && query.isCountRequired) {\n            var oDataCount = '__count';\n            if (data[oDataCount] || data['odata.count']) {\n                count = data[oDataCount] || data['odata.count'];\n            }\n            if (data.d) {\n                data = data.d;\n            }\n            if (data[oDataCount] || data['odata.count']) {\n                count = data[oDataCount] || data['odata.count'];\n            }\n        }\n        if (version === 3 && data.value) {\n            data = data.value;\n        }\n        if (data.d) {\n            data = data.d;\n        }\n        if (version < 3 && data.results) {\n            data = data.results;\n        }\n        var args = {};\n        args.count = count;\n        args.result = data;\n        this.getAggregateResult(pvt, data, args, null, query);\n        return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n    };\n    /**\n     * Converts the request object to query string.\n     * @param  {Object} req\n     * @param  {Query} query\n     * @param  {DataManager} dm\n     * @returns tableName\n     */\n    ODataAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n        var res = [];\n        var table = 'table';\n        var tableName = request[table] || '';\n        var format = '$format';\n        delete request[table];\n        if (dm.dataSource.requiresFormat) {\n            request[format] = 'json';\n        }\n        var keys = Object.keys(request);\n        for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\n            var prop = keys_4[_i];\n            res.push(prop + '=' + request[prop]);\n        }\n        res = res.join('&');\n        if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n            return res;\n        }\n        return res.length ? tableName + '?' + res : tableName || '';\n    };\n    ODataAdaptor.prototype.localTimeReplacer = function (key, convertObj) {\n        for (var _i = 0, _a = !isNullOrUndefined(convertObj) ? Object.keys(convertObj) : []; _i < _a.length; _i++) {\n            var prop = _a[_i];\n            if ((convertObj[prop] instanceof Date)) {\n                convertObj[prop] = DataUtil.dateParse.toLocalTime(convertObj[prop]);\n            }\n        }\n        return convertObj;\n    };\n    /**\n     * Prepare and returns request body which is used to insert a new record in the table.\n     * @param  {DataManager} dm\n     * @param  {Object} data\n     * @param  {string} tableName?\n     */\n    ODataAdaptor.prototype.insert = function (dm, data, tableName) {\n        return {\n            url: (dm.dataSource.insertUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : ''),\n            data: JSON.stringify(data, this.options.localTime ? this.localTimeReplacer : null)\n        };\n    };\n    /**\n     * Prepare and return request body which is used to remove record from the table.\n     * @param  {DataManager} dm\n     * @param  {string} keyField\n     * @param  {number} value\n     * @param  {string} tableName?\n     */\n    ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n        var url;\n        if (typeof value === 'string' && !DataUtil.parse.isGuid(value)) {\n            url = \"('\" + value + \"')\";\n        }\n        else {\n            url = \"(\" + value + \")\";\n        }\n        return {\n            type: 'DELETE',\n            url: (dm.dataSource.removeUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : '') + url\n        };\n    };\n    /**\n     * Updates existing record and saves the changes to the table.\n     * @param  {DataManager} dm\n     * @param  {string} keyField\n     * @param  {Object} value\n     * @param  {string} tableName?\n     * @returns this\n     */\n    ODataAdaptor.prototype.update = function (dm, keyField, value, tableName, query, original) {\n        if (this.options.updateType === 'PATCH' && !isNullOrUndefined(original)) {\n            value = this.compareAndRemove(value, original, keyField);\n        }\n        var url;\n        if (typeof value[keyField] === 'string' && !DataUtil.parse.isGuid(value[keyField])) {\n            url = \"('\" + value[keyField] + \"')\";\n        }\n        else {\n            url = \"(\" + value[keyField] + \")\";\n        }\n        return {\n            type: this.options.updateType,\n            url: (dm.dataSource.updateUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : '') + url,\n            data: JSON.stringify(value, this.options.localTime ? this.localTimeReplacer : null),\n            accept: this.options.accept\n        };\n    };\n    /**\n     * Prepare the request body based on the newly added, removed and updated records.\n     * The result is used by the batch request.\n     * @param  {DataManager} dm\n     * @param  {CrudOptions} changes\n     * @param  {RemoteArgs} e\n     * @returns {Object}\n     */\n    ODataAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n        var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n        var url = this.rootUrl ? this.rootUrl + '/' + this.options.batch :\n            dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n        e.url = this.resourceTableName ? this.resourceTableName : e.url;\n        var args = {\n            url: e.url,\n            key: e.key,\n            cid: 1,\n            cSet: DataUtil.getGuid(this.options.changeSet)\n        };\n        var req = '--' + initialGuid + '\\n';\n        req += 'Content-Type: multipart/mixed; boundary=' + args.cSet.replace('--', '') + '\\n';\n        this.pvt.changeSet = 0;\n        req += this.generateInsertRequest(changes.addedRecords, args, dm);\n        req += this.generateUpdateRequest(changes.changedRecords, args, dm, original ? original.changedRecords : []);\n        req += this.generateDeleteRequest(changes.deletedRecords, args, dm);\n        req += args.cSet + '--\\n';\n        req += '--' + initialGuid + '--';\n        return {\n            type: 'POST',\n            url: url,\n            dataType: 'json',\n            contentType: 'multipart/mixed; charset=UTF-8;boundary=' + initialGuid,\n            data: req\n        };\n    };\n    /**\n     * Generate the string content from the removed records.\n     * The result will be send during batch update.\n     * @param  {Object[]} arr\n     * @param  {RemoteArgs} e\n     * @returns this\n     */\n    ODataAdaptor.prototype.generateDeleteRequest = function (arr, e, dm) {\n        if (!arr) {\n            return '';\n        }\n        var req = '';\n        var stat = {\n            'method': 'DELETE ',\n            'url': function (data, i, key) {\n                var url = DataUtil.getObject(key, data[i]);\n                if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n                    return '(' + url + ')';\n                }\n                else if (url instanceof Date) {\n                    var dateTime = data[i][key];\n                    return '(' + dateTime.toJSON() + ')';\n                }\n                else {\n                    return \"('\" + url + \"')\";\n                }\n            },\n            'data': function (data, i) { return ''; }\n        };\n        req = this.generateBodyContent(arr, e, stat, dm);\n        return req + '\\n';\n    };\n    /**\n     * Generate the string content from the inserted records.\n     * The result will be send during batch update.\n     * @param  {Object[]} arr\n     * @param  {RemoteArgs} e\n     */\n    ODataAdaptor.prototype.generateInsertRequest = function (arr, e, dm) {\n        if (!arr) {\n            return '';\n        }\n        var req = '';\n        var stat = {\n            'method': 'POST ',\n            'url': function (data, i, key) { return ''; },\n            'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n        };\n        req = this.generateBodyContent(arr, e, stat, dm);\n        return req;\n    };\n    /**\n     * Generate the string content from the updated records.\n     * The result will be send during batch update.\n     * @param  {Object[]} arr\n     * @param  {RemoteArgs} e\n     */\n    ODataAdaptor.prototype.generateUpdateRequest = function (arr, e, dm, org) {\n        var _this = this;\n        if (!arr) {\n            return '';\n        }\n        var req = '';\n        arr.forEach(function (change) { return change = _this.compareAndRemove(change, org.filter(function (o) { return DataUtil.getObject(e.key, o) === DataUtil.getObject(e.key, change); })[0], e.key); });\n        var stat = {\n            'method': this.options.updateType + ' ',\n            'url': function (data, i, key) {\n                if (typeof data[i][key] === 'number' || DataUtil.parse.isGuid(data[i][key])) {\n                    return '(' + data[i][key] + ')';\n                }\n                else if (data[i][key] instanceof Date) {\n                    var date = data[i][key];\n                    return '(' + date.toJSON() + ')';\n                }\n                else {\n                    return \"('\" + data[i][key] + \"')\";\n                }\n            },\n            'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n        };\n        req = this.generateBodyContent(arr, e, stat, dm);\n        return req;\n    };\n    ODataAdaptor.getField = function (prop) {\n        return prop.replace(/\\./g, '/');\n    };\n    ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat, dm) {\n        var req = '';\n        for (var i = 0; i < arr.length; i++) {\n            req += '\\n' + e.cSet + '\\n';\n            req += this.options.changeSetContent + '\\n\\n';\n            req += stat.method;\n            if (stat.method === 'POST ') {\n                req += (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n            }\n            else if (stat.method === 'PUT ' || stat.method === 'PATCH ') {\n                req += (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n            }\n            else if (stat.method === 'DELETE ') {\n                req += (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n            }\n            req += 'Accept: ' + this.options.accept + '\\n';\n            req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n            req += this.options.batchChangeSetContentType + '\\n';\n            if (!isNullOrUndefined(arr[i]['@odata.etag'])) {\n                req += 'If-Match: ' + arr[i]['@odata.etag'] + '\\n\\n';\n                delete arr[i]['@odata.etag'];\n            }\n            else {\n                req += '\\n';\n            }\n            req += stat.data(arr, i);\n        }\n        return req;\n    };\n    ODataAdaptor.prototype.processBatchResponse = function (data, query, xhr, request, changes) {\n        if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n            return (query.isCountRequired ? { result: [], count: 0 } : []);\n        }\n        if (request && this.options.batch && DataUtil.endsWith(request.url, this.options.batch) && request.type.toLowerCase() === 'post') {\n            var guid = xhr.getResponseHeader('Content-Type');\n            var cIdx = void 0;\n            var jsonObj = void 0;\n            var d = data + '';\n            guid = guid.substring(guid.indexOf('=batchresponse') + 1);\n            d = d.split(guid);\n            if (d.length < 2) {\n                return {};\n            }\n            d = d[1];\n            var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n            if (exVal) {\n                d.replace(exVal[0], '');\n            }\n            var changeGuid = exVal ? exVal[1] : '';\n            d = d.split(changeGuid);\n            for (var i = d.length; i > -1; i--) {\n                if (!/\\bContent-ID:/i.test(d[i]) || !/\\bHTTP.+201/.test(d[i])) {\n                    continue;\n                }\n                cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n                if (changes.addedRecords[cIdx]) {\n                    jsonObj = DataUtil.parse.parseJson(/^\\{.+\\}/m.exec(d[i])[0]);\n                    extend({}, changes.addedRecords[cIdx], this.processResponse(jsonObj));\n                }\n            }\n            return changes;\n        }\n        return null;\n    };\n    ODataAdaptor.prototype.compareAndRemove = function (data, original, key) {\n        var _this = this;\n        if (isNullOrUndefined(original)) {\n            return data;\n        }\n        Object.keys(data).forEach(function (prop) {\n            if (prop !== key && prop !== '@odata.etag') {\n                if (DataUtil.isPlainObject(data[prop])) {\n                    _this.compareAndRemove(data[prop], original[prop]);\n                    var final = Object.keys(data[prop]).filter(function (data) { return data !== '@odata.etag'; });\n                    if (final.length === 0) {\n                        delete data[prop];\n                    }\n                }\n                else if (data[prop] === original[prop]) {\n                    delete data[prop];\n                }\n                else if (data[prop] && original[prop] && data[prop].valueOf() === original[prop].valueOf()) {\n                    delete data[prop];\n                }\n            }\n        });\n        return data;\n    };\n    return ODataAdaptor;\n}(UrlAdaptor));\nexport { ODataAdaptor };\n/**\n * The OData v4 is an improved version of OData protocols.\n * The DataManager uses the ODataV4Adaptor to consume OData v4 services.\n * @hidden\n */\nvar ODataV4Adaptor = /** @class */ (function (_super) {\n    __extends(ODataV4Adaptor, _super);\n    function ODataV4Adaptor(props) {\n        var _this = _super.call(this, props) || this;\n        // options replaced the default adaptor options\n        _this.options = extend({}, _this.options, {\n            requestType: 'get',\n            accept: 'application/json, text/javascript, */*; q=0.01',\n            multipartAccept: 'multipart/mixed',\n            sortBy: '$orderby',\n            select: '$select',\n            skip: '$skip',\n            take: '$top',\n            count: '$count',\n            search: '$search',\n            where: '$filter',\n            expand: '$expand',\n            batch: '$batch',\n            changeSet: '--changeset_',\n            batchPre: 'batch_',\n            contentId: 'Content-Id: ',\n            batchContent: 'Content-Type: multipart/mixed; boundary=',\n            changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n            batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n            updateType: 'PATCH',\n            localTime: false,\n            apply: '$apply'\n        });\n        extend(_this.options, props || {});\n        return _this;\n    }\n    /**\n     * @hidden\n     */\n    ODataV4Adaptor.prototype.getModuleName = function () {\n        return 'ODataV4Adaptor';\n    };\n    /**\n     * Returns the query string which requests total count from the data source.\n     * @param  {boolean} e\n     * @returns string\n     */\n    ODataV4Adaptor.prototype.onCount = function (e) {\n        return e === true ? 'true' : '';\n    };\n    /**\n     * Generate request string based on the filter criteria from query.\n     * @param  {Predicate} pred\n     * @param  {boolean} requiresCast?\n     */\n    ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n        var returnValue = '';\n        var val = predicate.value;\n        var isDate = val instanceof Date;\n        if (query instanceof Query) {\n            var queries = this.getQueryRequest(query);\n            for (var i = 0; i < queries.filters.length; i++) {\n                if (queries.filters[i].e.key === predicate.value) {\n                    requiresCast = true;\n                }\n            }\n        }\n        returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n        if (isDate) {\n            returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n        }\n        if (DataUtil.parse.isGuid(val)) {\n            returnValue = returnValue.replace('guid', '').replace(/'/g, '');\n        }\n        return returnValue;\n    };\n    /**\n     *  Generate query string based on the multiple search criteria from query.\n     * @param  {{fields:string[]} e\n     * @param  {string} operator\n     * @param  {string} key\n     * @param  {boolean}} ignoreCase\n     */\n    ODataV4Adaptor.prototype.onEachSearch = function (e) {\n        var search = this.pvt.searches || [];\n        search.push(e.key);\n        this.pvt.searches = search;\n    };\n    /**\n     *  Generate query string based on the search criteria from query.\n     * @param  {Object} e\n     */\n    ODataV4Adaptor.prototype.onSearch = function (e) {\n        return this.pvt.searches.join(' OR ');\n    };\n    /**\n     * Returns the expand query string.\n     * @param  {string} e\n     */\n    ODataV4Adaptor.prototype.onExpand = function (e) {\n        var _this = this;\n        var selected = {};\n        var expanded = {};\n        var expands = e.expands.slice();\n        var exArr = [];\n        var selects = e.selects.filter(function (item) { return item.indexOf('.') > -1; });\n        selects.forEach(function (select) {\n            var splits = select.split('.');\n            if (!(splits[0] in selected)) {\n                selected[splits[0]] = [];\n            }\n            selected[splits[0]].push(splits[1]);\n        });\n        //Auto expand from select query\n        Object.keys(selected).forEach(function (expand) {\n            if ((expands.indexOf(expand) === -1)) {\n                expands.push(expand);\n            }\n        });\n        expands.forEach(function (expand) {\n            expanded[expand] = expand in selected ? expand + \"(\" + _this.options.select + \"=\" + selected[expand].join(',') + \")\" : expand;\n        });\n        Object.keys(expanded).forEach(function (ex) { return exArr.push(expanded[ex]); });\n        return exArr.join(',');\n    };\n    /**\n     * Returns the groupby query string.\n     * @param  {string} e\n     */\n    ODataV4Adaptor.prototype.onDistinct = function (distinctFields) {\n        var fields = distinctFields.map(function (field) { return ODataAdaptor.getField(field); }).join(',');\n        return \"groupby((\" + fields + \"))\";\n    };\n    /**\n     * Returns the select query string.\n     * @param  {string[]} e\n     */\n    ODataV4Adaptor.prototype.onSelect = function (e) {\n        return _super.prototype.onSelect.call(this, e.filter(function (item) { return item.indexOf('.') === -1; }));\n    };\n    /**\n     * Method will trigger before send the request to server side.\n     * Used to set the custom header or modify the request options.\n     * @param  {DataManager} dm\n     * @param  {XMLHttpRequest} request\n     * @param  {Ajax} settings\n     * @returns void\n     */\n    ODataV4Adaptor.prototype.beforeSend = function (dm, request, settings) {\n        if (settings.type === 'POST' || settings.type === 'PUT' || settings.type === 'PATCH') {\n            request.setRequestHeader('Prefer', 'return=representation');\n        }\n        request.setRequestHeader('Accept', this.options.accept);\n    };\n    /**\n     * Returns the data from the query processing.\n     * @param  {DataResult} data\n     * @param  {DataOptions} ds?\n     * @param  {Query} query?\n     * @param  {XMLHttpRequest} xhr?\n     * @param  {Ajax} request?\n     * @param  {CrudOptions} changes?\n     * @returns aggregateResult\n     */\n    ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n        var metaName = '@odata.context';\n        if ((request && request.type === 'GET') && !this.rootUrl && data[metaName]) {\n            var dataUrl = data[metaName].split('/$metadata#');\n            this.rootUrl = dataUrl[0];\n            this.resourceTableName = dataUrl[1];\n        }\n        var pvtData = 'pvtData';\n        var pvt = request && request[pvtData];\n        var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n        if (emptyAndBatch) {\n            return emptyAndBatch;\n        }\n        var count = null;\n        var dataCount = '@odata.count';\n        if (query && query.isCountRequired) {\n            if (dataCount in data) {\n                count = data[dataCount];\n            }\n        }\n        data = !isNullOrUndefined(data.value) ? data.value : data;\n        var args = {};\n        args.count = count;\n        args.result = data;\n        this.getAggregateResult(pvt, data, args, null, query);\n        return DataUtil.isNull(count) ? args.result : { result: args.result, count: count, aggregates: args.aggregates };\n    };\n    return ODataV4Adaptor;\n}(ODataAdaptor));\nexport { ODataV4Adaptor };\n/**\n * The Web API is a programmatic interface to define the request and response messages system that is mostly exposed in JSON or XML.\n * The DataManager uses the WebApiAdaptor to consume Web API.\n * Since this adaptor is targeted to interact with Web API created using OData endpoint, it is extended from ODataAdaptor\n * @hidden\n */\nvar WebApiAdaptor = /** @class */ (function (_super) {\n    __extends(WebApiAdaptor, _super);\n    function WebApiAdaptor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    WebApiAdaptor.prototype.getModuleName = function () {\n        return 'WebApiAdaptor';\n    };\n    /**\n     * Prepare and returns request body which is used to insert a new record in the table.\n     * @param  {DataManager} dm\n     * @param  {Object} data\n     * @param  {string} tableName?\n     */\n    WebApiAdaptor.prototype.insert = function (dm, data, tableName) {\n        return {\n            type: 'POST',\n            url: dm.dataSource.url,\n            data: JSON.stringify(data)\n        };\n    };\n    /**\n     * Prepare and return request body which is used to remove record from the table.\n     * @param  {DataManager} dm\n     * @param  {string} keyField\n     * @param  {number} value\n     * @param  {string} tableName?\n     */\n    WebApiAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n        return {\n            type: 'DELETE',\n            url: dm.dataSource.url + '/' + value,\n            data: JSON.stringify(value)\n        };\n    };\n    /**\n     * Prepare and return request body which is used to update record.\n     * @param  {DataManager} dm\n     * @param  {string} keyField\n     * @param  {Object} value\n     * @param  {string} tableName?\n     */\n    WebApiAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n        return {\n            type: 'PUT',\n            url: dm.dataSource.url,\n            data: JSON.stringify(value)\n        };\n    };\n    WebApiAdaptor.prototype.batchRequest = function (dm, changes, e) {\n        var _this = this;\n        var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n        var url = dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n        e.url = this.resourceTableName ? this.resourceTableName : e.url;\n        var req = [];\n        var _loop_1 = function (i, x) {\n            changes.addedRecords.forEach(function (j, d) {\n                var stat = {\n                    'method': 'POST ',\n                    'url': function (data, i, key) { return ''; },\n                    'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n                };\n                req.push('--' + initialGuid);\n                req.push('Content-Type: application/http; msgtype=request', '');\n                req.push('POST ' + '/api/' + (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url)\n                    + stat.url(changes.addedRecords, i, e.key) + ' HTTP/1.1');\n                req.push('Content-Type: ' + 'application/json; charset=utf-8');\n                req.push('Host: ' + location.host);\n                req.push('', j ? JSON.stringify(j) : '');\n            });\n        };\n        //insertion\n        for (var i = 0, x = changes.addedRecords.length; i < x; i++) {\n            _loop_1(i, x);\n        }\n        var _loop_2 = function (i, x) {\n            changes.changedRecords.forEach(function (j, d) {\n                var stat = {\n                    'method': _this.options.updateType + ' ',\n                    'url': function (data, i, key) { return ''; },\n                    'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n                };\n                req.push('--' + initialGuid);\n                req.push('Content-Type: application/http; msgtype=request', '');\n                req.push('PUT ' + '/api/' + (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url)\n                    + stat.url(changes.changedRecords, i, e.key) + ' HTTP/1.1');\n                req.push('Content-Type: ' + 'application/json; charset=utf-8');\n                req.push('Host: ' + location.host);\n                req.push('', j ? JSON.stringify(j) : '');\n            });\n        };\n        //updation \n        for (var i = 0, x = changes.changedRecords.length; i < x; i++) {\n            _loop_2(i, x);\n        }\n        var _loop_3 = function (i, x) {\n            changes.deletedRecords.forEach(function (j, d) {\n                var state = {\n                    'mtd': 'DELETE ',\n                    'url': function (data, i, key) {\n                        var url = DataUtil.getObject(key, data[i]);\n                        if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n                            return '/' + url;\n                        }\n                        else if (url instanceof Date) {\n                            var datTime = data[i][key];\n                            return '/' + datTime.toJSON();\n                        }\n                        else {\n                            return \"/'\" + url + \"'\";\n                        }\n                    },\n                    'data': function (data, i) { return ''; }\n                };\n                req.push('--' + initialGuid);\n                req.push('Content-Type: application/http; msgtype=request', '');\n                req.push('DELETE ' + '/api/' + (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url)\n                    + state.url(changes.deletedRecords, i, e.key) + ' HTTP/1.1');\n                req.push('Content-Type: ' + 'application/json; charset=utf-8');\n                req.push('Host: ' + location.host);\n                req.push('', j ? JSON.stringify(j) : '');\n            });\n        };\n        //deletion\n        for (var i = 0, x = changes.deletedRecords.length; i < x; i++) {\n            _loop_3(i, x);\n        }\n        req.push('--' + initialGuid + '--', '');\n        return {\n            type: 'POST',\n            url: url,\n            contentType: 'multipart/mixed; boundary=' + initialGuid,\n            data: req.join('\\r\\n')\n        };\n    };\n    /**\n     * Method will trigger before send the request to server side.\n     * Used to set the custom header or modify the request options.\n     * @param  {DataManager} dm\n     * @param  {XMLHttpRequest} request\n     * @param  {Ajax} settings\n     * @returns void\n     */\n    WebApiAdaptor.prototype.beforeSend = function (dm, request, settings) {\n        request.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');\n    };\n    /**\n     * Returns the data from the query processing.\n     * @param  {DataResult} data\n     * @param  {DataOptions} ds?\n     * @param  {Query} query?\n     * @param  {XMLHttpRequest} xhr?\n     * @param  {Ajax} request?\n     * @param  {CrudOptions} changes?\n     * @returns aggregateResult\n     */\n    WebApiAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n        var pvtData = 'pvtData';\n        var pvt = request && request[pvtData];\n        var count = null;\n        var args = {};\n        if (request && request.type.toLowerCase() !== 'post') {\n            var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n            var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n            if (query && query.isCountRequired) {\n                if (!DataUtil.isNull(data.Count)) {\n                    count = data.Count;\n                }\n            }\n            if (version < 3 && data.Items) {\n                data = data.Items;\n            }\n            args.count = count;\n            args.result = data;\n            this.getAggregateResult(pvt, data, args, null, query);\n        }\n        args.result = args.result || data;\n        return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n    };\n    return WebApiAdaptor;\n}(ODataAdaptor));\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n * @hidden\n */\nvar WebMethodAdaptor = /** @class */ (function (_super) {\n    __extends(WebMethodAdaptor, _super);\n    function WebMethodAdaptor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Prepare the request body based on the query.\n     * The query information can be accessed at the WebMethod using variable named `value`.\n     * @param  {DataManager} dm\n     * @param  {Query} query\n     * @param  {Object[]} hierarchyFilters?\n     * @returns application\n     */\n    WebMethodAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n        var obj = new UrlAdaptor().processQuery(dm, query, hierarchyFilters);\n        var getData = 'data';\n        var data = DataUtil.parse.parseJson(obj[getData]);\n        var result = {};\n        var value = 'value';\n        if (data.param) {\n            for (var i = 0; i < data.param.length; i++) {\n                var param = data.param[i];\n                var key = Object.keys(param)[0];\n                result[key] = param[key];\n            }\n        }\n        result[value] = data;\n        var pvtData = 'pvtData';\n        var url = 'url';\n        return {\n            data: JSON.stringify(result),\n            url: obj[url],\n            pvtData: obj[pvtData],\n            type: 'POST',\n            contentType: 'application/json; charset=utf-8'\n        };\n    };\n    return WebMethodAdaptor;\n}(UrlAdaptor));\nexport { WebMethodAdaptor };\n/**\n * RemoteSaveAdaptor, extended from JsonAdaptor and it is used for binding local data and performs all DataManager queries in client-side.\n * It interacts with server-side only for CRUD operations.\n * @hidden\n */\nvar RemoteSaveAdaptor = /** @class */ (function (_super) {\n    __extends(RemoteSaveAdaptor, _super);\n    /**\n     * @hidden\n     */\n    function RemoteSaveAdaptor() {\n        var _this = _super.call(this) || this;\n        setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n        return _this;\n    }\n    RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n        this.pvt.position = position;\n        this.updateType = 'add';\n        return {\n            url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n            data: JSON.stringify(extend({}, {\n                value: data,\n                table: tableName,\n                action: 'insert'\n            }, DataUtil.getAddParams(this, dm, query)))\n        };\n    };\n    RemoteSaveAdaptor.prototype.remove = function (dm, keyField, val, tableName, query) {\n        _super.prototype.remove.call(this, dm, keyField, val);\n        return {\n            type: 'POST',\n            url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n            data: JSON.stringify(extend({}, {\n                key: val,\n                keyColumn: keyField,\n                table: tableName,\n                action: 'remove'\n            }, DataUtil.getAddParams(this, dm, query)))\n        };\n    };\n    RemoteSaveAdaptor.prototype.update = function (dm, keyField, val, tableName, query) {\n        this.updateType = 'update';\n        this.updateKey = keyField;\n        return {\n            type: 'POST',\n            url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n            data: JSON.stringify(extend({}, {\n                value: val,\n                action: 'update',\n                keyColumn: keyField,\n                key: val[keyField],\n                table: tableName\n            }, DataUtil.getAddParams(this, dm, query)))\n        };\n    };\n    RemoteSaveAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes, e) {\n        var i;\n        data = request ? JSON.parse(request.data) : data;\n        if (this.updateType === 'add') {\n            _super.prototype.insert.call(this, ds, data, null, null, this.pvt.position);\n        }\n        if (this.updateType === 'update') {\n            _super.prototype.update.call(this, ds, this.updateKey, data);\n        }\n        this.updateType = undefined;\n        if (data.added) {\n            for (i = 0; i < data.added.length; i++) {\n                _super.prototype.insert.call(this, ds, data.added[i]);\n            }\n        }\n        if (data.changed) {\n            for (i = 0; i < data.changed.length; i++) {\n                _super.prototype.update.call(this, ds, e.key, data.changed[i]);\n            }\n        }\n        if (data.deleted) {\n            for (i = 0; i < data.deleted.length; i++) {\n                _super.prototype.remove.call(this, ds, e.key, data.deleted[i]);\n            }\n        }\n        return data;\n    };\n    /**\n     * Prepare the request body based on the newly added, removed and updated records.\n     * Also perform the changes in the locally cached data to sync with the remote data.\n     * The result is used by the batch request.\n     * @param  {DataManager} dm\n     * @param  {CrudOptions} changes\n     * @param  {RemoteArgs} e\n     */\n    RemoteSaveAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n        return {\n            type: 'POST',\n            url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n            contentType: 'application/json; charset=utf-8',\n            dataType: 'json',\n            data: JSON.stringify(extend({}, {\n                changed: changes.changedRecords,\n                added: changes.addedRecords,\n                deleted: changes.deletedRecords,\n                action: 'batch',\n                table: e.url,\n                key: e.key\n            }, DataUtil.getAddParams(this, dm, query)))\n        };\n    };\n    RemoteSaveAdaptor.prototype.addParams = function (options) {\n        var urlParams = new UrlAdaptor();\n        urlParams.addParams(options);\n    };\n    return RemoteSaveAdaptor;\n}(JsonAdaptor));\nexport { RemoteSaveAdaptor };\n/**\n * Ajax Adaptor that is extended from URL Adaptor, is used for handle data operations with user defined functions.\n * @hidden\n */\nvar AjaxAdaptor = /** @class */ (function (_super) {\n    __extends(AjaxAdaptor, _super);\n    function AjaxAdaptor(props) {\n        var _this = _super.call(this) || this;\n        // options replaced the default adaptor options\n        _this.options = extend({}, _this.options, {\n            getData: new Function(),\n            addRecord: new Function(),\n            updateRecord: new Function(),\n            deleteRecord: new Function(),\n            batchUpdate: new Function()\n        });\n        extend(_this.options, props || {});\n        return _this;\n    }\n    AjaxAdaptor.prototype.getModuleName = function () {\n        return 'AjaxAdaptor';\n    };\n    return AjaxAdaptor;\n}(UrlAdaptor));\nexport { AjaxAdaptor };\n/**\n * Cache Adaptor is used to cache the data of the visited pages. It prevents new requests for the previously visited pages.\n * You can configure cache page size and duration of caching by using cachingPageSize and timeTillExpiration properties of the DataManager\n * @hidden\n */\nvar CacheAdaptor = /** @class */ (function (_super) {\n    __extends(CacheAdaptor, _super);\n    /**\n     * Constructor for CacheAdaptor class.\n     * @param  {CacheAdaptor} adaptor?\n     * @param  {number} timeStamp?\n     * @param  {number} pageSize?\n     * @hidden\n     */\n    function CacheAdaptor(adaptor, timeStamp, pageSize) {\n        var _this = _super.call(this) || this;\n        _this.isCrudAction = false;\n        _this.isInsertAction = false;\n        if (!isNullOrUndefined(adaptor)) {\n            _this.cacheAdaptor = adaptor;\n        }\n        _this.pageSize = pageSize;\n        _this.guidId = DataUtil.getGuid('cacheAdaptor');\n        var obj = { keys: [], results: [] };\n        window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n        var guid = _this.guidId;\n        if (!isNullOrUndefined(timeStamp)) {\n            setInterval(function () {\n                var data;\n                data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n                var forDel = [];\n                for (var i = 0; i < data.results.length; i++) {\n                    var currentTime = +new Date();\n                    var requestTime = +new Date(data.results[i].timeStamp);\n                    data.results[i].timeStamp = currentTime - requestTime;\n                    if (currentTime - requestTime > timeStamp) {\n                        forDel.push(i);\n                    }\n                }\n                for (var i = 0; i < forDel.length; i++) {\n                    data.results.splice(forDel[i], 1);\n                    data.keys.splice(forDel[i], 1);\n                }\n                window.localStorage.removeItem(guid);\n                window.localStorage.setItem(guid, JSON.stringify(data));\n            }, timeStamp);\n        }\n        return _this;\n    }\n    /**\n     * It will generate the key based on the URL when we send a request to server.\n     * @param  {string} url\n     * @param  {Query} query?\n     * @hidden\n     */\n    CacheAdaptor.prototype.generateKey = function (url, query) {\n        var queries = this.getQueryRequest(query);\n        var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n        var key = url;\n        var page = 'onPage';\n        if (page in singles) {\n            key += singles[page].pageIndex;\n        }\n        queries.sorts.forEach(function (obj) {\n            key += obj.e.direction + obj.e.fieldName;\n        });\n        queries.groups.forEach(function (obj) {\n            key += obj.e.fieldName;\n        });\n        queries.searches.forEach(function (obj) {\n            key += obj.e.searchKey;\n        });\n        for (var filter = 0; filter < queries.filters.length; filter++) {\n            var currentFilter = queries.filters[filter];\n            if (currentFilter.e.isComplex) {\n                var newQuery = query.clone();\n                newQuery.queries = [];\n                for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n                    newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter });\n                }\n                key += currentFilter.e.condition + this.generateKey(url, newQuery);\n            }\n            else {\n                key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n            }\n        }\n        return key;\n    };\n    /**\n     * Process the query to generate request body.\n     * If the data is already cached, it will return the cached data.\n     * @param  {DataManager} dm\n     * @param  {Query} query?\n     * @param  {Object[]} hierarchyFilters?\n     */\n    CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n        var key = this.generateKey(dm.dataSource.url, query);\n        var cachedItems;\n        cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n        var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n        if (data != null && !this.isCrudAction && !this.isInsertAction) {\n            return data;\n        }\n        this.isCrudAction = null;\n        this.isInsertAction = null;\n        return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n    };\n    /**\n     * Returns the data from the query processing.\n     * It will also cache the data for later usage.\n     * @param  {DataResult} data\n     * @param  {DataManager} ds?\n     * @param  {Query} query?\n     * @param  {XMLHttpRequest} xhr?\n     * @param  {Ajax} request?\n     * @param  {CrudOptions} changes?\n     */\n    CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n        if (this.isInsertAction || (request && this.cacheAdaptor.options.batch &&\n            DataUtil.endsWith(request.url, this.cacheAdaptor.options.batch) && request.type.toLowerCase() === 'post')) {\n            return this.cacheAdaptor.processResponse(data, ds, query, xhr, request, changes);\n        }\n        data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n        var key = query ? this.generateKey(ds.dataSource.url, query) : ds.dataSource.url;\n        var obj = {};\n        obj = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n        var index = obj.keys.indexOf(key);\n        if (index !== -1) {\n            obj.results.splice(index, 1);\n            obj.keys.splice(index, 1);\n        }\n        obj.results[obj.keys.push(key) - 1] = { keys: key, result: data.result, timeStamp: new Date(), count: data.count };\n        while (obj.results.length > this.pageSize) {\n            obj.results.splice(0, 1);\n            obj.keys.splice(0, 1);\n        }\n        window.localStorage.setItem(this.guidId, JSON.stringify(obj));\n        return data;\n    };\n    /**\n     * Method will trigger before send the request to server side. Used to set the custom header or modify the request options.\n     * @param  {DataManager} dm\n     * @param  {XMLHttpRequest} request\n     * @param  {Ajax} settings?\n     */\n    CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n        if (!isNullOrUndefined(this.cacheAdaptor.options.batch) && DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch)\n            && settings.type.toLowerCase() === 'post') {\n            request.setRequestHeader('Accept', this.cacheAdaptor.options.multipartAccept);\n        }\n        if (!dm.dataSource.crossDomain) {\n            request.setRequestHeader('Accept', this.cacheAdaptor.options.accept);\n        }\n    };\n    /**\n     * Updates existing record and saves the changes to the table.\n     * @param  {DataManager} dm\n     * @param  {string} keyField\n     * @param  {Object} value\n     * @param  {string} tableName\n     */\n    CacheAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n        this.isCrudAction = true;\n        return this.cacheAdaptor.update(dm, keyField, value, tableName);\n    };\n    /**\n     * Prepare and returns request body which is used to insert a new record in the table.\n     * @param  {DataManager} dm\n     * @param  {Object} data\n     * @param  {string} tableName?\n     */\n    CacheAdaptor.prototype.insert = function (dm, data, tableName) {\n        this.isInsertAction = true;\n        return this.cacheAdaptor.insert(dm, data, tableName);\n    };\n    /**\n     * Prepare and return request body which is used to remove record from the table.\n     * @param  {DataManager} dm\n     * @param  {string} keyField\n     * @param  {Object} value\n     * @param  {string} tableName?\n     */\n    CacheAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n        this.isCrudAction = true;\n        return this.cacheAdaptor.remove(dm, keyField, value, tableName);\n    };\n    /**\n     * Prepare the request body based on the newly added, removed and updated records.\n     * The result is used by the batch request.\n     * @param  {DataManager} dm\n     * @param  {CrudOptions} changes\n     * @param  {RemoteArgs} e\n     */\n    CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n        return this.cacheAdaptor.batchRequest(dm, changes, e);\n    };\n    return CacheAdaptor;\n}(UrlAdaptor));\nexport { CacheAdaptor };\n","import { Ajax } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor, AjaxAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\nvar DataManager = /** @class */ (function () {\n    /**\n     * Constructor for DataManager class\n     * @param  {DataOptions|JSON[]} dataSource?\n     * @param  {Query} query?\n     * @param  {AdaptorOptions|string} adaptor?\n     * @hidden\n     */\n    function DataManager(dataSource, query, adaptor) {\n        var _this = this;\n        /** @hidden */\n        this.dateParse = true;\n        /** @hidden */\n        this.timeZoneHandling = true;\n        this.requests = [];\n        if (!dataSource && !this.dataSource) {\n            dataSource = [];\n        }\n        adaptor = adaptor || dataSource.adaptor;\n        if (dataSource && dataSource.timeZoneHandling === false) {\n            this.timeZoneHandling = dataSource.timeZoneHandling;\n        }\n        var data;\n        if (dataSource instanceof Array) {\n            data = {\n                json: dataSource,\n                offline: true\n            };\n        }\n        else if (typeof dataSource === 'object') {\n            if (!dataSource.json) {\n                dataSource.json = [];\n            }\n            data = {\n                url: dataSource.url,\n                insertUrl: dataSource.insertUrl,\n                removeUrl: dataSource.removeUrl,\n                updateUrl: dataSource.updateUrl,\n                crudUrl: dataSource.crudUrl,\n                batchUrl: dataSource.batchUrl,\n                json: dataSource.json,\n                headers: dataSource.headers,\n                accept: dataSource.accept,\n                data: dataSource.data,\n                timeTillExpiration: dataSource.timeTillExpiration,\n                cachingPageSize: dataSource.cachingPageSize,\n                enableCaching: dataSource.enableCaching,\n                requestType: dataSource.requestType,\n                key: dataSource.key,\n                crossDomain: dataSource.crossDomain,\n                jsonp: dataSource.jsonp,\n                dataType: dataSource.dataType,\n                offline: dataSource.offline !== undefined ? dataSource.offline\n                    : dataSource.adaptor instanceof RemoteSaveAdaptor || dataSource.adaptor instanceof AjaxAdaptor ?\n                        false : dataSource.url ? false : true,\n                requiresFormat: dataSource.requiresFormat\n            };\n        }\n        else {\n            DataUtil.throwError('DataManager: Invalid arguments');\n        }\n        if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n            data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n        }\n        if (data.dataType === undefined) {\n            data.dataType = 'json';\n        }\n        this.dataSource = data;\n        this.defaultQuery = query;\n        if (data.url && data.offline && !data.json.length) {\n            this.isDataAvailable = false;\n            this.adaptor = adaptor || new ODataAdaptor();\n            this.dataSource.offline = false;\n            this.ready = this.executeQuery(query || new Query());\n            this.ready.then(function (e) {\n                _this.dataSource.offline = true;\n                _this.isDataAvailable = true;\n                data.json = e.result;\n                _this.adaptor = new JsonAdaptor();\n            });\n        }\n        else {\n            this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n        }\n        if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n            data.jsonp = 'callback';\n        }\n        this.adaptor = adaptor || this.adaptor;\n        if (data.enableCaching) {\n            this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n        }\n        return this;\n    }\n    /**\n     * Overrides DataManager's default query with given query.\n     * @param  {Query} query - Defines the new default query.\n     */\n    DataManager.prototype.setDefaultQuery = function (query) {\n        this.defaultQuery = query;\n        return this;\n    };\n    /**\n     * Executes the given query with local data source.\n     * @param  {Query} query - Defines the query to retrieve data.\n     */\n    DataManager.prototype.executeLocal = function (query) {\n        if (!this.defaultQuery && !(query instanceof Query)) {\n            DataUtil.throwError('DataManager - executeLocal() : A query is required to execute');\n        }\n        if (!this.dataSource.json) {\n            DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n        }\n        query = query || this.defaultQuery;\n        var result = this.adaptor.processQuery(this, query);\n        if (query.subQuery) {\n            var from = query.subQuery.fromTable;\n            var lookup = query.subQuery.lookups;\n            var res = query.isCountRequired ? result.result :\n                result;\n            if (lookup && lookup instanceof Array) {\n                DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n            }\n            for (var j = 0; j < res.length; j++) {\n                if (res[j][from] instanceof Array) {\n                    res[j] = extend({}, {}, res[j]);\n                    res[j][from] = this.adaptor.processResponse(query.subQuery.using(new DataManager(res[j][from].slice(0))).executeLocal(), this, query);\n                }\n            }\n        }\n        return this.adaptor.processResponse(result, this, query);\n    };\n    /**\n     * Executes the given query with either local or remote data source.\n     * It will be executed as asynchronously and returns Promise object which will be resolved or rejected after action completed.\n     * @param  {Query|Function} query - Defines the query to retrieve data.\n     * @param  {Function} done - Defines the callback function and triggers when the Promise is resolved.\n     * @param  {Function} fail - Defines the callback function and triggers when the Promise is rejected.\n     * @param  {Function} always - Defines the callback function and triggers when the Promise is resolved or rejected.\n     */\n    DataManager.prototype.executeQuery = function (query, done, fail, always) {\n        var _this = this;\n        var makeRequest = 'makeRequest';\n        if (typeof query === 'function') {\n            always = fail;\n            fail = done;\n            done = query;\n            query = null;\n        }\n        if (!query) {\n            query = this.defaultQuery;\n        }\n        if (!(query instanceof Query)) {\n            DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n        }\n        var deffered = new Deferred();\n        var args = { query: query };\n        if (!this.dataSource.offline && (this.dataSource.url !== undefined && this.dataSource.url !== '')\n            || (!isNullOrUndefined(this.adaptor[makeRequest])) || this.isAjaxAdaptor(this.adaptor)) {\n            var result = this.adaptor.processQuery(this, query);\n            if (!isNullOrUndefined(this.adaptor[makeRequest])) {\n                this.adaptor[makeRequest](result, deffered, args, query);\n            }\n            else if (!isNullOrUndefined(result.url) || this.isAjaxAdaptor(this.adaptor)) {\n                this.makeRequest(result, deffered, args, query);\n            }\n            else {\n                args = DataManager.getDeferedArgs(query, result, args);\n                deffered.resolve(args);\n            }\n        }\n        else {\n            DataManager.nextTick(function () {\n                var res = _this.executeLocal(query);\n                args = DataManager.getDeferedArgs(query, res, args);\n                deffered.resolve(args);\n            });\n        }\n        if (done || fail) {\n            deffered.promise.then(done, fail);\n        }\n        if (always) {\n            deffered.promise.then(always, always);\n        }\n        return deffered.promise;\n    };\n    DataManager.getDeferedArgs = function (query, result, args) {\n        if (query.isCountRequired) {\n            args.result = result.result;\n            args.count = result.count;\n            args.aggregates = result.aggregates;\n        }\n        else {\n            args.result = result;\n        }\n        return args;\n    };\n    DataManager.nextTick = function (fn) {\n        (window.setImmediate || window.setTimeout)(fn, 0);\n    };\n    DataManager.prototype.extendRequest = function (url, fnSuccess, fnFail) {\n        return extend({}, {\n            type: 'GET',\n            dataType: this.dataSource.dataType,\n            crossDomain: this.dataSource.crossDomain,\n            jsonp: this.dataSource.jsonp,\n            cache: true,\n            processData: false,\n            onSuccess: fnSuccess,\n            onFailure: fnFail\n        }, url);\n    };\n    // tslint:disable-next-line:max-func-body-length\n    DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n        var _this = this;\n        var isSelector = !!query.subQuerySelector;\n        var fnFail = function (e) {\n            args.error = e;\n            deffered.reject(args);\n        };\n        var process = function (data, count, xhr, request, actual, aggregates, virtualSelectRecords) {\n            args.xhr = xhr;\n            args.count = count ? parseInt(count.toString(), 10) : 0;\n            args.result = data;\n            args.request = request;\n            args.aggregates = aggregates;\n            args.actual = actual;\n            args.virtualSelectRecords = virtualSelectRecords;\n            deffered.resolve(args);\n        };\n        var fnQueryChild = function (data, selector) {\n            var subDeffer = new Deferred();\n            var childArgs = { parent: args };\n            query.subQuery.isChild = true;\n            var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n            var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n            if (!isSelector) {\n                subDeffer.then(function (subData) {\n                    if (data) {\n                        DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, data, subData, query.subQuery.key);\n                        process(data, subData.count, subData.xhr);\n                    }\n                }, fnFail);\n            }\n            return childReq;\n        };\n        var fnSuccess = function (data, request) {\n            if (_this.isAjaxAdaptor(_this.adaptor)) {\n                request = extend({}, _this.ajaxReqOption, request);\n            }\n            if (request.httpRequest.getResponseHeader('Content-Type').indexOf('xml') === -1 && _this.dateParse) {\n                data = DataUtil.parse.parseJson(data);\n            }\n            var result = _this.adaptor.processResponse(data, _this, query, request.httpRequest, request);\n            var count = 0;\n            var aggregates = null;\n            var virtualSelectRecords = 'virtualSelectRecords';\n            var virtualRecords = data[virtualSelectRecords];\n            if (query.isCountRequired) {\n                count = result.count;\n                aggregates = result.aggregates;\n                result = result.result;\n            }\n            if (!query.subQuery) {\n                process(result, count, request.httpRequest, request.type, data, aggregates, virtualRecords);\n                return;\n            }\n            if (!isSelector) {\n                fnQueryChild(result, request);\n            }\n        };\n        var req = this.extendRequest(url, fnSuccess, fnFail);\n        if (!this.isAjaxAdaptor(this.adaptor)) {\n            var ajax_1 = new Ajax(req);\n            ajax_1.beforeSend = function () {\n                _this.beforeSend(ajax_1.httpRequest, ajax_1);\n            };\n            req = ajax_1.send();\n            req.catch(function (e) { return true; }); // to handle failure remote requests.        \n            this.requests.push(ajax_1);\n        }\n        else {\n            this.ajaxReqOption = req;\n            var request = req;\n            this.adaptor.options.getData({\n                data: request.data,\n                onSuccess: request.onSuccess, onFailure: request.onFailure\n            });\n        }\n        if (isSelector) {\n            var promise = void 0;\n            var res = query.subQuerySelector.call(this, { query: query.subQuery, parent: query });\n            if (res && res.length) {\n                promise = Promise.all([req, fnQueryChild(null, res)]);\n                promise.then(function () {\n                    var args = [];\n                    for (var _i = 0; _i < arguments.length; _i++) {\n                        args[_i] = arguments[_i];\n                    }\n                    var result = args[0];\n                    var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].httpRequest, _this.requests[0]);\n                    var count = 0;\n                    if (query.isCountRequired) {\n                        count = pResult.count;\n                        pResult = pResult.result;\n                    }\n                    var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].httpRequest, _this.requests[1]);\n                    count = 0;\n                    if (query.subQuery.isCountRequired) {\n                        count = cResult.count;\n                        cResult = cResult.result;\n                    }\n                    DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, pResult, cResult, query.subQuery.key);\n                    isSelector = false;\n                    process(pResult, count, _this.requests[0].httpRequest);\n                });\n            }\n            else {\n                isSelector = false;\n            }\n        }\n        return req;\n    };\n    DataManager.prototype.beforeSend = function (request, settings) {\n        this.adaptor.beforeSend(this, request, settings);\n        var headers = this.dataSource.headers;\n        var props;\n        for (var i = 0; headers && i < headers.length; i++) {\n            props = [];\n            var keys = Object.keys(headers[i]);\n            for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n                var prop = keys_1[_i];\n                props.push(prop);\n                request.setRequestHeader(prop, headers[i][prop]);\n            }\n        }\n    };\n    /**\n     * Save bulk changes to the given table name.\n     * User can add a new record, edit an existing record, and delete a record at the same time.\n     * If the datasource from remote, then updated in a single post.\n     * @param  {Object} changes - Defines the CrudOptions.\n     * @param  {string} key - Defines the column field.\n     * @param  {string|Query} tableName - Defines the table name.\n     * @param  {Query} query - Sets default query for the DataManager.\n     */\n    DataManager.prototype.saveChanges = function (changes, key, tableName, query, original) {\n        var _this = this;\n        if (tableName instanceof Query) {\n            query = tableName;\n            tableName = null;\n        }\n        var args = {\n            url: tableName,\n            key: key || this.dataSource.key\n        };\n        var req = this.adaptor.batchRequest(this, changes, args, query || new Query(), original);\n        var doAjaxRequest = 'doAjaxRequest';\n        if (this.dataSource.offline) {\n            return req;\n        }\n        if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n            return this.adaptor[doAjaxRequest](req);\n        }\n        else if (!this.isAjaxAdaptor(this.adaptor)) {\n            var deff_1 = new Deferred();\n            var ajax_2 = new Ajax(req);\n            ajax_2.beforeSend = function () {\n                _this.beforeSend(ajax_2.httpRequest, ajax_2);\n            };\n            ajax_2.onSuccess = function (data, request) {\n                deff_1.resolve(_this.adaptor.processResponse(data, _this, null, request.httpRequest, request, changes, args));\n            };\n            ajax_2.onFailure = function (e) {\n                deff_1.reject([{ error: e }]);\n            };\n            ajax_2.send().catch(function (e) { return true; }); // to handle the failure requests.        \n            return deff_1.promise;\n        }\n        else {\n            return this.doAjaxRequest(req, this.adaptor.options.batchUpdate);\n        }\n    };\n    /**\n     * Inserts new record in the given table.\n     * @param  {Object} data - Defines the data to insert.\n     * @param  {string|Query} tableName - Defines the table name.\n     * @param  {Query} query - Sets default query for the DataManager.\n     */\n    DataManager.prototype.insert = function (data, tableName, query, position) {\n        if (tableName instanceof Query) {\n            query = tableName;\n            tableName = null;\n        }\n        var req = this.adaptor.insert(this, data, tableName, query, position);\n        var doAjaxRequest = 'doAjaxRequest';\n        if (this.dataSource.offline) {\n            return req;\n        }\n        if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n            return this.adaptor[doAjaxRequest](req);\n        }\n        else {\n            return this.doAjaxRequest(req, this.adaptor.options.addRecord);\n        }\n    };\n    /**\n     * Removes data from the table with the given key.\n     * @param  {string} keyField - Defines the column field.\n     * @param  {Object} value - Defines the value to find the data in the specified column.\n     * @param  {string|Query} tableName - Defines the table name\n     * @param  {Query} query - Sets default query for the DataManager.\n     */\n    DataManager.prototype.remove = function (keyField, value, tableName, query) {\n        if (typeof value === 'object') {\n            value = DataUtil.getObject(keyField, value);\n        }\n        if (tableName instanceof Query) {\n            query = tableName;\n            tableName = null;\n        }\n        var res = this.adaptor.remove(this, keyField, value, tableName, query);\n        var doAjaxRequest = 'doAjaxRequest';\n        if (this.dataSource.offline) {\n            return res;\n        }\n        if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n            return this.adaptor[doAjaxRequest](res);\n        }\n        else {\n            var remove = this.adaptor.options.deleteRecord;\n            return this.doAjaxRequest(res, remove);\n        }\n    };\n    /**\n     * Updates existing record in the given table.\n     * @param  {string} keyField - Defines the column field.\n     * @param  {Object} value - Defines the value to find the data in the specified column.\n     * @param  {string|Query} tableName - Defines the table name\n     * @param  {Query} query - Sets default query for the DataManager.\n     */\n    DataManager.prototype.update = function (keyField, value, tableName, query, original) {\n        if (tableName instanceof Query) {\n            query = tableName;\n            tableName = null;\n        }\n        var res = this.adaptor.update(this, keyField, value, tableName, query, original);\n        var doAjaxRequest = 'doAjaxRequest';\n        if (this.dataSource.offline) {\n            return res;\n        }\n        if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n            return this.adaptor[doAjaxRequest](res);\n        }\n        else {\n            var update = this.adaptor.options.updateRecord;\n            return this.doAjaxRequest(res, update);\n        }\n    };\n    DataManager.prototype.isAjaxAdaptor = function (dataSource) {\n        return this.adaptor.getModuleName &&\n            this.adaptor.getModuleName() === 'AjaxAdaptor';\n    };\n    DataManager.prototype.successFunc = function (record, request) {\n        if (this.isAjaxAdaptor(this.adaptor)) {\n            request = extend({}, this.ajaxReqOption, request);\n        }\n        try {\n            DataUtil.parse.parseJson(record);\n        }\n        catch (e) {\n            record = [];\n        }\n        record = this.adaptor.processResponse(DataUtil.parse.parseJson(record), this, null, request.httpRequest, request);\n        this.ajaxDeffered.resolve(record);\n    };\n    ;\n    DataManager.prototype.failureFunc = function (e) {\n        this.ajaxDeffered.reject([{ error: e }]);\n    };\n    ;\n    DataManager.prototype.doAjaxRequest = function (res, ajaxFunc) {\n        var _this = this;\n        res = extend({}, {\n            type: 'POST',\n            contentType: 'application/json; charset=utf-8',\n            processData: false\n        }, res);\n        this.ajaxDeffered = new Deferred();\n        if (!this.isAjaxAdaptor(this.adaptor)) {\n            var ajax_3 = new Ajax(res);\n            ajax_3.beforeSend = function () {\n                _this.beforeSend(ajax_3.httpRequest, ajax_3);\n            };\n            ajax_3.onSuccess = this.successFunc.bind(this);\n            ajax_3.onFailure = this.failureFunc.bind(this);\n            ajax_3.send().catch(function (e) { return true; }); // to handle the failure requests.\n        }\n        else {\n            this.ajaxReqOption = res;\n            ajaxFunc.call(this, {\n                data: res.data, onSuccess: this.successFunc.bind(this),\n                onFailure: this.failureFunc.bind(this)\n            });\n        }\n        return this.ajaxDeffered.promise;\n    };\n    return DataManager;\n}());\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n    function Deferred() {\n        var _this = this;\n        /**\n         * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n         */\n        this.promise = new Promise(function (resolve, reject) {\n            _this.resolve = resolve;\n            _this.reject = reject;\n        });\n        /**\n         * Defines the callback function triggers when the Deferred object is resolved.\n         */\n        this.then = this.promise.then.bind(this.promise);\n        /**\n         * Defines the callback function triggers when the Deferred object is rejected.\n         */\n        this.catch = this.promise.catch.bind(this.promise);\n    }\n    return Deferred;\n}());\nexport { Deferred };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, Event, append, compile, isBlazor } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove, updateBlazorTemplate, resetBlazorTemplate } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar POPUP_LIB = 'e-lib';\nvar HIDE_POPUP = 'e-hidden';\nvar Animation = /** @class */ (function (_super) {\n    __extends(Animation, _super);\n    function Animation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n    ], Animation.prototype, \"open\", void 0);\n    __decorate([\n        Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n    ], Animation.prototype, \"close\", void 0);\n    return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n * <div id=\"tooltip\">Show Tooltip</div>\n * ```\n * ```typescript\n * <script>\n *   var tooltipObj = new Tooltip({ content: 'Tooltip text' });\n *   tooltipObj.appendTo(\"#tooltip\");\n * </script>\n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n    __extends(Tooltip, _super);\n    /**\n     * Constructor for creating the Tooltip Component\n     */\n    function Tooltip(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.isBlazorTooltip = false;\n        _this.contentTargetValue = null;\n        _this.contentEvent = null;\n        _this.contentAnimation = null;\n        return _this;\n    }\n    Tooltip.prototype.initialize = function () {\n        this.formatPosition();\n        if (!(this.isServerRender())) {\n            addClass([this.element], ROOT);\n        }\n    };\n    Tooltip.prototype.isServerRender = function () {\n        return isBlazor() && this.isServerRendered;\n    };\n    Tooltip.prototype.formatPosition = function () {\n        var _a, _b;\n        if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n            _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n        }\n        else {\n            _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n        }\n    };\n    Tooltip.prototype.renderArrow = function () {\n        this.setTipClass(this.position);\n        if (!(this.isServerRender())) {\n            var tip = this.createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n            tip.appendChild(this.createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n            tip.appendChild(this.createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n            this.tooltipEle.appendChild(tip);\n        }\n        else {\n            var tip = this.tooltipEle.querySelector('.' + ARROW_TIP);\n            addClass([tip.querySelector('.' + ARROW_TIP_OUTER)], this.tipClass);\n            addClass([tip.querySelector('.' + ARROW_TIP_INNER)], this.tipClass);\n            this.tooltipEle.appendChild(tip);\n        }\n    };\n    Tooltip.prototype.setTipClass = function (position) {\n        if (position.indexOf('Right') === 0) {\n            this.tipClass = TIP_LEFT;\n        }\n        else if (position.indexOf('Bottom') === 0) {\n            this.tipClass = TIP_TOP;\n        }\n        else if (position.indexOf('Left') === 0) {\n            this.tipClass = TIP_RIGHT;\n        }\n        else {\n            this.tipClass = TIP_BOTTOM;\n        }\n    };\n    Tooltip.prototype.renderPopup = function (target) {\n        var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n        this.tooltipEle.classList.remove(POPUP_LIB);\n        this.popupObj = new Popup(this.tooltipEle, {\n            height: this.height,\n            width: this.width,\n            position: { X: elePos.left, Y: elePos.top },\n            enableRtl: this.enableRtl,\n            open: this.openPopupHandler.bind(this),\n            close: this.closePopupHandler.bind(this)\n        });\n    };\n    Tooltip.prototype.getTooltipPosition = function (target) {\n        this.tooltipEle.style.display = 'block';\n        var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\n        var offsetPos = this.calculateTooltipOffset(this.position);\n        var elePos = this.collisionFlipFit(target, pos.left + offsetPos.left, pos.top + offsetPos.top);\n        this.tooltipEle.style.display = '';\n        return elePos;\n    };\n    Tooltip.prototype.reposition = function (target) {\n        var elePos = this.getTooltipPosition(target);\n        this.popupObj.position = { X: elePos.left, Y: elePos.top };\n        this.popupObj.dataBind();\n    };\n    Tooltip.prototype.openPopupHandler = function () {\n        if (!this.mouseTrail && this.needTemplateReposition()) {\n            this.reposition(this.findTarget());\n        }\n        this.trigger('afterOpen', this.tooltipEventArgs);\n    };\n    Tooltip.prototype.closePopupHandler = function () {\n        resetBlazorTemplate(this.element.id + 'content', 'Content');\n        this.clearTemplate(['content']);\n        this.clear();\n        this.trigger('afterClose', this.tooltipEventArgs);\n    };\n    Tooltip.prototype.calculateTooltipOffset = function (position) {\n        var pos = { top: 0, left: 0 };\n        var tooltipEleWidth = this.tooltipEle.offsetWidth;\n        var tooltipEleHeight = this.tooltipEle.offsetHeight;\n        var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n        var tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n        var tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n        var tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n        var tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n        var tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n        if (this.mouseTrail) {\n            tipAdjust += MOUSE_TRAIL_GAP;\n        }\n        switch (position) {\n            case 'RightTop':\n                pos.left += tipWidth + tipAdjust;\n                pos.top -= tooltipEleHeight - tipHeightAdjust;\n                break;\n            case 'RightCenter':\n                pos.left += tipWidth + tipAdjust;\n                pos.top -= (tooltipEleHeight / 2);\n                break;\n            case 'RightBottom':\n                pos.left += tipWidth + tipAdjust;\n                pos.top -= (tipHeightAdjust);\n                break;\n            case 'BottomRight':\n                pos.top += (tipHeight + tipAdjust);\n                pos.left -= (tipWidthAdjust);\n                break;\n            case 'BottomCenter':\n                pos.top += (tipHeight + tipAdjust);\n                pos.left -= (tooltipEleWidth / 2);\n                break;\n            case 'BottomLeft':\n                pos.top += (tipHeight + tipAdjust);\n                pos.left -= (tooltipEleWidth - tipWidthAdjust);\n                break;\n            case 'LeftBottom':\n                pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n                pos.top -= (tipHeightAdjust);\n                break;\n            case 'LeftCenter':\n                pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n                pos.top -= (tooltipEleHeight / 2);\n                break;\n            case 'LeftTop':\n                pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n                pos.top -= (tooltipEleHeight - tipHeightAdjust);\n                break;\n            case 'TopLeft':\n                pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n                pos.left -= (tooltipEleWidth - tipWidthAdjust);\n                break;\n            case 'TopRight':\n                pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n                pos.left -= (tipWidthAdjust);\n                break;\n            default:\n                pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n                pos.left -= (tooltipEleWidth / 2);\n                break;\n        }\n        pos.left += this.offsetX;\n        pos.top += this.offsetY;\n        return pos;\n    };\n    Tooltip.prototype.updateTipPosition = function (position) {\n        var selEle = this.tooltipEle.querySelectorAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER);\n        var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n        removeClass(selEle, removeList);\n        this.setTipClass(position);\n        addClass(selEle, this.tipClass);\n    };\n    Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n        if (this.showTipPointer === false) {\n            return;\n        }\n        this.updateTipPosition(position);\n        var leftValue;\n        var topValue;\n        this.tooltipEle.style.display = 'block';\n        var tooltipWidth = this.tooltipEle.clientWidth;\n        var tooltipHeight = this.tooltipEle.clientHeight;\n        var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n        var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n        var tipWidth = arrowEle.offsetWidth;\n        var tipHeight = arrowEle.offsetHeight;\n        this.tooltipEle.style.display = '';\n        if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n            if (this.tipClass === TIP_BOTTOM) {\n                topValue = '99.9%';\n                // Arrow icon aligned -2px height from ArrowOuterTip div\n                arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n            }\n            else {\n                topValue = -(tipHeight - 1) + 'px';\n                // Arrow icon aligned -6px height from ArrowOuterTip div\n                arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n            }\n            if (target) {\n                var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n                if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n                    leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n                }\n                else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n                    leftValue = POINTER_ADJUST + 'px';\n                }\n                else {\n                    leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n                }\n            }\n        }\n        else {\n            if (this.tipClass === TIP_RIGHT) {\n                leftValue = '99.9%';\n                // Arrow icon aligned -2px left from ArrowOuterTip div\n                arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n            }\n            else {\n                leftValue = -(tipWidth - 1) + 'px';\n                // Arrow icon aligned -2px from ArrowOuterTip width\n                arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n            }\n            var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n            if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n                topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n            }\n            else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n                topValue = POINTER_ADJUST + 'px';\n            }\n            else {\n                topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n            }\n        }\n        arrowEle.style.top = topValue;\n        arrowEle.style.left = leftValue;\n    };\n    Tooltip.prototype.renderContent = function (target) {\n        var tooltipContent = this.tooltipEle.querySelector('.' + CONTENT);\n        if (this.cssClass) {\n            addClass([this.tooltipEle], this.cssClass.split(' '));\n        }\n        if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n            target.setAttribute('data-content', target.getAttribute('title'));\n            target.removeAttribute('title');\n        }\n        if (!isNullOrUndefined(this.content)) {\n            if (this.isBlazorTooltip || !(this.isServerRender())) {\n                tooltipContent.innerHTML = '';\n                if (this.content instanceof HTMLElement) {\n                    tooltipContent.appendChild(this.content);\n                }\n                else if (typeof this.content === 'string' && this.content.indexOf('<div>Blazor') < 0) {\n                    if (this.enableHtmlSanitizer) {\n                        this.setProperties({ content: SanitizeHtmlHelper.sanitize(this.content) }, true);\n                    }\n                    tooltipContent[this.enableHtmlParse ? 'innerHTML' : 'textContent'] = this.content;\n                }\n                else {\n                    var templateFunction = compile(this.content);\n                    var tempArr = templateFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent);\n                    if (tempArr) {\n                        append(tempArr, tooltipContent);\n                    }\n                    this.renderReactTemplates();\n                    if (typeof this.content === 'string' && this.content.indexOf('<div>Blazor') >= 0) {\n                        this.isBlazorTemplate = true;\n                        updateBlazorTemplate(this.element.id + 'content', 'Content', this);\n                    }\n                }\n            }\n        }\n        else {\n            if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n                tooltipContent.innerHTML = target.getAttribute('data-content');\n            }\n        }\n    };\n    Tooltip.prototype.renderCloseIcon = function () {\n        if (!this.isSticky) {\n            return;\n        }\n        var tipClose = this.createElement('div', { className: ICON + ' ' + CLOSE });\n        this.tooltipEle.appendChild(tipClose);\n        EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n    };\n    Tooltip.prototype.addDescribedBy = function (target, id) {\n        var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n        if (describedby.indexOf(id) < 0) {\n            describedby.push(id);\n        }\n        attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\n    };\n    Tooltip.prototype.removeDescribedBy = function (target) {\n        var id = target.getAttribute('data-tooltip-id');\n        var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n        var index = describedby.indexOf(id);\n        if (index !== -1) {\n            describedby.splice(index, 1);\n        }\n        target.removeAttribute('data-tooltip-id');\n        var orgdescribedby = describedby.join(' ').trim();\n        if (orgdescribedby) {\n            target.setAttribute('aria-describedby', orgdescribedby);\n        }\n        else {\n            target.removeAttribute('aria-describedby');\n        }\n    };\n    Tooltip.prototype.tapHoldHandler = function (evt) {\n        clearTimeout(this.autoCloseTimer);\n        this.targetHover(evt.originalEvent);\n    };\n    Tooltip.prototype.touchEndHandler = function (e) {\n        var _this = this;\n        if (this.isSticky) {\n            return;\n        }\n        var close = function () {\n            _this.close();\n        };\n        this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n    };\n    Tooltip.prototype.targetClick = function (e) {\n        var target;\n        if (this.target) {\n            target = closest(e.target, this.target);\n        }\n        else {\n            target = this.element;\n        }\n        if (isNullOrUndefined(target)) {\n            return;\n        }\n        if (target.getAttribute('data-tooltip-id') === null) {\n            this.targetHover(e);\n        }\n        else if (!this.isSticky) {\n            this.hideTooltip(this.animation.close, e, target);\n        }\n    };\n    Tooltip.prototype.targetHover = function (e) {\n        var target;\n        if (this.target) {\n            target = closest(e.target, this.target);\n        }\n        else {\n            target = this.element;\n        }\n        if (isNullOrUndefined(target) || (target.getAttribute('data-tooltip-id') !== null && this.closeDelay === 0)) {\n            return;\n        }\n        var targetList = [].slice.call(document.querySelectorAll('[data-tooltip-id= ' + this.ctrlId + '_content]'));\n        for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n            var target_1 = targetList_1[_i];\n            this.restoreElement(target_1);\n        }\n        this.showTooltip(target, this.animation.open, e);\n    };\n    Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n        var _this = this;\n        clearTimeout(this.showTimer);\n        clearTimeout(this.hideTimer);\n        this.tooltipEventArgs = {\n            type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n            element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n        };\n        var observeCallback = function (beforeRenderArgs) {\n            _this.beforeRenderCallback(beforeRenderArgs, target, e, showAnimation);\n        };\n        this.trigger('beforeRender', this.tooltipEventArgs, observeCallback.bind(this));\n    };\n    Tooltip.prototype.beforeRenderCallback = function (beforeRenderArgs, target, e, showAnimation) {\n        var isBlazorTooltipRendered = false;\n        if (beforeRenderArgs.cancel) {\n            this.isHidden = true;\n            this.clear();\n        }\n        else {\n            this.isHidden = false;\n            if (isNullOrUndefined(this.tooltipEle)) {\n                if (this.isServerRender()) {\n                    this.contentTargetValue = target;\n                    this.contentEvent = e;\n                    this.contentAnimation = showAnimation;\n                    var args = { 'enableTooltip': 'true' };\n                    // tslint:disable\n                    this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args);\n                    // tslint:enable\n                    isBlazorTooltipRendered = true;\n                }\n                else {\n                    this.ctrlId = this.element.getAttribute('id') ?\n                        getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n                    this.tooltipEle = this.createElement('div', {\n                        className: TOOLTIP_WRAP + ' ' + POPUP_ROOT + ' ' + POPUP_LIB, attrs: {\n                            role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n                        }, styles: 'width:' +\n                            formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n                    });\n                    this.beforeRenderBlazor(target, this);\n                }\n                if (!isBlazorTooltipRendered) {\n                    this.afterRenderBlazor(target, e, showAnimation, this);\n                }\n            }\n            else {\n                if (this.isServerRender()) {\n                    addClass([this.tooltipEle], POPUP_OPEN);\n                    document.body.appendChild(this.tooltipEle);\n                    this.renderCloseIcon();\n                    this.renderPopup(target);\n                }\n                if (target) {\n                    this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n                    this.addDescribedBy(target, this.ctrlId + '_content');\n                    this.renderContent(target);\n                    PopupAnimation.stop(this.tooltipEle);\n                    this.reposition(target);\n                    this.afterRenderBlazor(target, e, showAnimation, this);\n                }\n            }\n        }\n    };\n    ;\n    Tooltip.prototype.contentUpdated = function (args) {\n        if (isNullOrUndefined(this.tooltipEle)) {\n            if (this.isServerRender()) {\n                this.ctrlId = this.element.id;\n                this.tooltipEle = document.querySelector('#' + this.ctrlId + '_content');\n                if (this.tooltipEle) {\n                    this.tooltipEle.setAttribute('style', 'width:' + formatUnit(this.width) +\n                        ';height:' + formatUnit(this.height) + ';position:absolute;');\n                    this.beforeRenderBlazor(this.contentTargetValue, this);\n                    this.afterRenderBlazor(this.contentTargetValue, this.contentEvent, this.contentAnimation, this);\n                    this.contentTargetValue = this.contentEvent = this.contentAnimation = null;\n                }\n            }\n        }\n    };\n    ;\n    Tooltip.prototype.beforeRenderBlazor = function (target, ctrlObj) {\n        if (target) {\n            if (Browser.isDevice) {\n                addClass([ctrlObj.tooltipEle], DEVICE);\n            }\n            if (ctrlObj.width !== 'auto') {\n                ctrlObj.tooltipEle.style.maxWidth = formatUnit(ctrlObj.width);\n            }\n            if (!(this.isServerRender())) {\n                ctrlObj.tooltipEle.appendChild(ctrlObj.createElement('div', { className: CONTENT }));\n            }\n            document.body.appendChild(ctrlObj.tooltipEle);\n            removeClass([ctrlObj.tooltipEle], HIDE_POPUP);\n            ctrlObj.addDescribedBy(target, ctrlObj.ctrlId + '_content');\n            ctrlObj.renderContent(target);\n            addClass([ctrlObj.tooltipEle], POPUP_OPEN);\n            if (ctrlObj.showTipPointer) {\n                ctrlObj.renderArrow();\n            }\n            ctrlObj.renderCloseIcon();\n            ctrlObj.renderPopup(target);\n            ctrlObj.adjustArrow(target, ctrlObj.position, ctrlObj.tooltipPositionX, ctrlObj.tooltipPositionY);\n            PopupAnimation.stop(ctrlObj.tooltipEle);\n            ctrlObj.reposition(target);\n        }\n    };\n    Tooltip.prototype.afterRenderBlazor = function (target, e, showAnimation, ctrlObj) {\n        if (target) {\n            removeClass([ctrlObj.tooltipEle], POPUP_OPEN);\n            addClass([ctrlObj.tooltipEle], POPUP_CLOSE);\n            ctrlObj.tooltipEventArgs = {\n                type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n                element: ctrlObj.tooltipEle, isInteracted: !isNullOrUndefined(e)\n            };\n            if (ctrlObj.needTemplateReposition() && !ctrlObj.mouseTrail) {\n                ctrlObj.tooltipEle.style.display = 'none';\n            }\n            var observeCallback = function (observedArgs) {\n                ctrlObj.beforeOpenCallback(observedArgs, target, showAnimation, e);\n            };\n            ctrlObj.trigger('beforeOpen', ctrlObj.tooltipEventArgs, observeCallback.bind(ctrlObj));\n        }\n    };\n    Tooltip.prototype.beforeOpenCallback = function (observedArgs, target, showAnimation, e) {\n        var _this = this;\n        if (observedArgs.cancel) {\n            this.isHidden = true;\n            this.clear();\n            this.restoreElement(target);\n        }\n        else {\n            var openAnimation_1 = {\n                name: showAnimation.effect,\n                duration: showAnimation.duration,\n                delay: showAnimation.delay,\n                timingFunction: 'easeOut'\n            };\n            if (showAnimation.effect === 'None') {\n                openAnimation_1 = undefined;\n            }\n            if (this.openDelay > 0) {\n                var show = function () {\n                    if (_this.mouseTrail) {\n                        EventHandler.add(target, 'mousemove touchstart mouseenter', _this.onMouseMove, _this);\n                    }\n                    if (_this.popupObj) {\n                        _this.popupObj.show(openAnimation_1, target);\n                    }\n                };\n                this.showTimer = setTimeout(show, this.openDelay);\n            }\n            else {\n                if (this.popupObj) {\n                    this.popupObj.show(openAnimation_1, target);\n                }\n            }\n        }\n        if (e) {\n            this.wireMouseEvents(e, target);\n        }\n    };\n    Tooltip.prototype.needTemplateReposition = function () {\n        // tslint:disable-next-line:no-any\n        var tooltip = this;\n        return !isNullOrUndefined(tooltip.viewContainerRef)\n            && typeof tooltip.viewContainerRef !== 'string'\n            || (this.isServerRender()) && this.isBlazorTemplate;\n    };\n    Tooltip.prototype.checkCollision = function (target, x, y) {\n        var elePos = {\n            left: x, top: y, position: this.position,\n            horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n        };\n        var affectedPos = isCollide(this.tooltipEle, this.checkCollideTarget(), x, y);\n        if (affectedPos.length > 0) {\n            elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n                this.tooltipPositionX;\n            elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n                this.tooltipPositionY;\n        }\n        return elePos;\n    };\n    Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n        var elePos = this.checkCollision(target, x, y);\n        var newpos = elePos.position;\n        if (this.tooltipPositionY !== elePos.vertical) {\n            newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n                elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n        }\n        if (this.tooltipPositionX !== elePos.horizontal) {\n            if (newpos.indexOf('Left') === 0) {\n                elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n                newpos = (elePos.vertical + 'Left');\n            }\n            if (newpos.indexOf('Right') === 0) {\n                elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n                newpos = (elePos.vertical + 'Right');\n            }\n            elePos.horizontal = this.tooltipPositionX;\n        }\n        this.tooltipEventArgs = {\n            type: null, cancel: false, target: target, event: null,\n            element: this.tooltipEle, collidedPosition: newpos\n        };\n        this.trigger('beforeCollision', this.tooltipEventArgs);\n        if (elePos.position !== newpos) {\n            var pos = calculatePosition(target, elePos.horizontal, elePos.vertical);\n            this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n            var offsetPos = this.calculateTooltipOffset(newpos);\n            offsetPos.top -= (('TopBottom'.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1) &&\n                ('TopBottom'.indexOf(newpos.split(/(?=[A-Z])/)[0]) !== -1)) ? (2 * this.offsetY) : 0;\n            offsetPos.left -= (('RightLeft'.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1) &&\n                ('RightLeft'.indexOf(newpos.split(/(?=[A-Z])/)[0]) !== -1)) ? (2 * this.offsetX) : 0;\n            elePos.position = newpos;\n            elePos.left = pos.left + offsetPos.left;\n            elePos.top = pos.top + offsetPos.top;\n        }\n        else {\n            this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n        }\n        var eleOffset = { left: elePos.left, top: elePos.top };\n        var left = fit(this.tooltipEle, this.checkCollideTarget(), { X: true, Y: false }, eleOffset).left;\n        this.tooltipEle.style.display = 'block';\n        if (this.showTipPointer && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n            var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n            var arrowleft = parseInt(arrowEle.style.left, 10) - (left - elePos.left);\n            if (arrowleft < 0) {\n                arrowleft = 0;\n            }\n            else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n                arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n            }\n            arrowEle.style.left = arrowleft.toString() + 'px';\n        }\n        this.tooltipEle.style.display = '';\n        eleOffset.left = left;\n        return eleOffset;\n    };\n    Tooltip.prototype.checkCollideTarget = function () {\n        return !this.windowCollision && this.target ? this.element : null;\n    };\n    Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n        var _this = this;\n        if (this.closeDelay > 0) {\n            clearTimeout(this.hideTimer);\n            clearTimeout(this.showTimer);\n            var hide = function () {\n                if (_this.closeDelay && _this.tooltipEle && _this.isTooltipOpen) {\n                    return;\n                }\n                _this.tooltipHide(hideAnimation, e, targetElement);\n            };\n            this.hideTimer = setTimeout(hide, this.closeDelay);\n        }\n        else {\n            this.tooltipHide(hideAnimation, e, targetElement);\n        }\n    };\n    Tooltip.prototype.tooltipHide = function (hideAnimation, e, targetElement) {\n        var _this = this;\n        var target;\n        if (e) {\n            target = this.target ? (targetElement || e.target) : this.element;\n        }\n        else {\n            target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n        }\n        this.tooltipEventArgs = {\n            type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n            element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n        };\n        // this line commented for close the tooltip popup element even the target element destroyed in a page.\n        //if (isNullOrUndefined(target)) { return; }\n        this.trigger('beforeClose', this.tooltipEventArgs, function (observedArgs) {\n            if (!observedArgs.cancel) {\n                if (_this.isServerRender()) {\n                    _this.blazorHide(hideAnimation, target);\n                }\n                else {\n                    _this.popupHide(hideAnimation, target);\n                }\n            }\n            else {\n                _this.isHidden = false;\n            }\n        });\n    };\n    /* istanbul ignore next */\n    Tooltip.prototype.blazorHide = function (hideAnimation, target) {\n        var proxy = this;\n        var hide = function () {\n            proxy.popupHide(hideAnimation, target);\n        };\n        if (this.popupObj) {\n            this.popupHide(hideAnimation, target);\n        }\n        else {\n            setTimeout(hide, 200);\n        }\n    };\n    Tooltip.prototype.popupHide = function (hideAnimation, target) {\n        if (target) {\n            this.restoreElement(target);\n        }\n        this.isHidden = true;\n        var closeAnimation = {\n            name: hideAnimation.effect,\n            duration: hideAnimation.duration,\n            delay: hideAnimation.delay,\n            timingFunction: 'easeIn'\n        };\n        if (hideAnimation.effect === 'None') {\n            closeAnimation = undefined;\n        }\n        if (this.popupObj) {\n            this.popupObj.hide(closeAnimation);\n        }\n    };\n    Tooltip.prototype.restoreElement = function (target) {\n        this.unwireMouseEvents(target);\n        if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n            target.setAttribute('title', target.getAttribute('data-content'));\n            target.removeAttribute('data-content');\n        }\n        this.removeDescribedBy(target);\n    };\n    Tooltip.prototype.clear = function () {\n        if (this.tooltipEle) {\n            removeClass([this.tooltipEle], POPUP_CLOSE);\n            addClass([this.tooltipEle], POPUP_OPEN);\n        }\n        if (this.isHidden) {\n            if (this.popupObj) {\n                this.popupObj.destroy();\n            }\n            if (this.isServerRender() && this.tooltipEle) {\n                this.tooltipEle.style.display = 'none';\n                var args = { 'enableTooltip': 'false' };\n                // tslint:disable\n                this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args);\n                // tslint:enable\n                remove(this.tooltipEle);\n            }\n            else if (this.tooltipEle) {\n                remove(this.tooltipEle);\n            }\n            this.tooltipEle = null;\n            this.popupObj = null;\n        }\n    };\n    Tooltip.prototype.tooltipHover = function (e) {\n        if (this.tooltipEle) {\n            this.isTooltipOpen = true;\n        }\n    };\n    Tooltip.prototype.tooltipMouseOut = function (e) {\n        this.isTooltipOpen = false;\n        this.hideTooltip(this.animation.close, e, this.findTarget());\n    };\n    Tooltip.prototype.onMouseOut = function (e) {\n        var enteredElement = e.relatedTarget;\n        // don't close the tooltip only if it is tooltip content element\n        if (enteredElement && !this.mouseTrail) {\n            var checkForTooltipElement = closest(enteredElement, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT);\n            if (checkForTooltipElement) {\n                EventHandler.add(checkForTooltipElement, 'mouseleave', this.tooltipElementMouseOut, this);\n            }\n            else {\n                this.hideTooltip(this.animation.close, e, this.findTarget());\n                if (this.closeDelay === 0) {\n                    this.clear();\n                }\n            }\n        }\n        else {\n            this.hideTooltip(this.animation.close, e, this.findTarget());\n            this.clear();\n        }\n    };\n    Tooltip.prototype.tooltipElementMouseOut = function (e) {\n        this.hideTooltip(this.animation.close, e, this.findTarget());\n        EventHandler.remove(this.element, 'mouseleave', this.tooltipElementMouseOut);\n        this.clear();\n    };\n    Tooltip.prototype.onStickyClose = function (e) {\n        this.close();\n    };\n    Tooltip.prototype.onMouseMove = function (event) {\n        var eventPageX = 0;\n        var eventPageY = 0;\n        if (event.type.indexOf('touch') > -1) {\n            event.preventDefault();\n            eventPageX = event.touches[0].pageX;\n            eventPageY = event.touches[0].pageY;\n        }\n        else {\n            eventPageX = event.pageX;\n            eventPageY = event.pageY;\n        }\n        PopupAnimation.stop(this.tooltipEle);\n        removeClass([this.tooltipEle], POPUP_CLOSE);\n        addClass([this.tooltipEle], POPUP_OPEN);\n        this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n        var pos = this.calculateTooltipOffset(this.position);\n        var x = eventPageX + pos.left + this.offsetX;\n        var y = eventPageY + pos.top + this.offsetY;\n        var elePos = this.checkCollision(event.target, x, y);\n        if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n            var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n                elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n            elePos.position = newpos;\n            this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n            var colpos = this.calculateTooltipOffset(elePos.position);\n            elePos.left = eventPageX + colpos.left - this.offsetX;\n            elePos.top = eventPageY + colpos.top - this.offsetY;\n        }\n        this.tooltipEle.style.left = elePos.left + 'px';\n        this.tooltipEle.style.top = elePos.top + 'px';\n    };\n    Tooltip.prototype.keyDown = function (event) {\n        if (this.tooltipEle && event.keyCode === 27) {\n            this.close();\n        }\n    };\n    Tooltip.prototype.touchEnd = function (e) {\n        if (this.tooltipEle && closest(e.target, '.' + ROOT) === null && !this.isSticky) {\n            this.close();\n        }\n    };\n    Tooltip.prototype.scrollHandler = function (e) {\n        if (this.tooltipEle) {\n            if (!(closest(e.target, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT))) {\n                this.close();\n            }\n        }\n    };\n    /**\n     * Core method that initializes the control rendering.\n     * @private\n     */\n    Tooltip.prototype.render = function () {\n        this.initialize();\n        this.wireEvents(this.opensOn);\n        this.renderComplete();\n    };\n    /**\n     * Initializes the values of private members.\n     * @private\n     */\n    Tooltip.prototype.preRender = function () {\n        this.tipClass = TIP_BOTTOM;\n        this.tooltipPositionX = 'Center';\n        this.tooltipPositionY = 'Top';\n        this.isHidden = true;\n    };\n    /**\n     * Binding events to the Tooltip element.\n     * @hidden\n     */\n    Tooltip.prototype.wireEvents = function (trigger) {\n        var triggerList = this.getTriggerList(trigger);\n        for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n            var opensOn = triggerList_1[_i];\n            if (opensOn === 'Custom') {\n                return;\n            }\n            if (opensOn === 'Focus') {\n                this.wireFocusEvents();\n            }\n            if (opensOn === 'Click') {\n                EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n            }\n            if (opensOn === 'Hover') {\n                if (Browser.isDevice) {\n                    this.touchModule = new Touch(this.element, {\n                        tapHoldThreshold: TAPHOLD_THRESHOLD,\n                        tapHold: this.tapHoldHandler.bind(this)\n                    });\n                    EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n                }\n                else {\n                    EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n                    if (this.isServerRender() && !this.isSticky) {\n                        EventHandler.add(this.element, 'mouseleave', this.onMouseOut, this);\n                    }\n                }\n            }\n        }\n        EventHandler.add(document, 'touchend', this.touchEnd, this);\n        EventHandler.add(document, 'scroll wheel', this.scrollHandler, this);\n        EventHandler.add(document, 'keydown', this.keyDown, this);\n    };\n    Tooltip.prototype.getTriggerList = function (trigger) {\n        if (trigger === 'Auto') {\n            trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n        }\n        return trigger.split(' ');\n    };\n    Tooltip.prototype.wireFocusEvents = function () {\n        if (!isNullOrUndefined(this.target)) {\n            var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n            for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n                var target = targetList_2[_i];\n                EventHandler.add(target, 'focus', this.targetHover, this);\n            }\n        }\n        else {\n            EventHandler.add(this.element, 'focus', this.targetHover, this);\n        }\n    };\n    Tooltip.prototype.wireMouseEvents = function (e, target) {\n        if (this.tooltipEle) {\n            if (!this.isSticky) {\n                if (e.type === 'focus') {\n                    EventHandler.add(target, 'blur', this.onMouseOut, this);\n                }\n                if (e.type === 'mouseover') {\n                    if (!this.isServerRender()) {\n                        EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n                    }\n                }\n                if (this.closeDelay) {\n                    EventHandler.add(this.tooltipEle, 'mouseenter', this.tooltipHover, this);\n                    EventHandler.add(this.tooltipEle, 'mouseleave', this.tooltipMouseOut, this);\n                }\n            }\n            if (this.mouseTrail && this.openDelay === 0) {\n                EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n            }\n        }\n    };\n    /**\n     * Unbinding events from the element on widget destroy.\n     * @hidden\n     */\n    Tooltip.prototype.unwireEvents = function (trigger) {\n        var triggerList = this.getTriggerList(trigger);\n        for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n            var opensOn = triggerList_2[_i];\n            if (opensOn === 'Custom') {\n                return;\n            }\n            if (opensOn === 'Focus') {\n                this.unwireFocusEvents();\n            }\n            if (opensOn === 'Click') {\n                EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n            }\n            if (opensOn === 'Hover') {\n                if (Browser.isDevice) {\n                    if (this.touchModule) {\n                        this.touchModule.destroy();\n                    }\n                    EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n                }\n                else {\n                    EventHandler.remove(this.element, 'mouseover', this.targetHover);\n                    if (this.isServerRender() && !this.isSticky) {\n                        EventHandler.remove(this.element, 'mouseleave', this.onMouseOut);\n                    }\n                }\n            }\n        }\n        EventHandler.remove(document, 'touchend', this.touchEnd);\n        EventHandler.remove(document, 'scroll wheel', this.scrollHandler);\n        EventHandler.remove(document, 'keydown', this.keyDown);\n    };\n    Tooltip.prototype.unwireFocusEvents = function () {\n        if (!isNullOrUndefined(this.target)) {\n            var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n            for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n                var target = targetList_3[_i];\n                EventHandler.remove(target, 'focus', this.targetHover);\n            }\n        }\n        else {\n            EventHandler.remove(this.element, 'focus', this.targetHover);\n        }\n    };\n    Tooltip.prototype.unwireMouseEvents = function (target) {\n        if (!this.isSticky) {\n            var triggerList = this.getTriggerList(this.opensOn);\n            for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n                var opensOn = triggerList_3[_i];\n                if (opensOn === 'Focus') {\n                    EventHandler.remove(target, 'blur', this.onMouseOut);\n                }\n                if (opensOn === 'Hover' && !Browser.isDevice) {\n                    if (!this.isServerRender()) {\n                        EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n                    }\n                }\n            }\n            if (this.closeDelay) {\n                EventHandler.remove(target, 'mouseenter', this.tooltipHover);\n                EventHandler.remove(target, 'mouseleave', this.tooltipMouseOut);\n            }\n        }\n        if (this.mouseTrail) {\n            EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n        }\n    };\n    Tooltip.prototype.findTarget = function () {\n        var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n        return target;\n    };\n    /**\n     * Core method to return the component name.\n     * @private\n     */\n    Tooltip.prototype.getModuleName = function () {\n        return 'tooltip';\n    };\n    /**\n     * Returns the properties to be maintained in the persisted state.\n     * @private\n     */\n    Tooltip.prototype.getPersistData = function () {\n        return this.addOnPersist([]);\n    };\n    /**\n     * Called internally, if any of the property value changed.\n     * @private\n     */\n    Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var targetElement = this.findTarget();\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'width':\n                    if (this.tooltipEle && targetElement) {\n                        this.tooltipEle.style.width = this.tooltipEle.style.maxWidth = formatUnit(newProp.width);\n                        this.reposition(targetElement);\n                    }\n                    break;\n                case 'height':\n                    if (this.tooltipEle && targetElement) {\n                        this.tooltipEle.style.height = formatUnit(newProp.height);\n                        this.reposition(targetElement);\n                    }\n                    break;\n                case 'content':\n                    if (this.tooltipEle) {\n                        if (this.isServerRender()) {\n                            this.isBlazorTooltip = true;\n                        }\n                        this.renderContent();\n                    }\n                    else if (this.isServerRender()) {\n                        var args = { 'content': newProp.content };\n                        // tslint:disable\n                        this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args);\n                        // tslint:enable\n                    }\n                    break;\n                case 'opensOn':\n                    this.unwireEvents(oldProp.opensOn);\n                    this.wireEvents(newProp.opensOn);\n                    break;\n                case 'position':\n                    this.formatPosition();\n                    if (this.tooltipEle && targetElement) {\n                        var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n                        arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n                        this.reposition(targetElement);\n                    }\n                    break;\n                case 'tipPointerPosition':\n                    if (this.tooltipEle && targetElement) {\n                        this.reposition(targetElement);\n                    }\n                    break;\n                case 'offsetX':\n                    if (this.tooltipEle) {\n                        var x = newProp.offsetX - oldProp.offsetX;\n                        this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n                    }\n                    break;\n                case 'offsetY':\n                    if (this.tooltipEle) {\n                        var y = newProp.offsetY - oldProp.offsetY;\n                        this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n                    }\n                    break;\n                case 'cssClass':\n                    if (this.tooltipEle) {\n                        if (oldProp.cssClass) {\n                            removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n                        }\n                        if (newProp.cssClass) {\n                            addClass([this.tooltipEle], newProp.cssClass.split(' '));\n                        }\n                    }\n                    break;\n                case 'enableRtl':\n                    if (this.tooltipEle) {\n                        if (this.enableRtl) {\n                            addClass([this.tooltipEle], RTL);\n                        }\n                        else {\n                            removeClass([this.tooltipEle], RTL);\n                        }\n                    }\n                    break;\n            }\n        }\n    };\n    /**\n     * It is used to show the Tooltip on the specified target with specific animation settings.\n     * @param element Target element where the Tooltip is to be displayed. (It is an optional parameter)\n     * @param animation Sets the specific animation, while showing the Tooltip on the screen. (It is an optional parameter)\n     * @return {void}\n     */\n    Tooltip.prototype.open = function (element, animation) {\n        if (isNullOrUndefined(animation)) {\n            animation = this.animation.open;\n        }\n        if (isNullOrUndefined(element)) {\n            element = this.element;\n        }\n        if (element.style.display === 'none') {\n            return;\n        }\n        this.showTooltip(element, animation);\n    };\n    /**\n     * It is used to hide the Tooltip with specific animation effect.\n     * @param animation Sets the specific animation when hiding Tooltip from the screen. (It is an optional parameter)\n     * @return {void}\n     */\n    Tooltip.prototype.close = function (animation) {\n        if (!animation) {\n            animation = this.animation.close;\n        }\n        this.hideTooltip(animation);\n    };\n    /**\n     * It is used to refresh the Tooltip content and its position.\n     * @param target Target element where the Tooltip content or position needs to be refreshed.\n     * @return {void}\n     */\n    Tooltip.prototype.refresh = function (target) {\n        if (this.tooltipEle) {\n            this.renderContent(target);\n        }\n        if (this.popupObj && target) {\n            this.reposition(target);\n        }\n    };\n    /**\n     * It is used to destroy the Tooltip component.\n     * @method destroy\n     * @return {void}\n     * @memberof Tooltip\n     */\n    Tooltip.prototype.destroy = function () {\n        if (!this.isServerRender()) {\n            _super.prototype.destroy.call(this);\n            if (this.tooltipEle) {\n                remove(this.tooltipEle);\n            }\n        }\n        if (this.isServerRender() && this.tooltipEle) {\n            var placeholder = document.querySelector('#' + this.ctrlId + '_content_placeholder');\n            if (placeholder) {\n                placeholder.appendChild(this.tooltipEle);\n            }\n        }\n        if (this.popupObj) {\n            this.popupObj.destroy();\n        }\n        removeClass([this.element], ROOT);\n        this.unwireEvents(this.opensOn);\n        this.unwireMouseEvents(this.element);\n        this.tooltipEle = null;\n        this.popupObj = null;\n    };\n    __decorate([\n        Property('auto')\n    ], Tooltip.prototype, \"width\", void 0);\n    __decorate([\n        Property('auto')\n    ], Tooltip.prototype, \"height\", void 0);\n    __decorate([\n        Property()\n    ], Tooltip.prototype, \"content\", void 0);\n    __decorate([\n        Property()\n    ], Tooltip.prototype, \"target\", void 0);\n    __decorate([\n        Property('TopCenter')\n    ], Tooltip.prototype, \"position\", void 0);\n    __decorate([\n        Property(0)\n    ], Tooltip.prototype, \"offsetX\", void 0);\n    __decorate([\n        Property(0)\n    ], Tooltip.prototype, \"offsetY\", void 0);\n    __decorate([\n        Property(true)\n    ], Tooltip.prototype, \"showTipPointer\", void 0);\n    __decorate([\n        Property(true)\n    ], Tooltip.prototype, \"enableHtmlParse\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"windowCollision\", void 0);\n    __decorate([\n        Property('Auto')\n    ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n    __decorate([\n        Property('Auto')\n    ], Tooltip.prototype, \"opensOn\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"mouseTrail\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"isSticky\", void 0);\n    __decorate([\n        Complex({}, Animation)\n    ], Tooltip.prototype, \"animation\", void 0);\n    __decorate([\n        Property(0)\n    ], Tooltip.prototype, \"openDelay\", void 0);\n    __decorate([\n        Property(0)\n    ], Tooltip.prototype, \"closeDelay\", void 0);\n    __decorate([\n        Property()\n    ], Tooltip.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"beforeRender\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"beforeOpen\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"afterOpen\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"beforeClose\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"afterClose\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"beforeCollision\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"destroyed\", void 0);\n    Tooltip = __decorate([\n        NotifyPropertyChanges\n    ], Tooltip);\n    return Tooltip;\n}(Component));\nexport { Tooltip };\n","import { extend, merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n    li: 'e-list-item',\n    ul: 'e-list-parent e-ul',\n    group: 'e-list-group-item',\n    icon: 'e-list-icon',\n    text: 'e-list-text',\n    check: 'e-list-check',\n    checked: 'e-checked',\n    selected: 'e-selected',\n    expanded: 'e-expanded',\n    textContent: 'e-text-content',\n    hasChild: 'e-has-child',\n    level: 'e-level',\n    url: 'e-list-url',\n    collapsible: 'e-icon-collapsible',\n    disabled: 'e-disabled',\n    image: 'e-list-img',\n    iconWrapper: 'e-icon-wrapper',\n    anchorWrap: 'e-anchor-wrap',\n    navigable: 'e-navigable'\n};\n/**\n * Base List Generator\n */\nexport var ListBase;\n(function (ListBase) {\n    /**\n     * Default mapped fields.\n     */\n    ListBase.defaultMappedFields = {\n        id: 'id',\n        text: 'text',\n        url: 'url',\n        value: 'value',\n        isChecked: 'isChecked',\n        enabled: 'enabled',\n        expanded: 'expanded',\n        selected: 'selected',\n        iconCss: 'iconCss',\n        child: 'child',\n        isVisible: 'isVisible',\n        hasChildren: 'hasChildren',\n        tooltip: 'tooltip',\n        htmlAttributes: 'htmlAttributes',\n        urlAttributes: 'urlAttributes',\n        imageAttributes: 'imageAttributes',\n        imageUrl: 'imageUrl',\n        groupBy: null\n    };\n    var defaultAriaAttributes = {\n        level: 1,\n        listRole: 'presentation',\n        itemRole: 'presentation',\n        groupItemRole: 'group',\n        itemText: 'list-item',\n        wrapperRole: 'presentation'\n    };\n    var defaultListBaseOptions = {\n        showCheckBox: false,\n        showIcon: false,\n        enableHtmlSanitizer: false,\n        expandCollapse: false,\n        fields: ListBase.defaultMappedFields,\n        ariaAttributes: defaultAriaAttributes,\n        listClass: '',\n        itemClass: '',\n        processSubChild: false,\n        sortOrder: 'None',\n        template: null,\n        groupTemplate: null,\n        headerTemplate: null,\n        expandIconClass: 'e-icon-collapsible',\n        moduleName: 'list',\n        expandIconPosition: 'Right',\n        itemNavigable: false\n    };\n    /**\n     * Function helps to created and return the UL Li element based on your data.\n     * @param  {{[key:string]:Object}[]|string[]} dataSource - Specifies an array of JSON or String data.\n     * @param  {ListBaseOptions} options? - Specifies the list options that need to provide.\n     */\n    function createList(createElement, dataSource, \n    // tslint:disable-next-line\n    options, isSingleLevel, componentInstance) {\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n        var type = typeofData(dataSource).typeof;\n        if (type === 'string' || type === 'number') {\n            return createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n        }\n        else {\n            // tslint:disable-next-line\n            return createListFromJson(createElement, dataSource, options, \n            // tslint:disable-next-line\n            ariaAttributes.level, isSingleLevel, componentInstance);\n        }\n    }\n    ListBase.createList = createList;\n    /**\n     * Function helps to created an element list based on string array input .\n     * @param  {string[]} dataSource - Specifies an array of string data\n     */\n    function createListFromArray(createElement, dataSource, \n    // tslint:disable-next-line\n    isSingleLevel, options, componentInstance) {\n        var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n        return generateUL(createElement, subChild, null, options);\n    }\n    ListBase.createListFromArray = createListFromArray;\n    /**\n     * Function helps to created an element list based on string array input .\n     * @param  {string[]} dataSource - Specifies an array of string data\n     */\n    function createListItemFromArray(createElement, dataSource, \n    // tslint:disable-next-line\n    isSingleLevel, options, componentInstance) {\n        var subChild = [];\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        cssClass = getModuleClass(curOpt.moduleName);\n        var id = generateId(); // generate id for drop-down-list option.\n        for (var i = 0; i < dataSource.length; i++) {\n            if (isNullOrUndefined(dataSource[i])) {\n                continue;\n            }\n            var li = void 0;\n            if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n                var curData = {\n                    dataSource: dataSource,\n                    curData: dataSource[i],\n                    text: dataSource[i],\n                    options: curOpt\n                };\n                curOpt.itemCreating(curData);\n            }\n            if (isSingleLevel) {\n                li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n            }\n            else {\n                li = generateLI(createElement, dataSource[i], undefined, null, null, options, componentInstance);\n            }\n            if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n                var curData = {\n                    dataSource: dataSource,\n                    curData: dataSource[i],\n                    text: dataSource[i],\n                    item: li,\n                    options: curOpt\n                };\n                curOpt.itemCreated(curData);\n            }\n            subChild.push(li);\n        }\n        return subChild;\n    }\n    ListBase.createListItemFromArray = createListItemFromArray;\n    /**\n     * Function helps to created an element list based on array of JSON input .\n     * @param  {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n     * @param  {ListBaseOptions} options? - Specifies the list options that need to provide.\n     */\n    // tslint:disable-next-line:max-func-body-length\n    // tslint:disable-next-line\n    function createListItemFromJson(createElement, dataSource, \n    // tslint:disable-next-line\n    options, level, isSingleLevel, componentInstance) {\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        cssClass = getModuleClass(curOpt.moduleName);\n        var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n        var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n        var id;\n        var checkboxElement = [];\n        if (level) {\n            ariaAttributes.level = level;\n        }\n        var child = [];\n        var li;\n        var anchorElement;\n        if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n            !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n            id = generateId(); // generate id for drop-down-list option.\n        }\n        for (var i = 0; i < dataSource.length; i++) {\n            var fieldData = getFieldValues(dataSource[i], fields);\n            if (isNullOrUndefined(dataSource[i])) {\n                continue;\n            }\n            if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n                var curData = {\n                    dataSource: dataSource,\n                    curData: dataSource[i],\n                    text: fieldData[fields.text],\n                    options: curOpt,\n                    fields: fields\n                };\n                curOpt.itemCreating(curData);\n            }\n            var curItem = dataSource[i];\n            if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n                fieldData = getFieldValues(dataSource[i], fields);\n            }\n            if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n                id = fieldData[fields.id];\n            }\n            var innerEle = [];\n            if (curOpt.showCheckBox) {\n                if (curOpt.itemNavigable && (fieldData[fields.url] || fieldData[fields.urlAttributes])) {\n                    checkboxElement.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n                }\n                else {\n                    innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n                }\n            }\n            if (isSingleLevel === true) {\n                if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n                    innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n                }\n                li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, (curItem.hasOwnProperty('isHeader') &&\n                    curItem.isHeader) ? true : false, id, i, options);\n                anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n                if (curOpt.itemNavigable && checkboxElement.length) {\n                    prepend(checkboxElement, li.firstElementChild);\n                }\n            }\n            else {\n                li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);\n                li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n                li.setAttribute('aria-level', ariaAttributes.level.toString());\n                anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n                if (fieldData.hasOwnProperty(fields.tooltip)) {\n                    li.setAttribute('title', fieldData[fields.tooltip]);\n                }\n                if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n                    setAttribute(li, fieldData[fields.htmlAttributes]);\n                }\n                if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n                    li.classList.add(cssClass.disabled);\n                }\n                if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n                    li.style.display = 'none';\n                }\n                if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n                    && !curOpt.template) {\n                    var attr = { src: fieldData[fields.imageUrl] };\n                    merge(attr, fieldData[fields.imageAttributes]);\n                    var imageElemnt = createElement('img', { className: cssClass.image, attrs: attr });\n                    if (anchorElement) {\n                        anchorElement.insertAdjacentElement('afterbegin', imageElemnt);\n                    }\n                    else {\n                        prepend([imageElemnt], li.firstElementChild);\n                    }\n                }\n                if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) &&\n                    !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n                    var iconElement = void 0;\n                    iconElement = createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] });\n                    if (anchorElement) {\n                        anchorElement.insertAdjacentElement('afterbegin', iconElement);\n                    }\n                    else {\n                        prepend([iconElement], li.firstElementChild);\n                    }\n                }\n                if (innerEle.length) {\n                    prepend(innerEle, li.firstElementChild);\n                }\n                if (curOpt.itemNavigable && checkboxElement.length) {\n                    prepend(checkboxElement, li.firstElementChild);\n                }\n                processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n            }\n            if (anchorElement) {\n                addClass([li], [cssClass.navigable]);\n            }\n            if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n                var curData = {\n                    dataSource: dataSource,\n                    curData: dataSource[i],\n                    text: fieldData[fields.text],\n                    item: li,\n                    options: curOpt,\n                    fields: fields\n                };\n                curOpt.itemCreated(curData);\n            }\n            checkboxElement = [];\n            child.push(li);\n        }\n        return child;\n    }\n    ListBase.createListItemFromJson = createListItemFromJson;\n    /**\n     * Function helps to created an element list based on array of JSON input .\n     * @param  {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n     * @param  {ListBaseOptions} options? - Specifies the list options that need to provide.\n     */\n    function createListFromJson(createElement, dataSource, \n    // tslint:disable-next-line\n    options, level, isSingleLevel, componentInstance) {\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel, componentInstance);\n        return generateUL(createElement, li, curOpt.listClass, options);\n    }\n    ListBase.createListFromJson = createListFromJson;\n    /**\n     * Return the next or previous visible element.\n     * @param  {Element[]|NodeList} elementArray - An element array to find next or previous element.\n     * @param  {Element} li - An element to find next or previous after this element.\n     * @param  {boolean} isPrevious? - Specify when the need get previous element from array.\n     */\n    function getSiblingLI(elementArray, element, isPrevious) {\n        cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n        if (!elementArray || !elementArray.length) {\n            return void 0;\n        }\n        var siblingLI;\n        var liIndex;\n        var liCollections = Array.prototype.slice.call(elementArray);\n        if (element) {\n            liIndex = indexOf(element, liCollections);\n        }\n        else {\n            liIndex = (isPrevious === true ? liCollections.length : -1);\n        }\n        siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n        while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n            liIndex = liIndex + (isPrevious === true ? -1 : 1);\n            siblingLI = liCollections[liIndex];\n        }\n        return siblingLI;\n    }\n    ListBase.getSiblingLI = getSiblingLI;\n    /**\n     * Return the index of the li element\n     * @param  {Element} item - An element to find next or previous after this element.\n     * @param  {Element[]|NodeList} elementArray - An element array to find index of given li.\n     */\n    function indexOf(item, elementArray) {\n        if (!elementArray || !item) {\n            return void 0;\n        }\n        else {\n            var liCollections = elementArray;\n            liCollections = Array.prototype.slice.call(elementArray);\n            return liCollections.indexOf(item);\n        }\n    }\n    ListBase.indexOf = indexOf;\n    /**\n     * Returns the grouped data from given dataSource.\n     * @param  {{[key:string]:Object}[]} dataSource - The JSON data which is necessary to process.\n     * @param  {FieldsMapping} fields - Fields that are mapped from the data source.\n     * @param  {SortOrder='None'} sortOrder- Specifies final result sort order.\n     */\n    function groupDataSource(dataSource, fields, sortOrder) {\n        if (sortOrder === void 0) { sortOrder = 'None'; }\n        var curFields = extend({}, ListBase.defaultMappedFields, fields);\n        var cusQuery = new Query().group(curFields.groupBy);\n        // need to remove once sorting issues fixed in DataManager\n        cusQuery = addSorting(sortOrder, 'key', cusQuery);\n        var ds = getDataSource(dataSource, cusQuery);\n        dataSource = [];\n        for (var j = 0; j < ds.length; j++) {\n            var itemObj = ds[j].items;\n            var grpItem = {};\n            var hdr = 'isHeader';\n            grpItem[curFields.text] = ds[j].key;\n            grpItem[hdr] = true;\n            var newtext = curFields.text;\n            if (newtext === 'id') {\n                newtext = 'text';\n                grpItem[newtext] = ds[j].key;\n            }\n            grpItem._id = 'group-list-item-' + (ds[j].key ?\n                ds[j].key.toString().trim() : 'undefined');\n            grpItem.items = itemObj;\n            dataSource.push(grpItem);\n            for (var k = 0; k < itemObj.length; k++) {\n                dataSource.push(itemObj[k]);\n            }\n        }\n        return dataSource;\n    }\n    ListBase.groupDataSource = groupDataSource;\n    /**\n     * Returns a sorted query object.\n     * @param  {SortOrder} sortOrder - Specifies that sort order.\n     * @param  {string} sortBy - Specifies sortBy fields.\n     * @param  {Query=new Query()} query - Pass if any existing query.\n     */\n    function addSorting(sortOrder, sortBy, query) {\n        if (query === void 0) { query = new Query(); }\n        if (sortOrder === 'Ascending') {\n            query.sortBy(sortBy, 'ascending', true);\n        }\n        else if (sortOrder === 'Descending') {\n            query.sortBy(sortBy, 'descending', true);\n        }\n        else {\n            for (var i = 0; i < query.queries.length; i++) {\n                if (query.queries[i].fn === 'onSortBy') {\n                    query.queries.splice(i, 1);\n                }\n            }\n        }\n        return query;\n    }\n    ListBase.addSorting = addSorting;\n    /**\n     * Return an array of JSON Data that processed based on queries.\n     * @param  {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n     * @param  {Query} query - Specifies query that need to process.\n     */\n    function getDataSource(dataSource, query) {\n        // tslint:disable-next-line\n        return new DataManager(dataSource)\n            .executeLocal(query);\n    }\n    ListBase.getDataSource = getDataSource;\n    /**\n     * Created JSON data based the UL and LI element\n     * @param  {HTMLElement|Element} element - UL element that need to convert as a JSON\n     * @param  {ListBaseOptions} options? - Specifies listbase option for fields.\n     */\n    function createJsonFromElement(element, options) {\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n        var curEle = element.cloneNode(true);\n        var jsonAr = [];\n        curEle.classList.add('json-parent');\n        var childs = curEle.querySelectorAll('.json-parent>li');\n        curEle.classList.remove('json-parent');\n        for (var i = 0; i < childs.length; i++) {\n            var li = childs[i];\n            var anchor = li.querySelector('a');\n            var ul = li.querySelector('ul');\n            var json = {};\n            var childNodes = anchor ? anchor.childNodes : li.childNodes;\n            var keys = Object.keys(childNodes);\n            for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n                if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n                    json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n                }\n            }\n            var attributes_1 = getAllAttributes(li);\n            if (attributes_1.id) {\n                json[fields.id] = attributes_1.id;\n                delete attributes_1.id;\n            }\n            else {\n                json[fields.id] = generateId();\n            }\n            if (Object.keys(attributes_1).length) {\n                json[fields.htmlAttributes] = attributes_1;\n            }\n            if (anchor) {\n                attributes_1 = getAllAttributes(anchor);\n                if (Object.keys(attributes_1).length) {\n                    json[fields.urlAttributes] = attributes_1;\n                }\n            }\n            if (ul) {\n                json[fields.child] = createJsonFromElement(ul, options);\n            }\n            jsonAr.push(json);\n        }\n        return jsonAr;\n    }\n    ListBase.createJsonFromElement = createJsonFromElement;\n    function typeofData(data) {\n        var match = { typeof: null, item: null };\n        for (var i = 0; i < data.length; i++) {\n            if (!isNullOrUndefined(data[i])) {\n                return match = { typeof: typeof data[i], item: data[i] };\n            }\n        }\n        return match;\n    }\n    function setAttribute(element, elementAttributes) {\n        var attr = {};\n        merge(attr, elementAttributes);\n        if (attr.class) {\n            addClass([element], attr.class.split(' '));\n            delete attr.class;\n        }\n        attributes(element, attr);\n    }\n    function getAllAttributes(element) {\n        var attributes = {};\n        var attr = element.attributes;\n        for (var index = 0; index < attr.length; index++) {\n            attributes[attr[index].nodeName] = attr[index].nodeValue;\n        }\n        return attributes;\n    }\n    /**\n     * Created UL element from content template.\n     * @param  {string} template - that need to convert and generate li element.\n     * @param  {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n     * @param  {ListBaseOptions} options? - Specifies listbase option for fields.\n     */\n    function renderContentTemplate(createElement, template, dataSource, \n    // tslint:disable-next-line\n    fields, options, componentInstance) {\n        cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n        var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        var curFields = extend({}, ListBase.defaultMappedFields, fields);\n        var compiledString = compile(template);\n        var liCollection = [];\n        var value;\n        var id = generateId(); // generate id for drop-down-list option.\n        for (var i = 0; i < dataSource.length; i++) {\n            var fieldData = getFieldValues(dataSource[i], curFields);\n            var curItem = dataSource[i];\n            var isHeader = curItem.isHeader;\n            if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n                value = curItem;\n            }\n            else {\n                value = fieldData[curFields.value];\n            }\n            if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n                var curData = {\n                    dataSource: dataSource,\n                    curData: curItem,\n                    text: value,\n                    options: curOpt,\n                    fields: curFields\n                };\n                curOpt.itemCreating(curData);\n            }\n            if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n                fieldData = getFieldValues(dataSource[i], curFields);\n                if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n                    value = curItem;\n                }\n                else {\n                    value = fieldData[curFields.value];\n                }\n            }\n            var li = createElement('li', {\n                id: id + '-' + i,\n                className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n            });\n            if (isHeader) {\n                if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n                    li.innerText = curItem;\n                }\n                else {\n                    li.innerText = fieldData[curFields.text];\n                }\n            }\n            else {\n                var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;\n                if (isHeader) {\n                    append(compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate), li);\n                }\n                else {\n                    append(compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate), li);\n                }\n                li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n                li.setAttribute('role', 'option');\n            }\n            if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n                var curData = {\n                    dataSource: dataSource,\n                    curData: curItem,\n                    text: value,\n                    item: li,\n                    options: curOpt,\n                    fields: curFields\n                };\n                curOpt.itemCreated(curData);\n            }\n            liCollection.push(li);\n        }\n        append(liCollection, ulElement);\n        return ulElement;\n    }\n    ListBase.renderContentTemplate = renderContentTemplate;\n    /**\n     * Created header items from group template.\n     * @param  {string} template - that need to convert and generate li element.\n     * @param  {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n     * @param  {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n     * @param  {Element[]} headerItems? - Specifies listbase header items.\n     */\n    // tslint:disable-next-line\n    function renderGroupTemplate(groupTemplate, groupDataSource, fields, \n    // tslint:disable-next-line\n    headerItems, options, componentInstance) {\n        var compiledString = compile(groupTemplate);\n        var curFields = extend({}, ListBase.defaultMappedFields, fields);\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        var category = curFields.groupBy;\n        for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n            var header = headerItems_1[_i];\n            var headerData = {};\n            headerData[category] = header.textContent;\n            header.innerHTML = '';\n            append(compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), header);\n        }\n        return headerItems;\n    }\n    ListBase.renderGroupTemplate = renderGroupTemplate;\n    function generateId() {\n        return Math.floor((1 + Math.random()) * 0x10000)\n            .toString(16)\n            .substring(1);\n    }\n    ListBase.generateId = generateId;\n    function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n        // Get SubList\n        var subDS = fieldData[fields.child] || [];\n        var hasChildren = fieldData[fields.hasChildren];\n        //Create Sub child\n        if (subDS.length) {\n            hasChildren = true;\n            element.classList.add(cssClass.hasChild);\n            if (options.processSubChild) {\n                var subLi = createListFromJson(createElement, subDS, options, ++level);\n                element.appendChild(subLi);\n            }\n        }\n        // Create expand and collapse node\n        if (!!options.expandCollapse && hasChildren && !options.template) {\n            element.firstElementChild.classList.add(cssClass.iconWrapper);\n            var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n            expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n        }\n    }\n    function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n        var text = item;\n        var value = item;\n        var dataSource;\n        if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n            dataSource = item;\n            text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n                fieldData[fields.text] : (fieldData[fields.text] || '');\n            value = fieldData[fields.value];\n        }\n        var elementID;\n        if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n            && fieldData[fields.id] !== '') {\n            elementID = id;\n        }\n        else {\n            elementID = id + '-' + index;\n        }\n        var li = createElement('li', {\n            className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n            id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n                { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n        });\n        if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n            li.classList.add(cssClass.disabled);\n        }\n        if (grpLI) {\n            li.innerText = text;\n        }\n        else {\n            li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n            li.setAttribute('role', 'option');\n            if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n                setAttribute(li, fieldData[fields.htmlAttributes]);\n            }\n            if (innerElements.length && !curOpt.itemNavigable) {\n                append(innerElements, li);\n            }\n            if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n                fieldData[fields.urlAttributes].href))) {\n                li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable));\n            }\n            else {\n                if (innerElements.length && curOpt.itemNavigable) {\n                    append(innerElements, li);\n                }\n                li.appendChild(document.createTextNode(text));\n            }\n        }\n        return li;\n    }\n    function getModuleClass(moduleName) {\n        var moduleClass;\n        return moduleClass = {\n            li: \"e-\" + moduleName + \"-item\",\n            ul: \"e-\" + moduleName + \"-parent e-ul\",\n            group: \"e-\" + moduleName + \"-group-item\",\n            icon: \"e-\" + moduleName + \"-icon\",\n            text: \"e-\" + moduleName + \"-text\",\n            check: \"e-\" + moduleName + \"-check\",\n            checked: 'e-checked',\n            selected: 'e-selected',\n            expanded: 'e-expanded',\n            textContent: 'e-text-content',\n            hasChild: 'e-has-child',\n            level: 'e-level',\n            url: \"e-\" + moduleName + \"-url\",\n            collapsible: 'e-icon-collapsible',\n            disabled: 'e-disabled',\n            image: \"e-\" + moduleName + \"-img\",\n            iconWrapper: 'e-icon-wrapper',\n            anchorWrap: 'e-anchor-wrap',\n            navigable: 'e-navigable',\n        };\n    }\n    function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {\n        var fieldData = getFieldValues(dataSource, fields);\n        var attr = { href: fieldData[fields.url] };\n        if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n            merge(attr, fieldData[fields.urlAttributes]);\n            attr.href = fieldData[fields.url] ? fieldData[fields.url] :\n                fieldData[fields.urlAttributes].href;\n        }\n        var anchorTag;\n        if (!isFullNavigation) {\n            anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n        }\n        else {\n            anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url });\n            var anchorWrapper = createElement('div', { className: cssClass.anchorWrap });\n            if (innerElements && innerElements.length) {\n                append(innerElements, anchorWrapper);\n            }\n            anchorWrapper.appendChild(document.createTextNode(text));\n            append([anchorWrapper], anchorTag);\n        }\n        setAttribute(anchorTag, attr);\n        return anchorTag;\n    }\n    // tslint:disable-next-line\n    /* tslint:disable:align */\n    function generateLI(createElement, item, fieldData, \n    // tslint:disable-next-line\n    fields, className, options, componentInstance) {\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n        var text = item;\n        var uID;\n        var grpLI;\n        var dataSource;\n        if (typeof item !== 'string' && typeof item !== 'number') {\n            dataSource = item;\n            text = fieldData[fields.text] || '';\n            // tslint:disable-next-line\n            uID = (isNullOrUndefined(fieldData['_id'])) ? fieldData[fields.id] : fieldData['_id'];\n            grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n                ? true : false;\n        }\n        if (options && options.enableHtmlSanitizer) {\n            text = text;\n        }\n        var li = createElement('li', {\n            className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n            attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n                { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n        });\n        !isNullOrUndefined(uID) ? li.setAttribute('data-uid', uID) : li.setAttribute('data-uid', generateId());\n        var blazId = 'BlazId';\n        if (options && !!options.removeBlazorID\n            && typeof item === 'object'\n            && item.hasOwnProperty(blazId)) {\n            delete item[blazId];\n        }\n        if (grpLI && options && options.groupTemplate) {\n            var compiledString = compile(options.groupTemplate);\n            append(compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), li);\n        }\n        else if (!grpLI && options && options.template) {\n            var compiledString = compile(options.template);\n            append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n        }\n        else {\n            var innerDiv = createElement('div', {\n                className: cssClass.textContent,\n                attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n            });\n            if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n                fieldData[fields.urlAttributes].href))) {\n                innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n            }\n            else {\n                var element = createElement('span', {\n                    className: cssClass.text,\n                    attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n                });\n                if (options && options.enableHtmlSanitizer) {\n                    element.innerText = text;\n                }\n                else {\n                    element.innerHTML = text;\n                }\n                innerDiv.appendChild(element);\n            }\n            li.appendChild(innerDiv);\n        }\n        return li;\n    }\n    /**\n     * Returns UL element based on the given LI element.\n     * @param  {HTMLElement[]} liElement - Specifies array of LI element.\n     * @param  {string} className? - Specifies class name that need to be added in UL element.\n     * @param  {ListBaseOptions} options? - Specifies ListBase options.\n     */\n    function generateUL(createElement, liElement, className, options) {\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n        cssClass = getModuleClass(curOpt.moduleName);\n        var ulElement = createElement('ul', {\n            className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n            attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n        });\n        append(liElement, ulElement);\n        return ulElement;\n    }\n    ListBase.generateUL = generateUL;\n    /**\n     * Returns LI element with additional DIV tag based on the given LI element.\n     * @param  {liElement} liElement - Specifies LI element.\n     * @param  {string} className? - Specifies class name that need to be added in created DIV element.\n     * @param  {ListBaseOptions} options? - Specifies ListBase options.\n     */\n    function generateIcon(createElement, liElement, className, options) {\n        var curOpt = extend({}, defaultListBaseOptions, options);\n        cssClass = getModuleClass(curOpt.moduleName);\n        var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n        expandElement([createElement('div', {\n                className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n                    (isNullOrUndefined(className) ? '' : className)\n            })], liElement.querySelector('.' + cssClass.textContent));\n        return liElement;\n    }\n    ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n * @param {{[key:string]:Object}|string[]|string} dataSource - Specifies an  JSON or String data.\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n    var fieldData = {};\n    if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n        || !isNullOrUndefined(dataItem.isHeader)) {\n        return dataItem;\n    }\n    else {\n        for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n            var field = _a[_i];\n            var dataField = fields[field];\n            var value = !isNullOrUndefined(dataField) &&\n                typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n            if (!isNullOrUndefined(value)) {\n                fieldData[dataField] = value;\n            }\n        }\n    }\n    return fieldData;\n}\n","import { isNullOrUndefined, classList, createElement } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar spinTemplate = null;\nvar spinCSSClass = null;\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar DEFT_BOOT4_WIDTH = 36;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_BOOT4SPIN = 'e-spin-bootstrap4';\nvar CLS_HIGHCONTRASTSPIN = 'e-spin-high-contrast';\nvar CLS_SPINWRAP = 'e-spinner-pane';\nvar CLS_SPININWRAP = 'e-spinner-inner';\nvar CLS_SPINCIRCLE = 'e-path-circle';\nvar CLS_SPINARC = 'e-path-arc';\nvar CLS_SPINLABEL = 'e-spin-label';\nvar CLS_SPINTEMPLATE = 'e-spin-template';\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : blazorSpinner({ action: \"Create\", options: {target: targetElement}, type: \"\" });\n * ```\n * @param args\n * @private\n */\nexport function Spinner(action, options, target, type) {\n    switch (action) {\n        case 'Create':\n            var element = document.querySelector(options.target);\n            var args = { type: type, target: element, cssClass: options.cssClass,\n                label: options.label, width: options.width };\n            createSpinner(args);\n            break;\n        case 'Show':\n            showSpinner(document.querySelector(target));\n            break;\n        case 'Hide':\n            hideSpinner(document.querySelector(target));\n            break;\n        case 'Set':\n            var setArgs = { cssClass: options.cssClass, type: type };\n            setSpinner(setArgs);\n            break;\n    }\n}\n/**\n * Create a spinner for the specified target element.\n * ```\n * E.g : createSpinner({ target: targetElement, width: '34px', label: 'Loading..' });\n * ```\n * @param args\n * @private\n */\nexport function createSpinner(args, internalCreateElement) {\n    if (!args.target) {\n        return;\n    }\n    var radius;\n    var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n    var container = create_spinner_container(args.target, makeElement);\n    if (!isNullOrUndefined(args.cssClass)) {\n        container.wrap.classList.add(args.cssClass);\n    }\n    if (!isNullOrUndefined(args.template) || !isNullOrUndefined(spinTemplate)) {\n        var template = !isNullOrUndefined(args.template) ? args.template : spinTemplate;\n        container.wrap.classList.add(CLS_SPINTEMPLATE);\n        replaceContent(container.wrap, template, spinCSSClass);\n    }\n    else {\n        var theme = !isNullOrUndefined(args.type) ? args.type : getTheme(container.wrap);\n        var width = !isNullOrUndefined(args.width) ? args.width : undefined;\n        radius = calculateRadius(width, theme);\n        setTheme(theme, container.wrap, radius, makeElement);\n        if (!isNullOrUndefined(args.label)) {\n            createLabel(container.inner_wrap, args.label, makeElement);\n        }\n    }\n    container.wrap.classList.add(CLS_HIDESPIN);\n    container = null;\n}\nfunction createLabel(container, label, makeElement) {\n    var labelEle = makeElement('div', {});\n    labelEle.classList.add(CLS_SPINLABEL);\n    labelEle.textContent = label;\n    container.appendChild(labelEle);\n    return labelEle;\n}\nfunction createMaterialSpinner(container, radius, makeElement) {\n    var uniqueID = random_generator();\n    globalTimeOut[uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n    create_material_element(container, uniqueID, makeElement, CLS_MATERIALSPIN);\n    mat_calculate_attributes(radius, container, 'Material', CLS_MATERIALSPIN);\n}\nfunction createBootstrap4Spinner(container, radius, makeElement) {\n    var uniqueID = random_generator();\n    globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap4', radius: radius };\n    create_material_element(container, uniqueID, makeElement, CLS_BOOT4SPIN);\n    mat_calculate_attributes(radius, container, 'Bootstrap4', CLS_BOOT4SPIN);\n}\nfunction startMatAnimate(container, uniqueID, radius) {\n    var globalObject = {};\n    var timeOutVar = 0;\n    globalTimeOut[uniqueID].timeOut = 0;\n    globalObject[uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n    var spinnerInfo = { uniqueID: uniqueID, container: container, globalInfo: globalObject, timeOutVar: timeOutVar };\n    animateMaterial(spinnerInfo);\n}\nfunction createFabricSpinner(container, radius, makeElement) {\n    var uniqueID = random_generator();\n    globalTimeOut[uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n    create_fabric_element(container, uniqueID, CLS_FABRICSPIN, makeElement);\n    fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\nfunction createHighContrastSpinner(container, radius, makeElement) {\n    var uniqueID = random_generator();\n    globalTimeOut[uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n    create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN, makeElement);\n    fb_calculate_attributes(radius, container, CLS_HIGHCONTRASTSPIN);\n}\nfunction getTheme(container) {\n    var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n    return theme.replace(/['\"]+/g, '');\n}\nfunction setTheme(theme, container, radius, makeElement) {\n    var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n    var svg = innerContainer.querySelector('svg');\n    if (!isNullOrUndefined(svg)) {\n        innerContainer.removeChild(svg);\n    }\n    switch (theme) {\n        case 'Material':\n            createMaterialSpinner(innerContainer, radius, makeElement);\n            break;\n        case 'Fabric':\n            createFabricSpinner(innerContainer, radius, makeElement);\n            break;\n        case 'Bootstrap':\n            createBootstrapSpinner(innerContainer, radius, makeElement);\n            break;\n        case 'HighContrast':\n            createHighContrastSpinner(innerContainer, radius, makeElement);\n            break;\n        case 'Bootstrap4':\n            createBootstrap4Spinner(innerContainer, radius, makeElement);\n            break;\n    }\n}\nfunction createBootstrapSpinner(innerContainer, radius, makeElement) {\n    var uniqueID = random_generator();\n    globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n    create_bootstrap_element(innerContainer, uniqueID, makeElement);\n    boot_calculate_attributes(innerContainer, radius);\n}\nfunction create_bootstrap_element(innerContainer, uniqueID, makeElement) {\n    var svgBoot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n    var viewBoxValue = 64;\n    var trans = 32;\n    var defaultRadius = 2;\n    svgBoot.setAttribute('id', uniqueID);\n    svgBoot.setAttribute('class', CLS_BOOTSPIN);\n    svgBoot.setAttribute('viewBox', '0 0 ' + viewBoxValue + ' ' + viewBoxValue);\n    innerContainer.insertBefore(svgBoot, innerContainer.firstChild);\n    for (var item = 0; item <= 7; item++) {\n        var bootCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n        bootCircle.setAttribute('class', CLS_SPINCIRCLE + '_' + item);\n        bootCircle.setAttribute('r', defaultRadius + '');\n        bootCircle.setAttribute('transform', 'translate(' + trans + ',' + trans + ')');\n        svgBoot.appendChild(bootCircle);\n    }\n}\nfunction boot_calculate_attributes(innerContainer, radius) {\n    var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n    svg.style.width = svg.style.height = radius + 'px';\n    var x = 0;\n    var y = 0;\n    var rad = 24;\n    var startArc = 90;\n    for (var item = 0; item <= 7; item++) {\n        var start = defineArcPoints(x, y, rad, startArc);\n        var circleEle = svg.querySelector('.' + CLS_SPINCIRCLE + '_' + item);\n        circleEle.setAttribute('cx', start.x + '');\n        circleEle.setAttribute('cy', start.y + '');\n        startArc = startArc >= 360 ? 0 : startArc;\n        startArc = startArc + 45;\n    }\n}\nfunction generateSeries(begin, stop) {\n    var series = [];\n    var start = begin;\n    var end = stop;\n    var increment = false;\n    var count = 1;\n    formSeries(start);\n    function formSeries(i) {\n        series.push(i);\n        if (i !== end || count === 1) {\n            if (i <= start && i > 1 && !increment) {\n                i = parseFloat((i - 0.2).toFixed(2));\n            }\n            else if (i === 1) {\n                i = 7;\n                i = parseFloat((i + 0.2).toFixed(2));\n                increment = true;\n            }\n            else if (i < 8 && increment) {\n                i = parseFloat((i + 0.2).toFixed(2));\n                if (i === 8) {\n                    increment = false;\n                }\n            }\n            else if (i <= 8 && !increment) {\n                i = parseFloat((i - 0.2).toFixed(2));\n            }\n            ++count;\n            formSeries(i);\n        }\n    }\n    return series;\n}\nfunction animateBootstrap(innerContainer) {\n    var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n    var id = svg.getAttribute('id');\n    for (var i = 1; i <= 8; i++) {\n        var circleEle = (innerContainer.getElementsByClassName('e-path-circle_' +\n            (i === 8 ? 0 : i))[0]);\n        rotation(circleEle, i, i, generateSeries(i, i), id);\n    }\n    function rotation(circle, start, end, series, id) {\n        var count = 0;\n        boot_animate(start);\n        function boot_animate(radius) {\n            if (globalTimeOut[id].isAnimate) {\n                ++count;\n                circle.setAttribute('r', radius + '');\n                if (count >= series.length) {\n                    count = 0;\n                }\n                globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n            }\n        }\n    }\n}\nfunction replaceContent(container, template, cssClass) {\n    if (!isNullOrUndefined(cssClass)) {\n        container.classList.add(cssClass);\n    }\n    var inner = container.querySelector('.e-spinner-inner');\n    inner.innerHTML = template;\n}\nfunction calculateRadius(width, theme) {\n    var defaultSize;\n    switch (theme) {\n        case 'Material':\n            defaultSize = DEFT_MAT_WIDTH;\n            break;\n        case 'Fabric':\n            defaultSize = DEFT_FAB_WIDTH;\n            break;\n        case 'Bootstrap4':\n            defaultSize = DEFT_BOOT4_WIDTH;\n            break;\n        default:\n            defaultSize = DEFT_BOOT_WIDTH;\n    }\n    width = width ? parseFloat(width + '') : defaultSize;\n    return theme === 'Bootstrap' ? width : width / 2;\n}\nfunction globalVariables(id, radius, count, previousId) {\n    return {\n        radius: radius,\n        count: count,\n        previousId: previousId\n    };\n}\nfunction random_generator() {\n    var random = '';\n    var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n    for (var i = 0; i < 5; i++) {\n        random += combine.charAt(Math.floor(Math.random() * combine.length));\n    }\n    return random;\n}\nfunction create_fabric_element(innerCon, uniqueID, themeClass, makeElement) {\n    var svgFabric = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n    svgFabric.setAttribute('id', uniqueID);\n    svgFabric.setAttribute('class', themeClass);\n    var fabricCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n    fabricCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n    var fabricCircleArc = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n    fabricCircleArc.setAttribute('class', CLS_SPINARC);\n    innerCon.insertBefore(svgFabric, innerCon.firstChild);\n    svgFabric.appendChild(fabricCirclePath);\n    svgFabric.appendChild(fabricCircleArc);\n}\nfunction create_material_element(innerContainer, uniqueID, makeElement, cls) {\n    var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n    svgMaterial.setAttribute('class', cls);\n    svgMaterial.setAttribute('id', uniqueID);\n    var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n    matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n    innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n    svgMaterial.appendChild(matCirclePath);\n}\nfunction create_spinner_container(target, makeElement) {\n    var spinnerContainer = makeElement('div', {});\n    spinnerContainer.classList.add(CLS_SPINWRAP);\n    var spinnerInnerContainer = makeElement('div', {});\n    spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n    target.appendChild(spinnerContainer);\n    spinnerContainer.appendChild(spinnerInnerContainer);\n    return { wrap: spinnerContainer, inner_wrap: spinnerInnerContainer };\n}\nfunction animateMaterial(spinnerInfo) {\n    var start = 1;\n    var end = 149;\n    var duration = 1333;\n    var max = 75;\n    createCircle(start, end, easeAnimation, duration, spinnerInfo.globalInfo[spinnerInfo.uniqueID].count, max, spinnerInfo);\n    spinnerInfo.globalInfo[spinnerInfo.uniqueID].count = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].count % 4;\n}\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n    var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n    var startTime = new Date().getTime();\n    var change = end - start;\n    var diameter = getSize((spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2) + '');\n    var strokeSize = getStrokeSize(diameter);\n    var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n    mat_animation(spinnerInfo);\n    function mat_animation(spinnerInfo) {\n        var currentTime = Math.max(0, Math.min(new Date().getTime() - startTime, duration));\n        updatePath(easing(currentTime, start, change, duration), spinnerInfo.container);\n        if (id === spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId && currentTime < duration) {\n            globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n        }\n        else {\n            animateMaterial(spinnerInfo);\n        }\n    }\n    function updatePath(value, container) {\n        if ((!isNullOrUndefined(container.querySelector('svg.e-spin-material')))\n            && (!isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle')))) {\n            var svg = container.querySelector('svg.e-spin-material');\n            var path = svg.querySelector('path.e-path-circle');\n            path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, value, max) + '');\n            path.setAttribute('transform', 'rotate(' + (rotate) + ' ' + diameter / 2 + ' ' + diameter / 2 + ')');\n        }\n    }\n}\nfunction mat_calculate_attributes(radius, container, type, cls) {\n    var diameter = radius * 2;\n    var svg = container.querySelector('svg.' + cls);\n    var path = svg.querySelector('path.e-path-circle');\n    var strokeSize = getStrokeSize(diameter);\n    var transformOrigin = (diameter / 2) + 'px';\n    svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n    svg.style.width = svg.style.height = diameter + 'px';\n    svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n    path.setAttribute('d', drawArc(diameter, strokeSize));\n    if (type === 'Material') {\n        path.setAttribute('stroke-width', strokeSize + '');\n        path.setAttribute('stroke-dasharray', ((diameter - strokeSize) * Math.PI * 0.75) + '');\n        path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, 1, 75) + '');\n    }\n}\nfunction getSize(value) {\n    var parsed = parseFloat(value);\n    return parsed;\n}\nfunction drawArc(diameter, strokeSize) {\n    var radius = diameter / 2;\n    var offset = strokeSize / 2;\n    return 'M' + radius + ',' + offset\n        + 'A' + (radius - offset) + ',' + (radius - offset) + ' 0 1 1 ' + offset + ',' + radius;\n}\nfunction getStrokeSize(diameter) {\n    return 10 / 100 * diameter;\n}\nfunction getDashOffset(diameter, strokeSize, value, max) {\n    return (diameter - strokeSize) * Math.PI * ((3 * (max) / 100) - (value / 100));\n}\nfunction easeAnimation(current, start, change, duration) {\n    var timestamp = (current /= duration) * current;\n    var timecount = timestamp * current;\n    return start + change * (6 * timecount * timestamp + -15 * timestamp * timestamp + 10 * timecount);\n}\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n    var centerX = radius;\n    var centerY = radius;\n    var diameter = radius * 2;\n    var startArc = 315;\n    var endArc = 45;\n    var svg = innerConainer.querySelector('.' + trgClass);\n    var circle = svg.querySelector('.e-path-circle');\n    var path = svg.querySelector('.e-path-arc');\n    var transformOrigin = (diameter / 2) + 'px';\n    circle.setAttribute('d', defineCircle(centerX, centerY, radius));\n    path.setAttribute('d', defineArc(centerX, centerY, radius, startArc, endArc));\n    svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n    svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n    svg.style.width = svg.style.height = diameter + 'px';\n}\nfunction defineArcPoints(centerX, centerY, radius, angle) {\n    var radians = (angle - 90) * Math.PI / 180.0;\n    return {\n        x: centerX + (radius * Math.cos(radians)),\n        y: centerY + (radius * Math.sin(radians))\n    };\n}\nfunction defineArc(x, y, radius, startArc, endArc) {\n    var start = defineArcPoints(x, y, radius, endArc);\n    var end = defineArcPoints(x, y, radius, startArc);\n    var d = [\n        'M', start.x, start.y,\n        'A', radius, radius, 0, 0, 0, end.x, end.y\n    ].join(' ');\n    return d;\n}\nfunction defineCircle(x, y, radius) {\n    var d = [\n        'M', x, y,\n        'm', -radius, 0,\n        'a', radius, radius, 0, 1, 0, radius * 2, 0,\n        'a', radius, radius, 0, 1, 0, -radius * 2, 0,\n    ].join(' ');\n    return d;\n}\n/**\n * Function to show the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function showSpinner(container) {\n    showHideSpinner(container, false);\n    container = null;\n}\nfunction showHideSpinner(container, isHide) {\n    var spinnerWrap;\n    if (container) {\n        spinnerWrap = container.classList.contains(CLS_SPINWRAP) ? container :\n            container.querySelector('.' + CLS_SPINWRAP);\n    }\n    if (container && spinnerWrap) {\n        var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n        var spinCheck = void 0;\n        spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_HIDESPIN) :\n            !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n        if (spinCheck) {\n            var svgEle = spinnerWrap.querySelector('svg');\n            if (isNullOrUndefined(svgEle)) {\n                return;\n            }\n            var id = svgEle.getAttribute('id');\n            globalTimeOut[id].isAnimate = !isHide;\n            switch (globalTimeOut[id].type) {\n                case 'Material':\n                    isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n                    break;\n                case 'Bootstrap':\n                    isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n                    break;\n            }\n        }\n        isHide ? classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]) : classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n        container = null;\n    }\n}\n/**\n * Function to hide the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function hideSpinner(container) {\n    showHideSpinner(container, true);\n    container = null;\n}\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : setSpinner({ cssClass: 'custom-css'; type: 'Material' });\n * ```\n * @param args\n * @private\n */\nexport function setSpinner(args, internalCreateElement) {\n    var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n    if (args.template !== undefined) {\n        spinTemplate = args.template;\n        if (args.template !== undefined) {\n            spinCSSClass = args.cssClass;\n        }\n    }\n    var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n    for (var index = 0; index < container.length; index++) {\n        ensureTemplate(args.template, container[index], args.type, args.cssClass, makeElement);\n    }\n}\nfunction ensureTemplate(template, container, theme, cssClass, makeEle) {\n    if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n        replaceTheme(container, theme, cssClass, makeEle);\n        if (container.classList.contains(CLS_SHOWSPIN)) {\n            container.classList.remove(CLS_SHOWSPIN);\n            showSpinner(container);\n        }\n        else {\n            container.classList.remove(CLS_HIDESPIN);\n            hideSpinner(container);\n        }\n    }\n    else {\n        spinTemplate = template;\n        if (!isNullOrUndefined(cssClass)) {\n            spinCSSClass = cssClass;\n        }\n    }\n}\nfunction replaceTheme(container, theme, cssClass, makeEle) {\n    if (!isNullOrUndefined(cssClass)) {\n        container.classList.add(cssClass);\n    }\n    var svgElement = container.querySelector('svg');\n    var radius = theme === 'Bootstrap' ? parseFloat(svgElement.style.height) : parseFloat(svgElement.style.height) / 2;\n    var classNames = svgElement.getAttribute('class');\n    var svgClassList = classNames.split(/\\s/);\n    if (svgClassList.indexOf('e-spin-material') >= 0) {\n        var id = svgElement.getAttribute('id');\n        clearTimeout(globalTimeOut[id].timeOut);\n    }\n    setTheme(theme, container, radius, makeEle);\n}\n"],"sourceRoot":""}