Page MenuHomePhabricator

minified.js

Authored By
Phispi
Nov 19 2023, 6:48 PM
Size
853 KB
Referenced Files
None
Subscribers
None

minified.js

This file is larger than 256 KB, so syntax highlighting was skipped.
mw.loader.implement("ext.wrmap@urhzq",function($,jQuery,require,module){const wrmap="";class BaseEvent{constructor(type){this.propagationStopped;this.defaultPrevented;this.type=type;this.target=null;}preventDefault(){this.defaultPrevented=true;}stopPropagation(){this.propagationStopped=true;}}const Event=BaseEvent;const ObjectEventType={PROPERTYCHANGE:"propertychange"};class Disposable{constructor(){this.disposed=false;}dispose(){if(!this.disposed){this.disposed=true;this.disposeInternal();}}disposeInternal(){}}const Disposable$1=Disposable;function binarySearch(haystack,needle,comparator){let mid,cmp;comparator=comparator||ascending;let low=0;let high=haystack.length;let found=false;while(low<high){mid=low+(high-low>>1);cmp=+comparator(haystack[mid],needle);if(cmp<0){low=mid+1;}else{high=mid;found=!cmp;}}return found?low:~low;}function ascending(a,b){return a>b?1:a<b?-1:0;}function linearFindNearest(arr,target,direction){if(arr[0]<=target){return 0;}const n=arr.length;if(target<=arr[n
-1]){return n-1;}if(typeof direction==="function"){for(let i=1;i<n;++i){const candidate=arr[i];if(candidate===target){return i;}if(candidate<target){if(direction(target,arr[i-1],candidate)>0){return i-1;}return i;}}return n-1;}if(direction>0){for(let i=1;i<n;++i){if(arr[i]<target){return i-1;}}return n-1;}if(direction<0){for(let i=1;i<n;++i){if(arr[i]<=target){return i;}}return n-1;}for(let i=1;i<n;++i){if(arr[i]==target){return i;}if(arr[i]<target){if(arr[i-1]-target<target-arr[i]){return i-1;}return i;}}return n-1;}function reverseSubArray(arr,begin,end){while(begin<end){const tmp=arr[begin];arr[begin]=arr[end];arr[end]=tmp;++begin;--end;}}function extend$2(arr,data){const extension=Array.isArray(data)?data:[data];const length=extension.length;for(let i=0;i<length;i++){arr[arr.length]=extension[i];}}function equals$2(arr1,arr2){const len1=arr1.length;if(len1!==arr2.length){return false;}for(let i=0;i<len1;i++){if(arr1[i]!==arr2[i]){return false;}}return true;}function isSorted(arr,
func,strict){const compare=func||ascending;return arr.every(function(currentVal,index){if(index===0){return true;}const res=compare(arr[index-1],currentVal);return!(res>0||strict&&res===0);});}function TRUE(){return true;}function FALSE(){return false;}function VOID(){}function memoizeOne(fn){let called=false;let lastResult;let lastArgs;let lastThis;return function(){const nextArgs=Array.prototype.slice.call(arguments);if(!called||this!==lastThis||!equals$2(nextArgs,lastArgs)){called=true;lastThis=this;lastArgs=nextArgs;lastResult=fn.apply(this,arguments);}return lastResult;};}function clear(object){for(const property in object){delete object[property];}}function isEmpty$1(object){let property;for(property in object){return false;}return!property;}class Target extends Disposable$1{constructor(target){super();this.eventTarget_=target;this.pendingRemovals_=null;this.dispatching_=null;this.listeners_=null;}addEventListener(type,listener){if(!type||!listener){return;}const listeners=this.
listeners_||(this.listeners_={});const listenersForType=listeners[type]||(listeners[type]=[]);if(!listenersForType.includes(listener)){listenersForType.push(listener);}}dispatchEvent(event){const isString=typeof event==="string";const type=isString?event:event.type;const listeners=this.listeners_&&this.listeners_[type];if(!listeners){return;}const evt=isString?new Event(event):(event);if(!evt.target){evt.target=this.eventTarget_||this;}const dispatching=this.dispatching_||(this.dispatching_={});const pendingRemovals=this.pendingRemovals_||(this.pendingRemovals_={});if(!(type in dispatching)){dispatching[type]=0;pendingRemovals[type]=0;}++dispatching[type];let propagate;for(let i=0,ii=listeners.length;i<ii;++i){if("handleEvent"in listeners[i]){propagate=listeners[i].handleEvent(evt);}else{propagate=listeners[i].call(this,evt);}if(propagate===false||evt.propagationStopped){propagate=false;break;}}if(--dispatching[type]===0){let pr=pendingRemovals[type];delete pendingRemovals[type];while(
pr--){this.removeEventListener(type,VOID);}delete dispatching[type];}return propagate;}disposeInternal(){this.listeners_&&clear(this.listeners_);}getListeners(type){return this.listeners_&&this.listeners_[type]||void 0;}hasListener(type){if(!this.listeners_){return false;}return type?type in this.listeners_:Object.keys(this.listeners_).length>0;}removeEventListener(type,listener){const listeners=this.listeners_&&this.listeners_[type];if(listeners){const index=listeners.indexOf(listener);if(index!==-1){if(this.pendingRemovals_&&type in this.pendingRemovals_){listeners[index]=VOID;++this.pendingRemovals_[type];}else{listeners.splice(index,1);if(listeners.length===0){delete this.listeners_[type];}}}}}}const EventTarget=Target;const EventType={CHANGE:"change",ERROR:"error",BLUR:"blur",CLEAR:"clear",CONTEXTMENU:"contextmenu",CLICK:"click",DBLCLICK:"dblclick",DRAGENTER:"dragenter",DRAGOVER:"dragover",DROP:"drop",FOCUS:"focus",KEYDOWN:"keydown",KEYPRESS:"keypress",LOAD:"load",RESIZE:"resize",
TOUCHMOVE:"touchmove",WHEEL:"wheel"};function listen(target,type,listener,thisArg,once){if(thisArg&&thisArg!==target){listener=listener.bind(thisArg);}if(once){const originalListener=listener;listener=function(){target.removeEventListener(type,listener);originalListener.apply(this,arguments);};}const eventsKey={target,type,listener};target.addEventListener(type,listener);return eventsKey;}function listenOnce(target,type,listener,thisArg){return listen(target,type,listener,thisArg,true);}function unlistenByKey(key){if(key&&key.target){key.target.removeEventListener(key.type,key.listener);clear(key);}}class Observable extends EventTarget{constructor(){super();this.on=this.onInternal;this.once=this.onceInternal;this.un=this.unInternal;this.revision_=0;}changed(){++this.revision_;this.dispatchEvent(EventType.CHANGE);}getRevision(){return this.revision_;}onInternal(type,listener){if(Array.isArray(type)){const len=type.length;const keys=new Array(len);for(let i=0;i<len;++i){keys[i]=listen(
this,type[i],listener);}return keys;}return listen(this,type,listener);}onceInternal(type,listener){let key;if(Array.isArray(type)){const len=type.length;key=new Array(len);for(let i=0;i<len;++i){key[i]=listenOnce(this,type[i],listener);}}else{key=listenOnce(this,type,listener);}listener.ol_key=key;return key;}unInternal(type,listener){const key=(listener.ol_key);if(key){unByKey(key);}else if(Array.isArray(type)){for(let i=0,ii=type.length;i<ii;++i){this.removeEventListener(type[i],listener);}}else{this.removeEventListener(type,listener);}}}Observable.prototype.on;Observable.prototype.once;Observable.prototype.un;function unByKey(key){if(Array.isArray(key)){for(let i=0,ii=key.length;i<ii;++i){unlistenByKey(key[i]);}}else{unlistenByKey(key);}}const Observable$1=Observable;function abstract(){throw new Error("Unimplemented abstract method.");}let uidCounter_=0;function getUid(obj){return obj.ol_uid||(obj.ol_uid=String(++uidCounter_));}class ObjectEvent extends Event{constructor(type,key,
oldValue){super(type);this.key=key;this.oldValue=oldValue;}}class BaseObject extends Observable$1{constructor(values){super();this.on;this.once;this.un;getUid(this);this.values_=null;if(values!==void 0){this.setProperties(values);}}get(key){let value;if(this.values_&&this.values_.hasOwnProperty(key)){value=this.values_[key];}return value;}getKeys(){return this.values_&&Object.keys(this.values_)||[];}getProperties(){return this.values_&&Object.assign({},this.values_)||{};}getPropertiesInternal(){return this.values_;}hasProperties(){return!!this.values_;}notify(key,oldValue){let eventType;eventType=`change:${key}`;if(this.hasListener(eventType)){this.dispatchEvent(new ObjectEvent(eventType,key,oldValue));}eventType=ObjectEventType.PROPERTYCHANGE;if(this.hasListener(eventType)){this.dispatchEvent(new ObjectEvent(eventType,key,oldValue));}}addChangeListener(key,listener){this.addEventListener(`change:${key}`,listener);}removeChangeListener(key,listener){this.removeEventListener(`change:${
key}`,listener);}set(key,value,silent){const values=this.values_||(this.values_={});if(silent){values[key]=value;}else{const oldValue=values[key];values[key]=value;if(oldValue!==value){this.notify(key,oldValue);}}}setProperties(values,silent){for(const key in values){this.set(key,values[key],silent);}}applyProperties(source){if(!source.values_){return;}Object.assign(this.values_||(this.values_={}),source.values_);}unset(key,silent){if(this.values_&&key in this.values_){const oldValue=this.values_[key];delete this.values_[key];if(isEmpty$1(this.values_)){this.values_=null;}if(!silent){this.notify(key,oldValue);}}}}const BaseObject$1=BaseObject;const CollectionEventType={ADD:"add",REMOVE:"remove"};const Property$3={LENGTH:"length"};class CollectionEvent extends Event{constructor(type,element,index){super(type);this.element=element;this.index=index;}}class Collection extends BaseObject$1{constructor(array,options){super();this.on;this.once;this.un;options=options||{};this.unique_=!!
options.unique;this.array_=array?array:[];if(this.unique_){for(let i=0,ii=this.array_.length;i<ii;++i){this.assertUnique_(this.array_[i],i);}}this.updateLength_();}clear(){while(this.getLength()>0){this.pop();}}extend(arr){for(let i=0,ii=arr.length;i<ii;++i){this.push(arr[i]);}return this;}forEach(f){const array=this.array_;for(let i=0,ii=array.length;i<ii;++i){f(array[i],i,array);}}getArray(){return this.array_;}item(index){return this.array_[index];}getLength(){return this.get(Property$3.LENGTH);}insertAt(index,elem){if(index<0||index>this.getLength()){throw new Error("Index out of bounds: "+index);}if(this.unique_){this.assertUnique_(elem);}this.array_.splice(index,0,elem);this.updateLength_();this.dispatchEvent(new CollectionEvent(CollectionEventType.ADD,elem,index));}pop(){return this.removeAt(this.getLength()-1);}push(elem){if(this.unique_){this.assertUnique_(elem);}const n=this.getLength();this.insertAt(n,elem);return this.getLength();}remove(elem){const arr=this.array_;for(let i
=0,ii=arr.length;i<ii;++i){if(arr[i]===elem){return this.removeAt(i);}}return void 0;}removeAt(index){if(index<0||index>=this.getLength()){return void 0;}const prev=this.array_[index];this.array_.splice(index,1);this.updateLength_();this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE,prev,index));return prev;}setAt(index,elem){const n=this.getLength();if(index>=n){this.insertAt(index,elem);return;}if(index<0){throw new Error("Index out of bounds: "+index);}if(this.unique_){this.assertUnique_(elem,index);}const prev=this.array_[index];this.array_[index]=elem;this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE,prev,index));this.dispatchEvent(new CollectionEvent(CollectionEventType.ADD,elem,index));}updateLength_(){this.set(Property$3.LENGTH,this.array_.length);}assertUnique_(elem,except){for(let i=0,ii=this.array_.length;i<ii;++i){if(this.array_[i]===elem&&i!==except){throw new Error("Duplicate item added to a unique collection");}}}}const Collection$1=
Collection;const ua=typeof navigator!=="undefined"&&typeof navigator.userAgent!=="undefined"?navigator.userAgent.toLowerCase():"";const FIREFOX=ua.includes("firefox");const SAFARI=ua.includes("safari")&&!ua.includes("chrom");SAFARI&&(ua.includes("version/15.4")||/cpu (os|iphone os) 15_4 like mac os x/.test(ua));const WEBKIT=ua.includes("webkit")&&!ua.includes("edge");const MAC=ua.includes("macintosh");const DEVICE_PIXEL_RATIO=typeof devicePixelRatio!=="undefined"?devicePixelRatio:1;const WORKER_OFFSCREEN_CANVAS=typeof WorkerGlobalScope!=="undefined"&&typeof OffscreenCanvas!=="undefined"&&self instanceof WorkerGlobalScope;const IMAGE_DECODE=typeof Image!=="undefined"&&Image.prototype.decode;const PASSIVE_EVENT_LISTENERS=function(){let passive=false;try{const options=Object.defineProperty({},"passive",{get:function(){passive=true;}});window.addEventListener("_",null,options);window.removeEventListener("_",null,options);}catch(error){}return passive;}();function assert(assertion,
errorMessage){if(!assertion){throw new Error(errorMessage);}}new Array(6);function create(){return[1,0,0,1,0,0];}function set(transform2,a,b,c,d,e,f){transform2[0]=a;transform2[1]=b;transform2[2]=c;transform2[3]=d;transform2[4]=e;transform2[5]=f;return transform2;}function setFromArray(transform1,transform2){transform1[0]=transform2[0];transform1[1]=transform2[1];transform1[2]=transform2[2];transform1[3]=transform2[3];transform1[4]=transform2[4];transform1[5]=transform2[5];return transform1;}function apply(transform2,coordinate){const x=coordinate[0];const y=coordinate[1];coordinate[0]=transform2[0]*x+transform2[2]*y+transform2[4];coordinate[1]=transform2[1]*x+transform2[3]*y+transform2[5];return coordinate;}function makeScale(target,x,y){return set(target,x,0,0,y,0,0);}function compose(transform2,dx1,dy1,sx,sy,angle,dx2,dy2){const sin=Math.sin(angle);const cos=Math.cos(angle);transform2[0]=sx*cos;transform2[1]=sy*sin;transform2[2]=-sx*sin;transform2[3]=sy*cos;transform2[4]=dx2*sx*cos-
dy2*sx*sin+dx1;transform2[5]=dx2*sy*sin+dy2*sy*cos+dy1;return transform2;}function makeInverse(target,source){const det=determinant(source);assert(det!==0,"Transformation matrix cannot be inverted");const a=source[0];const b=source[1];const c=source[2];const d=source[3];const e=source[4];const f=source[5];target[0]=d/det;target[1]=-b/det;target[2]=-c/det;target[3]=a/det;target[4]=(c*f-d*e)/det;target[5]=-(a*f-b*e)/det;return target;}function determinant(mat){return mat[0]*mat[3]-mat[1]*mat[2];}let transformStringDiv;function toString$1(mat){const transformString="matrix("+mat.join(", ")+")";if(WORKER_OFFSCREEN_CANVAS){return transformString;}const node=transformStringDiv||(transformStringDiv=document.createElement("div"));node.style.transform=transformString;return node.style.transform;}const Relationship={UNKNOWN:0,INTERSECTING:1,ABOVE:2,RIGHT:4,BELOW:8,LEFT:16};function boundingExtent(coordinates2){const extent=createEmpty();for(let i=0,ii=coordinates2.length;i<ii;++i){
extendCoordinate(extent,coordinates2[i]);}return extent;}function _boundingExtentXYs(xs,ys,dest){const minX=Math.min.apply(null,xs);const minY=Math.min.apply(null,ys);const maxX=Math.max.apply(null,xs);const maxY=Math.max.apply(null,ys);return createOrUpdate$2(minX,minY,maxX,maxY,dest);}function buffer(extent,value,dest){if(dest){dest[0]=extent[0]-value;dest[1]=extent[1]-value;dest[2]=extent[2]+value;dest[3]=extent[3]+value;return dest;}return[extent[0]-value,extent[1]-value,extent[2]+value,extent[3]+value];}function clone(extent,dest){if(dest){dest[0]=extent[0];dest[1]=extent[1];dest[2]=extent[2];dest[3]=extent[3];return dest;}return extent.slice();}function closestSquaredDistanceXY(extent,x,y){let dx,dy;if(x<extent[0]){dx=extent[0]-x;}else if(extent[2]<x){dx=x-extent[2];}else{dx=0;}if(y<extent[1]){dy=extent[1]-y;}else if(extent[3]<y){dy=y-extent[3];}else{dy=0;}return dx*dx+dy*dy;}function containsCoordinate(extent,coordinate){return containsXY(extent,coordinate[0],coordinate[1]);}
function containsExtent(extent1,extent2){return extent1[0]<=extent2[0]&&extent2[2]<=extent1[2]&&extent1[1]<=extent2[1]&&extent2[3]<=extent1[3];}function containsXY(extent,x,y){return extent[0]<=x&&x<=extent[2]&&extent[1]<=y&&y<=extent[3];}function coordinateRelationship(extent,coordinate){const minX=extent[0];const minY=extent[1];const maxX=extent[2];const maxY=extent[3];const x=coordinate[0];const y=coordinate[1];let relationship=Relationship.UNKNOWN;if(x<minX){relationship=relationship|Relationship.LEFT;}else if(x>maxX){relationship=relationship|Relationship.RIGHT;}if(y<minY){relationship=relationship|Relationship.BELOW;}else if(y>maxY){relationship=relationship|Relationship.ABOVE;}if(relationship===Relationship.UNKNOWN){relationship=Relationship.INTERSECTING;}return relationship;}function createEmpty(){return[Infinity,Infinity,-Infinity,-Infinity];}function createOrUpdate$2(minX,minY,maxX,maxY,dest){if(dest){dest[0]=minX;dest[1]=minY;dest[2]=maxX;dest[3]=maxY;return dest;}return[
minX,minY,maxX,maxY];}function createOrUpdateEmpty(dest){return createOrUpdate$2(Infinity,Infinity,-Infinity,-Infinity,dest);}function createOrUpdateFromCoordinate(coordinate,dest){const x=coordinate[0];const y=coordinate[1];return createOrUpdate$2(x,y,x,y,dest);}function createOrUpdateFromFlatCoordinates(flatCoordinates,offset,end,stride,dest){const extent=createOrUpdateEmpty(dest);return extendFlatCoordinates(extent,flatCoordinates,offset,end,stride);}function equals$1(extent1,extent2){return extent1[0]==extent2[0]&&extent1[2]==extent2[2]&&extent1[1]==extent2[1]&&extent1[3]==extent2[3];}function extend$1(extent1,extent2){if(extent2[0]<extent1[0]){extent1[0]=extent2[0];}if(extent2[2]>extent1[2]){extent1[2]=extent2[2];}if(extent2[1]<extent1[1]){extent1[1]=extent2[1];}if(extent2[3]>extent1[3]){extent1[3]=extent2[3];}return extent1;}function extendCoordinate(extent,coordinate){if(coordinate[0]<extent[0]){extent[0]=coordinate[0];}if(coordinate[0]>extent[2]){extent[2]=coordinate[0];}if(
coordinate[1]<extent[1]){extent[1]=coordinate[1];}if(coordinate[1]>extent[3]){extent[3]=coordinate[1];}}function extendFlatCoordinates(extent,flatCoordinates,offset,end,stride){for(;offset<end;offset+=stride){extendXY(extent,flatCoordinates[offset],flatCoordinates[offset+1]);}return extent;}function extendXY(extent,x,y){extent[0]=Math.min(extent[0],x);extent[1]=Math.min(extent[1],y);extent[2]=Math.max(extent[2],x);extent[3]=Math.max(extent[3],y);}function forEachCorner(extent,callback){let val;val=callback(getBottomLeft(extent));if(val){return val;}val=callback(getBottomRight(extent));if(val){return val;}val=callback(getTopRight(extent));if(val){return val;}val=callback(getTopLeft(extent));if(val){return val;}return false;}function getArea(extent){let area=0;if(!isEmpty(extent)){area=getWidth(extent)*getHeight(extent);}return area;}function getBottomLeft(extent){return[extent[0],extent[1]];}function getBottomRight(extent){return[extent[2],extent[1]];}function getCenter(extent){return[(
extent[0]+extent[2])/2,(extent[1]+extent[3])/2];}function getCorner(extent,corner){let coordinate;if(corner==="bottom-left"){coordinate=getBottomLeft(extent);}else if(corner==="bottom-right"){coordinate=getBottomRight(extent);}else if(corner==="top-left"){coordinate=getTopLeft(extent);}else if(corner==="top-right"){coordinate=getTopRight(extent);}else{throw new Error("Invalid corner");}return coordinate;}function getForViewAndSize(center,resolution,rotation,size,dest){const[x0,y0,x1,y1,x2,y2,x3,y3]=getRotatedViewport(center,resolution,rotation,size);return createOrUpdate$2(Math.min(x0,x1,x2,x3),Math.min(y0,y1,y2,y3),Math.max(x0,x1,x2,x3),Math.max(y0,y1,y2,y3),dest);}function getRotatedViewport(center,resolution,rotation,size){const dx=resolution*size[0]/2;const dy=resolution*size[1]/2;const cosRotation=Math.cos(rotation);const sinRotation=Math.sin(rotation);const xCos=dx*cosRotation;const xSin=dx*sinRotation;const yCos=dy*cosRotation;const ySin=dy*sinRotation;const x=center[0];const y=
center[1];return[x-xCos+ySin,y-xSin-yCos,x-xCos-ySin,y-xSin+yCos,x+xCos-ySin,y+xSin+yCos,x+xCos+ySin,y+xSin-yCos,x-xCos+ySin,y-xSin-yCos];}function getHeight(extent){return extent[3]-extent[1];}function getIntersection(extent1,extent2,dest){const intersection=dest?dest:createEmpty();if(intersects$1(extent1,extent2)){if(extent1[0]>extent2[0]){intersection[0]=extent1[0];}else{intersection[0]=extent2[0];}if(extent1[1]>extent2[1]){intersection[1]=extent1[1];}else{intersection[1]=extent2[1];}if(extent1[2]<extent2[2]){intersection[2]=extent1[2];}else{intersection[2]=extent2[2];}if(extent1[3]<extent2[3]){intersection[3]=extent1[3];}else{intersection[3]=extent2[3];}}else{createOrUpdateEmpty(intersection);}return intersection;}function getTopLeft(extent){return[extent[0],extent[3]];}function getTopRight(extent){return[extent[2],extent[3]];}function getWidth(extent){return extent[2]-extent[0];}function intersects$1(extent1,extent2){return extent1[0]<=extent2[2]&&extent1[2]>=extent2[0]&&extent1[1
]<=extent2[3]&&extent1[3]>=extent2[1];}function isEmpty(extent){return extent[2]<extent[0]||extent[3]<extent[1];}function returnOrUpdate(extent,dest){if(dest){dest[0]=extent[0];dest[1]=extent[1];dest[2]=extent[2];dest[3]=extent[3];return dest;}return extent;}function intersectsSegment(extent,start,end){let intersects2=false;const startRel=coordinateRelationship(extent,start);const endRel=coordinateRelationship(extent,end);if(startRel===Relationship.INTERSECTING||endRel===Relationship.INTERSECTING){intersects2=true;}else{const minX=extent[0];const minY=extent[1];const maxX=extent[2];const maxY=extent[3];const startX=start[0];const startY=start[1];const endX=end[0];const endY=end[1];const slope=(endY-startY)/(endX-startX);let x,y;if(!!(endRel&Relationship.ABOVE)&&!(startRel&Relationship.ABOVE)){x=endX-(endY-maxY)/slope;intersects2=x>=minX&&x<=maxX;}if(!intersects2&&!!(endRel&Relationship.RIGHT)&&!(startRel&Relationship.RIGHT)){y=endY-(endX-maxX)*slope;intersects2=y>=minY&&y<=maxY;}if(!
intersects2&&!!(endRel&Relationship.BELOW)&&!(startRel&Relationship.BELOW)){x=endX-(endY-minY)/slope;intersects2=x>=minX&&x<=maxX;}if(!intersects2&&!!(endRel&Relationship.LEFT)&&!(startRel&Relationship.LEFT)){y=endY-(endX-minX)*slope;intersects2=y>=minY&&y<=maxY;}}return intersects2;}function applyTransform(extent,transformFn,dest,stops){if(isEmpty(extent)){return createOrUpdateEmpty(dest);}let coordinates2=[];if(stops>1){const width=extent[2]-extent[0];const height=extent[3]-extent[1];for(let i=0;i<stops;++i){coordinates2.push(extent[0]+width*i/stops,extent[1],extent[2],extent[1]+height*i/stops,extent[2]-width*i/stops,extent[3],extent[0],extent[3]-height*i/stops);}}else{coordinates2=[extent[0],extent[1],extent[2],extent[1],extent[2],extent[3],extent[0],extent[3]];}transformFn(coordinates2,coordinates2,2);const xs=[];const ys=[];for(let i=0,l=coordinates2.length;i<l;i+=2){xs.push(coordinates2[i]);ys.push(coordinates2[i+1]);}return _boundingExtentXYs(xs,ys,dest);}function wrapX$2(extent
,projection){const projectionExtent=projection.getExtent();const center=getCenter(extent);if(projection.canWrapX()&&(center[0]<projectionExtent[0]||center[0]>=projectionExtent[2])){const worldWidth=getWidth(projectionExtent);const worldsAway=Math.floor((center[0]-projectionExtent[0])/worldWidth);const offset=worldsAway*worldWidth;extent[0]-=offset;extent[2]-=offset;}return extent;}function wrapAndSliceX(extent,projection){if(projection.canWrapX()){const projectionExtent=projection.getExtent();if(!isFinite(extent[0])||!isFinite(extent[2])){return[[projectionExtent[0],extent[1],projectionExtent[2],extent[3]]];}wrapX$2(extent,projection);const worldWidth=getWidth(projectionExtent);if(getWidth(extent)>worldWidth){return[[projectionExtent[0],extent[1],projectionExtent[2],extent[3]]];}if(extent[0]<projectionExtent[0]){return[[extent[0]+worldWidth,extent[1],projectionExtent[2],extent[3]],[projectionExtent[0],extent[1],extent[2],extent[3]]];}if(extent[2]>projectionExtent[2]){return[[extent[0],
extent[1],projectionExtent[2],extent[3]],[projectionExtent[0],extent[1],extent[2]-worldWidth,extent[3]]];}}return[extent];}function clamp(value,min,max){return Math.min(Math.max(value,min),max);}function squaredSegmentDistance(x,y,x1,y1,x2,y2){const dx=x2-x1;const dy=y2-y1;if(dx!==0||dy!==0){const t=((x-x1)*dx+(y-y1)*dy)/(dx*dx+dy*dy);if(t>1){x1=x2;y1=y2;}else if(t>0){x1+=dx*t;y1+=dy*t;}}return squaredDistance(x,y,x1,y1);}function squaredDistance(x1,y1,x2,y2){const dx=x2-x1;const dy=y2-y1;return dx*dx+dy*dy;}function solveLinearSystem(mat){const n=mat.length;for(let i=0;i<n;i++){let maxRow=i;let maxEl=Math.abs(mat[i][i]);for(let r=i+1;r<n;r++){const absValue=Math.abs(mat[r][i]);if(absValue>maxEl){maxEl=absValue;maxRow=r;}}if(maxEl===0){return null;}const tmp=mat[maxRow];mat[maxRow]=mat[i];mat[i]=tmp;for(let j=i+1;j<n;j++){const coef=-mat[j][i]/mat[i][i];for(let k=i;k<n+1;k++){if(i==k){mat[j][k]=0;}else{mat[j][k]+=coef*mat[i][k];}}}}const x=new Array(n);for(let l=n-1;l>=0;l--){x[l]=mat[
l][n]/mat[l][l];for(let m=l-1;m>=0;m--){mat[m][n]-=mat[m][l]*x[l];}}return x;}function toRadians(angleInDegrees){return angleInDegrees*Math.PI/180;}function modulo(a,b){const r=a%b;return r*b<0?r+b:r;}function lerp(a,b,x){return a+x*(b-a);}function toFixed(n,decimals){const factor=Math.pow(10,decimals);return Math.round(n*factor)/factor;}function floor(n,decimals){return Math.floor(toFixed(n,decimals));}function ceil(n,decimals){return Math.ceil(toFixed(n,decimals));}const HEX_COLOR_RE_=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;const NAMED_COLOR_RE_=/^([a-z]*)$|^hsla?\(.*\)$/i;function asString(color){if(typeof color==="string"){return color;}return toString(color);}function fromNamed(color){const el=document.createElement("div");el.style.color=color;if(el.style.color!==""){document.body.appendChild(el);const rgb=getComputedStyle(el).color;document.body.removeChild(el);return rgb;}return"";}const fromString=function(){const MAX_CACHE_SIZE=1024;const cache2={};let cacheSize=0;
return(function(s){let color;if(cache2.hasOwnProperty(s)){color=cache2[s];}else{if(cacheSize>=MAX_CACHE_SIZE){let i=0;for(const key in cache2){if((i++&3)===0){delete cache2[key];--cacheSize;}}}color=fromStringInternal_(s);cache2[s]=color;++cacheSize;}return color;});}();function asArray(color){if(Array.isArray(color)){return color;}return fromString(color);}function fromStringInternal_(s){let r,g,b,a,color;if(NAMED_COLOR_RE_.exec(s)){s=fromNamed(s);}if(HEX_COLOR_RE_.exec(s)){const n=s.length-1;let d;if(n<=4){d=1;}else{d=2;}const hasAlpha=n===4||n===8;r=parseInt(s.substr(1+0*d,d),16);g=parseInt(s.substr(1+1*d,d),16);b=parseInt(s.substr(1+2*d,d),16);if(hasAlpha){a=parseInt(s.substr(1+3*d,d),16);}else{a=255;}if(d==1){r=(r<<4)+r;g=(g<<4)+g;b=(b<<4)+b;if(hasAlpha){a=(a<<4)+a;}}color=[r,g,b,a/255];}else if(s.startsWith("rgba(")){color=s.slice(5,-1).split(",").map(Number);normalize(color);}else if(s.startsWith("rgb(")){color=s.slice(4,-1).split(",").map(Number);color.push(1);normalize(color);
}else{throw new Error("Invalid color");}return color;}function normalize(color){color[0]=clamp(color[0]+0.5|0,0,255);color[1]=clamp(color[1]+0.5|0,0,255);color[2]=clamp(color[2]+0.5|0,0,255);color[3]=clamp(color[3],0,1);return color;}function toString(color){let r=color[0];if(r!=(r|0)){r=r+0.5|0;}let g=color[1];if(g!=(g|0)){g=g+0.5|0;}let b=color[2];if(b!=(b|0)){b=b+0.5|0;}const a=color[3]===void 0?1:Math.round(color[3]*100)/100;return"rgba("+r+","+g+","+b+","+a+")";}class IconImageCache{constructor(){this.cache_={};this.cacheSize_=0;this.maxCacheSize_=32;}clear(){this.cache_={};this.cacheSize_=0;}canExpireCache(){return this.cacheSize_>this.maxCacheSize_;}expire(){if(this.canExpireCache()){let i=0;for(const key in this.cache_){const iconImage=this.cache_[key];if((i++&3)===0&&!iconImage.hasListener()){delete this.cache_[key];--this.cacheSize_;}}}}get(src,crossOrigin,color){const key=getKey$1(src,crossOrigin,color);return key in this.cache_?this.cache_[key]:null;}set(src,crossOrigin,
color,iconImage){const key=getKey$1(src,crossOrigin,color);this.cache_[key]=iconImage;++this.cacheSize_;}setSize(maxCacheSize){this.maxCacheSize_=maxCacheSize;this.expire();}}function getKey$1(src,crossOrigin,color){const colorString=color?asString(color):"null";return crossOrigin+":"+src+":"+colorString;}const shared=new IconImageCache();const LayerProperty={OPACITY:"opacity",VISIBLE:"visible",EXTENT:"extent",Z_INDEX:"zIndex",MAX_RESOLUTION:"maxResolution",MIN_RESOLUTION:"minResolution",MAX_ZOOM:"maxZoom",MIN_ZOOM:"minZoom",SOURCE:"source",MAP:"map"};class BaseLayer extends BaseObject$1{constructor(options){super();this.on;this.once;this.un;this.background_=options.background;const properties=Object.assign({},options);if(typeof options.properties==="object"){delete properties.properties;Object.assign(properties,options.properties);}properties[LayerProperty.OPACITY]=options.opacity!==void 0?options.opacity:1;assert(typeof properties[LayerProperty.OPACITY]==="number",
"Layer opacity must be a number");properties[LayerProperty.VISIBLE]=options.visible!==void 0?options.visible:true;properties[LayerProperty.Z_INDEX]=options.zIndex;properties[LayerProperty.MAX_RESOLUTION]=options.maxResolution!==void 0?options.maxResolution:Infinity;properties[LayerProperty.MIN_RESOLUTION]=options.minResolution!==void 0?options.minResolution:0;properties[LayerProperty.MIN_ZOOM]=options.minZoom!==void 0?options.minZoom:-Infinity;properties[LayerProperty.MAX_ZOOM]=options.maxZoom!==void 0?options.maxZoom:Infinity;this.className_=properties.className!==void 0?properties.className:"ol-layer";delete properties.className;this.setProperties(properties);this.state_=null;}getBackground(){return this.background_;}getClassName(){return this.className_;}getLayerState(managed){const state=this.state_||{layer:this,managed:managed===void 0?true:managed};const zIndex=this.getZIndex();state.opacity=clamp(Math.round(this.getOpacity()*100)/100,0,1);state.visible=this.getVisible();state.
extent=this.getExtent();state.zIndex=zIndex===void 0&&!state.managed?Infinity:zIndex;state.maxResolution=this.getMaxResolution();state.minResolution=Math.max(this.getMinResolution(),0);state.minZoom=this.getMinZoom();state.maxZoom=this.getMaxZoom();this.state_=state;return state;}getLayersArray(array){return abstract();}getLayerStatesArray(states){return abstract();}getExtent(){return(this.get(LayerProperty.EXTENT));}getMaxResolution(){return(this.get(LayerProperty.MAX_RESOLUTION));}getMinResolution(){return(this.get(LayerProperty.MIN_RESOLUTION));}getMinZoom(){return(this.get(LayerProperty.MIN_ZOOM));}getMaxZoom(){return(this.get(LayerProperty.MAX_ZOOM));}getOpacity(){return(this.get(LayerProperty.OPACITY));}getSourceState(){return abstract();}getVisible(){return(this.get(LayerProperty.VISIBLE));}getZIndex(){return(this.get(LayerProperty.Z_INDEX));}setBackground(background){this.background_=background;this.changed();}setExtent(extent){this.set(LayerProperty.EXTENT,extent);}
setMaxResolution(maxResolution){this.set(LayerProperty.MAX_RESOLUTION,maxResolution);}setMinResolution(minResolution){this.set(LayerProperty.MIN_RESOLUTION,minResolution);}setMaxZoom(maxZoom){this.set(LayerProperty.MAX_ZOOM,maxZoom);}setMinZoom(minZoom){this.set(LayerProperty.MIN_ZOOM,minZoom);}setOpacity(opacity){assert(typeof opacity==="number","Layer opacity must be a number");this.set(LayerProperty.OPACITY,opacity);}setVisible(visible){this.set(LayerProperty.VISIBLE,visible);}setZIndex(zindex){this.set(LayerProperty.Z_INDEX,zindex);}disposeInternal(){if(this.state_){this.state_.layer=null;this.state_=null;}super.disposeInternal();}}const BaseLayer$1=BaseLayer;const RenderEventType={PRERENDER:"prerender",POSTRENDER:"postrender",PRECOMPOSE:"precompose",POSTCOMPOSE:"postcompose",RENDERCOMPLETE:"rendercomplete"};const ViewHint={ANIMATING:0,INTERACTING:1};const ViewProperty={CENTER:"center",RESOLUTION:"resolution",ROTATION:"rotation"};const DEFAULT_MAX_ZOOM=42;const DEFAULT_TILE_SIZE=
256;const METERS_PER_UNIT$1={"radians":6370997/(2*Math.PI),"degrees":2*Math.PI*6370997/360,"ft":0.3048,"m":1,"us-ft":1200/3937};class Projection{constructor(options){this.code_=options.code;this.units_=options.units;this.extent_=options.extent!==void 0?options.extent:null;this.worldExtent_=options.worldExtent!==void 0?options.worldExtent:null;this.axisOrientation_=options.axisOrientation!==void 0?options.axisOrientation:"enu";this.global_=options.global!==void 0?options.global:false;this.canWrapX_=!!(this.global_&&this.extent_);this.getPointResolutionFunc_=options.getPointResolution;this.defaultTileGrid_=null;this.metersPerUnit_=options.metersPerUnit;}canWrapX(){return this.canWrapX_;}getCode(){return this.code_;}getExtent(){return this.extent_;}getUnits(){return this.units_;}getMetersPerUnit(){return this.metersPerUnit_||METERS_PER_UNIT$1[this.units_];}getWorldExtent(){return this.worldExtent_;}getAxisOrientation(){return this.axisOrientation_;}isGlobal(){return this.global_;}
setGlobal(global){this.global_=global;this.canWrapX_=!!(global&&this.extent_);}getDefaultTileGrid(){return this.defaultTileGrid_;}setDefaultTileGrid(tileGrid){this.defaultTileGrid_=tileGrid;}setExtent(extent){this.extent_=extent;this.canWrapX_=!!(this.global_&&extent);}setWorldExtent(worldExtent){this.worldExtent_=worldExtent;}setGetPointResolution(func){this.getPointResolutionFunc_=func;}getPointResolutionFunc(){return this.getPointResolutionFunc_;}}const Projection$1=Projection;const RADIUS$1=6378137;const HALF_SIZE=Math.PI*RADIUS$1;const EXTENT$1=[-HALF_SIZE,-HALF_SIZE,HALF_SIZE,HALF_SIZE];const WORLD_EXTENT=[-180,-85,180,85];const MAX_SAFE_Y=RADIUS$1*Math.log(Math.tan(Math.PI/2));class EPSG3857Projection extends Projection$1{constructor(code){super({code,units:"m",extent:EXTENT$1,global:true,worldExtent:WORLD_EXTENT,getPointResolution:function(resolution,point){return resolution/Math.cosh(point[1]/RADIUS$1);}});}}const PROJECTIONS$1=[new EPSG3857Projection("EPSG:3857"),new
EPSG3857Projection("EPSG:102100"),new EPSG3857Projection("EPSG:102113"),new EPSG3857Projection("EPSG:900913"),new EPSG3857Projection("http://www.opengis.net/def/crs/EPSG/0/3857"),new EPSG3857Projection("http://www.opengis.net/gml/srs/epsg.xml#3857")];function fromEPSG4326(input,output,dimension){const length=input.length;dimension=dimension>1?dimension:2;if(output===void 0){if(dimension>2){output=input.slice();}else{output=new Array(length);}}for(let i=0;i<length;i+=dimension){output[i]=HALF_SIZE*input[i]/180;let y=RADIUS$1*Math.log(Math.tan(Math.PI*(+input[i+1]+90)/360));if(y>MAX_SAFE_Y){y=MAX_SAFE_Y;}else if(y<-MAX_SAFE_Y){y=-MAX_SAFE_Y;}output[i+1]=y;}return output;}function toEPSG4326(input,output,dimension){const length=input.length;dimension=dimension>1?dimension:2;if(output===void 0){if(dimension>2){output=input.slice();}else{output=new Array(length);}}for(let i=0;i<length;i+=dimension){output[i]=180*input[i]/HALF_SIZE;output[i+1]=360*Math.atan(Math.exp(input[i+1]/RADIUS$1))/
Math.PI-90;}return output;}const RADIUS=6378137;const EXTENT=[-180,-90,180,90];const METERS_PER_UNIT=Math.PI*RADIUS/180;class EPSG4326Projection extends Projection$1{constructor(code,axisOrientation){super({code,units:"degrees",extent:EXTENT,axisOrientation,global:true,metersPerUnit:METERS_PER_UNIT,worldExtent:EXTENT});}}const PROJECTIONS=[new EPSG4326Projection("CRS:84"),new EPSG4326Projection("EPSG:4326","neu"),new EPSG4326Projection("urn:ogc:def:crs:OGC:1.3:CRS84"),new EPSG4326Projection("urn:ogc:def:crs:OGC:2:84"),new EPSG4326Projection("http://www.opengis.net/def/crs/OGC/1.3/CRS84"),new EPSG4326Projection("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new EPSG4326Projection("http://www.opengis.net/def/crs/EPSG/0/4326","neu")];let cache={};function get$3(code){return cache[code]||cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\w+)$/,"EPSG:$3")]||null;}function add$2(code,projection){cache[code]=projection;}let transforms={};function add$1(source,destination,transformFn
){const sourceCode=source.getCode();const destinationCode=destination.getCode();if(!(sourceCode in transforms)){transforms[sourceCode]={};}transforms[sourceCode][destinationCode]=transformFn;}function get$2(sourceCode,destinationCode){let transform2;if(sourceCode in transforms&&destinationCode in transforms[sourceCode]){transform2=transforms[sourceCode][destinationCode];}return transform2;}function add(coordinate,delta){coordinate[0]+=+delta[0];coordinate[1]+=+delta[1];return coordinate;}function equals(coordinate1,coordinate2){let equals2=true;for(let i=coordinate1.length-1;i>=0;--i){if(coordinate1[i]!=coordinate2[i]){equals2=false;break;}}return equals2;}function rotate$1(coordinate,angle){const cosAngle=Math.cos(angle);const sinAngle=Math.sin(angle);const x=coordinate[0]*cosAngle-coordinate[1]*sinAngle;const y=coordinate[1]*cosAngle+coordinate[0]*sinAngle;coordinate[0]=x;coordinate[1]=y;return coordinate;}function scale$2(coordinate,scale2){coordinate[0]*=scale2;coordinate[1]*=
scale2;return coordinate;}function wrapX$1(coordinate,projection){if(projection.canWrapX()){const worldWidth=getWidth(projection.getExtent());const worldsAway=getWorldsAway(coordinate,projection,worldWidth);if(worldsAway){coordinate[0]-=worldsAway*worldWidth;}}return coordinate;}function getWorldsAway(coordinate,projection,sourceExtentWidth){const projectionExtent=projection.getExtent();let worldsAway=0;if(projection.canWrapX()&&(coordinate[0]<projectionExtent[0]||coordinate[0]>projectionExtent[2])){sourceExtentWidth=sourceExtentWidth||getWidth(projectionExtent);worldsAway=Math.floor((coordinate[0]-projectionExtent[0])/sourceExtentWidth);}return worldsAway;}const DEFAULT_RADIUS=63710088e-1;function getDistance(c1,c2,radius){radius=radius||DEFAULT_RADIUS;const lat1=toRadians(c1[1]);const lat2=toRadians(c2[1]);const deltaLatBy2=(lat2-lat1)/2;const deltaLonBy2=toRadians(c2[0]-c1[0])/2;const a=Math.sin(deltaLatBy2)*Math.sin(deltaLatBy2)+Math.sin(deltaLonBy2)*Math.sin(deltaLonBy2)*Math.cos(
lat1)*Math.cos(lat2);return 2*radius*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));}const levels={info:1,warn:2,error:3,none:4};let level=levels.info;function warn(...args){if(level>levels.warn){return;}console.warn(...args);}let showCoordinateWarning=true;function disableCoordinateWarning(disable2){const hide=disable2===void 0?true:disable2;showCoordinateWarning=!hide;}function cloneTransform(input,output){if(output!==void 0){for(let i=0,ii=input.length;i<ii;++i){output[i]=input[i];}output=output;}else{output=input.slice();}return output;}function identityTransform(input,output){if(output!==void 0&&input!==output){for(let i=0,ii=input.length;i<ii;++i){output[i]=input[i];}input=output;}return input;}function addProjection(projection){add$2(projection.getCode(),projection);add$1(projection,projection,cloneTransform);}function addProjections(projections){projections.forEach(addProjection);}function get$1(projectionLike){return typeof projectionLike==="string"?get$3(projectionLike):(
projectionLike||null);}function getPointResolution(projection,resolution,point,units){projection=get$1(projection);let pointResolution;const getter=projection.getPointResolutionFunc();if(getter){pointResolution=getter(resolution,point);if(units&&units!==projection.getUnits()){const metersPerUnit=projection.getMetersPerUnit();if(metersPerUnit){pointResolution=pointResolution*metersPerUnit/METERS_PER_UNIT$1[units];}}}else{const projUnits=projection.getUnits();if(projUnits=="degrees"&&!units||units=="degrees"){pointResolution=resolution;}else{const toEPSG43262=getTransformFromProjections(projection,get$1("EPSG:4326"));if(toEPSG43262===identityTransform&&projUnits!=="degrees"){pointResolution=resolution*projection.getMetersPerUnit();}else{let vertices=[point[0]-resolution/2,point[1],point[0]+resolution/2,point[1],point[0],point[1]-resolution/2,point[0],point[1]+resolution/2];vertices=toEPSG43262(vertices,vertices,2);const width=getDistance(vertices.slice(0,2),vertices.slice(2,4));const
height=getDistance(vertices.slice(4,6),vertices.slice(6,8));pointResolution=(width+height)/2;}const metersPerUnit=units?METERS_PER_UNIT$1[units]:projection.getMetersPerUnit();if(metersPerUnit!==void 0){pointResolution/=metersPerUnit;}}}return pointResolution;}function addEquivalentProjections(projections){addProjections(projections);projections.forEach(function(source){projections.forEach(function(destination){if(source!==destination){add$1(source,destination,cloneTransform);}});});}function addEquivalentTransforms(projections1,projections2,forwardTransform,inverseTransform){projections1.forEach(function(projection1){projections2.forEach(function(projection2){add$1(projection1,projection2,forwardTransform);add$1(projection2,projection1,inverseTransform);});});}function createProjection(projection,defaultCode){if(!projection){return get$1(defaultCode);}if(typeof projection==="string"){return get$1(projection);}return(projection);}function fromLonLat(coordinate,projection){
disableCoordinateWarning();return transform(coordinate,"EPSG:4326",projection!==void 0?projection:"EPSG:3857");}function equivalent(projection1,projection2){if(projection1===projection2){return true;}const equalUnits=projection1.getUnits()===projection2.getUnits();if(projection1.getCode()===projection2.getCode()){return equalUnits;}const transformFunc=getTransformFromProjections(projection1,projection2);return transformFunc===cloneTransform&&equalUnits;}function getTransformFromProjections(sourceProjection,destinationProjection){const sourceCode=sourceProjection.getCode();const destinationCode=destinationProjection.getCode();let transformFunc=get$2(sourceCode,destinationCode);if(!transformFunc){transformFunc=identityTransform;}return transformFunc;}function getTransform(source,destination){const sourceProjection=get$1(source);const destinationProjection=get$1(destination);return getTransformFromProjections(sourceProjection,destinationProjection);}function transform(coordinate,source,
destination){const transformFunc=getTransform(source,destination);return transformFunc(coordinate,void 0,coordinate.length);}function transformExtent(extent,source,destination,stops){const transformFunc=getTransform(source,destination);return applyTransform(extent,transformFunc,void 0,stops);}function toUserCoordinate(coordinate,sourceProjection){{return coordinate;}}function fromUserCoordinate(coordinate,destProjection){{if(showCoordinateWarning&&!equals(coordinate,[0,0])&&coordinate[0]>=-180&&coordinate[0]<=180&&coordinate[1]>=-90&&coordinate[1]<=90){showCoordinateWarning=false;warn("Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.");}return coordinate;}}function toUserExtent(extent,sourceProjection){{return extent;}}function fromUserExtent(extent,destProjection){{return extent;}}function addCommon(){addEquivalentProjections(PROJECTIONS$1);addEquivalentProjections(PROJECTIONS);addEquivalentTransforms(PROJECTIONS,PROJECTIONS$1,fromEPSG4326,
toEPSG4326);}addCommon();function createExtent(extent,onlyCenter,smooth){return(function(center,resolution,size,isMoving,centerShift){if(!center){return void 0;}if(!resolution&&!onlyCenter){return center;}const viewWidth=onlyCenter?0:size[0]*resolution;const viewHeight=onlyCenter?0:size[1]*resolution;const shiftX=centerShift?centerShift[0]:0;const shiftY=centerShift?centerShift[1]:0;let minX=extent[0]+viewWidth/2+shiftX;let maxX=extent[2]-viewWidth/2+shiftX;let minY=extent[1]+viewHeight/2+shiftY;let maxY=extent[3]-viewHeight/2+shiftY;if(minX>maxX){minX=(maxX+minX)/2;maxX=minX;}if(minY>maxY){minY=(maxY+minY)/2;maxY=minY;}let x=clamp(center[0],minX,maxX);let y=clamp(center[1],minY,maxY);if(isMoving&&smooth&&resolution){const ratio=30*resolution;x+=-ratio*Math.log(1+Math.max(0,minX-center[0])/ratio)+ratio*Math.log(1+Math.max(0,center[0]-maxX)/ratio);y+=-ratio*Math.log(1+Math.max(0,minY-center[1])/ratio)+ratio*Math.log(1+Math.max(0,center[1]-maxY)/ratio);}return[x,y];});}function none$1(
center){return center;}function getViewportClampedResolution(resolution,maxExtent,viewportSize,showFullExtent){const xResolution=getWidth(maxExtent)/viewportSize[0];const yResolution=getHeight(maxExtent)/viewportSize[1];if(showFullExtent){return Math.min(resolution,Math.max(xResolution,yResolution));}return Math.min(resolution,Math.min(xResolution,yResolution));}function getSmoothClampedResolution(resolution,maxResolution,minResolution){let result=Math.min(resolution,maxResolution);const ratio=50;result*=Math.log(1+ratio*Math.max(0,resolution/maxResolution-1))/ratio+1;if(minResolution){result=Math.max(result,minResolution);result/=Math.log(1+ratio*Math.max(0,minResolution/resolution-1))/ratio+1;}return clamp(result,minResolution/2,maxResolution*2);}function createSnapToResolutions(resolutions,smooth,maxExtent,showFullExtent){smooth=smooth!==void 0?smooth:true;return(function(resolution,direction,size,isMoving){if(resolution!==void 0){const maxResolution=resolutions[0];const
minResolution=resolutions[resolutions.length-1];const cappedMaxRes=maxExtent?getViewportClampedResolution(maxResolution,maxExtent,size,showFullExtent):maxResolution;if(isMoving){if(!smooth){return clamp(resolution,minResolution,cappedMaxRes);}return getSmoothClampedResolution(resolution,cappedMaxRes,minResolution);}const capped=Math.min(cappedMaxRes,resolution);const z=Math.floor(linearFindNearest(resolutions,capped,direction));if(resolutions[z]>cappedMaxRes&&z<resolutions.length-1){return resolutions[z+1];}return resolutions[z];}return void 0;});}function createSnapToPower(power,maxResolution,minResolution,smooth,maxExtent,showFullExtent){smooth=smooth!==void 0?smooth:true;minResolution=minResolution!==void 0?minResolution:0;return(function(resolution,direction,size,isMoving){if(resolution!==void 0){const cappedMaxRes=maxExtent?getViewportClampedResolution(maxResolution,maxExtent,size,showFullExtent):maxResolution;if(isMoving){if(!smooth){return clamp(resolution,minResolution,
cappedMaxRes);}return getSmoothClampedResolution(resolution,cappedMaxRes,minResolution);}const tolerance=1e-9;const minZoomLevel=Math.ceil(Math.log(maxResolution/cappedMaxRes)/Math.log(power)-tolerance);const offset=-direction*(0.5-tolerance)+0.5;const capped=Math.min(cappedMaxRes,resolution);const cappedZoomLevel=Math.floor(Math.log(maxResolution/capped)/Math.log(power)+offset);const zoomLevel=Math.max(minZoomLevel,cappedZoomLevel);const newResolution=maxResolution/Math.pow(power,zoomLevel);return clamp(newResolution,minResolution,cappedMaxRes);}return void 0;});}function createMinMaxResolution(maxResolution,minResolution,smooth,maxExtent,showFullExtent){smooth=smooth!==void 0?smooth:true;return(function(resolution,direction,size,isMoving){if(resolution!==void 0){const cappedMaxRes=maxExtent?getViewportClampedResolution(maxResolution,maxExtent,size,showFullExtent):maxResolution;if(!smooth||!isMoving){return clamp(resolution,minResolution,cappedMaxRes);}return getSmoothClampedResolution
(resolution,cappedMaxRes,minResolution);}return void 0;});}function disable(rotation){if(rotation!==void 0){return 0;}return void 0;}function none(rotation){if(rotation!==void 0){return rotation;}return void 0;}function createSnapToN(n){const theta=2*Math.PI/n;return(function(rotation,isMoving){if(isMoving){return rotation;}if(rotation!==void 0){rotation=Math.floor(rotation/theta+0.5)*theta;return rotation;}return void 0;});}function createSnapToZero(tolerance){tolerance=tolerance||toRadians(5);return(function(rotation,isMoving){if(isMoving){return rotation;}if(rotation!==void 0){if(Math.abs(rotation)<=tolerance){return 0;}return rotation;}return void 0;});}function easeIn(t){return Math.pow(t,3);}function easeOut(t){return 1-easeIn(1-t);}function inAndOut(t){return 3*t*t-2*t*t*t;}function linear(t){return t;}function transform2D(flatCoordinates,offset,end,stride,transform2,dest){dest=dest?dest:[];let i=0;for(let j=offset;j<end;j+=stride){const x=flatCoordinates[j];const y=
flatCoordinates[j+1];dest[i++]=transform2[0]*x+transform2[2]*y+transform2[4];dest[i++]=transform2[1]*x+transform2[3]*y+transform2[5];}if(dest&&dest.length!=i){dest.length=i;}return dest;}function rotate(flatCoordinates,offset,end,stride,angle,anchor,dest){dest=dest?dest:[];const cos=Math.cos(angle);const sin=Math.sin(angle);const anchorX=anchor[0];const anchorY=anchor[1];let i=0;for(let j=offset;j<end;j+=stride){const deltaX=flatCoordinates[j]-anchorX;const deltaY=flatCoordinates[j+1]-anchorY;dest[i++]=anchorX+deltaX*cos-deltaY*sin;dest[i++]=anchorY+deltaX*sin+deltaY*cos;for(let k=j+2;k<j+stride;++k){dest[i++]=flatCoordinates[k];}}if(dest&&dest.length!=i){dest.length=i;}return dest;}function scale$1(flatCoordinates,offset,end,stride,sx,sy,anchor,dest){dest=dest?dest:[];const anchorX=anchor[0];const anchorY=anchor[1];let i=0;for(let j=offset;j<end;j+=stride){const deltaX=flatCoordinates[j]-anchorX;const deltaY=flatCoordinates[j+1]-anchorY;dest[i++]=anchorX+sx*deltaX;dest[i++]=anchorY+sy
*deltaY;for(let k=j+2;k<j+stride;++k){dest[i++]=flatCoordinates[k];}}if(dest&&dest.length!=i){dest.length=i;}return dest;}function translate(flatCoordinates,offset,end,stride,deltaX,deltaY,dest){dest=dest?dest:[];let i=0;for(let j=offset;j<end;j+=stride){dest[i++]=flatCoordinates[j]+deltaX;dest[i++]=flatCoordinates[j+1]+deltaY;for(let k=j+2;k<j+stride;++k){dest[i++]=flatCoordinates[k];}}if(dest&&dest.length!=i){dest.length=i;}return dest;}const tmpTransform=create();class Geometry extends BaseObject$1{constructor(){super();this.extent_=createEmpty();this.extentRevision_=-1;this.simplifiedGeometryMaxMinSquaredTolerance=0;this.simplifiedGeometryRevision=0;this.simplifyTransformedInternal=memoizeOne(function(revision,squaredTolerance,transform2){if(!transform2){return this.getSimplifiedGeometry(squaredTolerance);}const clone2=this.clone();clone2.applyTransform(transform2);return clone2.getSimplifiedGeometry(squaredTolerance);});}simplifyTransformed(squaredTolerance,transform2){return this
.simplifyTransformedInternal(this.getRevision(),squaredTolerance,transform2);}clone(){return abstract();}closestPointXY(x,y,closestPoint,minSquaredDistance){return abstract();}containsXY(x,y){const coord=this.getClosestPoint([x,y]);return coord[0]===x&&coord[1]===y;}getClosestPoint(point,closestPoint){closestPoint=closestPoint?closestPoint:[NaN,NaN];this.closestPointXY(point[0],point[1],closestPoint,Infinity);return closestPoint;}intersectsCoordinate(coordinate){return this.containsXY(coordinate[0],coordinate[1]);}computeExtent(extent){return abstract();}getExtent(extent){if(this.extentRevision_!=this.getRevision()){const extent2=this.computeExtent(this.extent_);if(isNaN(extent2[0])||isNaN(extent2[1])){createOrUpdateEmpty(extent2);}this.extentRevision_=this.getRevision();}return returnOrUpdate(this.extent_,extent);}rotate(angle,anchor){abstract();}scale(sx,sy,anchor){abstract();}simplify(tolerance){return this.getSimplifiedGeometry(tolerance*tolerance);}getSimplifiedGeometry(
squaredTolerance){return abstract();}getType(){return abstract();}applyTransform(transformFn){abstract();}intersectsExtent(extent){return abstract();}translate(deltaX,deltaY){abstract();}transform(source,destination){const sourceProj=get$1(source);const transformFn=sourceProj.getUnits()=="tile-pixels"?function(inCoordinates,outCoordinates,stride){const pixelExtent=sourceProj.getExtent();const projectedExtent=sourceProj.getWorldExtent();const scale2=getHeight(projectedExtent)/getHeight(pixelExtent);compose(tmpTransform,projectedExtent[0],projectedExtent[3],scale2,-scale2,0,0,0);transform2D(inCoordinates,0,inCoordinates.length,stride,tmpTransform,outCoordinates);return getTransform(sourceProj,destination)(inCoordinates,outCoordinates,stride);}:getTransform(sourceProj,destination);this.applyTransform(transformFn);return this;}}const Geometry$1=Geometry;class SimpleGeometry extends Geometry$1{constructor(){super();this.layout="XY";this.stride=2;this.flatCoordinates=null;}computeExtent(
extent){return createOrUpdateFromFlatCoordinates(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,extent);}getCoordinates(){return abstract();}getFirstCoordinate(){return this.flatCoordinates.slice(0,this.stride);}getFlatCoordinates(){return this.flatCoordinates;}getLastCoordinate(){return this.flatCoordinates.slice(this.flatCoordinates.length-this.stride);}getLayout(){return this.layout;}getSimplifiedGeometry(squaredTolerance){if(this.simplifiedGeometryRevision!==this.getRevision()){this.simplifiedGeometryMaxMinSquaredTolerance=0;this.simplifiedGeometryRevision=this.getRevision();}if(squaredTolerance<0||this.simplifiedGeometryMaxMinSquaredTolerance!==0&&squaredTolerance<=this.simplifiedGeometryMaxMinSquaredTolerance){return this;}const simplifiedGeometry=this.getSimplifiedGeometryInternal(squaredTolerance);const simplifiedFlatCoordinates=simplifiedGeometry.getFlatCoordinates();if(simplifiedFlatCoordinates.length<this.flatCoordinates.length){return simplifiedGeometry;}
this.simplifiedGeometryMaxMinSquaredTolerance=squaredTolerance;return this;}getSimplifiedGeometryInternal(squaredTolerance){return this;}getStride(){return this.stride;}setFlatCoordinates(layout,flatCoordinates){this.stride=getStrideForLayout(layout);this.layout=layout;this.flatCoordinates=flatCoordinates;}setCoordinates(coordinates2,layout){abstract();}setLayout(layout,coordinates2,nesting){let stride;if(layout){stride=getStrideForLayout(layout);}else{for(let i=0;i<nesting;++i){if(coordinates2.length===0){this.layout="XY";this.stride=2;return;}coordinates2=coordinates2[0];}stride=coordinates2.length;layout=getLayoutForStride(stride);}this.layout=layout;this.stride=stride;}applyTransform(transformFn){if(this.flatCoordinates){transformFn(this.flatCoordinates,this.flatCoordinates,this.stride);this.changed();}}rotate(angle,anchor){const flatCoordinates=this.getFlatCoordinates();if(flatCoordinates){const stride=this.getStride();rotate(flatCoordinates,0,flatCoordinates.length,stride,angle,
anchor,flatCoordinates);this.changed();}}scale(sx,sy,anchor){if(sy===void 0){sy=sx;}if(!anchor){anchor=getCenter(this.getExtent());}const flatCoordinates=this.getFlatCoordinates();if(flatCoordinates){const stride=this.getStride();scale$1(flatCoordinates,0,flatCoordinates.length,stride,sx,sy,anchor,flatCoordinates);this.changed();}}translate(deltaX,deltaY){const flatCoordinates=this.getFlatCoordinates();if(flatCoordinates){const stride=this.getStride();translate(flatCoordinates,0,flatCoordinates.length,stride,deltaX,deltaY,flatCoordinates);this.changed();}}}function getLayoutForStride(stride){let layout;if(stride==2){layout="XY";}else if(stride==3){layout="XYZ";}else if(stride==4){layout="XYZM";}return(layout);}function getStrideForLayout(layout){let stride;if(layout=="XY"){stride=2;}else if(layout=="XYZ"||layout=="XYM"){stride=3;}else if(layout=="XYZM"){stride=4;}return(stride);}function transformGeom2D(simpleGeometry,transform2,dest){const flatCoordinates=simpleGeometry.
getFlatCoordinates();if(!flatCoordinates){return null;}const stride=simpleGeometry.getStride();return transform2D(flatCoordinates,0,flatCoordinates.length,stride,transform2,dest);}const SimpleGeometry$1=SimpleGeometry;function assignClosest(flatCoordinates,offset1,offset2,stride,x,y,closestPoint){const x1=flatCoordinates[offset1];const y1=flatCoordinates[offset1+1];const dx=flatCoordinates[offset2]-x1;const dy=flatCoordinates[offset2+1]-y1;let offset;if(dx===0&&dy===0){offset=offset1;}else{const t=((x-x1)*dx+(y-y1)*dy)/(dx*dx+dy*dy);if(t>1){offset=offset2;}else if(t>0){for(let i=0;i<stride;++i){closestPoint[i]=lerp(flatCoordinates[offset1+i],flatCoordinates[offset2+i],t);}closestPoint.length=stride;return;}else{offset=offset1;}}for(let i=0;i<stride;++i){closestPoint[i]=flatCoordinates[offset+i];}closestPoint.length=stride;}function maxSquaredDelta(flatCoordinates,offset,end,stride,max){let x1=flatCoordinates[offset];let y1=flatCoordinates[offset+1];for(offset+=stride;offset<end;offset
+=stride){const x2=flatCoordinates[offset];const y2=flatCoordinates[offset+1];const squaredDelta=squaredDistance(x1,y1,x2,y2);if(squaredDelta>max){max=squaredDelta;}x1=x2;y1=y2;}return max;}function arrayMaxSquaredDelta(flatCoordinates,offset,ends,stride,max){for(let i=0,ii=ends.length;i<ii;++i){const end=ends[i];max=maxSquaredDelta(flatCoordinates,offset,end,stride,max);offset=end;}return max;}function multiArrayMaxSquaredDelta(flatCoordinates,offset,endss,stride,max){for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i];max=arrayMaxSquaredDelta(flatCoordinates,offset,ends,stride,max);offset=ends[ends.length-1];}return max;}function assignClosestPoint(flatCoordinates,offset,end,stride,maxDelta,isRing,x,y,closestPoint,minSquaredDistance,tmpPoint){if(offset==end){return minSquaredDistance;}let i,squaredDistance$1;if(maxDelta===0){squaredDistance$1=squaredDistance(x,y,flatCoordinates[offset],flatCoordinates[offset+1]);if(squaredDistance$1<minSquaredDistance){for(i=0;i<stride;++i){
closestPoint[i]=flatCoordinates[offset+i];}closestPoint.length=stride;return squaredDistance$1;}return minSquaredDistance;}tmpPoint=tmpPoint?tmpPoint:[NaN,NaN];let index=offset+stride;while(index<end){assignClosest(flatCoordinates,index-stride,index,stride,x,y,tmpPoint);squaredDistance$1=squaredDistance(x,y,tmpPoint[0],tmpPoint[1]);if(squaredDistance$1<minSquaredDistance){minSquaredDistance=squaredDistance$1;for(i=0;i<stride;++i){closestPoint[i]=tmpPoint[i];}closestPoint.length=stride;index+=stride;}else{index+=stride*Math.max((Math.sqrt(squaredDistance$1)-Math.sqrt(minSquaredDistance))/maxDelta|0,1);}}if(isRing){assignClosest(flatCoordinates,end-stride,offset,stride,x,y,tmpPoint);squaredDistance$1=squaredDistance(x,y,tmpPoint[0],tmpPoint[1]);if(squaredDistance$1<minSquaredDistance){minSquaredDistance=squaredDistance$1;for(i=0;i<stride;++i){closestPoint[i]=tmpPoint[i];}closestPoint.length=stride;}}return minSquaredDistance;}function assignClosestArrayPoint(flatCoordinates,offset,ends,
stride,maxDelta,isRing,x,y,closestPoint,minSquaredDistance,tmpPoint){tmpPoint=tmpPoint?tmpPoint:[NaN,NaN];for(let i=0,ii=ends.length;i<ii;++i){const end=ends[i];minSquaredDistance=assignClosestPoint(flatCoordinates,offset,end,stride,maxDelta,isRing,x,y,closestPoint,minSquaredDistance,tmpPoint);offset=end;}return minSquaredDistance;}function assignClosestMultiArrayPoint(flatCoordinates,offset,endss,stride,maxDelta,isRing,x,y,closestPoint,minSquaredDistance,tmpPoint){tmpPoint=tmpPoint?tmpPoint:[NaN,NaN];for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i];minSquaredDistance=assignClosestArrayPoint(flatCoordinates,offset,ends,stride,maxDelta,isRing,x,y,closestPoint,minSquaredDistance,tmpPoint);offset=ends[ends.length-1];}return minSquaredDistance;}function deflateCoordinate(flatCoordinates,offset,coordinate,stride){for(let i=0,ii=coordinate.length;i<ii;++i){flatCoordinates[offset++]=coordinate[i];}return offset;}function deflateCoordinates(flatCoordinates,offset,coordinates2,stride){
for(let i=0,ii=coordinates2.length;i<ii;++i){const coordinate=coordinates2[i];for(let j=0;j<stride;++j){flatCoordinates[offset++]=coordinate[j];}}return offset;}function deflateCoordinatesArray(flatCoordinates,offset,coordinatess,stride,ends){ends=ends?ends:[];let i=0;for(let j=0,jj=coordinatess.length;j<jj;++j){const end=deflateCoordinates(flatCoordinates,offset,coordinatess[j],stride);ends[i++]=end;offset=end;}ends.length=i;return ends;}function deflateMultiCoordinatesArray(flatCoordinates,offset,coordinatesss,stride,endss){endss=endss?endss:[];let i=0;for(let j=0,jj=coordinatesss.length;j<jj;++j){const ends=deflateCoordinatesArray(flatCoordinates,offset,coordinatesss[j],stride,endss[i]);if(ends.length===0){ends[0]=offset;}endss[i++]=ends;offset=ends[ends.length-1];}endss.length=i;return endss;}function douglasPeucker(flatCoordinates,offset,end,stride,squaredTolerance,simplifiedFlatCoordinates,simplifiedOffset){const n=(end-offset)/stride;if(n<3){for(;offset<end;offset+=stride){
simplifiedFlatCoordinates[simplifiedOffset++]=flatCoordinates[offset];simplifiedFlatCoordinates[simplifiedOffset++]=flatCoordinates[offset+1];}return simplifiedOffset;}const markers=new Array(n);markers[0]=1;markers[n-1]=1;const stack=[offset,end-stride];let index=0;while(stack.length>0){const last=stack.pop();const first=stack.pop();let maxSquaredDistance=0;const x1=flatCoordinates[first];const y1=flatCoordinates[first+1];const x2=flatCoordinates[last];const y2=flatCoordinates[last+1];for(let i=first+stride;i<last;i+=stride){const x=flatCoordinates[i];const y=flatCoordinates[i+1];const squaredDistance2=squaredSegmentDistance(x,y,x1,y1,x2,y2);if(squaredDistance2>maxSquaredDistance){index=i;maxSquaredDistance=squaredDistance2;}}if(maxSquaredDistance>squaredTolerance){markers[(index-offset)/stride]=1;if(first+stride<index){stack.push(first,index);}if(index+stride<last){stack.push(index,last);}}}for(let i=0;i<n;++i){if(markers[i]){simplifiedFlatCoordinates[simplifiedOffset++]=
flatCoordinates[offset+i*stride];simplifiedFlatCoordinates[simplifiedOffset++]=flatCoordinates[offset+i*stride+1];}}return simplifiedOffset;}function douglasPeuckerArray(flatCoordinates,offset,ends,stride,squaredTolerance,simplifiedFlatCoordinates,simplifiedOffset,simplifiedEnds){for(let i=0,ii=ends.length;i<ii;++i){const end=ends[i];simplifiedOffset=douglasPeucker(flatCoordinates,offset,end,stride,squaredTolerance,simplifiedFlatCoordinates,simplifiedOffset);simplifiedEnds.push(simplifiedOffset);offset=end;}return simplifiedOffset;}function snap(value,tolerance){return tolerance*Math.round(value/tolerance);}function quantize(flatCoordinates,offset,end,stride,tolerance,simplifiedFlatCoordinates,simplifiedOffset){if(offset==end){return simplifiedOffset;}let x1=snap(flatCoordinates[offset],tolerance);let y1=snap(flatCoordinates[offset+1],tolerance);offset+=stride;simplifiedFlatCoordinates[simplifiedOffset++]=x1;simplifiedFlatCoordinates[simplifiedOffset++]=y1;let x2,y2;do{x2=snap(
flatCoordinates[offset],tolerance);y2=snap(flatCoordinates[offset+1],tolerance);offset+=stride;if(offset==end){simplifiedFlatCoordinates[simplifiedOffset++]=x2;simplifiedFlatCoordinates[simplifiedOffset++]=y2;return simplifiedOffset;}}while(x2==x1&&y2==y1);while(offset<end){const x3=snap(flatCoordinates[offset],tolerance);const y3=snap(flatCoordinates[offset+1],tolerance);offset+=stride;if(x3==x2&&y3==y2){continue;}const dx1=x2-x1;const dy1=y2-y1;const dx2=x3-x1;const dy2=y3-y1;if(dx1*dy2==dy1*dx2&&(dx1<0&&dx2<dx1||dx1==dx2||dx1>0&&dx2>dx1)&&(dy1<0&&dy2<dy1||dy1==dy2||dy1>0&&dy2>dy1)){x2=x3;y2=y3;continue;}simplifiedFlatCoordinates[simplifiedOffset++]=x2;simplifiedFlatCoordinates[simplifiedOffset++]=y2;x1=x2;y1=y2;x2=x3;y2=y3;}simplifiedFlatCoordinates[simplifiedOffset++]=x2;simplifiedFlatCoordinates[simplifiedOffset++]=y2;return simplifiedOffset;}function quantizeArray(flatCoordinates,offset,ends,stride,tolerance,simplifiedFlatCoordinates,simplifiedOffset,simplifiedEnds){for(let i=0,
ii=ends.length;i<ii;++i){const end=ends[i];simplifiedOffset=quantize(flatCoordinates,offset,end,stride,tolerance,simplifiedFlatCoordinates,simplifiedOffset);simplifiedEnds.push(simplifiedOffset);offset=end;}return simplifiedOffset;}function quantizeMultiArray(flatCoordinates,offset,endss,stride,tolerance,simplifiedFlatCoordinates,simplifiedOffset,simplifiedEndss){for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i];const simplifiedEnds=[];simplifiedOffset=quantizeArray(flatCoordinates,offset,ends,stride,tolerance,simplifiedFlatCoordinates,simplifiedOffset,simplifiedEnds);simplifiedEndss.push(simplifiedEnds);offset=ends[ends.length-1];}return simplifiedOffset;}function inflateCoordinates(flatCoordinates,offset,end,stride,coordinates2){coordinates2=coordinates2!==void 0?coordinates2:[];let i=0;for(let j=offset;j<end;j+=stride){coordinates2[i++]=flatCoordinates.slice(j,j+stride);}coordinates2.length=i;return coordinates2;}function inflateCoordinatesArray(flatCoordinates,offset,ends,
stride,coordinatess){coordinatess=coordinatess!==void 0?coordinatess:[];let i=0;for(let j=0,jj=ends.length;j<jj;++j){const end=ends[j];coordinatess[i++]=inflateCoordinates(flatCoordinates,offset,end,stride,coordinatess[i]);offset=end;}coordinatess.length=i;return coordinatess;}function inflateMultiCoordinatesArray(flatCoordinates,offset,endss,stride,coordinatesss){coordinatesss=coordinatesss!==void 0?coordinatesss:[];let i=0;for(let j=0,jj=endss.length;j<jj;++j){const ends=endss[j];coordinatesss[i++]=ends.length===1&&ends[0]===offset?[]:inflateCoordinatesArray(flatCoordinates,offset,ends,stride,coordinatesss[i]);offset=ends[ends.length-1];}coordinatesss.length=i;return coordinatesss;}function linearRing(flatCoordinates,offset,end,stride){let twiceArea=0;let x1=flatCoordinates[end-stride];let y1=flatCoordinates[end-stride+1];for(;offset<end;offset+=stride){const x2=flatCoordinates[offset];const y2=flatCoordinates[offset+1];twiceArea+=y1*x2-x1*y2;x1=x2;y1=y2;}return twiceArea/2;}function
linearRings(flatCoordinates,offset,ends,stride){let area=0;for(let i=0,ii=ends.length;i<ii;++i){const end=ends[i];area+=linearRing(flatCoordinates,offset,end,stride);offset=end;}return area;}function linearRingss$1(flatCoordinates,offset,endss,stride){let area=0;for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i];area+=linearRings(flatCoordinates,offset,ends,stride);offset=ends[ends.length-1];}return area;}class LinearRing extends SimpleGeometry$1{constructor(coordinates2,layout){super();this.maxDelta_=-1;this.maxDeltaRevision_=-1;if(layout!==void 0&&!Array.isArray(coordinates2[0])){this.setFlatCoordinates(layout,coordinates2);}else{this.setCoordinates(coordinates2,layout);}}clone(){return new LinearRing(this.flatCoordinates.slice(),this.layout);}closestPointXY(x,y,closestPoint,minSquaredDistance){if(minSquaredDistance<closestSquaredDistanceXY(this.getExtent(),x,y)){return minSquaredDistance;}if(this.maxDeltaRevision_!=this.getRevision()){this.maxDelta_=Math.sqrt(maxSquaredDelta(
this.flatCoordinates,0,this.flatCoordinates.length,this.stride,0));this.maxDeltaRevision_=this.getRevision();}return assignClosestPoint(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,this.maxDelta_,true,x,y,closestPoint,minSquaredDistance);}getArea(){return linearRing(this.flatCoordinates,0,this.flatCoordinates.length,this.stride);}getCoordinates(){return inflateCoordinates(this.flatCoordinates,0,this.flatCoordinates.length,this.stride);}getSimplifiedGeometryInternal(squaredTolerance){const simplifiedFlatCoordinates=[];simplifiedFlatCoordinates.length=douglasPeucker(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,squaredTolerance,simplifiedFlatCoordinates,0);return new LinearRing(simplifiedFlatCoordinates,"XY");}getType(){return"LinearRing";}intersectsExtent(extent){return false;}setCoordinates(coordinates2,layout){this.setLayout(layout,coordinates2,1);if(!this.flatCoordinates){this.flatCoordinates=[];}this.flatCoordinates.length=deflateCoordinates(this.
flatCoordinates,0,coordinates2,this.stride);this.changed();}}const LinearRing$1=LinearRing;class Point extends SimpleGeometry$1{constructor(coordinates2,layout){super();this.setCoordinates(coordinates2,layout);}clone(){const point=new Point(this.flatCoordinates.slice(),this.layout);point.applyProperties(this);return point;}closestPointXY(x,y,closestPoint,minSquaredDistance){const flatCoordinates=this.flatCoordinates;const squaredDistance$1=squaredDistance(x,y,flatCoordinates[0],flatCoordinates[1]);if(squaredDistance$1<minSquaredDistance){const stride=this.stride;for(let i=0;i<stride;++i){closestPoint[i]=flatCoordinates[i];}closestPoint.length=stride;return squaredDistance$1;}return minSquaredDistance;}getCoordinates(){return!this.flatCoordinates?[]:this.flatCoordinates.slice();}computeExtent(extent){return createOrUpdateFromCoordinate(this.flatCoordinates,extent);}getType(){return"Point";}intersectsExtent(extent){return containsXY(extent,this.flatCoordinates[0],this.flatCoordinates[1])
;}setCoordinates(coordinates2,layout){this.setLayout(layout,coordinates2,0);if(!this.flatCoordinates){this.flatCoordinates=[];}this.flatCoordinates.length=deflateCoordinate(this.flatCoordinates,0,coordinates2,this.stride);this.changed();}}const OlPoint=Point;function linearRingContainsExtent(flatCoordinates,offset,end,stride,extent){const outside=forEachCorner(extent,function(coordinate){return!linearRingContainsXY(flatCoordinates,offset,end,stride,coordinate[0],coordinate[1]);});return!outside;}function linearRingContainsXY(flatCoordinates,offset,end,stride,x,y){let wn=0;let x1=flatCoordinates[end-stride];let y1=flatCoordinates[end-stride+1];for(;offset<end;offset+=stride){const x2=flatCoordinates[offset];const y2=flatCoordinates[offset+1];if(y1<=y){if(y2>y&&(x2-x1)*(y-y1)-(x-x1)*(y2-y1)>0){wn++;}}else if(y2<=y&&(x2-x1)*(y-y1)-(x-x1)*(y2-y1)<0){wn--;}x1=x2;y1=y2;}return wn!==0;}function linearRingsContainsXY(flatCoordinates,offset,ends,stride,x,y){if(ends.length===0){return false;}if(
!linearRingContainsXY(flatCoordinates,offset,ends[0],stride,x,y)){return false;}for(let i=1,ii=ends.length;i<ii;++i){if(linearRingContainsXY(flatCoordinates,ends[i-1],ends[i],stride,x,y)){return false;}}return true;}function linearRingssContainsXY(flatCoordinates,offset,endss,stride,x,y){if(endss.length===0){return false;}for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i];if(linearRingsContainsXY(flatCoordinates,offset,ends,stride,x,y)){return true;}offset=ends[ends.length-1];}return false;}function getInteriorPointOfArray(flatCoordinates,offset,ends,stride,flatCenters,flatCentersOffset,dest){let i,ii,x,x1,x2,y1,y2;const y=flatCenters[flatCentersOffset+1];const intersections=[];for(let r=0,rr=ends.length;r<rr;++r){const end=ends[r];x1=flatCoordinates[end-stride];y1=flatCoordinates[end-stride+1];for(i=offset;i<end;i+=stride){x2=flatCoordinates[i];y2=flatCoordinates[i+1];if(y<=y1&&y2<=y||y1<=y&&y<=y2){x=(y-y1)/(y2-y1)*(x2-x1)+x1;intersections.push(x);}x1=x2;y1=y2;}}let pointX=NaN;
let maxSegmentLength=-Infinity;intersections.sort(ascending);x1=intersections[0];for(i=1,ii=intersections.length;i<ii;++i){x2=intersections[i];const segmentLength=Math.abs(x2-x1);if(segmentLength>maxSegmentLength){x=(x1+x2)/2;if(linearRingsContainsXY(flatCoordinates,offset,ends,stride,x,y)){pointX=x;maxSegmentLength=segmentLength;}}x1=x2;}if(isNaN(pointX)){pointX=flatCenters[flatCentersOffset];}if(dest){dest.push(pointX,y,maxSegmentLength);return dest;}return[pointX,y,maxSegmentLength];}function getInteriorPointsOfMultiArray(flatCoordinates,offset,endss,stride,flatCenters){let interiorPoints=[];for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i];interiorPoints=getInteriorPointOfArray(flatCoordinates,offset,ends,stride,flatCenters,2*i,interiorPoints);offset=ends[ends.length-1];}return interiorPoints;}function forEach(flatCoordinates,offset,end,stride,callback){let ret;offset+=stride;for(;offset<end;offset+=stride){ret=callback(flatCoordinates.slice(offset-stride,offset),
flatCoordinates.slice(offset,offset+stride));if(ret){return ret;}}return false;}function intersectsLineString(flatCoordinates,offset,end,stride,extent){const coordinatesExtent=extendFlatCoordinates(createEmpty(),flatCoordinates,offset,end,stride);if(!intersects$1(extent,coordinatesExtent)){return false;}if(containsExtent(extent,coordinatesExtent)){return true;}if(coordinatesExtent[0]>=extent[0]&&coordinatesExtent[2]<=extent[2]){return true;}if(coordinatesExtent[1]>=extent[1]&&coordinatesExtent[3]<=extent[3]){return true;}return forEach(flatCoordinates,offset,end,stride,function(point1,point2){return intersectsSegment(extent,point1,point2);});}function intersectsLineStringArray(flatCoordinates,offset,ends,stride,extent){for(let i=0,ii=ends.length;i<ii;++i){if(intersectsLineString(flatCoordinates,offset,ends[i],stride,extent)){return true;}offset=ends[i];}return false;}function intersectsLinearRing(flatCoordinates,offset,end,stride,extent){if(intersectsLineString(flatCoordinates,offset,
end,stride,extent)){return true;}if(linearRingContainsXY(flatCoordinates,offset,end,stride,extent[0],extent[1])){return true;}if(linearRingContainsXY(flatCoordinates,offset,end,stride,extent[0],extent[3])){return true;}if(linearRingContainsXY(flatCoordinates,offset,end,stride,extent[2],extent[1])){return true;}if(linearRingContainsXY(flatCoordinates,offset,end,stride,extent[2],extent[3])){return true;}return false;}function intersectsLinearRingArray(flatCoordinates,offset,ends,stride,extent){if(!intersectsLinearRing(flatCoordinates,offset,ends[0],stride,extent)){return false;}if(ends.length===1){return true;}for(let i=1,ii=ends.length;i<ii;++i){if(linearRingContainsExtent(flatCoordinates,ends[i-1],ends[i],stride,extent)){if(!intersectsLineString(flatCoordinates,ends[i-1],ends[i],stride,extent)){return false;}}}return true;}function intersectsLinearRingMultiArray(flatCoordinates,offset,endss,stride,extent){for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i];if(
intersectsLinearRingArray(flatCoordinates,offset,ends,stride,extent)){return true;}offset=ends[ends.length-1];}return false;}function coordinates(flatCoordinates,offset,end,stride){while(offset<end-stride){for(let i=0;i<stride;++i){const tmp=flatCoordinates[offset+i];flatCoordinates[offset+i]=flatCoordinates[end-stride+i];flatCoordinates[end-stride+i]=tmp;}offset+=stride;end-=stride;}}function linearRingIsClockwise(flatCoordinates,offset,end,stride){let edge=0;let x1=flatCoordinates[end-stride];let y1=flatCoordinates[end-stride+1];for(;offset<end;offset+=stride){const x2=flatCoordinates[offset];const y2=flatCoordinates[offset+1];edge+=(x2-x1)*(y2+y1);x1=x2;y1=y2;}return edge===0?void 0:edge>0;}function linearRingsAreOriented(flatCoordinates,offset,ends,stride,right){right=right!==void 0?right:false;for(let i=0,ii=ends.length;i<ii;++i){const end=ends[i];const isClockwise=linearRingIsClockwise(flatCoordinates,offset,end,stride);if(i===0){if(right&&isClockwise||!right&&!isClockwise){
return false;}}else{if(right&&!isClockwise||!right&&isClockwise){return false;}}offset=end;}return true;}function linearRingssAreOriented(flatCoordinates,offset,endss,stride,right){for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i];if(!linearRingsAreOriented(flatCoordinates,offset,ends,stride,right)){return false;}if(ends.length){offset=ends[ends.length-1];}}return true;}function orientLinearRings(flatCoordinates,offset,ends,stride,right){right=right!==void 0?right:false;for(let i=0,ii=ends.length;i<ii;++i){const end=ends[i];const isClockwise=linearRingIsClockwise(flatCoordinates,offset,end,stride);const reverse=i===0?right&&isClockwise||!right&&!isClockwise:right&&!isClockwise||!right&&isClockwise;if(reverse){coordinates(flatCoordinates,offset,end,stride);}offset=end;}return offset;}function orientLinearRingsArray(flatCoordinates,offset,endss,stride,right){for(let i=0,ii=endss.length;i<ii;++i){offset=orientLinearRings(flatCoordinates,offset,endss[i],stride,right);}return offset
;}class Polygon extends SimpleGeometry$1{constructor(coordinates2,layout,ends){super();this.ends_=[];this.flatInteriorPointRevision_=-1;this.flatInteriorPoint_=null;this.maxDelta_=-1;this.maxDeltaRevision_=-1;this.orientedRevision_=-1;this.orientedFlatCoordinates_=null;if(layout!==void 0&&ends){this.setFlatCoordinates(layout,coordinates2);this.ends_=ends;}else{this.setCoordinates(coordinates2,layout);}}appendLinearRing(linearRing2){if(!this.flatCoordinates){this.flatCoordinates=linearRing2.getFlatCoordinates().slice();}else{extend$2(this.flatCoordinates,linearRing2.getFlatCoordinates());}this.ends_.push(this.flatCoordinates.length);this.changed();}clone(){const polygon=new Polygon(this.flatCoordinates.slice(),this.layout,this.ends_.slice());polygon.applyProperties(this);return polygon;}closestPointXY(x,y,closestPoint,minSquaredDistance){if(minSquaredDistance<closestSquaredDistanceXY(this.getExtent(),x,y)){return minSquaredDistance;}if(this.maxDeltaRevision_!=this.getRevision()){this.
maxDelta_=Math.sqrt(arrayMaxSquaredDelta(this.flatCoordinates,0,this.ends_,this.stride,0));this.maxDeltaRevision_=this.getRevision();}return assignClosestArrayPoint(this.flatCoordinates,0,this.ends_,this.stride,this.maxDelta_,true,x,y,closestPoint,minSquaredDistance);}containsXY(x,y){return linearRingsContainsXY(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride,x,y);}getArea(){return linearRings(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride);}getCoordinates(right){let flatCoordinates;if(right!==void 0){flatCoordinates=this.getOrientedFlatCoordinates().slice();orientLinearRings(flatCoordinates,0,this.ends_,this.stride,right);}else{flatCoordinates=this.flatCoordinates;}return inflateCoordinatesArray(flatCoordinates,0,this.ends_,this.stride);}getEnds(){return this.ends_;}getFlatInteriorPoint(){if(this.flatInteriorPointRevision_!=this.getRevision()){const flatCenter=getCenter(this.getExtent());this.flatInteriorPoint_=getInteriorPointOfArray(this.
getOrientedFlatCoordinates(),0,this.ends_,this.stride,flatCenter,0);this.flatInteriorPointRevision_=this.getRevision();}return this.flatInteriorPoint_;}getInteriorPoint(){return new OlPoint(this.getFlatInteriorPoint(),"XYM");}getLinearRingCount(){return this.ends_.length;}getLinearRing(index){if(index<0||this.ends_.length<=index){return null;}return new LinearRing$1(this.flatCoordinates.slice(index===0?0:this.ends_[index-1],this.ends_[index]),this.layout);}getLinearRings(){const layout=this.layout;const flatCoordinates=this.flatCoordinates;const ends=this.ends_;const linearRings2=[];let offset=0;for(let i=0,ii=ends.length;i<ii;++i){const end=ends[i];const linearRing2=new LinearRing$1(flatCoordinates.slice(offset,end),layout);linearRings2.push(linearRing2);offset=end;}return linearRings2;}getOrientedFlatCoordinates(){if(this.orientedRevision_!=this.getRevision()){const flatCoordinates=this.flatCoordinates;if(linearRingsAreOriented(flatCoordinates,0,this.ends_,this.stride)){this.
orientedFlatCoordinates_=flatCoordinates;}else{this.orientedFlatCoordinates_=flatCoordinates.slice();this.orientedFlatCoordinates_.length=orientLinearRings(this.orientedFlatCoordinates_,0,this.ends_,this.stride);}this.orientedRevision_=this.getRevision();}return this.orientedFlatCoordinates_;}getSimplifiedGeometryInternal(squaredTolerance){const simplifiedFlatCoordinates=[];const simplifiedEnds=[];simplifiedFlatCoordinates.length=quantizeArray(this.flatCoordinates,0,this.ends_,this.stride,Math.sqrt(squaredTolerance),simplifiedFlatCoordinates,0,simplifiedEnds);return new Polygon(simplifiedFlatCoordinates,"XY",simplifiedEnds);}getType(){return"Polygon";}intersectsExtent(extent){return intersectsLinearRingArray(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride,extent);}setCoordinates(coordinates2,layout){this.setLayout(layout,coordinates2,2);if(!this.flatCoordinates){this.flatCoordinates=[];}const ends=deflateCoordinatesArray(this.flatCoordinates,0,coordinates2,this.stride,this.
ends_);this.flatCoordinates.length=ends.length===0?0:ends[ends.length-1];this.changed();}}const Polygon$1=Polygon;function fromExtent(extent){if(isEmpty(extent)){throw new Error("Cannot create polygon from empty extent");}const minX=extent[0];const minY=extent[1];const maxX=extent[2];const maxY=extent[3];const flatCoordinates=[minX,minY,minX,maxY,maxX,maxY,maxX,minY,minX,minY];return new Polygon(flatCoordinates,"XY",[flatCoordinates.length]);}const DEFAULT_MIN_ZOOM=0;class View extends BaseObject$1{constructor(options){super();this.on;this.once;this.un;options=Object.assign({},options);this.hints_=[0,0];this.animations_=[];this.updateAnimationKey_;this.projection_=createProjection(options.projection,"EPSG:3857");this.viewportSize_=[100,100];this.targetCenter_=null;this.targetResolution_;this.targetRotation_;this.nextCenter_=null;this.nextResolution_;this.nextRotation_;this.cancelAnchor_=void 0;if(options.projection){disableCoordinateWarning();}if(options.center){options.center=
fromUserCoordinate(options.center,this.projection_);}if(options.extent){options.extent=fromUserExtent(options.extent,this.projection_);}this.applyOptions_(options);}applyOptions_(options){const properties=Object.assign({},options);for(const key in ViewProperty){delete properties[key];}this.setProperties(properties,true);const resolutionConstraintInfo=createResolutionConstraint(options);this.maxResolution_=resolutionConstraintInfo.maxResolution;this.minResolution_=resolutionConstraintInfo.minResolution;this.zoomFactor_=resolutionConstraintInfo.zoomFactor;this.resolutions_=options.resolutions;this.padding_=options.padding;this.minZoom_=resolutionConstraintInfo.minZoom;const centerConstraint=createCenterConstraint(options);const resolutionConstraint=resolutionConstraintInfo.constraint;const rotationConstraint=createRotationConstraint(options);this.constraints_={center:centerConstraint,resolution:resolutionConstraint,rotation:rotationConstraint};this.setRotation(options.rotation!==void 0?
options.rotation:0);this.setCenterInternal(options.center!==void 0?options.center:null);if(options.resolution!==void 0){this.setResolution(options.resolution);}else if(options.zoom!==void 0){this.setZoom(options.zoom);}}get padding(){return this.padding_;}set padding(padding){let oldPadding=this.padding_;this.padding_=padding;const center=this.getCenterInternal();if(center){const newPadding=padding||[0,0,0,0];oldPadding=oldPadding||[0,0,0,0];const resolution=this.getResolution();const offsetX=resolution/2*(newPadding[3]-oldPadding[3]+oldPadding[1]-newPadding[1]);const offsetY=resolution/2*(newPadding[0]-oldPadding[0]+oldPadding[2]-newPadding[2]);this.setCenterInternal([center[0]+offsetX,center[1]-offsetY]);}}getUpdatedOptions_(newOptions){const options=this.getProperties();if(options.resolution!==void 0){options.resolution=this.getResolution();}else{options.zoom=this.getZoom();}options.center=this.getCenterInternal();options.rotation=this.getRotation();return Object.assign({},options,
newOptions);}animate(var_args){if(this.isDef()&&!this.getAnimating()){this.resolveConstraints(0);}const args=new Array(arguments.length);for(let i=0;i<args.length;++i){let options=arguments[i];if(options.center){options=Object.assign({},options);options.center=fromUserCoordinate(options.center,this.getProjection());}if(options.anchor){options=Object.assign({},options);options.anchor=fromUserCoordinate(options.anchor,this.getProjection());}args[i]=options;}this.animateInternal.apply(this,args);}animateInternal(var_args){let animationCount=arguments.length;let callback;if(animationCount>1&&typeof arguments[animationCount-1]==="function"){callback=arguments[animationCount-1];--animationCount;}let i=0;for(;i<animationCount&&!this.isDef();++i){const state=arguments[i];if(state.center){this.setCenterInternal(state.center);}if(state.zoom!==void 0){this.setZoom(state.zoom);}else if(state.resolution){this.setResolution(state.resolution);}if(state.rotation!==void 0){this.setRotation(state.
rotation);}}if(i===animationCount){if(callback){animationCallback(callback,true);}return;}let start=Date.now();let center=this.targetCenter_.slice();let resolution=this.targetResolution_;let rotation=this.targetRotation_;const series=[];for(;i<animationCount;++i){const options=(arguments[i]);const animation={start,complete:false,anchor:options.anchor,duration:options.duration!==void 0?options.duration:1e3,easing:options.easing||inAndOut,callback};if(options.center){animation.sourceCenter=center;animation.targetCenter=options.center.slice();center=animation.targetCenter;}if(options.zoom!==void 0){animation.sourceResolution=resolution;animation.targetResolution=this.getResolutionForZoom(options.zoom);resolution=animation.targetResolution;}else if(options.resolution){animation.sourceResolution=resolution;animation.targetResolution=options.resolution;resolution=animation.targetResolution;}if(options.rotation!==void 0){animation.sourceRotation=rotation;const delta=modulo(options.rotation-
rotation+Math.PI,2*Math.PI)-Math.PI;animation.targetRotation=rotation+delta;rotation=animation.targetRotation;}if(isNoopAnimation(animation)){animation.complete=true;}else{start+=animation.duration;}series.push(animation);}this.animations_.push(series);this.setHint(ViewHint.ANIMATING,1);this.updateAnimations_();}getAnimating(){return this.hints_[ViewHint.ANIMATING]>0;}getInteracting(){return this.hints_[ViewHint.INTERACTING]>0;}cancelAnimations(){this.setHint(ViewHint.ANIMATING,-this.hints_[ViewHint.ANIMATING]);let anchor;for(let i=0,ii=this.animations_.length;i<ii;++i){const series=this.animations_[i];if(series[0].callback){animationCallback(series[0].callback,false);}if(!anchor){for(let j=0,jj=series.length;j<jj;++j){const animation=series[j];if(!animation.complete){anchor=animation.anchor;break;}}}}this.animations_.length=0;this.cancelAnchor_=anchor;this.nextCenter_=null;this.nextResolution_=NaN;this.nextRotation_=NaN;}updateAnimations_(){if(this.updateAnimationKey_!==void 0){
cancelAnimationFrame(this.updateAnimationKey_);this.updateAnimationKey_=void 0;}if(!this.getAnimating()){return;}const now=Date.now();let more=false;for(let i=this.animations_.length-1;i>=0;--i){const series=this.animations_[i];let seriesComplete=true;for(let j=0,jj=series.length;j<jj;++j){const animation=series[j];if(animation.complete){continue;}const elapsed=now-animation.start;let fraction=animation.duration>0?elapsed/animation.duration:1;if(fraction>=1){animation.complete=true;fraction=1;}else{seriesComplete=false;}const progress=animation.easing(fraction);if(animation.sourceCenter){const x0=animation.sourceCenter[0];const y0=animation.sourceCenter[1];const x1=animation.targetCenter[0];const y1=animation.targetCenter[1];this.nextCenter_=animation.targetCenter;const x=x0+progress*(x1-x0);const y=y0+progress*(y1-y0);this.targetCenter_=[x,y];}if(animation.sourceResolution&&animation.targetResolution){const resolution=progress===1?animation.targetResolution:animation.sourceResolution+
progress*(animation.targetResolution-animation.sourceResolution);if(animation.anchor){const size=this.getViewportSize_(this.getRotation());const constrainedResolution=this.constraints_.resolution(resolution,0,size,true);this.targetCenter_=this.calculateCenterZoom(constrainedResolution,animation.anchor);}this.nextResolution_=animation.targetResolution;this.targetResolution_=resolution;this.applyTargetState_(true);}if(animation.sourceRotation!==void 0&&animation.targetRotation!==void 0){const rotation=progress===1?modulo(animation.targetRotation+Math.PI,2*Math.PI)-Math.PI:animation.sourceRotation+progress*(animation.targetRotation-animation.sourceRotation);if(animation.anchor){const constrainedRotation=this.constraints_.rotation(rotation,true);this.targetCenter_=this.calculateCenterRotate(constrainedRotation,animation.anchor);}this.nextRotation_=animation.targetRotation;this.targetRotation_=rotation;}this.applyTargetState_(true);more=true;if(!animation.complete){break;}}if(seriesComplete
){this.animations_[i]=null;this.setHint(ViewHint.ANIMATING,-1);this.nextCenter_=null;this.nextResolution_=NaN;this.nextRotation_=NaN;const callback=series[0].callback;if(callback){animationCallback(callback,true);}}}this.animations_=this.animations_.filter(Boolean);if(more&&this.updateAnimationKey_===void 0){this.updateAnimationKey_=requestAnimationFrame(this.updateAnimations_.bind(this));}}calculateCenterRotate(rotation,anchor){let center;const currentCenter=this.getCenterInternal();if(currentCenter!==void 0){center=[currentCenter[0]-anchor[0],currentCenter[1]-anchor[1]];rotate$1(center,rotation-this.getRotation());add(center,anchor);}return center;}calculateCenterZoom(resolution,anchor){let center;const currentCenter=this.getCenterInternal();const currentResolution=this.getResolution();if(currentCenter!==void 0&&currentResolution!==void 0){const x=anchor[0]-resolution*(anchor[0]-currentCenter[0])/currentResolution;const y=anchor[1]-resolution*(anchor[1]-currentCenter[1])/
currentResolution;center=[x,y];}return center;}getViewportSize_(rotation){const size=this.viewportSize_;if(rotation){const w=size[0];const h=size[1];return[Math.abs(w*Math.cos(rotation))+Math.abs(h*Math.sin(rotation)),Math.abs(w*Math.sin(rotation))+Math.abs(h*Math.cos(rotation))];}return size;}setViewportSize(size){this.viewportSize_=Array.isArray(size)?size.slice():[100,100];if(!this.getAnimating()){this.resolveConstraints(0);}}getCenter(){const center=this.getCenterInternal();if(!center){return center;}return toUserCoordinate(center,this.getProjection());}getCenterInternal(){return(this.get(ViewProperty.CENTER));}getConstraints(){return this.constraints_;}getConstrainResolution(){return this.get("constrainResolution");}getHints(hints){if(hints!==void 0){hints[0]=this.hints_[0];hints[1]=this.hints_[1];return hints;}return this.hints_.slice();}calculateExtent(size){const extent=this.calculateExtentInternal(size);return toUserExtent(extent,this.getProjection());}calculateExtentInternal(
size){size=size||this.getViewportSizeMinusPadding_();const center=(this.getCenterInternal());assert(center,"The view center is not defined");const resolution=(this.getResolution());assert(resolution!==void 0,"The view resolution is not defined");const rotation=(this.getRotation());assert(rotation!==void 0,"The view rotation is not defined");return getForViewAndSize(center,resolution,rotation,size);}getMaxResolution(){return this.maxResolution_;}getMinResolution(){return this.minResolution_;}getMaxZoom(){return(this.getZoomForResolution(this.minResolution_));}setMaxZoom(zoom){this.applyOptions_(this.getUpdatedOptions_({maxZoom:zoom}));}getMinZoom(){return(this.getZoomForResolution(this.maxResolution_));}setMinZoom(zoom){this.applyOptions_(this.getUpdatedOptions_({minZoom:zoom}));}setConstrainResolution(enabled){this.applyOptions_(this.getUpdatedOptions_({constrainResolution:enabled}));}getProjection(){return this.projection_;}getResolution(){return(this.get(ViewProperty.RESOLUTION));}
getResolutions(){return this.resolutions_;}getResolutionForExtent(extent,size){return this.getResolutionForExtentInternal(fromUserExtent(extent,this.getProjection()),size);}getResolutionForExtentInternal(extent,size){size=size||this.getViewportSizeMinusPadding_();const xResolution=getWidth(extent)/size[0];const yResolution=getHeight(extent)/size[1];return Math.max(xResolution,yResolution);}getResolutionForValueFunction(power){power=power||2;const maxResolution=this.getConstrainedResolution(this.maxResolution_);const minResolution=this.minResolution_;const max=Math.log(maxResolution/minResolution)/Math.log(power);return(function(value){const resolution=maxResolution/Math.pow(power,value*max);return resolution;});}getRotation(){return(this.get(ViewProperty.ROTATION));}getValueForResolutionFunction(power){const logPower=Math.log(power||2);const maxResolution=this.getConstrainedResolution(this.maxResolution_);const minResolution=this.minResolution_;const max=Math.log(maxResolution/
minResolution)/logPower;return(function(resolution){const value=Math.log(maxResolution/resolution)/logPower/max;return value;});}getViewportSizeMinusPadding_(rotation){let size=this.getViewportSize_(rotation);const padding=this.padding_;if(padding){size=[size[0]-padding[1]-padding[3],size[1]-padding[0]-padding[2]];}return size;}getState(){const projection=this.getProjection();const resolution=this.getResolution();const rotation=this.getRotation();let center=(this.getCenterInternal());const padding=this.padding_;if(padding){const reducedSize=this.getViewportSizeMinusPadding_();center=calculateCenterOn(center,this.getViewportSize_(),[reducedSize[0]/2+padding[3],reducedSize[1]/2+padding[0]],resolution,rotation);}return{center:center.slice(0),projection:projection!==void 0?projection:null,resolution,nextCenter:this.nextCenter_,nextResolution:this.nextResolution_,nextRotation:this.nextRotation_,rotation,zoom:this.getZoom()};}getViewStateAndExtent(){return{viewState:this.getState(),extent:
this.calculateExtent()};}getZoom(){let zoom;const resolution=this.getResolution();if(resolution!==void 0){zoom=this.getZoomForResolution(resolution);}return zoom;}getZoomForResolution(resolution){let offset=this.minZoom_||0;let max,zoomFactor;if(this.resolutions_){const nearest=linearFindNearest(this.resolutions_,resolution,1);offset=nearest;max=this.resolutions_[nearest];if(nearest==this.resolutions_.length-1){zoomFactor=2;}else{zoomFactor=max/this.resolutions_[nearest+1];}}else{max=this.maxResolution_;zoomFactor=this.zoomFactor_;}return offset+Math.log(max/resolution)/Math.log(zoomFactor);}getResolutionForZoom(zoom){if(this.resolutions_){if(this.resolutions_.length<=1){return 0;}const baseLevel=clamp(Math.floor(zoom),0,this.resolutions_.length-2);const zoomFactor=this.resolutions_[baseLevel]/this.resolutions_[baseLevel+1];return this.resolutions_[baseLevel]/Math.pow(zoomFactor,clamp(zoom-baseLevel,0,1));}return this.maxResolution_/Math.pow(this.zoomFactor_,zoom-this.minZoom_);}fit(
geometryOrExtent,options){let geometry;assert(Array.isArray(geometryOrExtent)||typeof geometryOrExtent.getSimplifiedGeometry==="function","Invalid extent or geometry provided as `geometry`");if(Array.isArray(geometryOrExtent)){assert(!isEmpty(geometryOrExtent),"Cannot fit empty extent provided as `geometry`");const extent=fromUserExtent(geometryOrExtent,this.getProjection());geometry=fromExtent(extent);}else if(geometryOrExtent.getType()==="Circle"){const extent=fromUserExtent(geometryOrExtent.getExtent(),this.getProjection());geometry=fromExtent(extent);geometry.rotate(this.getRotation(),getCenter(extent));}else{{geometry=geometryOrExtent;}}this.fitInternal(geometry,options);}rotatedExtentForGeometry(geometry){const rotation=this.getRotation();const cosAngle=Math.cos(rotation);const sinAngle=Math.sin(-rotation);const coords=geometry.getFlatCoordinates();const stride=geometry.getStride();let minRotX=Infinity;let minRotY=Infinity;let maxRotX=-Infinity;let maxRotY=-Infinity;for(let i=0,
ii=coords.length;i<ii;i+=stride){const rotX=coords[i]*cosAngle-coords[i+1]*sinAngle;const rotY=coords[i]*sinAngle+coords[i+1]*cosAngle;minRotX=Math.min(minRotX,rotX);minRotY=Math.min(minRotY,rotY);maxRotX=Math.max(maxRotX,rotX);maxRotY=Math.max(maxRotY,rotY);}return[minRotX,minRotY,maxRotX,maxRotY];}fitInternal(geometry,options){options=options||{};let size=options.size;if(!size){size=this.getViewportSizeMinusPadding_();}const padding=options.padding!==void 0?options.padding:[0,0,0,0];const nearest=options.nearest!==void 0?options.nearest:false;let minResolution;if(options.minResolution!==void 0){minResolution=options.minResolution;}else if(options.maxZoom!==void 0){minResolution=this.getResolutionForZoom(options.maxZoom);}else{minResolution=0;}const rotatedExtent=this.rotatedExtentForGeometry(geometry);let resolution=this.getResolutionForExtentInternal(rotatedExtent,[size[0]-padding[1]-padding[3],size[1]-padding[0]-padding[2]]);resolution=isNaN(resolution)?minResolution:Math.max(
resolution,minResolution);resolution=this.getConstrainedResolution(resolution,nearest?0:1);const rotation=this.getRotation();const sinAngle=Math.sin(rotation);const cosAngle=Math.cos(rotation);const centerRot=getCenter(rotatedExtent);centerRot[0]+=(padding[1]-padding[3])/2*resolution;centerRot[1]+=(padding[0]-padding[2])/2*resolution;const centerX=centerRot[0]*cosAngle-centerRot[1]*sinAngle;const centerY=centerRot[1]*cosAngle+centerRot[0]*sinAngle;const center=this.getConstrainedCenter([centerX,centerY],resolution);const callback=options.callback?options.callback:VOID;if(options.duration!==void 0){this.animateInternal({resolution,center,duration:options.duration,easing:options.easing},callback);}else{this.targetResolution_=resolution;this.targetCenter_=center;this.applyTargetState_(false,true);animationCallback(callback,true);}}centerOn(coordinate,size,position){this.centerOnInternal(fromUserCoordinate(coordinate,this.getProjection()),size,position);}centerOnInternal(coordinate,size,
position){this.setCenterInternal(calculateCenterOn(coordinate,size,position,this.getResolution(),this.getRotation()));}calculateCenterShift(center,resolution,rotation,size){let centerShift;const padding=this.padding_;if(padding&&center){const reducedSize=this.getViewportSizeMinusPadding_(-rotation);const shiftedCenter=calculateCenterOn(center,size,[reducedSize[0]/2+padding[3],reducedSize[1]/2+padding[0]],resolution,rotation);centerShift=[center[0]-shiftedCenter[0],center[1]-shiftedCenter[1]];}return centerShift;}isDef(){return!!this.getCenterInternal()&&this.getResolution()!==void 0;}adjustCenter(deltaCoordinates){const center=toUserCoordinate(this.targetCenter_,this.getProjection());this.setCenter([center[0]+deltaCoordinates[0],center[1]+deltaCoordinates[1]]);}adjustCenterInternal(deltaCoordinates){const center=this.targetCenter_;this.setCenterInternal([center[0]+deltaCoordinates[0],center[1]+deltaCoordinates[1]]);}adjustResolution(ratio,anchor){anchor=anchor&&fromUserCoordinate(
anchor,this.getProjection());this.adjustResolutionInternal(ratio,anchor);}adjustResolutionInternal(ratio,anchor){const isMoving=this.getAnimating()||this.getInteracting();const size=this.getViewportSize_(this.getRotation());const newResolution=this.constraints_.resolution(this.targetResolution_*ratio,0,size,isMoving);if(anchor){this.targetCenter_=this.calculateCenterZoom(newResolution,anchor);}this.targetResolution_*=ratio;this.applyTargetState_();}adjustZoom(delta,anchor){this.adjustResolution(Math.pow(this.zoomFactor_,-delta),anchor);}adjustRotation(delta,anchor){if(anchor){anchor=fromUserCoordinate(anchor,this.getProjection());}this.adjustRotationInternal(delta,anchor);}adjustRotationInternal(delta,anchor){const isMoving=this.getAnimating()||this.getInteracting();const newRotation=this.constraints_.rotation(this.targetRotation_+delta,isMoving);if(anchor){this.targetCenter_=this.calculateCenterRotate(newRotation,anchor);}this.targetRotation_+=delta;this.applyTargetState_();}setCenter
(center){this.setCenterInternal(center?fromUserCoordinate(center,this.getProjection()):center);}setCenterInternal(center){this.targetCenter_=center;this.applyTargetState_();}setHint(hint,delta){this.hints_[hint]+=delta;this.changed();return this.hints_[hint];}setResolution(resolution){this.targetResolution_=resolution;this.applyTargetState_();}setRotation(rotation){this.targetRotation_=rotation;this.applyTargetState_();}setZoom(zoom){this.setResolution(this.getResolutionForZoom(zoom));}applyTargetState_(doNotCancelAnims,forceMoving){const isMoving=this.getAnimating()||this.getInteracting()||forceMoving;const newRotation=this.constraints_.rotation(this.targetRotation_,isMoving);const size=this.getViewportSize_(newRotation);const newResolution=this.constraints_.resolution(this.targetResolution_,0,size,isMoving);const newCenter=this.constraints_.center(this.targetCenter_,newResolution,size,isMoving,this.calculateCenterShift(this.targetCenter_,newResolution,newRotation,size));if(this.get(
ViewProperty.ROTATION)!==newRotation){this.set(ViewProperty.ROTATION,newRotation);}if(this.get(ViewProperty.RESOLUTION)!==newResolution){this.set(ViewProperty.RESOLUTION,newResolution);this.set("zoom",this.getZoom(),true);}if(!newCenter||!this.get(ViewProperty.CENTER)||!equals(this.get(ViewProperty.CENTER),newCenter)){this.set(ViewProperty.CENTER,newCenter);}if(this.getAnimating()&&!doNotCancelAnims){this.cancelAnimations();}this.cancelAnchor_=void 0;}resolveConstraints(duration,resolutionDirection,anchor){duration=duration!==void 0?duration:200;const direction=resolutionDirection||0;const newRotation=this.constraints_.rotation(this.targetRotation_);const size=this.getViewportSize_(newRotation);const newResolution=this.constraints_.resolution(this.targetResolution_,direction,size);const newCenter=this.constraints_.center(this.targetCenter_,newResolution,size,false,this.calculateCenterShift(this.targetCenter_,newResolution,newRotation,size));if(duration===0&&!this.cancelAnchor_){this.
targetResolution_=newResolution;this.targetRotation_=newRotation;this.targetCenter_=newCenter;this.applyTargetState_();return;}anchor=anchor||(duration===0?this.cancelAnchor_:void 0);this.cancelAnchor_=void 0;if(this.getResolution()!==newResolution||this.getRotation()!==newRotation||!this.getCenterInternal()||!equals(this.getCenterInternal(),newCenter)){if(this.getAnimating()){this.cancelAnimations();}this.animateInternal({rotation:newRotation,center:newCenter,resolution:newResolution,duration,easing:easeOut,anchor});}}beginInteraction(){this.resolveConstraints(0);this.setHint(ViewHint.INTERACTING,1);}endInteraction(duration,resolutionDirection,anchor){anchor=anchor&&fromUserCoordinate(anchor,this.getProjection());this.endInteractionInternal(duration,resolutionDirection,anchor);}endInteractionInternal(duration,resolutionDirection,anchor){if(!this.getInteracting()){return;}this.setHint(ViewHint.INTERACTING,-1);this.resolveConstraints(duration,resolutionDirection,anchor);}
getConstrainedCenter(targetCenter,targetResolution){const size=this.getViewportSize_(this.getRotation());return this.constraints_.center(targetCenter,targetResolution||this.getResolution(),size);}getConstrainedZoom(targetZoom,direction){const targetRes=this.getResolutionForZoom(targetZoom);return this.getZoomForResolution(this.getConstrainedResolution(targetRes,direction));}getConstrainedResolution(targetResolution,direction){direction=direction||0;const size=this.getViewportSize_(this.getRotation());return this.constraints_.resolution(targetResolution,direction,size);}}function animationCallback(callback,returnValue){setTimeout(function(){callback(returnValue);},0);}function createCenterConstraint(options){if(options.extent!==void 0){const smooth=options.smoothExtentConstraint!==void 0?options.smoothExtentConstraint:true;return createExtent(options.extent,options.constrainOnlyCenter,smooth);}const projection=createProjection(options.projection,"EPSG:3857");if(options.multiWorld!==true
&&projection.isGlobal()){const extent=projection.getExtent().slice();extent[0]=-Infinity;extent[2]=Infinity;return createExtent(extent,false,false);}return none$1;}function createResolutionConstraint(options){let resolutionConstraint;let maxResolution;let minResolution;const defaultMaxZoom=28;const defaultZoomFactor=2;let minZoom=options.minZoom!==void 0?options.minZoom:DEFAULT_MIN_ZOOM;let maxZoom=options.maxZoom!==void 0?options.maxZoom:defaultMaxZoom;const zoomFactor=options.zoomFactor!==void 0?options.zoomFactor:defaultZoomFactor;const multiWorld=options.multiWorld!==void 0?options.multiWorld:false;const smooth=options.smoothResolutionConstraint!==void 0?options.smoothResolutionConstraint:true;const showFullExtent=options.showFullExtent!==void 0?options.showFullExtent:false;const projection=createProjection(options.projection,"EPSG:3857");const projExtent=projection.getExtent();let constrainOnlyCenter=options.constrainOnlyCenter;let extent=options.extent;if(!multiWorld&&!extent&&
projection.isGlobal()){constrainOnlyCenter=false;extent=projExtent;}if(options.resolutions!==void 0){const resolutions=options.resolutions;maxResolution=resolutions[minZoom];minResolution=resolutions[maxZoom]!==void 0?resolutions[maxZoom]:resolutions[resolutions.length-1];if(options.constrainResolution){resolutionConstraint=createSnapToResolutions(resolutions,smooth,!constrainOnlyCenter&&extent,showFullExtent);}else{resolutionConstraint=createMinMaxResolution(maxResolution,minResolution,smooth,!constrainOnlyCenter&&extent,showFullExtent);}}else{const size=!projExtent?(360*METERS_PER_UNIT$1.degrees/projection.getMetersPerUnit()):Math.max(getWidth(projExtent),getHeight(projExtent));const defaultMaxResolution=size/DEFAULT_TILE_SIZE/Math.pow(defaultZoomFactor,DEFAULT_MIN_ZOOM);const defaultMinResolution=defaultMaxResolution/Math.pow(defaultZoomFactor,defaultMaxZoom-DEFAULT_MIN_ZOOM);maxResolution=options.maxResolution;if(maxResolution!==void 0){minZoom=0;}else{maxResolution=
defaultMaxResolution/Math.pow(zoomFactor,minZoom);}minResolution=options.minResolution;if(minResolution===void 0){if(options.maxZoom!==void 0){if(options.maxResolution!==void 0){minResolution=maxResolution/Math.pow(zoomFactor,maxZoom);}else{minResolution=defaultMaxResolution/Math.pow(zoomFactor,maxZoom);}}else{minResolution=defaultMinResolution;}}maxZoom=minZoom+Math.floor(Math.log(maxResolution/minResolution)/Math.log(zoomFactor));minResolution=maxResolution/Math.pow(zoomFactor,maxZoom-minZoom);if(options.constrainResolution){resolutionConstraint=createSnapToPower(zoomFactor,maxResolution,minResolution,smooth,!constrainOnlyCenter&&extent,showFullExtent);}else{resolutionConstraint=createMinMaxResolution(maxResolution,minResolution,smooth,!constrainOnlyCenter&&extent,showFullExtent);}}return{constraint:resolutionConstraint,maxResolution,minResolution,minZoom,zoomFactor};}function createRotationConstraint(options){const enableRotation=options.enableRotation!==void 0?options.
enableRotation:true;if(enableRotation){const constrainRotation=options.constrainRotation;if(constrainRotation===void 0||constrainRotation===true){return createSnapToZero();}if(constrainRotation===false){return none;}if(typeof constrainRotation==="number"){return createSnapToN(constrainRotation);}return none;}return disable;}function isNoopAnimation(animation){if(animation.sourceCenter&&animation.targetCenter){if(!equals(animation.sourceCenter,animation.targetCenter)){return false;}}if(animation.sourceResolution!==animation.targetResolution){return false;}if(animation.sourceRotation!==animation.targetRotation){return false;}return true;}function calculateCenterOn(coordinate,size,position,resolution,rotation){const cosAngle=Math.cos(-rotation);let sinAngle=Math.sin(-rotation);let rotX=coordinate[0]*cosAngle-coordinate[1]*sinAngle;let rotY=coordinate[1]*cosAngle+coordinate[0]*sinAngle;rotX+=(size[0]/2-position[0])*resolution;rotY+=(position[1]-size[1]/2)*resolution;sinAngle=-sinAngle;
const centerX=rotX*cosAngle-rotY*sinAngle;const centerY=rotY*cosAngle+rotX*sinAngle;return[centerX,centerY];}const OlView=View;class Layer extends BaseLayer$1{constructor(options){const baseOptions=Object.assign({},options);delete baseOptions.source;super(baseOptions);this.on;this.once;this.un;this.mapPrecomposeKey_=null;this.mapRenderKey_=null;this.sourceChangeKey_=null;this.renderer_=null;this.sourceReady_=false;this.rendered=false;if(options.render){this.render=options.render;}if(options.map){this.setMap(options.map);}this.addChangeListener(LayerProperty.SOURCE,this.handleSourcePropertyChange_);const source=options.source?(options.source):null;this.setSource(source);}getLayersArray(array){array=array?array:[];array.push(this);return array;}getLayerStatesArray(states){states=states?states:[];states.push(this.getLayerState());return states;}getSource(){return(this.get(LayerProperty.SOURCE)||null);}getRenderSource(){return this.getSource();}getSourceState(){const source=this.getSource(
);return!source?"undefined":source.getState();}handleSourceChange_(){this.changed();if(this.sourceReady_||this.getSource().getState()!=="ready"){return;}this.sourceReady_=true;this.dispatchEvent("sourceready");}handleSourcePropertyChange_(){if(this.sourceChangeKey_){unlistenByKey(this.sourceChangeKey_);this.sourceChangeKey_=null;}this.sourceReady_=false;const source=this.getSource();if(source){this.sourceChangeKey_=listen(source,EventType.CHANGE,this.handleSourceChange_,this);if(source.getState()==="ready"){this.sourceReady_=true;setTimeout(()=>{this.dispatchEvent("sourceready");},0);}}this.changed();}getFeatures(pixel){if(!this.renderer_){return Promise.resolve([]);}return this.renderer_.getFeatures(pixel);}getData(pixel){if(!this.renderer_||!this.rendered){return null;}return this.renderer_.getData(pixel);}isVisible(view){let frameState;const map=this.getMapInternal();if(!view&&map){view=map.getView();}if(view instanceof OlView){frameState={viewState:view.getState(),extent:view.
calculateExtent()};}else{frameState=view;}if(!frameState.layerStatesArray&&map){frameState.layerStatesArray=map.getLayerGroup().getLayerStatesArray();}let layerState;if(frameState.layerStatesArray){layerState=frameState.layerStatesArray.find((layerState2)=>layerState2.layer===this);}else{layerState=this.getLayerState();}const layerExtent=this.getExtent();return inView(layerState,frameState.viewState)&&(!layerExtent||intersects$1(layerExtent,frameState.extent));}getAttributions(view){if(!this.isVisible(view)){return[];}let getAttributions;const source=this.getSource();if(source){getAttributions=source.getAttributions();}if(!getAttributions){return[];}const frameState=view instanceof OlView?view.getViewStateAndExtent():view;let attributions=getAttributions(frameState);if(!Array.isArray(attributions)){attributions=[attributions];}return attributions;}render(frameState,target){const layerRenderer=this.getRenderer();if(layerRenderer.prepareFrame(frameState)){this.rendered=true;return layerRenderer
.renderFrame(frameState,target);}return null;}unrender(){this.rendered=false;}setMapInternal(map){if(!map){this.unrender();}this.set(LayerProperty.MAP,map);}getMapInternal(){return this.get(LayerProperty.MAP);}setMap(map){if(this.mapPrecomposeKey_){unlistenByKey(this.mapPrecomposeKey_);this.mapPrecomposeKey_=null;}if(!map){this.changed();}if(this.mapRenderKey_){unlistenByKey(this.mapRenderKey_);this.mapRenderKey_=null;}if(map){this.mapPrecomposeKey_=listen(map,RenderEventType.PRECOMPOSE,function(evt){const renderEvent=(evt);const layerStatesArray=renderEvent.frameState.layerStatesArray;const layerState=this.getLayerState(false);assert(!layerStatesArray.some(function(arrayLayerState){return arrayLayerState.layer===layerState.layer;}),"A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both.");layerStatesArray.push(layerState);},this);this.mapRenderKey_=listen(this,EventType.CHANGE,map.render,map);this.changed();}}setSource(source){this.set(
LayerProperty.SOURCE,source);}getRenderer(){if(!this.renderer_){this.renderer_=this.createRenderer();}return this.renderer_;}hasRenderer(){return!!this.renderer_;}createRenderer(){return null;}disposeInternal(){if(this.renderer_){this.renderer_.dispose();delete this.renderer_;}this.setSource(null);super.disposeInternal();}}function inView(layerState,viewState){if(!layerState.visible){return false;}const resolution=viewState.resolution;if(resolution<layerState.minResolution||resolution>=layerState.maxResolution){return false;}const zoom=viewState.zoom;return zoom>layerState.minZoom&&zoom<=layerState.maxZoom;}const Layer$1=Layer;class MapRenderer extends Disposable$1{constructor(map){super();this.map_=map;}dispatchRenderEvent(type,frameState){abstract();}calculateMatrices2D(frameState){const viewState=frameState.viewState;const coordinateToPixelTransform=frameState.coordinateToPixelTransform;const pixelToCoordinateTransform=frameState.pixelToCoordinateTransform;compose(
coordinateToPixelTransform,frameState.size[0]/2,frameState.size[1]/2,1/viewState.resolution,-1/viewState.resolution,-viewState.rotation,-viewState.center[0],-viewState.center[1]);makeInverse(pixelToCoordinateTransform,coordinateToPixelTransform);}forEachFeatureAtCoordinate(coordinate,frameState,hitTolerance,checkWrapped,callback,thisArg,layerFilter,thisArg2){let result;const viewState=frameState.viewState;function forEachFeatureAtCoordinate(managed,feature,layer,geometry){return callback.call(thisArg,feature,managed?layer:null,geometry);}const projection=viewState.projection;const translatedCoordinate=wrapX$1(coordinate.slice(),projection);const offsets=[[0,0]];if(projection.canWrapX()&&checkWrapped){const projectionExtent=projection.getExtent();const worldWidth=getWidth(projectionExtent);offsets.push([-worldWidth,0],[worldWidth,0]);}const layerStates=frameState.layerStatesArray;const numLayers=layerStates.length;const matches=([]);const tmpCoord=[];for(let i=0;i<offsets.length;i++){
for(let j=numLayers-1;j>=0;--j){const layerState=layerStates[j];const layer=layerState.layer;if(layer.hasRenderer()&&inView(layerState,viewState)&&layerFilter.call(thisArg2,layer)){const layerRenderer=layer.getRenderer();const source=layer.getSource();if(layerRenderer&&source){const coordinates2=source.getWrapX()?translatedCoordinate:coordinate;const callback2=forEachFeatureAtCoordinate.bind(null,layerState.managed);tmpCoord[0]=coordinates2[0]+offsets[i][0];tmpCoord[1]=coordinates2[1]+offsets[i][1];result=layerRenderer.forEachFeatureAtCoordinate(tmpCoord,frameState,hitTolerance,callback2,matches);}if(result){return result;}}}}if(matches.length===0){return void 0;}const order=1/matches.length;matches.forEach((m,i)=>m.distanceSq+=i*order);matches.sort((a,b)=>a.distanceSq-b.distanceSq);matches.some((m)=>{return result=m.callback(m.feature,m.layer,m.geometry);});return result;}hasFeatureAtCoordinate(coordinate,frameState,hitTolerance,checkWrapped,layerFilter,thisArg){const hasFeature=this.
forEachFeatureAtCoordinate(coordinate,frameState,hitTolerance,checkWrapped,TRUE,this,layerFilter,thisArg);return hasFeature!==void 0;}getMap(){return this.map_;}renderFrame(frameState){abstract();}flushDeclutterItems(frameState){}scheduleExpireIconCache(frameState){if(shared.canExpireCache()){frameState.postRenderFunctions.push(expireIconCache);}}}function expireIconCache(map,frameState){shared.expire();}const MapRenderer$1=MapRenderer;class RenderEvent extends Event{constructor(type,inversePixelTransform,frameState,context){super(type);this.inversePixelTransform=inversePixelTransform;this.frameState=frameState;this.context=context;}}const RenderEvent$1=RenderEvent;const CLASS_HIDDEN="ol-hidden";const CLASS_SELECTABLE="ol-selectable";const CLASS_UNSELECTABLE="ol-unselectable";const CLASS_CONTROL="ol-control";const CLASS_COLLAPSED="ol-collapsed";const fontRegEx=new RegExp(["^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)","(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)",
"(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)","(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?","(?:small|large)|medium|smaller|larger|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))","(?:\\s*\\/\\s*(normal|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])?))",`?\\s*([-,\\"\\'\\sa-z]+?)\\s*$`].join(""),"i");const fontRegExMatchIndex=["style","variant","weight","size","lineHeight","family"];const getFontParameters=function(fontSpec){const match=fontSpec.match(fontRegEx);if(!match){return null;}const style=({lineHeight:"normal",size:"1.2em",style:"normal",weight:"normal",variant:"normal"});for(let i=0,ii=fontRegExMatchIndex.length;i<ii;++i){const value=match[i+1];if(value!==void 0){style[fontRegExMatchIndex[i]]=value;}}style.families=style.family.split(/,\s?/);return style;};function createCanvasContext2D(width,height,canvasPool2,settings){let canvas;if(canvasPool2&&canvasPool2.length){canvas=canvasPool2.shift();}else if(WORKER_OFFSCREEN_CANVAS){canvas=new OffscreenCanvas(width||300,height||300);
}else{canvas=document.createElement("canvas");}if(width){canvas.width=width;}if(height){canvas.height=height;}return(canvas.getContext("2d",settings));}function releaseCanvas(context){const canvas=context.canvas;canvas.width=1;canvas.height=1;context.clearRect(0,0,1,1);}function outerWidth(element){let width=element.offsetWidth;const style=getComputedStyle(element);width+=parseInt(style.marginLeft,10)+parseInt(style.marginRight,10);return width;}function outerHeight(element){let height=element.offsetHeight;const style=getComputedStyle(element);height+=parseInt(style.marginTop,10)+parseInt(style.marginBottom,10);return height;}function replaceNode(newNode,oldNode){const parent=oldNode.parentNode;if(parent){parent.replaceChild(newNode,oldNode);}}function removeNode(node){return node&&node.parentNode?node.parentNode.removeChild(node):null;}function removeChildren(node){while(node.lastChild){node.removeChild(node.lastChild);}}function replaceChildren(node,children){const oldChildren=node.
childNodes;for(let i=0;true;++i){const oldChild=oldChildren[i];const newChild=children[i];if(!oldChild&&!newChild){break;}if(oldChild===newChild){continue;}if(!oldChild){node.appendChild(newChild);continue;}if(!newChild){node.removeChild(oldChild);--i;continue;}node.insertBefore(newChild,oldChild);}}const defaultFont="10px sans-serif";const defaultFillStyle="#000";const defaultLineCap="round";const defaultLineDash=[];const defaultLineDashOffset=0;const defaultLineJoin="round";const defaultMiterLimit=10;const defaultStrokeStyle="#000";const defaultTextAlign="center";const defaultTextBaseline="middle";const defaultPadding=[0,0,0,0];const defaultLineWidth=1;const checkedFonts=new BaseObject$1();let measureContext=null;let measureFont;const textHeights={};const registerFont=function(){const retries=100;const size="32px ";const referenceFonts=["monospace","serif"];const len=referenceFonts.length;const text="wmytzilWMYTZIL@#/&?$%10";let interval,referenceWidth;function isAvailable(
fontStyle,fontWeight,fontFamily){let available=true;for(let i=0;i<len;++i){const referenceFont=referenceFonts[i];referenceWidth=measureTextWidth(fontStyle+" "+fontWeight+" "+size+referenceFont,text);if(fontFamily!=referenceFont){const width=measureTextWidth(fontStyle+" "+fontWeight+" "+size+fontFamily+","+referenceFont,text);available=available&&width!=referenceWidth;}}if(available){return true;}return false;}function check(){let done=true;const fonts=checkedFonts.getKeys();for(let i=0,ii=fonts.length;i<ii;++i){const font=fonts[i];if(checkedFonts.get(font)<retries){if(isAvailable.apply(this,font.split("\n"))){clear(textHeights);measureContext=null;measureFont=void 0;checkedFonts.set(font,retries);}else{checkedFonts.set(font,checkedFonts.get(font)+1,true);done=false;}}}if(done){clearInterval(interval);interval=void 0;}}return function(fontSpec){const font=getFontParameters(fontSpec);if(!font){return;}const families=font.families;for(let i=0,ii=families.length;i<ii;++i){const family=
families[i];const key=font.style+"\n"+font.weight+"\n"+family;if(checkedFonts.get(key)===void 0){checkedFonts.set(key,retries,true);if(!isAvailable(font.style,font.weight,family)){checkedFonts.set(key,0,true);if(interval===void 0){interval=setInterval(check,32);}}}}};}();const measureTextHeight=function(){let measureElement;return function(fontSpec){let height=textHeights[fontSpec];if(height==void 0){if(WORKER_OFFSCREEN_CANVAS){const font=getFontParameters(fontSpec);const metrics=measureText(fontSpec,"Žg");const lineHeight=isNaN(Number(font.lineHeight))?1.2:Number(font.lineHeight);height=lineHeight*(metrics.actualBoundingBoxAscent+metrics.actualBoundingBoxDescent);}else{if(!measureElement){measureElement=document.createElement("div");measureElement.innerHTML="M";measureElement.style.minHeight="0";measureElement.style.maxHeight="none";measureElement.style.height="auto";measureElement.style.padding="0";measureElement.style.border="none";measureElement.style.position="absolute";
measureElement.style.display="block";measureElement.style.left="-99999px";}measureElement.style.font=fontSpec;document.body.appendChild(measureElement);height=measureElement.offsetHeight;document.body.removeChild(measureElement);}textHeights[fontSpec]=height;}return height;};}();function measureText(font,text){if(!measureContext){measureContext=createCanvasContext2D(1,1);}if(font!=measureFont){measureContext.font=font;measureFont=measureContext.font;}return measureContext.measureText(text);}function measureTextWidth(font,text){return measureText(font,text).width;}function measureAndCacheTextWidth(font,text,cache2){if(text in cache2){return cache2[text];}const width=text.split("\n").reduce((prev,curr)=>Math.max(prev,measureTextWidth(font,curr)),0);cache2[text]=width;return width;}function getTextDimensions(baseStyle,chunks){const widths=[];const heights=[];const lineWidths=[];let width=0;let lineWidth=0;let height=0;let lineHeight=0;for(let i=0,ii=chunks.length;i<=ii;i+=2){const text=
chunks[i];if(text==="\n"||i===ii){width=Math.max(width,lineWidth);lineWidths.push(lineWidth);lineWidth=0;height+=lineHeight;continue;}const font=chunks[i+1]||baseStyle.font;const currentWidth=measureTextWidth(font,text);widths.push(currentWidth);lineWidth+=currentWidth;const currentHeight=measureTextHeight(font);heights.push(currentHeight);lineHeight=Math.max(lineHeight,currentHeight);}return{width,height,widths,heights,lineWidths};}function drawImageOrLabel(context,transform2,opacity,labelOrImage,originX,originY,w,h,x,y,scale2){context.save();if(opacity!==1){context.globalAlpha*=opacity;}if(transform2){context.transform.apply(context,transform2);}if(labelOrImage.contextInstructions){context.translate(x,y);context.scale(scale2[0],scale2[1]);executeLabelInstructions(labelOrImage,context);}else if(scale2[0]<0||scale2[1]<0){context.translate(x,y);context.scale(scale2[0],scale2[1]);context.drawImage(labelOrImage,originX,originY,w,h,0,0,w,h);}else{context.drawImage(labelOrImage,originX,
originY,w,h,x,y,w*scale2[0],h*scale2[1]);}context.restore();}function executeLabelInstructions(label,context){const contextInstructions=label.contextInstructions;for(let i=0,ii=contextInstructions.length;i<ii;i+=2){if(Array.isArray(contextInstructions[i+1])){context[contextInstructions[i]].apply(context,contextInstructions[i+1]);}else{context[contextInstructions[i]]=contextInstructions[i+1];}}}class CompositeMapRenderer extends MapRenderer$1{constructor(map){super(map);this.fontChangeListenerKey_=listen(checkedFonts,ObjectEventType.PROPERTYCHANGE,map.redrawText.bind(map));this.element_=document.createElement("div");const style=this.element_.style;style.position="absolute";style.width="100%";style.height="100%";style.zIndex="0";this.element_.className=CLASS_UNSELECTABLE+" ol-layers";const container=map.getViewport();container.insertBefore(this.element_,container.firstChild||null);this.children_=[];this.renderedVisible_=true;this.declutterLayers_=[];}dispatchRenderEvent(type,frameState){
const map=this.getMap();if(map.hasListener(type)){const event=new RenderEvent$1(type,void 0,frameState);map.dispatchEvent(event);}}disposeInternal(){unlistenByKey(this.fontChangeListenerKey_);this.element_.parentNode.removeChild(this.element_);super.disposeInternal();}renderFrame(frameState){if(!frameState){if(this.renderedVisible_){this.element_.style.display="none";this.renderedVisible_=false;}return;}this.calculateMatrices2D(frameState);this.dispatchRenderEvent(RenderEventType.PRECOMPOSE,frameState);const layerStatesArray=frameState.layerStatesArray.sort(function(a,b){return a.zIndex-b.zIndex;});const viewState=frameState.viewState;this.children_.length=0;const declutterLayers=this.declutterLayers_;declutterLayers.length=0;let previousElement=null;for(let i=0,ii=layerStatesArray.length;i<ii;++i){const layerState=layerStatesArray[i];frameState.layerIndex=i;const layer=layerState.layer;const sourceState=layer.getSourceState();if(!inView(layerState,viewState)||sourceState!="ready"&&
sourceState!="undefined"){layer.unrender();continue;}const element=layer.render(frameState,previousElement);if(!element){continue;}if(element!==previousElement){this.children_.push(element);previousElement=element;}if("getDeclutter"in layer){declutterLayers.push(layer);}}this.flushDeclutterItems(frameState);replaceChildren(this.element_,this.children_);this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE,frameState);if(!this.renderedVisible_){this.element_.style.display="";this.renderedVisible_=true;}this.scheduleExpireIconCache(frameState);}flushDeclutterItems(frameState){const layers=this.declutterLayers_;for(let i=layers.length-1;i>=0;--i){layers[i].renderDeclutter(frameState);}layers.length=0;}}const CompositeMapRenderer$1=CompositeMapRenderer;class GroupEvent extends Event{constructor(type,layer){super(type);this.layer=layer;}}const Property$2={LAYERS:"layers"};class LayerGroup extends BaseLayer$1{constructor(options){options=options||{};const baseOptions=(Object.assign({},options
));delete baseOptions.layers;let layers=options.layers;super(baseOptions);this.on;this.once;this.un;this.layersListenerKeys_=[];this.listenerKeys_={};this.addChangeListener(Property$2.LAYERS,this.handleLayersChanged_);if(layers){if(Array.isArray(layers)){layers=new Collection$1(layers.slice(),{unique:true});}else{assert(typeof layers.getArray==="function","Expected `layers` to be an array or a `Collection`");}}else{layers=new Collection$1(void 0,{unique:true});}this.setLayers(layers);}handleLayerChange_(){this.changed();}handleLayersChanged_(){this.layersListenerKeys_.forEach(unlistenByKey);this.layersListenerKeys_.length=0;const layers=this.getLayers();this.layersListenerKeys_.push(listen(layers,CollectionEventType.ADD,this.handleLayersAdd_,this),listen(layers,CollectionEventType.REMOVE,this.handleLayersRemove_,this));for(const id in this.listenerKeys_){this.listenerKeys_[id].forEach(unlistenByKey);}clear(this.listenerKeys_);const layersArray=layers.getArray();for(let i=0,ii=
layersArray.length;i<ii;i++){const layer=layersArray[i];this.registerLayerListeners_(layer);this.dispatchEvent(new GroupEvent("addlayer",layer));}this.changed();}registerLayerListeners_(layer){const listenerKeys=[listen(layer,ObjectEventType.PROPERTYCHANGE,this.handleLayerChange_,this),listen(layer,EventType.CHANGE,this.handleLayerChange_,this)];if(layer instanceof LayerGroup){listenerKeys.push(listen(layer,"addlayer",this.handleLayerGroupAdd_,this),listen(layer,"removelayer",this.handleLayerGroupRemove_,this));}this.listenerKeys_[getUid(layer)]=listenerKeys;}handleLayerGroupAdd_(event){this.dispatchEvent(new GroupEvent("addlayer",event.layer));}handleLayerGroupRemove_(event){this.dispatchEvent(new GroupEvent("removelayer",event.layer));}handleLayersAdd_(collectionEvent){const layer=collectionEvent.element;this.registerLayerListeners_(layer);this.dispatchEvent(new GroupEvent("addlayer",layer));this.changed();}handleLayersRemove_(collectionEvent){const layer=collectionEvent.element;
const key=getUid(layer);this.listenerKeys_[key].forEach(unlistenByKey);delete this.listenerKeys_[key];this.dispatchEvent(new GroupEvent("removelayer",layer));this.changed();}getLayers(){return(this.get(Property$2.LAYERS));}setLayers(layers){const collection=this.getLayers();if(collection){const currentLayers=collection.getArray();for(let i=0,ii=currentLayers.length;i<ii;++i){this.dispatchEvent(new GroupEvent("removelayer",currentLayers[i]));}}this.set(Property$2.LAYERS,layers);}getLayersArray(array){array=array!==void 0?array:[];this.getLayers().forEach(function(layer){layer.getLayersArray(array);});return array;}getLayerStatesArray(dest){const states=dest!==void 0?dest:[];const pos=states.length;this.getLayers().forEach(function(layer){layer.getLayerStatesArray(states);});const ownLayerState=this.getLayerState();let defaultZIndex=ownLayerState.zIndex;if(!dest&&ownLayerState.zIndex===void 0){defaultZIndex=0;}for(let i=pos,ii=states.length;i<ii;i++){const layerState=states[i];layerState
.opacity*=ownLayerState.opacity;layerState.visible=layerState.visible&&ownLayerState.visible;layerState.maxResolution=Math.min(layerState.maxResolution,ownLayerState.maxResolution);layerState.minResolution=Math.max(layerState.minResolution,ownLayerState.minResolution);layerState.minZoom=Math.max(layerState.minZoom,ownLayerState.minZoom);layerState.maxZoom=Math.min(layerState.maxZoom,ownLayerState.maxZoom);if(ownLayerState.extent!==void 0){if(layerState.extent!==void 0){layerState.extent=getIntersection(layerState.extent,ownLayerState.extent);}else{layerState.extent=ownLayerState.extent;}}if(layerState.zIndex===void 0){layerState.zIndex=defaultZIndex;}}return states;}getSourceState(){return"ready";}}const LayerGroup$1=LayerGroup;class MapEvent extends Event{constructor(type,map,frameState){super(type);this.map=map;this.frameState=frameState!==void 0?frameState:null;}}const MapEvent$1=MapEvent;class MapBrowserEvent extends MapEvent$1{constructor(type,map,originalEvent,dragging,frameState
,activePointers){super(type,map,frameState);this.originalEvent=originalEvent;this.pixel_=null;this.coordinate_=null;this.dragging=dragging!==void 0?dragging:false;this.activePointers=activePointers;}get pixel(){if(!this.pixel_){this.pixel_=this.map.getEventPixel(this.originalEvent);}return this.pixel_;}set pixel(pixel){this.pixel_=pixel;}get coordinate(){if(!this.coordinate_){this.coordinate_=this.map.getCoordinateFromPixel(this.pixel);}return this.coordinate_;}set coordinate(coordinate){this.coordinate_=coordinate;}preventDefault(){super.preventDefault();if("preventDefault"in this.originalEvent){this.originalEvent.preventDefault();}}stopPropagation(){super.stopPropagation();if("stopPropagation"in this.originalEvent){this.originalEvent.stopPropagation();}}}const MapBrowserEvent$1=MapBrowserEvent;const MapBrowserEventType={SINGLECLICK:"singleclick",CLICK:EventType.CLICK,DBLCLICK:EventType.DBLCLICK,POINTERDRAG:"pointerdrag",POINTERMOVE:"pointermove",POINTERDOWN:"pointerdown",POINTERUP:
"pointerup",POINTEROVER:"pointerover",POINTEROUT:"pointerout",POINTERENTER:"pointerenter",POINTERLEAVE:"pointerleave",POINTERCANCEL:"pointercancel"};const PointerEventType={POINTERMOVE:"pointermove",POINTERDOWN:"pointerdown",POINTERUP:"pointerup",POINTEROVER:"pointerover",POINTEROUT:"pointerout",POINTERENTER:"pointerenter",POINTERLEAVE:"pointerleave",POINTERCANCEL:"pointercancel"};class MapBrowserEventHandler extends EventTarget{constructor(map,moveTolerance){super(map);this.map_=map;this.clickTimeoutId_;this.emulateClicks_=false;this.dragging_=false;this.dragListenerKeys_=[];this.moveTolerance_=moveTolerance===void 0?1:moveTolerance;this.down_=null;const element=this.map_.getViewport();this.activePointers_=[];this.trackedTouches_={};this.element_=element;this.pointerdownListenerKey_=listen(element,PointerEventType.POINTERDOWN,this.handlePointerDown_,this);this.originalPointerMoveEvent_;this.relayedListenerKey_=listen(element,PointerEventType.POINTERMOVE,this.relayMoveEvent_,this);this
.boundHandleTouchMove_=this.handleTouchMove_.bind(this);this.element_.addEventListener(EventType.TOUCHMOVE,this.boundHandleTouchMove_,PASSIVE_EVENT_LISTENERS?{passive:false}:false);}emulateClick_(pointerEvent){let newEvent=new MapBrowserEvent$1(MapBrowserEventType.CLICK,this.map_,pointerEvent);this.dispatchEvent(newEvent);if(this.clickTimeoutId_!==void 0){clearTimeout(this.clickTimeoutId_);this.clickTimeoutId_=void 0;newEvent=new MapBrowserEvent$1(MapBrowserEventType.DBLCLICK,this.map_,pointerEvent);this.dispatchEvent(newEvent);}else{this.clickTimeoutId_=setTimeout(()=>{this.clickTimeoutId_=void 0;const newEvent2=new MapBrowserEvent$1(MapBrowserEventType.SINGLECLICK,this.map_,pointerEvent);this.dispatchEvent(newEvent2);},250);}}updateActivePointers_(pointerEvent){const event=pointerEvent;const id=event.pointerId;if(event.type==MapBrowserEventType.POINTERUP||event.type==MapBrowserEventType.POINTERCANCEL){delete this.trackedTouches_[id];for(const pointerId in this.trackedTouches_){if(
this.trackedTouches_[pointerId].target!==event.target){delete this.trackedTouches_[pointerId];break;}}}else if(event.type==MapBrowserEventType.POINTERDOWN||event.type==MapBrowserEventType.POINTERMOVE){this.trackedTouches_[id]=event;}this.activePointers_=Object.values(this.trackedTouches_);}handlePointerUp_(pointerEvent){this.updateActivePointers_(pointerEvent);const newEvent=new MapBrowserEvent$1(MapBrowserEventType.POINTERUP,this.map_,pointerEvent,void 0,void 0,this.activePointers_);this.dispatchEvent(newEvent);if(this.emulateClicks_&&!newEvent.defaultPrevented&&!this.dragging_&&this.isMouseActionButton_(pointerEvent)){this.emulateClick_(this.down_);}if(this.activePointers_.length===0){this.dragListenerKeys_.forEach(unlistenByKey);this.dragListenerKeys_.length=0;this.dragging_=false;this.down_=null;}}isMouseActionButton_(pointerEvent){return pointerEvent.button===0;}handlePointerDown_(pointerEvent){this.emulateClicks_=this.activePointers_.length===0;this.updateActivePointers_(
pointerEvent);const newEvent=new MapBrowserEvent$1(MapBrowserEventType.POINTERDOWN,this.map_,pointerEvent,void 0,void 0,this.activePointers_);this.dispatchEvent(newEvent);this.down_=new PointerEvent(pointerEvent.type,pointerEvent);Object.defineProperty(this.down_,"target",{writable:false,value:pointerEvent.target});if(this.dragListenerKeys_.length===0){const doc=this.map_.getOwnerDocument();this.dragListenerKeys_.push(listen(doc,MapBrowserEventType.POINTERMOVE,this.handlePointerMove_,this),listen(doc,MapBrowserEventType.POINTERUP,this.handlePointerUp_,this),listen(this.element_,MapBrowserEventType.POINTERCANCEL,this.handlePointerUp_,this));if(this.element_.getRootNode&&this.element_.getRootNode()!==doc){this.dragListenerKeys_.push(listen(this.element_.getRootNode(),MapBrowserEventType.POINTERUP,this.handlePointerUp_,this));}}}handlePointerMove_(pointerEvent){if(this.isMoving_(pointerEvent)){this.updateActivePointers_(pointerEvent);this.dragging_=true;const newEvent=new MapBrowserEvent$1
(MapBrowserEventType.POINTERDRAG,this.map_,pointerEvent,this.dragging_,void 0,this.activePointers_);this.dispatchEvent(newEvent);}}relayMoveEvent_(pointerEvent){this.originalPointerMoveEvent_=pointerEvent;const dragging=!!(this.down_&&this.isMoving_(pointerEvent));this.dispatchEvent(new MapBrowserEvent$1(MapBrowserEventType.POINTERMOVE,this.map_,pointerEvent,dragging));}handleTouchMove_(event){const originalEvent=this.originalPointerMoveEvent_;if((!originalEvent||originalEvent.defaultPrevented)&&(typeof event.cancelable!=="boolean"||event.cancelable===true)){event.preventDefault();}}isMoving_(pointerEvent){return this.dragging_||Math.abs(pointerEvent.clientX-this.down_.clientX)>this.moveTolerance_||Math.abs(pointerEvent.clientY-this.down_.clientY)>this.moveTolerance_;}disposeInternal(){if(this.relayedListenerKey_){unlistenByKey(this.relayedListenerKey_);this.relayedListenerKey_=null;}this.element_.removeEventListener(EventType.TOUCHMOVE,this.boundHandleTouchMove_);if(this.
pointerdownListenerKey_){unlistenByKey(this.pointerdownListenerKey_);this.pointerdownListenerKey_=null;}this.dragListenerKeys_.forEach(unlistenByKey);this.dragListenerKeys_.length=0;this.element_=null;super.disposeInternal();}}const MapBrowserEventHandler$1=MapBrowserEventHandler;const MapEventType={POSTRENDER:"postrender",MOVESTART:"movestart",MOVEEND:"moveend",LOADSTART:"loadstart",LOADEND:"loadend"};const MapProperty={LAYERGROUP:"layergroup",SIZE:"size",TARGET:"target",VIEW:"view"};const DROP=Infinity;class PriorityQueue{constructor(priorityFunction,keyFunction){this.priorityFunction_=priorityFunction;this.keyFunction_=keyFunction;this.elements_=[];this.priorities_=[];this.queuedElements_={};}clear(){this.elements_.length=0;this.priorities_.length=0;clear(this.queuedElements_);}dequeue(){const elements=this.elements_;const priorities=this.priorities_;const element=elements[0];if(elements.length==1){elements.length=0;priorities.length=0;}else{elements[0]=elements.pop();priorities[0]=
priorities.pop();this.siftUp_(0);}const elementKey=this.keyFunction_(element);delete this.queuedElements_[elementKey];return element;}enqueue(element){assert(!(this.keyFunction_(element)in this.queuedElements_),"Tried to enqueue an `element` that was already added to the queue");const priority=this.priorityFunction_(element);if(priority!=DROP){this.elements_.push(element);this.priorities_.push(priority);this.queuedElements_[this.keyFunction_(element)]=true;this.siftDown_(0,this.elements_.length-1);return true;}return false;}getCount(){return this.elements_.length;}getLeftChildIndex_(index){return index*2+1;}getRightChildIndex_(index){return index*2+2;}getParentIndex_(index){return index-1>>1;}heapify_(){let i;for(i=(this.elements_.length>>1)-1;i>=0;i--){this.siftUp_(i);}}isEmpty(){return this.elements_.length===0;}isKeyQueued(key){return key in this.queuedElements_;}isQueued(element){return this.isKeyQueued(this.keyFunction_(element));}siftUp_(index){const elements=this.elements_;const
priorities=this.priorities_;const count=elements.length;const element=elements[index];const priority=priorities[index];const startIndex=index;while(index<count>>1){const lIndex=this.getLeftChildIndex_(index);const rIndex=this.getRightChildIndex_(index);const smallerChildIndex=rIndex<count&&priorities[rIndex]<priorities[lIndex]?rIndex:lIndex;elements[index]=elements[smallerChildIndex];priorities[index]=priorities[smallerChildIndex];index=smallerChildIndex;}elements[index]=element;priorities[index]=priority;this.siftDown_(startIndex,index);}siftDown_(startIndex,index){const elements=this.elements_;const priorities=this.priorities_;const element=elements[index];const priority=priorities[index];while(index>startIndex){const parentIndex=this.getParentIndex_(index);if(priorities[parentIndex]>priority){elements[index]=elements[parentIndex];priorities[index]=priorities[parentIndex];index=parentIndex;}else{break;}}elements[index]=element;priorities[index]=priority;}reprioritize(){const
priorityFunction=this.priorityFunction_;const elements=this.elements_;const priorities=this.priorities_;let index=0;const n=elements.length;let element,i,priority;for(i=0;i<n;++i){element=elements[i];priority=priorityFunction(element);if(priority==DROP){delete this.queuedElements_[this.keyFunction_(element)];}else{priorities[index]=priority;elements[index++]=element;}}elements.length=index;priorities.length=index;this.heapify_();}}const PriorityQueue$1=PriorityQueue;const TileState={IDLE:0,LOADING:1,LOADED:2,ERROR:3,EMPTY:4};class TileQueue extends PriorityQueue$1{constructor(tilePriorityFunction,tileChangeCallback){super(function(element){return tilePriorityFunction.apply(null,element);},function(element){return(element[0].getKey());});this.boundHandleTileChange_=this.handleTileChange.bind(this);this.tileChangeCallback_=tileChangeCallback;this.tilesLoading_=0;this.tilesLoadingKeys_={};}enqueue(element){const added=super.enqueue(element);if(added){const tile=element[0];tile.
addEventListener(EventType.CHANGE,this.boundHandleTileChange_);}return added;}getTilesLoading(){return this.tilesLoading_;}handleTileChange(event){const tile=(event.target);const state=tile.getState();if(state===TileState.LOADED||state===TileState.ERROR||state===TileState.EMPTY){if(state!==TileState.ERROR){tile.removeEventListener(EventType.CHANGE,this.boundHandleTileChange_);}const tileKey=tile.getKey();if(tileKey in this.tilesLoadingKeys_){delete this.tilesLoadingKeys_[tileKey];--this.tilesLoading_;}this.tileChangeCallback_();}}loadMoreTiles(maxTotalLoading,maxNewLoads){let newLoads=0;let state,tile,tileKey;while(this.tilesLoading_<maxTotalLoading&&newLoads<maxNewLoads&&this.getCount()>0){tile=this.dequeue()[0];tileKey=tile.getKey();state=tile.getState();if(state===TileState.IDLE&&!(tileKey in this.tilesLoadingKeys_)){this.tilesLoadingKeys_[tileKey]=true;++this.tilesLoading_;++newLoads;tile.load();}}}}const TileQueue$1=TileQueue;function getTilePriority(frameState,tile,tileSourceKey,
tileCenter,tileResolution){if(!frameState||!(tileSourceKey in frameState.wantedTiles)){return DROP;}if(!frameState.wantedTiles[tileSourceKey][tile.getKey()]){return DROP;}const center=frameState.viewState.center;const deltaX=tileCenter[0]-center[0];const deltaY=tileCenter[1]-center[1];return 65536*Math.log(tileResolution)+Math.sqrt(deltaX*deltaX+deltaY*deltaY)/tileResolution;}class Control extends BaseObject$1{constructor(options){super();const element=options.element;if(element&&!options.target&&!element.style.pointerEvents){element.style.pointerEvents="auto";}this.element=element?element:null;this.target_=null;this.map_=null;this.listenerKeys=[];if(options.render){this.render=options.render;}if(options.target){this.setTarget(options.target);}}disposeInternal(){removeNode(this.element);super.disposeInternal();}getMap(){return this.map_;}setMap(map){if(this.map_){removeNode(this.element);}for(let i=0,ii=this.listenerKeys.length;i<ii;++i){unlistenByKey(this.listenerKeys[i]);}this.
listenerKeys.length=0;this.map_=map;if(map){const target=this.target_?this.target_:map.getOverlayContainerStopEvent();target.appendChild(this.element);if(this.render!==VOID){this.listenerKeys.push(listen(map,MapEventType.POSTRENDER,this.render,this));}map.render();}}render(mapEvent){}setTarget(target){this.target_=typeof target==="string"?document.getElementById(target):target;}}const Control$1=Control;class Attribution extends Control$1{constructor(options){options=options?options:{};super({element:document.createElement("div"),render:options.render,target:options.target});this.ulElement_=document.createElement("ul");this.collapsed_=options.collapsed!==void 0?options.collapsed:true;this.userCollapsed_=this.collapsed_;this.overrideCollapsible_=options.collapsible!==void 0;this.collapsible_=options.collapsible!==void 0?options.collapsible:true;if(!this.collapsible_){this.collapsed_=false;}const className=options.className!==void 0?options.className:"ol-attribution";const tipLabel=
options.tipLabel!==void 0?options.tipLabel:"Attributions";const expandClassName=options.expandClassName!==void 0?options.expandClassName:className+"-expand";const collapseLabel=options.collapseLabel!==void 0?options.collapseLabel:"›";const collapseClassName=options.collapseClassName!==void 0?options.collapseClassName:className+"-collapse";if(typeof collapseLabel==="string"){this.collapseLabel_=document.createElement("span");this.collapseLabel_.textContent=collapseLabel;this.collapseLabel_.className=collapseClassName;}else{this.collapseLabel_=collapseLabel;}const label=options.label!==void 0?options.label:"i";if(typeof label==="string"){this.label_=document.createElement("span");this.label_.textContent=label;this.label_.className=expandClassName;}else{this.label_=label;}const activeLabel=this.collapsible_&&!this.collapsed_?this.collapseLabel_:this.label_;this.toggleButton_=document.createElement("button");this.toggleButton_.setAttribute("type","button");this.toggleButton_.setAttribute
("aria-expanded",String(!this.collapsed_));this.toggleButton_.title=tipLabel;this.toggleButton_.appendChild(activeLabel);this.toggleButton_.addEventListener(EventType.CLICK,this.handleClick_.bind(this),false);const cssClasses=className+" "+CLASS_UNSELECTABLE+" "+CLASS_CONTROL+(this.collapsed_&&this.collapsible_?" "+CLASS_COLLAPSED:"")+(this.collapsible_?"":" ol-uncollapsible");const element=this.element;element.className=cssClasses;element.appendChild(this.toggleButton_);element.appendChild(this.ulElement_);this.renderedAttributions_=[];this.renderedVisible_=true;}collectSourceAttributions_(frameState){const visibleAttributions=Array.from(new Set(this.getMap().getAllLayers().flatMap((layer)=>layer.getAttributions(frameState))));const collapsible=!this.getMap().getAllLayers().some((layer)=>layer.getSource()&&layer.getSource().getAttributionsCollapsible()===false);if(!this.overrideCollapsible_){this.setCollapsible(collapsible);}return visibleAttributions;}updateElement_(frameState){if(!
frameState){if(this.renderedVisible_){this.element.style.display="none";this.renderedVisible_=false;}return;}const attributions=this.collectSourceAttributions_(frameState);const visible=attributions.length>0;if(this.renderedVisible_!=visible){this.element.style.display=visible?"":"none";this.renderedVisible_=visible;}if(equals$2(attributions,this.renderedAttributions_)){return;}removeChildren(this.ulElement_);for(let i=0,ii=attributions.length;i<ii;++i){const element=document.createElement("li");element.innerHTML=attributions[i];this.ulElement_.appendChild(element);}this.renderedAttributions_=attributions;}handleClick_(event){event.preventDefault();this.handleToggle_();this.userCollapsed_=this.collapsed_;}handleToggle_(){this.element.classList.toggle(CLASS_COLLAPSED);if(this.collapsed_){replaceNode(this.collapseLabel_,this.label_);}else{replaceNode(this.label_,this.collapseLabel_);}this.collapsed_=!this.collapsed_;this.toggleButton_.setAttribute("aria-expanded",String(!this.collapsed_)
);}getCollapsible(){return this.collapsible_;}setCollapsible(collapsible){if(this.collapsible_===collapsible){return;}this.collapsible_=collapsible;this.element.classList.toggle("ol-uncollapsible");if(this.userCollapsed_){this.handleToggle_();}}setCollapsed(collapsed){this.userCollapsed_=collapsed;if(!this.collapsible_||this.collapsed_===collapsed){return;}this.handleToggle_();}getCollapsed(){return this.collapsed_;}render(mapEvent){this.updateElement_(mapEvent.frameState);}}const Attribution$1=Attribution;class Rotate extends Control$1{constructor(options){options=options?options:{};super({element:document.createElement("div"),render:options.render,target:options.target});const className=options.className!==void 0?options.className:"ol-rotate";const label=options.label!==void 0?options.label:"⇧";const compassClassName=options.compassClassName!==void 0?options.compassClassName:"ol-compass";this.label_=null;if(typeof label==="string"){this.label_=document.createElement("span");this.
label_.className=compassClassName;this.label_.textContent=label;}else{this.label_=label;this.label_.classList.add(compassClassName);}const tipLabel=options.tipLabel?options.tipLabel:"Reset rotation";const button=document.createElement("button");button.className=className+"-reset";button.setAttribute("type","button");button.title=tipLabel;button.appendChild(this.label_);button.addEventListener(EventType.CLICK,this.handleClick_.bind(this),false);const cssClasses=className+" "+CLASS_UNSELECTABLE+" "+CLASS_CONTROL;const element=this.element;element.className=cssClasses;element.appendChild(button);this.callResetNorth_=options.resetNorth?options.resetNorth:void 0;this.duration_=options.duration!==void 0?options.duration:250;this.autoHide_=options.autoHide!==void 0?options.autoHide:true;this.rotation_=void 0;if(this.autoHide_){this.element.classList.add(CLASS_HIDDEN);}}handleClick_(event){event.preventDefault();if(this.callResetNorth_!==void 0){this.callResetNorth_();}else{this.resetNorth_();
}}resetNorth_(){const map=this.getMap();const view=map.getView();if(!view){return;}const rotation=view.getRotation();if(rotation!==void 0){if(this.duration_>0&&rotation%(2*Math.PI)!==0){view.animate({rotation:0,duration:this.duration_,easing:easeOut});}else{view.setRotation(0);}}}render(mapEvent){const frameState=mapEvent.frameState;if(!frameState){return;}const rotation=frameState.viewState.rotation;if(rotation!=this.rotation_){const transform2="rotate("+rotation+"rad)";if(this.autoHide_){const contains2=this.element.classList.contains(CLASS_HIDDEN);if(!contains2&&rotation===0){this.element.classList.add(CLASS_HIDDEN);}else if(contains2&&rotation!==0){this.element.classList.remove(CLASS_HIDDEN);}}this.label_.style.transform=transform2;}this.rotation_=rotation;}}const Rotate$1=Rotate;class Zoom extends Control$1{constructor(options){options=options?options:{};super({element:document.createElement("div"),target:options.target});const className=options.className!==void 0?options.
className:"ol-zoom";const delta=options.delta!==void 0?options.delta:1;const zoomInClassName=options.zoomInClassName!==void 0?options.zoomInClassName:className+"-in";const zoomOutClassName=options.zoomOutClassName!==void 0?options.zoomOutClassName:className+"-out";const zoomInLabel=options.zoomInLabel!==void 0?options.zoomInLabel:"+";const zoomOutLabel=options.zoomOutLabel!==void 0?options.zoomOutLabel:"–";const zoomInTipLabel=options.zoomInTipLabel!==void 0?options.zoomInTipLabel:"Zoom in";const zoomOutTipLabel=options.zoomOutTipLabel!==void 0?options.zoomOutTipLabel:"Zoom out";const inElement=document.createElement("button");inElement.className=zoomInClassName;inElement.setAttribute("type","button");inElement.title=zoomInTipLabel;inElement.appendChild(typeof zoomInLabel==="string"?document.createTextNode(zoomInLabel):zoomInLabel);inElement.addEventListener(EventType.CLICK,this.handleClick_.bind(this,delta),false);const outElement=document.createElement("button");outElement.
className=zoomOutClassName;outElement.setAttribute("type","button");outElement.title=zoomOutTipLabel;outElement.appendChild(typeof zoomOutLabel==="string"?document.createTextNode(zoomOutLabel):zoomOutLabel);outElement.addEventListener(EventType.CLICK,this.handleClick_.bind(this,-delta),false);const cssClasses=className+" "+CLASS_UNSELECTABLE+" "+CLASS_CONTROL;const element=this.element;element.className=cssClasses;element.appendChild(inElement);element.appendChild(outElement);this.duration_=options.duration!==void 0?options.duration:250;}handleClick_(delta,event){event.preventDefault();this.zoomByDelta_(delta);}zoomByDelta_(delta){const map=this.getMap();const view=map.getView();if(!view){return;}const currentZoom=view.getZoom();if(currentZoom!==void 0){const newZoom=view.getConstrainedZoom(currentZoom+delta);if(this.duration_>0){if(view.getAnimating()){view.cancelAnimations();}view.animate({zoom:newZoom,duration:this.duration_,easing:easeOut});}else{view.setZoom(newZoom);}}}}const
Zoom$1=Zoom;function defaults$1(options){options=options?options:{};const controls=new Collection$1();const zoomControl=options.zoom!==void 0?options.zoom:true;if(zoomControl){controls.push(new Zoom$1(options.zoomOptions));}const rotateControl=options.rotate!==void 0?options.rotate:true;if(rotateControl){controls.push(new Rotate$1(options.rotateOptions));}const attributionControl=options.attribution!==void 0?options.attribution:true;if(attributionControl){controls.push(new Attribution$1(options.attributionOptions));}return controls;}const InteractionProperty={ACTIVE:"active"};class Interaction extends BaseObject$1{constructor(options){super();this.on;this.once;this.un;if(options&&options.handleEvent){this.handleEvent=options.handleEvent;}this.map_=null;this.setActive(true);}getActive(){return(this.get(InteractionProperty.ACTIVE));}getMap(){return this.map_;}handleEvent(mapBrowserEvent){return true;}setActive(active){this.set(InteractionProperty.ACTIVE,active);}setMap(map){this.map_=map
;}}function pan(view,delta,duration){const currentCenter=view.getCenterInternal();if(currentCenter){const center=[currentCenter[0]+delta[0],currentCenter[1]+delta[1]];view.animateInternal({duration:duration!==void 0?duration:250,easing:linear,center:view.getConstrainedCenter(center)});}}function zoomByDelta(view,delta,anchor,duration){const currentZoom=view.getZoom();if(currentZoom===void 0){return;}const newZoom=view.getConstrainedZoom(currentZoom+delta);const newResolution=view.getResolutionForZoom(newZoom);if(view.getAnimating()){view.cancelAnimations();}view.animate({resolution:newResolution,anchor,duration:duration!==void 0?duration:250,easing:easeOut});}const Interaction$1=Interaction;class DoubleClickZoom extends Interaction$1{constructor(options){super();options=options?options:{};this.delta_=options.delta?options.delta:1;this.duration_=options.duration!==void 0?options.duration:250;}handleEvent(mapBrowserEvent){let stopEvent=false;if(mapBrowserEvent.type==MapBrowserEventType.
DBLCLICK){const browserEvent=(mapBrowserEvent.originalEvent);const map=mapBrowserEvent.map;const anchor=mapBrowserEvent.coordinate;const delta=browserEvent.shiftKey?-this.delta_:this.delta_;const view=map.getView();zoomByDelta(view,delta,anchor,this.duration_);browserEvent.preventDefault();stopEvent=true;}return!stopEvent;}}const DoubleClickZoom$1=DoubleClickZoom;class PointerInteraction extends Interaction$1{constructor(options){options=options?options:{};super(options);if(options.handleDownEvent){this.handleDownEvent=options.handleDownEvent;}if(options.handleDragEvent){this.handleDragEvent=options.handleDragEvent;}if(options.handleMoveEvent){this.handleMoveEvent=options.handleMoveEvent;}if(options.handleUpEvent){this.handleUpEvent=options.handleUpEvent;}if(options.stopDown){this.stopDown=options.stopDown;}this.handlingDownUpSequence=false;this.targetPointers=[];}getPointerCount(){return this.targetPointers.length;}handleDownEvent(mapBrowserEvent){return false;}handleDragEvent(
mapBrowserEvent){}handleEvent(mapBrowserEvent){if(!mapBrowserEvent.originalEvent){return true;}let stopEvent=false;this.updateTrackedPointers_(mapBrowserEvent);if(this.handlingDownUpSequence){if(mapBrowserEvent.type==MapBrowserEventType.POINTERDRAG){this.handleDragEvent(mapBrowserEvent);mapBrowserEvent.originalEvent.preventDefault();}else if(mapBrowserEvent.type==MapBrowserEventType.POINTERUP){const handledUp=this.handleUpEvent(mapBrowserEvent);this.handlingDownUpSequence=handledUp&&this.targetPointers.length>0;}}else{if(mapBrowserEvent.type==MapBrowserEventType.POINTERDOWN){const handled=this.handleDownEvent(mapBrowserEvent);this.handlingDownUpSequence=handled;stopEvent=this.stopDown(handled);}else if(mapBrowserEvent.type==MapBrowserEventType.POINTERMOVE){this.handleMoveEvent(mapBrowserEvent);}}return!stopEvent;}handleMoveEvent(mapBrowserEvent){}handleUpEvent(mapBrowserEvent){return false;}stopDown(handled){return handled;}updateTrackedPointers_(mapBrowserEvent){if(mapBrowserEvent.
activePointers){this.targetPointers=mapBrowserEvent.activePointers;}}}function centroid(pointerEvents){const length=pointerEvents.length;let clientX=0;let clientY=0;for(let i=0;i<length;i++){clientX+=pointerEvents[i].clientX;clientY+=pointerEvents[i].clientY;}return{clientX:clientX/length,clientY:clientY/length};}const PointerInteraction$1=PointerInteraction;function all$1(var_args){const conditions=arguments;return function(event){let pass=true;for(let i=0,ii=conditions.length;i<ii;++i){pass=pass&&conditions[i](event);if(!pass){break;}}return pass;};}const altShiftKeysOnly=function(mapBrowserEvent){const originalEvent=(mapBrowserEvent.originalEvent);return originalEvent.altKey&&!(originalEvent.metaKey||originalEvent.ctrlKey)&&originalEvent.shiftKey;};const focus=function(event){const targetElement=event.map.getTargetElement();const activeElement=event.map.getOwnerDocument().activeElement;return targetElement.contains(activeElement);};const focusWithTabindex=function(event){return event
.map.getTargetElement().hasAttribute("tabindex")?focus(event):true;};const always$1=TRUE;const click=function(mapBrowserEvent){return mapBrowserEvent.type==MapBrowserEventType.CLICK;};const mouseActionButton=function(mapBrowserEvent){const originalEvent=(mapBrowserEvent.originalEvent);return originalEvent.button==0&&!(WEBKIT&&MAC&&originalEvent.ctrlKey);};const never=FALSE;const pointerMove=function(mapBrowserEvent){return mapBrowserEvent.type=="pointermove";};const singleClick=function(mapBrowserEvent){return mapBrowserEvent.type==MapBrowserEventType.SINGLECLICK;};const noModifierKeys=function(mapBrowserEvent){const originalEvent=(mapBrowserEvent.originalEvent);return!originalEvent.altKey&&!(originalEvent.metaKey||originalEvent.ctrlKey)&&!originalEvent.shiftKey;};const platformModifierKeyOnly=function(mapBrowserEvent){const originalEvent=(mapBrowserEvent.originalEvent);return!originalEvent.altKey&&(MAC?originalEvent.metaKey:originalEvent.ctrlKey)&&!originalEvent.shiftKey;};const
platformModifierKey=function(mapBrowserEvent){const originalEvent=(mapBrowserEvent.originalEvent);return MAC?originalEvent.metaKey:originalEvent.ctrlKey;};const shiftKeyOnly=function(mapBrowserEvent){const originalEvent=(mapBrowserEvent.originalEvent);return!originalEvent.altKey&&!(originalEvent.metaKey||originalEvent.ctrlKey)&&originalEvent.shiftKey;};const targetNotEditable=function(mapBrowserEvent){const originalEvent=(mapBrowserEvent.originalEvent);const tagName=(originalEvent.target.tagName);return tagName!=="INPUT"&&tagName!=="SELECT"&&tagName!=="TEXTAREA"&&!originalEvent.target.isContentEditable;};const mouseOnly=function(mapBrowserEvent){const pointerEvent=(mapBrowserEvent.originalEvent);assert(pointerEvent!==void 0,"mapBrowserEvent must originate from a pointer event");return pointerEvent.pointerType=="mouse";};const primaryAction=function(mapBrowserEvent){const pointerEvent=(mapBrowserEvent.originalEvent);assert(pointerEvent!==void 0,
"mapBrowserEvent must originate from a pointer event");return pointerEvent.isPrimary&&pointerEvent.button===0;};class DragPan extends PointerInteraction$1{constructor(options){super({stopDown:FALSE});options=options?options:{};this.kinetic_=options.kinetic;this.lastCentroid=null;this.lastPointersCount_;this.panning_=false;const condition=options.condition?options.condition:all$1(noModifierKeys,primaryAction);this.condition_=options.onFocusOnly?all$1(focusWithTabindex,condition):condition;this.noKinetic_=false;}handleDragEvent(mapBrowserEvent){const map=mapBrowserEvent.map;if(!this.panning_){this.panning_=true;map.getView().beginInteraction();}const targetPointers=this.targetPointers;const centroid$1=map.getEventPixel(centroid(targetPointers));if(targetPointers.length==this.lastPointersCount_){if(this.kinetic_){this.kinetic_.update(centroid$1[0],centroid$1[1]);}if(this.lastCentroid){const delta=[this.lastCentroid[0]-centroid$1[0],centroid$1[1]-this.lastCentroid[1]];const map2=
mapBrowserEvent.map;const view=map2.getView();scale$2(delta,view.getResolution());rotate$1(delta,view.getRotation());view.adjustCenterInternal(delta);}}else if(this.kinetic_){this.kinetic_.begin();}this.lastCentroid=centroid$1;this.lastPointersCount_=targetPointers.length;mapBrowserEvent.originalEvent.preventDefault();}handleUpEvent(mapBrowserEvent){const map=mapBrowserEvent.map;const view=map.getView();if(this.targetPointers.length===0){if(!this.noKinetic_&&this.kinetic_&&this.kinetic_.end()){const distance=this.kinetic_.getDistance();const angle=this.kinetic_.getAngle();const center=view.getCenterInternal();const centerpx=map.getPixelFromCoordinateInternal(center);const dest=map.getCoordinateFromPixelInternal([centerpx[0]-distance*Math.cos(angle),centerpx[1]-distance*Math.sin(angle)]);view.animateInternal({center:view.getConstrainedCenter(dest),duration:500,easing:easeOut});}if(this.panning_){this.panning_=false;view.endInteraction();}return false;}if(this.kinetic_){this.kinetic_.
begin();}this.lastCentroid=null;return true;}handleDownEvent(mapBrowserEvent){if(this.targetPointers.length>0&&this.condition_(mapBrowserEvent)){const map=mapBrowserEvent.map;const view=map.getView();this.lastCentroid=null;if(view.getAnimating()){view.cancelAnimations();}if(this.kinetic_){this.kinetic_.begin();}this.noKinetic_=this.targetPointers.length>1;return true;}return false;}}const OlInteractionDragPan=DragPan;class DragRotate extends PointerInteraction$1{constructor(options){options=options?options:{};super({stopDown:FALSE});this.condition_=options.condition?options.condition:altShiftKeysOnly;this.lastAngle_=void 0;this.duration_=options.duration!==void 0?options.duration:250;}handleDragEvent(mapBrowserEvent){if(!mouseOnly(mapBrowserEvent)){return;}const map=mapBrowserEvent.map;const view=map.getView();if(view.getConstraints().rotation===disable){return;}const size=map.getSize();const offset=mapBrowserEvent.pixel;const theta=Math.atan2(size[1]/2-offset[1],offset[0]-size[0]/2);
if(this.lastAngle_!==void 0){const delta=theta-this.lastAngle_;view.adjustRotationInternal(-delta);}this.lastAngle_=theta;}handleUpEvent(mapBrowserEvent){if(!mouseOnly(mapBrowserEvent)){return true;}const map=mapBrowserEvent.map;const view=map.getView();view.endInteraction(this.duration_);return false;}handleDownEvent(mapBrowserEvent){if(!mouseOnly(mapBrowserEvent)){return false;}if(mouseActionButton(mapBrowserEvent)&&this.condition_(mapBrowserEvent)){const map=mapBrowserEvent.map;map.getView().beginInteraction();this.lastAngle_=void 0;return true;}return false;}}const DragRotate$1=DragRotate;class RenderBox extends Disposable$1{constructor(className){super();this.geometry_=null;this.element_=document.createElement("div");this.element_.style.position="absolute";this.element_.style.pointerEvents="auto";this.element_.className="ol-box "+className;this.map_=null;this.startPixel_=null;this.endPixel_=null;}disposeInternal(){this.setMap(null);}render_(){const startPixel=this.startPixel_;
const endPixel=this.endPixel_;const px="px";const style=this.element_.style;style.left=Math.min(startPixel[0],endPixel[0])+px;style.top=Math.min(startPixel[1],endPixel[1])+px;style.width=Math.abs(endPixel[0]-startPixel[0])+px;style.height=Math.abs(endPixel[1]-startPixel[1])+px;}setMap(map){if(this.map_){this.map_.getOverlayContainer().removeChild(this.element_);const style=this.element_.style;style.left="inherit";style.top="inherit";style.width="inherit";style.height="inherit";}this.map_=map;if(this.map_){this.map_.getOverlayContainer().appendChild(this.element_);}}setPixels(startPixel,endPixel){this.startPixel_=startPixel;this.endPixel_=endPixel;this.createOrUpdateGeometry();this.render_();}createOrUpdateGeometry(){const startPixel=this.startPixel_;const endPixel=this.endPixel_;const pixels=[startPixel,[startPixel[0],endPixel[1]],endPixel,[endPixel[0],startPixel[1]]];const coordinates2=pixels.map(this.map_.getCoordinateFromPixelInternal,this.map_);coordinates2[4]=coordinates2[0].slice
();if(!this.geometry_){this.geometry_=new Polygon$1([coordinates2]);}else{this.geometry_.setCoordinates([coordinates2]);}}getGeometry(){return this.geometry_;}}const RenderBox$1=RenderBox;const DragBoxEventType={BOXSTART:"boxstart",BOXDRAG:"boxdrag",BOXEND:"boxend",BOXCANCEL:"boxcancel"};class DragBoxEvent extends Event{constructor(type,coordinate,mapBrowserEvent){super(type);this.coordinate=coordinate;this.mapBrowserEvent=mapBrowserEvent;}}class DragBox extends PointerInteraction$1{constructor(options){super();this.on;this.once;this.un;options=options?options:{};this.box_=new RenderBox$1(options.className||"ol-dragbox");this.minArea_=options.minArea!==void 0?options.minArea:64;if(options.onBoxEnd){this.onBoxEnd=options.onBoxEnd;}this.startPixel_=null;this.condition_=options.condition?options.condition:mouseActionButton;this.boxEndCondition_=options.boxEndCondition?options.boxEndCondition:this.defaultBoxEndCondition;}defaultBoxEndCondition(mapBrowserEvent,startPixel,endPixel){const
width=endPixel[0]-startPixel[0];const height=endPixel[1]-startPixel[1];return width*width+height*height>=this.minArea_;}getGeometry(){return this.box_.getGeometry();}handleDragEvent(mapBrowserEvent){this.box_.setPixels(this.startPixel_,mapBrowserEvent.pixel);this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXDRAG,mapBrowserEvent.coordinate,mapBrowserEvent));}handleUpEvent(mapBrowserEvent){this.box_.setMap(null);const completeBox=this.boxEndCondition_(mapBrowserEvent,this.startPixel_,mapBrowserEvent.pixel);if(completeBox){this.onBoxEnd(mapBrowserEvent);}this.dispatchEvent(new DragBoxEvent(completeBox?DragBoxEventType.BOXEND:DragBoxEventType.BOXCANCEL,mapBrowserEvent.coordinate,mapBrowserEvent));return false;}handleDownEvent(mapBrowserEvent){if(this.condition_(mapBrowserEvent)){this.startPixel_=mapBrowserEvent.pixel;this.box_.setMap(mapBrowserEvent.map);this.box_.setPixels(this.startPixel_,this.startPixel_);this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXSTART,
mapBrowserEvent.coordinate,mapBrowserEvent));return true;}return false;}onBoxEnd(event){}}const DragBox$1=DragBox;class DragZoom extends DragBox$1{constructor(options){options=options?options:{};const condition=options.condition?options.condition:shiftKeyOnly;super({condition,className:options.className||"ol-dragzoom",minArea:options.minArea});this.duration_=options.duration!==void 0?options.duration:200;this.out_=options.out!==void 0?options.out:false;}onBoxEnd(event){const map=this.getMap();const view=(map.getView());let geometry=this.getGeometry();if(this.out_){const rotatedExtent=view.rotatedExtentForGeometry(geometry);const resolution=view.getResolutionForExtentInternal(rotatedExtent);const factor=view.getResolution()/resolution;geometry=geometry.clone();geometry.scale(factor*factor);}view.fitInternal(geometry,{duration:this.duration_,easing:easeOut});}}const DragZoom$1=DragZoom;const Key={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",DOWN:"ArrowDown"};class KeyboardPan extends
Interaction$1{constructor(options){super();options=options||{};this.defaultCondition_=function(mapBrowserEvent){return noModifierKeys(mapBrowserEvent)&&targetNotEditable(mapBrowserEvent);};this.condition_=options.condition!==void 0?options.condition:this.defaultCondition_;this.duration_=options.duration!==void 0?options.duration:100;this.pixelDelta_=options.pixelDelta!==void 0?options.pixelDelta:128;}handleEvent(mapBrowserEvent){let stopEvent=false;if(mapBrowserEvent.type==EventType.KEYDOWN){const keyEvent=(mapBrowserEvent.originalEvent);const key=keyEvent.key;if(this.condition_(mapBrowserEvent)&&(key==Key.DOWN||key==Key.LEFT||key==Key.RIGHT||key==Key.UP)){const map=mapBrowserEvent.map;const view=map.getView();const mapUnitsDelta=view.getResolution()*this.pixelDelta_;let deltaX=0,deltaY=0;if(key==Key.DOWN){deltaY=-mapUnitsDelta;}else if(key==Key.LEFT){deltaX=-mapUnitsDelta;}else if(key==Key.RIGHT){deltaX=mapUnitsDelta;}else{deltaY=mapUnitsDelta;}const delta=[deltaX,deltaY];rotate$1(
delta,view.getRotation());pan(view,delta,this.duration_);keyEvent.preventDefault();stopEvent=true;}}return!stopEvent;}}const KeyboardPan$1=KeyboardPan;class KeyboardZoom extends Interaction$1{constructor(options){super();options=options?options:{};this.condition_=options.condition?options.condition:function(mapBrowserEvent){return!platformModifierKey(mapBrowserEvent)&&targetNotEditable(mapBrowserEvent);};this.delta_=options.delta?options.delta:1;this.duration_=options.duration!==void 0?options.duration:100;}handleEvent(mapBrowserEvent){let stopEvent=false;if(mapBrowserEvent.type==EventType.KEYDOWN||mapBrowserEvent.type==EventType.KEYPRESS){const keyEvent=(mapBrowserEvent.originalEvent);const key=keyEvent.key;if(this.condition_(mapBrowserEvent)&&(key==="+"||key==="-")){const map=mapBrowserEvent.map;const delta=key==="+"?this.delta_:-this.delta_;const view=map.getView();zoomByDelta(view,delta,void 0,this.duration_);keyEvent.preventDefault();stopEvent=true;}}return!stopEvent;}}const
KeyboardZoom$1=KeyboardZoom;class Kinetic{constructor(decay,minVelocity,delay){this.decay_=decay;this.minVelocity_=minVelocity;this.delay_=delay;this.points_=[];this.angle_=0;this.initialVelocity_=0;}begin(){this.points_.length=0;this.angle_=0;this.initialVelocity_=0;}update(x,y){this.points_.push(x,y,Date.now());}end(){if(this.points_.length<6){return false;}const delay=Date.now()-this.delay_;const lastIndex=this.points_.length-3;if(this.points_[lastIndex+2]<delay){return false;}let firstIndex=lastIndex-3;while(firstIndex>0&&this.points_[firstIndex+2]>delay){firstIndex-=3;}const duration=this.points_[lastIndex+2]-this.points_[firstIndex+2];if(duration<1e3/60){return false;}const dx=this.points_[lastIndex]-this.points_[firstIndex];const dy=this.points_[lastIndex+1]-this.points_[firstIndex+1];this.angle_=Math.atan2(dy,dx);this.initialVelocity_=Math.sqrt(dx*dx+dy*dy)/duration;return this.initialVelocity_>this.minVelocity_;}getDistance(){return(this.minVelocity_-this.initialVelocity_)/
this.decay_;}getAngle(){return this.angle_;}}const Kinetic$1=Kinetic;class MouseWheelZoom extends Interaction$1{constructor(options){options=options?options:{};super(options);this.totalDelta_=0;this.lastDelta_=0;this.maxDelta_=options.maxDelta!==void 0?options.maxDelta:1;this.duration_=options.duration!==void 0?options.duration:250;this.timeout_=options.timeout!==void 0?options.timeout:80;this.useAnchor_=options.useAnchor!==void 0?options.useAnchor:true;this.constrainResolution_=options.constrainResolution!==void 0?options.constrainResolution:false;const condition=options.condition?options.condition:always$1;this.condition_=options.onFocusOnly?all$1(focusWithTabindex,condition):condition;this.lastAnchor_=null;this.startTime_=void 0;this.timeoutId_;this.mode_=void 0;this.trackpadEventGap_=400;this.trackpadTimeoutId_;this.deltaPerZoom_=300;}endInteraction_(){this.trackpadTimeoutId_=void 0;const map=this.getMap();if(!map){return;}const view=map.getView();view.endInteraction(void 0,this.
lastDelta_?this.lastDelta_>0?1:-1:0,this.lastAnchor_);}handleEvent(mapBrowserEvent){if(!this.condition_(mapBrowserEvent)){return true;}const type=mapBrowserEvent.type;if(type!==EventType.WHEEL){return true;}const map=mapBrowserEvent.map;const wheelEvent=(mapBrowserEvent.originalEvent);wheelEvent.preventDefault();if(this.useAnchor_){this.lastAnchor_=mapBrowserEvent.coordinate;}let delta;if(mapBrowserEvent.type==EventType.WHEEL){delta=wheelEvent.deltaY;if(FIREFOX&&wheelEvent.deltaMode===WheelEvent.DOM_DELTA_PIXEL){delta/=DEVICE_PIXEL_RATIO;}if(wheelEvent.deltaMode===WheelEvent.DOM_DELTA_LINE){delta*=40;}}if(delta===0){return false;}this.lastDelta_=delta;const now=Date.now();if(this.startTime_===void 0){this.startTime_=now;}if(!this.mode_||now-this.startTime_>this.trackpadEventGap_){this.mode_=Math.abs(delta)<4?"trackpad":"wheel";}const view=map.getView();if(this.mode_==="trackpad"&&!(view.getConstrainResolution()||this.constrainResolution_)){if(this.trackpadTimeoutId_){clearTimeout(this.
trackpadTimeoutId_);}else{if(view.getAnimating()){view.cancelAnimations();}view.beginInteraction();}this.trackpadTimeoutId_=setTimeout(this.endInteraction_.bind(this),this.timeout_);view.adjustZoom(-delta/this.deltaPerZoom_,this.lastAnchor_);this.startTime_=now;return false;}this.totalDelta_+=delta;const timeLeft=Math.max(this.timeout_-(now-this.startTime_),0);clearTimeout(this.timeoutId_);this.timeoutId_=setTimeout(this.handleWheelZoom_.bind(this,map),timeLeft);return false;}handleWheelZoom_(map){const view=map.getView();if(view.getAnimating()){view.cancelAnimations();}let delta=-clamp(this.totalDelta_,-this.maxDelta_*this.deltaPerZoom_,this.maxDelta_*this.deltaPerZoom_)/this.deltaPerZoom_;if(view.getConstrainResolution()||this.constrainResolution_){delta=delta?delta>0?1:-1:0;}zoomByDelta(view,delta,this.lastAnchor_,this.duration_);this.mode_=void 0;this.totalDelta_=0;this.lastAnchor_=null;this.startTime_=void 0;this.timeoutId_=void 0;}setMouseAnchor(useAnchor){this.useAnchor_=
useAnchor;if(!useAnchor){this.lastAnchor_=null;}}}const OlInteractionMouseWheelZoom=MouseWheelZoom;class PinchRotate extends PointerInteraction$1{constructor(options){options=options?options:{};const pointerOptions=(options);if(!pointerOptions.stopDown){pointerOptions.stopDown=FALSE;}super(pointerOptions);this.anchor_=null;this.lastAngle_=void 0;this.rotating_=false;this.rotationDelta_=0;this.threshold_=options.threshold!==void 0?options.threshold:0.3;this.duration_=options.duration!==void 0?options.duration:250;}handleDragEvent(mapBrowserEvent){let rotationDelta=0;const touch0=this.targetPointers[0];const touch1=this.targetPointers[1];const angle=Math.atan2(touch1.clientY-touch0.clientY,touch1.clientX-touch0.clientX);if(this.lastAngle_!==void 0){const delta=angle-this.lastAngle_;this.rotationDelta_+=delta;if(!this.rotating_&&Math.abs(this.rotationDelta_)>this.threshold_){this.rotating_=true;}rotationDelta=delta;}this.lastAngle_=angle;const map=mapBrowserEvent.map;const view=map.
getView();if(view.getConstraints().rotation===disable){return;}this.anchor_=map.getCoordinateFromPixelInternal(map.getEventPixel(centroid(this.targetPointers)));if(this.rotating_){map.render();view.adjustRotationInternal(rotationDelta,this.anchor_);}}handleUpEvent(mapBrowserEvent){if(this.targetPointers.length<2){const map=mapBrowserEvent.map;const view=map.getView();view.endInteraction(this.duration_);return false;}return true;}handleDownEvent(mapBrowserEvent){if(this.targetPointers.length>=2){const map=mapBrowserEvent.map;this.anchor_=null;this.lastAngle_=void 0;this.rotating_=false;this.rotationDelta_=0;if(!this.handlingDownUpSequence){map.getView().beginInteraction();}return true;}return false;}}const PinchRotate$1=PinchRotate;class PinchZoom extends PointerInteraction$1{constructor(options){options=options?options:{};const pointerOptions=(options);if(!pointerOptions.stopDown){pointerOptions.stopDown=FALSE;}super(pointerOptions);this.anchor_=null;this.duration_=options.duration!==
void 0?options.duration:400;this.lastDistance_=void 0;this.lastScaleDelta_=1;}handleDragEvent(mapBrowserEvent){let scaleDelta=1;const touch0=this.targetPointers[0];const touch1=this.targetPointers[1];const dx=touch0.clientX-touch1.clientX;const dy=touch0.clientY-touch1.clientY;const distance=Math.sqrt(dx*dx+dy*dy);if(this.lastDistance_!==void 0){scaleDelta=this.lastDistance_/distance;}this.lastDistance_=distance;const map=mapBrowserEvent.map;const view=map.getView();if(scaleDelta!=1){this.lastScaleDelta_=scaleDelta;}this.anchor_=map.getCoordinateFromPixelInternal(map.getEventPixel(centroid(this.targetPointers)));map.render();view.adjustResolutionInternal(scaleDelta,this.anchor_);}handleUpEvent(mapBrowserEvent){if(this.targetPointers.length<2){const map=mapBrowserEvent.map;const view=map.getView();const direction=this.lastScaleDelta_>1?1:-1;view.endInteraction(this.duration_,direction);return false;}return true;}handleDownEvent(mapBrowserEvent){if(this.targetPointers.length>=2){const map
=mapBrowserEvent.map;this.anchor_=null;this.lastDistance_=void 0;this.lastScaleDelta_=1;if(!this.handlingDownUpSequence){map.getView().beginInteraction();}return true;}return false;}}const PinchZoom$1=PinchZoom;function defaults(options){options=options?options:{};const interactions=new Collection$1();const kinetic=new Kinetic$1(-5e-3,0.05,100);const altShiftDragRotate=options.altShiftDragRotate!==void 0?options.altShiftDragRotate:true;if(altShiftDragRotate){interactions.push(new DragRotate$1());}const doubleClickZoom=options.doubleClickZoom!==void 0?options.doubleClickZoom:true;if(doubleClickZoom){interactions.push(new DoubleClickZoom$1({delta:options.zoomDelta,duration:options.zoomDuration}));}const dragPan=options.dragPan!==void 0?options.dragPan:true;if(dragPan){interactions.push(new OlInteractionDragPan({onFocusOnly:options.onFocusOnly,kinetic}));}const pinchRotate=options.pinchRotate!==void 0?options.pinchRotate:true;if(pinchRotate){interactions.push(new PinchRotate$1());}const
pinchZoom=options.pinchZoom!==void 0?options.pinchZoom:true;if(pinchZoom){interactions.push(new PinchZoom$1({duration:options.zoomDuration}));}const keyboard=options.keyboard!==void 0?options.keyboard:true;if(keyboard){interactions.push(new KeyboardPan$1());interactions.push(new KeyboardZoom$1({delta:options.zoomDelta,duration:options.zoomDuration}));}const mouseWheelZoom=options.mouseWheelZoom!==void 0?options.mouseWheelZoom:true;if(mouseWheelZoom){interactions.push(new OlInteractionMouseWheelZoom({onFocusOnly:options.onFocusOnly,duration:options.zoomDuration}));}const shiftDragZoom=options.shiftDragZoom!==void 0?options.shiftDragZoom:true;if(shiftDragZoom){interactions.push(new DragZoom$1({duration:options.zoomDuration}));}return interactions;}function hasArea(size){return size[0]>0&&size[1]>0;}function scale(size,ratio,dest){if(dest===void 0){dest=[0,0];}dest[0]=size[0]*ratio+0.5|0;dest[1]=size[1]*ratio+0.5|0;return dest;}function toSize(size,dest){if(Array.isArray(size)){return size
;}if(dest===void 0){dest=[size,size];}else{dest[0]=size;dest[1]=size;}return dest;}function removeLayerMapProperty(layer){if(layer instanceof Layer$1){layer.setMapInternal(null);return;}if(layer instanceof LayerGroup$1){layer.getLayers().forEach(removeLayerMapProperty);}}function setLayerMapProperty(layer,map){if(layer instanceof Layer$1){layer.setMapInternal(map);return;}if(layer instanceof LayerGroup$1){const layers=layer.getLayers().getArray();for(let i=0,ii=layers.length;i<ii;++i){setLayerMapProperty(layers[i],map);}}}class Map extends BaseObject$1{constructor(options){super();options=options||{};this.on;this.once;this.un;const optionsInternal=createOptionsInternal(options);this.renderComplete_;this.loaded_=true;this.boundHandleBrowserEvent_=this.handleBrowserEvent.bind(this);this.maxTilesLoading_=options.maxTilesLoading!==void 0?options.maxTilesLoading:16;this.pixelRatio_=options.pixelRatio!==void 0?options.pixelRatio:DEVICE_PIXEL_RATIO;this.postRenderTimeoutHandle_;this.
animationDelayKey_;this.animationDelay_=this.animationDelay_.bind(this);this.coordinateToPixelTransform_=create();this.pixelToCoordinateTransform_=create();this.frameIndex_=0;this.frameState_=null;this.previousExtent_=null;this.viewPropertyListenerKey_=null;this.viewChangeListenerKey_=null;this.layerGroupPropertyListenerKeys_=null;this.viewport_=document.createElement("div");this.viewport_.className="ol-viewport"+("ontouchstart"in window?" ol-touch":"");this.viewport_.style.position="relative";this.viewport_.style.overflow="hidden";this.viewport_.style.width="100%";this.viewport_.style.height="100%";this.overlayContainer_=document.createElement("div");this.overlayContainer_.style.position="absolute";this.overlayContainer_.style.zIndex="0";this.overlayContainer_.style.width="100%";this.overlayContainer_.style.height="100%";this.overlayContainer_.style.pointerEvents="none";this.overlayContainer_.className="ol-overlaycontainer";this.viewport_.appendChild(this.overlayContainer_);this.
overlayContainerStopEvent_=document.createElement("div");this.overlayContainerStopEvent_.style.position="absolute";this.overlayContainerStopEvent_.style.zIndex="0";this.overlayContainerStopEvent_.style.width="100%";this.overlayContainerStopEvent_.style.height="100%";this.overlayContainerStopEvent_.style.pointerEvents="none";this.overlayContainerStopEvent_.className="ol-overlaycontainer-stopevent";this.viewport_.appendChild(this.overlayContainerStopEvent_);this.mapBrowserEventHandler_=null;this.moveTolerance_=options.moveTolerance;this.keyboardEventTarget_=optionsInternal.keyboardEventTarget;this.targetChangeHandlerKeys_=null;this.targetElement_=null;this.resizeObserver_=new ResizeObserver(()=>this.updateSize());this.controls=optionsInternal.controls||defaults$1();this.interactions=optionsInternal.interactions||defaults({onFocusOnly:true});this.overlays_=optionsInternal.overlays;this.overlayIdIndex_={};this.renderer_=null;this.postRenderFunctions_=[];this.tileQueue_=new TileQueue$1(this
.getTilePriority.bind(this),this.handleTileChange_.bind(this));this.addChangeListener(MapProperty.LAYERGROUP,this.handleLayerGroupChanged_);this.addChangeListener(MapProperty.VIEW,this.handleViewChanged_);this.addChangeListener(MapProperty.SIZE,this.handleSizeChanged_);this.addChangeListener(MapProperty.TARGET,this.handleTargetChanged_);this.setProperties(optionsInternal.values);const map=this;if(options.view&&!(options.view instanceof OlView)){options.view.then(function(viewOptions){map.setView(new OlView(viewOptions));});}this.controls.addEventListener(CollectionEventType.ADD,(event)=>{event.element.setMap(this);});this.controls.addEventListener(CollectionEventType.REMOVE,(event)=>{event.element.setMap(null);});this.interactions.addEventListener(CollectionEventType.ADD,(event)=>{event.element.setMap(this);});this.interactions.addEventListener(CollectionEventType.REMOVE,(event)=>{event.element.setMap(null);});this.overlays_.addEventListener(CollectionEventType.ADD,(event)=>{this.
addOverlayInternal_(event.element);});this.overlays_.addEventListener(CollectionEventType.REMOVE,(event)=>{const id=event.element.getId();if(id!==void 0){delete this.overlayIdIndex_[id.toString()];}event.element.setMap(null);});this.controls.forEach((control)=>{control.setMap(this);});this.interactions.forEach((interaction)=>{interaction.setMap(this);});this.overlays_.forEach(this.addOverlayInternal_.bind(this));}addControl(control){this.getControls().push(control);}addInteraction(interaction){this.getInteractions().push(interaction);}addLayer(layer){const layers=this.getLayerGroup().getLayers();layers.push(layer);}handleLayerAdd_(event){setLayerMapProperty(event.layer,this);}addOverlay(overlay){this.getOverlays().push(overlay);}addOverlayInternal_(overlay){const id=overlay.getId();if(id!==void 0){this.overlayIdIndex_[id.toString()]=overlay;}overlay.setMap(this);}disposeInternal(){this.controls.clear();this.interactions.clear();this.overlays_.clear();this.resizeObserver_.disconnect();
this.setTarget(null);super.disposeInternal();}forEachFeatureAtPixel(pixel,callback,options){if(!this.frameState_||!this.renderer_){return;}const coordinate=this.getCoordinateFromPixelInternal(pixel);options=options!==void 0?options:{};const hitTolerance=options.hitTolerance!==void 0?options.hitTolerance:0;const layerFilter=options.layerFilter!==void 0?options.layerFilter:TRUE;const checkWrapped=options.checkWrapped!==false;return this.renderer_.forEachFeatureAtCoordinate(coordinate,this.frameState_,hitTolerance,checkWrapped,callback,null,layerFilter,null);}getFeaturesAtPixel(pixel,options){const features=[];this.forEachFeatureAtPixel(pixel,function(feature){features.push(feature);},options);return features;}getAllLayers(){const layers=[];function addLayersFrom(layerGroup){layerGroup.forEach(function(layer){if(layer instanceof LayerGroup$1){addLayersFrom(layer.getLayers());}else{layers.push(layer);}});}addLayersFrom(this.getLayers());return layers;}hasFeatureAtPixel(pixel,options){if(!
this.frameState_||!this.renderer_){return false;}const coordinate=this.getCoordinateFromPixelInternal(pixel);options=options!==void 0?options:{};const layerFilter=options.layerFilter!==void 0?options.layerFilter:TRUE;const hitTolerance=options.hitTolerance!==void 0?options.hitTolerance:0;const checkWrapped=options.checkWrapped!==false;return this.renderer_.hasFeatureAtCoordinate(coordinate,this.frameState_,hitTolerance,checkWrapped,layerFilter,null);}getEventCoordinate(event){return this.getCoordinateFromPixel(this.getEventPixel(event));}getEventCoordinateInternal(event){return this.getCoordinateFromPixelInternal(this.getEventPixel(event));}getEventPixel(event){const viewport=this.viewport_;const viewportPosition=viewport.getBoundingClientRect();const viewportSize=this.getSize();const scaleX=viewportPosition.width/viewportSize[0];const scaleY=viewportPosition.height/viewportSize[1];const eventPosition=("changedTouches"in event?(event.changedTouches[0]):(event));return[(eventPosition.
clientX-viewportPosition.left)/scaleX,(eventPosition.clientY-viewportPosition.top)/scaleY];}getTarget(){return(this.get(MapProperty.TARGET));}getTargetElement(){return this.targetElement_;}getCoordinateFromPixel(pixel){return toUserCoordinate(this.getCoordinateFromPixelInternal(pixel),this.getView().getProjection());}getCoordinateFromPixelInternal(pixel){const frameState=this.frameState_;if(!frameState){return null;}return apply(frameState.pixelToCoordinateTransform,pixel.slice());}getControls(){return this.controls;}getOverlays(){return this.overlays_;}getOverlayById(id){const overlay=this.overlayIdIndex_[id.toString()];return overlay!==void 0?overlay:null;}getInteractions(){return this.interactions;}getLayerGroup(){return(this.get(MapProperty.LAYERGROUP));}setLayers(layers){const group=this.getLayerGroup();if(layers instanceof Collection$1){group.setLayers(layers);return;}const collection=group.getLayers();collection.clear();collection.extend(layers);}getLayers(){const layers=this.
getLayerGroup().getLayers();return layers;}getLoadingOrNotReady(){const layerStatesArray=this.getLayerGroup().getLayerStatesArray();for(let i=0,ii=layerStatesArray.length;i<ii;++i){const state=layerStatesArray[i];if(!state.visible){continue;}const renderer=state.layer.getRenderer();if(renderer&&!renderer.ready){return true;}const source=state.layer.getSource();if(source&&source.loading){return true;}}return false;}getPixelFromCoordinate(coordinate){const viewCoordinate=fromUserCoordinate(coordinate,this.getView().getProjection());return this.getPixelFromCoordinateInternal(viewCoordinate);}getPixelFromCoordinateInternal(coordinate){const frameState=this.frameState_;if(!frameState){return null;}return apply(frameState.coordinateToPixelTransform,coordinate.slice(0,2));}getRenderer(){return this.renderer_;}getSize(){return(this.get(MapProperty.SIZE));}getView(){return(this.get(MapProperty.VIEW));}getViewport(){return this.viewport_;}getOverlayContainer(){return this.overlayContainer_;}
getOverlayContainerStopEvent(){return this.overlayContainerStopEvent_;}getOwnerDocument(){const targetElement=this.getTargetElement();return targetElement?targetElement.ownerDocument:document;}getTilePriority(tile,tileSourceKey,tileCenter,tileResolution){return getTilePriority(this.frameState_,tile,tileSourceKey,tileCenter,tileResolution);}handleBrowserEvent(browserEvent,type){type=type||browserEvent.type;const mapBrowserEvent=new MapBrowserEvent$1(type,this,browserEvent);this.handleMapBrowserEvent(mapBrowserEvent);}handleMapBrowserEvent(mapBrowserEvent){if(!this.frameState_){return;}const originalEvent=(mapBrowserEvent.originalEvent);const eventType=originalEvent.type;if(eventType===PointerEventType.POINTERDOWN||eventType===EventType.WHEEL||eventType===EventType.KEYDOWN){const doc=this.getOwnerDocument();const rootNode=this.viewport_.getRootNode?this.viewport_.getRootNode():doc;const target=(originalEvent.target);if(this.overlayContainerStopEvent_.contains(target)||!(rootNode===doc?
doc.documentElement:rootNode).contains(target)){return;}}mapBrowserEvent.frameState=this.frameState_;if(this.dispatchEvent(mapBrowserEvent)!==false){const interactionsArray=this.getInteractions().getArray().slice();for(let i=interactionsArray.length-1;i>=0;i--){const interaction=interactionsArray[i];if(interaction.getMap()!==this||!interaction.getActive()||!this.getTargetElement()){continue;}const cont=interaction.handleEvent(mapBrowserEvent);if(!cont||mapBrowserEvent.propagationStopped){break;}}}}handlePostRender(){const frameState=this.frameState_;const tileQueue=this.tileQueue_;if(!tileQueue.isEmpty()){let maxTotalLoading=this.maxTilesLoading_;let maxNewLoads=maxTotalLoading;if(frameState){const hints=frameState.viewHints;if(hints[ViewHint.ANIMATING]||hints[ViewHint.INTERACTING]){const lowOnFrameBudget=Date.now()-frameState.time>8;maxTotalLoading=lowOnFrameBudget?0:8;maxNewLoads=lowOnFrameBudget?0:2;}}if(tileQueue.getTilesLoading()<maxTotalLoading){tileQueue.reprioritize();tileQueue
.loadMoreTiles(maxTotalLoading,maxNewLoads);}}if(frameState&&this.renderer_&&!frameState.animate){if(this.renderComplete_===true){if(this.hasListener(RenderEventType.RENDERCOMPLETE)){this.renderer_.dispatchRenderEvent(RenderEventType.RENDERCOMPLETE,frameState);}if(this.loaded_===false){this.loaded_=true;this.dispatchEvent(new MapEvent$1(MapEventType.LOADEND,this,frameState));}}else if(this.loaded_===true){this.loaded_=false;this.dispatchEvent(new MapEvent$1(MapEventType.LOADSTART,this,frameState));}}const postRenderFunctions=this.postRenderFunctions_;for(let i=0,ii=postRenderFunctions.length;i<ii;++i){postRenderFunctions[i](this,frameState);}postRenderFunctions.length=0;}handleSizeChanged_(){if(this.getView()&&!this.getView().getAnimating()){this.getView().resolveConstraints(0);}this.render();}handleTargetChanged_(){if(this.mapBrowserEventHandler_){for(let i=0,ii=this.targetChangeHandlerKeys_.length;i<ii;++i){unlistenByKey(this.targetChangeHandlerKeys_[i]);}this.
targetChangeHandlerKeys_=null;this.viewport_.removeEventListener(EventType.CONTEXTMENU,this.boundHandleBrowserEvent_);this.viewport_.removeEventListener(EventType.WHEEL,this.boundHandleBrowserEvent_);this.mapBrowserEventHandler_.dispose();this.mapBrowserEventHandler_=null;removeNode(this.viewport_);}if(this.targetElement_){this.resizeObserver_.unobserve(this.targetElement_);const rootNode=this.targetElement_.getRootNode();if(rootNode instanceof ShadowRoot){this.resizeObserver_.unobserve(rootNode.host);}this.setSize(void 0);}const target=this.getTarget();const targetElement=typeof target==="string"?document.getElementById(target):target;this.targetElement_=targetElement;if(!targetElement){if(this.renderer_){clearTimeout(this.postRenderTimeoutHandle_);this.postRenderTimeoutHandle_=void 0;this.postRenderFunctions_.length=0;this.renderer_.dispose();this.renderer_=null;}if(this.animationDelayKey_){cancelAnimationFrame(this.animationDelayKey_);this.animationDelayKey_=void 0;}}else{
targetElement.appendChild(this.viewport_);if(!this.renderer_){this.renderer_=new CompositeMapRenderer$1(this);}this.mapBrowserEventHandler_=new MapBrowserEventHandler$1(this,this.moveTolerance_);for(const key in MapBrowserEventType){this.mapBrowserEventHandler_.addEventListener(MapBrowserEventType[key],this.handleMapBrowserEvent.bind(this));}this.viewport_.addEventListener(EventType.CONTEXTMENU,this.boundHandleBrowserEvent_,false);this.viewport_.addEventListener(EventType.WHEEL,this.boundHandleBrowserEvent_,PASSIVE_EVENT_LISTENERS?{passive:false}:false);const keyboardEventTarget=!this.keyboardEventTarget_?targetElement:this.keyboardEventTarget_;this.targetChangeHandlerKeys_=[listen(keyboardEventTarget,EventType.KEYDOWN,this.handleBrowserEvent,this),listen(keyboardEventTarget,EventType.KEYPRESS,this.handleBrowserEvent,this)];const rootNode=targetElement.getRootNode();if(rootNode instanceof ShadowRoot){this.resizeObserver_.observe(rootNode.host);}this.resizeObserver_.observe(
targetElement);}this.updateSize();}handleTileChange_(){this.render();}handleViewPropertyChanged_(){this.render();}handleViewChanged_(){if(this.viewPropertyListenerKey_){unlistenByKey(this.viewPropertyListenerKey_);this.viewPropertyListenerKey_=null;}if(this.viewChangeListenerKey_){unlistenByKey(this.viewChangeListenerKey_);this.viewChangeListenerKey_=null;}const view=this.getView();if(view){this.updateViewportSize_();this.viewPropertyListenerKey_=listen(view,ObjectEventType.PROPERTYCHANGE,this.handleViewPropertyChanged_,this);this.viewChangeListenerKey_=listen(view,EventType.CHANGE,this.handleViewPropertyChanged_,this);view.resolveConstraints(0);}this.render();}handleLayerGroupChanged_(){if(this.layerGroupPropertyListenerKeys_){this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);this.layerGroupPropertyListenerKeys_=null;}const layerGroup=this.getLayerGroup();if(layerGroup){this.handleLayerAdd_(new GroupEvent("addlayer",layerGroup));this.layerGroupPropertyListenerKeys_=[listen(
layerGroup,ObjectEventType.PROPERTYCHANGE,this.render,this),listen(layerGroup,EventType.CHANGE,this.render,this),listen(layerGroup,"addlayer",this.handleLayerAdd_,this),listen(layerGroup,"removelayer",this.handleLayerRemove_,this)];}this.render();}isRendered(){return!!this.frameState_;}animationDelay_(){this.animationDelayKey_=void 0;this.renderFrame_(Date.now());}renderSync(){if(this.animationDelayKey_){cancelAnimationFrame(this.animationDelayKey_);}this.animationDelay_();}redrawText(){const layerStates=this.getLayerGroup().getLayerStatesArray();for(let i=0,ii=layerStates.length;i<ii;++i){const layer=layerStates[i].layer;if(layer.hasRenderer()){layer.getRenderer().handleFontsChanged();}}}render(){if(this.renderer_&&this.animationDelayKey_===void 0){this.animationDelayKey_=requestAnimationFrame(this.animationDelay_);}}flushDeclutterItems(){const frameState=this.frameState_;if(!frameState){return;}this.renderer_.flushDeclutterItems(frameState);}removeControl(control){return this.
getControls().remove(control);}removeInteraction(interaction){return this.getInteractions().remove(interaction);}removeLayer(layer){const layers=this.getLayerGroup().getLayers();return layers.remove(layer);}handleLayerRemove_(event){removeLayerMapProperty(event.layer);}removeOverlay(overlay){return this.getOverlays().remove(overlay);}renderFrame_(time){const size=this.getSize();const view=this.getView();const previousFrameState=this.frameState_;let frameState=null;if(size!==void 0&&hasArea(size)&&view&&view.isDef()){const viewHints=view.getHints(this.frameState_?this.frameState_.viewHints:void 0);const viewState=view.getState();frameState={animate:false,coordinateToPixelTransform:this.coordinateToPixelTransform_,declutterTree:null,extent:getForViewAndSize(viewState.center,viewState.resolution,viewState.rotation,size),index:this.frameIndex_++,layerIndex:0,layerStatesArray:this.getLayerGroup().getLayerStatesArray(),pixelRatio:this.pixelRatio_,pixelToCoordinateTransform:this.
pixelToCoordinateTransform_,postRenderFunctions:[],size,tileQueue:this.tileQueue_,time,usedTiles:{},viewState,viewHints,wantedTiles:{},mapId:getUid(this),renderTargets:{}};if(viewState.nextCenter&&viewState.nextResolution){const rotation=isNaN(viewState.nextRotation)?viewState.rotation:viewState.nextRotation;frameState.nextExtent=getForViewAndSize(viewState.nextCenter,viewState.nextResolution,rotation,size);}}this.frameState_=frameState;this.renderer_.renderFrame(frameState);if(frameState){if(frameState.animate){this.render();}Array.prototype.push.apply(this.postRenderFunctions_,frameState.postRenderFunctions);if(previousFrameState){const moveStart=!this.previousExtent_||!isEmpty(this.previousExtent_)&&!equals$1(frameState.extent,this.previousExtent_);if(moveStart){this.dispatchEvent(new MapEvent$1(MapEventType.MOVESTART,this,previousFrameState));this.previousExtent_=createOrUpdateEmpty(this.previousExtent_);}}const idle=this.previousExtent_&&!frameState.viewHints[ViewHint.ANIMATING]&&
!frameState.viewHints[ViewHint.INTERACTING]&&!equals$1(frameState.extent,this.previousExtent_);if(idle){this.dispatchEvent(new MapEvent$1(MapEventType.MOVEEND,this,frameState));clone(frameState.extent,this.previousExtent_);}}this.dispatchEvent(new MapEvent$1(MapEventType.POSTRENDER,this,frameState));this.renderComplete_=this.hasListener(MapEventType.LOADSTART)||this.hasListener(MapEventType.LOADEND)||this.hasListener(RenderEventType.RENDERCOMPLETE)?!this.tileQueue_.getTilesLoading()&&!this.tileQueue_.getCount()&&!this.getLoadingOrNotReady():void 0;if(!this.postRenderTimeoutHandle_){this.postRenderTimeoutHandle_=setTimeout(()=>{this.postRenderTimeoutHandle_=void 0;this.handlePostRender();},0);}}setLayerGroup(layerGroup){const oldLayerGroup=this.getLayerGroup();if(oldLayerGroup){this.handleLayerRemove_(new GroupEvent("removelayer",oldLayerGroup));}this.set(MapProperty.LAYERGROUP,layerGroup);}setSize(size){this.set(MapProperty.SIZE,size);}setTarget(target){this.set(MapProperty.TARGET,
target);}setView(view){if(!view||view instanceof OlView){this.set(MapProperty.VIEW,view);return;}this.set(MapProperty.VIEW,new OlView());const map=this;view.then(function(viewOptions){map.setView(new OlView(viewOptions));});}updateSize(){const targetElement=this.getTargetElement();let size=void 0;if(targetElement){const computedStyle=getComputedStyle(targetElement);const width=targetElement.offsetWidth-parseFloat(computedStyle["borderLeftWidth"])-parseFloat(computedStyle["paddingLeft"])-parseFloat(computedStyle["paddingRight"])-parseFloat(computedStyle["borderRightWidth"]);const height=targetElement.offsetHeight-parseFloat(computedStyle["borderTopWidth"])-parseFloat(computedStyle["paddingTop"])-parseFloat(computedStyle["paddingBottom"])-parseFloat(computedStyle["borderBottomWidth"]);if(!isNaN(width)&&!isNaN(height)){size=[width,height];if(!hasArea(size)&&!!(targetElement.offsetWidth||targetElement.offsetHeight||targetElement.getClientRects().length)){warn(
"No map visible because the map container's width or height are 0.");}}}const oldSize=this.getSize();if(size&&(!oldSize||!equals$2(size,oldSize))){this.setSize(size);this.updateViewportSize_();}}updateViewportSize_(){const view=this.getView();if(view){let size=void 0;const computedStyle=getComputedStyle(this.viewport_);if(computedStyle.width&&computedStyle.height){size=[parseInt(computedStyle.width,10),parseInt(computedStyle.height,10)];}view.setViewportSize(size);}}}function createOptionsInternal(options){let keyboardEventTarget=null;if(options.keyboardEventTarget!==void 0){keyboardEventTarget=typeof options.keyboardEventTarget==="string"?document.getElementById(options.keyboardEventTarget):options.keyboardEventTarget;}const values={};const layerGroup=options.layers&&typeof options.layers.getLayers==="function"?(options.layers):new LayerGroup$1({layers:(options.layers)});values[MapProperty.LAYERGROUP]=layerGroup;values[MapProperty.TARGET]=options.target;values[MapProperty.VIEW]=
options.view instanceof OlView?options.view:new OlView();let controls;if(options.controls!==void 0){if(Array.isArray(options.controls)){controls=new Collection$1(options.controls.slice());}else{assert(typeof options.controls.getArray==="function","Expected `controls` to be an array or an `ol/Collection.js`");controls=options.controls;}}let interactions;if(options.interactions!==void 0){if(Array.isArray(options.interactions)){interactions=new Collection$1(options.interactions.slice());}else{assert(typeof options.interactions.getArray==="function","Expected `interactions` to be an array or an `ol/Collection.js`");interactions=options.interactions;}}let overlays;if(options.overlays!==void 0){if(Array.isArray(options.overlays)){overlays=new Collection$1(options.overlays.slice());}else{assert(typeof options.overlays.getArray==="function","Expected `overlays` to be an array or an `ol/Collection.js`");overlays=options.overlays;}}else{overlays=new Collection$1();}return{controls,interactions,
keyboardEventTarget,overlays,values};}const OlMap=Map;const ImageState={IDLE:0,LOADING:1,LOADED:2,ERROR:3,EMPTY:4};class ImageStyle{constructor(options){this.opacity_=options.opacity;this.rotateWithView_=options.rotateWithView;this.rotation_=options.rotation;this.scale_=options.scale;this.scaleArray_=toSize(options.scale);this.displacement_=options.displacement;this.declutterMode_=options.declutterMode;}clone(){const scale2=this.getScale();return new ImageStyle({opacity:this.getOpacity(),scale:Array.isArray(scale2)?scale2.slice():scale2,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});}getOpacity(){return this.opacity_;}getRotateWithView(){return this.rotateWithView_;}getRotation(){return this.rotation_;}getScale(){return this.scale_;}getScaleArray(){return this.scaleArray_;}getDisplacement(){return this.displacement_;}getDeclutterMode(){return this.declutterMode_;}getAnchor(){return abstract
();}getImage(pixelRatio){return abstract();}getHitDetectionImage(){return abstract();}getPixelRatio(pixelRatio){return 1;}getImageState(){return abstract();}getImageSize(){return abstract();}getOrigin(){return abstract();}getSize(){return abstract();}setDisplacement(displacement){this.displacement_=displacement;}setOpacity(opacity){this.opacity_=opacity;}setRotateWithView(rotateWithView){this.rotateWithView_=rotateWithView;}setRotation(rotation){this.rotation_=rotation;}setScale(scale2){this.scale_=scale2;this.scaleArray_=toSize(scale2);}listenImageChange(listener){abstract();}load(){abstract();}unlistenImageChange(listener){abstract();}}const ImageStyle$1=ImageStyle;function asColorLike(color){if(Array.isArray(color)){return toString(color);}return color;}class RegularShape extends ImageStyle$1{constructor(options){const rotateWithView=options.rotateWithView!==void 0?options.rotateWithView:false;super({opacity:1,rotateWithView,rotation:options.rotation!==void 0?options.rotation:0,
scale:options.scale!==void 0?options.scale:1,displacement:options.displacement!==void 0?options.displacement:[0,0],declutterMode:options.declutterMode});this.canvas_=void 0;this.hitDetectionCanvas_=null;this.fill_=options.fill!==void 0?options.fill:null;this.origin_=[0,0];this.points_=options.points;this.radius_=options.radius!==void 0?options.radius:options.radius1;this.radius2_=options.radius2;this.angle_=options.angle!==void 0?options.angle:0;this.stroke_=options.stroke!==void 0?options.stroke:null;this.size_=null;this.renderOptions_=null;this.render();}clone(){const scale2=this.getScale();const style=new RegularShape({fill:this.getFill()?this.getFill().clone():void 0,points:this.getPoints(),radius:this.getRadius(),radius2:this.getRadius2(),angle:this.getAngle(),stroke:this.getStroke()?this.getStroke().clone():void 0,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(scale2)?scale2.slice():scale2,displacement:this.getDisplacement().slice(),
declutterMode:this.getDeclutterMode()});style.setOpacity(this.getOpacity());return style;}getAnchor(){const size=this.size_;if(!size){return null;}const displacement=this.getDisplacement();const scale2=this.getScaleArray();return[size[0]/2-displacement[0]/scale2[0],size[1]/2+displacement[1]/scale2[1]];}getAngle(){return this.angle_;}getFill(){return this.fill_;}setFill(fill){this.fill_=fill;this.render();}getHitDetectionImage(){if(!this.hitDetectionCanvas_){this.createHitDetectionCanvas_(this.renderOptions_);}return this.hitDetectionCanvas_;}getImage(pixelRatio){let image=this.canvas_[pixelRatio];if(!image){const renderOptions=this.renderOptions_;const context=createCanvasContext2D(renderOptions.size*pixelRatio,renderOptions.size*pixelRatio);this.draw_(renderOptions,context,pixelRatio);image=context.canvas;this.canvas_[pixelRatio]=image;}return image;}getPixelRatio(pixelRatio){return pixelRatio;}getImageSize(){return this.size_;}getImageState(){return ImageState.LOADED;}getOrigin(){
return this.origin_;}getPoints(){return this.points_;}getRadius(){return this.radius_;}getRadius2(){return this.radius2_;}getSize(){return this.size_;}getStroke(){return this.stroke_;}setStroke(stroke){this.stroke_=stroke;this.render();}listenImageChange(listener){}load(){}unlistenImageChange(listener){}calculateLineJoinSize_(lineJoin,strokeWidth,miterLimit){if(strokeWidth===0||this.points_===Infinity||lineJoin!=="bevel"&&lineJoin!=="miter"){return strokeWidth;}let r1=this.radius_;let r2=this.radius2_===void 0?r1:this.radius2_;if(r1<r2){const tmp=r1;r1=r2;r2=tmp;}const points=this.radius2_===void 0?this.points_:this.points_*2;const alpha=2*Math.PI/points;const a=r2*Math.sin(alpha);const b=Math.sqrt(r2*r2-a*a);const d=r1-b;const e=Math.sqrt(a*a+d*d);const miterRatio=e/a;if(lineJoin==="miter"&&miterRatio<=miterLimit){return miterRatio*strokeWidth;}const k=strokeWidth/2/miterRatio;const l=strokeWidth/2*(d/e);const maxr=Math.sqrt((r1+k)*(r1+k)+l*l);const bevelAdd=maxr-r1;if(this.radius2_
===void 0||lineJoin==="bevel"){return bevelAdd*2;}const aa=r1*Math.sin(alpha);const bb=Math.sqrt(r1*r1-aa*aa);const dd=r2-bb;const ee=Math.sqrt(aa*aa+dd*dd);const innerMiterRatio=ee/aa;if(innerMiterRatio<=miterLimit){const innerLength=innerMiterRatio*strokeWidth/2-r2-r1;return 2*Math.max(bevelAdd,innerLength);}return bevelAdd*2;}createRenderOptions(){let lineCap=defaultLineCap;let lineJoin=defaultLineJoin;let miterLimit=0;let lineDash=null;let lineDashOffset=0;let strokeStyle;let strokeWidth=0;if(this.stroke_){strokeStyle=this.stroke_.getColor();if(strokeStyle===null){strokeStyle=defaultStrokeStyle;}strokeStyle=asColorLike(strokeStyle);strokeWidth=this.stroke_.getWidth();if(strokeWidth===void 0){strokeWidth=defaultLineWidth;}lineDash=this.stroke_.getLineDash();lineDashOffset=this.stroke_.getLineDashOffset();lineJoin=this.stroke_.getLineJoin();if(lineJoin===void 0){lineJoin=defaultLineJoin;}lineCap=this.stroke_.getLineCap();if(lineCap===void 0){lineCap=defaultLineCap;}miterLimit=this.
stroke_.getMiterLimit();if(miterLimit===void 0){miterLimit=defaultMiterLimit;}}const add2=this.calculateLineJoinSize_(lineJoin,strokeWidth,miterLimit);const maxRadius=Math.max(this.radius_,this.radius2_||0);const size=Math.ceil(2*maxRadius+add2);return{strokeStyle,strokeWidth,size,lineCap,lineDash,lineDashOffset,lineJoin,miterLimit};}render(){this.renderOptions_=this.createRenderOptions();const size=this.renderOptions_.size;this.canvas_={};this.size_=[size,size];}draw_(renderOptions,context,pixelRatio){context.scale(pixelRatio,pixelRatio);context.translate(renderOptions.size/2,renderOptions.size/2);this.createPath_(context);if(this.fill_){let color=this.fill_.getColor();if(color===null){color=defaultFillStyle;}context.fillStyle=asColorLike(color);context.fill();}if(this.stroke_){context.strokeStyle=renderOptions.strokeStyle;context.lineWidth=renderOptions.strokeWidth;if(renderOptions.lineDash){context.setLineDash(renderOptions.lineDash);context.lineDashOffset=renderOptions.
lineDashOffset;}context.lineCap=renderOptions.lineCap;context.lineJoin=renderOptions.lineJoin;context.miterLimit=renderOptions.miterLimit;context.stroke();}}createHitDetectionCanvas_(renderOptions){if(this.fill_){let color=this.fill_.getColor();let opacity=0;if(typeof color==="string"){color=asArray(color);}if(color===null){opacity=1;}else if(Array.isArray(color)){opacity=color.length===4?color[3]:1;}if(opacity===0){const context=createCanvasContext2D(renderOptions.size,renderOptions.size);this.hitDetectionCanvas_=context.canvas;this.drawHitDetectionCanvas_(renderOptions,context);}}if(!this.hitDetectionCanvas_){this.hitDetectionCanvas_=this.getImage(1);}}createPath_(context){let points=this.points_;const radius=this.radius_;if(points===Infinity){context.arc(0,0,radius,0,2*Math.PI);}else{const radius2=this.radius2_===void 0?radius:this.radius2_;if(this.radius2_!==void 0){points*=2;}const startAngle=this.angle_-Math.PI/2;const step=2*Math.PI/points;for(let i=0;i<points;i++){const angle0=
startAngle+i*step;const radiusC=i%2===0?radius:radius2;context.lineTo(radiusC*Math.cos(angle0),radiusC*Math.sin(angle0));}context.closePath();}}drawHitDetectionCanvas_(renderOptions,context){context.translate(renderOptions.size/2,renderOptions.size/2);this.createPath_(context);context.fillStyle=defaultFillStyle;context.fill();if(this.stroke_){context.strokeStyle=renderOptions.strokeStyle;context.lineWidth=renderOptions.strokeWidth;if(renderOptions.lineDash){context.setLineDash(renderOptions.lineDash);context.lineDashOffset=renderOptions.lineDashOffset;}context.lineJoin=renderOptions.lineJoin;context.miterLimit=renderOptions.miterLimit;context.stroke();}}}const RegularShape$1=RegularShape;class CircleStyle extends RegularShape$1{constructor(options){options=options?options:{radius:5};super({points:Infinity,fill:options.fill,radius:options.radius,stroke:options.stroke,scale:options.scale!==void 0?options.scale:1,rotation:options.rotation!==void 0?options.rotation:0,rotateWithView:options
.rotateWithView!==void 0?options.rotateWithView:false,displacement:options.displacement!==void 0?options.displacement:[0,0],declutterMode:options.declutterMode});}clone(){const scale2=this.getScale();const style=new CircleStyle({fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,radius:this.getRadius(),scale:Array.isArray(scale2)?scale2.slice():scale2,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});style.setOpacity(this.getOpacity());return style;}setRadius(radius){this.radius_=radius;this.render();}}const Circle=CircleStyle;class Fill{constructor(options){options=options||{};this.color_=options.color!==void 0?options.color:null;}clone(){const color=this.getColor();return new Fill({color:Array.isArray(color)?color.slice():color||void 0});}getColor(){return this.color_;}setColor(color){this.color_=color;}}const Fill$1=Fill;class
Stroke{constructor(options){options=options||{};this.color_=options.color!==void 0?options.color:null;this.lineCap_=options.lineCap;this.lineDash_=options.lineDash!==void 0?options.lineDash:null;this.lineDashOffset_=options.lineDashOffset;this.lineJoin_=options.lineJoin;this.miterLimit_=options.miterLimit;this.width_=options.width;}clone(){const color=this.getColor();return new Stroke({color:Array.isArray(color)?color.slice():color||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()});}getColor(){return this.color_;}getLineCap(){return this.lineCap_;}getLineDash(){return this.lineDash_;}getLineDashOffset(){return this.lineDashOffset_;}getLineJoin(){return this.lineJoin_;}getMiterLimit(){return this.miterLimit_;}getWidth(){return this.width_;}setColor(color){this.color_=color;}setLineCap(lineCap){this.lineCap_=lineCap;}
setLineDash(lineDash){this.lineDash_=lineDash;}setLineDashOffset(lineDashOffset){this.lineDashOffset_=lineDashOffset;}setLineJoin(lineJoin){this.lineJoin_=lineJoin;}setMiterLimit(miterLimit){this.miterLimit_=miterLimit;}setWidth(width){this.width_=width;}}const OlStroke=Stroke;class Style{constructor(options){options=options||{};this.geometry_=null;this.geometryFunction_=defaultGeometryFunction;if(options.geometry!==void 0){this.setGeometry(options.geometry);}this.fill_=options.fill!==void 0?options.fill:null;this.image_=options.image!==void 0?options.image:null;this.renderer_=options.renderer!==void 0?options.renderer:null;this.hitDetectionRenderer_=options.hitDetectionRenderer!==void 0?options.hitDetectionRenderer:null;this.stroke_=options.stroke!==void 0?options.stroke:null;this.text_=options.text!==void 0?options.text:null;this.zIndex_=options.zIndex;}clone(){let geometry=this.getGeometry();if(geometry&&typeof geometry==="object"){geometry=geometry.clone();}return new Style({
geometry,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,renderer:this.getRenderer(),stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()});}getRenderer(){return this.renderer_;}setRenderer(renderer){this.renderer_=renderer;}setHitDetectionRenderer(renderer){this.hitDetectionRenderer_=renderer;}getHitDetectionRenderer(){return this.hitDetectionRenderer_;}getGeometry(){return this.geometry_;}getGeometryFunction(){return this.geometryFunction_;}getFill(){return this.fill_;}setFill(fill){this.fill_=fill;}getImage(){return this.image_;}setImage(image){this.image_=image;}getStroke(){return this.stroke_;}setStroke(stroke){this.stroke_=stroke;}getText(){return this.text_;}setText(text){this.text_=text;}getZIndex(){return this.zIndex_;}setGeometry(geometry){if(typeof geometry==="function"){this.geometryFunction_=geometry;}else if(typeof geometry==="string"){this.
geometryFunction_=function(feature){return(feature.get(geometry));};}else if(!geometry){this.geometryFunction_=defaultGeometryFunction;}else if(geometry!==void 0){this.geometryFunction_=function(){return(geometry);};}this.geometry_=geometry;}setZIndex(zIndex){this.zIndex_=zIndex;}}function toFunction(obj){let styleFunction;if(typeof obj==="function"){styleFunction=obj;}else{let styles;if(Array.isArray(obj)){styles=obj;}else{assert(typeof obj.getZIndex==="function","Expected an `Style` or an array of `Style`");const style=(obj);styles=[style];}styleFunction=function(){return styles;};}return styleFunction;}let defaultStyles=null;function createDefaultStyle(feature,resolution){if(!defaultStyles){const fill=new Fill$1({color:"rgba(255,255,255,0.4)"});const stroke=new OlStroke({color:"#3399CC",width:1.25});defaultStyles=[new Style({image:new Circle({fill,stroke,radius:5}),fill,stroke})];}return defaultStyles;}function createEditingStyle(){const styles={};const white=[255,255,255,1];const
blue=[0,153,255,1];const width=3;styles["Polygon"]=[new Style({fill:new Fill$1({color:[255,255,255,0.5]})})];styles["MultiPolygon"]=styles["Polygon"];styles["LineString"]=[new Style({stroke:new OlStroke({color:white,width:width+2})}),new Style({stroke:new OlStroke({color:blue,width})})];styles["MultiLineString"]=styles["LineString"];styles["Circle"]=styles["Polygon"].concat(styles["LineString"]);styles["Point"]=[new Style({image:new Circle({radius:width*2,fill:new Fill$1({color:blue}),stroke:new OlStroke({color:white,width:width/2})}),zIndex:Infinity})];styles["MultiPoint"]=styles["Point"];styles["GeometryCollection"]=styles["Polygon"].concat(styles["LineString"],styles["Point"]);return styles;}function defaultGeometryFunction(feature){return feature.getGeometry();}const DEFAULT_FILL_COLOR="#333";class Text{constructor(options){options=options||{};this.font_=options.font;this.rotation_=options.rotation;this.rotateWithView_=options.rotateWithView;this.scale_=options.scale;this.
scaleArray_=toSize(options.scale!==void 0?options.scale:1);this.text_=options.text;this.textAlign_=options.textAlign;this.justify_=options.justify;this.repeat_=options.repeat;this.textBaseline_=options.textBaseline;this.fill_=options.fill!==void 0?options.fill:new Fill$1({color:DEFAULT_FILL_COLOR});this.maxAngle_=options.maxAngle!==void 0?options.maxAngle:Math.PI/4;this.placement_=options.placement!==void 0?options.placement:"point";this.overflow_=!!options.overflow;this.stroke_=options.stroke!==void 0?options.stroke:null;this.offsetX_=options.offsetX!==void 0?options.offsetX:0;this.offsetY_=options.offsetY!==void 0?options.offsetY:0;this.backgroundFill_=options.backgroundFill?options.backgroundFill:null;this.backgroundStroke_=options.backgroundStroke?options.backgroundStroke:null;this.padding_=options.padding===void 0?null:options.padding;}clone(){const scale2=this.getScale();return new Text({font:this.getFont(),placement:this.getPlacement(),repeat:this.getRepeat(),maxAngle:this.
getMaxAngle(),overflow:this.getOverflow(),rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(scale2)?scale2.slice():scale2,text:this.getText(),textAlign:this.getTextAlign(),justify:this.getJustify(),textBaseline:this.getTextBaseline(),fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,offsetX:this.getOffsetX(),offsetY:this.getOffsetY(),backgroundFill:this.getBackgroundFill()?this.getBackgroundFill().clone():void 0,backgroundStroke:this.getBackgroundStroke()?this.getBackgroundStroke().clone():void 0,padding:this.getPadding()||void 0});}getOverflow(){return this.overflow_;}getFont(){return this.font_;}getMaxAngle(){return this.maxAngle_;}getPlacement(){return this.placement_;}getRepeat(){return this.repeat_;}getOffsetX(){return this.offsetX_;}getOffsetY(){return this.offsetY_;}getFill(){return this.fill_;}getRotateWithView(){return this.rotateWithView_;}getRotation(){return this.rotation_;}
getScale(){return this.scale_;}getScaleArray(){return this.scaleArray_;}getStroke(){return this.stroke_;}getText(){return this.text_;}getTextAlign(){return this.textAlign_;}getJustify(){return this.justify_;}getTextBaseline(){return this.textBaseline_;}getBackgroundFill(){return this.backgroundFill_;}getBackgroundStroke(){return this.backgroundStroke_;}getPadding(){return this.padding_;}setOverflow(overflow){this.overflow_=overflow;}setFont(font){this.font_=font;}setMaxAngle(maxAngle){this.maxAngle_=maxAngle;}setOffsetX(offsetX){this.offsetX_=offsetX;}setOffsetY(offsetY){this.offsetY_=offsetY;}setPlacement(placement){this.placement_=placement;}setRepeat(repeat){this.repeat_=repeat;}setRotateWithView(rotateWithView){this.rotateWithView_=rotateWithView;}setFill(fill){this.fill_=fill;}setRotation(rotation){this.rotation_=rotation;}setScale(scale2){this.scale_=scale2;this.scaleArray_=toSize(scale2!==void 0?scale2:1);}setStroke(stroke){this.stroke_=stroke;}setText(text){this.text_=text;}
setTextAlign(textAlign){this.textAlign_=textAlign;}setJustify(justify){this.justify_=justify;}setTextBaseline(textBaseline){this.textBaseline_=textBaseline;}setBackgroundFill(fill){this.backgroundFill_=fill;}setBackgroundStroke(stroke){this.backgroundStroke_=stroke;}setPadding(padding){this.padding_=padding;}}const OlText=Text;function listenImage(image,loadHandler,errorHandler){const img=(image);let listening=true;let decoding=false;let loaded=false;const listenerKeys=[listenOnce(img,EventType.LOAD,function(){loaded=true;if(!decoding){loadHandler();}})];if(img.src&&IMAGE_DECODE){decoding=true;img.decode().then(function(){if(listening){loadHandler();}}).catch(function(error){if(listening){if(loaded){loadHandler();}else{errorHandler();}}});}else{listenerKeys.push(listenOnce(img,EventType.ERROR,errorHandler));}return function unlisten(){listening=false;listenerKeys.forEach(unlistenByKey);};}function load(image,src){return new Promise((resolve,reject)=>{function handleLoad(){unlisten();
resolve(image);}function handleError(){unlisten();reject(new Error("Image load error"));}function unlisten(){image.removeEventListener("load",handleLoad);image.removeEventListener("error",handleError);}image.addEventListener("load",handleLoad);image.addEventListener("error",handleError);if(src){image.src=src;}});}function decodeFallback(image,src){if(src){image.src=src;}return IMAGE_DECODE?new Promise((resolve,reject)=>image.decode().then(()=>resolve(image),reject)):load(image);}let taintedTestContext=null;class IconImage extends EventTarget{constructor(image,src,crossOrigin,imageState,color){super();this.hitDetectionImage_=null;this.image_=image;this.crossOrigin_=crossOrigin;this.canvas_={};this.color_=color;this.imageState_=imageState===void 0?ImageState.IDLE:imageState;this.size_=image&&image.width&&image.height?[image.width,image.height]:null;this.src_=src;this.tainted_;}initializeImage_(){this.image_=new Image();if(this.crossOrigin_!==null){this.image_.crossOrigin=this.
crossOrigin_;}}isTainted_(){if(this.tainted_===void 0&&this.imageState_===ImageState.LOADED){if(!taintedTestContext){taintedTestContext=createCanvasContext2D(1,1,void 0,{willReadFrequently:true});}taintedTestContext.drawImage(this.image_,0,0);try{taintedTestContext.getImageData(0,0,1,1);this.tainted_=false;}catch(e){taintedTestContext=null;this.tainted_=true;}}return this.tainted_===true;}dispatchChangeEvent_(){this.dispatchEvent(EventType.CHANGE);}handleImageError_(){this.imageState_=ImageState.ERROR;this.dispatchChangeEvent_();}handleImageLoad_(){this.imageState_=ImageState.LOADED;this.size_=[this.image_.width,this.image_.height];this.dispatchChangeEvent_();}getImage(pixelRatio){if(!this.image_){this.initializeImage_();}this.replaceColor_(pixelRatio);return this.canvas_[pixelRatio]?this.canvas_[pixelRatio]:this.image_;}getPixelRatio(pixelRatio){this.replaceColor_(pixelRatio);return this.canvas_[pixelRatio]?pixelRatio:1;}getImageState(){return this.imageState_;}getHitDetectionImage(){
if(!this.image_){this.initializeImage_();}if(!this.hitDetectionImage_){if(this.isTainted_()){const width=this.size_[0];const height=this.size_[1];const context=createCanvasContext2D(width,height);context.fillRect(0,0,width,height);this.hitDetectionImage_=context.canvas;}else{this.hitDetectionImage_=this.image_;}}return this.hitDetectionImage_;}getSize(){return this.size_;}getSrc(){return this.src_;}load(){if(this.imageState_!==ImageState.IDLE){return;}if(!this.image_){this.initializeImage_();}this.imageState_=ImageState.LOADING;try{if(this.src_!==void 0){this.image_.src=this.src_;}}catch(e){this.handleImageError_();}if(this.image_ instanceof HTMLImageElement){decodeFallback(this.image_,this.src_).then((image)=>{this.image_=image;this.handleImageLoad_();}).catch(this.handleImageError_.bind(this));}}replaceColor_(pixelRatio){if(!this.color_||this.canvas_[pixelRatio]||this.imageState_!==ImageState.LOADED){return;}const image=this.image_;const canvas=document.createElement("canvas");canvas
.width=Math.ceil(image.width*pixelRatio);canvas.height=Math.ceil(image.height*pixelRatio);const ctx=canvas.getContext("2d");ctx.scale(pixelRatio,pixelRatio);ctx.drawImage(image,0,0);ctx.globalCompositeOperation="multiply";ctx.fillStyle=asString(this.color_);ctx.fillRect(0,0,canvas.width/pixelRatio,canvas.height/pixelRatio);ctx.globalCompositeOperation="destination-in";ctx.drawImage(image,0,0);this.canvas_[pixelRatio]=canvas;}}function get(image,cacheKey,crossOrigin,imageState,color){let iconImage=cacheKey===void 0?void 0:shared.get(cacheKey,crossOrigin,color);if(!iconImage){iconImage=new IconImage(image,image instanceof HTMLImageElement?image.src||void 0:cacheKey,crossOrigin,imageState,color);shared.set(cacheKey,crossOrigin,color,iconImage);}return iconImage;}function calculateScale(width,height,wantedWidth,wantedHeight){if(wantedWidth!==void 0&&wantedHeight!==void 0){return[wantedWidth/width,wantedHeight/height];}if(wantedWidth!==void 0){return wantedWidth/width;}if(wantedHeight!==
void 0){return wantedHeight/height;}return 1;}class Icon extends ImageStyle$1{constructor(options){options=options||{};const opacity=options.opacity!==void 0?options.opacity:1;const rotation=options.rotation!==void 0?options.rotation:0;const scale2=options.scale!==void 0?options.scale:1;const rotateWithView=options.rotateWithView!==void 0?options.rotateWithView:false;super({opacity,rotation,scale:scale2,displacement:options.displacement!==void 0?options.displacement:[0,0],rotateWithView,declutterMode:options.declutterMode});this.anchor_=options.anchor!==void 0?options.anchor:[0.5,0.5];this.normalizedAnchor_=null;this.anchorOrigin_=options.anchorOrigin!==void 0?options.anchorOrigin:"top-left";this.anchorXUnits_=options.anchorXUnits!==void 0?options.anchorXUnits:"fraction";this.anchorYUnits_=options.anchorYUnits!==void 0?options.anchorYUnits:"fraction";this.crossOrigin_=options.crossOrigin!==void 0?options.crossOrigin:null;const image=options.img!==void 0?options.img:null;let cacheKey=
options.src;assert(!(cacheKey!==void 0&&image),"`image` and `src` cannot be provided at the same time");if((cacheKey===void 0||cacheKey.length===0)&&image){cacheKey=image.src||getUid(image);}assert(cacheKey!==void 0&&cacheKey.length>0,"A defined and non-empty `src` or `image` must be provided");assert(!((options.width!==void 0||options.height!==void 0)&&options.scale!==void 0),"`width` or `height` cannot be provided together with `scale`");let imageState;if(options.src!==void 0){imageState=ImageState.IDLE;}else if(image!==void 0){if(image instanceof HTMLImageElement){if(image.complete){imageState=image.src?ImageState.LOADED:ImageState.IDLE;}else{imageState=ImageState.LOADING;}}else{imageState=ImageState.LOADED;}}this.color_=options.color!==void 0?asArray(options.color):null;this.iconImage_=get(image,cacheKey,this.crossOrigin_,imageState,this.color_);this.offset_=options.offset!==void 0?options.offset:[0,0];this.offsetOrigin_=options.offsetOrigin!==void 0?options.offsetOrigin:"top-left"
;this.origin_=null;this.size_=options.size!==void 0?options.size:null;if(options.width!==void 0||options.height!==void 0){let width,height;if(options.size){[width,height]=options.size;}else{const image2=this.getImage(1);if(image2.width&&image2.height){width=image2.width;height=image2.height;}else if(image2 instanceof HTMLImageElement){this.initialOptions_=options;const onload=()=>{this.unlistenImageChange(onload);if(!this.initialOptions_){return;}const imageSize=this.iconImage_.getSize();this.setScale(calculateScale(imageSize[0],imageSize[1],options.width,options.height));};this.listenImageChange(onload);return;}}if(width!==void 0){this.setScale(calculateScale(width,height,options.width,options.height));}}}clone(){let scale2,width,height;if(this.initialOptions_){width=this.initialOptions_.width;height=this.initialOptions_.height;}else{scale2=this.getScale();scale2=Array.isArray(scale2)?scale2.slice():scale2;}return new Icon({anchor:this.anchor_.slice(),anchorOrigin:this.anchorOrigin_,
anchorXUnits:this.anchorXUnits_,anchorYUnits:this.anchorYUnits_,color:this.color_&&this.color_.slice?this.color_.slice():this.color_||void 0,crossOrigin:this.crossOrigin_,offset:this.offset_.slice(),offsetOrigin:this.offsetOrigin_,opacity:this.getOpacity(),rotateWithView:this.getRotateWithView(),rotation:this.getRotation(),scale:scale2,width,height,size:this.size_!==null?this.size_.slice():void 0,src:this.getSrc(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});}getAnchor(){let anchor=this.normalizedAnchor_;if(!anchor){anchor=this.anchor_;const size=this.getSize();if(this.anchorXUnits_=="fraction"||this.anchorYUnits_=="fraction"){if(!size){return null;}anchor=this.anchor_.slice();if(this.anchorXUnits_=="fraction"){anchor[0]*=size[0];}if(this.anchorYUnits_=="fraction"){anchor[1]*=size[1];}}if(this.anchorOrigin_!="top-left"){if(!size){return null;}if(anchor===this.anchor_){anchor=this.anchor_.slice();}if(this.anchorOrigin_=="top-right"||this.
anchorOrigin_=="bottom-right"){anchor[0]=-anchor[0]+size[0];}if(this.anchorOrigin_=="bottom-left"||this.anchorOrigin_=="bottom-right"){anchor[1]=-anchor[1]+size[1];}}this.normalizedAnchor_=anchor;}const displacement=this.getDisplacement();const scale2=this.getScaleArray();return[anchor[0]-displacement[0]/scale2[0],anchor[1]+displacement[1]/scale2[1]];}setAnchor(anchor){this.anchor_=anchor;this.normalizedAnchor_=null;}getColor(){return this.color_;}getImage(pixelRatio){return this.iconImage_.getImage(pixelRatio);}getPixelRatio(pixelRatio){return this.iconImage_.getPixelRatio(pixelRatio);}getImageSize(){return this.iconImage_.getSize();}getImageState(){return this.iconImage_.getImageState();}getHitDetectionImage(){return this.iconImage_.getHitDetectionImage();}getOrigin(){if(this.origin_){return this.origin_;}let offset=this.offset_;if(this.offsetOrigin_!="top-left"){const size=this.getSize();const iconImageSize=this.iconImage_.getSize();if(!size||!iconImageSize){return null;}offset=
offset.slice();if(this.offsetOrigin_=="top-right"||this.offsetOrigin_=="bottom-right"){offset[0]=iconImageSize[0]-size[0]-offset[0];}if(this.offsetOrigin_=="bottom-left"||this.offsetOrigin_=="bottom-right"){offset[1]=iconImageSize[1]-size[1]-offset[1];}}this.origin_=offset;return this.origin_;}getSrc(){return this.iconImage_.getSrc();}getSize(){return!this.size_?this.iconImage_.getSize():this.size_;}getWidth(){const scale2=this.getScaleArray();if(this.size_){return this.size_[0]*scale2[0];}if(this.iconImage_.getImageState()==ImageState.LOADED){return this.iconImage_.getSize()[0]*scale2[0];}return void 0;}getHeight(){const scale2=this.getScaleArray();if(this.size_){return this.size_[1]*scale2[1];}if(this.iconImage_.getImageState()==ImageState.LOADED){return this.iconImage_.getSize()[1]*scale2[1];}return void 0;}setScale(scale2){delete this.initialOptions_;super.setScale(scale2);}listenImageChange(listener){this.iconImage_.addEventListener(EventType.CHANGE,listener);}load(){this.
iconImage_.load();}unlistenImageChange(listener){this.iconImage_.removeEventListener(EventType.CHANGE,listener);}}const OlIcon=Icon;class Feature extends BaseObject$1{constructor(geometryOrProperties){super();this.on;this.once;this.un;this.id_=void 0;this.geometryName_="geometry";this.style_=null;this.styleFunction_=void 0;this.geometryChangeKey_=null;this.addChangeListener(this.geometryName_,this.handleGeometryChanged_);if(geometryOrProperties){if(typeof geometryOrProperties.getSimplifiedGeometry==="function"){const geometry=(geometryOrProperties);this.setGeometry(geometry);}else{const properties=geometryOrProperties;this.setProperties(properties);}}}clone(){const clone2=(new Feature(this.hasProperties()?this.getProperties():null));clone2.setGeometryName(this.getGeometryName());const geometry=this.getGeometry();if(geometry){clone2.setGeometry(geometry.clone());}const style=this.getStyle();if(style){clone2.setStyle(style);}return clone2;}getGeometry(){return(this.get(this.geometryName_
));}getId(){return this.id_;}getGeometryName(){return this.geometryName_;}getStyle(){return this.style_;}getStyleFunction(){return this.styleFunction_;}handleGeometryChange_(){this.changed();}handleGeometryChanged_(){if(this.geometryChangeKey_){unlistenByKey(this.geometryChangeKey_);this.geometryChangeKey_=null;}const geometry=this.getGeometry();if(geometry){this.geometryChangeKey_=listen(geometry,EventType.CHANGE,this.handleGeometryChange_,this);}this.changed();}setGeometry(geometry){this.set(this.geometryName_,geometry);}setStyle(style){this.style_=style;this.styleFunction_=!style?void 0:createStyleFunction(style);this.changed();}setId(id){this.id_=id;this.changed();}setGeometryName(name){this.removeChangeListener(this.geometryName_,this.handleGeometryChanged_);this.geometryName_=name;this.addChangeListener(this.geometryName_,this.handleGeometryChanged_);this.handleGeometryChanged_();}}function createStyleFunction(obj){if(typeof obj==="function"){return obj;}let styles;if(Array.
isArray(obj)){styles=obj;}else{assert(typeof obj.getZIndex==="function","Expected an `ol/style/Style` or an array of `ol/style/Style.js`");const style=(obj);styles=[style];}return function(){return styles;};}const Feature$1=Feature;class GeometryCollection extends Geometry$1{constructor(geometries){super();this.geometries_=geometries?geometries:null;this.changeEventsKeys_=[];this.listenGeometriesChange_();}unlistenGeometriesChange_(){this.changeEventsKeys_.forEach(unlistenByKey);this.changeEventsKeys_.length=0;}listenGeometriesChange_(){if(!this.geometries_){return;}for(let i=0,ii=this.geometries_.length;i<ii;++i){this.changeEventsKeys_.push(listen(this.geometries_[i],EventType.CHANGE,this.changed,this));}}clone(){const geometryCollection=new GeometryCollection(null);geometryCollection.setGeometries(this.geometries_);geometryCollection.applyProperties(this);return geometryCollection;}closestPointXY(x,y,closestPoint,minSquaredDistance){if(minSquaredDistance<closestSquaredDistanceXY(this
.getExtent(),x,y)){return minSquaredDistance;}const geometries=this.geometries_;for(let i=0,ii=geometries.length;i<ii;++i){minSquaredDistance=geometries[i].closestPointXY(x,y,closestPoint,minSquaredDistance);}return minSquaredDistance;}containsXY(x,y){const geometries=this.geometries_;for(let i=0,ii=geometries.length;i<ii;++i){if(geometries[i].containsXY(x,y)){return true;}}return false;}computeExtent(extent){createOrUpdateEmpty(extent);const geometries=this.geometries_;for(let i=0,ii=geometries.length;i<ii;++i){extend$1(extent,geometries[i].getExtent());}return extent;}getGeometries(){return cloneGeometries(this.geometries_);}getGeometriesArray(){return this.geometries_;}getGeometriesArrayRecursive(){let geometriesArray=[];const geometries=this.geometries_;for(let i=0,ii=geometries.length;i<ii;++i){if(geometries[i].getType()===this.getType()){geometriesArray=geometriesArray.concat(geometries[i].getGeometriesArrayRecursive());}else{geometriesArray.push(geometries[i]);}}return geometriesArray
;}getSimplifiedGeometry(squaredTolerance){if(this.simplifiedGeometryRevision!==this.getRevision()){this.simplifiedGeometryMaxMinSquaredTolerance=0;this.simplifiedGeometryRevision=this.getRevision();}if(squaredTolerance<0||this.simplifiedGeometryMaxMinSquaredTolerance!==0&&squaredTolerance<this.simplifiedGeometryMaxMinSquaredTolerance){return this;}const simplifiedGeometries=[];const geometries=this.geometries_;let simplified=false;for(let i=0,ii=geometries.length;i<ii;++i){const geometry=geometries[i];const simplifiedGeometry=geometry.getSimplifiedGeometry(squaredTolerance);simplifiedGeometries.push(simplifiedGeometry);if(simplifiedGeometry!==geometry){simplified=true;}}if(simplified){const simplifiedGeometryCollection=new GeometryCollection(null);simplifiedGeometryCollection.setGeometriesArray(simplifiedGeometries);return simplifiedGeometryCollection;}this.simplifiedGeometryMaxMinSquaredTolerance=squaredTolerance;return this;}getType(){return"GeometryCollection";}intersectsExtent(
extent){const geometries=this.geometries_;for(let i=0,ii=geometries.length;i<ii;++i){if(geometries[i].intersectsExtent(extent)){return true;}}return false;}isEmpty(){return this.geometries_.length===0;}rotate(angle,anchor){const geometries=this.geometries_;for(let i=0,ii=geometries.length;i<ii;++i){geometries[i].rotate(angle,anchor);}this.changed();}scale(sx,sy,anchor){if(!anchor){anchor=getCenter(this.getExtent());}const geometries=this.geometries_;for(let i=0,ii=geometries.length;i<ii;++i){geometries[i].scale(sx,sy,anchor);}this.changed();}setGeometries(geometries){this.setGeometriesArray(cloneGeometries(geometries));}setGeometriesArray(geometries){this.unlistenGeometriesChange_();this.geometries_=geometries;this.listenGeometriesChange_();this.changed();}applyTransform(transformFn){const geometries=this.geometries_;for(let i=0,ii=geometries.length;i<ii;++i){geometries[i].applyTransform(transformFn);}this.changed();}translate(deltaX,deltaY){const geometries=this.geometries_;for(let i=
0,ii=geometries.length;i<ii;++i){geometries[i].translate(deltaX,deltaY);}this.changed();}disposeInternal(){this.unlistenGeometriesChange_();super.disposeInternal();}}function cloneGeometries(geometries){const clonedGeometries=[];for(let i=0,ii=geometries.length;i<ii;++i){clonedGeometries.push(geometries[i].clone());}return clonedGeometries;}const GeometryCollection$1=GeometryCollection;class FeatureFormat{constructor(){this.dataProjection=void 0;this.defaultFeatureProjection=void 0;this.supportedMediaTypes=null;}getReadOptions(source,options){if(options){let dataProjection=options.dataProjection?get$1(options.dataProjection):this.readProjection(source);if(options.extent&&dataProjection&&dataProjection.getUnits()==="tile-pixels"){dataProjection=get$1(dataProjection);dataProjection.setWorldExtent(options.extent);}options={dataProjection,featureProjection:options.featureProjection};}return this.adaptOptions(options);}adaptOptions(options){return Object.assign({dataProjection:this.
dataProjection,featureProjection:this.defaultFeatureProjection},options);}getType(){return abstract();}readFeature(source,options){return abstract();}readFeatures(source,options){return abstract();}readGeometry(source,options){return abstract();}readProjection(source){return abstract();}writeFeature(feature,options){return abstract();}writeFeatures(features,options){return abstract();}writeGeometry(geometry,options){return abstract();}}function transformGeometryWithOptions(geometry,write,options){const featureProjection=options?get$1(options.featureProjection):null;const dataProjection=options?get$1(options.dataProjection):null;let transformed;if(featureProjection&&dataProjection&&!equivalent(featureProjection,dataProjection)){transformed=(write?geometry.clone():geometry).transform(write?featureProjection:dataProjection,write?dataProjection:featureProjection);}else{transformed=geometry;}if(write&&options&&options.decimals!==void 0){const power=Math.pow(10,options.decimals);const
transform2=function(coordinates2){for(let i=0,ii=coordinates2.length;i<ii;++i){coordinates2[i]=Math.round(coordinates2[i]*power)/power;}return coordinates2;};if(transformed===geometry){transformed=geometry.clone();}transformed.applyTransform(transform2);}return transformed;}class JSONFeature extends FeatureFormat{constructor(){super();}getType(){return"json";}readFeature(source,options){return this.readFeatureFromObject(getObject(source),this.getReadOptions(source,options));}readFeatures(source,options){return this.readFeaturesFromObject(getObject(source),this.getReadOptions(source,options));}readFeatureFromObject(object,options){return abstract();}readFeaturesFromObject(object,options){return abstract();}readGeometry(source,options){return this.readGeometryFromObject(getObject(source),this.getReadOptions(source,options));}readGeometryFromObject(object,options){return abstract();}readProjection(source){return this.readProjectionFromObject(getObject(source));}readProjectionFromObject(
object){return abstract();}writeFeature(feature,options){return JSON.stringify(this.writeFeatureObject(feature,options));}writeFeatureObject(feature,options){return abstract();}writeFeatures(features,options){return JSON.stringify(this.writeFeaturesObject(features,options));}writeFeaturesObject(features,options){return abstract();}writeGeometry(geometry,options){return JSON.stringify(this.writeGeometryObject(geometry,options));}writeGeometryObject(geometry,options){return abstract();}}function getObject(source){if(typeof source==="string"){const object=JSON.parse(source);return object?(object):null;}if(source!==null){return source;}return null;}const JSONFeature$1=JSONFeature;function interpolatePoint(flatCoordinates,offset,end,stride,fraction,dest,dimension){let o,t;const n=(end-offset)/stride;if(n===1){o=offset;}else if(n===2){o=offset;t=fraction;}else if(n!==0){let x1=flatCoordinates[offset];let y1=flatCoordinates[offset+1];let length=0;const cumulativeLengths=[0];for(let i=offset+
stride;i<end;i+=stride){const x2=flatCoordinates[i];const y2=flatCoordinates[i+1];length+=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));cumulativeLengths.push(length);x1=x2;y1=y2;}const target=fraction*length;const index=binarySearch(cumulativeLengths,target);if(index<0){t=(target-cumulativeLengths[-index-2])/(cumulativeLengths[-index-1]-cumulativeLengths[-index-2]);o=offset+(-index-2)*stride;}else{o=offset+index*stride;}}dimension=dimension>1?dimension:2;dest=dest?dest:new Array(dimension);for(let i=0;i<dimension;++i){dest[i]=o===void 0?NaN:t===void 0?flatCoordinates[o+i]:lerp(flatCoordinates[o+i],flatCoordinates[o+stride+i],t);}return dest;}function lineStringCoordinateAtM(flatCoordinates,offset,end,stride,m,extrapolate){if(end==offset){return null;}let coordinate;if(m<flatCoordinates[offset+stride-1]){if(extrapolate){coordinate=flatCoordinates.slice(offset,offset+stride);coordinate[stride-1]=m;return coordinate;}return null;}if(flatCoordinates[end-1]<m){if(extrapolate){coordinate=
flatCoordinates.slice(end-stride,end);coordinate[stride-1]=m;return coordinate;}return null;}if(m==flatCoordinates[offset+stride-1]){return flatCoordinates.slice(offset,offset+stride);}let lo=offset/stride;let hi=end/stride;while(lo<hi){const mid=lo+hi>>1;if(m<flatCoordinates[(mid+1)*stride-1]){hi=mid;}else{lo=mid+1;}}const m0=flatCoordinates[lo*stride-1];if(m==m0){return flatCoordinates.slice((lo-1)*stride,(lo-1)*stride+stride);}const m1=flatCoordinates[(lo+1)*stride-1];const t=(m-m0)/(m1-m0);coordinate=[];for(let i=0;i<stride-1;++i){coordinate.push(lerp(flatCoordinates[(lo-1)*stride+i],flatCoordinates[lo*stride+i],t));}coordinate.push(m);return coordinate;}function lineStringsCoordinateAtM(flatCoordinates,offset,ends,stride,m,extrapolate,interpolate){if(interpolate){return lineStringCoordinateAtM(flatCoordinates,offset,ends[ends.length-1],stride,m,extrapolate);}let coordinate;if(m<flatCoordinates[stride-1]){if(extrapolate){coordinate=flatCoordinates.slice(0,stride);coordinate[stride-
1]=m;return coordinate;}return null;}if(flatCoordinates[flatCoordinates.length-1]<m){if(extrapolate){coordinate=flatCoordinates.slice(flatCoordinates.length-stride);coordinate[stride-1]=m;return coordinate;}return null;}for(let i=0,ii=ends.length;i<ii;++i){const end=ends[i];if(offset==end){continue;}if(m<flatCoordinates[offset+stride-1]){return null;}if(m<=flatCoordinates[end-1]){return lineStringCoordinateAtM(flatCoordinates,offset,end,stride,m,false);}offset=end;}return null;}function lineStringLength(flatCoordinates,offset,end,stride){let x1=flatCoordinates[offset];let y1=flatCoordinates[offset+1];let length=0;for(let i=offset+stride;i<end;i+=stride){const x2=flatCoordinates[i];const y2=flatCoordinates[i+1];length+=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));x1=x2;y1=y2;}return length;}class LineString extends SimpleGeometry$1{constructor(coordinates2,layout){super();this.flatMidpoint_=null;this.flatMidpointRevision_=-1;this.maxDelta_=-1;this.maxDeltaRevision_=-1;if(layout!==void 0&&
!Array.isArray(coordinates2[0])){this.setFlatCoordinates(layout,coordinates2);}else{this.setCoordinates(coordinates2,layout);}}appendCoordinate(coordinate){if(!this.flatCoordinates){this.flatCoordinates=coordinate.slice();}else{extend$2(this.flatCoordinates,coordinate);}this.changed();}clone(){const lineString=new LineString(this.flatCoordinates.slice(),this.layout);lineString.applyProperties(this);return lineString;}closestPointXY(x,y,closestPoint,minSquaredDistance){if(minSquaredDistance<closestSquaredDistanceXY(this.getExtent(),x,y)){return minSquaredDistance;}if(this.maxDeltaRevision_!=this.getRevision()){this.maxDelta_=Math.sqrt(maxSquaredDelta(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,0));this.maxDeltaRevision_=this.getRevision();}return assignClosestPoint(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,this.maxDelta_,false,x,y,closestPoint,minSquaredDistance);}forEachSegment(callback){return forEach(this.flatCoordinates,0,this.flatCoordinates.
length,this.stride,callback);}getCoordinateAtM(m,extrapolate){if(this.layout!="XYM"&&this.layout!="XYZM"){return null;}extrapolate=extrapolate!==void 0?extrapolate:false;return lineStringCoordinateAtM(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,m,extrapolate);}getCoordinates(){return inflateCoordinates(this.flatCoordinates,0,this.flatCoordinates.length,this.stride);}getCoordinateAt(fraction,dest){return interpolatePoint(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,fraction,dest,this.stride);}getLength(){return lineStringLength(this.flatCoordinates,0,this.flatCoordinates.length,this.stride);}getFlatMidpoint(){if(this.flatMidpointRevision_!=this.getRevision()){this.flatMidpoint_=this.getCoordinateAt(0.5,this.flatMidpoint_);this.flatMidpointRevision_=this.getRevision();}return this.flatMidpoint_;}getSimplifiedGeometryInternal(squaredTolerance){const simplifiedFlatCoordinates=[];simplifiedFlatCoordinates.length=douglasPeucker(this.flatCoordinates,0,this
.flatCoordinates.length,this.stride,squaredTolerance,simplifiedFlatCoordinates,0);return new LineString(simplifiedFlatCoordinates,"XY");}getType(){return"LineString";}intersectsExtent(extent){return intersectsLineString(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,extent);}setCoordinates(coordinates2,layout){this.setLayout(layout,coordinates2,1);if(!this.flatCoordinates){this.flatCoordinates=[];}this.flatCoordinates.length=deflateCoordinates(this.flatCoordinates,0,coordinates2,this.stride);this.changed();}}const LineString$1=LineString;class MultiLineString extends SimpleGeometry$1{constructor(coordinates2,layout,ends){super();this.ends_=[];this.maxDelta_=-1;this.maxDeltaRevision_=-1;if(Array.isArray(coordinates2[0])){this.setCoordinates(coordinates2,layout);}else if(layout!==void 0&&ends){this.setFlatCoordinates(layout,coordinates2);this.ends_=ends;}else{let layout2=this.getLayout();const lineStrings=(coordinates2);const flatCoordinates=[];const ends2=[];for(let i=0,
ii=lineStrings.length;i<ii;++i){const lineString=lineStrings[i];if(i===0){layout2=lineString.getLayout();}extend$2(flatCoordinates,lineString.getFlatCoordinates());ends2.push(flatCoordinates.length);}this.setFlatCoordinates(layout2,flatCoordinates);this.ends_=ends2;}}appendLineString(lineString){if(!this.flatCoordinates){this.flatCoordinates=lineString.getFlatCoordinates().slice();}else{extend$2(this.flatCoordinates,lineString.getFlatCoordinates().slice());}this.ends_.push(this.flatCoordinates.length);this.changed();}clone(){const multiLineString=new MultiLineString(this.flatCoordinates.slice(),this.layout,this.ends_.slice());multiLineString.applyProperties(this);return multiLineString;}closestPointXY(x,y,closestPoint,minSquaredDistance){if(minSquaredDistance<closestSquaredDistanceXY(this.getExtent(),x,y)){return minSquaredDistance;}if(this.maxDeltaRevision_!=this.getRevision()){this.maxDelta_=Math.sqrt(arrayMaxSquaredDelta(this.flatCoordinates,0,this.ends_,this.stride,0));this.
maxDeltaRevision_=this.getRevision();}return assignClosestArrayPoint(this.flatCoordinates,0,this.ends_,this.stride,this.maxDelta_,false,x,y,closestPoint,minSquaredDistance);}getCoordinateAtM(m,extrapolate,interpolate){if(this.layout!="XYM"&&this.layout!="XYZM"||this.flatCoordinates.length===0){return null;}extrapolate=extrapolate!==void 0?extrapolate:false;interpolate=interpolate!==void 0?interpolate:false;return lineStringsCoordinateAtM(this.flatCoordinates,0,this.ends_,this.stride,m,extrapolate,interpolate);}getCoordinates(){return inflateCoordinatesArray(this.flatCoordinates,0,this.ends_,this.stride);}getEnds(){return this.ends_;}getLineString(index){if(index<0||this.ends_.length<=index){return null;}return new LineString$1(this.flatCoordinates.slice(index===0?0:this.ends_[index-1],this.ends_[index]),this.layout);}getLineStrings(){const flatCoordinates=this.flatCoordinates;const ends=this.ends_;const layout=this.layout;const lineStrings=[];let offset=0;for(let i=0,ii=ends.length;i<
ii;++i){const end=ends[i];const lineString=new LineString$1(flatCoordinates.slice(offset,end),layout);lineStrings.push(lineString);offset=end;}return lineStrings;}getFlatMidpoints(){const midpoints=[];const flatCoordinates=this.flatCoordinates;let offset=0;const ends=this.ends_;const stride=this.stride;for(let i=0,ii=ends.length;i<ii;++i){const end=ends[i];const midpoint=interpolatePoint(flatCoordinates,offset,end,stride,0.5);extend$2(midpoints,midpoint);offset=end;}return midpoints;}getSimplifiedGeometryInternal(squaredTolerance){const simplifiedFlatCoordinates=[];const simplifiedEnds=[];simplifiedFlatCoordinates.length=douglasPeuckerArray(this.flatCoordinates,0,this.ends_,this.stride,squaredTolerance,simplifiedFlatCoordinates,0,simplifiedEnds);return new MultiLineString(simplifiedFlatCoordinates,"XY",simplifiedEnds);}getType(){return"MultiLineString";}intersectsExtent(extent){return intersectsLineStringArray(this.flatCoordinates,0,this.ends_,this.stride,extent);}setCoordinates(
coordinates2,layout){this.setLayout(layout,coordinates2,2);if(!this.flatCoordinates){this.flatCoordinates=[];}const ends=deflateCoordinatesArray(this.flatCoordinates,0,coordinates2,this.stride,this.ends_);this.flatCoordinates.length=ends.length===0?0:ends[ends.length-1];this.changed();}}const MultiLineString$1=MultiLineString;class MultiPoint extends SimpleGeometry$1{constructor(coordinates2,layout){super();if(layout&&!Array.isArray(coordinates2[0])){this.setFlatCoordinates(layout,coordinates2);}else{this.setCoordinates(coordinates2,layout);}}appendPoint(point){if(!this.flatCoordinates){this.flatCoordinates=point.getFlatCoordinates().slice();}else{extend$2(this.flatCoordinates,point.getFlatCoordinates());}this.changed();}clone(){const multiPoint=new MultiPoint(this.flatCoordinates.slice(),this.layout);multiPoint.applyProperties(this);return multiPoint;}closestPointXY(x,y,closestPoint,minSquaredDistance){if(minSquaredDistance<closestSquaredDistanceXY(this.getExtent(),x,y)){return minSquaredDistance
;}const flatCoordinates=this.flatCoordinates;const stride=this.stride;for(let i=0,ii=flatCoordinates.length;i<ii;i+=stride){const squaredDistance$1=squaredDistance(x,y,flatCoordinates[i],flatCoordinates[i+1]);if(squaredDistance$1<minSquaredDistance){minSquaredDistance=squaredDistance$1;for(let j=0;j<stride;++j){closestPoint[j]=flatCoordinates[i+j];}closestPoint.length=stride;}}return minSquaredDistance;}getCoordinates(){return inflateCoordinates(this.flatCoordinates,0,this.flatCoordinates.length,this.stride);}getPoint(index){const n=!this.flatCoordinates?0:this.flatCoordinates.length/this.stride;if(index<0||n<=index){return null;}return new OlPoint(this.flatCoordinates.slice(index*this.stride,(index+1)*this.stride),this.layout);}getPoints(){const flatCoordinates=this.flatCoordinates;const layout=this.layout;const stride=this.stride;const points=[];for(let i=0,ii=flatCoordinates.length;i<ii;i+=stride){const point=new OlPoint(flatCoordinates.slice(i,i+stride),layout);points.push(point);}
return points;}getType(){return"MultiPoint";}intersectsExtent(extent){const flatCoordinates=this.flatCoordinates;const stride=this.stride;for(let i=0,ii=flatCoordinates.length;i<ii;i+=stride){const x=flatCoordinates[i];const y=flatCoordinates[i+1];if(containsXY(extent,x,y)){return true;}}return false;}setCoordinates(coordinates2,layout){this.setLayout(layout,coordinates2,1);if(!this.flatCoordinates){this.flatCoordinates=[];}this.flatCoordinates.length=deflateCoordinates(this.flatCoordinates,0,coordinates2,this.stride);this.changed();}}const MultiPoint$1=MultiPoint;function linearRingss(flatCoordinates,offset,endss,stride){const flatCenters=[];let extent=createEmpty();for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i];extent=createOrUpdateFromFlatCoordinates(flatCoordinates,offset,ends[0],stride);flatCenters.push((extent[0]+extent[2])/2,(extent[1]+extent[3])/2);offset=ends[ends.length-1];}return flatCenters;}class MultiPolygon extends SimpleGeometry$1{constructor(coordinates2,
layout,endss){super();this.endss_=[];this.flatInteriorPointsRevision_=-1;this.flatInteriorPoints_=null;this.maxDelta_=-1;this.maxDeltaRevision_=-1;this.orientedRevision_=-1;this.orientedFlatCoordinates_=null;if(!endss&&!Array.isArray(coordinates2[0])){let thisLayout=this.getLayout();const polygons=(coordinates2);const flatCoordinates=[];const thisEndss=[];for(let i=0,ii=polygons.length;i<ii;++i){const polygon=polygons[i];if(i===0){thisLayout=polygon.getLayout();}const offset=flatCoordinates.length;const ends=polygon.getEnds();for(let j=0,jj=ends.length;j<jj;++j){ends[j]+=offset;}extend$2(flatCoordinates,polygon.getFlatCoordinates());thisEndss.push(ends);}layout=thisLayout;coordinates2=flatCoordinates;endss=thisEndss;}if(layout!==void 0&&endss){this.setFlatCoordinates(layout,coordinates2);this.endss_=endss;}else{this.setCoordinates(coordinates2,layout);}}appendPolygon(polygon){let ends;if(!this.flatCoordinates){this.flatCoordinates=polygon.getFlatCoordinates().slice();ends=polygon.
getEnds().slice();this.endss_.push();}else{const offset=this.flatCoordinates.length;extend$2(this.flatCoordinates,polygon.getFlatCoordinates());ends=polygon.getEnds().slice();for(let i=0,ii=ends.length;i<ii;++i){ends[i]+=offset;}}this.endss_.push(ends);this.changed();}clone(){const len=this.endss_.length;const newEndss=new Array(len);for(let i=0;i<len;++i){newEndss[i]=this.endss_[i].slice();}const multiPolygon=new MultiPolygon(this.flatCoordinates.slice(),this.layout,newEndss);multiPolygon.applyProperties(this);return multiPolygon;}closestPointXY(x,y,closestPoint,minSquaredDistance){if(minSquaredDistance<closestSquaredDistanceXY(this.getExtent(),x,y)){return minSquaredDistance;}if(this.maxDeltaRevision_!=this.getRevision()){this.maxDelta_=Math.sqrt(multiArrayMaxSquaredDelta(this.flatCoordinates,0,this.endss_,this.stride,0));this.maxDeltaRevision_=this.getRevision();}return assignClosestMultiArrayPoint(this.getOrientedFlatCoordinates(),0,this.endss_,this.stride,this.maxDelta_,true,x,y,
closestPoint,minSquaredDistance);}containsXY(x,y){return linearRingssContainsXY(this.getOrientedFlatCoordinates(),0,this.endss_,this.stride,x,y);}getArea(){return linearRingss$1(this.getOrientedFlatCoordinates(),0,this.endss_,this.stride);}getCoordinates(right){let flatCoordinates;if(right!==void 0){flatCoordinates=this.getOrientedFlatCoordinates().slice();orientLinearRingsArray(flatCoordinates,0,this.endss_,this.stride,right);}else{flatCoordinates=this.flatCoordinates;}return inflateMultiCoordinatesArray(flatCoordinates,0,this.endss_,this.stride);}getEndss(){return this.endss_;}getFlatInteriorPoints(){if(this.flatInteriorPointsRevision_!=this.getRevision()){const flatCenters=linearRingss(this.flatCoordinates,0,this.endss_,this.stride);this.flatInteriorPoints_=getInteriorPointsOfMultiArray(this.getOrientedFlatCoordinates(),0,this.endss_,this.stride,flatCenters);this.flatInteriorPointsRevision_=this.getRevision();}return this.flatInteriorPoints_;}getInteriorPoints(){return new
MultiPoint$1(this.getFlatInteriorPoints().slice(),"XYM");}getOrientedFlatCoordinates(){if(this.orientedRevision_!=this.getRevision()){const flatCoordinates=this.flatCoordinates;if(linearRingssAreOriented(flatCoordinates,0,this.endss_,this.stride)){this.orientedFlatCoordinates_=flatCoordinates;}else{this.orientedFlatCoordinates_=flatCoordinates.slice();this.orientedFlatCoordinates_.length=orientLinearRingsArray(this.orientedFlatCoordinates_,0,this.endss_,this.stride);}this.orientedRevision_=this.getRevision();}return this.orientedFlatCoordinates_;}getSimplifiedGeometryInternal(squaredTolerance){const simplifiedFlatCoordinates=[];const simplifiedEndss=[];simplifiedFlatCoordinates.length=quantizeMultiArray(this.flatCoordinates,0,this.endss_,this.stride,Math.sqrt(squaredTolerance),simplifiedFlatCoordinates,0,simplifiedEndss);return new MultiPolygon(simplifiedFlatCoordinates,"XY",simplifiedEndss);}getPolygon(index){if(index<0||this.endss_.length<=index){return null;}let offset;if(index===0)
{offset=0;}else{const prevEnds=this.endss_[index-1];offset=prevEnds[prevEnds.length-1];}const ends=this.endss_[index].slice();const end=ends[ends.length-1];if(offset!==0){for(let i=0,ii=ends.length;i<ii;++i){ends[i]-=offset;}}return new Polygon$1(this.flatCoordinates.slice(offset,end),this.layout,ends);}getPolygons(){const layout=this.layout;const flatCoordinates=this.flatCoordinates;const endss=this.endss_;const polygons=[];let offset=0;for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i].slice();const end=ends[ends.length-1];if(offset!==0){for(let j=0,jj=ends.length;j<jj;++j){ends[j]-=offset;}}const polygon=new Polygon$1(flatCoordinates.slice(offset,end),layout,ends);polygons.push(polygon);offset=end;}return polygons;}getType(){return"MultiPolygon";}intersectsExtent(extent){return intersectsLinearRingMultiArray(this.getOrientedFlatCoordinates(),0,this.endss_,this.stride,extent);}setCoordinates(coordinates2,layout){this.setLayout(layout,coordinates2,3);if(!this.flatCoordinates){
this.flatCoordinates=[];}const endss=deflateMultiCoordinatesArray(this.flatCoordinates,0,coordinates2,this.stride,this.endss_);if(endss.length===0){this.flatCoordinates.length=0;}else{const lastEnds=endss[endss.length-1];this.flatCoordinates.length=lastEnds.length===0?0:lastEnds[lastEnds.length-1];}this.changed();}}const MultiPolygon$1=MultiPolygon;class GeoJSON extends JSONFeature$1{constructor(options){options=options?options:{};super();this.dataProjection=get$1(options.dataProjection?options.dataProjection:"EPSG:4326");if(options.featureProjection){this.defaultFeatureProjection=get$1(options.featureProjection);}this.geometryName_=options.geometryName;this.extractGeometryName_=options.extractGeometryName;this.supportedMediaTypes=["application/geo+json","application/vnd.geo+json"];}readFeatureFromObject(object,options){let geoJSONFeature=null;if(object["type"]==="Feature"){geoJSONFeature=object;}else{geoJSONFeature={"type":"Feature","geometry":(object),"properties":null};}const
geometry=readGeometry(geoJSONFeature["geometry"],options);const feature=new Feature$1();if(this.geometryName_){feature.setGeometryName(this.geometryName_);}else if(this.extractGeometryName_&&"geometry_name"in geoJSONFeature!==void 0){feature.setGeometryName(geoJSONFeature["geometry_name"]);}feature.setGeometry(geometry);if("id"in geoJSONFeature){feature.setId(geoJSONFeature["id"]);}if(geoJSONFeature["properties"]){feature.setProperties(geoJSONFeature["properties"],true);}return feature;}readFeaturesFromObject(object,options){const geoJSONObject=(object);let features=null;if(geoJSONObject["type"]==="FeatureCollection"){const geoJSONFeatureCollection=(object);features=[];const geoJSONFeatures=geoJSONFeatureCollection["features"];for(let i=0,ii=geoJSONFeatures.length;i<ii;++i){features.push(this.readFeatureFromObject(geoJSONFeatures[i],options));}}else{features=[this.readFeatureFromObject(object,options)];}return features;}readGeometryFromObject(object,options){return readGeometry(object,
options);}readProjectionFromObject(object){const crs=object["crs"];let projection;if(crs){if(crs["type"]=="name"){projection=get$1(crs["properties"]["name"]);}else if(crs["type"]==="EPSG"){projection=get$1("EPSG:"+crs["properties"]["code"]);}else{throw new Error("Unknown SRS type");}}else{projection=this.dataProjection;}return(projection);}writeFeatureObject(feature,options){options=this.adaptOptions(options);const object={"type":"Feature",geometry:null,properties:null};const id=feature.getId();if(id!==void 0){object.id=id;}if(!feature.hasProperties()){return object;}const properties=feature.getProperties();const geometry=feature.getGeometry();if(geometry){object.geometry=writeGeometry(geometry,options);delete properties[feature.getGeometryName()];}if(!isEmpty$1(properties)){object.properties=properties;}return object;}writeFeaturesObject(features,options){options=this.adaptOptions(options);const objects=[];for(let i=0,ii=features.length;i<ii;++i){objects.push(this.writeFeatureObject(
features[i],options));}return{type:"FeatureCollection",features:objects};}writeGeometryObject(geometry,options){return writeGeometry(geometry,this.adaptOptions(options));}}function readGeometry(object,options){if(!object){return null;}let geometry;switch(object["type"]){case"Point":{geometry=readPointGeometry(object);break;}case"LineString":{geometry=readLineStringGeometry(object);break;}case"Polygon":{geometry=readPolygonGeometry(object);break;}case"MultiPoint":{geometry=readMultiPointGeometry(object);break;}case"MultiLineString":{geometry=readMultiLineStringGeometry(object);break;}case"MultiPolygon":{geometry=readMultiPolygonGeometry(object);break;}case"GeometryCollection":{geometry=readGeometryCollectionGeometry(object);break;}default:{throw new Error("Unsupported GeoJSON type: "+object["type"]);}}return transformGeometryWithOptions(geometry,false,options);}function readGeometryCollectionGeometry(object,options){const geometries=object["geometries"].map(function(geometry){return readGeometry
(geometry,options);});return new GeometryCollection$1(geometries);}function readPointGeometry(object){return new OlPoint(object["coordinates"]);}function readLineStringGeometry(object){return new LineString$1(object["coordinates"]);}function readMultiLineStringGeometry(object){return new MultiLineString$1(object["coordinates"]);}function readMultiPointGeometry(object){return new MultiPoint$1(object["coordinates"]);}function readMultiPolygonGeometry(object){return new MultiPolygon$1(object["coordinates"]);}function readPolygonGeometry(object){return new Polygon$1(object["coordinates"]);}function writeGeometry(geometry,options){geometry=transformGeometryWithOptions(geometry,true,options);const type=geometry.getType();let geoJSON;switch(type){case"Point":{geoJSON=writePointGeometry(geometry);break;}case"LineString":{geoJSON=writeLineStringGeometry(geometry);break;}case"Polygon":{geoJSON=writePolygonGeometry(geometry,options);break;}case"MultiPoint":{geoJSON=writeMultiPointGeometry(
geometry);break;}case"MultiLineString":{geoJSON=writeMultiLineStringGeometry(geometry);break;}case"MultiPolygon":{geoJSON=writeMultiPolygonGeometry(geometry,options);break;}case"GeometryCollection":{geoJSON=writeGeometryCollectionGeometry(geometry,options);break;}case"Circle":{geoJSON={type:"GeometryCollection",geometries:[]};break;}default:{throw new Error("Unsupported geometry type: "+type);}}return geoJSON;}function writeGeometryCollectionGeometry(geometry,options){options=Object.assign({},options);delete options.featureProjection;const geometries=geometry.getGeometriesArray().map(function(geometry2){return writeGeometry(geometry2,options);});return{type:"GeometryCollection",geometries};}function writeLineStringGeometry(geometry,options){return{type:"LineString",coordinates:geometry.getCoordinates()};}function writeMultiLineStringGeometry(geometry,options){return{type:"MultiLineString",coordinates:geometry.getCoordinates()};}function writeMultiPointGeometry(geometry,options){return{
type:"MultiPoint",coordinates:geometry.getCoordinates()};}function writeMultiPolygonGeometry(geometry,options){let right;if(options){right=options.rightHanded;}return{type:"MultiPolygon",coordinates:geometry.getCoordinates(right)};}function writePointGeometry(geometry,options){return{type:"Point",coordinates:geometry.getCoordinates()};}function writePolygonGeometry(geometry,options){let right;if(options){right=options.rightHanded;}return{type:"Polygon",coordinates:geometry.getCoordinates(right)};}const OlGeoJson=GeoJSON;const Property$1={ELEMENT:"element",MAP:"map",OFFSET:"offset",POSITION:"position",POSITIONING:"positioning"};class Overlay extends BaseObject$1{constructor(options){super();this.on;this.once;this.un;this.options=options;this.id=options.id;this.insertFirst=options.insertFirst!==void 0?options.insertFirst:true;this.stopEvent=options.stopEvent!==void 0?options.stopEvent:true;this.element=document.createElement("div");this.element.className=options.className!==void 0?
options.className:"ol-overlay-container "+CLASS_SELECTABLE;this.element.style.position="absolute";this.element.style.pointerEvents="auto";this.autoPan=options.autoPan===true?{}:options.autoPan||void 0;this.rendered={transform_:"",visible:true};this.mapPostrenderListenerKey=null;this.addChangeListener(Property$1.ELEMENT,this.handleElementChanged);this.addChangeListener(Property$1.MAP,this.handleMapChanged);this.addChangeListener(Property$1.OFFSET,this.handleOffsetChanged);this.addChangeListener(Property$1.POSITION,this.handlePositionChanged);this.addChangeListener(Property$1.POSITIONING,this.handlePositioningChanged);if(options.element!==void 0){this.setElement(options.element);}this.setOffset(options.offset!==void 0?options.offset:[0,0]);this.setPositioning(options.positioning||"top-left");if(options.position!==void 0){this.setPosition(options.position);}}getElement(){return(this.get(Property$1.ELEMENT));}getId(){return this.id;}getMap(){return(this.get(Property$1.MAP)||null);}
getOffset(){return(this.get(Property$1.OFFSET));}getPosition(){return(this.get(Property$1.POSITION));}getPositioning(){return(this.get(Property$1.POSITIONING));}handleElementChanged(){removeChildren(this.element);const element=this.getElement();if(element){this.element.appendChild(element);}}handleMapChanged(){if(this.mapPostrenderListenerKey){removeNode(this.element);unlistenByKey(this.mapPostrenderListenerKey);this.mapPostrenderListenerKey=null;}const map=this.getMap();if(map){this.mapPostrenderListenerKey=listen(map,MapEventType.POSTRENDER,this.render,this);this.updatePixelPosition();const container=this.stopEvent?map.getOverlayContainerStopEvent():map.getOverlayContainer();if(this.insertFirst){container.insertBefore(this.element,container.childNodes[0]||null);}else{container.appendChild(this.element);}this.performAutoPan();}}render(){this.updatePixelPosition();}handleOffsetChanged(){this.updatePixelPosition();}handlePositionChanged(){this.updatePixelPosition();this.performAutoPan()
;}handlePositioningChanged(){this.updatePixelPosition();}setElement(element){this.set(Property$1.ELEMENT,element);}setMap(map){this.set(Property$1.MAP,map);}setOffset(offset){this.set(Property$1.OFFSET,offset);}setPosition(position){this.set(Property$1.POSITION,position);}performAutoPan(){if(this.autoPan){this.panIntoView(this.autoPan);}}panIntoView(panIntoViewOptions){const map=this.getMap();if(!map||!map.getTargetElement()||!this.get(Property$1.POSITION)){return;}const mapRect=this.getRect(map.getTargetElement(),map.getSize());const element=this.getElement();const overlayRect=this.getRect(element,[outerWidth(element),outerHeight(element)]);panIntoViewOptions=panIntoViewOptions||{};const myMargin=panIntoViewOptions.margin===void 0?20:panIntoViewOptions.margin;if(!containsExtent(mapRect,overlayRect)){const offsetLeft=overlayRect[0]-mapRect[0];const offsetRight=mapRect[2]-overlayRect[2];const offsetTop=overlayRect[1]-mapRect[1];const offsetBottom=mapRect[3]-overlayRect[3];const delta=[0
,0];if(offsetLeft<0){delta[0]=offsetLeft-myMargin;}else if(offsetRight<0){delta[0]=Math.abs(offsetRight)+myMargin;}if(offsetTop<0){delta[1]=offsetTop-myMargin;}else if(offsetBottom<0){delta[1]=Math.abs(offsetBottom)+myMargin;}if(delta[0]!==0||delta[1]!==0){const center=(map.getView().getCenterInternal());const centerPx=map.getPixelFromCoordinateInternal(center);if(!centerPx){return;}const newCenterPx=[centerPx[0]+delta[0],centerPx[1]+delta[1]];const panOptions=panIntoViewOptions.animation||{};map.getView().animateInternal({center:map.getCoordinateFromPixelInternal(newCenterPx),duration:panOptions.duration,easing:panOptions.easing});}}}getRect(element,size){const box=element.getBoundingClientRect();const offsetX=box.left+window.pageXOffset;const offsetY=box.top+window.pageYOffset;return[offsetX,offsetY,offsetX+size[0],offsetY+size[1]];}setPositioning(positioning){this.set(Property$1.POSITIONING,positioning);}setVisible(visible){if(this.rendered.visible!==visible){this.element.style.
display=visible?"":"none";this.rendered.visible=visible;}}updatePixelPosition(){const map=this.getMap();const position=this.getPosition();if(!map||!map.isRendered()||!position){this.setVisible(false);return;}const pixel=map.getPixelFromCoordinate(position);const mapSize=map.getSize();this.updateRenderedPosition(pixel,mapSize);}updateRenderedPosition(pixel,mapSize){const style=this.element.style;const offset=this.getOffset();const positioning=this.getPositioning();this.setVisible(true);const x=Math.round(pixel[0]+offset[0])+"px";const y=Math.round(pixel[1]+offset[1])+"px";let posX="0%";let posY="0%";if(positioning=="bottom-right"||positioning=="center-right"||positioning=="top-right"){posX="-100%";}else if(positioning=="bottom-center"||positioning=="center-center"||positioning=="top-center"){posX="-50%";}if(positioning=="bottom-left"||positioning=="bottom-center"||positioning=="bottom-right"){posY="-100%";}else if(positioning=="center-left"||positioning=="center-center"||positioning==
"center-right"){posY="-50%";}const transform2=`translate(${posX}, ${posY}) translate(${x}, ${y})`;if(this.rendered.transform_!=transform2){this.rendered.transform_=transform2;style.transform=transform2;}}getOptions(){return this.options;}}const OlOverlay=Overlay;function quickselect(arr,k,left,right,compare){quickselectStep(arr,k,left||0,right||arr.length-1,compare||defaultCompare);}function quickselectStep(arr,k,left,right,compare){while(right>left){if(right-left>600){var n=right-left+1;var m=k-left+1;var z=Math.log(n);var s=0.5*Math.exp(2*z/3);var sd=0.5*Math.sqrt(z*s*(n-s)/n)*(m-n/2<0?-1:1);var newLeft=Math.max(left,Math.floor(k-m*s/n+sd));var newRight=Math.min(right,Math.floor(k+(n-m)*s/n+sd));quickselectStep(arr,k,newLeft,newRight,compare);}var t=arr[k];var i=left;var j=right;swap(arr,left,k);if(compare(arr[right],t)>0)swap(arr,left,right);while(i<j){swap(arr,i,j);i++;j--;while(compare(arr[i],t)<0)i++;while(compare(arr[j],t)>0)j--;}if(compare(arr[left],t)===0)swap(arr,left,j);else
{j++;swap(arr,j,right);}if(j<=k)left=j+1;if(k<=j)right=j-1;}}function swap(arr,i,j){var tmp=arr[i];arr[i]=arr[j];arr[j]=tmp;}function defaultCompare(a,b){return a<b?-1:a>b?1:0;}let RBush$2=class RBush{constructor(maxEntries=9){this._maxEntries=Math.max(4,maxEntries);this._minEntries=Math.max(2,Math.ceil(this._maxEntries*0.4));this.clear();}all(){return this._all(this.data,[]);}search(bbox){let node=this.data;const result=[];if(!intersects(bbox,node))return result;const toBBox=this.toBBox;const nodesToSearch=[];while(node){for(let i=0;i<node.children.length;i++){const child=node.children[i];const childBBox=node.leaf?toBBox(child):child;if(intersects(bbox,childBBox)){if(node.leaf)result.push(child);else if(contains(bbox,childBBox))this._all(child,result);else nodesToSearch.push(child);}}node=nodesToSearch.pop();}return result;}collides(bbox){let node=this.data;if(!intersects(bbox,node))return false;const nodesToSearch=[];while(node){for(let i=0;i<node.children.length;i++){const child=
node.children[i];const childBBox=node.leaf?this.toBBox(child):child;if(intersects(bbox,childBBox)){if(node.leaf||contains(bbox,childBBox))return true;nodesToSearch.push(child);}}node=nodesToSearch.pop();}return false;}load(data){if(!(data&&data.length))return this;if(data.length<this._minEntries){for(let i=0;i<data.length;i++){this.insert(data[i]);}return this;}let node=this._build(data.slice(),0,data.length-1,0);if(!this.data.children.length){this.data=node;}else if(this.data.height===node.height){this._splitRoot(this.data,node);}else{if(this.data.height<node.height){const tmpNode=this.data;this.data=node;node=tmpNode;}this._insert(node,this.data.height-node.height-1,true);}return this;}insert(item){if(item)this._insert(item,this.data.height-1);return this;}clear(){this.data=createNode([]);return this;}remove(item,equalsFn){if(!item)return this;let node=this.data;const bbox=this.toBBox(item);const path=[];const indexes=[];let i,parent,goingUp;while(node||path.length){if(!node){node=
path.pop();parent=path[path.length-1];i=indexes.pop();goingUp=true;}if(node.leaf){const index=findItem(item,node.children,equalsFn);if(index!==-1){node.children.splice(index,1);path.push(node);this._condense(path);return this;}}if(!goingUp&&!node.leaf&&contains(node,bbox)){path.push(node);indexes.push(i);i=0;parent=node;node=node.children[0];}else if(parent){i++;node=parent.children[i];goingUp=false;}else node=null;}return this;}toBBox(item){return item;}compareMinX(a,b){return a.minX-b.minX;}compareMinY(a,b){return a.minY-b.minY;}toJSON(){return this.data;}fromJSON(data){this.data=data;return this;}_all(node,result){const nodesToSearch=[];while(node){if(node.leaf)result.push(...node.children);else nodesToSearch.push(...node.children);node=nodesToSearch.pop();}return result;}_build(items,left,right,height){const N=right-left+1;let M2=this._maxEntries;let node;if(N<=M2){node=createNode(items.slice(left,right+1));calcBBox(node,this.toBBox);return node;}if(!height){height=Math.ceil(Math.
log(N)/Math.log(M2));M2=Math.ceil(N/Math.pow(M2,height-1));}node=createNode([]);node.leaf=false;node.height=height;const N2=Math.ceil(N/M2);const N1=N2*Math.ceil(Math.sqrt(M2));multiSelect(items,left,right,N1,this.compareMinX);for(let i=left;i<=right;i+=N1){const right2=Math.min(i+N1-1,right);multiSelect(items,i,right2,N2,this.compareMinY);for(let j=i;j<=right2;j+=N2){const right3=Math.min(j+N2-1,right2);node.children.push(this._build(items,j,right3,height-1));}}calcBBox(node,this.toBBox);return node;}_chooseSubtree(bbox,node,level2,path){while(true){path.push(node);if(node.leaf||path.length-1===level2)break;let minArea=Infinity;let minEnlargement=Infinity;let targetNode;for(let i=0;i<node.children.length;i++){const child=node.children[i];const area=bboxArea(child);const enlargement=enlargedArea(bbox,child)-area;if(enlargement<minEnlargement){minEnlargement=enlargement;minArea=area<minArea?area:minArea;targetNode=child;}else if(enlargement===minEnlargement){if(area<minArea){minArea=
area;targetNode=child;}}}node=targetNode||node.children[0];}return node;}_insert(item,level2,isNode){const bbox=isNode?item:this.toBBox(item);const insertPath=[];const node=this._chooseSubtree(bbox,this.data,level2,insertPath);node.children.push(item);extend(node,bbox);while(level2>=0){if(insertPath[level2].children.length>this._maxEntries){this._split(insertPath,level2);level2--;}else break;}this._adjustParentBBoxes(bbox,insertPath,level2);}_split(insertPath,level2){const node=insertPath[level2];const M2=node.children.length;const m=this._minEntries;this._chooseSplitAxis(node,m,M2);const splitIndex=this._chooseSplitIndex(node,m,M2);const newNode=createNode(node.children.splice(splitIndex,node.children.length-splitIndex));newNode.height=node.height;newNode.leaf=node.leaf;calcBBox(node,this.toBBox);calcBBox(newNode,this.toBBox);if(level2)insertPath[level2-1].children.push(newNode);else this._splitRoot(node,newNode);}_splitRoot(node,newNode){this.data=createNode([node,newNode]);this.data
.height=node.height+1;this.data.leaf=false;calcBBox(this.data,this.toBBox);}_chooseSplitIndex(node,m,M2){let index;let minOverlap=Infinity;let minArea=Infinity;for(let i=m;i<=M2-m;i++){const bbox1=distBBox(node,0,i,this.toBBox);const bbox2=distBBox(node,i,M2,this.toBBox);const overlap=intersectionArea(bbox1,bbox2);const area=bboxArea(bbox1)+bboxArea(bbox2);if(overlap<minOverlap){minOverlap=overlap;index=i;minArea=area<minArea?area:minArea;}else if(overlap===minOverlap){if(area<minArea){minArea=area;index=i;}}}return index||M2-m;}_chooseSplitAxis(node,m,M2){const compareMinX=node.leaf?this.compareMinX:compareNodeMinX;const compareMinY=node.leaf?this.compareMinY:compareNodeMinY;const xMargin=this._allDistMargin(node,m,M2,compareMinX);const yMargin=this._allDistMargin(node,m,M2,compareMinY);if(xMargin<yMargin)node.children.sort(compareMinX);}_allDistMargin(node,m,M2,compare){node.children.sort(compare);const toBBox=this.toBBox;const leftBBox=distBBox(node,0,m,toBBox);const rightBBox=
distBBox(node,M2-m,M2,toBBox);let margin=bboxMargin(leftBBox)+bboxMargin(rightBBox);for(let i=m;i<M2-m;i++){const child=node.children[i];extend(leftBBox,node.leaf?toBBox(child):child);margin+=bboxMargin(leftBBox);}for(let i=M2-m-1;i>=m;i--){const child=node.children[i];extend(rightBBox,node.leaf?toBBox(child):child);margin+=bboxMargin(rightBBox);}return margin;}_adjustParentBBoxes(bbox,path,level2){for(let i=level2;i>=0;i--){extend(path[i],bbox);}}_condense(path){for(let i=path.length-1,siblings;i>=0;i--){if(path[i].children.length===0){if(i>0){siblings=path[i-1].children;siblings.splice(siblings.indexOf(path[i]),1);}else this.clear();}else calcBBox(path[i],this.toBBox);}}};function findItem(item,items,equalsFn){if(!equalsFn)return items.indexOf(item);for(let i=0;i<items.length;i++){if(equalsFn(item,items[i]))return i;}return-1;}function calcBBox(node,toBBox){distBBox(node,0,node.children.length,toBBox,node);}function distBBox(node,k,p,toBBox,destNode){if(!destNode)destNode=createNode(
null);destNode.minX=Infinity;destNode.minY=Infinity;destNode.maxX=-Infinity;destNode.maxY=-Infinity;for(let i=k;i<p;i++){const child=node.children[i];extend(destNode,node.leaf?toBBox(child):child);}return destNode;}function extend(a,b){a.minX=Math.min(a.minX,b.minX);a.minY=Math.min(a.minY,b.minY);a.maxX=Math.max(a.maxX,b.maxX);a.maxY=Math.max(a.maxY,b.maxY);return a;}function compareNodeMinX(a,b){return a.minX-b.minX;}function compareNodeMinY(a,b){return a.minY-b.minY;}function bboxArea(a){return(a.maxX-a.minX)*(a.maxY-a.minY);}function bboxMargin(a){return a.maxX-a.minX+(a.maxY-a.minY);}function enlargedArea(a,b){return(Math.max(b.maxX,a.maxX)-Math.min(b.minX,a.minX))*(Math.max(b.maxY,a.maxY)-Math.min(b.minY,a.minY));}function intersectionArea(a,b){const minX=Math.max(a.minX,b.minX);const minY=Math.max(a.minY,b.minY);const maxX=Math.min(a.maxX,b.maxX);const maxY=Math.min(a.maxY,b.maxY);return Math.max(0,maxX-minX)*Math.max(0,maxY-minY);}function contains(a,b){return a.minX<=b.minX&&a.
minY<=b.minY&&b.maxX<=a.maxX&&b.maxY<=a.maxY;}function intersects(a,b){return b.minX<=a.maxX&&b.minY<=a.maxY&&b.maxX>=a.minX&&b.maxY>=a.minY;}function createNode(children){return{children,height:1,leaf:true,minX:Infinity,minY:Infinity,maxX:-Infinity,maxY:-Infinity};}function multiSelect(arr,left,right,n,compare){const stack=[left,right];while(stack.length){right=stack.pop();left=stack.pop();if(right-left<=n)continue;const mid=left+Math.ceil((right-left)/n/2)*n;quickselect(arr,mid,left,right,compare);stack.push(left,mid,mid,right);}}class RBush2{constructor(maxEntries){this.rbush_=new RBush$2(maxEntries);this.items_={};}insert(extent,value){const item={minX:extent[0],minY:extent[1],maxX:extent[2],maxY:extent[3],value};this.rbush_.insert(item);this.items_[getUid(value)]=item;}load(extents,values){const items=new Array(values.length);for(let i=0,l=values.length;i<l;i++){const extent=extents[i];const value=values[i];const item={minX:extent[0],minY:extent[1],maxX:extent[2],maxY:extent[3],
value};items[i]=item;this.items_[getUid(value)]=item;}this.rbush_.load(items);}remove(value){const uid=getUid(value);const item=this.items_[uid];delete this.items_[uid];return this.rbush_.remove(item)!==null;}update(extent,value){const item=this.items_[getUid(value)];const bbox=[item.minX,item.minY,item.maxX,item.maxY];if(!equals$1(bbox,extent)){this.remove(value);this.insert(extent,value);}}getAll(){const items=this.rbush_.all();return items.map(function(item){return item.value;});}getInExtent(extent){const bbox={minX:extent[0],minY:extent[1],maxX:extent[2],maxY:extent[3]};const items=this.rbush_.search(bbox);return items.map(function(item){return item.value;});}forEach(callback){return this.forEach_(this.getAll(),callback);}forEachInExtent(extent,callback){return this.forEach_(this.getInExtent(extent),callback);}forEach_(values,callback){let result;for(let i=0,l=values.length;i<l;i++){result=callback(values[i]);if(result){return result;}}return result;}isEmpty(){return isEmpty$1(this
.items_);}clear(){this.rbush_.clear();this.items_={};}getExtent(extent){const data=this.rbush_.toJSON();return createOrUpdate$2(data.minX,data.minY,data.maxX,data.maxY,extent);}concat(rbush){this.rbush_.load(rbush.rbush_.all());for(const i in rbush.items_){this.items_[i]=rbush.items_[i];}}}const RBush$1=RBush2;class Source extends BaseObject$1{constructor(options){super();this.projection=get$1(options.projection);this.attributions_=adaptAttributions(options.attributions);this.attributionsCollapsible_=options.attributionsCollapsible!==void 0?options.attributionsCollapsible:true;this.loading=false;this.state_=options.state!==void 0?options.state:"ready";this.wrapX_=options.wrapX!==void 0?options.wrapX:false;this.interpolate_=!!options.interpolate;this.viewResolver=null;this.viewRejector=null;const self2=this;this.viewPromise_=new Promise(function(resolve,reject){self2.viewResolver=resolve;self2.viewRejector=reject;});}getAttributions(){return this.attributions_;}
getAttributionsCollapsible(){return this.attributionsCollapsible_;}getProjection(){return this.projection;}getResolutions(projection){return null;}getView(){return this.viewPromise_;}getState(){return this.state_;}getWrapX(){return this.wrapX_;}getInterpolate(){return this.interpolate_;}refresh(){this.changed();}setAttributions(attributions){this.attributions_=adaptAttributions(attributions);this.changed();}setState(state){this.state_=state;this.changed();}}function adaptAttributions(attributionLike){if(!attributionLike){return null;}if(Array.isArray(attributionLike)){return function(frameState){return attributionLike;};}if(typeof attributionLike==="function"){return attributionLike;}return function(frameState){return[attributionLike];};}const Source$1=Source;const VectorEventType={ADDFEATURE:"addfeature",CHANGEFEATURE:"changefeature",CLEAR:"clear",REMOVEFEATURE:"removefeature",FEATURESLOADSTART:"featuresloadstart",FEATURESLOADEND:"featuresloadend",FEATURESLOADERROR:"featuresloaderror"
};function all(extent,resolution){return[[-Infinity,-Infinity,Infinity,Infinity]];}let withCredentials=false;function loadFeaturesXhr(url,format,extent,resolution,projection,success,failure){const xhr2=new XMLHttpRequest();xhr2.open("GET",typeof url==="function"?url(extent,resolution,projection):url,true);if(format.getType()=="arraybuffer"){xhr2.responseType="arraybuffer";}xhr2.withCredentials=withCredentials;xhr2.onload=function(event){if(!xhr2.status||xhr2.status>=200&&xhr2.status<300){const type=format.getType();let source;if(type=="json"||type=="text"){source=xhr2.responseText;}else if(type=="xml"){source=xhr2.responseXML;if(!source){source=new DOMParser().parseFromString(xhr2.responseText,"application/xml");}}else if(type=="arraybuffer"){source=xhr2.response;}if(source){success(format.readFeatures(source,{extent,featureProjection:projection}),format.readProjection(source));}else{failure();}}else{failure();}};xhr2.onerror=failure;xhr2.send();}function xhr(url,format){return function
(extent,resolution,projection,success,failure){const source=(this);loadFeaturesXhr(url,format,extent,resolution,projection,function(features,dataProjection){source.addFeatures(features);if(success!==void 0){success(features);}},failure?failure:VOID);};}class VectorSourceEvent extends Event{constructor(type,feature,features){super(type);this.feature=feature;this.features=features;}}class VectorSource extends Source$1{constructor(options){options=options||{};super({attributions:options.attributions,interpolate:true,projection:void 0,state:"ready",wrapX:options.wrapX!==void 0?options.wrapX:true});this.on;this.once;this.un;this.loader_=VOID;this.format_=options.format;this.overlaps_=options.overlaps===void 0?true:options.overlaps;this.url_=options.url;if(options.loader!==void 0){this.loader_=options.loader;}else if(this.url_!==void 0){assert(this.format_,"`format` must be set when `url` is set");this.loader_=xhr(this.url_,this.format_);}this.strategy_=options.strategy!==void 0?options.
strategy:all;const useSpatialIndex=options.useSpatialIndex!==void 0?options.useSpatialIndex:true;this.featuresRtree_=useSpatialIndex?new RBush$1():null;this.loadedExtentsRtree_=new RBush$1();this.loadingExtentsCount_=0;this.nullGeometryFeatures_={};this.idIndex_={};this.uidIndex_={};this.featureChangeKeys_={};this.featuresCollection_=null;let collection;let features;if(Array.isArray(options.features)){features=options.features;}else if(options.features){collection=options.features;features=collection.getArray();}if(!useSpatialIndex&&collection===void 0){collection=new Collection$1(features);}if(features!==void 0){this.addFeaturesInternal(features);}if(collection!==void 0){this.bindFeaturesCollection_(collection);}}addFeature(feature){this.addFeatureInternal(feature);this.changed();}addFeatureInternal(feature){const featureKey=getUid(feature);if(!this.addToIndex_(featureKey,feature)){if(this.featuresCollection_){this.featuresCollection_.remove(feature);}return;}this.setupChangeEvents_(
featureKey,feature);const geometry=feature.getGeometry();if(geometry){const extent=geometry.getExtent();if(this.featuresRtree_){this.featuresRtree_.insert(extent,feature);}}else{this.nullGeometryFeatures_[featureKey]=feature;}this.dispatchEvent(new VectorSourceEvent(VectorEventType.ADDFEATURE,feature));}setupChangeEvents_(featureKey,feature){this.featureChangeKeys_[featureKey]=[listen(feature,EventType.CHANGE,this.handleFeatureChange_,this),listen(feature,ObjectEventType.PROPERTYCHANGE,this.handleFeatureChange_,this)];}addToIndex_(featureKey,feature){let valid=true;const id=feature.getId();if(id!==void 0){if(!(id.toString()in this.idIndex_)){this.idIndex_[id.toString()]=feature;}else{valid=false;}}if(valid){assert(!(featureKey in this.uidIndex_),"The passed `feature` was already added to the source");this.uidIndex_[featureKey]=feature;}return valid;}addFeatures(features){this.addFeaturesInternal(features);this.changed();}addFeaturesInternal(features){const extents=[];const newFeatures=
[];const geometryFeatures=[];for(let i=0,length=features.length;i<length;i++){const feature=features[i];const featureKey=getUid(feature);if(this.addToIndex_(featureKey,feature)){newFeatures.push(feature);}}for(let i=0,length=newFeatures.length;i<length;i++){const feature=newFeatures[i];const featureKey=getUid(feature);this.setupChangeEvents_(featureKey,feature);const geometry=feature.getGeometry();if(geometry){const extent=geometry.getExtent();extents.push(extent);geometryFeatures.push(feature);}else{this.nullGeometryFeatures_[featureKey]=feature;}}if(this.featuresRtree_){this.featuresRtree_.load(extents,geometryFeatures);}if(this.hasListener(VectorEventType.ADDFEATURE)){for(let i=0,length=newFeatures.length;i<length;i++){this.dispatchEvent(new VectorSourceEvent(VectorEventType.ADDFEATURE,newFeatures[i]));}}}bindFeaturesCollection_(collection){let modifyingCollection=false;this.addEventListener(VectorEventType.ADDFEATURE,function(evt){if(!modifyingCollection){modifyingCollection=true;
collection.push(evt.feature);modifyingCollection=false;}});this.addEventListener(VectorEventType.REMOVEFEATURE,function(evt){if(!modifyingCollection){modifyingCollection=true;collection.remove(evt.feature);modifyingCollection=false;}});collection.addEventListener(CollectionEventType.ADD,(evt)=>{if(!modifyingCollection){modifyingCollection=true;this.addFeature(evt.element);modifyingCollection=false;}});collection.addEventListener(CollectionEventType.REMOVE,(evt)=>{if(!modifyingCollection){modifyingCollection=true;this.removeFeature(evt.element);modifyingCollection=false;}});this.featuresCollection_=collection;}clear(fast){if(fast){for(const featureId in this.featureChangeKeys_){const keys=this.featureChangeKeys_[featureId];keys.forEach(unlistenByKey);}if(!this.featuresCollection_){this.featureChangeKeys_={};this.idIndex_={};this.uidIndex_={};}}else{if(this.featuresRtree_){const removeAndIgnoreReturn=(feature)=>{this.removeFeatureInternal(feature);};this.featuresRtree_.forEach(
removeAndIgnoreReturn);for(const id in this.nullGeometryFeatures_){this.removeFeatureInternal(this.nullGeometryFeatures_[id]);}}}if(this.featuresCollection_){this.featuresCollection_.clear();}if(this.featuresRtree_){this.featuresRtree_.clear();}this.nullGeometryFeatures_={};const clearEvent=new VectorSourceEvent(VectorEventType.CLEAR);this.dispatchEvent(clearEvent);this.changed();}forEachFeature(callback){if(this.featuresRtree_){return this.featuresRtree_.forEach(callback);}if(this.featuresCollection_){this.featuresCollection_.forEach(callback);}}forEachFeatureAtCoordinateDirect(coordinate,callback){const extent=[coordinate[0],coordinate[1],coordinate[0],coordinate[1]];return this.forEachFeatureInExtent(extent,function(feature){const geometry=feature.getGeometry();if(geometry.intersectsCoordinate(coordinate)){return callback(feature);}return void 0;});}forEachFeatureInExtent(extent,callback){if(this.featuresRtree_){return this.featuresRtree_.forEachInExtent(extent,callback);}if(this.
featuresCollection_){this.featuresCollection_.forEach(callback);}}forEachFeatureIntersectingExtent(extent,callback){return this.forEachFeatureInExtent(extent,function(feature){const geometry=feature.getGeometry();if(geometry.intersectsExtent(extent)){const result=callback(feature);if(result){return result;}}});}getFeaturesCollection(){return this.featuresCollection_;}getFeatures(){let features;if(this.featuresCollection_){features=this.featuresCollection_.getArray().slice(0);}else if(this.featuresRtree_){features=this.featuresRtree_.getAll();if(!isEmpty$1(this.nullGeometryFeatures_)){extend$2(features,Object.values(this.nullGeometryFeatures_));}}return(features);}getFeaturesAtCoordinate(coordinate){const features=[];this.forEachFeatureAtCoordinateDirect(coordinate,function(feature){features.push(feature);});return features;}getFeaturesInExtent(extent,projection){if(this.featuresRtree_){const multiWorld=projection&&projection.canWrapX()&&this.getWrapX();if(!multiWorld){return this.
featuresRtree_.getInExtent(extent);}const extents=wrapAndSliceX(extent,projection);return[].concat(...extents.map((anExtent)=>this.featuresRtree_.getInExtent(anExtent)));}if(this.featuresCollection_){return this.featuresCollection_.getArray().slice(0);}return[];}getClosestFeatureToCoordinate(coordinate,filter){const x=coordinate[0];const y=coordinate[1];let closestFeature=null;const closestPoint=[NaN,NaN];let minSquaredDistance=Infinity;const extent=[-Infinity,-Infinity,Infinity,Infinity];filter=filter?filter:TRUE;this.featuresRtree_.forEachInExtent(extent,function(feature){if(filter(feature)){const geometry=feature.getGeometry();const previousMinSquaredDistance=minSquaredDistance;minSquaredDistance=geometry.closestPointXY(x,y,closestPoint,minSquaredDistance);if(minSquaredDistance<previousMinSquaredDistance){closestFeature=feature;const minDistance=Math.sqrt(minSquaredDistance);extent[0]=x-minDistance;extent[1]=y-minDistance;extent[2]=x+minDistance;extent[3]=y+minDistance;}}});return closestFeature
;}getExtent(extent){return this.featuresRtree_.getExtent(extent);}getFeatureById(id){const feature=this.idIndex_[id.toString()];return feature!==void 0?feature:null;}getFeatureByUid(uid){const feature=this.uidIndex_[uid];return feature!==void 0?feature:null;}getFormat(){return this.format_;}getOverlaps(){return this.overlaps_;}getUrl(){return this.url_;}handleFeatureChange_(event){const feature=(event.target);const featureKey=getUid(feature);const geometry=feature.getGeometry();if(!geometry){if(!(featureKey in this.nullGeometryFeatures_)){if(this.featuresRtree_){this.featuresRtree_.remove(feature);}this.nullGeometryFeatures_[featureKey]=feature;}}else{const extent=geometry.getExtent();if(featureKey in this.nullGeometryFeatures_){delete this.nullGeometryFeatures_[featureKey];if(this.featuresRtree_){this.featuresRtree_.insert(extent,feature);}}else{if(this.featuresRtree_){this.featuresRtree_.update(extent,feature);}}}const id=feature.getId();if(id!==void 0){const sid=id.toString();if(
this.idIndex_[sid]!==feature){this.removeFromIdIndex_(feature);this.idIndex_[sid]=feature;}}else{this.removeFromIdIndex_(feature);this.uidIndex_[featureKey]=feature;}this.changed();this.dispatchEvent(new VectorSourceEvent(VectorEventType.CHANGEFEATURE,feature));}hasFeature(feature){const id=feature.getId();if(id!==void 0){return id in this.idIndex_;}return getUid(feature)in this.uidIndex_;}isEmpty(){if(this.featuresRtree_){return this.featuresRtree_.isEmpty()&&isEmpty$1(this.nullGeometryFeatures_);}if(this.featuresCollection_){return this.featuresCollection_.getLength()===0;}return true;}loadFeatures(extent,resolution,projection){const loadedExtentsRtree=this.loadedExtentsRtree_;const extentsToLoad=this.strategy_(extent,resolution,projection);for(let i=0,ii=extentsToLoad.length;i<ii;++i){const extentToLoad=extentsToLoad[i];const alreadyLoaded=loadedExtentsRtree.forEachInExtent(extentToLoad,function(object){return containsExtent(object.extent,extentToLoad);});if(!alreadyLoaded){++this.
loadingExtentsCount_;this.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADSTART));this.loader_.call(this,extentToLoad,resolution,projection,(features)=>{--this.loadingExtentsCount_;this.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADEND,void 0,features));},()=>{--this.loadingExtentsCount_;this.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADERROR));});loadedExtentsRtree.insert(extentToLoad,{extent:extentToLoad.slice()});}}this.loading=this.loader_.length<4?false:this.loadingExtentsCount_>0;}refresh(){this.clear(true);this.loadedExtentsRtree_.clear();super.refresh();}removeLoadedExtent(extent){const loadedExtentsRtree=this.loadedExtentsRtree_;let obj;loadedExtentsRtree.forEachInExtent(extent,function(object){if(equals$1(object.extent,extent)){obj=object;return true;}});if(obj){loadedExtentsRtree.remove(obj);}}removeFeature(feature){if(!feature){return;}const featureKey=getUid(feature);if(featureKey in this.nullGeometryFeatures_){delete
this.nullGeometryFeatures_[featureKey];}else{if(this.featuresRtree_){this.featuresRtree_.remove(feature);}}const result=this.removeFeatureInternal(feature);if(result){this.changed();}}removeFeatureInternal(feature){const featureKey=getUid(feature);const featureChangeKeys=this.featureChangeKeys_[featureKey];if(!featureChangeKeys){return;}featureChangeKeys.forEach(unlistenByKey);delete this.featureChangeKeys_[featureKey];const id=feature.getId();if(id!==void 0){delete this.idIndex_[id.toString()];}delete this.uidIndex_[featureKey];this.dispatchEvent(new VectorSourceEvent(VectorEventType.REMOVEFEATURE,feature));return feature;}removeFromIdIndex_(feature){let removed=false;for(const id in this.idIndex_){if(this.idIndex_[id]===feature){delete this.idIndex_[id];removed=true;break;}}return removed;}setLoader(loader){this.loader_=loader;}setUrl(url){assert(this.format_,"`format` must be set when `url` is set");this.url_=url;this.setLoader(xhr(url,this.format_));}}const OlSourceVector=
VectorSource;class Tile extends EventTarget{constructor(tileCoord,state,options){super();options=options?options:{};this.tileCoord=tileCoord;this.state=state;this.interimTile=null;this.key="";this.transition_=options.transition===void 0?250:options.transition;this.transitionStarts_={};this.interpolate=!!options.interpolate;}changed(){this.dispatchEvent(EventType.CHANGE);}release(){if(this.state===TileState.ERROR){this.setState(TileState.EMPTY);}}getKey(){return this.key+"/"+this.tileCoord;}getInterimTile(){if(!this.interimTile){return this;}let tile=this.interimTile;do{if(tile.getState()==TileState.LOADED){this.transition_=0;return tile;}tile=tile.interimTile;}while(tile);return this;}refreshInterimChain(){if(!this.interimTile){return;}let tile=this.interimTile;let prev=this;do{if(tile.getState()==TileState.LOADED){tile.interimTile=null;break;}else if(tile.getState()==TileState.LOADING){prev=tile;}else if(tile.getState()==TileState.IDLE){prev.interimTile=tile.interimTile;}else{prev=
tile;}tile=prev.interimTile;}while(tile);}getTileCoord(){return this.tileCoord;}getState(){return this.state;}setState(state){if(this.state!==TileState.ERROR&&this.state>state){throw new Error("Tile load sequence violation");}this.state=state;this.changed();}load(){abstract();}getAlpha(id,time){if(!this.transition_){return 1;}let start=this.transitionStarts_[id];if(!start){start=time;this.transitionStarts_[id]=start;}else if(start===-1){return 1;}const delta=time-start+1e3/60;if(delta>=this.transition_){return 1;}return easeIn(delta/this.transition_);}inTransition(id){if(!this.transition_){return false;}return this.transitionStarts_[id]!==-1;}endTransition(id){if(this.transition_){this.transitionStarts_[id]=-1;}}}const Tile$1=Tile;class ImageTile extends Tile$1{constructor(tileCoord,state,src,crossOrigin,tileLoadFunction,options){super(tileCoord,state,options);this.crossOrigin_=crossOrigin;this.src_=src;this.key=src;this.image_=new Image();if(crossOrigin!==null){this.image_.crossOrigin
=crossOrigin;}this.unlisten_=null;this.tileLoadFunction_=tileLoadFunction;}getImage(){return this.image_;}setImage(element){this.image_=element;this.state=TileState.LOADED;this.unlistenImage_();this.changed();}handleImageError_(){this.state=TileState.ERROR;this.unlistenImage_();this.image_=getBlankImage();this.changed();}handleImageLoad_(){const image=(this.image_);if(image.naturalWidth&&image.naturalHeight){this.state=TileState.LOADED;}else{this.state=TileState.EMPTY;}this.unlistenImage_();this.changed();}load(){if(this.state==TileState.ERROR){this.state=TileState.IDLE;this.image_=new Image();if(this.crossOrigin_!==null){this.image_.crossOrigin=this.crossOrigin_;}}if(this.state==TileState.IDLE){this.state=TileState.LOADING;this.changed();this.tileLoadFunction_(this,this.src_);this.unlisten_=listenImage(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this));}}unlistenImage_(){if(this.unlisten_){this.unlisten_();this.unlisten_=null;}}}function getBlankImage(){
const ctx=createCanvasContext2D(1,1);ctx.fillStyle="rgba(0,0,0,0)";ctx.fillRect(0,0,1,1);return ctx.canvas;}const ImageTile$1=ImageTile;const ERROR_THRESHOLD=0.5;const MAX_SUBDIVISION=10;const MAX_TRIANGLE_WIDTH=0.25;class Triangulation{constructor(sourceProj,targetProj,targetExtent,maxSourceExtent,errorThreshold,destinationResolution){this.sourceProj_=sourceProj;this.targetProj_=targetProj;let transformInvCache={};const transformInv=getTransform(this.targetProj_,this.sourceProj_);this.transformInv_=function(c){const key=c[0]+"/"+c[1];if(!transformInvCache[key]){transformInvCache[key]=transformInv(c);}return transformInvCache[key];};this.maxSourceExtent_=maxSourceExtent;this.errorThresholdSquared_=errorThreshold*errorThreshold;this.triangles_=[];this.wrapsXInSource_=false;this.canWrapXInSource_=this.sourceProj_.canWrapX()&&!!maxSourceExtent&&!!this.sourceProj_.getExtent()&&getWidth(maxSourceExtent)>=getWidth(this.sourceProj_.getExtent());this.sourceWorldWidth_=this.sourceProj_.
getExtent()?getWidth(this.sourceProj_.getExtent()):null;this.targetWorldWidth_=this.targetProj_.getExtent()?getWidth(this.targetProj_.getExtent()):null;const destinationTopLeft=getTopLeft(targetExtent);const destinationTopRight=getTopRight(targetExtent);const destinationBottomRight=getBottomRight(targetExtent);const destinationBottomLeft=getBottomLeft(targetExtent);const sourceTopLeft=this.transformInv_(destinationTopLeft);const sourceTopRight=this.transformInv_(destinationTopRight);const sourceBottomRight=this.transformInv_(destinationBottomRight);const sourceBottomLeft=this.transformInv_(destinationBottomLeft);const maxSubdivision=MAX_SUBDIVISION+(destinationResolution?Math.max(0,Math.ceil(Math.log2(getArea(targetExtent)/(destinationResolution*destinationResolution*256*256)))):0);this.addQuad_(destinationTopLeft,destinationTopRight,destinationBottomRight,destinationBottomLeft,sourceTopLeft,sourceTopRight,sourceBottomRight,sourceBottomLeft,maxSubdivision);if(this.wrapsXInSource_){let
leftBound=Infinity;this.triangles_.forEach(function(triangle,i,arr){leftBound=Math.min(leftBound,triangle.source[0][0],triangle.source[1][0],triangle.source[2][0]);});this.triangles_.forEach((triangle)=>{if(Math.max(triangle.source[0][0],triangle.source[1][0],triangle.source[2][0])-leftBound>this.sourceWorldWidth_/2){const newTriangle=[[triangle.source[0][0],triangle.source[0][1]],[triangle.source[1][0],triangle.source[1][1]],[triangle.source[2][0],triangle.source[2][1]]];if(newTriangle[0][0]-leftBound>this.sourceWorldWidth_/2){newTriangle[0][0]-=this.sourceWorldWidth_;}if(newTriangle[1][0]-leftBound>this.sourceWorldWidth_/2){newTriangle[1][0]-=this.sourceWorldWidth_;}if(newTriangle[2][0]-leftBound>this.sourceWorldWidth_/2){newTriangle[2][0]-=this.sourceWorldWidth_;}const minX=Math.min(newTriangle[0][0],newTriangle[1][0],newTriangle[2][0]);const maxX=Math.max(newTriangle[0][0],newTriangle[1][0],newTriangle[2][0]);if(maxX-minX<this.sourceWorldWidth_/2){triangle.source=newTriangle;}}});}
transformInvCache={};}addTriangle_(a,b,c,aSrc,bSrc,cSrc){this.triangles_.push({source:[aSrc,bSrc,cSrc],target:[a,b,c]});}addQuad_(a,b,c,d,aSrc,bSrc,cSrc,dSrc,maxSubdivision){const sourceQuadExtent=boundingExtent([aSrc,bSrc,cSrc,dSrc]);const sourceCoverageX=this.sourceWorldWidth_?getWidth(sourceQuadExtent)/this.sourceWorldWidth_:null;const sourceWorldWidth=(this.sourceWorldWidth_);const wrapsX=this.sourceProj_.canWrapX()&&sourceCoverageX>0.5&&sourceCoverageX<1;let needsSubdivision=false;if(maxSubdivision>0){if(this.targetProj_.isGlobal()&&this.targetWorldWidth_){const targetQuadExtent=boundingExtent([a,b,c,d]);const targetCoverageX=getWidth(targetQuadExtent)/this.targetWorldWidth_;needsSubdivision=targetCoverageX>MAX_TRIANGLE_WIDTH||needsSubdivision;}if(!wrapsX&&this.sourceProj_.isGlobal()&&sourceCoverageX){needsSubdivision=sourceCoverageX>MAX_TRIANGLE_WIDTH||needsSubdivision;}}if(!needsSubdivision&&this.maxSourceExtent_){if(isFinite(sourceQuadExtent[0])&&isFinite(sourceQuadExtent[1])&&
isFinite(sourceQuadExtent[2])&&isFinite(sourceQuadExtent[3])){if(!intersects$1(sourceQuadExtent,this.maxSourceExtent_)){return;}}}let isNotFinite=0;if(!needsSubdivision){if(!isFinite(aSrc[0])||!isFinite(aSrc[1])||!isFinite(bSrc[0])||!isFinite(bSrc[1])||!isFinite(cSrc[0])||!isFinite(cSrc[1])||!isFinite(dSrc[0])||!isFinite(dSrc[1])){if(maxSubdivision>0){needsSubdivision=true;}else{isNotFinite=(!isFinite(aSrc[0])||!isFinite(aSrc[1])?8:0)+(!isFinite(bSrc[0])||!isFinite(bSrc[1])?4:0)+(!isFinite(cSrc[0])||!isFinite(cSrc[1])?2:0)+(!isFinite(dSrc[0])||!isFinite(dSrc[1])?1:0);if(isNotFinite!=1&&isNotFinite!=2&&isNotFinite!=4&&isNotFinite!=8){return;}}}}if(maxSubdivision>0){if(!needsSubdivision){const center=[(a[0]+c[0])/2,(a[1]+c[1])/2];const centerSrc=this.transformInv_(center);let dx;if(wrapsX){const centerSrcEstimX=(modulo(aSrc[0],sourceWorldWidth)+modulo(cSrc[0],sourceWorldWidth))/2;dx=centerSrcEstimX-modulo(centerSrc[0],sourceWorldWidth);}else{dx=(aSrc[0]+cSrc[0])/2-centerSrc[0];}const dy=
(aSrc[1]+cSrc[1])/2-centerSrc[1];const centerSrcErrorSquared=dx*dx+dy*dy;needsSubdivision=centerSrcErrorSquared>this.errorThresholdSquared_;}if(needsSubdivision){if(Math.abs(a[0]-c[0])<=Math.abs(a[1]-c[1])){const bc=[(b[0]+c[0])/2,(b[1]+c[1])/2];const bcSrc=this.transformInv_(bc);const da=[(d[0]+a[0])/2,(d[1]+a[1])/2];const daSrc=this.transformInv_(da);this.addQuad_(a,b,bc,da,aSrc,bSrc,bcSrc,daSrc,maxSubdivision-1);this.addQuad_(da,bc,c,d,daSrc,bcSrc,cSrc,dSrc,maxSubdivision-1);}else{const ab=[(a[0]+b[0])/2,(a[1]+b[1])/2];const abSrc=this.transformInv_(ab);const cd=[(c[0]+d[0])/2,(c[1]+d[1])/2];const cdSrc=this.transformInv_(cd);this.addQuad_(a,ab,cd,d,aSrc,abSrc,cdSrc,dSrc,maxSubdivision-1);this.addQuad_(ab,b,c,cd,abSrc,bSrc,cSrc,cdSrc,maxSubdivision-1);}return;}}if(wrapsX){if(!this.canWrapXInSource_){return;}this.wrapsXInSource_=true;}if((isNotFinite&11)==0){this.addTriangle_(a,c,d,aSrc,cSrc,dSrc);}if((isNotFinite&14)==0){this.addTriangle_(a,c,b,aSrc,cSrc,bSrc);}if(isNotFinite){if((
isNotFinite&13)==0){this.addTriangle_(b,d,a,bSrc,dSrc,aSrc);}if((isNotFinite&7)==0){this.addTriangle_(b,d,c,bSrc,dSrc,cSrc);}}}calculateSourceExtent(){const extent=createEmpty();this.triangles_.forEach(function(triangle,i,arr){const src=triangle.source;extendCoordinate(extent,src[0]);extendCoordinate(extent,src[1]);extendCoordinate(extent,src[2]);});return extent;}getTriangles(){return this.triangles_;}}const Triangulation$1=Triangulation;let brokenDiagonalRendering_;const canvasPool$1=[];function drawTestTriangle(ctx,u1,v1,u2,v2){ctx.beginPath();ctx.moveTo(0,0);ctx.lineTo(u1,v1);ctx.lineTo(u2,v2);ctx.closePath();ctx.save();ctx.clip();ctx.fillRect(0,0,Math.max(u1,u2)+1,Math.max(v1,v2));ctx.restore();}function verifyBrokenDiagonalRendering(data,offset){return Math.abs(data[offset*4]-210)>2||Math.abs(data[offset*4+3]-0.75*255)>2;}function isBrokenDiagonalRendering(){if(brokenDiagonalRendering_===void 0){const ctx=createCanvasContext2D(6,6,canvasPool$1);ctx.globalCompositeOperation=
"lighter";ctx.fillStyle="rgba(210, 0, 0, 0.75)";drawTestTriangle(ctx,4,5,4,0);drawTestTriangle(ctx,4,5,0,5);const data=ctx.getImageData(0,0,3,3).data;brokenDiagonalRendering_=verifyBrokenDiagonalRendering(data,0)||verifyBrokenDiagonalRendering(data,4)||verifyBrokenDiagonalRendering(data,8);releaseCanvas(ctx);canvasPool$1.push(ctx.canvas);}return brokenDiagonalRendering_;}function calculateSourceResolution(sourceProj,targetProj,targetCenter,targetResolution){const sourceCenter=transform(targetCenter,targetProj,sourceProj);let sourceResolution=getPointResolution(targetProj,targetResolution,targetCenter);const targetMetersPerUnit=targetProj.getMetersPerUnit();if(targetMetersPerUnit!==void 0){sourceResolution*=targetMetersPerUnit;}const sourceMetersPerUnit=sourceProj.getMetersPerUnit();if(sourceMetersPerUnit!==void 0){sourceResolution/=sourceMetersPerUnit;}const sourceExtent=sourceProj.getExtent();if(!sourceExtent||containsCoordinate(sourceExtent,sourceCenter)){const compensationFactor=
getPointResolution(sourceProj,sourceResolution,sourceCenter)/sourceResolution;if(isFinite(compensationFactor)&&compensationFactor>0){sourceResolution/=compensationFactor;}}return sourceResolution;}function calculateSourceExtentResolution(sourceProj,targetProj,targetExtent,targetResolution){const targetCenter=getCenter(targetExtent);let sourceResolution=calculateSourceResolution(sourceProj,targetProj,targetCenter,targetResolution);if(!isFinite(sourceResolution)||sourceResolution<=0){forEachCorner(targetExtent,function(corner){sourceResolution=calculateSourceResolution(sourceProj,targetProj,corner,targetResolution);return isFinite(sourceResolution)&&sourceResolution>0;});}return sourceResolution;}function render(width,height,pixelRatio,sourceResolution,sourceExtent,targetResolution,targetExtent,triangulation,sources,gutter,renderEdges,interpolate){const context=createCanvasContext2D(Math.round(pixelRatio*width),Math.round(pixelRatio*height),canvasPool$1);if(!interpolate){context.
imageSmoothingEnabled=false;}if(sources.length===0){return context.canvas;}context.scale(pixelRatio,pixelRatio);function pixelRound(value){return Math.round(value*pixelRatio)/pixelRatio;}context.globalCompositeOperation="lighter";const sourceDataExtent=createEmpty();sources.forEach(function(src,i,arr){extend$1(sourceDataExtent,src.extent);});const canvasWidthInUnits=getWidth(sourceDataExtent);const canvasHeightInUnits=getHeight(sourceDataExtent);const stitchContext=createCanvasContext2D(Math.round(pixelRatio*canvasWidthInUnits/sourceResolution),Math.round(pixelRatio*canvasHeightInUnits/sourceResolution),canvasPool$1);if(!interpolate){stitchContext.imageSmoothingEnabled=false;}const stitchScale=pixelRatio/sourceResolution;sources.forEach(function(src,i,arr){const xPos=src.extent[0]-sourceDataExtent[0];const yPos=-(src.extent[3]-sourceDataExtent[3]);const srcWidth=getWidth(src.extent);const srcHeight=getHeight(src.extent);if(src.image.width>0&&src.image.height>0){stitchContext.drawImage(
src.image,gutter,gutter,src.image.width-2*gutter,src.image.height-2*gutter,xPos*stitchScale,yPos*stitchScale,srcWidth*stitchScale,srcHeight*stitchScale);}});const targetTopLeft=getTopLeft(targetExtent);triangulation.getTriangles().forEach(function(triangle,i,arr){const source=triangle.source;const target=triangle.target;let x0=source[0][0],y0=source[0][1];let x1=source[1][0],y1=source[1][1];let x2=source[2][0],y2=source[2][1];const u0=pixelRound((target[0][0]-targetTopLeft[0])/targetResolution);const v0=pixelRound(-(target[0][1]-targetTopLeft[1])/targetResolution);const u1=pixelRound((target[1][0]-targetTopLeft[0])/targetResolution);const v1=pixelRound(-(target[1][1]-targetTopLeft[1])/targetResolution);const u2=pixelRound((target[2][0]-targetTopLeft[0])/targetResolution);const v2=pixelRound(-(target[2][1]-targetTopLeft[1])/targetResolution);const sourceNumericalShiftX=x0;const sourceNumericalShiftY=y0;x0=0;y0=0;x1-=sourceNumericalShiftX;y1-=sourceNumericalShiftY;x2-=
sourceNumericalShiftX;y2-=sourceNumericalShiftY;const augmentedMatrix=[[x1,y1,0,0,u1-u0],[x2,y2,0,0,u2-u0],[0,0,x1,y1,v1-v0],[0,0,x2,y2,v2-v0]];const affineCoefs=solveLinearSystem(augmentedMatrix);if(!affineCoefs){return;}context.save();context.beginPath();if(isBrokenDiagonalRendering()||!interpolate){context.moveTo(u1,v1);const steps=4;const ud=u0-u1;const vd=v0-v1;for(let step=0;step<steps;step++){context.lineTo(u1+pixelRound((step+1)*ud/steps),v1+pixelRound(step*vd/(steps-1)));if(step!=steps-1){context.lineTo(u1+pixelRound((step+1)*ud/steps),v1+pixelRound((step+1)*vd/(steps-1)));}}context.lineTo(u2,v2);}else{context.moveTo(u1,v1);context.lineTo(u0,v0);context.lineTo(u2,v2);}context.clip();context.transform(affineCoefs[0],affineCoefs[2],affineCoefs[1],affineCoefs[3],u0,v0);context.translate(sourceDataExtent[0]-sourceNumericalShiftX,sourceDataExtent[3]-sourceNumericalShiftY);context.scale(sourceResolution/pixelRatio,-sourceResolution/pixelRatio);context.drawImage(stitchContext.canvas,
0,0);context.restore();});releaseCanvas(stitchContext);canvasPool$1.push(stitchContext.canvas);if(renderEdges){context.save();context.globalCompositeOperation="source-over";context.strokeStyle="black";context.lineWidth=1;triangulation.getTriangles().forEach(function(triangle,i,arr){const target=triangle.target;const u0=(target[0][0]-targetTopLeft[0])/targetResolution;const v0=-(target[0][1]-targetTopLeft[1])/targetResolution;const u1=(target[1][0]-targetTopLeft[0])/targetResolution;const v1=-(target[1][1]-targetTopLeft[1])/targetResolution;const u2=(target[2][0]-targetTopLeft[0])/targetResolution;const v2=-(target[2][1]-targetTopLeft[1])/targetResolution;context.beginPath();context.moveTo(u1,v1);context.lineTo(u0,v0);context.lineTo(u2,v2);context.closePath();context.stroke();});context.restore();}return context.canvas;}class ReprojTile extends Tile$1{constructor(sourceProj,sourceTileGrid,targetProj,targetTileGrid,tileCoord,wrappedTileCoord,pixelRatio,gutter,getTileFunction,
errorThreshold,renderEdges,interpolate){super(tileCoord,TileState.IDLE,{interpolate:!!interpolate});this.renderEdges_=renderEdges!==void 0?renderEdges:false;this.pixelRatio_=pixelRatio;this.gutter_=gutter;this.canvas_=null;this.sourceTileGrid_=sourceTileGrid;this.targetTileGrid_=targetTileGrid;this.wrappedTileCoord_=wrappedTileCoord?wrappedTileCoord:tileCoord;this.sourceTiles_=[];this.sourcesListenerKeys_=null;this.sourceZ_=0;const targetExtent=targetTileGrid.getTileCoordExtent(this.wrappedTileCoord_);const maxTargetExtent=this.targetTileGrid_.getExtent();let maxSourceExtent=this.sourceTileGrid_.getExtent();const limitedTargetExtent=maxTargetExtent?getIntersection(targetExtent,maxTargetExtent):targetExtent;if(getArea(limitedTargetExtent)===0){this.state=TileState.EMPTY;return;}const sourceProjExtent=sourceProj.getExtent();if(sourceProjExtent){if(!maxSourceExtent){maxSourceExtent=sourceProjExtent;}else{maxSourceExtent=getIntersection(maxSourceExtent,sourceProjExtent);}}const
targetResolution=targetTileGrid.getResolution(this.wrappedTileCoord_[0]);const sourceResolution=calculateSourceExtentResolution(sourceProj,targetProj,limitedTargetExtent,targetResolution);if(!isFinite(sourceResolution)||sourceResolution<=0){this.state=TileState.EMPTY;return;}const errorThresholdInPixels=errorThreshold!==void 0?errorThreshold:ERROR_THRESHOLD;this.triangulation_=new Triangulation$1(sourceProj,targetProj,limitedTargetExtent,maxSourceExtent,sourceResolution*errorThresholdInPixels,targetResolution);if(this.triangulation_.getTriangles().length===0){this.state=TileState.EMPTY;return;}this.sourceZ_=sourceTileGrid.getZForResolution(sourceResolution);let sourceExtent=this.triangulation_.calculateSourceExtent();if(maxSourceExtent){if(sourceProj.canWrapX()){sourceExtent[1]=clamp(sourceExtent[1],maxSourceExtent[1],maxSourceExtent[3]);sourceExtent[3]=clamp(sourceExtent[3],maxSourceExtent[1],maxSourceExtent[3]);}else{sourceExtent=getIntersection(sourceExtent,maxSourceExtent);}}if(!
getArea(sourceExtent)){this.state=TileState.EMPTY;}else{const sourceRange=sourceTileGrid.getTileRangeForExtentAndZ(sourceExtent,this.sourceZ_);for(let srcX=sourceRange.minX;srcX<=sourceRange.maxX;srcX++){for(let srcY=sourceRange.minY;srcY<=sourceRange.maxY;srcY++){const tile=getTileFunction(this.sourceZ_,srcX,srcY,pixelRatio);if(tile){this.sourceTiles_.push(tile);}}}if(this.sourceTiles_.length===0){this.state=TileState.EMPTY;}}}getImage(){return this.canvas_;}reproject_(){const sources=[];this.sourceTiles_.forEach((tile)=>{if(tile&&tile.getState()==TileState.LOADED){sources.push({extent:this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord),image:tile.getImage()});}});this.sourceTiles_.length=0;if(sources.length===0){this.state=TileState.ERROR;}else{const z=this.wrappedTileCoord_[0];const size=this.targetTileGrid_.getTileSize(z);const width=typeof size==="number"?size:size[0];const height=typeof size==="number"?size:size[1];const targetResolution=this.targetTileGrid_.getResolution(z);
const sourceResolution=this.sourceTileGrid_.getResolution(this.sourceZ_);const targetExtent=this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);this.canvas_=render(width,height,this.pixelRatio_,sourceResolution,this.sourceTileGrid_.getExtent(),targetResolution,targetExtent,this.triangulation_,sources,this.gutter_,this.renderEdges_,this.interpolate);this.state=TileState.LOADED;}this.changed();}load(){if(this.state==TileState.IDLE){this.state=TileState.LOADING;this.changed();let leftToLoad=0;this.sourcesListenerKeys_=[];this.sourceTiles_.forEach((tile)=>{const state=tile.getState();if(state==TileState.IDLE||state==TileState.LOADING){leftToLoad++;const sourceListenKey=listen(tile,EventType.CHANGE,function(e){const state2=tile.getState();if(state2==TileState.LOADED||state2==TileState.ERROR||state2==TileState.EMPTY){unlistenByKey(sourceListenKey);leftToLoad--;if(leftToLoad===0){this.unlistenSources_();this.reproject_();}}},this);this.sourcesListenerKeys_.push(sourceListenKey);}}
);if(leftToLoad===0){setTimeout(this.reproject_.bind(this),0);}else{this.sourceTiles_.forEach(function(tile,i,arr){const state=tile.getState();if(state==TileState.IDLE){tile.load();}});}}}unlistenSources_(){this.sourcesListenerKeys_.forEach(unlistenByKey);this.sourcesListenerKeys_=null;}release(){if(this.canvas_){releaseCanvas(this.canvas_.getContext("2d"));canvasPool$1.push(this.canvas_);this.canvas_=null;}super.release();}}const ReprojTile$1=ReprojTile;class LRUCache{constructor(highWaterMark){this.highWaterMark=highWaterMark!==void 0?highWaterMark:2048;this.count_=0;this.entries_={};this.oldest_=null;this.newest_=null;}canExpireCache(){return this.highWaterMark>0&&this.getCount()>this.highWaterMark;}expireCache(keep){while(this.canExpireCache()){this.pop();}}clear(){this.count_=0;this.entries_={};this.oldest_=null;this.newest_=null;}containsKey(key){return this.entries_.hasOwnProperty(key);}forEach(f){let entry=this.oldest_;while(entry){f(entry.value_,entry.key_,this);entry=entry.
newer;}}get(key,options){const entry=this.entries_[key];assert(entry!==void 0,"Tried to get a value for a key that does not exist in the cache");if(entry===this.newest_){return entry.value_;}if(entry===this.oldest_){this.oldest_=this.oldest_.newer;this.oldest_.older=null;}else{entry.newer.older=entry.older;entry.older.newer=entry.newer;}entry.newer=null;entry.older=this.newest_;this.newest_.newer=entry;this.newest_=entry;return entry.value_;}remove(key){const entry=this.entries_[key];assert(entry!==void 0,"Tried to get a value for a key that does not exist in the cache");if(entry===this.newest_){this.newest_=entry.older;if(this.newest_){this.newest_.newer=null;}}else if(entry===this.oldest_){this.oldest_=entry.newer;if(this.oldest_){this.oldest_.older=null;}}else{entry.newer.older=entry.older;entry.older.newer=entry.newer;}delete this.entries_[key];--this.count_;return entry.value_;}getCount(){return this.count_;}getKeys(){const keys=new Array(this.count_);let i=0;let entry;for(entry=
this.newest_;entry;entry=entry.older){keys[i++]=entry.key_;}return keys;}getValues(){const values=new Array(this.count_);let i=0;let entry;for(entry=this.newest_;entry;entry=entry.older){values[i++]=entry.value_;}return values;}peekLast(){return this.oldest_.value_;}peekLastKey(){return this.oldest_.key_;}peekFirstKey(){return this.newest_.key_;}peek(key){if(!this.containsKey(key)){return void 0;}return this.entries_[key].value_;}pop(){const entry=this.oldest_;delete this.entries_[entry.key_];if(entry.newer){entry.newer.older=null;}this.oldest_=entry.newer;if(!this.oldest_){this.newest_=null;}--this.count_;return entry.value_;}replace(key,value){this.get(key);this.entries_[key].value_=value;}set(key,value){assert(!(key in this.entries_),"Tried to set a value for a key that is used already");const entry={key_:key,newer:null,older:this.newest_,value_:value};if(!this.newest_){this.oldest_=entry;}else{this.newest_.newer=entry;}this.newest_=entry;this.entries_[key]=entry;++this.count_;}
setSize(size){this.highWaterMark=size;}}const LRUCache$1=LRUCache;function createOrUpdate$1(z,x,y,tileCoord){if(tileCoord!==void 0){tileCoord[0]=z;tileCoord[1]=x;tileCoord[2]=y;return tileCoord;}return[z,x,y];}function getKeyZXY(z,x,y){return z+"/"+x+"/"+y;}function getKey(tileCoord){return getKeyZXY(tileCoord[0],tileCoord[1],tileCoord[2]);}function fromKey(key){return key.split("/").map(Number);}function hash(tileCoord){return(tileCoord[1]<<tileCoord[0])+tileCoord[2];}function withinExtentAndZ(tileCoord,tileGrid){const z=tileCoord[0];const x=tileCoord[1];const y=tileCoord[2];if(tileGrid.getMinZoom()>z||z>tileGrid.getMaxZoom()){return false;}const tileRange=tileGrid.getFullTileRange(z);if(!tileRange){return true;}return tileRange.containsXY(x,y);}class TileCache extends LRUCache$1{clear(){while(this.getCount()>0){this.pop().release();}super.clear();}expireCache(usedTiles){while(this.canExpireCache()){const tile=this.peekLast();if(tile.getKey()in usedTiles){break;}else{this.pop().
release();}}}pruneExceptNewestZ(){if(this.getCount()===0){return;}const key=this.peekFirstKey();const tileCoord=fromKey(key);const z=tileCoord[0];this.forEach((tile)=>{if(tile.tileCoord[0]!==z){this.remove(getKey(tile.tileCoord));tile.release();}});}}const TileCache$1=TileCache;const TileEventType={TILELOADSTART:"tileloadstart",TILELOADEND:"tileloadend",TILELOADERROR:"tileloaderror"};class TileRange{constructor(minX,maxX,minY,maxY){this.minX=minX;this.maxX=maxX;this.minY=minY;this.maxY=maxY;}contains(tileCoord){return this.containsXY(tileCoord[1],tileCoord[2]);}containsTileRange(tileRange){return this.minX<=tileRange.minX&&tileRange.maxX<=this.maxX&&this.minY<=tileRange.minY&&tileRange.maxY<=this.maxY;}containsXY(x,y){return this.minX<=x&&x<=this.maxX&&this.minY<=y&&y<=this.maxY;}equals(tileRange){return this.minX==tileRange.minX&&this.minY==tileRange.minY&&this.maxX==tileRange.maxX&&this.maxY==tileRange.maxY;}extend(tileRange){if(tileRange.minX<this.minX){this.minX=tileRange.minX;}if(
tileRange.maxX>this.maxX){this.maxX=tileRange.maxX;}if(tileRange.minY<this.minY){this.minY=tileRange.minY;}if(tileRange.maxY>this.maxY){this.maxY=tileRange.maxY;}}getHeight(){return this.maxY-this.minY+1;}getSize(){return[this.getWidth(),this.getHeight()];}getWidth(){return this.maxX-this.minX+1;}intersects(tileRange){return this.minX<=tileRange.maxX&&this.maxX>=tileRange.minX&&this.minY<=tileRange.maxY&&this.maxY>=tileRange.minY;}}function createOrUpdate(minX,maxX,minY,maxY,tileRange){if(tileRange!==void 0){tileRange.minX=minX;tileRange.maxX=maxX;tileRange.minY=minY;tileRange.maxY=maxY;return tileRange;}return new TileRange(minX,maxX,minY,maxY);}const TileRange$1=TileRange;const tmpTileCoord=[0,0,0];const DECIMALS=5;class TileGrid{constructor(options){this.minZoom=options.minZoom!==void 0?options.minZoom:0;this.resolutions_=options.resolutions;assert(isSorted(this.resolutions_,function(a,b){return b-a;},true),"`resolutions` must be sorted in descending order");let zoomFactor;if(!
options.origins){for(let i=0,ii=this.resolutions_.length-1;i<ii;++i){if(!zoomFactor){zoomFactor=this.resolutions_[i]/this.resolutions_[i+1];}else{if(this.resolutions_[i]/this.resolutions_[i+1]!==zoomFactor){zoomFactor=void 0;break;}}}}this.zoomFactor_=zoomFactor;this.maxZoom=this.resolutions_.length-1;this.origin_=options.origin!==void 0?options.origin:null;this.origins_=null;if(options.origins!==void 0){this.origins_=options.origins;assert(this.origins_.length==this.resolutions_.length,"Number of `origins` and `resolutions` must be equal");}const extent=options.extent;if(extent!==void 0&&!this.origin_&&!this.origins_){this.origin_=getTopLeft(extent);}assert(!this.origin_&&this.origins_||this.origin_&&!this.origins_,"Either `origin` or `origins` must be configured, never both");this.tileSizes_=null;if(options.tileSizes!==void 0){this.tileSizes_=options.tileSizes;assert(this.tileSizes_.length==this.resolutions_.length,"Number of `tileSizes` and `resolutions` must be equal");}this.
tileSize_=options.tileSize!==void 0?options.tileSize:!this.tileSizes_?DEFAULT_TILE_SIZE:null;assert(!this.tileSize_&&this.tileSizes_||this.tileSize_&&!this.tileSizes_,"Either `tileSize` or `tileSizes` must be configured, never both");this.extent_=extent!==void 0?extent:null;this.fullTileRanges_=null;this.tmpSize_=[0,0];this.tmpExtent_=[0,0,0,0];if(options.sizes!==void 0){this.fullTileRanges_=options.sizes.map(function(size,z){const tileRange=new TileRange$1(Math.min(0,size[0]),Math.max(size[0]-1,-1),Math.min(0,size[1]),Math.max(size[1]-1,-1));if(extent){const restrictedTileRange=this.getTileRangeForExtentAndZ(extent,z);tileRange.minX=Math.max(restrictedTileRange.minX,tileRange.minX);tileRange.maxX=Math.min(restrictedTileRange.maxX,tileRange.maxX);tileRange.minY=Math.max(restrictedTileRange.minY,tileRange.minY);tileRange.maxY=Math.min(restrictedTileRange.maxY,tileRange.maxY);}return tileRange;},this);}else if(extent){this.calculateTileRanges_(extent);}}forEachTileCoord(extent,zoom,
callback){const tileRange=this.getTileRangeForExtentAndZ(extent,zoom);for(let i=tileRange.minX,ii=tileRange.maxX;i<=ii;++i){for(let j=tileRange.minY,jj=tileRange.maxY;j<=jj;++j){callback([zoom,i,j]);}}}forEachTileCoordParentTileRange(tileCoord,callback,tempTileRange,tempExtent){let tileRange,x,y;let tileCoordExtent=null;let z=tileCoord[0]-1;if(this.zoomFactor_===2){x=tileCoord[1];y=tileCoord[2];}else{tileCoordExtent=this.getTileCoordExtent(tileCoord,tempExtent);}while(z>=this.minZoom){if(this.zoomFactor_===2){x=Math.floor(x/2);y=Math.floor(y/2);tileRange=createOrUpdate(x,x,y,y,tempTileRange);}else{tileRange=this.getTileRangeForExtentAndZ(tileCoordExtent,z,tempTileRange);}if(callback(z,tileRange)){return true;}--z;}return false;}getExtent(){return this.extent_;}getMaxZoom(){return this.maxZoom;}getMinZoom(){return this.minZoom;}getOrigin(z){if(this.origin_){return this.origin_;}return this.origins_[z];}getResolution(z){return this.resolutions_[z];}getResolutions(){return this.
resolutions_;}getTileCoordChildTileRange(tileCoord,tempTileRange,tempExtent){if(tileCoord[0]<this.maxZoom){if(this.zoomFactor_===2){const minX=tileCoord[1]*2;const minY=tileCoord[2]*2;return createOrUpdate(minX,minX+1,minY,minY+1,tempTileRange);}const tileCoordExtent=this.getTileCoordExtent(tileCoord,tempExtent||this.tmpExtent_);return this.getTileRangeForExtentAndZ(tileCoordExtent,tileCoord[0]+1,tempTileRange);}return null;}getTileRangeForTileCoordAndZ(tileCoord,z,tempTileRange){if(z>this.maxZoom||z<this.minZoom){return null;}const tileCoordZ=tileCoord[0];const tileCoordX=tileCoord[1];const tileCoordY=tileCoord[2];if(z===tileCoordZ){return createOrUpdate(tileCoordX,tileCoordY,tileCoordX,tileCoordY,tempTileRange);}if(this.zoomFactor_){const factor=Math.pow(this.zoomFactor_,z-tileCoordZ);const minX=Math.floor(tileCoordX*factor);const minY=Math.floor(tileCoordY*factor);if(z<tileCoordZ){return createOrUpdate(minX,minX,minY,minY,tempTileRange);}const maxX=Math.floor(factor*(tileCoordX+1))-
1;const maxY=Math.floor(factor*(tileCoordY+1))-1;return createOrUpdate(minX,maxX,minY,maxY,tempTileRange);}const tileCoordExtent=this.getTileCoordExtent(tileCoord,this.tmpExtent_);return this.getTileRangeForExtentAndZ(tileCoordExtent,z,tempTileRange);}getTileRangeForExtentAndZ(extent,z,tempTileRange){this.getTileCoordForXYAndZ_(extent[0],extent[3],z,false,tmpTileCoord);const minX=tmpTileCoord[1];const minY=tmpTileCoord[2];this.getTileCoordForXYAndZ_(extent[2],extent[1],z,true,tmpTileCoord);const maxX=tmpTileCoord[1];const maxY=tmpTileCoord[2];return createOrUpdate(minX,maxX,minY,maxY,tempTileRange);}getTileCoordCenter(tileCoord){const origin=this.getOrigin(tileCoord[0]);const resolution=this.getResolution(tileCoord[0]);const tileSize=toSize(this.getTileSize(tileCoord[0]),this.tmpSize_);return[origin[0]+(tileCoord[1]+0.5)*tileSize[0]*resolution,origin[1]-(tileCoord[2]+0.5)*tileSize[1]*resolution];}getTileCoordExtent(tileCoord,tempExtent){const origin=this.getOrigin(tileCoord[0]);const
resolution=this.getResolution(tileCoord[0]);const tileSize=toSize(this.getTileSize(tileCoord[0]),this.tmpSize_);const minX=origin[0]+tileCoord[1]*tileSize[0]*resolution;const minY=origin[1]-(tileCoord[2]+1)*tileSize[1]*resolution;const maxX=minX+tileSize[0]*resolution;const maxY=minY+tileSize[1]*resolution;return createOrUpdate$2(minX,minY,maxX,maxY,tempExtent);}getTileCoordForCoordAndResolution(coordinate,resolution,opt_tileCoord){return this.getTileCoordForXYAndResolution_(coordinate[0],coordinate[1],resolution,false,opt_tileCoord);}getTileCoordForXYAndResolution_(x,y,resolution,reverseIntersectionPolicy,opt_tileCoord){const z=this.getZForResolution(resolution);const scale2=resolution/this.getResolution(z);const origin=this.getOrigin(z);const tileSize=toSize(this.getTileSize(z),this.tmpSize_);let tileCoordX=scale2*(x-origin[0])/resolution/tileSize[0];let tileCoordY=scale2*(origin[1]-y)/resolution/tileSize[1];if(reverseIntersectionPolicy){tileCoordX=ceil(tileCoordX,DECIMALS)-1;
tileCoordY=ceil(tileCoordY,DECIMALS)-1;}else{tileCoordX=floor(tileCoordX,DECIMALS);tileCoordY=floor(tileCoordY,DECIMALS);}return createOrUpdate$1(z,tileCoordX,tileCoordY,opt_tileCoord);}getTileCoordForXYAndZ_(x,y,z,reverseIntersectionPolicy,opt_tileCoord){const origin=this.getOrigin(z);const resolution=this.getResolution(z);const tileSize=toSize(this.getTileSize(z),this.tmpSize_);let tileCoordX=(x-origin[0])/resolution/tileSize[0];let tileCoordY=(origin[1]-y)/resolution/tileSize[1];if(reverseIntersectionPolicy){tileCoordX=ceil(tileCoordX,DECIMALS)-1;tileCoordY=ceil(tileCoordY,DECIMALS)-1;}else{tileCoordX=floor(tileCoordX,DECIMALS);tileCoordY=floor(tileCoordY,DECIMALS);}return createOrUpdate$1(z,tileCoordX,tileCoordY,opt_tileCoord);}getTileCoordForCoordAndZ(coordinate,z,opt_tileCoord){return this.getTileCoordForXYAndZ_(coordinate[0],coordinate[1],z,false,opt_tileCoord);}getTileCoordResolution(tileCoord){return this.resolutions_[tileCoord[0]];}getTileSize(z){if(this.tileSize_){return this
.tileSize_;}return this.tileSizes_[z];}getFullTileRange(z){if(!this.fullTileRanges_){return this.extent_?this.getTileRangeForExtentAndZ(this.extent_,z):null;}return this.fullTileRanges_[z];}getZForResolution(resolution,opt_direction){const z=linearFindNearest(this.resolutions_,resolution,opt_direction||0);return clamp(z,this.minZoom,this.maxZoom);}tileCoordIntersectsViewport(tileCoord,viewport){return intersectsLinearRing(viewport,0,viewport.length,2,this.getTileCoordExtent(tileCoord));}calculateTileRanges_(extent){const length=this.resolutions_.length;const fullTileRanges=new Array(length);for(let z=this.minZoom;z<length;++z){fullTileRanges[z]=this.getTileRangeForExtentAndZ(extent,z);}this.fullTileRanges_=fullTileRanges;}}const TileGrid$1=TileGrid;function getForProjection(projection){let tileGrid=projection.getDefaultTileGrid();if(!tileGrid){tileGrid=createForProjection(projection);projection.setDefaultTileGrid(tileGrid);}return tileGrid;}function wrapX(tileGrid,tileCoord,projection)
{const z=tileCoord[0];const center=tileGrid.getTileCoordCenter(tileCoord);const projectionExtent=extentFromProjection(projection);if(!containsCoordinate(projectionExtent,center)){const worldWidth=getWidth(projectionExtent);const worldsAway=Math.ceil((projectionExtent[0]-center[0])/worldWidth);center[0]+=worldWidth*worldsAway;return tileGrid.getTileCoordForCoordAndZ(center,z);}return tileCoord;}function createForExtent(extent,maxZoom,tileSize,corner){corner=corner!==void 0?corner:"top-left";const resolutions=resolutionsFromExtent(extent,maxZoom,tileSize);return new TileGrid$1({extent,origin:getCorner(extent,corner),resolutions,tileSize});}function resolutionsFromExtent(extent,maxZoom,tileSize,maxResolution){maxZoom=maxZoom!==void 0?maxZoom:DEFAULT_MAX_ZOOM;tileSize=toSize(tileSize!==void 0?tileSize:DEFAULT_TILE_SIZE);const height=getHeight(extent);const width=getWidth(extent);maxResolution=maxResolution>0?maxResolution:Math.max(width/tileSize[0],height/tileSize[1]);const length=maxZoom+
1;const resolutions=new Array(length);for(let z=0;z<length;++z){resolutions[z]=maxResolution/Math.pow(2,z);}return resolutions;}function createForProjection(projection,maxZoom,tileSize,corner){const extent=extentFromProjection(projection);return createForExtent(extent,maxZoom,tileSize,corner);}function extentFromProjection(projection){projection=get$1(projection);let extent=projection.getExtent();if(!extent){const half=180*METERS_PER_UNIT$1.degrees/projection.getMetersPerUnit();extent=createOrUpdate$2(-half,-half,half,half);}return extent;}class TileSource extends Source$1{constructor(options){super({attributions:options.attributions,attributionsCollapsible:options.attributionsCollapsible,projection:options.projection,state:options.state,wrapX:options.wrapX,interpolate:options.interpolate});this.on;this.once;this.un;this.opaque_=options.opaque!==void 0?options.opaque:false;this.tilePixelRatio_=options.tilePixelRatio!==void 0?options.tilePixelRatio:1;this.tileGrid=options.tileGrid!==
void 0?options.tileGrid:null;const tileSize=[256,256];if(this.tileGrid){toSize(this.tileGrid.getTileSize(this.tileGrid.getMinZoom()),tileSize);}this.tileCache=new TileCache$1(options.cacheSize||0);this.tmpSize=[0,0];this.key_=options.key||"";this.tileOptions={transition:options.transition,interpolate:options.interpolate};this.zDirection=options.zDirection?options.zDirection:0;}canExpireCache(){return this.tileCache.canExpireCache();}expireCache(projection,usedTiles){const tileCache=this.getTileCacheForProjection(projection);if(tileCache){tileCache.expireCache(usedTiles);}}forEachLoadedTile(projection,z,tileRange,callback){const tileCache=this.getTileCacheForProjection(projection);if(!tileCache){return false;}let covered=true;let tile,tileCoordKey,loaded;for(let x=tileRange.minX;x<=tileRange.maxX;++x){for(let y=tileRange.minY;y<=tileRange.maxY;++y){tileCoordKey=getKeyZXY(z,x,y);loaded=false;if(tileCache.containsKey(tileCoordKey)){tile=tileCache.get(tileCoordKey);loaded=tile.getState()
===TileState.LOADED;if(loaded){loaded=callback(tile)!==false;}}if(!loaded){covered=false;}}}return covered;}getGutterForProjection(projection){return 0;}getKey(){return this.key_;}setKey(key){if(this.key_!==key){this.key_=key;this.changed();}}getOpaque(projection){return this.opaque_;}getResolutions(projection){const tileGrid=projection?this.getTileGridForProjection(projection):this.tileGrid;if(!tileGrid){return null;}return tileGrid.getResolutions();}getTile(z,x,y,pixelRatio,projection){return abstract();}getTileGrid(){return this.tileGrid;}getTileGridForProjection(projection){if(!this.tileGrid){return getForProjection(projection);}return this.tileGrid;}getTileCacheForProjection(projection){const sourceProjection=this.getProjection();assert(sourceProjection===null||equivalent(sourceProjection,projection),"A VectorTile source can only be rendered if it has a projection compatible with the view projection.");return this.tileCache;}getTilePixelRatio(pixelRatio){return this.
tilePixelRatio_;}getTilePixelSize(z,pixelRatio,projection){const tileGrid=this.getTileGridForProjection(projection);const tilePixelRatio=this.getTilePixelRatio(pixelRatio);const tileSize=toSize(tileGrid.getTileSize(z),this.tmpSize);if(tilePixelRatio==1){return tileSize;}return scale(tileSize,tilePixelRatio,this.tmpSize);}getTileCoordForTileUrlFunction(tileCoord,projection){projection=projection!==void 0?projection:this.getProjection();const tileGrid=this.getTileGridForProjection(projection);if(this.getWrapX()&&projection.isGlobal()){tileCoord=wrapX(tileGrid,tileCoord,projection);}return withinExtentAndZ(tileCoord,tileGrid)?tileCoord:null;}clear(){this.tileCache.clear();}refresh(){this.clear();super.refresh();}updateCacheSize(tileCount,projection){const tileCache=this.getTileCacheForProjection(projection);if(tileCount>tileCache.highWaterMark){tileCache.highWaterMark=tileCount;}}useTile(z,x,y,projection){}}class TileSourceEvent extends Event{constructor(type,tile){super(type);this.tile=
tile;}}const TileSource$1=TileSource;function createFromTemplate(template,tileGrid){const zRegEx=/\{z\}/g;const xRegEx=/\{x\}/g;const yRegEx=/\{y\}/g;const dashYRegEx=/\{-y\}/g;return(function(tileCoord,pixelRatio,projection){if(!tileCoord){return void 0;}return template.replace(zRegEx,tileCoord[0].toString()).replace(xRegEx,tileCoord[1].toString()).replace(yRegEx,tileCoord[2].toString()).replace(dashYRegEx,function(){const z=tileCoord[0];const range=tileGrid.getFullTileRange(z);assert(range,"The {-y} placeholder requires a tile grid with extent");const y=range.getHeight()-tileCoord[2]-1;return y.toString();});});}function createFromTemplates(templates,tileGrid){const len=templates.length;const tileUrlFunctions=new Array(len);for(let i=0;i<len;++i){tileUrlFunctions[i]=createFromTemplate(templates[i],tileGrid);}return createFromTileUrlFunctions(tileUrlFunctions);}function createFromTileUrlFunctions(tileUrlFunctions){if(tileUrlFunctions.length===1){return tileUrlFunctions[0];}return(
function(tileCoord,pixelRatio,projection){if(!tileCoord){return void 0;}const h=hash(tileCoord);const index=modulo(h,tileUrlFunctions.length);return tileUrlFunctions[index](tileCoord,pixelRatio,projection);});}function expandUrl(url){const urls=[];let match=/\{([a-z])-([a-z])\}/.exec(url);if(match){const startCharCode=match[1].charCodeAt(0);const stopCharCode=match[2].charCodeAt(0);let charCode;for(charCode=startCharCode;charCode<=stopCharCode;++charCode){urls.push(url.replace(match[0],String.fromCharCode(charCode)));}return urls;}match=/\{(\d+)-(\d+)\}/.exec(url);if(match){const stop=parseInt(match[2],10);for(let i=parseInt(match[1],10);i<=stop;i++){urls.push(url.replace(match[0],i.toString()));}return urls;}urls.push(url);return urls;}class UrlTile extends TileSource$1{constructor(options){super({attributions:options.attributions,cacheSize:options.cacheSize,opaque:options.opaque,projection:options.projection,state:options.state,tileGrid:options.tileGrid,tilePixelRatio:options.
tilePixelRatio,wrapX:options.wrapX,transition:options.transition,interpolate:options.interpolate,key:options.key,attributionsCollapsible:options.attributionsCollapsible,zDirection:options.zDirection});this.generateTileUrlFunction_=this.tileUrlFunction===UrlTile.prototype.tileUrlFunction;this.tileLoadFunction=options.tileLoadFunction;if(options.tileUrlFunction){this.tileUrlFunction=options.tileUrlFunction;}this.urls=null;if(options.urls){this.setUrls(options.urls);}else if(options.url){this.setUrl(options.url);}this.tileLoadingKeys_={};}getTileLoadFunction(){return this.tileLoadFunction;}getTileUrlFunction(){return Object.getPrototypeOf(this).tileUrlFunction===this.tileUrlFunction?this.tileUrlFunction.bind(this):this.tileUrlFunction;}getUrls(){return this.urls;}handleTileChange(event){const tile=(event.target);const uid=getUid(tile);const tileState=tile.getState();let type;if(tileState==TileState.LOADING){this.tileLoadingKeys_[uid]=true;type=TileEventType.TILELOADSTART;}else if(uid in
this.tileLoadingKeys_){delete this.tileLoadingKeys_[uid];type=tileState==TileState.ERROR?TileEventType.TILELOADERROR:tileState==TileState.LOADED?TileEventType.TILELOADEND:void 0;}if(type!=void 0){this.dispatchEvent(new TileSourceEvent(type,tile));}}setTileLoadFunction(tileLoadFunction){this.tileCache.clear();this.tileLoadFunction=tileLoadFunction;this.changed();}setTileUrlFunction(tileUrlFunction,key){this.tileUrlFunction=tileUrlFunction;this.tileCache.pruneExceptNewestZ();if(typeof key!=="undefined"){this.setKey(key);}else{this.changed();}}setUrl(url){const urls=expandUrl(url);this.urls=urls;this.setUrls(urls);}setUrls(urls){this.urls=urls;const key=urls.join("\n");if(this.generateTileUrlFunction_){this.setTileUrlFunction(createFromTemplates(urls,this.tileGrid),key);}else{this.setKey(key);}}tileUrlFunction(tileCoord,pixelRatio,projection){return void 0;}useTile(z,x,y){const tileCoordKey=getKeyZXY(z,x,y);if(this.tileCache.containsKey(tileCoordKey)){this.tileCache.get(tileCoordKey);}}}
const UrlTile$1=UrlTile;class TileImage extends UrlTile$1{constructor(options){super({attributions:options.attributions,cacheSize:options.cacheSize,opaque:options.opaque,projection:options.projection,state:options.state,tileGrid:options.tileGrid,tileLoadFunction:options.tileLoadFunction?options.tileLoadFunction:defaultTileLoadFunction,tilePixelRatio:options.tilePixelRatio,tileUrlFunction:options.tileUrlFunction,url:options.url,urls:options.urls,wrapX:options.wrapX,transition:options.transition,interpolate:options.interpolate!==void 0?options.interpolate:true,key:options.key,attributionsCollapsible:options.attributionsCollapsible,zDirection:options.zDirection});this.crossOrigin=options.crossOrigin!==void 0?options.crossOrigin:null;this.tileClass=options.tileClass!==void 0?options.tileClass:ImageTile$1;this.tileCacheForProjection={};this.tileGridForProjection={};this.reprojectionErrorThreshold_=options.reprojectionErrorThreshold;this.renderReprojectionEdges_=false;}canExpireCache(){if(
this.tileCache.canExpireCache()){return true;}for(const key in this.tileCacheForProjection){if(this.tileCacheForProjection[key].canExpireCache()){return true;}}return false;}expireCache(projection,usedTiles){const usedTileCache=this.getTileCacheForProjection(projection);this.tileCache.expireCache(this.tileCache==usedTileCache?usedTiles:{});for(const id in this.tileCacheForProjection){const tileCache=this.tileCacheForProjection[id];tileCache.expireCache(tileCache==usedTileCache?usedTiles:{});}}getGutterForProjection(projection){if(this.getProjection()&&projection&&!equivalent(this.getProjection(),projection)){return 0;}return this.getGutter();}getGutter(){return 0;}getKey(){let key=super.getKey();if(!this.getInterpolate()){key+=":disable-interpolation";}return key;}getOpaque(projection){if(this.getProjection()&&projection&&!equivalent(this.getProjection(),projection)){return false;}return super.getOpaque(projection);}getTileGridForProjection(projection){const thisProj=this.getProjection
();if(this.tileGrid&&(!thisProj||equivalent(thisProj,projection))){return this.tileGrid;}const projKey=getUid(projection);if(!(projKey in this.tileGridForProjection)){this.tileGridForProjection[projKey]=getForProjection(projection);}return this.tileGridForProjection[projKey];}getTileCacheForProjection(projection){const thisProj=this.getProjection();if(!thisProj||equivalent(thisProj,projection)){return this.tileCache;}const projKey=getUid(projection);if(!(projKey in this.tileCacheForProjection)){this.tileCacheForProjection[projKey]=new TileCache$1(this.tileCache.highWaterMark);}return this.tileCacheForProjection[projKey];}createTile_(z,x,y,pixelRatio,projection,key){const tileCoord=[z,x,y];const urlTileCoord=this.getTileCoordForTileUrlFunction(tileCoord,projection);const tileUrl=urlTileCoord?this.tileUrlFunction(urlTileCoord,pixelRatio,projection):void 0;const tile=new this.tileClass(tileCoord,tileUrl!==void 0?TileState.IDLE:TileState.EMPTY,tileUrl!==void 0?tileUrl:"",this.crossOrigin,
this.tileLoadFunction,this.tileOptions);tile.key=key;tile.addEventListener(EventType.CHANGE,this.handleTileChange.bind(this));return tile;}getTile(z,x,y,pixelRatio,projection){const sourceProjection=this.getProjection();if(!sourceProjection||!projection||equivalent(sourceProjection,projection)){return this.getTileInternal(z,x,y,pixelRatio,sourceProjection||projection);}const cache2=this.getTileCacheForProjection(projection);const tileCoord=[z,x,y];let tile;const tileCoordKey=getKey(tileCoord);if(cache2.containsKey(tileCoordKey)){tile=cache2.get(tileCoordKey);}const key=this.getKey();if(tile&&tile.key==key){return tile;}const sourceTileGrid=this.getTileGridForProjection(sourceProjection);const targetTileGrid=this.getTileGridForProjection(projection);const wrappedTileCoord=this.getTileCoordForTileUrlFunction(tileCoord,projection);const newTile=new ReprojTile$1(sourceProjection,sourceTileGrid,projection,targetTileGrid,tileCoord,wrappedTileCoord,this.getTilePixelRatio(pixelRatio),this.
getGutter(),(z2,x2,y2,pixelRatio2)=>this.getTileInternal(z2,x2,y2,pixelRatio2,sourceProjection),this.reprojectionErrorThreshold_,this.renderReprojectionEdges_,this.getInterpolate());newTile.key=key;if(tile){newTile.interimTile=tile;newTile.refreshInterimChain();cache2.replace(tileCoordKey,newTile);}else{cache2.set(tileCoordKey,newTile);}return newTile;}getTileInternal(z,x,y,pixelRatio,projection){let tile=null;const tileCoordKey=getKeyZXY(z,x,y);const key=this.getKey();if(!this.tileCache.containsKey(tileCoordKey)){tile=this.createTile_(z,x,y,pixelRatio,projection,key);this.tileCache.set(tileCoordKey,tile);}else{tile=this.tileCache.get(tileCoordKey);if(tile.key!=key){const interimTile=tile;tile=this.createTile_(z,x,y,pixelRatio,projection,key);if(interimTile.getState()==TileState.IDLE){tile.interimTile=interimTile.interimTile;}else{tile.interimTile=interimTile;}tile.refreshInterimChain();this.tileCache.replace(tileCoordKey,tile);}}return tile;}setRenderReprojectionEdges(render2){if(this
.renderReprojectionEdges_==render2){return;}this.renderReprojectionEdges_=render2;for(const id in this.tileCacheForProjection){this.tileCacheForProjection[id].clear();}this.changed();}setTileGridForProjection(projection,tilegrid){const proj=get$1(projection);if(proj){const projKey=getUid(proj);if(!(projKey in this.tileGridForProjection)){this.tileGridForProjection[projKey]=tilegrid;}}}clear(){super.clear();for(const id in this.tileCacheForProjection){this.tileCacheForProjection[id].clear();}}}function defaultTileLoadFunction(imageTile,src){imageTile.getImage().src=src;}const TileImage$1=TileImage;function appendParams(uri,params){const keyParams=[];Object.keys(params).forEach(function(k){if(params[k]!==null&&params[k]!==void 0){keyParams.push(k+"="+encodeURIComponent(params[k]));}});const qs=keyParams.join("&");uri=uri.replace(/[?&]$/,"");uri+=uri.includes("?")?"&":"?";return uri+qs;}class WMTSTileGrid extends TileGrid$1{constructor(options){super({extent:options.extent,origin:options.
origin,origins:options.origins,resolutions:options.resolutions,tileSize:options.tileSize,tileSizes:options.tileSizes,sizes:options.sizes});this.matrixIds_=options.matrixIds;}getMatrixId(z){return this.matrixIds_[z];}getMatrixIds(){return this.matrixIds_;}}function createFromCapabilitiesMatrixSet(matrixSet,extent,matrixLimits){const resolutions=[];const matrixIds=[];const origins=[];const tileSizes=[];const sizes=[];matrixLimits=matrixLimits!==void 0?matrixLimits:[];const supportedCRSPropName="SupportedCRS";const matrixIdsPropName="TileMatrix";const identifierPropName="Identifier";const scaleDenominatorPropName="ScaleDenominator";const topLeftCornerPropName="TopLeftCorner";const tileWidthPropName="TileWidth";const tileHeightPropName="TileHeight";const code=matrixSet[supportedCRSPropName];const projection=get$1(code);const metersPerUnit=projection.getMetersPerUnit();const switchOriginXY=projection.getAxisOrientation().substr(0,2)=="ne";matrixSet[matrixIdsPropName].sort(function(a,b){
return b[scaleDenominatorPropName]-a[scaleDenominatorPropName];});matrixSet[matrixIdsPropName].forEach(function(elt){let matrixAvailable;if(matrixLimits.length>0){matrixAvailable=matrixLimits.find(function(elt_ml){if(elt[identifierPropName]==elt_ml[matrixIdsPropName]){return true;}if(!elt[identifierPropName].includes(":")){return matrixSet[identifierPropName]+":"+elt[identifierPropName]===elt_ml[matrixIdsPropName];}return false;});}else{matrixAvailable=true;}if(matrixAvailable){matrixIds.push(elt[identifierPropName]);const resolution=elt[scaleDenominatorPropName]*28e-5/metersPerUnit;const tileWidth=elt[tileWidthPropName];const tileHeight=elt[tileHeightPropName];if(switchOriginXY){origins.push([elt[topLeftCornerPropName][1],elt[topLeftCornerPropName][0]]);}else{origins.push(elt[topLeftCornerPropName]);}resolutions.push(resolution);tileSizes.push(tileWidth==tileHeight?tileWidth:[tileWidth,tileHeight]);sizes.push([elt["MatrixWidth"],elt["MatrixHeight"]]);}});return new WMTSTileGrid({
extent,origins,resolutions,matrixIds,tileSizes,sizes});}class WMTS extends TileImage$1{constructor(options){const requestEncoding=options.requestEncoding!==void 0?options.requestEncoding:"KVP";const tileGrid=options.tileGrid;let urls=options.urls;if(urls===void 0&&options.url!==void 0){urls=expandUrl(options.url);}super({attributions:options.attributions,attributionsCollapsible:options.attributionsCollapsible,cacheSize:options.cacheSize,crossOrigin:options.crossOrigin,interpolate:options.interpolate,projection:options.projection,reprojectionErrorThreshold:options.reprojectionErrorThreshold,tileClass:options.tileClass,tileGrid,tileLoadFunction:options.tileLoadFunction,tilePixelRatio:options.tilePixelRatio,urls,wrapX:options.wrapX!==void 0?options.wrapX:false,transition:options.transition,zDirection:options.zDirection});this.version_=options.version!==void 0?options.version:"1.0.0";this.format_=options.format!==void 0?options.format:"image/jpeg";this.dimensions_=options.dimensions!==void
0?options.dimensions:{};this.layer_=options.layer;this.matrixSet_=options.matrixSet;this.style_=options.style;this.requestEncoding_=requestEncoding;this.setKey(this.getKeyForDimensions_());if(urls&&urls.length>0){this.tileUrlFunction=createFromTileUrlFunctions(urls.map(this.createFromWMTSTemplate.bind(this)));}}setUrls(urls){this.urls=urls;const key=urls.join("\n");this.setTileUrlFunction(createFromTileUrlFunctions(urls.map(this.createFromWMTSTemplate.bind(this))),key);}getDimensions(){return this.dimensions_;}getFormat(){return this.format_;}getLayer(){return this.layer_;}getMatrixSet(){return this.matrixSet_;}getRequestEncoding(){return this.requestEncoding_;}getStyle(){return this.style_;}getVersion(){return this.version_;}getKeyForDimensions_(){const res=this.urls?this.urls.slice(0):[];for(const key in this.dimensions_){res.push(key+"-"+this.dimensions_[key]);}return res.join("/");}updateDimensions(dimensions){Object.assign(this.dimensions_,dimensions);this.setKey(this.
getKeyForDimensions_());}createFromWMTSTemplate(template){const requestEncoding=this.requestEncoding_;const context={"layer":this.layer_,"style":this.style_,"tilematrixset":this.matrixSet_};if(requestEncoding=="KVP"){Object.assign(context,{"Service":"WMTS","Request":"GetTile","Version":this.version_,"Format":this.format_});}template=requestEncoding=="KVP"?appendParams(template,context):template.replace(/\{(\w+?)\}/g,function(m,p){return p.toLowerCase()in context?context[p.toLowerCase()]:m;});const tileGrid=(this.tileGrid);const dimensions=this.dimensions_;return(function(tileCoord,pixelRatio,projection){if(!tileCoord){return void 0;}const localContext={"TileMatrix":tileGrid.getMatrixId(tileCoord[0]),"TileCol":tileCoord[1],"TileRow":tileCoord[2]};Object.assign(localContext,dimensions);let url=template;if(requestEncoding=="KVP"){url=appendParams(url,localContext);}else{url=url.replace(/\{(\w+?)\}/g,function(m,p){return localContext[p];});}return url;});}}const OlSourceWmts=WMTS;function
optionsFromCapabilities(wmtsCap,config){const layers=wmtsCap["Contents"]["Layer"];const l=layers.find(function(elt){return elt["Identifier"]==config["layer"];});if(!l){return null;}const tileMatrixSets=wmtsCap["Contents"]["TileMatrixSet"];let idx;if(l["TileMatrixSetLink"].length>1){if("projection"in config){idx=l["TileMatrixSetLink"].findIndex(function(elt){const tileMatrixSet=tileMatrixSets.find(function(el){return el["Identifier"]==elt["TileMatrixSet"];});const supportedCRS=tileMatrixSet["SupportedCRS"];const proj1=get$1(supportedCRS);const proj2=get$1(config["projection"]);if(proj1&&proj2){return equivalent(proj1,proj2);}return supportedCRS==config["projection"];});}else{idx=l["TileMatrixSetLink"].findIndex(function(elt){return elt["TileMatrixSet"]==config["matrixSet"];});}}else{idx=0;}if(idx<0){idx=0;}const matrixSet=(l["TileMatrixSetLink"][idx]["TileMatrixSet"]);const matrixLimits=(l["TileMatrixSetLink"][idx]["TileMatrixSetLimits"]);let format=(l["Format"][0]);if("format"in config
){format=config["format"];}idx=l["Style"].findIndex(function(elt){if("style"in config){return elt["Title"]==config["style"];}return elt["isDefault"];});if(idx<0){idx=0;}const style=(l["Style"][idx]["Identifier"]);const dimensions={};if("Dimension"in l){l["Dimension"].forEach(function(elt,index,array){const key=elt["Identifier"];let value=elt["Default"];if(value===void 0){value=elt["Value"][0];}dimensions[key]=value;});}const matrixSets=wmtsCap["Contents"]["TileMatrixSet"];const matrixSetObj=matrixSets.find(function(elt){return elt["Identifier"]==matrixSet;});let projection;const code=matrixSetObj["SupportedCRS"];if(code){projection=get$1(code);}if("projection"in config){const projConfig=get$1(config["projection"]);if(projConfig){if(!projection||equivalent(projConfig,projection)){projection=projConfig;}}}let wrapX2=false;const switchXY=projection.getAxisOrientation().substr(0,2)=="ne";let matrix=matrixSetObj.TileMatrix[0];let selectedMatrixLimit={MinTileCol:0,MinTileRow:0,MaxTileCol:
matrix.MatrixWidth-1,MaxTileRow:matrix.MatrixHeight-1};if(matrixLimits){selectedMatrixLimit=matrixLimits[matrixLimits.length-1];const m=matrixSetObj.TileMatrix.find((tileMatrixValue)=>tileMatrixValue.Identifier===selectedMatrixLimit.TileMatrix||matrixSetObj.Identifier+":"+tileMatrixValue.Identifier===selectedMatrixLimit.TileMatrix);if(m){matrix=m;}}const resolution=matrix.ScaleDenominator*28e-5/projection.getMetersPerUnit();const origin=switchXY?[matrix.TopLeftCorner[1],matrix.TopLeftCorner[0]]:matrix.TopLeftCorner;const tileSpanX=matrix.TileWidth*resolution;const tileSpanY=matrix.TileHeight*resolution;let matrixSetExtent=matrixSetObj["BoundingBox"];if(matrixSetExtent&&switchXY){matrixSetExtent=[matrixSetExtent[1],matrixSetExtent[0],matrixSetExtent[3],matrixSetExtent[2]];}let extent=[origin[0]+tileSpanX*selectedMatrixLimit.MinTileCol,origin[1]-tileSpanY*(1+selectedMatrixLimit.MaxTileRow),origin[0]+tileSpanX*(1+selectedMatrixLimit.MaxTileCol),origin[1]-tileSpanY*selectedMatrixLimit.
MinTileRow];if(matrixSetExtent!==void 0&&!containsExtent(matrixSetExtent,extent)){const wgs84BoundingBox=l["WGS84BoundingBox"];const wgs84ProjectionExtent=get$1("EPSG:4326").getExtent();extent=matrixSetExtent;if(wgs84BoundingBox){wrapX2=wgs84BoundingBox[0]===wgs84ProjectionExtent[0]&&wgs84BoundingBox[2]===wgs84ProjectionExtent[2];}else{const wgs84MatrixSetExtent=transformExtent(matrixSetExtent,matrixSetObj["SupportedCRS"],"EPSG:4326");wrapX2=wgs84MatrixSetExtent[0]-1e-10<=wgs84ProjectionExtent[0]&&wgs84MatrixSetExtent[2]+1e-10>=wgs84ProjectionExtent[2];}}const tileGrid=createFromCapabilitiesMatrixSet(matrixSetObj,extent,matrixLimits);const urls=[];let requestEncoding=config["requestEncoding"];requestEncoding=requestEncoding!==void 0?requestEncoding:"";if("OperationsMetadata"in wmtsCap&&"GetTile"in wmtsCap["OperationsMetadata"]){const gets=wmtsCap["OperationsMetadata"]["GetTile"]["DCP"]["HTTP"]["Get"];for(let i=0,ii=gets.length;i<ii;++i){if(gets[i]["Constraint"]){const constraint=gets[i
]["Constraint"].find(function(element){return element["name"]=="GetEncoding";});const encodings=constraint["AllowedValues"]["Value"];if(requestEncoding===""){requestEncoding=encodings[0];}if(requestEncoding==="KVP"){if(encodings.includes("KVP")){urls.push(gets[i]["href"]);}}else{break;}}else if(gets[i]["href"]){requestEncoding="KVP";urls.push(gets[i]["href"]);}}}if(urls.length===0){requestEncoding="REST";l["ResourceURL"].forEach(function(element){if(element["resourceType"]==="tile"){format=element["format"];urls.push(element["template"]);}});}return{urls,layer:config["layer"],matrixSet,format,projection,requestEncoding,tileGrid,style,dimensions,wrapX:wrapX2,crossOrigin:config["crossOrigin"]};}function getAllTextContent(node,normalizeWhitespace){return getAllTextContent_(node,normalizeWhitespace,[]).join("");}function getAllTextContent_(node,normalizeWhitespace,accumulator){if(node.nodeType==Node.CDATA_SECTION_NODE||node.nodeType==Node.TEXT_NODE){if(normalizeWhitespace){accumulator.push
(String(node.nodeValue).replace(/(\r\n|\r|\n)/g,""));}else{accumulator.push(node.nodeValue);}}else{let n;for(n=node.firstChild;n;n=n.nextSibling){getAllTextContent_(n,normalizeWhitespace,accumulator);}}return accumulator;}function isDocument(object){return"documentElement"in object;}function parse$1(xml){return new DOMParser().parseFromString(xml,"application/xml");}function makeArrayPusher(valueReader,thisArg){return(function(node,objectStack){const value=valueReader.call(thisArg!==void 0?thisArg:this,node,objectStack);if(value!==void 0){const array=(objectStack[objectStack.length-1]);array.push(value);}});}function makeObjectPropertyPusher(valueReader,property,thisArg){return(function(node,objectStack){const value=valueReader.call(thisArg!==void 0?thisArg:this,node,objectStack);if(value!==void 0){const object=(objectStack[objectStack.length-1]);const name=property!==void 0?property:node.localName;let array;if(name in object){array=object[name];}else{array=[];object[name]=array;}array
.push(value);}});}function makeObjectPropertySetter(valueReader,property,thisArg){return(function(node,objectStack){const value=valueReader.call(thisArg!==void 0?thisArg:this,node,objectStack);if(value!==void 0){const object=(objectStack[objectStack.length-1]);const name=property!==void 0?property:node.localName;object[name]=value;}});}function makeStructureNS(namespaceURIs,structure,structureNS){structureNS=structureNS!==void 0?structureNS:{};let i,ii;for(i=0,ii=namespaceURIs.length;i<ii;++i){structureNS[namespaceURIs[i]]=structure;}return structureNS;}function parseNode(parsersNS,node,objectStack,thisArg){let n;for(n=node.firstElementChild;n;n=n.nextElementSibling){const parsers2=parsersNS[n.namespaceURI];if(parsers2!==void 0){const parser=parsers2[n.localName];if(parser!==void 0){parser.call(thisArg,n,objectStack);}}}}function pushParseAndPop(object,parsersNS,node,objectStack,thisArg){objectStack.push(object);parseNode(parsersNS,node,objectStack,thisArg);return(objectStack.pop());}
class XML{read(source){if(!source){return null;}if(typeof source==="string"){const doc=parse$1(source);return this.readFromDocument(doc);}if(isDocument(source)){return this.readFromDocument(source);}return this.readFromNode(source);}readFromDocument(doc){for(let n=doc.firstChild;n;n=n.nextSibling){if(n.nodeType==Node.ELEMENT_NODE){return this.readFromNode(n);}}return null;}readFromNode(node){}}const XML$1=XML;const NAMESPACE_URI="http://www.w3.org/1999/xlink";function readHref(node){return node.getAttributeNS(NAMESPACE_URI,"href");}function readDecimal(node){const s=getAllTextContent(node,false);return readDecimalString(s);}function readDecimalString(string){const m=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(string);if(m){return parseFloat(m[1]);}return void 0;}function readPositiveInteger(node){const s=getAllTextContent(node,false);return readNonNegativeIntegerString(s);}function readNonNegativeIntegerString(string){const m=/^\s*(\d+)\s*$/.exec(string);if(m){return parseInt(m[1]
,10);}return void 0;}function readString(node){return getAllTextContent(node,false).trim();}const NAMESPACE_URIS$1=[null,"http://www.opengis.net/ows/1.1"];const PARSERS$1=makeStructureNS(NAMESPACE_URIS$1,{"ServiceIdentification":makeObjectPropertySetter(readServiceIdentification),"ServiceProvider":makeObjectPropertySetter(readServiceProvider),"OperationsMetadata":makeObjectPropertySetter(readOperationsMetadata)});class OWS extends XML$1{constructor(){super();}readFromNode(node){const owsObject=pushParseAndPop({},PARSERS$1,node,[]);return owsObject?owsObject:null;}}const ADDRESS_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"DeliveryPoint":makeObjectPropertySetter(readString),"City":makeObjectPropertySetter(readString),"AdministrativeArea":makeObjectPropertySetter(readString),"PostalCode":makeObjectPropertySetter(readString),"Country":makeObjectPropertySetter(readString),"ElectronicMailAddress":makeObjectPropertySetter(readString)});const ALLOWED_VALUES_PARSERS=makeStructureNS(
NAMESPACE_URIS$1,{"Value":makeObjectPropertyPusher(readValue)});const CONSTRAINT_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"AllowedValues":makeObjectPropertySetter(readAllowedValues)});const CONTACT_INFO_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"Phone":makeObjectPropertySetter(readPhone),"Address":makeObjectPropertySetter(readAddress)});const DCP_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"HTTP":makeObjectPropertySetter(readHttp)});const HTTP_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"Get":makeObjectPropertyPusher(readGet),"Post":void 0});const OPERATION_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"DCP":makeObjectPropertySetter(readDcp)});const OPERATIONS_METADATA_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"Operation":readOperation});const PHONE_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"Voice":makeObjectPropertySetter(readString),"Facsimile":makeObjectPropertySetter(readString)});const REQUEST_METHOD_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"Constraint":makeObjectPropertyPusher(
readConstraint)});const SERVICE_CONTACT_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"IndividualName":makeObjectPropertySetter(readString),"PositionName":makeObjectPropertySetter(readString),"ContactInfo":makeObjectPropertySetter(readContactInfo)});const SERVICE_IDENTIFICATION_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"Abstract":makeObjectPropertySetter(readString),"AccessConstraints":makeObjectPropertySetter(readString),"Fees":makeObjectPropertySetter(readString),"Title":makeObjectPropertySetter(readString),"ServiceTypeVersion":makeObjectPropertySetter(readString),"ServiceType":makeObjectPropertySetter(readString)});const SERVICE_PROVIDER_PARSERS=makeStructureNS(NAMESPACE_URIS$1,{"ProviderName":makeObjectPropertySetter(readString),"ProviderSite":makeObjectPropertySetter(readHref),"ServiceContact":makeObjectPropertySetter(readServiceContact)});function readAddress(node,objectStack){return pushParseAndPop({},ADDRESS_PARSERS,node,objectStack);}function readAllowedValues(node,objectStack){
return pushParseAndPop({},ALLOWED_VALUES_PARSERS,node,objectStack);}function readConstraint(node,objectStack){const name=node.getAttribute("name");if(!name){return void 0;}return pushParseAndPop({"name":name},CONSTRAINT_PARSERS,node,objectStack);}function readContactInfo(node,objectStack){return pushParseAndPop({},CONTACT_INFO_PARSERS,node,objectStack);}function readDcp(node,objectStack){return pushParseAndPop({},DCP_PARSERS,node,objectStack);}function readGet(node,objectStack){const href=readHref(node);if(!href){return void 0;}return pushParseAndPop({"href":href},REQUEST_METHOD_PARSERS,node,objectStack);}function readHttp(node,objectStack){return pushParseAndPop({},HTTP_PARSERS,node,objectStack);}function readOperation(node,objectStack){const name=node.getAttribute("name");const value=pushParseAndPop({},OPERATION_PARSERS,node,objectStack);if(!value){return void 0;}const object=(objectStack[objectStack.length-1]);object[name]=value;}function readOperationsMetadata(node,objectStack){
return pushParseAndPop({},OPERATIONS_METADATA_PARSERS,node,objectStack);}function readPhone(node,objectStack){return pushParseAndPop({},PHONE_PARSERS,node,objectStack);}function readServiceIdentification(node,objectStack){return pushParseAndPop({},SERVICE_IDENTIFICATION_PARSERS,node,objectStack);}function readServiceContact(node,objectStack){return pushParseAndPop({},SERVICE_CONTACT_PARSERS,node,objectStack);}function readServiceProvider(node,objectStack){return pushParseAndPop({},SERVICE_PROVIDER_PARSERS,node,objectStack);}function readValue(node,objectStack){return readString(node);}const OWS$1=OWS;const NAMESPACE_URIS=[null,"http://www.opengis.net/wmts/1.0"];const OWS_NAMESPACE_URIS=[null,"http://www.opengis.net/ows/1.1"];const PARSERS=makeStructureNS(NAMESPACE_URIS,{"Contents":makeObjectPropertySetter(readContents)});class WMTSCapabilities extends XML$1{constructor(){super();this.owsParser_=new OWS$1();}readFromNode(node){let version=node.getAttribute("version");if(version){version
=version.trim();}let WMTSCapabilityObject=this.owsParser_.readFromNode(node);if(!WMTSCapabilityObject){return null;}WMTSCapabilityObject["version"]=version;WMTSCapabilityObject=pushParseAndPop(WMTSCapabilityObject,PARSERS,node,[]);return WMTSCapabilityObject?WMTSCapabilityObject:null;}}const CONTENTS_PARSERS=makeStructureNS(NAMESPACE_URIS,{"Layer":makeObjectPropertyPusher(readLayer),"TileMatrixSet":makeObjectPropertyPusher(readTileMatrixSet)});const LAYER_PARSERS=makeStructureNS(NAMESPACE_URIS,{"Style":makeObjectPropertyPusher(readStyle),"Format":makeObjectPropertyPusher(readString),"TileMatrixSetLink":makeObjectPropertyPusher(readTileMatrixSetLink),"Dimension":makeObjectPropertyPusher(readDimensions),"ResourceURL":makeObjectPropertyPusher(readResourceUrl)},makeStructureNS(OWS_NAMESPACE_URIS,{"Title":makeObjectPropertySetter(readString),"Abstract":makeObjectPropertySetter(readString),"WGS84BoundingBox":makeObjectPropertySetter(readBoundingBox),"Identifier":makeObjectPropertySetter(
readString)}));const STYLE_PARSERS=makeStructureNS(NAMESPACE_URIS,{"LegendURL":makeObjectPropertyPusher(readLegendUrl)},makeStructureNS(OWS_NAMESPACE_URIS,{"Title":makeObjectPropertySetter(readString),"Identifier":makeObjectPropertySetter(readString)}));const TMS_LINKS_PARSERS=makeStructureNS(NAMESPACE_URIS,{"TileMatrixSet":makeObjectPropertySetter(readString),"TileMatrixSetLimits":makeObjectPropertySetter(readTileMatrixLimitsList)});const TMS_LIMITS_LIST_PARSERS=makeStructureNS(NAMESPACE_URIS,{"TileMatrixLimits":makeArrayPusher(readTileMatrixLimits)});const TMS_LIMITS_PARSERS=makeStructureNS(NAMESPACE_URIS,{"TileMatrix":makeObjectPropertySetter(readString),"MinTileRow":makeObjectPropertySetter(readPositiveInteger),"MaxTileRow":makeObjectPropertySetter(readPositiveInteger),"MinTileCol":makeObjectPropertySetter(readPositiveInteger),"MaxTileCol":makeObjectPropertySetter(readPositiveInteger)});const DIMENSION_PARSERS=makeStructureNS(NAMESPACE_URIS,{"Default":makeObjectPropertySetter(
readString),"Value":makeObjectPropertyPusher(readString)},makeStructureNS(OWS_NAMESPACE_URIS,{"Identifier":makeObjectPropertySetter(readString)}));const WGS84_BBOX_READERS=makeStructureNS(OWS_NAMESPACE_URIS,{"LowerCorner":makeArrayPusher(readCoordinates),"UpperCorner":makeArrayPusher(readCoordinates)});const TMS_PARSERS=makeStructureNS(NAMESPACE_URIS,{"WellKnownScaleSet":makeObjectPropertySetter(readString),"TileMatrix":makeObjectPropertyPusher(readTileMatrix)},makeStructureNS(OWS_NAMESPACE_URIS,{"SupportedCRS":makeObjectPropertySetter(readString),"Identifier":makeObjectPropertySetter(readString),"BoundingBox":makeObjectPropertySetter(readBoundingBox)}));const TM_PARSERS=makeStructureNS(NAMESPACE_URIS,{"TopLeftCorner":makeObjectPropertySetter(readCoordinates),"ScaleDenominator":makeObjectPropertySetter(readDecimal),"TileWidth":makeObjectPropertySetter(readPositiveInteger),"TileHeight":makeObjectPropertySetter(readPositiveInteger),"MatrixWidth":makeObjectPropertySetter(
readPositiveInteger),"MatrixHeight":makeObjectPropertySetter(readPositiveInteger)},makeStructureNS(OWS_NAMESPACE_URIS,{"Identifier":makeObjectPropertySetter(readString)}));function readContents(node,objectStack){return pushParseAndPop({},CONTENTS_PARSERS,node,objectStack);}function readLayer(node,objectStack){return pushParseAndPop({},LAYER_PARSERS,node,objectStack);}function readTileMatrixSet(node,objectStack){return pushParseAndPop({},TMS_PARSERS,node,objectStack);}function readStyle(node,objectStack){const style=pushParseAndPop({},STYLE_PARSERS,node,objectStack);if(!style){return void 0;}const isDefault=node.getAttribute("isDefault")==="true";style["isDefault"]=isDefault;return style;}function readTileMatrixSetLink(node,objectStack){return pushParseAndPop({},TMS_LINKS_PARSERS,node,objectStack);}function readDimensions(node,objectStack){return pushParseAndPop({},DIMENSION_PARSERS,node,objectStack);}function readResourceUrl(node,objectStack){const format=node.getAttribute("format");
const template=node.getAttribute("template");const resourceType=node.getAttribute("resourceType");const resource={};if(format){resource["format"]=format;}if(template){resource["template"]=template;}if(resourceType){resource["resourceType"]=resourceType;}return resource;}function readBoundingBox(node,objectStack){const coordinates2=pushParseAndPop([],WGS84_BBOX_READERS,node,objectStack);if(coordinates2.length!=2){return void 0;}return boundingExtent(coordinates2);}function readLegendUrl(node,objectStack){const legend={};legend["format"]=node.getAttribute("format");legend["href"]=readHref(node);return legend;}function readCoordinates(node,objectStack){const coordinates2=readString(node).split(/\s+/);if(!coordinates2||coordinates2.length!=2){return void 0;}const x=+coordinates2[0];const y=+coordinates2[1];if(isNaN(x)||isNaN(y)){return void 0;}return[x,y];}function readTileMatrix(node,objectStack){return pushParseAndPop({},TM_PARSERS,node,objectStack);}function readTileMatrixLimitsList(
node,objectStack){return pushParseAndPop([],TMS_LIMITS_LIST_PARSERS,node,objectStack);}function readTileMatrixLimits(node,objectStack){return pushParseAndPop({},TMS_LIMITS_PARSERS,node,objectStack);}const OlFormatWmtsCapabilities=WMTSCapabilities;let numTypes=0;const BooleanType=1<<numTypes++;const NumberType=1<<numTypes++;const StringType=1<<numTypes++;const ColorType=1<<numTypes++;const NumberArrayType=1<<numTypes++;const AnyType=Math.pow(2,numTypes)-1;const typeNames={[BooleanType]:"boolean",[NumberType]:"number",[StringType]:"string",[ColorType]:"color",[NumberArrayType]:"number[]"};const namedTypes=Object.keys(typeNames).map(Number).sort(ascending);function typeName(type){const names=[];for(const namedType of namedTypes){if(includesType(type,namedType)){names.push(typeNames[namedType]);}}if(names.length===0){return"untyped";}if(names.length<3){return names.join(" or ");}return names.slice(0,-1).join(", ")+", or "+names[names.length-1];}function includesType(broad,specific){return(
broad&specific)===specific;}function overlapsType(oneType,otherType){return!!(oneType&otherType);}class LiteralExpression{constructor(type,value){this.type=type;this.value=value;}}class CallExpression{constructor(type,operator,...args){this.type=type;this.operator=operator;this.args=args;}}function newParsingContext(){return{variables:new Set(),properties:new Set()};}function parse(encoded,context){switch(typeof encoded){case"boolean":{return new LiteralExpression(BooleanType,encoded);}case"number":{return new LiteralExpression(NumberType,encoded);}case"string":{return new LiteralExpression(StringType,encoded);}}if(!Array.isArray(encoded)){throw new Error("Expression must be an array or a primitive value");}if(encoded.length===0){throw new Error("Empty expression");}if(typeof encoded[0]==="string"){return parseCallExpression(encoded,context);}for(const item of encoded){if(typeof item!=="number"){throw new Error("Expected an array of numbers");}}let type=NumberArrayType;if(encoded.
length===3||encoded.length===4){type|=ColorType;}return new LiteralExpression(type,encoded);}const Ops={Number:"number",String:"string",Get:"get",Var:"var",Any:"any",All:"all",Not:"!",Resolution:"resolution",Equal:"==",NotEqual:"!=",GreaterThan:">",GreaterThanOrEqualTo:">=",LessThan:"<",LessThanOrEqualTo:"<=",Multiply:"*",Divide:"/",Add:"+",Subtract:"-",Clamp:"clamp",Mod:"%",Pow:"^",Abs:"abs",Floor:"floor",Ceil:"ceil",Round:"round",Sin:"sin",Cos:"cos",Atan:"atan",Sqrt:"sqrt",Match:"match"};const parsers={[Ops.Number]:createParser(withArgs(1,Infinity,AnyType),NumberType),[Ops.String]:createParser(withArgs(1,Infinity,AnyType),StringType),[Ops.Get]:createParser(withGetArgs,AnyType),[Ops.Var]:createParser(withVarArgs,AnyType),[Ops.Resolution]:createParser(withNoArgs,NumberType),[Ops.Any]:createParser(withArgs(2,Infinity,BooleanType),BooleanType),[Ops.All]:createParser(withArgs(2,Infinity,BooleanType),BooleanType),[Ops.Not]:createParser(withArgs(1,1,BooleanType),BooleanType),[Ops.Equal]:
createParser(withArgs(2,2,AnyType),BooleanType),[Ops.NotEqual]:createParser(withArgs(2,2,AnyType),BooleanType),[Ops.GreaterThan]:createParser(withArgs(2,2,AnyType),BooleanType),[Ops.GreaterThanOrEqualTo]:createParser(withArgs(2,2,AnyType),BooleanType),[Ops.LessThan]:createParser(withArgs(2,2,AnyType),BooleanType),[Ops.LessThanOrEqualTo]:createParser(withArgs(2,2,AnyType),BooleanType),[Ops.Multiply]:createParser(withArgs(2,Infinity,NumberType),NumberType),[Ops.Divide]:createParser(withArgs(2,2,NumberType),NumberType),[Ops.Add]:createParser(withArgs(2,Infinity,NumberType),NumberType),[Ops.Subtract]:createParser(withArgs(2,2,NumberType),NumberType),[Ops.Clamp]:createParser(withArgs(3,3,NumberType),NumberType),[Ops.Mod]:createParser(withArgs(2,2,NumberType),NumberType),[Ops.Pow]:createParser(withArgs(2,2,NumberType),NumberType),[Ops.Abs]:createParser(withArgs(1,1,NumberType),NumberType),[Ops.Floor]:createParser(withArgs(1,1,NumberType),NumberType),[Ops.Ceil]:createParser(withArgs(1,1,
NumberType),NumberType),[Ops.Round]:createParser(withArgs(1,1,NumberType),NumberType),[Ops.Sin]:createParser(withArgs(1,1,NumberType),NumberType),[Ops.Cos]:createParser(withArgs(1,1,NumberType),NumberType),[Ops.Atan]:createParser(withArgs(1,2,NumberType),NumberType),[Ops.Sqrt]:createParser(withArgs(1,1,NumberType),NumberType),[Ops.Match]:createParser(withArgs(4,Infinity,StringType|NumberType),AnyType)};function withGetArgs(encoded,context){if(encoded.length!==2){throw new Error("Expected 1 argument for get operation");}const arg=parse(encoded[1],context);if(!(arg instanceof LiteralExpression)){throw new Error("Expected a literal argument for get operation");}if(typeof arg.value!=="string"){throw new Error("Expected a string argument for get operation");}context.properties.add(arg.value);return[arg];}function withVarArgs(encoded,context){if(encoded.length!==2){throw new Error("Expected 1 argument for var operation");}const arg=parse(encoded[1],context);if(!(arg instanceof
LiteralExpression)){throw new Error("Expected a literal argument for var operation");}if(typeof arg.value!=="string"){throw new Error("Expected a string argument for get operation");}context.variables.add(arg.value);return[arg];}function withNoArgs(encoded,context){const operation=encoded[0];if(encoded.length!==1){throw new Error(`Expected no arguments for ${operation} operation`);}return[];}function withArgs(minArgs,maxArgs,argType){return function(encoded,context){const operation=encoded[0];const argCount=encoded.length-1;if(minArgs===maxArgs){if(argCount!==minArgs){const plural=minArgs===1?"":"s";throw new Error(`Expected ${minArgs} argument${plural} for operation ${operation}, got ${argCount}`);}}else if(argCount<minArgs||argCount>maxArgs){throw new Error(`Expected ${minArgs} to ${maxArgs} arguments for operation ${operation}, got ${argCount}`);}const args=new Array(argCount);for(let i=0;i<argCount;++i){const expression=parse(encoded[i+1],context);if(!overlapsType(argType,
expression.type)){const gotType=typeName(argType);const expectedType=typeName(expression.type);throw new Error(`Unexpected type for argument ${i} of ${operation} operation : got ${gotType} but expected ${expectedType}`);}args[i]=expression;}return args;};}function createParser(argValidator,returnType){return function(encoded,context){const operator=encoded[0];const args=argValidator(encoded,context);return new CallExpression(returnType,operator,...args);};}function parseCallExpression(encoded,context){const operator=encoded[0];const parser=parsers[operator];if(!parser){throw new Error(`Unknown operator: ${operator}`);}return parser(encoded,context);}function newEvaluationContext(){return{variables:{},properties:{},resolution:NaN};}function buildExpression(encoded,type,context){const expression=parse(encoded,context);if(!overlapsType(type,expression.type)){const expected=typeName(type);const actual=typeName(expression.type);throw new Error(`Expected expression to be of type ${expected
}, got ${actual}`);}return compileExpression(expression);}function compileExpression(expression,context){if(expression instanceof LiteralExpression){return function(){return expression.value;};}const operator=expression.operator;switch(operator){case Ops.Number:case Ops.String:{return compileAssertionExpression(expression);}case Ops.Get:case Ops.Var:{return compileAccessorExpression(expression);}case Ops.Resolution:{return(context2)=>context2.resolution;}case Ops.Any:case Ops.All:case Ops.Not:{return compileLogicalExpression(expression);}case Ops.Equal:case Ops.NotEqual:case Ops.LessThan:case Ops.LessThanOrEqualTo:case Ops.GreaterThan:case Ops.GreaterThanOrEqualTo:{return compileComparisonExpression(expression);}case Ops.Multiply:case Ops.Divide:case Ops.Add:case Ops.Subtract:case Ops.Clamp:case Ops.Mod:case Ops.Pow:case Ops.Abs:case Ops.Floor:case Ops.Ceil:case Ops.Round:case Ops.Sin:case Ops.Cos:case Ops.Atan:case Ops.Sqrt:{return compileNumericExpression(expression);}case Ops.Match:
{return compileMatchExpression(expression);}default:{throw new Error(`Unsupported operator ${operator}`);}}}function compileAssertionExpression(expression,context){const type=expression.operator;const length=expression.args.length;const args=new Array(length);for(let i=0;i<length;++i){args[i]=compileExpression(expression.args[i]);}switch(type){case Ops.Number:case Ops.String:{return(context2)=>{for(let i=0;i<length;++i){const value=args[i](context2);if(typeof value===type){return value;}}throw new Error(`Expected one of the values to be a ${type}`);};}default:{throw new Error(`Unsupported assertion operator ${type}`);}}}function compileAccessorExpression(expression,context){const nameExpression=expression.args[0];if(!(nameExpression instanceof LiteralExpression)){throw new Error("Expected literal name");}const name=nameExpression.value;if(typeof name!=="string"){throw new Error("Expected string name");}switch(expression.operator){case Ops.Get:{return(context2)=>context2.properties[name
];}case Ops.Var:{return(context2)=>context2.variables[name];}default:{throw new Error(`Unsupported accessor operator ${expression.operator}`);}}}function compileComparisonExpression(expression,context){const op=expression.operator;const left=compileExpression(expression.args[0]);const right=compileExpression(expression.args[1]);switch(op){case Ops.Equal:{return(context2)=>left(context2)===right(context2);}case Ops.NotEqual:{return(context2)=>left(context2)!==right(context2);}case Ops.LessThan:{return(context2)=>left(context2)<right(context2);}case Ops.LessThanOrEqualTo:{return(context2)=>left(context2)<=right(context2);}case Ops.GreaterThan:{return(context2)=>left(context2)>right(context2);}case Ops.GreaterThanOrEqualTo:{return(context2)=>left(context2)>=right(context2);}default:{throw new Error(`Unsupported comparison operator ${op}`);}}}function compileLogicalExpression(expression,context){const op=expression.operator;const length=expression.args.length;const args=new Array(length);
for(let i=0;i<length;++i){args[i]=compileExpression(expression.args[i]);}switch(op){case Ops.Any:{return(context2)=>{for(let i=0;i<length;++i){if(args[i](context2)){return true;}}return false;};}case Ops.All:{return(context2)=>{for(let i=0;i<length;++i){if(!args[i](context2)){return false;}}return true;};}case Ops.Not:{return(context2)=>!args[0](context2);}default:{throw new Error(`Unsupported logical operator ${op}`);}}}function compileNumericExpression(expression,context){const op=expression.operator;const length=expression.args.length;const args=new Array(length);for(let i=0;i<length;++i){args[i]=compileExpression(expression.args[i]);}switch(op){case Ops.Multiply:{return(context2)=>{let value=1;for(let i=0;i<length;++i){value*=args[i](context2);}return value;};}case Ops.Divide:{return(context2)=>args[0](context2)/args[1](context2);}case Ops.Add:{return(context2)=>{let value=0;for(let i=0;i<length;++i){value+=args[i](context2);}return value;};}case Ops.Subtract:{return(context2)=>
args[0](context2)-args[1](context2);}case Ops.Clamp:{return(context2)=>{const value=args[0](context2);const min=args[1](context2);if(value<min){return min;}const max=args[2](context2);if(value>max){return max;}return value;};}case Ops.Mod:{return(context2)=>args[0](context2)%args[1](context2);}case Ops.Pow:{return(context2)=>Math.pow(args[0](context2),args[1](context2));}case Ops.Abs:{return(context2)=>Math.abs(args[0](context2));}case Ops.Floor:{return(context2)=>Math.floor(args[0](context2));}case Ops.Ceil:{return(context2)=>Math.ceil(args[0](context2));}case Ops.Round:{return(context2)=>Math.round(args[0](context2));}case Ops.Sin:{return(context2)=>Math.sin(args[0](context2));}case Ops.Cos:{return(context2)=>Math.cos(args[0](context2));}case Ops.Atan:{if(length===2){return(context2)=>Math.atan2(args[0](context2),args[1](context2));}return(context2)=>Math.atan(args[0](context2));}case Ops.Sqrt:{return(context2)=>Math.sqrt(args[0](context2));}default:{throw new Error(
`Unsupported numeric operator ${op}`);}}}function compileMatchExpression(expression,context){const length=expression.args.length;const args=new Array(length);for(let i=0;i<length;++i){args[i]=compileExpression(expression.args[i]);}return(context2)=>{const value=args[0](context2);for(let i=1;i<length;i+=2){if(value===args[i](context2)){return args[i+1](context2);}}return args[length-1](context2);};}function always(context){return true;}function rulesToStyleFunction(rules){const parsingContext=newParsingContext();const evaluator=buildRuleSet(rules,parsingContext);const evaluationContext=newEvaluationContext();return function(feature,resolution){evaluationContext.properties=feature.getPropertiesInternal();evaluationContext.resolution=resolution;return evaluator(evaluationContext);};}function flatStylesToStyleFunction(flatStyles){const parsingContext=newParsingContext();const length=flatStyles.length;const evaluators=new Array(length);for(let i=0;i<length;++i){evaluators[i]=buildStyle(
flatStyles[i],parsingContext);}const evaluationContext=newEvaluationContext();const styles=new Array(length);return function(feature,resolution){evaluationContext.properties=feature.getPropertiesInternal();evaluationContext.resolution=resolution;for(let i=0;i<length;++i){styles[i]=evaluators[i](evaluationContext);}return styles;};}function buildRuleSet(rules,context){const length=rules.length;const compiledRules=new Array(length);for(let i=0;i<length;++i){const rule=rules[i];const filter="filter"in rule?buildExpression(rule.filter,BooleanType,context):always;let styles;if(Array.isArray(rule.style)){const styleLength=rule.style.length;styles=new Array(styleLength);for(let j=0;j<styleLength;++j){styles[j]=buildStyle(rule.style[j],context);}}else{styles=[buildStyle(rule.style,context)];}compiledRules[i]={filter,styles};}return function(context2){const styles=[];let someMatched=false;for(let i=0;i<length;++i){const filterEvaluator=compiledRules[i].filter;if(!filterEvaluator(context2)){
continue;}if(rules[i].else&&someMatched){continue;}someMatched=true;for(const styleEvaluator of compiledRules[i].styles){const style=styleEvaluator(context2);if(!style){continue;}styles.push(style);}}return styles;};}function buildStyle(flatStyle,context){const evaluateFill=buildFill(flatStyle,"",context);const evaluateStroke=buildStroke(flatStyle,"",context);const evaluateText=buildText(flatStyle,context);const evaluateImage=buildImage(flatStyle,context);const evaluateZIndex=numberEvaluator(flatStyle,"z-index",context);const style=new Style();return function(context2){let empty=true;if(evaluateFill){const fill=evaluateFill(context2);if(fill){empty=false;}style.setFill(fill);}if(evaluateStroke){const stroke=evaluateStroke(context2);if(stroke){empty=false;}style.setStroke(stroke);}if(evaluateText){const text=evaluateText(context2);if(text){empty=false;}style.setText(text);}if(evaluateImage){const image=evaluateImage(context2);if(image){empty=false;}style.setImage(image);}if(
evaluateZIndex){style.setZIndex(evaluateZIndex(context2));}if(empty){return null;}return style;};}function buildFill(flatStyle,prefix,context){const evaluateColor=colorLikeEvaluator(flatStyle,prefix+"fill-color",context);if(!evaluateColor){return null;}const fill=new Fill$1();return function(context2){const color=evaluateColor(context2);if(color==="none"){return null;}fill.setColor(color);return fill;};}function buildStroke(flatStyle,prefix,context){const evaluateWidth=numberEvaluator(flatStyle,prefix+"stroke-width",context);const evaluateColor=colorLikeEvaluator(flatStyle,prefix+"stroke-color",context);if(!evaluateWidth&&!evaluateColor){return null;}const evaluateLineCap=stringEvaluator(flatStyle,prefix+"stroke-line-cap",context);const evaluateLineJoin=stringEvaluator(flatStyle,prefix+"stroke-line-join",context);const evaluateLineDash=numberArrayEvaluator(flatStyle,prefix+"stroke-line-dash",context);const evaluateLineDashOffset=numberEvaluator(flatStyle,prefix+
"stroke-line-dash-offset",context);const evaluateMiterLimit=numberEvaluator(flatStyle,prefix+"stroke-miter-limit",context);const stroke=new OlStroke();return function(context2){if(evaluateColor){const color=evaluateColor(context2);if(color==="none"){return null;}stroke.setColor(color);}if(evaluateWidth){stroke.setWidth(evaluateWidth(context2));}if(evaluateLineCap){const lineCap=evaluateLineCap(context2);if(lineCap!=="butt"&&lineCap!=="round"&&lineCap!=="square"){throw new Error("Expected butt, round, or square line cap");}stroke.setLineCap(lineCap);}if(evaluateLineJoin){const lineJoin=evaluateLineJoin(context2);if(lineJoin!=="bevel"&&lineJoin!=="round"&&lineJoin!=="miter"){throw new Error("Expected bevel, round, or miter line join");}stroke.setLineJoin(lineJoin);}if(evaluateLineDash){stroke.setLineDash(evaluateLineDash(context2));}if(evaluateLineDashOffset){stroke.setLineDashOffset(evaluateLineDashOffset(context2));}if(evaluateMiterLimit){stroke.setMiterLimit(evaluateMiterLimit(
context2));}return stroke;};}function buildText(flatStyle,context){const prefix="text-";const evaluateValue=stringEvaluator(flatStyle,prefix+"value",context);if(!evaluateValue){return null;}const evaluateFill=buildFill(flatStyle,prefix,context);const evaluateBackgroundFill=buildFill(flatStyle,prefix+"background-",context);const evaluateStroke=buildStroke(flatStyle,prefix,context);const evaluateBackgroundStroke=buildStroke(flatStyle,prefix+"background-",context);const evaluateFont=stringEvaluator(flatStyle,prefix+"font",context);const evaluateMaxAngle=numberEvaluator(flatStyle,prefix+"max-angle",context);const evaluateOffsetX=numberEvaluator(flatStyle,prefix+"offset-x",context);const evaluateOffsetY=numberEvaluator(flatStyle,prefix+"offset-y",context);const evaluateOverflow=booleanEvaluator(flatStyle,prefix+"overflow",context);const evaluatePlacement=stringEvaluator(flatStyle,prefix+"placement",context);const evaluateRepeat=numberEvaluator(flatStyle,prefix+"repeat",context);const
evaluateScale=sizeLikeEvaluator(flatStyle,prefix+"scale",context);const evaluateRotateWithView=booleanEvaluator(flatStyle,prefix+"rotate-with-view",context);const evaluateRotation=numberEvaluator(flatStyle,prefix+"rotation",context);const evaluateAlign=stringEvaluator(flatStyle,prefix+"align",context);const evaluateJustify=stringEvaluator(flatStyle,prefix+"justify",context);const evaluateBaseline=stringEvaluator(flatStyle,prefix+"baseline",context);const evaluatePadding=numberArrayEvaluator(flatStyle,prefix+"padding",context);const text=new OlText({});return function(context2){text.setText(evaluateValue(context2));if(evaluateFill){text.setFill(evaluateFill(context2));}if(evaluateBackgroundFill){text.setBackgroundFill(evaluateBackgroundFill(context2));}if(evaluateStroke){text.setStroke(evaluateStroke(context2));}if(evaluateBackgroundStroke){text.setBackgroundStroke(evaluateBackgroundStroke(context2));}if(evaluateFont){text.setFont(evaluateFont(context2));}if(evaluateMaxAngle){text.
setMaxAngle(evaluateMaxAngle(context2));}if(evaluateOffsetX){text.setOffsetX(evaluateOffsetX(context2));}if(evaluateOffsetY){text.setOffsetY(evaluateOffsetY(context2));}if(evaluateOverflow){text.setOverflow(evaluateOverflow(context2));}if(evaluatePlacement){const placement=evaluatePlacement(context2);if(placement!=="point"&&placement!=="line"){throw new Error("Expected point or line for text-placement");}text.setPlacement(placement);}if(evaluateRepeat){text.setRepeat(evaluateRepeat(context2));}if(evaluateScale){text.setScale(evaluateScale(context2));}if(evaluateRotateWithView){text.setRotateWithView(evaluateRotateWithView(context2));}if(evaluateRotation){text.setRotation(evaluateRotation(context2));}if(evaluateAlign){const textAlign=evaluateAlign(context2);if(textAlign!=="left"&&textAlign!=="center"&&textAlign!=="right"&&textAlign!=="end"&&textAlign!=="start"){throw new Error("Expected left, right, center, start, or end for text-align");}text.setTextAlign(textAlign);}if(evaluateJustify
){const justify=evaluateJustify(context2);if(justify!=="left"&&justify!=="right"&&justify!=="center"){throw new Error("Expected left, right, or center for text-justify");}text.setJustify(justify);}if(evaluateBaseline){const textBaseline=evaluateBaseline(context2);if(textBaseline!=="bottom"&&textBaseline!=="top"&&textBaseline!=="middle"&&textBaseline!=="alphabetic"&&textBaseline!=="hanging"){throw new Error("Expected bottom, top, middle, alphabetic, or hanging for text-baseline");}text.setTextBaseline(textBaseline);}if(evaluatePadding){text.setPadding(evaluatePadding(context2));}return text;};}function buildImage(flatStyle,context){if("icon-src"in flatStyle){return buildIcon(flatStyle,context);}if("shape-points"in flatStyle){return buildShape(flatStyle,context);}if("circle-radius"in flatStyle){return buildCircle(flatStyle,context);}return null;}function buildIcon(flatStyle,context){const prefix="icon-";const srcName=prefix+"src";const src=requireString(flatStyle[srcName],srcName);const
evaluateAnchor=coordinateEvaluator(flatStyle,prefix+"anchor",context);const evaluateScale=sizeLikeEvaluator(flatStyle,prefix+"scale",context);const evaluateOpacity=numberEvaluator(flatStyle,prefix+"opacity",context);const evaluateDisplacement=coordinateEvaluator(flatStyle,prefix+"displacement",context);const evaluateRotation=numberEvaluator(flatStyle,prefix+"rotation",context);const evaluateRotateWithView=booleanEvaluator(flatStyle,prefix+"rotate-with-view",context);const anchorOrigin=optionalIconOrigin(flatStyle,prefix+"anchor-origin");const anchorXUnits=optionalIconAnchorUnits(flatStyle,prefix+"anchor-x-units");const anchorYUnits=optionalIconAnchorUnits(flatStyle,prefix+"anchor-y-units");const color=optionalColorLike(flatStyle,prefix+"color");const crossOrigin=optionalString(flatStyle,prefix+"cross-origin");const offset=optionalNumberArray(flatStyle,prefix+"offset");const offsetOrigin=optionalIconOrigin(flatStyle,prefix+"offset-origin");const width=optionalNumber(flatStyle,prefix+
"width");const height=optionalNumber(flatStyle,prefix+"height");const size=optionalSize(flatStyle,prefix+"size");const declutterMode=optionalDeclutterMode(flatStyle,prefix+"declutter");const icon=new OlIcon({src,anchorOrigin,anchorXUnits,anchorYUnits,color,crossOrigin,offset,offsetOrigin,height,width,size,declutterMode});return function(context2){if(evaluateOpacity){icon.setOpacity(evaluateOpacity(context2));}if(evaluateDisplacement){icon.setDisplacement(evaluateDisplacement(context2));}if(evaluateRotation){icon.setRotation(evaluateRotation(context2));}if(evaluateRotateWithView){icon.setRotateWithView(evaluateRotateWithView(context2));}if(evaluateScale){icon.setScale(evaluateScale(context2));}if(evaluateAnchor){icon.setAnchor(evaluateAnchor(context2));}return icon;};}function buildShape(flatStyle,context){const prefix="shape-";const pointsName=prefix+"points";const points=requireNumber(flatStyle[pointsName],pointsName);const evaluateFill=buildFill(flatStyle,prefix,context);const
evaluateStroke=buildStroke(flatStyle,prefix,context);const evaluateScale=sizeLikeEvaluator(flatStyle,prefix+"scale",context);const evaluateDisplacement=coordinateEvaluator(flatStyle,prefix+"displacement",context);const evaluateRotation=numberEvaluator(flatStyle,prefix+"rotation",context);const evaluateRotateWithView=booleanEvaluator(flatStyle,prefix+"rotate-with-view",context);const radius=optionalNumber(flatStyle,prefix+"radius");const radius1=optionalNumber(flatStyle,prefix+"radius1");const radius2=optionalNumber(flatStyle,prefix+"radius2");const angle=optionalNumber(flatStyle,prefix+"angle");const declutterMode=optionalDeclutterMode(flatStyle,prefix+"declutter-mode");const shape=new RegularShape$1({points,radius,radius1,radius2,angle,declutterMode});return function(context2){if(evaluateFill){shape.setFill(evaluateFill(context2));}if(evaluateStroke){shape.setStroke(evaluateStroke(context2));}if(evaluateDisplacement){shape.setDisplacement(evaluateDisplacement(context2));}if(
evaluateRotation){shape.setRotation(evaluateRotation(context2));}if(evaluateRotateWithView){shape.setRotateWithView(evaluateRotateWithView(context2));}if(evaluateScale){shape.setScale(evaluateScale(context2));}return shape;};}function buildCircle(flatStyle,context){const prefix="circle-";const evaluateFill=buildFill(flatStyle,prefix,context);const evaluateStroke=buildStroke(flatStyle,prefix,context);const evaluateRadius=numberEvaluator(flatStyle,prefix+"radius",context);const evaluateScale=sizeLikeEvaluator(flatStyle,prefix+"scale",context);const evaluateDisplacement=coordinateEvaluator(flatStyle,prefix+"displacement",context);const evaluateRotation=numberEvaluator(flatStyle,prefix+"rotation",context);const evaluateRotateWithView=booleanEvaluator(flatStyle,prefix+"rotate-with-view",context);const declutterMode=optionalDeclutterMode(flatStyle,prefix+"declutter-mode");const circle=new Circle({radius:5,declutterMode});return function(context2){if(evaluateRadius){circle.setRadius(
evaluateRadius(context2));}if(evaluateFill){circle.setFill(evaluateFill(context2));}if(evaluateStroke){circle.setStroke(evaluateStroke(context2));}if(evaluateDisplacement){circle.setDisplacement(evaluateDisplacement(context2));}if(evaluateRotation){circle.setRotation(evaluateRotation(context2));}if(evaluateRotateWithView){circle.setRotateWithView(evaluateRotateWithView(context2));}if(evaluateScale){circle.setScale(evaluateScale(context2));}return circle;};}function numberEvaluator(flatStyle,name,context){if(!(name in flatStyle)){return void 0;}const evaluator=buildExpression(flatStyle[name],NumberType,context);return function(context2){return requireNumber(evaluator(context2),name);};}function stringEvaluator(flatStyle,name,context){if(!(name in flatStyle)){return null;}const evaluator=buildExpression(flatStyle[name],StringType,context);return function(context2){return requireString(evaluator(context2),name);};}function booleanEvaluator(flatStyle,name,context){if(!(name in flatStyle)){
return null;}const evaluator=buildExpression(flatStyle[name],BooleanType,context);return function(context2){const value=evaluator(context2);if(typeof value!=="boolean"){throw new Error(`Expected a boolean for ${name}`);}return value;};}function colorLikeEvaluator(flatStyle,name,context){if(!(name in flatStyle)){return null;}const evaluator=buildExpression(flatStyle[name],ColorType|StringType,context);return function(context2){return requireColorLike(evaluator(context2),name);};}function numberArrayEvaluator(flatStyle,name,context){if(!(name in flatStyle)){return null;}const evaluator=buildExpression(flatStyle[name],NumberArrayType,context);return function(context2){return requireNumberArray(evaluator(context2),name);};}function coordinateEvaluator(flatStyle,name,context){if(!(name in flatStyle)){return null;}const evaluator=buildExpression(flatStyle[name],NumberArrayType,context);return function(context2){const array=requireNumberArray(evaluator(context2),name);if(array.length!==2){
throw new Error(`Expected two numbers for ${name}`);}return array;};}function sizeLikeEvaluator(flatStyle,name,context){if(!(name in flatStyle)){return null;}const evaluator=buildExpression(flatStyle[name],NumberArrayType|NumberType,context);return function(context2){return requireSizeLike(evaluator(context2),name);};}function optionalNumber(flatStyle,property){const value=flatStyle[property];if(value===void 0){return void 0;}if(typeof value!=="number"){throw new Error(`Expected a number for ${property}`);}return value;}function optionalSize(flatStyle,property){const encoded=flatStyle[property];if(encoded===void 0){return void 0;}if(typeof encoded==="number"){return toSize(encoded);}if(!Array.isArray(encoded)){throw new Error(`Expected a number or size array for ${property}`);}if(encoded.length!==2||typeof encoded[0]!=="number"||typeof encoded[1]!=="number"){throw new Error(`Expected a number or size array for ${property}`);}return encoded;}function optionalString(flatStyle,property){
const encoded=flatStyle[property];if(encoded===void 0){return void 0;}if(typeof encoded!=="string"){throw new Error(`Expected a string for ${property}`);}return encoded;}function optionalIconOrigin(flatStyle,property){const encoded=flatStyle[property];if(encoded===void 0){return void 0;}if(encoded!=="bottom-left"&&encoded!=="bottom-right"&&encoded!=="top-left"&&encoded!=="top-right"){throw new Error(`Expected bottom-left, bottom-right, top-left, or top-right for ${property}`);}return encoded;}function optionalIconAnchorUnits(flatStyle,property){const encoded=flatStyle[property];if(encoded===void 0){return void 0;}if(encoded!=="pixels"&&encoded!=="fraction"){throw new Error(`Expected pixels or fraction for ${property}`);}return encoded;}function optionalNumberArray(flatStyle,property){const encoded=flatStyle[property];if(encoded===void 0){return void 0;}return requireNumberArray(encoded,property);}function optionalDeclutterMode(flatStyle,property){const encoded=flatStyle[property];if(
encoded===void 0){return void 0;}if(typeof encoded!=="string"){throw new Error(`Expected a string for ${property}`);}if(encoded!=="declutter"&&encoded!=="obstacle"&&encoded!=="none"){throw new Error(`Expected declutter, obstacle, or none for ${property}`);}return encoded;}function optionalColorLike(flatStyle,property){const encoded=flatStyle[property];if(encoded===void 0){return void 0;}return requireColorLike(encoded,property);}function requireNumberArray(value,property){if(!Array.isArray(value)){throw new Error(`Expected an array for ${property}`);}const length=value.length;for(let i=0;i<length;++i){if(typeof value[i]!=="number"){throw new Error(`Expected an array of numbers for ${property}`);}}return value;}function requireString(value,property){if(typeof value!=="string"){throw new Error(`Expected a string for ${property}`);}return value;}function requireNumber(value,property){if(typeof value!=="number"){throw new Error(`Expected a number for ${property}`);}return value;}function
requireColorLike(value,property){if(typeof value==="string"){return value;}const array=requireNumberArray(value,property);const length=array.length;if(length<3||length>4){throw new Error(`Expected a color with 3 or 4 values for ${property}`);}return array;}function requireSizeLike(value,property){if(typeof value==="number"){return value;}const size=requireNumberArray(value,property);if(size.length!==2){throw new Error(`Expected an array of two numbers for ${property}`);}return size;}const Property={RENDER_ORDER:"renderOrder"};class BaseVectorLayer extends Layer$1{constructor(options){options=options?options:{};const baseOptions=Object.assign({},options);delete baseOptions.style;delete baseOptions.renderBuffer;delete baseOptions.updateWhileAnimating;delete baseOptions.updateWhileInteracting;super(baseOptions);this.declutter_=options.declutter!==void 0?options.declutter:false;this.renderBuffer_=options.renderBuffer!==void 0?options.renderBuffer:100;this.style_=null;this.styleFunction_=
void 0;this.setStyle(options.style);this.updateWhileAnimating_=options.updateWhileAnimating!==void 0?options.updateWhileAnimating:false;this.updateWhileInteracting_=options.updateWhileInteracting!==void 0?options.updateWhileInteracting:false;}getDeclutter(){return this.declutter_;}getFeatures(pixel){return super.getFeatures(pixel);}getRenderBuffer(){return this.renderBuffer_;}getRenderOrder(){return(this.get(Property.RENDER_ORDER));}getStyle(){return this.style_;}getStyleFunction(){return this.styleFunction_;}getUpdateWhileAnimating(){return this.updateWhileAnimating_;}getUpdateWhileInteracting(){return this.updateWhileInteracting_;}renderDeclutter(frameState){if(!frameState.declutterTree){frameState.declutterTree=new RBush$2(9);}this.getRenderer().renderDeclutter(frameState);}setRenderOrder(renderOrder){this.set(Property.RENDER_ORDER,renderOrder);}setStyle(style){this.style_=toStyleLike(style);this.styleFunction_=style===null?void 0:toFunction(this.style_);this.changed();}}function
toStyleLike(style){if(style===void 0){return createDefaultStyle;}if(!style){return null;}if(typeof style==="function"){return style;}if(style instanceof Style){return style;}if(!Array.isArray(style)){return flatStylesToStyleFunction([style]);}if(style.length===0){return[];}const length=style.length;const first=style[0];if(first instanceof Style){const styles=new Array(length);for(let i=0;i<length;++i){const candidate=style[i];if(!(candidate instanceof Style)){throw new Error("Expected a list of style instances");}styles[i]=candidate;}return styles;}if("style"in first){const rules=new Array(length);for(let i=0;i<length;++i){const candidate=style[i];if(!("style"in candidate)){throw new Error("Expected a list of rules with a style property");}rules[i]=candidate;}return rulesToStyleFunction(rules);}const flatStyles=(style);return flatStylesToStyleFunction(flatStyles);}const BaseVectorLayer$1=BaseVectorLayer;const Instruction={BEGIN_GEOMETRY:0,BEGIN_PATH:1,CIRCLE:2,CLOSE_PATH:3,CUSTOM:4,
DRAW_CHARS:5,DRAW_IMAGE:6,END_GEOMETRY:7,FILL:8,MOVE_TO_LINE_TO:9,SET_FILL_STYLE:10,SET_STROKE_STYLE:11,STROKE:12};const fillInstruction=[Instruction.FILL];const strokeInstruction=[Instruction.STROKE];const beginPathInstruction=[Instruction.BEGIN_PATH];const closePathInstruction=[Instruction.CLOSE_PATH];const CanvasInstruction=Instruction;class VectorContext{drawCustom(geometry,feature,renderer,hitDetectionRenderer){}drawGeometry(geometry){}setStyle(style){}drawCircle(circleGeometry,feature){}drawFeature(feature,style){}drawGeometryCollection(geometryCollectionGeometry,feature){}drawLineString(lineStringGeometry,feature){}drawMultiLineString(multiLineStringGeometry,feature){}drawMultiPoint(multiPointGeometry,feature){}drawMultiPolygon(multiPolygonGeometry,feature){}drawPoint(pointGeometry,feature){}drawPolygon(polygonGeometry,feature){}drawText(geometry,feature){}setFillStrokeStyle(fillStyle,strokeStyle){}setImageStyle(imageStyle,declutterImageWithText){}setTextStyle(textStyle,
declutterImageWithText){}}const VectorContext$1=VectorContext;class CanvasBuilder extends VectorContext$1{constructor(tolerance,maxExtent,resolution,pixelRatio){super();this.tolerance=tolerance;this.maxExtent=maxExtent;this.pixelRatio=pixelRatio;this.maxLineWidth=0;this.resolution=resolution;this.beginGeometryInstruction1_=null;this.beginGeometryInstruction2_=null;this.bufferedMaxExtent_=null;this.instructions=[];this.coordinates=[];this.tmpCoordinate_=[];this.hitDetectionInstructions=[];this.state={};}applyPixelRatio(dashArray){const pixelRatio=this.pixelRatio;return pixelRatio==1?dashArray:dashArray.map(function(dash){return dash*pixelRatio;});}appendFlatPointCoordinates(flatCoordinates,stride){const extent=this.getBufferedMaxExtent();const tmpCoord=this.tmpCoordinate_;const coordinates2=this.coordinates;let myEnd=coordinates2.length;for(let i=0,ii=flatCoordinates.length;i<ii;i+=stride){tmpCoord[0]=flatCoordinates[i];tmpCoord[1]=flatCoordinates[i+1];if(containsCoordinate(extent,
tmpCoord)){coordinates2[myEnd++]=tmpCoord[0];coordinates2[myEnd++]=tmpCoord[1];}}return myEnd;}appendFlatLineCoordinates(flatCoordinates,offset,end,stride,closed,skipFirst){const coordinates2=this.coordinates;let myEnd=coordinates2.length;const extent=this.getBufferedMaxExtent();if(skipFirst){offset+=stride;}let lastXCoord=flatCoordinates[offset];let lastYCoord=flatCoordinates[offset+1];const nextCoord=this.tmpCoordinate_;let skipped=true;let i,lastRel,nextRel;for(i=offset+stride;i<end;i+=stride){nextCoord[0]=flatCoordinates[i];nextCoord[1]=flatCoordinates[i+1];nextRel=coordinateRelationship(extent,nextCoord);if(nextRel!==lastRel){if(skipped){coordinates2[myEnd++]=lastXCoord;coordinates2[myEnd++]=lastYCoord;skipped=false;}coordinates2[myEnd++]=nextCoord[0];coordinates2[myEnd++]=nextCoord[1];}else if(nextRel===Relationship.INTERSECTING){coordinates2[myEnd++]=nextCoord[0];coordinates2[myEnd++]=nextCoord[1];skipped=false;}else{skipped=true;}lastXCoord=nextCoord[0];lastYCoord=nextCoord[1];
lastRel=nextRel;}if(closed&&skipped||i===offset+stride){coordinates2[myEnd++]=lastXCoord;coordinates2[myEnd++]=lastYCoord;}return myEnd;}drawCustomCoordinates_(flatCoordinates,offset,ends,stride,builderEnds){for(let i=0,ii=ends.length;i<ii;++i){const end=ends[i];const builderEnd=this.appendFlatLineCoordinates(flatCoordinates,offset,end,stride,false,false);builderEnds.push(builderEnd);offset=end;}return offset;}drawCustom(geometry,feature,renderer,hitDetectionRenderer){this.beginGeometry(geometry,feature);const type=geometry.getType();const stride=geometry.getStride();const builderBegin=this.coordinates.length;let flatCoordinates,builderEnd,builderEnds,builderEndss;let offset;switch(type){case"MultiPolygon":flatCoordinates=geometry.getOrientedFlatCoordinates();builderEndss=[];const endss=(geometry.getEndss());offset=0;for(let i=0,ii=endss.length;i<ii;++i){const myEnds=[];offset=this.drawCustomCoordinates_(flatCoordinates,offset,endss[i],stride,myEnds);builderEndss.push(myEnds);}this.
instructions.push([CanvasInstruction.CUSTOM,builderBegin,builderEndss,geometry,renderer,inflateMultiCoordinatesArray]);this.hitDetectionInstructions.push([CanvasInstruction.CUSTOM,builderBegin,builderEndss,geometry,hitDetectionRenderer||renderer,inflateMultiCoordinatesArray]);break;case"Polygon":case"MultiLineString":builderEnds=[];flatCoordinates=type=="Polygon"?(geometry.getOrientedFlatCoordinates()):geometry.getFlatCoordinates();offset=this.drawCustomCoordinates_(flatCoordinates,0,geometry.getEnds(),stride,builderEnds);this.instructions.push([CanvasInstruction.CUSTOM,builderBegin,builderEnds,geometry,renderer,inflateCoordinatesArray]);this.hitDetectionInstructions.push([CanvasInstruction.CUSTOM,builderBegin,builderEnds,geometry,hitDetectionRenderer||renderer,inflateCoordinatesArray]);break;case"LineString":case"Circle":flatCoordinates=geometry.getFlatCoordinates();builderEnd=this.appendFlatLineCoordinates(flatCoordinates,0,flatCoordinates.length,stride,false,false);this.instructions
.push([CanvasInstruction.CUSTOM,builderBegin,builderEnd,geometry,renderer,inflateCoordinates]);this.hitDetectionInstructions.push([CanvasInstruction.CUSTOM,builderBegin,builderEnd,geometry,hitDetectionRenderer||renderer,inflateCoordinates]);break;case"MultiPoint":flatCoordinates=geometry.getFlatCoordinates();builderEnd=this.appendFlatPointCoordinates(flatCoordinates,stride);if(builderEnd>builderBegin){this.instructions.push([CanvasInstruction.CUSTOM,builderBegin,builderEnd,geometry,renderer,inflateCoordinates]);this.hitDetectionInstructions.push([CanvasInstruction.CUSTOM,builderBegin,builderEnd,geometry,hitDetectionRenderer||renderer,inflateCoordinates]);}break;case"Point":flatCoordinates=geometry.getFlatCoordinates();this.coordinates.push(flatCoordinates[0],flatCoordinates[1]);builderEnd=this.coordinates.length;this.instructions.push([CanvasInstruction.CUSTOM,builderBegin,builderEnd,geometry,renderer]);this.hitDetectionInstructions.push([CanvasInstruction.CUSTOM,builderBegin,
builderEnd,geometry,hitDetectionRenderer||renderer]);break;}this.endGeometry(feature);}beginGeometry(geometry,feature){this.beginGeometryInstruction1_=[CanvasInstruction.BEGIN_GEOMETRY,feature,0,geometry];this.instructions.push(this.beginGeometryInstruction1_);this.beginGeometryInstruction2_=[CanvasInstruction.BEGIN_GEOMETRY,feature,0,geometry];this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);}finish(){return{instructions:this.instructions,hitDetectionInstructions:this.hitDetectionInstructions,coordinates:this.coordinates};}reverseHitDetectionInstructions(){const hitDetectionInstructions=this.hitDetectionInstructions;hitDetectionInstructions.reverse();let i;const n=hitDetectionInstructions.length;let instruction;let type;let begin=-1;for(i=0;i<n;++i){instruction=hitDetectionInstructions[i];type=instruction[0];if(type==CanvasInstruction.END_GEOMETRY){begin=i;}else if(type==CanvasInstruction.BEGIN_GEOMETRY){instruction[2]=i;reverseSubArray(this.hitDetectionInstructions
,begin,i);begin=-1;}}}setFillStrokeStyle(fillStyle,strokeStyle){const state=this.state;if(fillStyle){const fillStyleColor=fillStyle.getColor();state.fillStyle=asColorLike(fillStyleColor?fillStyleColor:defaultFillStyle);}else{state.fillStyle=void 0;}if(strokeStyle){const strokeStyleColor=strokeStyle.getColor();state.strokeStyle=asColorLike(strokeStyleColor?strokeStyleColor:defaultStrokeStyle);const strokeStyleLineCap=strokeStyle.getLineCap();state.lineCap=strokeStyleLineCap!==void 0?strokeStyleLineCap:defaultLineCap;const strokeStyleLineDash=strokeStyle.getLineDash();state.lineDash=strokeStyleLineDash?strokeStyleLineDash.slice():defaultLineDash;const strokeStyleLineDashOffset=strokeStyle.getLineDashOffset();state.lineDashOffset=strokeStyleLineDashOffset?strokeStyleLineDashOffset:defaultLineDashOffset;const strokeStyleLineJoin=strokeStyle.getLineJoin();state.lineJoin=strokeStyleLineJoin!==void 0?strokeStyleLineJoin:defaultLineJoin;const strokeStyleWidth=strokeStyle.getWidth();state.
lineWidth=strokeStyleWidth!==void 0?strokeStyleWidth:defaultLineWidth;const strokeStyleMiterLimit=strokeStyle.getMiterLimit();state.miterLimit=strokeStyleMiterLimit!==void 0?strokeStyleMiterLimit:defaultMiterLimit;if(state.lineWidth>this.maxLineWidth){this.maxLineWidth=state.lineWidth;this.bufferedMaxExtent_=null;}}else{state.strokeStyle=void 0;state.lineCap=void 0;state.lineDash=null;state.lineDashOffset=void 0;state.lineJoin=void 0;state.lineWidth=void 0;state.miterLimit=void 0;}}createFill(state){const fillStyle=state.fillStyle;const fillInstruction2=[CanvasInstruction.SET_FILL_STYLE,fillStyle];if(typeof fillStyle!=="string"){fillInstruction2.push(true);}return fillInstruction2;}applyStroke(state){this.instructions.push(this.createStroke(state));}createStroke(state){return[CanvasInstruction.SET_STROKE_STYLE,state.strokeStyle,state.lineWidth*this.pixelRatio,state.lineCap,state.lineJoin,state.miterLimit,this.applyPixelRatio(state.lineDash),state.lineDashOffset*this.pixelRatio];}
updateFillStyle(state,createFill){const fillStyle=state.fillStyle;if(typeof fillStyle!=="string"||state.currentFillStyle!=fillStyle){if(fillStyle!==void 0){this.instructions.push(createFill.call(this,state));}state.currentFillStyle=fillStyle;}}updateStrokeStyle(state,applyStroke){const strokeStyle=state.strokeStyle;const lineCap=state.lineCap;const lineDash=state.lineDash;const lineDashOffset=state.lineDashOffset;const lineJoin=state.lineJoin;const lineWidth=state.lineWidth;const miterLimit=state.miterLimit;if(state.currentStrokeStyle!=strokeStyle||state.currentLineCap!=lineCap||lineDash!=state.currentLineDash&&!equals$2(state.currentLineDash,lineDash)||state.currentLineDashOffset!=lineDashOffset||state.currentLineJoin!=lineJoin||state.currentLineWidth!=lineWidth||state.currentMiterLimit!=miterLimit){if(strokeStyle!==void 0){applyStroke.call(this,state);}state.currentStrokeStyle=strokeStyle;state.currentLineCap=lineCap;state.currentLineDash=lineDash;state.currentLineDashOffset=
lineDashOffset;state.currentLineJoin=lineJoin;state.currentLineWidth=lineWidth;state.currentMiterLimit=miterLimit;}}endGeometry(feature){this.beginGeometryInstruction1_[2]=this.instructions.length;this.beginGeometryInstruction1_=null;this.beginGeometryInstruction2_[2]=this.hitDetectionInstructions.length;this.beginGeometryInstruction2_=null;const endGeometryInstruction=[CanvasInstruction.END_GEOMETRY,feature];this.instructions.push(endGeometryInstruction);this.hitDetectionInstructions.push(endGeometryInstruction);}getBufferedMaxExtent(){if(!this.bufferedMaxExtent_){this.bufferedMaxExtent_=clone(this.maxExtent);if(this.maxLineWidth>0){const width=this.resolution*(this.maxLineWidth+1)/2;buffer(this.bufferedMaxExtent_,width,this.bufferedMaxExtent_);}}return this.bufferedMaxExtent_;}}const Builder=CanvasBuilder;class CanvasImageBuilder extends Builder{constructor(tolerance,maxExtent,resolution,pixelRatio){super(tolerance,maxExtent,resolution,pixelRatio);this.hitDetectionImage_=null;this.
image_=null;this.imagePixelRatio_=void 0;this.anchorX_=void 0;this.anchorY_=void 0;this.height_=void 0;this.opacity_=void 0;this.originX_=void 0;this.originY_=void 0;this.rotateWithView_=void 0;this.rotation_=void 0;this.scale_=void 0;this.width_=void 0;this.declutterMode_=void 0;this.declutterImageWithText_=void 0;}drawPoint(pointGeometry,feature){if(!this.image_){return;}this.beginGeometry(pointGeometry,feature);const flatCoordinates=pointGeometry.getFlatCoordinates();const stride=pointGeometry.getStride();const myBegin=this.coordinates.length;const myEnd=this.appendFlatPointCoordinates(flatCoordinates,stride);this.instructions.push([CanvasInstruction.DRAW_IMAGE,myBegin,myEnd,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_*this.imagePixelRatio_,this.originY_*this.imagePixelRatio_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.
scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterMode_,this.declutterImageWithText_]);this.hitDetectionInstructions.push([CanvasInstruction.DRAW_IMAGE,myBegin,myEnd,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,1,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterMode_,this.declutterImageWithText_]);this.endGeometry(feature);}drawMultiPoint(multiPointGeometry,feature){if(!this.image_){return;}this.beginGeometry(multiPointGeometry,feature);const flatCoordinates=multiPointGeometry.getFlatCoordinates();const stride=multiPointGeometry.getStride();const myBegin=this.coordinates.length;const myEnd=this.appendFlatPointCoordinates(flatCoordinates,stride);this.instructions.push([CanvasInstruction.DRAW_IMAGE,myBegin,myEnd,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.
originX_*this.imagePixelRatio_,this.originY_*this.imagePixelRatio_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterMode_,this.declutterImageWithText_]);this.hitDetectionInstructions.push([CanvasInstruction.DRAW_IMAGE,myBegin,myEnd,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,1,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterMode_,this.declutterImageWithText_]);this.endGeometry(feature);}finish(){this.reverseHitDetectionInstructions();this.anchorX_=void 0;this.anchorY_=void 0;this.hitDetectionImage_=null;this.image_=null;this.imagePixelRatio_=void 0;this.height_=void 0;this.scale_=void 0;this.opacity_=void 0;this.originX_=void 0;this.originY_=void 0;this.rotateWithView_=void 0;this.rotation_=void 0;this.width_=void 0;return super.finish();}setImageStyle(
imageStyle,sharedData){const anchor=imageStyle.getAnchor();const size=imageStyle.getSize();const origin=imageStyle.getOrigin();this.imagePixelRatio_=imageStyle.getPixelRatio(this.pixelRatio);this.anchorX_=anchor[0];this.anchorY_=anchor[1];this.hitDetectionImage_=imageStyle.getHitDetectionImage();this.image_=imageStyle.getImage(this.pixelRatio);this.height_=size[1];this.opacity_=imageStyle.getOpacity();this.originX_=origin[0];this.originY_=origin[1];this.rotateWithView_=imageStyle.getRotateWithView();this.rotation_=imageStyle.getRotation();this.scale_=imageStyle.getScaleArray();this.width_=size[0];this.declutterMode_=imageStyle.getDeclutterMode();this.declutterImageWithText_=sharedData;}}const ImageBuilder=CanvasImageBuilder;class CanvasLineStringBuilder extends Builder{constructor(tolerance,maxExtent,resolution,pixelRatio){super(tolerance,maxExtent,resolution,pixelRatio);}drawFlatCoordinates_(flatCoordinates,offset,end,stride){const myBegin=this.coordinates.length;const myEnd=this.
appendFlatLineCoordinates(flatCoordinates,offset,end,stride,false,false);const moveToLineToInstruction=[CanvasInstruction.MOVE_TO_LINE_TO,myBegin,myEnd];this.instructions.push(moveToLineToInstruction);this.hitDetectionInstructions.push(moveToLineToInstruction);return end;}drawLineString(lineStringGeometry,feature){const state=this.state;const strokeStyle=state.strokeStyle;const lineWidth=state.lineWidth;if(strokeStyle===void 0||lineWidth===void 0){return;}this.updateStrokeStyle(state,this.applyStroke);this.beginGeometry(lineStringGeometry,feature);this.hitDetectionInstructions.push([CanvasInstruction.SET_STROKE_STYLE,state.strokeStyle,state.lineWidth,state.lineCap,state.lineJoin,state.miterLimit,defaultLineDash,defaultLineDashOffset],beginPathInstruction);const flatCoordinates=lineStringGeometry.getFlatCoordinates();const stride=lineStringGeometry.getStride();this.drawFlatCoordinates_(flatCoordinates,0,flatCoordinates.length,stride);this.hitDetectionInstructions.push(strokeInstruction)
;this.endGeometry(feature);}drawMultiLineString(multiLineStringGeometry,feature){const state=this.state;const strokeStyle=state.strokeStyle;const lineWidth=state.lineWidth;if(strokeStyle===void 0||lineWidth===void 0){return;}this.updateStrokeStyle(state,this.applyStroke);this.beginGeometry(multiLineStringGeometry,feature);this.hitDetectionInstructions.push([CanvasInstruction.SET_STROKE_STYLE,state.strokeStyle,state.lineWidth,state.lineCap,state.lineJoin,state.miterLimit,defaultLineDash,defaultLineDashOffset],beginPathInstruction);const ends=multiLineStringGeometry.getEnds();const flatCoordinates=multiLineStringGeometry.getFlatCoordinates();const stride=multiLineStringGeometry.getStride();let offset=0;for(let i=0,ii=ends.length;i<ii;++i){offset=this.drawFlatCoordinates_(flatCoordinates,offset,ends[i],stride);}this.hitDetectionInstructions.push(strokeInstruction);this.endGeometry(feature);}finish(){const state=this.state;if(state.lastStroke!=void 0&&state.lastStroke!=this.coordinates.
length){this.instructions.push(strokeInstruction);}this.reverseHitDetectionInstructions();this.state=null;return super.finish();}applyStroke(state){if(state.lastStroke!=void 0&&state.lastStroke!=this.coordinates.length){this.instructions.push(strokeInstruction);state.lastStroke=this.coordinates.length;}state.lastStroke=0;super.applyStroke(state);this.instructions.push(beginPathInstruction);}}const LineStringBuilder=CanvasLineStringBuilder;class CanvasPolygonBuilder extends Builder{constructor(tolerance,maxExtent,resolution,pixelRatio){super(tolerance,maxExtent,resolution,pixelRatio);}drawFlatCoordinatess_(flatCoordinates,offset,ends,stride){const state=this.state;const fill=state.fillStyle!==void 0;const stroke=state.strokeStyle!==void 0;const numEnds=ends.length;this.instructions.push(beginPathInstruction);this.hitDetectionInstructions.push(beginPathInstruction);for(let i=0;i<numEnds;++i){const end=ends[i];const myBegin=this.coordinates.length;const myEnd=this.
appendFlatLineCoordinates(flatCoordinates,offset,end,stride,true,!stroke);const moveToLineToInstruction=[CanvasInstruction.MOVE_TO_LINE_TO,myBegin,myEnd];this.instructions.push(moveToLineToInstruction);this.hitDetectionInstructions.push(moveToLineToInstruction);if(stroke){this.instructions.push(closePathInstruction);this.hitDetectionInstructions.push(closePathInstruction);}offset=end;}if(fill){this.instructions.push(fillInstruction);this.hitDetectionInstructions.push(fillInstruction);}if(stroke){this.instructions.push(strokeInstruction);this.hitDetectionInstructions.push(strokeInstruction);}return offset;}drawCircle(circleGeometry,feature){const state=this.state;const fillStyle=state.fillStyle;const strokeStyle=state.strokeStyle;if(fillStyle===void 0&&strokeStyle===void 0){return;}this.setFillStrokeStyles_();this.beginGeometry(circleGeometry,feature);if(state.fillStyle!==void 0){this.hitDetectionInstructions.push([CanvasInstruction.SET_FILL_STYLE,defaultFillStyle]);}if(state.
strokeStyle!==void 0){this.hitDetectionInstructions.push([CanvasInstruction.SET_STROKE_STYLE,state.strokeStyle,state.lineWidth,state.lineCap,state.lineJoin,state.miterLimit,defaultLineDash,defaultLineDashOffset]);}const flatCoordinates=circleGeometry.getFlatCoordinates();const stride=circleGeometry.getStride();const myBegin=this.coordinates.length;this.appendFlatLineCoordinates(flatCoordinates,0,flatCoordinates.length,stride,false,false);const circleInstruction=[CanvasInstruction.CIRCLE,myBegin];this.instructions.push(beginPathInstruction,circleInstruction);this.hitDetectionInstructions.push(beginPathInstruction,circleInstruction);if(state.fillStyle!==void 0){this.instructions.push(fillInstruction);this.hitDetectionInstructions.push(fillInstruction);}if(state.strokeStyle!==void 0){this.instructions.push(strokeInstruction);this.hitDetectionInstructions.push(strokeInstruction);}this.endGeometry(feature);}drawPolygon(polygonGeometry,feature){const state=this.state;const fillStyle=state.
fillStyle;const strokeStyle=state.strokeStyle;if(fillStyle===void 0&&strokeStyle===void 0){return;}this.setFillStrokeStyles_();this.beginGeometry(polygonGeometry,feature);if(state.fillStyle!==void 0){this.hitDetectionInstructions.push([CanvasInstruction.SET_FILL_STYLE,defaultFillStyle]);}if(state.strokeStyle!==void 0){this.hitDetectionInstructions.push([CanvasInstruction.SET_STROKE_STYLE,state.strokeStyle,state.lineWidth,state.lineCap,state.lineJoin,state.miterLimit,defaultLineDash,defaultLineDashOffset]);}const ends=polygonGeometry.getEnds();const flatCoordinates=polygonGeometry.getOrientedFlatCoordinates();const stride=polygonGeometry.getStride();this.drawFlatCoordinatess_(flatCoordinates,0,ends,stride);this.endGeometry(feature);}drawMultiPolygon(multiPolygonGeometry,feature){const state=this.state;const fillStyle=state.fillStyle;const strokeStyle=state.strokeStyle;if(fillStyle===void 0&&strokeStyle===void 0){return;}this.setFillStrokeStyles_();this.beginGeometry(multiPolygonGeometry
,feature);if(state.fillStyle!==void 0){this.hitDetectionInstructions.push([CanvasInstruction.SET_FILL_STYLE,defaultFillStyle]);}if(state.strokeStyle!==void 0){this.hitDetectionInstructions.push([CanvasInstruction.SET_STROKE_STYLE,state.strokeStyle,state.lineWidth,state.lineCap,state.lineJoin,state.miterLimit,defaultLineDash,defaultLineDashOffset]);}const endss=multiPolygonGeometry.getEndss();const flatCoordinates=multiPolygonGeometry.getOrientedFlatCoordinates();const stride=multiPolygonGeometry.getStride();let offset=0;for(let i=0,ii=endss.length;i<ii;++i){offset=this.drawFlatCoordinatess_(flatCoordinates,offset,endss[i],stride);}this.endGeometry(feature);}finish(){this.reverseHitDetectionInstructions();this.state=null;const tolerance=this.tolerance;if(tolerance!==0){const coordinates2=this.coordinates;for(let i=0,ii=coordinates2.length;i<ii;++i){coordinates2[i]=snap(coordinates2[i],tolerance);}}return super.finish();}setFillStrokeStyles_(){const state=this.state;const fillStyle=state
.fillStyle;if(fillStyle!==void 0){this.updateFillStyle(state,this.createFill);}if(state.strokeStyle!==void 0){this.updateStrokeStyle(state,this.applyStroke);}}}const PolygonBuilder=CanvasPolygonBuilder;function lineChunk(chunkLength,flatCoordinates,offset,end,stride){const chunks=[];let cursor=offset;let chunkM=0;let currentChunk=flatCoordinates.slice(offset,2);while(chunkM<chunkLength&&cursor+stride<end){const[x1,y1]=currentChunk.slice(-2);const x2=flatCoordinates[cursor+stride];const y2=flatCoordinates[cursor+stride+1];const segmentLength=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));chunkM+=segmentLength;if(chunkM>=chunkLength){const m=(chunkLength-chunkM+segmentLength)/segmentLength;const x=lerp(x1,x2,m);const y=lerp(y1,y2,m);currentChunk.push(x,y);chunks.push(currentChunk);currentChunk=[x,y];if(chunkM==chunkLength){cursor+=stride;}chunkM=0;}else if(chunkM<chunkLength){currentChunk.push(flatCoordinates[cursor+stride],flatCoordinates[cursor+stride+1]);cursor+=stride;}else{const missing
=segmentLength-chunkM;const x=lerp(x1,x2,missing/segmentLength);const y=lerp(y1,y2,missing/segmentLength);currentChunk.push(x,y);chunks.push(currentChunk);currentChunk=[x,y];chunkM=0;cursor+=stride;}}if(chunkM>0){chunks.push(currentChunk);}return chunks;}function matchingChunk(maxAngle,flatCoordinates,offset,end,stride){let chunkStart=offset;let chunkEnd=offset;let chunkM=0;let m=0;let start=offset;let acos,i,m12,m23,x1,y1,x12,y12,x23,y23;for(i=offset;i<end;i+=stride){const x2=flatCoordinates[i];const y2=flatCoordinates[i+1];if(x1!==void 0){x23=x2-x1;y23=y2-y1;m23=Math.sqrt(x23*x23+y23*y23);if(x12!==void 0){m+=m12;acos=Math.acos((x12*x23+y12*y23)/(m12*m23));if(acos>maxAngle){if(m>chunkM){chunkM=m;chunkStart=start;chunkEnd=i;}m=0;start=i-stride;}}m12=m23;x12=x23;y12=y23;}x1=x2;y1=y2;}m+=m23;return m>chunkM?[start,i]:[chunkStart,chunkEnd];}const TEXT_ALIGN={"left":0,"center":0.5,"right":1,"top":0,"middle":0.5,"hanging":0.2,"alphabetic":0.8,"ideographic":0.8,"bottom":1};class
CanvasTextBuilder extends Builder{constructor(tolerance,maxExtent,resolution,pixelRatio){super(tolerance,maxExtent,resolution,pixelRatio);this.labels_=null;this.text_="";this.textOffsetX_=0;this.textOffsetY_=0;this.textRotateWithView_=void 0;this.textRotation_=0;this.textFillState_=null;this.fillStates={};this.fillStates[defaultFillStyle]={fillStyle:defaultFillStyle};this.textStrokeState_=null;this.strokeStates={};this.textState_={};this.textStates={};this.textKey_="";this.fillKey_="";this.strokeKey_="";this.declutterImageWithText_=void 0;}finish(){const instructions=super.finish();instructions.textStates=this.textStates;instructions.fillStates=this.fillStates;instructions.strokeStates=this.strokeStates;return instructions;}drawText(geometry,feature){const fillState=this.textFillState_;const strokeState=this.textStrokeState_;const textState=this.textState_;if(this.text_===""||!textState||!fillState&&!strokeState){return;}const coordinates2=this.coordinates;let begin=coordinates2.length
;const geometryType=geometry.getType();let flatCoordinates=null;let stride=geometry.getStride();if(textState.placement==="line"&&(geometryType=="LineString"||geometryType=="MultiLineString"||geometryType=="Polygon"||geometryType=="MultiPolygon")){if(!intersects$1(this.getBufferedMaxExtent(),geometry.getExtent())){return;}let ends;flatCoordinates=geometry.getFlatCoordinates();if(geometryType=="LineString"){ends=[flatCoordinates.length];}else if(geometryType=="MultiLineString"){ends=geometry.getEnds();}else if(geometryType=="Polygon"){ends=geometry.getEnds().slice(0,1);}else if(geometryType=="MultiPolygon"){const endss=(geometry.getEndss());ends=[];for(let i=0,ii=endss.length;i<ii;++i){ends.push(endss[i][0]);}}this.beginGeometry(geometry,feature);const repeat=textState.repeat;const textAlign=repeat?void 0:textState.textAlign;let flatOffset=0;for(let o=0,oo=ends.length;o<oo;++o){let chunks;if(repeat){chunks=lineChunk(repeat*this.resolution,flatCoordinates,flatOffset,ends[o],stride);}else{
chunks=[flatCoordinates.slice(flatOffset,ends[o])];}for(let c=0,cc=chunks.length;c<cc;++c){const chunk=chunks[c];let chunkBegin=0;let chunkEnd=chunk.length;if(textAlign==void 0){const range=matchingChunk(textState.maxAngle,chunk,0,chunk.length,2);chunkBegin=range[0];chunkEnd=range[1];}for(let i=chunkBegin;i<chunkEnd;i+=stride){coordinates2.push(chunk[i],chunk[i+1]);}const end=coordinates2.length;flatOffset=ends[o];this.drawChars_(begin,end);begin=end;}}this.endGeometry(feature);}else{let geometryWidths=textState.overflow?null:[];switch(geometryType){case"Point":case"MultiPoint":flatCoordinates=geometry.getFlatCoordinates();break;case"LineString":flatCoordinates=geometry.getFlatMidpoint();break;case"Circle":flatCoordinates=geometry.getCenter();break;case"MultiLineString":flatCoordinates=geometry.getFlatMidpoints();stride=2;break;case"Polygon":flatCoordinates=geometry.getFlatInteriorPoint();if(!textState.overflow){geometryWidths.push(flatCoordinates[2]/this.resolution);}stride=3;break;
case"MultiPolygon":const interiorPoints=(geometry.getFlatInteriorPoints());flatCoordinates=[];for(let i=0,ii=interiorPoints.length;i<ii;i+=3){if(!textState.overflow){geometryWidths.push(interiorPoints[i+2]/this.resolution);}flatCoordinates.push(interiorPoints[i],interiorPoints[i+1]);}if(flatCoordinates.length===0){return;}stride=2;break;}const end=this.appendFlatPointCoordinates(flatCoordinates,stride);if(end===begin){return;}if(geometryWidths&&(end-begin)/2!==flatCoordinates.length/stride){let beg=begin/2;geometryWidths=geometryWidths.filter((w,i)=>{const keep=coordinates2[(beg+i)*2]===flatCoordinates[i*stride]&&coordinates2[(beg+i)*2+1]===flatCoordinates[i*stride+1];if(!keep){--beg;}return keep;});}this.saveTextStates_();if(textState.backgroundFill||textState.backgroundStroke){this.setFillStrokeStyle(textState.backgroundFill,textState.backgroundStroke);if(textState.backgroundFill){this.updateFillStyle(this.state,this.createFill);}if(textState.backgroundStroke){this.updateStrokeStyle(
this.state,this.applyStroke);this.hitDetectionInstructions.push(this.createStroke(this.state));}}this.beginGeometry(geometry,feature);let padding=textState.padding;if(padding!=defaultPadding&&(textState.scale[0]<0||textState.scale[1]<0)){let p0=textState.padding[0];let p12=textState.padding[1];let p22=textState.padding[2];let p32=textState.padding[3];if(textState.scale[0]<0){p12=-p12;p32=-p32;}if(textState.scale[1]<0){p0=-p0;p22=-p22;}padding=[p0,p12,p22,p32];}const pixelRatio=this.pixelRatio;this.instructions.push([CanvasInstruction.DRAW_IMAGE,begin,end,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[1,1],NaN,void 0,this.declutterImageWithText_,padding==defaultPadding?defaultPadding:padding.map(function(p){return p*pixelRatio;}),!!textState.backgroundFill,!!textState.backgroundStroke,this.text_,this.textKey_,this.strokeKey_,this.fillKey_,this.textOffsetX_,this.textOffsetY_,geometryWidths]);const scale2=1/pixelRatio;const currentFillStyle=this.state.fillStyle;if(
textState.backgroundFill){this.state.fillStyle=defaultFillStyle;this.hitDetectionInstructions.push(this.createFill(this.state));}this.hitDetectionInstructions.push([CanvasInstruction.DRAW_IMAGE,begin,end,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[scale2,scale2],NaN,void 0,this.declutterImageWithText_,padding,!!textState.backgroundFill,!!textState.backgroundStroke,this.text_,this.textKey_,this.strokeKey_,this.fillKey_?defaultFillStyle:this.fillKey_,this.textOffsetX_,this.textOffsetY_,geometryWidths]);if(textState.backgroundFill){this.state.fillStyle=currentFillStyle;this.hitDetectionInstructions.push(this.createFill(this.state));}this.endGeometry(feature);}}saveTextStates_(){const strokeState=this.textStrokeState_;const textState=this.textState_;const fillState=this.textFillState_;const strokeKey=this.strokeKey_;if(strokeState){if(!(strokeKey in this.strokeStates)){this.strokeStates[strokeKey]={strokeStyle:strokeState.strokeStyle,lineCap:strokeState.lineCap,
lineDashOffset:strokeState.lineDashOffset,lineWidth:strokeState.lineWidth,lineJoin:strokeState.lineJoin,miterLimit:strokeState.miterLimit,lineDash:strokeState.lineDash};}}const textKey=this.textKey_;if(!(textKey in this.textStates)){this.textStates[textKey]={font:textState.font,textAlign:textState.textAlign||defaultTextAlign,justify:textState.justify,textBaseline:textState.textBaseline||defaultTextBaseline,scale:textState.scale};}const fillKey=this.fillKey_;if(fillState){if(!(fillKey in this.fillStates)){this.fillStates[fillKey]={fillStyle:fillState.fillStyle};}}}drawChars_(begin,end){const strokeState=this.textStrokeState_;const textState=this.textState_;const strokeKey=this.strokeKey_;const textKey=this.textKey_;const fillKey=this.fillKey_;this.saveTextStates_();const pixelRatio=this.pixelRatio;const baseline=TEXT_ALIGN[textState.textBaseline];const offsetY=this.textOffsetY_*pixelRatio;const text=this.text_;const strokeWidth=strokeState?strokeState.lineWidth*Math.abs(textState.scale[
0])/2:0;this.instructions.push([CanvasInstruction.DRAW_CHARS,begin,end,baseline,textState.overflow,fillKey,textState.maxAngle,pixelRatio,offsetY,strokeKey,strokeWidth*pixelRatio,text,textKey,1]);this.hitDetectionInstructions.push([CanvasInstruction.DRAW_CHARS,begin,end,baseline,textState.overflow,fillKey?defaultFillStyle:fillKey,textState.maxAngle,pixelRatio,offsetY,strokeKey,strokeWidth*pixelRatio,text,textKey,1/pixelRatio]);}setTextStyle(textStyle,sharedData){let textState,fillState,strokeState;if(!textStyle){this.text_="";}else{const textFillStyle=textStyle.getFill();if(!textFillStyle){fillState=null;this.textFillState_=fillState;}else{fillState=this.textFillState_;if(!fillState){fillState={};this.textFillState_=fillState;}fillState.fillStyle=asColorLike(textFillStyle.getColor()||defaultFillStyle);}const textStrokeStyle=textStyle.getStroke();if(!textStrokeStyle){strokeState=null;this.textStrokeState_=strokeState;}else{strokeState=this.textStrokeState_;if(!strokeState){strokeState={}
;this.textStrokeState_=strokeState;}const lineDash=textStrokeStyle.getLineDash();const lineDashOffset=textStrokeStyle.getLineDashOffset();const lineWidth=textStrokeStyle.getWidth();const miterLimit=textStrokeStyle.getMiterLimit();strokeState.lineCap=textStrokeStyle.getLineCap()||defaultLineCap;strokeState.lineDash=lineDash?lineDash.slice():defaultLineDash;strokeState.lineDashOffset=lineDashOffset===void 0?defaultLineDashOffset:lineDashOffset;strokeState.lineJoin=textStrokeStyle.getLineJoin()||defaultLineJoin;strokeState.lineWidth=lineWidth===void 0?defaultLineWidth:lineWidth;strokeState.miterLimit=miterLimit===void 0?defaultMiterLimit:miterLimit;strokeState.strokeStyle=asColorLike(textStrokeStyle.getColor()||defaultStrokeStyle);}textState=this.textState_;const font=textStyle.getFont()||defaultFont;registerFont(font);const textScale=textStyle.getScaleArray();textState.overflow=textStyle.getOverflow();textState.font=font;textState.maxAngle=textStyle.getMaxAngle();textState.placement=
textStyle.getPlacement();textState.textAlign=textStyle.getTextAlign();textState.repeat=textStyle.getRepeat();textState.justify=textStyle.getJustify();textState.textBaseline=textStyle.getTextBaseline()||defaultTextBaseline;textState.backgroundFill=textStyle.getBackgroundFill();textState.backgroundStroke=textStyle.getBackgroundStroke();textState.padding=textStyle.getPadding()||defaultPadding;textState.scale=textScale===void 0?[1,1]:textScale;const textOffsetX=textStyle.getOffsetX();const textOffsetY=textStyle.getOffsetY();const textRotateWithView=textStyle.getRotateWithView();const textRotation=textStyle.getRotation();this.text_=textStyle.getText()||"";this.textOffsetX_=textOffsetX===void 0?0:textOffsetX;this.textOffsetY_=textOffsetY===void 0?0:textOffsetY;this.textRotateWithView_=textRotateWithView===void 0?false:textRotateWithView;this.textRotation_=textRotation===void 0?0:textRotation;this.strokeKey_=strokeState?(typeof strokeState.strokeStyle=="string"?strokeState.strokeStyle:getUid(
strokeState.strokeStyle))+strokeState.lineCap+strokeState.lineDashOffset+"|"+strokeState.lineWidth+strokeState.lineJoin+strokeState.miterLimit+"["+strokeState.lineDash.join()+"]":"";this.textKey_=textState.font+textState.scale+(textState.textAlign||"?")+(textState.repeat||"?")+(textState.justify||"?")+(textState.textBaseline||"?");this.fillKey_=fillState?typeof fillState.fillStyle=="string"?fillState.fillStyle:"|"+getUid(fillState.fillStyle):"";}this.declutterImageWithText_=sharedData;}}const BATCH_CONSTRUCTORS={"Circle":PolygonBuilder,"Default":Builder,"Image":ImageBuilder,"LineString":LineStringBuilder,"Polygon":PolygonBuilder,"Text":CanvasTextBuilder};class BuilderGroup{constructor(tolerance,maxExtent,resolution,pixelRatio){this.tolerance_=tolerance;this.maxExtent_=maxExtent;this.pixelRatio_=pixelRatio;this.resolution_=resolution;this.buildersByZIndex_={};}finish(){const builderInstructions={};for(const zKey in this.buildersByZIndex_){builderInstructions[zKey]=builderInstructions[
zKey]||{};const builders=this.buildersByZIndex_[zKey];for(const builderKey in builders){const builderInstruction=builders[builderKey].finish();builderInstructions[zKey][builderKey]=builderInstruction;}}return builderInstructions;}getBuilder(zIndex,builderType){const zIndexKey=zIndex!==void 0?zIndex.toString():"0";let replays=this.buildersByZIndex_[zIndexKey];if(replays===void 0){replays={};this.buildersByZIndex_[zIndexKey]=replays;}let replay=replays[builderType];if(replay===void 0){const Constructor=BATCH_CONSTRUCTORS[builderType];replay=new Constructor(this.tolerance_,this.maxExtent_,this.resolution_,this.pixelRatio_);replays[builderType]=replay;}return replay;}}const CanvasBuilderGroup=BuilderGroup;class LayerRenderer extends Observable$1{constructor(layer){super();this.ready=true;this.boundHandleImageChange_=this.handleImageChange_.bind(this);this.layer_=layer;this.declutterExecutorGroup=null;}getFeatures(pixel){return abstract();}getData(pixel){return null;}prepareFrame(frameState
){return abstract();}renderFrame(frameState,target){return abstract();}loadedTileCallback(tiles,zoom,tile){if(!tiles[zoom]){tiles[zoom]={};}tiles[zoom][tile.tileCoord.toString()]=tile;return void 0;}createLoadedTileFinder(source,projection,tiles){return((zoom,tileRange)=>{const callback=this.loadedTileCallback.bind(this,tiles,zoom);return source.forEachLoadedTile(projection,zoom,tileRange,callback);});}forEachFeatureAtCoordinate(coordinate,frameState,hitTolerance,callback,matches){return void 0;}getLayer(){return this.layer_;}handleFontsChanged(){}handleImageChange_(event){const image=(event.target);if(image.getState()===ImageState.LOADED||image.getState()===ImageState.ERROR){this.renderIfReadyAndVisible();}}loadImage(image){let imageState=image.getState();if(imageState!=ImageState.LOADED&&imageState!=ImageState.ERROR){image.addEventListener(EventType.CHANGE,this.boundHandleImageChange_);}if(imageState==ImageState.IDLE){image.load();imageState=image.getState();}return imageState==
ImageState.LOADED;}renderIfReadyAndVisible(){const layer=this.getLayer();if(layer&&layer.getVisible()&&layer.getSourceState()==="ready"){layer.changed();}}disposeInternal(){delete this.layer_;super.disposeInternal();}}const LayerRenderer$1=LayerRenderer;const canvasPool=[];let pixelContext=null;function createPixelContext(){pixelContext=createCanvasContext2D(1,1,void 0,{willReadFrequently:true});}class CanvasLayerRenderer extends LayerRenderer$1{constructor(layer){super(layer);this.container=null;this.renderedResolution;this.tempTransform=create();this.pixelTransform=create();this.inversePixelTransform=create();this.context=null;this.containerReused=false;this.pixelContext_=null;this.frameState=null;}getImageData(image,col,row){if(!pixelContext){createPixelContext();}pixelContext.clearRect(0,0,1,1);let data;try{pixelContext.drawImage(image,col,row,1,1,0,0,1,1);data=pixelContext.getImageData(0,0,1,1).data;}catch(err){pixelContext=null;return null;}return data;}getBackground(frameState){
const layer=this.getLayer();let background=layer.getBackground();if(typeof background==="function"){background=background(frameState.viewState.resolution);}return background||void 0;}useContainer(target,transform2,backgroundColor){const layerClassName=this.getLayer().getClassName();let container,context;if(target&&target.className===layerClassName&&(!backgroundColor||target&&target.style.backgroundColor&&equals$2(asArray(target.style.backgroundColor),asArray(backgroundColor)))){const canvas=target.firstElementChild;if(canvas instanceof HTMLCanvasElement){context=canvas.getContext("2d");}}if(context&&context.canvas.style.transform===transform2){this.container=target;this.context=context;this.containerReused=true;}else if(this.containerReused){this.container=null;this.context=null;this.containerReused=false;}else if(this.container){this.container.style.backgroundColor=null;}if(!this.container){container=document.createElement("div");container.className=layerClassName;let style=container.
style;style.position="absolute";style.width="100%";style.height="100%";context=createCanvasContext2D();const canvas=context.canvas;container.appendChild(canvas);style=canvas.style;style.position="absolute";style.left="0";style.transformOrigin="top left";this.container=container;this.context=context;}if(!this.containerReused&&backgroundColor&&!this.container.style.backgroundColor){this.container.style.backgroundColor=backgroundColor;}}clipUnrotated(context,frameState,extent){const topLeft=getTopLeft(extent);const topRight=getTopRight(extent);const bottomRight=getBottomRight(extent);const bottomLeft=getBottomLeft(extent);apply(frameState.coordinateToPixelTransform,topLeft);apply(frameState.coordinateToPixelTransform,topRight);apply(frameState.coordinateToPixelTransform,bottomRight);apply(frameState.coordinateToPixelTransform,bottomLeft);const inverted=this.inversePixelTransform;apply(inverted,topLeft);apply(inverted,topRight);apply(inverted,bottomRight);apply(inverted,bottomLeft);context
.save();context.beginPath();context.moveTo(Math.round(topLeft[0]),Math.round(topLeft[1]));context.lineTo(Math.round(topRight[0]),Math.round(topRight[1]));context.lineTo(Math.round(bottomRight[0]),Math.round(bottomRight[1]));context.lineTo(Math.round(bottomLeft[0]),Math.round(bottomLeft[1]));context.clip();}dispatchRenderEvent_(type,context,frameState){const layer=this.getLayer();if(layer.hasListener(type)){const event=new RenderEvent$1(type,this.inversePixelTransform,frameState,context);layer.dispatchEvent(event);}}preRender(context,frameState){this.frameState=frameState;this.dispatchRenderEvent_(RenderEventType.PRERENDER,context,frameState);}postRender(context,frameState){this.dispatchRenderEvent_(RenderEventType.POSTRENDER,context,frameState);}getRenderTransform(center,resolution,rotation,pixelRatio,width,height,offsetX){const dx1=width/2;const dy1=height/2;const sx=pixelRatio/resolution;const sy=-sx;const dx2=-center[0]+offsetX;const dy2=-center[1];return compose(this.tempTransform,
dx1,dy1,sx,sy,-rotation,dx2,dy2);}disposeInternal(){delete this.frameState;super.disposeInternal();}}const CanvasLayerRenderer$1=CanvasLayerRenderer;function drawTextOnPath(flatCoordinates,offset,end,stride,text,startM,maxAngle,scale2,measureAndCacheTextWidth2,font,cache2,rotation){let x2=flatCoordinates[offset];let y2=flatCoordinates[offset+1];let x1=0;let y1=0;let segmentLength=0;let segmentM=0;function advance(){x1=x2;y1=y2;offset+=stride;x2=flatCoordinates[offset];y2=flatCoordinates[offset+1];segmentM+=segmentLength;segmentLength=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));}do{advance();}while(offset<end-stride&&segmentM+segmentLength<startM);let interpolate=segmentLength===0?0:(startM-segmentM)/segmentLength;const beginX=lerp(x1,x2,interpolate);const beginY=lerp(y1,y2,interpolate);const startOffset=offset-stride;const startLength=segmentM;const endM=startM+scale2*measureAndCacheTextWidth2(font,text,cache2);while(offset<end-stride&&segmentM+segmentLength<endM){advance();}interpolate
=segmentLength===0?0:(endM-segmentM)/segmentLength;const endX=lerp(x1,x2,interpolate);const endY=lerp(y1,y2,interpolate);let reverse;if(rotation){const flat=[beginX,beginY,endX,endY];rotate(flat,0,4,2,rotation,flat,flat);reverse=flat[0]>flat[2];}else{reverse=beginX>endX;}const PI=Math.PI;const result=[];const singleSegment=startOffset+stride===offset;offset=startOffset;segmentLength=0;segmentM=startLength;x2=flatCoordinates[offset];y2=flatCoordinates[offset+1];let previousAngle;if(singleSegment){advance();previousAngle=Math.atan2(y2-y1,x2-x1);if(reverse){previousAngle+=previousAngle>0?-PI:PI;}const x=(endX+beginX)/2;const y=(endY+beginY)/2;result[0]=[x,y,(endM-startM)/2,previousAngle,text];return result;}text=text.replace(/\n/g," ");for(let i=0,ii=text.length;i<ii;){advance();let angle=Math.atan2(y2-y1,x2-x1);if(reverse){angle+=angle>0?-PI:PI;}if(previousAngle!==void 0){let delta=angle-previousAngle;delta+=delta>PI?-2*PI:delta<-PI?2*PI:0;if(Math.abs(delta)>maxAngle){return null;}}
previousAngle=angle;const iStart=i;let charLength=0;for(;i<ii;++i){const index=reverse?ii-i-1:i;const len=scale2*measureAndCacheTextWidth2(font,text[index],cache2);if(offset+stride<end&&segmentM+segmentLength<startM+charLength+len/2){break;}charLength+=len;}if(i===iStart){continue;}const chars=reverse?text.substring(ii-iStart,ii-i):text.substring(iStart,i);interpolate=segmentLength===0?0:(startM+charLength/2-segmentM)/segmentLength;const x=lerp(x1,x2,interpolate);const y=lerp(y1,y2,interpolate);result.push([x,y,charLength/2,angle,chars]);startM+=charLength;}return result;}const tmpExtent=createEmpty();const p1=[];const p2=[];const p3=[];const p4=[];function getDeclutterBox(replayImageOrLabelArgs){return replayImageOrLabelArgs[3].declutterBox;}const rtlRegEx=new RegExp("["+String.fromCharCode(1425)+"-"+String.fromCharCode(2303)+String.fromCharCode(64285)+"-"+String.fromCharCode(65023)+String.fromCharCode(65136)+"-"+String.fromCharCode(65276)+String.fromCharCode(67584)+"-"+String.
fromCharCode(69631)+String.fromCharCode(124928)+"-"+String.fromCharCode(126975)+"]");function horizontalTextAlign(text,align){if(align==="start"){align=rtlRegEx.test(text)?"right":"left";}else if(align==="end"){align=rtlRegEx.test(text)?"left":"right";}return TEXT_ALIGN[align];}function createTextChunks(acc,line,i){if(i>0){acc.push("\n","");}acc.push(line,"");return acc;}class Executor{constructor(resolution,pixelRatio,overlaps,instructions){this.overlaps=overlaps;this.pixelRatio=pixelRatio;this.resolution=resolution;this.alignFill_;this.instructions=instructions.instructions;this.coordinates=instructions.coordinates;this.coordinateCache_={};this.renderedTransform_=create();this.hitDetectionInstructions=instructions.hitDetectionInstructions;this.pixelCoordinates_=null;this.viewRotation_=0;this.fillStates=instructions.fillStates||{};this.strokeStates=instructions.strokeStates||{};this.textStates=instructions.textStates||{};this.widths_={};this.labels_={};}createLabel(text,textKey,
fillKey,strokeKey){const key=text+textKey+fillKey+strokeKey;if(this.labels_[key]){return this.labels_[key];}const strokeState=strokeKey?this.strokeStates[strokeKey]:null;const fillState=fillKey?this.fillStates[fillKey]:null;const textState=this.textStates[textKey];const pixelRatio=this.pixelRatio;const scale2=[textState.scale[0]*pixelRatio,textState.scale[1]*pixelRatio];const textIsArray=Array.isArray(text);const align=textState.justify?TEXT_ALIGN[textState.justify]:horizontalTextAlign(Array.isArray(text)?text[0]:text,textState.textAlign||defaultTextAlign);const strokeWidth=strokeKey&&strokeState.lineWidth?strokeState.lineWidth:0;const chunks=textIsArray?text:text.split("\n").reduce(createTextChunks,[]);const{width,height,widths,heights,lineWidths}=getTextDimensions(textState,chunks);const renderWidth=width+strokeWidth;const contextInstructions=[];const w=(renderWidth+2)*scale2[0];const h=(height+strokeWidth)*scale2[1];const label={width:w<0?Math.floor(w):Math.ceil(w),height:h<0?Math.
floor(h):Math.ceil(h),contextInstructions};if(scale2[0]!=1||scale2[1]!=1){contextInstructions.push("scale",scale2);}if(strokeKey){contextInstructions.push("strokeStyle",strokeState.strokeStyle);contextInstructions.push("lineWidth",strokeWidth);contextInstructions.push("lineCap",strokeState.lineCap);contextInstructions.push("lineJoin",strokeState.lineJoin);contextInstructions.push("miterLimit",strokeState.miterLimit);contextInstructions.push("setLineDash",[strokeState.lineDash]);contextInstructions.push("lineDashOffset",strokeState.lineDashOffset);}if(fillKey){contextInstructions.push("fillStyle",fillState.fillStyle);}contextInstructions.push("textBaseline","middle");contextInstructions.push("textAlign","center");const leftRight=0.5-align;let x=align*renderWidth+leftRight*strokeWidth;const strokeInstructions=[];const fillInstructions=[];let lineHeight=0;let lineOffset=0;let widthHeightIndex=0;let lineWidthIndex=0;let previousFont;for(let i=0,ii=chunks.length;i<ii;i+=2){const text2=
chunks[i];if(text2==="\n"){lineOffset+=lineHeight;lineHeight=0;x=align*renderWidth+leftRight*strokeWidth;++lineWidthIndex;continue;}const font=chunks[i+1]||textState.font;if(font!==previousFont){if(strokeKey){strokeInstructions.push("font",font);}if(fillKey){fillInstructions.push("font",font);}previousFont=font;}lineHeight=Math.max(lineHeight,heights[widthHeightIndex]);const fillStrokeArgs=[text2,x+leftRight*widths[widthHeightIndex]+align*(widths[widthHeightIndex]-lineWidths[lineWidthIndex]),0.5*(strokeWidth+lineHeight)+lineOffset];x+=widths[widthHeightIndex];if(strokeKey){strokeInstructions.push("strokeText",fillStrokeArgs);}if(fillKey){fillInstructions.push("fillText",fillStrokeArgs);}++widthHeightIndex;}Array.prototype.push.apply(contextInstructions,strokeInstructions);Array.prototype.push.apply(contextInstructions,fillInstructions);this.labels_[key]=label;return label;}replayTextBackground_(context,p12,p22,p32,p42,fillInstruction2,strokeInstruction2){context.beginPath();context.
moveTo.apply(context,p12);context.lineTo.apply(context,p22);context.lineTo.apply(context,p32);context.lineTo.apply(context,p42);context.lineTo.apply(context,p12);if(fillInstruction2){this.alignFill_=fillInstruction2[2];this.fill_(context);}if(strokeInstruction2){this.setStrokeStyle_(context,strokeInstruction2);context.stroke();}}calculateImageOrLabelDimensions_(sheetWidth,sheetHeight,centerX,centerY,width,height,anchorX,anchorY,originX,originY,rotation,scale2,snapToPixel,padding,fillStroke,feature){anchorX*=scale2[0];anchorY*=scale2[1];let x=centerX-anchorX;let y=centerY-anchorY;const w=width+originX>sheetWidth?sheetWidth-originX:width;const h=height+originY>sheetHeight?sheetHeight-originY:height;const boxW=padding[3]+w*scale2[0]+padding[1];const boxH=padding[0]+h*scale2[1]+padding[2];const boxX=x-padding[3];const boxY=y-padding[0];if(fillStroke||rotation!==0){p1[0]=boxX;p4[0]=boxX;p1[1]=boxY;p2[1]=boxY;p2[0]=boxX+boxW;p3[0]=p2[0];p3[1]=boxY+boxH;p4[1]=p3[1];}let transform2;if(rotation
!==0){transform2=compose(create(),centerX,centerY,1,1,rotation,-centerX,-centerY);apply(transform2,p1);apply(transform2,p2);apply(transform2,p3);apply(transform2,p4);createOrUpdate$2(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);}else{createOrUpdate$2(Math.min(boxX,boxX+boxW),Math.min(boxY,boxY+boxH),Math.max(boxX,boxX+boxW),Math.max(boxY,boxY+boxH),tmpExtent);}if(snapToPixel){x=Math.round(x);y=Math.round(y);}return{drawImageX:x,drawImageY:y,drawImageW:w,drawImageH:h,originX,originY,declutterBox:{minX:tmpExtent[0],minY:tmpExtent[1],maxX:tmpExtent[2],maxY:tmpExtent[3],value:feature},canvasTransform:transform2,scale:scale2};}replayImageOrLabel_(context,contextScale,imageOrLabel,dimensions,opacity,fillInstruction2,strokeInstruction2){const fillStroke=!!(fillInstruction2||strokeInstruction2);const box=dimensions.declutterBox;const canvas=context.canvas;const strokePadding=strokeInstruction2
?strokeInstruction2[2]*dimensions.scale[0]/2:0;const intersects2=box.minX-strokePadding<=canvas.width/contextScale&&box.maxX+strokePadding>=0&&box.minY-strokePadding<=canvas.height/contextScale&&box.maxY+strokePadding>=0;if(intersects2){if(fillStroke){this.replayTextBackground_(context,p1,p2,p3,p4,fillInstruction2,strokeInstruction2);}drawImageOrLabel(context,dimensions.canvasTransform,opacity,imageOrLabel,dimensions.originX,dimensions.originY,dimensions.drawImageW,dimensions.drawImageH,dimensions.drawImageX,dimensions.drawImageY,dimensions.scale);}return true;}fill_(context){if(this.alignFill_){const origin=apply(this.renderedTransform_,[0,0]);const repeatSize=512*this.pixelRatio;context.save();context.translate(origin[0]%repeatSize,origin[1]%repeatSize);context.rotate(this.viewRotation_);}context.fill();if(this.alignFill_){context.restore();}}setStrokeStyle_(context,instruction){context["strokeStyle"]=instruction[1];context.lineWidth=instruction[2];context.lineCap=instruction[3];
context.lineJoin=instruction[4];context.miterLimit=instruction[5];context.lineDashOffset=instruction[7];context.setLineDash(instruction[6]);}drawLabelWithPointPlacement_(text,textKey,strokeKey,fillKey){const textState=this.textStates[textKey];const label=this.createLabel(text,textKey,fillKey,strokeKey);const strokeState=this.strokeStates[strokeKey];const pixelRatio=this.pixelRatio;const align=horizontalTextAlign(Array.isArray(text)?text[0]:text,textState.textAlign||defaultTextAlign);const baseline=TEXT_ALIGN[textState.textBaseline||defaultTextBaseline];const strokeWidth=strokeState&&strokeState.lineWidth?strokeState.lineWidth:0;const width=label.width/pixelRatio-2*textState.scale[0];const anchorX=align*width+2*(0.5-align)*strokeWidth;const anchorY=baseline*label.height/pixelRatio+2*(0.5-baseline)*strokeWidth;return{label,anchorX,anchorY};}execute_(context,contextScale,transform2,instructions,snapToPixel,featureCallback,hitExtent,declutterTree){let pixelCoordinates;if(this.
pixelCoordinates_&&equals$2(transform2,this.renderedTransform_)){pixelCoordinates=this.pixelCoordinates_;}else{if(!this.pixelCoordinates_){this.pixelCoordinates_=[];}pixelCoordinates=transform2D(this.coordinates,0,this.coordinates.length,2,transform2,this.pixelCoordinates_);setFromArray(this.renderedTransform_,transform2);}let i=0;const ii=instructions.length;let d=0;let dd;let anchorX,anchorY,prevX,prevY,roundX,roundY,image,text,textKey,strokeKey,fillKey;let pendingFill=0;let pendingStroke=0;let lastFillInstruction=null;let lastStrokeInstruction=null;const coordinateCache=this.coordinateCache_;const viewRotation=this.viewRotation_;const viewRotationFromTransform=Math.round(Math.atan2(-transform2[1],transform2[0])*1e12)/1e12;const state=({context,pixelRatio:this.pixelRatio,resolution:this.resolution,rotation:viewRotation});const batchSize=this.instructions!=instructions||this.overlaps?0:200;let feature;let x,y,currentGeometry;while(i<ii){const instruction=instructions[i];const type=(
instruction[0]);switch(type){case CanvasInstruction.BEGIN_GEOMETRY:feature=instruction[1];currentGeometry=instruction[3];if(!feature.getGeometry()){i=instruction[2];}else if(hitExtent!==void 0&&!intersects$1(hitExtent,currentGeometry.getExtent())){i=instruction[2]+1;}else{++i;}break;case CanvasInstruction.BEGIN_PATH:if(pendingFill>batchSize){this.fill_(context);pendingFill=0;}if(pendingStroke>batchSize){context.stroke();pendingStroke=0;}if(!pendingFill&&!pendingStroke){context.beginPath();prevX=NaN;prevY=NaN;}++i;break;case CanvasInstruction.CIRCLE:d=instruction[1];const x1=pixelCoordinates[d];const y1=pixelCoordinates[d+1];const x2=pixelCoordinates[d+2];const y2=pixelCoordinates[d+3];const dx=x2-x1;const dy=y2-y1;const r=Math.sqrt(dx*dx+dy*dy);context.moveTo(x1+r,y1);context.arc(x1,y1,r,0,2*Math.PI,true);++i;break;case CanvasInstruction.CLOSE_PATH:context.closePath();++i;break;case CanvasInstruction.CUSTOM:d=instruction[1];dd=instruction[2];const geometry=(instruction[3]);const
renderer=instruction[4];const fn=instruction.length==6?instruction[5]:void 0;state.geometry=geometry;state.feature=feature;if(!(i in coordinateCache)){coordinateCache[i]=[];}const coords=coordinateCache[i];if(fn){fn(pixelCoordinates,d,dd,2,coords);}else{coords[0]=pixelCoordinates[d];coords[1]=pixelCoordinates[d+1];coords.length=2;}renderer(coords,state);++i;break;case CanvasInstruction.DRAW_IMAGE:d=instruction[1];dd=instruction[2];image=instruction[3];anchorX=instruction[4];anchorY=instruction[5];let height=(instruction[6]);const opacity=(instruction[7]);const originX=(instruction[8]);const originY=(instruction[9]);const rotateWithView=(instruction[10]);let rotation=(instruction[11]);const scale2=(instruction[12]);let width=(instruction[13]);const declutterMode=(instruction[14]);const declutterImageWithText=(instruction[15]);if(!image&&instruction.length>=20){text=instruction[19];textKey=instruction[20];strokeKey=instruction[21];fillKey=instruction[22];const labelWithAnchor=this.
drawLabelWithPointPlacement_(text,textKey,strokeKey,fillKey);image=labelWithAnchor.label;instruction[3]=image;const textOffsetX=(instruction[23]);anchorX=(labelWithAnchor.anchorX-textOffsetX)*this.pixelRatio;instruction[4]=anchorX;const textOffsetY=(instruction[24]);anchorY=(labelWithAnchor.anchorY-textOffsetY)*this.pixelRatio;instruction[5]=anchorY;height=image.height;instruction[6]=height;width=image.width;instruction[13]=width;}let geometryWidths;if(instruction.length>25){geometryWidths=instruction[25];}let padding,backgroundFill,backgroundStroke;if(instruction.length>17){padding=instruction[16];backgroundFill=instruction[17];backgroundStroke=instruction[18];}else{padding=defaultPadding;backgroundFill=false;backgroundStroke=false;}if(rotateWithView&&viewRotationFromTransform){rotation+=viewRotation;}else if(!rotateWithView&&!viewRotationFromTransform){rotation-=viewRotation;}let widthIndex=0;for(;d<dd;d+=2){if(geometryWidths&&geometryWidths[widthIndex++]<width/this.pixelRatio){
continue;}const dimensions=this.calculateImageOrLabelDimensions_(image.width,image.height,pixelCoordinates[d],pixelCoordinates[d+1],width,height,anchorX,anchorY,originX,originY,rotation,scale2,snapToPixel,padding,backgroundFill||backgroundStroke,feature);const args=[context,contextScale,image,dimensions,opacity,backgroundFill?(lastFillInstruction):null,backgroundStroke?(lastStrokeInstruction):null];if(declutterTree){if(declutterMode==="none"){continue;}else if(declutterMode==="obstacle"){declutterTree.insert(dimensions.declutterBox);continue;}else{let imageArgs;let imageDeclutterBox;if(declutterImageWithText){const index=dd-d;if(!declutterImageWithText[index]){declutterImageWithText[index]=args;continue;}imageArgs=declutterImageWithText[index];delete declutterImageWithText[index];imageDeclutterBox=getDeclutterBox(imageArgs);if(declutterTree.collides(imageDeclutterBox)){continue;}}if(declutterTree.collides(dimensions.declutterBox)){continue;}if(imageArgs){declutterTree.insert(
imageDeclutterBox);this.replayImageOrLabel_.apply(this,imageArgs);}declutterTree.insert(dimensions.declutterBox);}}this.replayImageOrLabel_.apply(this,args);}++i;break;case CanvasInstruction.DRAW_CHARS:const begin=(instruction[1]);const end=(instruction[2]);const baseline=(instruction[3]);const overflow=(instruction[4]);fillKey=instruction[5];const maxAngle=(instruction[6]);const measurePixelRatio=(instruction[7]);const offsetY=(instruction[8]);strokeKey=instruction[9];const strokeWidth=(instruction[10]);text=instruction[11];textKey=instruction[12];const pixelRatioScale=[instruction[13],instruction[13]];const textState=this.textStates[textKey];const font=textState.font;const textScale=[textState.scale[0]*measurePixelRatio,textState.scale[1]*measurePixelRatio];let cachedWidths;if(font in this.widths_){cachedWidths=this.widths_[font];}else{cachedWidths={};this.widths_[font]=cachedWidths;}const pathLength=lineStringLength(pixelCoordinates,begin,end,2);const textLength=Math.abs(textScale[0
])*measureAndCacheTextWidth(font,text,cachedWidths);if(overflow||textLength<=pathLength){const textAlign=this.textStates[textKey].textAlign;const startM=(pathLength-textLength)*horizontalTextAlign(text,textAlign);const parts=drawTextOnPath(pixelCoordinates,begin,end,2,text,startM,maxAngle,Math.abs(textScale[0]),measureAndCacheTextWidth,font,cachedWidths,viewRotationFromTransform?0:this.viewRotation_);drawChars:if(parts){const replayImageOrLabelArgs=[];let c,cc,chars,label,part;if(strokeKey){for(c=0,cc=parts.length;c<cc;++c){part=parts[c];chars=part[4];label=this.createLabel(chars,textKey,"",strokeKey);anchorX=part[2]+(textScale[0]<0?-strokeWidth:strokeWidth);anchorY=baseline*label.height+(0.5-baseline)*2*strokeWidth*textScale[1]/textScale[0]-offsetY;const 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);if(declutterTree&&declutterTree.
collides(dimensions.declutterBox)){break drawChars;}replayImageOrLabelArgs.push([context,contextScale,label,dimensions,1,null,null]);}}if(fillKey){for(c=0,cc=parts.length;c<cc;++c){part=parts[c];chars=part[4];label=this.createLabel(chars,textKey,fillKey,"");anchorX=part[2];anchorY=baseline*label.height-offsetY;const 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);if(declutterTree&&declutterTree.collides(dimensions.declutterBox)){break drawChars;}replayImageOrLabelArgs.push([context,contextScale,label,dimensions,1,null,null]);}}if(declutterTree){declutterTree.load(replayImageOrLabelArgs.map(getDeclutterBox));}for(let i2=0,ii2=replayImageOrLabelArgs.length;i2<ii2;++i2){this.replayImageOrLabel_.apply(this,replayImageOrLabelArgs[i2]);}}}++i;break;case CanvasInstruction.END_GEOMETRY:if(featureCallback!==void 0){feature=instruction[1];const result
=featureCallback(feature,currentGeometry);if(result){return result;}}++i;break;case CanvasInstruction.FILL:if(batchSize){pendingFill++;}else{this.fill_(context);}++i;break;case CanvasInstruction.MOVE_TO_LINE_TO:d=instruction[1];dd=instruction[2];x=pixelCoordinates[d];y=pixelCoordinates[d+1];roundX=x+0.5|0;roundY=y+0.5|0;if(roundX!==prevX||roundY!==prevY){context.moveTo(x,y);prevX=roundX;prevY=roundY;}for(d+=2;d<dd;d+=2){x=pixelCoordinates[d];y=pixelCoordinates[d+1];roundX=x+0.5|0;roundY=y+0.5|0;if(d==dd-2||roundX!==prevX||roundY!==prevY){context.lineTo(x,y);prevX=roundX;prevY=roundY;}}++i;break;case CanvasInstruction.SET_FILL_STYLE:lastFillInstruction=instruction;this.alignFill_=instruction[2];if(pendingFill){this.fill_(context);pendingFill=0;if(pendingStroke){context.stroke();pendingStroke=0;}}context.fillStyle=instruction[1];++i;break;case CanvasInstruction.SET_STROKE_STYLE:lastStrokeInstruction=instruction;if(pendingStroke){context.stroke();pendingStroke=0;}this.setStrokeStyle_(
context,instruction);++i;break;case CanvasInstruction.STROKE:if(batchSize){pendingStroke++;}else{context.stroke();}++i;break;default:++i;break;}}if(pendingFill){this.fill_(context);}if(pendingStroke){context.stroke();}return void 0;}execute(context,contextScale,transform2,viewRotation,snapToPixel,declutterTree){this.viewRotation_=viewRotation;this.execute_(context,contextScale,transform2,this.instructions,snapToPixel,void 0,void 0,declutterTree);}executeHitDetection(context,transform2,viewRotation,featureCallback,hitExtent){this.viewRotation_=viewRotation;return this.execute_(context,1,transform2,this.hitDetectionInstructions,true,featureCallback,hitExtent);}}const Executor$1=Executor;const ORDER=["Polygon","Circle","LineString","Image","Text","Default"];class ExecutorGroup{constructor(maxExtent,resolution,pixelRatio,overlaps,allInstructions,renderBuffer){this.maxExtent_=maxExtent;this.overlaps_=overlaps;this.pixelRatio_=pixelRatio;this.resolution_=resolution;this.renderBuffer_=
renderBuffer;this.executorsByZIndex_={};this.hitDetectionContext_=null;this.hitDetectionTransform_=create();this.createExecutors_(allInstructions);}clip(context,transform2){const flatClipCoords=this.getClipCoords(transform2);context.beginPath();context.moveTo(flatClipCoords[0],flatClipCoords[1]);context.lineTo(flatClipCoords[2],flatClipCoords[3]);context.lineTo(flatClipCoords[4],flatClipCoords[5]);context.lineTo(flatClipCoords[6],flatClipCoords[7]);context.clip();}createExecutors_(allInstructions){for(const zIndex in allInstructions){let executors=this.executorsByZIndex_[zIndex];if(executors===void 0){executors={};this.executorsByZIndex_[zIndex]=executors;}const instructionByZindex=allInstructions[zIndex];for(const builderType in instructionByZindex){const instructions=instructionByZindex[builderType];executors[builderType]=new Executor$1(this.resolution_,this.pixelRatio_,this.overlaps_,instructions);}}}hasExecutors(executors){for(const zIndex in this.executorsByZIndex_){const
candidates=this.executorsByZIndex_[zIndex];for(let i=0,ii=executors.length;i<ii;++i){if(executors[i]in candidates){return true;}}}return false;}forEachFeatureAtCoordinate(coordinate,resolution,rotation,hitTolerance,callback,declutteredFeatures){hitTolerance=Math.round(hitTolerance);const contextSize=hitTolerance*2+1;const transform2=compose(this.hitDetectionTransform_,hitTolerance+0.5,hitTolerance+0.5,1/resolution,-1/resolution,-rotation,-coordinate[0],-coordinate[1]);const newContext=!this.hitDetectionContext_;if(newContext){this.hitDetectionContext_=createCanvasContext2D(contextSize,contextSize,void 0,{willReadFrequently:true});}const context=this.hitDetectionContext_;if(context.canvas.width!==contextSize||context.canvas.height!==contextSize){context.canvas.width=contextSize;context.canvas.height=contextSize;}else if(!newContext){context.clearRect(0,0,contextSize,contextSize);}let hitExtent;if(this.renderBuffer_!==void 0){hitExtent=createEmpty();extendCoordinate(hitExtent,coordinate)
;buffer(hitExtent,resolution*(this.renderBuffer_+hitTolerance),hitExtent);}const indexes=getPixelIndexArray(hitTolerance);let builderType;function featureCallback(feature,geometry){const imageData=context.getImageData(0,0,contextSize,contextSize).data;for(let i2=0,ii=indexes.length;i2<ii;i2++){if(imageData[indexes[i2]]>0){if(!declutteredFeatures||builderType!=="Image"&&builderType!=="Text"||declutteredFeatures.includes(feature)){const idx=(indexes[i2]-3)/4;const x=hitTolerance-idx%contextSize;const y=hitTolerance-(idx/contextSize|0);const result2=callback(feature,geometry,x*x+y*y);if(result2){return result2;}}context.clearRect(0,0,contextSize,contextSize);break;}}return void 0;}const zs=Object.keys(this.executorsByZIndex_).map(Number);zs.sort(ascending);let i,j,executors,executor,result;for(i=zs.length-1;i>=0;--i){const zIndexKey=zs[i].toString();executors=this.executorsByZIndex_[zIndexKey];for(j=ORDER.length-1;j>=0;--j){builderType=ORDER[j];executor=executors[builderType];if(executor
!==void 0){result=executor.executeHitDetection(context,transform2,rotation,featureCallback,hitExtent);if(result){return result;}}}}return void 0;}getClipCoords(transform2){const maxExtent=this.maxExtent_;if(!maxExtent){return null;}const minX=maxExtent[0];const minY=maxExtent[1];const maxX=maxExtent[2];const maxY=maxExtent[3];const flatClipCoords=[minX,minY,minX,maxY,maxX,maxY,maxX,minY];transform2D(flatClipCoords,0,8,2,transform2,flatClipCoords);return flatClipCoords;}isEmpty(){return isEmpty$1(this.executorsByZIndex_);}execute(context,contextScale,transform2,viewRotation,snapToPixel,builderTypes,declutterTree){const zs=Object.keys(this.executorsByZIndex_).map(Number);zs.sort(ascending);if(this.maxExtent_){context.save();this.clip(context,transform2);}builderTypes=builderTypes?builderTypes:ORDER;let i,ii,j,jj,replays,replay;if(declutterTree){zs.reverse();}for(i=0,ii=zs.length;i<ii;++i){const zIndexKey=zs[i].toString();replays=this.executorsByZIndex_[zIndexKey];for(j=0,jj=builderTypes.
length;j<jj;++j){const builderType=builderTypes[j];replay=replays[builderType];if(replay!==void 0){replay.execute(context,contextScale,transform2,viewRotation,snapToPixel,declutterTree);}}}if(this.maxExtent_){context.restore();}}}const circlePixelIndexArrayCache={};function getPixelIndexArray(radius){if(circlePixelIndexArrayCache[radius]!==void 0){return circlePixelIndexArrayCache[radius];}const size=radius*2+1;const maxDistanceSq=radius*radius;const distances=new Array(maxDistanceSq+1);for(let i=0;i<=radius;++i){for(let j=0;j<=radius;++j){const distanceSq=i*i+j*j;if(distanceSq>maxDistanceSq){break;}let distance=distances[distanceSq];if(!distance){distance=[];distances[distanceSq]=distance;}distance.push(((radius+i)*size+(radius+j))*4+3);if(i>0){distance.push(((radius-i)*size+(radius+j))*4+3);}if(j>0){distance.push(((radius+i)*size+(radius-j))*4+3);if(i>0){distance.push(((radius-i)*size+(radius-j))*4+3);}}}}const pixelIndex=[];for(let i=0,ii=distances.length;i<ii;++i){if(distances[i]){
pixelIndex.push(...distances[i]);}}circlePixelIndexArrayCache[radius]=pixelIndex;return pixelIndex;}const ExecutorGroup$1=ExecutorGroup;class CanvasImmediateRenderer extends VectorContext$1{constructor(context,pixelRatio,extent,transform2,viewRotation,squaredTolerance,userTransform){super();this.context_=context;this.pixelRatio_=pixelRatio;this.extent_=extent;this.transform_=transform2;this.transformRotation_=transform2?toFixed(Math.atan2(transform2[1],transform2[0]),10):0;this.viewRotation_=viewRotation;this.squaredTolerance_=squaredTolerance;this.userTransform_=userTransform;this.contextFillState_=null;this.contextStrokeState_=null;this.contextTextState_=null;this.fillState_=null;this.strokeState_=null;this.image_=null;this.imageAnchorX_=0;this.imageAnchorY_=0;this.imageHeight_=0;this.imageOpacity_=0;this.imageOriginX_=0;this.imageOriginY_=0;this.imageRotateWithView_=false;this.imageRotation_=0;this.imageScale_=[0,0];this.imageWidth_=0;this.text_="";this.textOffsetX_=0;this.
textOffsetY_=0;this.textRotateWithView_=false;this.textRotation_=0;this.textScale_=[0,0];this.textFillState_=null;this.textStrokeState_=null;this.textState_=null;this.pixelCoordinates_=[];this.tmpLocalTransform_=create();}drawImages_(flatCoordinates,offset,end,stride){if(!this.image_){return;}const pixelCoordinates=transform2D(flatCoordinates,offset,end,stride,this.transform_,this.pixelCoordinates_);const context=this.context_;const localTransform=this.tmpLocalTransform_;const alpha=context.globalAlpha;if(this.imageOpacity_!=1){context.globalAlpha=alpha*this.imageOpacity_;}let rotation=this.imageRotation_;if(this.transformRotation_===0){rotation-=this.viewRotation_;}if(this.imageRotateWithView_){rotation+=this.viewRotation_;}for(let i=0,ii=pixelCoordinates.length;i<ii;i+=2){const x=pixelCoordinates[i]-this.imageAnchorX_;const y=pixelCoordinates[i+1]-this.imageAnchorY_;if(rotation!==0||this.imageScale_[0]!=1||this.imageScale_[1]!=1){const centerX=x+this.imageAnchorX_;const centerY=y+
this.imageAnchorY_;compose(localTransform,centerX,centerY,1,1,rotation,-centerX,-centerY);context.save();context.transform.apply(context,localTransform);context.translate(centerX,centerY);context.scale(this.imageScale_[0],this.imageScale_[1]);context.drawImage(this.image_,this.imageOriginX_,this.imageOriginY_,this.imageWidth_,this.imageHeight_,-this.imageAnchorX_,-this.imageAnchorY_,this.imageWidth_,this.imageHeight_);context.restore();}else{context.drawImage(this.image_,this.imageOriginX_,this.imageOriginY_,this.imageWidth_,this.imageHeight_,x,y,this.imageWidth_,this.imageHeight_);}}if(this.imageOpacity_!=1){context.globalAlpha=alpha;}}drawText_(flatCoordinates,offset,end,stride){if(!this.textState_||this.text_===""){return;}if(this.textFillState_){this.setContextFillState_(this.textFillState_);}if(this.textStrokeState_){this.setContextStrokeState_(this.textStrokeState_);}this.setContextTextState_(this.textState_);const pixelCoordinates=transform2D(flatCoordinates,offset,end,stride,
this.transform_,this.pixelCoordinates_);const context=this.context_;let rotation=this.textRotation_;if(this.transformRotation_===0){rotation-=this.viewRotation_;}if(this.textRotateWithView_){rotation+=this.viewRotation_;}for(;offset<end;offset+=stride){const x=pixelCoordinates[offset]+this.textOffsetX_;const y=pixelCoordinates[offset+1]+this.textOffsetY_;if(rotation!==0||this.textScale_[0]!=1||this.textScale_[1]!=1){context.save();context.translate(x-this.textOffsetX_,y-this.textOffsetY_);context.rotate(rotation);context.translate(this.textOffsetX_,this.textOffsetY_);context.scale(this.textScale_[0],this.textScale_[1]);if(this.textStrokeState_){context.strokeText(this.text_,0,0);}if(this.textFillState_){context.fillText(this.text_,0,0);}context.restore();}else{if(this.textStrokeState_){context.strokeText(this.text_,x,y);}if(this.textFillState_){context.fillText(this.text_,x,y);}}}}moveToLineTo_(flatCoordinates,offset,end,stride,close){const context=this.context_;const pixelCoordinates=
transform2D(flatCoordinates,offset,end,stride,this.transform_,this.pixelCoordinates_);context.moveTo(pixelCoordinates[0],pixelCoordinates[1]);let length=pixelCoordinates.length;if(close){length-=2;}for(let i=2;i<length;i+=2){context.lineTo(pixelCoordinates[i],pixelCoordinates[i+1]);}if(close){context.closePath();}return end;}drawRings_(flatCoordinates,offset,ends,stride){for(let i=0,ii=ends.length;i<ii;++i){offset=this.moveToLineTo_(flatCoordinates,offset,ends[i],stride,true);}return offset;}drawCircle(geometry){if(this.squaredTolerance_){geometry=geometry.simplifyTransformed(this.squaredTolerance_,this.userTransform_);}if(!intersects$1(this.extent_,geometry.getExtent())){return;}if(this.fillState_||this.strokeState_){if(this.fillState_){this.setContextFillState_(this.fillState_);}if(this.strokeState_){this.setContextStrokeState_(this.strokeState_);}const pixelCoordinates=transformGeom2D(geometry,this.transform_,this.pixelCoordinates_);const dx=pixelCoordinates[2]-pixelCoordinates[0];
const dy=pixelCoordinates[3]-pixelCoordinates[1];const radius=Math.sqrt(dx*dx+dy*dy);const context=this.context_;context.beginPath();context.arc(pixelCoordinates[0],pixelCoordinates[1],radius,0,2*Math.PI);if(this.fillState_){context.fill();}if(this.strokeState_){context.stroke();}}if(this.text_!==""){this.drawText_(geometry.getCenter(),0,2,2);}}setStyle(style){this.setFillStrokeStyle(style.getFill(),style.getStroke());this.setImageStyle(style.getImage());this.setTextStyle(style.getText());}setTransform(transform2){this.transform_=transform2;}drawGeometry(geometry){const type=geometry.getType();switch(type){case"Point":this.drawPoint(geometry);break;case"LineString":this.drawLineString(geometry);break;case"Polygon":this.drawPolygon(geometry);break;case"MultiPoint":this.drawMultiPoint(geometry);break;case"MultiLineString":this.drawMultiLineString(geometry);break;case"MultiPolygon":this.drawMultiPolygon(geometry);break;case"GeometryCollection":this.drawGeometryCollection(geometry);break;
case"Circle":this.drawCircle(geometry);break;}}drawFeature(feature,style){const geometry=style.getGeometryFunction()(feature);if(!geometry){return;}this.setStyle(style);this.drawGeometry(geometry);}drawGeometryCollection(geometry){const geometries=geometry.getGeometriesArray();for(let i=0,ii=geometries.length;i<ii;++i){this.drawGeometry(geometries[i]);}}drawPoint(geometry){if(this.squaredTolerance_){geometry=geometry.simplifyTransformed(this.squaredTolerance_,this.userTransform_);}const flatCoordinates=geometry.getFlatCoordinates();const stride=geometry.getStride();if(this.image_){this.drawImages_(flatCoordinates,0,flatCoordinates.length,stride);}if(this.text_!==""){this.drawText_(flatCoordinates,0,flatCoordinates.length,stride);}}drawMultiPoint(geometry){if(this.squaredTolerance_){geometry=geometry.simplifyTransformed(this.squaredTolerance_,this.userTransform_);}const flatCoordinates=geometry.getFlatCoordinates();const stride=geometry.getStride();if(this.image_){this.drawImages_(
flatCoordinates,0,flatCoordinates.length,stride);}if(this.text_!==""){this.drawText_(flatCoordinates,0,flatCoordinates.length,stride);}}drawLineString(geometry){if(this.squaredTolerance_){geometry=geometry.simplifyTransformed(this.squaredTolerance_,this.userTransform_);}if(!intersects$1(this.extent_,geometry.getExtent())){return;}if(this.strokeState_){this.setContextStrokeState_(this.strokeState_);const context=this.context_;const flatCoordinates=geometry.getFlatCoordinates();context.beginPath();this.moveToLineTo_(flatCoordinates,0,flatCoordinates.length,geometry.getStride(),false);context.stroke();}if(this.text_!==""){const flatMidpoint=geometry.getFlatMidpoint();this.drawText_(flatMidpoint,0,2,2);}}drawMultiLineString(geometry){if(this.squaredTolerance_){geometry=geometry.simplifyTransformed(this.squaredTolerance_,this.userTransform_);}const geometryExtent=geometry.getExtent();if(!intersects$1(this.extent_,geometryExtent)){return;}if(this.strokeState_){this.setContextStrokeState_(
this.strokeState_);const context=this.context_;const flatCoordinates=geometry.getFlatCoordinates();let offset=0;const ends=(geometry.getEnds());const stride=geometry.getStride();context.beginPath();for(let i=0,ii=ends.length;i<ii;++i){offset=this.moveToLineTo_(flatCoordinates,offset,ends[i],stride,false);}context.stroke();}if(this.text_!==""){const flatMidpoints=geometry.getFlatMidpoints();this.drawText_(flatMidpoints,0,flatMidpoints.length,2);}}drawPolygon(geometry){if(this.squaredTolerance_){geometry=geometry.simplifyTransformed(this.squaredTolerance_,this.userTransform_);}if(!intersects$1(this.extent_,geometry.getExtent())){return;}if(this.strokeState_||this.fillState_){if(this.fillState_){this.setContextFillState_(this.fillState_);}if(this.strokeState_){this.setContextStrokeState_(this.strokeState_);}const context=this.context_;context.beginPath();this.drawRings_(geometry.getOrientedFlatCoordinates(),0,geometry.getEnds(),geometry.getStride());if(this.fillState_){context.fill();}if(
this.strokeState_){context.stroke();}}if(this.text_!==""){const flatInteriorPoint=geometry.getFlatInteriorPoint();this.drawText_(flatInteriorPoint,0,2,2);}}drawMultiPolygon(geometry){if(this.squaredTolerance_){geometry=geometry.simplifyTransformed(this.squaredTolerance_,this.userTransform_);}if(!intersects$1(this.extent_,geometry.getExtent())){return;}if(this.strokeState_||this.fillState_){if(this.fillState_){this.setContextFillState_(this.fillState_);}if(this.strokeState_){this.setContextStrokeState_(this.strokeState_);}const context=this.context_;const flatCoordinates=geometry.getOrientedFlatCoordinates();let offset=0;const endss=geometry.getEndss();const stride=geometry.getStride();context.beginPath();for(let i=0,ii=endss.length;i<ii;++i){const ends=endss[i];offset=this.drawRings_(flatCoordinates,offset,ends,stride);}if(this.fillState_){context.fill();}if(this.strokeState_){context.stroke();}}if(this.text_!==""){const flatInteriorPoints=geometry.getFlatInteriorPoints();this.
drawText_(flatInteriorPoints,0,flatInteriorPoints.length,2);}}setContextFillState_(fillState){const context=this.context_;const contextFillState=this.contextFillState_;if(!contextFillState){context.fillStyle=fillState.fillStyle;this.contextFillState_={fillStyle:fillState.fillStyle};}else{if(contextFillState.fillStyle!=fillState.fillStyle){contextFillState.fillStyle=fillState.fillStyle;context.fillStyle=fillState.fillStyle;}}}setContextStrokeState_(strokeState){const context=this.context_;const contextStrokeState=this.contextStrokeState_;if(!contextStrokeState){context.lineCap=strokeState.lineCap;context.setLineDash(strokeState.lineDash);context.lineDashOffset=strokeState.lineDashOffset;context.lineJoin=strokeState.lineJoin;context.lineWidth=strokeState.lineWidth;context.miterLimit=strokeState.miterLimit;context.strokeStyle=strokeState.strokeStyle;this.contextStrokeState_={lineCap:strokeState.lineCap,lineDash:strokeState.lineDash,lineDashOffset:strokeState.lineDashOffset,lineJoin:
strokeState.lineJoin,lineWidth:strokeState.lineWidth,miterLimit:strokeState.miterLimit,strokeStyle:strokeState.strokeStyle};}else{if(contextStrokeState.lineCap!=strokeState.lineCap){contextStrokeState.lineCap=strokeState.lineCap;context.lineCap=strokeState.lineCap;}if(!equals$2(contextStrokeState.lineDash,strokeState.lineDash)){context.setLineDash(contextStrokeState.lineDash=strokeState.lineDash);}if(contextStrokeState.lineDashOffset!=strokeState.lineDashOffset){contextStrokeState.lineDashOffset=strokeState.lineDashOffset;context.lineDashOffset=strokeState.lineDashOffset;}if(contextStrokeState.lineJoin!=strokeState.lineJoin){contextStrokeState.lineJoin=strokeState.lineJoin;context.lineJoin=strokeState.lineJoin;}if(contextStrokeState.lineWidth!=strokeState.lineWidth){contextStrokeState.lineWidth=strokeState.lineWidth;context.lineWidth=strokeState.lineWidth;}if(contextStrokeState.miterLimit!=strokeState.miterLimit){contextStrokeState.miterLimit=strokeState.miterLimit;context.miterLimit=
strokeState.miterLimit;}if(contextStrokeState.strokeStyle!=strokeState.strokeStyle){contextStrokeState.strokeStyle=strokeState.strokeStyle;context.strokeStyle=strokeState.strokeStyle;}}}setContextTextState_(textState){const context=this.context_;const contextTextState=this.contextTextState_;const textAlign=textState.textAlign?textState.textAlign:defaultTextAlign;if(!contextTextState){context.font=textState.font;context.textAlign=textAlign;context.textBaseline=textState.textBaseline;this.contextTextState_={font:textState.font,textAlign,textBaseline:textState.textBaseline};}else{if(contextTextState.font!=textState.font){contextTextState.font=textState.font;context.font=textState.font;}if(contextTextState.textAlign!=textAlign){contextTextState.textAlign=textAlign;context.textAlign=textAlign;}if(contextTextState.textBaseline!=textState.textBaseline){contextTextState.textBaseline=textState.textBaseline;context.textBaseline=textState.textBaseline;}}}setFillStrokeStyle(fillStyle,strokeStyle){
if(!fillStyle){this.fillState_=null;}else{const fillStyleColor=fillStyle.getColor();this.fillState_={fillStyle:asColorLike(fillStyleColor?fillStyleColor:defaultFillStyle)};}if(!strokeStyle){this.strokeState_=null;}else{const strokeStyleColor=strokeStyle.getColor();const strokeStyleLineCap=strokeStyle.getLineCap();const strokeStyleLineDash=strokeStyle.getLineDash();const strokeStyleLineDashOffset=strokeStyle.getLineDashOffset();const strokeStyleLineJoin=strokeStyle.getLineJoin();const strokeStyleWidth=strokeStyle.getWidth();const strokeStyleMiterLimit=strokeStyle.getMiterLimit();const lineDash=strokeStyleLineDash?strokeStyleLineDash:defaultLineDash;this.strokeState_={lineCap:strokeStyleLineCap!==void 0?strokeStyleLineCap:defaultLineCap,lineDash:this.pixelRatio_===1?lineDash:lineDash.map((n)=>n*this.pixelRatio_),lineDashOffset:(strokeStyleLineDashOffset?strokeStyleLineDashOffset:defaultLineDashOffset)*this.pixelRatio_,lineJoin:strokeStyleLineJoin!==void 0?strokeStyleLineJoin:
defaultLineJoin,lineWidth:(strokeStyleWidth!==void 0?strokeStyleWidth:defaultLineWidth)*this.pixelRatio_,miterLimit:strokeStyleMiterLimit!==void 0?strokeStyleMiterLimit:defaultMiterLimit,strokeStyle:asColorLike(strokeStyleColor?strokeStyleColor:defaultStrokeStyle)};}}setImageStyle(imageStyle){let imageSize;if(!imageStyle||!(imageSize=imageStyle.getSize())){this.image_=null;return;}const imagePixelRatio=imageStyle.getPixelRatio(this.pixelRatio_);const imageAnchor=imageStyle.getAnchor();const imageOrigin=imageStyle.getOrigin();this.image_=imageStyle.getImage(this.pixelRatio_);this.imageAnchorX_=imageAnchor[0]*imagePixelRatio;this.imageAnchorY_=imageAnchor[1]*imagePixelRatio;this.imageHeight_=imageSize[1]*imagePixelRatio;this.imageOpacity_=imageStyle.getOpacity();this.imageOriginX_=imageOrigin[0];this.imageOriginY_=imageOrigin[1];this.imageRotateWithView_=imageStyle.getRotateWithView();this.imageRotation_=imageStyle.getRotation();const imageScale=imageStyle.getScaleArray();this.
imageScale_=[imageScale[0]*this.pixelRatio_/imagePixelRatio,imageScale[1]*this.pixelRatio_/imagePixelRatio];this.imageWidth_=imageSize[0]*imagePixelRatio;}setTextStyle(textStyle){if(!textStyle){this.text_="";}else{const textFillStyle=textStyle.getFill();if(!textFillStyle){this.textFillState_=null;}else{const textFillStyleColor=textFillStyle.getColor();this.textFillState_={fillStyle:asColorLike(textFillStyleColor?textFillStyleColor:defaultFillStyle)};}const textStrokeStyle=textStyle.getStroke();if(!textStrokeStyle){this.textStrokeState_=null;}else{const textStrokeStyleColor=textStrokeStyle.getColor();const textStrokeStyleLineCap=textStrokeStyle.getLineCap();const textStrokeStyleLineDash=textStrokeStyle.getLineDash();const textStrokeStyleLineDashOffset=textStrokeStyle.getLineDashOffset();const textStrokeStyleLineJoin=textStrokeStyle.getLineJoin();const textStrokeStyleWidth=textStrokeStyle.getWidth();const textStrokeStyleMiterLimit=textStrokeStyle.getMiterLimit();this.textStrokeState_={
lineCap:textStrokeStyleLineCap!==void 0?textStrokeStyleLineCap:defaultLineCap,lineDash:textStrokeStyleLineDash?textStrokeStyleLineDash:defaultLineDash,lineDashOffset:textStrokeStyleLineDashOffset?textStrokeStyleLineDashOffset:defaultLineDashOffset,lineJoin:textStrokeStyleLineJoin!==void 0?textStrokeStyleLineJoin:defaultLineJoin,lineWidth:textStrokeStyleWidth!==void 0?textStrokeStyleWidth:defaultLineWidth,miterLimit:textStrokeStyleMiterLimit!==void 0?textStrokeStyleMiterLimit:defaultMiterLimit,strokeStyle:asColorLike(textStrokeStyleColor?textStrokeStyleColor:defaultStrokeStyle)};}const textFont=textStyle.getFont();const textOffsetX=textStyle.getOffsetX();const textOffsetY=textStyle.getOffsetY();const textRotateWithView=textStyle.getRotateWithView();const textRotation=textStyle.getRotation();const textScale=textStyle.getScaleArray();const textText=textStyle.getText();const textTextAlign=textStyle.getTextAlign();const textTextBaseline=textStyle.getTextBaseline();this.textState_={font:
textFont!==void 0?textFont:defaultFont,textAlign:textTextAlign!==void 0?textTextAlign:defaultTextAlign,textBaseline:textTextBaseline!==void 0?textTextBaseline:defaultTextBaseline};this.text_=textText!==void 0?Array.isArray(textText)?textText.reduce((acc,t,i)=>acc+=i%2?" ":t,""):textText:"";this.textOffsetX_=textOffsetX!==void 0?this.pixelRatio_*textOffsetX:0;this.textOffsetY_=textOffsetY!==void 0?this.pixelRatio_*textOffsetY:0;this.textRotateWithView_=textRotateWithView!==void 0?textRotateWithView:false;this.textRotation_=textRotation!==void 0?textRotation:0;this.textScale_=[this.pixelRatio_*textScale[0],this.pixelRatio_*textScale[1]];}}}const CanvasImmediateRenderer$1=CanvasImmediateRenderer;const HIT_DETECT_RESOLUTION=0.5;function createHitDetectionImageData(size,transforms2,features,styleFunction,extent,resolution,rotation){const width=size[0]*HIT_DETECT_RESOLUTION;const height=size[1]*HIT_DETECT_RESOLUTION;const context=createCanvasContext2D(width,height);context.
imageSmoothingEnabled=false;const canvas=context.canvas;const renderer=new CanvasImmediateRenderer$1(context,HIT_DETECT_RESOLUTION,extent,null,rotation);const featureCount=features.length;const indexFactor=Math.floor((256*256*256-1)/featureCount);const featuresByZIndex={};for(let i=1;i<=featureCount;++i){const feature=features[i-1];const featureStyleFunction=feature.getStyleFunction()||styleFunction;if(!featureStyleFunction){continue;}let styles=featureStyleFunction(feature,resolution);if(!styles){continue;}if(!Array.isArray(styles)){styles=[styles];}const index=i*indexFactor;const color=index.toString(16).padStart(7,"#00000");for(let j=0,jj=styles.length;j<jj;++j){const originalStyle=styles[j];const geometry=originalStyle.getGeometryFunction()(feature);if(!geometry||!intersects$1(extent,geometry.getExtent())){continue;}const style=originalStyle.clone();const fill=style.getFill();if(fill){fill.setColor(color);}const stroke=style.getStroke();if(stroke){stroke.setColor(color);stroke.
setLineDash(null);}style.setText(void 0);const image=originalStyle.getImage();if(image){const imgSize=image.getImageSize();if(!imgSize){continue;}const imgContext=createCanvasContext2D(imgSize[0],imgSize[1],void 0,{alpha:false});const img=imgContext.canvas;imgContext.fillStyle=color;imgContext.fillRect(0,0,img.width,img.height);style.setImage(new OlIcon({img,anchor:image.getAnchor(),anchorXUnits:"pixels",anchorYUnits:"pixels",offset:image.getOrigin(),opacity:1,size:image.getSize(),scale:image.getScale(),rotation:image.getRotation(),rotateWithView:image.getRotateWithView()}));}const zIndex=style.getZIndex()||0;let byGeometryType=featuresByZIndex[zIndex];if(!byGeometryType){byGeometryType={};featuresByZIndex[zIndex]=byGeometryType;byGeometryType["Polygon"]=[];byGeometryType["Circle"]=[];byGeometryType["LineString"]=[];byGeometryType["Point"]=[];}const type=geometry.getType();if(type==="GeometryCollection"){const geometries=(geometry.getGeometriesArrayRecursive());for(let i2=0,ii=
geometries.length;i2<ii;++i2){const geometry2=geometries[i2];byGeometryType[geometry2.getType().replace("Multi","")].push(geometry2,style);}}else{byGeometryType[type.replace("Multi","")].push(geometry,style);}}}const zIndexKeys=Object.keys(featuresByZIndex).map(Number).sort(ascending);for(let i=0,ii=zIndexKeys.length;i<ii;++i){const byGeometryType=featuresByZIndex[zIndexKeys[i]];for(const type in byGeometryType){const geomAndStyle=byGeometryType[type];for(let j=0,jj=geomAndStyle.length;j<jj;j+=2){renderer.setStyle(geomAndStyle[j+1]);for(let k=0,kk=transforms2.length;k<kk;++k){renderer.setTransform(transforms2[k]);renderer.drawGeometry(geomAndStyle[j]);}}}}return context.getImageData(0,0,canvas.width,canvas.height);}function hitDetect(pixel,features,imageData){const resultFeatures=[];if(imageData){const x=Math.floor(Math.round(pixel[0])*HIT_DETECT_RESOLUTION);const y=Math.floor(Math.round(pixel[1])*HIT_DETECT_RESOLUTION);const index=(clamp(x,0,imageData.width-1)+clamp(y,0,imageData.
height-1)*imageData.width)*4;const r=imageData.data[index];const g=imageData.data[index+1];const b=imageData.data[index+2];const i=b+256*(g+256*r);const indexFactor=Math.floor((256*256*256-1)/features.length);if(i&&i%indexFactor===0){resultFeatures.push(features[i/indexFactor-1]);}}return resultFeatures;}const SIMPLIFY_TOLERANCE=0.5;const GEOMETRY_RENDERERS={"Point":renderPointGeometry,"LineString":renderLineStringGeometry,"Polygon":renderPolygonGeometry,"MultiPoint":renderMultiPointGeometry,"MultiLineString":renderMultiLineStringGeometry,"MultiPolygon":renderMultiPolygonGeometry,"GeometryCollection":renderGeometryCollectionGeometry,"Circle":renderCircleGeometry};function defaultOrder(feature1,feature2){return parseInt(getUid(feature1),10)-parseInt(getUid(feature2),10);}function getSquaredTolerance(resolution,pixelRatio){const tolerance=getTolerance(resolution,pixelRatio);return tolerance*tolerance;}function getTolerance(resolution,pixelRatio){return SIMPLIFY_TOLERANCE*resolution/
pixelRatio;}function renderCircleGeometry(builderGroup,geometry,style,feature,declutterBuilderGroup){const fillStyle=style.getFill();const strokeStyle=style.getStroke();if(fillStyle||strokeStyle){const circleReplay=builderGroup.getBuilder(style.getZIndex(),"Circle");circleReplay.setFillStrokeStyle(fillStyle,strokeStyle);circleReplay.drawCircle(geometry,feature);}const textStyle=style.getText();if(textStyle&&textStyle.getText()){const textReplay=(declutterBuilderGroup||builderGroup).getBuilder(style.getZIndex(),"Text");textReplay.setTextStyle(textStyle);textReplay.drawText(geometry,feature);}}function renderFeature(replayGroup,feature,style,squaredTolerance,listener,transform2,declutterBuilderGroup){let loading=false;const imageStyle=style.getImage();if(imageStyle){const imageState=imageStyle.getImageState();if(imageState==ImageState.LOADED||imageState==ImageState.ERROR){imageStyle.unlistenImageChange(listener);}else{if(imageState==ImageState.IDLE){imageStyle.load();}imageStyle.
listenImageChange(listener);loading=true;}}renderFeatureInternal(replayGroup,feature,style,squaredTolerance,transform2,declutterBuilderGroup);return loading;}function renderFeatureInternal(replayGroup,feature,style,squaredTolerance,transform2,declutterBuilderGroup){const geometry=style.getGeometryFunction()(feature);if(!geometry){return;}const simplifiedGeometry=geometry.simplifyTransformed(squaredTolerance,transform2);const renderer=style.getRenderer();if(renderer){renderGeometry(replayGroup,simplifiedGeometry,style,feature);}else{const geometryRenderer=GEOMETRY_RENDERERS[simplifiedGeometry.getType()];geometryRenderer(replayGroup,simplifiedGeometry,style,feature,declutterBuilderGroup);}}function renderGeometry(replayGroup,geometry,style,feature){if(geometry.getType()=="GeometryCollection"){const geometries=(geometry.getGeometries());for(let i=0,ii=geometries.length;i<ii;++i){renderGeometry(replayGroup,geometries[i],style,feature);}return;}const replay=replayGroup.getBuilder(style.
getZIndex(),"Default");replay.drawCustom(geometry,feature,style.getRenderer(),style.getHitDetectionRenderer());}function renderGeometryCollectionGeometry(replayGroup,geometry,style,feature,declutterBuilderGroup){const geometries=geometry.getGeometriesArray();let i,ii;for(i=0,ii=geometries.length;i<ii;++i){const geometryRenderer=GEOMETRY_RENDERERS[geometries[i].getType()];geometryRenderer(replayGroup,geometries[i],style,feature,declutterBuilderGroup);}}function renderLineStringGeometry(builderGroup,geometry,style,feature,declutterBuilderGroup){const strokeStyle=style.getStroke();if(strokeStyle){const lineStringReplay=builderGroup.getBuilder(style.getZIndex(),"LineString");lineStringReplay.setFillStrokeStyle(null,strokeStyle);lineStringReplay.drawLineString(geometry,feature);}const textStyle=style.getText();if(textStyle&&textStyle.getText()){const textReplay=(declutterBuilderGroup||builderGroup).getBuilder(style.getZIndex(),"Text");textReplay.setTextStyle(textStyle);textReplay.drawText(
geometry,feature);}}function renderMultiLineStringGeometry(builderGroup,geometry,style,feature,declutterBuilderGroup){const strokeStyle=style.getStroke();if(strokeStyle){const lineStringReplay=builderGroup.getBuilder(style.getZIndex(),"LineString");lineStringReplay.setFillStrokeStyle(null,strokeStyle);lineStringReplay.drawMultiLineString(geometry,feature);}const textStyle=style.getText();if(textStyle&&textStyle.getText()){const textReplay=(declutterBuilderGroup||builderGroup).getBuilder(style.getZIndex(),"Text");textReplay.setTextStyle(textStyle);textReplay.drawText(geometry,feature);}}function renderMultiPolygonGeometry(builderGroup,geometry,style,feature,declutterBuilderGroup){const fillStyle=style.getFill();const strokeStyle=style.getStroke();if(strokeStyle||fillStyle){const polygonReplay=builderGroup.getBuilder(style.getZIndex(),"Polygon");polygonReplay.setFillStrokeStyle(fillStyle,strokeStyle);polygonReplay.drawMultiPolygon(geometry,feature);}const textStyle=style.getText();if(
textStyle&&textStyle.getText()){const textReplay=(declutterBuilderGroup||builderGroup).getBuilder(style.getZIndex(),"Text");textReplay.setTextStyle(textStyle);textReplay.drawText(geometry,feature);}}function renderPointGeometry(builderGroup,geometry,style,feature,declutterBuilderGroup){const imageStyle=style.getImage();const textStyle=style.getText();let declutterImageWithText;if(imageStyle){if(imageStyle.getImageState()!=ImageState.LOADED){return;}let imageBuilderGroup=builderGroup;if(declutterBuilderGroup){const declutterMode=imageStyle.getDeclutterMode();if(declutterMode!=="none"){imageBuilderGroup=declutterBuilderGroup;if(declutterMode==="obstacle"){const imageReplay2=builderGroup.getBuilder(style.getZIndex(),"Image");imageReplay2.setImageStyle(imageStyle,declutterImageWithText);imageReplay2.drawPoint(geometry,feature);}else if(textStyle&&textStyle.getText()){declutterImageWithText={};}}}const imageReplay=imageBuilderGroup.getBuilder(style.getZIndex(),"Image");imageReplay.
setImageStyle(imageStyle,declutterImageWithText);imageReplay.drawPoint(geometry,feature);}if(textStyle&&textStyle.getText()){let textBuilderGroup=builderGroup;if(declutterBuilderGroup){textBuilderGroup=declutterBuilderGroup;}const textReplay=textBuilderGroup.getBuilder(style.getZIndex(),"Text");textReplay.setTextStyle(textStyle,declutterImageWithText);textReplay.drawText(geometry,feature);}}function renderMultiPointGeometry(builderGroup,geometry,style,feature,declutterBuilderGroup){const imageStyle=style.getImage();const textStyle=style.getText();let declutterImageWithText;if(imageStyle){if(imageStyle.getImageState()!=ImageState.LOADED){return;}let imageBuilderGroup=builderGroup;if(declutterBuilderGroup){const declutterMode=imageStyle.getDeclutterMode();if(declutterMode!=="none"){imageBuilderGroup=declutterBuilderGroup;if(declutterMode==="obstacle"){const imageReplay2=builderGroup.getBuilder(style.getZIndex(),"Image");imageReplay2.setImageStyle(imageStyle,declutterImageWithText);
imageReplay2.drawMultiPoint(geometry,feature);}else if(textStyle&&textStyle.getText()){declutterImageWithText={};}}}const imageReplay=imageBuilderGroup.getBuilder(style.getZIndex(),"Image");imageReplay.setImageStyle(imageStyle,declutterImageWithText);imageReplay.drawMultiPoint(geometry,feature);}if(textStyle&&textStyle.getText()){let textBuilderGroup=builderGroup;if(declutterBuilderGroup){textBuilderGroup=declutterBuilderGroup;}const textReplay=textBuilderGroup.getBuilder(style.getZIndex(),"Text");textReplay.setTextStyle(textStyle,declutterImageWithText);textReplay.drawText(geometry,feature);}}function renderPolygonGeometry(builderGroup,geometry,style,feature,declutterBuilderGroup){const fillStyle=style.getFill();const strokeStyle=style.getStroke();if(fillStyle||strokeStyle){const polygonReplay=builderGroup.getBuilder(style.getZIndex(),"Polygon");polygonReplay.setFillStrokeStyle(fillStyle,strokeStyle);polygonReplay.drawPolygon(geometry,feature);}const textStyle=style.getText();if(
textStyle&&textStyle.getText()){const textReplay=(declutterBuilderGroup||builderGroup).getBuilder(style.getZIndex(),"Text");textReplay.setTextStyle(textStyle);textReplay.drawText(geometry,feature);}}class CanvasVectorLayerRenderer extends CanvasLayerRenderer$1{constructor(vectorLayer){super(vectorLayer);this.boundHandleStyleImageChange_=this.handleStyleImageChange_.bind(this);this.animatingOrInteracting_;this.hitDetectionImageData_=null;this.renderedFeatures_=null;this.renderedRevision_=-1;this.renderedResolution_=NaN;this.renderedExtent_=createEmpty();this.wrappedRenderedExtent_=createEmpty();this.renderedRotation_;this.renderedCenter_=null;this.renderedProjection_=null;this.renderedRenderOrder_=null;this.replayGroup_=null;this.replayGroupChanged=true;this.declutterExecutorGroup=null;this.clipping=true;this.compositionContext_=null;this.opacity_=1;}renderWorlds(executorGroup,frameState,declutterTree){const extent=frameState.extent;const viewState=frameState.viewState;const center=
viewState.center;const resolution=viewState.resolution;const projection=viewState.projection;const rotation=viewState.rotation;const projectionExtent=projection.getExtent();const vectorSource=this.getLayer().getSource();const pixelRatio=frameState.pixelRatio;const viewHints=frameState.viewHints;const snapToPixel=!(viewHints[ViewHint.ANIMATING]||viewHints[ViewHint.INTERACTING]);const context=this.compositionContext_;const width=Math.round(frameState.size[0]*pixelRatio);const height=Math.round(frameState.size[1]*pixelRatio);const multiWorld=vectorSource.getWrapX()&&projection.canWrapX();const worldWidth=multiWorld?getWidth(projectionExtent):null;const endWorld=multiWorld?Math.ceil((extent[2]-projectionExtent[2])/worldWidth)+1:1;let world=multiWorld?Math.floor((extent[0]-projectionExtent[0])/worldWidth):0;do{const transform2=this.getRenderTransform(center,resolution,rotation,pixelRatio,width,height,world*worldWidth);executorGroup.execute(context,1,transform2,rotation,snapToPixel,void 0,
declutterTree);}while(++world<endWorld);}setupCompositionContext_(){if(this.opacity_!==1){const compositionContext=createCanvasContext2D(this.context.canvas.width,this.context.canvas.height,canvasPool);this.compositionContext_=compositionContext;}else{this.compositionContext_=this.context;}}releaseCompositionContext_(){if(this.opacity_!==1){const alpha=this.context.globalAlpha;this.context.globalAlpha=this.opacity_;this.context.drawImage(this.compositionContext_.canvas,0,0);this.context.globalAlpha=alpha;releaseCanvas(this.compositionContext_);canvasPool.push(this.compositionContext_.canvas);this.compositionContext_=null;}}renderDeclutter(frameState){if(this.declutterExecutorGroup){this.setupCompositionContext_();this.renderWorlds(this.declutterExecutorGroup,frameState,frameState.declutterTree);this.releaseCompositionContext_();}}renderFrame(frameState,target){const pixelRatio=frameState.pixelRatio;const layerState=frameState.layerStatesArray[frameState.layerIndex];makeScale(this.
pixelTransform,1/pixelRatio,1/pixelRatio);makeInverse(this.inversePixelTransform,this.pixelTransform);const canvasTransform=toString$1(this.pixelTransform);this.useContainer(target,canvasTransform,this.getBackground(frameState));const context=this.context;const canvas=context.canvas;const replayGroup=this.replayGroup_;const declutterExecutorGroup=this.declutterExecutorGroup;let render2=replayGroup&&!replayGroup.isEmpty()||declutterExecutorGroup&&!declutterExecutorGroup.isEmpty();if(!render2){const hasRenderListeners=this.getLayer().hasListener(RenderEventType.PRERENDER)||this.getLayer().hasListener(RenderEventType.POSTRENDER);if(!hasRenderListeners){return null;}}const width=Math.round(frameState.size[0]*pixelRatio);const height=Math.round(frameState.size[1]*pixelRatio);if(canvas.width!=width||canvas.height!=height){canvas.width=width;canvas.height=height;if(canvas.style.transform!==canvasTransform){canvas.style.transform=canvasTransform;}}else if(!this.containerReused){context.
clearRect(0,0,width,height);}this.preRender(context,frameState);const viewState=frameState.viewState;viewState.projection;this.opacity_=layerState.opacity;this.setupCompositionContext_();let clipped=false;if(render2&&layerState.extent&&this.clipping){const layerExtent=fromUserExtent(layerState.extent);render2=intersects$1(layerExtent,frameState.extent);clipped=render2&&!containsExtent(layerExtent,frameState.extent);if(clipped){this.clipUnrotated(this.compositionContext_,frameState,layerExtent);}}if(render2){this.renderWorlds(replayGroup,frameState);}if(clipped){this.compositionContext_.restore();}this.releaseCompositionContext_();this.postRender(context,frameState);if(this.renderedRotation_!==viewState.rotation){this.renderedRotation_=viewState.rotation;this.hitDetectionImageData_=null;}return this.container;}getFeatures(pixel){return new Promise((resolve)=>{if(!this.hitDetectionImageData_&&!this.animatingOrInteracting_){const size=[this.context.canvas.width,this.context.canvas.height]
;apply(this.pixelTransform,size);const center=this.renderedCenter_;const resolution=this.renderedResolution_;const rotation=this.renderedRotation_;const projection=this.renderedProjection_;const extent=this.wrappedRenderedExtent_;const layer=this.getLayer();const transforms2=[];const width=size[0]*HIT_DETECT_RESOLUTION;const height=size[1]*HIT_DETECT_RESOLUTION;transforms2.push(this.getRenderTransform(center,resolution,rotation,HIT_DETECT_RESOLUTION,width,height,0).slice());const source=layer.getSource();const projectionExtent=projection.getExtent();if(source.getWrapX()&&projection.canWrapX()&&!containsExtent(projectionExtent,extent)){let startX=extent[0];const worldWidth=getWidth(projectionExtent);let world=0;let offsetX;while(startX<projectionExtent[0]){--world;offsetX=worldWidth*world;transforms2.push(this.getRenderTransform(center,resolution,rotation,HIT_DETECT_RESOLUTION,width,height,offsetX).slice());startX+=worldWidth;}world=0;startX=extent[2];while(startX>projectionExtent[2]){++
world;offsetX=worldWidth*world;transforms2.push(this.getRenderTransform(center,resolution,rotation,HIT_DETECT_RESOLUTION,width,height,offsetX).slice());startX-=worldWidth;}}this.hitDetectionImageData_=createHitDetectionImageData(size,transforms2,this.renderedFeatures_,layer.getStyleFunction(),extent,resolution,rotation);}resolve(hitDetect(pixel,this.renderedFeatures_,this.hitDetectionImageData_));});}forEachFeatureAtCoordinate(coordinate,frameState,hitTolerance,callback,matches){if(!this.replayGroup_){return void 0;}const resolution=frameState.viewState.resolution;const rotation=frameState.viewState.rotation;const layer=this.getLayer();const features={};const featureCallback=function(feature,geometry,distanceSq){const key=getUid(feature);const match=features[key];if(!match){if(distanceSq===0){features[key]=true;return callback(feature,layer,geometry);}matches.push(features[key]={feature,layer,geometry,distanceSq,callback});}else if(match!==true&&distanceSq<match.distanceSq){if(
distanceSq===0){features[key]=true;matches.splice(matches.lastIndexOf(match),1);return callback(feature,layer,geometry);}match.geometry=geometry;match.distanceSq=distanceSq;}return void 0;};let result;const executorGroups=[this.replayGroup_];if(this.declutterExecutorGroup){executorGroups.push(this.declutterExecutorGroup);}executorGroups.some((executorGroup)=>{return result=executorGroup.forEachFeatureAtCoordinate(coordinate,resolution,rotation,hitTolerance,featureCallback,executorGroup===this.declutterExecutorGroup&&frameState.declutterTree?frameState.declutterTree.all().map((item)=>item.value):null);});return result;}handleFontsChanged(){const layer=this.getLayer();if(layer.getVisible()&&this.replayGroup_){layer.changed();}}handleStyleImageChange_(event){this.renderIfReadyAndVisible();}prepareFrame(frameState){const vectorLayer=this.getLayer();const vectorSource=vectorLayer.getSource();if(!vectorSource){return false;}const animating=frameState.viewHints[ViewHint.ANIMATING];const
interacting=frameState.viewHints[ViewHint.INTERACTING];const updateWhileAnimating=vectorLayer.getUpdateWhileAnimating();const updateWhileInteracting=vectorLayer.getUpdateWhileInteracting();if(this.ready&&!updateWhileAnimating&&animating||!updateWhileInteracting&&interacting){this.animatingOrInteracting_=true;return true;}this.animatingOrInteracting_=false;const frameStateExtent=frameState.extent;const viewState=frameState.viewState;const projection=viewState.projection;const resolution=viewState.resolution;const pixelRatio=frameState.pixelRatio;const vectorLayerRevision=vectorLayer.getRevision();const vectorLayerRenderBuffer=vectorLayer.getRenderBuffer();let vectorLayerRenderOrder=vectorLayer.getRenderOrder();if(vectorLayerRenderOrder===void 0){vectorLayerRenderOrder=defaultOrder;}const center=viewState.center.slice();const extent=buffer(frameStateExtent,vectorLayerRenderBuffer*resolution);const renderedExtent=extent.slice();const loadExtents=[extent.slice()];const projectionExtent=
projection.getExtent();if(vectorSource.getWrapX()&&projection.canWrapX()&&!containsExtent(projectionExtent,frameState.extent)){const worldWidth=getWidth(projectionExtent);const gutter=Math.max(getWidth(extent)/2,worldWidth);extent[0]=projectionExtent[0]-gutter;extent[2]=projectionExtent[2]+gutter;wrapX$1(center,projection);const loadExtent=wrapX$2(loadExtents[0],projection);if(loadExtent[0]<projectionExtent[0]&&loadExtent[2]<projectionExtent[2]){loadExtents.push([loadExtent[0]+worldWidth,loadExtent[1],loadExtent[2]+worldWidth,loadExtent[3]]);}else if(loadExtent[0]>projectionExtent[0]&&loadExtent[2]>projectionExtent[2]){loadExtents.push([loadExtent[0]-worldWidth,loadExtent[1],loadExtent[2]-worldWidth,loadExtent[3]]);}}if(this.ready&&this.renderedResolution_==resolution&&this.renderedRevision_==vectorLayerRevision&&this.renderedRenderOrder_==vectorLayerRenderOrder&&containsExtent(this.wrappedRenderedExtent_,extent)){if(!equals$2(this.renderedExtent_,renderedExtent)){this.
hitDetectionImageData_=null;this.renderedExtent_=renderedExtent;}this.renderedCenter_=center;this.replayGroupChanged=false;return true;}this.replayGroup_=null;const replayGroup=new CanvasBuilderGroup(getTolerance(resolution,pixelRatio),extent,resolution,pixelRatio);let declutterBuilderGroup;if(this.getLayer().getDeclutter()){declutterBuilderGroup=new CanvasBuilderGroup(getTolerance(resolution,pixelRatio),extent,resolution,pixelRatio);}let userTransform;{for(let i=0,ii=loadExtents.length;i<ii;++i){vectorSource.loadFeatures(loadExtents[i],resolution,projection);}}const squaredTolerance=getSquaredTolerance(resolution,pixelRatio);let ready=true;const render2=((feature)=>{let styles;const styleFunction=feature.getStyleFunction()||vectorLayer.getStyleFunction();if(styleFunction){styles=styleFunction(feature,resolution);}if(styles){const dirty=this.renderFeature(feature,squaredTolerance,styles,replayGroup,userTransform,declutterBuilderGroup);ready=ready&&!dirty;}});const userExtent=
toUserExtent(extent);const features=vectorSource.getFeaturesInExtent(userExtent);if(vectorLayerRenderOrder){features.sort(vectorLayerRenderOrder);}for(let i=0,ii=features.length;i<ii;++i){render2(features[i]);}this.renderedFeatures_=features;this.ready=ready;const replayGroupInstructions=replayGroup.finish();const executorGroup=new ExecutorGroup$1(extent,resolution,pixelRatio,vectorSource.getOverlaps(),replayGroupInstructions,vectorLayer.getRenderBuffer());if(declutterBuilderGroup){this.declutterExecutorGroup=new ExecutorGroup$1(extent,resolution,pixelRatio,vectorSource.getOverlaps(),declutterBuilderGroup.finish(),vectorLayer.getRenderBuffer());}this.renderedResolution_=resolution;this.renderedRevision_=vectorLayerRevision;this.renderedRenderOrder_=vectorLayerRenderOrder;this.renderedExtent_=renderedExtent;this.wrappedRenderedExtent_=extent;this.renderedCenter_=center;this.renderedProjection_=projection;this.replayGroup_=executorGroup;this.hitDetectionImageData_=null;this.
replayGroupChanged=true;return true;}renderFeature(feature,squaredTolerance,styles,builderGroup,transform2,declutterBuilderGroup){if(!styles){return false;}let loading=false;if(Array.isArray(styles)){for(let i=0,ii=styles.length;i<ii;++i){loading=renderFeature(builderGroup,feature,styles[i],squaredTolerance,this.boundHandleStyleImageChange_,transform2,declutterBuilderGroup)||loading;}}else{loading=renderFeature(builderGroup,feature,styles,squaredTolerance,this.boundHandleStyleImageChange_,transform2,declutterBuilderGroup);}return loading;}}const CanvasVectorLayerRenderer$1=CanvasVectorLayerRenderer;class VectorLayer extends BaseVectorLayer$1{constructor(options){super(options);}createRenderer(){return new CanvasVectorLayerRenderer$1(this);}}const OlLayerVector=VectorLayer;const TileProperty={PRELOAD:"preload",USE_INTERIM_TILES_ON_ERROR:"useInterimTilesOnError"};class BaseTileLayer extends Layer$1{constructor(options){options=options?options:{};const baseOptions=Object.assign({},options
);delete baseOptions.preload;delete baseOptions.useInterimTilesOnError;super(baseOptions);this.on;this.once;this.un;this.setPreload(options.preload!==void 0?options.preload:0);this.setUseInterimTilesOnError(options.useInterimTilesOnError!==void 0?options.useInterimTilesOnError:true);}getPreload(){return(this.get(TileProperty.PRELOAD));}setPreload(preload){this.set(TileProperty.PRELOAD,preload);}getUseInterimTilesOnError(){return(this.get(TileProperty.USE_INTERIM_TILES_ON_ERROR));}setUseInterimTilesOnError(useInterimTilesOnError){this.set(TileProperty.USE_INTERIM_TILES_ON_ERROR,useInterimTilesOnError);}getData(pixel){return super.getData(pixel);}}const BaseTileLayer$1=BaseTileLayer;class CanvasTileLayerRenderer extends CanvasLayerRenderer$1{constructor(tileLayer){super(tileLayer);this.extentChanged=true;this.renderedExtent_=null;this.renderedPixelRatio;this.renderedProjection=null;this.renderedRevision;this.renderedTiles=[];this.newTiles_=false;this.tmpExtent=createEmpty();this.
tmpTileRange_=new TileRange$1(0,0,0,0);}isDrawableTile(tile){const tileLayer=this.getLayer();const tileState=tile.getState();const useInterimTilesOnError=tileLayer.getUseInterimTilesOnError();return tileState==TileState.LOADED||tileState==TileState.EMPTY||tileState==TileState.ERROR&&!useInterimTilesOnError;}getTile(z,x,y,frameState){const pixelRatio=frameState.pixelRatio;const projection=frameState.viewState.projection;const tileLayer=this.getLayer();const tileSource=tileLayer.getSource();let tile=tileSource.getTile(z,x,y,pixelRatio,projection);if(tile.getState()==TileState.ERROR){if(tileLayer.getUseInterimTilesOnError()&&tileLayer.getPreload()>0){this.newTiles_=true;}}if(!this.isDrawableTile(tile)){tile=tile.getInterimTile();}return tile;}getData(pixel){const frameState=this.frameState;if(!frameState){return null;}const layer=this.getLayer();const coordinate=apply(frameState.pixelToCoordinateTransform,pixel.slice());const layerExtent=layer.getExtent();if(layerExtent){if(!
containsCoordinate(layerExtent,coordinate)){return null;}}const pixelRatio=frameState.pixelRatio;const projection=frameState.viewState.projection;const viewState=frameState.viewState;const source=layer.getRenderSource();const tileGrid=source.getTileGridForProjection(viewState.projection);const tilePixelRatio=source.getTilePixelRatio(frameState.pixelRatio);for(let z=tileGrid.getZForResolution(viewState.resolution);z>=tileGrid.getMinZoom();--z){const tileCoord=tileGrid.getTileCoordForCoordAndZ(coordinate,z);const tile=source.getTile(z,tileCoord[1],tileCoord[2],pixelRatio,projection);if(!(tile instanceof ImageTile$1||tile instanceof ReprojTile$1)||tile instanceof ReprojTile$1&&tile.getState()===TileState.EMPTY){return null;}if(tile.getState()!==TileState.LOADED){continue;}const tileOrigin=tileGrid.getOrigin(z);const tileSize=toSize(tileGrid.getTileSize(z));const tileResolution=tileGrid.getResolution(z);const col=Math.floor(tilePixelRatio*((coordinate[0]-tileOrigin[0])/tileResolution-
tileCoord[1]*tileSize[0]));const row=Math.floor(tilePixelRatio*((tileOrigin[1]-coordinate[1])/tileResolution-tileCoord[2]*tileSize[1]));const gutter=Math.round(tilePixelRatio*source.getGutterForProjection(viewState.projection));return this.getImageData(tile.getImage(),col+gutter,row+gutter);}return null;}loadedTileCallback(tiles,zoom,tile){if(this.isDrawableTile(tile)){return super.loadedTileCallback(tiles,zoom,tile);}return false;}prepareFrame(frameState){return!!this.getLayer().getSource();}renderFrame(frameState,target){const layerState=frameState.layerStatesArray[frameState.layerIndex];const viewState=frameState.viewState;const projection=viewState.projection;const viewResolution=viewState.resolution;const viewCenter=viewState.center;const rotation=viewState.rotation;const pixelRatio=frameState.pixelRatio;const tileLayer=this.getLayer();const tileSource=tileLayer.getSource();const sourceRevision=tileSource.getRevision();const tileGrid=tileSource.getTileGridForProjection(projection)
;const z=tileGrid.getZForResolution(viewResolution,tileSource.zDirection);const tileResolution=tileGrid.getResolution(z);let extent=frameState.extent;const resolution=frameState.viewState.resolution;const tilePixelRatio=tileSource.getTilePixelRatio(pixelRatio);const width=Math.round(getWidth(extent)/resolution*pixelRatio);const height=Math.round(getHeight(extent)/resolution*pixelRatio);const layerExtent=layerState.extent&&fromUserExtent(layerState.extent);if(layerExtent){extent=getIntersection(extent,fromUserExtent(layerState.extent));}const dx=tileResolution*width/2/tilePixelRatio;const dy=tileResolution*height/2/tilePixelRatio;const canvasExtent=[viewCenter[0]-dx,viewCenter[1]-dy,viewCenter[0]+dx,viewCenter[1]+dy];const tileRange=tileGrid.getTileRangeForExtentAndZ(extent,z);const tilesToDrawByZ={};tilesToDrawByZ[z]={};const findLoadedTiles=this.createLoadedTileFinder(tileSource,projection,tilesToDrawByZ);const tmpExtent2=this.tmpExtent;const tmpTileRange=this.tmpTileRange_;this.
newTiles_=false;const viewport=rotation?getRotatedViewport(viewState.center,resolution,rotation,frameState.size):void 0;for(let x=tileRange.minX;x<=tileRange.maxX;++x){for(let y=tileRange.minY;y<=tileRange.maxY;++y){if(rotation&&!tileGrid.tileCoordIntersectsViewport([z,x,y],viewport)){continue;}const tile=this.getTile(z,x,y,frameState);if(this.isDrawableTile(tile)){const uid=getUid(this);if(tile.getState()==TileState.LOADED){tilesToDrawByZ[z][tile.tileCoord.toString()]=tile;let inTransition=tile.inTransition(uid);if(inTransition&&layerState.opacity!==1){tile.endTransition(uid);inTransition=false;}if(!this.newTiles_&&(inTransition||!this.renderedTiles.includes(tile))){this.newTiles_=true;}}if(tile.getAlpha(uid,frameState.time)===1){continue;}}const childTileRange=tileGrid.getTileCoordChildTileRange(tile.tileCoord,tmpTileRange,tmpExtent2);let covered=false;if(childTileRange){covered=findLoadedTiles(z+1,childTileRange);}if(!covered){tileGrid.forEachTileCoordParentTileRange(tile.tileCoord,
findLoadedTiles,tmpTileRange,tmpExtent2);}}}const canvasScale=tileResolution/viewResolution*pixelRatio/tilePixelRatio;compose(this.pixelTransform,frameState.size[0]/2,frameState.size[1]/2,1/pixelRatio,1/pixelRatio,rotation,-width/2,-height/2);const canvasTransform=toString$1(this.pixelTransform);this.useContainer(target,canvasTransform,this.getBackground(frameState));const context=this.context;const canvas=context.canvas;makeInverse(this.inversePixelTransform,this.pixelTransform);compose(this.tempTransform,width/2,height/2,canvasScale,canvasScale,0,-width/2,-height/2);if(canvas.width!=width||canvas.height!=height){canvas.width=width;canvas.height=height;}else if(!this.containerReused){context.clearRect(0,0,width,height);}if(layerExtent){this.clipUnrotated(context,frameState,layerExtent);}if(!tileSource.getInterpolate()){context.imageSmoothingEnabled=false;}this.preRender(context,frameState);this.renderedTiles.length=0;let zs=Object.keys(tilesToDrawByZ).map(Number);zs.sort(ascending);
let clips,clipZs,currentClip;if(layerState.opacity===1&&(!this.containerReused||tileSource.getOpaque(frameState.viewState.projection))){zs=zs.reverse();}else{clips=[];clipZs=[];}for(let i=zs.length-1;i>=0;--i){const currentZ=zs[i];const currentTilePixelSize=tileSource.getTilePixelSize(currentZ,pixelRatio,projection);const currentResolution=tileGrid.getResolution(currentZ);const currentScale=currentResolution/tileResolution;const dx2=currentTilePixelSize[0]*currentScale*canvasScale;const dy2=currentTilePixelSize[1]*currentScale*canvasScale;const originTileCoord=tileGrid.getTileCoordForCoordAndZ(getTopLeft(canvasExtent),currentZ);const originTileExtent=tileGrid.getTileCoordExtent(originTileCoord);const origin=apply(this.tempTransform,[tilePixelRatio*(originTileExtent[0]-canvasExtent[0])/tileResolution,tilePixelRatio*(canvasExtent[3]-originTileExtent[3])/tileResolution]);const tileGutter=tilePixelRatio*tileSource.getGutterForProjection(projection);const tilesToDraw=tilesToDrawByZ[currentZ
];for(const tileCoordKey in tilesToDraw){const tile=(tilesToDraw[tileCoordKey]);const tileCoord=tile.tileCoord;const xIndex=originTileCoord[1]-tileCoord[1];const nextX=Math.round(origin[0]-(xIndex-1)*dx2);const yIndex=originTileCoord[2]-tileCoord[2];const nextY=Math.round(origin[1]-(yIndex-1)*dy2);const x=Math.round(origin[0]-xIndex*dx2);const y=Math.round(origin[1]-yIndex*dy2);const w=nextX-x;const h=nextY-y;const transition=z===currentZ;const inTransition=transition&&tile.getAlpha(getUid(this),frameState.time)!==1;let contextSaved=false;if(!inTransition){if(clips){currentClip=[x,y,x+w,y,x+w,y+h,x,y+h];for(let i2=0,ii=clips.length;i2<ii;++i2){if(z!==currentZ&&currentZ<clipZs[i2]){const clip=clips[i2];if(intersects$1([x,y,x+w,y+h],[clip[0],clip[3],clip[4],clip[7]])){if(!contextSaved){context.save();contextSaved=true;}context.beginPath();context.moveTo(currentClip[0],currentClip[1]);context.lineTo(currentClip[2],currentClip[3]);context.lineTo(currentClip[4],currentClip[5]);context.
lineTo(currentClip[6],currentClip[7]);context.moveTo(clip[6],clip[7]);context.lineTo(clip[4],clip[5]);context.lineTo(clip[2],clip[3]);context.lineTo(clip[0],clip[1]);context.clip();}}}clips.push(currentClip);clipZs.push(currentZ);}else{context.clearRect(x,y,w,h);}}this.drawTileImage(tile,frameState,x,y,w,h,tileGutter,transition);if(clips&&!inTransition){if(contextSaved){context.restore();}this.renderedTiles.unshift(tile);}else{this.renderedTiles.push(tile);}this.updateUsedTiles(frameState.usedTiles,tileSource,tile);}}this.renderedRevision=sourceRevision;this.renderedResolution=tileResolution;this.extentChanged=!this.renderedExtent_||!equals$1(this.renderedExtent_,canvasExtent);this.renderedExtent_=canvasExtent;this.renderedPixelRatio=pixelRatio;this.renderedProjection=projection;this.manageTilePyramid(frameState,tileSource,tileGrid,pixelRatio,projection,extent,z,tileLayer.getPreload());this.scheduleExpireCache(frameState,tileSource);this.postRender(context,frameState);if(layerState.
extent){context.restore();}context.imageSmoothingEnabled=true;if(canvasTransform!==canvas.style.transform){canvas.style.transform=canvasTransform;}return this.container;}drawTileImage(tile,frameState,x,y,w,h,gutter,transition){const image=this.getTileImage(tile);if(!image){return;}const uid=getUid(this);const layerState=frameState.layerStatesArray[frameState.layerIndex];const alpha=layerState.opacity*(transition?tile.getAlpha(uid,frameState.time):1);const alphaChanged=alpha!==this.context.globalAlpha;if(alphaChanged){this.context.save();this.context.globalAlpha=alpha;}this.context.drawImage(image,gutter,gutter,image.width-2*gutter,image.height-2*gutter,x,y,w,h);if(alphaChanged){this.context.restore();}if(alpha!==layerState.opacity){frameState.animate=true;}else if(transition){tile.endTransition(uid);}}getImage(){const context=this.context;return context?context.canvas:null;}getTileImage(tile){return tile.getImage();}scheduleExpireCache(frameState,tileSource){if(tileSource.
canExpireCache()){const postRenderFunction=(function(tileSource2,map,frameState2){const tileSourceKey=getUid(tileSource2);if(tileSourceKey in frameState2.usedTiles){tileSource2.expireCache(frameState2.viewState.projection,frameState2.usedTiles[tileSourceKey]);}}).bind(null,tileSource);frameState.postRenderFunctions.push(postRenderFunction);}}updateUsedTiles(usedTiles,tileSource,tile){const tileSourceKey=getUid(tileSource);if(!(tileSourceKey in usedTiles)){usedTiles[tileSourceKey]={};}usedTiles[tileSourceKey][tile.getKey()]=true;}manageTilePyramid(frameState,tileSource,tileGrid,pixelRatio,projection,extent,currentZ,preload,tileCallback){const tileSourceKey=getUid(tileSource);if(!(tileSourceKey in frameState.wantedTiles)){frameState.wantedTiles[tileSourceKey]={};}const wantedTiles=frameState.wantedTiles[tileSourceKey];const tileQueue=frameState.tileQueue;const minZoom=tileGrid.getMinZoom();const rotation=frameState.viewState.rotation;const viewport=rotation?getRotatedViewport(frameState.
viewState.center,frameState.viewState.resolution,rotation,frameState.size):void 0;let tileCount=0;let tile,tileRange,tileResolution,x,y,z;for(z=minZoom;z<=currentZ;++z){tileRange=tileGrid.getTileRangeForExtentAndZ(extent,z,tileRange);tileResolution=tileGrid.getResolution(z);for(x=tileRange.minX;x<=tileRange.maxX;++x){for(y=tileRange.minY;y<=tileRange.maxY;++y){if(rotation&&!tileGrid.tileCoordIntersectsViewport([z,x,y],viewport)){continue;}if(currentZ-z<=preload){++tileCount;tile=tileSource.getTile(z,x,y,pixelRatio,projection);if(tile.getState()==TileState.IDLE){wantedTiles[tile.getKey()]=true;if(!tileQueue.isKeyQueued(tile.getKey())){tileQueue.enqueue([tile,tileSourceKey,tileGrid.getTileCoordCenter(tile.tileCoord),tileResolution]);}}if(tileCallback!==void 0){tileCallback(tile);}}else{tileSource.useTile(z,x,y,projection);}}}}tileSource.updateCacheSize(tileCount,projection);}}const CanvasTileLayerRenderer$1=CanvasTileLayerRenderer;class TileLayer extends BaseTileLayer$1{constructor(
options){super(options);}createRenderer(){return new CanvasTileLayerRenderer$1(this);}}const OlLayerTile=TileLayer;const SelectEventType={SELECT:"select"};class SelectEvent extends Event{constructor(type,selected,deselected,mapBrowserEvent){super(type);this.selected=selected;this.deselected=deselected;this.mapBrowserEvent=mapBrowserEvent;}}const originalFeatureStyles={};class Select extends Interaction$1{constructor(options){super();this.on;this.once;this.un;options=options?options:{};this.boundAddFeature_=this.addFeature_.bind(this);this.boundRemoveFeature_=this.removeFeature_.bind(this);this.condition_=options.condition?options.condition:singleClick;this.addCondition_=options.addCondition?options.addCondition:never;this.removeCondition_=options.removeCondition?options.removeCondition:never;this.toggleCondition_=options.toggleCondition?options.toggleCondition:shiftKeyOnly;this.multi_=options.multi?options.multi:false;this.filter_=options.filter?options.filter:TRUE;this.hitTolerance_=
options.hitTolerance?options.hitTolerance:0;this.style_=options.style!==void 0?options.style:getDefaultStyleFunction();this.features_=options.features||new Collection$1();let layerFilter;if(options.layers){if(typeof options.layers==="function"){layerFilter=options.layers;}else{const layers=options.layers;layerFilter=function(layer){return layers.includes(layer);};}}else{layerFilter=TRUE;}this.layerFilter_=layerFilter;this.featureLayerAssociation_={};}addFeatureLayerAssociation_(feature,layer){this.featureLayerAssociation_[getUid(feature)]=layer;}getFeatures(){return this.features_;}getHitTolerance(){return this.hitTolerance_;}getLayer(feature){return(this.featureLayerAssociation_[getUid(feature)]);}setHitTolerance(hitTolerance){this.hitTolerance_=hitTolerance;}setMap(map){const currentMap=this.getMap();if(currentMap&&this.style_){this.features_.forEach(this.restorePreviousStyle_.bind(this));}super.setMap(map);if(map){this.features_.addEventListener(CollectionEventType.ADD,this.
boundAddFeature_);this.features_.addEventListener(CollectionEventType.REMOVE,this.boundRemoveFeature_);if(this.style_){this.features_.forEach(this.applySelectedStyle_.bind(this));}}else{this.features_.removeEventListener(CollectionEventType.ADD,this.boundAddFeature_);this.features_.removeEventListener(CollectionEventType.REMOVE,this.boundRemoveFeature_);}}addFeature_(evt){const feature=evt.element;if(this.style_){this.applySelectedStyle_(feature);}if(!this.getLayer(feature)){const layer=(this.getMap().getAllLayers().find(function(layer2){if(layer2 instanceof OlLayerVector&&layer2.getSource()&&layer2.getSource().hasFeature(feature)){return layer2;}}));if(layer){this.addFeatureLayerAssociation_(feature,layer);}}}removeFeature_(evt){if(this.style_){this.restorePreviousStyle_(evt.element);}}getStyle(){return this.style_;}applySelectedStyle_(feature){const key=getUid(feature);if(!(key in originalFeatureStyles)){originalFeatureStyles[key]=feature.getStyle();}feature.setStyle(this.style_);}
restorePreviousStyle_(feature){const interactions=this.getMap().getInteractions().getArray();for(let i=interactions.length-1;i>=0;--i){const interaction=interactions[i];if(interaction!==this&&interaction instanceof Select&&interaction.getStyle()&&interaction.getFeatures().getArray().lastIndexOf(feature)!==-1){feature.setStyle(interaction.getStyle());return;}}const key=getUid(feature);feature.setStyle(originalFeatureStyles[key]);delete originalFeatureStyles[key];}removeFeatureLayerAssociation_(feature){delete this.featureLayerAssociation_[getUid(feature)];}handleEvent(mapBrowserEvent){if(!this.condition_(mapBrowserEvent)){return true;}const add2=this.addCondition_(mapBrowserEvent);const remove=this.removeCondition_(mapBrowserEvent);const toggle=this.toggleCondition_(mapBrowserEvent);const set2=!add2&&!remove&&!toggle;const map=mapBrowserEvent.map;const features=this.getFeatures();const deselected=[];const selected=[];if(set2){clear(this.featureLayerAssociation_);map.
forEachFeatureAtPixel(mapBrowserEvent.pixel,(feature,layer)=>{if(!(feature instanceof Feature$1)||!this.filter_(feature,layer)){return;}this.addFeatureLayerAssociation_(feature,layer);selected.push(feature);return!this.multi_;},{layerFilter:this.layerFilter_,hitTolerance:this.hitTolerance_});for(let i=features.getLength()-1;i>=0;--i){const feature=features.item(i);const index=selected.indexOf(feature);if(index>-1){selected.splice(index,1);}else{features.remove(feature);deselected.push(feature);}}if(selected.length!==0){features.extend(selected);}}else{map.forEachFeatureAtPixel(mapBrowserEvent.pixel,(feature,layer)=>{if(!(feature instanceof Feature$1)||!this.filter_(feature,layer)){return;}if((add2||toggle)&&!features.getArray().includes(feature)){this.addFeatureLayerAssociation_(feature,layer);selected.push(feature);}else if((remove||toggle)&&features.getArray().includes(feature)){deselected.push(feature);this.removeFeatureLayerAssociation_(feature);}return!this.multi_;},{layerFilter:
this.layerFilter_,hitTolerance:this.hitTolerance_});for(let j=deselected.length-1;j>=0;--j){features.remove(deselected[j]);}features.extend(selected);}if(selected.length>0||deselected.length>0){this.dispatchEvent(new SelectEvent(SelectEventType.SELECT,selected,deselected,mapBrowserEvent));}return true;}}function getDefaultStyleFunction(){const styles=createEditingStyle();extend$2(styles["Polygon"],styles["LineString"]);extend$2(styles["GeometryCollection"],styles["LineString"]);return function(feature){if(!feature.getGeometry()){return null;}return styles[feature.getGeometry().getType()];};}const OlInteractionSelect=Select;class TextFeature extends FeatureFormat{constructor(){super();}getType(){return"text";}readFeature(source,options){return this.readFeatureFromText(getText(source),this.adaptOptions(options));}readFeatureFromText(text,options){return abstract();}readFeatures(source,options){return this.readFeaturesFromText(getText(source),this.adaptOptions(options));}
readFeaturesFromText(text,options){return abstract();}readGeometry(source,options){return this.readGeometryFromText(getText(source),this.adaptOptions(options));}readGeometryFromText(text,options){return abstract();}readProjection(source){return this.readProjectionFromText(getText(source));}readProjectionFromText(text){return this.dataProjection;}writeFeature(feature,options){return this.writeFeatureText(feature,this.adaptOptions(options));}writeFeatureText(feature,options){return abstract();}writeFeatures(features,options){return this.writeFeaturesText(features,this.adaptOptions(options));}writeFeaturesText(features,options){return abstract();}writeGeometry(geometry,options){return this.writeGeometryText(geometry,this.adaptOptions(options));}writeGeometryText(geometry,options){return abstract();}}function getText(source){if(typeof source==="string"){return source;}return"";}const TextFeature$1=TextFeature;const GeometryConstructor={"POINT":OlPoint,"LINESTRING":LineString$1,"POLYGON":
Polygon$1,"MULTIPOINT":MultiPoint$1,"MULTILINESTRING":MultiLineString$1,"MULTIPOLYGON":MultiPolygon$1};const EMPTY="EMPTY";const Z="Z";const M="M";const ZM="ZM";const TokenType={START:0,TEXT:1,LEFT_PAREN:2,RIGHT_PAREN:3,NUMBER:4,COMMA:5,EOF:6};const wktTypeLookup={Point:"POINT",LineString:"LINESTRING",Polygon:"POLYGON",MultiPoint:"MULTIPOINT",MultiLineString:"MULTILINESTRING",MultiPolygon:"MULTIPOLYGON",GeometryCollection:"GEOMETRYCOLLECTION",Circle:"CIRCLE"};class Lexer{constructor(wkt){this.wkt=wkt;this.index_=-1;}isAlpha_(c){return c>="a"&&c<="z"||c>="A"&&c<="Z";}isNumeric_(c,decimal){decimal=decimal!==void 0?decimal:false;return c>="0"&&c<="9"||c=="."&&!decimal;}isWhiteSpace_(c){return c==" "||c==" "||c=="\r"||c=="\n";}nextChar_(){return this.wkt.charAt(++this.index_);}nextToken(){const c=this.nextChar_();const position=this.index_;let value=c;let type;if(c=="("){type=TokenType.LEFT_PAREN;}else if(c==","){type=TokenType.COMMA;}else if(c==")"){type=TokenType.RIGHT_PAREN;}else if(
this.isNumeric_(c)||c=="-"){type=TokenType.NUMBER;value=this.readNumber_();}else if(this.isAlpha_(c)){type=TokenType.TEXT;value=this.readText_();}else if(this.isWhiteSpace_(c)){return this.nextToken();}else if(c===""){type=TokenType.EOF;}else{throw new Error("Unexpected character: "+c);}return{position,value,type};}readNumber_(){let c;const index=this.index_;let decimal=false;let scientificNotation=false;do{if(c=="."){decimal=true;}else if(c=="e"||c=="E"){scientificNotation=true;}c=this.nextChar_();}while(this.isNumeric_(c,decimal)||!scientificNotation&&(c=="e"||c=="E")||scientificNotation&&(c=="-"||c=="+"));return parseFloat(this.wkt.substring(index,this.index_--));}readText_(){let c;const index=this.index_;do{c=this.nextChar_();}while(this.isAlpha_(c));return this.wkt.substring(index,this.index_--).toUpperCase();}}class Parser{constructor(lexer){this.lexer_=lexer;this.token_={position:0,type:TokenType.START};this.layout_="XY";}consume_(){this.token_=this.lexer_.nextToken();}
isTokenType(type){return this.token_.type==type;}match(type){const isMatch=this.isTokenType(type);if(isMatch){this.consume_();}return isMatch;}parse(){this.consume_();return this.parseGeometry_();}parseGeometryLayout_(){let layout="XY";const dimToken=this.token_;if(this.isTokenType(TokenType.TEXT)){const dimInfo=dimToken.value;if(dimInfo===Z){layout="XYZ";}else if(dimInfo===M){layout="XYM";}else if(dimInfo===ZM){layout="XYZM";}if(layout!=="XY"){this.consume_();}}return layout;}parseGeometryCollectionText_(){if(this.match(TokenType.LEFT_PAREN)){const geometries=[];do{geometries.push(this.parseGeometry_());}while(this.match(TokenType.COMMA));if(this.match(TokenType.RIGHT_PAREN)){return geometries;}}throw new Error(this.formatErrorMessage_());}parsePointText_(){if(this.match(TokenType.LEFT_PAREN)){const coordinates2=this.parsePoint_();if(this.match(TokenType.RIGHT_PAREN)){return coordinates2;}}throw new Error(this.formatErrorMessage_());}parseLineStringText_(){if(this.match(TokenType.
LEFT_PAREN)){const coordinates2=this.parsePointList_();if(this.match(TokenType.RIGHT_PAREN)){return coordinates2;}}throw new Error(this.formatErrorMessage_());}parsePolygonText_(){if(this.match(TokenType.LEFT_PAREN)){const coordinates2=this.parseLineStringTextList_();if(this.match(TokenType.RIGHT_PAREN)){return coordinates2;}}throw new Error(this.formatErrorMessage_());}parseMultiPointText_(){if(this.match(TokenType.LEFT_PAREN)){let coordinates2;if(this.token_.type==TokenType.LEFT_PAREN){coordinates2=this.parsePointTextList_();}else{coordinates2=this.parsePointList_();}if(this.match(TokenType.RIGHT_PAREN)){return coordinates2;}}throw new Error(this.formatErrorMessage_());}parseMultiLineStringText_(){if(this.match(TokenType.LEFT_PAREN)){const coordinates2=this.parseLineStringTextList_();if(this.match(TokenType.RIGHT_PAREN)){return coordinates2;}}throw new Error(this.formatErrorMessage_());}parseMultiPolygonText_(){if(this.match(TokenType.LEFT_PAREN)){const coordinates2=this.
parsePolygonTextList_();if(this.match(TokenType.RIGHT_PAREN)){return coordinates2;}}throw new Error(this.formatErrorMessage_());}parsePoint_(){const coordinates2=[];const dimensions=this.layout_.length;for(let i=0;i<dimensions;++i){const token=this.token_;if(this.match(TokenType.NUMBER)){coordinates2.push(token.value);}else{break;}}if(coordinates2.length==dimensions){return coordinates2;}throw new Error(this.formatErrorMessage_());}parsePointList_(){const coordinates2=[this.parsePoint_()];while(this.match(TokenType.COMMA)){coordinates2.push(this.parsePoint_());}return coordinates2;}parsePointTextList_(){const coordinates2=[this.parsePointText_()];while(this.match(TokenType.COMMA)){coordinates2.push(this.parsePointText_());}return coordinates2;}parseLineStringTextList_(){const coordinates2=[this.parseLineStringText_()];while(this.match(TokenType.COMMA)){coordinates2.push(this.parseLineStringText_());}return coordinates2;}parsePolygonTextList_(){const coordinates2=[this.parsePolygonText_
()];while(this.match(TokenType.COMMA)){coordinates2.push(this.parsePolygonText_());}return coordinates2;}isEmptyGeometry_(){const isEmpty2=this.isTokenType(TokenType.TEXT)&&this.token_.value==EMPTY;if(isEmpty2){this.consume_();}return isEmpty2;}formatErrorMessage_(){return"Unexpected `"+this.token_.value+"` at position "+this.token_.position+" in `"+this.lexer_.wkt+"`";}parseGeometry_(){const token=this.token_;if(this.match(TokenType.TEXT)){const geomType=(token.value);this.layout_=this.parseGeometryLayout_();const isEmpty2=this.isEmptyGeometry_();if(geomType=="GEOMETRYCOLLECTION"){if(isEmpty2){return new GeometryCollection$1([]);}const geometries=this.parseGeometryCollectionText_();return new GeometryCollection$1(geometries);}const ctor=GeometryConstructor[geomType];if(!ctor){throw new Error("Invalid geometry type: "+geomType);}let coordinates2;if(isEmpty2){if(geomType=="POINT"){coordinates2=[NaN,NaN];}else{coordinates2=[];}}else{switch(geomType){case"POINT":{coordinates2=this.
parsePointText_();break;}case"LINESTRING":{coordinates2=this.parseLineStringText_();break;}case"POLYGON":{coordinates2=this.parsePolygonText_();break;}case"MULTIPOINT":{coordinates2=this.parseMultiPointText_();break;}case"MULTILINESTRING":{coordinates2=this.parseMultiLineStringText_();break;}case"MULTIPOLYGON":{coordinates2=this.parseMultiPolygonText_();break;}}}return new ctor(coordinates2,this.layout_);}throw new Error(this.formatErrorMessage_());}}class WKT extends TextFeature$1{constructor(options){super();options=options?options:{};this.splitCollection_=options.splitCollection!==void 0?options.splitCollection:false;}parse_(wkt){const lexer=new Lexer(wkt);const parser=new Parser(lexer);return parser.parse();}readFeatureFromText(text,options){const geom=this.readGeometryFromText(text,options);const feature=new Feature$1();feature.setGeometry(geom);return feature;}readFeaturesFromText(text,options){let geometries=[];const geometry=this.readGeometryFromText(text,options);if(this.
splitCollection_&&geometry.getType()=="GeometryCollection"){geometries=geometry.getGeometriesArray();}else{geometries=[geometry];}const features=[];for(let i=0,ii=geometries.length;i<ii;++i){const feature=new Feature$1();feature.setGeometry(geometries[i]);features.push(feature);}return features;}readGeometryFromText(text,options){const geometry=this.parse_(text);return transformGeometryWithOptions(geometry,false,options);}writeFeatureText(feature,options){const geometry=feature.getGeometry();if(geometry){return this.writeGeometryText(geometry,options);}return"";}writeFeaturesText(features,options){if(features.length==1){return this.writeFeatureText(features[0],options);}const geometries=[];for(let i=0,ii=features.length;i<ii;++i){geometries.push(features[i].getGeometry());}const collection=new GeometryCollection$1(geometries);return this.writeGeometryText(collection,options);}writeGeometryText(geometry,options){return encode(transformGeometryWithOptions(geometry,true,options));}}
function encodePointGeometry(geom){const coordinates2=geom.getCoordinates();if(coordinates2.length===0){return"";}return coordinates2.join(" ");}function encodeMultiPointGeometry(geom){const array=[];const components=geom.getPoints();for(let i=0,ii=components.length;i<ii;++i){array.push("("+encodePointGeometry(components[i])+")");}return array.join(",");}function encodeGeometryCollectionGeometry(geom){const array=[];const geoms=geom.getGeometries();for(let i=0,ii=geoms.length;i<ii;++i){array.push(encode(geoms[i]));}return array.join(",");}function encodeLineStringGeometry(geom){const coordinates2=geom.getCoordinates();const array=[];for(let i=0,ii=coordinates2.length;i<ii;++i){array.push(coordinates2[i].join(" "));}return array.join(",");}function encodeMultiLineStringGeometry(geom){const array=[];const components=geom.getLineStrings();for(let i=0,ii=components.length;i<ii;++i){array.push("("+encodeLineStringGeometry(components[i])+")");}return array.join(",");}function
encodePolygonGeometry(geom){const array=[];const rings=geom.getLinearRings();for(let i=0,ii=rings.length;i<ii;++i){array.push("("+encodeLineStringGeometry(rings[i])+")");}return array.join(",");}function encodeMultiPolygonGeometry(geom){const array=[];const components=geom.getPolygons();for(let i=0,ii=components.length;i<ii;++i){array.push("("+encodePolygonGeometry(components[i])+")");}return array.join(",");}function encodeGeometryLayout(geom){const layout=geom.getLayout();let dimInfo="";if(layout==="XYZ"||layout==="XYZM"){dimInfo+=Z;}if(layout==="XYM"||layout==="XYZM"){dimInfo+=M;}return dimInfo;}const GeometryEncoder={"Point":encodePointGeometry,"LineString":encodeLineStringGeometry,"Polygon":encodePolygonGeometry,"MultiPoint":encodeMultiPointGeometry,"MultiLineString":encodeMultiLineStringGeometry,"MultiPolygon":encodeMultiPolygonGeometry,"GeometryCollection":encodeGeometryCollectionGeometry};function encode(geom){const type=geom.getType();const geometryEncoder=GeometryEncoder[type
];const enc=geometryEncoder(geom);let wktType=wktTypeLookup[type];if(typeof geom.getFlatCoordinates==="function"){const dimInfo=encodeGeometryLayout(geom);if(dimInfo.length>0){wktType+=" "+dimInfo;}}if(enc.length===0){return wktType+" "+EMPTY;}return wktType+"("+enc+")";}const OlFormatWkt=WKT;function init_wrmap(_,jq_map_element){var _a,_b,_c,_d,_e;let EPSG4326=get$1("EPSG:4326");let EPSG3857=get$1("EPSG:3857");function createElement(tagName,attributes={}){let element=$(document.createElement(tagName));for(let attribute in attributes){element.attr(attribute,attributes[attribute]);}return element;}function appendElement(parentElement,tagName,attributes={}){let element=createElement(tagName,attributes);parentElement.append(element);return element;}let jq_map=$(jq_map_element);let ext_path=jq_map.attr("data-ext-path");let img_path=ext_path+"/img";let json_string=jq_map.children().last().text();jq_map.empty();let json_js=JSON.parse(json_string);let format_geojson=new OlGeoJson();let
features_all=format_geojson.readFeatures(json_js,{dataProjection:EPSG4326,featureProjection:EPSG3857});function get_feature_title(feature){let title=feature.get("type");if(title=="sledrun")return feature.get("name");title=title.charAt(0).toUpperCase()+title.slice(1);if(feature.get("name"))title+=": "+feature.get("name");return title;}let get_sledrun_condition=function(feature){let condition=feature.get("condition");if(condition===void 0)return 0;return condition;};function sledrun_icon_style(condition,highlight){let hl=highlight?"h":"n";let src=img_path+"/marker_c_sledrun_"+condition+"n"+hl+".png";return new Style({image:new OlIcon({src,size:[17,17],anchor:[0.5,0.5]})});}function sledrun_icon_shadow_style(){return new Style({image:new OlIcon({src:img_path+"/marker_c_shadow.png",size:[23,23],anchor:[0.4,0.4]})});}function marker_icon_style(feature){let src=img_path+"/marker_p_"+feature.get("type")+".png";return new Style({image:new OlIcon({src,size:[20,34],anchor:[0.5,1]})});}function
point_style(feature,highlight){let sledrun=feature.get("type")=="sledrun";let icon_style;if(sledrun){let condition=get_sledrun_condition(feature);icon_style=sledrun_icon_style(condition,highlight);}else icon_style=marker_icon_style(feature);if(highlight){icon_style.setText(new OlText({text:get_feature_title(feature),font:"icon",offsetY:14,stroke:new OlStroke({color:"#ddd",width:2})}));}if(sledrun){let shadow_style=sledrun_icon_shadow_style();return[shadow_style,icon_style];}return[icon_style];}function style_point_function(feature,_resolution){return point_style(feature,false);}function style_point_function_highlight(feature,_resolution){return point_style(feature,true);}function style_path_function(feature,_resolution){let line_color={"rodelbahn":"#014e9a","gehweg":"#e98401","alternative":"#7f7fff","lift":"#000000","anfahrt":"#e1e100"};let featureType=feature.get("type");let color=feature.get("strokeColor")||line_color[featureType]||"#e7525b";let width2=["lift","anfahrt"].indexOf(
feature.get("type"))>=0?3:6;return new Style({stroke:new OlStroke({color,width:width2})});}function style_function(feature,resolution){if(feature.getGeometry()instanceof OlPoint)return style_point_function(feature);return style_path_function(feature);}function style_function_highlight(feature,resolution){if(feature.getGeometry()instanceof OlPoint)return style_point_function_highlight(feature);return style_path_function(feature);}let popup_container=document.createElement("div");popup_container.setAttribute("class","ol-popup");popup_container=jq_map_element.insertAdjacentElement("afterend",popup_container);let popup_closer=document.createElement("a");popup_closer.setAttribute("href","#");popup_closer.setAttribute("class","ol-popup-closer");popup_closer=popup_container.insertAdjacentElement("beforeend",popup_closer);let popup_content=document.createElement("div");popup_content=popup_container.insertAdjacentElement("beforeend",popup_content);let popup_overlay=new OlOverlay({element:
popup_container,autoPan:{animation:{duration:250}}});popup_closer.onclick=function(){popup_overlay.setPosition(void 0);popup_closer.blur();return false;};function create_popup_dom(feature){let popup_div=createElement("div");if(feature.get("name")!==void 0&&(feature.get("wiki")!==void 0||feature.get("thumb_url")!==void 0)){let h2=appendElement(popup_div,"h2");if(feature.get("wiki")===void 0)h2.text(feature.get("name"));else appendElement(h2,"a",{href:new mw.Title(feature.get("wiki")).getUrl({})}).text(feature.get("name"));}if(feature.get("type")=="sledrun"){let p=appendElement(popup_div,"p").text("Rodelbahnzustand").append(createElement("br"));let wiki_title=new mw.Title(feature.get("wiki"));if(feature.get("condition")!==void 0){let condition_text={1:"Sehr gut",2:"Gut",3:"Mittelmäßig",4:"Schlecht",5:"Geht nicht"};let condition=feature.get("condition");let year_month_day=feature.get("date_report").split("-");p.append(createElement("a",{href:wiki_title.getUrl({})+"#Eintr.C3.A4ge"}).text
(condition_text[condition])," ");p.append(createElement("small").text(year_month_day[2]+"."+year_month_day[1]+".")," ");p.append(createElement("em").append(createElement("a",{href:wiki_title.getUrl({})+"#Eintragen"}).text("Neu")));}else{p.append(createElement("em").append(createElement("a",{href:wiki_title.getUrl({})+"#Eintragen"}).text("Bitte eintragen")));}}if(feature.get("wiki")!==void 0){let a=appendElement(appendElement(popup_div,"p"),"a",{href:new mw.Title(feature.get("wiki")).getUrl({})});let detail_text="Details";if(feature.get("type")=="sledrun")detail_text+=" zur Rodelbahn";if(feature.get("type")=="gasthaus")detail_text+=" zum Gasthaus";if(feature.get("thumb_url")!==void 0){a.append(createElement("img",{src:feature.get("thumb_url"),alt:detail_text,title:detail_text}));}else{a.text(detail_text);let api=new mw.Api();api.get({action:"query",prop:"pageimages",pithumbsize:"200",titles:feature.get("wiki")}).done(function(data){var _a2;let pages=(_a2=data==null?void 0:data.query)==
null?void 0:_a2.pages;if(pages instanceof Object){for(let pageNumber in pages){let page=pages[pageNumber];let thumbnail=page.thumbnail;if(thumbnail instanceof Object){a.empty();a.append(createElement("img",{src:thumbnail.source,alt:detail_text,title:detail_text,width:thumbnail.width,height:thumbnail.height}));popup_overlay.panIntoView();}}}});}}return popup_div;}let lon=((_a=json_js.wr_properties)==null?void 0:_a.lon)??11;let lat=((_b=json_js.wr_properties)==null?void 0:_b.lat)??47;let zoom=((_c=json_js.wr_properties)==null?void 0:_c.zoom)??10;let width=((_d=json_js.wr_properties)==null?void 0:_d.width)??"100%";let height=((_e=json_js.properties)==null?void 0:_e.height)??450;jq_map.width(width);jq_map.height(height);let layer_sledrun_source=new OlSourceVector({features:features_all});let layer_sledrun=new OlLayerVector({source:layer_sledrun_source,style:style_function});let map=new OlMap({target:jq_map[0],layers:[layer_sledrun],overlays:[popup_overlay],view:new OlView({center:
fromLonLat([lon,lat]),zoom}),controls:defaults$1({attributionOptions:{collapsible:false}}),interactions:defaults({mouseWheelZoom:false,dragPan:false}).extend([new OlInteractionDragPan({condition:function(event){let dragPan=this;return dragPan.getPointerCount()===2||platformModifierKeyOnly(event);}}),new OlInteractionMouseWheelZoom({condition:platformModifierKeyOnly}),new OlInteractionSelect({condition:pointerMove,style:style_function_highlight})])});let select_click=new OlInteractionSelect({condition:click,style:null});map.addInteraction(select_click);select_click.on("select",function(event){if(event.selected.length>0){let feature=event.selected[0];let geometry=feature.getGeometry();let coordinates2=geometry.getFirstCoordinate();let popup_dom=create_popup_dom(feature);if(popup_dom.children().length>0){$(popup_content).empty().append(popup_dom);popup_overlay.setPosition(coordinates2);}}});function get_austria_feature(){let austria_wkt=
"POLYGON ((9.599 47.269, 9.767 47.523, 9.986 47.442, 10.192 47.234, 10.366 47.287, 10.488 47.497, 10.814 47.477, 11.052 47.349, 11.732 47.539, 12.211 47.578, 12.269 47.656, 12.474 47.593, 12.676 47.622, 12.839 47.471, 13.039 47.436, 13.120 47.661, 12.989 47.754, 13.019 47.900, 12.864 48.130, 13.419 48.328, 13.516 48.523, 13.769 48.509, 13.867 48.699, 14.173 48.535, 14.726 48.561, 14.851 48.728, 14.983 48.751, 15.036 48.954, 15.803 48.820, 16.041 48.711, 16.374 48.694, 16.496 48.754, 16.831 48.668, 16.800 48.376, 17.050 48.001, 16.985 47.742, 16.583 47.795, 16.363 47.696, 16.605 47.538, 16.379 47.412, 16.402 47.043, 15.994 46.879, 15.914 46.732, 14.874 46.649, 14.538 46.455, 12.501 46.715, 12.213 46.957, 12.267 47.065, 12.181 47.126, 11.762 47.031, 11.220 47.018, 10.925 46.815, 10.520 46.900, 10.359 47.029, 10.134 46.899, 9.674 47.095, 9.599 47.269))";let format=new OlFormatWkt();let feature=format.readFeature(austria_wkt,{dataProjection:EPSG4326,featureProjection:EPSG3857});return
feature;}let austriaFeature=get_austria_feature();let austriaGeometry=austriaFeature.getGeometry();function is_in_austria(feature){let featureGeometry=feature.getGeometry();return austriaGeometry.intersectsCoordinate(featureGeometry.getFirstCoordinate());}let austria_only=features_all.every(is_in_austria);let capabilitiesUrl=austria_only?"https://mapsneu.wien.gv.at/basemapneu/1.0.0/WMTSCapabilities.xml":"https://mapsneu.wien.gv.at/vaoneu/1.0.0/WMTSCapabilities.xml";fetch(capabilitiesUrl).then(function(response){return response.text();}).then(function(text){let result=new OlFormatWmtsCapabilities().read(text);let options=optionsFromCapabilities(result,{layer:austria_only?"bmapgrau":"vaoausland",matrixSet:"google3857",style:"normal"});options["attributions"]=austria_only?'Grundkarte: <a href="https://www.basemap.at/">basemap.at</a>':'Grundkarte: <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>';let layer_map=new OlLayerTile({source:new OlSourceWmts(options)});map.
getLayers().insertAt(0,layer_map);});}function init_wrmaps(){let jq_maps=$(".wrmap");jq_maps.each(init_wrmap);}$(init_wrmaps);},{"css":[
":root,:host{--ol-background-color:white;--ol-accent-background-color:#F5F5F5;--ol-subtle-background-color:rgba(128,128,128,0.25);--ol-partial-background-color:rgba(255,255,255,0.75);--ol-foreground-color:#333333;--ol-subtle-foreground-color:#666666;--ol-brand-color:#00AAFF}.ol-box{box-sizing:border-box;border-radius:2px;border:1.5px solid var(--ol-background-color);background-color:var(--ol-partial-background-color)}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:var(--ol-partial-background-color);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid var(--ol-subtle-foreground-color);border-top:none;color:var(--ol-foreground-color);font-size:10px;text-align:center;margin:1px;will-change:contents,width;transition:all 0.25s}.ol-scale-bar{position:absolute;bottom:8px;left:8px}.ol-scale-bar-inner{display:flex}.ol-scale-step-marker{width:1px;height:15px;background-color:var(--ol-foreground-color);float:right;z-index:10}.ol-scale-step-text{position:absolute;bottom:-5px;font-size:10px;z-index:11;color:var(--ol-foreground-color);text-shadow:-1.5px 0 var(--ol-partial-background-color),0 1.5px var(--ol-partial-background-color),1.5px 0 var(--ol-partial-background-color),0 -1.5px var(--ol-partial-background-color)}.ol-scale-text{position:absolute;font-size:12px;text-align:center;bottom:25px;color:var(--ol-foreground-color);text-shadow:-1.5px 0 var(--ol-partial-background-color),0 1.5px var(--ol-partial-background-color),1.5px 0 var(--ol-partial-background-color),0 -1.5px var(--ol-partial-background-color)}.ol-scale-singlebar{position:relative;height:10px;z-index:9;box-sizing:border-box;border:1px solid var(--ol-foreground-color)}.ol-scale-singlebar-even{background-color:var(--ol-subtle-foreground-color)}.ol-scale-singlebar-odd{background-color:var(--ol-background-color)}.ol-unsupported{display:none}.ol-viewport,.ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-viewport canvas{all:unset;overflow:hidden}.ol-viewport{touch-action:none}.ol-selectable{-webkit-touch-callout:default;-webkit-user-select:text;-moz-user-select:text;user-select:text}.ol-grabbing{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.ol-grab{cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.ol-control{position:absolute;background-color:var(--ol-subtle-background-color);border-radius:4px}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}.ol-control button{display:block;margin:1px;padding:0;color:var(--ol-subtle-foreground-color);font-weight:bold;text-decoration:none;font-size:inherit;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:var(--ol-background-color);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:normal;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:hover,.ol-control button:focus{text-decoration:none;outline:1px solid var(--ol-subtle-foreground-color);color:var(--ol-foreground-color)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em);display:flex;flex-flow:row-reverse;align-items:center}.ol-attribution a{color:var(--ol-subtle-foreground-color);text-decoration:none}.ol-attribution ul{margin:0;padding:1px .5em;color:var(--ol-foreground-color);text-shadow:0 0 2px var(--ol-background-color);font-size:12px}.ol-attribution li{display:inline;list-style:none}.ol-attribution li:not(:last-child):after{content:\" \"}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button{flex-shrink:0}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution:not(.ol-collapsed){background:var(--ol-partial-background-color)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:0.5em;bottom:0.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:block}.ol-overviewmap .ol-overviewmap-map{border:1px solid var(--ol-subtle-foreground-color);height:150px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:0;left:0;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:var(--ol-subtle-background-color)}.ol-overviewmap-box{border:1.5px dotted var(--ol-subtle-foreground-color)}.ol-overviewmap .ol-overviewmap-box:hover{cursor:move}.ol-popup{position:absolute;background-color:white;-webkit-filter:drop-shadow(0 1px 4px rgba(0,0,0,0.2));filter:drop-shadow(0 1px 4px rgba(0,0,0,0.2));padding:15px;border-radius:10px;border:1px solid #cccccc;bottom:12px;left:-50px;min-width:250px}.ol-popup:after,.ol-popup:before{top:100%;border:solid transparent;content:\" \";height:0;width:0;position:absolute;pointer-events:none}.ol-popup h2{margin-top:0px}.ol-popup img{min-height:130px}.ol-popup:after{border-top-color:white;border-width:10px;left:48px;margin-left:-10px}.ol-popup:before{border-top-color:#cccccc;border-width:11px;left:48px;margin-left:-11px}.ol-popup-closer{text-decoration:none;position:absolute;top:2px;right:8px}.ol-popup-closer:after{content:\"✖\"}"
]});mw.loader.implement("jquery@p9z7x",function($,jQuery,require,module){(function(global,factory){"use strict";if(typeof module==="object"&&typeof module.exports==="object"){module.exports=global.document?factory(global,true):function(w){if(!w.document){throw new Error("jQuery requires a window with a document");}return factory(w);};}else{factory(global);}})(typeof window!=="undefined"?window:this,function(window,noGlobal){"use strict";var arr=[];var getProto=Object.getPrototypeOf;var slice=arr.slice;var flat=arr.flat?function(array){return arr.flat.call(array);}:function(array){return arr.concat.apply([],array);};var push=arr.push;var indexOf=arr.indexOf;var class2type={};var toString=class2type.toString;var hasOwn=class2type.hasOwnProperty;var fnToString=hasOwn.toString;var ObjectFunctionString=fnToString.call(Object);var support={};var isFunction=function isFunction(obj){return typeof obj==="function"&&typeof obj.nodeType!=="number"&&typeof obj.item!=="function";};var isWindow=function
isWindow(obj){return obj!=null&&obj===obj.window;};var document=window.document;var preservedScriptAttributes={type:true,src:true,nonce:true,noModule:true};function DOMEval(code,node,doc){doc=doc||document;var i,val,script=doc.createElement("script");script.text=code;if(node){for(i in preservedScriptAttributes){val=node[i]||node.getAttribute&&node.getAttribute(i);if(val){script.setAttribute(i,val);}}}doc.head.appendChild(script).parentNode.removeChild(script);}function toType(obj){if(obj==null){return obj+"";}return typeof obj==="object"||typeof obj==="function"?class2type[toString.call(obj)]||"object":typeof obj;}var version="3.6.1",jQuery=function(selector,context){return new jQuery.fn.init(selector,context);};jQuery.fn=jQuery.prototype={jquery:version,constructor:jQuery,length:0,toArray:function(){return slice.call(this);},get:function(num){if(num==null){return slice.call(this);}return num<0?this[num+this.length]:this[num];},pushStack:function(elems){var ret=jQuery.merge(this.
constructor(),elems);ret.prevObject=this;return ret;},each:function(callback){return jQuery.each(this,callback);},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},slice:function(){return this.pushStack(slice.apply(this,arguments));},first:function(){return this.eq(0);},last:function(){return this.eq(-1);},even:function(){return this.pushStack(jQuery.grep(this,function(_elem,i){return(i+1)%2;}));},odd:function(){return this.pushStack(jQuery.grep(this,function(_elem,i){return i%2;}));},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j<len?[this[j]]:[]);},end:function(){return this.prevObject||this.constructor();},push:push,sort:arr.sort,splice:arr.splice};jQuery.extend=jQuery.fn.extend=function(){var options,name,src,copy,copyIsArray,clone,target=arguments[0]||{},i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[i]||{};i++;}if(typeof target
!=="object"&&!isFunction(target)){target={};}if(i===length){target=this;i--;}for(;i<length;i++){if((options=arguments[i])!=null){for(name in options){copy=options[name];if(name==="__proto__"||target===copy){continue;}if(deep&&copy&&(jQuery.isPlainObject(copy)||(copyIsArray=Array.isArray(copy)))){src=target[name];if(copyIsArray&&!Array.isArray(src)){clone=[];}else if(!copyIsArray&&!jQuery.isPlainObject(src)){clone={};}else{clone=src;}copyIsArray=false;target[name]=jQuery.extend(deep,clone,copy);}else if(copy!==undefined){target[name]=copy;}}}}return target;};jQuery.extend({expando:"jQuery"+(version+Math.random()).replace(/\D/g,""),isReady:true,error:function(msg){throw new Error(msg);},noop:function(){},isPlainObject:function(obj){var proto,Ctor;if(!obj||toString.call(obj)!=="[object Object]"){return false;}proto=getProto(obj);if(!proto){return true;}Ctor=hasOwn.call(proto,"constructor")&&proto.constructor;return typeof Ctor==="function"&&fnToString.call(Ctor)===ObjectFunctionString;},
isEmptyObject:function(obj){var name;for(name in obj){return false;}return true;},globalEval:function(code,options,doc){DOMEval(code,{nonce:options&&options.nonce},doc);},each:function(obj,callback){var length,i=0;if(isArrayLike(obj)){length=obj.length;for(;i<length;i++){if(callback.call(obj[i],i,obj[i])===false){break;}}}else{for(i in obj){if(callback.call(obj[i],i,obj[i])===false){break;}}}return obj;},makeArray:function(arr,results){var ret=results||[];if(arr!=null){if(isArrayLike(Object(arr))){jQuery.merge(ret,typeof arr==="string"?[arr]:arr);}else{push.call(ret,arr);}}return ret;},inArray:function(elem,arr,i){return arr==null?-1:indexOf.call(arr,elem,i);},merge:function(first,second){var len=+second.length,j=0,i=first.length;for(;j<len;j++){first[i++]=second[j];}first.length=i;return first;},grep:function(elems,callback,invert){var callbackInverse,matches=[],i=0,length=elems.length,callbackExpect=!invert;for(;i<length;i++){callbackInverse=!callback(elems[i],i);if(callbackInverse
!==callbackExpect){matches.push(elems[i]);}}return matches;},map:function(elems,callback,arg){var length,value,i=0,ret=[];if(isArrayLike(elems)){length=elems.length;for(;i<length;i++){value=callback(elems[i],i,arg);if(value!=null){ret.push(value);}}}else{for(i in elems){value=callback(elems[i],i,arg);if(value!=null){ret.push(value);}}}return flat(ret);},guid:1,support:support});if(typeof Symbol==="function"){jQuery.fn[Symbol.iterator]=arr[Symbol.iterator];}jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(_i,name){class2type["[object "+name+"]"]=name.toLowerCase();});function isArrayLike(obj){var length=!!obj&&"length"in obj&&obj.length,type=toType(obj);if(isFunction(obj)||isWindow(obj)){return false;}return type==="array"||length===0||typeof length==="number"&&length>0&&(length-1)in obj;}var Sizzle=(function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate,setDocument,document,
docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains,expando="sizzle"+1*new Date(),preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),nonnativeSelectorCache=createCache(),sortOrder=function(a,b){if(a===b){hasDuplicate=true;}return 0;},hasOwn=({}).hasOwnProperty,arr=[],pop=arr.pop,pushNative=arr.push,push=arr.push,slice=arr.slice,indexOf=function(list,elem){var i=0,len=list.length;for(;i<len;i++){if(list[i]===elem){return i;}}return-1;},booleans="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|"+"ismap|loop|multiple|open|readonly|required|scoped",whitespace="[\\x20\\t\\r\\n\\f]",identifier="(?:\\\\[\\da-fA-F]{1,6}"+whitespace+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",attributes="\\["+whitespace+"*("+identifier+")(?:"+whitespace+"*([*^$|!~]?=)"+whitespace+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+identifier+"))|)"+whitespace+"*\\]",pseudos=":("+identifier+
")(?:\\(("+"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|"+"((?:\\\\.|[^\\\\()[\\]]|"+attributes+")*)|"+".*"+")\\)|)",rwhitespace=new RegExp(whitespace+"+","g"),rtrim=new RegExp("^"+whitespace+"+|((?:^|[^\\\\])(?:\\\\.)*)"+whitespace+"+$","g"),rcomma=new RegExp("^"+whitespace+"*,"+whitespace+"*"),rcombinators=new RegExp("^"+whitespace+"*([>+~]|"+whitespace+")"+whitespace+"*"),rdescend=new RegExp(whitespace+"|>"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={"ID":new RegExp("^#("+identifier+")"),"CLASS":new RegExp("^\\.("+identifier+")"),"TAG":new RegExp("^("+identifier+"|[*])"),"ATTR":new RegExp("^"+attributes),"PSEUDO":new RegExp("^"+pseudos),"CHILD":new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),"bool":new RegExp("^(?:"+booleans+")$","i"),"needsContext":new RegExp("^"+whitespace+
"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rhtml=/HTML$/i,rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,runescape=new RegExp("\\\\[\\da-fA-F]{1,6}"+whitespace+"?|\\\\([^\\r\\n\\f])","g"),funescape=function(escape,nonHex){var high="0x"+escape.slice(1)-0x10000;return nonHex?nonHex:high<0?String.fromCharCode(high+0x10000):String.fromCharCode(high>>10|0xD800,high&0x3FF|0xDC00);},rcssescape=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,fcssescape=function(ch,asCodePoint){if(asCodePoint){if(ch==="\0"){return"\uFFFD";}return ch.slice(0,-1)+"\\"+ch.charCodeAt(ch.length-1).toString(16)+" ";}return"\\"+ch;},unloadHandler=function(){setDocument();},inDisabledFieldset=addCombinator(function(elem){return elem.disabled===true&&elem.nodeName.toLowerCase()==="fieldset";},{dir:"parentNode",next:"legend"});try{
push.apply((arr=slice.call(preferredDoc.childNodes)),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType;}catch(e){push={apply:arr.length?function(target,els){pushNative.apply(target,slice.call(els));}:function(target,els){var j=target.length,i=0;while((target[j++]=els[i++])){}target.length=j-1;}};}function Sizzle(selector,context,results,seed){var m,i,elem,nid,match,groups,newSelector,newContext=context&&context.ownerDocument,nodeType=context?context.nodeType:9;results=results||[];if(typeof selector!=="string"||!selector||nodeType!==1&&nodeType!==9&&nodeType!==11){return results;}if(!seed){setDocument(context);context=context||document;if(documentIsHTML){if(nodeType!==11&&(match=rquickExpr.exec(selector))){if((m=match[1])){if(nodeType===9){if((elem=context.getElementById(m))){if(elem.id===m){results.push(elem);return results;}}else{return results;}}else{if(newContext&&(elem=newContext.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results
;}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results;}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results;}}if(support.qsa&&!nonnativeSelectorCache[selector+" "]&&(!rbuggyQSA||!rbuggyQSA.test(selector))&&(nodeType!==1||context.nodeName.toLowerCase()!=="object")){newSelector=selector;newContext=context;if(nodeType===1&&(rdescend.test(selector)||rcombinators.test(selector))){newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;if(newContext!==context||!support.scope){if((nid=context.getAttribute("id"))){nid=nid.replace(rcssescape,fcssescape);}else{context.setAttribute("id",(nid=expando));}}groups=tokenize(selector);i=groups.length;while(i--){groups[i]=(nid?"#"+nid:":scope")+" "+toSelector(groups[i]);}newSelector=groups.join(",");}try{push.apply(results,newContext.querySelectorAll(newSelector));return results;}catch(
qsaError){nonnativeSelectorCache(selector,true);}finally{if(nid===expando){context.removeAttribute("id");}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed);}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()];}return(cache[key+" "]=value);}return cache;}function markFunction(fn){fn[expando]=true;return fn;}function assert(fn){var el=document.createElement("fieldset");try{return!!fn(el);}catch(e){return false;}finally{if(el.parentNode){el.parentNode.removeChild(el);}el=null;}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=arr.length;while(i--){Expr.attrHandle[arr[i]]=handler;}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&a.sourceIndex-b.sourceIndex;if(diff){return diff;}if(cur){while((cur=cur.nextSibling)){if(cur===b){return-1;}}}return a?1:-1;}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name
==="input"&&elem.type===type;};}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type;};}function createDisabledPseudo(disabled){return function(elem){if("form"in elem){if(elem.parentNode&&elem.disabled===false){if("label"in elem){if("label"in elem.parentNode){return elem.parentNode.disabled===disabled;}else{return elem.disabled===disabled;}}return elem.isDisabled===disabled||elem.isDisabled!==!disabled&&inDisabledFieldset(elem)===disabled;}return elem.disabled===disabled;}else if("label"in elem){return elem.disabled===disabled;}return false;};}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[(j=matchIndexes[i])]){seed[j]=!(matches[j]=seed[j]);}}});});}function testContext(context){return context&&typeof context.
getElementsByTagName!=="undefined"&&context;}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var namespace=elem&&elem.namespaceURI,docElem=elem&&(elem.ownerDocument||elem).documentElement;return!rhtml.test(namespace||docElem&&docElem.nodeName||"HTML");};setDocument=Sizzle.setDocument=function(node){var hasCompare,subWindow,doc=node?node.ownerDocument||node:preferredDoc;if(doc==document||doc.nodeType!==9||!doc.documentElement){return document;}document=doc;docElem=document.documentElement;documentIsHTML=!isXML(document);if(preferredDoc!=document&&(subWindow=document.defaultView)&&subWindow.top!==subWindow){if(subWindow.addEventListener){subWindow.addEventListener("unload",unloadHandler,false);}else if(subWindow.attachEvent){subWindow.attachEvent("onunload",unloadHandler);}}support.scope=assert(function(el){docElem.appendChild(el).appendChild(document.createElement("div"));return typeof el.querySelectorAll!=="undefined"&&!el.querySelectorAll(":scope fieldset div").length;});
support.attributes=assert(function(el){el.className="i";return!el.getAttribute("className");});support.getElementsByTagName=assert(function(el){el.appendChild(document.createComment(""));return!el.getElementsByTagName("*").length;});support.getElementsByClassName=rnative.test(document.getElementsByClassName);support.getById=assert(function(el){docElem.appendChild(el).id=expando;return!document.getElementsByName||!document.getElementsByName(expando).length;});if(support.getById){Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId;};};Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var elem=context.getElementById(id);return elem?[elem]:[];}};}else{Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return node&&node.value===attrId
;};};Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var node,i,elems,elem=context.getElementById(id);if(elem){node=elem.getAttributeNode("id");if(node&&node.value===id){return[elem];}elems=context.getElementsByName(id);i=0;while((elem=elems[i++])){node=elem.getAttributeNode("id");if(node&&node.value===id){return[elem];}}}return[];}};}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!=="undefined"){return context.getElementsByTagName(tag);}else if(support.qsa){return context.querySelectorAll(tag);}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while((elem=results[i++])){if(elem.nodeType===1){tmp.push(elem);}}return tmp;}return results;};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!=="undefined"&&documentIsHTML){return context.getElementsByClassName(
className);}};rbuggyMatches=[];rbuggyQSA=[];if((support.qsa=rnative.test(document.querySelectorAll))){assert(function(el){var input;docElem.appendChild(el).innerHTML="<a id='"+expando+"'></a>"+"<select id='"+expando+"-\r\\' msallowcapture=''>"+"<option selected=''></option></select>";if(el.querySelectorAll("[msallowcapture^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")");}if(!el.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")");}if(!el.querySelectorAll("[id~="+expando+"-]").length){rbuggyQSA.push("~=");}input=document.createElement("input");input.setAttribute("name","");el.appendChild(input);if(!el.querySelectorAll("[name='']").length){rbuggyQSA.push("\\["+whitespace+"*name"+whitespace+"*="+whitespace+"*(?:''|\"\")");}if(!el.querySelectorAll(":checked").length){rbuggyQSA.push(":checked");}if(!el.querySelectorAll("a#"+expando+"+*").length){rbuggyQSA.push(".#.+[+~]");}el.querySelectorAll("\\\f");rbuggyQSA.push("[\\r\\n\\f]"
);});assert(function(el){el.innerHTML="<a href='' disabled='disabled'></a>"+"<select disabled='disabled'><option/></select>";var input=document.createElement("input");input.setAttribute("type","hidden");el.appendChild(input).setAttribute("name","D");if(el.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=");}if(el.querySelectorAll(":enabled").length!==2){rbuggyQSA.push(":enabled",":disabled");}docElem.appendChild(el).disabled=true;if(el.querySelectorAll(":disabled").length!==2){rbuggyQSA.push(":enabled",":disabled");}el.querySelectorAll("*,:x");rbuggyQSA.push(",.*:");});}if((support.matchesSelector=rnative.test((matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)))){assert(function(el){support.disconnectedMatch=matches.call(el,"*");matches.call(el,"[s!='']:x");rbuggyMatches.push("!=",pseudos);});}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=
rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16));}:function(a,b){if(b){while((b=b.parentNode)){if(b===a){return true;}}}return false;};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0;}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare;}compare=(a.ownerDocument||a)==(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||(!support.sortDetached&&b.compareDocumentPosition(a)===compare)){if(a==document||a.ownerDocument==preferredDoc&&contains(preferredDoc,a)){return-1;}if(b==document||b.ownerDocument==preferredDoc&&contains(preferredDoc,b)){return 1;}return sortInput?(indexOf(
sortInput,a)-indexOf(sortInput,b)):0;}return compare&4?-1:1;}:function(a,b){if(a===b){hasDuplicate=true;return 0;}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a==document?-1:b==document?1:aup?-1:bup?1:sortInput?(indexOf(sortInput,a)-indexOf(sortInput,b)):0;}else if(aup===bup){return siblingCheck(a,b);}cur=a;while((cur=cur.parentNode)){ap.unshift(cur);}cur=b;while((cur=cur.parentNode)){bp.unshift(cur);}while(ap[i]===bp[i]){i++;}return i?siblingCheck(ap[i],bp[i]):ap[i]==preferredDoc?-1:bp[i]==preferredDoc?1:0;};return document;};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements);};Sizzle.matchesSelector=function(elem,expr){setDocument(elem);if(support.matchesSelector&&documentIsHTML&&!nonnativeSelectorCache[expr+" "]&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret;}}
catch(e){nonnativeSelectorCache(expr,true);}}return Sizzle(expr,document,null,[elem]).length>0;};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!=document){setDocument(context);}return contains(context,elem);};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!=document){setDocument(elem);}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null;};Sizzle.escape=function(sel){return(sel+"").replace(rcssescape,fcssescape);};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg);};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while((elem=
results[i++])){if(elem===results[i]){j=duplicates.push(i);}}while(j--){results.splice(duplicates[j],1);}}sortInput=null;return results;};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while((node=elem[i++])){ret+=getText(node);}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent;}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem);}}}else if(nodeType===3||nodeType===4){return elem.nodeValue;}return ret;};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{"ATTR":function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[3]||match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" ";}return match.slice
(0,4);},"CHILD":function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0]);}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+((match[7]+match[8])||match[3]==="odd");}else if(match[3]){Sizzle.error(match[0]);}return match;},"PSEUDO":function(match){var excess,unquoted=!match[6]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null;}if(match[3]){match[2]=match[4]||match[5]||"";}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess);}return match.slice(0,3);}},filter:{"TAG":function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true;}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName;};},"CLASS":function(
className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!=="undefined"&&elem.getAttribute("class")||"");});},"ATTR":function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!=";}if(!operator){return true;}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result.replace(rwhitespace," ")+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false;};},"CHILD":function(type,what,_argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",
ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode;}:function(elem,_context,xml){var cache,uniqueCache,outerCache,node,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType,diff=false;if(parent){if(simple){while(dir){node=elem;while((node=node[dir])){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false;}}start=dir=type==="only"&&!start&&"nextSibling";}return true;}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){node=parent;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while((node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop())){if(node.nodeType===1&&++diff&&node===elem){uniqueCache[
type]=[dirruns,nodeIndex,diff];break;}}}else{if(useCache){node=elem;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex;}if(diff===false){while((node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop())){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});uniqueCache[type]=[dirruns,diff];}if(node===elem){break;}}}}}diff-=last;return diff===first||(diff%first===0&&diff/first>=0);}};},"PSEUDO":function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument);}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?
markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i]);}}):function(elem){return fn(elem,0,args);};}return fn;}},pseudos:{"not":markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,_context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if((elem=unmatched[i])){seed[i]=!(matches[i]=elem);}}}):function(elem,_context,xml){input[0]=elem;matcher(input,null,xml,results);input[0]=null;return!results.pop();};}),"has":markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0;};}),"contains":markFunction(function(text){text=text.replace(runescape,funescape);return function(elem){return(elem.textContent||getText(elem)).indexOf(text)>-1;};}),"lang":markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error(
"unsupported lang: "+lang);}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if((elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang"))){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0;}}while((elem=elem.parentNode)&&elem.nodeType===1);return false;};}),"target":function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id;},"root":function(elem){return elem===docElem;},"focus":function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex);},"enabled":createDisabledPseudo(false),"disabled":createDisabledPseudo(true),"checked":function(elem){var nodeName=elem.nodeName.toLowerCase();return(nodeName==="input"&&!!elem.checked)||(nodeName==="option"&&!!elem.selected);},"selected":function(elem){if(elem.parentNode){elem.parentNode.selectedIndex;}return elem.selected
===true;},"empty":function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false;}}return true;},"parent":function(elem){return!Expr.pseudos["empty"](elem);},"header":function(elem){return rheader.test(elem.nodeName);},"input":function(elem){return rinputs.test(elem.nodeName);},"button":function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button";},"text":function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text");},"first":createPositionalPseudo(function(){return[0];}),"last":createPositionalPseudo(function(_matchIndexes,length){return[length-1];}),"eq":createPositionalPseudo(function(_matchIndexes,length,argument){return[argument<0?argument+length:argument];}),"even":createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i<length;i+=2){matchIndexes.push(i);}return matchIndexes;}),"odd":
createPositionalPseudo(function(matchIndexes,length){var i=1;for(;i<length;i+=2){matchIndexes.push(i);}return matchIndexes;}),"lt":createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument>length?length:argument;for(;--i>=0;){matchIndexes.push(i);}return matchIndexes;}),"gt":createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i<length;){matchIndexes.push(i);}return matchIndexes;})}};Expr.pseudos["nth"]=Expr.pseudos["eq"];for(i in{radio:true,checkbox:true,file:true,password:true,image:true}){Expr.pseudos[i]=createInputPseudo(i);}for(i in{submit:true,reset:true}){Expr.pseudos[i]=createButtonPseudo(i);}function setFilters(){}setFilters.prototype=Expr.filters=Expr.pseudos;Expr.setFilters=new setFilters();tokenize=Sizzle.tokenize=function(selector,parseOnly){var matched,match,tokens,type,soFar,groups,preFilters,cached=tokenCache[selector+" "];if(cached){return parseOnly?0:cached.slice(0)
;}soFar=selector;groups=[];preFilters=Expr.preFilter;while(soFar){if(!matched||(match=rcomma.exec(soFar))){if(match){soFar=soFar.slice(match[0].length)||soFar;}groups.push((tokens=[]));}matched=false;if((match=rcombinators.exec(soFar))){matched=match.shift();tokens.push({value:matched,type:match[0].replace(rtrim," ")});soFar=soFar.slice(matched.length);}for(type in Expr.filter){if((match=matchExpr[type].exec(soFar))&&(!preFilters[type]||(match=preFilters[type](match)))){matched=match.shift();tokens.push({value:matched,type:type,matches:match});soFar=soFar.slice(matched.length);}}if(!matched){break;}}return parseOnly?soFar.length:soFar?Sizzle.error(selector):tokenCache(selector,groups).slice(0);};function toSelector(tokens){var i=0,len=tokens.length,selector="";for(;i<len;i++){selector+=tokens[i].value;}return selector;}function addCombinator(matcher,combinator,base){var dir=combinator.dir,skip=combinator.next,key=skip||dir,checkNonElements=base&&key==="parentNode",doneName=done++;
return combinator.first?function(elem,context,xml){while((elem=elem[dir])){if(elem.nodeType===1||checkNonElements){return matcher(elem,context,xml);}}return false;}:function(elem,context,xml){var oldCache,uniqueCache,outerCache,newCache=[dirruns,doneName];if(xml){while((elem=elem[dir])){if(elem.nodeType===1||checkNonElements){if(matcher(elem,context,xml)){return true;}}}}else{while((elem=elem[dir])){if(elem.nodeType===1||checkNonElements){outerCache=elem[expando]||(elem[expando]={});uniqueCache=outerCache[elem.uniqueID]||(outerCache[elem.uniqueID]={});if(skip&&skip===elem.nodeName.toLowerCase()){elem=elem[dir]||elem;}else if((oldCache=uniqueCache[key])&&oldCache[0]===dirruns&&oldCache[1]===doneName){return(newCache[2]=oldCache[2]);}else{uniqueCache[key]=newCache;if((newCache[2]=matcher(elem,context,xml))){return true;}}}}}return false;};}function elementMatcher(matchers){return matchers.length>1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,
xml)){return false;}}return true;}:matchers[0];}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i<len;i++){Sizzle(selector,contexts[i],results);}return results;}function condense(unmatched,map,filter,context,xml){var elem,newUnmatched=[],i=0,len=unmatched.length,mapped=map!=null;for(;i<len;i++){if((elem=unmatched[i])){if(!filter||filter(elem,context,xml)){newUnmatched.push(elem);if(mapped){map.push(i);}}}}return newUnmatched;}function setMatcher(preFilter,selector,matcher,postFilter,postFinder,postSelector){if(postFilter&&!postFilter[expando]){postFilter=setMatcher(postFilter);}if(postFinder&&!postFinder[expando]){postFinder=setMatcher(postFinder,postSelector);}return markFunction(function(seed,results,context,xml){var temp,i,elem,preMap=[],postMap=[],preexisting=results.length,elems=seed||multipleContexts(selector||"*",context.nodeType?[context]:context,[]),matcherIn=preFilter&&(seed||!selector)?condense(elems,preMap,preFilter,context,xml):elems,
matcherOut=matcher?postFinder||(seed?preFilter:preexisting||postFilter)?[]:results:matcherIn;if(matcher){matcher(matcherIn,matcherOut,context,xml);}if(postFilter){temp=condense(matcherOut,postMap);postFilter(temp,[],context,xml);i=temp.length;while(i--){if((elem=temp[i])){matcherOut[postMap[i]]=!(matcherIn[postMap[i]]=elem);}}}if(seed){if(postFinder||preFilter){if(postFinder){temp=[];i=matcherOut.length;while(i--){if((elem=matcherOut[i])){temp.push((matcherIn[i]=elem));}}postFinder(null,(matcherOut=[]),temp,xml);}i=matcherOut.length;while(i--){if((elem=matcherOut[i])&&(temp=postFinder?indexOf(seed,elem):preMap[i])>-1){seed[temp]=!(results[temp]=elem);}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml);}else{push.apply(results,matcherOut);}}});}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],
implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext;},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem)>-1;},implicitRelative,true),matchers=[function(elem,context,xml){var ret=(!leadingRelative&&(xml||context!==outermostContext))||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml));checkContext=null;return ret;}];for(;i<len;i++){if((matcher=Expr.relative[tokens[i].type])){matchers=[addCombinator(elementMatcher(matchers),matcher)];}else{matcher=Expr.filter[tokens[i].type].apply(null,tokens[i].matches);if(matcher[expando]){j=++i;for(;j<len;j++){if(Expr.relative[tokens[j].type]){break;}}return setMatcher(i>1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i<j&&matcherFromTokens(tokens.slice(i,j)),j<len&&
matcherFromTokens((tokens=tokens.slice(j))),j<len&&toSelector(tokens));}matchers.push(matcher);}}return elementMatcher(matchers);}function matcherFromGroupMatchers(elementMatchers,setMatchers){var bySet=setMatchers.length>0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=(dirruns+=contextBackup==null?1:Math.random()||0.1),len=elems.length;if(outermost){outermostContext=context==document||context||outermost;}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;if(!context&&elem.ownerDocument!=document){setDocument(elem);xml=!documentIsHTML;}while((matcher=elementMatchers[j++])){if(matcher(elem,context||document,xml)){results.push(elem);break;}}if(outermost){dirruns=dirrunsUnique;}}if(bySet){if((elem=!matcher&&elem)){matchedCount--;}if(seed){unmatched.push(elem)
;}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while((matcher=setMatchers[j++])){matcher(unmatched,setMatched,context,xml);}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results);}}}setMatched=condense(setMatched);}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&(matchedCount+setMatchers.length)>1){Sizzle.uniqueSort(results);}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup;}return unmatched;};return bySet?markFunction(superMatcher):superMatcher;}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector);}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached);}else{elementMatchers.push(cached);}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector;}return cached;};select=
Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize((selector=compiled.selector||selector));results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results;}else if(compiled){context=context.parentNode;}selector=selector.slice(tokens.shift().value.length);}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[(type=token.type)]){break;}if((find=Expr.find[type])){if((seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context))){tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);
return results;}break;}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,!context||rsibling.test(selector)&&testContext(context.parentNode)||context);return results;};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(el){return el.compareDocumentPosition(document.createElement("fieldset"))&1;});if(!assert(function(el){el.innerHTML="<a href='#'></a>";return el.firstChild.getAttribute("href")==="#";})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2);}});}if(!support.attributes||!assert(function(el){el.innerHTML="<input/>";el.firstChild.setAttribute("value","");return el.firstChild.getAttribute("value")==="";})){addHandle("value",function(elem,_name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue;}});}if(!assert(function(el){return el
.getAttribute("disabled")==null;})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null;}});}return Sizzle;})(window);jQuery.find=Sizzle;jQuery.expr=Sizzle.selectors;jQuery.expr[":"]=jQuery.expr.pseudos;jQuery.uniqueSort=jQuery.unique=Sizzle.uniqueSort;jQuery.text=Sizzle.getText;jQuery.isXMLDoc=Sizzle.isXML;jQuery.contains=Sizzle.contains;jQuery.escapeSelector=Sizzle.escape;var dir=function(elem,dir,until){var matched=[],truncate=until!==undefined;while((elem=elem[dir])&&elem.nodeType!==9){if(elem.nodeType===1){if(truncate&&jQuery(elem).is(until)){break;}matched.push(elem);}}return matched;};var siblings=function(n,elem){var matched=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){matched.push(n);}}return matched;};var rneedsContext=jQuery.expr.match.needsContext;function nodeName(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()
;}var rsingleTag=(/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i);function winnow(elements,qualifier,not){if(isFunction(qualifier)){return jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)!==not;});}if(qualifier.nodeType){return jQuery.grep(elements,function(elem){return(elem===qualifier)!==not;});}if(typeof qualifier!=="string"){return jQuery.grep(elements,function(elem){return(indexOf.call(qualifier,elem)>-1)!==not;});}return jQuery.filter(qualifier,elements,not);}jQuery.filter=function(expr,elems,not){var elem=elems[0];if(not){expr=":not("+expr+")";}if(elems.length===1&&elem.nodeType===1){return jQuery.find.matchesSelector(elem,expr)?[elem]:[];}return jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return elem.nodeType===1;}));};jQuery.fn.extend({find:function(selector){var i,ret,len=this.length,self=this;if(typeof selector!=="string"){return this.pushStack(jQuery(selector).filter(function(){for(i=0;i<len;i++){if(jQuery.contains(
self[i],this)){return true;}}}));}ret=this.pushStack([]);for(i=0;i<len;i++){jQuery.find(selector,self[i],ret);}return len>1?jQuery.uniqueSort(ret):ret;},filter:function(selector){return this.pushStack(winnow(this,selector||[],false));},not:function(selector){return this.pushStack(winnow(this,selector||[],true));},is:function(selector){return!!winnow(this,typeof selector==="string"&&rneedsContext.test(selector)?jQuery(selector):selector||[],false).length;}});var rootjQuery,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,init=jQuery.fn.init=function(selector,context,root){var match,elem;if(!selector){return this;}root=root||rootjQuery;if(typeof selector==="string"){if(selector[0]==="<"&&selector[selector.length-1]===">"&&selector.length>=3){match=[null,selector,null];}else{match=rquickExpr.exec(selector);}if(match&&(match[1]||!context)){if(match[1]){context=context instanceof jQuery?context[0]:context;jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.
ownerDocument||context:document,true));if(rsingleTag.test(match[1])&&jQuery.isPlainObject(context)){for(match in context){if(isFunction(this[match])){this[match](context[match]);}else{this.attr(match,context[match]);}}}return this;}else{elem=document.getElementById(match[2]);if(elem){this[0]=elem;this.length=1;}return this;}}else if(!context||context.jquery){return(context||root).find(selector);}else{return this.constructor(context).find(selector);}}else if(selector.nodeType){this[0]=selector;this.length=1;return this;}else if(isFunction(selector)){return root.ready!==undefined?root.ready(selector):selector(jQuery);}return jQuery.makeArray(selector,this);};init.prototype=jQuery.fn;rootjQuery=jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/,guaranteedUnique={children:true,contents:true,next:true,prev:true};jQuery.fn.extend({has:function(target){var targets=jQuery(target,this),l=targets.length;return this.filter(function(){var i=0;for(;i<l;i++){if(jQuery.contains(this,
targets[i])){return true;}}});},closest:function(selectors,context){var cur,i=0,l=this.length,matched=[],targets=typeof selectors!=="string"&&jQuery(selectors);if(!rneedsContext.test(selectors)){for(;i<l;i++){for(cur=this[i];cur&&cur!==context;cur=cur.parentNode){if(cur.nodeType<11&&(targets?targets.index(cur)>-1:cur.nodeType===1&&jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break;}}}}return this.pushStack(matched.length>1?jQuery.uniqueSort(matched):matched);},index:function(elem){if(!elem){return(this[0]&&this[0].parentNode)?this.first().prevAll().length:-1;}if(typeof elem==="string"){return indexOf.call(jQuery(elem),this[0]);}return indexOf.call(this,elem.jquery?elem[0]:elem);},add:function(selector,context){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(selector,context))));},addBack:function(selector){return this.add(selector==null?this.prevObject:this.prevObject.filter(selector));}});function sibling(cur,dir){while((cur=cur[dir])&&cur.
nodeType!==1){}return cur;}jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null;},parents:function(elem){return dir(elem,"parentNode");},parentsUntil:function(elem,_i,until){return dir(elem,"parentNode",until);},next:function(elem){return sibling(elem,"nextSibling");},prev:function(elem){return sibling(elem,"previousSibling");},nextAll:function(elem){return dir(elem,"nextSibling");},prevAll:function(elem){return dir(elem,"previousSibling");},nextUntil:function(elem,_i,until){return dir(elem,"nextSibling",until);},prevUntil:function(elem,_i,until){return dir(elem,"previousSibling",until);},siblings:function(elem){return siblings((elem.parentNode||{}).firstChild,elem);},children:function(elem){return siblings(elem.firstChild);},contents:function(elem){if(elem.contentDocument!=null&&getProto(elem.contentDocument)){return elem.contentDocument;}if(nodeName(elem,"template")){elem=elem.content||elem;}return jQuery.merge([],elem.
childNodes);}},function(name,fn){jQuery.fn[name]=function(until,selector){var matched=jQuery.map(this,fn,until);if(name.slice(-5)!=="Until"){selector=until;}if(selector&&typeof selector==="string"){matched=jQuery.filter(selector,matched);}if(this.length>1){if(!guaranteedUnique[name]){jQuery.uniqueSort(matched);}if(rparentsprev.test(name)){matched.reverse();}}return this.pushStack(matched);};});var rnothtmlwhite=(/[^\x20\t\r\n\f]+/g);function createOptions(options){var object={};jQuery.each(options.match(rnothtmlwhite)||[],function(_,flag){object[flag]=true;});return object;}jQuery.Callbacks=function(options){options=typeof options==="string"?createOptions(options):jQuery.extend({},options);var firing,memory,fired,locked,list=[],queue=[],firingIndex=-1,fire=function(){locked=locked||options.once;fired=firing=true;for(;queue.length;firingIndex=-1){memory=queue.shift();while(++firingIndex<list.length){if(list[firingIndex].apply(memory[0],memory[1])===false&&options.stopOnFalse){
firingIndex=list.length;memory=false;}}}if(!options.memory){memory=false;}firing=false;if(locked){if(memory){list=[];}else{list="";}}},self={add:function(){if(list){if(memory&&!firing){firingIndex=list.length-1;queue.push(memory);}(function add(args){jQuery.each(args,function(_,arg){if(isFunction(arg)){if(!options.unique||!self.has(arg)){list.push(arg);}}else if(arg&&arg.length&&toType(arg)!=="string"){add(arg);}});})(arguments);if(memory&&!firing){fire();}}return this;},remove:function(){jQuery.each(arguments,function(_,arg){var index;while((index=jQuery.inArray(arg,list,index))>-1){list.splice(index,1);if(index<=firingIndex){firingIndex--;}}});return this;},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:list.length>0;},empty:function(){if(list){list=[];}return this;},disable:function(){locked=queue=[];list=memory="";return this;},disabled:function(){return!list;},lock:function(){locked=queue=[];if(!memory&&!firing){list=memory="";}return this;},locked:function(){return!!locked
;},fireWith:function(context,args){if(!locked){args=args||[];args=[context,args.slice?args.slice():args];queue.push(args);if(!firing){fire();}}return this;},fire:function(){self.fireWith(this,arguments);return this;},fired:function(){return!!fired;}};return self;};function Identity(v){return v;}function Thrower(ex){throw ex;}function adoptValue(value,resolve,reject,noValue){var method;try{if(value&&isFunction((method=value.promise))){method.call(value).done(resolve).fail(reject);}else if(value&&isFunction((method=value.then))){method.call(value,resolve,reject);}else{resolve.apply(undefined,[value].slice(noValue));}}catch(value){reject.apply(undefined,[value]);}}jQuery.extend({Deferred:function(func){var tuples=[["notify","progress",jQuery.Callbacks("memory"),jQuery.Callbacks("memory"),2],["resolve","done",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),0,"resolved"],["reject","fail",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),1,"rejected"]],state=
"pending",promise={state:function(){return state;},always:function(){deferred.done(arguments).fail(arguments);return this;},"catch":function(fn){return promise.then(null,fn);},pipe:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(_i,tuple){var fn=isFunction(fns[tuple[4]])&&fns[tuple[4]];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);if(returned&&isFunction(returned.promise)){returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);}else{newDefer[tuple[0]+"With"](this,fn?[returned]:arguments);}});});fns=null;}).promise();},then:function(onFulfilled,onRejected,onProgress){var maxDepth=0;function resolve(depth,deferred,handler,special){return function(){var that=this,args=arguments,mightThrow=function(){var returned,then;if(depth<maxDepth){return;}returned=handler.apply(that,args);if(returned===deferred.promise()){throw new TypeError("Thenable self-resolution");}then=returned&&(
typeof returned==="object"||typeof returned==="function")&&returned.then;if(isFunction(then)){if(special){then.call(returned,resolve(maxDepth,deferred,Identity,special),resolve(maxDepth,deferred,Thrower,special));}else{maxDepth++;then.call(returned,resolve(maxDepth,deferred,Identity,special),resolve(maxDepth,deferred,Thrower,special),resolve(maxDepth,deferred,Identity,deferred.notifyWith));}}else{if(handler!==Identity){that=undefined;args=[returned];}(special||deferred.resolveWith)(that,args);}},process=special?mightThrow:function(){try{mightThrow();}catch(e){if(jQuery.Deferred.exceptionHook){jQuery.Deferred.exceptionHook(e,process.stackTrace);}if(depth+1>=maxDepth){if(handler!==Thrower){that=undefined;args=[e];}deferred.rejectWith(that,args);}}};if(depth){process();}else{if(jQuery.Deferred.getStackHook){process.stackTrace=jQuery.Deferred.getStackHook();}window.setTimeout(process);}};}return jQuery.Deferred(function(newDefer){tuples[0][3].add(resolve(0,newDefer,isFunction(onProgress)?
onProgress:Identity,newDefer.notifyWith));tuples[1][3].add(resolve(0,newDefer,isFunction(onFulfilled)?onFulfilled:Identity));tuples[2][3].add(resolve(0,newDefer,isFunction(onRejected)?onRejected:Thrower));}).promise();},promise:function(obj){return obj!=null?jQuery.extend(obj,promise):promise;}},deferred={};jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[5];promise[tuple[1]]=list.add;if(stateString){list.add(function(){state=stateString;},tuples[3-i][2].disable,tuples[3-i][3].disable,tuples[0][2].lock,tuples[0][3].lock);}list.add(tuple[3].fire);deferred[tuple[0]]=function(){deferred[tuple[0]+"With"](this===deferred?undefined:this,arguments);return this;};deferred[tuple[0]+"With"]=list.fireWith;});promise.promise(deferred);if(func){func.call(deferred,deferred);}return deferred;},when:function(singleValue){var remaining=arguments.length,i=remaining,resolveContexts=Array(i),resolveValues=slice.call(arguments),primary=jQuery.Deferred(),updateFunc=function(i){return function
(value){resolveContexts[i]=this;resolveValues[i]=arguments.length>1?slice.call(arguments):value;if(!(--remaining)){primary.resolveWith(resolveContexts,resolveValues);}};};if(remaining<=1){adoptValue(singleValue,primary.done(updateFunc(i)).resolve,primary.reject,!remaining);if(primary.state()==="pending"||isFunction(resolveValues[i]&&resolveValues[i].then)){return primary.then();}}while(i--){adoptValue(resolveValues[i],updateFunc(i),primary.reject);}return primary.promise();}});var rerrorNames=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;jQuery.Deferred.exceptionHook=function(error,stack){if(window.console&&window.console.warn&&error&&rerrorNames.test(error.name)){window.console.warn("jQuery.Deferred exception: "+error.message,error.stack,stack);}};jQuery.readyException=function(error){window.setTimeout(function(){throw error;});};var readyList=jQuery.Deferred();jQuery.fn.ready=function(fn){readyList.then(fn).catch(function(error){jQuery.readyException(error);});return this;
};jQuery.extend({isReady:false,readyWait:1,ready:function(wait){if(wait===true?--jQuery.readyWait:jQuery.isReady){return;}jQuery.isReady=true;if(wait!==true&&--jQuery.readyWait>0){return;}readyList.resolveWith(document,[jQuery]);}});jQuery.ready.then=readyList.then;function completed(){document.removeEventListener("DOMContentLoaded",completed);window.removeEventListener("load",completed);jQuery.ready();}if(document.readyState==="complete"||(document.readyState!=="loading"&&!document.documentElement.doScroll)){window.setTimeout(jQuery.ready);}else{document.addEventListener("DOMContentLoaded",completed);window.addEventListener("load",completed);}var access=function(elems,fn,key,value,chainable,emptyGet,raw){var i=0,len=elems.length,bulk=key==null;if(toType(key)==="object"){chainable=true;for(i in key){access(elems,fn,i,key[i],true,emptyGet,raw);}}else if(value!==undefined){chainable=true;if(!isFunction(value)){raw=true;}if(bulk){if(raw){fn.call(elems,value);fn=null;}else{bulk=fn;fn=
function(elem,_key,value){return bulk.call(jQuery(elem),value);};}}if(fn){for(;i<len;i++){fn(elems[i],key,raw?value:value.call(elems[i],i,fn(elems[i],key)));}}}if(chainable){return elems;}if(bulk){return fn.call(elems);}return len?fn(elems[0],key):emptyGet;};var rmsPrefix=/^-ms-/,rdashAlpha=/-([a-z])/g;function fcamelCase(_all,letter){return letter.toUpperCase();}function camelCase(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase);}var acceptData=function(owner){return owner.nodeType===1||owner.nodeType===9||!(+owner.nodeType);};function Data(){this.expando=jQuery.expando+Data.uid++;}Data.uid=1;Data.prototype={cache:function(owner){var value=owner[this.expando];if(!value){value={};if(acceptData(owner)){if(owner.nodeType){owner[this.expando]=value;}else{Object.defineProperty(owner,this.expando,{value:value,configurable:true});}}}return value;},set:function(owner,data,value){var prop,cache=this.cache(owner);if(typeof data==="string"){cache[camelCase(data)]=
value;}else{for(prop in data){cache[camelCase(prop)]=data[prop];}}return cache;},get:function(owner,key){return key===undefined?this.cache(owner):owner[this.expando]&&owner[this.expando][camelCase(key)];},access:function(owner,key,value){if(key===undefined||((key&&typeof key==="string")&&value===undefined)){return this.get(owner,key);}this.set(owner,key,value);return value!==undefined?value:key;},remove:function(owner,key){var i,cache=owner[this.expando];if(cache===undefined){return;}if(key!==undefined){if(Array.isArray(key)){key=key.map(camelCase);}else{key=camelCase(key);key=key in cache?[key]:(key.match(rnothtmlwhite)||[]);}i=key.length;while(i--){delete cache[key[i]];}}if(key===undefined||jQuery.isEmptyObject(cache)){if(owner.nodeType){owner[this.expando]=undefined;}else{delete owner[this.expando];}}},hasData:function(owner){var cache=owner[this.expando];return cache!==undefined&&!jQuery.isEmptyObject(cache);}};var dataPriv=new Data();var dataUser=new Data();var rbrace=
/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,rmultiDash=/[A-Z]/g;function getData(data){if(data==="true"){return true;}if(data==="false"){return false;}if(data==="null"){return null;}if(data===+data+""){return+data;}if(rbrace.test(data)){return JSON.parse(data);}return data;}function dataAttr(elem,key,data){var name;if(data===undefined&&elem.nodeType===1){name="data-"+key.replace(rmultiDash,"-$&").toLowerCase();data=elem.getAttribute(name);if(typeof data==="string"){try{data=getData(data);}catch(e){}dataUser.set(elem,key,data);}else{data=undefined;}}return data;}jQuery.extend({hasData:function(elem){return dataUser.hasData(elem)||dataPriv.hasData(elem);},data:function(elem,name,data){return dataUser.access(elem,name,data);},removeData:function(elem,name){dataUser.remove(elem,name);},_data:function(elem,name,data){return dataPriv.access(elem,name,data);},_removeData:function(elem,name){dataPriv.remove(elem,name);}});jQuery.fn.extend({data:function(key,value){var i,name,data,elem=this[0],attrs=elem&&
elem.attributes;if(key===undefined){if(this.length){data=dataUser.get(elem);if(elem.nodeType===1&&!dataPriv.get(elem,"hasDataAttrs")){i=attrs.length;while(i--){if(attrs[i]){name=attrs[i].name;if(name.indexOf("data-")===0){name=camelCase(name.slice(5));dataAttr(elem,name,data[name]);}}}dataPriv.set(elem,"hasDataAttrs",true);}}return data;}if(typeof key==="object"){return this.each(function(){dataUser.set(this,key);});}return access(this,function(value){var data;if(elem&&value===undefined){data=dataUser.get(elem,key);if(data!==undefined){return data;}data=dataAttr(elem,key);if(data!==undefined){return data;}return;}this.each(function(){dataUser.set(this,key,value);});},null,value,arguments.length>1,null,true);},removeData:function(key){return this.each(function(){dataUser.remove(this,key);});}});jQuery.extend({queue:function(elem,type,data){var queue;if(elem){type=(type||"fx")+"queue";queue=dataPriv.get(elem,type);if(data){if(!queue||Array.isArray(data)){queue=dataPriv.access(elem,type,
jQuery.makeArray(data));}else{queue.push(data);}}return queue||[];}},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function(){jQuery.dequeue(elem,type);};if(fn==="inprogress"){fn=queue.shift();startLength--;}if(fn){if(type==="fx"){queue.unshift("inprogress");}delete hooks.stop;fn.call(elem,next,hooks);}if(!startLength&&hooks){hooks.empty.fire();}},_queueHooks:function(elem,type){var key=type+"queueHooks";return dataPriv.get(elem,key)||dataPriv.access(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){dataPriv.remove(elem,[type+"queue",key]);})});}});jQuery.fn.extend({queue:function(type,data){var setter=2;if(typeof type!=="string"){data=type;type="fx";setter--;}if(arguments.length<setter){return jQuery.queue(this[0],type);}return data===undefined?this:this.each(function(){var queue=jQuery.queue(this,type,data);jQuery._queueHooks(this,type);if(type==="fx"&&queue
[0]!=="inprogress"){jQuery.dequeue(this,type);}});},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type);});},clearQueue:function(type){return this.queue(type||"fx",[]);},promise:function(type,obj){var tmp,count=1,defer=jQuery.Deferred(),elements=this,i=this.length,resolve=function(){if(!(--count)){defer.resolveWith(elements,[elements]);}};if(typeof type!=="string"){obj=type;type=undefined;}type=type||"fx";while(i--){tmp=dataPriv.get(elements[i],type+"queueHooks");if(tmp&&tmp.empty){count++;tmp.empty.add(resolve);}}resolve();return defer.promise(obj);}});var pnum=(/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;var rcssNum=new RegExp("^(?:([+-])=|)("+pnum+")([a-z%]*)$","i");var cssExpand=["Top","Right","Bottom","Left"];var documentElement=document.documentElement;var isAttached=function(elem){return jQuery.contains(elem.ownerDocument,elem);},composed={composed:true};if(documentElement.getRootNode){isAttached=function(elem){return jQuery.contains(elem.ownerDocument
,elem)||elem.getRootNode(composed)===elem.ownerDocument;};}var isHiddenWithinTree=function(elem,el){elem=el||elem;return elem.style.display==="none"||elem.style.display===""&&isAttached(elem)&&jQuery.css(elem,"display")==="none";};function adjustCSS(elem,prop,valueParts,tween){var adjusted,scale,maxIterations=20,currentValue=tween?function(){return tween.cur();}:function(){return jQuery.css(elem,prop,"");},initial=currentValue(),unit=valueParts&&valueParts[3]||(jQuery.cssNumber[prop]?"":"px"),initialInUnit=elem.nodeType&&(jQuery.cssNumber[prop]||unit!=="px"&&+initial)&&rcssNum.exec(jQuery.css(elem,prop));if(initialInUnit&&initialInUnit[3]!==unit){initial=initial/2;unit=unit||initialInUnit[3];initialInUnit=+initial||1;while(maxIterations--){jQuery.style(elem,prop,initialInUnit+unit);if((1-scale)*(1-(scale=currentValue()/initial||0.5))<=0){maxIterations=0;}initialInUnit=initialInUnit/scale;}initialInUnit=initialInUnit*2;jQuery.style(elem,prop,initialInUnit+unit);valueParts=valueParts||[]
;}if(valueParts){initialInUnit=+initialInUnit||+initial||0;adjusted=valueParts[1]?initialInUnit+(valueParts[1]+1)*valueParts[2]:+valueParts[2];if(tween){tween.unit=unit;tween.start=initialInUnit;tween.end=adjusted;}}return adjusted;}var defaultDisplayMap={};function getDefaultDisplay(elem){var temp,doc=elem.ownerDocument,nodeName=elem.nodeName,display=defaultDisplayMap[nodeName];if(display){return display;}temp=doc.body.appendChild(doc.createElement(nodeName));display=jQuery.css(temp,"display");temp.parentNode.removeChild(temp);if(display==="none"){display="block";}defaultDisplayMap[nodeName]=display;return display;}function showHide(elements,show){var display,elem,values=[],index=0,length=elements.length;for(;index<length;index++){elem=elements[index];if(!elem.style){continue;}display=elem.style.display;if(show){if(display==="none"){values[index]=dataPriv.get(elem,"display")||null;if(!values[index]){elem.style.display="";}}if(elem.style.display===""&&isHiddenWithinTree(elem)){values[
index]=getDefaultDisplay(elem);}}else{if(display!=="none"){values[index]="none";dataPriv.set(elem,"display",display);}}}for(index=0;index<length;index++){if(values[index]!=null){elements[index].style.display=values[index];}}return elements;}jQuery.fn.extend({show:function(){return showHide(this,true);},hide:function(){return showHide(this);},toggle:function(state){if(typeof state==="boolean"){return state?this.show():this.hide();}return this.each(function(){if(isHiddenWithinTree(this)){jQuery(this).show();}else{jQuery(this).hide();}});}});var rcheckableType=(/^(?:checkbox|radio)$/i);var rtagName=(/<([a-z][^\/\0>\x20\t\r\n\f]*)/i);var rscriptType=(/^$|^module$|\/(?:java|ecma)script/i);(function(){var fragment=document.createDocumentFragment(),div=fragment.appendChild(document.createElement("div")),input=document.createElement("input");input.setAttribute("type","radio");input.setAttribute("checked","checked");input.setAttribute("name","t");div.appendChild(input);support.checkClone=div.
cloneNode(true).cloneNode(true).lastChild.checked;div.innerHTML="<textarea>x</textarea>";support.noCloneChecked=!!div.cloneNode(true).lastChild.defaultValue;div.innerHTML="<option></option>";support.option=!!div.lastChild;})();var wrapMap={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;if(!support.option){wrapMap.optgroup=wrapMap.option=[1,"<select multiple='multiple'>","</select>"];}function getAll(context,tag){var ret;if(typeof context.getElementsByTagName!=="undefined"){ret=context.getElementsByTagName(tag||"*");}else if(typeof context.querySelectorAll!=="undefined"){ret=context.querySelectorAll(tag||"*");}else{ret=[];}if(tag===undefined||tag&&nodeName(context,tag)){return jQuery.merge([context],ret);}return ret;}function setGlobalEval(elems
,refElements){var i=0,l=elems.length;for(;i<l;i++){dataPriv.set(elems[i],"globalEval",!refElements||dataPriv.get(refElements[i],"globalEval"));}}var rhtml=/<|&#?\w+;/;function buildFragment(elems,context,scripts,selection,ignored){var elem,tmp,tag,wrap,attached,j,fragment=context.createDocumentFragment(),nodes=[],i=0,l=elems.length;for(;i<l;i++){elem=elems[i];if(elem||elem===0){if(toType(elem)==="object"){jQuery.merge(nodes,elem.nodeType?[elem]:elem);}else if(!rhtml.test(elem)){nodes.push(context.createTextNode(elem));}else{tmp=tmp||fragment.appendChild(context.createElement("div"));tag=(rtagName.exec(elem)||["",""])[1].toLowerCase();wrap=wrapMap[tag]||wrapMap._default;tmp.innerHTML=wrap[1]+jQuery.htmlPrefilter(elem)+wrap[2];j=wrap[0];while(j--){tmp=tmp.lastChild;}jQuery.merge(nodes,tmp.childNodes);tmp=fragment.firstChild;tmp.textContent="";}}}fragment.textContent="";i=0;while((elem=nodes[i++])){if(selection&&jQuery.inArray(elem,selection)>-1){if(ignored){ignored.push(elem);}continue;}
attached=isAttached(elem);tmp=getAll(fragment.appendChild(elem),"script");if(attached){setGlobalEval(tmp);}if(scripts){j=0;while((elem=tmp[j++])){if(rscriptType.test(elem.type||"")){scripts.push(elem);}}}}return fragment;}var rtypenamespace=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return true;}function returnFalse(){return false;}function expectSync(elem,type){return(elem===safeActiveElement())===(type==="focus");}function safeActiveElement(){try{return document.activeElement;}catch(err){}}function on(elem,types,selector,data,fn,one){var origFn,type;if(typeof types==="object"){if(typeof selector!=="string"){data=data||selector;selector=undefined;}for(type in types){on(elem,type,selector,data,types[type],one);}return elem;}if(data==null&&fn==null){fn=selector;data=selector=undefined;}else if(fn==null){if(typeof selector==="string"){fn=data;data=undefined;}else{fn=data;data=selector;selector=undefined;}}if(fn===false){fn=returnFalse;}else if(!fn){return elem;}if(one===1){origFn=fn;fn=
function(event){jQuery().off(event);return origFn.apply(this,arguments);};fn.guid=origFn.guid||(origFn.guid=jQuery.guid++);}return elem.each(function(){jQuery.event.add(this,types,fn,data,selector);});}jQuery.event={global:{},add:function(elem,types,handler,data,selector){var handleObjIn,eventHandle,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.get(elem);if(!acceptData(elem)){return;}if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;selector=handleObjIn.selector;}if(selector){jQuery.find.matchesSelector(documentElement,selector);}if(!handler.guid){handler.guid=jQuery.guid++;}if(!(events=elemData.events)){events=elemData.events=Object.create(null);}if(!(eventHandle=elemData.handle)){eventHandle=elemData.handle=function(e){return typeof jQuery!=="undefined"&&jQuery.event.triggered!==e.type?jQuery.event.dispatch.apply(elem,arguments):undefined;};}types=(types||"").match(rnothtmlwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace
.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){continue;}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;special=jQuery.event.special[type]||{};handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn);if(!(handlers=events[type])){handlers=events[type]=[];handlers.delegateCount=0;if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){if(elem.addEventListener){elem.addEventListener(type,eventHandle);}}}if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid;}}if(selector){handlers.splice(handlers.delegateCount++,0,handleObj);}else{handlers.push(handleObj);}jQuery.event.global[type]=true;}},remove:function(elem,types,handler,selector,
mappedTypes){var j,origCount,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.hasData(elem)&&dataPriv.get(elem);if(!elemData||!(events=elemData.events)){return;}types=(types||"").match(rnothtmlwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){for(type in events){jQuery.event.remove(elem,type+types[t],handler,selector,true);}continue;}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;handlers=events[type]||[];tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)");origCount=j=handlers.length;while(j--){handleObj=handlers[j];if((mappedTypes||origType===handleObj.origType)&&(!handler||handler.guid===handleObj.guid)&&(!tmp||tmp.test(handleObj.namespace))&&(!selector||selector===handleObj.selector||selector==="**"&&handleObj.selector)){handlers.splice(j,1);if(handleObj.selector){handlers.
delegateCount--;}if(special.remove){special.remove.call(elem,handleObj);}}}if(origCount&&!handlers.length){if(!special.teardown||special.teardown.call(elem,namespaces,elemData.handle)===false){jQuery.removeEvent(elem,type,elemData.handle);}delete events[type];}}if(jQuery.isEmptyObject(events)){dataPriv.remove(elem,"handle events");}},dispatch:function(nativeEvent){var i,j,ret,matched,handleObj,handlerQueue,args=new Array(arguments.length),event=jQuery.event.fix(nativeEvent),handlers=(dataPriv.get(this,"events")||Object.create(null))[event.type]||[],special=jQuery.event.special[event.type]||{};args[0]=event;for(i=1;i<arguments.length;i++){args[i]=arguments[i];}event.delegateTarget=this;if(special.preDispatch&&special.preDispatch.call(this,event)===false){return;}handlerQueue=jQuery.event.handlers.call(this,event,handlers);i=0;while((matched=handlerQueue[i++])&&!event.isPropagationStopped()){event.currentTarget=matched.elem;j=0;while((handleObj=matched.handlers[j++])&&!event.
isImmediatePropagationStopped()){if(!event.rnamespace||handleObj.namespace===false||event.rnamespace.test(handleObj.namespace)){event.handleObj=handleObj;event.data=handleObj.data;ret=((jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args);if(ret!==undefined){if((event.result=ret)===false){event.preventDefault();event.stopPropagation();}}}}}if(special.postDispatch){special.postDispatch.call(this,event);}return event.result;},handlers:function(event,handlers){var i,handleObj,sel,matchedHandlers,matchedSelectors,handlerQueue=[],delegateCount=handlers.delegateCount,cur=event.target;if(delegateCount&&cur.nodeType&&!(event.type==="click"&&event.button>=1)){for(;cur!==this;cur=cur.parentNode||this){if(cur.nodeType===1&&!(event.type==="click"&&cur.disabled===true)){matchedHandlers=[];matchedSelectors={};for(i=0;i<delegateCount;i++){handleObj=handlers[i];sel=handleObj.selector+" ";if(matchedSelectors[sel]===undefined){matchedSelectors[sel]=handleObj.
needsContext?jQuery(sel,this).index(cur)>-1:jQuery.find(sel,this,null,[cur]).length;}if(matchedSelectors[sel]){matchedHandlers.push(handleObj);}}if(matchedHandlers.length){handlerQueue.push({elem:cur,handlers:matchedHandlers});}}}}cur=this;if(delegateCount<handlers.length){handlerQueue.push({elem:cur,handlers:handlers.slice(delegateCount)});}return handlerQueue;},addProp:function(name,hook){Object.defineProperty(jQuery.Event.prototype,name,{enumerable:true,configurable:true,get:isFunction(hook)?function(){if(this.originalEvent){return hook(this.originalEvent);}}:function(){if(this.originalEvent){return this.originalEvent[name];}},set:function(value){Object.defineProperty(this,name,{enumerable:true,configurable:true,writable:true,value:value});}});},fix:function(originalEvent){return originalEvent[jQuery.expando]?originalEvent:new jQuery.Event(originalEvent);},special:{load:{noBubble:true},click:{setup:function(data){var el=this||data;if(rcheckableType.test(el.type)&&el.click&&nodeName(
el,"input")){leverageNative(el,"click",returnTrue);}return false;},trigger:function(data){var el=this||data;if(rcheckableType.test(el.type)&&el.click&&nodeName(el,"input")){leverageNative(el,"click");}return true;},_default:function(event){var target=event.target;return rcheckableType.test(target.type)&&target.click&&nodeName(target,"input")&&dataPriv.get(target,"click")||nodeName(target,"a");}},beforeunload:{postDispatch:function(event){if(event.result!==undefined&&event.originalEvent){event.originalEvent.returnValue=event.result;}}}}};function leverageNative(el,type,expectSync){if(!expectSync){if(dataPriv.get(el,type)===undefined){jQuery.event.add(el,type,returnTrue);}return;}dataPriv.set(el,type,false);jQuery.event.add(el,type,{namespace:false,handler:function(event){var notAsync,result,saved=dataPriv.get(this,type);if((event.isTrigger&1)&&this[type]){if(!saved.length){saved=slice.call(arguments);dataPriv.set(this,type,saved);notAsync=expectSync(this,type);this[type]();result=
dataPriv.get(this,type);if(saved!==result||notAsync){dataPriv.set(this,type,false);}else{result={};}if(saved!==result){event.stopImmediatePropagation();event.preventDefault();return result&&result.value;}}else if((jQuery.event.special[type]||{}).delegateType){event.stopPropagation();}}else if(saved.length){dataPriv.set(this,type,{value:jQuery.event.trigger(jQuery.extend(saved[0],jQuery.Event.prototype),saved.slice(1),this)});event.stopImmediatePropagation();}}});}jQuery.removeEvent=function(elem,type,handle){if(elem.removeEventListener){elem.removeEventListener(type,handle);}};jQuery.Event=function(src,props){if(!(this instanceof jQuery.Event)){return new jQuery.Event(src,props);}if(src&&src.type){this.originalEvent=src;this.type=src.type;this.isDefaultPrevented=src.defaultPrevented||src.defaultPrevented===undefined&&src.returnValue===false?returnTrue:returnFalse;this.target=(src.target&&src.target.nodeType===3)?src.target.parentNode:src.target;this.currentTarget=src.currentTarget;this
.relatedTarget=src.relatedTarget;}else{this.type=src;}if(props){jQuery.extend(this,props);}this.timeStamp=src&&src.timeStamp||Date.now();this[jQuery.expando]=true;};jQuery.Event.prototype={constructor:jQuery.Event,isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,isSimulated:false,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=returnTrue;if(e&&!this.isSimulated){e.preventDefault();}},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=returnTrue;if(e&&!this.isSimulated){e.stopPropagation();}},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=returnTrue;if(e&&!this.isSimulated){e.stopImmediatePropagation();}this.stopPropagation();}};jQuery.each({altKey:true,bubbles:true,cancelable:true,changedTouches:true,ctrlKey:true,detail:true,eventPhase:true,metaKey:true,pageX:true,pageY:true,shiftKey:true,view:true,"char":true,code:true,charCode
:true,key:true,keyCode:true,button:true,buttons:true,clientX:true,clientY:true,offsetX:true,offsetY:true,pointerId:true,pointerType:true,screenX:true,screenY:true,targetTouches:true,toElement:true,touches:true,which:true},jQuery.event.addProp);jQuery.each({focus:"focusin",blur:"focusout"},function(type,delegateType){jQuery.event.special[type]={setup:function(){leverageNative(this,type,expectSync);return false;},trigger:function(){leverageNative(this,type);return true;},_default:function(event){return dataPriv.get(event.target,type);},delegateType:delegateType};});jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(orig,fix){jQuery.event.special[orig]={delegateType:fix,bindType:fix,handle:function(event){var ret,target=this,related=event.relatedTarget,handleObj=event.handleObj;if(!related||(related!==target&&!jQuery.contains(target,related))){event.type=handleObj.origType;ret=handleObj.handler.apply(this,arguments);
event.type=fix;}return ret;}};});jQuery.fn.extend({on:function(types,selector,data,fn){return on(this,types,selector,data,fn);},one:function(types,selector,data,fn){return on(this,types,selector,data,fn,1);},off:function(types,selector,fn){var handleObj,type;if(types&&types.preventDefault&&types.handleObj){handleObj=types.handleObj;jQuery(types.delegateTarget).off(handleObj.namespace?handleObj.origType+"."+handleObj.namespace:handleObj.origType,handleObj.selector,handleObj.handler);return this;}if(typeof types==="object"){for(type in types){this.off(type,selector,types[type]);}return this;}if(selector===false||typeof selector==="function"){fn=selector;selector=undefined;}if(fn===false){fn=returnFalse;}return this.each(function(){jQuery.event.remove(this,types,fn,selector);});}});var rnoInnerhtml=/<script|<style|<link/i,rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,rcleanScript=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function manipulationTarget(elem,content){if(nodeName(elem,"table")&&nodeName(
content.nodeType!==11?content:content.firstChild,"tr")){return jQuery(elem).children("tbody")[0]||elem;}return elem;}function disableScript(elem){elem.type=(elem.getAttribute("type")!==null)+"/"+elem.type;return elem;}function restoreScript(elem){if((elem.type||"").slice(0,5)==="true/"){elem.type=elem.type.slice(5);}else{elem.removeAttribute("type");}return elem;}function cloneCopyEvent(src,dest){var i,l,type,pdataOld,udataOld,udataCur,events;if(dest.nodeType!==1){return;}if(dataPriv.hasData(src)){pdataOld=dataPriv.get(src);events=pdataOld.events;if(events){dataPriv.remove(dest,"handle events");for(type in events){for(i=0,l=events[type].length;i<l;i++){jQuery.event.add(dest,type,events[type][i]);}}}}if(dataUser.hasData(src)){udataOld=dataUser.access(src);udataCur=jQuery.extend({},udataOld);dataUser.set(dest,udataCur);}}function fixInput(src,dest){var nodeName=dest.nodeName.toLowerCase();if(nodeName==="input"&&rcheckableType.test(src.type)){dest.checked=src.checked;}else if(nodeName===
"input"||nodeName==="textarea"){dest.defaultValue=src.defaultValue;}}function domManip(collection,args,callback,ignored){args=flat(args);var fragment,first,scripts,hasScripts,node,doc,i=0,l=collection.length,iNoClone=l-1,value=args[0],valueIsFunction=isFunction(value);if(valueIsFunction||(l>1&&typeof value==="string"&&!support.checkClone&&rchecked.test(value))){return collection.each(function(index){var self=collection.eq(index);if(valueIsFunction){args[0]=value.call(this,index,self.html());}domManip(self,args,callback,ignored);});}if(l){fragment=buildFragment(args,collection[0].ownerDocument,false,collection,ignored);first=fragment.firstChild;if(fragment.childNodes.length===1){fragment=first;}if(first||ignored){scripts=jQuery.map(getAll(fragment,"script"),disableScript);hasScripts=scripts.length;for(;i<l;i++){node=fragment;if(i!==iNoClone){node=jQuery.clone(node,true,true);if(hasScripts){jQuery.merge(scripts,getAll(node,"script"));}}callback.call(collection[i],node,i);}if(hasScripts){
doc=scripts[scripts.length-1].ownerDocument;jQuery.map(scripts,restoreScript);for(i=0;i<hasScripts;i++){node=scripts[i];if(rscriptType.test(node.type||"")&&!dataPriv.access(node,"globalEval")&&jQuery.contains(doc,node)){if(node.src&&(node.type||"").toLowerCase()!=="module"){if(jQuery._evalUrl&&!node.noModule){jQuery._evalUrl(node.src,{nonce:node.nonce||node.getAttribute("nonce")},doc);}}else{DOMEval(node.textContent.replace(rcleanScript,""),node,doc);}}}}}}return collection;}function remove(elem,selector,keepData){var node,nodes=selector?jQuery.filter(selector,elem):elem,i=0;for(;(node=nodes[i])!=null;i++){if(!keepData&&node.nodeType===1){jQuery.cleanData(getAll(node));}if(node.parentNode){if(keepData&&isAttached(node)){setGlobalEval(getAll(node,"script"));}node.parentNode.removeChild(node);}}return elem;}jQuery.extend({htmlPrefilter:function(html){return html;},clone:function(elem,dataAndEvents,deepDataAndEvents){var i,l,srcElements,destElements,clone=elem.cloneNode(true),inPage=
isAttached(elem);if(!support.noCloneChecked&&(elem.nodeType===1||elem.nodeType===11)&&!jQuery.isXMLDoc(elem)){destElements=getAll(clone);srcElements=getAll(elem);for(i=0,l=srcElements.length;i<l;i++){fixInput(srcElements[i],destElements[i]);}}if(dataAndEvents){if(deepDataAndEvents){srcElements=srcElements||getAll(elem);destElements=destElements||getAll(clone);for(i=0,l=srcElements.length;i<l;i++){cloneCopyEvent(srcElements[i],destElements[i]);}}else{cloneCopyEvent(elem,clone);}}destElements=getAll(clone,"script");if(destElements.length>0){setGlobalEval(destElements,!inPage&&getAll(elem,"script"));}return clone;},cleanData:function(elems){var data,elem,type,special=jQuery.event.special,i=0;for(;(elem=elems[i])!==undefined;i++){if(acceptData(elem)){if((data=elem[dataPriv.expando])){if(data.events){for(type in data.events){if(special[type]){jQuery.event.remove(elem,type);}else{jQuery.removeEvent(elem,type,data.handle);}}}elem[dataPriv.expando]=undefined;}if(elem[dataUser.expando]){elem[
dataUser.expando]=undefined;}}}}});jQuery.fn.extend({detach:function(selector){return remove(this,selector,true);},remove:function(selector){return remove(this,selector);},text:function(value){return access(this,function(value){return value===undefined?jQuery.text(this):this.empty().each(function(){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){this.textContent=value;}});},null,value,arguments.length);},append:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.appendChild(elem);}});},prepend:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild);}});},before:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this);}});},after:function(){return domManip(
this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling);}});},empty:function(){var elem,i=0;for(;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false));elem.textContent="";}}return this;},clone:function(dataAndEvents,deepDataAndEvents){dataAndEvents=dataAndEvents==null?false:dataAndEvents;deepDataAndEvents=deepDataAndEvents==null?dataAndEvents:deepDataAndEvents;return this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents);});},html:function(value){return access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===undefined&&elem.nodeType===1){return elem.innerHTML;}if(typeof value==="string"&&!rnoInnerhtml.test(value)&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=jQuery.htmlPrefilter(value);try{for(;i<l;i++){elem=this[i]||{};if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false));elem.innerHTML=value;}}elem=0;}catch(e){}}if(elem){this.empty().
append(value);}},null,value,arguments.length);},replaceWith:function(){var ignored=[];return domManip(this,arguments,function(elem){var parent=this.parentNode;if(jQuery.inArray(this,ignored)<0){jQuery.cleanData(getAll(this));if(parent){parent.replaceChild(elem,this);}}},ignored);}});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){var elems,ret=[],insert=jQuery(selector),last=insert.length-1,i=0;for(;i<=last;i++){elems=i===last?this:this.clone(true);jQuery(insert[i])[original](elems);push.apply(ret,elems.get());}return this.pushStack(ret);};});var rnumnonpx=new RegExp("^("+pnum+")(?!px)[a-z%]+$","i");var rcustomProp=/^--/;var getStyles=function(elem){var view=elem.ownerDocument.defaultView;if(!view||!view.opener){view=window;}return view.getComputedStyle(elem);};var swap=function(elem,options,callback){var ret,name,old={};for(name in options){old[name]=elem.
style[name];elem.style[name]=options[name];}ret=callback.call(elem);for(name in options){elem.style[name]=old[name];}return ret;};var rboxStyle=new RegExp(cssExpand.join("|"),"i");var whitespace="[\\x20\\t\\r\\n\\f]";var rtrimCSS=new RegExp("^"+whitespace+"+|((?:^|[^\\\\])(?:\\\\.)*)"+whitespace+"+$","g");(function(){function computeStyleTests(){if(!div){return;}container.style.cssText="position:absolute;left:-11111px;width:60px;"+"margin-top:1px;padding:0;border:0";div.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;"+"margin:auto;border:1px;padding:1px;"+"width:60%;top:1%";documentElement.appendChild(container).appendChild(div);var divStyle=window.getComputedStyle(div);pixelPositionVal=divStyle.top!=="1%";reliableMarginLeftVal=roundPixelMeasures(divStyle.marginLeft)===12;div.style.right="60%";pixelBoxStylesVal=roundPixelMeasures(divStyle.right)===36;boxSizingReliableVal=roundPixelMeasures(divStyle.width)===36;div.style.position="absolute";
scrollboxSizeVal=roundPixelMeasures(div.offsetWidth/3)===12;documentElement.removeChild(container);div=null;}function roundPixelMeasures(measure){return Math.round(parseFloat(measure));}var pixelPositionVal,boxSizingReliableVal,scrollboxSizeVal,pixelBoxStylesVal,reliableTrDimensionsVal,reliableMarginLeftVal,container=document.createElement("div"),div=document.createElement("div");if(!div.style){return;}div.style.backgroundClip="content-box";div.cloneNode(true).style.backgroundClip="";support.clearCloneStyle=div.style.backgroundClip==="content-box";jQuery.extend(support,{boxSizingReliable:function(){computeStyleTests();return boxSizingReliableVal;},pixelBoxStyles:function(){computeStyleTests();return pixelBoxStylesVal;},pixelPosition:function(){computeStyleTests();return pixelPositionVal;},reliableMarginLeft:function(){computeStyleTests();return reliableMarginLeftVal;},scrollboxSize:function(){computeStyleTests();return scrollboxSizeVal;},reliableTrDimensions:function(){var table,tr,
trChild,trStyle;if(reliableTrDimensionsVal==null){table=document.createElement("table");tr=document.createElement("tr");trChild=document.createElement("div");table.style.cssText="position:absolute;left:-11111px;border-collapse:separate";tr.style.cssText="border:1px solid";tr.style.height="1px";trChild.style.height="9px";trChild.style.display="block";documentElement.appendChild(table).appendChild(tr).appendChild(trChild);trStyle=window.getComputedStyle(tr);reliableTrDimensionsVal=(parseInt(trStyle.height,10)+parseInt(trStyle.borderTopWidth,10)+parseInt(trStyle.borderBottomWidth,10))===tr.offsetHeight;documentElement.removeChild(table);}return reliableTrDimensionsVal;}});})();function curCSS(elem,name,computed){var width,minWidth,maxWidth,ret,isCustomProp=rcustomProp.test(name),style=elem.style;computed=computed||getStyles(elem);if(computed){ret=computed.getPropertyValue(name)||computed[name];if(isCustomProp){ret=ret.replace(rtrimCSS,"$1");}if(ret===""&&!isAttached(elem)){ret=jQuery.
style(elem,name);}if(!support.pixelBoxStyles()&&rnumnonpx.test(ret)&&rboxStyle.test(name)){width=style.width;minWidth=style.minWidth;maxWidth=style.maxWidth;style.minWidth=style.maxWidth=style.width=ret;ret=computed.width;style.width=width;style.minWidth=minWidth;style.maxWidth=maxWidth;}}return ret!==undefined?ret+"":ret;}function addGetHookIf(conditionFn,hookFn){return{get:function(){if(conditionFn()){delete this.get;return;}return(this.get=hookFn).apply(this,arguments);}};}var cssPrefixes=["Webkit","Moz","ms"],emptyStyle=document.createElement("div").style,vendorProps={};function vendorPropName(name){var capName=name[0].toUpperCase()+name.slice(1),i=cssPrefixes.length;while(i--){name=cssPrefixes[i]+capName;if(name in emptyStyle){return name;}}}function finalPropName(name){var final=jQuery.cssProps[name]||vendorProps[name];if(final){return final;}if(name in emptyStyle){return name;}return vendorProps[name]=vendorPropName(name)||name;}var rdisplayswap=/^(none|table(?!-c[ea]).+)/,
cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:"0",fontWeight:"400"};function setPositiveNumber(_elem,value,subtract){var matches=rcssNum.exec(value);return matches?Math.max(0,matches[2]-(subtract||0))+(matches[3]||"px"):value;}function boxModelAdjustment(elem,dimension,box,isBorderBox,styles,computedVal){var i=dimension==="width"?1:0,extra=0,delta=0;if(box===(isBorderBox?"border":"content")){return 0;}for(;i<4;i+=2){if(box==="margin"){delta+=jQuery.css(elem,box+cssExpand[i],true,styles);}if(!isBorderBox){delta+=jQuery.css(elem,"padding"+cssExpand[i],true,styles);if(box!=="padding"){delta+=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles);}else{extra+=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles);}}else{if(box==="content"){delta-=jQuery.css(elem,"padding"+cssExpand[i],true,styles);}if(box!=="margin"){delta-=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles);}}}if(!isBorderBox&&computedVal>=0){delta+=Math
.max(0,Math.ceil(elem["offset"+dimension[0].toUpperCase()+dimension.slice(1)]-computedVal-delta-extra-0.5))||0;}return delta;}function getWidthOrHeight(elem,dimension,extra){var styles=getStyles(elem),boxSizingNeeded=!support.boxSizingReliable()||extra,isBorderBox=boxSizingNeeded&&jQuery.css(elem,"boxSizing",false,styles)==="border-box",valueIsBorderBox=isBorderBox,val=curCSS(elem,dimension,styles),offsetProp="offset"+dimension[0].toUpperCase()+dimension.slice(1);if(rnumnonpx.test(val)){if(!extra){return val;}val="auto";}if((!support.boxSizingReliable()&&isBorderBox||!support.reliableTrDimensions()&&nodeName(elem,"tr")||val==="auto"||!parseFloat(val)&&jQuery.css(elem,"display",false,styles)==="inline")&&elem.getClientRects().length){isBorderBox=jQuery.css(elem,"boxSizing",false,styles)==="border-box";valueIsBorderBox=offsetProp in elem;if(valueIsBorderBox){val=elem[offsetProp];}}val=parseFloat(val)||0;return(val+boxModelAdjustment(elem,dimension,extra||(isBorderBox?"border":"content"),
valueIsBorderBox,styles,val))+"px";}jQuery.extend({cssHooks:{opacity:{get:function(elem,computed){if(computed){var ret=curCSS(elem,"opacity");return ret===""?"1":ret;}}}},cssNumber:{"animationIterationCount":true,"columnCount":true,"fillOpacity":true,"flexGrow":true,"flexShrink":true,"fontWeight":true,"gridArea":true,"gridColumn":true,"gridColumnEnd":true,"gridColumnStart":true,"gridRow":true,"gridRowEnd":true,"gridRowStart":true,"lineHeight":true,"opacity":true,"order":true,"orphans":true,"widows":true,"zIndex":true,"zoom":true},cssProps:{},style:function(elem,name,value,extra){if(!elem||elem.nodeType===3||elem.nodeType===8||!elem.style){return;}var ret,type,hooks,origName=camelCase(name),isCustomProp=rcustomProp.test(name),style=elem.style;if(!isCustomProp){name=finalPropName(origName);}hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName];if(value!==undefined){type=typeof value;if(type==="string"&&(ret=rcssNum.exec(value))&&ret[1]){value=adjustCSS(elem,name,ret);type="number";}if(
value==null||value!==value){return;}if(type==="number"&&!isCustomProp){value+=ret&&ret[3]||(jQuery.cssNumber[origName]?"":"px");}if(!support.clearCloneStyle&&value===""&&name.indexOf("background")===0){style[name]="inherit";}if(!hooks||!("set"in hooks)||(value=hooks.set(elem,value,extra))!==undefined){if(isCustomProp){style.setProperty(name,value);}else{style[name]=value;}}}else{if(hooks&&"get"in hooks&&(ret=hooks.get(elem,false,extra))!==undefined){return ret;}return style[name];}},css:function(elem,name,extra,styles){var val,num,hooks,origName=camelCase(name),isCustomProp=rcustomProp.test(name);if(!isCustomProp){name=finalPropName(origName);}hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName];if(hooks&&"get"in hooks){val=hooks.get(elem,true,extra);}if(val===undefined){val=curCSS(elem,name,styles);}if(val==="normal"&&name in cssNormalTransform){val=cssNormalTransform[name];}if(extra===""||extra){num=parseFloat(val);return extra===true||isFinite(num)?num||0:val;}return val;}});
jQuery.each(["height","width"],function(_i,dimension){jQuery.cssHooks[dimension]={get:function(elem,computed,extra){if(computed){return rdisplayswap.test(jQuery.css(elem,"display"))&&(!elem.getClientRects().length||!elem.getBoundingClientRect().width)?swap(elem,cssShow,function(){return getWidthOrHeight(elem,dimension,extra);}):getWidthOrHeight(elem,dimension,extra);}},set:function(elem,value,extra){var matches,styles=getStyles(elem),scrollboxSizeBuggy=!support.scrollboxSize()&&styles.position==="absolute",boxSizingNeeded=scrollboxSizeBuggy||extra,isBorderBox=boxSizingNeeded&&jQuery.css(elem,"boxSizing",false,styles)==="border-box",subtract=extra?boxModelAdjustment(elem,dimension,extra,isBorderBox,styles):0;if(isBorderBox&&scrollboxSizeBuggy){subtract-=Math.ceil(elem["offset"+dimension[0].toUpperCase()+dimension.slice(1)]-parseFloat(styles[dimension])-boxModelAdjustment(elem,dimension,"border",false,styles)-0.5);}if(subtract&&(matches=rcssNum.exec(value))&&(matches[3]||"px")!=="px"){
elem.style[dimension]=value;value=jQuery.css(elem,dimension);}return setPositiveNumber(elem,value,subtract);}};});jQuery.cssHooks.marginLeft=addGetHookIf(support.reliableMarginLeft,function(elem,computed){if(computed){return(parseFloat(curCSS(elem,"marginLeft"))||elem.getBoundingClientRect().left-swap(elem,{marginLeft:0},function(){return elem.getBoundingClientRect().left;}))+"px";}});jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function(value){var i=0,expanded={},parts=typeof value==="string"?value.split(" "):[value];for(;i<4;i++){expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0];}return expanded;}};if(prefix!=="margin"){jQuery.cssHooks[prefix+suffix].set=setPositiveNumber;}});jQuery.fn.extend({css:function(name,value){return access(this,function(elem,name,value){var styles,len,map={},i=0;if(Array.isArray(name)){styles=getStyles(elem);len=name.length;for(;i<len;i++){map[name[i]]=jQuery.css(elem,name[
i],false,styles);}return map;}return value!==undefined?jQuery.style(elem,name,value):jQuery.css(elem,name);},name,value,arguments.length>1);}});function Tween(elem,options,prop,end,easing){return new Tween.prototype.init(elem,options,prop,end,easing);}jQuery.Tween=Tween;Tween.prototype={constructor:Tween,init:function(elem,options,prop,end,easing,unit){this.elem=elem;this.prop=prop;this.easing=easing||jQuery.easing._default;this.options=options;this.start=this.now=this.cur();this.end=end;this.unit=unit||(jQuery.cssNumber[prop]?"":"px");},cur:function(){var hooks=Tween.propHooks[this.prop];return hooks&&hooks.get?hooks.get(this):Tween.propHooks._default.get(this);},run:function(percent){var eased,hooks=Tween.propHooks[this.prop];if(this.options.duration){this.pos=eased=jQuery.easing[this.easing](percent,this.options.duration*percent,0,1,this.options.duration);}else{this.pos=eased=percent;}this.now=(this.end-this.start)*eased+this.start;if(this.options.step){this.options.step.call(this.
elem,this.now,this);}if(hooks&&hooks.set){hooks.set(this);}else{Tween.propHooks._default.set(this);}return this;}};Tween.prototype.init.prototype=Tween.prototype;Tween.propHooks={_default:{get:function(tween){var result;if(tween.elem.nodeType!==1||tween.elem[tween.prop]!=null&&tween.elem.style[tween.prop]==null){return tween.elem[tween.prop];}result=jQuery.css(tween.elem,tween.prop,"");return!result||result==="auto"?0:result;},set:function(tween){if(jQuery.fx.step[tween.prop]){jQuery.fx.step[tween.prop](tween);}else if(tween.elem.nodeType===1&&(jQuery.cssHooks[tween.prop]||tween.elem.style[finalPropName(tween.prop)]!=null)){jQuery.style(tween.elem,tween.prop,tween.now+tween.unit);}else{tween.elem[tween.prop]=tween.now;}}}};Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(tween){if(tween.elem.nodeType&&tween.elem.parentNode){tween.elem[tween.prop]=tween.now;}}};jQuery.easing={linear:function(p){return p;},swing:function(p){return 0.5-Math.cos(p*Math.PI)/2;},_default:
"swing"};jQuery.fx=Tween.prototype.init;jQuery.fx.step={};var fxNow,inProgress,rfxtypes=/^(?:toggle|show|hide)$/,rrun=/queueHooks$/;function schedule(){if(inProgress){if(document.hidden===false&&window.requestAnimationFrame){window.requestAnimationFrame(schedule);}else{window.setTimeout(schedule,jQuery.fx.interval);}jQuery.fx.tick();}}function createFxNow(){window.setTimeout(function(){fxNow=undefined;});return(fxNow=Date.now());}function genFx(type,includeWidth){var which,i=0,attrs={height:type};includeWidth=includeWidth?1:0;for(;i<4;i+=2-includeWidth){which=cssExpand[i];attrs["margin"+which]=attrs["padding"+which]=type;}if(includeWidth){attrs.opacity=attrs.width=type;}return attrs;}function createTween(value,prop,animation){var tween,collection=(Animation.tweeners[prop]||[]).concat(Animation.tweeners["*"]),index=0,length=collection.length;for(;index<length;index++){if((tween=collection[index].call(animation,prop,value))){return tween;}}}function defaultPrefilter(elem,props,opts){var
prop,value,toggle,hooks,oldfire,propTween,restoreDisplay,display,isBox="width"in props||"height"in props,anim=this,orig={},style=elem.style,hidden=elem.nodeType&&isHiddenWithinTree(elem),dataShow=dataPriv.get(elem,"fxshow");if(!opts.queue){hooks=jQuery._queueHooks(elem,"fx");if(hooks.unqueued==null){hooks.unqueued=0;oldfire=hooks.empty.fire;hooks.empty.fire=function(){if(!hooks.unqueued){oldfire();}};}hooks.unqueued++;anim.always(function(){anim.always(function(){hooks.unqueued--;if(!jQuery.queue(elem,"fx").length){hooks.empty.fire();}});});}for(prop in props){value=props[prop];if(rfxtypes.test(value)){delete props[prop];toggle=toggle||value==="toggle";if(value===(hidden?"hide":"show")){if(value==="show"&&dataShow&&dataShow[prop]!==undefined){hidden=true;}else{continue;}}orig[prop]=dataShow&&dataShow[prop]||jQuery.style(elem,prop);}}propTween=!jQuery.isEmptyObject(props);if(!propTween&&jQuery.isEmptyObject(orig)){return;}if(isBox&&elem.nodeType===1){opts.overflow=[style.overflow,style.
overflowX,style.overflowY];restoreDisplay=dataShow&&dataShow.display;if(restoreDisplay==null){restoreDisplay=dataPriv.get(elem,"display");}display=jQuery.css(elem,"display");if(display==="none"){if(restoreDisplay){display=restoreDisplay;}else{showHide([elem],true);restoreDisplay=elem.style.display||restoreDisplay;display=jQuery.css(elem,"display");showHide([elem]);}}if(display==="inline"||display==="inline-block"&&restoreDisplay!=null){if(jQuery.css(elem,"float")==="none"){if(!propTween){anim.done(function(){style.display=restoreDisplay;});if(restoreDisplay==null){display=style.display;restoreDisplay=display==="none"?"":display;}}style.display="inline-block";}}}if(opts.overflow){style.overflow="hidden";anim.always(function(){style.overflow=opts.overflow[0];style.overflowX=opts.overflow[1];style.overflowY=opts.overflow[2];});}propTween=false;for(prop in orig){if(!propTween){if(dataShow){if("hidden"in dataShow){hidden=dataShow.hidden;}}else{dataShow=dataPriv.access(elem,"fxshow",{display
:restoreDisplay});}if(toggle){dataShow.hidden=!hidden;}if(hidden){showHide([elem],true);}anim.done(function(){if(!hidden){showHide([elem]);}dataPriv.remove(elem,"fxshow");for(prop in orig){jQuery.style(elem,prop,orig[prop]);}});}propTween=createTween(hidden?dataShow[prop]:0,prop,anim);if(!(prop in dataShow)){dataShow[prop]=propTween.start;if(hidden){propTween.end=propTween.start;propTween.start=0;}}}}function propFilter(props,specialEasing){var index,name,easing,value,hooks;for(index in props){name=camelCase(index);easing=specialEasing[name];value=props[index];if(Array.isArray(value)){easing=value[1];value=props[index]=value[0];}if(index!==name){props[name]=value;delete props[index];}hooks=jQuery.cssHooks[name];if(hooks&&"expand"in hooks){value=hooks.expand(value);delete props[name];for(index in value){if(!(index in props)){props[index]=value[index];specialEasing[index]=easing;}}}else{specialEasing[name]=easing;}}}function Animation(elem,properties,options){var result,stopped,index=0,
length=Animation.prefilters.length,deferred=jQuery.Deferred().always(function(){delete tick.elem;}),tick=function(){if(stopped){return false;}var currentTime=fxNow||createFxNow(),remaining=Math.max(0,animation.startTime+animation.duration-currentTime),temp=remaining/animation.duration||0,percent=1-temp,index=0,length=animation.tweens.length;for(;index<length;index++){animation.tweens[index].run(percent);}deferred.notifyWith(elem,[animation,percent,remaining]);if(percent<1&&length){return remaining;}if(!length){deferred.notifyWith(elem,[animation,1,0]);}deferred.resolveWith(elem,[animation]);return false;},animation=deferred.promise({elem:elem,props:jQuery.extend({},properties),opts:jQuery.extend(true,{specialEasing:{},easing:jQuery.easing._default},options),originalProperties:properties,originalOptions:options,startTime:fxNow||createFxNow(),duration:options.duration,tweens:[],createTween:function(prop,end){var tween=jQuery.Tween(elem,animation.opts,prop,end,animation.opts.specialEasing
[prop]||animation.opts.easing);animation.tweens.push(tween);return tween;},stop:function(gotoEnd){var index=0,length=gotoEnd?animation.tweens.length:0;if(stopped){return this;}stopped=true;for(;index<length;index++){animation.tweens[index].run(1);}if(gotoEnd){deferred.notifyWith(elem,[animation,1,0]);deferred.resolveWith(elem,[animation,gotoEnd]);}else{deferred.rejectWith(elem,[animation,gotoEnd]);}return this;}}),props=animation.props;propFilter(props,animation.opts.specialEasing);for(;index<length;index++){result=Animation.prefilters[index].call(animation,elem,props,animation.opts);if(result){if(isFunction(result.stop)){jQuery._queueHooks(animation.elem,animation.opts.queue).stop=result.stop.bind(result);}return result;}}jQuery.map(props,createTween,animation);if(isFunction(animation.opts.start)){animation.opts.start.call(elem,animation);}animation.progress(animation.opts.progress).done(animation.opts.done,animation.opts.complete).fail(animation.opts.fail).always(animation.opts.
always);jQuery.fx.timer(jQuery.extend(tick,{elem:elem,anim:animation,queue:animation.opts.queue}));return animation;}jQuery.Animation=jQuery.extend(Animation,{tweeners:{"*":[function(prop,value){var tween=this.createTween(prop,value);adjustCSS(tween.elem,prop,rcssNum.exec(value),tween);return tween;}]},tweener:function(props,callback){if(isFunction(props)){callback=props;props=["*"];}else{props=props.match(rnothtmlwhite);}var prop,index=0,length=props.length;for(;index<length;index++){prop=props[index];Animation.tweeners[prop]=Animation.tweeners[prop]||[];Animation.tweeners[prop].unshift(callback);}},prefilters:[defaultPrefilter],prefilter:function(callback,prepend){if(prepend){Animation.prefilters.unshift(callback);}else{Animation.prefilters.push(callback);}}});jQuery.speed=function(speed,easing,fn){var opt=speed&&typeof speed==="object"?jQuery.extend({},speed):{complete:fn||!fn&&easing||isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!isFunction(easing)&&easing};if
(jQuery.fx.off){opt.duration=0;}else{if(typeof opt.duration!=="number"){if(opt.duration in jQuery.fx.speeds){opt.duration=jQuery.fx.speeds[opt.duration];}else{opt.duration=jQuery.fx.speeds._default;}}}if(opt.queue==null||opt.queue===true){opt.queue="fx";}opt.old=opt.complete;opt.complete=function(){if(isFunction(opt.old)){opt.old.call(this);}if(opt.queue){jQuery.dequeue(this,opt.queue);}};return opt;};jQuery.fn.extend({fadeTo:function(speed,to,easing,callback){return this.filter(isHiddenWithinTree).css("opacity",0).show().end().animate({opacity:to},speed,easing,callback);},animate:function(prop,speed,easing,callback){var empty=jQuery.isEmptyObject(prop),optall=jQuery.speed(speed,easing,callback),doAnimation=function(){var anim=Animation(this,jQuery.extend({},prop),optall);if(empty||dataPriv.get(this,"finish")){anim.stop(true);}};doAnimation.finish=doAnimation;return empty||optall.queue===false?this.each(doAnimation):this.queue(optall.queue,doAnimation);},stop:function(type,clearQueue,
gotoEnd){var stopQueue=function(hooks){var stop=hooks.stop;delete hooks.stop;stop(gotoEnd);};if(typeof type!=="string"){gotoEnd=clearQueue;clearQueue=type;type=undefined;}if(clearQueue){this.queue(type||"fx",[]);}return this.each(function(){var dequeue=true,index=type!=null&&type+"queueHooks",timers=jQuery.timers,data=dataPriv.get(this);if(index){if(data[index]&&data[index].stop){stopQueue(data[index]);}}else{for(index in data){if(data[index]&&data[index].stop&&rrun.test(index)){stopQueue(data[index]);}}}for(index=timers.length;index--;){if(timers[index].elem===this&&(type==null||timers[index].queue===type)){timers[index].anim.stop(gotoEnd);dequeue=false;timers.splice(index,1);}}if(dequeue||!gotoEnd){jQuery.dequeue(this,type);}});},finish:function(type){if(type!==false){type=type||"fx";}return this.each(function(){var index,data=dataPriv.get(this),queue=data[type+"queue"],hooks=data[type+"queueHooks"],timers=jQuery.timers,length=queue?queue.length:0;data.finish=true;jQuery.queue(this,
type,[]);if(hooks&&hooks.stop){hooks.stop.call(this,true);}for(index=timers.length;index--;){if(timers[index].elem===this&&timers[index].queue===type){timers[index].anim.stop(true);timers.splice(index,1);}}for(index=0;index<length;index++){if(queue[index]&&queue[index].finish){queue[index].finish.call(this);}}delete data.finish;});}});jQuery.each(["toggle","show","hide"],function(_i,name){var cssFn=jQuery.fn[name];jQuery.fn[name]=function(speed,easing,callback){return speed==null||typeof speed==="boolean"?cssFn.apply(this,arguments):this.animate(genFx(name,true),speed,easing,callback);};});jQuery.each({slideDown:genFx("show"),slideUp:genFx("hide"),slideToggle:genFx("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(name,props){jQuery.fn[name]=function(speed,easing,callback){return this.animate(props,speed,easing,callback);};});jQuery.timers=[];jQuery.fx.tick=function(){var timer,i=0,timers=jQuery.timers;fxNow=Date.now();for(;i<timers.
length;i++){timer=timers[i];if(!timer()&&timers[i]===timer){timers.splice(i--,1);}}if(!timers.length){jQuery.fx.stop();}fxNow=undefined;};jQuery.fx.timer=function(timer){jQuery.timers.push(timer);jQuery.fx.start();};jQuery.fx.interval=13;jQuery.fx.start=function(){if(inProgress){return;}inProgress=true;schedule();};jQuery.fx.stop=function(){inProgress=null;};jQuery.fx.speeds={slow:600,fast:200,_default:400};jQuery.fn.delay=function(time,type){time=jQuery.fx?jQuery.fx.speeds[time]||time:time;type=type||"fx";return this.queue(type,function(next,hooks){var timeout=window.setTimeout(next,time);hooks.stop=function(){window.clearTimeout(timeout);};});};(function(){var input=document.createElement("input"),select=document.createElement("select"),opt=select.appendChild(document.createElement("option"));input.type="checkbox";support.checkOn=input.value!=="";support.optSelected=opt.selected;input=document.createElement("input");input.value="t";input.type="radio";support.radioValue=input.value===
"t";})();var boolHook,attrHandle=jQuery.expr.attrHandle;jQuery.fn.extend({attr:function(name,value){return access(this,jQuery.attr,name,value,arguments.length>1);},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name);});}});jQuery.extend({attr:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return;}if(typeof elem.getAttribute==="undefined"){return jQuery.prop(elem,name,value);}if(nType!==1||!jQuery.isXMLDoc(elem)){hooks=jQuery.attrHooks[name.toLowerCase()]||(jQuery.expr.match.bool.test(name)?boolHook:undefined);}if(value!==undefined){if(value===null){jQuery.removeAttr(elem,name);return;}if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret;}elem.setAttribute(name,value+"");return value;}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret;}ret=jQuery.find.attr(elem,name);return ret==null?undefined:ret;},attrHooks:{type:{set:function(elem,value){if(!support.
radioValue&&value==="radio"&&nodeName(elem,"input")){var val=elem.value;elem.setAttribute("type",value);if(val){elem.value=val;}return value;}}}},removeAttr:function(elem,value){var name,i=0,attrNames=value&&value.match(rnothtmlwhite);if(attrNames&&elem.nodeType===1){while((name=attrNames[i++])){elem.removeAttribute(name);}}}});boolHook={set:function(elem,value,name){if(value===false){jQuery.removeAttr(elem,name);}else{elem.setAttribute(name,name);}return name;}};jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),function(_i,name){var getter=attrHandle[name]||jQuery.find.attr;attrHandle[name]=function(elem,name,isXML){var ret,handle,lowercaseName=name.toLowerCase();if(!isXML){handle=attrHandle[lowercaseName];attrHandle[lowercaseName]=ret;ret=getter(elem,name,isXML)!=null?lowercaseName:null;attrHandle[lowercaseName]=handle;}return ret;};});var rfocusable=/^(?:input|select|textarea|button)$/i,rclickable=/^(?:a|area)$/i;jQuery.fn.extend({prop:function(name,value){return access(this,
jQuery.prop,name,value,arguments.length>1);},removeProp:function(name){return this.each(function(){delete this[jQuery.propFix[name]||name];});}});jQuery.extend({prop:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return;}if(nType!==1||!jQuery.isXMLDoc(elem)){name=jQuery.propFix[name]||name;hooks=jQuery.propHooks[name];}if(value!==undefined){if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret;}return(elem[name]=value);}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret;}return elem[name];},propHooks:{tabIndex:{get:function(elem){var tabindex=jQuery.find.attr(elem,"tabindex");if(tabindex){return parseInt(tabindex,10);}if(rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href){return 0;}return-1;}}},propFix:{"for":"htmlFor","class":"className"}});if(!support.optSelected){jQuery.propHooks.selected={get:function(elem){var parent=elem.parentNode;if(parent&&parent.parentNode){
parent.parentNode.selectedIndex;}return null;},set:function(elem){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex;}}}};}jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){jQuery.propFix[this.toLowerCase()]=this;});function stripAndCollapse(value){var tokens=value.match(rnothtmlwhite)||[];return tokens.join(" ");}function getClass(elem){return elem.getAttribute&&elem.getAttribute("class")||"";}function classesToArray(value){if(Array.isArray(value)){return value;}if(typeof value==="string"){return value.match(rnothtmlwhite)||[];}return[];}jQuery.fn.extend({addClass:function(value){var classNames,cur,curValue,className,i,finalValue;if(isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,getClass(this)));});}classNames=classesToArray(value);if(classNames.length){return this.each(function(){
curValue=getClass(this);cur=this.nodeType===1&&(" "+stripAndCollapse(curValue)+" ");if(cur){for(i=0;i<classNames.length;i++){className=classNames[i];if(cur.indexOf(" "+className+" ")<0){cur+=className+" ";}}finalValue=stripAndCollapse(cur);if(curValue!==finalValue){this.setAttribute("class",finalValue);}}});}return this;},removeClass:function(value){var classNames,cur,curValue,className,i,finalValue;if(isFunction(value)){return this.each(function(j){jQuery(this).removeClass(value.call(this,j,getClass(this)));});}if(!arguments.length){return this.attr("class","");}classNames=classesToArray(value);if(classNames.length){return this.each(function(){curValue=getClass(this);cur=this.nodeType===1&&(" "+stripAndCollapse(curValue)+" ");if(cur){for(i=0;i<classNames.length;i++){className=classNames[i];while(cur.indexOf(" "+className+" ")>-1){cur=cur.replace(" "+className+" "," ");}}finalValue=stripAndCollapse(cur);if(curValue!==finalValue){this.setAttribute("class",finalValue);}}});}return this;}
,toggleClass:function(value,stateVal){var classNames,className,i,self,type=typeof value,isValidValue=type==="string"||Array.isArray(value);if(isFunction(value)){return this.each(function(i){jQuery(this).toggleClass(value.call(this,i,getClass(this),stateVal),stateVal);});}if(typeof stateVal==="boolean"&&isValidValue){return stateVal?this.addClass(value):this.removeClass(value);}classNames=classesToArray(value);return this.each(function(){if(isValidValue){self=jQuery(this);for(i=0;i<classNames.length;i++){className=classNames[i];if(self.hasClass(className)){self.removeClass(className);}else{self.addClass(className);}}}else if(value===undefined||type==="boolean"){className=getClass(this);if(className){dataPriv.set(this,"__className__",className);}if(this.setAttribute){this.setAttribute("class",className||value===false?"":dataPriv.get(this,"__className__")||"");}}});},hasClass:function(selector){var className,elem,i=0;className=" "+selector+" ";while((elem=this[i++])){if(elem.nodeType===1
&&(" "+stripAndCollapse(getClass(elem))+" ").indexOf(className)>-1){return true;}}return false;}});var rreturn=/\r/g;jQuery.fn.extend({val:function(value){var hooks,ret,valueIsFunction,elem=this[0];if(!arguments.length){if(elem){hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()];if(hooks&&"get"in hooks&&(ret=hooks.get(elem,"value"))!==undefined){return ret;}ret=elem.value;if(typeof ret==="string"){return ret.replace(rreturn,"");}return ret==null?"":ret;}return;}valueIsFunction=isFunction(value);return this.each(function(i){var val;if(this.nodeType!==1){return;}if(valueIsFunction){val=value.call(this,i,jQuery(this).val());}else{val=value;}if(val==null){val="";}else if(typeof val==="number"){val+="";}else if(Array.isArray(val)){val=jQuery.map(val,function(value){return value==null?"":value+"";});}hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()];if(!hooks||!("set"in hooks)||hooks.set(this,val,"value")===undefined){this.value=val;}}
);}});jQuery.extend({valHooks:{option:{get:function(elem){var val=jQuery.find.attr(elem,"value");return val!=null?val:stripAndCollapse(jQuery.text(elem));}},select:{get:function(elem){var value,option,i,options=elem.options,index=elem.selectedIndex,one=elem.type==="select-one",values=one?null:[],max=one?index+1:options.length;if(index<0){i=max;}else{i=one?index:0;}for(;i<max;i++){option=options[i];if((option.selected||i===index)&&!option.disabled&&(!option.parentNode.disabled||!nodeName(option.parentNode,"optgroup"))){value=jQuery(option).val();if(one){return value;}values.push(value);}}return values;},set:function(elem,value){var optionSet,option,options=elem.options,values=jQuery.makeArray(value),i=options.length;while(i--){option=options[i];if(option.selected=jQuery.inArray(jQuery.valHooks.option.get(option),values)>-1){optionSet=true;}}if(!optionSet){elem.selectedIndex=-1;}return values;}}}});jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={set:function(elem,value
){if(Array.isArray(value)){return(elem.checked=jQuery.inArray(jQuery(elem).val(),value)>-1);}}};if(!support.checkOn){jQuery.valHooks[this].get=function(elem){return elem.getAttribute("value")===null?"on":elem.value;};}});support.focusin="onfocusin"in window;var rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,stopPropagationCallback=function(e){e.stopPropagation();};jQuery.extend(jQuery.event,{trigger:function(event,data,elem,onlyHandlers){var i,cur,tmp,bubbleType,ontype,handle,special,lastElement,eventPath=[elem||document],type=hasOwn.call(event,"type")?event.type:event,namespaces=hasOwn.call(event,"namespace")?event.namespace.split("."):[];cur=lastElement=tmp=elem=elem||document;if(elem.nodeType===3||elem.nodeType===8){return;}if(rfocusMorph.test(type+jQuery.event.triggered)){return;}if(type.indexOf(".")>-1){namespaces=type.split(".");type=namespaces.shift();namespaces.sort();}ontype=type.indexOf(":")<0&&"on"+type;event=event[jQuery.expando]?event:new jQuery.Event(type,typeof event===
"object"&&event);event.isTrigger=onlyHandlers?2:3;event.namespace=namespaces.join(".");event.rnamespace=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;event.result=undefined;if(!event.target){event.target=elem;}data=data==null?[event]:jQuery.makeArray(data,[event]);special=jQuery.event.special[type]||{};if(!onlyHandlers&&special.trigger&&special.trigger.apply(elem,data)===false){return;}if(!onlyHandlers&&!special.noBubble&&!isWindow(elem)){bubbleType=special.delegateType||type;if(!rfocusMorph.test(bubbleType+type)){cur=cur.parentNode;}for(;cur;cur=cur.parentNode){eventPath.push(cur);tmp=cur;}if(tmp===(elem.ownerDocument||document)){eventPath.push(tmp.defaultView||tmp.parentWindow||window);}}i=0;while((cur=eventPath[i++])&&!event.isPropagationStopped()){lastElement=cur;event.type=i>1?bubbleType:special.bindType||type;handle=(dataPriv.get(cur,"events")||Object.create(null))[event.type]&&dataPriv.get(cur,"handle");if(handle){handle.apply(cur,data);}
handle=ontype&&cur[ontype];if(handle&&handle.apply&&acceptData(cur)){event.result=handle.apply(cur,data);if(event.result===false){event.preventDefault();}}}event.type=type;if(!onlyHandlers&&!event.isDefaultPrevented()){if((!special._default||special._default.apply(eventPath.pop(),data)===false)&&acceptData(elem)){if(ontype&&isFunction(elem[type])&&!isWindow(elem)){tmp=elem[ontype];if(tmp){elem[ontype]=null;}jQuery.event.triggered=type;if(event.isPropagationStopped()){lastElement.addEventListener(type,stopPropagationCallback);}elem[type]();if(event.isPropagationStopped()){lastElement.removeEventListener(type,stopPropagationCallback);}jQuery.event.triggered=undefined;if(tmp){elem[ontype]=tmp;}}}}return event.result;},simulate:function(type,elem,event){var e=jQuery.extend(new jQuery.Event(),event,{type:type,isSimulated:true});jQuery.event.trigger(e,null,elem);}});jQuery.fn.extend({trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this);});},
triggerHandler:function(type,data){var elem=this[0];if(elem){return jQuery.event.trigger(type,data,elem,true);}}});if(!support.focusin){jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){var handler=function(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event));};jQuery.event.special[fix]={setup:function(){var doc=this.ownerDocument||this.document||this,attaches=dataPriv.access(doc,fix);if(!attaches){doc.addEventListener(orig,handler,true);}dataPriv.access(doc,fix,(attaches||0)+1);},teardown:function(){var doc=this.ownerDocument||this.document||this,attaches=dataPriv.access(doc,fix)-1;if(!attaches){doc.removeEventListener(orig,handler,true);dataPriv.remove(doc,fix);}else{dataPriv.access(doc,fix,attaches);}}};});}var location=window.location;var nonce={guid:Date.now()};var rquery=(/\?/);jQuery.parseXML=function(data){var xml,parserErrorElem;if(!data||typeof data!=="string"){return null;}try{xml=(new window.DOMParser()).parseFromString(data,"text/xml");}
catch(e){}parserErrorElem=xml&&xml.getElementsByTagName("parsererror")[0];if(!xml||parserErrorElem){jQuery.error("Invalid XML: "+(parserErrorElem?jQuery.map(parserErrorElem.childNodes,function(el){return el.textContent;}).join("\n"):data));}return xml;};var rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;function buildParams(prefix,obj,traditional,add){var name;if(Array.isArray(obj)){jQuery.each(obj,function(i,v){if(traditional||rbracket.test(prefix)){add(prefix,v);}else{buildParams(prefix+"["+(typeof v==="object"&&v!=null?i:"")+"]",v,traditional,add);}});}else if(!traditional&&toType(obj)==="object"){for(name in obj){buildParams(prefix+"["+name+"]",obj[name],traditional,add);}}else{add(prefix,obj);}}jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,valueOrFunction){var value=isFunction(valueOrFunction)?valueOrFunction():valueOrFunction;s[s.length]=encodeURIComponent(key)+"="+
encodeURIComponent(value==null?"":value);};if(a==null){return"";}if(Array.isArray(a)||(a.jquery&&!jQuery.isPlainObject(a))){jQuery.each(a,function(){add(this.name,this.value);});}else{for(prefix in a){buildParams(prefix,a[prefix],traditional,add);}}return s.join("&");};jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this;}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!rcheckableType.test(type));}).map(function(_i,elem){var val=jQuery(this).val();if(val==null){return null;}if(Array.isArray(val)){return jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")};});}return{name:elem.name,value:val.replace(rCRLF,"\r\n")};}).get();}});var r20=/%20/g,rhash=/#.*$/,rantiCache=
/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)$/mg,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,prefilters={},transports={},allTypes="*/".concat("*"),originAnchor=document.createElement("a");originAnchor.href=location.href;function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){if(typeof dataTypeExpression!=="string"){func=dataTypeExpression;dataTypeExpression="*";}var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(rnothtmlwhite)||[];if(isFunction(func)){while((dataType=dataTypes[i++])){if(dataType[0]==="+"){dataType=dataType.slice(1)||"*";(structure[dataType]=structure[dataType]||[]).unshift(func);}else{(structure[dataType]=structure[dataType]||[]).push(func);}}}};}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){var inspected={},seekingTransport=(structure===transports);function inspect(dataType){var selected;inspected[dataType]
=true;jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);if(typeof dataTypeOrTransport==="string"&&!seekingTransport&&!inspected[dataTypeOrTransport]){options.dataTypes.unshift(dataTypeOrTransport);inspect(dataTypeOrTransport);return false;}else if(seekingTransport){return!(selected=dataTypeOrTransport);}});return selected;}return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*");}function ajaxExtend(target,src){var key,deep,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src){if(src[key]!==undefined){(flatOptions[key]?target:(deep||(deep={})))[key]=src[key];}}if(deep){jQuery.extend(true,target,deep);}return target;}function ajaxHandleResponses(s,jqXHR,responses){var ct,type,finalDataType,firstDataType,contents=s.contents,dataTypes=s.dataTypes;while(dataTypes[0]==="*"){dataTypes.shift();if(ct===undefined){ct=s.mimeType||jqXHR.getResponseHeader("Content-Type");}}if(ct){for(
type in contents){if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break;}}}if(dataTypes[0]in responses){finalDataType=dataTypes[0];}else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break;}if(!firstDataType){firstDataType=type;}}finalDataType=finalDataType||firstDataType;}if(finalDataType){if(finalDataType!==dataTypes[0]){dataTypes.unshift(finalDataType);}return responses[finalDataType];}}function ajaxConvert(s,response,jqXHR,isSuccess){var conv2,current,conv,tmp,prev,converters={},dataTypes=s.dataTypes.slice();if(dataTypes[1]){for(conv in s.converters){converters[conv.toLowerCase()]=s.converters[conv];}}current=dataTypes.shift();while(current){if(s.responseFields[current]){jqXHR[s.responseFields[current]]=response;}if(!prev&&isSuccess&&s.dataFilter){response=s.dataFilter(response,s.dataType);}prev=current;current=dataTypes.shift();if(current){if(current==="*"){current=prev;}else if(prev!=="*"&&prev!==current){conv
=converters[prev+" "+current]||converters["* "+current];if(!conv){for(conv2 in converters){tmp=conv2.split(" ");if(tmp[1]===current){conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]];if(conv){if(conv===true){conv=converters[conv2];}else if(converters[conv2]!==true){current=tmp[0];dataTypes.unshift(tmp[1]);}break;}}}}if(conv!==true){if(conv&&s.throws){response=conv(response);}else{try{response=conv(response);}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current};}}}}}}return{state:"success",data:response};}jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:location.href,type:"GET",isLocal:rlocalProtocol.test(location.protocol),global:true,processData:true,async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{
xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":JSON.parse,"text xml":jQuery.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target);},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){if(typeof url==="object"){options=url;url=undefined;}options=options||{};var transport,cacheURL,responseHeadersString,responseHeaders,timeoutTimer,urlAnchor,completed,fireGlobals,i,uncached,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},
strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(completed){if(!responseHeaders){responseHeaders={};while((match=rheaders.exec(responseHeadersString))){responseHeaders[match[1].toLowerCase()+" "]=(responseHeaders[match[1].toLowerCase()+" "]||[]).concat(match[2]);}}match=responseHeaders[key.toLowerCase()+" "];}return match==null?null:match.join(", ");},getAllResponseHeaders:function(){return completed?responseHeadersString:null;},setRequestHeader:function(name,value){if(completed==null){name=requestHeadersNames[name.toLowerCase()]=requestHeadersNames[name.toLowerCase()]||name;requestHeaders[name]=value;}return this;},overrideMimeType:function(type){if(completed==null){s.mimeType=type;}return this;},statusCode:function(map){var code;if(map){if(completed){jqXHR.always(map[jqXHR.status]);}else{for(code in map){statusCode[code]=[statusCode[code],map[code]];}}}return this;},abort:function(statusText){var finalText=statusText||strAbort;if(transport){
transport.abort(finalText);}done(0,finalText);return this;}};deferred.promise(jqXHR);s.url=((url||s.url||location.href)+"").replace(rprotocol,location.protocol+"//");s.type=options.method||options.type||s.method||s.type;s.dataTypes=(s.dataType||"*").toLowerCase().match(rnothtmlwhite)||[""];if(s.crossDomain==null){urlAnchor=document.createElement("a");try{urlAnchor.href=s.url;urlAnchor.href=urlAnchor.href;s.crossDomain=originAnchor.protocol+"//"+originAnchor.host!==urlAnchor.protocol+"//"+urlAnchor.host;}catch(e){s.crossDomain=true;}}if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional);}inspectPrefiltersOrTransports(prefilters,s,options,jqXHR);if(completed){return jqXHR;}fireGlobals=jQuery.event&&s.global;if(fireGlobals&&jQuery.active++===0){jQuery.event.trigger("ajaxStart");}s.type=s.type.toUpperCase();s.hasContent=!rnoContent.test(s.type);cacheURL=s.url.replace(rhash,"");if(!s.hasContent){uncached=s.url.slice(cacheURL.length);if(s.data&&(s.
processData||typeof s.data==="string")){cacheURL+=(rquery.test(cacheURL)?"&":"?")+s.data;delete s.data;}if(s.cache===false){cacheURL=cacheURL.replace(rantiCache,"$1");uncached=(rquery.test(cacheURL)?"&":"?")+"_="+(nonce.guid++)+uncached;}s.url=cacheURL+uncached;}else if(s.data&&s.processData&&(s.contentType||"").indexOf("application/x-www-form-urlencoded")===0){s.data=s.data.replace(r20,"+");}if(s.ifModified){if(jQuery.lastModified[cacheURL]){jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL]);}if(jQuery.etag[cacheURL]){jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL]);}}if(s.data&&s.hasContent&&s.contentType!==false||options.contentType){jqXHR.setRequestHeader("Content-Type",s.contentType);}jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+(s.dataTypes[0]!=="*"?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers){jqXHR.setRequestHeader(i,s.headers[i]);}if(s.beforeSend&&(s.beforeSend.call(
callbackContext,jqXHR,s)===false||completed)){return jqXHR.abort();}strAbort="abort";completeDeferred.add(s.complete);jqXHR.done(s.success);jqXHR.fail(s.error);transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR);if(!transport){done(-1,"No Transport");}else{jqXHR.readyState=1;if(fireGlobals){globalEventContext.trigger("ajaxSend",[jqXHR,s]);}if(completed){return jqXHR;}if(s.async&&s.timeout>0){timeoutTimer=window.setTimeout(function(){jqXHR.abort("timeout");},s.timeout);}try{completed=false;transport.send(requestHeaders,done);}catch(e){if(completed){throw e;}done(-1,e);}}function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;if(completed){return;}completed=true;if(timeoutTimer){window.clearTimeout(timeoutTimer);}transport=undefined;responseHeadersString=headers||"";jqXHR.readyState=status>0?4:0;isSuccess=status>=200&&status<300||status===304;if(responses){response=ajaxHandleResponses(s,jqXHR,
responses);}if(!isSuccess&&jQuery.inArray("script",s.dataTypes)>-1&&jQuery.inArray("json",s.dataTypes)<0){s.converters["text script"]=function(){};}response=ajaxConvert(s,response,jqXHR,isSuccess);if(isSuccess){if(s.ifModified){modified=jqXHR.getResponseHeader("Last-Modified");if(modified){jQuery.lastModified[cacheURL]=modified;}modified=jqXHR.getResponseHeader("etag");if(modified){jQuery.etag[cacheURL]=modified;}}if(status===204||s.type==="HEAD"){statusText="nocontent";}else if(status===304){statusText="notmodified";}else{statusText=response.state;success=response.data;error=response.error;isSuccess=!error;}}else{error=statusText;if(status||!statusText){statusText="error";if(status<0){status=0;}}}jqXHR.status=status;jqXHR.statusText=(nativeStatusText||statusText)+"";if(isSuccess){deferred.resolveWith(callbackContext,[success,statusText,jqXHR]);}else{deferred.rejectWith(callbackContext,[jqXHR,statusText,error]);}jqXHR.statusCode(statusCode);statusCode=undefined;if(fireGlobals){
globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error]);}completeDeferred.fireWith(callbackContext,[jqXHR,statusText]);if(fireGlobals){globalEventContext.trigger("ajaxComplete",[jqXHR,s]);if(!(--jQuery.active)){jQuery.event.trigger("ajaxStop");}}}return jqXHR;},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},getScript:function(url,callback){return jQuery.get(url,undefined,callback,"script");}});jQuery.each(["get","post"],function(_i,method){jQuery[method]=function(url,data,callback,type){if(isFunction(data)){type=type||callback;callback=data;data=undefined;}return jQuery.ajax(jQuery.extend({url:url,type:method,dataType:type,data:data,success:callback},jQuery.isPlainObject(url)&&url));};});jQuery.ajaxPrefilter(function(s){var i;for(i in s.headers){if(i.toLowerCase()==="content-type"){s.contentType=s.headers[i]||"";}}});jQuery._evalUrl=function(url,options,doc){return jQuery.ajax({url:url,type:"GET",dataType:
"script",cache:true,async:false,global:false,converters:{"text script":function(){}},dataFilter:function(response){jQuery.globalEval(response,options,doc);}});};jQuery.fn.extend({wrapAll:function(html){var wrap;if(this[0]){if(isFunction(html)){html=html.call(this[0]);}wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0]);}wrap.map(function(){var elem=this;while(elem.firstElementChild){elem=elem.firstElementChild;}return elem;}).append(this);}return this;},wrapInner:function(html){if(isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i));});}return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html);}else{self.append(html);}});},wrap:function(html){var htmlIsFunction=isFunction(html);return this.each(function(i){jQuery(this).wrapAll(htmlIsFunction?html.call(this,i):html);});},unwrap:function(selector){this.parent(selector).not("body").each(
function(){jQuery(this).replaceWith(this.childNodes);});return this;}});jQuery.expr.pseudos.hidden=function(elem){return!jQuery.expr.pseudos.visible(elem);};jQuery.expr.pseudos.visible=function(elem){return!!(elem.offsetWidth||elem.offsetHeight||elem.getClientRects().length);};jQuery.ajaxSettings.xhr=function(){try{return new window.XMLHttpRequest();}catch(e){}};var xhrSuccessStatus={0:200,1223:204},xhrSupported=jQuery.ajaxSettings.xhr();support.cors=!!xhrSupported&&("withCredentials"in xhrSupported);support.ajax=xhrSupported=!!xhrSupported;jQuery.ajaxTransport(function(options){var callback,errorCallback;if(support.cors||xhrSupported&&!options.crossDomain){return{send:function(headers,complete){var i,xhr=options.xhr();xhr.open(options.type,options.url,options.async,options.username,options.password);if(options.xhrFields){for(i in options.xhrFields){xhr[i]=options.xhrFields[i];}}if(options.mimeType&&xhr.overrideMimeType){xhr.overrideMimeType(options.mimeType);}if(!options.crossDomain&&
!headers["X-Requested-With"]){headers["X-Requested-With"]="XMLHttpRequest";}for(i in headers){xhr.setRequestHeader(i,headers[i]);}callback=function(type){return function(){if(callback){callback=errorCallback=xhr.onload=xhr.onerror=xhr.onabort=xhr.ontimeout=xhr.onreadystatechange=null;if(type==="abort"){xhr.abort();}else if(type==="error"){if(typeof xhr.status!=="number"){complete(0,"error");}else{complete(xhr.status,xhr.statusText);}}else{complete(xhrSuccessStatus[xhr.status]||xhr.status,xhr.statusText,(xhr.responseType||"text")!=="text"||typeof xhr.responseText!=="string"?{binary:xhr.response}:{text:xhr.responseText},xhr.getAllResponseHeaders());}}};};xhr.onload=callback();errorCallback=xhr.onerror=xhr.ontimeout=callback("error");if(xhr.onabort!==undefined){xhr.onabort=errorCallback;}else{xhr.onreadystatechange=function(){if(xhr.readyState===4){window.setTimeout(function(){if(callback){errorCallback();}});}};}callback=callback("abort");try{xhr.send(options.hasContent&&options.data||
null);}catch(e){if(callback){throw e;}}},abort:function(){if(callback){callback();}}};}});jQuery.ajaxPrefilter(function(s){if(s.crossDomain){s.contents.script=false;}});jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, "+"application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(text){jQuery.globalEval(text);return text;}}});jQuery.ajaxPrefilter("script",function(s){if(s.cache===undefined){s.cache=false;}if(s.crossDomain){s.type="GET";}});jQuery.ajaxTransport("script",function(s){if(s.crossDomain||s.scriptAttrs){var script,callback;return{send:function(_,complete){script=jQuery("<script>").attr(s.scriptAttrs||{}).prop({charset:s.scriptCharset,src:s.url}).on("load error",callback=function(evt){script.remove();callback=null;if(evt){complete(evt.type==="error"?404:200,evt.type);}});document.head.appendChild(script[0]);},abort:function(){if(callback){callback();}}};}});var oldCallbacks=[],
rjsonp=/(=)\?(?=&|$)|\?\?/;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var callback=oldCallbacks.pop()||(jQuery.expando+"_"+(nonce.guid++));this[callback]=true;return callback;}});jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var callbackName,overwritten,responseContainer,jsonProp=s.jsonp!==false&&(rjsonp.test(s.url)?"url":typeof s.data==="string"&&(s.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&rjsonp.test(s.data)&&"data");if(jsonProp||s.dataTypes[0]==="jsonp"){callbackName=s.jsonpCallback=isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback;if(jsonProp){s[jsonProp]=s[jsonProp].replace(rjsonp,"$1"+callbackName);}else if(s.jsonp!==false){s.url+=(rquery.test(s.url)?"&":"?")+s.jsonp+"="+callbackName;}s.converters["script json"]=function(){if(!responseContainer){jQuery.error(callbackName+" was not called");}return responseContainer[0];};s.dataTypes[0]="json";overwritten=window[callbackName];window[callbackName]=function
(){responseContainer=arguments;};jqXHR.always(function(){if(overwritten===undefined){jQuery(window).removeProp(callbackName);}else{window[callbackName]=overwritten;}if(s[callbackName]){s.jsonpCallback=originalSettings.jsonpCallback;oldCallbacks.push(callbackName);}if(responseContainer&&isFunction(overwritten)){overwritten(responseContainer[0]);}responseContainer=overwritten=undefined;});return"script";}});support.createHTMLDocument=(function(){var body=document.implementation.createHTMLDocument("").body;body.innerHTML="<form></form><form></form>";return body.childNodes.length===2;})();jQuery.parseHTML=function(data,context,keepScripts){if(typeof data!=="string"){return[];}if(typeof context==="boolean"){keepScripts=context;context=false;}var base,parsed,scripts;if(!context){if(support.createHTMLDocument){context=document.implementation.createHTMLDocument("");base=context.createElement("base");base.href=document.location.href;context.head.appendChild(base);}else{context=document;}}parsed
=rsingleTag.exec(data);scripts=!keepScripts&&[];if(parsed){return[context.createElement(parsed[1])];}parsed=buildFragment([data],context,scripts);if(scripts&&scripts.length){jQuery(scripts).remove();}return jQuery.merge([],parsed.childNodes);};jQuery.fn.load=function(url,params,callback){var selector,type,response,self=this,off=url.indexOf(" ");if(off>-1){selector=stripAndCollapse(url.slice(off));url=url.slice(0,off);}if(isFunction(params)){callback=params;params=undefined;}else if(params&&typeof params==="object"){type="POST";}if(self.length>0){jQuery.ajax({url:url,type:type||"GET",dataType:"html",data:params}).done(function(responseText){response=arguments;self.html(selector?jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector):responseText);}).always(callback&&function(jqXHR,status){self.each(function(){callback.apply(this,response||[jqXHR.responseText,status,jqXHR]);});});}return this;};jQuery.expr.pseudos.animated=function(elem){return jQuery.grep(jQuery.timers,
function(fn){return elem===fn.elem;}).length;};jQuery.offset={setOffset:function(elem,options,i){var curPosition,curLeft,curCSSTop,curTop,curOffset,curCSSLeft,calculatePosition,position=jQuery.css(elem,"position"),curElem=jQuery(elem),props={};if(position==="static"){elem.style.position="relative";}curOffset=curElem.offset();curCSSTop=jQuery.css(elem,"top");curCSSLeft=jQuery.css(elem,"left");calculatePosition=(position==="absolute"||position==="fixed")&&(curCSSTop+curCSSLeft).indexOf("auto")>-1;if(calculatePosition){curPosition=curElem.position();curTop=curPosition.top;curLeft=curPosition.left;}else{curTop=parseFloat(curCSSTop)||0;curLeft=parseFloat(curCSSLeft)||0;}if(isFunction(options)){options=options.call(elem,i,jQuery.extend({},curOffset));}if(options.top!=null){props.top=(options.top-curOffset.top)+curTop;}if(options.left!=null){props.left=(options.left-curOffset.left)+curLeft;}if("using"in options){options.using.call(elem,props);}else{curElem.css(props);}}};jQuery.fn.extend({
offset:function(options){if(arguments.length){return options===undefined?this:this.each(function(i){jQuery.offset.setOffset(this,options,i);});}var rect,win,elem=this[0];if(!elem){return;}if(!elem.getClientRects().length){return{top:0,left:0};}rect=elem.getBoundingClientRect();win=elem.ownerDocument.defaultView;return{top:rect.top+win.pageYOffset,left:rect.left+win.pageXOffset};},position:function(){if(!this[0]){return;}var offsetParent,offset,doc,elem=this[0],parentOffset={top:0,left:0};if(jQuery.css(elem,"position")==="fixed"){offset=elem.getBoundingClientRect();}else{offset=this.offset();doc=elem.ownerDocument;offsetParent=elem.offsetParent||doc.documentElement;while(offsetParent&&(offsetParent===doc.body||offsetParent===doc.documentElement)&&jQuery.css(offsetParent,"position")==="static"){offsetParent=offsetParent.parentNode;}if(offsetParent&&offsetParent!==elem&&offsetParent.nodeType===1){parentOffset=jQuery(offsetParent).offset();parentOffset.top+=jQuery.css(offsetParent,
"borderTopWidth",true);parentOffset.left+=jQuery.css(offsetParent,"borderLeftWidth",true);}}return{top:offset.top-parentOffset.top-jQuery.css(elem,"marginTop",true),left:offset.left-parentOffset.left-jQuery.css(elem,"marginLeft",true)};},offsetParent:function(){return this.map(function(){var offsetParent=this.offsetParent;while(offsetParent&&jQuery.css(offsetParent,"position")==="static"){offsetParent=offsetParent.offsetParent;}return offsetParent||documentElement;});}});jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top="pageYOffset"===prop;jQuery.fn[method]=function(val){return access(this,function(elem,method,val){var win;if(isWindow(elem)){win=elem;}else if(elem.nodeType===9){win=elem.defaultView;}if(val===undefined){return win?win[prop]:elem[method];}if(win){win.scrollTo(!top?val:win.pageXOffset,top?val:win.pageYOffset);}else{elem[method]=val;}},method,val,arguments.length);};});jQuery.each(["top","left"],function(_i,prop){jQuery.cssHooks[
prop]=addGetHookIf(support.pixelPosition,function(elem,computed){if(computed){computed=curCSS(elem,prop);return rnumnonpx.test(computed)?jQuery(elem).position()[prop]+"px":computed;}});});jQuery.each({Height:"height",Width:"width"},function(name,type){jQuery.each({padding:"inner"+name,content:type,"":"outer"+name},function(defaultExtra,funcName){jQuery.fn[funcName]=function(margin,value){var chainable=arguments.length&&(defaultExtra||typeof margin!=="boolean"),extra=defaultExtra||(margin===true||value===true?"margin":"border");return access(this,function(elem,type,value){var doc;if(isWindow(elem)){return funcName.indexOf("outer")===0?elem["inner"+name]:elem.document.documentElement["client"+name];}if(elem.nodeType===9){doc=elem.documentElement;return Math.max(elem.body["scroll"+name],doc["scroll"+name],elem.body["offset"+name],doc["offset"+name],doc["client"+name]);}return value===undefined?jQuery.css(elem,type,extra):jQuery.style(elem,type,value,extra);},type,chainable?margin:
undefined,chainable);};});});jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(_i,type){jQuery.fn[type]=function(fn){return this.on(type,fn);};});jQuery.fn.extend({bind:function(types,data,fn){return this.on(types,null,data,fn);},unbind:function(types,fn){return this.off(types,null,fn);},delegate:function(selector,types,data,fn){return this.on(types,selector,data,fn);},undelegate:function(selector,types,fn){return arguments.length===1?this.off(selector,"**"):this.off(types,selector||"**",fn);},hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver);}});jQuery.each(("blur focus focusin focusout resize scroll click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup contextmenu").split(" "),function(_i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name);};});var rtrim=
/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;jQuery.proxy=function(fn,context){var tmp,args,proxy;if(typeof context==="string"){tmp=fn[context];context=fn;fn=tmp;}if(!isFunction(fn)){return undefined;}args=slice.call(arguments,2);proxy=function(){return fn.apply(context||this,args.concat(slice.call(arguments)));};proxy.guid=fn.guid=fn.guid||jQuery.guid++;return proxy;};jQuery.holdReady=function(hold){if(hold){jQuery.readyWait++;}else{jQuery.ready(true);}};jQuery.isArray=Array.isArray;jQuery.parseJSON=JSON.parse;jQuery.nodeName=nodeName;jQuery.isFunction=isFunction;jQuery.isWindow=isWindow;jQuery.camelCase=camelCase;jQuery.type=toType;jQuery.now=Date.now;jQuery.isNumeric=function(obj){var type=jQuery.type(obj);return(type==="number"||type==="string")&&!isNaN(obj-parseFloat(obj));};jQuery.trim=function(text){return text==null?"":(text+"").replace(rtrim,"$1");};if(typeof define==="function"&&define.amd){define("jquery",[],function(){return jQuery;});}var _jQuery=window.jQuery,_$=
window.$;jQuery.noConflict=function(deep){if(window.$===jQuery){window.$=_$;}if(deep&&window.jQuery===jQuery){window.jQuery=_jQuery;}return jQuery;};if(typeof noGlobal==="undefined"){window.jQuery=window.$=jQuery;}return jQuery;});});mw.loader.implement("oojs-ui-core@1i4uv",function($,jQuery,require,module){(function(OO){'use strict';OO.ui={};OO.ui.bind=$.proxy;OO.ui.Keys={UNDEFINED:0,BACKSPACE:8,DELETE:46,LEFT:37,RIGHT:39,UP:38,DOWN:40,ENTER:13,END:35,HOME:36,TAB:9,PAGEUP:33,PAGEDOWN:34,ESCAPE:27,SHIFT:16,SPACE:32};OO.ui.MouseButtons={LEFT:1,MIDDLE:2,RIGHT:3};OO.ui.elementId=0;OO.ui.generateElementId=function(){OO.ui.elementId++;return'ooui-'+OO.ui.elementId;};OO.ui.isFocusableElement=function($element){var element=$element[0];if(element.disabled){return false;}if(!($.expr.pseudos.visible(element)&&!$element.parents().addBack().filter(function(){return $.css(this,'visibility')==='hidden';}).length)){return false;}if(element.contentEditable==='true'){return true;}if($element.prop('tabIndex')>=0){return true;}var nodeName=element.nodeName.toLowerCase();if(['input','select','textarea','button','object'].indexOf(nodeName)!==-1){return true;}if((nodeName==='a'||nodeName==='area')&&$element.attr('href')!==undefined){
return true;}return false;};OO.ui.findFocusable=function($container,backwards){var $focusable=$([]),$focusableCandidates=$container.find('input, select, textarea, button, object, a, area, [contenteditable], [tabindex]');if(backwards){$focusableCandidates=Array.prototype.reverse.call($focusableCandidates);}$focusableCandidates.each(function(){var $this=$(this);if(OO.ui.isFocusableElement($this)){$focusable=$this;return false;}});return $focusable;};OO.ui.getUserLanguages=function(){return['en'];};OO.ui.getLocalValue=function(obj,lang,fallback){if(obj[lang]){return obj[lang];}var langs=OO.ui.getUserLanguages();for(var i=0,len=langs.length;i<len;i++){lang=langs[i];if(obj[lang]){return obj[lang];}}if(obj[fallback]){return obj[fallback];}for(lang in obj){return obj[lang];}return undefined;};OO.ui.contains=function(containers,contained,matchContainers){if(!Array.isArray(containers)){containers=[containers];}for(var i=containers.length-1;i>=0;i--){if((matchContainers&&contained===containers[i
])||$.contains(containers[i],contained)){return true;}}return false;};OO.ui.debounce=function(func,wait,immediate){var timeout;return function(){var context=this,args=arguments,later=function(){timeout=null;if(!immediate){func.apply(context,args);}};if(immediate&&!timeout){func.apply(context,args);}if(!timeout||wait){clearTimeout(timeout);timeout=setTimeout(later,wait);}};};OO.ui.warnDeprecation=function(message){if(OO.getProp(window,'console','warn')!==undefined){console.warn(message);}};OO.ui.throttle=function(func,wait){var context,args,timeout,previous=Date.now()-wait,run=function(){timeout=null;previous=Date.now();func.apply(context,args);};return function(){var remaining=Math.max(wait-(Date.now()-previous),0);context=this;args=arguments;if(!timeout){timeout=setTimeout(run,remaining);}};};OO.ui.infuse=function(node,config){if(typeof node==='string'){OO.ui.warnDeprecation('Passing a selector to infuse is deprecated. Use an HTMLElement or jQuery collection instead.');}return OO.ui.
Element.static.infuse(node,config);};OO.ui.msg=function(key){var messages=OO.ui.msg.messages,message=messages[key],params=Array.prototype.slice.call(arguments,1);if(typeof message==='string'){message=message.replace(/\$(\d+)/g,function(unused,n){var i=parseInt(n,10);return params[i-1]!==undefined?params[i-1]:'$'+n;});}else{message='['+key+']';}return message;};OO.ui.deferMsg=function(){var args=arguments;return function(){return OO.ui.msg.apply(OO.ui,args);};};OO.ui.resolveMsg=function(msg){if(typeof msg==='function'){return msg();}return msg;};OO.ui.isSafeUrl=function(url){function stringStartsWith(haystack,needle){return haystack.slice(0,needle.length)===needle;}var protocolAllowList=['bitcoin','ftp','ftps','geo','git','gopher','http','https','irc','ircs','magnet','mailto','mms','news','nntp','redis','sftp','sip','sips','sms','ssh','svn','tel','telnet','urn','worldwind','xmpp'];if(url===''){return true;}for(var i=0;i<protocolAllowList.length;i++){if(stringStartsWith(url,
protocolAllowList[i]+':')){return true;}}if(stringStartsWith(url,'/')||stringStartsWith(url,'./')){return true;}if(stringStartsWith(url,'?')||stringStartsWith(url,'#')){return true;}return false;};OO.ui.isMobile=function(){return false;};OO.ui.getViewportSpacing=function(){return{top:0,right:0,bottom:0,left:0};};OO.ui.getDefaultOverlay=function(){if(!OO.ui.$defaultOverlay){OO.ui.$defaultOverlay=$('<div>').addClass('oo-ui-defaultOverlay');$(document.body).append(OO.ui.$defaultOverlay);}return OO.ui.$defaultOverlay;};OO.ui.msg.messages={"ooui-outline-control-move-down":"Move item down","ooui-outline-control-move-up":"Move item up","ooui-outline-control-remove":"Remove item","ooui-toolbar-more":"More","ooui-toolgroup-expand":"More","ooui-toolgroup-collapse":"Fewer","ooui-item-remove":"Remove","ooui-dialog-message-accept":"OK","ooui-dialog-message-reject":"Cancel","ooui-dialog-process-error":"Something went wrong","ooui-dialog-process-dismiss":"Dismiss","ooui-dialog-process-retry":
"Try again","ooui-dialog-process-continue":"Continue","ooui-combobox-button-label":"Toggle options","ooui-selectfile-button-select":"Select a file","ooui-selectfile-button-select-multiple":"Select files","ooui-selectfile-not-supported":"File selection is not supported","ooui-selectfile-placeholder":"No file is selected","ooui-selectfile-dragdrop-placeholder":"Drop file here","ooui-selectfile-dragdrop-placeholder-multiple":"Drop files here","ooui-popup-widget-close-button-aria-label":"Close","ooui-field-help":"Help"};OO.ui.mixin={};OO.ui.Element=function OoUiElement(config){if(OO.ui.isDemo){this.initialConfig=config;}config=config||{};this.elementId=null;this.visible=true;this.data=config.data;this.$element=config.$element||$(window.document.createElement(this.getTagName()));this.elementGroup=null;var doc=OO.ui.Element.static.getDocument(this.$element);if(Array.isArray(config.classes)){this.$element.addClass(config.classes.filter(function(val){return val;}));}if(config.id){this.
setElementId(config.id);}if(config.text){this.$element.text(config.text);}if(config.content){this.$element.append(config.content.map(function(v){if(typeof v==='string'){return v?doc.createTextNode(v):undefined;}else if(v instanceof OO.ui.HtmlSnippet){return v.toString();}else if(v instanceof OO.ui.Element){return v.$element;}return v;}));}if(config.$content){this.$element.append(config.$content);}};OO.initClass(OO.ui.Element);OO.ui.Element.static.tagName='div';OO.ui.Element.static.infuse=function(node,config){var obj=OO.ui.Element.static.unsafeInfuse(node,config,false);return obj;};OO.ui.Element.static.unsafeInfuse=function(elem,config,domPromise){var $elem=$(elem);if($elem.length>1){throw new Error('Collection contains more than one element');}if(!$elem.length){throw new Error('Widget not found');}if($elem[0].$oouiInfused){$elem=$elem[0].$oouiInfused;}var id=$elem.attr('id');var doc=this.getDocument($elem);var data=$elem.data('ooui-infused');if(data){if(data===true){throw new Error(
'Circular dependency! '+id);}if(domPromise){var stateCache=data.constructor.static.gatherPreInfuseState($elem,data);domPromise.done(data.restorePreInfuseState.bind(data,stateCache));var infusedChildrenCache=$elem.data('ooui-infused-children');if(infusedChildrenCache&&infusedChildrenCache.length){infusedChildrenCache.forEach(function(childData){var childState=childData.constructor.static.gatherPreInfuseState($elem,childData);domPromise.done(childData.restorePreInfuseState.bind(childData,childState));});}}return data;}data=$elem.attr('data-ooui');if(!data){throw new Error('No infusion data found: '+id);}try{data=JSON.parse(data);}catch(_){data=null;}if(!(data&&data._)){throw new Error('No valid infusion data found: '+id);}if(data._==='Tag'){return new OO.ui.Element($.extend({},config,{$element:$elem}));}var parts=data._.split('.');var cls=OO.getProp.apply(OO,[window].concat(parts));if(!(cls&&(cls===OO.ui.Element||cls.prototype instanceof OO.ui.Element))){throw new Error(
'Unknown widget type: id: '+id+', class: '+data._);}var top;if(!domPromise){top=$.Deferred();domPromise=top.promise();}$elem.data('ooui-infused',true);data.id=id;var infusedChildren=[];data=OO.copy(data,null,function deserialize(value){var infused;if(OO.isPlainObject(value)){if(value.tag&&doc.getElementById(value.tag)){infused=OO.ui.Element.static.unsafeInfuse(doc.getElementById(value.tag),config,domPromise);infusedChildren.push(infused);infusedChildren.push.apply(infusedChildren,infused.$element.data('ooui-infused-children')||[]);infused.$element.removeData('ooui-infused-children');return infused;}if(value.html!==undefined){return new OO.ui.HtmlSnippet(value.html);}}});data=cls.static.reusePreInfuseDOM($elem[0],data);var state=cls.static.gatherPreInfuseState($elem[0],data);var obj=new cls($.extend({},config,data));$elem[0].$oouiInfused=obj.$element;if(top){if($elem[0]!==obj.$element[0]){$elem.replaceWith(obj.$element);}top.resolve();}obj.$element.data({'ooui-infused':obj,
'ooui-infused-children':infusedChildren}).attr('data-ooui','');domPromise.done(obj.restorePreInfuseState.bind(obj,state));return obj;};OO.ui.Element.static.reusePreInfuseDOM=function(node,config){return config;};OO.ui.Element.static.gatherPreInfuseState=function(){return{};};OO.ui.Element.static.getDocument=function(obj){return obj.ownerDocument||obj.document||(obj.nodeType===Node.DOCUMENT_NODE&&obj)||(obj[0]&&obj[0].ownerDocument)||obj.context||null;};OO.ui.Element.static.getWindow=function(obj){var doc=this.getDocument(obj);return doc.defaultView;};OO.ui.Element.static.getDir=function(obj){if(obj instanceof $){obj=obj[0];}var isDoc=obj.nodeType===Node.DOCUMENT_NODE;var isWin=obj.document!==undefined;if(isDoc||isWin){if(isWin){obj=obj.document;}obj=obj.body;}return $(obj).css('direction');};OO.ui.Element.static.getFrameOffset=function(from,to,offset){if(!to){to=window;}if(!offset){offset={top:0,left:0};}if(from.parent===from){return offset;}var frame;var frames=from.parent.document.
getElementsByTagName('iframe');for(var i=0,len=frames.length;i<len;i++){if(frames[i].contentWindow===from){frame=frames[i];break;}}if(frame){var rect=frame.getBoundingClientRect();offset.left+=rect.left;offset.top+=rect.top;if(from!==to){this.getFrameOffset(from.parent,offset);}}return offset;};OO.ui.Element.static.getRelativePosition=function($element,$anchor){var pos=$element.offset(),anchorPos=$anchor.offset(),elementDocument=this.getDocument($element),anchorDocument=this.getDocument($anchor);while(elementDocument!==anchorDocument){var iframe=elementDocument.defaultView.frameElement;if(!iframe){throw new Error('$element frame is not contained in $anchor frame');}var iframePos=$(iframe).offset();pos.left+=iframePos.left;pos.top+=iframePos.top;elementDocument=this.getDocument(iframe);}pos.left-=anchorPos.left;pos.top-=anchorPos.top;return pos;};OO.ui.Element.static.getBorders=function(el){var doc=this.getDocument(el),win=doc.defaultView,style=win.getComputedStyle(el,null),$el=$(el),
top=parseFloat(style?style.borderTopWidth:$el.css('borderTopWidth'))||0,left=parseFloat(style?style.borderLeftWidth:$el.css('borderLeftWidth'))||0,bottom=parseFloat(style?style.borderBottomWidth:$el.css('borderBottomWidth'))||0,right=parseFloat(style?style.borderRightWidth:$el.css('borderRightWidth'))||0;return{top:top,left:left,bottom:bottom,right:right};};OO.ui.Element.static.getDimensions=function(el){var doc=this.getDocument(el),win=doc.defaultView;if(win===el||el===doc.documentElement){var $win=$(win);return{borders:{top:0,left:0,bottom:0,right:0},scroll:{top:$win.scrollTop(),left:OO.ui.Element.static.getScrollLeft(win)},scrollbar:{right:0,bottom:0},rect:{top:0,left:0,bottom:$win.innerHeight(),right:$win.innerWidth()}};}else{var $el=$(el);return{borders:this.getBorders(el),scroll:{top:$el.scrollTop(),left:OO.ui.Element.static.getScrollLeft(el)},scrollbar:{right:$el.innerWidth()-el.clientWidth,bottom:$el.innerHeight()-el.clientHeight},rect:el.getBoundingClientRect()};}};(function()
{var rtlScrollType=null;function rtlScrollTypeTest(){var $definer=$('<div>').attr({dir:'rtl',style:'font-size: 14px; width: 4px; height: 1px; position: absolute; top: -1000px; overflow: scroll;'}).text('ABCD'),definer=$definer[0];$definer.appendTo('body');if(definer.scrollLeft>0){rtlScrollType='default';}else{definer.scrollLeft=1;if(definer.scrollLeft===0){rtlScrollType='negative';}else{rtlScrollType='reverse';}}$definer.remove();}function isRoot(el){return el===el.window||el===el.ownerDocument.body||el===el.ownerDocument.documentElement;}OO.ui.Element.static.computeNormalizedScrollLeft=function(nativeOffset,el){var direction=isRoot(el)?'ltr':$(el).css('direction');if(direction==='rtl'){if(rtlScrollType===null){rtlScrollTypeTest();}if(rtlScrollType==='reverse'){return-nativeOffset;}else if(rtlScrollType==='default'){return nativeOffset-el.scrollWidth+el.clientWidth;}}return nativeOffset;};OO.ui.Element.static.computeNativeScrollLeft=function(normalizedOffset,el){var direction=isRoot(el
)?'ltr':$(el).css('direction');if(direction==='rtl'){if(rtlScrollType===null){rtlScrollTypeTest();}if(rtlScrollType==='reverse'){return-normalizedOffset;}else if(rtlScrollType==='default'){return normalizedOffset+el.scrollWidth-el.clientWidth;}}return normalizedOffset;};OO.ui.Element.static.getScrollLeft=function(el){var scrollLeft=isRoot(el)?$(window).scrollLeft():el.scrollLeft;scrollLeft=OO.ui.Element.static.computeNormalizedScrollLeft(scrollLeft,el);return scrollLeft;};OO.ui.Element.static.setScrollLeft=function(el,scrollLeft){scrollLeft=OO.ui.Element.static.computeNativeScrollLeft(scrollLeft,el);if(isRoot(el)){$(window).scrollLeft(scrollLeft);}else{el.scrollLeft=scrollLeft;}};}());OO.ui.Element.static.getRootScrollableElement=function(el){var doc=this.getDocument(el);if(OO.ui.scrollableElement===undefined){var body=doc.body;var scrollTop=body.scrollTop;body.scrollTop=1;if(Math.round(body.scrollTop)===1){body.scrollTop=scrollTop;OO.ui.scrollableElement='body';}else{OO.ui.
scrollableElement='documentElement';}}return doc[OO.ui.scrollableElement];};OO.ui.Element.static.getClosestScrollableContainer=function(el,dimension){var doc=this.getDocument(el),rootScrollableElement=this.getRootScrollableElement(el),props=['overflow-x','overflow-y'],$parent=$(el).parent();if(el===doc.documentElement){return rootScrollableElement;}if(dimension==='x'||dimension==='y'){props=['overflow-'+dimension];}while($parent.length&&$parent[0]!==doc){if($parent[0]===rootScrollableElement){return $parent[0];}var i=props.length;while(i--){var val=$parent.css(props[i]);if(val==='auto'||val==='scroll'){if($parent[0]===doc.body){return rootScrollableElement;}else{return $parent[0];}}}$parent=$parent.parent();}return rootScrollableElement;};OO.ui.Element.static.scrollIntoView=function(elOrPosition,config){var deferred=$.Deferred();config=config||{};var padding=$.extend({top:0,bottom:0,left:0,right:0},config.padding);var animate=config.animate!==false;var animations={};var elementPosition
=elOrPosition instanceof HTMLElement?this.getDimensions(elOrPosition).rect:elOrPosition;var container=config.scrollContainer||(elOrPosition instanceof HTMLElement?this.getClosestScrollableContainer(elOrPosition,config.direction):this.getClosestScrollableContainer(window.document.body));var $container=$(container);var containerDimensions=this.getDimensions(container);var $window=$(this.getWindow(container));var position;if($container.is('html, body')){position={top:elementPosition.top,bottom:$window.innerHeight()-elementPosition.bottom,left:elementPosition.left,right:$window.innerWidth()-elementPosition.right};}else{position={top:elementPosition.top-(containerDimensions.rect.top+containerDimensions.borders.top),bottom:containerDimensions.rect.bottom-containerDimensions.borders.bottom-containerDimensions.scrollbar.bottom-elementPosition.bottom,left:elementPosition.left-(containerDimensions.rect.left+containerDimensions.borders.left),right:containerDimensions.rect.right-
containerDimensions.borders.right-containerDimensions.scrollbar.right-elementPosition.right};}if(!config.direction||config.direction==='y'){if(position.top<padding.top||config.alignToTop){animations.scrollTop=containerDimensions.scroll.top+position.top-padding.top;}else if(position.bottom<padding.bottom){animations.scrollTop=containerDimensions.scroll.top+Math.min(position.top-padding.top,-position.bottom+padding.bottom);}}if(!config.direction||config.direction==='x'){if(position.left<padding.left){animations.scrollLeft=containerDimensions.scroll.left+position.left-padding.left;}else if(position.right<padding.right){animations.scrollLeft=containerDimensions.scroll.left+Math.min(position.left-padding.left,-position.right+padding.right);}if(animations.scrollLeft!==undefined){animations.scrollLeft=OO.ui.Element.static.computeNativeScrollLeft(animations.scrollLeft,container);}}if(!$.isEmptyObject(animations)){if(animate){$container.stop(true).animate(animations,{duration:config.duration===
undefined?'fast':config.duration,always:deferred.resolve});}else{$container.stop(true);for(var method in animations){$container[method](animations[method]);}deferred.resolve();}}else{deferred.resolve();}return deferred.promise();};OO.ui.Element.static.reconsiderScrollbars=function(el){var scrollLeft=el.scrollLeft;var scrollTop=el.scrollTop;var nodes=[];while(el.firstChild){nodes.push(el.firstChild);el.removeChild(el.firstChild);}void el.offsetHeight;for(var i=0,len=nodes.length;i<len;i++){el.appendChild(nodes[i]);}el.scrollLeft=scrollLeft;el.scrollTop=scrollTop;};OO.ui.Element.prototype.toggle=function(show){show=show===undefined?!this.visible:!!show;if(show!==this.isVisible()){this.visible=show;this.$element.toggleClass('oo-ui-element-hidden',!this.visible);this.emit('toggle',show);}return this;};OO.ui.Element.prototype.isVisible=function(){return this.visible;};OO.ui.Element.prototype.getData=function(){return this.data;};OO.ui.Element.prototype.setData=function(data){this.data=data;
return this;};OO.ui.Element.prototype.setElementId=function(id){this.elementId=id;this.$element.attr('id',id);return this;};OO.ui.Element.prototype.getElementId=function(){if(this.elementId===null){this.setElementId(OO.ui.generateElementId());}return this.elementId;};OO.ui.Element.prototype.supports=function(methods){if(!Array.isArray(methods)){return typeof this[methods]==='function';}var element=this;return methods.every(function(method){return typeof element[method]==='function';});};OO.ui.Element.prototype.updateThemeClasses=function(){OO.ui.theme.queueUpdateElementClasses(this);};OO.ui.Element.prototype.getTagName=function(){return this.constructor.static.tagName;};OO.ui.Element.prototype.isElementAttached=function(){return $.contains(this.getElementDocument(),this.$element[0]);};OO.ui.Element.prototype.getElementDocument=function(){return OO.ui.Element.static.getDocument(this.$element);};OO.ui.Element.prototype.getElementWindow=function(){return OO.ui.Element.static.getWindow(
this.$element);};OO.ui.Element.prototype.getClosestScrollableElementContainer=function(){return OO.ui.Element.static.getClosestScrollableContainer(this.$element[0]);};OO.ui.Element.prototype.getElementGroup=function(){return this.elementGroup;};OO.ui.Element.prototype.setElementGroup=function(group){this.elementGroup=group;return this;};OO.ui.Element.prototype.scrollElementIntoView=function(config){if(!this.isElementAttached()||!this.isVisible()||(this.getElementGroup()&&!this.getElementGroup().isVisible())){return $.Deferred().resolve();}return OO.ui.Element.static.scrollIntoView(this.$element[0],config);};OO.ui.Element.prototype.restorePreInfuseState=function(){};OO.ui.HtmlSnippet=function OoUiHtmlSnippet(content){this.content=content;};OO.initClass(OO.ui.HtmlSnippet);OO.ui.HtmlSnippet.prototype.toString=function(){return this.content;};OO.ui.Layout=function OoUiLayout(config){config=config||{};OO.ui.Layout.super.call(this,config);OO.EventEmitter.call(this);this.$element.addClass(
'oo-ui-layout');};OO.inheritClass(OO.ui.Layout,OO.ui.Element);OO.mixinClass(OO.ui.Layout,OO.EventEmitter);OO.ui.Layout.prototype.resetScroll=function(){this.$element[0].scrollTop=0;OO.ui.Element.static.setScrollLeft(this.$element[0],0);return this;};OO.ui.Widget=function OoUiWidget(config){OO.ui.Widget.super.call(this,config);OO.EventEmitter.call(this);this.disabled=null;this.wasDisabled=null;this.$element.addClass('oo-ui-widget');this.setDisabled(config&&config.disabled);};OO.inheritClass(OO.ui.Widget,OO.ui.Element);OO.mixinClass(OO.ui.Widget,OO.EventEmitter);OO.ui.Widget.prototype.isDisabled=function(){return this.disabled;};OO.ui.Widget.prototype.setDisabled=function(disabled){this.disabled=!!disabled;var isDisabled=this.isDisabled();if(isDisabled!==this.wasDisabled){this.$element.toggleClass('oo-ui-widget-disabled',isDisabled);this.$element.toggleClass('oo-ui-widget-enabled',!isDisabled);this.$element.attr('aria-disabled',isDisabled?'true':null);this.emit('disable',isDisabled);this
.updateThemeClasses();this.wasDisabled=isDisabled;}return this;};OO.ui.Widget.prototype.updateDisabled=function(){this.setDisabled(this.disabled);return this;};OO.ui.Widget.prototype.getInputId=function(){return null;};OO.ui.Widget.prototype.simulateLabelClick=function(){};OO.ui.Widget.prototype.setLabelledBy=function(id){if(id){this.$element.attr('aria-labelledby',id);}else{this.$element.removeAttr('aria-labelledby');}};OO.ui.Theme=function OoUiTheme(){this.elementClassesQueue=[];this.debouncedUpdateQueuedElementClasses=OO.ui.debounce(this.updateQueuedElementClasses);};OO.initClass(OO.ui.Theme);OO.ui.Theme.prototype.getElementClasses=function(){return{on:[],off:[]};};OO.ui.Theme.prototype.updateElementClasses=function(element){var domElements=[];if(element.$icon){domElements.push(element.$icon[0]);}if(element.$indicator){domElements.push(element.$indicator[0]);}if(domElements.length){var classes=this.getElementClasses(element);$(domElements).removeClass(classes.off).addClass(classes.
on);}};OO.ui.Theme.prototype.updateQueuedElementClasses=function(){for(var i=0;i<this.elementClassesQueue.length;i++){this.updateElementClasses(this.elementClassesQueue[i]);}this.elementClassesQueue=[];};OO.ui.Theme.prototype.queueUpdateElementClasses=function(element){if(this.elementClassesQueue.lastIndexOf(element)!==-1){return;}this.elementClassesQueue.push(element);this.debouncedUpdateQueuedElementClasses();};OO.ui.Theme.prototype.getDialogTransitionDuration=function(){return 0;};OO.ui.mixin.TabIndexedElement=function OoUiMixinTabIndexedElement(config){config=$.extend({tabIndex:0},config);this.$tabIndexed=null;this.tabIndex=null;this.connect(this,{disable:'onTabIndexedElementDisable'});this.setTabIndex(config.tabIndex);this.setTabIndexedElement(config.$tabIndexed||this.$element);};OO.initClass(OO.ui.mixin.TabIndexedElement);OO.ui.mixin.TabIndexedElement.prototype.setTabIndexedElement=function($tabIndexed){var tabIndex=this.tabIndex;this.setTabIndex(null);this.$tabIndexed=
$tabIndexed;this.tabIndex=tabIndex;return this.updateTabIndex();};OO.ui.mixin.TabIndexedElement.prototype.setTabIndex=function(tabIndex){tabIndex=/^-?\d+$/.test(tabIndex)?Number(tabIndex):null;if(this.tabIndex!==tabIndex){this.tabIndex=tabIndex;this.updateTabIndex();}return this;};OO.ui.mixin.TabIndexedElement.prototype.updateTabIndex=function(){if(this.$tabIndexed){if(this.tabIndex!==null){this.$tabIndexed.attr({tabindex:this.isDisabled()?-1:this.tabIndex,'aria-disabled':this.isDisabled()?'true':null});}else{this.$tabIndexed.removeAttr('tabindex aria-disabled');}}return this;};OO.ui.mixin.TabIndexedElement.prototype.onTabIndexedElementDisable=function(){this.updateTabIndex();};OO.ui.mixin.TabIndexedElement.prototype.getTabIndex=function(){return this.tabIndex;};OO.ui.mixin.TabIndexedElement.prototype.getInputId=function(){if(!this.$tabIndexed){return null;}if(!this.isLabelableNode(this.$tabIndexed)){return null;}var id=this.$tabIndexed.attr('id');if(id===undefined){id=OO.ui.
generateElementId();this.$tabIndexed.attr('id',id);}return id;};OO.ui.mixin.TabIndexedElement.prototype.isLabelableNode=function($node){var labelableTags=['button','meter','output','progress','select','textarea'],tagName=($node.prop('tagName')||'').toLowerCase();if(tagName==='input'&&$node.attr('type')!=='hidden'){return true;}if(labelableTags.indexOf(tagName)!==-1){return true;}return false;};OO.ui.mixin.TabIndexedElement.prototype.focus=function(){if(!this.isDisabled()){this.$tabIndexed.trigger('focus');}return this;};OO.ui.mixin.TabIndexedElement.prototype.blur=function(){this.$tabIndexed.trigger('blur');return this;};OO.ui.mixin.TabIndexedElement.prototype.simulateLabelClick=function(){this.focus();};OO.ui.mixin.ButtonElement=function OoUiMixinButtonElement(config){config=config||{};this.$button=null;this.framed=null;this.active=config.active!==undefined&&config.active;this.onDocumentMouseUpHandler=this.onDocumentMouseUp.bind(this);this.onMouseDownHandler=this.onMouseDown.bind(this
);this.onDocumentKeyUpHandler=this.onDocumentKeyUp.bind(this);this.onKeyDownHandler=this.onKeyDown.bind(this);this.onClickHandler=this.onClick.bind(this);this.onKeyPressHandler=this.onKeyPress.bind(this);this.$element.addClass('oo-ui-buttonElement');this.toggleFramed(config.framed===undefined||config.framed);this.setButtonElement(config.$button||$('<a>'));};OO.initClass(OO.ui.mixin.ButtonElement);OO.ui.mixin.ButtonElement.static.cancelButtonMouseDownEvents=true;OO.ui.mixin.ButtonElement.prototype.setButtonElement=function($button){if(this.$button){this.$button.removeClass('oo-ui-buttonElement-button').removeAttr('role accesskey').off({mousedown:this.onMouseDownHandler,keydown:this.onKeyDownHandler,click:this.onClickHandler,keypress:this.onKeyPressHandler});}this.$button=$button.addClass('oo-ui-buttonElement-button').on({mousedown:this.onMouseDownHandler,keydown:this.onKeyDownHandler,click:this.onClickHandler,keypress:this.onKeyPressHandler});if(this.$button.prop('tagName').toUpperCase(
)==='A'){this.$button.attr('role','button');}};OO.ui.mixin.ButtonElement.prototype.onMouseDown=function(e){if(this.isDisabled()||e.which!==OO.ui.MouseButtons.LEFT){return;}this.$element.addClass('oo-ui-buttonElement-pressed');this.getElementDocument().addEventListener('mouseup',this.onDocumentMouseUpHandler,true);if(this.constructor.static.cancelButtonMouseDownEvents){return false;}};OO.ui.mixin.ButtonElement.prototype.onDocumentMouseUp=function(e){if(this.isDisabled()||e.which!==OO.ui.MouseButtons.LEFT){return;}this.$element.removeClass('oo-ui-buttonElement-pressed');this.getElementDocument().removeEventListener('mouseup',this.onDocumentMouseUpHandler,true);};OO.ui.mixin.ButtonElement.prototype.onClick=function(e){if(!this.isDisabled()&&e.which===OO.ui.MouseButtons.LEFT){if(this.emit('click')){return false;}}};OO.ui.mixin.ButtonElement.prototype.onKeyDown=function(e){if(this.isDisabled()||(e.which!==OO.ui.Keys.SPACE&&e.which!==OO.ui.Keys.ENTER)){return;}this.$element.addClass(
'oo-ui-buttonElement-pressed');this.getElementDocument().addEventListener('keyup',this.onDocumentKeyUpHandler,true);};OO.ui.mixin.ButtonElement.prototype.onDocumentKeyUp=function(e){if(this.isDisabled()||(e.which!==OO.ui.Keys.SPACE&&e.which!==OO.ui.Keys.ENTER)){return;}this.$element.removeClass('oo-ui-buttonElement-pressed');this.getElementDocument().removeEventListener('keyup',this.onDocumentKeyUpHandler,true);};OO.ui.mixin.ButtonElement.prototype.onKeyPress=function(e){if(!this.isDisabled()&&(e.which===OO.ui.Keys.SPACE||e.which===OO.ui.Keys.ENTER)){if(this.emit('click')){return false;}}};OO.ui.mixin.ButtonElement.prototype.isFramed=function(){return this.framed;};OO.ui.mixin.ButtonElement.prototype.toggleFramed=function(framed){framed=framed===undefined?!this.framed:!!framed;if(framed!==this.framed){this.framed=framed;this.$element.toggleClass('oo-ui-buttonElement-frameless',!framed).toggleClass('oo-ui-buttonElement-framed',framed);this.updateThemeClasses();}return this;};OO.ui.mixin
.ButtonElement.prototype.setActive=function(value){this.active=!!value;this.$element.toggleClass('oo-ui-buttonElement-active',this.active);this.updateThemeClasses();return this;};OO.ui.mixin.ButtonElement.prototype.isActive=function(){return this.active;};OO.ui.mixin.GroupElement=function OoUiMixinGroupElement(config){config=config||{};OO.EmitterList.call(this,config);this.$group=null;this.setGroupElement(config.$group||$('<div>'));};OO.mixinClass(OO.ui.mixin.GroupElement,OO.EmitterList);OO.ui.mixin.GroupElement.prototype.setGroupElement=function($group){this.$group=$group;for(var i=0,len=this.items.length;i<len;i++){this.$group.append(this.items[i].$element);}};OO.ui.mixin.GroupElement.prototype.findItemFromData=function(data){var hash=OO.getHash(data);for(var i=0,len=this.items.length;i<len;i++){var item=this.items[i];if(hash===OO.getHash(item.getData())){return item;}}return null;};OO.ui.mixin.GroupElement.prototype.findItemsFromData=function(data){var hash=OO.getHash(data),items=[]
;for(var i=0,len=this.items.length;i<len;i++){var item=this.items[i];if(hash===OO.getHash(item.getData())){items.push(item);}}return items;};OO.ui.mixin.GroupElement.prototype.addItems=function(items,index){if(!items||!items.length){return this;}OO.EmitterList.prototype.addItems.call(this,items,index);this.emit('change',this.getItems());return this;};OO.ui.mixin.GroupElement.prototype.moveItem=function(items,newIndex){this.insertItemElements(items,newIndex);newIndex=OO.EmitterList.prototype.moveItem.call(this,items,newIndex);return newIndex;};OO.ui.mixin.GroupElement.prototype.insertItem=function(item,index){item.setElementGroup(this);this.insertItemElements(item,index);index=OO.EmitterList.prototype.insertItem.call(this,item,index);return index;};OO.ui.mixin.GroupElement.prototype.insertItemElements=function(itemWidget,index){if(index===undefined||index<0||index>=this.items.length){this.$group.append(itemWidget.$element);}else if(index===0){this.$group.prepend(itemWidget.$element);}
else{this.items[index].$element.before(itemWidget.$element);}};OO.ui.mixin.GroupElement.prototype.removeItems=function(items){if(items.length===0){return this;}for(var i=0,len=items.length;i<len;i++){var item=items[i];var index=this.items.indexOf(item);if(index!==-1){item.setElementGroup(null);item.$element.detach();}}OO.EmitterList.prototype.removeItems.call(this,items);this.emit('change',this.getItems());return this;};OO.ui.mixin.GroupElement.prototype.clearItems=function(){for(var i=0,len=this.items.length;i<len;i++){this.items[i].setElementGroup(null);this.items[i].$element.detach();}OO.EmitterList.prototype.clearItems.call(this);this.emit('change',this.getItems());return this;};OO.ui.mixin.LabelElement=function OoUiMixinLabelElement(config){config=config||{};this.$label=null;this.label=null;this.invisibleLabel=false;this.setLabel(config.label||this.constructor.static.label);this.setLabelElement(config.$label||$('<span>'));this.setInvisibleLabel(config.invisibleLabel);};OO.
initClass(OO.ui.mixin.LabelElement);OO.ui.mixin.LabelElement.static.label=null;OO.ui.mixin.LabelElement.static.highlightQuery=function(text,query,compare,combineMarks){var offset=-1,$result=$('<span>'),comboLength=0,comboMarks='',comboRegex,comboMatch;if(compare){var tLen=text.length;var qLen=query.length;for(var i=0;offset===-1&&i<=tLen-qLen;i++){if(compare(query,text.slice(i,i+qLen))===0){offset=i;}}}else{offset=text.toLowerCase().indexOf(query.toLowerCase());}if(!query.length||offset===-1){$result.text(text);}else{if(combineMarks){comboMarks=
'[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]'
;comboRegex=new RegExp('(^)'+comboMarks+'*');comboMatch=text.slice(offset+query.length).match(comboRegex);if(comboMatch&&comboMatch.length){comboLength=comboMatch[0].length;}}$result.append(document.createTextNode(text.slice(0,offset)),$('<span>').addClass('oo-ui-labelElement-label-highlight').text(text.slice(offset,offset+query.length+comboLength)),document.createTextNode(text.slice(offset+query.length+comboLength)));}return $result.contents();};OO.ui.mixin.LabelElement.prototype.setLabelElement=function($label){if(this.$label){this.$label.removeClass('oo-ui-labelElement-label').empty();}this.$label=$label.addClass('oo-ui-labelElement-label');this.setLabelContent(this.label);};OO.ui.mixin.LabelElement.prototype.setLabelId=function(id){this.$label.attr('id',id);return this;};OO.ui.mixin.LabelElement.prototype.setLabel=function(label){label=OO.ui.resolveMsg(label);label=((typeof label==='string'||label instanceof $)&&label.length)||(label instanceof OO.ui.HtmlSnippet&&label.toString().
length)?label:null;if(this.label!==label){if(this.$label){this.setLabelContent(label);}this.label=label;this.$element.toggleClass('oo-ui-labelElement',!!this.label&&!this.invisibleLabel);this.emit('labelChange');}return this;};OO.ui.mixin.LabelElement.prototype.setInvisibleLabel=function(invisibleLabel){invisibleLabel=!!invisibleLabel;if(this.invisibleLabel!==invisibleLabel){this.invisibleLabel=invisibleLabel;this.$label.toggleClass('oo-ui-labelElement-invisible',this.invisibleLabel);this.$element.toggleClass('oo-ui-labelElement',!!this.label&&!this.invisibleLabel);this.emit('labelChange');}return this;};OO.ui.mixin.LabelElement.prototype.setHighlightedQuery=function(text,query,compare,combineMarks){return this.setLabel(this.constructor.static.highlightQuery(text,query,compare,combineMarks));};OO.ui.mixin.LabelElement.prototype.getLabel=function(){return this.label;};OO.ui.mixin.LabelElement.prototype.setLabelContent=function(label){if(typeof label==='string'){if(label.match(/^\s*$/)){
this.$label.html('&nbsp;');}else{this.$label.text(label);}}else if(label instanceof OO.ui.HtmlSnippet){this.$label.html(label.toString());}else if(label instanceof $){this.$label.empty().append(label);}else{this.$label.empty();}};OO.ui.mixin.IconElement=function OoUiMixinIconElement(config){config=config||{};this.$icon=null;this.icon=null;this.setIcon(config.icon||this.constructor.static.icon);this.setIconElement(config.$icon||$('<span>'));};OO.initClass(OO.ui.mixin.IconElement);OO.ui.mixin.IconElement.static.icon=null;OO.ui.mixin.IconElement.static.iconTitle=null;OO.ui.mixin.IconElement.prototype.setIconElement=function($icon){if(this.$icon){this.$icon.removeClass('oo-ui-iconElement-icon oo-ui-icon-'+this.icon).removeAttr('title');}this.$icon=$icon.addClass('oo-ui-iconElement-icon').toggleClass('oo-ui-iconElement-noIcon',!this.icon).toggleClass('oo-ui-icon-'+this.icon,!!this.icon);if(this.iconTitle!==null){this.$icon.attr('title',this.iconTitle);}this.updateThemeClasses();};OO.ui.
mixin.IconElement.prototype.setIcon=function(icon){if(icon&&typeof icon!=='string'){icon=OO.ui.getLocalValue(icon,null,'default');}if(this.icon===icon){return this;}this.$element.toggleClass('oo-ui-iconElement',!!icon);if(this.$icon){if(this.icon){this.$icon.removeClass('oo-ui-icon-'+this.icon);}if(icon){this.$icon.addClass('oo-ui-icon-'+icon);}this.$icon.toggleClass('oo-ui-iconElement-noIcon',!icon);}this.icon=icon;this.updateThemeClasses();return this;};OO.ui.mixin.IconElement.prototype.getIcon=function(){return this.icon;};OO.ui.mixin.IndicatorElement=function OoUiMixinIndicatorElement(config){config=config||{};this.$indicator=null;this.indicator=null;this.setIndicator(config.indicator||this.constructor.static.indicator);this.setIndicatorElement(config.$indicator||$('<span>'));};OO.initClass(OO.ui.mixin.IndicatorElement);OO.ui.mixin.IndicatorElement.static.indicator=null;OO.ui.mixin.IndicatorElement.static.indicatorTitle=null;OO.ui.mixin.IndicatorElement.prototype.
setIndicatorElement=function($indicator){if(this.$indicator){this.$indicator.removeClass('oo-ui-indicatorElement-indicator oo-ui-indicator-'+this.indicator).removeAttr('title');}this.$indicator=$indicator.addClass('oo-ui-indicatorElement-indicator').toggleClass('oo-ui-indicatorElement-noIndicator',!this.indicator).toggleClass('oo-ui-indicator-'+this.indicator,!!this.indicator);if(this.indicatorTitle!==null){this.$indicator.attr('title',this.indicatorTitle);}this.updateThemeClasses();};OO.ui.mixin.IndicatorElement.prototype.setIndicator=function(indicator){indicator=typeof indicator==='string'&&indicator.length?indicator.trim():null;if(this.indicator!==indicator){if(this.$indicator){if(this.indicator!==null){this.$indicator.removeClass('oo-ui-indicator-'+this.indicator);}if(indicator!==null){this.$indicator.addClass('oo-ui-indicator-'+indicator);}}this.indicator=indicator;}this.$element.toggleClass('oo-ui-indicatorElement',!!this.indicator);if(this.$indicator){this.$indicator.
toggleClass('oo-ui-indicatorElement-noIndicator',!this.indicator);}this.updateThemeClasses();return this;};OO.ui.mixin.IndicatorElement.prototype.getIndicator=function(){return this.indicator;};OO.ui.mixin.FlaggedElement=function OoUiMixinFlaggedElement(config){config=config||{};this.flags={};this.$flagged=null;this.setFlags(config.flags||this.constructor.static.flags);this.setFlaggedElement(config.$flagged||this.$element);};OO.initClass(OO.ui.mixin.FlaggedElement);OO.ui.mixin.FlaggedElement.static.flags=null;OO.ui.mixin.FlaggedElement.prototype.setFlaggedElement=function($flagged){var classNames=Object.keys(this.flags).map(function(flag){return'oo-ui-flaggedElement-'+flag;});if(this.$flagged){this.$flagged.removeClass(classNames);}this.$flagged=$flagged.addClass(classNames);};OO.ui.mixin.FlaggedElement.prototype.hasFlag=function(flag){return this.flags&&(flag in this.flags);};OO.ui.mixin.FlaggedElement.prototype.getFlags=function(){return Object.keys(this.flags||{});};OO.ui.mixin.
FlaggedElement.prototype.clearFlags=function(){var changes={},remove=[],classPrefix='oo-ui-flaggedElement-';for(var flag in this.flags){var className=classPrefix+flag;changes[flag]=false;delete this.flags[flag];remove.push(className);}if(this.$flagged){this.$flagged.removeClass(remove);}this.updateThemeClasses();this.emit('flag',changes);return this;};OO.ui.mixin.FlaggedElement.prototype.setFlags=function(flags){var changes={},add=[],remove=[],classPrefix='oo-ui-flaggedElement-';var className,flag;if(typeof flags==='string'){className=classPrefix+flags;if(!this.flags[flags]){this.flags[flags]=true;add.push(className);}}else if(Array.isArray(flags)){for(var i=0,len=flags.length;i<len;i++){flag=flags[i];className=classPrefix+flag;if(!this.flags[flag]){changes[flag]=true;this.flags[flag]=true;add.push(className);}}}else if(OO.isPlainObject(flags)){for(flag in flags){className=classPrefix+flag;if(flags[flag]){if(!this.flags[flag]){changes[flag]=true;this.flags[flag]=true;add.push(className
);}}else{if(this.flags[flag]){changes[flag]=false;delete this.flags[flag];remove.push(className);}}}}if(this.$flagged){this.$flagged.addClass(add).removeClass(remove);}this.updateThemeClasses();this.emit('flag',changes);return this;};OO.ui.mixin.TitledElement=function OoUiMixinTitledElement(config){config=config||{};this.$titled=null;this.title=null;var title=config.title!==undefined?config.title:this.constructor.static.title;if(title===null&&config.invisibleLabel&&typeof config.label==='string'){title=config.label;}this.setTitle(title);this.setTitledElement(config.$titled||this.$element);};OO.initClass(OO.ui.mixin.TitledElement);OO.ui.mixin.TitledElement.static.title=null;OO.ui.mixin.TitledElement.prototype.setTitledElement=function($titled){if(this.$titled){this.$titled.removeAttr('title');}this.$titled=$titled;this.updateTitle();};OO.ui.mixin.TitledElement.prototype.setTitle=function(title){title=OO.ui.resolveMsg(title);title=typeof title==='string'?title:null;if(this.title!==title)
{this.title=title;this.updateTitle();}return this;};OO.ui.mixin.TitledElement.prototype.updateTitle=function(){var title=this.getTitle();if(this.$titled){if(title!==null){if(this.formatTitleWithAccessKey){title=this.formatTitleWithAccessKey(title);}this.$titled.attr('title',title);}else{this.$titled.removeAttr('title');}}return this;};OO.ui.mixin.TitledElement.prototype.getTitle=function(){return this.title;};OO.ui.mixin.AccessKeyedElement=function OoUiMixinAccessKeyedElement(config){config=config||{};this.$accessKeyed=null;this.accessKey=null;this.setAccessKey(config.accessKey||null);this.setAccessKeyedElement(config.$accessKeyed||this.$element);if(this.updateTitle){this.updateTitle();}};OO.initClass(OO.ui.mixin.AccessKeyedElement);OO.ui.mixin.AccessKeyedElement.static.accessKey=null;OO.ui.mixin.AccessKeyedElement.prototype.setAccessKeyedElement=function($accessKeyed){if(this.$accessKeyed){this.$accessKeyed.removeAttr('accesskey');}this.$accessKeyed=$accessKeyed;if(this.accessKey){
this.$accessKeyed.attr('accesskey',this.accessKey);}};OO.ui.mixin.AccessKeyedElement.prototype.setAccessKey=function(accessKey){accessKey=OO.ui.resolveMsg(accessKey);accessKey=typeof accessKey==='string'?accessKey:null;if(this.accessKey!==accessKey){if(this.$accessKeyed){if(accessKey!==null){this.$accessKeyed.attr('accesskey',accessKey);}else{this.$accessKeyed.removeAttr('accesskey');}}this.accessKey=accessKey;if(this.updateTitle){this.updateTitle();}}return this;};OO.ui.mixin.AccessKeyedElement.prototype.getAccessKey=function(){return this.accessKey;};OO.ui.mixin.AccessKeyedElement.prototype.formatTitleWithAccessKey=function(title){if(!this.$accessKeyed){return title;}var accessKey;if($.fn.updateTooltipAccessKeys&&$.fn.updateTooltipAccessKeys.getAccessKeyLabel){accessKey=$.fn.updateTooltipAccessKeys.getAccessKeyLabel(this.$accessKeyed[0]);}else{accessKey=this.getAccessKey();}if(accessKey){title+=' ['+accessKey+']';}return title;};OO.ui.mixin.RequiredElement=function
OoUiMixinRequiredElement(config){config=config||{};this.$required=config.$required||this.$input||this.$element;this.required=false;this.indicatorElement=config.indicatorElement!==undefined?config.indicatorElement:this;if(this.indicatorElement&&!this.indicatorElement.getIndicator){throw new Error('config.indicatorElement must mixin OO.ui.mixin.IndicatorElement.');}this.setRequired(!!config.required);};OO.initClass(OO.ui.mixin.RequiredElement);OO.ui.mixin.RequiredElement.prototype.setRequiredElement=function($required){if(this.$required===$required){return;}if(this.$required&&this.required){this.updateRequiredElement(false);}this.$required=$required;this.updateRequiredElement();};OO.ui.mixin.RequiredElement.prototype.updateRequiredElement=function(state){if(state===undefined){state=this.required;}this.$required.prop('required',state);};OO.ui.mixin.RequiredElement.prototype.isRequired=function(){return this.required;};OO.ui.mixin.RequiredElement.prototype.setRequired=function(state){if(
this.required===state){return this;}this.required=!!state;this.updateRequiredElement();if(this.indicatorElement){var expected=state?null:'required';if(this.indicatorElement.getIndicator()===expected){this.indicatorElement.setIndicator(state?'required':null);}}return this;};OO.ui.ButtonWidget=function OoUiButtonWidget(config){config=config||{};OO.ui.ButtonWidget.super.call(this,config);OO.ui.mixin.ButtonElement.call(this,config);OO.ui.mixin.IconElement.call(this,config);OO.ui.mixin.IndicatorElement.call(this,config);OO.ui.mixin.LabelElement.call(this,config);OO.ui.mixin.TitledElement.call(this,$.extend({$titled:this.$button},config));OO.ui.mixin.FlaggedElement.call(this,config);OO.ui.mixin.TabIndexedElement.call(this,$.extend({$tabIndexed:this.$button},config));OO.ui.mixin.AccessKeyedElement.call(this,$.extend({$accessKeyed:this.$button},config));this.href=null;this.target=null;this.noFollow=false;this.rel=[];this.connect(this,{disable:'onDisable'});this.$button.append(this.$icon,this.
$label,this.$indicator);this.$element.addClass('oo-ui-buttonWidget').append(this.$button);this.setActive(config.active);this.setHref(config.href);this.setTarget(config.target);if(config.rel!==undefined){this.setRel(config.rel);}else{this.setNoFollow(config.noFollow);}};OO.inheritClass(OO.ui.ButtonWidget,OO.ui.Widget);OO.mixinClass(OO.ui.ButtonWidget,OO.ui.mixin.ButtonElement);OO.mixinClass(OO.ui.ButtonWidget,OO.ui.mixin.IconElement);OO.mixinClass(OO.ui.ButtonWidget,OO.ui.mixin.IndicatorElement);OO.mixinClass(OO.ui.ButtonWidget,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.ButtonWidget,OO.ui.mixin.TitledElement);OO.mixinClass(OO.ui.ButtonWidget,OO.ui.mixin.FlaggedElement);OO.mixinClass(OO.ui.ButtonWidget,OO.ui.mixin.TabIndexedElement);OO.mixinClass(OO.ui.ButtonWidget,OO.ui.mixin.AccessKeyedElement);OO.ui.ButtonWidget.static.cancelButtonMouseDownEvents=false;OO.ui.ButtonWidget.static.tagName='span';OO.ui.ButtonWidget.prototype.getHref=function(){return this.href;};OO.ui.ButtonWidget.
prototype.getTarget=function(){return this.target;};OO.ui.ButtonWidget.prototype.getNoFollow=function(){return this.noFollow;};OO.ui.ButtonWidget.prototype.getRel=function(){return this.rel;};OO.ui.ButtonWidget.prototype.setHref=function(href){href=typeof href==='string'?href:null;if(href!==null&&!OO.ui.isSafeUrl(href)){href='./'+href;}if(href!==this.href){this.href=href;this.updateHref();}return this;};OO.ui.ButtonWidget.prototype.updateHref=function(){if(this.href!==null&&!this.isDisabled()){this.$button.attr('href',this.href);}else{this.$button.removeAttr('href');}return this;};OO.ui.ButtonWidget.prototype.onDisable=function(){this.updateHref();};OO.ui.ButtonWidget.prototype.setTarget=function(target){target=typeof target==='string'?target:null;if(target!==this.target){this.target=target;if(target!==null){this.$button.attr('target',target);}else{this.$button.removeAttr('target');}}return this;};OO.ui.ButtonWidget.prototype.setNoFollow=function(noFollow){noFollow=typeof noFollow===
'boolean'?noFollow:true;if(noFollow!==this.noFollow){var rel;if(noFollow){rel=this.rel.concat(['nofollow']);}else{rel=this.rel.filter(function(value){return value!=='nofollow';});}this.setRel(rel);}return this;};OO.ui.ButtonWidget.prototype.setRel=function(rel){if(!Array.isArray(rel)){rel=rel?[rel]:[];}this.rel=rel;this.noFollow=rel.indexOf('nofollow')!==-1;this.$button.attr('rel',rel.join(' ')||null);return this;};OO.ui.ButtonGroupWidget=function OoUiButtonGroupWidget(config){config=config||{};OO.ui.ButtonGroupWidget.super.call(this,config);OO.ui.mixin.GroupElement.call(this,$.extend({$group:this.$element},config));OO.ui.mixin.TitledElement.call(this,config);this.$element.addClass('oo-ui-buttonGroupWidget');this.addItems(config.items||[]);};OO.inheritClass(OO.ui.ButtonGroupWidget,OO.ui.Widget);OO.mixinClass(OO.ui.ButtonGroupWidget,OO.ui.mixin.GroupElement);OO.mixinClass(OO.ui.ButtonGroupWidget,OO.ui.mixin.TitledElement);OO.ui.ButtonGroupWidget.static.tagName='span';OO.ui.
ButtonGroupWidget.prototype.focus=function(){if(!this.isDisabled()){if(this.items[0]){this.items[0].focus();}}return this;};OO.ui.ButtonGroupWidget.prototype.simulateLabelClick=function(){this.focus();};OO.ui.IconWidget=function OoUiIconWidget(config){config=config||{};OO.ui.IconWidget.super.call(this,config);OO.ui.mixin.IconElement.call(this,$.extend({$icon:this.$element},config));OO.ui.mixin.TitledElement.call(this,$.extend({$titled:this.$element},config));OO.ui.mixin.LabelElement.call(this,$.extend({$label:this.$element,invisibleLabel:true},config));OO.ui.mixin.FlaggedElement.call(this,$.extend({$flagged:this.$element},config));this.$element.addClass('oo-ui-iconWidget');this.$element.removeClass('oo-ui-labelElement-label');};OO.inheritClass(OO.ui.IconWidget,OO.ui.Widget);OO.mixinClass(OO.ui.IconWidget,OO.ui.mixin.IconElement);OO.mixinClass(OO.ui.IconWidget,OO.ui.mixin.TitledElement);OO.mixinClass(OO.ui.IconWidget,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.IconWidget,OO.ui.mixin.
FlaggedElement);OO.ui.IconWidget.static.tagName='span';OO.ui.IndicatorWidget=function OoUiIndicatorWidget(config){config=config||{};OO.ui.IndicatorWidget.super.call(this,config);OO.ui.mixin.IndicatorElement.call(this,$.extend({$indicator:this.$element},config));OO.ui.mixin.TitledElement.call(this,$.extend({$titled:this.$element},config));OO.ui.mixin.LabelElement.call(this,$.extend({$label:this.$element,invisibleLabel:true},config));this.$element.addClass('oo-ui-indicatorWidget');this.$element.removeClass('oo-ui-labelElement-label');};OO.inheritClass(OO.ui.IndicatorWidget,OO.ui.Widget);OO.mixinClass(OO.ui.IndicatorWidget,OO.ui.mixin.IndicatorElement);OO.mixinClass(OO.ui.IndicatorWidget,OO.ui.mixin.TitledElement);OO.mixinClass(OO.ui.IndicatorWidget,OO.ui.mixin.LabelElement);OO.ui.IndicatorWidget.static.tagName='span';OO.ui.LabelWidget=function OoUiLabelWidget(config){config=config||{};OO.ui.LabelWidget.super.call(this,config);OO.ui.mixin.LabelElement.call(this,$.extend({$label:this.
$element},config));OO.ui.mixin.TitledElement.call(this,config);this.input=config.input;if(this.input){if(this.input.getInputId()){this.$element.attr('for',this.input.getInputId());}else{this.$label.on('click',function(){this.input.simulateLabelClick();}.bind(this));}}this.$element.addClass('oo-ui-labelWidget');};OO.inheritClass(OO.ui.LabelWidget,OO.ui.Widget);OO.mixinClass(OO.ui.LabelWidget,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.LabelWidget,OO.ui.mixin.TitledElement);OO.ui.LabelWidget.static.tagName='label';OO.ui.MessageWidget=function OoUiMessageWidget(config){config=config||{};OO.ui.MessageWidget.super.call(this,config);OO.ui.mixin.IconElement.call(this,config);OO.ui.mixin.LabelElement.call(this,config);OO.ui.mixin.TitledElement.call(this,config);OO.ui.mixin.FlaggedElement.call(this,config);this.setType(config.type);this.setInline(config.inline);if(config.icon){this.setIcon(config.icon);}if(!this.inline&&config.showClose){this.closeButton=new OO.ui.ButtonWidget({classes:[
'oo-ui-messageWidget-close'],framed:false,icon:'close',label:OO.ui.msg('ooui-popup-widget-close-button-aria-label'),invisibleLabel:true});this.closeButton.connect(this,{click:'onCloseButtonClick'});this.$element.addClass('oo-ui-messageWidget-showClose');}this.$element.append(this.$icon,this.$label,this.closeButton&&this.closeButton.$element).addClass('oo-ui-messageWidget');};OO.inheritClass(OO.ui.MessageWidget,OO.ui.Widget);OO.mixinClass(OO.ui.MessageWidget,OO.ui.mixin.IconElement);OO.mixinClass(OO.ui.MessageWidget,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.MessageWidget,OO.ui.mixin.TitledElement);OO.mixinClass(OO.ui.MessageWidget,OO.ui.mixin.FlaggedElement);OO.ui.MessageWidget.static.iconMap={notice:'infoFilled',error:'error',warning:'alert',success:'check'};OO.ui.MessageWidget.prototype.setInline=function(inline){inline=!!inline;if(this.inline!==inline){this.inline=inline;this.$element.toggleClass('oo-ui-messageWidget-block',!this.inline);}};OO.ui.MessageWidget.prototype.setType=
function(type){if(!this.constructor.static.iconMap[type]){type='notice';}if(this.type!==type){this.clearFlags();this.setFlags(type);this.setIcon(this.constructor.static.iconMap[type]);this.$icon.removeClass('oo-ui-image-'+this.type);this.$icon.addClass('oo-ui-image-'+type);if(type==='error'){this.$element.attr('role','alert');this.$element.removeAttr('aria-live');}else{this.$element.removeAttr('role');this.$element.attr('aria-live','polite');}this.type=type;}};OO.ui.MessageWidget.prototype.onCloseButtonClick=function(){this.toggle(false);this.emit('close');};OO.ui.mixin.PendingElement=function OoUiMixinPendingElement(config){config=config||{};this.pending=0;this.$pending=null;this.setPendingElement(config.$pending||this.$element);};OO.initClass(OO.ui.mixin.PendingElement);OO.ui.mixin.PendingElement.prototype.setPendingElement=function($pending){if(this.$pending){this.$pending.removeClass('oo-ui-pendingElement-pending');}this.$pending=$pending;if(this.pending>0){this.$pending.addClass(
'oo-ui-pendingElement-pending');}};OO.ui.mixin.PendingElement.prototype.isPending=function(){return!!this.pending;};OO.ui.mixin.PendingElement.prototype.pushPending=function(){if(this.pending===0){this.$pending.addClass('oo-ui-pendingElement-pending');this.updateThemeClasses();}this.pending++;return this;};OO.ui.mixin.PendingElement.prototype.popPending=function(){if(this.pending===1){this.$pending.removeClass('oo-ui-pendingElement-pending');this.updateThemeClasses();}this.pending=Math.max(0,this.pending-1);return this;};OO.ui.mixin.FloatableElement=function OoUiMixinFloatableElement(config){config=config||{};this.$floatable=null;this.$floatableContainer=null;this.$floatableWindow=null;this.$floatableClosestScrollable=null;this.floatableOutOfView=false;this.onFloatableScrollHandler=this.position.bind(this);this.onFloatableWindowResizeHandler=this.position.bind(this);this.setFloatableContainer(config.$floatableContainer);this.setFloatableElement(config.$floatable||this.$element);this.
setVerticalPosition(config.verticalPosition||'below');this.setHorizontalPosition(config.horizontalPosition||'start');this.hideWhenOutOfView=config.hideWhenOutOfView===undefined?true:!!config.hideWhenOutOfView;};OO.ui.mixin.FloatableElement.prototype.setFloatableElement=function($floatable){if(this.$floatable){this.$floatable.removeClass('oo-ui-floatableElement-floatable');this.$floatable.css({left:'',top:''});}this.$floatable=$floatable.addClass('oo-ui-floatableElement-floatable');this.position();};OO.ui.mixin.FloatableElement.prototype.setFloatableContainer=function($floatableContainer){this.$floatableContainer=$floatableContainer;if(this.$floatable){this.position();}};OO.ui.mixin.FloatableElement.prototype.setVerticalPosition=function(position){if(['below','above','top','bottom','center'].indexOf(position)===-1){throw new Error('Invalid value for vertical position: '+position);}if(this.verticalPosition!==position){this.verticalPosition=position;if(this.$floatable){this.position();}}}
;OO.ui.mixin.FloatableElement.prototype.setHorizontalPosition=function(position){if(['before','after','start','end','center'].indexOf(position)===-1){throw new Error('Invalid value for horizontal position: '+position);}if(this.horizontalPosition!==position){this.horizontalPosition=position;if(this.$floatable){this.position();}}};OO.ui.mixin.FloatableElement.prototype.togglePositioning=function(positioning){if(!this.$floatable||!this.$floatableContainer){return this;}positioning=positioning===undefined?!this.positioning:!!positioning;if(positioning&&!this.warnedUnattached&&!this.isElementAttached()){OO.ui.warnDeprecation('FloatableElement#togglePositioning: Before calling this method, the element must be attached to the DOM.');this.warnedUnattached=true;}if(this.positioning!==positioning){this.positioning=positioning;var closestScrollableOfContainer=OO.ui.Element.static.getClosestScrollableContainer(this.$floatableContainer[0]);if($(closestScrollableOfContainer).is('html, body')){
closestScrollableOfContainer=OO.ui.Element.static.getWindow(closestScrollableOfContainer);}if(positioning){this.$floatableWindow=$(this.getElementWindow());this.$floatableWindow.on('resize',this.onFloatableWindowResizeHandler);this.$floatableClosestScrollable=$(closestScrollableOfContainer);this.$floatableClosestScrollable.on('scroll',this.onFloatableScrollHandler);this.position();}else{if(this.$floatableWindow){this.$floatableWindow.off('resize',this.onFloatableWindowResizeHandler);this.$floatableWindow=null;}if(this.$floatableClosestScrollable){this.$floatableClosestScrollable.off('scroll',this.onFloatableScrollHandler);this.$floatableClosestScrollable=null;}this.$floatable.css({left:'',right:'',top:''});}}return this;};OO.ui.mixin.FloatableElement.prototype.isElementInViewport=function($element,$container){var direction=$element.css('direction');var elemRect=$element[0].getBoundingClientRect();var contRect;if($container[0]===window){var viewportSpacing=OO.ui.getViewportSpacing();
contRect={top:0,left:0,right:document.documentElement.clientWidth,bottom:document.documentElement.clientHeight};contRect.top+=viewportSpacing.top;contRect.left+=viewportSpacing.left;contRect.right-=viewportSpacing.right;contRect.bottom-=viewportSpacing.bottom;}else{contRect=$container[0].getBoundingClientRect();}var topEdgeInBounds=elemRect.top>=contRect.top&&elemRect.top<=contRect.bottom;var bottomEdgeInBounds=elemRect.bottom>=contRect.top&&elemRect.bottom<=contRect.bottom;var leftEdgeInBounds=elemRect.left>=contRect.left&&elemRect.left<=contRect.right;var rightEdgeInBounds=elemRect.right>=contRect.left&&elemRect.right<=contRect.right;var startEdgeInBounds,endEdgeInBounds;if(direction==='rtl'){startEdgeInBounds=rightEdgeInBounds;endEdgeInBounds=leftEdgeInBounds;}else{startEdgeInBounds=leftEdgeInBounds;endEdgeInBounds=rightEdgeInBounds;}if(this.verticalPosition==='below'&&!bottomEdgeInBounds){return false;}if(this.verticalPosition==='above'&&!topEdgeInBounds){return false;}if(this.
horizontalPosition==='before'&&!startEdgeInBounds){return false;}if(this.horizontalPosition==='after'&&!endEdgeInBounds){return false;}return elemRect.top<=contRect.bottom&&elemRect.bottom>=contRect.top&&elemRect.left<=contRect.right&&elemRect.right>=contRect.left;};OO.ui.mixin.FloatableElement.prototype.isFloatableOutOfView=function(){return this.floatableOutOfView;};OO.ui.mixin.FloatableElement.prototype.position=function(){if(!this.positioning){return this;}if(!(this.isElementAttached()&&(this.$floatableClosestScrollable[0]===this.getElementWindow()||$.contains(this.getElementDocument(),this.$floatableClosestScrollable[0])))){return this;}this.floatableOutOfView=this.hideWhenOutOfView&&!this.isElementInViewport(this.$floatableContainer,this.$floatableClosestScrollable);if(this.floatableOutOfView){this.$floatable.addClass('oo-ui-element-hidden');return this;}else{this.$floatable.removeClass('oo-ui-element-hidden');}this.$floatable.css(this.computePosition());if(this.clip){this.clip()
;}return this;};OO.ui.mixin.FloatableElement.prototype.computePosition=function(){var newPos={top:'',left:'',bottom:'',right:''},direction=this.$floatableContainer.css('direction'),$offsetParent=this.$floatable.offsetParent();if($offsetParent.is('html')){$offsetParent=$($offsetParent[0].ownerDocument.body);}var isBody=$offsetParent.is('body');var scrollableX=$offsetParent.css('overflow-x')==='scroll'||$offsetParent.css('overflow-x')==='auto';var scrollableY=$offsetParent.css('overflow-y')==='scroll'||$offsetParent.css('overflow-y')==='auto';var vertScrollbarWidth=$offsetParent.innerWidth()-$offsetParent.prop('clientWidth');var horizScrollbarHeight=$offsetParent.innerHeight()-$offsetParent.prop('clientHeight');var scrollTop=scrollableY&&!isBody?$offsetParent.scrollTop():0;var scrollLeft=scrollableX&&!isBody?OO.ui.Element.static.getScrollLeft($offsetParent[0]):0;var containerPos=isBody?this.$floatableContainer.offset():OO.ui.Element.static.getRelativePosition(this.$floatableContainer,
$offsetParent);containerPos.bottom=containerPos.top+this.$floatableContainer.outerHeight();containerPos.right=containerPos.left+this.$floatableContainer.outerWidth();containerPos.start=direction==='rtl'?containerPos.right:containerPos.left;containerPos.end=direction==='rtl'?containerPos.left:containerPos.right;if(this.verticalPosition==='below'){newPos.top=containerPos.bottom;}else if(this.verticalPosition==='above'){newPos.bottom=$offsetParent.outerHeight()-containerPos.top;}else if(this.verticalPosition==='top'){newPos.top=containerPos.top;}else if(this.verticalPosition==='bottom'){newPos.bottom=$offsetParent.outerHeight()-containerPos.bottom;}else if(this.verticalPosition==='center'){newPos.top=containerPos.top+(this.$floatableContainer.height()-this.$floatable.height())/2;}if(this.horizontalPosition==='before'){newPos.end=containerPos.start;}else if(this.horizontalPosition==='after'){newPos.start=containerPos.end;}else if(this.horizontalPosition==='start'){newPos.start=containerPos
.start;}else if(this.horizontalPosition==='end'){newPos.end=containerPos.end;}else if(this.horizontalPosition==='center'){newPos.left=containerPos.left+(this.$floatableContainer.width()-this.$floatable.width())/2;}if(newPos.start!==undefined){if(direction==='rtl'){newPos.right=(isBody?$($offsetParent[0].ownerDocument.documentElement):$offsetParent).outerWidth()-newPos.start;}else{newPos.left=newPos.start;}delete newPos.start;}if(newPos.end!==undefined){if(direction==='rtl'){newPos.left=newPos.end;}else{newPos.right=(isBody?$($offsetParent[0].ownerDocument.documentElement):$offsetParent).outerWidth()-newPos.end;}delete newPos.end;}if(newPos.top!==''){newPos.top+=scrollTop;}if(newPos.bottom!==''){newPos.bottom-=scrollTop;}if(newPos.left!==''){newPos.left+=scrollLeft;}if(newPos.right!==''){newPos.right-=scrollLeft;}if(newPos.bottom!==''){newPos.bottom-=horizScrollbarHeight;}if(direction==='rtl'){if(newPos.left!==''){newPos.left-=vertScrollbarWidth;}}else{if(newPos.right!==''){newPos.right
-=vertScrollbarWidth;}}return newPos;};OO.ui.mixin.ClippableElement=function OoUiMixinClippableElement(config){config=config||{};this.$clippable=null;this.$clippableContainer=null;this.clipping=false;this.clippedHorizontally=false;this.clippedVertically=false;this.$clippableScrollableContainer=null;this.$clippableScroller=null;this.$clippableWindow=null;this.idealWidth=null;this.idealHeight=null;this.onClippableScrollHandler=this.clip.bind(this);this.onClippableWindowResizeHandler=this.clip.bind(this);if(config.$clippableContainer){this.setClippableContainer(config.$clippableContainer);}this.setClippableElement(config.$clippable||this.$element);};OO.ui.mixin.ClippableElement.prototype.setClippableElement=function($clippable){if(this.$clippable){this.$clippable.removeClass('oo-ui-clippableElement-clippable');this.$clippable.css({width:'',height:'',overflowX:'',overflowY:''});OO.ui.Element.static.reconsiderScrollbars(this.$clippable[0]);}this.$clippable=$clippable.addClass(
'oo-ui-clippableElement-clippable');this.clip();};OO.ui.mixin.ClippableElement.prototype.setClippableContainer=function($clippableContainer){this.$clippableContainer=$clippableContainer;if(this.$clippable){this.clip();}};OO.ui.mixin.ClippableElement.prototype.toggleClipping=function(clipping){clipping=clipping===undefined?!this.clipping:!!clipping;if(clipping&&!this.warnedUnattached&&!this.isElementAttached()){OO.ui.warnDeprecation('ClippableElement#toggleClipping: Before calling this method, the element must be attached to the DOM.');this.warnedUnattached=true;}if(this.clipping!==clipping){this.clipping=clipping;if(clipping){this.$clippableScrollableContainer=$(this.getClosestScrollableElementContainer());this.$clippableScroller=this.$clippableScrollableContainer.is('html, body')?$(OO.ui.Element.static.getWindow(this.$clippableScrollableContainer)):this.$clippableScrollableContainer;this.$clippableScroller.on('scroll',this.onClippableScrollHandler);this.$clippableWindow=$(this.
getElementWindow()).on('resize',this.onClippableWindowResizeHandler);this.clip();}else{this.$clippable.css({width:'',height:'',maxWidth:'',maxHeight:'',overflowX:'',overflowY:''});OO.ui.Element.static.reconsiderScrollbars(this.$clippable[0]);this.$clippableScrollableContainer=null;this.$clippableScroller.off('scroll',this.onClippableScrollHandler);this.$clippableScroller=null;this.$clippableWindow.off('resize',this.onClippableWindowResizeHandler);this.$clippableWindow=null;}}return this;};OO.ui.mixin.ClippableElement.prototype.isClipping=function(){return this.clipping;};OO.ui.mixin.ClippableElement.prototype.isClipped=function(){return this.clippedHorizontally||this.clippedVertically;};OO.ui.mixin.ClippableElement.prototype.isClippedHorizontally=function(){return this.clippedHorizontally;};OO.ui.mixin.ClippableElement.prototype.isClippedVertically=function(){return this.clippedVertically;};OO.ui.mixin.ClippableElement.prototype.setIdealSize=function(width,height){this.idealWidth=width
;this.idealHeight=height;if(!this.clipping){this.$clippable.css({width:width,height:height});}};OO.ui.mixin.ClippableElement.prototype.getHorizontalAnchorEdge=function(){if(this.computePosition&&this.positioning&&this.computePosition().right!==''){return'right';}return'left';};OO.ui.mixin.ClippableElement.prototype.getVerticalAnchorEdge=function(){if(this.computePosition&&this.positioning&&this.computePosition().bottom!==''){return'bottom';}return'top';};OO.ui.mixin.ClippableElement.prototype.clip=function(){if(!this.clipping){return this;}function rectIntersection(a,b){var out={};out.top=Math.max(a.top,b.top);out.left=Math.max(a.left,b.left);out.bottom=Math.min(a.bottom,b.bottom);out.right=Math.min(a.right,b.right);return out;}var viewportSpacing=OO.ui.getViewportSpacing();var $viewport,viewportRect;if(this.$clippableScrollableContainer.is('html, body')){$viewport=$(this.$clippableScrollableContainer[0].ownerDocument.body);viewportRect={top:0,left:0,right:document.documentElement.
clientWidth,bottom:document.documentElement.clientHeight};viewportRect.top+=viewportSpacing.top;viewportRect.left+=viewportSpacing.left;viewportRect.right-=viewportSpacing.right;viewportRect.bottom-=viewportSpacing.bottom;}else{$viewport=this.$clippableScrollableContainer;viewportRect=$viewport[0].getBoundingClientRect();viewportRect=$.extend({},viewportRect);}var direction=$viewport.css('direction');var vertScrollbarWidth=$viewport.innerWidth()-$viewport.prop('clientWidth');var horizScrollbarHeight=$viewport.innerHeight()-$viewport.prop('clientHeight');viewportRect.bottom-=horizScrollbarHeight;if(direction==='rtl'){viewportRect.left+=vertScrollbarWidth;}else{viewportRect.right-=vertScrollbarWidth;}var buffer=7;viewportRect.top+=buffer;viewportRect.left+=buffer;viewportRect.right-=buffer;viewportRect.bottom-=buffer;var $item=this.$clippableContainer||this.$clippable;var extraHeight=$item.outerHeight()-this.$clippable.outerHeight();var extraWidth=$item.outerWidth()-this.$clippable.
outerWidth();var itemRect=$item[0].getBoundingClientRect();itemRect=$.extend({},itemRect);if(this.getHorizontalAnchorEdge()==='right'){itemRect.left=viewportRect.left;}else{itemRect.right=viewportRect.right;}if(this.getVerticalAnchorEdge()==='bottom'){itemRect.top=viewportRect.top;}else{itemRect.bottom=viewportRect.bottom;}var availableRect=rectIntersection(viewportRect,itemRect);var desiredWidth=Math.max(0,availableRect.right-availableRect.left);var desiredHeight=Math.max(0,availableRect.bottom-availableRect.top);desiredWidth=Math.min(desiredWidth,document.documentElement.clientWidth-viewportSpacing.left-viewportSpacing.right);desiredHeight=Math.min(desiredHeight,document.documentElement.clientHeight-viewportSpacing.top-viewportSpacing.right);var allotedWidth=Math.ceil(desiredWidth-extraWidth);var allotedHeight=Math.ceil(desiredHeight-extraHeight);var naturalWidth=this.$clippable.prop('scrollWidth');var naturalHeight=this.$clippable.prop('scrollHeight');var clipWidth=allotedWidth<
naturalWidth;var clipHeight=allotedHeight<naturalHeight;if(clipWidth){this.$clippable.css('overflowX','scroll');void this.$clippable[0].offsetHeight;this.$clippable.css('overflowX','auto');void this.$clippable[0].offsetHeight;this.$clippable.css({width:Math.max(0,allotedWidth),maxWidth:''});}else{this.$clippable.css({overflowX:'',width:this.idealWidth||'',maxWidth:Math.max(0,allotedWidth)});}if(clipHeight){this.$clippable.css('overflowY','scroll');void this.$clippable[0].offsetHeight;this.$clippable.css('overflowY','auto');void this.$clippable[0].offsetHeight;this.$clippable.css({height:Math.max(0,allotedHeight),maxHeight:''});}else{this.$clippable.css({overflowY:'',height:this.idealHeight||'',maxHeight:Math.max(0,allotedHeight)});}if((this.clippedHorizontally&&!clipWidth)||(this.clippedVertically&&!clipHeight)){OO.ui.Element.static.reconsiderScrollbars(this.$clippable[0]);}this.clippedHorizontally=clipWidth;this.clippedVertically=clipHeight;return this;};OO.ui.PopupWidget=function
OoUiPopupWidget(config){config=config||{};OO.ui.PopupWidget.super.call(this,config);this.$body=$('<div>');this.$popup=$('<div>');OO.ui.mixin.IconElement.call(this,config);OO.ui.mixin.LabelElement.call(this,config);OO.ui.mixin.ClippableElement.call(this,$.extend({$clippable:this.$body,$clippableContainer:this.$popup},config));OO.ui.mixin.FloatableElement.call(this,config);this.$anchor=$('<div>');this.$container=config.$container;this.containerPadding=config.containerPadding!==undefined?config.containerPadding:10;this.autoClose=!!config.autoClose;this.transitionTimeout=null;this.anchored=false;this.onDocumentMouseDownHandler=this.onDocumentMouseDown.bind(this);this.onDocumentKeyDownHandler=this.onDocumentKeyDown.bind(this);this.onTabKeyDownHandler=this.onTabKeyDown.bind(this);this.onShiftTabKeyDownHandler=this.onShiftTabKeyDown.bind(this);this.setSize(config.width,config.height);this.toggleAnchor(config.anchor===undefined||config.anchor);this.setAlignment(config.align||'center');this.
setPosition(config.position||'below');this.setAutoFlip(config.autoFlip===undefined||config.autoFlip);this.setAutoCloseIgnore(config.$autoCloseIgnore);this.$body.addClass('oo-ui-popupWidget-body');this.$anchor.addClass('oo-ui-popupWidget-anchor');this.$popup.addClass('oo-ui-popupWidget-popup').append(this.$body);this.$element.addClass('oo-ui-popupWidget').append(this.$popup,this.$anchor);if(config.$content instanceof $){this.$body.append(config.$content);}this.padded=!!config.padded;if(config.padded){this.$body.addClass('oo-ui-popupWidget-body-padded');}if(config.head){if(!config.hideCloseButton){this.closeButton=new OO.ui.ButtonWidget({framed:false,icon:'close',label:OO.ui.msg('ooui-popup-widget-close-button-aria-label'),invisibleLabel:true});this.closeButton.connect(this,{click:'onCloseButtonClick'});}this.$head=$('<div>').addClass('oo-ui-popupWidget-head').append(this.$icon,this.$label,this.closeButton&&this.closeButton.$element);this.$popup.prepend(this.$head);}if(config.$footer){
this.$footer=$('<div>').addClass('oo-ui-popupWidget-footer').append(config.$footer);this.$popup.append(this.$footer);}this.visible=false;this.$element.addClass('oo-ui-element-hidden');};OO.inheritClass(OO.ui.PopupWidget,OO.ui.Widget);OO.mixinClass(OO.ui.PopupWidget,OO.ui.mixin.IconElement);OO.mixinClass(OO.ui.PopupWidget,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.PopupWidget,OO.ui.mixin.ClippableElement);OO.mixinClass(OO.ui.PopupWidget,OO.ui.mixin.FloatableElement);OO.ui.PopupWidget.prototype.onDocumentMouseDown=function(e){if(this.isVisible()&&!OO.ui.contains(this.$element.add(this.$autoCloseIgnore).get(),e.target,true)){this.toggle(false);}};OO.ui.PopupWidget.prototype.bindDocumentMouseDownListener=function(){this.getElementDocument().addEventListener('mousedown',this.onDocumentMouseDownHandler,true);this.getElementDocument().addEventListener('click',this.onDocumentMouseDownHandler,true);};OO.ui.PopupWidget.prototype.onCloseButtonClick=function(){if(this.isVisible()){this.toggle(
false);}};OO.ui.PopupWidget.prototype.unbindDocumentMouseDownListener=function(){this.getElementDocument().removeEventListener('mousedown',this.onDocumentMouseDownHandler,true);this.getElementDocument().removeEventListener('click',this.onDocumentMouseDownHandler,true);};OO.ui.PopupWidget.prototype.onDocumentKeyDown=function(e){if(e.which===OO.ui.Keys.ESCAPE&&this.isVisible()){this.toggle(false);e.preventDefault();e.stopPropagation();}};OO.ui.PopupWidget.prototype.bindDocumentKeyDownListener=function(){this.getElementDocument().addEventListener('keydown',this.onDocumentKeyDownHandler,true);};OO.ui.PopupWidget.prototype.unbindDocumentKeyDownListener=function(){this.getElementDocument().removeEventListener('keydown',this.onDocumentKeyDownHandler,true);};OO.ui.PopupWidget.prototype.onTabKeyDown=function(e){if(!e.shiftKey&&e.which===OO.ui.Keys.TAB){e.preventDefault();this.toggle(false);}};OO.ui.PopupWidget.prototype.onShiftTabKeyDown=function(e){if(e.shiftKey&&e.which===OO.ui.Keys.TAB){e.
preventDefault();this.toggle(false);}};OO.ui.PopupWidget.prototype.toggleAnchor=function(show){show=show===undefined?!this.anchored:!!show;if(this.anchored!==show){if(show){this.$element.addClass('oo-ui-popupWidget-anchored');this.$element.addClass('oo-ui-popupWidget-anchored-'+this.anchorEdge);}else{this.$element.removeClass('oo-ui-popupWidget-anchored');this.$element.removeClass('oo-ui-popupWidget-anchored-'+this.anchorEdge);}this.anchored=show;}};OO.ui.PopupWidget.prototype.setAnchorEdge=function(edge){if(['top','bottom','start','end'].indexOf(edge)===-1){throw new Error('Invalid value for edge: '+edge);}if(this.anchorEdge!==null){this.$element.removeClass('oo-ui-popupWidget-anchored-'+this.anchorEdge);}this.anchorEdge=edge;if(this.anchored){this.$element.addClass('oo-ui-popupWidget-anchored-'+edge);}};OO.ui.PopupWidget.prototype.hasAnchor=function(){return this.anchored;};OO.ui.PopupWidget.prototype.toggle=function(show){show=show===undefined?!this.isVisible():!!show;var change=
show!==this.isVisible();if(show&&!this.warnedUnattached&&!this.isElementAttached()){OO.ui.warnDeprecation('PopupWidget#toggle: Before calling this method, the popup must be attached to the DOM.');this.warnedUnattached=true;}if(show&&!this.$floatableContainer&&this.isElementAttached()){this.setFloatableContainer(this.$element.parent());}if(change&&show&&this.autoFlip){this.isAutoFlipped=false;}OO.ui.PopupWidget.super.prototype.toggle.call(this,show);if(change){this.togglePositioning(show&&!!this.$floatableContainer);var $lastFocusableElement=OO.ui.findFocusable(this.$element,true);var $firstFocusableElement=OO.ui.findFocusable(this.$element,false);if(show){if(this.autoClose){this.bindDocumentMouseDownListener();this.bindDocumentKeyDownListener();$lastFocusableElement.on('keydown',this.onTabKeyDownHandler);$firstFocusableElement.on('keydown',this.onShiftTabKeyDownHandler);}this.updateDimensions();this.toggleClipping(true);if(this.autoFlip){if(this.popupPosition==='above'||this.
popupPosition==='below'){if(this.isClippedVertically()||this.isFloatableOutOfView()){var normalHeight=this.$element.height();this.isAutoFlipped=!this.isAutoFlipped;this.position();if(this.isClippedVertically()||this.isFloatableOutOfView()){var oppositeHeight=this.$element.height();if(oppositeHeight<normalHeight){this.isAutoFlipped=!this.isAutoFlipped;this.position();}}}}if(this.popupPosition==='before'||this.popupPosition==='after'){if(this.isClippedHorizontally()||this.isFloatableOutOfView()){var normalWidth=this.$element.width();this.isAutoFlipped=!this.isAutoFlipped;this.toggleClipping(false);this.position();this.toggleClipping(true);if(this.isClippedHorizontally()||this.isFloatableOutOfView()){var oppositeWidth=this.$element.width();if(oppositeWidth<normalWidth){this.isAutoFlipped=!this.isAutoFlipped;this.toggleClipping(false);this.position();this.toggleClipping(true);}}}}}this.emit('ready');}else{this.toggleClipping(false);if(this.autoClose){$lastFocusableElement.off('keydown',
this.onTabKeyDownHandler);$firstFocusableElement.off('keydown',this.onShiftTabKeyDownHandler);this.unbindDocumentMouseDownListener();this.unbindDocumentKeyDownListener();}this.emit('closing');}}return this;};OO.ui.PopupWidget.prototype.setSize=function(width,height,transition){this.width=width!==undefined?width:320;this.height=height!==undefined?height:null;if(this.isVisible()){this.updateDimensions(transition);}};OO.ui.PopupWidget.prototype.updateDimensions=function(transition){var widget=this;clearTimeout(this.transitionTimeout);if(transition){this.$element.addClass('oo-ui-popupWidget-transitioning');}this.position();if(transition){this.transitionTimeout=setTimeout(function(){widget.$element.removeClass('oo-ui-popupWidget-transitioning');},200);}else{this.$element.removeClass('oo-ui-popupWidget-transitioning');}};OO.ui.PopupWidget.prototype.computePosition=function(){var popupPos={},anchorCss={left:'',right:'',top:'',bottom:''},popupPositionOppositeMap={above:'below',below:'above',
before:'after',after:'before'},alignMap={ltr:{'force-left':'backwards','force-right':'forwards'},rtl:{'force-left':'forwards','force-right':'backwards'}},anchorEdgeMap={above:'bottom',below:'top',before:'end',after:'start'},hPosMap={forwards:'start',center:'center',backwards:this.anchored?'before':'end'},vPosMap={forwards:'top',center:'center',backwards:'bottom'};if(!this.$container){this.$container=$(this.getClosestScrollableElementContainer());}var direction=this.$container.css('direction');this.setIdealSize(this.width!==null?this.width-(this.padded?24:0):'auto',this.height!==null?this.height-(this.padded?10:0):'auto');var align=alignMap[direction][this.align]||this.align;var popupPosition=this.popupPosition;if(this.isAutoFlipped){popupPosition=popupPositionOppositeMap[popupPosition];}var vertical=popupPosition==='before'||popupPosition==='after';var start=vertical?'top':(direction==='rtl'?'right':'left');var end=vertical?'bottom':(direction==='rtl'?'left':'right');var near=vertical?
'top':'left';var far=vertical?'bottom':'right';var sizeProp=vertical?'Height':'Width';var popupSize=vertical?this.$popup.height():this.$popup.width();this.setAnchorEdge(anchorEdgeMap[popupPosition]);this.horizontalPosition=vertical?popupPosition:hPosMap[align];this.verticalPosition=vertical?vPosMap[align]:popupPosition;var parentPosition=OO.ui.mixin.FloatableElement.prototype.computePosition.call(this);var positionProp=vertical?(parentPosition.top!==''?'top':'bottom'):(parentPosition.left!==''?'left':'right');var floatablePos=this.$floatableContainer.offset();floatablePos[far]=floatablePos[near]+this.$floatableContainer['outer'+sizeProp]();var offsetParentPos=this.$element.offsetParent()[0]===document.documentElement?{top:0,left:0}:this.$element.offsetParent().offset();if(positionProp===near){popupPos[near]=offsetParentPos[near]+parentPosition[near];popupPos[far]=popupPos[near]+popupSize;}else{popupPos[far]=offsetParentPos[near]+this.$element.offsetParent()['inner'+sizeProp]()-
parentPosition[far];popupPos[near]=popupPos[far]-popupSize;}var anchorOffset,positionAdjustment;if(this.anchored){var anchorPos=(floatablePos[start]+floatablePos[end])/2;anchorOffset=(start===far?-1:1)*(anchorPos-popupPos[start]);var anchorSize=this.$anchor[0]['scroll'+sizeProp];var anchorMargin=parseFloat(this.$anchor.css('margin-'+start));if(anchorOffset+anchorMargin<2*anchorSize){positionAdjustment=(positionProp===start?-1:1)*(2*anchorSize-(anchorOffset+anchorMargin));}else if(anchorOffset+anchorMargin>popupSize-2*anchorSize){positionAdjustment=(positionProp===end?-1:1)*(anchorOffset+anchorMargin-(popupSize-2*anchorSize));}else{positionAdjustment=0;}}else{positionAdjustment=0;}var containerPos=this.$container[0]===document.documentElement?{top:0,left:0}:this.$container.offset();containerPos[far]=containerPos[near]+this.$container['inner'+sizeProp]();if(this.$container[0]===document.documentElement){var viewportSpacing=OO.ui.getViewportSpacing();containerPos[near]+=viewportSpacing[
near];containerPos[far]-=viewportSpacing[far];}popupPos[near]+=(positionProp===near?1:-1)*positionAdjustment;popupPos[far]+=(positionProp===near?1:-1)*positionAdjustment;if(containerPos[near]+this.containerPadding>popupPos[near]){positionAdjustment+=(positionProp===near?1:-1)*(containerPos[near]+this.containerPadding-popupPos[near]);}else if(containerPos[far]-this.containerPadding<popupPos[far]){positionAdjustment+=(positionProp===far?1:-1)*(popupPos[far]-(containerPos[far]-this.containerPadding));}if(this.anchored){anchorOffset+=(positionProp===start?-1:1)*positionAdjustment;anchorCss[start]=anchorOffset;this.$anchor.css(anchorCss);}parentPosition[positionProp]+=positionAdjustment;return parentPosition;};OO.ui.PopupWidget.prototype.setAlignment=function(align){if(['force-left','force-right','backwards','forwards','center'].indexOf(align)>-1){this.align=align;}else{this.align='center';}this.position();};OO.ui.PopupWidget.prototype.getAlignment=function(){return this.align;};OO.ui.
PopupWidget.prototype.setPosition=function(position){if(['above','below','before','after'].indexOf(position)===-1){position='below';}this.popupPosition=position;this.position();};OO.ui.PopupWidget.prototype.getPosition=function(){return this.popupPosition;};OO.ui.PopupWidget.prototype.setAutoFlip=function(autoFlip){autoFlip=!!autoFlip;if(this.autoFlip!==autoFlip){this.autoFlip=autoFlip;}};OO.ui.PopupWidget.prototype.setAutoCloseIgnore=function($autoCloseIgnore){this.$autoCloseIgnore=$autoCloseIgnore;};OO.ui.PopupWidget.prototype.getBodyId=function(){var id=this.$body.attr('id');if(id===undefined){id=OO.ui.generateElementId();this.$body.attr('id',id);}return id;};OO.ui.mixin.PopupElement=function OoUiMixinPopupElement(config){config=config||{};this.popup=new OO.ui.PopupWidget($.extend({autoClose:true,$floatableContainer:this.$element},config.popup,{$autoCloseIgnore:this.$element.add(config.popup&&config.popup.$autoCloseIgnore)}));};OO.ui.mixin.PopupElement.prototype.getPopup=function(){
return this.popup;};OO.ui.PopupButtonWidget=function OoUiPopupButtonWidget(config){config=config||{};OO.ui.PopupButtonWidget.super.call(this,config);OO.ui.mixin.PopupElement.call(this,config);this.$overlay=(config.$overlay===true?OO.ui.getDefaultOverlay():config.$overlay)||this.$element;this.connect(this,{click:'onAction'});var buttonId=this.$element.attr('id');if(buttonId===undefined){buttonId=OO.ui.generateElementId();this.$element.attr('id',buttonId);}var popupId=this.popup.$element.attr('id');if(popupId===undefined){popupId=OO.ui.generateElementId();this.popup.$element.attr('id',popupId);}this.$element.addClass('oo-ui-popupButtonWidget').attr({'aria-haspopup':'dialog','aria-owns':popupId});this.popup.$element.addClass('oo-ui-popupButtonWidget-popup').attr({role:'dialog','aria-describedby':buttonId}).toggleClass('oo-ui-popupButtonWidget-framed-popup',this.isFramed()).toggleClass('oo-ui-popupButtonWidget-frameless-popup',!this.isFramed());this.$overlay.append(this.popup.$element);};
OO.inheritClass(OO.ui.PopupButtonWidget,OO.ui.ButtonWidget);OO.mixinClass(OO.ui.PopupButtonWidget,OO.ui.mixin.PopupElement);OO.ui.PopupButtonWidget.prototype.onAction=function(){this.popup.toggle();};OO.ui.mixin.GroupWidget=function OoUiMixinGroupWidget(config){OO.ui.mixin.GroupElement.call(this,config);};OO.mixinClass(OO.ui.mixin.GroupWidget,OO.ui.mixin.GroupElement);OO.ui.mixin.GroupWidget.prototype.setDisabled=function(disabled){OO.ui.Widget.prototype.setDisabled.call(this,disabled);if(this.items){for(var i=0,len=this.items.length;i<len;i++){this.items[i].updateDisabled();}}return this;};OO.ui.mixin.ItemWidget=function OoUiMixinItemWidget(){};OO.ui.mixin.ItemWidget.prototype.isDisabled=function(){return this.disabled||(this.elementGroup instanceof OO.ui.Widget&&this.elementGroup.isDisabled());};OO.ui.mixin.ItemWidget.prototype.setElementGroup=function(group){OO.ui.Element.prototype.setElementGroup.call(this,group);this.updateDisabled();return this;};OO.ui.OptionWidget=function
OoUiOptionWidget(config){config=config||{};OO.ui.OptionWidget.super.call(this,config);OO.ui.mixin.ItemWidget.call(this);OO.ui.mixin.LabelElement.call(this,config);OO.ui.mixin.FlaggedElement.call(this,config);OO.ui.mixin.AccessKeyedElement.call(this,config);OO.ui.mixin.TitledElement.call(this,config);this.highlighted=false;this.pressed=false;this.setSelected(!!config.selected);this.$element.data('oo-ui-optionWidget',this).attr({tabindex:'-1',role:'option'}).addClass('oo-ui-optionWidget').append(this.$label);};OO.inheritClass(OO.ui.OptionWidget,OO.ui.Widget);OO.mixinClass(OO.ui.OptionWidget,OO.ui.mixin.ItemWidget);OO.mixinClass(OO.ui.OptionWidget,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.OptionWidget,OO.ui.mixin.FlaggedElement);OO.mixinClass(OO.ui.OptionWidget,OO.ui.mixin.AccessKeyedElement);OO.mixinClass(OO.ui.OptionWidget,OO.ui.mixin.TitledElement);OO.ui.OptionWidget.static.selectable=true;OO.ui.OptionWidget.static.highlightable=true;OO.ui.OptionWidget.static.pressable=true;OO.ui.
OptionWidget.static.scrollIntoViewOnSelect=false;OO.ui.OptionWidget.prototype.isSelectable=function(){return this.constructor.static.selectable&&!this.disabled&&this.isVisible();};OO.ui.OptionWidget.prototype.isHighlightable=function(){return this.constructor.static.highlightable&&!this.disabled&&this.isVisible();};OO.ui.OptionWidget.prototype.isPressable=function(){return this.constructor.static.pressable&&!this.disabled&&this.isVisible();};OO.ui.OptionWidget.prototype.isSelected=function(){return this.selected;};OO.ui.OptionWidget.prototype.isHighlighted=function(){return this.highlighted;};OO.ui.OptionWidget.prototype.isPressed=function(){return this.pressed;};OO.ui.OptionWidget.prototype.setSelected=function(state){if(this.constructor.static.selectable){this.selected=!!state;this.$element.toggleClass('oo-ui-optionWidget-selected',state).attr('aria-selected',state.toString());if(state&&this.constructor.static.scrollIntoViewOnSelect){this.scrollElementIntoView();}this.
updateThemeClasses();}return this;};OO.ui.OptionWidget.prototype.setHighlighted=function(state){if(this.constructor.static.highlightable){this.highlighted=!!state;this.$element.toggleClass('oo-ui-optionWidget-highlighted',state);this.updateThemeClasses();}return this;};OO.ui.OptionWidget.prototype.setPressed=function(state){if(this.constructor.static.pressable){this.pressed=!!state;this.$element.toggleClass('oo-ui-optionWidget-pressed',state);this.updateThemeClasses();}return this;};OO.ui.OptionWidget.prototype.getMatchText=function(){var label=this.getLabel();return typeof label==='string'?label:this.$label.text();};OO.ui.SelectWidget=function OoUiSelectWidget(config){config=config||{};OO.ui.SelectWidget.super.call(this,config);OO.ui.mixin.GroupWidget.call(this,$.extend({$group:this.$element},config));this.pressed=false;this.selecting=null;this.multiselect=!!config.multiselect;this.onDocumentMouseUpHandler=this.onDocumentMouseUp.bind(this);this.onDocumentMouseMoveHandler=this.
onDocumentMouseMove.bind(this);this.onDocumentKeyDownHandler=this.onDocumentKeyDown.bind(this);this.onDocumentKeyPressHandler=this.onDocumentKeyPress.bind(this);this.keyPressBuffer='';this.keyPressBufferTimer=null;this.blockMouseOverEvents=0;this.connect(this,{toggle:'onToggle'});this.$element.on({focusin:this.onFocus.bind(this),mousedown:this.onMouseDown.bind(this),mouseover:this.onMouseOver.bind(this),mouseleave:this.onMouseLeave.bind(this)});this.$element.addClass('oo-ui-selectWidget oo-ui-selectWidget-unpressed').attr({role:'listbox','aria-multiselectable':this.multiselect.toString()});this.setFocusOwner(this.$element);this.addItems(config.items||[]);};OO.inheritClass(OO.ui.SelectWidget,OO.ui.Widget);OO.mixinClass(OO.ui.SelectWidget,OO.ui.mixin.GroupWidget);OO.ui.SelectWidget.static.handleNavigationKeys=false;OO.ui.SelectWidget.static.listWrapsAround=true;OO.ui.SelectWidget.static.normalizeForMatching=function(text){var normalized=text.trim().replace(/\s+/,' ').toLowerCase();if(
normalized.normalize){normalized=normalized.normalize();}return normalized;};OO.ui.SelectWidget.prototype.onFocus=function(event){var item;if(event.target===this.$element[0]){if(!this.findFirstSelectedItem()){item=this.findFirstSelectableItem();}}else{if(event.target.tabIndex===-1){item=this.findTargetItem(event);if(item&&!(item.isHighlightable()||item.isSelectable())){return;}}else{return;}}if(item){if(item.constructor.static.highlightable){this.highlightItem(item);}else{this.selectItem(item);}}if(event.target!==this.$element[0]){this.$focusOwner.trigger('focus');}};OO.ui.SelectWidget.prototype.onMouseDown=function(e){if(!this.isDisabled()&&e.which===OO.ui.MouseButtons.LEFT){this.togglePressed(true);var item=this.findTargetItem(e);if(item&&item.isSelectable()){this.pressItem(item);this.selecting=item;this.getElementDocument().addEventListener('mouseup',this.onDocumentMouseUpHandler,true);this.getElementDocument().addEventListener('mousemove',this.onDocumentMouseMoveHandler,true);}}
return false;};OO.ui.SelectWidget.prototype.onDocumentMouseUp=function(e){this.togglePressed(false);if(!this.selecting){var item=this.findTargetItem(e);if(item&&item.isSelectable()){this.selecting=item;}}if(!this.isDisabled()&&e.which===OO.ui.MouseButtons.LEFT&&this.selecting){this.pressItem(null);this.chooseItem(this.selecting);this.selecting=null;}this.getElementDocument().removeEventListener('mouseup',this.onDocumentMouseUpHandler,true);this.getElementDocument().removeEventListener('mousemove',this.onDocumentMouseMoveHandler,true);return false;};OO.ui.SelectWidget.prototype.onDocumentMouseMove=function(e){if(!this.isDisabled()&&this.pressed){var item=this.findTargetItem(e);if(item&&item!==this.selecting&&item.isSelectable()){this.pressItem(item);this.selecting=item;}}};OO.ui.SelectWidget.prototype.onMouseOver=function(e){if(this.blockMouseOverEvents){return;}if(!this.isDisabled()){var item=this.findTargetItem(e);this.highlightItem(item&&item.isHighlightable()?item:null);}return false
;};OO.ui.SelectWidget.prototype.onMouseLeave=function(){if(!this.isDisabled()){this.highlightItem(null);}return false;};OO.ui.SelectWidget.prototype.onDocumentKeyDown=function(e){var handled=false,currentItem=this.isVisible()&&this.findHighlightedItem()||this.findFirstSelectedItem();var nextItem;if(!this.isDisabled()){switch(e.keyCode){case OO.ui.Keys.ENTER:if(currentItem){this.chooseItem(currentItem);handled=true;}break;case OO.ui.Keys.UP:case OO.ui.Keys.LEFT:case OO.ui.Keys.DOWN:case OO.ui.Keys.RIGHT:this.clearKeyPressBuffer();nextItem=this.findRelativeSelectableItem(currentItem,e.keyCode===OO.ui.Keys.UP||e.keyCode===OO.ui.Keys.LEFT?-1:1,null,this.constructor.static.listWrapsAround);handled=true;break;case OO.ui.Keys.HOME:case OO.ui.Keys.END:if(this.constructor.static.handleNavigationKeys){this.clearKeyPressBuffer();nextItem=this.findRelativeSelectableItem(null,e.keyCode===OO.ui.Keys.HOME?1:-1,null,this.constructor.static.listWrapsAround);handled=true;}break;case OO.ui.Keys.PAGEUP:
case OO.ui.Keys.PAGEDOWN:if(this.constructor.static.handleNavigationKeys){this.clearKeyPressBuffer();nextItem=this.findRelativeSelectableItem(currentItem,e.keyCode===OO.ui.Keys.PAGEUP?-10:10,null,this.constructor.static.listWrapsAround);handled=true;}break;case OO.ui.Keys.ESCAPE:case OO.ui.Keys.TAB:if(currentItem){currentItem.setHighlighted(false);}this.unbindDocumentKeyDownListener();this.unbindDocumentKeyPressListener();handled=false;break;}if(nextItem){if(this.isVisible()&&nextItem.constructor.static.highlightable){this.highlightItem(nextItem);}else{if(this.screenReaderMode){this.highlightItem(nextItem);}this.chooseItem(nextItem);}this.scrollItemIntoView(nextItem);}if(handled){e.preventDefault();e.stopPropagation();}}};OO.ui.SelectWidget.prototype.bindDocumentKeyDownListener=function(){this.getElementDocument().addEventListener('keydown',this.onDocumentKeyDownHandler,true);};OO.ui.SelectWidget.prototype.unbindDocumentKeyDownListener=function(){this.getElementDocument().
removeEventListener('keydown',this.onDocumentKeyDownHandler,true);};OO.ui.SelectWidget.prototype.scrollItemIntoView=function(item){var widget=this;this.blockMouseOverEvents++;item.scrollElementIntoView().done(function(){setTimeout(function(){widget.blockMouseOverEvents--;},200);});};OO.ui.SelectWidget.prototype.clearKeyPressBuffer=function(){if(this.keyPressBufferTimer){clearTimeout(this.keyPressBufferTimer);this.keyPressBufferTimer=null;}this.keyPressBuffer='';};OO.ui.SelectWidget.prototype.onDocumentKeyPress=function(e){if(!e.charCode){if(e.keyCode===OO.ui.Keys.BACKSPACE&&this.keyPressBuffer!==''){this.keyPressBuffer=this.keyPressBuffer.slice(0,this.keyPressBuffer.length-1);return false;}return;}var c=String.fromCodePoint?String.fromCodePoint(e.charCode):String.fromCharCode(e.charCode);if(this.keyPressBufferTimer){clearTimeout(this.keyPressBufferTimer);}this.keyPressBufferTimer=setTimeout(this.clearKeyPressBuffer.bind(this),1500);var item=this.isVisible()&&this.findHighlightedItem()
||this.findFirstSelectedItem();if(this.keyPressBuffer===c){if(item){item=this.findRelativeSelectableItem(item,1);}}else{this.keyPressBuffer+=c;}var filter=this.getItemMatcher(this.keyPressBuffer,false);if(!item||!filter(item)){item=this.findRelativeSelectableItem(item,1,filter);}if(item){if(this.isVisible()&&item.constructor.static.highlightable){this.highlightItem(item);}else{if(this.screenReaderMode){this.highlightItem(item);}this.chooseItem(item);}this.scrollItemIntoView(item);}e.preventDefault();e.stopPropagation();};OO.ui.SelectWidget.prototype.getItemMatcher=function(query,mode){var normalizeForMatching=this.constructor.static.normalizeForMatching,normalizedQuery=normalizeForMatching(query);if(mode===true){mode='exact';}return function(item){var matchText=normalizeForMatching(item.getMatchText());if(normalizedQuery===''){return mode!=='exact';}switch(mode){case'exact':return matchText===normalizedQuery;case'substring':return matchText.indexOf(normalizedQuery)!==-1;default:return matchText
.indexOf(normalizedQuery)===0;}};};OO.ui.SelectWidget.prototype.bindDocumentKeyPressListener=function(){this.getElementDocument().addEventListener('keypress',this.onDocumentKeyPressHandler,true);};OO.ui.SelectWidget.prototype.unbindDocumentKeyPressListener=function(){this.getElementDocument().removeEventListener('keypress',this.onDocumentKeyPressHandler,true);this.clearKeyPressBuffer();};OO.ui.SelectWidget.prototype.onToggle=function(visible){if(!visible){this.clearKeyPressBuffer();}};OO.ui.SelectWidget.prototype.findTargetItem=function(e){var $option=$(e.target).closest('.oo-ui-optionWidget');if(!$option.closest('.oo-ui-selectWidget').is(this.$element)){return null;}return $option.data('oo-ui-optionWidget')||null;};OO.ui.SelectWidget.prototype.findFirstSelectedItem=function(){for(var i=0;i<this.items.length;i++){if(this.items[i].isSelected()){return this.items[i];}}return null;};OO.ui.SelectWidget.prototype.findSelectedItems=function(){if(!this.multiselect){return this.
findFirstSelectedItem();}return this.items.filter(function(item){return item.isSelected();});};OO.ui.SelectWidget.prototype.findSelectedItem=function(){return this.findSelectedItems();};OO.ui.SelectWidget.prototype.findHighlightedItem=function(){for(var i=0;i<this.items.length;i++){if(this.items[i].isHighlighted()){return this.items[i];}}return null;};OO.ui.SelectWidget.prototype.togglePressed=function(pressed){if(pressed===undefined){pressed=!this.pressed;}if(pressed!==this.pressed){this.$element.toggleClass('oo-ui-selectWidget-pressed',pressed).toggleClass('oo-ui-selectWidget-unpressed',!pressed);this.pressed=pressed;}};OO.ui.SelectWidget.prototype.highlightItem=function(item){if(item&&item.isHighlighted()){return this;}var changed=false;for(var i=0;i<this.items.length;i++){var highlighted=this.items[i]===item;if(this.items[i].isHighlighted()!==highlighted){this.items[i].setHighlighted(highlighted);if(changed){break;}changed=!highlighted||this.items[i].isHighlighted();}}if(changed){
if(item){this.$focusOwner.attr('aria-activedescendant',item.getElementId());}else{this.$focusOwner.removeAttr('aria-activedescendant');}this.emit('highlight',item);}return this;};OO.ui.SelectWidget.prototype.getItemFromLabel=function(label,prefix){var len=this.items.length,filter=this.getItemMatcher(label,'exact');var i,item;for(i=0;i<len;i++){item=this.items[i];if(item instanceof OO.ui.OptionWidget&&item.isSelectable()&&filter(item)){return item;}}if(prefix){var found=null;filter=this.getItemMatcher(label,'prefix');for(i=0;i<len;i++){item=this.items[i];if(item instanceof OO.ui.OptionWidget&&item.isSelectable()&&filter(item)){if(found){return null;}found=item;}}if(found){return found;}}return null;};OO.ui.SelectWidget.prototype.selectItemByLabel=function(label,prefix){var itemFromLabel=this.getItemFromLabel(label,!!prefix);if(label===undefined||!itemFromLabel){return this.selectItem();}return this.selectItem(itemFromLabel);};OO.ui.SelectWidget.prototype.selectItemByData=function(data){
var itemFromData=this.findItemFromData(data);if(data===undefined||!itemFromData){return this.selectItem();}return this.selectItem(itemFromData);};OO.ui.SelectWidget.prototype.unselectItem=function(unselectedItem){if(unselectedItem){unselectedItem.setSelected(false);}else{this.items.forEach(function(item){if(item.isSelected()){item.setSelected(false);}});}this.emit('select',this.findSelectedItems());return this;};OO.ui.SelectWidget.prototype.selectItem=function(item){if(item){if(item.isSelected()){return this;}else if(this.multiselect){item.setSelected(true);return this;}}var changed=false;for(var i=0;i<this.items.length;i++){var selected=this.items[i]===item;if(this.items[i].isSelected()!==selected){this.items[i].setSelected(selected);if(changed&&!this.multiselect){break;}changed=!selected||this.items[i].isSelected();}}if(changed){if(item&&!item.constructor.static.highlightable){if(item){this.$focusOwner.attr('aria-activedescendant',item.getElementId());}else{this.$focusOwner.
removeAttr('aria-activedescendant');}}this.emit('select',this.findSelectedItems());}return this;};OO.ui.SelectWidget.prototype.pressItem=function(item){if(item&&item.isPressed()){return this;}var changed=false;for(var i=0;i<this.items.length;i++){var pressed=this.items[i]===item;if(this.items[i].isPressed()!==pressed){this.items[i].setPressed(pressed);if(changed){break;}changed=!pressed||this.items[i].isPressed();}}if(changed){this.emit('press',item);}return this;};OO.ui.SelectWidget.prototype.chooseItem=function(item){if(item){if(this.multiselect&&item.isSelected()){this.unselectItem(item);}else{this.selectItem(item);}this.emit('choose',item,item.isSelected());}return this;};OO.ui.SelectWidget.prototype.findRelativeSelectableItem=function(item,offset,filter,wrap){var step=offset>0?1:-1,len=this.items.length;if(wrap===undefined){wrap=true;}var nextIndex;if(item instanceof OO.ui.OptionWidget){nextIndex=this.items.indexOf(item);}else{nextIndex=offset>0?0:len-1;offset-=step;}var
previousItem=item;var nextItem=null;for(var i=0;i<len;i++){item=this.items[nextIndex];if(item instanceof OO.ui.OptionWidget&&item.isSelectable()&&(!filter||filter(item))){nextItem=item;}if(offset===0&&nextItem&&nextItem!==previousItem){break;}nextIndex+=step;if(nextIndex<0||nextIndex>=len){if(wrap){nextIndex=(nextIndex+len)%len;}else{break;}}if(offset!==0){offset-=step;}}return nextItem;};OO.ui.SelectWidget.prototype.findFirstSelectableItem=function(){return this.findRelativeSelectableItem(null,1);};OO.ui.SelectWidget.prototype.addItems=function(items,index){if(!items||!items.length){return this;}OO.ui.mixin.GroupWidget.prototype.addItems.call(this,items,index);this.emit('add',items,index===undefined?this.items.length-items.length-1:index);return this;};OO.ui.SelectWidget.prototype.removeItems=function(items){for(var i=0;i<items.length;i++){var item=items[i];if(item.isSelected()){this.selectItem(null);}}OO.ui.mixin.GroupWidget.prototype.removeItems.call(this,items);this.emit('remove',
items);return this;};OO.ui.SelectWidget.prototype.clearItems=function(){var items=this.items.slice();OO.ui.mixin.GroupWidget.prototype.clearItems.call(this);this.selectItem(null);this.emit('remove',items);return this;};OO.ui.SelectWidget.prototype.setFocusOwner=function($focusOwner){this.$focusOwner=$focusOwner;};OO.ui.DecoratedOptionWidget=function OoUiDecoratedOptionWidget(config){OO.ui.DecoratedOptionWidget.super.call(this,config);OO.ui.mixin.IconElement.call(this,config);OO.ui.mixin.IndicatorElement.call(this,config);this.$element.addClass('oo-ui-decoratedOptionWidget').prepend(this.$icon).append(this.$indicator);};OO.inheritClass(OO.ui.DecoratedOptionWidget,OO.ui.OptionWidget);OO.mixinClass(OO.ui.DecoratedOptionWidget,OO.ui.mixin.IconElement);OO.mixinClass(OO.ui.DecoratedOptionWidget,OO.ui.mixin.IndicatorElement);OO.ui.MenuOptionWidget=function OoUiMenuOptionWidget(config){OO.ui.MenuOptionWidget.super.call(this,config);this.checkIcon=new OO.ui.IconWidget({icon:'check',classes:[
'oo-ui-menuOptionWidget-checkIcon']});this.$element.prepend(this.checkIcon.$element).addClass('oo-ui-menuOptionWidget');};OO.inheritClass(OO.ui.MenuOptionWidget,OO.ui.DecoratedOptionWidget);OO.ui.MenuOptionWidget.static.scrollIntoViewOnSelect=true;OO.ui.MenuSectionOptionWidget=function OoUiMenuSectionOptionWidget(config){OO.ui.MenuSectionOptionWidget.super.call(this,config);this.$element.addClass('oo-ui-menuSectionOptionWidget').removeAttr('role aria-selected');this.selected=false;};OO.inheritClass(OO.ui.MenuSectionOptionWidget,OO.ui.DecoratedOptionWidget);OO.ui.MenuSectionOptionWidget.static.selectable=false;OO.ui.MenuSectionOptionWidget.static.highlightable=false;OO.ui.MenuSelectWidget=function OoUiMenuSelectWidget(config){config=config||{};OO.ui.MenuSelectWidget.super.call(this,config);OO.ui.mixin.ClippableElement.call(this,$.extend({$clippable:this.$group},config));OO.ui.mixin.FloatableElement.call(this,config);this.originalVerticalPosition=this.verticalPosition;this.autoHide=
config.autoHide===undefined||!!config.autoHide;this.hideOnChoose=config.hideOnChoose===undefined||!!config.hideOnChoose;this.filterFromInput=!!config.filterFromInput;this.previouslySelectedValue=null;this.$input=config.$input?config.$input:config.input?config.input.$input:null;this.$widget=config.widget?config.widget.$element:null;this.$autoCloseIgnore=config.$autoCloseIgnore||$([]);this.onDocumentMouseDownHandler=this.onDocumentMouseDown.bind(this);this.onInputEditHandler=OO.ui.debounce(this.updateItemVisibility.bind(this),100);this.highlightOnFilter=!!config.highlightOnFilter;this.lastHighlightedItem=null;this.width=config.width;this.filterMode=config.filterMode;this.screenReaderMode=false;this.$element.addClass('oo-ui-menuSelectWidget');if(config.widget){this.setFocusOwner(config.widget.$tabIndexed);}this.visible=false;this.$element.addClass('oo-ui-element-hidden');this.$focusOwner.attr('aria-expanded','false');};OO.inheritClass(OO.ui.MenuSelectWidget,OO.ui.SelectWidget);OO.
mixinClass(OO.ui.MenuSelectWidget,OO.ui.mixin.ClippableElement);OO.mixinClass(OO.ui.MenuSelectWidget,OO.ui.mixin.FloatableElement);OO.ui.MenuSelectWidget.static.handleNavigationKeys=true;OO.ui.MenuSelectWidget.static.listWrapsAround=false;OO.ui.MenuSelectWidget.static.flippedPositions={below:'above',above:'below',top:'bottom',bottom:'top'};OO.ui.MenuSelectWidget.prototype.onDocumentMouseDown=function(e){if(this.isVisible()&&!OO.ui.contains(this.$element.add(this.$widget).add(this.$autoCloseIgnore).get(),e.target,true)){this.toggle(false);}};OO.ui.MenuSelectWidget.prototype.onDocumentKeyDown=function(e){var handled=false,currentItem=this.findHighlightedItem()||this.findFirstSelectedItem();if(!this.isDisabled()&&this.getVisibleItems().length){switch(e.keyCode){case OO.ui.Keys.ENTER:if(this.isVisible()){OO.ui.MenuSelectWidget.super.prototype.onDocumentKeyDown.call(this,e);}break;case OO.ui.Keys.TAB:if(this.isVisible()){if(currentItem){this.chooseItem(currentItem);handled=true;}this.toggle
(false);}break;case OO.ui.Keys.LEFT:case OO.ui.Keys.RIGHT:case OO.ui.Keys.HOME:case OO.ui.Keys.END:if(!this.$input){OO.ui.MenuSelectWidget.super.prototype.onDocumentKeyDown.call(this,e);}break;case OO.ui.Keys.ESCAPE:if(this.isVisible()){if(currentItem&&!this.multiselect){currentItem.setHighlighted(false);}this.toggle(false);handled=true;}break;default:return OO.ui.MenuSelectWidget.super.prototype.onDocumentKeyDown.call(this,e);}if(handled){e.preventDefault();e.stopPropagation();}}};OO.ui.MenuSelectWidget.prototype.getVisibleItems=function(){return this.getItems().filter(function(item){return item.isVisible();});};OO.ui.MenuSelectWidget.prototype.updateItemVisibility=function(){if(!this.filterFromInput||!this.$input){this.clip();return;}var anyVisible=false;var showAll=!this.isVisible()||this.previouslySelectedValue===this.$input.val(),filter=showAll?null:this.getItemMatcher(this.$input.val(),this.filterMode);var item;var section,sectionEmpty;for(var i=0;i<this.items.length;i++){item=
this.items[i];if(item instanceof OO.ui.MenuSectionOptionWidget){if(section){section.toggle(showAll||!sectionEmpty);}section=item;sectionEmpty=true;}else if(item instanceof OO.ui.OptionWidget){var visible=!filter||filter(item);anyVisible=anyVisible||visible;sectionEmpty=sectionEmpty&&!visible;item.toggle(visible);}}if(section){section.toggle(showAll||!sectionEmpty);}if(!anyVisible){this.highlightItem(null);}this.$element.toggleClass('oo-ui-menuSelectWidget-invisible',!anyVisible);if(this.highlightOnFilter&&!(this.lastHighlightedItem&&this.lastHighlightedItem.isSelectable())&&this.isVisible()){item=this.findFirstSelectableItem();this.highlightItem(item);this.lastHighlightedItem=item;}this.clip();};OO.ui.MenuSelectWidget.prototype.bindDocumentKeyDownListener=function(){if(this.$input){this.$input.on('keydown',this.onDocumentKeyDownHandler);}else{OO.ui.MenuSelectWidget.super.prototype.bindDocumentKeyDownListener.call(this);}};OO.ui.MenuSelectWidget.prototype.unbindDocumentKeyDownListener=
function(){if(this.$input){this.$input.off('keydown',this.onDocumentKeyDownHandler);}else{OO.ui.MenuSelectWidget.super.prototype.unbindDocumentKeyDownListener.call(this);}};OO.ui.MenuSelectWidget.prototype.bindDocumentKeyPressListener=function(){if(this.$input){if(this.filterFromInput){this.$input.on('keydown mouseup cut paste change input select',this.onInputEditHandler);this.$input.one('keypress',function(){this.previouslySelectedValue=null;}.bind(this));this.previouslySelectedValue=this.$input.val();this.updateItemVisibility();}}else{OO.ui.MenuSelectWidget.super.prototype.bindDocumentKeyPressListener.call(this);}};OO.ui.MenuSelectWidget.prototype.unbindDocumentKeyPressListener=function(){if(this.$input){if(this.filterFromInput){this.$input.off('keydown mouseup cut paste change input select',this.onInputEditHandler);this.updateItemVisibility();}}else{OO.ui.MenuSelectWidget.super.prototype.unbindDocumentKeyPressListener.call(this);}};OO.ui.MenuSelectWidget.prototype.chooseItem=
function(item){OO.ui.MenuSelectWidget.super.prototype.chooseItem.call(this,item);if(this.hideOnChoose){this.toggle(false);}return this;};OO.ui.MenuSelectWidget.prototype.addItems=function(items,index){if(!items||!items.length){return this;}OO.ui.MenuSelectWidget.super.prototype.addItems.call(this,items,index);this.updateItemVisibility();return this;};OO.ui.MenuSelectWidget.prototype.removeItems=function(items){OO.ui.MenuSelectWidget.super.prototype.removeItems.call(this,items);this.updateItemVisibility();return this;};OO.ui.MenuSelectWidget.prototype.clearItems=function(){OO.ui.MenuSelectWidget.super.prototype.clearItems.call(this);this.updateItemVisibility();return this;};OO.ui.MenuSelectWidget.prototype.toggleScreenReaderMode=function(screenReaderMode){screenReaderMode=!!screenReaderMode;this.screenReaderMode=screenReaderMode;this.$element.toggleClass('oo-ui-menuSelectWidget-screenReaderMode',this.screenReaderMode);if(screenReaderMode){this.bindDocumentKeyDownListener();this.
bindDocumentKeyPressListener();}else{this.$focusOwner.removeAttr('aria-activedescendant');this.unbindDocumentKeyDownListener();this.unbindDocumentKeyPressListener();}};OO.ui.MenuSelectWidget.prototype.toggle=function(visible){visible=(visible===undefined?!this.visible:!!visible)&&!!this.items.length;var change=visible!==this.isVisible();if(visible&&!this.warnedUnattached&&!this.isElementAttached()){OO.ui.warnDeprecation('MenuSelectWidget#toggle: Before calling this method, the menu must be attached to the DOM.');this.warnedUnattached=true;}if(change&&visible){this.setVerticalPosition(this.originalVerticalPosition);}OO.ui.MenuSelectWidget.super.prototype.toggle.call(this,visible);if(change){if(visible){if(this.width){this.setIdealSize(this.width);}else if(this.$floatableContainer){this.$clippable.css('width','auto');this.setIdealSize(this.$floatableContainer[0].offsetWidth>this.$clippable[0].offsetWidth?this.$floatableContainer[0].offsetWidth:'auto');this.$clippable.css('width','');}
this.togglePositioning(!!this.$floatableContainer);this.toggleClipping(true);if(!this.screenReaderMode){this.bindDocumentKeyDownListener();this.bindDocumentKeyPressListener();}if((this.isClippedVertically()||this.isFloatableOutOfView())&&this.originalVerticalPosition!=='center'){var originalHeight=this.$element.height();this.setVerticalPosition(this.constructor.static.flippedPositions[this.originalVerticalPosition]);if(this.isClippedVertically()||this.isFloatableOutOfView()){var flippedHeight=this.$element.height();if(originalHeight>flippedHeight){this.setVerticalPosition(this.originalVerticalPosition);}}}this.$focusOwner.attr('aria-expanded','true');this.$focusOwner.attr('aria-owns',this.getElementId());var selectedItem=!this.multiselect&&this.findSelectedItem();if(selectedItem){this.$focusOwner.attr('aria-activedescendant',selectedItem.getElementId());selectedItem.scrollElementIntoView({duration:0});}if(this.autoHide){this.getElementDocument().addEventListener('mousedown',this.
onDocumentMouseDownHandler,true);}this.emit('ready');}else{this.$focusOwner.removeAttr('aria-activedescendant');if(!this.screenReaderMode){this.unbindDocumentKeyDownListener();this.unbindDocumentKeyPressListener();}this.$focusOwner.attr('aria-expanded','false');this.$focusOwner.removeAttr('aria-owns');this.getElementDocument().removeEventListener('mousedown',this.onDocumentMouseDownHandler,true);this.togglePositioning(false);this.toggleClipping(false);this.lastHighlightedItem=null;}}return this;};OO.ui.MenuSelectWidget.prototype.scrollToTop=function(){this.$element.scrollTop(0);};OO.ui.DropdownWidget=function OoUiDropdownWidget(config){config=$.extend({indicator:'down'},config);OO.ui.DropdownWidget.super.call(this,config);this.$handle=$('<span>');this.$overlay=(config.$overlay===true?OO.ui.getDefaultOverlay():config.$overlay)||this.$element;OO.ui.mixin.IconElement.call(this,config);OO.ui.mixin.IndicatorElement.call(this,config);OO.ui.mixin.LabelElement.call(this,config);OO.ui.mixin.
TitledElement.call(this,$.extend({$titled:this.$label},config));OO.ui.mixin.TabIndexedElement.call(this,$.extend({$tabIndexed:this.$handle},config));this.menu=new OO.ui.MenuSelectWidget($.extend({widget:this,$floatableContainer:this.$element},config.menu));this.$handle.on({click:this.onClick.bind(this),keydown:this.onKeyDown.bind(this),focus:this.onFocus.bind(this),blur:this.onBlur.bind(this)});this.menu.connect(this,{select:'onMenuSelect',toggle:'onMenuToggle'});var labelId=OO.ui.generateElementId();this.setLabelId(labelId);this.$label.attr({role:'textbox','aria-readonly':'true'});this.$handle.addClass('oo-ui-dropdownWidget-handle').append(this.$icon,this.$label,this.$indicator).attr({role:'combobox','aria-autocomplete':'list','aria-expanded':'false','aria-haspopup':'true','aria-labelledby':labelId});this.$element.addClass('oo-ui-dropdownWidget').append(this.$handle);this.$overlay.append(this.menu.$element);};OO.inheritClass(OO.ui.DropdownWidget,OO.ui.Widget);OO.mixinClass(OO.ui.
DropdownWidget,OO.ui.mixin.IconElement);OO.mixinClass(OO.ui.DropdownWidget,OO.ui.mixin.IndicatorElement);OO.mixinClass(OO.ui.DropdownWidget,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.DropdownWidget,OO.ui.mixin.TitledElement);OO.mixinClass(OO.ui.DropdownWidget,OO.ui.mixin.TabIndexedElement);OO.ui.DropdownWidget.prototype.getMenu=function(){return this.menu;};OO.ui.DropdownWidget.prototype.onMenuSelect=function(item){var selectedLabel;if(!item){this.setLabel(null);return;}selectedLabel=item.getLabel();if(selectedLabel instanceof $){selectedLabel=selectedLabel.clone();}this.setLabel(selectedLabel);};OO.ui.DropdownWidget.prototype.onMenuToggle=function(isVisible){this.$element.toggleClass('oo-ui-dropdownWidget-open',isVisible);};OO.ui.DropdownWidget.prototype.onClick=function(e){if(!this.isDisabled()&&e.which===OO.ui.MouseButtons.LEFT){this.menu.toggle();}return false;};OO.ui.DropdownWidget.prototype.onKeyDown=function(e){if(!this.isDisabled()){switch(e.keyCode){case OO.ui.Keys.ENTER:
this.menu.toggle();return false;case OO.ui.Keys.SPACE:if(this.menu.keyPressBuffer===''){this.menu.toggle();return false;}break;}}};OO.ui.DropdownWidget.prototype.onFocus=function(){this.menu.toggleScreenReaderMode(true);};OO.ui.DropdownWidget.prototype.onBlur=function(){this.menu.toggleScreenReaderMode(false);};OO.ui.DropdownWidget.prototype.setLabelledBy=function(id){var labelId=this.$label.attr('id');if(id){this.$handle.attr('aria-labelledby',id+' '+labelId);}else{this.$handle.attr('aria-labelledby',labelId);}};OO.ui.RadioOptionWidget=function OoUiRadioOptionWidget(config){config=config||{};this.radio=new OO.ui.RadioInputWidget({value:config.data,tabIndex:-1});OO.ui.RadioOptionWidget.super.call(this,config);this.radio.$input.attr('role','presentation');this.$element.addClass('oo-ui-radioOptionWidget').attr({role:'radio','aria-checked':'false'}).removeAttr('aria-selected').prepend(this.radio.$element);};OO.inheritClass(OO.ui.RadioOptionWidget,OO.ui.OptionWidget);OO.ui.
RadioOptionWidget.static.highlightable=false;OO.ui.RadioOptionWidget.static.pressable=false;OO.ui.RadioOptionWidget.static.tagName='label';OO.ui.RadioOptionWidget.prototype.setSelected=function(state){OO.ui.RadioOptionWidget.super.prototype.setSelected.call(this,state);this.radio.setSelected(state);this.$element.attr('aria-checked',state.toString()).removeAttr('aria-selected');return this;};OO.ui.RadioOptionWidget.prototype.setDisabled=function(disabled){OO.ui.RadioOptionWidget.super.prototype.setDisabled.call(this,disabled);this.radio.setDisabled(this.isDisabled());return this;};OO.ui.RadioSelectWidget=function OoUiRadioSelectWidget(config){OO.ui.RadioSelectWidget.super.call(this,config);OO.ui.mixin.TabIndexedElement.call(this,config);this.$element.on({focus:this.bindDocumentKeyDownListener.bind(this),blur:this.unbindDocumentKeyDownListener.bind(this)});this.$element.addClass('oo-ui-radioSelectWidget').attr('role','radiogroup').removeAttr('aria-multiselectable');};OO.inheritClass(OO.
ui.RadioSelectWidget,OO.ui.SelectWidget);OO.mixinClass(OO.ui.RadioSelectWidget,OO.ui.mixin.TabIndexedElement);OO.ui.MultioptionWidget=function OoUiMultioptionWidget(config){config=config||{};OO.ui.MultioptionWidget.super.call(this,config);OO.ui.mixin.ItemWidget.call(this);OO.ui.mixin.LabelElement.call(this,config);OO.ui.mixin.TitledElement.call(this,config);this.selected=null;this.$element.addClass('oo-ui-multioptionWidget').append(this.$label);this.setSelected(config.selected);};OO.inheritClass(OO.ui.MultioptionWidget,OO.ui.Widget);OO.mixinClass(OO.ui.MultioptionWidget,OO.ui.mixin.ItemWidget);OO.mixinClass(OO.ui.MultioptionWidget,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.MultioptionWidget,OO.ui.mixin.TitledElement);OO.ui.MultioptionWidget.prototype.isSelected=function(){return this.selected;};OO.ui.MultioptionWidget.prototype.setSelected=function(state){state=!!state;if(this.selected!==state){this.selected=state;this.emit('change',state);this.$element.toggleClass(
'oo-ui-multioptionWidget-selected',state);}return this;};OO.ui.MultiselectWidget=function OoUiMultiselectWidget(config){OO.ui.MultiselectWidget.super.call(this,config);config=config||{};OO.ui.mixin.GroupWidget.call(this,config);OO.ui.mixin.TitledElement.call(this,config);this.aggregate({change:'select'});this.connect(this,{select:['emit','change']});this.addItems(config.items||[]);this.$group.addClass('oo-ui-multiselectWidget-group');this.$element.addClass('oo-ui-multiselectWidget').append(this.$group);};OO.inheritClass(OO.ui.MultiselectWidget,OO.ui.Widget);OO.mixinClass(OO.ui.MultiselectWidget,OO.ui.mixin.GroupWidget);OO.mixinClass(OO.ui.MultiselectWidget,OO.ui.mixin.TitledElement);OO.ui.MultiselectWidget.prototype.findSelectedItems=function(){return this.items.filter(function(item){return item.isSelected();});};OO.ui.MultiselectWidget.prototype.findSelectedItemsData=function(){return this.findSelectedItems().map(function(item){return item.data;});};OO.ui.MultiselectWidget.prototype.
selectItems=function(items){this.items.forEach(function(item){var selected=items.indexOf(item)!==-1;item.setSelected(selected);});return this;};OO.ui.MultiselectWidget.prototype.selectItemsByData=function(datas){var widget=this;var items=datas.map(function(data){return widget.findItemFromData(data);});this.selectItems(items);return this;};OO.ui.CheckboxMultioptionWidget=function OoUiCheckboxMultioptionWidget(config){config=config||{};this.checkbox=new OO.ui.CheckboxInputWidget();OO.ui.CheckboxMultioptionWidget.super.call(this,config);this.checkbox.on('change',this.onCheckboxChange.bind(this));this.$element.on('keydown',this.onKeyDown.bind(this));this.$element.addClass('oo-ui-checkboxMultioptionWidget').prepend(this.checkbox.$element);};OO.inheritClass(OO.ui.CheckboxMultioptionWidget,OO.ui.MultioptionWidget);OO.ui.CheckboxMultioptionWidget.static.tagName='label';OO.ui.CheckboxMultioptionWidget.prototype.onCheckboxChange=function(){this.setSelected(this.checkbox.isSelected());};OO.ui.
CheckboxMultioptionWidget.prototype.setSelected=function(state){OO.ui.CheckboxMultioptionWidget.super.prototype.setSelected.call(this,state);this.checkbox.setSelected(state);return this;};OO.ui.CheckboxMultioptionWidget.prototype.setDisabled=function(disabled){OO.ui.CheckboxMultioptionWidget.super.prototype.setDisabled.call(this,disabled);this.checkbox.setDisabled(this.isDisabled());return this;};OO.ui.CheckboxMultioptionWidget.prototype.focus=function(){this.checkbox.focus();};OO.ui.CheckboxMultioptionWidget.prototype.onKeyDown=function(e){var element=this.getElementGroup();var nextItem;if(e.keyCode===OO.ui.Keys.LEFT||e.keyCode===OO.ui.Keys.UP){nextItem=element.getRelativeFocusableItem(this,-1);}else if(e.keyCode===OO.ui.Keys.RIGHT||e.keyCode===OO.ui.Keys.DOWN){nextItem=element.getRelativeFocusableItem(this,1);}if(nextItem){e.preventDefault();nextItem.focus();}};OO.ui.CheckboxMultiselectWidget=function OoUiCheckboxMultiselectWidget(config){OO.ui.CheckboxMultiselectWidget.super.call(
this,config);this.$lastClicked=null;this.$group.on('click',this.onClick.bind(this));this.$element.addClass('oo-ui-checkboxMultiselectWidget');};OO.inheritClass(OO.ui.CheckboxMultiselectWidget,OO.ui.MultiselectWidget);OO.ui.CheckboxMultiselectWidget.prototype.getRelativeFocusableItem=function(item,direction){var increase=direction>0?1:-1,len=this.items.length;var nextIndex;if(item){var currentIndex=this.items.indexOf(item);nextIndex=(currentIndex+increase+len)%len;}else{nextIndex=direction>0?0:len-1;}for(var i=0;i<len;i++){item=this.items[nextIndex];if(item&&!item.isDisabled()){return item;}nextIndex=(nextIndex+increase+len)%len;}return null;};OO.ui.CheckboxMultiselectWidget.prototype.onClick=function(e){var $lastClicked=this.$lastClicked,$nowClicked=$(e.target).closest('.oo-ui-checkboxMultioptionWidget').not('.oo-ui-widget-disabled');if($lastClicked&&$nowClicked.length&&e.shiftKey){var $options=this.$group.find('.oo-ui-checkboxMultioptionWidget');var lastClickedIndex=$options.index(
$lastClicked);var nowClickedIndex=$options.index($nowClicked);if(nowClickedIndex!==lastClickedIndex){var items=this.items;var wasSelected=items[nowClickedIndex].isSelected();var direction=nowClickedIndex>lastClickedIndex?1:-1;for(var i=lastClickedIndex;i!==nowClickedIndex;i+=direction){if(!items[i].isDisabled()){items[i].setSelected(!wasSelected);}}e.preventDefault();setTimeout(function(){if(!items[nowClickedIndex].isDisabled()){items[nowClickedIndex].setSelected(!wasSelected);}});}}if($nowClicked.length){this.$lastClicked=$nowClicked;}};OO.ui.CheckboxMultiselectWidget.prototype.focus=function(){if(!this.isDisabled()){var item=this.getRelativeFocusableItem(null,1);if(item){item.focus();}}return this;};OO.ui.CheckboxMultiselectWidget.prototype.simulateLabelClick=function(){this.focus();};OO.ui.ProgressBarWidget=function OoUiProgressBarWidget(config){config=config||{};OO.ui.ProgressBarWidget.super.call(this,config);OO.ui.mixin.PendingElement.call(this,config);this.$bar=$('<div>');this.
progress=null;this.setProgress(config.progress!==undefined?config.progress:false);this.$bar.addClass('oo-ui-progressBarWidget-bar');this.$element.attr({role:'progressbar','aria-valuemin':0,'aria-valuemax':100}).addClass('oo-ui-progressBarWidget').append(this.$bar);};OO.inheritClass(OO.ui.ProgressBarWidget,OO.ui.Widget);OO.mixinClass(OO.ui.ProgressBarWidget,OO.ui.mixin.PendingElement);OO.ui.ProgressBarWidget.static.tagName='div';OO.ui.ProgressBarWidget.prototype.getProgress=function(){return this.progress;};OO.ui.ProgressBarWidget.prototype.setProgress=function(progress){this.progress=progress;if(progress!==false){this.$bar.css('width',this.progress+'%');this.$element.attr('aria-valuenow',this.progress);}else{this.$bar.css('width','');this.$element.removeAttr('aria-valuenow');}this.$element.toggleClass('oo-ui-progressBarWidget-indeterminate',progress===false);};OO.ui.InputWidget=function OoUiInputWidget(config){config=config||{};OO.ui.InputWidget.super.call(this,config);this.$input=
config.$input||this.getInputElement(config);this.value='';this.inputFilter=config.inputFilter;OO.ui.mixin.TabIndexedElement.call(this,$.extend({$tabIndexed:this.$input},config));OO.ui.mixin.TitledElement.call(this,$.extend({$titled:this.$input},config));OO.ui.mixin.AccessKeyedElement.call(this,$.extend({$accessKeyed:this.$input},config));this.$input.on('keydown mouseup cut paste change input select',this.onEdit.bind(this));this.$input.addClass('oo-ui-inputWidget-input').attr('name',config.name).prop('disabled',this.isDisabled());this.$element.addClass('oo-ui-inputWidget').append(this.$input);this.setValue(config.value);if(config.dir){this.setDir(config.dir);}if(config.inputId!==undefined){this.setInputId(config.inputId);}};OO.inheritClass(OO.ui.InputWidget,OO.ui.Widget);OO.mixinClass(OO.ui.InputWidget,OO.ui.mixin.TabIndexedElement);OO.mixinClass(OO.ui.InputWidget,OO.ui.mixin.TitledElement);OO.mixinClass(OO.ui.InputWidget,OO.ui.mixin.AccessKeyedElement);OO.ui.InputWidget.static.
reusePreInfuseDOM=function(node,config){var $input=$(node).find('.oo-ui-inputWidget-input');config=OO.ui.InputWidget.super.static.reusePreInfuseDOM(node,config);if($input.length){config.$input=$input;}return config;};OO.ui.InputWidget.static.gatherPreInfuseState=function(node,config){var state=OO.ui.InputWidget.super.static.gatherPreInfuseState(node,config);if(config.$input){state.value=config.$input.val();state.focus=config.$input.is(':focus');}return state;};OO.ui.InputWidget.prototype.getInputElement=function(){return $('<input>');};OO.ui.InputWidget.prototype.onEdit=function(){var widget=this;if(!this.isDisabled()){setTimeout(function(){widget.setValue(widget.$input.val());});}};OO.ui.InputWidget.prototype.getValue=function(){var value=this.$input.val();if(this.value!==value){this.setValue(value);}return this.value;};OO.ui.InputWidget.prototype.setDir=function(dir){this.$input.prop('dir',dir);return this;};OO.ui.InputWidget.prototype.setValue=function(value){value=this.cleanUpValue
(value);if(this.$input.val()!==value){this.$input.val(value);}if(this.value!==value){this.value=value;this.emit('change',this.value);}if(this.defaultValue===undefined){this.defaultValue=this.value;this.$input[0].defaultValue=this.defaultValue;}return this;};OO.ui.InputWidget.prototype.cleanUpValue=function(value){if(value===undefined||value===null){return'';}else if(this.inputFilter){return this.inputFilter(String(value));}else{return String(value);}};OO.ui.InputWidget.prototype.setDisabled=function(state){OO.ui.InputWidget.super.prototype.setDisabled.call(this,state);if(this.$input){this.$input.prop('disabled',this.isDisabled());}return this;};OO.ui.InputWidget.prototype.setInputId=function(id){this.$input.attr('id',id);return this;};OO.ui.InputWidget.prototype.restorePreInfuseState=function(state){OO.ui.InputWidget.super.prototype.restorePreInfuseState.call(this,state);if(state.value!==undefined&&state.value!==this.getValue()){this.setValue(state.value);}if(state.focus){this.focus();
}};OO.ui.HiddenInputWidget=function OoUiHiddenInputWidget(config){config=$.extend({value:'',name:''},config);OO.ui.HiddenInputWidget.super.call(this,config);this.$element.attr({type:'hidden',value:config.value,name:config.name});this.$element.removeAttr('aria-disabled');};OO.inheritClass(OO.ui.HiddenInputWidget,OO.ui.Widget);OO.ui.HiddenInputWidget.static.tagName='input';OO.ui.ButtonInputWidget=function OoUiButtonInputWidget(config){config=$.extend({type:'button',useInputTag:false},config);if(config.$input){config.$input.empty();}this.useInputTag=config.useInputTag;OO.ui.ButtonInputWidget.super.call(this,config);OO.ui.mixin.ButtonElement.call(this,$.extend({$button:this.$input},config));OO.ui.mixin.IconElement.call(this,config);OO.ui.mixin.IndicatorElement.call(this,config);OO.ui.mixin.LabelElement.call(this,config);OO.ui.mixin.FlaggedElement.call(this,config);if(!config.useInputTag){this.$input.append(this.$icon,this.$label,this.$indicator);}this.$element.addClass(
'oo-ui-buttonInputWidget');};OO.inheritClass(OO.ui.ButtonInputWidget,OO.ui.InputWidget);OO.mixinClass(OO.ui.ButtonInputWidget,OO.ui.mixin.ButtonElement);OO.mixinClass(OO.ui.ButtonInputWidget,OO.ui.mixin.IconElement);OO.mixinClass(OO.ui.ButtonInputWidget,OO.ui.mixin.IndicatorElement);OO.mixinClass(OO.ui.ButtonInputWidget,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.ButtonInputWidget,OO.ui.mixin.FlaggedElement);OO.ui.ButtonInputWidget.static.tagName='span';OO.ui.ButtonInputWidget.prototype.getInputElement=function(config){var type=config.type==='submit'||config.type==='reset'?config.type:'button';return $('<'+(config.useInputTag?'input':'button')+' type="'+type+'">');};OO.ui.ButtonInputWidget.prototype.setLabel=function(label){label=OO.ui.resolveMsg(label);if(this.useInputTag){if(typeof label!=='string'){label='';}this.$input.val(label);}return OO.ui.mixin.LabelElement.prototype.setLabel.call(this,label);};OO.ui.ButtonInputWidget.prototype.setValue=function(value){if(!this.useInputTag){
OO.ui.ButtonInputWidget.super.prototype.setValue.call(this,value);}return this;};OO.ui.ButtonInputWidget.prototype.getInputId=function(){return null;};OO.ui.CheckboxInputWidget=function OoUiCheckboxInputWidget(config){config=config||{};OO.ui.CheckboxInputWidget.super.call(this,config);OO.ui.mixin.RequiredElement.call(this,$.extend({},{indicatorElement:null},config));this.checkIcon=new OO.ui.IconWidget({icon:'check',classes:['oo-ui-checkboxInputWidget-checkIcon']});this.$element.addClass('oo-ui-checkboxInputWidget').append(this.checkIcon.$element);this.setSelected(config.selected!==undefined?config.selected:false);this.setIndeterminate(config.indeterminate!==undefined?config.indeterminate:false);};OO.inheritClass(OO.ui.CheckboxInputWidget,OO.ui.InputWidget);OO.mixinClass(OO.ui.CheckboxInputWidget,OO.ui.mixin.RequiredElement);OO.ui.CheckboxInputWidget.static.tagName='span';OO.ui.CheckboxInputWidget.static.gatherPreInfuseState=function(node,config){var state=OO.ui.CheckboxInputWidget.
super.static.gatherPreInfuseState(node,config);if(config.$input){state.checked=config.$input.prop('checked');}return state;};OO.ui.CheckboxInputWidget.prototype.getInputElement=function(){return $('<input>').attr('type','checkbox');};OO.ui.CheckboxInputWidget.prototype.onEdit=function(){var widget=this;if(!this.isDisabled()){setTimeout(function(){widget.setSelected(widget.$input.prop('checked'));widget.setIndeterminate(widget.$input.prop('indeterminate'));});}};OO.ui.CheckboxInputWidget.prototype.setSelected=function(state,internal){state=!!state;if(this.selected!==state){this.selected=state;this.$input.prop('checked',this.selected);if(!internal){this.setIndeterminate(false,true);this.emit('change',this.selected,this.indeterminate);}}if(this.defaultSelected===undefined){this.defaultSelected=this.selected;this.$input[0].defaultChecked=this.defaultSelected;}return this;};OO.ui.CheckboxInputWidget.prototype.isSelected=function(){var selected=this.$input.prop('checked');if(this.selected!==
selected){this.setSelected(selected);}return this.selected;};OO.ui.CheckboxInputWidget.prototype.setIndeterminate=function(state,internal){state=!!state;if(this.indeterminate!==state){this.indeterminate=state;this.$input.prop('indeterminate',this.indeterminate);if(!internal){this.setSelected(false,true);this.emit('change',this.selected,this.indeterminate);}}return this;};OO.ui.CheckboxInputWidget.prototype.isIndeterminate=function(){var indeterminate=this.$input.prop('indeterminate');if(this.indeterminate!==indeterminate){this.setIndeterminate(indeterminate);}return this.indeterminate;};OO.ui.CheckboxInputWidget.prototype.simulateLabelClick=function(){if(!this.isDisabled()){this.$handle.trigger('click');}this.focus();};OO.ui.CheckboxInputWidget.prototype.restorePreInfuseState=function(state){OO.ui.CheckboxInputWidget.super.prototype.restorePreInfuseState.call(this,state);if(state.checked!==undefined&&state.checked!==this.isSelected()){this.setSelected(state.checked);}};OO.ui.
DropdownInputWidget=function OoUiDropdownInputWidget(config){config=config||{};this.dropdownWidget=new OO.ui.DropdownWidget($.extend({$overlay:config.$overlay},config.dropdown));this.setOptionsData(config.options||[]);OO.ui.DropdownInputWidget.super.call(this,config);OO.ui.mixin.RequiredElement.call(this,$.extend({},{indicatorElement:null},config));this.dropdownWidget.getMenu().connect(this,{select:'onMenuSelect'});this.$element.addClass('oo-ui-dropdownInputWidget').append(this.dropdownWidget.$element);if(OO.ui.isMobile()){this.$element.addClass('oo-ui-isMobile');}this.setTabIndexedElement(this.dropdownWidget.$tabIndexed);this.setTitledElement(this.dropdownWidget.$handle);};OO.inheritClass(OO.ui.DropdownInputWidget,OO.ui.InputWidget);OO.mixinClass(OO.ui.DropdownInputWidget,OO.ui.mixin.RequiredElement);OO.ui.DropdownInputWidget.prototype.getInputElement=function(){return $('<select>').addClass('oo-ui-indicator-down');};OO.ui.DropdownInputWidget.prototype.onMenuSelect=function(item){this
.setValue(item?item.getData():'');};OO.ui.DropdownInputWidget.prototype.setValue=function(value){value=this.cleanUpValue(value);var selected=this.dropdownWidget.getMenu().findItemFromData(value)||this.dropdownWidget.getMenu().findFirstSelectableItem();this.dropdownWidget.getMenu().selectItem(selected);value=selected?selected.getData():'';OO.ui.DropdownInputWidget.super.prototype.setValue.call(this,value);if(this.optionsDirty){this.updateOptionsInterface();}return this;};OO.ui.DropdownInputWidget.prototype.setDisabled=function(state){this.dropdownWidget.setDisabled(state);OO.ui.DropdownInputWidget.super.prototype.setDisabled.call(this,state);return this;};OO.ui.DropdownInputWidget.prototype.setOptions=function(options){var value=this.getValue();this.setOptionsData(options);this.setValue(value);return this;};OO.ui.DropdownInputWidget.prototype.setOptionsData=function(options){var widget=this;this.optionsDirty=true;var optionWidgets=[];var previousOptgroup;for(var optIndex=0;optIndex<
options.length;optIndex++){var opt=options[optIndex];var optionWidget;if(opt.optgroup!==undefined){optionWidget=widget.createMenuSectionOptionWidget(opt.optgroup);previousOptgroup=optionWidget;}else{var optValue=widget.cleanUpValue(opt.data);optionWidget=widget.createMenuOptionWidget(optValue,opt.label!==undefined?opt.label:optValue);}if(opt.disabled!==undefined||previousOptgroup instanceof OO.ui.MenuSectionOptionWidget&&previousOptgroup.isDisabled()){optionWidget.setDisabled(true);}optionWidgets.push(optionWidget);}this.dropdownWidget.getMenu().clearItems().addItems(optionWidgets);};OO.ui.DropdownInputWidget.prototype.createMenuOptionWidget=function(data,label){return new OO.ui.MenuOptionWidget({data:data,label:label});};OO.ui.DropdownInputWidget.prototype.createMenuSectionOptionWidget=function(label){return new OO.ui.MenuSectionOptionWidget({label:label});};OO.ui.DropdownInputWidget.prototype.updateOptionsInterface=function(){var $optionsContainer=this.$input,defaultValue=this.
defaultValue,widget=this;this.$input.empty();this.dropdownWidget.getMenu().getItems().forEach(function(optionWidget){var $optionNode;if(!(optionWidget instanceof OO.ui.MenuSectionOptionWidget)){$optionNode=$('<option>').attr('value',optionWidget.getData()).text(optionWidget.getLabel());$optionNode[0].defaultSelected=(optionWidget.getData()===defaultValue);$optionsContainer.append($optionNode);}else{$optionNode=$('<optgroup>').attr('label',optionWidget.getLabel());widget.$input.append($optionNode);$optionsContainer=$optionNode;}if(optionWidget.isDisabled()){$optionNode.prop('disabled',true);}});this.optionsDirty=false;};OO.ui.DropdownInputWidget.prototype.focus=function(){this.dropdownWidget.focus();return this;};OO.ui.DropdownInputWidget.prototype.blur=function(){this.dropdownWidget.blur();return this;};OO.ui.DropdownInputWidget.prototype.setLabelledBy=function(id){this.dropdownWidget.setLabelledBy(id);};OO.ui.RadioInputWidget=function OoUiRadioInputWidget(config){config=config||{};OO.
ui.RadioInputWidget.super.call(this,config);OO.ui.mixin.RequiredElement.call(this,$.extend({},{indicatorElement:null},config));this.$element.addClass('oo-ui-radioInputWidget').append($('<span>'));this.setSelected(config.selected!==undefined?config.selected:false);};OO.inheritClass(OO.ui.RadioInputWidget,OO.ui.InputWidget);OO.mixinClass(OO.ui.RadioInputWidget,OO.ui.mixin.RequiredElement);OO.ui.RadioInputWidget.static.tagName='span';OO.ui.RadioInputWidget.static.gatherPreInfuseState=function(node,config){var state=OO.ui.RadioInputWidget.super.static.gatherPreInfuseState(node,config);if(config.$input){state.checked=config.$input.prop('checked');}return state;};OO.ui.RadioInputWidget.prototype.getInputElement=function(){return $('<input>').attr('type','radio');};OO.ui.RadioInputWidget.prototype.onEdit=function(){};OO.ui.RadioInputWidget.prototype.setSelected=function(state){this.$input.prop('checked',state);if(this.defaultSelected===undefined){this.defaultSelected=state;this.$input[0].
defaultChecked=this.defaultSelected;}return this;};OO.ui.RadioInputWidget.prototype.isSelected=function(){return this.$input.prop('checked');};OO.ui.RadioInputWidget.prototype.simulateLabelClick=function(){if(!this.isDisabled()){this.$input.trigger('click');}this.focus();};OO.ui.RadioInputWidget.prototype.restorePreInfuseState=function(state){OO.ui.RadioInputWidget.super.prototype.restorePreInfuseState.call(this,state);if(state.checked!==undefined&&state.checked!==this.isSelected()){this.setSelected(state.checked);}};OO.ui.RadioSelectInputWidget=function OoUiRadioSelectInputWidget(config){config=config||{};this.radioSelectWidget=new OO.ui.RadioSelectWidget();this.setOptionsData(config.options||[]);OO.ui.RadioSelectInputWidget.super.call(this,config);this.radioSelectWidget.connect(this,{select:'onMenuSelect'});this.$element.addClass('oo-ui-radioSelectInputWidget').append(this.radioSelectWidget.$element);this.setTabIndexedElement(this.radioSelectWidget.$tabIndexed);};OO.inheritClass(OO.
ui.RadioSelectInputWidget,OO.ui.InputWidget);OO.ui.RadioSelectInputWidget.static.gatherPreInfuseState=function(node,config){var state=OO.ui.RadioSelectInputWidget.super.static.gatherPreInfuseState(node,config);state.value=$(node).find('.oo-ui-radioInputWidget .oo-ui-inputWidget-input:checked').val();return state;};OO.ui.RadioSelectInputWidget.static.reusePreInfuseDOM=function(node,config){config=OO.ui.RadioSelectInputWidget.super.static.reusePreInfuseDOM(node,config);delete config.$input;return config;};OO.ui.RadioSelectInputWidget.prototype.getInputElement=function(){return $('<input>').addClass('oo-ui-element-hidden');};OO.ui.RadioSelectInputWidget.prototype.onMenuSelect=function(item){this.setValue(item.getData());};OO.ui.RadioSelectInputWidget.prototype.setValue=function(value){value=this.cleanUpValue(value);var selected=this.radioSelectWidget.findItemFromData(value)||this.radioSelectWidget.findFirstSelectableItem();this.radioSelectWidget.selectItem(selected);value=selected?
selected.getData():'';OO.ui.RadioSelectInputWidget.super.prototype.setValue.call(this,value);return this;};OO.ui.RadioSelectInputWidget.prototype.setDisabled=function(state){this.radioSelectWidget.setDisabled(state);OO.ui.RadioSelectInputWidget.super.prototype.setDisabled.call(this,state);return this;};OO.ui.RadioSelectInputWidget.prototype.setOptions=function(options){var value=this.getValue();this.setOptionsData(options);this.setValue(value);return this;};OO.ui.RadioSelectInputWidget.prototype.setOptionsData=function(options){var widget=this;this.radioSelectWidget.clearItems().addItems(options.map(function(opt){var optValue=widget.cleanUpValue(opt.data);return new OO.ui.RadioOptionWidget({data:optValue,label:opt.label!==undefined?opt.label:optValue});}));};OO.ui.RadioSelectInputWidget.prototype.focus=function(){this.radioSelectWidget.focus();return this;};OO.ui.RadioSelectInputWidget.prototype.blur=function(){this.radioSelectWidget.blur();return this;};OO.ui.
CheckboxMultiselectInputWidget=function OoUiCheckboxMultiselectInputWidget(config){config=config||{};this.checkboxMultiselectWidget=new OO.ui.CheckboxMultiselectWidget();this.inputName=config.name;this.setOptionsData(config.options||[]);OO.ui.CheckboxMultiselectInputWidget.super.call(this,config);this.checkboxMultiselectWidget.connect(this,{select:'onCheckboxesSelect'});this.$element.addClass('oo-ui-checkboxMultiselectInputWidget').append(this.checkboxMultiselectWidget.$element);this.$input.detach();};OO.inheritClass(OO.ui.CheckboxMultiselectInputWidget,OO.ui.InputWidget);OO.ui.CheckboxMultiselectInputWidget.static.gatherPreInfuseState=function(node,config){var state=OO.ui.CheckboxMultiselectInputWidget.super.static.gatherPreInfuseState(node,config);state.value=$(node).find('.oo-ui-checkboxInputWidget .oo-ui-inputWidget-input:checked').toArray().map(function(el){return el.value;});return state;};OO.ui.CheckboxMultiselectInputWidget.static.reusePreInfuseDOM=function(node,config){config=
OO.ui.CheckboxMultiselectInputWidget.super.static.reusePreInfuseDOM(node,config);delete config.$input;return config;};OO.ui.CheckboxMultiselectInputWidget.prototype.getInputElement=function(){return $('<unused>');};OO.ui.CheckboxMultiselectInputWidget.prototype.onCheckboxesSelect=function(){this.setValue(this.checkboxMultiselectWidget.findSelectedItemsData());};OO.ui.CheckboxMultiselectInputWidget.prototype.getValue=function(){var value=this.$element.find('.oo-ui-checkboxInputWidget .oo-ui-inputWidget-input:checked').toArray().map(function(el){return el.value;});if(!OO.compare(this.value,value)){this.setValue(value);}return this.value;};OO.ui.CheckboxMultiselectInputWidget.prototype.setValue=function(value){value=this.cleanUpValue(value);this.checkboxMultiselectWidget.selectItemsByData(value);OO.ui.CheckboxMultiselectInputWidget.super.prototype.setValue.call(this,value);if(this.optionsDirty){this.updateOptionsInterface();}return this;};OO.ui.CheckboxMultiselectInputWidget.prototype.
cleanUpValue=function(value){var cleanValue=[];if(!Array.isArray(value)){return cleanValue;}for(var i=0;i<value.length;i++){var singleValue=OO.ui.CheckboxMultiselectInputWidget.super.prototype.cleanUpValue.call(this,value[i]);if(!this.checkboxMultiselectWidget.findItemFromData(singleValue)){continue;}cleanValue.push(singleValue);}return cleanValue;};OO.ui.CheckboxMultiselectInputWidget.prototype.setDisabled=function(state){this.checkboxMultiselectWidget.setDisabled(state);OO.ui.CheckboxMultiselectInputWidget.super.prototype.setDisabled.call(this,state);return this;};OO.ui.CheckboxMultiselectInputWidget.prototype.setOptions=function(options){var value=this.getValue();this.setOptionsData(options);this.setValue(value);return this;};OO.ui.CheckboxMultiselectInputWidget.prototype.setOptionsData=function(options){var widget=this;this.optionsDirty=true;this.checkboxMultiselectWidget.clearItems().addItems(options.map(function(opt){var optValue=OO.ui.CheckboxMultiselectInputWidget.super.
prototype.cleanUpValue.call(widget,opt.data);var optDisabled=opt.disabled!==undefined?opt.disabled:false;var item=new OO.ui.CheckboxMultioptionWidget({data:optValue,label:opt.label!==undefined?opt.label:optValue,disabled:optDisabled});item.checkbox.$input.attr('name',widget.inputName);item.checkbox.setValue(optValue);return item;}));};OO.ui.CheckboxMultiselectInputWidget.prototype.updateOptionsInterface=function(){var defaultValue=this.defaultValue;this.checkboxMultiselectWidget.getItems().forEach(function(item){var isDefault=defaultValue.indexOf(item.getData())!==-1;item.checkbox.defaultSelected=isDefault;item.checkbox.$input[0].defaultChecked=isDefault;});this.optionsDirty=false;};OO.ui.CheckboxMultiselectInputWidget.prototype.focus=function(){this.checkboxMultiselectWidget.focus();return this;};OO.ui.TextInputWidget=function OoUiTextInputWidget(config){config=$.extend({labelPosition:'after'},config);config.type=this.getSaneType(config);if(config.autocomplete===false){config.
autocomplete='off';}else if(config.autocomplete===true){config.autocomplete='on';}OO.ui.TextInputWidget.super.call(this,config);OO.ui.mixin.IconElement.call(this,config);OO.ui.mixin.IndicatorElement.call(this,config);OO.ui.mixin.PendingElement.call(this,$.extend({$pending:this.$input},config));OO.ui.mixin.LabelElement.call(this,config);OO.ui.mixin.FlaggedElement.call(this,config);OO.ui.mixin.RequiredElement.call(this,config);this.type=config.type;this.readOnly=false;this.validate=null;this.scrollWidth=null;this.setValidation(config.validate);this.setLabelPosition(config.labelPosition);this.$input.on({keypress:this.onKeyPress.bind(this),blur:this.onBlur.bind(this),focus:this.onFocus.bind(this)});this.$icon.on('mousedown',this.onIconMouseDown.bind(this));this.$indicator.on('mousedown',this.onIndicatorMouseDown.bind(this));this.on('labelChange',this.updatePosition.bind(this));this.on('change',OO.ui.debounce(this.onDebouncedChange.bind(this),250));this.$element.addClass(
'oo-ui-textInputWidget oo-ui-textInputWidget-type-'+config.type).append(this.$icon,this.$indicator);this.setReadOnly(!!config.readOnly);if(config.placeholder!==undefined){this.$input.attr('placeholder',config.placeholder);}if(config.maxLength!==undefined){this.$input.attr('maxlength',config.maxLength);}if(config.autofocus){this.$input.attr('autofocus','autofocus');}if(config.autocomplete!==null&&config.autocomplete!==undefined){this.$input.attr('autocomplete',config.autocomplete);if(config.autocomplete==='off'){$(window).on({beforeunload:function(){this.$input.removeAttr('autocomplete');}.bind(this),pageshow:function(){this.$input.attr('autocomplete','off');}.bind(this)});}}if(config.spellcheck!==undefined){this.$input.attr('spellcheck',config.spellcheck?'true':'false');}if(this.label){this.isWaitingToBeAttached=true;this.installParentChangeDetector();}};OO.inheritClass(OO.ui.TextInputWidget,OO.ui.InputWidget);OO.mixinClass(OO.ui.TextInputWidget,OO.ui.mixin.IconElement);OO.mixinClass(
OO.ui.TextInputWidget,OO.ui.mixin.IndicatorElement);OO.mixinClass(OO.ui.TextInputWidget,OO.ui.mixin.PendingElement);OO.mixinClass(OO.ui.TextInputWidget,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.TextInputWidget,OO.ui.mixin.FlaggedElement);OO.mixinClass(OO.ui.TextInputWidget,OO.ui.mixin.RequiredElement);OO.ui.TextInputWidget.static.validationPatterns={'non-empty':/.+/,integer:/^\d+$/};OO.ui.TextInputWidget.prototype.onIconMouseDown=function(e){if(e.which===OO.ui.MouseButtons.LEFT){this.focus();return false;}};OO.ui.TextInputWidget.prototype.onIndicatorMouseDown=function(e){if(e.which===OO.ui.MouseButtons.LEFT){this.focus();return false;}};OO.ui.TextInputWidget.prototype.onKeyPress=function(e){if(e.which===OO.ui.Keys.ENTER){this.emit('enter',e);}};OO.ui.TextInputWidget.prototype.onBlur=function(){this.setValidityFlag();};OO.ui.TextInputWidget.prototype.onFocus=function(){if(this.isWaitingToBeAttached){this.onElementAttach();}this.setValidityFlag(true);};OO.ui.TextInputWidget.prototype
.onElementAttach=function(){this.isWaitingToBeAttached=false;this.valCache=null;this.positionLabel();};OO.ui.TextInputWidget.prototype.onDebouncedChange=function(){this.setValidityFlag();};OO.ui.TextInputWidget.prototype.isReadOnly=function(){return this.readOnly;};OO.ui.TextInputWidget.prototype.setReadOnly=function(state){this.readOnly=!!state;this.$input.prop('readOnly',this.readOnly);return this;};OO.ui.TextInputWidget.prototype.installParentChangeDetector=function(){var MutationObserver=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;if(!MutationObserver||this.isElementAttached()){return;}var widget=this,topmostNode=this.$element[0];while(topmostNode.parentNode){topmostNode=topmostNode.parentNode;}var onRemove;var mutationObserver=new MutationObserver(function(mutations){for(var i=0;i<mutations.length;i++){var removedNodes=mutations[i].removedNodes;for(var j=0;j<removedNodes.length;j++){if(removedNodes[j]===topmostNode){setTimeout(onRemove,0);
return;}}}});onRemove=function(){if(widget.isElementAttached()){widget.onElementAttach();}mutationObserver.disconnect();widget.installParentChangeDetector();};var fakeParentNode=document.createElement('div');fakeParentNode.appendChild(topmostNode);mutationObserver.observe(fakeParentNode,{childList:true});};OO.ui.TextInputWidget.prototype.getInputElement=function(config){var $input=$('<input>').attr('type',config.type);if(config.type==='number'){$input.attr('step','any');}return $input;};OO.ui.TextInputWidget.prototype.getSaneType=function(config){var allowedTypes=['text','password','email','url','number'];return allowedTypes.indexOf(config.type)!==-1?config.type:'text';};OO.ui.TextInputWidget.prototype.selectRange=function(from,to){var input=this.$input[0];to=to||from;var isBackwards=to<from,start=isBackwards?to:from,end=isBackwards?from:to;this.focus();try{input.setSelectionRange(start,end,isBackwards?'backward':'forward');}catch(e){if(this.getElementDocument().body.contains(input)){
throw e;}}return this;};OO.ui.TextInputWidget.prototype.getRange=function(){var input=this.$input[0],start=input.selectionStart,end=input.selectionEnd,isBackwards=input.selectionDirection==='backward';return{from:isBackwards?end:start,to:isBackwards?start:end};};OO.ui.TextInputWidget.prototype.getInputLength=function(){return this.$input[0].value.length;};OO.ui.TextInputWidget.prototype.select=function(){return this.selectRange(0,this.getInputLength());};OO.ui.TextInputWidget.prototype.moveCursorToStart=function(){return this.selectRange(0);};OO.ui.TextInputWidget.prototype.moveCursorToEnd=function(){return this.selectRange(this.getInputLength());};OO.ui.TextInputWidget.prototype.insertContent=function(content){var value=this.getValue(),range=this.getRange(),start=Math.min(range.from,range.to),end=Math.max(range.from,range.to);this.setValue(value.slice(0,start)+content+value.slice(end));this.selectRange(start+content.length);return this;};OO.ui.TextInputWidget.prototype.
encapsulateContent=function(pre,post){var offset=pre.length,range=this.getRange(),start=Math.min(range.from,range.to),end=Math.max(range.from,range.to);this.selectRange(start).insertContent(pre);this.selectRange(offset+end).insertContent(post);this.selectRange(offset+start,offset+end);return this;};OO.ui.TextInputWidget.prototype.setValidation=function(validate){this.validate=validate instanceof RegExp||validate instanceof Function?validate:this.constructor.static.validationPatterns[validate];};OO.ui.TextInputWidget.prototype.setValidityFlag=function(isValid){var widget=this,setFlag=function(valid){if(!valid){widget.$input.attr('aria-invalid','true');}else{widget.$input.removeAttr('aria-invalid');}widget.setFlags({invalid:!valid});};if(isValid!==undefined){setFlag(isValid);}else{this.getValidity().then(function(){setFlag(true);},function(){setFlag(false);});}};OO.ui.TextInputWidget.prototype.getValidity=function(){function rejectOrResolve(valid){var deferred=$.Deferred(),promise=valid?
deferred.resolve():deferred.reject();return promise.promise();}if(this.$input[0].checkValidity&&this.$input[0].checkValidity()===false){return rejectOrResolve(false);}if(!this.validate){return rejectOrResolve(true);}var result;if(this.validate instanceof Function){result=this.validate(this.getValue());if(result&&typeof result.promise==='function'){return result.promise().then(function(valid){return rejectOrResolve(valid);});}}else{result=this.validate.test(this.getValue());}return rejectOrResolve(result);};OO.ui.TextInputWidget.prototype.setLabelPosition=function(labelPosition){this.labelPosition=labelPosition;if(this.label){this.updatePosition();}return this;};OO.ui.TextInputWidget.prototype.updatePosition=function(){var after=this.labelPosition==='after';this.$element.toggleClass('oo-ui-textInputWidget-labelPosition-after',!!this.label&&after).toggleClass('oo-ui-textInputWidget-labelPosition-before',!!this.label&&!after);this.valCache=null;this.scrollWidth=null;this.positionLabel();
return this;};OO.ui.TextInputWidget.prototype.positionLabel=function(){if(this.isWaitingToBeAttached){return this;}var newCss={'padding-right':'','padding-left':''};if(this.label){this.$element.append(this.$label);}else{this.$label.detach();this.$input.css(newCss);return;}var after=this.labelPosition==='after',rtl=this.$element.css('direction')==='rtl',property=after===rtl?'padding-left':'padding-right';newCss[property]=this.$label.outerWidth(true)+(after?this.scrollWidth:0);this.$input.css(newCss);return this;};OO.ui.SearchInputWidget=function OoUiSearchInputWidget(config){config=$.extend({icon:'search'},config);OO.ui.SearchInputWidget.super.call(this,config);this.connect(this,{change:'onChange'});this.$indicator.on('click',this.onIndicatorClick.bind(this));this.$indicator.on('keydown',this.onIndicatorKeyDown.bind(this));this.updateSearchIndicator();this.connect(this,{disable:'onDisable'});this.$indicator.attr({tabindex:-1,role:'button'});};OO.inheritClass(OO.ui.SearchInputWidget,OO.
ui.TextInputWidget);OO.ui.SearchInputWidget.prototype.getSaneType=function(){return'search';};OO.ui.SearchInputWidget.prototype.onIndicatorKeyDown=function(e){if(e.keyCode===OO.ui.Keys.ENTER){this.setValue('');this.focus();return false;}};OO.ui.SearchInputWidget.prototype.onIndicatorClick=function(e){if(e.which===OO.ui.MouseButtons.LEFT){this.setValue('');this.focus();return false;}};OO.ui.SearchInputWidget.prototype.updateSearchIndicator=function(){if(this.getValue()===''||this.isDisabled()||this.isReadOnly()){this.setIndicator(null);}else{this.setIndicator('clear');this.$indicator.attr('aria-label',OO.ui.msg('ooui-item-remove'));}};OO.ui.SearchInputWidget.prototype.onChange=function(){this.updateSearchIndicator();};OO.ui.SearchInputWidget.prototype.onDisable=function(){this.updateSearchIndicator();};OO.ui.SearchInputWidget.prototype.setReadOnly=function(state){OO.ui.SearchInputWidget.super.prototype.setReadOnly.call(this,state);this.updateSearchIndicator();return this;};OO.ui.
MultilineTextInputWidget=function OoUiMultilineTextInputWidget(config){config=$.extend({type:'text'},config);OO.ui.MultilineTextInputWidget.super.call(this,config);this.autosize=!!config.autosize;this.styleHeight=null;this.minRows=config.rows!==undefined?config.rows:'';this.maxRows=config.maxRows||Math.max(2*(this.minRows||0),10);if(this.autosize){this.$clone=this.$input.clone().removeAttr('id').removeAttr('name').insertAfter(this.$input).attr('aria-hidden','true').css('overflow','hidden').addClass('oo-ui-element-hidden');}this.connect(this,{change:'onChange'});if(config.rows){this.$input.attr('rows',config.rows);}if(this.autosize){this.$input.addClass('oo-ui-textInputWidget-autosized');this.isWaitingToBeAttached=true;this.installParentChangeDetector();}};OO.inheritClass(OO.ui.MultilineTextInputWidget,OO.ui.TextInputWidget);OO.ui.MultilineTextInputWidget.static.gatherPreInfuseState=function(node,config){var state=OO.ui.MultilineTextInputWidget.super.static.gatherPreInfuseState(node,
config);if(config.$input){state.scrollTop=config.$input.scrollTop();}return state;};OO.ui.MultilineTextInputWidget.prototype.onElementAttach=function(){OO.ui.MultilineTextInputWidget.super.prototype.onElementAttach.call(this);this.adjustSize();};OO.ui.MultilineTextInputWidget.prototype.onChange=function(){this.adjustSize();};OO.ui.MultilineTextInputWidget.prototype.updatePosition=function(){OO.ui.MultilineTextInputWidget.super.prototype.updatePosition.call(this);this.adjustSize();};OO.ui.MultilineTextInputWidget.prototype.onKeyPress=function(e){if((e.which===OO.ui.Keys.ENTER&&(e.ctrlKey||e.metaKey))||e.which===10){this.emit('enter',e);}};OO.ui.MultilineTextInputWidget.prototype.adjustSize=function(force){if(force||this.$input.val()!==this.valCache){if(this.autosize){this.$clone.val(this.$input.val()).attr('rows',this.minRows).css('height',0);this.$clone.removeClass('oo-ui-element-hidden');this.valCache=this.$input.val();var scrollHeight=this.$clone[0].scrollHeight;this.$clone.css(
'height','');var innerHeight=this.$clone.innerHeight();var outerHeight=this.$clone.outerHeight();this.$clone.attr('rows',this.maxRows).css('height','auto').val('');var maxInnerHeight=this.$clone.innerHeight();var measurementError=maxInnerHeight-this.$clone[0].scrollHeight;var idealHeight=Math.min(maxInnerHeight,scrollHeight+measurementError);this.$clone.addClass('oo-ui-element-hidden');var newHeight=idealHeight>innerHeight?idealHeight+(outerHeight-innerHeight):'';if(newHeight!==this.styleHeight){this.$input.css('height',newHeight);this.styleHeight=newHeight;this.emit('resize');}}var scrollWidth=this.$input[0].offsetWidth-this.$input[0].clientWidth;if(scrollWidth!==this.scrollWidth){var property=this.$element.css('direction')==='rtl'?'left':'right';this.$label.css({right:'',left:''});this.$indicator.css({right:'',left:''});if(scrollWidth){this.$indicator.css(property,scrollWidth);if(this.labelPosition==='after'){this.$label.css(property,scrollWidth);}}this.scrollWidth=scrollWidth;this.
positionLabel();}}return this;};OO.ui.MultilineTextInputWidget.prototype.getInputElement=function(){return $('<textarea>');};OO.ui.MultilineTextInputWidget.prototype.isAutosizing=function(){return!!this.autosize;};OO.ui.MultilineTextInputWidget.prototype.restorePreInfuseState=function(state){OO.ui.MultilineTextInputWidget.super.prototype.restorePreInfuseState.call(this,state);if(state.scrollTop!==undefined){this.$input.scrollTop(state.scrollTop);}};OO.ui.ComboBoxInputWidget=function OoUiComboBoxInputWidget(config){config=$.extend({autocomplete:false},config);config.multiline=false;if(config.$input){config.$input.removeAttr('list');}OO.ui.ComboBoxInputWidget.super.call(this,config);this.$overlay=(config.$overlay===true?OO.ui.getDefaultOverlay():config.$overlay)||this.$element;this.dropdownButton=new OO.ui.ButtonWidget({classes:['oo-ui-comboBoxInputWidget-dropdownButton'],label:OO.ui.msg('ooui-combobox-button-label'),indicator:'down',invisibleLabel:true,disabled:this.disabled});this.menu
=new OO.ui.MenuSelectWidget($.extend({widget:this,input:this,$floatableContainer:this.$element,disabled:this.isDisabled()},config.menu));this.connect(this,{change:'onInputChange',enter:'onInputEnter'});this.dropdownButton.connect(this,{click:'onDropdownButtonClick'});this.menu.connect(this,{choose:'onMenuChoose',add:'onMenuItemsChange',remove:'onMenuItemsChange',toggle:'onMenuToggle'});this.$input.attr({role:'combobox','aria-owns':this.menu.getElementId(),'aria-autocomplete':'list'});this.dropdownButton.$button.attr({'aria-controls':this.menu.getElementId()});if(config.options!==undefined){this.setOptions(config.options);}this.$field=$('<div>').addClass('oo-ui-comboBoxInputWidget-field').append(this.$input,this.dropdownButton.$element);this.$element.addClass('oo-ui-comboBoxInputWidget').append(this.$field);this.$overlay.append(this.menu.$element);this.onMenuItemsChange();};OO.inheritClass(OO.ui.ComboBoxInputWidget,OO.ui.TextInputWidget);OO.ui.ComboBoxInputWidget.prototype.getMenu=
function(){return this.menu;};OO.ui.ComboBoxInputWidget.prototype.getInput=function(){return this;};OO.ui.ComboBoxInputWidget.prototype.onEdit=function(event){OO.ui.ComboBoxInputWidget.super.prototype.onEdit.apply(this,arguments);if(this.menu.isVisible()||this.isDisabled()||!this.isVisible()){return;}if(event.type==='input'||event.type==='mouseup'||(event.type==='keydown'&&(event.keyCode===OO.ui.Keys.ENTER||event.keyCode===OO.ui.Keys.UP||event.keyCode===OO.ui.Keys.DOWN))){this.menu.toggle(true);}};OO.ui.ComboBoxInputWidget.prototype.onInputChange=function(value){var match=this.menu.findItemFromData(value);this.menu.selectItem(match);if(this.menu.findHighlightedItem()){this.menu.highlightItem(match);}};OO.ui.ComboBoxInputWidget.prototype.onInputEnter=function(){if(!this.isDisabled()){this.menu.toggle(false);}};OO.ui.ComboBoxInputWidget.prototype.onDropdownButtonClick=function(){this.menu.toggle();this.focus();};OO.ui.ComboBoxInputWidget.prototype.onMenuChoose=function(item){this.
setValue(item.getData());};OO.ui.ComboBoxInputWidget.prototype.onMenuItemsChange=function(){var match=this.menu.findItemFromData(this.getValue());this.menu.selectItem(match);if(this.menu.findHighlightedItem()){this.menu.highlightItem(match);}this.$element.toggleClass('oo-ui-comboBoxInputWidget-empty',this.menu.isEmpty());};OO.ui.ComboBoxInputWidget.prototype.onMenuToggle=function(isVisible){this.$element.toggleClass('oo-ui-comboBoxInputWidget-open',isVisible);};OO.ui.ComboBoxInputWidget.prototype.updateControlsDisabled=function(){var disabled=this.isDisabled()||this.isReadOnly();if(this.dropdownButton){this.dropdownButton.setDisabled(disabled);}if(this.menu){this.menu.setDisabled(disabled);}return this;};OO.ui.ComboBoxInputWidget.prototype.setDisabled=function(){OO.ui.ComboBoxInputWidget.super.prototype.setDisabled.apply(this,arguments);this.updateControlsDisabled();return this;};OO.ui.ComboBoxInputWidget.prototype.setReadOnly=function(){OO.ui.ComboBoxInputWidget.super.prototype.
setReadOnly.apply(this,arguments);this.updateControlsDisabled();return this;};OO.ui.ComboBoxInputWidget.prototype.setOptions=function(options){this.getMenu().clearItems().addItems(options.map(function(opt){return new OO.ui.MenuOptionWidget({data:opt.data,label:opt.label!==undefined?opt.label:opt.data});}));return this;};OO.ui.FieldLayout=function OoUiFieldLayout(fieldWidget,config){if(OO.isPlainObject(fieldWidget)&&config===undefined){config=fieldWidget;fieldWidget=config.fieldWidget;}if(fieldWidget===undefined){throw new Error('Widget not found');}config=$.extend({align:'left',helpInline:false},config);if(config.help&&!config.label){config.label=' ';}OO.ui.FieldLayout.super.call(this,config);OO.ui.mixin.LabelElement.call(this,$.extend({$label:$('<label>')},config));OO.ui.mixin.TitledElement.call(this,$.extend({$titled:this.$label},config));this.fieldWidget=fieldWidget;this.errors=[];this.warnings=[];this.successMessages=[];this.notices=[];this.$field=this.isFieldInline()?$('<span>'):$
('<div>');this.$messages=$('<div>');this.$header=$('<span>');this.$body=$('<div>');this.align=null;this.helpInline=config.helpInline;this.fieldWidget.connect(this,{disable:'onFieldDisable'});this.$help=config.help?this.createHelpElement(config.help,config.$overlay):$([]);if(this.fieldWidget.getInputId()){this.$label.attr('for',this.fieldWidget.getInputId());if(this.helpInline){this.$help.attr('for',this.fieldWidget.getInputId());}}else{var id=OO.ui.generateElementId();this.$label.attr('id',id);this.fieldWidget.setLabelledBy(id);this.$label.on('click',this.onLabelClick.bind(this));if(this.helpInline){this.$help.on('click',this.onLabelClick.bind(this));}}this.$element.addClass('oo-ui-fieldLayout').toggleClass('oo-ui-fieldLayout-disabled',this.fieldWidget.isDisabled()).append(this.$body);this.$body.addClass('oo-ui-fieldLayout-body');this.$header.addClass('oo-ui-fieldLayout-header');this.$messages.addClass('oo-ui-fieldLayout-messages');this.$field.addClass('oo-ui-fieldLayout-field').append
(this.fieldWidget.$element);this.setErrors(config.errors||[]);this.setWarnings(config.warnings||[]);this.setSuccess(config.successMessages||[]);this.setNotices(config.notices||[]);this.setAlignment(config.align);this.updateTitle();};OO.inheritClass(OO.ui.FieldLayout,OO.ui.Layout);OO.mixinClass(OO.ui.FieldLayout,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.FieldLayout,OO.ui.mixin.TitledElement);OO.ui.FieldLayout.prototype.onFieldDisable=function(value){this.$element.toggleClass('oo-ui-fieldLayout-disabled',value);};OO.ui.FieldLayout.prototype.onLabelClick=function(){this.fieldWidget.simulateLabelClick();};OO.ui.FieldLayout.prototype.getField=function(){return this.fieldWidget;};OO.ui.FieldLayout.prototype.isFieldInline=function(){return this.getField().$element.prop('tagName').toLowerCase()==='span';};OO.ui.FieldLayout.prototype.makeMessage=function(kind,text){return new OO.ui.MessageWidget({type:kind,inline:true,label:text}).$element;};OO.ui.FieldLayout.prototype.setAlignment=function
(value){if(value!==this.align){if(['left','right','top','inline'].indexOf(value)===-1){value='left';}if(value==='inline'&&!this.isFieldInline()){value='top';}if(this.helpInline){if(value==='top'){this.$header.append(this.$label);this.$body.append(this.$header,this.$field,this.$help);}else if(value==='inline'){this.$header.append(this.$label,this.$help);this.$body.append(this.$field,this.$header);}else{this.$header.append(this.$label,this.$help);this.$body.append(this.$header,this.$field);}}else{if(value==='top'){this.$header.append(this.$help,this.$label);this.$body.append(this.$header,this.$field);}else if(value==='inline'){this.$header.append(this.$help,this.$label);this.$body.append(this.$field,this.$header);}else{this.$header.append(this.$label);this.$body.append(this.$header,this.$help,this.$field);}}if(this.align){this.$element.removeClass('oo-ui-fieldLayout-align-'+this.align);}this.$element.addClass('oo-ui-fieldLayout-align-'+value);this.align=value;}return this;};OO.ui.
FieldLayout.prototype.setErrors=function(errors){this.errors=errors.slice();this.updateMessages();return this;};OO.ui.FieldLayout.prototype.setWarnings=function(warnings){this.warnings=warnings.slice();this.updateMessages();return this;};OO.ui.FieldLayout.prototype.setSuccess=function(successMessages){this.successMessages=successMessages.slice();this.updateMessages();return this;};OO.ui.FieldLayout.prototype.setNotices=function(notices){this.notices=notices.slice();this.updateMessages();return this;};OO.ui.FieldLayout.prototype.updateMessages=function(){this.$messages.empty();if(this.errors.length||this.warnings.length||this.successMessages.length||this.notices.length){this.$body.after(this.$messages);}else{this.$messages.remove();return;}var i;for(i=0;i<this.errors.length;i++){this.$messages.append(this.makeMessage('error',this.errors[i]));}for(i=0;i<this.warnings.length;i++){this.$messages.append(this.makeMessage('warning',this.warnings[i]));}for(i=0;i<this.successMessages.length;i++
){this.$messages.append(this.makeMessage('success',this.successMessages[i]));}for(i=0;i<this.notices.length;i++){this.$messages.append(this.makeMessage('notice',this.notices[i]));}};OO.ui.FieldLayout.prototype.formatTitleWithAccessKey=function(title){if(this.fieldWidget&&this.fieldWidget.formatTitleWithAccessKey){return this.fieldWidget.formatTitleWithAccessKey(title);}return title;};OO.ui.FieldLayout.prototype.createHelpElement=function(help,$overlay){var helpId,helpWidget;if(this.helpInline){helpWidget=new OO.ui.LabelWidget({label:help,classes:['oo-ui-inline-help']});helpId=helpWidget.getElementId();}else{helpWidget=new OO.ui.PopupButtonWidget({$overlay:$overlay,popup:{padded:true},classes:['oo-ui-fieldLayout-help'],framed:false,icon:'info',label:OO.ui.msg('ooui-field-help'),invisibleLabel:true});helpWidget.popup.on('ready',function(){var $popupElement=helpWidget.popup.$element;$popupElement.attr('tabindex',0);$popupElement.trigger('focus');});helpWidget.popup.on('closing',function()
{helpWidget.$button.trigger('focus');});if(help instanceof OO.ui.HtmlSnippet){helpWidget.getPopup().$body.html(help.toString());}else{helpWidget.getPopup().$body.text(help);}helpId=helpWidget.getPopup().getBodyId();}(this.fieldWidget.$input||this.fieldWidget.$button||this.fieldWidget.$element).attr('aria-describedby',helpId);return helpWidget.$element;};OO.ui.ActionFieldLayout=function OoUiActionFieldLayout(fieldWidget,buttonWidget,config){if(OO.isPlainObject(fieldWidget)&&config===undefined){config=fieldWidget;fieldWidget=config.fieldWidget;buttonWidget=config.buttonWidget;}OO.ui.ActionFieldLayout.super.call(this,fieldWidget,config);this.buttonWidget=buttonWidget;this.$button=$('<span>');this.$input=this.isFieldInline()?$('<span>'):$('<div>');this.$element.addClass('oo-ui-actionFieldLayout');this.$button.addClass('oo-ui-actionFieldLayout-button').append(this.buttonWidget.$element);this.$input.addClass('oo-ui-actionFieldLayout-input').append(this.fieldWidget.$element);this.$field.
append(this.$input,this.$button);};OO.inheritClass(OO.ui.ActionFieldLayout,OO.ui.FieldLayout);OO.ui.FieldsetLayout=function OoUiFieldsetLayout(config){config=config||{};OO.ui.FieldsetLayout.super.call(this,config);OO.ui.mixin.IconElement.call(this,config);OO.ui.mixin.LabelElement.call(this,config);OO.ui.mixin.GroupElement.call(this,config);this.$header=$('<legend>');this.$header.addClass('oo-ui-fieldsetLayout-header').append(this.$icon,this.$label);this.$group.addClass('oo-ui-fieldsetLayout-group');this.$element.addClass('oo-ui-fieldsetLayout').prepend(this.$header,this.$group);if(config.help){if(config.helpInline){var inlineHelpWidget=new OO.ui.LabelWidget({label:config.help,classes:['oo-ui-inline-help']});this.$element.prepend(this.$header,inlineHelpWidget.$element,this.$group);}else{var helpWidget=new OO.ui.PopupButtonWidget({$overlay:config.$overlay,popup:{padded:true},classes:['oo-ui-fieldsetLayout-help'],framed:false,icon:'info',label:OO.ui.msg('ooui-field-help'),invisibleLabel:
true});if(config.help instanceof OO.ui.HtmlSnippet){helpWidget.getPopup().$body.html(config.help.toString());}else{helpWidget.getPopup().$body.text(config.help);}this.$header.append(helpWidget.$element);}}this.addItems(config.items||[]);};OO.inheritClass(OO.ui.FieldsetLayout,OO.ui.Layout);OO.mixinClass(OO.ui.FieldsetLayout,OO.ui.mixin.IconElement);OO.mixinClass(OO.ui.FieldsetLayout,OO.ui.mixin.LabelElement);OO.mixinClass(OO.ui.FieldsetLayout,OO.ui.mixin.GroupElement);OO.ui.FieldsetLayout.static.tagName='fieldset';OO.ui.FormLayout=function OoUiFormLayout(config){config=config||{};OO.ui.FormLayout.super.call(this,config);OO.ui.mixin.GroupElement.call(this,$.extend({$group:this.$element},config));this.$element.on('submit',this.onFormSubmit.bind(this));var action=config.action;if(action!==undefined&&!OO.ui.isSafeUrl(action)){action='./'+action;}this.$element.addClass('oo-ui-formLayout').attr({method:config.method,action:action,enctype:config.enctype});this.addItems(config.items||[]);};OO.
inheritClass(OO.ui.FormLayout,OO.ui.Layout);OO.mixinClass(OO.ui.FormLayout,OO.ui.mixin.GroupElement);OO.ui.FormLayout.static.tagName='form';OO.ui.FormLayout.prototype.onFormSubmit=function(){if(this.emit('submit')){return false;}};OO.ui.PanelLayout=function OoUiPanelLayout(config){config=$.extend({scrollable:false,padded:false,expanded:true,framed:false},config);OO.ui.PanelLayout.super.call(this,config);this.$element.addClass('oo-ui-panelLayout');if(config.scrollable){this.$element.addClass('oo-ui-panelLayout-scrollable');}if(config.padded){this.$element.addClass('oo-ui-panelLayout-padded');}if(config.expanded){this.$element.addClass('oo-ui-panelLayout-expanded');}if(config.framed){this.$element.addClass('oo-ui-panelLayout-framed');}};OO.inheritClass(OO.ui.PanelLayout,OO.ui.Layout);OO.ui.PanelLayout.static.reusePreInfuseDOM=function(node,config){config=OO.ui.PanelLayout.super.static.reusePreInfuseDOM(node,config);if(config.preserveContent!==false){config.$content=$(node).contents();}
return config;};OO.ui.PanelLayout.prototype.focus=function(){OO.ui.findFocusable(this.$element).focus();};OO.ui.HorizontalLayout=function OoUiHorizontalLayout(config){config=config||{};OO.ui.HorizontalLayout.super.call(this,config);OO.ui.mixin.GroupElement.call(this,$.extend({$group:this.$element},config));this.$element.addClass('oo-ui-horizontalLayout');this.addItems(config.items||[]);};OO.inheritClass(OO.ui.HorizontalLayout,OO.ui.Layout);OO.mixinClass(OO.ui.HorizontalLayout,OO.ui.mixin.GroupElement);OO.ui.NumberInputWidget=function OoUiNumberInputWidget(config){var $field=$('<div>').addClass('oo-ui-numberInputWidget-field');config=$.extend({min:-Infinity,max:Infinity,showButtons:true},config);$.extend(config,config.input);this.input=this;OO.ui.NumberInputWidget.super.call(this,$.extend(config,{type:'number'}));if(config.showButtons){this.minusButton=new OO.ui.ButtonWidget($.extend({disabled:this.isDisabled(),tabIndex:-1,classes:['oo-ui-numberInputWidget-minusButton'],icon:'subtract'}
,config.minusButton));this.minusButton.$element.attr('aria-hidden','true');this.plusButton=new OO.ui.ButtonWidget($.extend({disabled:this.isDisabled(),tabIndex:-1,classes:['oo-ui-numberInputWidget-plusButton'],icon:'add'},config.plusButton));this.plusButton.$element.attr('aria-hidden','true');}this.$input.on({keydown:this.onKeyDown.bind(this),'wheel mousewheel DOMMouseScroll':this.onWheel.bind(this)});if(config.showButtons){this.plusButton.connect(this,{click:['onButtonClick',+1]});this.minusButton.connect(this,{click:['onButtonClick',-1]});}$field.append(this.$input);if(config.showButtons){$field.prepend(this.minusButton.$element).append(this.plusButton.$element);}if(config.allowInteger||config.isInteger){config.step=1;}this.setRange(config.min,config.max);this.setStep(config.buttonStep,config.pageStep,config.step);this.setValidation(this.validateNumber.bind(this));this.$element.addClass('oo-ui-numberInputWidget').toggleClass('oo-ui-numberInputWidget-buttoned',config.showButtons).
append($field);};OO.inheritClass(OO.ui.NumberInputWidget,OO.ui.TextInputWidget);OO.ui.NumberInputWidget.prototype.setAllowInteger=function(flag){this.setStep(flag?1:null);};OO.ui.NumberInputWidget.prototype.setIsInteger=OO.ui.NumberInputWidget.prototype.setAllowInteger;OO.ui.NumberInputWidget.prototype.getAllowInteger=function(){return this.step===1;};OO.ui.NumberInputWidget.prototype.getIsInteger=OO.ui.NumberInputWidget.prototype.getAllowInteger;OO.ui.NumberInputWidget.prototype.setRange=function(min,max){if(min>max){throw new Error('Minimum ('+min+') must not be greater than maximum ('+max+')');}this.min=min;this.max=max;this.$input.attr({min:this.min,max:this.max});this.setValidityFlag();};OO.ui.NumberInputWidget.prototype.getRange=function(){return[this.min,this.max];};OO.ui.NumberInputWidget.prototype.setStep=function(buttonStep,pageStep,step){if(buttonStep===undefined){buttonStep=step||1;}if(pageStep===undefined){pageStep=10*buttonStep;}if(step!==null&&step<=0){throw new Error(
'Step value, if given, must be positive');}if(buttonStep<=0){throw new Error('Button step value must be positive');}if(pageStep<=0){throw new Error('Page step value must be positive');}this.step=step;this.buttonStep=buttonStep;this.pageStep=pageStep;this.$input.attr('step',this.step||'any');this.setValidityFlag();};OO.ui.NumberInputWidget.prototype.setValue=function(value){if(value===''){this.$input.val('');}return OO.ui.NumberInputWidget.super.prototype.setValue.call(this,value);};OO.ui.NumberInputWidget.prototype.getStep=function(){return[this.buttonStep,this.pageStep,this.step];};OO.ui.NumberInputWidget.prototype.getNumericValue=function(){return+this.getValue();};OO.ui.NumberInputWidget.prototype.adjustValue=function(delta){var v=this.getNumericValue();delta=+delta;if(isNaN(delta)||!isFinite(delta)){throw new Error('Delta must be a finite number');}var n;if(isNaN(v)){n=0;}else{n=v+delta;n=Math.max(Math.min(n,this.max),this.min);if(this.step){n=Math.round(n/this.step)*this.step;}}if
(n!==v){this.setValue(n);}};OO.ui.NumberInputWidget.prototype.validateNumber=function(value){var n=+value;if(value===''){return!this.isRequired();}if(isNaN(n)||!isFinite(n)){return false;}if(this.step&&Math.floor(n/this.step)!==n/this.step){return false;}if(n<this.min||n>this.max){return false;}return true;};OO.ui.NumberInputWidget.prototype.onButtonClick=function(dir){this.adjustValue(dir*this.buttonStep);};OO.ui.NumberInputWidget.prototype.onWheel=function(event){var delta=0;if(this.isDisabled()||this.isReadOnly()){return;}if(this.$input.is(':focus')){if(event.originalEvent.deltaMode!==undefined){this.sawWheelEvent=true;}if(event.originalEvent.deltaY){delta=-event.originalEvent.deltaY;}else if(event.originalEvent.deltaX){delta=event.originalEvent.deltaX;}if(!this.sawWheelEvent){if(event.originalEvent.wheelDeltaX){delta=-event.originalEvent.wheelDeltaX;}else if(event.originalEvent.wheelDeltaY){delta=event.originalEvent.wheelDeltaY;}else if(event.originalEvent.wheelDelta){delta=event.
originalEvent.wheelDelta;}else if(event.originalEvent.detail){delta=-event.originalEvent.detail;}}if(delta){delta=delta<0?-1:1;this.adjustValue(delta*this.buttonStep);}return false;}};OO.ui.NumberInputWidget.prototype.onKeyDown=function(e){if(this.isDisabled()||this.isReadOnly()){return;}switch(e.which){case OO.ui.Keys.UP:this.adjustValue(this.buttonStep);return false;case OO.ui.Keys.DOWN:this.adjustValue(-this.buttonStep);return false;case OO.ui.Keys.PAGEUP:this.adjustValue(this.pageStep);return false;case OO.ui.Keys.PAGEDOWN:this.adjustValue(-this.pageStep);return false;}};OO.ui.NumberInputWidget.prototype.updateControlsDisabled=function(){var disabled=this.isDisabled()||this.isReadOnly();if(this.minusButton){this.minusButton.setDisabled(disabled);}if(this.plusButton){this.plusButton.setDisabled(disabled);}return this;};OO.ui.NumberInputWidget.prototype.setDisabled=function(disabled){OO.ui.NumberInputWidget.super.prototype.setDisabled.call(this,disabled);this.updateControlsDisabled()
;return this;};OO.ui.NumberInputWidget.prototype.setReadOnly=function(){OO.ui.NumberInputWidget.super.prototype.setReadOnly.apply(this,arguments);this.updateControlsDisabled();return this;};OO.ui.SelectFileInputWidget=function OoUiSelectFileInputWidget(config){var widget=this;config=config||{};this.selectButton=new OO.ui.ButtonWidget($.extend({$element:$('<label>'),classes:['oo-ui-selectFileInputWidget-selectButton'],label:OO.ui.msg(config.multiple?'ooui-selectfile-button-select-multiple':'ooui-selectfile-button-select')},config.button));config=$.extend({accept:null,placeholder:OO.ui.msg('ooui-selectfile-placeholder'),$tabIndexed:this.selectButton.$tabIndexed},config);this.info=new OO.ui.SearchInputWidget({classes:['oo-ui-selectFileInputWidget-info'],placeholder:config.placeholder,$tabIndexed:$([])}).setIcon(config.icon);this.info.$input.attr('tabindex',-1);this.info.$indicator.attr('tabindex',0);OO.ui.SelectFileInputWidget.super.call(this,config);OO.ui.mixin.RequiredElement.call(this,
$.extend({},{indicatorElement:null},config));this.currentFiles=this.filterFiles(this.$input[0].files||[]);if(Array.isArray(config.accept)){this.accept=config.accept;}else{this.accept=null;}this.multiple=!!config.multiple;this.info.connect(this,{change:'onInfoChange'});this.selectButton.$button.on({keypress:this.onKeyPress.bind(this)});this.$input.on({change:this.onFileSelected.bind(this),focus:function(){widget.$input.parent().prop('scrollTop',0);}});this.connect(this,{change:'updateUI'});this.fieldLayout=new OO.ui.ActionFieldLayout(this.info,this.selectButton,{align:'top'});this.$input.attr({type:'file',tabindex:-1,'aria-disabled':null});if(this.accept){this.$input.attr('accept',this.accept.join(', '));}if(this.multiple){this.$input.attr('multiple','');}this.selectButton.$button.append(this.$input);this.$element.addClass('oo-ui-selectFileInputWidget').append(this.fieldLayout.$element);this.updateUI();};OO.inheritClass(OO.ui.SelectFileInputWidget,OO.ui.InputWidget);OO.mixinClass(OO.ui.
SelectFileInputWidget,OO.ui.mixin.RequiredElement);OO.ui.SelectFileInputWidget.static.title='';OO.ui.SelectFileInputWidget.prototype.getFilename=function(){if(this.currentFiles.length){return this.currentFiles.map(function(file){return file.name;}).join(', ');}else{return this.getValue().split('\\').pop();}};OO.ui.SelectFileInputWidget.prototype.setValue=function(value){if(value===undefined){return this;}if(value){if(this.value!==value){this.value=value;this.emit('change',this.value);}return this;}else{this.currentFiles=[];return OO.ui.SelectFileInputWidget.super.prototype.setValue.call(this,'');}};OO.ui.SelectFileInputWidget.prototype.onFileSelected=function(e){this.currentFiles=this.filterFiles(e.target.files||[]);};OO.ui.SelectFileInputWidget.prototype.updateUI=function(){this.info.setValue(this.getFilename());};OO.ui.SelectFileInputWidget.prototype.filterFiles=function(files){var accept=this.accept;function mimeAllowed(file){var mimeType=file.type;if(!accept||!mimeType){return true
;}for(var i=0;i<accept.length;i++){var mimeTest=accept[i];if(mimeTest===mimeType){return true;}else if(mimeTest.slice(-2)==='/*'){mimeTest=mimeTest.slice(0,mimeTest.length-1);if(mimeType.slice(0,mimeTest.length)===mimeTest){return true;}}}return false;}return Array.prototype.filter.call(files,mimeAllowed);};OO.ui.SelectFileInputWidget.prototype.onInfoChange=function(value){if(value===''){this.setValue(null);}};OO.ui.SelectFileInputWidget.prototype.onKeyPress=function(e){if(!this.isDisabled()&&this.$input&&(e.which===OO.ui.Keys.SPACE||e.which===OO.ui.Keys.ENTER)){this.$input.trigger('click');this.selectButton.onDocumentKeyUp(e);return false;}};OO.ui.SelectFileInputWidget.prototype.setDisabled=function(disabled){OO.ui.SelectFileInputWidget.super.prototype.setDisabled.call(this,disabled);this.selectButton.setDisabled(disabled);this.info.setDisabled(disabled);return this;};}(OO));(function(){var isMobile;OO.ui.getUserLanguages=mw.language.getFallbackLanguageChain;OO.ui.msg=mw.msg;OO.ui.
warnDeprecation=function(message){mw.track('mw.deprecate','oojs-ui');mw.log.warn(message);};OO.ui.isMobile=function(){if(isMobile===undefined){isMobile=!!mw.config.get('wgMFMode');}return isMobile;};}());(function(OO){'use strict';OO.ui.WikimediaUITheme=function OoUiWikimediaUITheme(){OO.ui.WikimediaUITheme.super.call(this);};OO.inheritClass(OO.ui.WikimediaUITheme,OO.ui.Theme);OO.ui.WikimediaUITheme.prototype.getElementClasses=function(element){var variants={invert:false,progressive:false,destructive:false,error:false,warning:false,success:false},classes=OO.ui.WikimediaUITheme.super.prototype.getElementClasses.call(this,element);if(element instanceof OO.ui.IconWidget&&element.$element.hasClass('oo-ui-checkboxInputWidget-checkIcon')){variants.invert=true;}else if(element.supports('hasFlag')){var isFramed=element.supports('isFramed')&&element.isFramed();var isActive=element.supports('isActive')&&element.isActive();var isToolOrGroup=(OO.ui.Tool&&element instanceof OO.ui.Tool)||(OO.ui.
ToolGroup&&element instanceof OO.ui.ToolGroup);if(isFramed&&(isActive||element.isDisabled()||element.hasFlag('primary'))||isToolOrGroup&&element.hasFlag('primary')){variants.invert=true;}else if(!isFramed&&element.isDisabled()&&!element.hasFlag('invert')){variants.invert=false;}else if(!element.isDisabled()){variants.progressive=element.hasFlag('progressive')||(isToolOrGroup&&isActive)||((element instanceof OO.ui.MenuOptionWidget||(OO.ui.OutlineOptionWidget&&element instanceof OO.ui.OutlineOptionWidget))&&(element.isPressed()||element.isSelected()));variants.destructive=element.hasFlag('destructive');variants.invert=element.hasFlag('invert');variants.error=element.hasFlag('error');variants.warning=element.hasFlag('warning');variants.success=element.hasFlag('success');}}for(var variant in variants){classes[variants[variant]?'on':'off'].push('oo-ui-image-'+variant);}return classes;};OO.ui.WikimediaUITheme.prototype.getDialogTransitionDuration=function(){return 250;};OO.ui.theme=new OO.ui
.WikimediaUITheme();}(OO));},{},{"ooui-combobox-button-label":"Optionen umschalten","ooui-field-help":"Hilfe","ooui-popup-widget-close-button-aria-label":"Schließen","ooui-selectfile-button-select":"Eine Datei auswählen","ooui-selectfile-button-select-multiple":"Datei(en) auswählen","ooui-selectfile-dragdrop-placeholder":"Dateien hier ablegen","ooui-selectfile-dragdrop-placeholder-multiple":"Datei(en) hier ablegen","ooui-selectfile-not-supported":"Die Dateiauswahl wird nicht unterstützt","ooui-selectfile-placeholder":"Keine Datei ausgewählt"});

File Metadata

Mime Type
text/plain
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14362288
Default Alt Text
minified.js (853 KB)

Event Timeline