bdsa-react-components 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,17 +1,17 @@
1
- "use strict";var $i=Object.defineProperty;var en=($e,Pe,n)=>Pe in $e?$i($e,Pe,{enumerable:!0,configurable:!0,writable:!0,value:n}):$e[Pe]=n;var Gi=($e,Pe,n)=>en($e,typeof Pe!="symbol"?Pe+"":Pe,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ct=require("react/jsx-runtime"),pt=require("react"),qi=pt.forwardRef(({variant:$e="primary",size:Pe="medium",fullWidth:n=!1,loading:o=!1,className:d="",children:c,disabled:v,...y},a)=>{const w=["bdsa-button",`bdsa-button--${$e}`,`bdsa-button--${Pe}`,n?"bdsa-button--full-width":"",o?"bdsa-button--loading":"",d].filter(Boolean).join(" ");return ct.jsx("button",{ref:a,className:w,disabled:v||o,...y,children:o?ct.jsxs(ct.Fragment,{children:[ct.jsx("span",{className:"bdsa-button__spinner"}),ct.jsx("span",{className:"bdsa-button__text",children:c})]}):c})});qi.displayName="Button";const Zi=pt.forwardRef(({header:$e,footer:Pe,children:n,shadow:o="small",bordered:d=!0,hoverable:c=!1,padding:v="medium",className:y="",...a},w)=>{const _=["bdsa-card",`bdsa-card--shadow-${o}`,d?"bdsa-card--bordered":"",c?"bdsa-card--hoverable":"",y].filter(Boolean).join(" "),T=["bdsa-card__content",`bdsa-card__content--padding-${v}`].join(" ");return ct.jsxs("div",{ref:w,className:_,...a,children:[$e&&ct.jsx("div",{className:"bdsa-card__header",children:$e}),ct.jsx("div",{className:T,children:n}),Pe&&ct.jsx("div",{className:"bdsa-card__footer",children:Pe})]})});Zi.displayName="Card";var tn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function nn($e){return $e&&$e.__esModule&&Object.prototype.hasOwnProperty.call($e,"default")?$e.default:$e}var Ui={exports:{}},Vi;function Yi(){return Vi||(Vi=1,function($e){//! openseadragon 5.0.1
1
+ "use strict";var rn=Object.defineProperty;var sn=(Le,ae,n)=>ae in Le?rn(Le,ae,{enumerable:!0,configurable:!0,writable:!0,value:n}):Le[ae]=n;var Ri=(Le,ae,n)=>sn(Le,typeof ae!="symbol"?ae+"":ae,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Be=require("react/jsx-runtime"),at=require("react"),Ji=at.forwardRef(({variant:Le="primary",size:ae="medium",fullWidth:n=!1,loading:o=!1,className:u="",children:h,disabled:m,...y},a)=>{const w=["bdsa-button",`bdsa-button--${Le}`,`bdsa-button--${ae}`,n?"bdsa-button--full-width":"",o?"bdsa-button--loading":"",u].filter(Boolean).join(" ");return Be.jsx("button",{ref:a,className:w,disabled:m||o,...y,children:o?Be.jsxs(Be.Fragment,{children:[Be.jsx("span",{className:"bdsa-button__spinner"}),Be.jsx("span",{className:"bdsa-button__text",children:h})]}):h})});Ji.displayName="Button";const Xi=at.forwardRef(({header:Le,footer:ae,children:n,shadow:o="small",bordered:u=!0,hoverable:h=!1,padding:m="medium",className:y="",...a},w)=>{const _=["bdsa-card",`bdsa-card--shadow-${o}`,u?"bdsa-card--bordered":"",h?"bdsa-card--hoverable":"",y].filter(Boolean).join(" "),A=["bdsa-card__content",`bdsa-card__content--padding-${m}`].join(" ");return Be.jsxs("div",{ref:w,className:_,...a,children:[Le&&Be.jsx("div",{className:"bdsa-card__header",children:Le}),Be.jsx("div",{className:A,children:n}),ae&&Be.jsx("div",{className:"bdsa-card__footer",children:ae})]})});Xi.displayName="Card";var on=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function an(Le){return Le&&Le.__esModule&&Object.prototype.hasOwnProperty.call(Le,"default")?Le.default:Le}var Wi={exports:{}},Zi;function Ki(){return Zi||(Zi=1,function(Le){//! openseadragon 5.0.1
2
2
  //! Built on 2024-12-09
3
3
  //! Git commit: v5.0.1-0-480de92d
4
4
  //! http://openseadragon.github.io
5
5
  //! License: http://openseadragon.github.io/license/
6
- function Pe(n){return new Pe.Viewer(n)}(function(n){n.version={versionStr:"5.0.1",major:parseInt("5",10),minor:parseInt("0",10),revision:parseInt("1",10)};var o={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object AsyncFunction]":"function","[object Promise]":"promise","[object Array]":"array","[object Date]":"date","[object RegExp]":"regexp","[object Object]":"object"},d=Object.prototype.toString,c=Object.prototype.hasOwnProperty;n.isFunction=function(v){return n.type(v)==="function"},n.isArray=Array.isArray||function(v){return n.type(v)==="array"},n.isWindow=function(v){return v&&typeof v=="object"&&"setInterval"in v},n.type=function(v){return v==null?String(v):o[d.call(v)]||"object"},n.isPlainObject=function(v){if(!v||Pe.type(v)!=="object"||v.nodeType||n.isWindow(v)||v.constructor&&!c.call(v,"constructor")&&!c.call(v.constructor.prototype,"isPrototypeOf"))return!1;var y;for(var a in v)y=a;return y===void 0||c.call(v,y)},n.isEmptyObject=function(v){for(var y in v)return!1;return!0},n.freezeObject=function(v){return Object.freeze?n.freezeObject=Object.freeze:n.freezeObject=function(y){return y},n.freezeObject(v)},n.supportsCanvas=function(){var v=document.createElement("canvas");return!!(n.isFunction(v.getContext)&&v.getContext("2d"))}(),n.isCanvasTainted=function(v){var y=!1;try{v.getContext("2d").getImageData(0,0,1,1)}catch{y=!0}return y},n.supportsAddEventListener=function(){return!!(document.documentElement.addEventListener&&document.addEventListener)}(),n.supportsRemoveEventListener=function(){return!!(document.documentElement.removeEventListener&&document.removeEventListener)}(),n.supportsEventListenerOptions=function(){var v=0;if(n.supportsAddEventListener)try{var y={get capture(){return v++,!1},get once(){return v++,!1},get passive(){return v++,!1}};window.addEventListener("test",null,y),window.removeEventListener("test",null,y)}catch{v=0}return v>=3}(),n.getCurrentPixelDensityRatio=function(){if(n.supportsCanvas){var v=document.createElement("canvas").getContext("2d"),y=window.devicePixelRatio||1,a=v.webkitBackingStorePixelRatio||v.mozBackingStorePixelRatio||v.msBackingStorePixelRatio||v.oBackingStorePixelRatio||v.backingStorePixelRatio||1;return Math.max(y,1)/a}else return 1},n.pixelDensityRatio=n.getCurrentPixelDensityRatio()})(Pe),function(n){n.extend=function(){var a,w,_,T,I,k,G=arguments[0]||{},W=arguments.length,O=!1,ee=1;for(typeof G=="boolean"&&(O=G,G=arguments[1]||{},ee=2),typeof G!="object"&&!Pe.isFunction(G)&&(G={}),W===ee&&(G=this,--ee);ee<W;ee++)if(a=arguments[ee],a!==null||a!==void 0)for(w in a){var ve=Object.getOwnPropertyDescriptor(a,w);if(ve!==void 0){if(ve.get||ve.set){Object.defineProperty(G,w,ve);continue}T=ve.value}else{n.console.warn('Could not copy inherited property "'+w+'".');continue}G!==T&&(O&&T&&(Pe.isPlainObject(T)||(I=Pe.isArray(T)))?(_=G[w],I?(I=!1,k=_&&Pe.isArray(_)?_:[]):k=_&&Pe.isPlainObject(_)?_:{},G[w]=Pe.extend(O,k,T)):T!==void 0&&(G[w]=T))}return G};var o=function(){if(typeof navigator!="object")return!1;var a=navigator.userAgent;return typeof a!="string"?!1:a.indexOf("iPhone")!==-1||a.indexOf("iPad")!==-1||a.indexOf("iPod")!==-1};n.extend(n,{DEFAULT_SETTINGS:{xmlPath:null,tileSources:null,tileHost:null,initialPage:0,crossOriginPolicy:!1,ajaxWithCredentials:!1,loadTilesWithAjax:!1,ajaxHeaders:{},splitHashDataForPost:!1,panHorizontal:!0,panVertical:!0,constrainDuringPan:!1,wrapHorizontal:!1,wrapVertical:!1,visibilityRatio:.5,minPixelRatio:.5,defaultZoomLevel:0,minZoomLevel:null,maxZoomLevel:null,homeFillsViewer:!1,clickTimeThreshold:300,clickDistThreshold:5,dblClickTimeThreshold:300,dblClickDistThreshold:20,springStiffness:6.5,animationTime:1.2,gestureSettingsMouse:{dragToPan:!0,scrollToZoom:!0,clickToZoom:!0,dblClickToZoom:!1,dblClickDragToZoom:!1,pinchToZoom:!1,zoomToRefPoint:!0,flickEnabled:!1,flickMinSpeed:120,flickMomentum:.25,pinchRotate:!1},gestureSettingsTouch:{dragToPan:!0,scrollToZoom:!1,clickToZoom:!1,dblClickToZoom:!0,dblClickDragToZoom:!0,pinchToZoom:!0,zoomToRefPoint:!0,flickEnabled:!0,flickMinSpeed:120,flickMomentum:.25,pinchRotate:!1},gestureSettingsPen:{dragToPan:!0,scrollToZoom:!1,clickToZoom:!0,dblClickToZoom:!1,dblClickDragToZoom:!1,pinchToZoom:!1,zoomToRefPoint:!0,flickEnabled:!1,flickMinSpeed:120,flickMomentum:.25,pinchRotate:!1},gestureSettingsUnknown:{dragToPan:!0,scrollToZoom:!1,clickToZoom:!1,dblClickToZoom:!0,dblClickDragToZoom:!1,pinchToZoom:!0,zoomToRefPoint:!0,flickEnabled:!0,flickMinSpeed:120,flickMomentum:.25,pinchRotate:!1},zoomPerClick:2,zoomPerScroll:1.2,zoomPerDblClickDrag:1.2,zoomPerSecond:1,blendTime:0,alwaysBlend:!1,autoHideControls:!0,immediateRender:!1,minZoomImageRatio:.9,maxZoomPixelRatio:1.1,smoothTileEdgesMinZoom:1.1,iOSDevice:o(),pixelsPerWheelLine:40,pixelsPerArrowPress:40,autoResize:!0,preserveImageSizeOnResize:!1,minScrollDeltaTime:50,rotationIncrement:90,maxTilesPerFrame:1,showSequenceControl:!0,sequenceControlAnchor:null,preserveViewport:!1,preserveOverlays:!1,navPrevNextWrap:!1,showNavigationControl:!0,navigationControlAnchor:null,showZoomControl:!0,showHomeControl:!0,showFullPageControl:!0,showRotationControl:!1,showFlipControl:!1,controlsFadeDelay:2e3,controlsFadeLength:1500,mouseNavEnabled:!0,showNavigator:!1,navigatorElement:null,navigatorId:null,navigatorPosition:null,navigatorSizeRatio:.2,navigatorMaintainSizeRatio:!1,navigatorTop:null,navigatorLeft:null,navigatorHeight:null,navigatorWidth:null,navigatorAutoResize:!0,navigatorAutoFade:!0,navigatorRotate:!0,navigatorBackground:"#000",navigatorOpacity:.8,navigatorBorderColor:"#555",navigatorDisplayRegionColor:"#900",degrees:0,flipped:!1,overlayPreserveContentDirection:!0,opacity:1,compositeOperation:null,drawer:["webgl","canvas","html"],drawerOptions:{webgl:{},canvas:{},html:{},custom:{}},preload:!1,imageSmoothingEnabled:!0,placeholderFillStyle:null,subPixelRoundingForTransparency:null,showReferenceStrip:!1,referenceStripScroll:"horizontal",referenceStripElement:null,referenceStripHeight:null,referenceStripWidth:null,referenceStripPosition:"BOTTOM_LEFT",referenceStripSizeRatio:.2,collectionRows:3,collectionColumns:0,collectionLayout:"horizontal",collectionMode:!1,collectionTileSize:800,collectionTileMargin:80,imageLoaderLimit:0,maxImageCacheCount:200,timeout:3e4,tileRetryMax:0,tileRetryDelay:2500,prefixUrl:"/images/",navImages:{zoomIn:{REST:"zoomin_rest.png",GROUP:"zoomin_grouphover.png",HOVER:"zoomin_hover.png",DOWN:"zoomin_pressed.png"},zoomOut:{REST:"zoomout_rest.png",GROUP:"zoomout_grouphover.png",HOVER:"zoomout_hover.png",DOWN:"zoomout_pressed.png"},home:{REST:"home_rest.png",GROUP:"home_grouphover.png",HOVER:"home_hover.png",DOWN:"home_pressed.png"},fullpage:{REST:"fullpage_rest.png",GROUP:"fullpage_grouphover.png",HOVER:"fullpage_hover.png",DOWN:"fullpage_pressed.png"},rotateleft:{REST:"rotateleft_rest.png",GROUP:"rotateleft_grouphover.png",HOVER:"rotateleft_hover.png",DOWN:"rotateleft_pressed.png"},rotateright:{REST:"rotateright_rest.png",GROUP:"rotateright_grouphover.png",HOVER:"rotateright_hover.png",DOWN:"rotateright_pressed.png"},flip:{REST:"flip_rest.png",GROUP:"flip_grouphover.png",HOVER:"flip_hover.png",DOWN:"flip_pressed.png"},previous:{REST:"previous_rest.png",GROUP:"previous_grouphover.png",HOVER:"previous_hover.png",DOWN:"previous_pressed.png"},next:{REST:"next_rest.png",GROUP:"next_grouphover.png",HOVER:"next_hover.png",DOWN:"next_pressed.png"}},debugMode:!1,debugGridColor:["#437AB2","#1B9E77","#D95F02","#7570B3","#E7298A","#66A61E","#E6AB02","#A6761D","#666666"],silenceMultiImageWarnings:!1},delegate:function(a,w){return function(){var _=arguments;return _===void 0&&(_=[]),w.apply(a,_)}},BROWSERS:{UNKNOWN:0,IE:1,FIREFOX:2,SAFARI:3,CHROME:4,OPERA:5,EDGE:6,CHROMEEDGE:7},SUBPIXEL_ROUNDING_OCCURRENCES:{NEVER:0,ONLY_AT_REST:1,ALWAYS:2},_viewers:new Map,getViewer:function(a){return n._viewers.get(this.getElement(a))},getElement:function(a){return typeof a=="string"&&(a=document.getElementById(a)),a},getElementPosition:function(a){var w=new n.Point,_,T;for(a=n.getElement(a),_=n.getElementStyle(a).position==="fixed",T=y(a,_);T;)w.x+=a.offsetLeft,w.y+=a.offsetTop,_&&(w=w.plus(n.getPageScroll())),a=T,_=n.getElementStyle(a).position==="fixed",T=y(a,_);return w},getElementOffset:function(a){a=n.getElement(a);var w=a&&a.ownerDocument,_,T,I={top:0,left:0};return w?(_=w.documentElement,typeof a.getBoundingClientRect<"u"&&(I=a.getBoundingClientRect()),T=w===w.window?w:w.nodeType===9?w.defaultView||w.parentWindow:!1,new n.Point(I.left+(T.pageXOffset||_.scrollLeft)-(_.clientLeft||0),I.top+(T.pageYOffset||_.scrollTop)-(_.clientTop||0))):new n.Point},getElementSize:function(a){return a=n.getElement(a),new n.Point(a.clientWidth,a.clientHeight)},getElementStyle:document.documentElement.currentStyle?function(a){return a=n.getElement(a),a.currentStyle}:function(a){return a=n.getElement(a),window.getComputedStyle(a,"")},getCssPropertyWithVendorPrefix:function(a){var w={};return n.getCssPropertyWithVendorPrefix=function(_){if(w[_]!==void 0)return w[_];var T=document.createElement("div").style,I=null;if(T[_]!==void 0)I=_;else for(var k=["Webkit","Moz","MS","O","webkit","moz","ms","o"],G=n.capitalizeFirstLetter(_),W=0;W<k.length;W++){var O=k[W]+G;if(T[O]!==void 0){I=O;break}}return w[_]=I,I},n.getCssPropertyWithVendorPrefix(a)},capitalizeFirstLetter:function(a){return a.charAt(0).toUpperCase()+a.slice(1)},positiveModulo:function(a,w){var _=a%w;return _<0&&(_+=w),_},pointInElement:function(a,w){a=n.getElement(a);var _=n.getElementOffset(a),T=n.getElementSize(a);return w.x>=_.x&&w.x<_.x+T.x&&w.y<_.y+T.y&&w.y>=_.y},getMousePosition:function(a){if(typeof a.pageX=="number")n.getMousePosition=function(w){var _=new n.Point;return _.x=w.pageX,_.y=w.pageY,_};else if(typeof a.clientX=="number")n.getMousePosition=function(w){var _=new n.Point;return _.x=w.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,_.y=w.clientY+document.body.scrollTop+document.documentElement.scrollTop,_};else throw new Error("Unknown event mouse position, no known technique.");return n.getMousePosition(a)},getPageScroll:function(){var a=document.documentElement||{},w=document.body||{};if(typeof window.pageXOffset=="number")n.getPageScroll=function(){return new n.Point(window.pageXOffset,window.pageYOffset)};else if(w.scrollLeft||w.scrollTop)n.getPageScroll=function(){return new n.Point(document.body.scrollLeft,document.body.scrollTop)};else if(a.scrollLeft||a.scrollTop)n.getPageScroll=function(){return new n.Point(document.documentElement.scrollLeft,document.documentElement.scrollTop)};else return new n.Point(0,0);return n.getPageScroll()},setPageScroll:function(a){if(typeof window.scrollTo<"u")n.setPageScroll=function(T){window.scrollTo(T.x,T.y)};else{var w=n.getPageScroll();if(w.x===a.x&&w.y===a.y)return;document.body.scrollLeft=a.x,document.body.scrollTop=a.y;var _=n.getPageScroll();if(_.x!==w.x&&_.y!==w.y){n.setPageScroll=function(T){document.body.scrollLeft=T.x,document.body.scrollTop=T.y};return}if(document.documentElement.scrollLeft=a.x,document.documentElement.scrollTop=a.y,_=n.getPageScroll(),_.x!==w.x&&_.y!==w.y){n.setPageScroll=function(T){document.documentElement.scrollLeft=T.x,document.documentElement.scrollTop=T.y};return}n.setPageScroll=function(T){}}n.setPageScroll(a)},getWindowSize:function(){var a=document.documentElement||{},w=document.body||{};if(typeof window.innerWidth=="number")n.getWindowSize=function(){return new n.Point(window.innerWidth,window.innerHeight)};else if(a.clientWidth||a.clientHeight)n.getWindowSize=function(){return new n.Point(document.documentElement.clientWidth,document.documentElement.clientHeight)};else if(w.clientWidth||w.clientHeight)n.getWindowSize=function(){return new n.Point(document.body.clientWidth,document.body.clientHeight)};else throw new Error("Unknown window size, no known technique.");return n.getWindowSize()},makeCenteredNode:function(a){a=n.getElement(a);var w=[n.makeNeutralElement("div"),n.makeNeutralElement("div"),n.makeNeutralElement("div")];return n.extend(w[0].style,{display:"table",height:"100%",width:"100%"}),n.extend(w[1].style,{display:"table-row"}),n.extend(w[2].style,{display:"table-cell",verticalAlign:"middle",textAlign:"center"}),w[0].appendChild(w[1]),w[1].appendChild(w[2]),w[2].appendChild(a),w[0]},makeNeutralElement:function(a){var w=document.createElement(a),_=w.style;return _.background="transparent none",_.border="none",_.margin="0px",_.padding="0px",_.position="static",w},now:function(){return Date.now?n.now=Date.now:n.now=function(){return new Date().getTime()},n.now()},makeTransparentImage:function(a){var w=n.makeNeutralElement("img");return w.src=a,w},setElementOpacity:function(a,w,_){var T,I;a=n.getElement(a),_&&!n.Browser.alpha&&(w=Math.round(w)),n.Browser.opacity?a.style.opacity=w<1?w:"":w<1?(T=Math.round(100*w),I="alpha(opacity="+T+")",a.style.filter=I):a.style.filter=""},setElementTouchActionNone:function(a){a=n.getElement(a),typeof a.style.touchAction<"u"?a.style.touchAction="none":typeof a.style.msTouchAction<"u"&&(a.style.msTouchAction="none")},setElementPointerEvents:function(a,w){a=n.getElement(a),typeof a.style<"u"&&typeof a.style.pointerEvents<"u"&&(a.style.pointerEvents=w)},setElementPointerEventsNone:function(a){n.setElementPointerEvents(a,"none")},addClass:function(a,w){a=n.getElement(a),a.className?(" "+a.className+" ").indexOf(" "+w+" ")===-1&&(a.className+=" "+w):a.className=w},indexOf:function(a,w,_){return Array.prototype.indexOf?this.indexOf=function(T,I,k){return T.indexOf(I,k)}:this.indexOf=function(T,I,k){var G,W=k||0,O;if(!T)throw new TypeError;if(O=T.length,O===0||W>=O)return-1;for(W<0&&(W=O-Math.abs(W)),G=W;G<O;G++)if(T[G]===I)return G;return-1},this.indexOf(a,w,_)},removeClass:function(a,w){var _,T=[],I;for(a=n.getElement(a),_=a.className.split(/\s+/),I=0;I<_.length;I++)_[I]&&_[I]!==w&&T.push(_[I]);a.className=T.join(" ")},normalizeEventListenerOptions:function(a){var w;return typeof a<"u"?typeof a=="boolean"?w=n.supportsEventListenerOptions?{capture:a}:a:w=n.supportsEventListenerOptions?a:typeof a.capture<"u"?a.capture:!1:w=n.supportsEventListenerOptions?{capture:!1}:!1,w},addEvent:function(){if(n.supportsAddEventListener)return function(a,w,_,T){T=n.normalizeEventListenerOptions(T),a=n.getElement(a),a.addEventListener(w,_,T)};if(document.documentElement.attachEvent&&document.attachEvent)return function(a,w,_){a=n.getElement(a),a.attachEvent("on"+w,_)};throw new Error("No known event model.")}(),removeEvent:function(){if(n.supportsRemoveEventListener)return function(a,w,_,T){T=n.normalizeEventListenerOptions(T),a=n.getElement(a),a.removeEventListener(w,_,T)};if(document.documentElement.detachEvent&&document.detachEvent)return function(a,w,_){a=n.getElement(a),a.detachEvent("on"+w,_)};throw new Error("No known event model.")}(),cancelEvent:function(a){a.preventDefault()},eventIsCanceled:function(a){return a.defaultPrevented},stopEvent:function(a){a.stopPropagation()},createCallback:function(a,w){console.error("The createCallback function is deprecated and will be removed in future versions. Please use alternativeFunction instead.");var _=[],T;for(T=2;T<arguments.length;T++)_.push(arguments[T]);return function(){var I=_.concat([]),k;for(k=0;k<arguments.length;k++)I.push(arguments[k]);return w.apply(a,I)}},getUrlParameter:function(a){var w=v[a];return w||null},getUrlProtocol:function(a){var w=a.match(/^([a-z]+:)\/\//i);return w===null?window.location.protocol:w[1].toLowerCase()},createAjaxRequest:function(){if(window.XMLHttpRequest)return n.createAjaxRequest=function(){return new XMLHttpRequest},new XMLHttpRequest;throw new Error("Browser doesn't support XMLHttpRequest.")},makeAjaxRequest:function(a,w,_){var T,I,k,G;n.isPlainObject(a)&&(w=a.success,_=a.error,T=a.withCredentials,I=a.headers,k=a.responseType||null,G=a.postData||null,a=a.url);var W=n.getUrlProtocol(a),O=n.createAjaxRequest();if(!n.isFunction(w))throw new Error("makeAjaxRequest requires a success callback");O.onreadystatechange=function(){O.readyState===4&&(O.onreadystatechange=function(){},O.status>=200&&O.status<300||O.status===0&&W!=="http:"&&W!=="https:"?w(O):n.isFunction(_)?_(O):n.console.error("AJAX request returned %d: %s",O.status,a))};var ee=G?"POST":"GET";try{if(O.open(ee,a,!0),k&&(O.responseType=k),I)for(var ve in I)Object.prototype.hasOwnProperty.call(I,ve)&&I[ve]&&O.setRequestHeader(ve,I[ve]);T&&(O.withCredentials=!0),O.send(G)}catch(we){n.console.error("%s while making AJAX request: %s",we.name,we.message),O.onreadystatechange=function(){},n.isFunction(_)&&_(O,we)}return O},jsonp:function(a){var w,_=a.url,T=document.head||document.getElementsByTagName("head")[0]||document.documentElement,I=a.callbackName||"openseadragon"+n.now(),k=window[I],G="$1"+I+"$2",W=a.param||"callback",O=a.callback;_=_.replace(/(=)\?(&|$)|\?\?/i,G),_+=(/\?/.test(_)?"&":"?")+W+"="+I,window[I]=function(ee){if(k)window[I]=k;else try{delete window[I]}catch{}O&&n.isFunction(O)&&O(ee)},w=document.createElement("script"),(a.async!==void 0||a.async!==!1)&&(w.async="async"),a.scriptCharset&&(w.charset=a.scriptCharset),w.src=_,w.onload=w.onreadystatechange=function(ee,ve){(ve||!w.readyState||/loaded|complete/.test(w.readyState))&&(w.onload=w.onreadystatechange=null,T&&w.parentNode&&T.removeChild(w),w=void 0)},T.insertBefore(w,T.firstChild)},createFromDZI:function(){throw"OpenSeadragon.createFromDZI is deprecated, use Viewer.open."},parseXml:function(a){if(window.DOMParser)n.parseXml=function(w){var _=null,T;return T=new DOMParser,_=T.parseFromString(w,"text/xml"),_};else throw new Error("Browser doesn't support XML DOM.");return n.parseXml(a)},parseJSON:function(a){return n.parseJSON=window.JSON.parse,n.parseJSON(a)},imageFormatSupported:function(a){return a=a||"",!!c[a.toLowerCase()]},setImageFormatsSupported:function(a){n.extend(c,a)}});var d=function(a){};n.console=window.console||{log:d,debug:d,info:d,warn:d,error:d,assert:d},n.Browser={vendor:n.BROWSERS.UNKNOWN,version:0,alpha:!0};var c={avif:!0,bmp:!1,jpeg:!0,jpg:!0,png:!0,tif:!1,wdp:!1,webp:!0},v={};(function(){var a=navigator.appVersion,w=navigator.userAgent,_;switch(navigator.appName){case"Microsoft Internet Explorer":window.attachEvent&&window.ActiveXObject&&(n.Browser.vendor=n.BROWSERS.IE,n.Browser.version=parseFloat(w.substring(w.indexOf("MSIE")+5,w.indexOf(";",w.indexOf("MSIE")))));break;case"Netscape":window.addEventListener&&(w.indexOf("Edge")>=0?(n.Browser.vendor=n.BROWSERS.EDGE,n.Browser.version=parseFloat(w.substring(w.indexOf("Edge")+5))):w.indexOf("Edg")>=0?(n.Browser.vendor=n.BROWSERS.CHROMEEDGE,n.Browser.version=parseFloat(w.substring(w.indexOf("Edg")+4))):w.indexOf("Firefox")>=0?(n.Browser.vendor=n.BROWSERS.FIREFOX,n.Browser.version=parseFloat(w.substring(w.indexOf("Firefox")+8))):w.indexOf("Safari")>=0?(n.Browser.vendor=w.indexOf("Chrome")>=0?n.BROWSERS.CHROME:n.BROWSERS.SAFARI,n.Browser.version=parseFloat(w.substring(w.substring(0,w.indexOf("Safari")).lastIndexOf("/")+1,w.indexOf("Safari")))):(_=new RegExp("Trident/.*rv:([0-9]{1,}[.0-9]{0,})"),_.exec(w)!==null&&(n.Browser.vendor=n.BROWSERS.IE,n.Browser.version=parseFloat(RegExp.$1))));break;case"Opera":n.Browser.vendor=n.BROWSERS.OPERA,n.Browser.version=parseFloat(a);break}var T=window.location.search.substring(1),I=T.split("&"),k,G,W;for(W=0;W<I.length;W++)if(k=I[W],G=k.indexOf("="),G>0){var O=k.substring(0,G),ee=k.substring(G+1);try{v[O]=decodeURIComponent(ee)}catch{n.console.error("Ignoring malformed URL parameter: %s=%s",O,ee)}}n.Browser.alpha=!(n.Browser.vendor===n.BROWSERS.CHROME&&n.Browser.version<2),n.Browser.opacity=!0,n.Browser.vendor===n.BROWSERS.IE&&n.console.error("Internet Explorer is not supported by OpenSeadragon")})(),function(a){var w=a.requestAnimationFrame||a.mozRequestAnimationFrame||a.webkitRequestAnimationFrame||a.msRequestAnimationFrame,_=a.cancelAnimationFrame||a.mozCancelAnimationFrame||a.webkitCancelAnimationFrame||a.msCancelAnimationFrame;if(w&&_)n.requestAnimationFrame=function(){return w.apply(a,arguments)},n.cancelAnimationFrame=function(){return _.apply(a,arguments)};else{var T=[],I=[],k=0,G;n.requestAnimationFrame=function(W){return T.push([++k,W]),G||(G=setInterval(function(){if(T.length){var O=n.now(),ee=I;for(I=T,T=ee;I.length;)I.shift()[1](O)}else clearInterval(G),G=void 0},1e3/50)),k},n.cancelAnimationFrame=function(W){var O,ee;for(O=0,ee=T.length;O<ee;O+=1)if(T[O][0]===W){T.splice(O,1);return}for(O=0,ee=I.length;O<ee;O+=1)if(I[O][0]===W){I.splice(O,1);return}}}}(window);function y(a,w){return w&&a!==document.body?document.body:a.offsetParent}}(Pe),function(n,o){$e.exports?$e.exports=o():n.OpenSeadragon=o()}(tn,function(){return Pe}),function(n){class o{constructor(c){c||(c=[0,0,0,0,0,0,0,0,0]),this.values=c}static makeIdentity(){return new o([1,0,0,0,1,0,0,0,1])}static makeTranslation(c,v){return new o([1,0,0,0,1,0,c,v,1])}static makeRotation(c){var v=Math.cos(c),y=Math.sin(c);return new o([v,-y,0,y,v,0,0,0,1])}static makeScaling(c,v){return new o([c,0,0,0,v,0,0,0,1])}multiply(c){let v=this.values,y=c.values;var a=v[0*3+0],w=v[0*3+1],_=v[0*3+2],T=v[1*3+0],I=v[1*3+1],k=v[1*3+2],G=v[2*3+0],W=v[2*3+1],O=v[2*3+2],ee=y[0*3+0],ve=y[0*3+1],we=y[0*3+2],ot=y[1*3+0],Ge=y[1*3+1],je=y[1*3+2],xt=y[2*3+0],Q=y[2*3+1],vt=y[2*3+2];return new o([ee*a+ve*T+we*G,ee*w+ve*I+we*W,ee*_+ve*k+we*O,ot*a+Ge*T+je*G,ot*w+Ge*I+je*W,ot*_+Ge*k+je*O,xt*a+Q*T+vt*G,xt*w+Q*I+vt*W,xt*_+Q*k+vt*O])}}n.Mat3=o}(Pe),function(n){var o={supportsFullScreen:!1,isFullScreen:function(){return!1},getFullScreenElement:function(){return null},requestFullScreen:function(){},exitFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",fullScreenErrorEventName:""};document.exitFullscreen?(o.supportsFullScreen=!0,o.getFullScreenElement=function(){return document.fullscreenElement},o.requestFullScreen=function(d){return d.requestFullscreen().catch(function(c){n.console.error("Fullscreen request failed: ",c)})},o.exitFullScreen=function(){document.exitFullscreen().catch(function(d){n.console.error("Error while exiting fullscreen: ",d)})},o.fullScreenEventName="fullscreenchange",o.fullScreenErrorEventName="fullscreenerror"):document.msExitFullscreen?(o.supportsFullScreen=!0,o.getFullScreenElement=function(){return document.msFullscreenElement},o.requestFullScreen=function(d){return d.msRequestFullscreen()},o.exitFullScreen=function(){document.msExitFullscreen()},o.fullScreenEventName="MSFullscreenChange",o.fullScreenErrorEventName="MSFullscreenError"):document.webkitExitFullscreen?(o.supportsFullScreen=!0,o.getFullScreenElement=function(){return document.webkitFullscreenElement},o.requestFullScreen=function(d){return d.webkitRequestFullscreen()},o.exitFullScreen=function(){document.webkitExitFullscreen()},o.fullScreenEventName="webkitfullscreenchange",o.fullScreenErrorEventName="webkitfullscreenerror"):document.webkitCancelFullScreen?(o.supportsFullScreen=!0,o.getFullScreenElement=function(){return document.webkitCurrentFullScreenElement},o.requestFullScreen=function(d){return d.webkitRequestFullScreen()},o.exitFullScreen=function(){document.webkitCancelFullScreen()},o.fullScreenEventName="webkitfullscreenchange",o.fullScreenErrorEventName="webkitfullscreenerror"):document.mozCancelFullScreen&&(o.supportsFullScreen=!0,o.getFullScreenElement=function(){return document.mozFullScreenElement},o.requestFullScreen=function(d){return d.mozRequestFullScreen()},o.exitFullScreen=function(){document.mozCancelFullScreen()},o.fullScreenEventName="mozfullscreenchange",o.fullScreenErrorEventName="mozfullscreenerror"),o.isFullScreen=function(){return o.getFullScreenElement()!==null},o.cancelFullScreen=function(){n.console.error("cancelFullScreen is deprecated. Use exitFullScreen instead."),o.exitFullScreen()},n.extend(n,o)}(Pe),function(n){n.EventSource=function(){this.events={},this._rejectedEventList={}},n.EventSource.prototype={addOnceHandler:function(o,d,c,v,y){var a=this;v=v||1;var w=0,_=function(T){return w++,w===v&&a.removeHandler(o,_),d(T)};return this.addHandler(o,_,c,y)},addHandler:function(o,d,c,v){if(Object.prototype.hasOwnProperty.call(this._rejectedEventList,o))return n.console.error(`Error adding handler for ${o}. ${this._rejectedEventList[o]}`),!1;var y=this.events[o];if(y||(this.events[o]=y=[]),d&&n.isFunction(d)){var a=y.length,w={handler:d,userData:c||null,priority:v||0};for(y[a]=w;a>0&&y[a-1].priority<y[a].priority;)y[a]=y[a-1],y[a-1]=w,a--}return!0},removeHandler:function(o,d){var c=this.events[o],v=[],y;if(c&&n.isArray(c)){for(y=0;y<c.length;y++)c[y].handler!==d&&v.push(c[y]);this.events[o]=v}},numberOfHandlers:function(o){var d=this.events[o];return d?d.length:0},removeAllHandlers:function(o){if(o)this.events[o]=[];else for(var d in this.events)this.events[d]=[]},getHandler:function(o){var d=this.events[o];return!d||!d.length?null:(d=d.length===1?[d[0]]:Array.apply(null,d),function(c,v){var y,a=d.length;for(y=0;y<a;y++)d[y]&&(v.eventSource=c,v.userData=d[y].userData,d[y].handler(v))})},raiseEvent:function(o,d){if(Object.prototype.hasOwnProperty.call(this._rejectedEventList,o))return n.console.error(`Error adding handler for ${o}. ${this._rejectedEventList[o]}`),!1;var c=this.getHandler(o);return c&&c(this,d||{}),!0},rejectEventHandler(o,d=""){this._rejectedEventList[o]=d},allowEventHandler(o){delete this._rejectedEventList[o]}}}(Pe),function(n){var o={};n.MouseTracker=function(R){var B=arguments;n.isPlainObject(R)||(R={element:B[0],clickTimeThreshold:B[1],clickDistThreshold:B[2]}),this.hash=Math.random(),this.element=n.getElement(R.element),this.clickTimeThreshold=R.clickTimeThreshold||n.DEFAULT_SETTINGS.clickTimeThreshold,this.clickDistThreshold=R.clickDistThreshold||n.DEFAULT_SETTINGS.clickDistThreshold,this.dblClickTimeThreshold=R.dblClickTimeThreshold||n.DEFAULT_SETTINGS.dblClickTimeThreshold,this.dblClickDistThreshold=R.dblClickDistThreshold||n.DEFAULT_SETTINGS.dblClickDistThreshold,this.userData=R.userData||null,this.stopDelay=R.stopDelay||50,this.preProcessEventHandler=R.preProcessEventHandler||null,this.contextMenuHandler=R.contextMenuHandler||null,this.enterHandler=R.enterHandler||null,this.leaveHandler=R.leaveHandler||null,this.exitHandler=R.exitHandler||null,this.overHandler=R.overHandler||null,this.outHandler=R.outHandler||null,this.pressHandler=R.pressHandler||null,this.nonPrimaryPressHandler=R.nonPrimaryPressHandler||null,this.releaseHandler=R.releaseHandler||null,this.nonPrimaryReleaseHandler=R.nonPrimaryReleaseHandler||null,this.moveHandler=R.moveHandler||null,this.scrollHandler=R.scrollHandler||null,this.clickHandler=R.clickHandler||null,this.dblClickHandler=R.dblClickHandler||null,this.dragHandler=R.dragHandler||null,this.dragEndHandler=R.dragEndHandler||null,this.pinchHandler=R.pinchHandler||null,this.stopHandler=R.stopHandler||null,this.keyDownHandler=R.keyDownHandler||null,this.keyUpHandler=R.keyUpHandler||null,this.keyHandler=R.keyHandler||null,this.focusHandler=R.focusHandler||null,this.blurHandler=R.blurHandler||null;var V=this;o[this.hash]={click:function(K){we(V,K)},dblclick:function(K){ot(V,K)},keydown:function(K){Ge(V,K)},keyup:function(K){je(V,K)},keypress:function(K){xt(V,K)},focus:function(K){Q(V,K)},blur:function(K){vt(V,K)},contextmenu:function(K){Ne(V,K)},wheel:function(K){dt(V,K)},mousewheel:function(K){ke(V,K)},DOMMouseScroll:function(K){ke(V,K)},MozMousePixelScroll:function(K){ke(V,K)},losecapture:function(K){ut(V,K)},mouseenter:function(K){mt(V,K)},mouseleave:function(K){Yt(V,K)},mouseover:function(K){Xe(V,K)},mouseout:function(K){ni(V,K)},mousedown:function(K){Ve(V,K)},mouseup:function(K){Zt(V,K)},mousemove:function(K){Xt(V,K)},touchstart:function(K){wt(V,K)},touchend:function(K){jt(V,K)},touchmove:function(K){at(V,K)},touchcancel:function(K){Ot(V,K)},gesturestart:function(K){Jt(V,K)},gesturechange:function(K){kt(V,K)},gotpointercapture:function(K){ei(V,K)},lostpointercapture:function(K){ti(V,K)},pointerenter:function(K){mt(V,K)},pointerleave:function(K){Yt(V,K)},pointerover:function(K){Xe(V,K)},pointerout:function(K){ni(V,K)},pointerdown:function(K){Ve(V,K)},pointerup:function(K){Zt(V,K)},pointermove:function(K){Xt(V,K)},pointercancel:function(K){Bt(V,K)},pointerupcaptured:function(K){Qt(V,K)},pointermovecaptured:function(K){We(V,K)},tracking:!1,activePointersLists:[],lastClickPos:null,dblClickTimeOut:null,pinchGPoints:[],lastPinchDist:0,currentPinchDist:0,lastPinchCenter:null,currentPinchCenter:null,sentDragEvent:!1},this.hasGestureHandlers=!!(this.pressHandler||this.nonPrimaryPressHandler||this.releaseHandler||this.nonPrimaryReleaseHandler||this.clickHandler||this.dblClickHandler||this.dragHandler||this.dragEndHandler||this.pinchHandler),this.hasScrollHandler=!!this.scrollHandler,n.MouseTracker.havePointerEvents&&n.setElementPointerEvents(this.element,"auto"),this.exitHandler&&n.console.error("MouseTracker.exitHandler is deprecated. Use MouseTracker.leaveHandler instead."),R.startDisabled||this.setTracking(!0)},n.MouseTracker.prototype={destroy:function(){a(this),this.element=null,o[this.hash]=null,delete o[this.hash]},isTracking:function(){return o[this.hash].tracking},setTracking:function(R){return R?y(this):a(this),this},getActivePointersListByType:function(R){var B=o[this.hash],V,K=B?B.activePointersLists.length:0,Te;for(V=0;V<K;V++)if(B.activePointersLists[V].type===R)return B.activePointersLists[V];return Te=new n.MouseTracker.GesturePointList(R),B&&B.activePointersLists.push(Te),Te},getActivePointerCount:function(){var R=o[this.hash],B,V=R.activePointersLists.length,K=0;for(B=0;B<V;B++)K+=R.activePointersLists[B].getLength();return K},preProcessEventHandler:function(){},contextMenuHandler:function(){},enterHandler:function(){},leaveHandler:function(){},exitHandler:function(){},overHandler:function(){},outHandler:function(){},pressHandler:function(){},nonPrimaryPressHandler:function(){},releaseHandler:function(){},nonPrimaryReleaseHandler:function(){},moveHandler:function(){},scrollHandler:function(){},clickHandler:function(){},dblClickHandler:function(){},dragHandler:function(){},dragEndHandler:function(){},pinchHandler:function(){},stopHandler:function(){},keyDownHandler:function(){},keyUpHandler:function(){},keyHandler:function(){},focusHandler:function(){},blurHandler:function(){}};var d=function(){try{return window.self!==window.top}catch{return!0}}();function c(R){try{return R.addEventListener&&R.removeEventListener}catch{return!1}}n.MouseTracker.gesturePointVelocityTracker=function(){var R=[],B=0,V=0,K=function(Ft,et){return Ft.hash.toString()+et.type+et.id.toString()},Te=function(){var Ft,et=R.length,_t,Et,ai=n.now(),li,fi,mi;for(li=ai-V,V=ai,Ft=0;Ft<et;Ft++)_t=R[Ft],Et=_t.gPoint,Et.direction=Math.atan2(Et.currentPos.y-_t.lastPos.y,Et.currentPos.x-_t.lastPos.x),fi=_t.lastPos.distanceTo(Et.currentPos),_t.lastPos=Et.currentPos,mi=1e3*fi/(li+1),Et.speed=.75*mi+.25*Et.speed},ze=function(Ft,et){var _t=K(Ft,et);R.push({guid:_t,gPoint:et,lastPos:et.currentPos}),R.length===1&&(V=n.now(),B=window.setInterval(Te,50))},ft=function(Ft,et){var _t=K(Ft,et),Et,ai=R.length;for(Et=0;Et<ai;Et++)if(R[Et].guid===_t){R.splice(Et,1),ai--,ai===0&&window.clearInterval(B);break}};return{addPoint:ze,removePoint:ft}}(),n.MouseTracker.captureElement=document,n.MouseTracker.wheelEventName="onwheel"in document.createElement("div")?"wheel":document.onmousewheel!==void 0?"mousewheel":"DOMMouseScroll",n.MouseTracker.subscribeEvents=["click","dblclick","keydown","keyup","keypress","focus","blur","contextmenu",n.MouseTracker.wheelEventName],n.MouseTracker.wheelEventName==="DOMMouseScroll"&&n.MouseTracker.subscribeEvents.push("MozMousePixelScroll"),window.PointerEvent?(n.MouseTracker.havePointerEvents=!0,n.MouseTracker.subscribeEvents.push("pointerenter","pointerleave","pointerover","pointerout","pointerdown","pointerup","pointermove","pointercancel"),n.MouseTracker.havePointerCapture=function(){var R=document.createElement("div");return n.isFunction(R.setPointerCapture)&&n.isFunction(R.releasePointerCapture)}(),n.MouseTracker.havePointerCapture&&n.MouseTracker.subscribeEvents.push("gotpointercapture","lostpointercapture")):(n.MouseTracker.havePointerEvents=!1,n.MouseTracker.subscribeEvents.push("mouseenter","mouseleave","mouseover","mouseout","mousedown","mouseup","mousemove"),n.MouseTracker.mousePointerId="legacy-mouse",n.MouseTracker.havePointerCapture=function(){var R=document.createElement("div");return n.isFunction(R.setCapture)&&n.isFunction(R.releaseCapture)}(),n.MouseTracker.havePointerCapture&&n.MouseTracker.subscribeEvents.push("losecapture"),"ontouchstart"in window&&n.MouseTracker.subscribeEvents.push("touchstart","touchend","touchmove","touchcancel"),"ongesturestart"in window&&n.MouseTracker.subscribeEvents.push("gesturestart","gesturechange")),n.MouseTracker.GesturePointList=function(R){this._gPoints=[],this.type=R,this.buttons=0,this.contacts=0,this.clicks=0,this.captureCount=0},n.MouseTracker.GesturePointList.prototype={getLength:function(){return this._gPoints.length},asArray:function(){return this._gPoints},add:function(R){return this._gPoints.push(R)},removeById:function(R){var B,V=this._gPoints.length;for(B=0;B<V;B++)if(this._gPoints[B].id===R){this._gPoints.splice(B,1);break}return this._gPoints.length},getByIndex:function(R){return R<this._gPoints.length?this._gPoints[R]:null},getById:function(R){var B,V=this._gPoints.length;for(B=0;B<V;B++)if(this._gPoints[B].id===R)return this._gPoints[B];return null},getPrimary:function(R){var B,V=this._gPoints.length;for(B=0;B<V;B++)if(this._gPoints[B].isPrimary)return this._gPoints[B];return null},addContact:function(){++this.contacts,this.contacts>1&&(this.type==="mouse"||this.type==="pen")&&(n.console.warn("GesturePointList.addContact() Implausible contacts value"),this.contacts=1)},removeContact:function(){--this.contacts,this.contacts<0&&(this.contacts=0)}};function v(R){var B=o[R.hash],V,K,Te,ze,ft,Ft=B.activePointersLists.length;for(V=0;V<Ft;V++)if(Te=B.activePointersLists[V],Te.getLength()>0){for(ft=[],ze=Te.asArray(),K=0;K<ze.length;K++)ft.push(ze[K]);for(K=0;K<ft.length;K++)St(R,Te,ft[K])}for(V=0;V<Ft;V++)B.activePointersLists.pop();B.sentDragEvent=!1}function y(R){var B=o[R.hash],V,K;if(!B.tracking){for(K=0;K<n.MouseTracker.subscribeEvents.length;K++)V=n.MouseTracker.subscribeEvents[K],n.addEvent(R.element,V,B[V],V===n.MouseTracker.wheelEventName?{passive:!1,capture:!1}:!1);v(R),B.tracking=!0}}function a(R){var B=o[R.hash],V,K;if(B.tracking){for(K=0;K<n.MouseTracker.subscribeEvents.length;K++)V=n.MouseTracker.subscribeEvents[K],n.removeEvent(R.element,V,B[V],!1);v(R),B.tracking=!1}}function w(R,B){var V=o[R.hash];if(B==="pointerevent")return{upName:"pointerup",upHandler:V.pointerupcaptured,moveName:"pointermove",moveHandler:V.pointermovecaptured};if(B==="mouse")return{upName:"pointerup",upHandler:V.pointerupcaptured,moveName:"pointermove",moveHandler:V.pointermovecaptured};if(B==="touch")return{upName:"touchend",upHandler:V.touchendcaptured,moveName:"touchmove",moveHandler:V.touchmovecaptured};throw new Error("MouseTracker.getCaptureEventParams: Unknown pointer type.")}function _(R,B){var V;if(n.MouseTracker.havePointerCapture)if(n.MouseTracker.havePointerEvents)try{R.element.setPointerCapture(B.id)}catch{n.console.warn("setPointerCapture() called on invalid pointer ID");return}else R.element.setCapture(!0);else V=w(R,n.MouseTracker.havePointerEvents?"pointerevent":B.type),d&&c(window.top)&&n.addEvent(window.top,V.upName,V.upHandler,!0),n.addEvent(n.MouseTracker.captureElement,V.upName,V.upHandler,!0),n.addEvent(n.MouseTracker.captureElement,V.moveName,V.moveHandler,!0);se(R,B,!0)}function T(R,B){var V,K,Te;if(n.MouseTracker.havePointerCapture)if(n.MouseTracker.havePointerEvents){if(K=R.getActivePointersListByType(B.type),Te=K.getById(B.id),!Te||!Te.captured)return;try{R.element.releasePointerCapture(B.id)}catch{}}else R.element.releaseCapture();else V=w(R,n.MouseTracker.havePointerEvents?"pointerevent":B.type),d&&c(window.top)&&n.removeEvent(window.top,V.upName,V.upHandler,!0),n.removeEvent(n.MouseTracker.captureElement,V.moveName,V.moveHandler,!0),n.removeEvent(n.MouseTracker.captureElement,V.upName,V.upHandler,!0);se(R,B,!1)}function I(R){return n.MouseTracker.havePointerEvents?R.pointerId:n.MouseTracker.mousePointerId}function k(R){return n.MouseTracker.havePointerEvents&&R.pointerType?R.pointerType:"mouse"}function G(R){return n.MouseTracker.havePointerEvents?R.isPrimary:!0}function W(R){return n.getMousePosition(R)}function O(R,B){return ee(W(R),B)}function ee(R,B){var V=n.getElementOffset(B);return R.minus(V)}function ve(R,B){return new n.Point((R.x+B.x)/2,(R.y+B.y)/2)}function we(R,B){var V={originalEvent:B,eventType:"click",pointerType:"mouse",isEmulated:!1};z(R,V),V.preventDefault&&!V.defaultPrevented&&n.cancelEvent(B),V.stopPropagation&&n.stopEvent(B)}function ot(R,B){var V={originalEvent:B,eventType:"dblclick",pointerType:"mouse",isEmulated:!1};z(R,V),V.preventDefault&&!V.defaultPrevented&&n.cancelEvent(B),V.stopPropagation&&n.stopEvent(B)}function Ge(R,B){var V=null,K={originalEvent:B,eventType:"keydown",pointerType:"",isEmulated:!1};z(R,K),R.keyDownHandler&&!K.preventGesture&&!K.defaultPrevented&&(V={eventSource:R,keyCode:B.keyCode?B.keyCode:B.charCode,ctrl:B.ctrlKey,shift:B.shiftKey,alt:B.altKey,meta:B.metaKey,originalEvent:B,preventDefault:K.preventDefault||K.defaultPrevented,userData:R.userData},R.keyDownHandler(V)),(V&&V.preventDefault||K.preventDefault&&!K.defaultPrevented)&&n.cancelEvent(B),K.stopPropagation&&n.stopEvent(B)}function je(R,B){var V=null,K={originalEvent:B,eventType:"keyup",pointerType:"",isEmulated:!1};z(R,K),R.keyUpHandler&&!K.preventGesture&&!K.defaultPrevented&&(V={eventSource:R,keyCode:B.keyCode?B.keyCode:B.charCode,ctrl:B.ctrlKey,shift:B.shiftKey,alt:B.altKey,meta:B.metaKey,originalEvent:B,preventDefault:K.preventDefault||K.defaultPrevented,userData:R.userData},R.keyUpHandler(V)),(V&&V.preventDefault||K.preventDefault&&!K.defaultPrevented)&&n.cancelEvent(B),K.stopPropagation&&n.stopEvent(B)}function xt(R,B){var V=null,K={originalEvent:B,eventType:"keypress",pointerType:"",isEmulated:!1};z(R,K),R.keyHandler&&!K.preventGesture&&!K.defaultPrevented&&(V={eventSource:R,keyCode:B.keyCode?B.keyCode:B.charCode,ctrl:B.ctrlKey,shift:B.shiftKey,alt:B.altKey,meta:B.metaKey,originalEvent:B,preventDefault:K.preventDefault||K.defaultPrevented,userData:R.userData},R.keyHandler(V)),(V&&V.preventDefault||K.preventDefault&&!K.defaultPrevented)&&n.cancelEvent(B),K.stopPropagation&&n.stopEvent(B)}function Q(R,B){var V={originalEvent:B,eventType:"focus",pointerType:"",isEmulated:!1};z(R,V),R.focusHandler&&!V.preventGesture&&R.focusHandler({eventSource:R,originalEvent:B,userData:R.userData})}function vt(R,B){var V={originalEvent:B,eventType:"blur",pointerType:"",isEmulated:!1};z(R,V),R.blurHandler&&!V.preventGesture&&R.blurHandler({eventSource:R,originalEvent:B,userData:R.userData})}function Ne(R,B){var V=null,K={originalEvent:B,eventType:"contextmenu",pointerType:"mouse",isEmulated:!1};z(R,K),R.contextMenuHandler&&!K.preventGesture&&!K.defaultPrevented&&(V={eventSource:R,position:ee(W(B),R.element),originalEvent:K.originalEvent,preventDefault:K.preventDefault||K.defaultPrevented,userData:R.userData},R.contextMenuHandler(V)),(V&&V.preventDefault||K.preventDefault&&!K.defaultPrevented)&&n.cancelEvent(B),K.stopPropagation&&n.stopEvent(B)}function dt(R,B){Dt(R,B,B)}function ke(R,B){var V={target:B.target||B.srcElement,type:"wheel",shiftKey:B.shiftKey||!1,clientX:B.clientX,clientY:B.clientY,pageX:B.pageX?B.pageX:B.clientX,pageY:B.pageY?B.pageY:B.clientY,deltaMode:B.type==="MozMousePixelScroll"?0:1,deltaX:0,deltaZ:0};n.MouseTracker.wheelEventName==="mousewheel"?V.deltaY=-B.wheelDelta/n.DEFAULT_SETTINGS.pixelsPerWheelLine:V.deltaY=B.detail,Dt(R,V,B)}function Dt(R,B,V){var K=0,Te,ze=null;K=B.deltaY?B.deltaY<0?1:-1:0,Te={originalEvent:B,eventType:"wheel",pointerType:"mouse",isEmulated:B!==V},z(R,Te),R.scrollHandler&&!Te.preventGesture&&!Te.defaultPrevented&&(ze={eventSource:R,pointerType:"mouse",position:O(B,R.element),scroll:K,shift:B.shiftKey,isTouchEvent:!1,originalEvent:V,preventDefault:Te.preventDefault||Te.defaultPrevented,userData:R.userData},R.scrollHandler(ze)),Te.stopPropagation&&n.stopEvent(V),(ze&&ze.preventDefault||Te.preventDefault&&!Te.defaultPrevented)&&n.cancelEvent(V)}function ut(R,B){var V={id:n.MouseTracker.mousePointerId,type:"mouse"},K={originalEvent:B,eventType:"lostpointercapture",pointerType:"mouse",isEmulated:!1};z(R,K),B.target===R.element&&se(R,V,!1),K.stopPropagation&&n.stopEvent(B)}function wt(R,B){var V,K,Te=B.changedTouches.length,ze,ft=R.getActivePointersListByType("touch");V=n.now(),ft.getLength()>B.touches.length-Te&&n.console.warn("Tracked touch contact count doesn't match event.touches.length");var Ft={originalEvent:B,eventType:"pointerdown",pointerType:"touch",isEmulated:!1};for(z(R,Ft),K=0;K<Te;K++)ze={id:B.changedTouches[K].identifier,type:"touch",isPrimary:ft.getLength()===0,currentPos:W(B.changedTouches[K]),currentTime:V},ye(R,Ft,ze),nt(R,Ft,ze,0),se(R,ze,!0);Ft.preventDefault&&!Ft.defaultPrevented&&n.cancelEvent(B),Ft.stopPropagation&&n.stopEvent(B)}function jt(R,B){var V,K,Te=B.changedTouches.length,ze;V=n.now();var ft={originalEvent:B,eventType:"pointerup",pointerType:"touch",isEmulated:!1};for(z(R,ft),K=0;K<Te;K++)ze={id:B.changedTouches[K].identifier,type:"touch",currentPos:W(B.changedTouches[K]),currentTime:V},Ct(R,ft,ze,0),se(R,ze,!1),ge(R,ft,ze);ft.preventDefault&&!ft.defaultPrevented&&n.cancelEvent(B),ft.stopPropagation&&n.stopEvent(B)}function at(R,B){var V,K,Te=B.changedTouches.length,ze;V=n.now();var ft={originalEvent:B,eventType:"pointermove",pointerType:"touch",isEmulated:!1};for(z(R,ft),K=0;K<Te;K++)ze={id:B.changedTouches[K].identifier,type:"touch",currentPos:W(B.changedTouches[K]),currentTime:V},yt(R,ft,ze);ft.preventDefault&&!ft.defaultPrevented&&n.cancelEvent(B),ft.stopPropagation&&n.stopEvent(B)}function Ot(R,B){var V=B.changedTouches.length,K,Te,ze={originalEvent:B,eventType:"pointercancel",pointerType:"touch",isEmulated:!1};for(z(R,ze),K=0;K<V;K++)Te={id:B.changedTouches[K].identifier,type:"touch"},rt(R,ze,Te);ze.stopPropagation&&n.stopEvent(B)}function Jt(R,B){return n.eventIsCanceled(B)||B.preventDefault(),!1}function kt(R,B){return n.eventIsCanceled(B)||B.preventDefault(),!1}function ei(R,B){var V={originalEvent:B,eventType:"gotpointercapture",pointerType:k(B),isEmulated:!1};z(R,V),B.target===R.element&&se(R,{id:B.pointerId,type:k(B)},!0),V.stopPropagation&&n.stopEvent(B)}function ti(R,B){var V={originalEvent:B,eventType:"lostpointercapture",pointerType:k(B),isEmulated:!1};z(R,V),B.target===R.element&&se(R,{id:B.pointerId,type:k(B)},!1),V.stopPropagation&&n.stopEvent(B)}function mt(R,B){var V={id:I(B),type:k(B),isPrimary:G(B),currentPos:W(B),currentTime:n.now()},K={originalEvent:B,eventType:"pointerenter",pointerType:V.type,isEmulated:!1};z(R,K),ye(R,K,V)}function Yt(R,B){var V={id:I(B),type:k(B),isPrimary:G(B),currentPos:W(B),currentTime:n.now()},K={originalEvent:B,eventType:"pointerleave",pointerType:V.type,isEmulated:!1};z(R,K),ge(R,K,V)}function Xe(R,B){var V={id:I(B),type:k(B),isPrimary:G(B),currentPos:W(B),currentTime:n.now()},K={originalEvent:B,eventType:"pointerover",pointerType:V.type,isEmulated:!1};z(R,K),Ie(R,K,V),K.preventDefault&&!K.defaultPrevented&&n.cancelEvent(B),K.stopPropagation&&n.stopEvent(B)}function ni(R,B){var V={id:I(B),type:k(B),isPrimary:G(B),currentPos:W(B),currentTime:n.now()},K={originalEvent:B,eventType:"pointerout",pointerType:V.type,isEmulated:!1};z(R,K),fe(R,K,V),K.preventDefault&&!K.defaultPrevented&&n.cancelEvent(B),K.stopPropagation&&n.stopEvent(B)}function Ve(R,B){var V={id:I(B),type:k(B),isPrimary:G(B),currentPos:W(B),currentTime:n.now()},K=n.MouseTracker.havePointerEvents&&V.type==="touch",Te={originalEvent:B,eventType:"pointerdown",pointerType:V.type,isEmulated:!1};z(R,Te),nt(R,Te,V,B.button),Te.preventDefault&&!Te.defaultPrevented&&n.cancelEvent(B),Te.stopPropagation&&n.stopEvent(B),Te.shouldCapture&&(K?se(R,V,!0):_(R,V))}function Zt(R,B){It(R,B)}function Qt(R,B){var V=R.getActivePointersListByType(k(B));V.getById(B.pointerId)&&It(R,B),n.stopEvent(B)}function It(R,B){var V;V={id:I(B),type:k(B),isPrimary:G(B),currentPos:W(B),currentTime:n.now()};var K={originalEvent:B,eventType:"pointerup",pointerType:V.type,isEmulated:!1};z(R,K),Ct(R,K,V,B.button),K.preventDefault&&!K.defaultPrevented&&n.cancelEvent(B),K.stopPropagation&&n.stopEvent(B),K.shouldReleaseCapture&&(B.target===R.element?T(R,V):se(R,V,!1))}function Xt(R,B){Rt(R,B)}function We(R,B){var V=R.getActivePointersListByType(k(B));V.getById(B.pointerId)&&Rt(R,B),n.stopEvent(B)}function Rt(R,B){var V={id:I(B),type:k(B),isPrimary:G(B),currentPos:W(B),currentTime:n.now()},K={originalEvent:B,eventType:"pointermove",pointerType:V.type,isEmulated:!1};z(R,K),yt(R,K,V),K.preventDefault&&!K.defaultPrevented&&n.cancelEvent(B),K.stopPropagation&&n.stopEvent(B)}function Bt(R,B){var V={id:B.pointerId,type:k(B)},K={originalEvent:B,eventType:"pointercancel",pointerType:V.type,isEmulated:!1};z(R,K),rt(R,K,V),K.stopPropagation&&n.stopEvent(B)}function At(R,B){return B.speed=0,B.direction=0,B.contactPos=B.currentPos,B.contactTime=B.currentTime,B.lastPos=B.currentPos,B.lastTime=B.currentTime,R.add(B)}function St(R,B,V){var K,Te=B.getById(V.id);return Te?(Te.captured&&(n.console.warn("stopTrackingPointer() called on captured pointer"),T(R,Te)),B.removeContact(),K=B.removeById(V.id)):K=B.getLength(),K}function C(R,B){switch(B.eventType){case"pointermove":B.isStoppable=!0,B.isCancelable=!0,B.preventDefault=!1,B.preventGesture=!R.hasGestureHandlers,B.stopPropagation=!1;break;case"pointerover":case"pointerout":case"contextmenu":case"keydown":case"keyup":case"keypress":B.isStoppable=!0,B.isCancelable=!0,B.preventDefault=!1,B.preventGesture=!1,B.stopPropagation=!1;break;case"pointerdown":B.isStoppable=!0,B.isCancelable=!0,B.preventDefault=!1,B.preventGesture=!R.hasGestureHandlers,B.stopPropagation=!1;break;case"pointerup":B.isStoppable=!0,B.isCancelable=!0,B.preventDefault=!1,B.preventGesture=!R.hasGestureHandlers,B.stopPropagation=!1;break;case"wheel":B.isStoppable=!0,B.isCancelable=!0,B.preventDefault=!1,B.preventGesture=!R.hasScrollHandler,B.stopPropagation=!1;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":B.isStoppable=!0,B.isCancelable=!1,B.preventDefault=!1,B.preventGesture=!1,B.stopPropagation=!1;break;case"click":B.isStoppable=!0,B.isCancelable=!0,B.preventDefault=!!R.clickHandler,B.preventGesture=!1,B.stopPropagation=!1;break;case"dblclick":B.isStoppable=!0,B.isCancelable=!0,B.preventDefault=!!R.dblClickHandler,B.preventGesture=!1,B.stopPropagation=!1;break;case"focus":case"blur":case"pointerenter":case"pointerleave":default:B.isStoppable=!1,B.isCancelable=!1,B.preventDefault=!1,B.preventGesture=!1,B.stopPropagation=!1;break}}function z(R,B){B.eventSource=R,B.eventPhase=B.originalEvent&&typeof B.originalEvent.eventPhase<"u"?B.originalEvent.eventPhase:0,B.defaultPrevented=n.eventIsCanceled(B.originalEvent),B.shouldCapture=!1,B.shouldReleaseCapture=!1,B.userData=R.userData,C(R,B),R.preProcessEventHandler&&R.preProcessEventHandler(B)}function se(R,B,V){var K=R.getActivePointersListByType(B.type),Te=K.getById(B.id);Te?V&&!Te.captured?(Te.captured=!0,K.captureCount++):!V&&Te.captured&&(Te.captured=!1,K.captureCount--,K.captureCount<0&&(K.captureCount=0,n.console.warn("updatePointerCaptured() - pointsList.captureCount went negative"))):n.console.warn("updatePointerCaptured() called on untracked pointer")}function ye(R,B,V){var K=R.getActivePointersListByType(V.type),Te;Te=K.getById(V.id),Te?(Te.insideElement=!0,Te.lastPos=Te.currentPos,Te.lastTime=Te.currentTime,Te.currentPos=V.currentPos,Te.currentTime=V.currentTime,V=Te):(V.captured=!1,V.insideElementPressed=!1,V.insideElement=!0,At(K,V)),R.enterHandler&&R.enterHandler({eventSource:R,pointerType:V.type,position:ee(V.currentPos,R.element),buttons:K.buttons,pointers:R.getActivePointerCount(),insideElementPressed:V.insideElementPressed,buttonDownAny:K.buttons!==0,isTouchEvent:V.type==="touch",originalEvent:B.originalEvent,userData:R.userData})}function ge(R,B,V){var K=R.getActivePointersListByType(V.type),Te,ze;Te=K.getById(V.id),Te?(Te.captured?(Te.insideElement=!1,Te.lastPos=Te.currentPos,Te.lastTime=Te.currentTime,Te.currentPos=V.currentPos,Te.currentTime=V.currentTime):St(R,K,Te),V=Te):(V.captured=!1,V.insideElementPressed=!1),(R.leaveHandler||R.exitHandler)&&(ze={eventSource:R,pointerType:V.type,position:V.currentPos&&ee(V.currentPos,R.element),buttons:K.buttons,pointers:R.getActivePointerCount(),insideElementPressed:V.insideElementPressed,buttonDownAny:K.buttons!==0,isTouchEvent:V.type==="touch",originalEvent:B.originalEvent,userData:R.userData},R.leaveHandler&&R.leaveHandler(ze),R.exitHandler&&R.exitHandler(ze))}function Ie(R,B,V){var K,Te;K=R.getActivePointersListByType(V.type),Te=K.getById(V.id),Te?V=Te:(V.captured=!1,V.insideElementPressed=!1),R.overHandler&&R.overHandler({eventSource:R,pointerType:V.type,position:ee(V.currentPos,R.element),buttons:K.buttons,pointers:R.getActivePointerCount(),insideElementPressed:V.insideElementPressed,buttonDownAny:K.buttons!==0,isTouchEvent:V.type==="touch",originalEvent:B.originalEvent,userData:R.userData})}function fe(R,B,V){var K,Te;K=R.getActivePointersListByType(V.type),Te=K.getById(V.id),Te?V=Te:(V.captured=!1,V.insideElementPressed=!1),R.outHandler&&R.outHandler({eventSource:R,pointerType:V.type,position:V.currentPos&&ee(V.currentPos,R.element),buttons:K.buttons,pointers:R.getActivePointerCount(),insideElementPressed:V.insideElementPressed,buttonDownAny:K.buttons!==0,isTouchEvent:V.type==="touch",originalEvent:B.originalEvent,userData:R.userData})}function nt(R,B,V,K){var Te=o[R.hash],ze=R.getActivePointersListByType(V.type),ft;if(typeof B.originalEvent.buttons<"u"?ze.buttons=B.originalEvent.buttons:K===0?ze.buttons|=1:K===1?ze.buttons|=4:K===2?ze.buttons|=2:K===3?ze.buttons|=8:K===4?ze.buttons|=16:K===5&&(ze.buttons|=32),K!==0){B.shouldCapture=!1,B.shouldReleaseCapture=!1,R.nonPrimaryPressHandler&&!B.preventGesture&&!B.defaultPrevented&&(B.preventDefault=!0,R.nonPrimaryPressHandler({eventSource:R,pointerType:V.type,position:ee(V.currentPos,R.element),button:K,buttons:ze.buttons,isTouchEvent:V.type==="touch",originalEvent:B.originalEvent,userData:R.userData}));return}ft=ze.getById(V.id),ft?(ft.insideElementPressed=!0,ft.insideElement=!0,ft.originalTarget=B.originalEvent.target,ft.contactPos=V.currentPos,ft.contactTime=V.currentTime,ft.lastPos=ft.currentPos,ft.lastTime=ft.currentTime,ft.currentPos=V.currentPos,ft.currentTime=V.currentTime,V=ft):(V.captured=!1,V.insideElementPressed=!0,V.insideElement=!0,V.originalTarget=B.originalEvent.target,At(ze,V)),ze.addContact(),!B.preventGesture&&!B.defaultPrevented?(B.shouldCapture=!0,B.shouldReleaseCapture=!1,B.preventDefault=!0,(R.dragHandler||R.dragEndHandler||R.pinchHandler)&&n.MouseTracker.gesturePointVelocityTracker.addPoint(R,V),ze.contacts===1?R.pressHandler&&!B.preventGesture&&R.pressHandler({eventSource:R,pointerType:V.type,position:ee(V.contactPos,R.element),buttons:ze.buttons,isTouchEvent:V.type==="touch",originalEvent:B.originalEvent,userData:R.userData}):ze.contacts===2&&R.pinchHandler&&V.type==="touch"&&(Te.pinchGPoints=ze.asArray(),Te.lastPinchDist=Te.currentPinchDist=Te.pinchGPoints[0].currentPos.distanceTo(Te.pinchGPoints[1].currentPos),Te.lastPinchCenter=Te.currentPinchCenter=ve(Te.pinchGPoints[0].currentPos,Te.pinchGPoints[1].currentPos))):(B.shouldCapture=!1,B.shouldReleaseCapture=!1)}function Ct(R,B,V,K){var Te=o[R.hash],ze=R.getActivePointersListByType(V.type),ft,Ft,et,_t=!1,Et;if(typeof B.originalEvent.buttons<"u"?ze.buttons=B.originalEvent.buttons:K===0?ze.buttons^=-2:K===1?ze.buttons^=-5:K===2?ze.buttons^=-3:K===3?ze.buttons^=-9:K===4?ze.buttons^=-17:K===5&&(ze.buttons^=-33),B.shouldCapture=!1,K!==0){B.shouldReleaseCapture=!1,R.nonPrimaryReleaseHandler&&!B.preventGesture&&!B.defaultPrevented&&(B.preventDefault=!0,R.nonPrimaryReleaseHandler({eventSource:R,pointerType:V.type,position:ee(V.currentPos,R.element),button:K,buttons:ze.buttons,isTouchEvent:V.type==="touch",originalEvent:B.originalEvent,userData:R.userData}));return}et=ze.getById(V.id),et?(ze.removeContact(),et.captured&&(_t=!0),et.lastPos=et.currentPos,et.lastTime=et.currentTime,et.currentPos=V.currentPos,et.currentTime=V.currentTime,et.insideElement||St(R,ze,et),ft=et.currentPos,Ft=et.currentTime):(V.captured=!1,V.insideElementPressed=!1,V.insideElement=!0,At(ze,V),et=V),!B.preventGesture&&!B.defaultPrevented&&(_t?(B.shouldReleaseCapture=!0,B.preventDefault=!0,(R.dragHandler||R.dragEndHandler||R.pinchHandler)&&n.MouseTracker.gesturePointVelocityTracker.removePoint(R,et),ze.contacts===0?(R.releaseHandler&&ft&&R.releaseHandler({eventSource:R,pointerType:et.type,position:ee(ft,R.element),buttons:ze.buttons,insideElementPressed:et.insideElementPressed,insideElementReleased:et.insideElement,isTouchEvent:et.type==="touch",originalEvent:B.originalEvent,userData:R.userData}),R.dragEndHandler&&Te.sentDragEvent&&R.dragEndHandler({eventSource:R,pointerType:et.type,position:ee(et.currentPos,R.element),speed:et.speed,direction:et.direction,shift:B.originalEvent.shiftKey,isTouchEvent:et.type==="touch",originalEvent:B.originalEvent,userData:R.userData}),Te.sentDragEvent=!1,(R.clickHandler||R.dblClickHandler)&&et.insideElement&&(Et=Ft-et.contactTime<=R.clickTimeThreshold&&et.contactPos.distanceTo(ft)<=R.clickDistThreshold,R.clickHandler&&R.clickHandler({eventSource:R,pointerType:et.type,position:ee(et.currentPos,R.element),quick:Et,shift:B.originalEvent.shiftKey,isTouchEvent:et.type==="touch",originalEvent:B.originalEvent,originalTarget:et.originalTarget,userData:R.userData}),R.dblClickHandler&&Et&&(ze.clicks++,ze.clicks===1?(Te.lastClickPos=ft,Te.dblClickTimeOut=setTimeout(function(){ze.clicks=0},R.dblClickTimeThreshold)):ze.clicks===2&&(clearTimeout(Te.dblClickTimeOut),ze.clicks=0,Te.lastClickPos.distanceTo(ft)<=R.dblClickDistThreshold&&R.dblClickHandler({eventSource:R,pointerType:et.type,position:ee(et.currentPos,R.element),shift:B.originalEvent.shiftKey,isTouchEvent:et.type==="touch",originalEvent:B.originalEvent,userData:R.userData}),Te.lastClickPos=null)))):ze.contacts===2&&R.pinchHandler&&et.type==="touch"&&(Te.pinchGPoints=ze.asArray(),Te.lastPinchDist=Te.currentPinchDist=Te.pinchGPoints[0].currentPos.distanceTo(Te.pinchGPoints[1].currentPos),Te.lastPinchCenter=Te.currentPinchCenter=ve(Te.pinchGPoints[0].currentPos,Te.pinchGPoints[1].currentPos))):(B.shouldReleaseCapture=!1,R.releaseHandler&&ft&&(R.releaseHandler({eventSource:R,pointerType:et.type,position:ee(ft,R.element),buttons:ze.buttons,insideElementPressed:et.insideElementPressed,insideElementReleased:et.insideElement,isTouchEvent:et.type==="touch",originalEvent:B.originalEvent,userData:R.userData}),B.preventDefault=!0)))}function yt(R,B,V){var K=o[R.hash],Te=R.getActivePointersListByType(V.type),ze,ft,Ft;if(typeof B.originalEvent.buttons<"u"&&(Te.buttons=B.originalEvent.buttons),ze=Te.getById(V.id),ze)ze.lastPos=ze.currentPos,ze.lastTime=ze.currentTime,ze.currentPos=V.currentPos,ze.currentTime=V.currentTime;else return;B.shouldCapture=!1,B.shouldReleaseCapture=!1,R.stopHandler&&V.type==="mouse"&&(clearTimeout(R.stopTimeOut),R.stopTimeOut=setTimeout(function(){Lt(R,B.originalEvent,V.type)},R.stopDelay)),Te.contacts===0?R.moveHandler&&R.moveHandler({eventSource:R,pointerType:V.type,position:ee(V.currentPos,R.element),buttons:Te.buttons,isTouchEvent:V.type==="touch",originalEvent:B.originalEvent,userData:R.userData}):Te.contacts===1?(R.moveHandler&&(ze=Te.asArray()[0],R.moveHandler({eventSource:R,pointerType:ze.type,position:ee(ze.currentPos,R.element),buttons:Te.buttons,isTouchEvent:ze.type==="touch",originalEvent:B.originalEvent,userData:R.userData})),R.dragHandler&&!B.preventGesture&&!B.defaultPrevented&&(ze=Te.asArray()[0],Ft=ze.currentPos.minus(ze.lastPos),R.dragHandler({eventSource:R,pointerType:ze.type,position:ee(ze.currentPos,R.element),buttons:Te.buttons,delta:Ft,speed:ze.speed,direction:ze.direction,shift:B.originalEvent.shiftKey,isTouchEvent:ze.type==="touch",originalEvent:B.originalEvent,userData:R.userData}),B.preventDefault=!0,K.sentDragEvent=!0)):Te.contacts===2&&(R.moveHandler&&(ft=Te.asArray(),R.moveHandler({eventSource:R,pointerType:ft[0].type,position:ee(ve(ft[0].currentPos,ft[1].currentPos),R.element),buttons:Te.buttons,isTouchEvent:ft[0].type==="touch",originalEvent:B.originalEvent,userData:R.userData})),R.pinchHandler&&V.type==="touch"&&!B.preventGesture&&!B.defaultPrevented&&(Ft=K.pinchGPoints[0].currentPos.distanceTo(K.pinchGPoints[1].currentPos),Ft!==K.currentPinchDist&&(K.lastPinchDist=K.currentPinchDist,K.currentPinchDist=Ft,K.lastPinchCenter=K.currentPinchCenter,K.currentPinchCenter=ve(K.pinchGPoints[0].currentPos,K.pinchGPoints[1].currentPos),R.pinchHandler({eventSource:R,pointerType:"touch",gesturePoints:K.pinchGPoints,lastCenter:ee(K.lastPinchCenter,R.element),center:ee(K.currentPinchCenter,R.element),lastDistance:K.lastPinchDist,distance:K.currentPinchDist,shift:B.originalEvent.shiftKey,originalEvent:B.originalEvent,userData:R.userData}),B.preventDefault=!0)))}function rt(R,B,V){var K=R.getActivePointersListByType(V.type),Te;Te=K.getById(V.id),Te&&St(R,K,Te)}function Lt(R,B,V){R.stopHandler&&R.stopHandler({eventSource:R,pointerType:V,position:O(B,R.element),buttons:R.getActivePointersListByType(V).buttons,isTouchEvent:V==="touch",originalEvent:B,userData:R.userData})}}(Pe),function(n){n.ControlAnchor={NONE:0,TOP_LEFT:1,TOP_RIGHT:2,BOTTOM_RIGHT:3,BOTTOM_LEFT:4,ABSOLUTE:5},n.Control=function(o,d,c){var v=o.parentNode;typeof d=="number"&&(n.console.error("Passing an anchor directly into the OpenSeadragon.Control constructor is deprecated; please use an options object instead. Support for this deprecated variant is scheduled for removal in December 2013"),d={anchor:d}),d.attachToViewer=typeof d.attachToViewer>"u"?!0:d.attachToViewer,this.autoFade=typeof d.autoFade>"u"?!0:d.autoFade,this.element=o,this.anchor=d.anchor,this.container=c,this.anchor===n.ControlAnchor.ABSOLUTE?(this.wrapper=n.makeNeutralElement("div"),this.wrapper.style.position="absolute",this.wrapper.style.top=typeof d.top=="number"?d.top+"px":d.top,this.wrapper.style.left=typeof d.left=="number"?d.left+"px":d.left,this.wrapper.style.height=typeof d.height=="number"?d.height+"px":d.height,this.wrapper.style.width=typeof d.width=="number"?d.width+"px":d.width,this.wrapper.style.margin="0px",this.wrapper.style.padding="0px",this.element.style.position="relative",this.element.style.top="0px",this.element.style.left="0px",this.element.style.height="100%",this.element.style.width="100%"):(this.wrapper=n.makeNeutralElement("div"),this.wrapper.style.display="inline-block",this.anchor===n.ControlAnchor.NONE&&(this.wrapper.style.width=this.wrapper.style.height="100%")),this.wrapper.appendChild(this.element),d.attachToViewer?this.anchor===n.ControlAnchor.TOP_RIGHT||this.anchor===n.ControlAnchor.BOTTOM_RIGHT?this.container.insertBefore(this.wrapper,this.container.firstChild):this.container.appendChild(this.wrapper):v.appendChild(this.wrapper)},n.Control.prototype={destroy:function(){this.wrapper.removeChild(this.element),this.anchor!==n.ControlAnchor.NONE&&this.container.removeChild(this.wrapper)},isVisible:function(){return this.wrapper.style.display!=="none"},setVisible:function(o){this.wrapper.style.display=o?this.anchor===n.ControlAnchor.ABSOLUTE?"block":"inline-block":"none"},setOpacity:function(o){n.setElementOpacity(this.wrapper,o,!0)}}}(Pe),function(n){n.ControlDock=function(d){var c=["topleft","topright","bottomright","bottomleft"],v,y;for(n.extend(!0,this,{id:"controldock-"+n.now()+"-"+Math.floor(Math.random()*1e6),container:n.makeNeutralElement("div"),controls:[]},d),this.container.onsubmit=function(){return!1},this.element&&(this.element=n.getElement(this.element),this.element.appendChild(this.container),n.getElementStyle(this.element).position==="static"&&(this.element.style.position="relative"),this.container.style.width="100%",this.container.style.height="100%"),y=0;y<c.length;y++)v=c[y],this.controls[v]=n.makeNeutralElement("div"),this.controls[v].style.position="absolute",v.match("left")&&(this.controls[v].style.left="0px"),v.match("right")&&(this.controls[v].style.right="0px"),v.match("top")&&(this.controls[v].style.top="0px"),v.match("bottom")&&(this.controls[v].style.bottom="0px");this.container.appendChild(this.controls.topleft),this.container.appendChild(this.controls.topright),this.container.appendChild(this.controls.bottomright),this.container.appendChild(this.controls.bottomleft)},n.ControlDock.prototype={addControl:function(d,c){d=n.getElement(d);var v=null;if(!(o(this,d)>=0)){switch(c.anchor){case n.ControlAnchor.TOP_RIGHT:v=this.controls.topright,d.style.position="relative",d.style.paddingRight="0px",d.style.paddingTop="0px";break;case n.ControlAnchor.BOTTOM_RIGHT:v=this.controls.bottomright,d.style.position="relative",d.style.paddingRight="0px",d.style.paddingBottom="0px";break;case n.ControlAnchor.BOTTOM_LEFT:v=this.controls.bottomleft,d.style.position="relative",d.style.paddingLeft="0px",d.style.paddingBottom="0px";break;case n.ControlAnchor.TOP_LEFT:v=this.controls.topleft,d.style.position="relative",d.style.paddingLeft="0px",d.style.paddingTop="0px";break;case n.ControlAnchor.ABSOLUTE:v=this.container,d.style.margin="0px",d.style.padding="0px";break;default:case n.ControlAnchor.NONE:v=this.container,d.style.margin="0px",d.style.padding="0px";break}this.controls.push(new n.Control(d,c,v)),d.style.display="inline-block"}},removeControl:function(d){d=n.getElement(d);var c=o(this,d);return c>=0&&(this.controls[c].destroy(),this.controls.splice(c,1)),this},clearControls:function(){for(;this.controls.length>0;)this.controls.pop().destroy();return this},areControlsEnabled:function(){var d;for(d=this.controls.length-1;d>=0;d--)if(this.controls[d].isVisible())return!0;return!1},setControlsEnabled:function(d){var c;for(c=this.controls.length-1;c>=0;c--)this.controls[c].setVisible(d);return this}};function o(d,c){var v=d.controls,y;for(y=v.length-1;y>=0;y--)if(v[y].element===c)return y;return-1}}(Pe),function(n){n.Placement=n.freezeObject({CENTER:0,TOP_LEFT:1,TOP:2,TOP_RIGHT:3,RIGHT:4,BOTTOM_RIGHT:5,BOTTOM:6,BOTTOM_LEFT:7,LEFT:8,properties:{0:{isLeft:!1,isHorizontallyCentered:!0,isRight:!1,isTop:!1,isVerticallyCentered:!0,isBottom:!1},1:{isLeft:!0,isHorizontallyCentered:!1,isRight:!1,isTop:!0,isVerticallyCentered:!1,isBottom:!1},2:{isLeft:!1,isHorizontallyCentered:!0,isRight:!1,isTop:!0,isVerticallyCentered:!1,isBottom:!1},3:{isLeft:!1,isHorizontallyCentered:!1,isRight:!0,isTop:!0,isVerticallyCentered:!1,isBottom:!1},4:{isLeft:!1,isHorizontallyCentered:!1,isRight:!0,isTop:!1,isVerticallyCentered:!0,isBottom:!1},5:{isLeft:!1,isHorizontallyCentered:!1,isRight:!0,isTop:!1,isVerticallyCentered:!1,isBottom:!0},6:{isLeft:!1,isHorizontallyCentered:!0,isRight:!1,isTop:!1,isVerticallyCentered:!1,isBottom:!0},7:{isLeft:!0,isHorizontallyCentered:!1,isRight:!1,isTop:!1,isVerticallyCentered:!1,isBottom:!0},8:{isLeft:!0,isHorizontallyCentered:!1,isRight:!1,isTop:!1,isVerticallyCentered:!0,isBottom:!1}}})}(Pe),function(n){var o={},d=1;n.Viewer=function(C){var z=arguments,se=this,ye;n.isPlainObject(C)||(C={id:z[0],xmlPath:z.length>1?z[1]:void 0,prefixUrl:z.length>2?z[2]:void 0,controls:z.length>3?z[3]:void 0,overlays:z.length>4?z[4]:void 0}),C.config&&(n.extend(!0,C,C.config),delete C.config);let ge=["useCanvas"];if(C.drawerOptions=Object.assign({},ge.reduce((fe,nt)=>(fe[nt]=C[nt],delete C[nt],fe),{}),C.drawerOptions),n.extend(!0,this,{id:C.id,hash:C.hash||d++,initialPage:0,element:null,container:null,canvas:null,overlays:[],overlaysContainer:null,previousBody:[],customControls:[],source:null,drawer:null,world:null,viewport:null,navigator:null,collectionViewport:null,collectionDrawer:null,navImages:null,buttonGroup:null,profiler:null},n.DEFAULT_SETTINGS,C),typeof this.hash>"u")throw new Error("A hash must be defined, either by specifying options.id or options.hash.");typeof o[this.hash]<"u"&&n.console.warn("Hash "+this.hash+" has already been used."),o[this.hash]={fsBoundsDelta:new n.Point(1,1),prevContainerSize:null,animating:!1,forceRedraw:!1,needsResize:!1,forceResize:!1,mouseInside:!1,group:null,zooming:!1,zoomFactor:null,lastZoomTime:null,fullPage:!1,onfullscreenchange:null,lastClickTime:null,draggingToZoom:!1},this._sequenceIndex=0,this._firstOpen=!0,this._updateRequestId=null,this._loadQueue=[],this.currentOverlays=[],this._updatePixelDensityRatioBind=null,this._lastScrollTime=n.now(),n.EventSource.call(this),this.addHandler("open-failed",function(fe){var nt=n.getString("Errors.OpenFailed",fe.eventSource,fe.message);se._showMessage(nt)}),n.ControlDock.call(this,C),this.xmlPath&&(this.tileSources=[this.xmlPath]),this.element=this.element||document.getElementById(this.id),this.canvas=n.makeNeutralElement("div"),this.canvas.className="openseadragon-canvas",function(fe){fe.width="100%",fe.height="100%",fe.overflow="hidden",fe.position="absolute",fe.top="0px",fe.left="0px"}(this.canvas.style),n.setElementTouchActionNone(this.canvas),C.tabIndex!==""&&(this.canvas.tabIndex=C.tabIndex===void 0?0:C.tabIndex),this.container.className="openseadragon-container",function(fe){fe.width="100%",fe.height="100%",fe.position="relative",fe.overflow="hidden",fe.left="0px",fe.top="0px",fe.textAlign="left"}(this.container.style),n.setElementTouchActionNone(this.container),this.container.insertBefore(this.canvas,this.container.firstChild),this.element.appendChild(this.container),this.bodyWidth=document.body.style.width,this.bodyHeight=document.body.style.height,this.bodyOverflow=document.body.style.overflow,this.docOverflow=document.documentElement.style.overflow,this.innerTracker=new n.MouseTracker({userData:"Viewer.innerTracker",element:this.canvas,startDisabled:!this.mouseNavEnabled,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,dblClickTimeThreshold:this.dblClickTimeThreshold,dblClickDistThreshold:this.dblClickDistThreshold,contextMenuHandler:n.delegate(this,O),keyDownHandler:n.delegate(this,ee),keyHandler:n.delegate(this,ve),clickHandler:n.delegate(this,we),dblClickHandler:n.delegate(this,ot),dragHandler:n.delegate(this,Ge),dragEndHandler:n.delegate(this,je),enterHandler:n.delegate(this,xt),leaveHandler:n.delegate(this,Q),pressHandler:n.delegate(this,vt),releaseHandler:n.delegate(this,Ne),nonPrimaryPressHandler:n.delegate(this,dt),nonPrimaryReleaseHandler:n.delegate(this,ke),scrollHandler:n.delegate(this,jt),pinchHandler:n.delegate(this,Dt),focusHandler:n.delegate(this,ut),blurHandler:n.delegate(this,wt)}),this.outerTracker=new n.MouseTracker({userData:"Viewer.outerTracker",element:this.container,startDisabled:!this.mouseNavEnabled,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,dblClickTimeThreshold:this.dblClickTimeThreshold,dblClickDistThreshold:this.dblClickDistThreshold,enterHandler:n.delegate(this,at),leaveHandler:n.delegate(this,Ot)}),this.toolbar&&(this.toolbar=new n.ControlDock({element:this.toolbar})),this.bindStandardControls(),o[this.hash].prevContainerSize=c(this.container),window.ResizeObserver?(this._autoResizePolling=!1,this._resizeObserver=new ResizeObserver(function(){o[se.hash].needsResize=!0}),this._resizeObserver.observe(this.container,{})):this._autoResizePolling=!0,this.world=new n.World({viewer:this}),this.world.addHandler("add-item",function(fe){se.source=se.world.getItemAt(0).source,o[se.hash].forceRedraw=!0,se._updateRequestId||(se._updateRequestId=w(se,Jt))}),this.world.addHandler("remove-item",function(fe){se.world.getItemCount()?se.source=se.world.getItemAt(0).source:se.source=null,o[se.hash].forceRedraw=!0}),this.world.addHandler("metrics-change",function(fe){se.viewport&&se.viewport._setContentBounds(se.world.getHomeBounds(),se.world.getContentFactor())}),this.world.addHandler("item-index-change",function(fe){se.source=se.world.getItemAt(0).source}),this.viewport=new n.Viewport({containerSize:o[this.hash].prevContainerSize,springStiffness:this.springStiffness,animationTime:this.animationTime,minZoomImageRatio:this.minZoomImageRatio,maxZoomPixelRatio:this.maxZoomPixelRatio,visibilityRatio:this.visibilityRatio,wrapHorizontal:this.wrapHorizontal,wrapVertical:this.wrapVertical,defaultZoomLevel:this.defaultZoomLevel,minZoomLevel:this.minZoomLevel,maxZoomLevel:this.maxZoomLevel,viewer:this,degrees:this.degrees,flipped:this.flipped,overlayPreserveContentDirection:this.overlayPreserveContentDirection,navigatorRotate:this.navigatorRotate,homeFillsViewer:this.homeFillsViewer,margins:this.viewportMargins,silenceMultiImageWarnings:this.silenceMultiImageWarnings}),this.viewport._setContentBounds(this.world.getHomeBounds(),this.world.getContentFactor()),this.imageLoader=new n.ImageLoader({jobLimit:this.imageLoaderLimit,timeout:C.timeout,tileRetryMax:this.tileRetryMax,tileRetryDelay:this.tileRetryDelay}),this.tileCache=new n.TileCache({maxImageCacheCount:this.maxImageCacheCount}),Object.prototype.hasOwnProperty.call(this.drawerOptions,"useCanvas")&&(n.console.error('useCanvas is deprecated, use the "drawer" option to indicate preferred drawer(s)'),this.drawerOptions.useCanvas||(this.drawer=n.HTMLDrawer),delete this.drawerOptions.useCanvas);let Ie=Array.isArray(this.drawer)?this.drawer:[this.drawer];Ie.length===0&&(Ie=[n.DEFAULT_SETTINGS.drawer].flat(),n.console.warn("No valid drawers were selected. Using the default value.")),this.drawer=null;for(const fe of Ie)if(this.requestDrawer(fe,{mainDrawer:!0,redrawImmediately:!1}))break;if(!this.drawer)throw n.console.error("No drawer could be created!"),"Error with creating the selected drawer(s)";for(this.drawer.setImageSmoothingEnabled(this.imageSmoothingEnabled),this.overlaysContainer=n.makeNeutralElement("div"),this.canvas.appendChild(this.overlaysContainer),this.drawer.canRotate()||(this.rotateLeft&&(ye=this.buttonGroup.buttons.indexOf(this.rotateLeft),this.buttonGroup.buttons.splice(ye,1),this.buttonGroup.element.removeChild(this.rotateLeft.element)),this.rotateRight&&(ye=this.buttonGroup.buttons.indexOf(this.rotateRight),this.buttonGroup.buttons.splice(ye,1),this.buttonGroup.element.removeChild(this.rotateRight.element))),this._addUpdatePixelDensityRatioEvent(),this.showNavigator&&(this.navigator=new n.Navigator({element:this.navigatorElement,id:this.navigatorId,position:this.navigatorPosition,sizeRatio:this.navigatorSizeRatio,maintainSizeRatio:this.navigatorMaintainSizeRatio,top:this.navigatorTop,left:this.navigatorLeft,width:this.navigatorWidth,height:this.navigatorHeight,autoResize:this.navigatorAutoResize,autoFade:this.navigatorAutoFade,prefixUrl:this.prefixUrl,viewer:this,navigatorRotate:this.navigatorRotate,background:this.navigatorBackground,opacity:this.navigatorOpacity,borderColor:this.navigatorBorderColor,displayRegionColor:this.navigatorDisplayRegionColor,crossOriginPolicy:this.crossOriginPolicy,animationTime:this.animationTime,drawer:this.drawer.getType(),loadTilesWithAjax:this.loadTilesWithAjax,ajaxHeaders:this.ajaxHeaders,ajaxWithCredentials:this.ajaxWithCredentials})),this.sequenceMode&&this.bindSequenceControls(),this.tileSources&&this.open(this.tileSources),ye=0;ye<this.customControls.length;ye++)this.addControl(this.customControls[ye].id,{anchor:this.customControls[ye].anchor});n.requestAnimationFrame(function(){T(se)}),n._viewers.set(this.element,this)},n.extend(n.Viewer.prototype,n.EventSource.prototype,n.ControlDock.prototype,{isOpen:function(){return!!this.world.getItemCount()},openDzi:function(C){return n.console.error("[Viewer.openDzi] this function is deprecated; use Viewer.open() instead."),this.open(C)},openTileSource:function(C){return n.console.error("[Viewer.openTileSource] this function is deprecated; use Viewer.open() instead."),this.open(C)},get buttons(){return n.console.warn("Viewer.buttons is deprecated; Please use Viewer.buttonGroup"),this.buttonGroup},open:function(C,z){var se=this;if(this.close(),!C)return this;if(this.sequenceMode&&n.isArray(C))return this.referenceStrip&&(this.referenceStrip.destroy(),this.referenceStrip=null),typeof z<"u"&&!isNaN(z)&&(this.initialPage=z),this.tileSources=C,this._sequenceIndex=Math.max(0,Math.min(this.tileSources.length-1,this.initialPage)),this.tileSources.length&&(this.open(this.tileSources[this._sequenceIndex]),this.showReferenceStrip&&this.addReferenceStrip()),this._updateSequenceButtons(this._sequenceIndex),this;if(n.isArray(C)||(C=[C]),!C.length)return this;this._opening=!0;for(var ye=C.length,ge=0,Ie=0,fe,nt=function(){if(ge+Ie===ye)if(ge){(se._firstOpen||!se.preserveViewport)&&(se.viewport.goHome(!0),se.viewport.update()),se._firstOpen=!1;var rt=C[0];if(rt.tileSource&&(rt=rt.tileSource),se.overlays&&!se.preserveOverlays)for(var Lt=0;Lt<se.overlays.length;Lt++)se.currentOverlays[Lt]=y(se,se.overlays[Lt]);se._drawOverlays(),se._opening=!1,se.raiseEvent("open",{source:rt})}else se._opening=!1,se.raiseEvent("open-failed",fe)},Ct=function(rt){(!n.isPlainObject(rt)||!rt.tileSource)&&(rt={tileSource:rt}),rt.index!==void 0&&(n.console.error("[Viewer.open] setting indexes here is not supported; use addTiledImage instead"),delete rt.index),rt.collectionImmediately===void 0&&(rt.collectionImmediately=!0);var Lt=rt.success;rt.success=function(B){if(ge++,rt.tileSource.overlays)for(var V=0;V<rt.tileSource.overlays.length;V++)se.addOverlay(rt.tileSource.overlays[V]);Lt&&Lt(B),nt()};var R=rt.error;rt.error=function(B){Ie++,fe||(fe=B),R&&R(B),nt()},se.addTiledImage(rt)},yt=0;yt<C.length;yt++)Ct(C[yt]);return this},close:function(){return o[this.hash]?(this._opening=!1,this.navigator&&this.navigator.close(),this.preserveOverlays||(this.clearOverlays(),this.overlaysContainer.innerHTML=""),o[this.hash].animating=!1,this.world.removeAll(),this.imageLoader.clear(),this.raiseEvent("close"),this):this},destroy:function(){if(o[this.hash]){if(this.raiseEvent("before-destroy"),this._removeUpdatePixelDensityRatioEvent(),this.close(),this.clearOverlays(),this.overlaysContainer.innerHTML="",this._resizeObserver&&this._resizeObserver.disconnect(),this.referenceStrip&&(this.referenceStrip.destroy(),this.referenceStrip=null),this._updateRequestId!==null&&(n.cancelAnimationFrame(this._updateRequestId),this._updateRequestId=null),this.drawer&&this.drawer.destroy(),this.navigator&&(this.navigator.destroy(),o[this.navigator.hash]=null,delete o[this.navigator.hash],this.navigator=null),this.buttonGroup)this.buttonGroup.destroy();else if(this.customButtons)for(;this.customButtons.length;)this.customButtons.pop().destroy();if(this.paging&&this.paging.destroy(),this.element)for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.container.onsubmit=null,this.clearControls(),this.innerTracker&&this.innerTracker.destroy(),this.outerTracker&&this.outerTracker.destroy(),o[this.hash]=null,delete o[this.hash],this.canvas=null,this.container=null,n._viewers.delete(this.element),this.element=null,this.raiseEvent("destroy"),this.removeAllHandlers()}},requestDrawer(C,z){const se={mainDrawer:!0,redrawImmediately:!0,drawerOptions:null};z=n.extend(!0,se,z);const ye=z.mainDrawer,ge=z.redrawImmediately,Ie=z.drawerOptions,fe=this.drawer;let nt=null;if(C&&C.prototype instanceof n.DrawerBase?(nt=C,C="custom"):typeof C=="string"&&(nt=n.determineDrawer(C)),nt||n.console.warn("Unsupported drawer! Drawer must be an existing string type, or a class that extends OpenSeadragon.DrawerBase."),nt&&nt.isSupported()){fe&&ye&&fe.destroy();const Ct=new nt({viewer:this,viewport:this.viewport,element:this.canvas,debugGridColor:this.debugGridColor,options:Ie||this.drawerOptions[C]});return ye&&(this.drawer=Ct,ge&&this.forceRedraw()),Ct}return!1},isMouseNavEnabled:function(){return this.innerTracker.isTracking()},setMouseNavEnabled:function(C){return this.innerTracker.setTracking(C),this.outerTracker.setTracking(C),this.raiseEvent("mouse-enabled",{enabled:C}),this},areControlsEnabled:function(){var C=this.controls.length,z;for(z=0;z<this.controls.length;z++)C=C&&this.controls[z].isVisible();return C},setControlsEnabled:function(C){return C?k(this):T(this),this.raiseEvent("controls-enabled",{enabled:C}),this},setDebugMode:function(C){for(var z=0;z<this.world.getItemCount();z++)this.world.getItemAt(z).debugMode=C;this.debugMode=C,this.forceRedraw()},setAjaxHeaders:function(C,z){if(C===null&&(C={}),!n.isPlainObject(C)){console.error("[Viewer.setAjaxHeaders] Ignoring invalid headers, must be a plain object");return}if(z===void 0&&(z=!0),this.ajaxHeaders=C,z){for(var se=0;se<this.world.getItemCount();se++)this.world.getItemAt(se)._updateAjaxHeaders(!0);if(this.navigator&&this.navigator.setAjaxHeaders(this.ajaxHeaders,!0),this.referenceStrip&&this.referenceStrip.miniViewers)for(var ye in this.referenceStrip.miniViewers)this.referenceStrip.miniViewers[ye].setAjaxHeaders(this.ajaxHeaders,!0)}},addButton:function(C){this.buttonGroup.addButton(C)},isFullPage:function(){return o[this.hash]&&o[this.hash].fullPage},setFullPage:function(C){var z=document.body,se=z.style,ye=document.documentElement.style,ge=this,Ie,fe;if(C===this.isFullPage())return this;var nt={fullPage:C,preventDefaultAction:!1};if(this.raiseEvent("pre-full-page",nt),nt.preventDefaultAction)return this;if(C&&this.element){for(this.elementSize=n.getElementSize(this.element),this.pageScroll=n.getPageScroll(),this.elementMargin=this.element.style.margin,this.element.style.margin="0",this.elementPadding=this.element.style.padding,this.element.style.padding="0",this.bodyMargin=se.margin,this.docMargin=ye.margin,se.margin="0",ye.margin="0",this.bodyPadding=se.padding,this.docPadding=ye.padding,se.padding="0",ye.padding="0",this.bodyWidth=se.width,this.docWidth=ye.width,se.width="100%",ye.width="100%",this.bodyHeight=se.height,this.docHeight=ye.height,se.height="100%",ye.height="100%",this.bodyDisplay=se.display,se.display="block",this.previousBody=[],o[this.hash].prevElementParent=this.element.parentNode,o[this.hash].prevNextSibling=this.element.nextSibling,o[this.hash].prevElementWidth=this.element.style.width,o[this.hash].prevElementHeight=this.element.style.height,Ie=z.childNodes.length,fe=0;fe<Ie;fe++)this.previousBody.push(z.childNodes[0]),z.removeChild(z.childNodes[0]);this.toolbar&&this.toolbar.element&&(this.toolbar.parentNode=this.toolbar.element.parentNode,this.toolbar.nextSibling=this.toolbar.element.nextSibling,z.appendChild(this.toolbar.element),n.addClass(this.toolbar.element,"fullpage")),n.addClass(this.element,"fullpage"),z.appendChild(this.element),this.element.style.height="100vh",this.element.style.width="100vw",this.toolbar&&this.toolbar.element&&(this.element.style.height=n.getElementSize(this.element).y-n.getElementSize(this.toolbar.element).y+"px"),o[this.hash].fullPage=!0,n.delegate(this,at)({})}else{for(this.element.style.margin=this.elementMargin,this.element.style.padding=this.elementPadding,se.margin=this.bodyMargin,ye.margin=this.docMargin,se.padding=this.bodyPadding,ye.padding=this.docPadding,se.width=this.bodyWidth,ye.width=this.docWidth,se.height=this.bodyHeight,ye.height=this.docHeight,se.display=this.bodyDisplay,z.removeChild(this.element),Ie=this.previousBody.length,fe=0;fe<Ie;fe++)z.appendChild(this.previousBody.shift());n.removeClass(this.element,"fullpage"),o[this.hash].prevElementParent.insertBefore(this.element,o[this.hash].prevNextSibling),this.toolbar&&this.toolbar.element&&(z.removeChild(this.toolbar.element),n.removeClass(this.toolbar.element,"fullpage"),this.toolbar.parentNode.insertBefore(this.toolbar.element,this.toolbar.nextSibling),delete this.toolbar.parentNode,delete this.toolbar.nextSibling),this.element.style.width=o[this.hash].prevElementWidth,this.element.style.height=o[this.hash].prevElementHeight;var Ct=0,yt=function(){n.setPageScroll(ge.pageScroll);var rt=n.getPageScroll();Ct++,Ct<10&&(rt.x!==ge.pageScroll.x||rt.y!==ge.pageScroll.y)&&n.requestAnimationFrame(yt)};n.requestAnimationFrame(yt),o[this.hash].fullPage=!1,n.delegate(this,Ot)({})}return this.navigator&&this.viewport&&this.navigator.update(this.viewport),this.raiseEvent("full-page",{fullPage:C}),this},setFullScreen:function(C){var z=this;if(!n.supportsFullScreen)return this.setFullPage(C);if(n.isFullScreen()===C)return this;var se={fullScreen:C,preventDefaultAction:!1};if(this.raiseEvent("pre-full-screen",se),se.preventDefaultAction)return this;if(C){if(this.setFullPage(!0),!this.isFullPage())return this;this.fullPageStyleWidth=this.element.style.width,this.fullPageStyleHeight=this.element.style.height,this.element.style.width="100%",this.element.style.height="100%";var ye=function(){var ge=n.isFullScreen();ge||(n.removeEvent(document,n.fullScreenEventName,ye),n.removeEvent(document,n.fullScreenErrorEventName,ye),z.setFullPage(!1),z.isFullPage()&&(z.element.style.width=z.fullPageStyleWidth,z.element.style.height=z.fullPageStyleHeight)),z.navigator&&z.viewport&&setTimeout(function(){z.navigator.update(z.viewport)}),z.raiseEvent("full-screen",{fullScreen:ge})};n.addEvent(document,n.fullScreenEventName,ye),n.addEvent(document,n.fullScreenErrorEventName,ye),n.requestFullScreen(document.body)}else n.exitFullScreen();return this},isVisible:function(){return this.container.style.visibility!=="hidden"},isFullScreen:function(){return n.isFullScreen()&&this.isFullPage()},setVisible:function(C){return this.container.style.visibility=C?"":"hidden",this.raiseEvent("visible",{visible:C}),this},addTiledImage:function(C){n.console.assert(C,"[Viewer.addTiledImage] options is required"),n.console.assert(C.tileSource,"[Viewer.addTiledImage] options.tileSource is required"),n.console.assert(!C.replace||C.index>-1&&C.index<this.world.getItemCount(),"[Viewer.addTiledImage] if options.replace is used, options.index must be a valid index in Viewer.world");var z=this;C.replace&&(C.replaceItem=z.world.getItemAt(C.index)),this._hideMessage(),C.placeholderFillStyle===void 0&&(C.placeholderFillStyle=this.placeholderFillStyle),C.opacity===void 0&&(C.opacity=this.opacity),C.preload===void 0&&(C.preload=this.preload),C.compositeOperation===void 0&&(C.compositeOperation=this.compositeOperation),C.crossOriginPolicy===void 0&&(C.crossOriginPolicy=C.tileSource.crossOriginPolicy!==void 0?C.tileSource.crossOriginPolicy:this.crossOriginPolicy),C.ajaxWithCredentials===void 0&&(C.ajaxWithCredentials=this.ajaxWithCredentials),C.loadTilesWithAjax===void 0&&(C.loadTilesWithAjax=this.loadTilesWithAjax),n.isPlainObject(C.ajaxHeaders)||(C.ajaxHeaders={});var se={options:C};function ye(fe){for(var nt=0;nt<z._loadQueue.length;nt++)if(z._loadQueue[nt]===se){z._loadQueue.splice(nt,1);break}z._loadQueue.length===0&&ge(se),z.raiseEvent("add-item-failed",fe),C.error&&C.error(fe)}function ge(fe){z.collectionMode&&(z.world.arrange({immediately:fe.options.collectionImmediately,rows:z.collectionRows,columns:z.collectionColumns,layout:z.collectionLayout,tileSize:z.collectionTileSize,tileMargin:z.collectionTileMargin}),z.world.setAutoRefigureSizes(!0))}if(n.isArray(C.tileSource)){setTimeout(function(){ye({message:"[Viewer.addTiledImage] Sequences can not be added; add them one at a time instead.",source:C.tileSource,options:C})});return}this._loadQueue.push(se);function Ie(){for(var fe,nt,Ct;z._loadQueue.length&&(fe=z._loadQueue[0],!!fe.tileSource);){if(z._loadQueue.splice(0,1),fe.options.replace){var yt=z.world.getIndexOfItem(fe.options.replaceItem);yt!==-1&&(fe.options.index=yt),z.world.removeItem(fe.options.replaceItem)}nt=new n.TiledImage({viewer:z,source:fe.tileSource,viewport:z.viewport,drawer:z.drawer,tileCache:z.tileCache,imageLoader:z.imageLoader,x:fe.options.x,y:fe.options.y,width:fe.options.width,height:fe.options.height,fitBounds:fe.options.fitBounds,fitBoundsPlacement:fe.options.fitBoundsPlacement,clip:fe.options.clip,placeholderFillStyle:fe.options.placeholderFillStyle,opacity:fe.options.opacity,preload:fe.options.preload,degrees:fe.options.degrees,flipped:fe.options.flipped,compositeOperation:fe.options.compositeOperation,springStiffness:z.springStiffness,animationTime:z.animationTime,minZoomImageRatio:z.minZoomImageRatio,wrapHorizontal:z.wrapHorizontal,wrapVertical:z.wrapVertical,maxTilesPerFrame:z.maxTilesPerFrame,immediateRender:z.immediateRender,blendTime:z.blendTime,alwaysBlend:z.alwaysBlend,minPixelRatio:z.minPixelRatio,smoothTileEdgesMinZoom:z.smoothTileEdgesMinZoom,iOSDevice:z.iOSDevice,crossOriginPolicy:fe.options.crossOriginPolicy,ajaxWithCredentials:fe.options.ajaxWithCredentials,loadTilesWithAjax:fe.options.loadTilesWithAjax,ajaxHeaders:fe.options.ajaxHeaders,debugMode:z.debugMode,subPixelRoundingForTransparency:z.subPixelRoundingForTransparency}),z.collectionMode&&z.world.setAutoRefigureSizes(!1),z.navigator&&(Ct=n.extend({},fe.options,{replace:!1,originalTiledImage:nt,tileSource:fe.tileSource}),z.navigator.addTiledImage(Ct)),z.world.addItem(nt,{index:fe.options.index}),z._loadQueue.length===0&&ge(fe),z.world.getItemCount()===1&&!z.preserveViewport&&z.viewport.goHome(!0),fe.options.success&&fe.options.success({item:nt})}}v(this,C.tileSource,C,function(fe){se.tileSource=fe,Ie()},function(fe){fe.options=C,ye(fe),Ie()})},addSimpleImage:function(C){n.console.assert(C,"[Viewer.addSimpleImage] options is required"),n.console.assert(C.url,"[Viewer.addSimpleImage] options.url is required");var z=n.extend({},C,{tileSource:{type:"image",url:C.url}});delete z.url,this.addTiledImage(z)},addLayer:function(C){var z=this;n.console.error("[Viewer.addLayer] this function is deprecated; use Viewer.addTiledImage() instead.");var se=n.extend({},C,{success:function(ye){z.raiseEvent("add-layer",{options:C,drawer:ye.item})},error:function(ye){z.raiseEvent("add-layer-failed",ye)}});return this.addTiledImage(se),this},getLayerAtLevel:function(C){return n.console.error("[Viewer.getLayerAtLevel] this function is deprecated; use World.getItemAt() instead."),this.world.getItemAt(C)},getLevelOfLayer:function(C){return n.console.error("[Viewer.getLevelOfLayer] this function is deprecated; use World.getIndexOfItem() instead."),this.world.getIndexOfItem(C)},getLayersCount:function(){return n.console.error("[Viewer.getLayersCount] this function is deprecated; use World.getItemCount() instead."),this.world.getItemCount()},setLayerLevel:function(C,z){return n.console.error("[Viewer.setLayerLevel] this function is deprecated; use World.setItemIndex() instead."),this.world.setItemIndex(C,z)},removeLayer:function(C){return n.console.error("[Viewer.removeLayer] this function is deprecated; use World.removeItem() instead."),this.world.removeItem(C)},forceRedraw:function(){return o[this.hash].forceRedraw=!0,this},forceResize:function(){o[this.hash].needsResize=!0,o[this.hash].forceResize=!0},bindSequenceControls:function(){var C=n.delegate(this,G),z=n.delegate(this,W),se=n.delegate(this,this.goToNextPage),ye=n.delegate(this,this.goToPreviousPage),ge=this.navImages,Ie=!0;return this.showSequenceControl&&((this.previousButton||this.nextButton)&&(Ie=!1),this.previousButton=new n.Button({element:this.previousButton?n.getElement(this.previousButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.PreviousPage"),srcRest:mt(this.prefixUrl,ge.previous.REST),srcGroup:mt(this.prefixUrl,ge.previous.GROUP),srcHover:mt(this.prefixUrl,ge.previous.HOVER),srcDown:mt(this.prefixUrl,ge.previous.DOWN),onRelease:ye,onFocus:C,onBlur:z}),this.nextButton=new n.Button({element:this.nextButton?n.getElement(this.nextButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.NextPage"),srcRest:mt(this.prefixUrl,ge.next.REST),srcGroup:mt(this.prefixUrl,ge.next.GROUP),srcHover:mt(this.prefixUrl,ge.next.HOVER),srcDown:mt(this.prefixUrl,ge.next.DOWN),onRelease:se,onFocus:C,onBlur:z}),this.navPrevNextWrap||this.previousButton.disable(),(!this.tileSources||!this.tileSources.length)&&this.nextButton.disable(),Ie&&(this.paging=new n.ButtonGroup({buttons:[this.previousButton,this.nextButton],clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold}),this.pagingControl=this.paging.element,this.toolbar?this.toolbar.addControl(this.pagingControl,{anchor:n.ControlAnchor.BOTTOM_RIGHT}):this.addControl(this.pagingControl,{anchor:this.sequenceControlAnchor||n.ControlAnchor.TOP_LEFT}))),this},bindStandardControls:function(){var C=n.delegate(this,Yt),z=n.delegate(this,ni),se=n.delegate(this,Qt),ye=n.delegate(this,Xe),ge=n.delegate(this,It),Ie=n.delegate(this,We),fe=n.delegate(this,Rt),nt=n.delegate(this,Bt),Ct=n.delegate(this,At),yt=n.delegate(this,St),rt=n.delegate(this,G),Lt=n.delegate(this,W),R=this.navImages,B=[],V=!0;return this.showNavigationControl&&((this.zoomInButton||this.zoomOutButton||this.homeButton||this.fullPageButton||this.rotateLeftButton||this.rotateRightButton||this.flipButton)&&(V=!1),this.showZoomControl&&(B.push(this.zoomInButton=new n.Button({element:this.zoomInButton?n.getElement(this.zoomInButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.ZoomIn"),srcRest:mt(this.prefixUrl,R.zoomIn.REST),srcGroup:mt(this.prefixUrl,R.zoomIn.GROUP),srcHover:mt(this.prefixUrl,R.zoomIn.HOVER),srcDown:mt(this.prefixUrl,R.zoomIn.DOWN),onPress:C,onRelease:z,onClick:se,onEnter:C,onExit:z,onFocus:rt,onBlur:Lt})),B.push(this.zoomOutButton=new n.Button({element:this.zoomOutButton?n.getElement(this.zoomOutButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.ZoomOut"),srcRest:mt(this.prefixUrl,R.zoomOut.REST),srcGroup:mt(this.prefixUrl,R.zoomOut.GROUP),srcHover:mt(this.prefixUrl,R.zoomOut.HOVER),srcDown:mt(this.prefixUrl,R.zoomOut.DOWN),onPress:ye,onRelease:z,onClick:ge,onEnter:ye,onExit:z,onFocus:rt,onBlur:Lt}))),this.showHomeControl&&B.push(this.homeButton=new n.Button({element:this.homeButton?n.getElement(this.homeButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.Home"),srcRest:mt(this.prefixUrl,R.home.REST),srcGroup:mt(this.prefixUrl,R.home.GROUP),srcHover:mt(this.prefixUrl,R.home.HOVER),srcDown:mt(this.prefixUrl,R.home.DOWN),onRelease:Ie,onFocus:rt,onBlur:Lt})),this.showFullPageControl&&B.push(this.fullPageButton=new n.Button({element:this.fullPageButton?n.getElement(this.fullPageButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.FullPage"),srcRest:mt(this.prefixUrl,R.fullpage.REST),srcGroup:mt(this.prefixUrl,R.fullpage.GROUP),srcHover:mt(this.prefixUrl,R.fullpage.HOVER),srcDown:mt(this.prefixUrl,R.fullpage.DOWN),onRelease:fe,onFocus:rt,onBlur:Lt})),this.showRotationControl&&(B.push(this.rotateLeftButton=new n.Button({element:this.rotateLeftButton?n.getElement(this.rotateLeftButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.RotateLeft"),srcRest:mt(this.prefixUrl,R.rotateleft.REST),srcGroup:mt(this.prefixUrl,R.rotateleft.GROUP),srcHover:mt(this.prefixUrl,R.rotateleft.HOVER),srcDown:mt(this.prefixUrl,R.rotateleft.DOWN),onRelease:nt,onFocus:rt,onBlur:Lt})),B.push(this.rotateRightButton=new n.Button({element:this.rotateRightButton?n.getElement(this.rotateRightButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.RotateRight"),srcRest:mt(this.prefixUrl,R.rotateright.REST),srcGroup:mt(this.prefixUrl,R.rotateright.GROUP),srcHover:mt(this.prefixUrl,R.rotateright.HOVER),srcDown:mt(this.prefixUrl,R.rotateright.DOWN),onRelease:Ct,onFocus:rt,onBlur:Lt}))),this.showFlipControl&&B.push(this.flipButton=new n.Button({element:this.flipButton?n.getElement(this.flipButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.Flip"),srcRest:mt(this.prefixUrl,R.flip.REST),srcGroup:mt(this.prefixUrl,R.flip.GROUP),srcHover:mt(this.prefixUrl,R.flip.HOVER),srcDown:mt(this.prefixUrl,R.flip.DOWN),onRelease:yt,onFocus:rt,onBlur:Lt})),V?(this.buttonGroup=new n.ButtonGroup({buttons:B,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold}),this.navControl=this.buttonGroup.element,this.addHandler("open",n.delegate(this,Xt)),this.toolbar?this.toolbar.addControl(this.navControl,{anchor:this.navigationControlAnchor||n.ControlAnchor.TOP_LEFT}):this.addControl(this.navControl,{anchor:this.navigationControlAnchor||n.ControlAnchor.TOP_LEFT})):this.customButtons=B),this},currentPage:function(){return this._sequenceIndex},goToPage:function(C){return this.tileSources&&C>=0&&C<this.tileSources.length&&(this._sequenceIndex=C,this._updateSequenceButtons(C),this.open(this.tileSources[C]),this.referenceStrip&&this.referenceStrip.setFocus(C),this.raiseEvent("page",{page:C})),this},addOverlay:function(C,z,se,ye){var ge;if(n.isPlainObject(C)?ge=C:ge={element:C,location:z,placement:se,onDraw:ye},C=n.getElement(ge.element),a(this.currentOverlays,C)>=0)return this;var Ie=y(this,ge);return this.currentOverlays.push(Ie),Ie.drawHTML(this.overlaysContainer,this.viewport),this.raiseEvent("add-overlay",{element:C,location:ge.location,placement:ge.placement}),this},updateOverlay:function(C,z,se){var ye;return C=n.getElement(C),ye=a(this.currentOverlays,C),ye>=0&&(this.currentOverlays[ye].update(z,se),o[this.hash].forceRedraw=!0,this.raiseEvent("update-overlay",{element:C,location:z,placement:se})),this},removeOverlay:function(C){var z;return C=n.getElement(C),z=a(this.currentOverlays,C),z>=0&&(this.currentOverlays[z].destroy(),this.currentOverlays.splice(z,1),o[this.hash].forceRedraw=!0,this.raiseEvent("remove-overlay",{element:C})),this},clearOverlays:function(){for(;this.currentOverlays.length>0;)this.currentOverlays.pop().destroy();return o[this.hash].forceRedraw=!0,this.raiseEvent("clear-overlay",{}),this},getOverlayById:function(C){var z;return C=n.getElement(C),z=a(this.currentOverlays,C),z>=0?this.currentOverlays[z]:null},_updateSequenceButtons:function(C){this.nextButton&&(!this.tileSources||this.tileSources.length-1===C?this.navPrevNextWrap||this.nextButton.disable():this.nextButton.enable()),this.previousButton&&(C>0?this.previousButton.enable():this.navPrevNextWrap||this.previousButton.disable())},_showMessage:function(C){this._hideMessage();var z=n.makeNeutralElement("div");z.appendChild(document.createTextNode(C)),this.messageDiv=n.makeCenteredNode(z),n.addClass(this.messageDiv,"openseadragon-message"),this.container.appendChild(this.messageDiv)},_hideMessage:function(){var C=this.messageDiv;C&&(C.parentNode.removeChild(C),delete this.messageDiv)},gestureSettingsByDeviceType:function(C){switch(C){case"mouse":return this.gestureSettingsMouse;case"touch":return this.gestureSettingsTouch;case"pen":return this.gestureSettingsPen;default:return this.gestureSettingsUnknown}},_drawOverlays:function(){var C,z=this.currentOverlays.length;for(C=0;C<z;C++)this.currentOverlays[C].drawHTML(this.overlaysContainer,this.viewport)},_cancelPendingImages:function(){this._loadQueue=[]},removeReferenceStrip:function(){this.showReferenceStrip=!1,this.referenceStrip&&(this.referenceStrip.destroy(),this.referenceStrip=null)},addReferenceStrip:function(){if(this.showReferenceStrip=!0,this.sequenceMode){if(this.referenceStrip)return;this.tileSources.length&&this.tileSources.length>1&&(this.referenceStrip=new n.ReferenceStrip({id:this.referenceStripElement,position:this.referenceStripPosition,sizeRatio:this.referenceStripSizeRatio,scroll:this.referenceStripScroll,height:this.referenceStripHeight,width:this.referenceStripWidth,tileSources:this.tileSources,prefixUrl:this.prefixUrl,viewer:this}),this.referenceStrip.setFocus(this._sequenceIndex))}else n.console.warn('Attempting to display a reference strip while "sequenceMode" is off.')},_addUpdatePixelDensityRatioEvent:function(){this._updatePixelDensityRatioBind=this._updatePixelDensityRatio.bind(this),n.addEvent(window,"resize",this._updatePixelDensityRatioBind)},_removeUpdatePixelDensityRatioEvent:function(){n.removeEvent(window,"resize",this._updatePixelDensityRatioBind)},_updatePixelDensityRatio:function(){var C=n.pixelDensityRatio,z=n.getCurrentPixelDensityRatio();C!==z&&(n.pixelDensityRatio=z,this.forceResize())},goToPreviousPage:function(){var C=this._sequenceIndex-1;this.navPrevNextWrap&&C<0&&(C+=this.tileSources.length),this.goToPage(C)},goToNextPage:function(){var C=this._sequenceIndex+1;this.navPrevNextWrap&&C>=this.tileSources.length&&(C=0),this.goToPage(C)},isAnimating:function(){return o[this.hash].animating}});function c(C){return C=n.getElement(C),new n.Point(C.clientWidth===0?1:C.clientWidth,C.clientHeight===0?1:C.clientHeight)}function v(C,z,se,ye,ge){var Ie=C;if(n.type(z)==="string"){if(z.match(/^\s*<.*>\s*$/))z=n.parseXml(z);else if(z.match(/^\s*[{[].*[}\]]\s*$/))try{var fe=n.parseJSON(z);z=fe}catch{}}function nt(Ct,yt){Ct.ready?ye(Ct):(Ct.addHandler("ready",function(){ye(Ct)}),Ct.addHandler("open-failed",function(rt){ge({message:rt.message,source:yt})}))}setTimeout(function(){if(n.type(z)==="string")z=new n.TileSource({url:z,crossOriginPolicy:se.crossOriginPolicy!==void 0?se.crossOriginPolicy:C.crossOriginPolicy,ajaxWithCredentials:C.ajaxWithCredentials,ajaxHeaders:se.ajaxHeaders?se.ajaxHeaders:C.ajaxHeaders,splitHashDataForPost:C.splitHashDataForPost,success:function(Lt){ye(Lt.tileSource)}}),z.addHandler("open-failed",function(Lt){ge(Lt)});else if(n.isPlainObject(z)||z.nodeType)if(z.crossOriginPolicy===void 0&&(se.crossOriginPolicy!==void 0||C.crossOriginPolicy!==void 0)&&(z.crossOriginPolicy=se.crossOriginPolicy!==void 0?se.crossOriginPolicy:C.crossOriginPolicy),z.ajaxWithCredentials===void 0&&(z.ajaxWithCredentials=C.ajaxWithCredentials),n.isFunction(z.getTileUrl)){var Ct=new n.TileSource(z);Ct.getTileUrl=z.getTileUrl,ye(Ct)}else{var yt=n.TileSource.determineType(Ie,z);if(!yt){ge({message:"Unable to load TileSource",source:z});return}var rt=yt.prototype.configure.apply(Ie,[z]);nt(new yt(rt),z)}else nt(z,z)})}function y(C,z){if(z instanceof n.Overlay)return z;var se=null;if(z.element)se=n.getElement(z.element);else{var ye=z.id?z.id:"openseadragon-overlay-"+Math.floor(Math.random()*1e7);se=n.getElement(z.id),se||(se=document.createElement("a"),se.href="#/overlay/"+ye),se.id=ye,n.addClass(se,z.className?z.className:"openseadragon-overlay")}var ge=z.location,Ie=z.width,fe=z.height;if(!ge){var nt=z.x,Ct=z.y;if(z.px!==void 0){var yt=C.viewport.imageToViewportRectangle(new n.Rect(z.px,z.py,Ie||0,fe||0));nt=yt.x,Ct=yt.y,Ie=Ie!==void 0?yt.width:void 0,fe=fe!==void 0?yt.height:void 0}ge=new n.Point(nt,Ct)}var rt=z.placement;return rt&&n.type(rt)==="string"&&(rt=n.Placement[z.placement.toUpperCase()]),new n.Overlay({element:se,location:ge,placement:rt,onDraw:z.onDraw,checkResize:z.checkResize,width:Ie,height:fe,rotationMode:z.rotationMode})}function a(C,z){var se;for(se=C.length-1;se>=0;se--)if(C[se].element===z)return se;return-1}function w(C,z){return n.requestAnimationFrame(function(){z(C)})}function _(C){n.requestAnimationFrame(function(){I(C)})}function T(C){C.autoHideControls&&(C.controlsShouldFade=!0,C.controlsFadeBeginTime=n.now()+C.controlsFadeDelay,window.setTimeout(function(){_(C)},C.controlsFadeDelay))}function I(C){var z,se,ye,ge;if(C.controlsShouldFade){for(z=n.now(),se=z-C.controlsFadeBeginTime,ye=1-se/C.controlsFadeLength,ye=Math.min(1,ye),ye=Math.max(0,ye),ge=C.controls.length-1;ge>=0;ge--)C.controls[ge].autoFade&&C.controls[ge].setOpacity(ye);ye>0&&_(C)}}function k(C){var z;for(C.controlsShouldFade=!1,z=C.controls.length-1;z>=0;z--)C.controls[z].setOpacity(1)}function G(){k(this)}function W(){T(this)}function O(C){var z={tracker:C.eventSource,position:C.position,originalEvent:C.originalEvent,preventDefault:C.preventDefault};this.raiseEvent("canvas-contextmenu",z),C.preventDefault=z.preventDefault}function ee(C){var z={originalEvent:C.originalEvent,preventDefaultAction:!1,preventVerticalPan:C.preventVerticalPan||!this.panVertical,preventHorizontalPan:C.preventHorizontalPan||!this.panHorizontal};if(this.raiseEvent("canvas-key",z),!z.preventDefaultAction&&!C.ctrl&&!C.alt&&!C.meta)switch(C.keyCode){case 38:z.preventVerticalPan||(C.shift?this.viewport.zoomBy(1.1):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,-this.pixelsPerArrowPress))),this.viewport.applyConstraints()),C.preventDefault=!0;break;case 40:z.preventVerticalPan||(C.shift?this.viewport.zoomBy(.9):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,this.pixelsPerArrowPress))),this.viewport.applyConstraints()),C.preventDefault=!0;break;case 37:z.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(-this.pixelsPerArrowPress,0))),this.viewport.applyConstraints()),C.preventDefault=!0;break;case 39:z.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(this.pixelsPerArrowPress,0))),this.viewport.applyConstraints()),C.preventDefault=!0;break;case 187:this.viewport.zoomBy(1.1),this.viewport.applyConstraints(),C.preventDefault=!0;break;case 189:this.viewport.zoomBy(.9),this.viewport.applyConstraints(),C.preventDefault=!0;break;case 48:this.viewport.goHome(),this.viewport.applyConstraints(),C.preventDefault=!0;break;case 87:z.preventVerticalPan||(C.shift?this.viewport.zoomBy(1.1):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,-40))),this.viewport.applyConstraints()),C.preventDefault=!0;break;case 83:z.preventVerticalPan||(C.shift?this.viewport.zoomBy(.9):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,40))),this.viewport.applyConstraints()),C.preventDefault=!0;break;case 65:z.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(-40,0))),this.viewport.applyConstraints()),C.preventDefault=!0;break;case 68:z.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(40,0))),this.viewport.applyConstraints()),C.preventDefault=!0;break;case 82:C.shift?this.viewport.flipped?this.viewport.setRotation(this.viewport.getRotation()+this.rotationIncrement):this.viewport.setRotation(this.viewport.getRotation()-this.rotationIncrement):this.viewport.flipped?this.viewport.setRotation(this.viewport.getRotation()-this.rotationIncrement):this.viewport.setRotation(this.viewport.getRotation()+this.rotationIncrement),this.viewport.applyConstraints(),C.preventDefault=!0;break;case 70:this.viewport.toggleFlip(),C.preventDefault=!0;break;case 74:this.goToPreviousPage();break;case 75:this.goToNextPage();break;default:C.preventDefault=!1;break}else C.preventDefault=!1}function ve(C){var z={originalEvent:C.originalEvent};this.raiseEvent("canvas-key-press",z)}function we(C){var z,se=document.activeElement===this.canvas;se||this.canvas.focus(),this.viewport.flipped&&(C.position.x=this.viewport.getContainerSize().x-C.position.x);var ye={tracker:C.eventSource,position:C.position,quick:C.quick,shift:C.shift,originalEvent:C.originalEvent,originalTarget:C.originalTarget,preventDefaultAction:!1};this.raiseEvent("canvas-click",ye),!ye.preventDefaultAction&&this.viewport&&C.quick&&(z=this.gestureSettingsByDeviceType(C.pointerType),z.clickToZoom===!0&&(this.viewport.zoomBy(C.shift?1/this.zoomPerClick:this.zoomPerClick,z.zoomToRefPoint?this.viewport.pointFromPixel(C.position,!0):null),this.viewport.applyConstraints()),z.dblClickDragToZoom&&(o[this.hash].draggingToZoom===!0?(o[this.hash].lastClickTime=null,o[this.hash].draggingToZoom=!1):o[this.hash].lastClickTime=n.now()))}function ot(C){var z,se={tracker:C.eventSource,position:C.position,shift:C.shift,originalEvent:C.originalEvent,preventDefaultAction:!1};this.raiseEvent("canvas-double-click",se),!se.preventDefaultAction&&this.viewport&&(z=this.gestureSettingsByDeviceType(C.pointerType),z.dblClickToZoom&&(this.viewport.zoomBy(C.shift?1/this.zoomPerClick:this.zoomPerClick,z.zoomToRefPoint?this.viewport.pointFromPixel(C.position,!0):null),this.viewport.applyConstraints()))}function Ge(C){var z,se={tracker:C.eventSource,pointerType:C.pointerType,position:C.position,delta:C.delta,speed:C.speed,direction:C.direction,shift:C.shift,originalEvent:C.originalEvent,preventDefaultAction:!1};if(this.raiseEvent("canvas-drag",se),z=this.gestureSettingsByDeviceType(C.pointerType),!se.preventDefaultAction&&this.viewport){if(z.dblClickDragToZoom&&o[this.hash].draggingToZoom){var ye=Math.pow(this.zoomPerDblClickDrag,C.delta.y/50);this.viewport.zoomBy(ye)}else if(z.dragToPan&&!o[this.hash].draggingToZoom){if(this.panHorizontal||(C.delta.x=0),this.panVertical||(C.delta.y=0),this.viewport.flipped&&(C.delta.x=-C.delta.x),this.constrainDuringPan){var ge=this.viewport.deltaPointsFromPixels(C.delta.negate());this.viewport.centerSpringX.target.value+=ge.x,this.viewport.centerSpringY.target.value+=ge.y;var Ie=this.viewport.getConstrainedBounds();this.viewport.centerSpringX.target.value-=ge.x,this.viewport.centerSpringY.target.value-=ge.y,Ie.xConstrained&&(C.delta.x=0),Ie.yConstrained&&(C.delta.y=0)}this.viewport.panBy(this.viewport.deltaPointsFromPixels(C.delta.negate()),z.flickEnabled&&!this.constrainDuringPan)}}}function je(C){var z,se={tracker:C.eventSource,pointerType:C.pointerType,position:C.position,speed:C.speed,direction:C.direction,shift:C.shift,originalEvent:C.originalEvent,preventDefaultAction:!1};if(this.raiseEvent("canvas-drag-end",se),z=this.gestureSettingsByDeviceType(C.pointerType),!se.preventDefaultAction&&this.viewport){if(!o[this.hash].draggingToZoom&&z.dragToPan&&z.flickEnabled&&C.speed>=z.flickMinSpeed){var ye=0;this.panHorizontal&&(ye=z.flickMomentum*C.speed*Math.cos(C.direction));var ge=0;this.panVertical&&(ge=z.flickMomentum*C.speed*Math.sin(C.direction));var Ie=this.viewport.pixelFromPoint(this.viewport.getCenter(!0)),fe=this.viewport.pointFromPixel(new n.Point(Ie.x-ye,Ie.y-ge));this.viewport.panTo(fe,!1)}this.viewport.applyConstraints()}z.dblClickDragToZoom&&o[this.hash].draggingToZoom===!0&&(o[this.hash].draggingToZoom=!1)}function xt(C){this.raiseEvent("canvas-enter",{tracker:C.eventSource,pointerType:C.pointerType,position:C.position,buttons:C.buttons,pointers:C.pointers,insideElementPressed:C.insideElementPressed,buttonDownAny:C.buttonDownAny,originalEvent:C.originalEvent})}function Q(C){this.raiseEvent("canvas-exit",{tracker:C.eventSource,pointerType:C.pointerType,position:C.position,buttons:C.buttons,pointers:C.pointers,insideElementPressed:C.insideElementPressed,buttonDownAny:C.buttonDownAny,originalEvent:C.originalEvent})}function vt(C){var z;if(this.raiseEvent("canvas-press",{tracker:C.eventSource,pointerType:C.pointerType,position:C.position,insideElementPressed:C.insideElementPressed,insideElementReleased:C.insideElementReleased,originalEvent:C.originalEvent}),z=this.gestureSettingsByDeviceType(C.pointerType),z.dblClickDragToZoom){var se=o[this.hash].lastClickTime,ye=n.now();if(se===null)return;ye-se<this.dblClickTimeThreshold&&(o[this.hash].draggingToZoom=!0),o[this.hash].lastClickTime=null}}function Ne(C){this.raiseEvent("canvas-release",{tracker:C.eventSource,pointerType:C.pointerType,position:C.position,insideElementPressed:C.insideElementPressed,insideElementReleased:C.insideElementReleased,originalEvent:C.originalEvent})}function dt(C){this.raiseEvent("canvas-nonprimary-press",{tracker:C.eventSource,position:C.position,pointerType:C.pointerType,button:C.button,buttons:C.buttons,originalEvent:C.originalEvent})}function ke(C){this.raiseEvent("canvas-nonprimary-release",{tracker:C.eventSource,position:C.position,pointerType:C.pointerType,button:C.button,buttons:C.buttons,originalEvent:C.originalEvent})}function Dt(C){var z,se,ye,ge,Ie={tracker:C.eventSource,pointerType:C.pointerType,gesturePoints:C.gesturePoints,lastCenter:C.lastCenter,center:C.center,lastDistance:C.lastDistance,distance:C.distance,shift:C.shift,originalEvent:C.originalEvent,preventDefaultPanAction:!1,preventDefaultZoomAction:!1,preventDefaultRotateAction:!1};if(this.raiseEvent("canvas-pinch",Ie),this.viewport&&(z=this.gestureSettingsByDeviceType(C.pointerType),z.pinchToZoom&&(!Ie.preventDefaultPanAction||!Ie.preventDefaultZoomAction)&&(se=this.viewport.pointFromPixel(C.center,!0),z.zoomToRefPoint&&!Ie.preventDefaultPanAction&&(ye=this.viewport.pointFromPixel(C.lastCenter,!0),ge=ye.minus(se),this.panHorizontal||(ge.x=0),this.panVertical||(ge.y=0),this.viewport.panBy(ge,!0)),Ie.preventDefaultZoomAction||this.viewport.zoomBy(C.distance/C.lastDistance,se,!0),this.viewport.applyConstraints()),z.pinchRotate&&!Ie.preventDefaultRotateAction)){var fe=Math.atan2(C.gesturePoints[0].currentPos.y-C.gesturePoints[1].currentPos.y,C.gesturePoints[0].currentPos.x-C.gesturePoints[1].currentPos.x),nt=Math.atan2(C.gesturePoints[0].lastPos.y-C.gesturePoints[1].lastPos.y,C.gesturePoints[0].lastPos.x-C.gesturePoints[1].lastPos.x);se=this.viewport.pointFromPixel(C.center,!0),this.viewport.rotateTo(this.viewport.getRotation(!0)+(fe-nt)*(180/Math.PI),se,!0)}}function ut(C){this.raiseEvent("canvas-focus",{tracker:C.eventSource,originalEvent:C.originalEvent})}function wt(C){this.raiseEvent("canvas-blur",{tracker:C.eventSource,originalEvent:C.originalEvent})}function jt(C){var z,se,ye,ge,Ie;ge=n.now(),Ie=ge-this._lastScrollTime,Ie>this.minScrollDeltaTime?(this._lastScrollTime=ge,z={tracker:C.eventSource,position:C.position,scroll:C.scroll,shift:C.shift,originalEvent:C.originalEvent,preventDefaultAction:!1,preventDefault:!0},this.raiseEvent("canvas-scroll",z),!z.preventDefaultAction&&this.viewport&&(this.viewport.flipped&&(C.position.x=this.viewport.getContainerSize().x-C.position.x),se=this.gestureSettingsByDeviceType(C.pointerType),se.scrollToZoom&&(ye=Math.pow(this.zoomPerScroll,C.scroll),this.viewport.zoomBy(ye,se.zoomToRefPoint?this.viewport.pointFromPixel(C.position,!0):null),this.viewport.applyConstraints())),C.preventDefault=z.preventDefault):C.preventDefault=!0}function at(C){o[this.hash].mouseInside=!0,k(this),this.raiseEvent("container-enter",{tracker:C.eventSource,pointerType:C.pointerType,position:C.position,buttons:C.buttons,pointers:C.pointers,insideElementPressed:C.insideElementPressed,buttonDownAny:C.buttonDownAny,originalEvent:C.originalEvent})}function Ot(C){C.pointers<1&&(o[this.hash].mouseInside=!1,o[this.hash].animating||T(this)),this.raiseEvent("container-exit",{tracker:C.eventSource,pointerType:C.pointerType,position:C.position,buttons:C.buttons,pointers:C.pointers,insideElementPressed:C.insideElementPressed,buttonDownAny:C.buttonDownAny,originalEvent:C.originalEvent})}function Jt(C){ei(C),C.isOpen()?C._updateRequestId=w(C,Jt):C._updateRequestId=!1}function kt(C,z){var se=C.viewport,ye=se.getZoom(),ge=se.getCenter();se.resize(z,C.preserveImageSizeOnResize),se.panTo(ge,!0);var Ie;if(C.preserveImageSizeOnResize)Ie=o[C.hash].prevContainerSize.x/z.x;else{var fe=new n.Point(0,0),nt=new n.Point(o[C.hash].prevContainerSize.x,o[C.hash].prevContainerSize.y).distanceTo(fe),Ct=new n.Point(z.x,z.y).distanceTo(fe);Ie=Ct/nt*o[C.hash].prevContainerSize.x/z.x}se.zoomTo(ye*Ie,null,!0),o[C.hash].prevContainerSize=z,o[C.hash].forceRedraw=!0,o[C.hash].needsResize=!1,o[C.hash].forceResize=!1}function ei(C){if(!(C._opening||!o[C.hash])){if(C.autoResize||o[C.hash].forceResize){var z;if(C._autoResizePolling){z=c(C.container);var se=o[C.hash].prevContainerSize;z.equals(se)||(o[C.hash].needsResize=!0)}o[C.hash].needsResize&&kt(C,z||c(C.container))}var ye=C.viewport.update(),ge=C.world.update(ye)||ye;ye&&C.raiseEvent("viewport-change"),C.referenceStrip&&(ge=C.referenceStrip.update(C.viewport)||ge);var Ie=o[C.hash].animating;!Ie&&ge&&(C.raiseEvent("animation-start"),k(C));var fe=Ie&&!ge;fe&&(o[C.hash].animating=!1),(ge||fe||o[C.hash].forceRedraw||C.world.needsDraw())&&(ti(C),C._drawOverlays(),C.navigator&&C.navigator.update(C.viewport),o[C.hash].forceRedraw=!1,ge&&C.raiseEvent("animation")),fe&&(C.raiseEvent("animation-finish"),o[C.hash].mouseInside||T(C)),o[C.hash].animating=ge}}function ti(C){C.imageLoader.clear(),C.world.draw(),C.raiseEvent("update-viewport",{})}function mt(C,z){return C?C+z:z}function Yt(){o[this.hash].lastZoomTime=n.now(),o[this.hash].zoomFactor=this.zoomPerSecond,o[this.hash].zooming=!0,Ve(this)}function Xe(){o[this.hash].lastZoomTime=n.now(),o[this.hash].zoomFactor=1/this.zoomPerSecond,o[this.hash].zooming=!0,Ve(this)}function ni(){o[this.hash].zooming=!1}function Ve(C){n.requestAnimationFrame(n.delegate(C,Zt))}function Zt(){var C,z,se;o[this.hash].zooming&&this.viewport&&(C=n.now(),z=C-o[this.hash].lastZoomTime,se=Math.pow(o[this.hash].zoomFactor,z/1e3),this.viewport.zoomBy(se),this.viewport.applyConstraints(),o[this.hash].lastZoomTime=C,Ve(this))}function Qt(){this.viewport&&(o[this.hash].zooming=!1,this.viewport.zoomBy(this.zoomPerClick/1),this.viewport.applyConstraints())}function It(){this.viewport&&(o[this.hash].zooming=!1,this.viewport.zoomBy(1/this.zoomPerClick),this.viewport.applyConstraints())}function Xt(){this.buttonGroup&&(this.buttonGroup.emulateEnter(),this.buttonGroup.emulateLeave())}function We(){this.viewport&&this.viewport.goHome()}function Rt(){this.isFullPage()&&!n.isFullScreen()?this.setFullPage(!1):this.setFullScreen(!this.isFullPage()),this.buttonGroup&&this.buttonGroup.emulateLeave(),this.fullPageButton.element.focus(),this.viewport&&this.viewport.applyConstraints()}function Bt(){if(this.viewport){var C=this.viewport.getRotation();this.viewport.flipped?C+=this.rotationIncrement:C-=this.rotationIncrement,this.viewport.setRotation(C)}}function At(){if(this.viewport){var C=this.viewport.getRotation();this.viewport.flipped?C-=this.rotationIncrement:C+=this.rotationIncrement,this.viewport.setRotation(C)}}function St(){this.viewport.toggleFlip()}n.determineDrawer=function(C){for(let z in Pe){const se=Pe[z],ye=se.prototype;if(ye&&ye instanceof Pe.DrawerBase&&n.isFunction(ye.getType)&&ye.getType.call(se)===C)return se}return null}}(Pe),function(n){n.Navigator=function(w){var _=w.viewer,T=this,I,k;w.element||w.id?(w.element?(w.id&&n.console.warn("Given option.id for Navigator was ignored since option.element was provided and is being used instead."),w.element.id?w.id=w.element.id:w.id="navigator-"+n.now(),this.element=w.element):this.element=document.getElementById(w.id),w.controlOptions={anchor:n.ControlAnchor.NONE,attachToViewer:!1,autoFade:!1}):(w.id="navigator-"+n.now(),this.element=n.makeNeutralElement("div"),w.controlOptions={anchor:n.ControlAnchor.TOP_RIGHT,attachToViewer:!0,autoFade:w.autoFade},w.position&&(w.position==="BOTTOM_RIGHT"?w.controlOptions.anchor=n.ControlAnchor.BOTTOM_RIGHT:w.position==="BOTTOM_LEFT"?w.controlOptions.anchor=n.ControlAnchor.BOTTOM_LEFT:w.position==="TOP_RIGHT"?w.controlOptions.anchor=n.ControlAnchor.TOP_RIGHT:w.position==="TOP_LEFT"?w.controlOptions.anchor=n.ControlAnchor.TOP_LEFT:w.position==="ABSOLUTE"&&(w.controlOptions.anchor=n.ControlAnchor.ABSOLUTE,w.controlOptions.top=w.top,w.controlOptions.left=w.left,w.controlOptions.height=w.height,w.controlOptions.width=w.width))),this.element.id=w.id,this.element.className+=" navigator",w=n.extend(!0,{sizeRatio:n.DEFAULT_SETTINGS.navigatorSizeRatio},w,{element:this.element,tabIndex:-1,showNavigator:!1,mouseNavEnabled:!1,showNavigationControl:!1,showSequenceControl:!1,immediateRender:!0,blendTime:0,animationTime:w.animationTime,autoResize:!1,minZoomImageRatio:1,background:w.background,opacity:w.opacity,borderColor:w.borderColor,displayRegionColor:w.displayRegionColor}),w.minPixelRatio=this.minPixelRatio=_.minPixelRatio,n.setElementTouchActionNone(this.element),this.borderWidth=2,this.fudge=new n.Point(1,1),this.totalBorderWidths=new n.Point(this.borderWidth*2,this.borderWidth*2).minus(this.fudge),w.controlOptions.anchor!==n.ControlAnchor.NONE&&function(O,ee){O.margin="0px",O.border=ee+"px solid "+w.borderColor,O.padding="0px",O.background=w.background,O.opacity=w.opacity,O.overflow="hidden"}(this.element.style,this.borderWidth),this.displayRegion=n.makeNeutralElement("div"),this.displayRegion.id=this.element.id+"-displayregion",this.displayRegion.className="displayregion",function(O,ee){O.position="relative",O.top="0px",O.left="0px",O.fontSize="0px",O.overflow="hidden",O.border=ee+"px solid "+w.displayRegionColor,O.margin="0px",O.padding="0px",O.background="transparent",O.float="left",O.cssFloat="left",O.zIndex=999999999,O.cursor="default",O.boxSizing="content-box"}(this.displayRegion.style,this.borderWidth),n.setElementPointerEventsNone(this.displayRegion),n.setElementTouchActionNone(this.displayRegion),this.displayRegionContainer=n.makeNeutralElement("div"),this.displayRegionContainer.id=this.element.id+"-displayregioncontainer",this.displayRegionContainer.className="displayregioncontainer",this.displayRegionContainer.style.width="100%",this.displayRegionContainer.style.height="100%",n.setElementPointerEventsNone(this.displayRegionContainer),n.setElementTouchActionNone(this.displayRegionContainer),_.addControl(this.element,w.controlOptions),this._resizeWithViewer=w.controlOptions.anchor!==n.ControlAnchor.ABSOLUTE&&w.controlOptions.anchor!==n.ControlAnchor.NONE,w.width&&w.height?(this.setWidth(w.width),this.setHeight(w.height)):this._resizeWithViewer&&(I=n.getElementSize(_.element),this.element.style.height=Math.round(I.y*w.sizeRatio)+"px",this.element.style.width=Math.round(I.x*w.sizeRatio)+"px",this.oldViewerSize=I,k=n.getElementSize(this.element),this.elementArea=k.x*k.y),this.oldContainerSize=new n.Point(0,0),n.Viewer.apply(this,[w]),this.displayRegionContainer.appendChild(this.displayRegion),this.element.getElementsByTagName("div")[0].appendChild(this.displayRegionContainer);function G(O,ee){y(T.displayRegionContainer,O),y(T.displayRegion,-O),T.viewport.setRotation(O,ee)}if(w.navigatorRotate){var W=w.viewer.viewport?w.viewer.viewport.getRotation():w.viewer.degrees||0;G(W,!0),w.viewer.addHandler("rotate",function(O){G(O.degrees,O.immediately)})}this.innerTracker.destroy(),this.innerTracker=new n.MouseTracker({userData:"Navigator.innerTracker",element:this.element,dragHandler:n.delegate(this,d),clickHandler:n.delegate(this,o),releaseHandler:n.delegate(this,c),scrollHandler:n.delegate(this,v),preProcessEventHandler:function(O){O.eventType==="wheel"&&(O.preventDefault=!0)}}),this.outerTracker.userData="Navigator.outerTracker",n.setElementPointerEventsNone(this.canvas),n.setElementPointerEventsNone(this.container),this.addHandler("reset-size",function(){T.viewport&&T.viewport.goHome(!0)}),_.world.addHandler("item-index-change",function(O){window.setTimeout(function(){var ee=T.world.getItemAt(O.previousIndex);T.world.setItemIndex(ee,O.newIndex)},1)}),_.world.addHandler("remove-item",function(O){var ee=O.item,ve=T._getMatchingItem(ee);ve&&T.world.removeItem(ve)}),this.update(_.viewport)},n.extend(n.Navigator.prototype,n.EventSource.prototype,n.Viewer.prototype,{updateSize:function(){if(this.viewport){var w=new n.Point(this.container.clientWidth===0?1:this.container.clientWidth,this.container.clientHeight===0?1:this.container.clientHeight);w.equals(this.oldContainerSize)||(this.viewport.resize(w,!0),this.viewport.goHome(!0),this.oldContainerSize=w,this.world.update(),this.world.draw(),this.update(this.viewer.viewport))}},setWidth:function(w){this.width=w,this.element.style.width=typeof w=="number"?w+"px":w,this._resizeWithViewer=!1,this.updateSize()},setHeight:function(w){this.height=w,this.element.style.height=typeof w=="number"?w+"px":w,this._resizeWithViewer=!1,this.updateSize()},setFlip:function(w){return this.viewport.setFlip(w),this.setDisplayTransform(this.viewer.viewport.getFlip()?"scale(-1,1)":"scale(1,1)"),this},setDisplayTransform:function(w){a(this.canvas,w),a(this.element,w)},update:function(w){var _,T,I,k,G,W;if(w||(w=this.viewer.viewport),_=n.getElementSize(this.viewer.element),this._resizeWithViewer&&_.x&&_.y&&!_.equals(this.oldViewerSize)&&(this.oldViewerSize=_,this.maintainSizeRatio||!this.elementArea?(T=_.x*this.sizeRatio,I=_.y*this.sizeRatio):(T=Math.sqrt(this.elementArea*(_.x/_.y)),I=this.elementArea/T),this.element.style.width=Math.round(T)+"px",this.element.style.height=Math.round(I)+"px",this.elementArea||(this.elementArea=T*I),this.updateSize()),w&&this.viewport){if(k=w.getBoundsNoRotate(!0),G=this.viewport.pixelFromPointNoRotate(k.getTopLeft(),!1),W=this.viewport.pixelFromPointNoRotate(k.getBottomRight(),!1).minus(this.totalBorderWidths),!this.navigatorRotate){var O=w.getRotation(!0);y(this.displayRegion,-O)}var ee=this.displayRegion.style;ee.display=this.world.getItemCount()?"block":"none",ee.top=G.y.toFixed(2)+"px",ee.left=G.x.toFixed(2)+"px";var ve=W.x-G.x,we=W.y-G.y;ee.width=Math.round(Math.max(ve,0))+"px",ee.height=Math.round(Math.max(we,0))+"px"}},addTiledImage:function(w){var _=this,T=w.originalTiledImage;delete w.original;var I=n.extend({},w,{success:function(k){var G=k.item;G._originalForNavigator=T,_._matchBounds(G,T,!0),_._matchOpacity(G,T),_._matchCompositeOperation(G,T);function W(){_._matchBounds(G,T)}function O(){_._matchOpacity(G,T)}function ee(){_._matchCompositeOperation(G,T)}T.addHandler("bounds-change",W),T.addHandler("clip-change",W),T.addHandler("opacity-change",O),T.addHandler("composite-operation-change",ee)}});return n.Viewer.prototype.addTiledImage.apply(this,[I])},destroy:function(){return n.Viewer.prototype.destroy.apply(this)},_getMatchingItem:function(w){for(var _=this.world.getItemCount(),T,I=0;I<_;I++)if(T=this.world.getItemAt(I),T._originalForNavigator===w)return T;return null},_matchBounds:function(w,_,T){var I=_.getBoundsNoRotate();w.setPosition(I.getTopLeft(),T),w.setWidth(I.width,T),w.setRotation(_.getRotation(),T),w.setClip(_.getClip()),w.setFlip(_.getFlip())},_matchOpacity:function(w,_){w.setOpacity(_.opacity)},_matchCompositeOperation:function(w,_){w.setCompositeOperation(_.compositeOperation)}});function o(w){var _={tracker:w.eventSource,position:w.position,quick:w.quick,shift:w.shift,originalEvent:w.originalEvent,preventDefaultAction:!1};if(this.viewer.raiseEvent("navigator-click",_),!_.preventDefaultAction&&w.quick&&this.viewer.viewport&&(this.panVertical||this.panHorizontal)){this.viewer.viewport.flipped&&(w.position.x=this.viewport.getContainerSize().x-w.position.x);var T=this.viewport.pointFromPixel(w.position);this.panVertical?this.panHorizontal||(T.x=this.viewer.viewport.getCenter(!0).x):T.y=this.viewer.viewport.getCenter(!0).y,this.viewer.viewport.panTo(T),this.viewer.viewport.applyConstraints()}}function d(w){var _={tracker:w.eventSource,position:w.position,delta:w.delta,speed:w.speed,direction:w.direction,shift:w.shift,originalEvent:w.originalEvent,preventDefaultAction:!1};this.viewer.raiseEvent("navigator-drag",_),!_.preventDefaultAction&&this.viewer.viewport&&(this.panHorizontal||(w.delta.x=0),this.panVertical||(w.delta.y=0),this.viewer.viewport.flipped&&(w.delta.x=-w.delta.x),this.viewer.viewport.panBy(this.viewport.deltaPointsFromPixels(w.delta)),this.viewer.constrainDuringPan&&this.viewer.viewport.applyConstraints())}function c(w){w.insideElementPressed&&this.viewer.viewport&&this.viewer.viewport.applyConstraints()}function v(w){var _={tracker:w.eventSource,position:w.position,scroll:w.scroll,shift:w.shift,originalEvent:w.originalEvent,preventDefault:w.preventDefault};this.viewer.raiseEvent("navigator-scroll",_),w.preventDefault=_.preventDefault}function y(w,_){a(w,"rotate("+_+"deg)")}function a(w,_){w.style.webkitTransform=_,w.style.mozTransform=_,w.style.msTransform=_,w.style.oTransform=_,w.style.transform=_}}(Pe),function(n){var o={Errors:{Dzc:"Sorry, we don't support Deep Zoom Collections!",Dzi:"Hmm, this doesn't appear to be a valid Deep Zoom Image.",Xml:"Hmm, this doesn't appear to be a valid Deep Zoom Image.",ImageFormat:"Sorry, we don't support {0}-based Deep Zoom Images.",Security:"It looks like a security restriction stopped us from loading this Deep Zoom Image.",Status:"This space unintentionally left blank ({0} {1}).",OpenFailed:"Unable to open {0}: {1}"},Tooltips:{FullPage:"Toggle full page",Home:"Go home",ZoomIn:"Zoom in",ZoomOut:"Zoom out",NextPage:"Next page",PreviousPage:"Previous page",RotateLeft:"Rotate left",RotateRight:"Rotate right",Flip:"Flip Horizontally"}};n.extend(n,{getString:function(d){var c=d.split("."),v=null,y=arguments,a=o,w;for(w=0;w<c.length-1;w++)a=a[c[w]]||{};return v=a[c[w]],typeof v!="string"&&(n.console.error("Untranslated source string:",d),v=""),v.replace(/\{\d+\}/g,function(_){var T=parseInt(_.match(/\d+/),10)+1;return T<y.length?y[T]:""})},setString:function(d,c){var v=d.split("."),y=o,a;for(a=0;a<v.length-1;a++)y[v[a]]||(y[v[a]]={}),y=y[v[a]];y[v[a]]=c}})}(Pe),function(n){n.Point=function(o,d){this.x=typeof o=="number"?o:0,this.y=typeof d=="number"?d:0},n.Point.prototype={clone:function(){return new n.Point(this.x,this.y)},plus:function(o){return new n.Point(this.x+o.x,this.y+o.y)},minus:function(o){return new n.Point(this.x-o.x,this.y-o.y)},times:function(o){return new n.Point(this.x*o,this.y*o)},divide:function(o){return new n.Point(this.x/o,this.y/o)},negate:function(){return new n.Point(-this.x,-this.y)},distanceTo:function(o){return Math.sqrt(Math.pow(this.x-o.x,2)+Math.pow(this.y-o.y,2))},squaredDistanceTo:function(o){return Math.pow(this.x-o.x,2)+Math.pow(this.y-o.y,2)},apply:function(o){return new n.Point(o(this.x),o(this.y))},equals:function(o){return o instanceof n.Point&&this.x===o.x&&this.y===o.y},rotate:function(o,d){d=d||new n.Point(0,0);var c,v;if(o%90===0){var y=n.positiveModulo(o,360);switch(y){case 0:c=1,v=0;break;case 90:c=0,v=1;break;case 180:c=-1,v=0;break;case 270:c=0,v=-1;break}}else{var a=o*Math.PI/180;c=Math.cos(a),v=Math.sin(a)}var w=c*(this.x-d.x)-v*(this.y-d.y)+d.x,_=v*(this.x-d.x)+c*(this.y-d.y)+d.y;return new n.Point(w,_)},toString:function(){return"("+Math.round(this.x*100)/100+","+Math.round(this.y*100)/100+")"}}}(Pe),function(n){n.TileSource=function(d,c,v,y,a,w){var _=this,T=arguments,I,k;if(n.isPlainObject(d)?I=d:I={width:T[0],height:T[1],tileSize:T[2],tileOverlap:T[3],minLevel:T[4],maxLevel:T[5]},n.EventSource.call(this),n.extend(!0,this,I),!this.success){for(k=0;k<arguments.length;k++)if(n.isFunction(arguments[k])){this.success=arguments[k];break}}this.success&&this.addHandler("ready",function(G){_.success(G)}),n.type(arguments[0])==="string"&&(this.url=arguments[0]),this.url?(this.aspectRatio=1,this.dimensions=new n.Point(10,10),this._tileWidth=0,this._tileHeight=0,this.tileOverlap=0,this.minLevel=0,this.maxLevel=0,this.ready=!1,this.getImageInfo(this.url)):(this.ready=!0,this.aspectRatio=I.width&&I.height?I.width/I.height:1,this.dimensions=new n.Point(I.width,I.height),this.tileSize?(this._tileWidth=this._tileHeight=this.tileSize,delete this.tileSize):(this.tileWidth?(this._tileWidth=this.tileWidth,delete this.tileWidth):this._tileWidth=0,this.tileHeight?(this._tileHeight=this.tileHeight,delete this.tileHeight):this._tileHeight=0),this.tileOverlap=I.tileOverlap?I.tileOverlap:0,this.minLevel=I.minLevel?I.minLevel:0,this.maxLevel=I.maxLevel!==void 0&&I.maxLevel!==null?I.maxLevel:I.width&&I.height?Math.ceil(Math.log(Math.max(I.width,I.height))/Math.log(2)):0,this.success&&n.isFunction(this.success)&&this.success(this))},n.TileSource.prototype={getTileSize:function(d){return n.console.error("[TileSource.getTileSize] is deprecated. Use TileSource.getTileWidth() and TileSource.getTileHeight() instead"),this._tileWidth},getTileWidth:function(d){return this._tileWidth?this._tileWidth:this.getTileSize(d)},getTileHeight:function(d){return this._tileHeight?this._tileHeight:this.getTileSize(d)},setMaxLevel:function(d){this.maxLevel=d,this._memoizeLevelScale()},getLevelScale:function(d){return this._memoizeLevelScale(),this.getLevelScale(d)},_memoizeLevelScale:function(){var d={},c;for(c=0;c<=this.maxLevel;c++)d[c]=1/Math.pow(2,this.maxLevel-c);this.getLevelScale=function(v){return d[v]}},getNumTiles:function(d){var c=this.getLevelScale(d),v=Math.ceil(c*this.dimensions.x/this.getTileWidth(d)),y=Math.ceil(c*this.dimensions.y/this.getTileHeight(d));return new n.Point(v,y)},getPixelRatio:function(d){var c=this.dimensions.times(this.getLevelScale(d)),v=1/c.x*n.pixelDensityRatio,y=1/c.y*n.pixelDensityRatio;return new n.Point(v,y)},getClosestLevel:function(){var d,c;for(d=this.minLevel+1;d<=this.maxLevel&&(c=this.getNumTiles(d),!(c.x>1||c.y>1));d++);return d-1},getTileAtPoint:function(d,c){var v=c.x>=0&&c.x<=1&&c.y>=0&&c.y<=1/this.aspectRatio;n.console.assert(v,"[TileSource.getTileAtPoint] must be called with a valid point.");var y=this.dimensions.x*this.getLevelScale(d),a=c.x*y,w=c.y*y,_=Math.floor(a/this.getTileWidth(d)),T=Math.floor(w/this.getTileHeight(d));c.x>=1&&(_=this.getNumTiles(d).x-1);var I=1e-15;return c.y>=1/this.aspectRatio-I&&(T=this.getNumTiles(d).y-1),new n.Point(_,T)},getTileBounds:function(d,c,v,y){var a=this.dimensions.times(this.getLevelScale(d)),w=this.getTileWidth(d),_=this.getTileHeight(d),T=c===0?0:w*c-this.tileOverlap,I=v===0?0:_*v-this.tileOverlap,k=w+(c===0?1:2)*this.tileOverlap,G=_+(v===0?1:2)*this.tileOverlap,W=1/a.x;return k=Math.min(k,a.x-T),G=Math.min(G,a.y-I),y?new n.Rect(0,0,k,G):new n.Rect(T*W,I*W,k*W,G*W)},getImageInfo:function(d){var c=this,v,y,a,w,_,T,I;d&&(_=d.split("/"),T=_[_.length-1],I=T.lastIndexOf("."),I>-1&&(_[_.length-1]=T.slice(0,I)));var k=null;if(this.splitHashDataForPost){var G=d.indexOf("#");G!==-1&&(k=d.substring(G+1),d=d.substr(0,G))}y=function(W){typeof W=="string"&&(W=n.parseXml(W));var O=n.TileSource.determineType(c,W,d);if(!O){c.raiseEvent("open-failed",{message:"Unable to load TileSource",source:d});return}w=O.prototype.configure.apply(c,[W,d,k]),w.ajaxWithCredentials===void 0&&(w.ajaxWithCredentials=c.ajaxWithCredentials),a=new O(w),c.ready=!0,c.raiseEvent("ready",{tileSource:a})},d.match(/\.js$/)?(v=d.split("/").pop().replace(".js",""),n.jsonp({url:d,async:!1,callbackName:v,callback:y})):n.makeAjaxRequest({url:d,postData:k,withCredentials:this.ajaxWithCredentials,headers:this.ajaxHeaders,success:function(W){var O=o(W);y(O)},error:function(W,O){var ee;try{ee="HTTP "+W.status+" attempting to load TileSource: "+d}catch{var ve;typeof O>"u"||!O.toString?ve="Unknown error":ve=O.toString(),ee=ve+" attempting to load TileSource: "+d}n.console.error(ee),c.raiseEvent("open-failed",{message:ee,source:d,postData:k})}})},supports:function(d,c){return!1},configure:function(d,c,v){throw new Error("Method not implemented.")},getTileUrl:function(d,c,v){throw new Error("Method not implemented.")},getTilePostData:function(d,c,v){return null},getTileAjaxHeaders:function(d,c,v){return{}},getTileHashKey:function(d,c,v,y,a,w){function _(T){return a?T+"+"+JSON.stringify(a):T}return _(typeof y!="string"?d+"/"+c+"_"+v:y)},tileExists:function(d,c,v){var y=this.getNumTiles(d);return d>=this.minLevel&&d<=this.maxLevel&&c>=0&&v>=0&&c<y.x&&v<y.y},hasTransparency:function(d,c,v,y){return!!d||c.match(".png")},downloadTileStart:function(d){var c=d.userData,v=new Image;c.image=v,c.request=null;var y=function(a){if(!v){d.finish(null,c.request,"Image load failed: undefined Image instance.");return}v.onload=v.onerror=v.onabort=null,d.finish(a?null:v,c.request,a)};v.onload=function(){y()},v.onabort=v.onerror=function(){y("Image load aborted.")},d.loadWithAjax?c.request=n.makeAjaxRequest({url:d.src,withCredentials:d.ajaxWithCredentials,headers:d.ajaxHeaders,responseType:"arraybuffer",postData:d.postData,success:function(a){var w;try{w=new window.Blob([a.response])}catch(I){var _=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;if(I.name==="TypeError"&&_){var T=new _;T.append(a.response),w=T.getBlob()}}w.size===0?y("Empty image response."):v.src=(window.URL||window.webkitURL).createObjectURL(w)},error:function(a){y("Image load aborted - XHR error")}}):(d.crossOriginPolicy!==!1&&(v.crossOrigin=d.crossOriginPolicy),v.src=d.src)},downloadTileAbort:function(d){d.userData.request&&d.userData.request.abort();var c=d.userData.image;d.userData.image&&(c.onload=c.onerror=c.onabort=null)},createTileCache:function(d,c,v){d._data=c},destroyTileCache:function(d){d._data=null,d._renderedContext=null},getTileCacheData:function(d){return d._data},getTileCacheDataAsImage:function(d){return d._data},getTileCacheDataAsContext2D:function(d){if(!d._renderedContext){var c=document.createElement("canvas");c.width=d._data.width,c.height=d._data.height,d._renderedContext=c.getContext("2d"),d._renderedContext.drawImage(d._data,0,0),d._data=null}return d._renderedContext}},n.extend(!0,n.TileSource.prototype,n.EventSource.prototype);function o(d){var c=d.responseText,v=d.status,y,a;if(d){if(d.status!==200&&d.status!==0)throw v=d.status,y=v===404?"Not Found":d.statusText,new Error(n.getString("Errors.Status",v,y))}else throw new Error(n.getString("Errors.Security"));if(c.match(/^\s*<.*/))try{a=d.responseXML&&d.responseXML.documentElement?d.responseXML:n.parseXml(c)}catch{a=d.responseText}else if(c.match(/\s*[{[].*/))try{a=n.parseJSON(c)}catch{a=c}else a=c;return a}n.TileSource.determineType=function(d,c,v){var y;for(y in Pe)if(y.match(/.+TileSource$/)&&n.isFunction(Pe[y])&&n.isFunction(Pe[y].prototype.supports)&&Pe[y].prototype.supports.call(d,c,v))return Pe[y];return n.console.error("No TileSource was able to open %s %s",v,c),null}}(Pe),function(n){n.DziTileSource=function(c,v,y,a,w,_,T,I,k){var G,W,O,ee;if(n.isPlainObject(c)?ee=c:ee={width:arguments[0],height:arguments[1],tileSize:arguments[2],tileOverlap:arguments[3],tilesUrl:arguments[4],fileFormat:arguments[5],displayRects:arguments[6],minLevel:arguments[7],maxLevel:arguments[8]},this._levelRects={},this.tilesUrl=ee.tilesUrl,this.fileFormat=ee.fileFormat,this.displayRects=ee.displayRects,this.displayRects)for(G=this.displayRects.length-1;G>=0;G--)for(W=this.displayRects[G],O=W.minLevel;O<=W.maxLevel;O++)this._levelRects[O]||(this._levelRects[O]=[]),this._levelRects[O].push(W);n.TileSource.apply(this,[ee])},n.extend(n.DziTileSource.prototype,n.TileSource.prototype,{supports:function(c,v){var y;return c.Image?y=c.Image.xmlns:c.documentElement&&(c.documentElement.localName==="Image"||c.documentElement.tagName==="Image")&&(y=c.documentElement.namespaceURI),y=(y||"").toLowerCase(),y.indexOf("schemas.microsoft.com/deepzoom/2008")!==-1||y.indexOf("schemas.microsoft.com/deepzoom/2009")!==-1},configure:function(c,v,y){var a;return n.isPlainObject(c)?a=d(this,c):a=o(this,c),v&&!a.tilesUrl&&(a.tilesUrl=v.replace(/([^/]+?)(\.(dzi|xml|js)?(\?[^/]*)?)?\/?$/,"$1_files/"),v.search(/\.(dzi|xml|js)\?/)!==-1?a.queryParams=v.match(/\?.*/):a.queryParams=""),a},getTileUrl:function(c,v,y){return[this.tilesUrl,c,"/",v,"_",y,".",this.fileFormat,this.queryParams].join("")},tileExists:function(c,v,y){var a=this._levelRects[c],w,_,T,I,k,G,W;if(this.minLevel&&c<this.minLevel||this.maxLevel&&c>this.maxLevel)return!1;if(!a||!a.length)return!0;for(W=a.length-1;W>=0;W--)if(w=a[W],!(c<w.minLevel||c>w.maxLevel)&&(_=this.getLevelScale(c),T=w.x*_,I=w.y*_,k=T+w.width*_,G=I+w.height*_,T=Math.floor(T/this._tileWidth),I=Math.floor(I/this._tileWidth),k=Math.ceil(k/this._tileWidth),G=Math.ceil(G/this._tileWidth),T<=v&&v<k&&I<=y&&y<G))return!0;return!1}});function o(c,v){if(!v||!v.documentElement)throw new Error(n.getString("Errors.Xml"));var y=v.documentElement,a=y.localName||y.tagName,w=v.documentElement.namespaceURI,_=null,T=[],I,k,G,W,O;if(a==="Image")try{if(W=y.getElementsByTagName("Size")[0],W===void 0&&(W=y.getElementsByTagNameNS(w,"Size")[0]),_={Image:{xmlns:"http://schemas.microsoft.com/deepzoom/2008",Url:y.getAttribute("Url"),Format:y.getAttribute("Format"),DisplayRect:null,Overlap:parseInt(y.getAttribute("Overlap"),10),TileSize:parseInt(y.getAttribute("TileSize"),10),Size:{Height:parseInt(W.getAttribute("Height"),10),Width:parseInt(W.getAttribute("Width"),10)}}},!n.imageFormatSupported(_.Image.Format))throw new Error(n.getString("Errors.ImageFormat",_.Image.Format.toUpperCase()));for(I=y.getElementsByTagName("DisplayRect"),I===void 0&&(I=y.getElementsByTagNameNS(w,"DisplayRect")[0]),O=0;O<I.length;O++)k=I[O],G=k.getElementsByTagName("Rect")[0],G===void 0&&(G=k.getElementsByTagNameNS(w,"Rect")[0]),T.push({Rect:{X:parseInt(G.getAttribute("X"),10),Y:parseInt(G.getAttribute("Y"),10),Width:parseInt(G.getAttribute("Width"),10),Height:parseInt(G.getAttribute("Height"),10),MinLevel:parseInt(k.getAttribute("MinLevel"),10),MaxLevel:parseInt(k.getAttribute("MaxLevel"),10)}});return T.length&&(_.Image.DisplayRect=T),d(c,_)}catch(we){throw we instanceof Error?we:new Error(n.getString("Errors.Dzi"))}else{if(a==="Collection")throw new Error(n.getString("Errors.Dzc"));if(a==="Error"){var ee=y.getElementsByTagName("Message")[0],ve=ee.firstChild.nodeValue;throw new Error(ve)}}throw new Error(n.getString("Errors.Dzi"))}function d(c,v){var y=v.Image,a=y.Url,w=y.Format,_=y.Size,T=y.DisplayRect||[],I=parseInt(_.Width,10),k=parseInt(_.Height,10),G=parseInt(y.TileSize,10),W=parseInt(y.Overlap,10),O=[],ee,ve;for(ve=0;ve<T.length;ve++)ee=T[ve].Rect,O.push(new n.DisplayRect(parseInt(ee.X,10),parseInt(ee.Y,10),parseInt(ee.Width,10),parseInt(ee.Height,10),parseInt(ee.MinLevel,10),parseInt(ee.MaxLevel,10)));return n.extend(!0,{width:I,height:k,tileSize:G,tileOverlap:W,minLevel:null,maxLevel:null,tilesUrl:a,fileFormat:w,displayRects:O},v)}}(Pe),function(n){n.IIIFTileSource=function(y){if(n.extend(!0,this,y),this._id=this["@id"]||this.id||this.identifier||null,!(this.height&&this.width&&this._id))throw new Error("IIIF required parameters (width, height, or id) not provided.");if(y.tileSizePerScaleFactor={},this.tileFormat=this.tileFormat||"jpg",this.version=y.version,this.tile_width&&this.tile_height)y.tileWidth=this.tile_width,y.tileHeight=this.tile_height;else if(this.tile_width)y.tileSize=this.tile_width;else if(this.tile_height)y.tileSize=this.tile_height;else if(this.tiles)if(this.tiles.length===1)y.tileWidth=this.tiles[0].width,y.tileHeight=this.tiles[0].height||this.tiles[0].width,this.scale_factors=this.tiles[0].scaleFactors;else{this.scale_factors=[];for(var a=0;a<this.tiles.length;a++)for(var w=0;w<this.tiles[a].scaleFactors.length;w++){var _=this.tiles[a].scaleFactors[w];this.scale_factors.push(_),y.tileSizePerScaleFactor[_]={width:this.tiles[a].width,height:this.tiles[a].height||this.tiles[a].width}}}else if(o(y)){for(var T=Math.min(this.height,this.width),I=[256,512,1024],k=[],G=0;G<I.length;G++)I[G]<=T&&k.push(I[G]);k.length>0?y.tileSize=Math.max.apply(null,k):y.tileSize=T}else this.sizes&&this.sizes.length>0?(this.emulateLegacyImagePyramid=!0,y.levels=d(this),n.extend(!0,y,{width:y.levels[y.levels.length-1].width,height:y.levels[y.levels.length-1].height,tileSize:Math.max(y.height,y.width),tileOverlap:0,minLevel:0,maxLevel:y.levels.length-1}),this.levels=y.levels):n.console.error("Nothing in the info.json to construct image pyramids from");if(!y.maxLevel&&!this.emulateLegacyImagePyramid)if(!this.scale_factors)y.maxLevel=Number(Math.round(Math.log(Math.max(this.width,this.height),2)));else{var W=Math.max.apply(null,this.scale_factors);y.maxLevel=Math.round(Math.log(W)*Math.LOG2E)}if(this.sizes){var O=this.sizes.length;(O===y.maxLevel||O===y.maxLevel+1)&&(this.levelSizes=this.sizes.slice().sort((ee,ve)=>ee.width-ve.width),O===y.maxLevel&&this.levelSizes.push({width:this.width,height:this.height}))}n.TileSource.apply(this,[y])},n.extend(n.IIIFTileSource.prototype,n.TileSource.prototype,{supports:function(y,a){return y.protocol&&y.protocol==="http://iiif.io/api/image"||y["@context"]&&(y["@context"]==="http://library.stanford.edu/iiif/image-api/1.1/context.json"||y["@context"]==="http://iiif.io/api/image/1/context.json")||y.profile&&y.profile.indexOf("http://library.stanford.edu/iiif/image-api/compliance.html")===0||y.identifier&&y.width&&y.height?!0:!!(y.documentElement&&y.documentElement.tagName==="info"&&y.documentElement.namespaceURI==="http://library.stanford.edu/iiif/image-api/ns/")},configure:function(y,a,w){if(n.isPlainObject(y)){if(!y["@context"])y["@context"]="http://iiif.io/api/image/1.0/context.json",y["@id"]=a.replace("/info.json",""),y.version=1;else{var T=y["@context"];if(Array.isArray(T)){for(var I=0;I<T.length;I++)if(typeof T[I]=="string"&&(/^http:\/\/iiif\.io\/api\/image\/[1-3]\/context\.json$/.test(T[I])||T[I]==="http://library.stanford.edu/iiif/image-api/1.1/context.json")){T=T[I];break}}switch(T){case"http://iiif.io/api/image/1/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/context.json":y.version=1;break;case"http://iiif.io/api/image/2/context.json":y.version=2;break;case"http://iiif.io/api/image/3/context.json":y.version=3;break;default:n.console.error("Data has a @context property which contains no known IIIF context URI.")}}if(y.preferredFormats){for(var k=0;k<y.preferredFormats.length;k++)if(Pe.imageFormatSupported(y.preferredFormats[k])){y.tileFormat=y.preferredFormats[k];break}}return y}else{var _=c(y);return _["@context"]="http://iiif.io/api/image/1.0/context.json",_["@id"]=a.replace("/info.xml",""),_.version=1,_}},getTileWidth:function(y){if(this.emulateLegacyImagePyramid)return n.TileSource.prototype.getTileWidth.call(this,y);var a=Math.pow(2,this.maxLevel-y);return this.tileSizePerScaleFactor&&this.tileSizePerScaleFactor[a]?this.tileSizePerScaleFactor[a].width:this._tileWidth},getTileHeight:function(y){if(this.emulateLegacyImagePyramid)return n.TileSource.prototype.getTileHeight.call(this,y);var a=Math.pow(2,this.maxLevel-y);return this.tileSizePerScaleFactor&&this.tileSizePerScaleFactor[a]?this.tileSizePerScaleFactor[a].height:this._tileHeight},getLevelScale:function(y){if(this.emulateLegacyImagePyramid){var a=NaN;return this.levels.length>0&&y>=this.minLevel&&y<=this.maxLevel&&(a=this.levels[y].width/this.levels[this.maxLevel].width),a}return n.TileSource.prototype.getLevelScale.call(this,y)},getNumTiles:function(y){if(this.emulateLegacyImagePyramid){var a=this.getLevelScale(y);return a?new n.Point(1,1):new n.Point(0,0)}if(this.levelSizes){var w=this.levelSizes[y],_=Math.ceil(w.width/this.getTileWidth(y)),T=Math.ceil(w.height/this.getTileHeight(y));return new n.Point(_,T)}else return n.TileSource.prototype.getNumTiles.call(this,y)},getTileAtPoint:function(y,a){if(this.emulateLegacyImagePyramid)return new n.Point(0,0);if(this.levelSizes){var w=a.x>=0&&a.x<=1&&a.y>=0&&a.y<=1/this.aspectRatio;n.console.assert(w,"[TileSource.getTileAtPoint] must be called with a valid point.");var _=this.levelSizes[y].width,T=a.x*_,I=a.y*_,k=Math.floor(T/this.getTileWidth(y)),G=Math.floor(I/this.getTileHeight(y));a.x>=1&&(k=this.getNumTiles(y).x-1);var W=1e-15;return a.y>=1/this.aspectRatio-W&&(G=this.getNumTiles(y).y-1),new n.Point(k,G)}return n.TileSource.prototype.getTileAtPoint.call(this,y,a)},getTileUrl:function(y,a,w){if(this.emulateLegacyImagePyramid){var _=null;return this.levels.length>0&&y>=this.minLevel&&y<=this.maxLevel&&(_=this.levels[y].url),_}var T="0",I=Math.pow(.5,this.maxLevel-y),k,G,W,O,ee,ve,we,ot,Ge,je,xt,Q,vt,Ne,dt,ke;return this.levelSizes?(k=this.levelSizes[y].width,G=this.levelSizes[y].height):(k=Math.ceil(this.width*I),G=Math.ceil(this.height*I)),W=this.getTileWidth(y),O=this.getTileHeight(y),ee=Math.round(W/I),ve=Math.round(O/I),this.version===1?dt="native."+this.tileFormat:dt="default."+this.tileFormat,k<W&&G<O?(this.version===2&&k===this.width?Q="full":this.version===3&&k===this.width&&G===this.height?Q="max":this.version===3?Q=k+","+G:Q=k+",",we="full"):(ot=a*ee,Ge=w*ve,je=Math.min(ee,this.width-ot),xt=Math.min(ve,this.height-Ge),a===0&&w===0&&je===this.width&&xt===this.height?we="full":we=[ot,Ge,je,xt].join(","),vt=Math.min(W,k-a*W),Ne=Math.min(O,G-w*O),this.version===2&&vt===this.width?Q="full":this.version===3&&vt===this.width&&Ne===this.height?Q="max":this.version===3?Q=vt+","+Ne:Q=vt+","),ke=[this._id,we,Q,T,dt].join("/"),ke},__testonly__:{canBeTiled:o,constructLevels:d}});function o(y){var a=["http://library.stanford.edu/iiif/image-api/compliance.html#level0","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0","http://iiif.io/api/image/2/level0.json","level0","https://iiif.io/api/image/3/level0.json"],w=Array.isArray(y.profile)?y.profile[0]:y.profile,_=a.indexOf(w)!==-1,T=!1;return y.version===2&&y.profile.length>1&&y.profile[1].supports&&(T=y.profile[1].supports.indexOf("sizeByW")!==-1),y.version===3&&y.extraFeatures&&(T=y.extraFeatures.indexOf("sizeByWh")!==-1),!_||T}function d(y){for(var a=[],w=0;w<y.sizes.length;w++)a.push({url:y._id+"/full/"+y.sizes[w].width+","+(y.version===3?y.sizes[w].height:"")+"/0/default."+y.tileFormat,width:y.sizes[w].width,height:y.sizes[w].height});return a.sort(function(_,T){return _.width-T.width})}function c(y){if(!y||!y.documentElement)throw new Error(n.getString("Errors.Xml"));var a=y.documentElement,w=a.tagName,_=null;if(w==="info")try{return _={},v(a,_),_}catch(T){throw T instanceof Error?T:new Error(n.getString("Errors.IIIF"))}throw new Error(n.getString("Errors.IIIF"))}function v(y,a,w){var _,T;if(y.nodeType===3&&w)T=y.nodeValue.trim(),T.match(/^\d*$/)&&(T=Number(T)),a[w]?(n.isArray(a[w])||(a[w]=[a[w]]),a[w].push(T)):a[w]=T;else if(y.nodeType===1)for(_=0;_<y.childNodes.length;_++)v(y.childNodes[_],a,y.nodeName)}}(Pe),function(n){n.OsmTileSource=function(o,d,c,v,y){var a;n.isPlainObject(o)?a=o:a={width:arguments[0],height:arguments[1],tileSize:arguments[2],tileOverlap:arguments[3],tilesUrl:arguments[4]},(!a.width||!a.height)&&(a.width=65572864,a.height=65572864),a.tileSize||(a.tileSize=256,a.tileOverlap=0),a.tilesUrl||(a.tilesUrl="http://tile.openstreetmap.org/"),a.minLevel=8,n.TileSource.apply(this,[a])},n.extend(n.OsmTileSource.prototype,n.TileSource.prototype,{supports:function(o,d){return o.type&&o.type==="openstreetmaps"},configure:function(o,d,c){return o},getTileUrl:function(o,d,c){return this.tilesUrl+(o-8)+"/"+d+"/"+c+".png"}})}(Pe),function(n){n.TmsTileSource=function(o,d,c,v,y){var a;n.isPlainObject(o)?a=o:a={width:arguments[0],height:arguments[1],tileSize:arguments[2],tileOverlap:arguments[3],tilesUrl:arguments[4]};var w=Math.ceil(a.width/256)*256,_=Math.ceil(a.height/256)*256,T;w>_?T=w/256:T=_/256,a.maxLevel=Math.ceil(Math.log(T)/Math.log(2))-1,a.tileSize=256,a.width=w,a.height=_,n.TileSource.apply(this,[a])},n.extend(n.TmsTileSource.prototype,n.TileSource.prototype,{supports:function(o,d){return o.type&&o.type==="tiledmapservice"},configure:function(o,d,c){return o},getTileUrl:function(o,d,c){var v=this.getNumTiles(o).y-1;return this.tilesUrl+o+"/"+d+"/"+(v-c)+".png"}})}(Pe),function(n){n.ZoomifyTileSource=function(o){typeof o.tileSize>"u"&&(o.tileSize=256),typeof o.fileFormat>"u"&&(o.fileFormat="jpg",this.fileFormat=o.fileFormat);var d={x:o.width,y:o.height};for(o.imageSizes=[{x:o.width,y:o.height}],o.gridSize=[this._getGridSize(o.width,o.height,o.tileSize)];parseInt(d.x,10)>o.tileSize||parseInt(d.y,10)>o.tileSize;)d.x=Math.floor(d.x/2),d.y=Math.floor(d.y/2),o.imageSizes.push({x:d.x,y:d.y}),o.gridSize.push(this._getGridSize(d.x,d.y,o.tileSize));o.imageSizes.reverse(),o.gridSize.reverse(),o.minLevel=0,o.maxLevel=o.gridSize.length-1,Pe.TileSource.apply(this,[o])},n.extend(n.ZoomifyTileSource.prototype,n.TileSource.prototype,{_getGridSize:function(o,d,c){return{x:Math.ceil(o/c),y:Math.ceil(d/c)}},_calculateAbsoluteTileNumber:function(o,d,c){for(var v=0,y={},a=0;a<o;a++)y=this.gridSize[a],v+=y.x*y.y;return y=this.gridSize[o],v+=y.x*c+d,v},supports:function(o,d){return o.type&&o.type==="zoomifytileservice"},configure:function(o,d,c){return o},getTileUrl:function(o,d,c){var v=0,y=this._calculateAbsoluteTileNumber(o,d,c);return v=Math.floor(y/256),this.tilesUrl+"TileGroup"+v+"/"+o+"-"+d+"-"+c+"."+this.fileFormat}})}(Pe),function(n){n.LegacyTileSource=function(v){var y,a,w;n.isArray(v)&&(y={type:"legacy-image-pyramid",levels:v}),y.levels=o(y.levels),y.levels.length>0?(a=y.levels[y.levels.length-1].width,w=y.levels[y.levels.length-1].height):(a=0,w=0,n.console.error("No supported image formats found")),n.extend(!0,y,{width:a,height:w,tileSize:Math.max(w,a),tileOverlap:0,minLevel:0,maxLevel:y.levels.length>0?y.levels.length-1:0}),n.TileSource.apply(this,[y]),this.levels=y.levels},n.extend(n.LegacyTileSource.prototype,n.TileSource.prototype,{supports:function(v,y){return v.type&&v.type==="legacy-image-pyramid"||v.documentElement&&v.documentElement.getAttribute("type")==="legacy-image-pyramid"},configure:function(v,y,a){var w;return n.isPlainObject(v)?w=c(this,v):w=d(this,v),w},getLevelScale:function(v){var y=NaN;return this.levels.length>0&&v>=this.minLevel&&v<=this.maxLevel&&(y=this.levels[v].width/this.levels[this.maxLevel].width),y},getNumTiles:function(v){var y=this.getLevelScale(v);return y?new n.Point(1,1):new n.Point(0,0)},getTileUrl:function(v,y,a){var w=null;return this.levels.length>0&&v>=this.minLevel&&v<=this.maxLevel&&(w=this.levels[v].url),w}});function o(v){var y=[],a,w;for(w=0;w<v.length;w++)a=v[w],a.height&&a.width&&a.url?y.push({url:a.url,width:Number(a.width),height:Number(a.height)}):n.console.error("Unsupported image format: %s",a.url?a.url:"<no URL>");return y.sort(function(_,T){return _.height-T.height})}function d(v,y){if(!y||!y.documentElement)throw new Error(n.getString("Errors.Xml"));var a=y.documentElement,w=a.tagName,_=null,T=[],I,k;if(w==="image")try{for(_={type:a.getAttribute("type"),levels:[]},T=a.getElementsByTagName("level"),k=0;k<T.length;k++)I=T[k],_.levels.push({url:I.getAttribute("url"),width:parseInt(I.getAttribute("width"),10),height:parseInt(I.getAttribute("height"),10)});return c(v,_)}catch(G){throw G instanceof Error?G:new Error("Unknown error parsing Legacy Image Pyramid XML.")}else{if(w==="collection")throw new Error("Legacy Image Pyramid Collections not yet supported.");if(w==="error")throw new Error("Error: "+y)}throw new Error("Unknown element "+w)}function c(v,y){return y.levels}}(Pe),function(n){n.ImageTileSource=function(o){o=n.extend({buildPyramid:!0,crossOriginPolicy:!1,ajaxWithCredentials:!1},o),n.TileSource.apply(this,[o])},n.extend(n.ImageTileSource.prototype,n.TileSource.prototype,{supports:function(o,d){return o.type&&o.type==="image"},configure:function(o,d,c){return o},getImageInfo:function(o){var d=this._image=new Image,c=this;this.crossOriginPolicy&&(d.crossOrigin=this.crossOriginPolicy),this.ajaxWithCredentials&&(d.useCredentials=this.ajaxWithCredentials),n.addEvent(d,"load",function(){c.width=d.naturalWidth,c.height=d.naturalHeight,c.aspectRatio=c.width/c.height,c.dimensions=new n.Point(c.width,c.height),c._tileWidth=c.width,c._tileHeight=c.height,c.tileOverlap=0,c.minLevel=0,c.levels=c._buildLevels(),c.maxLevel=c.levels.length-1,c.ready=!0,c.raiseEvent("ready",{tileSource:c})}),n.addEvent(d,"error",function(){c.raiseEvent("open-failed",{message:"Error loading image at "+o,source:o})}),d.src=o},getLevelScale:function(o){var d=NaN;return o>=this.minLevel&&o<=this.maxLevel&&(d=this.levels[o].width/this.levels[this.maxLevel].width),d},getNumTiles:function(o){var d=this.getLevelScale(o);return d?new n.Point(1,1):new n.Point(0,0)},getTileUrl:function(o,d,c){var v=null;return o>=this.minLevel&&o<=this.maxLevel&&(v=this.levels[o].url),v},getContext2D:function(o,d,c){var v=null;return o>=this.minLevel&&o<=this.maxLevel&&(v=this.levels[o].context2D),v},destroy:function(o){this._freeupCanvasMemory(o)},_buildLevels:function(){var o=[{url:this._image.src,width:this._image.naturalWidth,height:this._image.naturalHeight}];if(!this.buildPyramid||!n.supportsCanvas)return delete this._image,o;var d=this._image.naturalWidth,c=this._image.naturalHeight,v=document.createElement("canvas"),y=v.getContext("2d");if(v.width=d,v.height=c,y.drawImage(this._image,0,0,d,c),o[0].context2D=y,delete this._image,n.isCanvasTainted(v))return o;for(;d>=2&&c>=2;){d=Math.floor(d/2),c=Math.floor(c/2);var a=document.createElement("canvas"),w=a.getContext("2d");a.width=d,a.height=c,w.drawImage(v,0,0,d,c),o.splice(0,0,{context2D:w,width:d,height:c}),v=a,y=w}return o},_freeupCanvasMemory:function(o){for(var d=0;d<this.levels.length;d++)this.levels[d].context2D&&(this.levels[d].context2D.canvas.height=0,this.levels[d].context2D.canvas.width=0,o&&o.raiseEvent("image-unloaded",{context2D:this.levels[d].context2D}))}})}(Pe),function(n){n.TileSourceCollection=function(o,d,c,v){n.console.error("TileSourceCollection is deprecated; use World instead")}}(Pe),function(n){n.ButtonState={REST:0,GROUP:1,HOVER:2,DOWN:3},n.Button=function(w){var _=this;n.EventSource.call(this),n.extend(!0,this,{tooltip:null,srcRest:null,srcGroup:null,srcHover:null,srcDown:null,clickTimeThreshold:n.DEFAULT_SETTINGS.clickTimeThreshold,clickDistThreshold:n.DEFAULT_SETTINGS.clickDistThreshold,fadeDelay:0,fadeLength:2e3,onPress:null,onRelease:null,onClick:null,onEnter:null,onExit:null,onFocus:null,onBlur:null,userData:null},w),this.element=w.element||n.makeNeutralElement("div"),w.element||(this.imgRest=n.makeTransparentImage(this.srcRest),this.imgGroup=n.makeTransparentImage(this.srcGroup),this.imgHover=n.makeTransparentImage(this.srcHover),this.imgDown=n.makeTransparentImage(this.srcDown),this.imgRest.alt=this.imgGroup.alt=this.imgHover.alt=this.imgDown.alt=this.tooltip,n.setElementPointerEventsNone(this.imgRest),n.setElementPointerEventsNone(this.imgGroup),n.setElementPointerEventsNone(this.imgHover),n.setElementPointerEventsNone(this.imgDown),this.element.style.position="relative",n.setElementTouchActionNone(this.element),this.imgGroup.style.position=this.imgHover.style.position=this.imgDown.style.position="absolute",this.imgGroup.style.top=this.imgHover.style.top=this.imgDown.style.top="0px",this.imgGroup.style.left=this.imgHover.style.left=this.imgDown.style.left="0px",this.imgHover.style.visibility=this.imgDown.style.visibility="hidden",this.element.appendChild(this.imgRest),this.element.appendChild(this.imgGroup),this.element.appendChild(this.imgHover),this.element.appendChild(this.imgDown)),this.addHandler("press",this.onPress),this.addHandler("release",this.onRelease),this.addHandler("click",this.onClick),this.addHandler("enter",this.onEnter),this.addHandler("exit",this.onExit),this.addHandler("focus",this.onFocus),this.addHandler("blur",this.onBlur),this.currentState=n.ButtonState.GROUP,this.fadeBeginTime=null,this.shouldFade=!1,this.element.style.display="inline-block",this.element.style.position="relative",this.element.title=this.tooltip,this.tracker=new n.MouseTracker({userData:"Button.tracker",element:this.element,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,enterHandler:function(T){T.insideElementPressed?(y(_,n.ButtonState.DOWN),_.raiseEvent("enter",{originalEvent:T.originalEvent})):T.buttonDownAny||y(_,n.ButtonState.HOVER)},focusHandler:function(T){_.tracker.enterHandler(T),_.raiseEvent("focus",{originalEvent:T.originalEvent})},leaveHandler:function(T){a(_,n.ButtonState.GROUP),T.insideElementPressed&&_.raiseEvent("exit",{originalEvent:T.originalEvent})},blurHandler:function(T){_.tracker.leaveHandler(T),_.raiseEvent("blur",{originalEvent:T.originalEvent})},pressHandler:function(T){y(_,n.ButtonState.DOWN),_.raiseEvent("press",{originalEvent:T.originalEvent})},releaseHandler:function(T){T.insideElementPressed&&T.insideElementReleased?(a(_,n.ButtonState.HOVER),_.raiseEvent("release",{originalEvent:T.originalEvent})):T.insideElementPressed?a(_,n.ButtonState.GROUP):y(_,n.ButtonState.HOVER)},clickHandler:function(T){T.quick&&_.raiseEvent("click",{originalEvent:T.originalEvent})},keyHandler:function(T){T.keyCode===13?(_.raiseEvent("click",{originalEvent:T.originalEvent}),_.raiseEvent("release",{originalEvent:T.originalEvent}),T.preventDefault=!0):T.preventDefault=!1}}),a(this,n.ButtonState.REST)},n.extend(n.Button.prototype,n.EventSource.prototype,{notifyGroupEnter:function(){y(this,n.ButtonState.GROUP)},notifyGroupExit:function(){a(this,n.ButtonState.REST)},disable:function(){this.notifyGroupExit(),this.element.disabled=!0,this.tracker.setTracking(!1),n.setElementOpacity(this.element,.2,!0)},enable:function(){this.element.disabled=!1,this.tracker.setTracking(!0),n.setElementOpacity(this.element,1,!0),this.notifyGroupEnter()},destroy:function(){this.imgRest&&(this.element.removeChild(this.imgRest),this.imgRest=null),this.imgGroup&&(this.element.removeChild(this.imgGroup),this.imgGroup=null),this.imgHover&&(this.element.removeChild(this.imgHover),this.imgHover=null),this.imgDown&&(this.element.removeChild(this.imgDown),this.imgDown=null),this.removeAllHandlers(),this.tracker.destroy(),this.element=null}});function o(w){n.requestAnimationFrame(function(){d(w)})}function d(w){var _,T,I;w.shouldFade&&(_=n.now(),T=_-w.fadeBeginTime,I=1-T/w.fadeLength,I=Math.min(1,I),I=Math.max(0,I),w.imgGroup&&n.setElementOpacity(w.imgGroup,I,!0),I>0&&o(w))}function c(w){w.shouldFade=!0,w.fadeBeginTime=n.now()+w.fadeDelay,window.setTimeout(function(){o(w)},w.fadeDelay)}function v(w){w.shouldFade=!1,w.imgGroup&&n.setElementOpacity(w.imgGroup,1,!0)}function y(w,_){w.element.disabled||(_>=n.ButtonState.GROUP&&w.currentState===n.ButtonState.REST&&(v(w),w.currentState=n.ButtonState.GROUP),_>=n.ButtonState.HOVER&&w.currentState===n.ButtonState.GROUP&&(w.imgHover&&(w.imgHover.style.visibility=""),w.currentState=n.ButtonState.HOVER),_>=n.ButtonState.DOWN&&w.currentState===n.ButtonState.HOVER&&(w.imgDown&&(w.imgDown.style.visibility=""),w.currentState=n.ButtonState.DOWN))}function a(w,_){w.element.disabled||(_<=n.ButtonState.HOVER&&w.currentState===n.ButtonState.DOWN&&(w.imgDown&&(w.imgDown.style.visibility="hidden"),w.currentState=n.ButtonState.HOVER),_<=n.ButtonState.GROUP&&w.currentState===n.ButtonState.HOVER&&(w.imgHover&&(w.imgHover.style.visibility="hidden"),w.currentState=n.ButtonState.GROUP),_<=n.ButtonState.REST&&w.currentState===n.ButtonState.GROUP&&(c(w),w.currentState=n.ButtonState.REST))}}(Pe),function(n){n.ButtonGroup=function(o){n.extend(!0,this,{buttons:[],clickTimeThreshold:n.DEFAULT_SETTINGS.clickTimeThreshold,clickDistThreshold:n.DEFAULT_SETTINGS.clickDistThreshold,labelText:""},o);var d=this.buttons.concat([]),c=this,v;if(this.element=o.element||n.makeNeutralElement("div"),!o.group)for(this.element.style.display="inline-block",v=0;v<d.length;v++)this.element.appendChild(d[v].element);n.setElementTouchActionNone(this.element),this.tracker=new n.MouseTracker({userData:"ButtonGroup.tracker",element:this.element,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,enterHandler:function(y){var a;for(a=0;a<c.buttons.length;a++)c.buttons[a].notifyGroupEnter()},leaveHandler:function(y){var a;if(!y.insideElementPressed)for(a=0;a<c.buttons.length;a++)c.buttons[a].notifyGroupExit()}})},n.ButtonGroup.prototype={addButton:function(o){this.buttons.push(o),this.element.appendChild(o.element)},emulateEnter:function(){this.tracker.enterHandler({eventSource:this.tracker})},emulateLeave:function(){this.tracker.leaveHandler({eventSource:this.tracker})},destroy:function(){for(;this.buttons.length;){var o=this.buttons.pop();this.element.removeChild(o.element),o.destroy()}this.tracker.destroy(),this.element=null}}}(Pe),function(n){n.Rect=function(o,d,c,v,y){this.x=typeof o=="number"?o:0,this.y=typeof d=="number"?d:0,this.width=typeof c=="number"?c:0,this.height=typeof v=="number"?v:0,this.degrees=typeof y=="number"?y:0,this.degrees=n.positiveModulo(this.degrees,360);var a,w;this.degrees>=270?(a=this.getTopRight(),this.x=a.x,this.y=a.y,w=this.height,this.height=this.width,this.width=w,this.degrees-=270):this.degrees>=180?(a=this.getBottomRight(),this.x=a.x,this.y=a.y,this.degrees-=180):this.degrees>=90&&(a=this.getBottomLeft(),this.x=a.x,this.y=a.y,w=this.height,this.height=this.width,this.width=w,this.degrees-=90)},n.Rect.fromSummits=function(o,d,c){var v=o.distanceTo(d),y=o.distanceTo(c),a=d.minus(o),w=Math.atan(a.y/a.x);return a.x<0?w+=Math.PI:a.y<0&&(w+=2*Math.PI),new n.Rect(o.x,o.y,v,y,w/Math.PI*180)},n.Rect.prototype={clone:function(){return new n.Rect(this.x,this.y,this.width,this.height,this.degrees)},getAspectRatio:function(){return this.width/this.height},getTopLeft:function(){return new n.Point(this.x,this.y)},getBottomRight:function(){return new n.Point(this.x+this.width,this.y+this.height).rotate(this.degrees,this.getTopLeft())},getTopRight:function(){return new n.Point(this.x+this.width,this.y).rotate(this.degrees,this.getTopLeft())},getBottomLeft:function(){return new n.Point(this.x,this.y+this.height).rotate(this.degrees,this.getTopLeft())},getCenter:function(){return new n.Point(this.x+this.width/2,this.y+this.height/2).rotate(this.degrees,this.getTopLeft())},getSize:function(){return new n.Point(this.width,this.height)},equals:function(o){return o instanceof n.Rect&&this.x===o.x&&this.y===o.y&&this.width===o.width&&this.height===o.height&&this.degrees===o.degrees},times:function(o){return new n.Rect(this.x*o,this.y*o,this.width*o,this.height*o,this.degrees)},translate:function(o){return new n.Rect(this.x+o.x,this.y+o.y,this.width,this.height,this.degrees)},union:function(o){var d=this.getBoundingBox(),c=o.getBoundingBox(),v=Math.min(d.x,c.x),y=Math.min(d.y,c.y),a=Math.max(d.x+d.width,c.x+c.width),w=Math.max(d.y+d.height,c.y+c.height);return new n.Rect(v,y,a-v,w-y)},intersection:function(o){var d=1e-10,c=[],v=this.getTopLeft();o.containsPoint(v,d)&&c.push(v);var y=this.getTopRight();o.containsPoint(y,d)&&c.push(y);var a=this.getBottomLeft();o.containsPoint(a,d)&&c.push(a);var w=this.getBottomRight();o.containsPoint(w,d)&&c.push(w);var _=o.getTopLeft();this.containsPoint(_,d)&&c.push(_);var T=o.getTopRight();this.containsPoint(T,d)&&c.push(T);var I=o.getBottomLeft();this.containsPoint(I,d)&&c.push(I);var k=o.getBottomRight();this.containsPoint(k,d)&&c.push(k);for(var G=this._getSegments(),W=o._getSegments(),O=0;O<G.length;O++)for(var ee=G[O],ve=0;ve<W.length;ve++){var we=W[ve],ot=Ge(ee[0],ee[1],we[0],we[1]);ot&&c.push(ot)}function Ge(ke,Dt,ut,wt){var jt=Dt.minus(ke),at=wt.minus(ut),Ot=-at.x*jt.y+jt.x*at.y;if(Ot===0)return null;var Jt=(jt.x*(ke.y-ut.y)-jt.y*(ke.x-ut.x))/Ot,kt=(at.x*(ke.y-ut.y)-at.y*(ke.x-ut.x))/Ot;return-d<=Jt&&Jt<=1-d&&-d<=kt&&kt<=1-d?new n.Point(ke.x+kt*jt.x,ke.y+kt*jt.y):null}if(c.length===0)return null;for(var je=c[0].x,xt=c[0].x,Q=c[0].y,vt=c[0].y,Ne=1;Ne<c.length;Ne++){var dt=c[Ne];dt.x<je&&(je=dt.x),dt.x>xt&&(xt=dt.x),dt.y<Q&&(Q=dt.y),dt.y>vt&&(vt=dt.y)}return new n.Rect(je,Q,xt-je,vt-Q)},_getSegments:function(){var o=this.getTopLeft(),d=this.getTopRight(),c=this.getBottomLeft(),v=this.getBottomRight();return[[o,d],[d,v],[v,c],[c,o]]},rotate:function(o,d){if(o=n.positiveModulo(o,360),o===0)return this.clone();d=d||this.getCenter();var c=this.getTopLeft().rotate(o,d),v=this.getTopRight().rotate(o,d),y=v.minus(c);y=y.apply(function(w){var _=1e-15;return Math.abs(w)<_?0:w});var a=Math.atan(y.y/y.x);return y.x<0?a+=Math.PI:y.y<0&&(a+=2*Math.PI),new n.Rect(c.x,c.y,this.width,this.height,a/Math.PI*180)},getBoundingBox:function(){if(this.degrees===0)return this.clone();var o=this.getTopLeft(),d=this.getTopRight(),c=this.getBottomLeft(),v=this.getBottomRight(),y=Math.min(o.x,d.x,c.x,v.x),a=Math.max(o.x,d.x,c.x,v.x),w=Math.min(o.y,d.y,c.y,v.y),_=Math.max(o.y,d.y,c.y,v.y);return new n.Rect(y,w,a-y,_-w)},getIntegerBoundingBox:function(){var o=this.getBoundingBox(),d=Math.floor(o.x),c=Math.floor(o.y),v=Math.ceil(o.width+o.x-d),y=Math.ceil(o.height+o.y-c);return new n.Rect(d,c,v,y)},containsPoint:function(o,d){d=d||0;var c=this.getTopLeft(),v=this.getTopRight(),y=this.getBottomLeft(),a=v.minus(c),w=y.minus(c);return(o.x-c.x)*a.x+(o.y-c.y)*a.y>=-d&&(o.x-v.x)*a.x+(o.y-v.y)*a.y<=d&&(o.x-c.x)*w.x+(o.y-c.y)*w.y>=-d&&(o.x-y.x)*w.x+(o.y-y.y)*w.y<=d},toString:function(){return"["+Math.round(this.x*100)/100+", "+Math.round(this.y*100)/100+", "+Math.round(this.width*100)/100+"x"+Math.round(this.height*100)/100+", "+Math.round(this.degrees*100)/100+"deg]"}}}(Pe),function(n){var o={};n.ReferenceStrip=function(I){var k=this,G=I.viewer,W=n.getElementSize(G.element),O,ee,ve;for(I.id||(I.id="referencestrip-"+n.now(),this.element=n.makeNeutralElement("div"),this.element.id=I.id,this.element.className="referencestrip"),I=n.extend(!0,{sizeRatio:n.DEFAULT_SETTINGS.referenceStripSizeRatio,position:n.DEFAULT_SETTINGS.referenceStripPosition,scroll:n.DEFAULT_SETTINGS.referenceStripScroll,clickTimeThreshold:n.DEFAULT_SETTINGS.clickTimeThreshold},I,{element:this.element}),n.extend(this,I),o[this.id]={animating:!1},this.minPixelRatio=this.viewer.minPixelRatio,this.element.tabIndex=0,ee=this.element.style,ee.marginTop="0px",ee.marginRight="0px",ee.marginBottom="0px",ee.marginLeft="0px",ee.left="0px",ee.bottom="0px",ee.border="0px",ee.background="#000",ee.position="relative",n.setElementTouchActionNone(this.element),n.setElementOpacity(this.element,.8),this.viewer=G,this.tracker=new n.MouseTracker({userData:"ReferenceStrip.tracker",element:this.element,clickHandler:n.delegate(this,d),dragHandler:n.delegate(this,c),scrollHandler:n.delegate(this,v),enterHandler:n.delegate(this,a),leaveHandler:n.delegate(this,w),keyDownHandler:n.delegate(this,_),keyHandler:n.delegate(this,T),preProcessEventHandler:function(we){we.eventType==="wheel"&&(we.preventDefault=!0)}}),I.width&&I.height?(this.element.style.width=I.width+"px",this.element.style.height=I.height+"px",G.addControl(this.element,{anchor:n.ControlAnchor.BOTTOM_LEFT})):I.scroll==="horizontal"?(this.element.style.width=W.x*I.sizeRatio*G.tileSources.length+12*G.tileSources.length+"px",this.element.style.height=W.y*I.sizeRatio+"px",G.addControl(this.element,{anchor:n.ControlAnchor.BOTTOM_LEFT})):(this.element.style.height=W.y*I.sizeRatio*G.tileSources.length+12*G.tileSources.length+"px",this.element.style.width=W.x*I.sizeRatio+"px",G.addControl(this.element,{anchor:n.ControlAnchor.TOP_LEFT})),this.panelWidth=W.x*this.sizeRatio+8,this.panelHeight=W.y*this.sizeRatio+8,this.panels=[],this.miniViewers={},ve=0;ve<G.tileSources.length;ve++)O=n.makeNeutralElement("div"),O.id=this.element.id+"-"+ve,O.style.width=k.panelWidth+"px",O.style.height=k.panelHeight+"px",O.style.display="inline",O.style.float="left",O.style.cssFloat="left",O.style.padding="2px",n.setElementTouchActionNone(O),n.setElementPointerEventsNone(O),this.element.appendChild(O),O.activePanel=!1,this.panels.push(O);y(this,this.scroll==="vertical"?W.y:W.x,0),this.setFocus(0)},n.ReferenceStrip.prototype={setFocus:function(I){var k=this.element.querySelector("#"+this.element.id+"-"+I),G=n.getElementSize(this.viewer.canvas),W=Number(this.element.style.width.replace("px","")),O=Number(this.element.style.height.replace("px","")),ee=-Number(this.element.style.marginLeft.replace("px","")),ve=-Number(this.element.style.marginTop.replace("px","")),we;this.currentSelected!==k&&(this.currentSelected&&(this.currentSelected.style.background="#000"),this.currentSelected=k,this.currentSelected.style.background="#999",this.scroll==="horizontal"?(we=Number(I)*(this.panelWidth+3),we>ee+G.x-this.panelWidth?(we=Math.min(we,W-G.x),this.element.style.marginLeft=-we+"px",y(this,G.x,-we)):we<ee&&(we=Math.max(0,we-G.x/2),this.element.style.marginLeft=-we+"px",y(this,G.x,-we))):(we=Number(I)*(this.panelHeight+3),we>ve+G.y-this.panelHeight?(we=Math.min(we,O-G.y),this.element.style.marginTop=-we+"px",y(this,G.y,-we)):we<ve&&(we=Math.max(0,we-G.y/2),this.element.style.marginTop=-we+"px",y(this,G.y,-we))),this.currentPage=I,a.call(this,{eventSource:this.tracker}))},update:function(){return!!o[this.id].animating},destroy:function(){if(this.miniViewers)for(var I in this.miniViewers)this.miniViewers[I].destroy();this.tracker.destroy(),this.element&&this.viewer.removeControl(this.element)}};function d(I){if(I.quick){var k;this.scroll==="horizontal"?k=Math.floor(I.position.x/(this.panelWidth+4)):k=Math.floor(I.position.y/this.panelHeight),this.viewer.goToPage(k)}this.element.focus()}function c(I){if(this.dragging=!0,this.element){var k=Number(this.element.style.marginLeft.replace("px","")),G=Number(this.element.style.marginTop.replace("px","")),W=Number(this.element.style.width.replace("px","")),O=Number(this.element.style.height.replace("px","")),ee=n.getElementSize(this.viewer.canvas);this.scroll==="horizontal"?-I.delta.x>0?k>-(W-ee.x)&&(this.element.style.marginLeft=k+I.delta.x*2+"px",y(this,ee.x,k+I.delta.x*2)):-I.delta.x<0&&k<0&&(this.element.style.marginLeft=k+I.delta.x*2+"px",y(this,ee.x,k+I.delta.x*2)):-I.delta.y>0?G>-(O-ee.y)&&(this.element.style.marginTop=G+I.delta.y*2+"px",y(this,ee.y,G+I.delta.y*2)):-I.delta.y<0&&G<0&&(this.element.style.marginTop=G+I.delta.y*2+"px",y(this,ee.y,G+I.delta.y*2))}}function v(I){if(this.element){var k=Number(this.element.style.marginLeft.replace("px","")),G=Number(this.element.style.marginTop.replace("px","")),W=Number(this.element.style.width.replace("px","")),O=Number(this.element.style.height.replace("px","")),ee=n.getElementSize(this.viewer.canvas);this.scroll==="horizontal"?I.scroll>0?k>-(W-ee.x)&&(this.element.style.marginLeft=k-I.scroll*60+"px",y(this,ee.x,k-I.scroll*60)):I.scroll<0&&k<0&&(this.element.style.marginLeft=k-I.scroll*60+"px",y(this,ee.x,k-I.scroll*60)):I.scroll<0?G>ee.y-O&&(this.element.style.marginTop=G+I.scroll*60+"px",y(this,ee.y,G+I.scroll*60)):I.scroll>0&&G<0&&(this.element.style.marginTop=G+I.scroll*60+"px",y(this,ee.y,G+I.scroll*60)),I.preventDefault=!0}}function y(I,k,G){var W,O,ee,ve,we,ot;for(I.scroll==="horizontal"?W=I.panelWidth:W=I.panelHeight,O=Math.ceil(k/W)+5,ee=Math.ceil((Math.abs(G)+k)/W)+1,O=ee-O,O=O<0?0:O,we=O;we<ee&&we<I.panels.length;we++)if(ot=I.panels[we],!ot.activePanel){var Ge,je=I.viewer.tileSources[we];je.referenceStripThumbnailUrl?Ge={type:"image",url:je.referenceStripThumbnailUrl}:Ge=je,ve=new n.Viewer({id:ot.id,tileSources:[Ge],element:ot,navigatorSizeRatio:I.sizeRatio,showNavigator:!1,mouseNavEnabled:!1,showNavigationControl:!1,showSequenceControl:!1,immediateRender:!0,blendTime:0,animationTime:0,loadTilesWithAjax:I.viewer.loadTilesWithAjax,ajaxHeaders:I.viewer.ajaxHeaders,drawer:"canvas"}),n.setElementPointerEventsNone(ve.canvas),n.setElementPointerEventsNone(ve.container),ve.innerTracker.setTracking(!1),ve.outerTracker.setTracking(!1),I.miniViewers[ot.id]=ve,ot.activePanel=!0}}function a(I){var k=I.eventSource.element;this.scroll==="horizontal"?k.style.marginBottom="0px":k.style.marginLeft="0px"}function w(I){var k=I.eventSource.element;this.scroll==="horizontal"?k.style.marginBottom="-"+n.getElementSize(k).y/2+"px":k.style.marginLeft="-"+n.getElementSize(k).x/2+"px"}function _(I){if(!I.ctrl&&!I.alt&&!I.meta)switch(I.keyCode){case 38:v.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),I.preventDefault=!0;break;case 40:v.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),I.preventDefault=!0;break;case 37:v.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),I.preventDefault=!0;break;case 39:v.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),I.preventDefault=!0;break;default:I.preventDefault=!1;break}else I.preventDefault=!1}function T(I){if(!I.ctrl&&!I.alt&&!I.meta)switch(I.keyCode){case 61:v.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),I.preventDefault=!0;break;case 45:v.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),I.preventDefault=!0;break;case 48:case 119:case 87:v.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),I.preventDefault=!0;break;case 115:case 83:v.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),I.preventDefault=!0;break;case 97:v.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),I.preventDefault=!0;break;case 100:v.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),I.preventDefault=!0;break;default:I.preventDefault=!1;break}else I.preventDefault=!1}}(Pe),function(n){n.DisplayRect=function(o,d,c,v,y,a){n.Rect.apply(this,[o,d,c,v]),this.minLevel=y,this.maxLevel=a},n.extend(n.DisplayRect.prototype,n.Rect.prototype)}(Pe),function(n){n.Spring=function(d){var c=arguments;typeof d!="object"&&(d={initial:c.length&&typeof c[0]=="number"?c[0]:void 0,springStiffness:c.length>1?c[1].springStiffness:5,animationTime:c.length>1?c[1].animationTime:1.5}),n.console.assert(typeof d.springStiffness=="number"&&d.springStiffness!==0,"[OpenSeadragon.Spring] options.springStiffness must be a non-zero number"),n.console.assert(typeof d.animationTime=="number"&&d.animationTime>=0,"[OpenSeadragon.Spring] options.animationTime must be a number greater than or equal to 0"),d.exponential&&(this._exponential=!0,delete d.exponential),n.extend(!0,this,d),this.current={value:typeof this.initial=="number"?this.initial:this._exponential?0:1,time:n.now()},n.console.assert(!this._exponential||this.current.value!==0,"[OpenSeadragon.Spring] value must be non-zero for exponential springs"),this.start={value:this.current.value,time:this.current.time},this.target={value:this.current.value,time:this.current.time},this._exponential&&(this.start._logValue=Math.log(this.start.value),this.target._logValue=Math.log(this.target.value),this.current._logValue=Math.log(this.current.value))},n.Spring.prototype={resetTo:function(d){n.console.assert(!this._exponential||d!==0,"[OpenSeadragon.Spring.resetTo] target must be non-zero for exponential springs"),this.start.value=this.target.value=this.current.value=d,this.start.time=this.target.time=this.current.time=n.now(),this._exponential&&(this.start._logValue=Math.log(this.start.value),this.target._logValue=Math.log(this.target.value),this.current._logValue=Math.log(this.current.value))},springTo:function(d){n.console.assert(!this._exponential||d!==0,"[OpenSeadragon.Spring.springTo] target must be non-zero for exponential springs"),this.start.value=this.current.value,this.start.time=this.current.time,this.target.value=d,this.target.time=this.start.time+1e3*this.animationTime,this._exponential&&(this.start._logValue=Math.log(this.start.value),this.target._logValue=Math.log(this.target.value))},shiftBy:function(d){this.start.value+=d,this.target.value+=d,this._exponential&&(n.console.assert(this.target.value!==0&&this.start.value!==0,"[OpenSeadragon.Spring.shiftBy] spring value must be non-zero for exponential springs"),this.start._logValue=Math.log(this.start.value),this.target._logValue=Math.log(this.target.value))},setExponential:function(d){this._exponential=d,this._exponential&&(n.console.assert(this.current.value!==0&&this.target.value!==0&&this.start.value!==0,"[OpenSeadragon.Spring.setExponential] spring value must be non-zero for exponential springs"),this.start._logValue=Math.log(this.start.value),this.target._logValue=Math.log(this.target.value),this.current._logValue=Math.log(this.current.value))},update:function(){this.current.time=n.now();let d,c;if(this._exponential?(d=this.start._logValue,c=this.target._logValue):(d=this.start.value,c=this.target.value),this.current.time>=this.target.time)this.current.value=this.target.value;else{let v=d+(c-d)*o(this.springStiffness,(this.current.time-this.start.time)/(this.target.time-this.start.time));this._exponential?this.current.value=Math.exp(v):this.current.value=v}return this.current.value!==this.target.value},isAtTargetValue:function(){return this.current.value===this.target.value}};function o(d,c){return(1-Math.exp(d*-c))/(1-Math.exp(-d))}}(Pe),function(n){n.ImageJob=function(d){n.extend(!0,this,{timeout:n.DEFAULT_SETTINGS.timeout,jobId:null,tries:0},d),this.data=null,this.userData={},this.errorMsg=null},n.ImageJob.prototype={start:function(){this.tries++;var d=this,c=this.abort;this.jobId=window.setTimeout(function(){d.finish(null,null,"Image load exceeded timeout ("+d.timeout+" ms)")},this.timeout),this.abort=function(){d.source.downloadTileAbort(d),typeof c=="function"&&c()},this.source.downloadTileStart(this)},finish:function(d,c,v){this.data=d,this.request=c,this.errorMsg=v,this.jobId&&window.clearTimeout(this.jobId),this.callback(this)}},n.ImageLoader=function(d){n.extend(!0,this,{jobLimit:n.DEFAULT_SETTINGS.imageLoaderLimit,timeout:n.DEFAULT_SETTINGS.timeout,jobQueue:[],failedTiles:[],jobsInProgress:0},d)},n.ImageLoader.prototype={addJob:function(d){if(!d.source){n.console.error("ImageLoader.prototype.addJob() requires [options.source]. TileSource since new API defines how images are fetched. Creating a dummy TileSource.");var c=n.TileSource.prototype;d.source={downloadTileStart:c.downloadTileStart,downloadTileAbort:c.downloadTileAbort}}var v=this,y=function(_){o(v,_,d.callback)},a={src:d.src,tile:d.tile||{},source:d.source,loadWithAjax:d.loadWithAjax,ajaxHeaders:d.loadWithAjax?d.ajaxHeaders:null,crossOriginPolicy:d.crossOriginPolicy,ajaxWithCredentials:d.ajaxWithCredentials,postData:d.postData,callback:y,abort:d.abort,timeout:this.timeout},w=new n.ImageJob(a);!this.jobLimit||this.jobsInProgress<this.jobLimit?(w.start(),this.jobsInProgress++):this.jobQueue.push(w)},clear:function(){for(var d=0;d<this.jobQueue.length;d++){var c=this.jobQueue[d];typeof c.abort=="function"&&c.abort()}this.jobQueue=[]}};function o(d,c,v){c.errorMsg!==""&&(c.data===null||c.data===void 0)&&c.tries<1+d.tileRetryMax&&d.failedTiles.push(c);var y;d.jobsInProgress--,(!d.jobLimit||d.jobsInProgress<d.jobLimit)&&d.jobQueue.length>0&&(y=d.jobQueue.shift(),y.start(),d.jobsInProgress++),d.tileRetryMax>0&&d.jobQueue.length===0&&(!d.jobLimit||d.jobsInProgress<d.jobLimit)&&d.failedTiles.length>0&&(y=d.failedTiles.shift(),setTimeout(function(){y.start()},d.tileRetryDelay),d.jobsInProgress++),v(c.data,c.errorMsg,c.request)}}(Pe),function(n){n.Tile=function(o,d,c,v,y,a,w,_,T,I,k,G){this.level=o,this.x=d,this.y=c,this.bounds=v,this.positionedBounds=new Pe.Rect(v.x,v.y,v.width,v.height),this.sourceBounds=I,this.exists=y,this._url=a,this.postData=k,this.context2D=w,this.loadWithAjax=_,this.ajaxHeaders=T,G===void 0&&(n.console.warn("Tile constructor needs 'cacheKey' variable: creation tile cache in Tile class is deprecated. TileSource.prototype.getTileHashKey will be used."),G=n.TileSource.prototype.getTileHashKey(o,d,c,a,T,k)),this.cacheKey=G,this.loaded=!1,this.loading=!1,this.element=null,this.imgElement=null,this.style=null,this.position=null,this.size=null,this.flipped=!1,this.blendStart=null,this.opacity=null,this.squaredDistance=null,this.visibility=null,this.hasTransparency=!1,this.beingDrawn=!1,this.lastTouchTime=0,this.isRightMost=!1,this.isBottomMost=!1},n.Tile.prototype={toString:function(){return this.level+"/"+this.x+"_"+this.y},_hasTransparencyChannel:function(){return console.warn("Tile.prototype._hasTransparencyChannel() has been deprecated and will be removed in the future. Use TileSource.prototype.hasTransparency() instead."),!!this.context2D||this.getUrl().match(".png")},get image(){return n.console.error("[Tile.image] property has been deprecated. Use [Tile.prototype.getImage] instead."),this.getImage()},get url(){return n.console.error("[Tile.url] property has been deprecated. Use [Tile.prototype.getUrl] instead."),this.getUrl()},getImage:function(){return this.cacheImageRecord.getImage()},getUrl:function(){return typeof this._url=="function"?this._url():this._url},getCanvasContext:function(){return this.context2D||this.cacheImageRecord&&this.cacheImageRecord.getRenderedContext()},getScaleForEdgeSmoothing:function(){var o;if(this.cacheImageRecord)o=this.cacheImageRecord.getRenderedContext();else if(this.context2D)o=this.context2D;else return n.console.warn("[Tile.drawCanvas] attempting to get tile scale %s when tile's not cached",this.toString()),1;return o.canvas.width/(this.size.x*n.pixelDensityRatio)},getTranslationForEdgeSmoothing:function(o,d,c){var v=Math.max(1,Math.ceil((c.x-d.x)/2)),y=Math.max(1,Math.ceil((c.y-d.y)/2));return new n.Point(v,y).minus(this.position.times(n.pixelDensityRatio).times(o||1).apply(function(a){return a%1}))},unload:function(){this.imgElement&&this.imgElement.parentNode&&this.imgElement.parentNode.removeChild(this.imgElement),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=null,this.imgElement=null,this.loaded=!1,this.loading=!1}}}(Pe),function(n){n.OverlayPlacement=n.Placement,n.OverlayRotationMode=n.freezeObject({NO_ROTATION:1,EXACT:2,BOUNDING_BOX:3}),n.Overlay=function(o,d,c){var v;n.isPlainObject(o)?v=o:v={element:o,location:d,placement:c},this.elementWrapper=document.createElement("div"),this.element=v.element,this.elementWrapper.appendChild(this.element),this.element.id?this.elementWrapper.id="overlay-wrapper-"+this.element.id:this.elementWrapper.id="overlay-wrapper",this.style=this.elementWrapper.style,this._init(v)},n.Overlay.prototype={_init:function(o){this.location=o.location,this.placement=o.placement===void 0?n.Placement.TOP_LEFT:o.placement,this.onDraw=o.onDraw,this.checkResize=o.checkResize===void 0?!0:o.checkResize,this.width=o.width===void 0?null:o.width,this.height=o.height===void 0?null:o.height,this.rotationMode=o.rotationMode||n.OverlayRotationMode.EXACT,this.location instanceof n.Rect&&(this.width=this.location.width,this.height=this.location.height,this.location=this.location.getTopLeft(),this.placement=n.Placement.TOP_LEFT),this.scales=this.width!==null&&this.height!==null,this.bounds=new n.Rect(this.location.x,this.location.y,this.width,this.height),this.position=this.location},adjust:function(o,d){var c=n.Placement.properties[this.placement];c&&(c.isHorizontallyCentered?o.x-=d.x/2:c.isRight&&(o.x-=d.x),c.isVerticallyCentered?o.y-=d.y/2:c.isBottom&&(o.y-=d.y))},destroy:function(){var o=this.elementWrapper,d=this.style;o.parentNode&&(o.parentNode.removeChild(o),o.prevElementParent&&(d.display="none",document.body.appendChild(o))),this.onDraw=null,d.top="",d.left="",d.position="",this.width!==null&&(d.width=""),this.height!==null&&(d.height="");var c=n.getCssPropertyWithVendorPrefix("transformOrigin"),v=n.getCssPropertyWithVendorPrefix("transform");c&&v&&(d[c]="",d[v]="")},drawHTML:function(o,d){var c=this.elementWrapper;c.parentNode!==o&&(c.prevElementParent=c.parentNode,c.prevNextSibling=c.nextSibling,o.appendChild(c),this.style.position="absolute",this.size=n.getElementSize(this.elementWrapper));var v=this._getOverlayPositionAndSize(d),y=v.position,a=this.size=v.size,w="";d.overlayPreserveContentDirection&&(w=d.flipped?" scaleX(-1)":" scaleX(1)");var _=d.flipped?-v.rotate:v.rotate,T=d.flipped?" scaleX(-1)":"";if(this.onDraw)this.onDraw(y,a,this.element);else{var I=this.style,k=this.element.style;k.display="block",I.left=y.x+"px",I.top=y.y+"px",this.width!==null&&(k.width=a.x+"px"),this.height!==null&&(k.height=a.y+"px");var G=n.getCssPropertyWithVendorPrefix("transformOrigin"),W=n.getCssPropertyWithVendorPrefix("transform");G&&W&&(_&&!d.flipped?(k[W]="",I[G]=this._getTransformOrigin(),I[W]="rotate("+_+"deg)"):!_&&d.flipped?(k[W]=w,I[G]=this._getTransformOrigin(),I[W]=T):_&&d.flipped?(k[W]=w,I[G]=this._getTransformOrigin(),I[W]="rotate("+_+"deg)"+T):(k[W]="",I[G]="",I[W]="")),I.display="flex"}},_getOverlayPositionAndSize:function(o){var d=o.pixelFromPoint(this.location,!0),c=this._getSizeInPixels(o);this.adjust(d,c);var v=0;if(o.getRotation(!0)&&this.rotationMode!==n.OverlayRotationMode.NO_ROTATION)if(this.rotationMode===n.OverlayRotationMode.BOUNDING_BOX&&this.width!==null&&this.height!==null){var y=new n.Rect(d.x,d.y,c.x,c.y),a=this._getBoundingBox(y,o.getRotation(!0));d=a.getTopLeft(),c=a.getSize()}else v=o.getRotation(!0);return o.flipped&&(d.x=o.getContainerSize().x-d.x),{position:d,size:c,rotate:v}},_getSizeInPixels:function(o){var d=this.size.x,c=this.size.y;if(this.width!==null||this.height!==null){var v=o.deltaPixelsFromPointsNoRotate(new n.Point(this.width||0,this.height||0),!0);this.width!==null&&(d=v.x),this.height!==null&&(c=v.y)}if(this.checkResize&&(this.width===null||this.height===null)){var y=this.size=n.getElementSize(this.elementWrapper);this.width===null&&(d=y.x),this.height===null&&(c=y.y)}return new n.Point(d,c)},_getBoundingBox:function(o,d){var c=this._getPlacementPoint(o);return o.rotate(d,c).getBoundingBox()},_getPlacementPoint:function(o){var d=new n.Point(o.x,o.y),c=n.Placement.properties[this.placement];return c&&(c.isHorizontallyCentered?d.x+=o.width/2:c.isRight&&(d.x+=o.width),c.isVerticallyCentered?d.y+=o.height/2:c.isBottom&&(d.y+=o.height)),d},_getTransformOrigin:function(){var o="",d=n.Placement.properties[this.placement];return d&&(d.isLeft?o="left":d.isRight&&(o="right"),d.isTop?o+=" top":d.isBottom&&(o+=" bottom")),o},update:function(o,d){var c=n.isPlainObject(o)?o:{location:o,placement:d};this._init({location:c.location||this.location,placement:c.placement!==void 0?c.placement:this.placement,onDraw:c.onDraw||this.onDraw,checkResize:c.checkResize||this.checkResize,width:c.width!==void 0?c.width:this.width,height:c.height!==void 0?c.height:this.height,rotationMode:c.rotationMode||this.rotationMode})},getBounds:function(o){n.console.assert(o,"A viewport must now be passed to Overlay.getBounds.");var d=this.width,c=this.height;if(d===null||c===null){var v=o.deltaPointsFromPixelsNoRotate(this.size,!0);d===null&&(d=v.x),c===null&&(c=v.y)}var y=this.location.clone();return this.adjust(y,new n.Point(d,c)),this._adjustBoundsForRotation(o,new n.Rect(y.x,y.y,d,c))},_adjustBoundsForRotation:function(o,d){if(!o||o.getRotation(!0)===0||this.rotationMode===n.OverlayRotationMode.EXACT)return d;if(this.rotationMode===n.OverlayRotationMode.BOUNDING_BOX){if(this.width===null||this.height===null)return d;var c=this._getOverlayPositionAndSize(o);return o.viewerElementToViewportRectangle(new n.Rect(c.position.x,c.position.y,c.size.x,c.size.y))}return d.rotate(-o.getRotation(!0),this._getPlacementPoint(d))}}}(Pe),function(n){const o=n;o.DrawerBase=class{constructor(c){n.console.assert(c.viewer,"[Drawer] options.viewer is required"),n.console.assert(c.viewport,"[Drawer] options.viewport is required"),n.console.assert(c.element,"[Drawer] options.element is required"),this.viewer=c.viewer,this.viewport=c.viewport,this.debugGridColor=typeof c.debugGridColor=="string"?[c.debugGridColor]:c.debugGridColor||n.DEFAULT_SETTINGS.debugGridColor,this.options=c.options||{},this.container=n.getElement(c.element),this._renderingTarget=this._createDrawingElement(),this.canvas.style.width="100%",this.canvas.style.height="100%",this.canvas.style.position="absolute",this.canvas.style.left="0",n.setElementOpacity(this.canvas,this.viewer.opacity,!0),n.setElementPointerEventsNone(this.canvas),n.setElementTouchActionNone(this.canvas),this.container.style.textAlign="left",this.container.appendChild(this.canvas),this._checkForAPIOverrides()}get canvas(){return this._renderingTarget}get element(){return n.console.error("Drawer.element is deprecated. Use Drawer.container instead."),this.container}getType(){n.console.error("Drawer.getType must be implemented by child class")}static isSupported(){n.console.error("Drawer.isSupported must be implemented by child class")}_createDrawingElement(){return n.console.error("Drawer._createDrawingElement must be implemented by child class"),null}draw(c){n.console.error("Drawer.draw must be implemented by child class")}canRotate(){n.console.error("Drawer.canRotate must be implemented by child class")}destroy(){n.console.error("Drawer.destroy must be implemented by child class")}minimumOverlapRequired(c){return!1}setImageSmoothingEnabled(c){n.console.error("Drawer.setImageSmoothingEnabled must be implemented by child class")}drawDebuggingRect(c){n.console.warn("[drawer].drawDebuggingRect is not implemented by this drawer")}clear(){n.console.warn("[drawer].clear() is deprecated. The drawer is responsible for clearing itself as needed before drawing tiles.")}_checkForAPIOverrides(){if(this._createDrawingElement===n.DrawerBase.prototype._createDrawingElement)throw new Error("[drawer]._createDrawingElement must be implemented by child class");if(this.draw===n.DrawerBase.prototype.draw)throw new Error("[drawer].draw must be implemented by child class");if(this.canRotate===n.DrawerBase.prototype.canRotate)throw new Error("[drawer].canRotate must be implemented by child class");if(this.destroy===n.DrawerBase.prototype.destroy)throw new Error("[drawer].destroy must be implemented by child class");if(this.setImageSmoothingEnabled===n.DrawerBase.prototype.setImageSmoothingEnabled)throw new Error("[drawer].setImageSmoothingEnabled must be implemented by child class")}viewportToDrawerRectangle(c){var v=this.viewport.pixelFromPointNoRotate(c.getTopLeft(),!0),y=this.viewport.deltaPixelsFromPointsNoRotate(c.getSize(),!0);return new n.Rect(v.x*n.pixelDensityRatio,v.y*n.pixelDensityRatio,y.x*n.pixelDensityRatio,y.y*n.pixelDensityRatio)}viewportCoordToDrawerCoord(c){var v=this.viewport.pixelFromPointNoRotate(c,!0);return new n.Point(v.x*n.pixelDensityRatio,v.y*n.pixelDensityRatio)}_calculateCanvasSize(){var c=n.pixelDensityRatio,v=this.viewport.getContainerSize();return new o.Point(Math.round(v.x*c),Math.round(v.y*c))}_raiseTiledImageDrawnEvent(c,v){this.viewer&&this.viewer.raiseEvent("tiled-image-drawn",{tiledImage:c,tiles:v})}_raiseDrawerErrorEvent(c,v){this.viewer&&this.viewer.raiseEvent("drawer-error",{tiledImage:c,drawer:this,error:v})}}}(Pe),function(n){const o=n;class d extends o.DrawerBase{constructor(v){super(v),this.viewer.rejectEventHandler("tile-drawing","The HTMLDrawer does not raise the tile-drawing event"),this.viewer.allowEventHandler("tile-drawn")}static isSupported(){return!0}getType(){return"html"}minimumOverlapRequired(v){return!0}_createDrawingElement(){return n.makeNeutralElement("div")}draw(v){var y=this;this._prepareNewFrame(),v.forEach(function(a){a.opacity!==0&&y._drawTiles(a)})}canRotate(){return!1}destroy(){this.container.removeChild(this.canvas)}setImageSmoothingEnabled(){}_prepareNewFrame(){this.canvas.innerHTML=""}_drawTiles(v){var y=v.getTilesToDraw().map(_=>_.tile);if(!(v.opacity===0||y.length===0&&!v.placeholderFillStyle))for(var a=y.length-1;a>=0;a--){var w=y[a];this._drawTile(w),this.viewer&&this.viewer.raiseEvent("tile-drawn",{tiledImage:v,tile:w})}}_drawTile(v){n.console.assert(v,"[Drawer._drawTile] tile is required");let y=this.canvas;if(!v.cacheImageRecord){n.console.warn("[Drawer._drawTileToHTML] attempting to draw tile %s when it's not cached",v.toString());return}if(!v.loaded){n.console.warn("Attempting to draw tile %s when it's not yet loaded.",v.toString());return}if(!v.element){var a=v.getImage();if(!a)return;v.element=n.makeNeutralElement("div"),v.imgElement=a.cloneNode(),v.imgElement.style.msInterpolationMode="nearest-neighbor",v.imgElement.style.width="100%",v.imgElement.style.height="100%",v.style=v.element.style,v.style.position="absolute"}v.element.parentNode!==y&&y.appendChild(v.element),v.imgElement.parentNode!==v.element&&v.element.appendChild(v.imgElement),v.style.top=v.position.y+"px",v.style.left=v.position.x+"px",v.style.height=v.size.y+"px",v.style.width=v.size.x+"px",v.flipped&&(v.style.transform="scaleX(-1)"),n.setElementOpacity(v.element,v.opacity)}}n.HTMLDrawer=d}(Pe),function(n){const o=n;class d extends o.DrawerBase{constructor(_){super(_),this.context=this.canvas.getContext("2d"),this.sketchCanvas=null,this.sketchContext=null,this._imageSmoothingEnabled=!0,this.viewer.allowEventHandler("tile-drawn"),this.viewer.allowEventHandler("tile-drawing")}static isSupported(){return n.supportsCanvas}getType(){return"canvas"}_createDrawingElement(){let _=n.makeNeutralElement("canvas"),T=this._calculateCanvasSize();return _.width=T.x,_.height=T.y,_}draw(_){this._prepareNewFrame(),this.viewer.viewport.getFlip()!==this._viewportFlipped&&this._flip();for(const T of _)T.opacity!==0&&this._drawTiles(T)}canRotate(){return!0}destroy(){this.canvas.width=1,this.canvas.height=1,this.sketchCanvas=null,this.sketchContext=null,this.container.removeChild(this.canvas)}minimumOverlapRequired(_){return!0}setImageSmoothingEnabled(_){this._imageSmoothingEnabled=!!_,this._updateImageSmoothingEnabled(this.context),this.viewer.forceRedraw()}drawDebuggingRect(_){var T=this.context;T.save(),T.lineWidth=2*n.pixelDensityRatio,T.strokeStyle=this.debugGridColor[0],T.fillStyle=this.debugGridColor[0],T.strokeRect(_.x*n.pixelDensityRatio,_.y*n.pixelDensityRatio,_.width*n.pixelDensityRatio,_.height*n.pixelDensityRatio),T.restore()}get _viewportFlipped(){return this.context.getTransform().a<0}_raiseTileDrawingEvent(_,T,I,k){this.viewer.raiseEvent("tile-drawing",{tiledImage:_,context:T,tile:I,rendered:k})}_prepareNewFrame(){var _=this._calculateCanvasSize();if((this.canvas.width!==_.x||this.canvas.height!==_.y)&&(this.canvas.width=_.x,this.canvas.height=_.y,this._updateImageSmoothingEnabled(this.context),this.sketchCanvas!==null)){var T=this._calculateSketchCanvasSize();this.sketchCanvas.width=T.x,this.sketchCanvas.height=T.y,this._updateImageSmoothingEnabled(this.sketchContext)}this._clear()}_clear(_,T){var I=this._getContext(_);if(T)I.clearRect(T.x,T.y,T.width,T.height);else{var k=I.canvas;I.clearRect(0,0,k.width,k.height)}}_drawTiles(_){var T=_.getTilesToDraw().map(ke=>ke.tile);if(!(_.opacity===0||T.length===0&&!_.placeholderFillStyle)){var I=T[0],k;I&&(k=_.opacity<1||_.compositeOperation&&_.compositeOperation!=="source-over"||!_._isBottomItem()&&_.source.hasTransparency(I.context2D,I.getUrl(),I.ajaxHeaders,I.postData));var G,W,O=this.viewport.getZoom(!0),ee=_.viewportToImageZoom(O);T.length>1&&ee>_.smoothTileEdgesMinZoom&&!_.iOSDevice&&_.getRotation(!0)%360===0&&(k=!0,G=I.getScaleForEdgeSmoothing(),W=I.getTranslationForEdgeSmoothing(G,this._getCanvasSize(!1),this._getCanvasSize(!0)));var ve;k&&(G||(ve=this.viewport.viewportToViewerElementRectangle(_.getClippedBounds(!0)).getIntegerBoundingBox(),ve=ve.times(n.pixelDensityRatio)),this._clear(!0,ve)),G||this._setRotations(_,k);var we=!1;if(_._clip){this._saveContext(k);var ot=_.imageToViewportRectangle(_._clip,!0);ot=ot.rotate(-_.getRotation(!0),_._getRotationPoint(!0));var Ge=this.viewportToDrawerRectangle(ot);G&&(Ge=Ge.times(G)),W&&(Ge=Ge.translate(W)),this._setClip(Ge,k),we=!0}if(_._croppingPolygons){var je=this;we||this._saveContext(k);try{var xt=_._croppingPolygons.map(function(ke){return ke.map(function(Dt){var ut=_.imageToViewportCoordinates(Dt.x,Dt.y,!0).rotate(-_.getRotation(!0),_._getRotationPoint(!0)),wt=je.viewportCoordToDrawerCoord(ut);return G&&(wt=wt.times(G)),W&&(wt=wt.plus(W)),wt})});this._clipWithPolygons(xt,k)}catch(ke){n.console.error(ke)}we=!0}if(_._hasOpaqueTile=!1,_.placeholderFillStyle&&_._hasOpaqueTile===!1){let ke=this.viewportToDrawerRectangle(_.getBoundsNoRotate(!0));G&&(ke=ke.times(G)),W&&(ke=ke.translate(W));let Dt=null;typeof _.placeholderFillStyle=="function"?Dt=_.placeholderFillStyle(_,this.context):Dt=_.placeholderFillStyle,this._drawRectangle(ke,Dt,k)}var Q=a(_.subPixelRoundingForTransparency),vt=!1;if(Q===n.SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS)vt=!0;else if(Q===n.SUBPIXEL_ROUNDING_OCCURRENCES.ONLY_AT_REST){var Ne=this.viewer&&this.viewer.isAnimating();vt=!Ne}for(var dt=0;dt<T.length;dt++)I=T[dt],this._drawTile(I,_,k,G,W,vt,_.source),this.viewer&&this.viewer.raiseEvent("tile-drawn",{tiledImage:_,tile:I});we&&this._restoreContext(k),G||(_.getRotation(!0)%360!==0&&this._restoreRotationChanges(k),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(k)),k&&(G&&this._setRotations(_),this.blendSketch({opacity:_.opacity,scale:G,translate:W,compositeOperation:_.compositeOperation,bounds:ve}),G&&(_.getRotation(!0)%360!==0&&this._restoreRotationChanges(!1),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(!1))),this._drawDebugInfo(_,T),this._raiseTiledImageDrawnEvent(_,T)}}_drawDebugInfo(_,T){if(_.debugMode)for(var I=T.length-1;I>=0;I--){var k=T[I];try{this._drawDebugInfoOnTile(k,T.length,I,_)}catch(G){n.console.error(G)}}}_clipWithPolygons(_,T){var I=this._getContext(T);I.beginPath();for(const k of _)for(const[G,W]of k.entries())I[G===0?"moveTo":"lineTo"](W.x,W.y);I.clip()}_drawTile(_,T,I,k,G,W,O){n.console.assert(_,"[Drawer._drawTile] tile is required"),n.console.assert(T,"[Drawer._drawTile] drawingHandler is required");var ee=this._getContext(I);k=k||1,this._drawTileToCanvas(_,ee,T,k,G,W,O)}_drawTileToCanvas(_,T,I,k,G,W,O){var ee=_.position.times(n.pixelDensityRatio),ve=_.size.times(n.pixelDensityRatio),we;if(!_.context2D&&!_.cacheImageRecord){n.console.warn("[Drawer._drawTileToCanvas] attempting to draw tile %s when it's not cached",_.toString());return}if(we=_.getCanvasContext(),!_.loaded||!we){n.console.warn("Attempting to draw tile %s when it's not yet loaded.",_.toString());return}T.save(),typeof k=="number"&&k!==1&&(ee=ee.times(k),ve=ve.times(k)),G instanceof n.Point&&(ee=ee.plus(G)),T.globalAlpha===1&&_.hasTransparency&&(W&&(ee.x=Math.round(ee.x),ee.y=Math.round(ee.y),ve.x=Math.round(ve.x),ve.y=Math.round(ve.y)),T.clearRect(ee.x,ee.y,ve.x,ve.y)),this._raiseTileDrawingEvent(I,T,_,we);var ot,Ge;_.sourceBounds?(ot=Math.min(_.sourceBounds.width,we.canvas.width),Ge=Math.min(_.sourceBounds.height,we.canvas.height)):(ot=we.canvas.width,Ge=we.canvas.height),T.translate(ee.x+ve.x/2,0),_.flipped&&T.scale(-1,1),T.drawImage(we.canvas,0,0,ot,Ge,-ve.x/2,ee.y,ve.x,ve.y),T.restore()}_getContext(_){var T=this.context;if(_){if(this.sketchCanvas===null){this.sketchCanvas=document.createElement("canvas");var I=this._calculateSketchCanvasSize();if(this.sketchCanvas.width=I.x,this.sketchCanvas.height=I.y,this.sketchContext=this.sketchCanvas.getContext("2d"),this.viewport.getRotation()===0){var k=this;this.viewer.addHandler("rotate",function G(){if(k.viewport.getRotation()!==0){k.viewer.removeHandler("rotate",G);var W=k._calculateSketchCanvasSize();k.sketchCanvas.width=W.x,k.sketchCanvas.height=W.y}})}this._updateImageSmoothingEnabled(this.sketchContext)}T=this.sketchContext}return T}_saveContext(_){this._getContext(_).save()}_restoreContext(_){this._getContext(_).restore()}_setClip(_,T){var I=this._getContext(T);I.beginPath(),I.rect(_.x,_.y,_.width,_.height),I.clip()}_drawRectangle(_,T,I){var k=this._getContext(I);k.save(),k.fillStyle=T,k.fillRect(_.x,_.y,_.width,_.height),k.restore()}blendSketch(_,T,I,k){var G=_;n.isPlainObject(G)||(G={opacity:_,scale:T,translate:I,compositeOperation:k}),_=G.opacity,k=G.compositeOperation;var W=G.bounds;if(this.context.save(),this.context.globalAlpha=_,k&&(this.context.globalCompositeOperation=k),W)W.x<0&&(W.width+=W.x,W.x=0),W.x+W.width>this.canvas.width&&(W.width=this.canvas.width-W.x),W.y<0&&(W.height+=W.y,W.y=0),W.y+W.height>this.canvas.height&&(W.height=this.canvas.height-W.y),this.context.drawImage(this.sketchCanvas,W.x,W.y,W.width,W.height,W.x,W.y,W.width,W.height);else{T=G.scale||1,I=G.translate;var O=I instanceof n.Point?I:new n.Point(0,0),ee=0,ve=0;if(I){var we=this.sketchCanvas.width-this.canvas.width,ot=this.sketchCanvas.height-this.canvas.height;ee=Math.round(we/2),ve=Math.round(ot/2)}this.context.drawImage(this.sketchCanvas,O.x-ee*T,O.y-ve*T,(this.canvas.width+2*ee)*T,(this.canvas.height+2*ve)*T,-ee,-ve,this.canvas.width+2*ee,this.canvas.height+2*ve)}this.context.restore()}_drawDebugInfoOnTile(_,T,I,k){var G=this.viewer.world.getIndexOfItem(k)%this.debugGridColor.length,W=this.context;W.save(),W.lineWidth=2*n.pixelDensityRatio,W.font="small-caps bold "+13*n.pixelDensityRatio+"px arial",W.strokeStyle=this.debugGridColor[G],W.fillStyle=this.debugGridColor[G],this._setRotations(k),this._viewportFlipped&&this._flip({point:_.position.plus(_.size.divide(2))}),W.strokeRect(_.position.x*n.pixelDensityRatio,_.position.y*n.pixelDensityRatio,_.size.x*n.pixelDensityRatio,_.size.y*n.pixelDensityRatio);var O=(_.position.x+_.size.x/2)*n.pixelDensityRatio,ee=(_.position.y+_.size.y/2)*n.pixelDensityRatio;W.translate(O,ee);const ve=this.viewport.getRotation(!0);W.rotate(Math.PI/180*-ve),W.translate(-O,-ee),_.x===0&&_.y===0&&(W.fillText("Zoom: "+this.viewport.getZoom(),_.position.x*n.pixelDensityRatio,(_.position.y-30)*n.pixelDensityRatio),W.fillText("Pan: "+this.viewport.getBounds().toString(),_.position.x*n.pixelDensityRatio,(_.position.y-20)*n.pixelDensityRatio)),W.fillText("Level: "+_.level,(_.position.x+10)*n.pixelDensityRatio,(_.position.y+20)*n.pixelDensityRatio),W.fillText("Column: "+_.x,(_.position.x+10)*n.pixelDensityRatio,(_.position.y+30)*n.pixelDensityRatio),W.fillText("Row: "+_.y,(_.position.x+10)*n.pixelDensityRatio,(_.position.y+40)*n.pixelDensityRatio),W.fillText("Order: "+I+" of "+T,(_.position.x+10)*n.pixelDensityRatio,(_.position.y+50)*n.pixelDensityRatio),W.fillText("Size: "+_.size.toString(),(_.position.x+10)*n.pixelDensityRatio,(_.position.y+60)*n.pixelDensityRatio),W.fillText("Position: "+_.position.toString(),(_.position.x+10)*n.pixelDensityRatio,(_.position.y+70)*n.pixelDensityRatio),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(),k.getRotation(!0)%360!==0&&this._restoreRotationChanges(),W.restore()}_updateImageSmoothingEnabled(_){_.msImageSmoothingEnabled=this._imageSmoothingEnabled,_.imageSmoothingEnabled=this._imageSmoothingEnabled}_getCanvasSize(_){var T=this._getContext(_).canvas;return new n.Point(T.width,T.height)}_getCanvasCenter(){return new n.Point(this.canvas.width/2,this.canvas.height/2)}_setRotations(_,T=!1){var I=!1;this.viewport.getRotation(!0)%360!==0&&(this._offsetForRotation({degrees:this.viewport.getRotation(!0),useSketch:T,saveContext:I}),I=!1),_.getRotation(!0)%360!==0&&this._offsetForRotation({degrees:_.getRotation(!0),point:this.viewport.pixelFromPointNoRotate(_._getRotationPoint(!0),!0),useSketch:T,saveContext:I})}_offsetForRotation(_){var T=_.point?_.point.times(n.pixelDensityRatio):this._getCanvasCenter(),I=this._getContext(_.useSketch);I.save(),I.translate(T.x,T.y),I.rotate(Math.PI/180*_.degrees),I.translate(-T.x,-T.y)}_flip(_){_=_||{};var T=_.point?_.point.times(n.pixelDensityRatio):this._getCanvasCenter(),I=this._getContext(_.useSketch);I.translate(T.x,0),I.scale(-1,1),I.translate(-T.x,0)}_restoreRotationChanges(_){var T=this._getContext(_);T.restore()}_calculateCanvasSize(){var _=n.pixelDensityRatio,T=this.viewport.getContainerSize();return{x:Math.round(T.x*_),y:Math.round(T.y*_)}}_calculateSketchCanvasSize(){var _=this._calculateCanvasSize();if(this.viewport.getRotation()===0)return _;var T=Math.ceil(Math.sqrt(_.x*_.x+_.y*_.y));return{x:T,y:T}}}n.CanvasDrawer=d;var c=n.SUBPIXEL_ROUNDING_OCCURRENCES.NEVER;function v(w){return w!==n.SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS&&w!==n.SUBPIXEL_ROUNDING_OCCURRENCES.ONLY_AT_REST&&w!==n.SUBPIXEL_ROUNDING_OCCURRENCES.NEVER}function y(w){return v(w)?c:w}function a(w){if(typeof w=="number")return y(w);if(!w||!n.Browser)return c;var _=w[n.Browser.vendor];return v(_)&&(_=w["*"]),y(_)}}(Pe),function(n){const o=n;o.WebGLDrawer=class extends o.DrawerBase{constructor(c){super(c),this._destroyed=!1,this._TextureMap=new Map,this._TileMap=new Map,this._gl=null,this._firstPass=null,this._secondPass=null,this._glFrameBuffer=null,this._renderToTexture=null,this._glFramebufferToCanvasTransform=null,this._outputCanvas=null,this._outputContext=null,this._clippingCanvas=null,this._clippingContext=null,this._renderingCanvas=null,this._backupCanvasDrawer=null,this._imageSmoothingEnabled=!0,this._boundToTileReady=v=>this._tileReadyHandler(v),this._boundToImageUnloaded=v=>this._imageUnloadedHandler(v),this.viewer.addHandler("tile-ready",this._boundToTileReady),this.viewer.addHandler("image-unloaded",this._boundToImageUnloaded),this.viewer.rejectEventHandler("tile-drawn","The WebGLDrawer does not raise the tile-drawn event"),this.viewer.rejectEventHandler("tile-drawing","The WebGLDrawer does not raise the tile-drawing event"),this._setupCanvases(),this._setupRenderer(),this.context=this._outputContext}destroy(){if(this._destroyed)return;let c=this._gl;var v=c.getParameter(c.MAX_TEXTURE_IMAGE_UNITS);for(let a=0;a<v;++a)c.activeTexture(c.TEXTURE0+a),c.bindTexture(c.TEXTURE_2D,null),c.bindTexture(c.TEXTURE_CUBE_MAP,null);c.bindBuffer(c.ARRAY_BUFFER,null),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,null),c.bindRenderbuffer(c.RENDERBUFFER,null),c.bindFramebuffer(c.FRAMEBUFFER,null),this._unloadTextures(),c.deleteBuffer(this._secondPass.bufferOutputPosition),c.deleteFramebuffer(this._glFrameBuffer),this._renderingCanvas.width=this._renderingCanvas.height=1,this._clippingCanvas.width=this._clippingCanvas.height=1,this._outputCanvas.width=this._outputCanvas.height=1,this._renderingCanvas=null,this._clippingCanvas=this._clippingContext=null,this._outputCanvas=this._outputContext=null;let y=c.getExtension("WEBGL_lose_context");y&&y.loseContext(),this.viewer.removeHandler("tile-ready",this._boundToTileReady),this.viewer.removeHandler("image-unloaded",this._boundToImageUnloaded),this.viewer.removeHandler("resize",this._resizeHandler),this._gl=null,this._backupCanvasDrawer&&(this._backupCanvasDrawer.destroy(),this._backupCanvasDrawer=null),this.container.removeChild(this.canvas),this.viewer.drawer===this&&(this.viewer.drawer=null),this._destroyed=!0}canRotate(){return!0}static isSupported(){let c=document.createElement("canvas"),v=n.isFunction(c.getContext)&&c.getContext("webgl"),y=v&&v.getExtension("WEBGL_lose_context");return y&&y.loseContext(),!!v}getType(){return"webgl"}minimumOverlapRequired(c){return c.isTainted()}_createDrawingElement(){let c=n.makeNeutralElement("canvas"),v=this._calculateCanvasSize();return c.width=v.x,c.height=v.y,c}_getBackupCanvasDrawer(){return this._backupCanvasDrawer||(this._backupCanvasDrawer=this.viewer.requestDrawer("canvas",{mainDrawer:!1}),this._backupCanvasDrawer.canvas.style.setProperty("visibility","hidden")),this._backupCanvasDrawer}draw(c){let v=this._gl;const y=this.viewport.getBoundsNoRotateWithMargins(!0);let a={bounds:y,center:new o.Point(y.x+y.width/2,y.y+y.height/2),rotation:this.viewport.getRotation(!0)*Math.PI/180},w=this.viewport.flipped?-1:1,_=n.Mat3.makeTranslation(-a.center.x,-a.center.y),T=n.Mat3.makeScaling(2/a.bounds.width*w,-2/a.bounds.height),I=n.Mat3.makeRotation(-a.rotation),k=T.multiply(I).multiply(_);v.bindFramebuffer(v.FRAMEBUFFER,null),v.clear(v.COLOR_BUFFER_BIT),this._outputContext.clearRect(0,0,this._outputCanvas.width,this._outputCanvas.height);let G=!1;c.forEach((W,O)=>{if(W.isTainted()){G&&(this._outputContext.drawImage(this._renderingCanvas,0,0),v.bindFramebuffer(v.FRAMEBUFFER,null),v.clear(v.COLOR_BUFFER_BIT),G=!1);const ee=this._getBackupCanvasDrawer();ee.draw([W]),this._outputContext.drawImage(ee.canvas,0,0)}else{let ee=W.getTilesToDraw();if(W.placeholderFillStyle&&W._hasOpaqueTile===!1&&this._drawPlaceholder(W),ee.length===0||W.getOpacity()===0)return;let ve=ee[0],we=W.compositeOperation||this.viewer.compositeOperation||W._clip||W._croppingPolygons||W.debugMode,ot=we||W.opacity<1||ve.hasTransparency;we&&(G&&this._outputContext.drawImage(this._renderingCanvas,0,0),v.bindFramebuffer(v.FRAMEBUFFER,null),v.clear(v.COLOR_BUFFER_BIT)),v.useProgram(this._firstPass.shaderProgram),ot?(v.bindFramebuffer(v.FRAMEBUFFER,this._glFrameBuffer),v.clear(v.COLOR_BUFFER_BIT)):v.bindFramebuffer(v.FRAMEBUFFER,null);let Ge=k,je=W.getRotation(!0);if(je%360!==0){let ke=n.Mat3.makeRotation(-je*Math.PI/180),Dt=W.getBoundsNoRotate(!0).getCenter(),ut=n.Mat3.makeTranslation(Dt.x,Dt.y),wt=n.Mat3.makeTranslation(-Dt.x,-Dt.y),jt=ut.multiply(ke).multiply(wt);Ge=k.multiply(jt)}let xt=this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS);if(xt<=0)throw new Error(`WegGL error: bad value for gl parameter MAX_TEXTURE_IMAGE_UNITS (${xt}). This could happen
7
- if too many contexts have been created and not released, or there is another problem with the graphics card.`);let Q=new Float32Array(xt*12),vt=new Array(xt),Ne=new Array(xt),dt=new Array(xt);for(let ke=0;ke<ee.length;ke++){let Dt=ee[ke].tile,ut=ke%xt,wt=ut+1,jt=Dt.getCanvasContext(),at=jt?this._TextureMap.get(jt.canvas):null;if(at||(this._tileReadyHandler({tile:Dt,tiledImage:W}),at=jt?this._TextureMap.get(jt.canvas):null),at&&this._getTileData(Dt,W,at,Ge,ut,Q,vt,Ne,dt),wt===xt||ke===ee.length-1){for(let Ot=0;Ot<=wt;Ot++)v.activeTexture(v.TEXTURE0+Ot),v.bindTexture(v.TEXTURE_2D,vt[Ot]);v.bindBuffer(v.ARRAY_BUFFER,this._firstPass.bufferTexturePosition),v.bufferData(v.ARRAY_BUFFER,Q,v.DYNAMIC_DRAW),Ne.forEach((Ot,Jt)=>{v.uniformMatrix3fv(this._firstPass.uTransformMatrices[Jt],!1,Ot)}),v.uniform1fv(this._firstPass.uOpacities,new Float32Array(dt)),v.bindBuffer(v.ARRAY_BUFFER,this._firstPass.bufferOutputPosition),v.vertexAttribPointer(this._firstPass.aOutputPosition,2,v.FLOAT,!1,0,0),v.bindBuffer(v.ARRAY_BUFFER,this._firstPass.bufferTexturePosition),v.vertexAttribPointer(this._firstPass.aTexturePosition,2,v.FLOAT,!1,0,0),v.bindBuffer(v.ARRAY_BUFFER,this._firstPass.bufferIndex),v.vertexAttribPointer(this._firstPass.aIndex,1,v.FLOAT,!1,0,0),v.drawArrays(v.TRIANGLES,0,6*wt)}}ot&&(v.useProgram(this._secondPass.shaderProgram),v.bindFramebuffer(v.FRAMEBUFFER,null),v.activeTexture(v.TEXTURE0),v.bindTexture(v.TEXTURE_2D,this._renderToTexture),this._gl.uniform1f(this._secondPass.uOpacityMultiplier,W.opacity),v.bindBuffer(v.ARRAY_BUFFER,this._secondPass.bufferTexturePosition),v.vertexAttribPointer(this._secondPass.aTexturePosition,2,v.FLOAT,!1,0,0),v.bindBuffer(v.ARRAY_BUFFER,this._secondPass.bufferOutputPosition),v.vertexAttribPointer(this._secondPass.aOutputPosition,2,v.FLOAT,!1,0,0),v.drawArrays(v.TRIANGLES,0,6)),G=!0,we&&(this._applyContext2dPipeline(W,ee,O),G=!1,v.bindFramebuffer(v.FRAMEBUFFER,null),v.clear(v.COLOR_BUFFER_BIT)),O===0&&this._raiseTiledImageDrawnEvent(W,ee.map(ke=>ke.tile))}}),G&&this._outputContext.drawImage(this._renderingCanvas,0,0)}setImageSmoothingEnabled(c){this._imageSmoothingEnabled!==c&&(this._imageSmoothingEnabled=c,this._unloadTextures(),this.viewer.world.draw())}drawDebuggingRect(c){let v=this._outputContext;v.save(),v.lineWidth=2*n.pixelDensityRatio,v.strokeStyle=this.debugGridColor[0],v.fillStyle=this.debugGridColor[0],v.strokeRect(c.x*n.pixelDensityRatio,c.y*n.pixelDensityRatio,c.width*n.pixelDensityRatio,c.height*n.pixelDensityRatio),v.restore()}_getTextureDataFromTile(c){return c.getCanvasContext().canvas}_applyContext2dPipeline(c,v,y){if(this._outputContext.save(),this._outputContext.globalCompositeOperation=y===0?null:c.compositeOperation||this.viewer.compositeOperation,c._croppingPolygons||c._clip?(this._renderToClippingCanvas(c),this._outputContext.drawImage(this._clippingCanvas,0,0)):this._outputContext.drawImage(this._renderingCanvas,0,0),this._outputContext.restore(),c.debugMode){const a=this.viewer.viewport.getFlip();a&&this._flip(),this._drawDebugInfo(v,c,a),a&&this._flip()}}_getTileData(c,v,y,a,w,_,T,I,k){let G=y.texture,W=y.position;_.set(W,w*12);let O=this._calculateOverlapFraction(c,v),ee=c.positionedBounds.width*O.x,ve=c.positionedBounds.height*O.y,we=c.positionedBounds.x+(c.x===0?0:ee),ot=c.positionedBounds.y+(c.y===0?0:ve),Ge=c.positionedBounds.x+c.positionedBounds.width-(c.isRightMost?0:ee),je=c.positionedBounds.y+c.positionedBounds.height-(c.isBottomMost?0:ve),xt=Ge-we,Q=je-ot,vt=new n.Mat3([xt,0,0,0,Q,0,we,ot,1]);if(c.flipped){let dt=n.Mat3.makeTranslation(.5,0),ke=n.Mat3.makeTranslation(-.5,0),Dt=dt.multiply(n.Mat3.makeScaling(-1,1)).multiply(ke);vt=vt.multiply(Dt)}let Ne=a.multiply(vt);k[w]=c.opacity,T[w]=G,I[w]=Ne.values}_textureFilter(){return this._imageSmoothingEnabled?this._gl.LINEAR:this._gl.NEAREST}_setupRenderer(){let c=this._gl;c||n.console.error("_setupCanvases must be called before _setupRenderer"),this._unitQuad=this._makeQuadVertexBuffer(0,1,0,1),this._makeFirstPassShaderProgram(),this._makeSecondPassShaderProgram(),this._renderToTexture=c.createTexture(),c.activeTexture(c.TEXTURE0),c.bindTexture(c.TEXTURE_2D,this._renderToTexture),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,this._renderingCanvas.width,this._renderingCanvas.height,0,c.RGBA,c.UNSIGNED_BYTE,null),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,this._textureFilter()),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),this._glFrameBuffer=c.createFramebuffer(),c.bindFramebuffer(c.FRAMEBUFFER,this._glFrameBuffer),c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,this._renderToTexture,0),c.enable(c.BLEND),c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA)}_makeFirstPassShaderProgram(){let c=this._glNumTextures=this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS),v=()=>[...Array(c).keys()].map(G=>`uniform mat3 u_matrix_${G};`).join(`
8
- `),y=()=>[...Array(c).keys()].map(G=>`${G>0?"else ":""}if(int(a_index) == ${G}) { transform_matrix = u_matrix_${G}; }`).join(`
6
+ function ae(n){return new ae.Viewer(n)}(function(n){n.version={versionStr:"5.0.1",major:parseInt("5",10),minor:parseInt("0",10),revision:parseInt("1",10)};var o={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object AsyncFunction]":"function","[object Promise]":"promise","[object Array]":"array","[object Date]":"date","[object RegExp]":"regexp","[object Object]":"object"},u=Object.prototype.toString,h=Object.prototype.hasOwnProperty;n.isFunction=function(m){return n.type(m)==="function"},n.isArray=Array.isArray||function(m){return n.type(m)==="array"},n.isWindow=function(m){return m&&typeof m=="object"&&"setInterval"in m},n.type=function(m){return m==null?String(m):o[u.call(m)]||"object"},n.isPlainObject=function(m){if(!m||ae.type(m)!=="object"||m.nodeType||n.isWindow(m)||m.constructor&&!h.call(m,"constructor")&&!h.call(m.constructor.prototype,"isPrototypeOf"))return!1;var y;for(var a in m)y=a;return y===void 0||h.call(m,y)},n.isEmptyObject=function(m){for(var y in m)return!1;return!0},n.freezeObject=function(m){return Object.freeze?n.freezeObject=Object.freeze:n.freezeObject=function(y){return y},n.freezeObject(m)},n.supportsCanvas=function(){var m=document.createElement("canvas");return!!(n.isFunction(m.getContext)&&m.getContext("2d"))}(),n.isCanvasTainted=function(m){var y=!1;try{m.getContext("2d").getImageData(0,0,1,1)}catch{y=!0}return y},n.supportsAddEventListener=function(){return!!(document.documentElement.addEventListener&&document.addEventListener)}(),n.supportsRemoveEventListener=function(){return!!(document.documentElement.removeEventListener&&document.removeEventListener)}(),n.supportsEventListenerOptions=function(){var m=0;if(n.supportsAddEventListener)try{var y={get capture(){return m++,!1},get once(){return m++,!1},get passive(){return m++,!1}};window.addEventListener("test",null,y),window.removeEventListener("test",null,y)}catch{m=0}return m>=3}(),n.getCurrentPixelDensityRatio=function(){if(n.supportsCanvas){var m=document.createElement("canvas").getContext("2d"),y=window.devicePixelRatio||1,a=m.webkitBackingStorePixelRatio||m.mozBackingStorePixelRatio||m.msBackingStorePixelRatio||m.oBackingStorePixelRatio||m.backingStorePixelRatio||1;return Math.max(y,1)/a}else return 1},n.pixelDensityRatio=n.getCurrentPixelDensityRatio()})(ae),function(n){n.extend=function(){var a,w,_,A,R,k,G=arguments[0]||{},W=arguments.length,O=!1,$=1;for(typeof G=="boolean"&&(O=G,G=arguments[1]||{},$=2),typeof G!="object"&&!ae.isFunction(G)&&(G={}),W===$&&(G=this,--$);$<W;$++)if(a=arguments[$],a!==null||a!==void 0)for(w in a){var ye=Object.getOwnPropertyDescriptor(a,w);if(ye!==void 0){if(ye.get||ye.set){Object.defineProperty(G,w,ye);continue}A=ye.value}else{n.console.warn('Could not copy inherited property "'+w+'".');continue}G!==A&&(O&&A&&(ae.isPlainObject(A)||(R=ae.isArray(A)))?(_=G[w],R?(R=!1,k=_&&ae.isArray(_)?_:[]):k=_&&ae.isPlainObject(_)?_:{},G[w]=ae.extend(O,k,A)):A!==void 0&&(G[w]=A))}return G};var o=function(){if(typeof navigator!="object")return!1;var a=navigator.userAgent;return typeof a!="string"?!1:a.indexOf("iPhone")!==-1||a.indexOf("iPad")!==-1||a.indexOf("iPod")!==-1};n.extend(n,{DEFAULT_SETTINGS:{xmlPath:null,tileSources:null,tileHost:null,initialPage:0,crossOriginPolicy:!1,ajaxWithCredentials:!1,loadTilesWithAjax:!1,ajaxHeaders:{},splitHashDataForPost:!1,panHorizontal:!0,panVertical:!0,constrainDuringPan:!1,wrapHorizontal:!1,wrapVertical:!1,visibilityRatio:.5,minPixelRatio:.5,defaultZoomLevel:0,minZoomLevel:null,maxZoomLevel:null,homeFillsViewer:!1,clickTimeThreshold:300,clickDistThreshold:5,dblClickTimeThreshold:300,dblClickDistThreshold:20,springStiffness:6.5,animationTime:1.2,gestureSettingsMouse:{dragToPan:!0,scrollToZoom:!0,clickToZoom:!0,dblClickToZoom:!1,dblClickDragToZoom:!1,pinchToZoom:!1,zoomToRefPoint:!0,flickEnabled:!1,flickMinSpeed:120,flickMomentum:.25,pinchRotate:!1},gestureSettingsTouch:{dragToPan:!0,scrollToZoom:!1,clickToZoom:!1,dblClickToZoom:!0,dblClickDragToZoom:!0,pinchToZoom:!0,zoomToRefPoint:!0,flickEnabled:!0,flickMinSpeed:120,flickMomentum:.25,pinchRotate:!1},gestureSettingsPen:{dragToPan:!0,scrollToZoom:!1,clickToZoom:!0,dblClickToZoom:!1,dblClickDragToZoom:!1,pinchToZoom:!1,zoomToRefPoint:!0,flickEnabled:!1,flickMinSpeed:120,flickMomentum:.25,pinchRotate:!1},gestureSettingsUnknown:{dragToPan:!0,scrollToZoom:!1,clickToZoom:!1,dblClickToZoom:!0,dblClickDragToZoom:!1,pinchToZoom:!0,zoomToRefPoint:!0,flickEnabled:!0,flickMinSpeed:120,flickMomentum:.25,pinchRotate:!1},zoomPerClick:2,zoomPerScroll:1.2,zoomPerDblClickDrag:1.2,zoomPerSecond:1,blendTime:0,alwaysBlend:!1,autoHideControls:!0,immediateRender:!1,minZoomImageRatio:.9,maxZoomPixelRatio:1.1,smoothTileEdgesMinZoom:1.1,iOSDevice:o(),pixelsPerWheelLine:40,pixelsPerArrowPress:40,autoResize:!0,preserveImageSizeOnResize:!1,minScrollDeltaTime:50,rotationIncrement:90,maxTilesPerFrame:1,showSequenceControl:!0,sequenceControlAnchor:null,preserveViewport:!1,preserveOverlays:!1,navPrevNextWrap:!1,showNavigationControl:!0,navigationControlAnchor:null,showZoomControl:!0,showHomeControl:!0,showFullPageControl:!0,showRotationControl:!1,showFlipControl:!1,controlsFadeDelay:2e3,controlsFadeLength:1500,mouseNavEnabled:!0,showNavigator:!1,navigatorElement:null,navigatorId:null,navigatorPosition:null,navigatorSizeRatio:.2,navigatorMaintainSizeRatio:!1,navigatorTop:null,navigatorLeft:null,navigatorHeight:null,navigatorWidth:null,navigatorAutoResize:!0,navigatorAutoFade:!0,navigatorRotate:!0,navigatorBackground:"#000",navigatorOpacity:.8,navigatorBorderColor:"#555",navigatorDisplayRegionColor:"#900",degrees:0,flipped:!1,overlayPreserveContentDirection:!0,opacity:1,compositeOperation:null,drawer:["webgl","canvas","html"],drawerOptions:{webgl:{},canvas:{},html:{},custom:{}},preload:!1,imageSmoothingEnabled:!0,placeholderFillStyle:null,subPixelRoundingForTransparency:null,showReferenceStrip:!1,referenceStripScroll:"horizontal",referenceStripElement:null,referenceStripHeight:null,referenceStripWidth:null,referenceStripPosition:"BOTTOM_LEFT",referenceStripSizeRatio:.2,collectionRows:3,collectionColumns:0,collectionLayout:"horizontal",collectionMode:!1,collectionTileSize:800,collectionTileMargin:80,imageLoaderLimit:0,maxImageCacheCount:200,timeout:3e4,tileRetryMax:0,tileRetryDelay:2500,prefixUrl:"/images/",navImages:{zoomIn:{REST:"zoomin_rest.png",GROUP:"zoomin_grouphover.png",HOVER:"zoomin_hover.png",DOWN:"zoomin_pressed.png"},zoomOut:{REST:"zoomout_rest.png",GROUP:"zoomout_grouphover.png",HOVER:"zoomout_hover.png",DOWN:"zoomout_pressed.png"},home:{REST:"home_rest.png",GROUP:"home_grouphover.png",HOVER:"home_hover.png",DOWN:"home_pressed.png"},fullpage:{REST:"fullpage_rest.png",GROUP:"fullpage_grouphover.png",HOVER:"fullpage_hover.png",DOWN:"fullpage_pressed.png"},rotateleft:{REST:"rotateleft_rest.png",GROUP:"rotateleft_grouphover.png",HOVER:"rotateleft_hover.png",DOWN:"rotateleft_pressed.png"},rotateright:{REST:"rotateright_rest.png",GROUP:"rotateright_grouphover.png",HOVER:"rotateright_hover.png",DOWN:"rotateright_pressed.png"},flip:{REST:"flip_rest.png",GROUP:"flip_grouphover.png",HOVER:"flip_hover.png",DOWN:"flip_pressed.png"},previous:{REST:"previous_rest.png",GROUP:"previous_grouphover.png",HOVER:"previous_hover.png",DOWN:"previous_pressed.png"},next:{REST:"next_rest.png",GROUP:"next_grouphover.png",HOVER:"next_hover.png",DOWN:"next_pressed.png"}},debugMode:!1,debugGridColor:["#437AB2","#1B9E77","#D95F02","#7570B3","#E7298A","#66A61E","#E6AB02","#A6761D","#666666"],silenceMultiImageWarnings:!1},delegate:function(a,w){return function(){var _=arguments;return _===void 0&&(_=[]),w.apply(a,_)}},BROWSERS:{UNKNOWN:0,IE:1,FIREFOX:2,SAFARI:3,CHROME:4,OPERA:5,EDGE:6,CHROMEEDGE:7},SUBPIXEL_ROUNDING_OCCURRENCES:{NEVER:0,ONLY_AT_REST:1,ALWAYS:2},_viewers:new Map,getViewer:function(a){return n._viewers.get(this.getElement(a))},getElement:function(a){return typeof a=="string"&&(a=document.getElementById(a)),a},getElementPosition:function(a){var w=new n.Point,_,A;for(a=n.getElement(a),_=n.getElementStyle(a).position==="fixed",A=y(a,_);A;)w.x+=a.offsetLeft,w.y+=a.offsetTop,_&&(w=w.plus(n.getPageScroll())),a=A,_=n.getElementStyle(a).position==="fixed",A=y(a,_);return w},getElementOffset:function(a){a=n.getElement(a);var w=a&&a.ownerDocument,_,A,R={top:0,left:0};return w?(_=w.documentElement,typeof a.getBoundingClientRect<"u"&&(R=a.getBoundingClientRect()),A=w===w.window?w:w.nodeType===9?w.defaultView||w.parentWindow:!1,new n.Point(R.left+(A.pageXOffset||_.scrollLeft)-(_.clientLeft||0),R.top+(A.pageYOffset||_.scrollTop)-(_.clientTop||0))):new n.Point},getElementSize:function(a){return a=n.getElement(a),new n.Point(a.clientWidth,a.clientHeight)},getElementStyle:document.documentElement.currentStyle?function(a){return a=n.getElement(a),a.currentStyle}:function(a){return a=n.getElement(a),window.getComputedStyle(a,"")},getCssPropertyWithVendorPrefix:function(a){var w={};return n.getCssPropertyWithVendorPrefix=function(_){if(w[_]!==void 0)return w[_];var A=document.createElement("div").style,R=null;if(A[_]!==void 0)R=_;else for(var k=["Webkit","Moz","MS","O","webkit","moz","ms","o"],G=n.capitalizeFirstLetter(_),W=0;W<k.length;W++){var O=k[W]+G;if(A[O]!==void 0){R=O;break}}return w[_]=R,R},n.getCssPropertyWithVendorPrefix(a)},capitalizeFirstLetter:function(a){return a.charAt(0).toUpperCase()+a.slice(1)},positiveModulo:function(a,w){var _=a%w;return _<0&&(_+=w),_},pointInElement:function(a,w){a=n.getElement(a);var _=n.getElementOffset(a),A=n.getElementSize(a);return w.x>=_.x&&w.x<_.x+A.x&&w.y<_.y+A.y&&w.y>=_.y},getMousePosition:function(a){if(typeof a.pageX=="number")n.getMousePosition=function(w){var _=new n.Point;return _.x=w.pageX,_.y=w.pageY,_};else if(typeof a.clientX=="number")n.getMousePosition=function(w){var _=new n.Point;return _.x=w.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,_.y=w.clientY+document.body.scrollTop+document.documentElement.scrollTop,_};else throw new Error("Unknown event mouse position, no known technique.");return n.getMousePosition(a)},getPageScroll:function(){var a=document.documentElement||{},w=document.body||{};if(typeof window.pageXOffset=="number")n.getPageScroll=function(){return new n.Point(window.pageXOffset,window.pageYOffset)};else if(w.scrollLeft||w.scrollTop)n.getPageScroll=function(){return new n.Point(document.body.scrollLeft,document.body.scrollTop)};else if(a.scrollLeft||a.scrollTop)n.getPageScroll=function(){return new n.Point(document.documentElement.scrollLeft,document.documentElement.scrollTop)};else return new n.Point(0,0);return n.getPageScroll()},setPageScroll:function(a){if(typeof window.scrollTo<"u")n.setPageScroll=function(A){window.scrollTo(A.x,A.y)};else{var w=n.getPageScroll();if(w.x===a.x&&w.y===a.y)return;document.body.scrollLeft=a.x,document.body.scrollTop=a.y;var _=n.getPageScroll();if(_.x!==w.x&&_.y!==w.y){n.setPageScroll=function(A){document.body.scrollLeft=A.x,document.body.scrollTop=A.y};return}if(document.documentElement.scrollLeft=a.x,document.documentElement.scrollTop=a.y,_=n.getPageScroll(),_.x!==w.x&&_.y!==w.y){n.setPageScroll=function(A){document.documentElement.scrollLeft=A.x,document.documentElement.scrollTop=A.y};return}n.setPageScroll=function(A){}}n.setPageScroll(a)},getWindowSize:function(){var a=document.documentElement||{},w=document.body||{};if(typeof window.innerWidth=="number")n.getWindowSize=function(){return new n.Point(window.innerWidth,window.innerHeight)};else if(a.clientWidth||a.clientHeight)n.getWindowSize=function(){return new n.Point(document.documentElement.clientWidth,document.documentElement.clientHeight)};else if(w.clientWidth||w.clientHeight)n.getWindowSize=function(){return new n.Point(document.body.clientWidth,document.body.clientHeight)};else throw new Error("Unknown window size, no known technique.");return n.getWindowSize()},makeCenteredNode:function(a){a=n.getElement(a);var w=[n.makeNeutralElement("div"),n.makeNeutralElement("div"),n.makeNeutralElement("div")];return n.extend(w[0].style,{display:"table",height:"100%",width:"100%"}),n.extend(w[1].style,{display:"table-row"}),n.extend(w[2].style,{display:"table-cell",verticalAlign:"middle",textAlign:"center"}),w[0].appendChild(w[1]),w[1].appendChild(w[2]),w[2].appendChild(a),w[0]},makeNeutralElement:function(a){var w=document.createElement(a),_=w.style;return _.background="transparent none",_.border="none",_.margin="0px",_.padding="0px",_.position="static",w},now:function(){return Date.now?n.now=Date.now:n.now=function(){return new Date().getTime()},n.now()},makeTransparentImage:function(a){var w=n.makeNeutralElement("img");return w.src=a,w},setElementOpacity:function(a,w,_){var A,R;a=n.getElement(a),_&&!n.Browser.alpha&&(w=Math.round(w)),n.Browser.opacity?a.style.opacity=w<1?w:"":w<1?(A=Math.round(100*w),R="alpha(opacity="+A+")",a.style.filter=R):a.style.filter=""},setElementTouchActionNone:function(a){a=n.getElement(a),typeof a.style.touchAction<"u"?a.style.touchAction="none":typeof a.style.msTouchAction<"u"&&(a.style.msTouchAction="none")},setElementPointerEvents:function(a,w){a=n.getElement(a),typeof a.style<"u"&&typeof a.style.pointerEvents<"u"&&(a.style.pointerEvents=w)},setElementPointerEventsNone:function(a){n.setElementPointerEvents(a,"none")},addClass:function(a,w){a=n.getElement(a),a.className?(" "+a.className+" ").indexOf(" "+w+" ")===-1&&(a.className+=" "+w):a.className=w},indexOf:function(a,w,_){return Array.prototype.indexOf?this.indexOf=function(A,R,k){return A.indexOf(R,k)}:this.indexOf=function(A,R,k){var G,W=k||0,O;if(!A)throw new TypeError;if(O=A.length,O===0||W>=O)return-1;for(W<0&&(W=O-Math.abs(W)),G=W;G<O;G++)if(A[G]===R)return G;return-1},this.indexOf(a,w,_)},removeClass:function(a,w){var _,A=[],R;for(a=n.getElement(a),_=a.className.split(/\s+/),R=0;R<_.length;R++)_[R]&&_[R]!==w&&A.push(_[R]);a.className=A.join(" ")},normalizeEventListenerOptions:function(a){var w;return typeof a<"u"?typeof a=="boolean"?w=n.supportsEventListenerOptions?{capture:a}:a:w=n.supportsEventListenerOptions?a:typeof a.capture<"u"?a.capture:!1:w=n.supportsEventListenerOptions?{capture:!1}:!1,w},addEvent:function(){if(n.supportsAddEventListener)return function(a,w,_,A){A=n.normalizeEventListenerOptions(A),a=n.getElement(a),a.addEventListener(w,_,A)};if(document.documentElement.attachEvent&&document.attachEvent)return function(a,w,_){a=n.getElement(a),a.attachEvent("on"+w,_)};throw new Error("No known event model.")}(),removeEvent:function(){if(n.supportsRemoveEventListener)return function(a,w,_,A){A=n.normalizeEventListenerOptions(A),a=n.getElement(a),a.removeEventListener(w,_,A)};if(document.documentElement.detachEvent&&document.detachEvent)return function(a,w,_){a=n.getElement(a),a.detachEvent("on"+w,_)};throw new Error("No known event model.")}(),cancelEvent:function(a){a.preventDefault()},eventIsCanceled:function(a){return a.defaultPrevented},stopEvent:function(a){a.stopPropagation()},createCallback:function(a,w){console.error("The createCallback function is deprecated and will be removed in future versions. Please use alternativeFunction instead.");var _=[],A;for(A=2;A<arguments.length;A++)_.push(arguments[A]);return function(){var R=_.concat([]),k;for(k=0;k<arguments.length;k++)R.push(arguments[k]);return w.apply(a,R)}},getUrlParameter:function(a){var w=m[a];return w||null},getUrlProtocol:function(a){var w=a.match(/^([a-z]+:)\/\//i);return w===null?window.location.protocol:w[1].toLowerCase()},createAjaxRequest:function(){if(window.XMLHttpRequest)return n.createAjaxRequest=function(){return new XMLHttpRequest},new XMLHttpRequest;throw new Error("Browser doesn't support XMLHttpRequest.")},makeAjaxRequest:function(a,w,_){var A,R,k,G;n.isPlainObject(a)&&(w=a.success,_=a.error,A=a.withCredentials,R=a.headers,k=a.responseType||null,G=a.postData||null,a=a.url);var W=n.getUrlProtocol(a),O=n.createAjaxRequest();if(!n.isFunction(w))throw new Error("makeAjaxRequest requires a success callback");O.onreadystatechange=function(){O.readyState===4&&(O.onreadystatechange=function(){},O.status>=200&&O.status<300||O.status===0&&W!=="http:"&&W!=="https:"?w(O):n.isFunction(_)?_(O):n.console.error("AJAX request returned %d: %s",O.status,a))};var $=G?"POST":"GET";try{if(O.open($,a,!0),k&&(O.responseType=k),R)for(var ye in R)Object.prototype.hasOwnProperty.call(R,ye)&&R[ye]&&O.setRequestHeader(ye,R[ye]);A&&(O.withCredentials=!0),O.send(G)}catch(we){n.console.error("%s while making AJAX request: %s",we.name,we.message),O.onreadystatechange=function(){},n.isFunction(_)&&_(O,we)}return O},jsonp:function(a){var w,_=a.url,A=document.head||document.getElementsByTagName("head")[0]||document.documentElement,R=a.callbackName||"openseadragon"+n.now(),k=window[R],G="$1"+R+"$2",W=a.param||"callback",O=a.callback;_=_.replace(/(=)\?(&|$)|\?\?/i,G),_+=(/\?/.test(_)?"&":"?")+W+"="+R,window[R]=function($){if(k)window[R]=k;else try{delete window[R]}catch{}O&&n.isFunction(O)&&O($)},w=document.createElement("script"),(a.async!==void 0||a.async!==!1)&&(w.async="async"),a.scriptCharset&&(w.charset=a.scriptCharset),w.src=_,w.onload=w.onreadystatechange=function($,ye){(ye||!w.readyState||/loaded|complete/.test(w.readyState))&&(w.onload=w.onreadystatechange=null,A&&w.parentNode&&A.removeChild(w),w=void 0)},A.insertBefore(w,A.firstChild)},createFromDZI:function(){throw"OpenSeadragon.createFromDZI is deprecated, use Viewer.open."},parseXml:function(a){if(window.DOMParser)n.parseXml=function(w){var _=null,A;return A=new DOMParser,_=A.parseFromString(w,"text/xml"),_};else throw new Error("Browser doesn't support XML DOM.");return n.parseXml(a)},parseJSON:function(a){return n.parseJSON=window.JSON.parse,n.parseJSON(a)},imageFormatSupported:function(a){return a=a||"",!!h[a.toLowerCase()]},setImageFormatsSupported:function(a){n.extend(h,a)}});var u=function(a){};n.console=window.console||{log:u,debug:u,info:u,warn:u,error:u,assert:u},n.Browser={vendor:n.BROWSERS.UNKNOWN,version:0,alpha:!0};var h={avif:!0,bmp:!1,jpeg:!0,jpg:!0,png:!0,tif:!1,wdp:!1,webp:!0},m={};(function(){var a=navigator.appVersion,w=navigator.userAgent,_;switch(navigator.appName){case"Microsoft Internet Explorer":window.attachEvent&&window.ActiveXObject&&(n.Browser.vendor=n.BROWSERS.IE,n.Browser.version=parseFloat(w.substring(w.indexOf("MSIE")+5,w.indexOf(";",w.indexOf("MSIE")))));break;case"Netscape":window.addEventListener&&(w.indexOf("Edge")>=0?(n.Browser.vendor=n.BROWSERS.EDGE,n.Browser.version=parseFloat(w.substring(w.indexOf("Edge")+5))):w.indexOf("Edg")>=0?(n.Browser.vendor=n.BROWSERS.CHROMEEDGE,n.Browser.version=parseFloat(w.substring(w.indexOf("Edg")+4))):w.indexOf("Firefox")>=0?(n.Browser.vendor=n.BROWSERS.FIREFOX,n.Browser.version=parseFloat(w.substring(w.indexOf("Firefox")+8))):w.indexOf("Safari")>=0?(n.Browser.vendor=w.indexOf("Chrome")>=0?n.BROWSERS.CHROME:n.BROWSERS.SAFARI,n.Browser.version=parseFloat(w.substring(w.substring(0,w.indexOf("Safari")).lastIndexOf("/")+1,w.indexOf("Safari")))):(_=new RegExp("Trident/.*rv:([0-9]{1,}[.0-9]{0,})"),_.exec(w)!==null&&(n.Browser.vendor=n.BROWSERS.IE,n.Browser.version=parseFloat(RegExp.$1))));break;case"Opera":n.Browser.vendor=n.BROWSERS.OPERA,n.Browser.version=parseFloat(a);break}var A=window.location.search.substring(1),R=A.split("&"),k,G,W;for(W=0;W<R.length;W++)if(k=R[W],G=k.indexOf("="),G>0){var O=k.substring(0,G),$=k.substring(G+1);try{m[O]=decodeURIComponent($)}catch{n.console.error("Ignoring malformed URL parameter: %s=%s",O,$)}}n.Browser.alpha=!(n.Browser.vendor===n.BROWSERS.CHROME&&n.Browser.version<2),n.Browser.opacity=!0,n.Browser.vendor===n.BROWSERS.IE&&n.console.error("Internet Explorer is not supported by OpenSeadragon")})(),function(a){var w=a.requestAnimationFrame||a.mozRequestAnimationFrame||a.webkitRequestAnimationFrame||a.msRequestAnimationFrame,_=a.cancelAnimationFrame||a.mozCancelAnimationFrame||a.webkitCancelAnimationFrame||a.msCancelAnimationFrame;if(w&&_)n.requestAnimationFrame=function(){return w.apply(a,arguments)},n.cancelAnimationFrame=function(){return _.apply(a,arguments)};else{var A=[],R=[],k=0,G;n.requestAnimationFrame=function(W){return A.push([++k,W]),G||(G=setInterval(function(){if(A.length){var O=n.now(),$=R;for(R=A,A=$;R.length;)R.shift()[1](O)}else clearInterval(G),G=void 0},1e3/50)),k},n.cancelAnimationFrame=function(W){var O,$;for(O=0,$=A.length;O<$;O+=1)if(A[O][0]===W){A.splice(O,1);return}for(O=0,$=R.length;O<$;O+=1)if(R[O][0]===W){R.splice(O,1);return}}}}(window);function y(a,w){return w&&a!==document.body?document.body:a.offsetParent}}(ae),function(n,o){Le.exports?Le.exports=o():n.OpenSeadragon=o()}(on,function(){return ae}),function(n){class o{constructor(h){h||(h=[0,0,0,0,0,0,0,0,0]),this.values=h}static makeIdentity(){return new o([1,0,0,0,1,0,0,0,1])}static makeTranslation(h,m){return new o([1,0,0,0,1,0,h,m,1])}static makeRotation(h){var m=Math.cos(h),y=Math.sin(h);return new o([m,-y,0,y,m,0,0,0,1])}static makeScaling(h,m){return new o([h,0,0,0,m,0,0,0,1])}multiply(h){let m=this.values,y=h.values;var a=m[0*3+0],w=m[0*3+1],_=m[0*3+2],A=m[1*3+0],R=m[1*3+1],k=m[1*3+2],G=m[2*3+0],W=m[2*3+1],O=m[2*3+2],$=y[0*3+0],ye=y[0*3+1],we=y[0*3+2],ht=y[1*3+0],tt=y[1*3+1],Ve=y[1*3+2],Tt=y[2*3+0],Q=y[2*3+1],Ct=y[2*3+2];return new o([$*a+ye*A+we*G,$*w+ye*R+we*W,$*_+ye*k+we*O,ht*a+tt*A+Ve*G,ht*w+tt*R+Ve*W,ht*_+tt*k+Ve*O,Tt*a+Q*A+Ct*G,Tt*w+Q*R+Ct*W,Tt*_+Q*k+Ct*O])}}n.Mat3=o}(ae),function(n){var o={supportsFullScreen:!1,isFullScreen:function(){return!1},getFullScreenElement:function(){return null},requestFullScreen:function(){},exitFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",fullScreenErrorEventName:""};document.exitFullscreen?(o.supportsFullScreen=!0,o.getFullScreenElement=function(){return document.fullscreenElement},o.requestFullScreen=function(u){return u.requestFullscreen().catch(function(h){n.console.error("Fullscreen request failed: ",h)})},o.exitFullScreen=function(){document.exitFullscreen().catch(function(u){n.console.error("Error while exiting fullscreen: ",u)})},o.fullScreenEventName="fullscreenchange",o.fullScreenErrorEventName="fullscreenerror"):document.msExitFullscreen?(o.supportsFullScreen=!0,o.getFullScreenElement=function(){return document.msFullscreenElement},o.requestFullScreen=function(u){return u.msRequestFullscreen()},o.exitFullScreen=function(){document.msExitFullscreen()},o.fullScreenEventName="MSFullscreenChange",o.fullScreenErrorEventName="MSFullscreenError"):document.webkitExitFullscreen?(o.supportsFullScreen=!0,o.getFullScreenElement=function(){return document.webkitFullscreenElement},o.requestFullScreen=function(u){return u.webkitRequestFullscreen()},o.exitFullScreen=function(){document.webkitExitFullscreen()},o.fullScreenEventName="webkitfullscreenchange",o.fullScreenErrorEventName="webkitfullscreenerror"):document.webkitCancelFullScreen?(o.supportsFullScreen=!0,o.getFullScreenElement=function(){return document.webkitCurrentFullScreenElement},o.requestFullScreen=function(u){return u.webkitRequestFullScreen()},o.exitFullScreen=function(){document.webkitCancelFullScreen()},o.fullScreenEventName="webkitfullscreenchange",o.fullScreenErrorEventName="webkitfullscreenerror"):document.mozCancelFullScreen&&(o.supportsFullScreen=!0,o.getFullScreenElement=function(){return document.mozFullScreenElement},o.requestFullScreen=function(u){return u.mozRequestFullScreen()},o.exitFullScreen=function(){document.mozCancelFullScreen()},o.fullScreenEventName="mozfullscreenchange",o.fullScreenErrorEventName="mozfullscreenerror"),o.isFullScreen=function(){return o.getFullScreenElement()!==null},o.cancelFullScreen=function(){n.console.error("cancelFullScreen is deprecated. Use exitFullScreen instead."),o.exitFullScreen()},n.extend(n,o)}(ae),function(n){n.EventSource=function(){this.events={},this._rejectedEventList={}},n.EventSource.prototype={addOnceHandler:function(o,u,h,m,y){var a=this;m=m||1;var w=0,_=function(A){return w++,w===m&&a.removeHandler(o,_),u(A)};return this.addHandler(o,_,h,y)},addHandler:function(o,u,h,m){if(Object.prototype.hasOwnProperty.call(this._rejectedEventList,o))return n.console.error(`Error adding handler for ${o}. ${this._rejectedEventList[o]}`),!1;var y=this.events[o];if(y||(this.events[o]=y=[]),u&&n.isFunction(u)){var a=y.length,w={handler:u,userData:h||null,priority:m||0};for(y[a]=w;a>0&&y[a-1].priority<y[a].priority;)y[a]=y[a-1],y[a-1]=w,a--}return!0},removeHandler:function(o,u){var h=this.events[o],m=[],y;if(h&&n.isArray(h)){for(y=0;y<h.length;y++)h[y].handler!==u&&m.push(h[y]);this.events[o]=m}},numberOfHandlers:function(o){var u=this.events[o];return u?u.length:0},removeAllHandlers:function(o){if(o)this.events[o]=[];else for(var u in this.events)this.events[u]=[]},getHandler:function(o){var u=this.events[o];return!u||!u.length?null:(u=u.length===1?[u[0]]:Array.apply(null,u),function(h,m){var y,a=u.length;for(y=0;y<a;y++)u[y]&&(m.eventSource=h,m.userData=u[y].userData,u[y].handler(m))})},raiseEvent:function(o,u){if(Object.prototype.hasOwnProperty.call(this._rejectedEventList,o))return n.console.error(`Error adding handler for ${o}. ${this._rejectedEventList[o]}`),!1;var h=this.getHandler(o);return h&&h(this,u||{}),!0},rejectEventHandler(o,u=""){this._rejectedEventList[o]=u},allowEventHandler(o){delete this._rejectedEventList[o]}}}(ae),function(n){var o={};n.MouseTracker=function(B){var I=arguments;n.isPlainObject(B)||(B={element:I[0],clickTimeThreshold:I[1],clickDistThreshold:I[2]}),this.hash=Math.random(),this.element=n.getElement(B.element),this.clickTimeThreshold=B.clickTimeThreshold||n.DEFAULT_SETTINGS.clickTimeThreshold,this.clickDistThreshold=B.clickDistThreshold||n.DEFAULT_SETTINGS.clickDistThreshold,this.dblClickTimeThreshold=B.dblClickTimeThreshold||n.DEFAULT_SETTINGS.dblClickTimeThreshold,this.dblClickDistThreshold=B.dblClickDistThreshold||n.DEFAULT_SETTINGS.dblClickDistThreshold,this.userData=B.userData||null,this.stopDelay=B.stopDelay||50,this.preProcessEventHandler=B.preProcessEventHandler||null,this.contextMenuHandler=B.contextMenuHandler||null,this.enterHandler=B.enterHandler||null,this.leaveHandler=B.leaveHandler||null,this.exitHandler=B.exitHandler||null,this.overHandler=B.overHandler||null,this.outHandler=B.outHandler||null,this.pressHandler=B.pressHandler||null,this.nonPrimaryPressHandler=B.nonPrimaryPressHandler||null,this.releaseHandler=B.releaseHandler||null,this.nonPrimaryReleaseHandler=B.nonPrimaryReleaseHandler||null,this.moveHandler=B.moveHandler||null,this.scrollHandler=B.scrollHandler||null,this.clickHandler=B.clickHandler||null,this.dblClickHandler=B.dblClickHandler||null,this.dragHandler=B.dragHandler||null,this.dragEndHandler=B.dragEndHandler||null,this.pinchHandler=B.pinchHandler||null,this.stopHandler=B.stopHandler||null,this.keyDownHandler=B.keyDownHandler||null,this.keyUpHandler=B.keyUpHandler||null,this.keyHandler=B.keyHandler||null,this.focusHandler=B.focusHandler||null,this.blurHandler=B.blurHandler||null;var N=this;o[this.hash]={click:function(V){we(N,V)},dblclick:function(V){ht(N,V)},keydown:function(V){tt(N,V)},keyup:function(V){Ve(N,V)},keypress:function(V){Tt(N,V)},focus:function(V){Q(N,V)},blur:function(V){Ct(N,V)},contextmenu:function(V){it(N,V)},wheel:function(V){wt(N,V)},mousewheel:function(V){Fe(N,V)},DOMMouseScroll:function(V){Fe(N,V)},MozMousePixelScroll:function(V){Fe(N,V)},losecapture:function(V){ft(N,V)},mouseenter:function(V){bt(N,V)},mouseleave:function(V){Vt(N,V)},mouseover:function(V){Ke(N,V)},mouseout:function(V){ii(N,V)},mousedown:function(V){ze(N,V)},mouseup:function(V){Jt(N,V)},mousemove:function(V){Kt(N,V)},touchstart:function(V){_t(N,V)},touchend:function(V){zt(N,V)},touchmove:function(V){dt(N,V)},touchcancel:function(V){Dt(N,V)},gesturestart:function(V){Wt(N,V)},gesturechange:function(V){Gt(N,V)},gotpointercapture:function(V){ei(N,V)},lostpointercapture:function(V){ni(N,V)},pointerenter:function(V){bt(N,V)},pointerleave:function(V){Vt(N,V)},pointerover:function(V){Ke(N,V)},pointerout:function(V){ii(N,V)},pointerdown:function(V){ze(N,V)},pointerup:function(V){Jt(N,V)},pointermove:function(V){Kt(N,V)},pointercancel:function(V){It(N,V)},pointerupcaptured:function(V){Xt(N,V)},pointermovecaptured:function(V){Xe(N,V)},tracking:!1,activePointersLists:[],lastClickPos:null,dblClickTimeOut:null,pinchGPoints:[],lastPinchDist:0,currentPinchDist:0,lastPinchCenter:null,currentPinchCenter:null,sentDragEvent:!1},this.hasGestureHandlers=!!(this.pressHandler||this.nonPrimaryPressHandler||this.releaseHandler||this.nonPrimaryReleaseHandler||this.clickHandler||this.dblClickHandler||this.dragHandler||this.dragEndHandler||this.pinchHandler),this.hasScrollHandler=!!this.scrollHandler,n.MouseTracker.havePointerEvents&&n.setElementPointerEvents(this.element,"auto"),this.exitHandler&&n.console.error("MouseTracker.exitHandler is deprecated. Use MouseTracker.leaveHandler instead."),B.startDisabled||this.setTracking(!0)},n.MouseTracker.prototype={destroy:function(){a(this),this.element=null,o[this.hash]=null,delete o[this.hash]},isTracking:function(){return o[this.hash].tracking},setTracking:function(B){return B?y(this):a(this),this},getActivePointersListByType:function(B){var I=o[this.hash],N,V=I?I.activePointersLists.length:0,ge;for(N=0;N<V;N++)if(I.activePointersLists[N].type===B)return I.activePointersLists[N];return ge=new n.MouseTracker.GesturePointList(B),I&&I.activePointersLists.push(ge),ge},getActivePointerCount:function(){var B=o[this.hash],I,N=B.activePointersLists.length,V=0;for(I=0;I<N;I++)V+=B.activePointersLists[I].getLength();return V},preProcessEventHandler:function(){},contextMenuHandler:function(){},enterHandler:function(){},leaveHandler:function(){},exitHandler:function(){},overHandler:function(){},outHandler:function(){},pressHandler:function(){},nonPrimaryPressHandler:function(){},releaseHandler:function(){},nonPrimaryReleaseHandler:function(){},moveHandler:function(){},scrollHandler:function(){},clickHandler:function(){},dblClickHandler:function(){},dragHandler:function(){},dragEndHandler:function(){},pinchHandler:function(){},stopHandler:function(){},keyDownHandler:function(){},keyUpHandler:function(){},keyHandler:function(){},focusHandler:function(){},blurHandler:function(){}};var u=function(){try{return window.self!==window.top}catch{return!0}}();function h(B){try{return B.addEventListener&&B.removeEventListener}catch{return!1}}n.MouseTracker.gesturePointVelocityTracker=function(){var B=[],I=0,N=0,V=function(ct,Ue){return ct.hash.toString()+Ue.type+Ue.id.toString()},ge=function(){var ct,Ue=B.length,kt,pt,ti=n.now(),si,ci,yi;for(si=ti-N,N=ti,ct=0;ct<Ue;ct++)kt=B[ct],pt=kt.gPoint,pt.direction=Math.atan2(pt.currentPos.y-kt.lastPos.y,pt.currentPos.x-kt.lastPos.x),ci=kt.lastPos.distanceTo(pt.currentPos),kt.lastPos=pt.currentPos,yi=1e3*ci/(si+1),pt.speed=.75*yi+.25*pt.speed},ke=function(ct,Ue){var kt=V(ct,Ue);B.push({guid:kt,gPoint:Ue,lastPos:Ue.currentPos}),B.length===1&&(N=n.now(),I=window.setInterval(ge,50))},je=function(ct,Ue){var kt=V(ct,Ue),pt,ti=B.length;for(pt=0;pt<ti;pt++)if(B[pt].guid===kt){B.splice(pt,1),ti--,ti===0&&window.clearInterval(I);break}};return{addPoint:ke,removePoint:je}}(),n.MouseTracker.captureElement=document,n.MouseTracker.wheelEventName="onwheel"in document.createElement("div")?"wheel":document.onmousewheel!==void 0?"mousewheel":"DOMMouseScroll",n.MouseTracker.subscribeEvents=["click","dblclick","keydown","keyup","keypress","focus","blur","contextmenu",n.MouseTracker.wheelEventName],n.MouseTracker.wheelEventName==="DOMMouseScroll"&&n.MouseTracker.subscribeEvents.push("MozMousePixelScroll"),window.PointerEvent?(n.MouseTracker.havePointerEvents=!0,n.MouseTracker.subscribeEvents.push("pointerenter","pointerleave","pointerover","pointerout","pointerdown","pointerup","pointermove","pointercancel"),n.MouseTracker.havePointerCapture=function(){var B=document.createElement("div");return n.isFunction(B.setPointerCapture)&&n.isFunction(B.releasePointerCapture)}(),n.MouseTracker.havePointerCapture&&n.MouseTracker.subscribeEvents.push("gotpointercapture","lostpointercapture")):(n.MouseTracker.havePointerEvents=!1,n.MouseTracker.subscribeEvents.push("mouseenter","mouseleave","mouseover","mouseout","mousedown","mouseup","mousemove"),n.MouseTracker.mousePointerId="legacy-mouse",n.MouseTracker.havePointerCapture=function(){var B=document.createElement("div");return n.isFunction(B.setCapture)&&n.isFunction(B.releaseCapture)}(),n.MouseTracker.havePointerCapture&&n.MouseTracker.subscribeEvents.push("losecapture"),"ontouchstart"in window&&n.MouseTracker.subscribeEvents.push("touchstart","touchend","touchmove","touchcancel"),"ongesturestart"in window&&n.MouseTracker.subscribeEvents.push("gesturestart","gesturechange")),n.MouseTracker.GesturePointList=function(B){this._gPoints=[],this.type=B,this.buttons=0,this.contacts=0,this.clicks=0,this.captureCount=0},n.MouseTracker.GesturePointList.prototype={getLength:function(){return this._gPoints.length},asArray:function(){return this._gPoints},add:function(B){return this._gPoints.push(B)},removeById:function(B){var I,N=this._gPoints.length;for(I=0;I<N;I++)if(this._gPoints[I].id===B){this._gPoints.splice(I,1);break}return this._gPoints.length},getByIndex:function(B){return B<this._gPoints.length?this._gPoints[B]:null},getById:function(B){var I,N=this._gPoints.length;for(I=0;I<N;I++)if(this._gPoints[I].id===B)return this._gPoints[I];return null},getPrimary:function(B){var I,N=this._gPoints.length;for(I=0;I<N;I++)if(this._gPoints[I].isPrimary)return this._gPoints[I];return null},addContact:function(){++this.contacts,this.contacts>1&&(this.type==="mouse"||this.type==="pen")&&(n.console.warn("GesturePointList.addContact() Implausible contacts value"),this.contacts=1)},removeContact:function(){--this.contacts,this.contacts<0&&(this.contacts=0)}};function m(B){var I=o[B.hash],N,V,ge,ke,je,ct=I.activePointersLists.length;for(N=0;N<ct;N++)if(ge=I.activePointersLists[N],ge.getLength()>0){for(je=[],ke=ge.asArray(),V=0;V<ke.length;V++)je.push(ke[V]);for(V=0;V<je.length;V++)At(B,ge,je[V])}for(N=0;N<ct;N++)I.activePointersLists.pop();I.sentDragEvent=!1}function y(B){var I=o[B.hash],N,V;if(!I.tracking){for(V=0;V<n.MouseTracker.subscribeEvents.length;V++)N=n.MouseTracker.subscribeEvents[V],n.addEvent(B.element,N,I[N],N===n.MouseTracker.wheelEventName?{passive:!1,capture:!1}:!1);m(B),I.tracking=!0}}function a(B){var I=o[B.hash],N,V;if(I.tracking){for(V=0;V<n.MouseTracker.subscribeEvents.length;V++)N=n.MouseTracker.subscribeEvents[V],n.removeEvent(B.element,N,I[N],!1);m(B),I.tracking=!1}}function w(B,I){var N=o[B.hash];if(I==="pointerevent")return{upName:"pointerup",upHandler:N.pointerupcaptured,moveName:"pointermove",moveHandler:N.pointermovecaptured};if(I==="mouse")return{upName:"pointerup",upHandler:N.pointerupcaptured,moveName:"pointermove",moveHandler:N.pointermovecaptured};if(I==="touch")return{upName:"touchend",upHandler:N.touchendcaptured,moveName:"touchmove",moveHandler:N.touchmovecaptured};throw new Error("MouseTracker.getCaptureEventParams: Unknown pointer type.")}function _(B,I){var N;if(n.MouseTracker.havePointerCapture)if(n.MouseTracker.havePointerEvents)try{B.element.setPointerCapture(I.id)}catch{n.console.warn("setPointerCapture() called on invalid pointer ID");return}else B.element.setCapture(!0);else N=w(B,n.MouseTracker.havePointerEvents?"pointerevent":I.type),u&&h(window.top)&&n.addEvent(window.top,N.upName,N.upHandler,!0),n.addEvent(n.MouseTracker.captureElement,N.upName,N.upHandler,!0),n.addEvent(n.MouseTracker.captureElement,N.moveName,N.moveHandler,!0);fe(B,I,!0)}function A(B,I){var N,V,ge;if(n.MouseTracker.havePointerCapture)if(n.MouseTracker.havePointerEvents){if(V=B.getActivePointersListByType(I.type),ge=V.getById(I.id),!ge||!ge.captured)return;try{B.element.releasePointerCapture(I.id)}catch{}}else B.element.releaseCapture();else N=w(B,n.MouseTracker.havePointerEvents?"pointerevent":I.type),u&&h(window.top)&&n.removeEvent(window.top,N.upName,N.upHandler,!0),n.removeEvent(n.MouseTracker.captureElement,N.moveName,N.moveHandler,!0),n.removeEvent(n.MouseTracker.captureElement,N.upName,N.upHandler,!0);fe(B,I,!1)}function R(B){return n.MouseTracker.havePointerEvents?B.pointerId:n.MouseTracker.mousePointerId}function k(B){return n.MouseTracker.havePointerEvents&&B.pointerType?B.pointerType:"mouse"}function G(B){return n.MouseTracker.havePointerEvents?B.isPrimary:!0}function W(B){return n.getMousePosition(B)}function O(B,I){return $(W(B),I)}function $(B,I){var N=n.getElementOffset(I);return B.minus(N)}function ye(B,I){return new n.Point((B.x+I.x)/2,(B.y+I.y)/2)}function we(B,I){var N={originalEvent:I,eventType:"click",pointerType:"mouse",isEmulated:!1};q(B,N),N.preventDefault&&!N.defaultPrevented&&n.cancelEvent(I),N.stopPropagation&&n.stopEvent(I)}function ht(B,I){var N={originalEvent:I,eventType:"dblclick",pointerType:"mouse",isEmulated:!1};q(B,N),N.preventDefault&&!N.defaultPrevented&&n.cancelEvent(I),N.stopPropagation&&n.stopEvent(I)}function tt(B,I){var N=null,V={originalEvent:I,eventType:"keydown",pointerType:"",isEmulated:!1};q(B,V),B.keyDownHandler&&!V.preventGesture&&!V.defaultPrevented&&(N={eventSource:B,keyCode:I.keyCode?I.keyCode:I.charCode,ctrl:I.ctrlKey,shift:I.shiftKey,alt:I.altKey,meta:I.metaKey,originalEvent:I,preventDefault:V.preventDefault||V.defaultPrevented,userData:B.userData},B.keyDownHandler(N)),(N&&N.preventDefault||V.preventDefault&&!V.defaultPrevented)&&n.cancelEvent(I),V.stopPropagation&&n.stopEvent(I)}function Ve(B,I){var N=null,V={originalEvent:I,eventType:"keyup",pointerType:"",isEmulated:!1};q(B,V),B.keyUpHandler&&!V.preventGesture&&!V.defaultPrevented&&(N={eventSource:B,keyCode:I.keyCode?I.keyCode:I.charCode,ctrl:I.ctrlKey,shift:I.shiftKey,alt:I.altKey,meta:I.metaKey,originalEvent:I,preventDefault:V.preventDefault||V.defaultPrevented,userData:B.userData},B.keyUpHandler(N)),(N&&N.preventDefault||V.preventDefault&&!V.defaultPrevented)&&n.cancelEvent(I),V.stopPropagation&&n.stopEvent(I)}function Tt(B,I){var N=null,V={originalEvent:I,eventType:"keypress",pointerType:"",isEmulated:!1};q(B,V),B.keyHandler&&!V.preventGesture&&!V.defaultPrevented&&(N={eventSource:B,keyCode:I.keyCode?I.keyCode:I.charCode,ctrl:I.ctrlKey,shift:I.shiftKey,alt:I.altKey,meta:I.metaKey,originalEvent:I,preventDefault:V.preventDefault||V.defaultPrevented,userData:B.userData},B.keyHandler(N)),(N&&N.preventDefault||V.preventDefault&&!V.defaultPrevented)&&n.cancelEvent(I),V.stopPropagation&&n.stopEvent(I)}function Q(B,I){var N={originalEvent:I,eventType:"focus",pointerType:"",isEmulated:!1};q(B,N),B.focusHandler&&!N.preventGesture&&B.focusHandler({eventSource:B,originalEvent:I,userData:B.userData})}function Ct(B,I){var N={originalEvent:I,eventType:"blur",pointerType:"",isEmulated:!1};q(B,N),B.blurHandler&&!N.preventGesture&&B.blurHandler({eventSource:B,originalEvent:I,userData:B.userData})}function it(B,I){var N=null,V={originalEvent:I,eventType:"contextmenu",pointerType:"mouse",isEmulated:!1};q(B,V),B.contextMenuHandler&&!V.preventGesture&&!V.defaultPrevented&&(N={eventSource:B,position:$(W(I),B.element),originalEvent:V.originalEvent,preventDefault:V.preventDefault||V.defaultPrevented,userData:B.userData},B.contextMenuHandler(N)),(N&&N.preventDefault||V.preventDefault&&!V.defaultPrevented)&&n.cancelEvent(I),V.stopPropagation&&n.stopEvent(I)}function wt(B,I){Lt(B,I,I)}function Fe(B,I){var N={target:I.target||I.srcElement,type:"wheel",shiftKey:I.shiftKey||!1,clientX:I.clientX,clientY:I.clientY,pageX:I.pageX?I.pageX:I.clientX,pageY:I.pageY?I.pageY:I.clientY,deltaMode:I.type==="MozMousePixelScroll"?0:1,deltaX:0,deltaZ:0};n.MouseTracker.wheelEventName==="mousewheel"?N.deltaY=-I.wheelDelta/n.DEFAULT_SETTINGS.pixelsPerWheelLine:N.deltaY=I.detail,Lt(B,N,I)}function Lt(B,I,N){var V=0,ge,ke=null;V=I.deltaY?I.deltaY<0?1:-1:0,ge={originalEvent:I,eventType:"wheel",pointerType:"mouse",isEmulated:I!==N},q(B,ge),B.scrollHandler&&!ge.preventGesture&&!ge.defaultPrevented&&(ke={eventSource:B,pointerType:"mouse",position:O(I,B.element),scroll:V,shift:I.shiftKey,isTouchEvent:!1,originalEvent:N,preventDefault:ge.preventDefault||ge.defaultPrevented,userData:B.userData},B.scrollHandler(ke)),ge.stopPropagation&&n.stopEvent(N),(ke&&ke.preventDefault||ge.preventDefault&&!ge.defaultPrevented)&&n.cancelEvent(N)}function ft(B,I){var N={id:n.MouseTracker.mousePointerId,type:"mouse"},V={originalEvent:I,eventType:"lostpointercapture",pointerType:"mouse",isEmulated:!1};q(B,V),I.target===B.element&&fe(B,N,!1),V.stopPropagation&&n.stopEvent(I)}function _t(B,I){var N,V,ge=I.changedTouches.length,ke,je=B.getActivePointersListByType("touch");N=n.now(),je.getLength()>I.touches.length-ge&&n.console.warn("Tracked touch contact count doesn't match event.touches.length");var ct={originalEvent:I,eventType:"pointerdown",pointerType:"touch",isEmulated:!1};for(q(B,ct),V=0;V<ge;V++)ke={id:I.changedTouches[V].identifier,type:"touch",isPrimary:je.getLength()===0,currentPos:W(I.changedTouches[V]),currentTime:N},Se(B,ct,ke),nt(B,ct,ke,0),fe(B,ke,!0);ct.preventDefault&&!ct.defaultPrevented&&n.cancelEvent(I),ct.stopPropagation&&n.stopEvent(I)}function zt(B,I){var N,V,ge=I.changedTouches.length,ke;N=n.now();var je={originalEvent:I,eventType:"pointerup",pointerType:"touch",isEmulated:!1};for(q(B,je),V=0;V<ge;V++)ke={id:I.changedTouches[V].identifier,type:"touch",currentPos:W(I.changedTouches[V]),currentTime:N},Ae(B,je,ke,0),fe(B,ke,!1),_e(B,je,ke);je.preventDefault&&!je.defaultPrevented&&n.cancelEvent(I),je.stopPropagation&&n.stopEvent(I)}function dt(B,I){var N,V,ge=I.changedTouches.length,ke;N=n.now();var je={originalEvent:I,eventType:"pointermove",pointerType:"touch",isEmulated:!1};for(q(B,je),V=0;V<ge;V++)ke={id:I.changedTouches[V].identifier,type:"touch",currentPos:W(I.changedTouches[V]),currentTime:N},Ne(B,je,ke);je.preventDefault&&!je.defaultPrevented&&n.cancelEvent(I),je.stopPropagation&&n.stopEvent(I)}function Dt(B,I){var N=I.changedTouches.length,V,ge,ke={originalEvent:I,eventType:"pointercancel",pointerType:"touch",isEmulated:!1};for(q(B,ke),V=0;V<N;V++)ge={id:I.changedTouches[V].identifier,type:"touch"},Ze(B,ke,ge);ke.stopPropagation&&n.stopEvent(I)}function Wt(B,I){return n.eventIsCanceled(I)||I.preventDefault(),!1}function Gt(B,I){return n.eventIsCanceled(I)||I.preventDefault(),!1}function ei(B,I){var N={originalEvent:I,eventType:"gotpointercapture",pointerType:k(I),isEmulated:!1};q(B,N),I.target===B.element&&fe(B,{id:I.pointerId,type:k(I)},!0),N.stopPropagation&&n.stopEvent(I)}function ni(B,I){var N={originalEvent:I,eventType:"lostpointercapture",pointerType:k(I),isEmulated:!1};q(B,N),I.target===B.element&&fe(B,{id:I.pointerId,type:k(I)},!1),N.stopPropagation&&n.stopEvent(I)}function bt(B,I){var N={id:R(I),type:k(I),isPrimary:G(I),currentPos:W(I),currentTime:n.now()},V={originalEvent:I,eventType:"pointerenter",pointerType:N.type,isEmulated:!1};q(B,V),Se(B,V,N)}function Vt(B,I){var N={id:R(I),type:k(I),isPrimary:G(I),currentPos:W(I),currentTime:n.now()},V={originalEvent:I,eventType:"pointerleave",pointerType:N.type,isEmulated:!1};q(B,V),_e(B,V,N)}function Ke(B,I){var N={id:R(I),type:k(I),isPrimary:G(I),currentPos:W(I),currentTime:n.now()},V={originalEvent:I,eventType:"pointerover",pointerType:N.type,isEmulated:!1};q(B,V),Ce(B,V,N),V.preventDefault&&!V.defaultPrevented&&n.cancelEvent(I),V.stopPropagation&&n.stopEvent(I)}function ii(B,I){var N={id:R(I),type:k(I),isPrimary:G(I),currentPos:W(I),currentTime:n.now()},V={originalEvent:I,eventType:"pointerout",pointerType:N.type,isEmulated:!1};q(B,V),me(B,V,N),V.preventDefault&&!V.defaultPrevented&&n.cancelEvent(I),V.stopPropagation&&n.stopEvent(I)}function ze(B,I){var N={id:R(I),type:k(I),isPrimary:G(I),currentPos:W(I),currentTime:n.now()},V=n.MouseTracker.havePointerEvents&&N.type==="touch",ge={originalEvent:I,eventType:"pointerdown",pointerType:N.type,isEmulated:!1};q(B,ge),nt(B,ge,N,I.button),ge.preventDefault&&!ge.defaultPrevented&&n.cancelEvent(I),ge.stopPropagation&&n.stopEvent(I),ge.shouldCapture&&(V?fe(B,N,!0):_(B,N))}function Jt(B,I){St(B,I)}function Xt(B,I){var N=B.getActivePointersListByType(k(I));N.getById(I.pointerId)&&St(B,I),n.stopEvent(I)}function St(B,I){var N;N={id:R(I),type:k(I),isPrimary:G(I),currentPos:W(I),currentTime:n.now()};var V={originalEvent:I,eventType:"pointerup",pointerType:N.type,isEmulated:!1};q(B,V),Ae(B,V,N,I.button),V.preventDefault&&!V.defaultPrevented&&n.cancelEvent(I),V.stopPropagation&&n.stopEvent(I),V.shouldReleaseCapture&&(I.target===B.element?A(B,N):fe(B,N,!1))}function Kt(B,I){Ot(B,I)}function Xe(B,I){var N=B.getActivePointersListByType(k(I));N.getById(I.pointerId)&&Ot(B,I),n.stopEvent(I)}function Ot(B,I){var N={id:R(I),type:k(I),isPrimary:G(I),currentPos:W(I),currentTime:n.now()},V={originalEvent:I,eventType:"pointermove",pointerType:N.type,isEmulated:!1};q(B,V),Ne(B,V,N),V.preventDefault&&!V.defaultPrevented&&n.cancelEvent(I),V.stopPropagation&&n.stopEvent(I)}function It(B,I){var N={id:I.pointerId,type:k(I)},V={originalEvent:I,eventType:"pointercancel",pointerType:N.type,isEmulated:!1};q(B,V),Ze(B,V,N),V.stopPropagation&&n.stopEvent(I)}function Et(B,I){return I.speed=0,I.direction=0,I.contactPos=I.currentPos,I.contactTime=I.currentTime,I.lastPos=I.currentPos,I.lastTime=I.currentTime,B.add(I)}function At(B,I,N){var V,ge=I.getById(N.id);return ge?(ge.captured&&(n.console.warn("stopTrackingPointer() called on captured pointer"),A(B,ge)),I.removeContact(),V=I.removeById(N.id)):V=I.getLength(),V}function E(B,I){switch(I.eventType){case"pointermove":I.isStoppable=!0,I.isCancelable=!0,I.preventDefault=!1,I.preventGesture=!B.hasGestureHandlers,I.stopPropagation=!1;break;case"pointerover":case"pointerout":case"contextmenu":case"keydown":case"keyup":case"keypress":I.isStoppable=!0,I.isCancelable=!0,I.preventDefault=!1,I.preventGesture=!1,I.stopPropagation=!1;break;case"pointerdown":I.isStoppable=!0,I.isCancelable=!0,I.preventDefault=!1,I.preventGesture=!B.hasGestureHandlers,I.stopPropagation=!1;break;case"pointerup":I.isStoppable=!0,I.isCancelable=!0,I.preventDefault=!1,I.preventGesture=!B.hasGestureHandlers,I.stopPropagation=!1;break;case"wheel":I.isStoppable=!0,I.isCancelable=!0,I.preventDefault=!1,I.preventGesture=!B.hasScrollHandler,I.stopPropagation=!1;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":I.isStoppable=!0,I.isCancelable=!1,I.preventDefault=!1,I.preventGesture=!1,I.stopPropagation=!1;break;case"click":I.isStoppable=!0,I.isCancelable=!0,I.preventDefault=!!B.clickHandler,I.preventGesture=!1,I.stopPropagation=!1;break;case"dblclick":I.isStoppable=!0,I.isCancelable=!0,I.preventDefault=!!B.dblClickHandler,I.preventGesture=!1,I.stopPropagation=!1;break;case"focus":case"blur":case"pointerenter":case"pointerleave":default:I.isStoppable=!1,I.isCancelable=!1,I.preventDefault=!1,I.preventGesture=!1,I.stopPropagation=!1;break}}function q(B,I){I.eventSource=B,I.eventPhase=I.originalEvent&&typeof I.originalEvent.eventPhase<"u"?I.originalEvent.eventPhase:0,I.defaultPrevented=n.eventIsCanceled(I.originalEvent),I.shouldCapture=!1,I.shouldReleaseCapture=!1,I.userData=B.userData,E(B,I),B.preProcessEventHandler&&B.preProcessEventHandler(I)}function fe(B,I,N){var V=B.getActivePointersListByType(I.type),ge=V.getById(I.id);ge?N&&!ge.captured?(ge.captured=!0,V.captureCount++):!N&&ge.captured&&(ge.captured=!1,V.captureCount--,V.captureCount<0&&(V.captureCount=0,n.console.warn("updatePointerCaptured() - pointsList.captureCount went negative"))):n.console.warn("updatePointerCaptured() called on untracked pointer")}function Se(B,I,N){var V=B.getActivePointersListByType(N.type),ge;ge=V.getById(N.id),ge?(ge.insideElement=!0,ge.lastPos=ge.currentPos,ge.lastTime=ge.currentTime,ge.currentPos=N.currentPos,ge.currentTime=N.currentTime,N=ge):(N.captured=!1,N.insideElementPressed=!1,N.insideElement=!0,Et(V,N)),B.enterHandler&&B.enterHandler({eventSource:B,pointerType:N.type,position:$(N.currentPos,B.element),buttons:V.buttons,pointers:B.getActivePointerCount(),insideElementPressed:N.insideElementPressed,buttonDownAny:V.buttons!==0,isTouchEvent:N.type==="touch",originalEvent:I.originalEvent,userData:B.userData})}function _e(B,I,N){var V=B.getActivePointersListByType(N.type),ge,ke;ge=V.getById(N.id),ge?(ge.captured?(ge.insideElement=!1,ge.lastPos=ge.currentPos,ge.lastTime=ge.currentTime,ge.currentPos=N.currentPos,ge.currentTime=N.currentTime):At(B,V,ge),N=ge):(N.captured=!1,N.insideElementPressed=!1),(B.leaveHandler||B.exitHandler)&&(ke={eventSource:B,pointerType:N.type,position:N.currentPos&&$(N.currentPos,B.element),buttons:V.buttons,pointers:B.getActivePointerCount(),insideElementPressed:N.insideElementPressed,buttonDownAny:V.buttons!==0,isTouchEvent:N.type==="touch",originalEvent:I.originalEvent,userData:B.userData},B.leaveHandler&&B.leaveHandler(ke),B.exitHandler&&B.exitHandler(ke))}function Ce(B,I,N){var V,ge;V=B.getActivePointersListByType(N.type),ge=V.getById(N.id),ge?N=ge:(N.captured=!1,N.insideElementPressed=!1),B.overHandler&&B.overHandler({eventSource:B,pointerType:N.type,position:$(N.currentPos,B.element),buttons:V.buttons,pointers:B.getActivePointerCount(),insideElementPressed:N.insideElementPressed,buttonDownAny:V.buttons!==0,isTouchEvent:N.type==="touch",originalEvent:I.originalEvent,userData:B.userData})}function me(B,I,N){var V,ge;V=B.getActivePointersListByType(N.type),ge=V.getById(N.id),ge?N=ge:(N.captured=!1,N.insideElementPressed=!1),B.outHandler&&B.outHandler({eventSource:B,pointerType:N.type,position:N.currentPos&&$(N.currentPos,B.element),buttons:V.buttons,pointers:B.getActivePointerCount(),insideElementPressed:N.insideElementPressed,buttonDownAny:V.buttons!==0,isTouchEvent:N.type==="touch",originalEvent:I.originalEvent,userData:B.userData})}function nt(B,I,N,V){var ge=o[B.hash],ke=B.getActivePointersListByType(N.type),je;if(typeof I.originalEvent.buttons<"u"?ke.buttons=I.originalEvent.buttons:V===0?ke.buttons|=1:V===1?ke.buttons|=4:V===2?ke.buttons|=2:V===3?ke.buttons|=8:V===4?ke.buttons|=16:V===5&&(ke.buttons|=32),V!==0){I.shouldCapture=!1,I.shouldReleaseCapture=!1,B.nonPrimaryPressHandler&&!I.preventGesture&&!I.defaultPrevented&&(I.preventDefault=!0,B.nonPrimaryPressHandler({eventSource:B,pointerType:N.type,position:$(N.currentPos,B.element),button:V,buttons:ke.buttons,isTouchEvent:N.type==="touch",originalEvent:I.originalEvent,userData:B.userData}));return}je=ke.getById(N.id),je?(je.insideElementPressed=!0,je.insideElement=!0,je.originalTarget=I.originalEvent.target,je.contactPos=N.currentPos,je.contactTime=N.currentTime,je.lastPos=je.currentPos,je.lastTime=je.currentTime,je.currentPos=N.currentPos,je.currentTime=N.currentTime,N=je):(N.captured=!1,N.insideElementPressed=!0,N.insideElement=!0,N.originalTarget=I.originalEvent.target,Et(ke,N)),ke.addContact(),!I.preventGesture&&!I.defaultPrevented?(I.shouldCapture=!0,I.shouldReleaseCapture=!1,I.preventDefault=!0,(B.dragHandler||B.dragEndHandler||B.pinchHandler)&&n.MouseTracker.gesturePointVelocityTracker.addPoint(B,N),ke.contacts===1?B.pressHandler&&!I.preventGesture&&B.pressHandler({eventSource:B,pointerType:N.type,position:$(N.contactPos,B.element),buttons:ke.buttons,isTouchEvent:N.type==="touch",originalEvent:I.originalEvent,userData:B.userData}):ke.contacts===2&&B.pinchHandler&&N.type==="touch"&&(ge.pinchGPoints=ke.asArray(),ge.lastPinchDist=ge.currentPinchDist=ge.pinchGPoints[0].currentPos.distanceTo(ge.pinchGPoints[1].currentPos),ge.lastPinchCenter=ge.currentPinchCenter=ye(ge.pinchGPoints[0].currentPos,ge.pinchGPoints[1].currentPos))):(I.shouldCapture=!1,I.shouldReleaseCapture=!1)}function Ae(B,I,N,V){var ge=o[B.hash],ke=B.getActivePointersListByType(N.type),je,ct,Ue,kt=!1,pt;if(typeof I.originalEvent.buttons<"u"?ke.buttons=I.originalEvent.buttons:V===0?ke.buttons^=-2:V===1?ke.buttons^=-5:V===2?ke.buttons^=-3:V===3?ke.buttons^=-9:V===4?ke.buttons^=-17:V===5&&(ke.buttons^=-33),I.shouldCapture=!1,V!==0){I.shouldReleaseCapture=!1,B.nonPrimaryReleaseHandler&&!I.preventGesture&&!I.defaultPrevented&&(I.preventDefault=!0,B.nonPrimaryReleaseHandler({eventSource:B,pointerType:N.type,position:$(N.currentPos,B.element),button:V,buttons:ke.buttons,isTouchEvent:N.type==="touch",originalEvent:I.originalEvent,userData:B.userData}));return}Ue=ke.getById(N.id),Ue?(ke.removeContact(),Ue.captured&&(kt=!0),Ue.lastPos=Ue.currentPos,Ue.lastTime=Ue.currentTime,Ue.currentPos=N.currentPos,Ue.currentTime=N.currentTime,Ue.insideElement||At(B,ke,Ue),je=Ue.currentPos,ct=Ue.currentTime):(N.captured=!1,N.insideElementPressed=!1,N.insideElement=!0,Et(ke,N),Ue=N),!I.preventGesture&&!I.defaultPrevented&&(kt?(I.shouldReleaseCapture=!0,I.preventDefault=!0,(B.dragHandler||B.dragEndHandler||B.pinchHandler)&&n.MouseTracker.gesturePointVelocityTracker.removePoint(B,Ue),ke.contacts===0?(B.releaseHandler&&je&&B.releaseHandler({eventSource:B,pointerType:Ue.type,position:$(je,B.element),buttons:ke.buttons,insideElementPressed:Ue.insideElementPressed,insideElementReleased:Ue.insideElement,isTouchEvent:Ue.type==="touch",originalEvent:I.originalEvent,userData:B.userData}),B.dragEndHandler&&ge.sentDragEvent&&B.dragEndHandler({eventSource:B,pointerType:Ue.type,position:$(Ue.currentPos,B.element),speed:Ue.speed,direction:Ue.direction,shift:I.originalEvent.shiftKey,isTouchEvent:Ue.type==="touch",originalEvent:I.originalEvent,userData:B.userData}),ge.sentDragEvent=!1,(B.clickHandler||B.dblClickHandler)&&Ue.insideElement&&(pt=ct-Ue.contactTime<=B.clickTimeThreshold&&Ue.contactPos.distanceTo(je)<=B.clickDistThreshold,B.clickHandler&&B.clickHandler({eventSource:B,pointerType:Ue.type,position:$(Ue.currentPos,B.element),quick:pt,shift:I.originalEvent.shiftKey,isTouchEvent:Ue.type==="touch",originalEvent:I.originalEvent,originalTarget:Ue.originalTarget,userData:B.userData}),B.dblClickHandler&&pt&&(ke.clicks++,ke.clicks===1?(ge.lastClickPos=je,ge.dblClickTimeOut=setTimeout(function(){ke.clicks=0},B.dblClickTimeThreshold)):ke.clicks===2&&(clearTimeout(ge.dblClickTimeOut),ke.clicks=0,ge.lastClickPos.distanceTo(je)<=B.dblClickDistThreshold&&B.dblClickHandler({eventSource:B,pointerType:Ue.type,position:$(Ue.currentPos,B.element),shift:I.originalEvent.shiftKey,isTouchEvent:Ue.type==="touch",originalEvent:I.originalEvent,userData:B.userData}),ge.lastClickPos=null)))):ke.contacts===2&&B.pinchHandler&&Ue.type==="touch"&&(ge.pinchGPoints=ke.asArray(),ge.lastPinchDist=ge.currentPinchDist=ge.pinchGPoints[0].currentPos.distanceTo(ge.pinchGPoints[1].currentPos),ge.lastPinchCenter=ge.currentPinchCenter=ye(ge.pinchGPoints[0].currentPos,ge.pinchGPoints[1].currentPos))):(I.shouldReleaseCapture=!1,B.releaseHandler&&je&&(B.releaseHandler({eventSource:B,pointerType:Ue.type,position:$(je,B.element),buttons:ke.buttons,insideElementPressed:Ue.insideElementPressed,insideElementReleased:Ue.insideElement,isTouchEvent:Ue.type==="touch",originalEvent:I.originalEvent,userData:B.userData}),I.preventDefault=!0)))}function Ne(B,I,N){var V=o[B.hash],ge=B.getActivePointersListByType(N.type),ke,je,ct;if(typeof I.originalEvent.buttons<"u"&&(ge.buttons=I.originalEvent.buttons),ke=ge.getById(N.id),ke)ke.lastPos=ke.currentPos,ke.lastTime=ke.currentTime,ke.currentPos=N.currentPos,ke.currentTime=N.currentTime;else return;I.shouldCapture=!1,I.shouldReleaseCapture=!1,B.stopHandler&&N.type==="mouse"&&(clearTimeout(B.stopTimeOut),B.stopTimeOut=setTimeout(function(){mt(B,I.originalEvent,N.type)},B.stopDelay)),ge.contacts===0?B.moveHandler&&B.moveHandler({eventSource:B,pointerType:N.type,position:$(N.currentPos,B.element),buttons:ge.buttons,isTouchEvent:N.type==="touch",originalEvent:I.originalEvent,userData:B.userData}):ge.contacts===1?(B.moveHandler&&(ke=ge.asArray()[0],B.moveHandler({eventSource:B,pointerType:ke.type,position:$(ke.currentPos,B.element),buttons:ge.buttons,isTouchEvent:ke.type==="touch",originalEvent:I.originalEvent,userData:B.userData})),B.dragHandler&&!I.preventGesture&&!I.defaultPrevented&&(ke=ge.asArray()[0],ct=ke.currentPos.minus(ke.lastPos),B.dragHandler({eventSource:B,pointerType:ke.type,position:$(ke.currentPos,B.element),buttons:ge.buttons,delta:ct,speed:ke.speed,direction:ke.direction,shift:I.originalEvent.shiftKey,isTouchEvent:ke.type==="touch",originalEvent:I.originalEvent,userData:B.userData}),I.preventDefault=!0,V.sentDragEvent=!0)):ge.contacts===2&&(B.moveHandler&&(je=ge.asArray(),B.moveHandler({eventSource:B,pointerType:je[0].type,position:$(ye(je[0].currentPos,je[1].currentPos),B.element),buttons:ge.buttons,isTouchEvent:je[0].type==="touch",originalEvent:I.originalEvent,userData:B.userData})),B.pinchHandler&&N.type==="touch"&&!I.preventGesture&&!I.defaultPrevented&&(ct=V.pinchGPoints[0].currentPos.distanceTo(V.pinchGPoints[1].currentPos),ct!==V.currentPinchDist&&(V.lastPinchDist=V.currentPinchDist,V.currentPinchDist=ct,V.lastPinchCenter=V.currentPinchCenter,V.currentPinchCenter=ye(V.pinchGPoints[0].currentPos,V.pinchGPoints[1].currentPos),B.pinchHandler({eventSource:B,pointerType:"touch",gesturePoints:V.pinchGPoints,lastCenter:$(V.lastPinchCenter,B.element),center:$(V.currentPinchCenter,B.element),lastDistance:V.lastPinchDist,distance:V.currentPinchDist,shift:I.originalEvent.shiftKey,originalEvent:I.originalEvent,userData:B.userData}),I.preventDefault=!0)))}function Ze(B,I,N){var V=B.getActivePointersListByType(N.type),ge;ge=V.getById(N.id),ge&&At(B,V,ge)}function mt(B,I,N){B.stopHandler&&B.stopHandler({eventSource:B,pointerType:N,position:O(I,B.element),buttons:B.getActivePointersListByType(N).buttons,isTouchEvent:N==="touch",originalEvent:I,userData:B.userData})}}(ae),function(n){n.ControlAnchor={NONE:0,TOP_LEFT:1,TOP_RIGHT:2,BOTTOM_RIGHT:3,BOTTOM_LEFT:4,ABSOLUTE:5},n.Control=function(o,u,h){var m=o.parentNode;typeof u=="number"&&(n.console.error("Passing an anchor directly into the OpenSeadragon.Control constructor is deprecated; please use an options object instead. Support for this deprecated variant is scheduled for removal in December 2013"),u={anchor:u}),u.attachToViewer=typeof u.attachToViewer>"u"?!0:u.attachToViewer,this.autoFade=typeof u.autoFade>"u"?!0:u.autoFade,this.element=o,this.anchor=u.anchor,this.container=h,this.anchor===n.ControlAnchor.ABSOLUTE?(this.wrapper=n.makeNeutralElement("div"),this.wrapper.style.position="absolute",this.wrapper.style.top=typeof u.top=="number"?u.top+"px":u.top,this.wrapper.style.left=typeof u.left=="number"?u.left+"px":u.left,this.wrapper.style.height=typeof u.height=="number"?u.height+"px":u.height,this.wrapper.style.width=typeof u.width=="number"?u.width+"px":u.width,this.wrapper.style.margin="0px",this.wrapper.style.padding="0px",this.element.style.position="relative",this.element.style.top="0px",this.element.style.left="0px",this.element.style.height="100%",this.element.style.width="100%"):(this.wrapper=n.makeNeutralElement("div"),this.wrapper.style.display="inline-block",this.anchor===n.ControlAnchor.NONE&&(this.wrapper.style.width=this.wrapper.style.height="100%")),this.wrapper.appendChild(this.element),u.attachToViewer?this.anchor===n.ControlAnchor.TOP_RIGHT||this.anchor===n.ControlAnchor.BOTTOM_RIGHT?this.container.insertBefore(this.wrapper,this.container.firstChild):this.container.appendChild(this.wrapper):m.appendChild(this.wrapper)},n.Control.prototype={destroy:function(){this.wrapper.removeChild(this.element),this.anchor!==n.ControlAnchor.NONE&&this.container.removeChild(this.wrapper)},isVisible:function(){return this.wrapper.style.display!=="none"},setVisible:function(o){this.wrapper.style.display=o?this.anchor===n.ControlAnchor.ABSOLUTE?"block":"inline-block":"none"},setOpacity:function(o){n.setElementOpacity(this.wrapper,o,!0)}}}(ae),function(n){n.ControlDock=function(u){var h=["topleft","topright","bottomright","bottomleft"],m,y;for(n.extend(!0,this,{id:"controldock-"+n.now()+"-"+Math.floor(Math.random()*1e6),container:n.makeNeutralElement("div"),controls:[]},u),this.container.onsubmit=function(){return!1},this.element&&(this.element=n.getElement(this.element),this.element.appendChild(this.container),n.getElementStyle(this.element).position==="static"&&(this.element.style.position="relative"),this.container.style.width="100%",this.container.style.height="100%"),y=0;y<h.length;y++)m=h[y],this.controls[m]=n.makeNeutralElement("div"),this.controls[m].style.position="absolute",m.match("left")&&(this.controls[m].style.left="0px"),m.match("right")&&(this.controls[m].style.right="0px"),m.match("top")&&(this.controls[m].style.top="0px"),m.match("bottom")&&(this.controls[m].style.bottom="0px");this.container.appendChild(this.controls.topleft),this.container.appendChild(this.controls.topright),this.container.appendChild(this.controls.bottomright),this.container.appendChild(this.controls.bottomleft)},n.ControlDock.prototype={addControl:function(u,h){u=n.getElement(u);var m=null;if(!(o(this,u)>=0)){switch(h.anchor){case n.ControlAnchor.TOP_RIGHT:m=this.controls.topright,u.style.position="relative",u.style.paddingRight="0px",u.style.paddingTop="0px";break;case n.ControlAnchor.BOTTOM_RIGHT:m=this.controls.bottomright,u.style.position="relative",u.style.paddingRight="0px",u.style.paddingBottom="0px";break;case n.ControlAnchor.BOTTOM_LEFT:m=this.controls.bottomleft,u.style.position="relative",u.style.paddingLeft="0px",u.style.paddingBottom="0px";break;case n.ControlAnchor.TOP_LEFT:m=this.controls.topleft,u.style.position="relative",u.style.paddingLeft="0px",u.style.paddingTop="0px";break;case n.ControlAnchor.ABSOLUTE:m=this.container,u.style.margin="0px",u.style.padding="0px";break;default:case n.ControlAnchor.NONE:m=this.container,u.style.margin="0px",u.style.padding="0px";break}this.controls.push(new n.Control(u,h,m)),u.style.display="inline-block"}},removeControl:function(u){u=n.getElement(u);var h=o(this,u);return h>=0&&(this.controls[h].destroy(),this.controls.splice(h,1)),this},clearControls:function(){for(;this.controls.length>0;)this.controls.pop().destroy();return this},areControlsEnabled:function(){var u;for(u=this.controls.length-1;u>=0;u--)if(this.controls[u].isVisible())return!0;return!1},setControlsEnabled:function(u){var h;for(h=this.controls.length-1;h>=0;h--)this.controls[h].setVisible(u);return this}};function o(u,h){var m=u.controls,y;for(y=m.length-1;y>=0;y--)if(m[y].element===h)return y;return-1}}(ae),function(n){n.Placement=n.freezeObject({CENTER:0,TOP_LEFT:1,TOP:2,TOP_RIGHT:3,RIGHT:4,BOTTOM_RIGHT:5,BOTTOM:6,BOTTOM_LEFT:7,LEFT:8,properties:{0:{isLeft:!1,isHorizontallyCentered:!0,isRight:!1,isTop:!1,isVerticallyCentered:!0,isBottom:!1},1:{isLeft:!0,isHorizontallyCentered:!1,isRight:!1,isTop:!0,isVerticallyCentered:!1,isBottom:!1},2:{isLeft:!1,isHorizontallyCentered:!0,isRight:!1,isTop:!0,isVerticallyCentered:!1,isBottom:!1},3:{isLeft:!1,isHorizontallyCentered:!1,isRight:!0,isTop:!0,isVerticallyCentered:!1,isBottom:!1},4:{isLeft:!1,isHorizontallyCentered:!1,isRight:!0,isTop:!1,isVerticallyCentered:!0,isBottom:!1},5:{isLeft:!1,isHorizontallyCentered:!1,isRight:!0,isTop:!1,isVerticallyCentered:!1,isBottom:!0},6:{isLeft:!1,isHorizontallyCentered:!0,isRight:!1,isTop:!1,isVerticallyCentered:!1,isBottom:!0},7:{isLeft:!0,isHorizontallyCentered:!1,isRight:!1,isTop:!1,isVerticallyCentered:!1,isBottom:!0},8:{isLeft:!0,isHorizontallyCentered:!1,isRight:!1,isTop:!1,isVerticallyCentered:!0,isBottom:!1}}})}(ae),function(n){var o={},u=1;n.Viewer=function(E){var q=arguments,fe=this,Se;n.isPlainObject(E)||(E={id:q[0],xmlPath:q.length>1?q[1]:void 0,prefixUrl:q.length>2?q[2]:void 0,controls:q.length>3?q[3]:void 0,overlays:q.length>4?q[4]:void 0}),E.config&&(n.extend(!0,E,E.config),delete E.config);let _e=["useCanvas"];if(E.drawerOptions=Object.assign({},_e.reduce((me,nt)=>(me[nt]=E[nt],delete E[nt],me),{}),E.drawerOptions),n.extend(!0,this,{id:E.id,hash:E.hash||u++,initialPage:0,element:null,container:null,canvas:null,overlays:[],overlaysContainer:null,previousBody:[],customControls:[],source:null,drawer:null,world:null,viewport:null,navigator:null,collectionViewport:null,collectionDrawer:null,navImages:null,buttonGroup:null,profiler:null},n.DEFAULT_SETTINGS,E),typeof this.hash>"u")throw new Error("A hash must be defined, either by specifying options.id or options.hash.");typeof o[this.hash]<"u"&&n.console.warn("Hash "+this.hash+" has already been used."),o[this.hash]={fsBoundsDelta:new n.Point(1,1),prevContainerSize:null,animating:!1,forceRedraw:!1,needsResize:!1,forceResize:!1,mouseInside:!1,group:null,zooming:!1,zoomFactor:null,lastZoomTime:null,fullPage:!1,onfullscreenchange:null,lastClickTime:null,draggingToZoom:!1},this._sequenceIndex=0,this._firstOpen=!0,this._updateRequestId=null,this._loadQueue=[],this.currentOverlays=[],this._updatePixelDensityRatioBind=null,this._lastScrollTime=n.now(),n.EventSource.call(this),this.addHandler("open-failed",function(me){var nt=n.getString("Errors.OpenFailed",me.eventSource,me.message);fe._showMessage(nt)}),n.ControlDock.call(this,E),this.xmlPath&&(this.tileSources=[this.xmlPath]),this.element=this.element||document.getElementById(this.id),this.canvas=n.makeNeutralElement("div"),this.canvas.className="openseadragon-canvas",function(me){me.width="100%",me.height="100%",me.overflow="hidden",me.position="absolute",me.top="0px",me.left="0px"}(this.canvas.style),n.setElementTouchActionNone(this.canvas),E.tabIndex!==""&&(this.canvas.tabIndex=E.tabIndex===void 0?0:E.tabIndex),this.container.className="openseadragon-container",function(me){me.width="100%",me.height="100%",me.position="relative",me.overflow="hidden",me.left="0px",me.top="0px",me.textAlign="left"}(this.container.style),n.setElementTouchActionNone(this.container),this.container.insertBefore(this.canvas,this.container.firstChild),this.element.appendChild(this.container),this.bodyWidth=document.body.style.width,this.bodyHeight=document.body.style.height,this.bodyOverflow=document.body.style.overflow,this.docOverflow=document.documentElement.style.overflow,this.innerTracker=new n.MouseTracker({userData:"Viewer.innerTracker",element:this.canvas,startDisabled:!this.mouseNavEnabled,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,dblClickTimeThreshold:this.dblClickTimeThreshold,dblClickDistThreshold:this.dblClickDistThreshold,contextMenuHandler:n.delegate(this,O),keyDownHandler:n.delegate(this,$),keyHandler:n.delegate(this,ye),clickHandler:n.delegate(this,we),dblClickHandler:n.delegate(this,ht),dragHandler:n.delegate(this,tt),dragEndHandler:n.delegate(this,Ve),enterHandler:n.delegate(this,Tt),leaveHandler:n.delegate(this,Q),pressHandler:n.delegate(this,Ct),releaseHandler:n.delegate(this,it),nonPrimaryPressHandler:n.delegate(this,wt),nonPrimaryReleaseHandler:n.delegate(this,Fe),scrollHandler:n.delegate(this,zt),pinchHandler:n.delegate(this,Lt),focusHandler:n.delegate(this,ft),blurHandler:n.delegate(this,_t)}),this.outerTracker=new n.MouseTracker({userData:"Viewer.outerTracker",element:this.container,startDisabled:!this.mouseNavEnabled,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,dblClickTimeThreshold:this.dblClickTimeThreshold,dblClickDistThreshold:this.dblClickDistThreshold,enterHandler:n.delegate(this,dt),leaveHandler:n.delegate(this,Dt)}),this.toolbar&&(this.toolbar=new n.ControlDock({element:this.toolbar})),this.bindStandardControls(),o[this.hash].prevContainerSize=h(this.container),window.ResizeObserver?(this._autoResizePolling=!1,this._resizeObserver=new ResizeObserver(function(){o[fe.hash].needsResize=!0}),this._resizeObserver.observe(this.container,{})):this._autoResizePolling=!0,this.world=new n.World({viewer:this}),this.world.addHandler("add-item",function(me){fe.source=fe.world.getItemAt(0).source,o[fe.hash].forceRedraw=!0,fe._updateRequestId||(fe._updateRequestId=w(fe,Wt))}),this.world.addHandler("remove-item",function(me){fe.world.getItemCount()?fe.source=fe.world.getItemAt(0).source:fe.source=null,o[fe.hash].forceRedraw=!0}),this.world.addHandler("metrics-change",function(me){fe.viewport&&fe.viewport._setContentBounds(fe.world.getHomeBounds(),fe.world.getContentFactor())}),this.world.addHandler("item-index-change",function(me){fe.source=fe.world.getItemAt(0).source}),this.viewport=new n.Viewport({containerSize:o[this.hash].prevContainerSize,springStiffness:this.springStiffness,animationTime:this.animationTime,minZoomImageRatio:this.minZoomImageRatio,maxZoomPixelRatio:this.maxZoomPixelRatio,visibilityRatio:this.visibilityRatio,wrapHorizontal:this.wrapHorizontal,wrapVertical:this.wrapVertical,defaultZoomLevel:this.defaultZoomLevel,minZoomLevel:this.minZoomLevel,maxZoomLevel:this.maxZoomLevel,viewer:this,degrees:this.degrees,flipped:this.flipped,overlayPreserveContentDirection:this.overlayPreserveContentDirection,navigatorRotate:this.navigatorRotate,homeFillsViewer:this.homeFillsViewer,margins:this.viewportMargins,silenceMultiImageWarnings:this.silenceMultiImageWarnings}),this.viewport._setContentBounds(this.world.getHomeBounds(),this.world.getContentFactor()),this.imageLoader=new n.ImageLoader({jobLimit:this.imageLoaderLimit,timeout:E.timeout,tileRetryMax:this.tileRetryMax,tileRetryDelay:this.tileRetryDelay}),this.tileCache=new n.TileCache({maxImageCacheCount:this.maxImageCacheCount}),Object.prototype.hasOwnProperty.call(this.drawerOptions,"useCanvas")&&(n.console.error('useCanvas is deprecated, use the "drawer" option to indicate preferred drawer(s)'),this.drawerOptions.useCanvas||(this.drawer=n.HTMLDrawer),delete this.drawerOptions.useCanvas);let Ce=Array.isArray(this.drawer)?this.drawer:[this.drawer];Ce.length===0&&(Ce=[n.DEFAULT_SETTINGS.drawer].flat(),n.console.warn("No valid drawers were selected. Using the default value.")),this.drawer=null;for(const me of Ce)if(this.requestDrawer(me,{mainDrawer:!0,redrawImmediately:!1}))break;if(!this.drawer)throw n.console.error("No drawer could be created!"),"Error with creating the selected drawer(s)";for(this.drawer.setImageSmoothingEnabled(this.imageSmoothingEnabled),this.overlaysContainer=n.makeNeutralElement("div"),this.canvas.appendChild(this.overlaysContainer),this.drawer.canRotate()||(this.rotateLeft&&(Se=this.buttonGroup.buttons.indexOf(this.rotateLeft),this.buttonGroup.buttons.splice(Se,1),this.buttonGroup.element.removeChild(this.rotateLeft.element)),this.rotateRight&&(Se=this.buttonGroup.buttons.indexOf(this.rotateRight),this.buttonGroup.buttons.splice(Se,1),this.buttonGroup.element.removeChild(this.rotateRight.element))),this._addUpdatePixelDensityRatioEvent(),this.showNavigator&&(this.navigator=new n.Navigator({element:this.navigatorElement,id:this.navigatorId,position:this.navigatorPosition,sizeRatio:this.navigatorSizeRatio,maintainSizeRatio:this.navigatorMaintainSizeRatio,top:this.navigatorTop,left:this.navigatorLeft,width:this.navigatorWidth,height:this.navigatorHeight,autoResize:this.navigatorAutoResize,autoFade:this.navigatorAutoFade,prefixUrl:this.prefixUrl,viewer:this,navigatorRotate:this.navigatorRotate,background:this.navigatorBackground,opacity:this.navigatorOpacity,borderColor:this.navigatorBorderColor,displayRegionColor:this.navigatorDisplayRegionColor,crossOriginPolicy:this.crossOriginPolicy,animationTime:this.animationTime,drawer:this.drawer.getType(),loadTilesWithAjax:this.loadTilesWithAjax,ajaxHeaders:this.ajaxHeaders,ajaxWithCredentials:this.ajaxWithCredentials})),this.sequenceMode&&this.bindSequenceControls(),this.tileSources&&this.open(this.tileSources),Se=0;Se<this.customControls.length;Se++)this.addControl(this.customControls[Se].id,{anchor:this.customControls[Se].anchor});n.requestAnimationFrame(function(){A(fe)}),n._viewers.set(this.element,this)},n.extend(n.Viewer.prototype,n.EventSource.prototype,n.ControlDock.prototype,{isOpen:function(){return!!this.world.getItemCount()},openDzi:function(E){return n.console.error("[Viewer.openDzi] this function is deprecated; use Viewer.open() instead."),this.open(E)},openTileSource:function(E){return n.console.error("[Viewer.openTileSource] this function is deprecated; use Viewer.open() instead."),this.open(E)},get buttons(){return n.console.warn("Viewer.buttons is deprecated; Please use Viewer.buttonGroup"),this.buttonGroup},open:function(E,q){var fe=this;if(this.close(),!E)return this;if(this.sequenceMode&&n.isArray(E))return this.referenceStrip&&(this.referenceStrip.destroy(),this.referenceStrip=null),typeof q<"u"&&!isNaN(q)&&(this.initialPage=q),this.tileSources=E,this._sequenceIndex=Math.max(0,Math.min(this.tileSources.length-1,this.initialPage)),this.tileSources.length&&(this.open(this.tileSources[this._sequenceIndex]),this.showReferenceStrip&&this.addReferenceStrip()),this._updateSequenceButtons(this._sequenceIndex),this;if(n.isArray(E)||(E=[E]),!E.length)return this;this._opening=!0;for(var Se=E.length,_e=0,Ce=0,me,nt=function(){if(_e+Ce===Se)if(_e){(fe._firstOpen||!fe.preserveViewport)&&(fe.viewport.goHome(!0),fe.viewport.update()),fe._firstOpen=!1;var Ze=E[0];if(Ze.tileSource&&(Ze=Ze.tileSource),fe.overlays&&!fe.preserveOverlays)for(var mt=0;mt<fe.overlays.length;mt++)fe.currentOverlays[mt]=y(fe,fe.overlays[mt]);fe._drawOverlays(),fe._opening=!1,fe.raiseEvent("open",{source:Ze})}else fe._opening=!1,fe.raiseEvent("open-failed",me)},Ae=function(Ze){(!n.isPlainObject(Ze)||!Ze.tileSource)&&(Ze={tileSource:Ze}),Ze.index!==void 0&&(n.console.error("[Viewer.open] setting indexes here is not supported; use addTiledImage instead"),delete Ze.index),Ze.collectionImmediately===void 0&&(Ze.collectionImmediately=!0);var mt=Ze.success;Ze.success=function(I){if(_e++,Ze.tileSource.overlays)for(var N=0;N<Ze.tileSource.overlays.length;N++)fe.addOverlay(Ze.tileSource.overlays[N]);mt&&mt(I),nt()};var B=Ze.error;Ze.error=function(I){Ce++,me||(me=I),B&&B(I),nt()},fe.addTiledImage(Ze)},Ne=0;Ne<E.length;Ne++)Ae(E[Ne]);return this},close:function(){return o[this.hash]?(this._opening=!1,this.navigator&&this.navigator.close(),this.preserveOverlays||(this.clearOverlays(),this.overlaysContainer.innerHTML=""),o[this.hash].animating=!1,this.world.removeAll(),this.imageLoader.clear(),this.raiseEvent("close"),this):this},destroy:function(){if(o[this.hash]){if(this.raiseEvent("before-destroy"),this._removeUpdatePixelDensityRatioEvent(),this.close(),this.clearOverlays(),this.overlaysContainer.innerHTML="",this._resizeObserver&&this._resizeObserver.disconnect(),this.referenceStrip&&(this.referenceStrip.destroy(),this.referenceStrip=null),this._updateRequestId!==null&&(n.cancelAnimationFrame(this._updateRequestId),this._updateRequestId=null),this.drawer&&this.drawer.destroy(),this.navigator&&(this.navigator.destroy(),o[this.navigator.hash]=null,delete o[this.navigator.hash],this.navigator=null),this.buttonGroup)this.buttonGroup.destroy();else if(this.customButtons)for(;this.customButtons.length;)this.customButtons.pop().destroy();if(this.paging&&this.paging.destroy(),this.element)for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.container.onsubmit=null,this.clearControls(),this.innerTracker&&this.innerTracker.destroy(),this.outerTracker&&this.outerTracker.destroy(),o[this.hash]=null,delete o[this.hash],this.canvas=null,this.container=null,n._viewers.delete(this.element),this.element=null,this.raiseEvent("destroy"),this.removeAllHandlers()}},requestDrawer(E,q){const fe={mainDrawer:!0,redrawImmediately:!0,drawerOptions:null};q=n.extend(!0,fe,q);const Se=q.mainDrawer,_e=q.redrawImmediately,Ce=q.drawerOptions,me=this.drawer;let nt=null;if(E&&E.prototype instanceof n.DrawerBase?(nt=E,E="custom"):typeof E=="string"&&(nt=n.determineDrawer(E)),nt||n.console.warn("Unsupported drawer! Drawer must be an existing string type, or a class that extends OpenSeadragon.DrawerBase."),nt&&nt.isSupported()){me&&Se&&me.destroy();const Ae=new nt({viewer:this,viewport:this.viewport,element:this.canvas,debugGridColor:this.debugGridColor,options:Ce||this.drawerOptions[E]});return Se&&(this.drawer=Ae,_e&&this.forceRedraw()),Ae}return!1},isMouseNavEnabled:function(){return this.innerTracker.isTracking()},setMouseNavEnabled:function(E){return this.innerTracker.setTracking(E),this.outerTracker.setTracking(E),this.raiseEvent("mouse-enabled",{enabled:E}),this},areControlsEnabled:function(){var E=this.controls.length,q;for(q=0;q<this.controls.length;q++)E=E&&this.controls[q].isVisible();return E},setControlsEnabled:function(E){return E?k(this):A(this),this.raiseEvent("controls-enabled",{enabled:E}),this},setDebugMode:function(E){for(var q=0;q<this.world.getItemCount();q++)this.world.getItemAt(q).debugMode=E;this.debugMode=E,this.forceRedraw()},setAjaxHeaders:function(E,q){if(E===null&&(E={}),!n.isPlainObject(E)){console.error("[Viewer.setAjaxHeaders] Ignoring invalid headers, must be a plain object");return}if(q===void 0&&(q=!0),this.ajaxHeaders=E,q){for(var fe=0;fe<this.world.getItemCount();fe++)this.world.getItemAt(fe)._updateAjaxHeaders(!0);if(this.navigator&&this.navigator.setAjaxHeaders(this.ajaxHeaders,!0),this.referenceStrip&&this.referenceStrip.miniViewers)for(var Se in this.referenceStrip.miniViewers)this.referenceStrip.miniViewers[Se].setAjaxHeaders(this.ajaxHeaders,!0)}},addButton:function(E){this.buttonGroup.addButton(E)},isFullPage:function(){return o[this.hash]&&o[this.hash].fullPage},setFullPage:function(E){var q=document.body,fe=q.style,Se=document.documentElement.style,_e=this,Ce,me;if(E===this.isFullPage())return this;var nt={fullPage:E,preventDefaultAction:!1};if(this.raiseEvent("pre-full-page",nt),nt.preventDefaultAction)return this;if(E&&this.element){for(this.elementSize=n.getElementSize(this.element),this.pageScroll=n.getPageScroll(),this.elementMargin=this.element.style.margin,this.element.style.margin="0",this.elementPadding=this.element.style.padding,this.element.style.padding="0",this.bodyMargin=fe.margin,this.docMargin=Se.margin,fe.margin="0",Se.margin="0",this.bodyPadding=fe.padding,this.docPadding=Se.padding,fe.padding="0",Se.padding="0",this.bodyWidth=fe.width,this.docWidth=Se.width,fe.width="100%",Se.width="100%",this.bodyHeight=fe.height,this.docHeight=Se.height,fe.height="100%",Se.height="100%",this.bodyDisplay=fe.display,fe.display="block",this.previousBody=[],o[this.hash].prevElementParent=this.element.parentNode,o[this.hash].prevNextSibling=this.element.nextSibling,o[this.hash].prevElementWidth=this.element.style.width,o[this.hash].prevElementHeight=this.element.style.height,Ce=q.childNodes.length,me=0;me<Ce;me++)this.previousBody.push(q.childNodes[0]),q.removeChild(q.childNodes[0]);this.toolbar&&this.toolbar.element&&(this.toolbar.parentNode=this.toolbar.element.parentNode,this.toolbar.nextSibling=this.toolbar.element.nextSibling,q.appendChild(this.toolbar.element),n.addClass(this.toolbar.element,"fullpage")),n.addClass(this.element,"fullpage"),q.appendChild(this.element),this.element.style.height="100vh",this.element.style.width="100vw",this.toolbar&&this.toolbar.element&&(this.element.style.height=n.getElementSize(this.element).y-n.getElementSize(this.toolbar.element).y+"px"),o[this.hash].fullPage=!0,n.delegate(this,dt)({})}else{for(this.element.style.margin=this.elementMargin,this.element.style.padding=this.elementPadding,fe.margin=this.bodyMargin,Se.margin=this.docMargin,fe.padding=this.bodyPadding,Se.padding=this.docPadding,fe.width=this.bodyWidth,Se.width=this.docWidth,fe.height=this.bodyHeight,Se.height=this.docHeight,fe.display=this.bodyDisplay,q.removeChild(this.element),Ce=this.previousBody.length,me=0;me<Ce;me++)q.appendChild(this.previousBody.shift());n.removeClass(this.element,"fullpage"),o[this.hash].prevElementParent.insertBefore(this.element,o[this.hash].prevNextSibling),this.toolbar&&this.toolbar.element&&(q.removeChild(this.toolbar.element),n.removeClass(this.toolbar.element,"fullpage"),this.toolbar.parentNode.insertBefore(this.toolbar.element,this.toolbar.nextSibling),delete this.toolbar.parentNode,delete this.toolbar.nextSibling),this.element.style.width=o[this.hash].prevElementWidth,this.element.style.height=o[this.hash].prevElementHeight;var Ae=0,Ne=function(){n.setPageScroll(_e.pageScroll);var Ze=n.getPageScroll();Ae++,Ae<10&&(Ze.x!==_e.pageScroll.x||Ze.y!==_e.pageScroll.y)&&n.requestAnimationFrame(Ne)};n.requestAnimationFrame(Ne),o[this.hash].fullPage=!1,n.delegate(this,Dt)({})}return this.navigator&&this.viewport&&this.navigator.update(this.viewport),this.raiseEvent("full-page",{fullPage:E}),this},setFullScreen:function(E){var q=this;if(!n.supportsFullScreen)return this.setFullPage(E);if(n.isFullScreen()===E)return this;var fe={fullScreen:E,preventDefaultAction:!1};if(this.raiseEvent("pre-full-screen",fe),fe.preventDefaultAction)return this;if(E){if(this.setFullPage(!0),!this.isFullPage())return this;this.fullPageStyleWidth=this.element.style.width,this.fullPageStyleHeight=this.element.style.height,this.element.style.width="100%",this.element.style.height="100%";var Se=function(){var _e=n.isFullScreen();_e||(n.removeEvent(document,n.fullScreenEventName,Se),n.removeEvent(document,n.fullScreenErrorEventName,Se),q.setFullPage(!1),q.isFullPage()&&(q.element.style.width=q.fullPageStyleWidth,q.element.style.height=q.fullPageStyleHeight)),q.navigator&&q.viewport&&setTimeout(function(){q.navigator.update(q.viewport)}),q.raiseEvent("full-screen",{fullScreen:_e})};n.addEvent(document,n.fullScreenEventName,Se),n.addEvent(document,n.fullScreenErrorEventName,Se),n.requestFullScreen(document.body)}else n.exitFullScreen();return this},isVisible:function(){return this.container.style.visibility!=="hidden"},isFullScreen:function(){return n.isFullScreen()&&this.isFullPage()},setVisible:function(E){return this.container.style.visibility=E?"":"hidden",this.raiseEvent("visible",{visible:E}),this},addTiledImage:function(E){n.console.assert(E,"[Viewer.addTiledImage] options is required"),n.console.assert(E.tileSource,"[Viewer.addTiledImage] options.tileSource is required"),n.console.assert(!E.replace||E.index>-1&&E.index<this.world.getItemCount(),"[Viewer.addTiledImage] if options.replace is used, options.index must be a valid index in Viewer.world");var q=this;E.replace&&(E.replaceItem=q.world.getItemAt(E.index)),this._hideMessage(),E.placeholderFillStyle===void 0&&(E.placeholderFillStyle=this.placeholderFillStyle),E.opacity===void 0&&(E.opacity=this.opacity),E.preload===void 0&&(E.preload=this.preload),E.compositeOperation===void 0&&(E.compositeOperation=this.compositeOperation),E.crossOriginPolicy===void 0&&(E.crossOriginPolicy=E.tileSource.crossOriginPolicy!==void 0?E.tileSource.crossOriginPolicy:this.crossOriginPolicy),E.ajaxWithCredentials===void 0&&(E.ajaxWithCredentials=this.ajaxWithCredentials),E.loadTilesWithAjax===void 0&&(E.loadTilesWithAjax=this.loadTilesWithAjax),n.isPlainObject(E.ajaxHeaders)||(E.ajaxHeaders={});var fe={options:E};function Se(me){for(var nt=0;nt<q._loadQueue.length;nt++)if(q._loadQueue[nt]===fe){q._loadQueue.splice(nt,1);break}q._loadQueue.length===0&&_e(fe),q.raiseEvent("add-item-failed",me),E.error&&E.error(me)}function _e(me){q.collectionMode&&(q.world.arrange({immediately:me.options.collectionImmediately,rows:q.collectionRows,columns:q.collectionColumns,layout:q.collectionLayout,tileSize:q.collectionTileSize,tileMargin:q.collectionTileMargin}),q.world.setAutoRefigureSizes(!0))}if(n.isArray(E.tileSource)){setTimeout(function(){Se({message:"[Viewer.addTiledImage] Sequences can not be added; add them one at a time instead.",source:E.tileSource,options:E})});return}this._loadQueue.push(fe);function Ce(){for(var me,nt,Ae;q._loadQueue.length&&(me=q._loadQueue[0],!!me.tileSource);){if(q._loadQueue.splice(0,1),me.options.replace){var Ne=q.world.getIndexOfItem(me.options.replaceItem);Ne!==-1&&(me.options.index=Ne),q.world.removeItem(me.options.replaceItem)}nt=new n.TiledImage({viewer:q,source:me.tileSource,viewport:q.viewport,drawer:q.drawer,tileCache:q.tileCache,imageLoader:q.imageLoader,x:me.options.x,y:me.options.y,width:me.options.width,height:me.options.height,fitBounds:me.options.fitBounds,fitBoundsPlacement:me.options.fitBoundsPlacement,clip:me.options.clip,placeholderFillStyle:me.options.placeholderFillStyle,opacity:me.options.opacity,preload:me.options.preload,degrees:me.options.degrees,flipped:me.options.flipped,compositeOperation:me.options.compositeOperation,springStiffness:q.springStiffness,animationTime:q.animationTime,minZoomImageRatio:q.minZoomImageRatio,wrapHorizontal:q.wrapHorizontal,wrapVertical:q.wrapVertical,maxTilesPerFrame:q.maxTilesPerFrame,immediateRender:q.immediateRender,blendTime:q.blendTime,alwaysBlend:q.alwaysBlend,minPixelRatio:q.minPixelRatio,smoothTileEdgesMinZoom:q.smoothTileEdgesMinZoom,iOSDevice:q.iOSDevice,crossOriginPolicy:me.options.crossOriginPolicy,ajaxWithCredentials:me.options.ajaxWithCredentials,loadTilesWithAjax:me.options.loadTilesWithAjax,ajaxHeaders:me.options.ajaxHeaders,debugMode:q.debugMode,subPixelRoundingForTransparency:q.subPixelRoundingForTransparency}),q.collectionMode&&q.world.setAutoRefigureSizes(!1),q.navigator&&(Ae=n.extend({},me.options,{replace:!1,originalTiledImage:nt,tileSource:me.tileSource}),q.navigator.addTiledImage(Ae)),q.world.addItem(nt,{index:me.options.index}),q._loadQueue.length===0&&_e(me),q.world.getItemCount()===1&&!q.preserveViewport&&q.viewport.goHome(!0),me.options.success&&me.options.success({item:nt})}}m(this,E.tileSource,E,function(me){fe.tileSource=me,Ce()},function(me){me.options=E,Se(me),Ce()})},addSimpleImage:function(E){n.console.assert(E,"[Viewer.addSimpleImage] options is required"),n.console.assert(E.url,"[Viewer.addSimpleImage] options.url is required");var q=n.extend({},E,{tileSource:{type:"image",url:E.url}});delete q.url,this.addTiledImage(q)},addLayer:function(E){var q=this;n.console.error("[Viewer.addLayer] this function is deprecated; use Viewer.addTiledImage() instead.");var fe=n.extend({},E,{success:function(Se){q.raiseEvent("add-layer",{options:E,drawer:Se.item})},error:function(Se){q.raiseEvent("add-layer-failed",Se)}});return this.addTiledImage(fe),this},getLayerAtLevel:function(E){return n.console.error("[Viewer.getLayerAtLevel] this function is deprecated; use World.getItemAt() instead."),this.world.getItemAt(E)},getLevelOfLayer:function(E){return n.console.error("[Viewer.getLevelOfLayer] this function is deprecated; use World.getIndexOfItem() instead."),this.world.getIndexOfItem(E)},getLayersCount:function(){return n.console.error("[Viewer.getLayersCount] this function is deprecated; use World.getItemCount() instead."),this.world.getItemCount()},setLayerLevel:function(E,q){return n.console.error("[Viewer.setLayerLevel] this function is deprecated; use World.setItemIndex() instead."),this.world.setItemIndex(E,q)},removeLayer:function(E){return n.console.error("[Viewer.removeLayer] this function is deprecated; use World.removeItem() instead."),this.world.removeItem(E)},forceRedraw:function(){return o[this.hash].forceRedraw=!0,this},forceResize:function(){o[this.hash].needsResize=!0,o[this.hash].forceResize=!0},bindSequenceControls:function(){var E=n.delegate(this,G),q=n.delegate(this,W),fe=n.delegate(this,this.goToNextPage),Se=n.delegate(this,this.goToPreviousPage),_e=this.navImages,Ce=!0;return this.showSequenceControl&&((this.previousButton||this.nextButton)&&(Ce=!1),this.previousButton=new n.Button({element:this.previousButton?n.getElement(this.previousButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.PreviousPage"),srcRest:bt(this.prefixUrl,_e.previous.REST),srcGroup:bt(this.prefixUrl,_e.previous.GROUP),srcHover:bt(this.prefixUrl,_e.previous.HOVER),srcDown:bt(this.prefixUrl,_e.previous.DOWN),onRelease:Se,onFocus:E,onBlur:q}),this.nextButton=new n.Button({element:this.nextButton?n.getElement(this.nextButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.NextPage"),srcRest:bt(this.prefixUrl,_e.next.REST),srcGroup:bt(this.prefixUrl,_e.next.GROUP),srcHover:bt(this.prefixUrl,_e.next.HOVER),srcDown:bt(this.prefixUrl,_e.next.DOWN),onRelease:fe,onFocus:E,onBlur:q}),this.navPrevNextWrap||this.previousButton.disable(),(!this.tileSources||!this.tileSources.length)&&this.nextButton.disable(),Ce&&(this.paging=new n.ButtonGroup({buttons:[this.previousButton,this.nextButton],clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold}),this.pagingControl=this.paging.element,this.toolbar?this.toolbar.addControl(this.pagingControl,{anchor:n.ControlAnchor.BOTTOM_RIGHT}):this.addControl(this.pagingControl,{anchor:this.sequenceControlAnchor||n.ControlAnchor.TOP_LEFT}))),this},bindStandardControls:function(){var E=n.delegate(this,Vt),q=n.delegate(this,ii),fe=n.delegate(this,Xt),Se=n.delegate(this,Ke),_e=n.delegate(this,St),Ce=n.delegate(this,Xe),me=n.delegate(this,Ot),nt=n.delegate(this,It),Ae=n.delegate(this,Et),Ne=n.delegate(this,At),Ze=n.delegate(this,G),mt=n.delegate(this,W),B=this.navImages,I=[],N=!0;return this.showNavigationControl&&((this.zoomInButton||this.zoomOutButton||this.homeButton||this.fullPageButton||this.rotateLeftButton||this.rotateRightButton||this.flipButton)&&(N=!1),this.showZoomControl&&(I.push(this.zoomInButton=new n.Button({element:this.zoomInButton?n.getElement(this.zoomInButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.ZoomIn"),srcRest:bt(this.prefixUrl,B.zoomIn.REST),srcGroup:bt(this.prefixUrl,B.zoomIn.GROUP),srcHover:bt(this.prefixUrl,B.zoomIn.HOVER),srcDown:bt(this.prefixUrl,B.zoomIn.DOWN),onPress:E,onRelease:q,onClick:fe,onEnter:E,onExit:q,onFocus:Ze,onBlur:mt})),I.push(this.zoomOutButton=new n.Button({element:this.zoomOutButton?n.getElement(this.zoomOutButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.ZoomOut"),srcRest:bt(this.prefixUrl,B.zoomOut.REST),srcGroup:bt(this.prefixUrl,B.zoomOut.GROUP),srcHover:bt(this.prefixUrl,B.zoomOut.HOVER),srcDown:bt(this.prefixUrl,B.zoomOut.DOWN),onPress:Se,onRelease:q,onClick:_e,onEnter:Se,onExit:q,onFocus:Ze,onBlur:mt}))),this.showHomeControl&&I.push(this.homeButton=new n.Button({element:this.homeButton?n.getElement(this.homeButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.Home"),srcRest:bt(this.prefixUrl,B.home.REST),srcGroup:bt(this.prefixUrl,B.home.GROUP),srcHover:bt(this.prefixUrl,B.home.HOVER),srcDown:bt(this.prefixUrl,B.home.DOWN),onRelease:Ce,onFocus:Ze,onBlur:mt})),this.showFullPageControl&&I.push(this.fullPageButton=new n.Button({element:this.fullPageButton?n.getElement(this.fullPageButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.FullPage"),srcRest:bt(this.prefixUrl,B.fullpage.REST),srcGroup:bt(this.prefixUrl,B.fullpage.GROUP),srcHover:bt(this.prefixUrl,B.fullpage.HOVER),srcDown:bt(this.prefixUrl,B.fullpage.DOWN),onRelease:me,onFocus:Ze,onBlur:mt})),this.showRotationControl&&(I.push(this.rotateLeftButton=new n.Button({element:this.rotateLeftButton?n.getElement(this.rotateLeftButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.RotateLeft"),srcRest:bt(this.prefixUrl,B.rotateleft.REST),srcGroup:bt(this.prefixUrl,B.rotateleft.GROUP),srcHover:bt(this.prefixUrl,B.rotateleft.HOVER),srcDown:bt(this.prefixUrl,B.rotateleft.DOWN),onRelease:nt,onFocus:Ze,onBlur:mt})),I.push(this.rotateRightButton=new n.Button({element:this.rotateRightButton?n.getElement(this.rotateRightButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.RotateRight"),srcRest:bt(this.prefixUrl,B.rotateright.REST),srcGroup:bt(this.prefixUrl,B.rotateright.GROUP),srcHover:bt(this.prefixUrl,B.rotateright.HOVER),srcDown:bt(this.prefixUrl,B.rotateright.DOWN),onRelease:Ae,onFocus:Ze,onBlur:mt}))),this.showFlipControl&&I.push(this.flipButton=new n.Button({element:this.flipButton?n.getElement(this.flipButton):null,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,tooltip:n.getString("Tooltips.Flip"),srcRest:bt(this.prefixUrl,B.flip.REST),srcGroup:bt(this.prefixUrl,B.flip.GROUP),srcHover:bt(this.prefixUrl,B.flip.HOVER),srcDown:bt(this.prefixUrl,B.flip.DOWN),onRelease:Ne,onFocus:Ze,onBlur:mt})),N?(this.buttonGroup=new n.ButtonGroup({buttons:I,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold}),this.navControl=this.buttonGroup.element,this.addHandler("open",n.delegate(this,Kt)),this.toolbar?this.toolbar.addControl(this.navControl,{anchor:this.navigationControlAnchor||n.ControlAnchor.TOP_LEFT}):this.addControl(this.navControl,{anchor:this.navigationControlAnchor||n.ControlAnchor.TOP_LEFT})):this.customButtons=I),this},currentPage:function(){return this._sequenceIndex},goToPage:function(E){return this.tileSources&&E>=0&&E<this.tileSources.length&&(this._sequenceIndex=E,this._updateSequenceButtons(E),this.open(this.tileSources[E]),this.referenceStrip&&this.referenceStrip.setFocus(E),this.raiseEvent("page",{page:E})),this},addOverlay:function(E,q,fe,Se){var _e;if(n.isPlainObject(E)?_e=E:_e={element:E,location:q,placement:fe,onDraw:Se},E=n.getElement(_e.element),a(this.currentOverlays,E)>=0)return this;var Ce=y(this,_e);return this.currentOverlays.push(Ce),Ce.drawHTML(this.overlaysContainer,this.viewport),this.raiseEvent("add-overlay",{element:E,location:_e.location,placement:_e.placement}),this},updateOverlay:function(E,q,fe){var Se;return E=n.getElement(E),Se=a(this.currentOverlays,E),Se>=0&&(this.currentOverlays[Se].update(q,fe),o[this.hash].forceRedraw=!0,this.raiseEvent("update-overlay",{element:E,location:q,placement:fe})),this},removeOverlay:function(E){var q;return E=n.getElement(E),q=a(this.currentOverlays,E),q>=0&&(this.currentOverlays[q].destroy(),this.currentOverlays.splice(q,1),o[this.hash].forceRedraw=!0,this.raiseEvent("remove-overlay",{element:E})),this},clearOverlays:function(){for(;this.currentOverlays.length>0;)this.currentOverlays.pop().destroy();return o[this.hash].forceRedraw=!0,this.raiseEvent("clear-overlay",{}),this},getOverlayById:function(E){var q;return E=n.getElement(E),q=a(this.currentOverlays,E),q>=0?this.currentOverlays[q]:null},_updateSequenceButtons:function(E){this.nextButton&&(!this.tileSources||this.tileSources.length-1===E?this.navPrevNextWrap||this.nextButton.disable():this.nextButton.enable()),this.previousButton&&(E>0?this.previousButton.enable():this.navPrevNextWrap||this.previousButton.disable())},_showMessage:function(E){this._hideMessage();var q=n.makeNeutralElement("div");q.appendChild(document.createTextNode(E)),this.messageDiv=n.makeCenteredNode(q),n.addClass(this.messageDiv,"openseadragon-message"),this.container.appendChild(this.messageDiv)},_hideMessage:function(){var E=this.messageDiv;E&&(E.parentNode.removeChild(E),delete this.messageDiv)},gestureSettingsByDeviceType:function(E){switch(E){case"mouse":return this.gestureSettingsMouse;case"touch":return this.gestureSettingsTouch;case"pen":return this.gestureSettingsPen;default:return this.gestureSettingsUnknown}},_drawOverlays:function(){var E,q=this.currentOverlays.length;for(E=0;E<q;E++)this.currentOverlays[E].drawHTML(this.overlaysContainer,this.viewport)},_cancelPendingImages:function(){this._loadQueue=[]},removeReferenceStrip:function(){this.showReferenceStrip=!1,this.referenceStrip&&(this.referenceStrip.destroy(),this.referenceStrip=null)},addReferenceStrip:function(){if(this.showReferenceStrip=!0,this.sequenceMode){if(this.referenceStrip)return;this.tileSources.length&&this.tileSources.length>1&&(this.referenceStrip=new n.ReferenceStrip({id:this.referenceStripElement,position:this.referenceStripPosition,sizeRatio:this.referenceStripSizeRatio,scroll:this.referenceStripScroll,height:this.referenceStripHeight,width:this.referenceStripWidth,tileSources:this.tileSources,prefixUrl:this.prefixUrl,viewer:this}),this.referenceStrip.setFocus(this._sequenceIndex))}else n.console.warn('Attempting to display a reference strip while "sequenceMode" is off.')},_addUpdatePixelDensityRatioEvent:function(){this._updatePixelDensityRatioBind=this._updatePixelDensityRatio.bind(this),n.addEvent(window,"resize",this._updatePixelDensityRatioBind)},_removeUpdatePixelDensityRatioEvent:function(){n.removeEvent(window,"resize",this._updatePixelDensityRatioBind)},_updatePixelDensityRatio:function(){var E=n.pixelDensityRatio,q=n.getCurrentPixelDensityRatio();E!==q&&(n.pixelDensityRatio=q,this.forceResize())},goToPreviousPage:function(){var E=this._sequenceIndex-1;this.navPrevNextWrap&&E<0&&(E+=this.tileSources.length),this.goToPage(E)},goToNextPage:function(){var E=this._sequenceIndex+1;this.navPrevNextWrap&&E>=this.tileSources.length&&(E=0),this.goToPage(E)},isAnimating:function(){return o[this.hash].animating}});function h(E){return E=n.getElement(E),new n.Point(E.clientWidth===0?1:E.clientWidth,E.clientHeight===0?1:E.clientHeight)}function m(E,q,fe,Se,_e){var Ce=E;if(n.type(q)==="string"){if(q.match(/^\s*<.*>\s*$/))q=n.parseXml(q);else if(q.match(/^\s*[{[].*[}\]]\s*$/))try{var me=n.parseJSON(q);q=me}catch{}}function nt(Ae,Ne){Ae.ready?Se(Ae):(Ae.addHandler("ready",function(){Se(Ae)}),Ae.addHandler("open-failed",function(Ze){_e({message:Ze.message,source:Ne})}))}setTimeout(function(){if(n.type(q)==="string")q=new n.TileSource({url:q,crossOriginPolicy:fe.crossOriginPolicy!==void 0?fe.crossOriginPolicy:E.crossOriginPolicy,ajaxWithCredentials:E.ajaxWithCredentials,ajaxHeaders:fe.ajaxHeaders?fe.ajaxHeaders:E.ajaxHeaders,splitHashDataForPost:E.splitHashDataForPost,success:function(mt){Se(mt.tileSource)}}),q.addHandler("open-failed",function(mt){_e(mt)});else if(n.isPlainObject(q)||q.nodeType)if(q.crossOriginPolicy===void 0&&(fe.crossOriginPolicy!==void 0||E.crossOriginPolicy!==void 0)&&(q.crossOriginPolicy=fe.crossOriginPolicy!==void 0?fe.crossOriginPolicy:E.crossOriginPolicy),q.ajaxWithCredentials===void 0&&(q.ajaxWithCredentials=E.ajaxWithCredentials),n.isFunction(q.getTileUrl)){var Ae=new n.TileSource(q);Ae.getTileUrl=q.getTileUrl,Se(Ae)}else{var Ne=n.TileSource.determineType(Ce,q);if(!Ne){_e({message:"Unable to load TileSource",source:q});return}var Ze=Ne.prototype.configure.apply(Ce,[q]);nt(new Ne(Ze),q)}else nt(q,q)})}function y(E,q){if(q instanceof n.Overlay)return q;var fe=null;if(q.element)fe=n.getElement(q.element);else{var Se=q.id?q.id:"openseadragon-overlay-"+Math.floor(Math.random()*1e7);fe=n.getElement(q.id),fe||(fe=document.createElement("a"),fe.href="#/overlay/"+Se),fe.id=Se,n.addClass(fe,q.className?q.className:"openseadragon-overlay")}var _e=q.location,Ce=q.width,me=q.height;if(!_e){var nt=q.x,Ae=q.y;if(q.px!==void 0){var Ne=E.viewport.imageToViewportRectangle(new n.Rect(q.px,q.py,Ce||0,me||0));nt=Ne.x,Ae=Ne.y,Ce=Ce!==void 0?Ne.width:void 0,me=me!==void 0?Ne.height:void 0}_e=new n.Point(nt,Ae)}var Ze=q.placement;return Ze&&n.type(Ze)==="string"&&(Ze=n.Placement[q.placement.toUpperCase()]),new n.Overlay({element:fe,location:_e,placement:Ze,onDraw:q.onDraw,checkResize:q.checkResize,width:Ce,height:me,rotationMode:q.rotationMode})}function a(E,q){var fe;for(fe=E.length-1;fe>=0;fe--)if(E[fe].element===q)return fe;return-1}function w(E,q){return n.requestAnimationFrame(function(){q(E)})}function _(E){n.requestAnimationFrame(function(){R(E)})}function A(E){E.autoHideControls&&(E.controlsShouldFade=!0,E.controlsFadeBeginTime=n.now()+E.controlsFadeDelay,window.setTimeout(function(){_(E)},E.controlsFadeDelay))}function R(E){var q,fe,Se,_e;if(E.controlsShouldFade){for(q=n.now(),fe=q-E.controlsFadeBeginTime,Se=1-fe/E.controlsFadeLength,Se=Math.min(1,Se),Se=Math.max(0,Se),_e=E.controls.length-1;_e>=0;_e--)E.controls[_e].autoFade&&E.controls[_e].setOpacity(Se);Se>0&&_(E)}}function k(E){var q;for(E.controlsShouldFade=!1,q=E.controls.length-1;q>=0;q--)E.controls[q].setOpacity(1)}function G(){k(this)}function W(){A(this)}function O(E){var q={tracker:E.eventSource,position:E.position,originalEvent:E.originalEvent,preventDefault:E.preventDefault};this.raiseEvent("canvas-contextmenu",q),E.preventDefault=q.preventDefault}function $(E){var q={originalEvent:E.originalEvent,preventDefaultAction:!1,preventVerticalPan:E.preventVerticalPan||!this.panVertical,preventHorizontalPan:E.preventHorizontalPan||!this.panHorizontal};if(this.raiseEvent("canvas-key",q),!q.preventDefaultAction&&!E.ctrl&&!E.alt&&!E.meta)switch(E.keyCode){case 38:q.preventVerticalPan||(E.shift?this.viewport.zoomBy(1.1):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,-this.pixelsPerArrowPress))),this.viewport.applyConstraints()),E.preventDefault=!0;break;case 40:q.preventVerticalPan||(E.shift?this.viewport.zoomBy(.9):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,this.pixelsPerArrowPress))),this.viewport.applyConstraints()),E.preventDefault=!0;break;case 37:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(-this.pixelsPerArrowPress,0))),this.viewport.applyConstraints()),E.preventDefault=!0;break;case 39:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(this.pixelsPerArrowPress,0))),this.viewport.applyConstraints()),E.preventDefault=!0;break;case 187:this.viewport.zoomBy(1.1),this.viewport.applyConstraints(),E.preventDefault=!0;break;case 189:this.viewport.zoomBy(.9),this.viewport.applyConstraints(),E.preventDefault=!0;break;case 48:this.viewport.goHome(),this.viewport.applyConstraints(),E.preventDefault=!0;break;case 87:q.preventVerticalPan||(E.shift?this.viewport.zoomBy(1.1):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,-40))),this.viewport.applyConstraints()),E.preventDefault=!0;break;case 83:q.preventVerticalPan||(E.shift?this.viewport.zoomBy(.9):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,40))),this.viewport.applyConstraints()),E.preventDefault=!0;break;case 65:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(-40,0))),this.viewport.applyConstraints()),E.preventDefault=!0;break;case 68:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(40,0))),this.viewport.applyConstraints()),E.preventDefault=!0;break;case 82:E.shift?this.viewport.flipped?this.viewport.setRotation(this.viewport.getRotation()+this.rotationIncrement):this.viewport.setRotation(this.viewport.getRotation()-this.rotationIncrement):this.viewport.flipped?this.viewport.setRotation(this.viewport.getRotation()-this.rotationIncrement):this.viewport.setRotation(this.viewport.getRotation()+this.rotationIncrement),this.viewport.applyConstraints(),E.preventDefault=!0;break;case 70:this.viewport.toggleFlip(),E.preventDefault=!0;break;case 74:this.goToPreviousPage();break;case 75:this.goToNextPage();break;default:E.preventDefault=!1;break}else E.preventDefault=!1}function ye(E){var q={originalEvent:E.originalEvent};this.raiseEvent("canvas-key-press",q)}function we(E){var q,fe=document.activeElement===this.canvas;fe||this.canvas.focus(),this.viewport.flipped&&(E.position.x=this.viewport.getContainerSize().x-E.position.x);var Se={tracker:E.eventSource,position:E.position,quick:E.quick,shift:E.shift,originalEvent:E.originalEvent,originalTarget:E.originalTarget,preventDefaultAction:!1};this.raiseEvent("canvas-click",Se),!Se.preventDefaultAction&&this.viewport&&E.quick&&(q=this.gestureSettingsByDeviceType(E.pointerType),q.clickToZoom===!0&&(this.viewport.zoomBy(E.shift?1/this.zoomPerClick:this.zoomPerClick,q.zoomToRefPoint?this.viewport.pointFromPixel(E.position,!0):null),this.viewport.applyConstraints()),q.dblClickDragToZoom&&(o[this.hash].draggingToZoom===!0?(o[this.hash].lastClickTime=null,o[this.hash].draggingToZoom=!1):o[this.hash].lastClickTime=n.now()))}function ht(E){var q,fe={tracker:E.eventSource,position:E.position,shift:E.shift,originalEvent:E.originalEvent,preventDefaultAction:!1};this.raiseEvent("canvas-double-click",fe),!fe.preventDefaultAction&&this.viewport&&(q=this.gestureSettingsByDeviceType(E.pointerType),q.dblClickToZoom&&(this.viewport.zoomBy(E.shift?1/this.zoomPerClick:this.zoomPerClick,q.zoomToRefPoint?this.viewport.pointFromPixel(E.position,!0):null),this.viewport.applyConstraints()))}function tt(E){var q,fe={tracker:E.eventSource,pointerType:E.pointerType,position:E.position,delta:E.delta,speed:E.speed,direction:E.direction,shift:E.shift,originalEvent:E.originalEvent,preventDefaultAction:!1};if(this.raiseEvent("canvas-drag",fe),q=this.gestureSettingsByDeviceType(E.pointerType),!fe.preventDefaultAction&&this.viewport){if(q.dblClickDragToZoom&&o[this.hash].draggingToZoom){var Se=Math.pow(this.zoomPerDblClickDrag,E.delta.y/50);this.viewport.zoomBy(Se)}else if(q.dragToPan&&!o[this.hash].draggingToZoom){if(this.panHorizontal||(E.delta.x=0),this.panVertical||(E.delta.y=0),this.viewport.flipped&&(E.delta.x=-E.delta.x),this.constrainDuringPan){var _e=this.viewport.deltaPointsFromPixels(E.delta.negate());this.viewport.centerSpringX.target.value+=_e.x,this.viewport.centerSpringY.target.value+=_e.y;var Ce=this.viewport.getConstrainedBounds();this.viewport.centerSpringX.target.value-=_e.x,this.viewport.centerSpringY.target.value-=_e.y,Ce.xConstrained&&(E.delta.x=0),Ce.yConstrained&&(E.delta.y=0)}this.viewport.panBy(this.viewport.deltaPointsFromPixels(E.delta.negate()),q.flickEnabled&&!this.constrainDuringPan)}}}function Ve(E){var q,fe={tracker:E.eventSource,pointerType:E.pointerType,position:E.position,speed:E.speed,direction:E.direction,shift:E.shift,originalEvent:E.originalEvent,preventDefaultAction:!1};if(this.raiseEvent("canvas-drag-end",fe),q=this.gestureSettingsByDeviceType(E.pointerType),!fe.preventDefaultAction&&this.viewport){if(!o[this.hash].draggingToZoom&&q.dragToPan&&q.flickEnabled&&E.speed>=q.flickMinSpeed){var Se=0;this.panHorizontal&&(Se=q.flickMomentum*E.speed*Math.cos(E.direction));var _e=0;this.panVertical&&(_e=q.flickMomentum*E.speed*Math.sin(E.direction));var Ce=this.viewport.pixelFromPoint(this.viewport.getCenter(!0)),me=this.viewport.pointFromPixel(new n.Point(Ce.x-Se,Ce.y-_e));this.viewport.panTo(me,!1)}this.viewport.applyConstraints()}q.dblClickDragToZoom&&o[this.hash].draggingToZoom===!0&&(o[this.hash].draggingToZoom=!1)}function Tt(E){this.raiseEvent("canvas-enter",{tracker:E.eventSource,pointerType:E.pointerType,position:E.position,buttons:E.buttons,pointers:E.pointers,insideElementPressed:E.insideElementPressed,buttonDownAny:E.buttonDownAny,originalEvent:E.originalEvent})}function Q(E){this.raiseEvent("canvas-exit",{tracker:E.eventSource,pointerType:E.pointerType,position:E.position,buttons:E.buttons,pointers:E.pointers,insideElementPressed:E.insideElementPressed,buttonDownAny:E.buttonDownAny,originalEvent:E.originalEvent})}function Ct(E){var q;if(this.raiseEvent("canvas-press",{tracker:E.eventSource,pointerType:E.pointerType,position:E.position,insideElementPressed:E.insideElementPressed,insideElementReleased:E.insideElementReleased,originalEvent:E.originalEvent}),q=this.gestureSettingsByDeviceType(E.pointerType),q.dblClickDragToZoom){var fe=o[this.hash].lastClickTime,Se=n.now();if(fe===null)return;Se-fe<this.dblClickTimeThreshold&&(o[this.hash].draggingToZoom=!0),o[this.hash].lastClickTime=null}}function it(E){this.raiseEvent("canvas-release",{tracker:E.eventSource,pointerType:E.pointerType,position:E.position,insideElementPressed:E.insideElementPressed,insideElementReleased:E.insideElementReleased,originalEvent:E.originalEvent})}function wt(E){this.raiseEvent("canvas-nonprimary-press",{tracker:E.eventSource,position:E.position,pointerType:E.pointerType,button:E.button,buttons:E.buttons,originalEvent:E.originalEvent})}function Fe(E){this.raiseEvent("canvas-nonprimary-release",{tracker:E.eventSource,position:E.position,pointerType:E.pointerType,button:E.button,buttons:E.buttons,originalEvent:E.originalEvent})}function Lt(E){var q,fe,Se,_e,Ce={tracker:E.eventSource,pointerType:E.pointerType,gesturePoints:E.gesturePoints,lastCenter:E.lastCenter,center:E.center,lastDistance:E.lastDistance,distance:E.distance,shift:E.shift,originalEvent:E.originalEvent,preventDefaultPanAction:!1,preventDefaultZoomAction:!1,preventDefaultRotateAction:!1};if(this.raiseEvent("canvas-pinch",Ce),this.viewport&&(q=this.gestureSettingsByDeviceType(E.pointerType),q.pinchToZoom&&(!Ce.preventDefaultPanAction||!Ce.preventDefaultZoomAction)&&(fe=this.viewport.pointFromPixel(E.center,!0),q.zoomToRefPoint&&!Ce.preventDefaultPanAction&&(Se=this.viewport.pointFromPixel(E.lastCenter,!0),_e=Se.minus(fe),this.panHorizontal||(_e.x=0),this.panVertical||(_e.y=0),this.viewport.panBy(_e,!0)),Ce.preventDefaultZoomAction||this.viewport.zoomBy(E.distance/E.lastDistance,fe,!0),this.viewport.applyConstraints()),q.pinchRotate&&!Ce.preventDefaultRotateAction)){var me=Math.atan2(E.gesturePoints[0].currentPos.y-E.gesturePoints[1].currentPos.y,E.gesturePoints[0].currentPos.x-E.gesturePoints[1].currentPos.x),nt=Math.atan2(E.gesturePoints[0].lastPos.y-E.gesturePoints[1].lastPos.y,E.gesturePoints[0].lastPos.x-E.gesturePoints[1].lastPos.x);fe=this.viewport.pointFromPixel(E.center,!0),this.viewport.rotateTo(this.viewport.getRotation(!0)+(me-nt)*(180/Math.PI),fe,!0)}}function ft(E){this.raiseEvent("canvas-focus",{tracker:E.eventSource,originalEvent:E.originalEvent})}function _t(E){this.raiseEvent("canvas-blur",{tracker:E.eventSource,originalEvent:E.originalEvent})}function zt(E){var q,fe,Se,_e,Ce;_e=n.now(),Ce=_e-this._lastScrollTime,Ce>this.minScrollDeltaTime?(this._lastScrollTime=_e,q={tracker:E.eventSource,position:E.position,scroll:E.scroll,shift:E.shift,originalEvent:E.originalEvent,preventDefaultAction:!1,preventDefault:!0},this.raiseEvent("canvas-scroll",q),!q.preventDefaultAction&&this.viewport&&(this.viewport.flipped&&(E.position.x=this.viewport.getContainerSize().x-E.position.x),fe=this.gestureSettingsByDeviceType(E.pointerType),fe.scrollToZoom&&(Se=Math.pow(this.zoomPerScroll,E.scroll),this.viewport.zoomBy(Se,fe.zoomToRefPoint?this.viewport.pointFromPixel(E.position,!0):null),this.viewport.applyConstraints())),E.preventDefault=q.preventDefault):E.preventDefault=!0}function dt(E){o[this.hash].mouseInside=!0,k(this),this.raiseEvent("container-enter",{tracker:E.eventSource,pointerType:E.pointerType,position:E.position,buttons:E.buttons,pointers:E.pointers,insideElementPressed:E.insideElementPressed,buttonDownAny:E.buttonDownAny,originalEvent:E.originalEvent})}function Dt(E){E.pointers<1&&(o[this.hash].mouseInside=!1,o[this.hash].animating||A(this)),this.raiseEvent("container-exit",{tracker:E.eventSource,pointerType:E.pointerType,position:E.position,buttons:E.buttons,pointers:E.pointers,insideElementPressed:E.insideElementPressed,buttonDownAny:E.buttonDownAny,originalEvent:E.originalEvent})}function Wt(E){ei(E),E.isOpen()?E._updateRequestId=w(E,Wt):E._updateRequestId=!1}function Gt(E,q){var fe=E.viewport,Se=fe.getZoom(),_e=fe.getCenter();fe.resize(q,E.preserveImageSizeOnResize),fe.panTo(_e,!0);var Ce;if(E.preserveImageSizeOnResize)Ce=o[E.hash].prevContainerSize.x/q.x;else{var me=new n.Point(0,0),nt=new n.Point(o[E.hash].prevContainerSize.x,o[E.hash].prevContainerSize.y).distanceTo(me),Ae=new n.Point(q.x,q.y).distanceTo(me);Ce=Ae/nt*o[E.hash].prevContainerSize.x/q.x}fe.zoomTo(Se*Ce,null,!0),o[E.hash].prevContainerSize=q,o[E.hash].forceRedraw=!0,o[E.hash].needsResize=!1,o[E.hash].forceResize=!1}function ei(E){if(!(E._opening||!o[E.hash])){if(E.autoResize||o[E.hash].forceResize){var q;if(E._autoResizePolling){q=h(E.container);var fe=o[E.hash].prevContainerSize;q.equals(fe)||(o[E.hash].needsResize=!0)}o[E.hash].needsResize&&Gt(E,q||h(E.container))}var Se=E.viewport.update(),_e=E.world.update(Se)||Se;Se&&E.raiseEvent("viewport-change"),E.referenceStrip&&(_e=E.referenceStrip.update(E.viewport)||_e);var Ce=o[E.hash].animating;!Ce&&_e&&(E.raiseEvent("animation-start"),k(E));var me=Ce&&!_e;me&&(o[E.hash].animating=!1),(_e||me||o[E.hash].forceRedraw||E.world.needsDraw())&&(ni(E),E._drawOverlays(),E.navigator&&E.navigator.update(E.viewport),o[E.hash].forceRedraw=!1,_e&&E.raiseEvent("animation")),me&&(E.raiseEvent("animation-finish"),o[E.hash].mouseInside||A(E)),o[E.hash].animating=_e}}function ni(E){E.imageLoader.clear(),E.world.draw(),E.raiseEvent("update-viewport",{})}function bt(E,q){return E?E+q:q}function Vt(){o[this.hash].lastZoomTime=n.now(),o[this.hash].zoomFactor=this.zoomPerSecond,o[this.hash].zooming=!0,ze(this)}function Ke(){o[this.hash].lastZoomTime=n.now(),o[this.hash].zoomFactor=1/this.zoomPerSecond,o[this.hash].zooming=!0,ze(this)}function ii(){o[this.hash].zooming=!1}function ze(E){n.requestAnimationFrame(n.delegate(E,Jt))}function Jt(){var E,q,fe;o[this.hash].zooming&&this.viewport&&(E=n.now(),q=E-o[this.hash].lastZoomTime,fe=Math.pow(o[this.hash].zoomFactor,q/1e3),this.viewport.zoomBy(fe),this.viewport.applyConstraints(),o[this.hash].lastZoomTime=E,ze(this))}function Xt(){this.viewport&&(o[this.hash].zooming=!1,this.viewport.zoomBy(this.zoomPerClick/1),this.viewport.applyConstraints())}function St(){this.viewport&&(o[this.hash].zooming=!1,this.viewport.zoomBy(1/this.zoomPerClick),this.viewport.applyConstraints())}function Kt(){this.buttonGroup&&(this.buttonGroup.emulateEnter(),this.buttonGroup.emulateLeave())}function Xe(){this.viewport&&this.viewport.goHome()}function Ot(){this.isFullPage()&&!n.isFullScreen()?this.setFullPage(!1):this.setFullScreen(!this.isFullPage()),this.buttonGroup&&this.buttonGroup.emulateLeave(),this.fullPageButton.element.focus(),this.viewport&&this.viewport.applyConstraints()}function It(){if(this.viewport){var E=this.viewport.getRotation();this.viewport.flipped?E+=this.rotationIncrement:E-=this.rotationIncrement,this.viewport.setRotation(E)}}function Et(){if(this.viewport){var E=this.viewport.getRotation();this.viewport.flipped?E-=this.rotationIncrement:E+=this.rotationIncrement,this.viewport.setRotation(E)}}function At(){this.viewport.toggleFlip()}n.determineDrawer=function(E){for(let q in ae){const fe=ae[q],Se=fe.prototype;if(Se&&Se instanceof ae.DrawerBase&&n.isFunction(Se.getType)&&Se.getType.call(fe)===E)return fe}return null}}(ae),function(n){n.Navigator=function(w){var _=w.viewer,A=this,R,k;w.element||w.id?(w.element?(w.id&&n.console.warn("Given option.id for Navigator was ignored since option.element was provided and is being used instead."),w.element.id?w.id=w.element.id:w.id="navigator-"+n.now(),this.element=w.element):this.element=document.getElementById(w.id),w.controlOptions={anchor:n.ControlAnchor.NONE,attachToViewer:!1,autoFade:!1}):(w.id="navigator-"+n.now(),this.element=n.makeNeutralElement("div"),w.controlOptions={anchor:n.ControlAnchor.TOP_RIGHT,attachToViewer:!0,autoFade:w.autoFade},w.position&&(w.position==="BOTTOM_RIGHT"?w.controlOptions.anchor=n.ControlAnchor.BOTTOM_RIGHT:w.position==="BOTTOM_LEFT"?w.controlOptions.anchor=n.ControlAnchor.BOTTOM_LEFT:w.position==="TOP_RIGHT"?w.controlOptions.anchor=n.ControlAnchor.TOP_RIGHT:w.position==="TOP_LEFT"?w.controlOptions.anchor=n.ControlAnchor.TOP_LEFT:w.position==="ABSOLUTE"&&(w.controlOptions.anchor=n.ControlAnchor.ABSOLUTE,w.controlOptions.top=w.top,w.controlOptions.left=w.left,w.controlOptions.height=w.height,w.controlOptions.width=w.width))),this.element.id=w.id,this.element.className+=" navigator",w=n.extend(!0,{sizeRatio:n.DEFAULT_SETTINGS.navigatorSizeRatio},w,{element:this.element,tabIndex:-1,showNavigator:!1,mouseNavEnabled:!1,showNavigationControl:!1,showSequenceControl:!1,immediateRender:!0,blendTime:0,animationTime:w.animationTime,autoResize:!1,minZoomImageRatio:1,background:w.background,opacity:w.opacity,borderColor:w.borderColor,displayRegionColor:w.displayRegionColor}),w.minPixelRatio=this.minPixelRatio=_.minPixelRatio,n.setElementTouchActionNone(this.element),this.borderWidth=2,this.fudge=new n.Point(1,1),this.totalBorderWidths=new n.Point(this.borderWidth*2,this.borderWidth*2).minus(this.fudge),w.controlOptions.anchor!==n.ControlAnchor.NONE&&function(O,$){O.margin="0px",O.border=$+"px solid "+w.borderColor,O.padding="0px",O.background=w.background,O.opacity=w.opacity,O.overflow="hidden"}(this.element.style,this.borderWidth),this.displayRegion=n.makeNeutralElement("div"),this.displayRegion.id=this.element.id+"-displayregion",this.displayRegion.className="displayregion",function(O,$){O.position="relative",O.top="0px",O.left="0px",O.fontSize="0px",O.overflow="hidden",O.border=$+"px solid "+w.displayRegionColor,O.margin="0px",O.padding="0px",O.background="transparent",O.float="left",O.cssFloat="left",O.zIndex=999999999,O.cursor="default",O.boxSizing="content-box"}(this.displayRegion.style,this.borderWidth),n.setElementPointerEventsNone(this.displayRegion),n.setElementTouchActionNone(this.displayRegion),this.displayRegionContainer=n.makeNeutralElement("div"),this.displayRegionContainer.id=this.element.id+"-displayregioncontainer",this.displayRegionContainer.className="displayregioncontainer",this.displayRegionContainer.style.width="100%",this.displayRegionContainer.style.height="100%",n.setElementPointerEventsNone(this.displayRegionContainer),n.setElementTouchActionNone(this.displayRegionContainer),_.addControl(this.element,w.controlOptions),this._resizeWithViewer=w.controlOptions.anchor!==n.ControlAnchor.ABSOLUTE&&w.controlOptions.anchor!==n.ControlAnchor.NONE,w.width&&w.height?(this.setWidth(w.width),this.setHeight(w.height)):this._resizeWithViewer&&(R=n.getElementSize(_.element),this.element.style.height=Math.round(R.y*w.sizeRatio)+"px",this.element.style.width=Math.round(R.x*w.sizeRatio)+"px",this.oldViewerSize=R,k=n.getElementSize(this.element),this.elementArea=k.x*k.y),this.oldContainerSize=new n.Point(0,0),n.Viewer.apply(this,[w]),this.displayRegionContainer.appendChild(this.displayRegion),this.element.getElementsByTagName("div")[0].appendChild(this.displayRegionContainer);function G(O,$){y(A.displayRegionContainer,O),y(A.displayRegion,-O),A.viewport.setRotation(O,$)}if(w.navigatorRotate){var W=w.viewer.viewport?w.viewer.viewport.getRotation():w.viewer.degrees||0;G(W,!0),w.viewer.addHandler("rotate",function(O){G(O.degrees,O.immediately)})}this.innerTracker.destroy(),this.innerTracker=new n.MouseTracker({userData:"Navigator.innerTracker",element:this.element,dragHandler:n.delegate(this,u),clickHandler:n.delegate(this,o),releaseHandler:n.delegate(this,h),scrollHandler:n.delegate(this,m),preProcessEventHandler:function(O){O.eventType==="wheel"&&(O.preventDefault=!0)}}),this.outerTracker.userData="Navigator.outerTracker",n.setElementPointerEventsNone(this.canvas),n.setElementPointerEventsNone(this.container),this.addHandler("reset-size",function(){A.viewport&&A.viewport.goHome(!0)}),_.world.addHandler("item-index-change",function(O){window.setTimeout(function(){var $=A.world.getItemAt(O.previousIndex);A.world.setItemIndex($,O.newIndex)},1)}),_.world.addHandler("remove-item",function(O){var $=O.item,ye=A._getMatchingItem($);ye&&A.world.removeItem(ye)}),this.update(_.viewport)},n.extend(n.Navigator.prototype,n.EventSource.prototype,n.Viewer.prototype,{updateSize:function(){if(this.viewport){var w=new n.Point(this.container.clientWidth===0?1:this.container.clientWidth,this.container.clientHeight===0?1:this.container.clientHeight);w.equals(this.oldContainerSize)||(this.viewport.resize(w,!0),this.viewport.goHome(!0),this.oldContainerSize=w,this.world.update(),this.world.draw(),this.update(this.viewer.viewport))}},setWidth:function(w){this.width=w,this.element.style.width=typeof w=="number"?w+"px":w,this._resizeWithViewer=!1,this.updateSize()},setHeight:function(w){this.height=w,this.element.style.height=typeof w=="number"?w+"px":w,this._resizeWithViewer=!1,this.updateSize()},setFlip:function(w){return this.viewport.setFlip(w),this.setDisplayTransform(this.viewer.viewport.getFlip()?"scale(-1,1)":"scale(1,1)"),this},setDisplayTransform:function(w){a(this.canvas,w),a(this.element,w)},update:function(w){var _,A,R,k,G,W;if(w||(w=this.viewer.viewport),_=n.getElementSize(this.viewer.element),this._resizeWithViewer&&_.x&&_.y&&!_.equals(this.oldViewerSize)&&(this.oldViewerSize=_,this.maintainSizeRatio||!this.elementArea?(A=_.x*this.sizeRatio,R=_.y*this.sizeRatio):(A=Math.sqrt(this.elementArea*(_.x/_.y)),R=this.elementArea/A),this.element.style.width=Math.round(A)+"px",this.element.style.height=Math.round(R)+"px",this.elementArea||(this.elementArea=A*R),this.updateSize()),w&&this.viewport){if(k=w.getBoundsNoRotate(!0),G=this.viewport.pixelFromPointNoRotate(k.getTopLeft(),!1),W=this.viewport.pixelFromPointNoRotate(k.getBottomRight(),!1).minus(this.totalBorderWidths),!this.navigatorRotate){var O=w.getRotation(!0);y(this.displayRegion,-O)}var $=this.displayRegion.style;$.display=this.world.getItemCount()?"block":"none",$.top=G.y.toFixed(2)+"px",$.left=G.x.toFixed(2)+"px";var ye=W.x-G.x,we=W.y-G.y;$.width=Math.round(Math.max(ye,0))+"px",$.height=Math.round(Math.max(we,0))+"px"}},addTiledImage:function(w){var _=this,A=w.originalTiledImage;delete w.original;var R=n.extend({},w,{success:function(k){var G=k.item;G._originalForNavigator=A,_._matchBounds(G,A,!0),_._matchOpacity(G,A),_._matchCompositeOperation(G,A);function W(){_._matchBounds(G,A)}function O(){_._matchOpacity(G,A)}function $(){_._matchCompositeOperation(G,A)}A.addHandler("bounds-change",W),A.addHandler("clip-change",W),A.addHandler("opacity-change",O),A.addHandler("composite-operation-change",$)}});return n.Viewer.prototype.addTiledImage.apply(this,[R])},destroy:function(){return n.Viewer.prototype.destroy.apply(this)},_getMatchingItem:function(w){for(var _=this.world.getItemCount(),A,R=0;R<_;R++)if(A=this.world.getItemAt(R),A._originalForNavigator===w)return A;return null},_matchBounds:function(w,_,A){var R=_.getBoundsNoRotate();w.setPosition(R.getTopLeft(),A),w.setWidth(R.width,A),w.setRotation(_.getRotation(),A),w.setClip(_.getClip()),w.setFlip(_.getFlip())},_matchOpacity:function(w,_){w.setOpacity(_.opacity)},_matchCompositeOperation:function(w,_){w.setCompositeOperation(_.compositeOperation)}});function o(w){var _={tracker:w.eventSource,position:w.position,quick:w.quick,shift:w.shift,originalEvent:w.originalEvent,preventDefaultAction:!1};if(this.viewer.raiseEvent("navigator-click",_),!_.preventDefaultAction&&w.quick&&this.viewer.viewport&&(this.panVertical||this.panHorizontal)){this.viewer.viewport.flipped&&(w.position.x=this.viewport.getContainerSize().x-w.position.x);var A=this.viewport.pointFromPixel(w.position);this.panVertical?this.panHorizontal||(A.x=this.viewer.viewport.getCenter(!0).x):A.y=this.viewer.viewport.getCenter(!0).y,this.viewer.viewport.panTo(A),this.viewer.viewport.applyConstraints()}}function u(w){var _={tracker:w.eventSource,position:w.position,delta:w.delta,speed:w.speed,direction:w.direction,shift:w.shift,originalEvent:w.originalEvent,preventDefaultAction:!1};this.viewer.raiseEvent("navigator-drag",_),!_.preventDefaultAction&&this.viewer.viewport&&(this.panHorizontal||(w.delta.x=0),this.panVertical||(w.delta.y=0),this.viewer.viewport.flipped&&(w.delta.x=-w.delta.x),this.viewer.viewport.panBy(this.viewport.deltaPointsFromPixels(w.delta)),this.viewer.constrainDuringPan&&this.viewer.viewport.applyConstraints())}function h(w){w.insideElementPressed&&this.viewer.viewport&&this.viewer.viewport.applyConstraints()}function m(w){var _={tracker:w.eventSource,position:w.position,scroll:w.scroll,shift:w.shift,originalEvent:w.originalEvent,preventDefault:w.preventDefault};this.viewer.raiseEvent("navigator-scroll",_),w.preventDefault=_.preventDefault}function y(w,_){a(w,"rotate("+_+"deg)")}function a(w,_){w.style.webkitTransform=_,w.style.mozTransform=_,w.style.msTransform=_,w.style.oTransform=_,w.style.transform=_}}(ae),function(n){var o={Errors:{Dzc:"Sorry, we don't support Deep Zoom Collections!",Dzi:"Hmm, this doesn't appear to be a valid Deep Zoom Image.",Xml:"Hmm, this doesn't appear to be a valid Deep Zoom Image.",ImageFormat:"Sorry, we don't support {0}-based Deep Zoom Images.",Security:"It looks like a security restriction stopped us from loading this Deep Zoom Image.",Status:"This space unintentionally left blank ({0} {1}).",OpenFailed:"Unable to open {0}: {1}"},Tooltips:{FullPage:"Toggle full page",Home:"Go home",ZoomIn:"Zoom in",ZoomOut:"Zoom out",NextPage:"Next page",PreviousPage:"Previous page",RotateLeft:"Rotate left",RotateRight:"Rotate right",Flip:"Flip Horizontally"}};n.extend(n,{getString:function(u){var h=u.split("."),m=null,y=arguments,a=o,w;for(w=0;w<h.length-1;w++)a=a[h[w]]||{};return m=a[h[w]],typeof m!="string"&&(n.console.error("Untranslated source string:",u),m=""),m.replace(/\{\d+\}/g,function(_){var A=parseInt(_.match(/\d+/),10)+1;return A<y.length?y[A]:""})},setString:function(u,h){var m=u.split("."),y=o,a;for(a=0;a<m.length-1;a++)y[m[a]]||(y[m[a]]={}),y=y[m[a]];y[m[a]]=h}})}(ae),function(n){n.Point=function(o,u){this.x=typeof o=="number"?o:0,this.y=typeof u=="number"?u:0},n.Point.prototype={clone:function(){return new n.Point(this.x,this.y)},plus:function(o){return new n.Point(this.x+o.x,this.y+o.y)},minus:function(o){return new n.Point(this.x-o.x,this.y-o.y)},times:function(o){return new n.Point(this.x*o,this.y*o)},divide:function(o){return new n.Point(this.x/o,this.y/o)},negate:function(){return new n.Point(-this.x,-this.y)},distanceTo:function(o){return Math.sqrt(Math.pow(this.x-o.x,2)+Math.pow(this.y-o.y,2))},squaredDistanceTo:function(o){return Math.pow(this.x-o.x,2)+Math.pow(this.y-o.y,2)},apply:function(o){return new n.Point(o(this.x),o(this.y))},equals:function(o){return o instanceof n.Point&&this.x===o.x&&this.y===o.y},rotate:function(o,u){u=u||new n.Point(0,0);var h,m;if(o%90===0){var y=n.positiveModulo(o,360);switch(y){case 0:h=1,m=0;break;case 90:h=0,m=1;break;case 180:h=-1,m=0;break;case 270:h=0,m=-1;break}}else{var a=o*Math.PI/180;h=Math.cos(a),m=Math.sin(a)}var w=h*(this.x-u.x)-m*(this.y-u.y)+u.x,_=m*(this.x-u.x)+h*(this.y-u.y)+u.y;return new n.Point(w,_)},toString:function(){return"("+Math.round(this.x*100)/100+","+Math.round(this.y*100)/100+")"}}}(ae),function(n){n.TileSource=function(u,h,m,y,a,w){var _=this,A=arguments,R,k;if(n.isPlainObject(u)?R=u:R={width:A[0],height:A[1],tileSize:A[2],tileOverlap:A[3],minLevel:A[4],maxLevel:A[5]},n.EventSource.call(this),n.extend(!0,this,R),!this.success){for(k=0;k<arguments.length;k++)if(n.isFunction(arguments[k])){this.success=arguments[k];break}}this.success&&this.addHandler("ready",function(G){_.success(G)}),n.type(arguments[0])==="string"&&(this.url=arguments[0]),this.url?(this.aspectRatio=1,this.dimensions=new n.Point(10,10),this._tileWidth=0,this._tileHeight=0,this.tileOverlap=0,this.minLevel=0,this.maxLevel=0,this.ready=!1,this.getImageInfo(this.url)):(this.ready=!0,this.aspectRatio=R.width&&R.height?R.width/R.height:1,this.dimensions=new n.Point(R.width,R.height),this.tileSize?(this._tileWidth=this._tileHeight=this.tileSize,delete this.tileSize):(this.tileWidth?(this._tileWidth=this.tileWidth,delete this.tileWidth):this._tileWidth=0,this.tileHeight?(this._tileHeight=this.tileHeight,delete this.tileHeight):this._tileHeight=0),this.tileOverlap=R.tileOverlap?R.tileOverlap:0,this.minLevel=R.minLevel?R.minLevel:0,this.maxLevel=R.maxLevel!==void 0&&R.maxLevel!==null?R.maxLevel:R.width&&R.height?Math.ceil(Math.log(Math.max(R.width,R.height))/Math.log(2)):0,this.success&&n.isFunction(this.success)&&this.success(this))},n.TileSource.prototype={getTileSize:function(u){return n.console.error("[TileSource.getTileSize] is deprecated. Use TileSource.getTileWidth() and TileSource.getTileHeight() instead"),this._tileWidth},getTileWidth:function(u){return this._tileWidth?this._tileWidth:this.getTileSize(u)},getTileHeight:function(u){return this._tileHeight?this._tileHeight:this.getTileSize(u)},setMaxLevel:function(u){this.maxLevel=u,this._memoizeLevelScale()},getLevelScale:function(u){return this._memoizeLevelScale(),this.getLevelScale(u)},_memoizeLevelScale:function(){var u={},h;for(h=0;h<=this.maxLevel;h++)u[h]=1/Math.pow(2,this.maxLevel-h);this.getLevelScale=function(m){return u[m]}},getNumTiles:function(u){var h=this.getLevelScale(u),m=Math.ceil(h*this.dimensions.x/this.getTileWidth(u)),y=Math.ceil(h*this.dimensions.y/this.getTileHeight(u));return new n.Point(m,y)},getPixelRatio:function(u){var h=this.dimensions.times(this.getLevelScale(u)),m=1/h.x*n.pixelDensityRatio,y=1/h.y*n.pixelDensityRatio;return new n.Point(m,y)},getClosestLevel:function(){var u,h;for(u=this.minLevel+1;u<=this.maxLevel&&(h=this.getNumTiles(u),!(h.x>1||h.y>1));u++);return u-1},getTileAtPoint:function(u,h){var m=h.x>=0&&h.x<=1&&h.y>=0&&h.y<=1/this.aspectRatio;n.console.assert(m,"[TileSource.getTileAtPoint] must be called with a valid point.");var y=this.dimensions.x*this.getLevelScale(u),a=h.x*y,w=h.y*y,_=Math.floor(a/this.getTileWidth(u)),A=Math.floor(w/this.getTileHeight(u));h.x>=1&&(_=this.getNumTiles(u).x-1);var R=1e-15;return h.y>=1/this.aspectRatio-R&&(A=this.getNumTiles(u).y-1),new n.Point(_,A)},getTileBounds:function(u,h,m,y){var a=this.dimensions.times(this.getLevelScale(u)),w=this.getTileWidth(u),_=this.getTileHeight(u),A=h===0?0:w*h-this.tileOverlap,R=m===0?0:_*m-this.tileOverlap,k=w+(h===0?1:2)*this.tileOverlap,G=_+(m===0?1:2)*this.tileOverlap,W=1/a.x;return k=Math.min(k,a.x-A),G=Math.min(G,a.y-R),y?new n.Rect(0,0,k,G):new n.Rect(A*W,R*W,k*W,G*W)},getImageInfo:function(u){var h=this,m,y,a,w,_,A,R;u&&(_=u.split("/"),A=_[_.length-1],R=A.lastIndexOf("."),R>-1&&(_[_.length-1]=A.slice(0,R)));var k=null;if(this.splitHashDataForPost){var G=u.indexOf("#");G!==-1&&(k=u.substring(G+1),u=u.substr(0,G))}y=function(W){typeof W=="string"&&(W=n.parseXml(W));var O=n.TileSource.determineType(h,W,u);if(!O){h.raiseEvent("open-failed",{message:"Unable to load TileSource",source:u});return}w=O.prototype.configure.apply(h,[W,u,k]),w.ajaxWithCredentials===void 0&&(w.ajaxWithCredentials=h.ajaxWithCredentials),a=new O(w),h.ready=!0,h.raiseEvent("ready",{tileSource:a})},u.match(/\.js$/)?(m=u.split("/").pop().replace(".js",""),n.jsonp({url:u,async:!1,callbackName:m,callback:y})):n.makeAjaxRequest({url:u,postData:k,withCredentials:this.ajaxWithCredentials,headers:this.ajaxHeaders,success:function(W){var O=o(W);y(O)},error:function(W,O){var $;try{$="HTTP "+W.status+" attempting to load TileSource: "+u}catch{var ye;typeof O>"u"||!O.toString?ye="Unknown error":ye=O.toString(),$=ye+" attempting to load TileSource: "+u}n.console.error($),h.raiseEvent("open-failed",{message:$,source:u,postData:k})}})},supports:function(u,h){return!1},configure:function(u,h,m){throw new Error("Method not implemented.")},getTileUrl:function(u,h,m){throw new Error("Method not implemented.")},getTilePostData:function(u,h,m){return null},getTileAjaxHeaders:function(u,h,m){return{}},getTileHashKey:function(u,h,m,y,a,w){function _(A){return a?A+"+"+JSON.stringify(a):A}return _(typeof y!="string"?u+"/"+h+"_"+m:y)},tileExists:function(u,h,m){var y=this.getNumTiles(u);return u>=this.minLevel&&u<=this.maxLevel&&h>=0&&m>=0&&h<y.x&&m<y.y},hasTransparency:function(u,h,m,y){return!!u||h.match(".png")},downloadTileStart:function(u){var h=u.userData,m=new Image;h.image=m,h.request=null;var y=function(a){if(!m){u.finish(null,h.request,"Image load failed: undefined Image instance.");return}m.onload=m.onerror=m.onabort=null,u.finish(a?null:m,h.request,a)};m.onload=function(){y()},m.onabort=m.onerror=function(){y("Image load aborted.")},u.loadWithAjax?h.request=n.makeAjaxRequest({url:u.src,withCredentials:u.ajaxWithCredentials,headers:u.ajaxHeaders,responseType:"arraybuffer",postData:u.postData,success:function(a){var w;try{w=new window.Blob([a.response])}catch(R){var _=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;if(R.name==="TypeError"&&_){var A=new _;A.append(a.response),w=A.getBlob()}}w.size===0?y("Empty image response."):m.src=(window.URL||window.webkitURL).createObjectURL(w)},error:function(a){y("Image load aborted - XHR error")}}):(u.crossOriginPolicy!==!1&&(m.crossOrigin=u.crossOriginPolicy),m.src=u.src)},downloadTileAbort:function(u){u.userData.request&&u.userData.request.abort();var h=u.userData.image;u.userData.image&&(h.onload=h.onerror=h.onabort=null)},createTileCache:function(u,h,m){u._data=h},destroyTileCache:function(u){u._data=null,u._renderedContext=null},getTileCacheData:function(u){return u._data},getTileCacheDataAsImage:function(u){return u._data},getTileCacheDataAsContext2D:function(u){if(!u._renderedContext){var h=document.createElement("canvas");h.width=u._data.width,h.height=u._data.height,u._renderedContext=h.getContext("2d"),u._renderedContext.drawImage(u._data,0,0),u._data=null}return u._renderedContext}},n.extend(!0,n.TileSource.prototype,n.EventSource.prototype);function o(u){var h=u.responseText,m=u.status,y,a;if(u){if(u.status!==200&&u.status!==0)throw m=u.status,y=m===404?"Not Found":u.statusText,new Error(n.getString("Errors.Status",m,y))}else throw new Error(n.getString("Errors.Security"));if(h.match(/^\s*<.*/))try{a=u.responseXML&&u.responseXML.documentElement?u.responseXML:n.parseXml(h)}catch{a=u.responseText}else if(h.match(/\s*[{[].*/))try{a=n.parseJSON(h)}catch{a=h}else a=h;return a}n.TileSource.determineType=function(u,h,m){var y;for(y in ae)if(y.match(/.+TileSource$/)&&n.isFunction(ae[y])&&n.isFunction(ae[y].prototype.supports)&&ae[y].prototype.supports.call(u,h,m))return ae[y];return n.console.error("No TileSource was able to open %s %s",m,h),null}}(ae),function(n){n.DziTileSource=function(h,m,y,a,w,_,A,R,k){var G,W,O,$;if(n.isPlainObject(h)?$=h:$={width:arguments[0],height:arguments[1],tileSize:arguments[2],tileOverlap:arguments[3],tilesUrl:arguments[4],fileFormat:arguments[5],displayRects:arguments[6],minLevel:arguments[7],maxLevel:arguments[8]},this._levelRects={},this.tilesUrl=$.tilesUrl,this.fileFormat=$.fileFormat,this.displayRects=$.displayRects,this.displayRects)for(G=this.displayRects.length-1;G>=0;G--)for(W=this.displayRects[G],O=W.minLevel;O<=W.maxLevel;O++)this._levelRects[O]||(this._levelRects[O]=[]),this._levelRects[O].push(W);n.TileSource.apply(this,[$])},n.extend(n.DziTileSource.prototype,n.TileSource.prototype,{supports:function(h,m){var y;return h.Image?y=h.Image.xmlns:h.documentElement&&(h.documentElement.localName==="Image"||h.documentElement.tagName==="Image")&&(y=h.documentElement.namespaceURI),y=(y||"").toLowerCase(),y.indexOf("schemas.microsoft.com/deepzoom/2008")!==-1||y.indexOf("schemas.microsoft.com/deepzoom/2009")!==-1},configure:function(h,m,y){var a;return n.isPlainObject(h)?a=u(this,h):a=o(this,h),m&&!a.tilesUrl&&(a.tilesUrl=m.replace(/([^/]+?)(\.(dzi|xml|js)?(\?[^/]*)?)?\/?$/,"$1_files/"),m.search(/\.(dzi|xml|js)\?/)!==-1?a.queryParams=m.match(/\?.*/):a.queryParams=""),a},getTileUrl:function(h,m,y){return[this.tilesUrl,h,"/",m,"_",y,".",this.fileFormat,this.queryParams].join("")},tileExists:function(h,m,y){var a=this._levelRects[h],w,_,A,R,k,G,W;if(this.minLevel&&h<this.minLevel||this.maxLevel&&h>this.maxLevel)return!1;if(!a||!a.length)return!0;for(W=a.length-1;W>=0;W--)if(w=a[W],!(h<w.minLevel||h>w.maxLevel)&&(_=this.getLevelScale(h),A=w.x*_,R=w.y*_,k=A+w.width*_,G=R+w.height*_,A=Math.floor(A/this._tileWidth),R=Math.floor(R/this._tileWidth),k=Math.ceil(k/this._tileWidth),G=Math.ceil(G/this._tileWidth),A<=m&&m<k&&R<=y&&y<G))return!0;return!1}});function o(h,m){if(!m||!m.documentElement)throw new Error(n.getString("Errors.Xml"));var y=m.documentElement,a=y.localName||y.tagName,w=m.documentElement.namespaceURI,_=null,A=[],R,k,G,W,O;if(a==="Image")try{if(W=y.getElementsByTagName("Size")[0],W===void 0&&(W=y.getElementsByTagNameNS(w,"Size")[0]),_={Image:{xmlns:"http://schemas.microsoft.com/deepzoom/2008",Url:y.getAttribute("Url"),Format:y.getAttribute("Format"),DisplayRect:null,Overlap:parseInt(y.getAttribute("Overlap"),10),TileSize:parseInt(y.getAttribute("TileSize"),10),Size:{Height:parseInt(W.getAttribute("Height"),10),Width:parseInt(W.getAttribute("Width"),10)}}},!n.imageFormatSupported(_.Image.Format))throw new Error(n.getString("Errors.ImageFormat",_.Image.Format.toUpperCase()));for(R=y.getElementsByTagName("DisplayRect"),R===void 0&&(R=y.getElementsByTagNameNS(w,"DisplayRect")[0]),O=0;O<R.length;O++)k=R[O],G=k.getElementsByTagName("Rect")[0],G===void 0&&(G=k.getElementsByTagNameNS(w,"Rect")[0]),A.push({Rect:{X:parseInt(G.getAttribute("X"),10),Y:parseInt(G.getAttribute("Y"),10),Width:parseInt(G.getAttribute("Width"),10),Height:parseInt(G.getAttribute("Height"),10),MinLevel:parseInt(k.getAttribute("MinLevel"),10),MaxLevel:parseInt(k.getAttribute("MaxLevel"),10)}});return A.length&&(_.Image.DisplayRect=A),u(h,_)}catch(we){throw we instanceof Error?we:new Error(n.getString("Errors.Dzi"))}else{if(a==="Collection")throw new Error(n.getString("Errors.Dzc"));if(a==="Error"){var $=y.getElementsByTagName("Message")[0],ye=$.firstChild.nodeValue;throw new Error(ye)}}throw new Error(n.getString("Errors.Dzi"))}function u(h,m){var y=m.Image,a=y.Url,w=y.Format,_=y.Size,A=y.DisplayRect||[],R=parseInt(_.Width,10),k=parseInt(_.Height,10),G=parseInt(y.TileSize,10),W=parseInt(y.Overlap,10),O=[],$,ye;for(ye=0;ye<A.length;ye++)$=A[ye].Rect,O.push(new n.DisplayRect(parseInt($.X,10),parseInt($.Y,10),parseInt($.Width,10),parseInt($.Height,10),parseInt($.MinLevel,10),parseInt($.MaxLevel,10)));return n.extend(!0,{width:R,height:k,tileSize:G,tileOverlap:W,minLevel:null,maxLevel:null,tilesUrl:a,fileFormat:w,displayRects:O},m)}}(ae),function(n){n.IIIFTileSource=function(y){if(n.extend(!0,this,y),this._id=this["@id"]||this.id||this.identifier||null,!(this.height&&this.width&&this._id))throw new Error("IIIF required parameters (width, height, or id) not provided.");if(y.tileSizePerScaleFactor={},this.tileFormat=this.tileFormat||"jpg",this.version=y.version,this.tile_width&&this.tile_height)y.tileWidth=this.tile_width,y.tileHeight=this.tile_height;else if(this.tile_width)y.tileSize=this.tile_width;else if(this.tile_height)y.tileSize=this.tile_height;else if(this.tiles)if(this.tiles.length===1)y.tileWidth=this.tiles[0].width,y.tileHeight=this.tiles[0].height||this.tiles[0].width,this.scale_factors=this.tiles[0].scaleFactors;else{this.scale_factors=[];for(var a=0;a<this.tiles.length;a++)for(var w=0;w<this.tiles[a].scaleFactors.length;w++){var _=this.tiles[a].scaleFactors[w];this.scale_factors.push(_),y.tileSizePerScaleFactor[_]={width:this.tiles[a].width,height:this.tiles[a].height||this.tiles[a].width}}}else if(o(y)){for(var A=Math.min(this.height,this.width),R=[256,512,1024],k=[],G=0;G<R.length;G++)R[G]<=A&&k.push(R[G]);k.length>0?y.tileSize=Math.max.apply(null,k):y.tileSize=A}else this.sizes&&this.sizes.length>0?(this.emulateLegacyImagePyramid=!0,y.levels=u(this),n.extend(!0,y,{width:y.levels[y.levels.length-1].width,height:y.levels[y.levels.length-1].height,tileSize:Math.max(y.height,y.width),tileOverlap:0,minLevel:0,maxLevel:y.levels.length-1}),this.levels=y.levels):n.console.error("Nothing in the info.json to construct image pyramids from");if(!y.maxLevel&&!this.emulateLegacyImagePyramid)if(!this.scale_factors)y.maxLevel=Number(Math.round(Math.log(Math.max(this.width,this.height),2)));else{var W=Math.max.apply(null,this.scale_factors);y.maxLevel=Math.round(Math.log(W)*Math.LOG2E)}if(this.sizes){var O=this.sizes.length;(O===y.maxLevel||O===y.maxLevel+1)&&(this.levelSizes=this.sizes.slice().sort(($,ye)=>$.width-ye.width),O===y.maxLevel&&this.levelSizes.push({width:this.width,height:this.height}))}n.TileSource.apply(this,[y])},n.extend(n.IIIFTileSource.prototype,n.TileSource.prototype,{supports:function(y,a){return y.protocol&&y.protocol==="http://iiif.io/api/image"||y["@context"]&&(y["@context"]==="http://library.stanford.edu/iiif/image-api/1.1/context.json"||y["@context"]==="http://iiif.io/api/image/1/context.json")||y.profile&&y.profile.indexOf("http://library.stanford.edu/iiif/image-api/compliance.html")===0||y.identifier&&y.width&&y.height?!0:!!(y.documentElement&&y.documentElement.tagName==="info"&&y.documentElement.namespaceURI==="http://library.stanford.edu/iiif/image-api/ns/")},configure:function(y,a,w){if(n.isPlainObject(y)){if(!y["@context"])y["@context"]="http://iiif.io/api/image/1.0/context.json",y["@id"]=a.replace("/info.json",""),y.version=1;else{var A=y["@context"];if(Array.isArray(A)){for(var R=0;R<A.length;R++)if(typeof A[R]=="string"&&(/^http:\/\/iiif\.io\/api\/image\/[1-3]\/context\.json$/.test(A[R])||A[R]==="http://library.stanford.edu/iiif/image-api/1.1/context.json")){A=A[R];break}}switch(A){case"http://iiif.io/api/image/1/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/context.json":y.version=1;break;case"http://iiif.io/api/image/2/context.json":y.version=2;break;case"http://iiif.io/api/image/3/context.json":y.version=3;break;default:n.console.error("Data has a @context property which contains no known IIIF context URI.")}}if(y.preferredFormats){for(var k=0;k<y.preferredFormats.length;k++)if(ae.imageFormatSupported(y.preferredFormats[k])){y.tileFormat=y.preferredFormats[k];break}}return y}else{var _=h(y);return _["@context"]="http://iiif.io/api/image/1.0/context.json",_["@id"]=a.replace("/info.xml",""),_.version=1,_}},getTileWidth:function(y){if(this.emulateLegacyImagePyramid)return n.TileSource.prototype.getTileWidth.call(this,y);var a=Math.pow(2,this.maxLevel-y);return this.tileSizePerScaleFactor&&this.tileSizePerScaleFactor[a]?this.tileSizePerScaleFactor[a].width:this._tileWidth},getTileHeight:function(y){if(this.emulateLegacyImagePyramid)return n.TileSource.prototype.getTileHeight.call(this,y);var a=Math.pow(2,this.maxLevel-y);return this.tileSizePerScaleFactor&&this.tileSizePerScaleFactor[a]?this.tileSizePerScaleFactor[a].height:this._tileHeight},getLevelScale:function(y){if(this.emulateLegacyImagePyramid){var a=NaN;return this.levels.length>0&&y>=this.minLevel&&y<=this.maxLevel&&(a=this.levels[y].width/this.levels[this.maxLevel].width),a}return n.TileSource.prototype.getLevelScale.call(this,y)},getNumTiles:function(y){if(this.emulateLegacyImagePyramid){var a=this.getLevelScale(y);return a?new n.Point(1,1):new n.Point(0,0)}if(this.levelSizes){var w=this.levelSizes[y],_=Math.ceil(w.width/this.getTileWidth(y)),A=Math.ceil(w.height/this.getTileHeight(y));return new n.Point(_,A)}else return n.TileSource.prototype.getNumTiles.call(this,y)},getTileAtPoint:function(y,a){if(this.emulateLegacyImagePyramid)return new n.Point(0,0);if(this.levelSizes){var w=a.x>=0&&a.x<=1&&a.y>=0&&a.y<=1/this.aspectRatio;n.console.assert(w,"[TileSource.getTileAtPoint] must be called with a valid point.");var _=this.levelSizes[y].width,A=a.x*_,R=a.y*_,k=Math.floor(A/this.getTileWidth(y)),G=Math.floor(R/this.getTileHeight(y));a.x>=1&&(k=this.getNumTiles(y).x-1);var W=1e-15;return a.y>=1/this.aspectRatio-W&&(G=this.getNumTiles(y).y-1),new n.Point(k,G)}return n.TileSource.prototype.getTileAtPoint.call(this,y,a)},getTileUrl:function(y,a,w){if(this.emulateLegacyImagePyramid){var _=null;return this.levels.length>0&&y>=this.minLevel&&y<=this.maxLevel&&(_=this.levels[y].url),_}var A="0",R=Math.pow(.5,this.maxLevel-y),k,G,W,O,$,ye,we,ht,tt,Ve,Tt,Q,Ct,it,wt,Fe;return this.levelSizes?(k=this.levelSizes[y].width,G=this.levelSizes[y].height):(k=Math.ceil(this.width*R),G=Math.ceil(this.height*R)),W=this.getTileWidth(y),O=this.getTileHeight(y),$=Math.round(W/R),ye=Math.round(O/R),this.version===1?wt="native."+this.tileFormat:wt="default."+this.tileFormat,k<W&&G<O?(this.version===2&&k===this.width?Q="full":this.version===3&&k===this.width&&G===this.height?Q="max":this.version===3?Q=k+","+G:Q=k+",",we="full"):(ht=a*$,tt=w*ye,Ve=Math.min($,this.width-ht),Tt=Math.min(ye,this.height-tt),a===0&&w===0&&Ve===this.width&&Tt===this.height?we="full":we=[ht,tt,Ve,Tt].join(","),Ct=Math.min(W,k-a*W),it=Math.min(O,G-w*O),this.version===2&&Ct===this.width?Q="full":this.version===3&&Ct===this.width&&it===this.height?Q="max":this.version===3?Q=Ct+","+it:Q=Ct+","),Fe=[this._id,we,Q,A,wt].join("/"),Fe},__testonly__:{canBeTiled:o,constructLevels:u}});function o(y){var a=["http://library.stanford.edu/iiif/image-api/compliance.html#level0","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0","http://iiif.io/api/image/2/level0.json","level0","https://iiif.io/api/image/3/level0.json"],w=Array.isArray(y.profile)?y.profile[0]:y.profile,_=a.indexOf(w)!==-1,A=!1;return y.version===2&&y.profile.length>1&&y.profile[1].supports&&(A=y.profile[1].supports.indexOf("sizeByW")!==-1),y.version===3&&y.extraFeatures&&(A=y.extraFeatures.indexOf("sizeByWh")!==-1),!_||A}function u(y){for(var a=[],w=0;w<y.sizes.length;w++)a.push({url:y._id+"/full/"+y.sizes[w].width+","+(y.version===3?y.sizes[w].height:"")+"/0/default."+y.tileFormat,width:y.sizes[w].width,height:y.sizes[w].height});return a.sort(function(_,A){return _.width-A.width})}function h(y){if(!y||!y.documentElement)throw new Error(n.getString("Errors.Xml"));var a=y.documentElement,w=a.tagName,_=null;if(w==="info")try{return _={},m(a,_),_}catch(A){throw A instanceof Error?A:new Error(n.getString("Errors.IIIF"))}throw new Error(n.getString("Errors.IIIF"))}function m(y,a,w){var _,A;if(y.nodeType===3&&w)A=y.nodeValue.trim(),A.match(/^\d*$/)&&(A=Number(A)),a[w]?(n.isArray(a[w])||(a[w]=[a[w]]),a[w].push(A)):a[w]=A;else if(y.nodeType===1)for(_=0;_<y.childNodes.length;_++)m(y.childNodes[_],a,y.nodeName)}}(ae),function(n){n.OsmTileSource=function(o,u,h,m,y){var a;n.isPlainObject(o)?a=o:a={width:arguments[0],height:arguments[1],tileSize:arguments[2],tileOverlap:arguments[3],tilesUrl:arguments[4]},(!a.width||!a.height)&&(a.width=65572864,a.height=65572864),a.tileSize||(a.tileSize=256,a.tileOverlap=0),a.tilesUrl||(a.tilesUrl="http://tile.openstreetmap.org/"),a.minLevel=8,n.TileSource.apply(this,[a])},n.extend(n.OsmTileSource.prototype,n.TileSource.prototype,{supports:function(o,u){return o.type&&o.type==="openstreetmaps"},configure:function(o,u,h){return o},getTileUrl:function(o,u,h){return this.tilesUrl+(o-8)+"/"+u+"/"+h+".png"}})}(ae),function(n){n.TmsTileSource=function(o,u,h,m,y){var a;n.isPlainObject(o)?a=o:a={width:arguments[0],height:arguments[1],tileSize:arguments[2],tileOverlap:arguments[3],tilesUrl:arguments[4]};var w=Math.ceil(a.width/256)*256,_=Math.ceil(a.height/256)*256,A;w>_?A=w/256:A=_/256,a.maxLevel=Math.ceil(Math.log(A)/Math.log(2))-1,a.tileSize=256,a.width=w,a.height=_,n.TileSource.apply(this,[a])},n.extend(n.TmsTileSource.prototype,n.TileSource.prototype,{supports:function(o,u){return o.type&&o.type==="tiledmapservice"},configure:function(o,u,h){return o},getTileUrl:function(o,u,h){var m=this.getNumTiles(o).y-1;return this.tilesUrl+o+"/"+u+"/"+(m-h)+".png"}})}(ae),function(n){n.ZoomifyTileSource=function(o){typeof o.tileSize>"u"&&(o.tileSize=256),typeof o.fileFormat>"u"&&(o.fileFormat="jpg",this.fileFormat=o.fileFormat);var u={x:o.width,y:o.height};for(o.imageSizes=[{x:o.width,y:o.height}],o.gridSize=[this._getGridSize(o.width,o.height,o.tileSize)];parseInt(u.x,10)>o.tileSize||parseInt(u.y,10)>o.tileSize;)u.x=Math.floor(u.x/2),u.y=Math.floor(u.y/2),o.imageSizes.push({x:u.x,y:u.y}),o.gridSize.push(this._getGridSize(u.x,u.y,o.tileSize));o.imageSizes.reverse(),o.gridSize.reverse(),o.minLevel=0,o.maxLevel=o.gridSize.length-1,ae.TileSource.apply(this,[o])},n.extend(n.ZoomifyTileSource.prototype,n.TileSource.prototype,{_getGridSize:function(o,u,h){return{x:Math.ceil(o/h),y:Math.ceil(u/h)}},_calculateAbsoluteTileNumber:function(o,u,h){for(var m=0,y={},a=0;a<o;a++)y=this.gridSize[a],m+=y.x*y.y;return y=this.gridSize[o],m+=y.x*h+u,m},supports:function(o,u){return o.type&&o.type==="zoomifytileservice"},configure:function(o,u,h){return o},getTileUrl:function(o,u,h){var m=0,y=this._calculateAbsoluteTileNumber(o,u,h);return m=Math.floor(y/256),this.tilesUrl+"TileGroup"+m+"/"+o+"-"+u+"-"+h+"."+this.fileFormat}})}(ae),function(n){n.LegacyTileSource=function(m){var y,a,w;n.isArray(m)&&(y={type:"legacy-image-pyramid",levels:m}),y.levels=o(y.levels),y.levels.length>0?(a=y.levels[y.levels.length-1].width,w=y.levels[y.levels.length-1].height):(a=0,w=0,n.console.error("No supported image formats found")),n.extend(!0,y,{width:a,height:w,tileSize:Math.max(w,a),tileOverlap:0,minLevel:0,maxLevel:y.levels.length>0?y.levels.length-1:0}),n.TileSource.apply(this,[y]),this.levels=y.levels},n.extend(n.LegacyTileSource.prototype,n.TileSource.prototype,{supports:function(m,y){return m.type&&m.type==="legacy-image-pyramid"||m.documentElement&&m.documentElement.getAttribute("type")==="legacy-image-pyramid"},configure:function(m,y,a){var w;return n.isPlainObject(m)?w=h(this,m):w=u(this,m),w},getLevelScale:function(m){var y=NaN;return this.levels.length>0&&m>=this.minLevel&&m<=this.maxLevel&&(y=this.levels[m].width/this.levels[this.maxLevel].width),y},getNumTiles:function(m){var y=this.getLevelScale(m);return y?new n.Point(1,1):new n.Point(0,0)},getTileUrl:function(m,y,a){var w=null;return this.levels.length>0&&m>=this.minLevel&&m<=this.maxLevel&&(w=this.levels[m].url),w}});function o(m){var y=[],a,w;for(w=0;w<m.length;w++)a=m[w],a.height&&a.width&&a.url?y.push({url:a.url,width:Number(a.width),height:Number(a.height)}):n.console.error("Unsupported image format: %s",a.url?a.url:"<no URL>");return y.sort(function(_,A){return _.height-A.height})}function u(m,y){if(!y||!y.documentElement)throw new Error(n.getString("Errors.Xml"));var a=y.documentElement,w=a.tagName,_=null,A=[],R,k;if(w==="image")try{for(_={type:a.getAttribute("type"),levels:[]},A=a.getElementsByTagName("level"),k=0;k<A.length;k++)R=A[k],_.levels.push({url:R.getAttribute("url"),width:parseInt(R.getAttribute("width"),10),height:parseInt(R.getAttribute("height"),10)});return h(m,_)}catch(G){throw G instanceof Error?G:new Error("Unknown error parsing Legacy Image Pyramid XML.")}else{if(w==="collection")throw new Error("Legacy Image Pyramid Collections not yet supported.");if(w==="error")throw new Error("Error: "+y)}throw new Error("Unknown element "+w)}function h(m,y){return y.levels}}(ae),function(n){n.ImageTileSource=function(o){o=n.extend({buildPyramid:!0,crossOriginPolicy:!1,ajaxWithCredentials:!1},o),n.TileSource.apply(this,[o])},n.extend(n.ImageTileSource.prototype,n.TileSource.prototype,{supports:function(o,u){return o.type&&o.type==="image"},configure:function(o,u,h){return o},getImageInfo:function(o){var u=this._image=new Image,h=this;this.crossOriginPolicy&&(u.crossOrigin=this.crossOriginPolicy),this.ajaxWithCredentials&&(u.useCredentials=this.ajaxWithCredentials),n.addEvent(u,"load",function(){h.width=u.naturalWidth,h.height=u.naturalHeight,h.aspectRatio=h.width/h.height,h.dimensions=new n.Point(h.width,h.height),h._tileWidth=h.width,h._tileHeight=h.height,h.tileOverlap=0,h.minLevel=0,h.levels=h._buildLevels(),h.maxLevel=h.levels.length-1,h.ready=!0,h.raiseEvent("ready",{tileSource:h})}),n.addEvent(u,"error",function(){h.raiseEvent("open-failed",{message:"Error loading image at "+o,source:o})}),u.src=o},getLevelScale:function(o){var u=NaN;return o>=this.minLevel&&o<=this.maxLevel&&(u=this.levels[o].width/this.levels[this.maxLevel].width),u},getNumTiles:function(o){var u=this.getLevelScale(o);return u?new n.Point(1,1):new n.Point(0,0)},getTileUrl:function(o,u,h){var m=null;return o>=this.minLevel&&o<=this.maxLevel&&(m=this.levels[o].url),m},getContext2D:function(o,u,h){var m=null;return o>=this.minLevel&&o<=this.maxLevel&&(m=this.levels[o].context2D),m},destroy:function(o){this._freeupCanvasMemory(o)},_buildLevels:function(){var o=[{url:this._image.src,width:this._image.naturalWidth,height:this._image.naturalHeight}];if(!this.buildPyramid||!n.supportsCanvas)return delete this._image,o;var u=this._image.naturalWidth,h=this._image.naturalHeight,m=document.createElement("canvas"),y=m.getContext("2d");if(m.width=u,m.height=h,y.drawImage(this._image,0,0,u,h),o[0].context2D=y,delete this._image,n.isCanvasTainted(m))return o;for(;u>=2&&h>=2;){u=Math.floor(u/2),h=Math.floor(h/2);var a=document.createElement("canvas"),w=a.getContext("2d");a.width=u,a.height=h,w.drawImage(m,0,0,u,h),o.splice(0,0,{context2D:w,width:u,height:h}),m=a,y=w}return o},_freeupCanvasMemory:function(o){for(var u=0;u<this.levels.length;u++)this.levels[u].context2D&&(this.levels[u].context2D.canvas.height=0,this.levels[u].context2D.canvas.width=0,o&&o.raiseEvent("image-unloaded",{context2D:this.levels[u].context2D}))}})}(ae),function(n){n.TileSourceCollection=function(o,u,h,m){n.console.error("TileSourceCollection is deprecated; use World instead")}}(ae),function(n){n.ButtonState={REST:0,GROUP:1,HOVER:2,DOWN:3},n.Button=function(w){var _=this;n.EventSource.call(this),n.extend(!0,this,{tooltip:null,srcRest:null,srcGroup:null,srcHover:null,srcDown:null,clickTimeThreshold:n.DEFAULT_SETTINGS.clickTimeThreshold,clickDistThreshold:n.DEFAULT_SETTINGS.clickDistThreshold,fadeDelay:0,fadeLength:2e3,onPress:null,onRelease:null,onClick:null,onEnter:null,onExit:null,onFocus:null,onBlur:null,userData:null},w),this.element=w.element||n.makeNeutralElement("div"),w.element||(this.imgRest=n.makeTransparentImage(this.srcRest),this.imgGroup=n.makeTransparentImage(this.srcGroup),this.imgHover=n.makeTransparentImage(this.srcHover),this.imgDown=n.makeTransparentImage(this.srcDown),this.imgRest.alt=this.imgGroup.alt=this.imgHover.alt=this.imgDown.alt=this.tooltip,n.setElementPointerEventsNone(this.imgRest),n.setElementPointerEventsNone(this.imgGroup),n.setElementPointerEventsNone(this.imgHover),n.setElementPointerEventsNone(this.imgDown),this.element.style.position="relative",n.setElementTouchActionNone(this.element),this.imgGroup.style.position=this.imgHover.style.position=this.imgDown.style.position="absolute",this.imgGroup.style.top=this.imgHover.style.top=this.imgDown.style.top="0px",this.imgGroup.style.left=this.imgHover.style.left=this.imgDown.style.left="0px",this.imgHover.style.visibility=this.imgDown.style.visibility="hidden",this.element.appendChild(this.imgRest),this.element.appendChild(this.imgGroup),this.element.appendChild(this.imgHover),this.element.appendChild(this.imgDown)),this.addHandler("press",this.onPress),this.addHandler("release",this.onRelease),this.addHandler("click",this.onClick),this.addHandler("enter",this.onEnter),this.addHandler("exit",this.onExit),this.addHandler("focus",this.onFocus),this.addHandler("blur",this.onBlur),this.currentState=n.ButtonState.GROUP,this.fadeBeginTime=null,this.shouldFade=!1,this.element.style.display="inline-block",this.element.style.position="relative",this.element.title=this.tooltip,this.tracker=new n.MouseTracker({userData:"Button.tracker",element:this.element,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,enterHandler:function(A){A.insideElementPressed?(y(_,n.ButtonState.DOWN),_.raiseEvent("enter",{originalEvent:A.originalEvent})):A.buttonDownAny||y(_,n.ButtonState.HOVER)},focusHandler:function(A){_.tracker.enterHandler(A),_.raiseEvent("focus",{originalEvent:A.originalEvent})},leaveHandler:function(A){a(_,n.ButtonState.GROUP),A.insideElementPressed&&_.raiseEvent("exit",{originalEvent:A.originalEvent})},blurHandler:function(A){_.tracker.leaveHandler(A),_.raiseEvent("blur",{originalEvent:A.originalEvent})},pressHandler:function(A){y(_,n.ButtonState.DOWN),_.raiseEvent("press",{originalEvent:A.originalEvent})},releaseHandler:function(A){A.insideElementPressed&&A.insideElementReleased?(a(_,n.ButtonState.HOVER),_.raiseEvent("release",{originalEvent:A.originalEvent})):A.insideElementPressed?a(_,n.ButtonState.GROUP):y(_,n.ButtonState.HOVER)},clickHandler:function(A){A.quick&&_.raiseEvent("click",{originalEvent:A.originalEvent})},keyHandler:function(A){A.keyCode===13?(_.raiseEvent("click",{originalEvent:A.originalEvent}),_.raiseEvent("release",{originalEvent:A.originalEvent}),A.preventDefault=!0):A.preventDefault=!1}}),a(this,n.ButtonState.REST)},n.extend(n.Button.prototype,n.EventSource.prototype,{notifyGroupEnter:function(){y(this,n.ButtonState.GROUP)},notifyGroupExit:function(){a(this,n.ButtonState.REST)},disable:function(){this.notifyGroupExit(),this.element.disabled=!0,this.tracker.setTracking(!1),n.setElementOpacity(this.element,.2,!0)},enable:function(){this.element.disabled=!1,this.tracker.setTracking(!0),n.setElementOpacity(this.element,1,!0),this.notifyGroupEnter()},destroy:function(){this.imgRest&&(this.element.removeChild(this.imgRest),this.imgRest=null),this.imgGroup&&(this.element.removeChild(this.imgGroup),this.imgGroup=null),this.imgHover&&(this.element.removeChild(this.imgHover),this.imgHover=null),this.imgDown&&(this.element.removeChild(this.imgDown),this.imgDown=null),this.removeAllHandlers(),this.tracker.destroy(),this.element=null}});function o(w){n.requestAnimationFrame(function(){u(w)})}function u(w){var _,A,R;w.shouldFade&&(_=n.now(),A=_-w.fadeBeginTime,R=1-A/w.fadeLength,R=Math.min(1,R),R=Math.max(0,R),w.imgGroup&&n.setElementOpacity(w.imgGroup,R,!0),R>0&&o(w))}function h(w){w.shouldFade=!0,w.fadeBeginTime=n.now()+w.fadeDelay,window.setTimeout(function(){o(w)},w.fadeDelay)}function m(w){w.shouldFade=!1,w.imgGroup&&n.setElementOpacity(w.imgGroup,1,!0)}function y(w,_){w.element.disabled||(_>=n.ButtonState.GROUP&&w.currentState===n.ButtonState.REST&&(m(w),w.currentState=n.ButtonState.GROUP),_>=n.ButtonState.HOVER&&w.currentState===n.ButtonState.GROUP&&(w.imgHover&&(w.imgHover.style.visibility=""),w.currentState=n.ButtonState.HOVER),_>=n.ButtonState.DOWN&&w.currentState===n.ButtonState.HOVER&&(w.imgDown&&(w.imgDown.style.visibility=""),w.currentState=n.ButtonState.DOWN))}function a(w,_){w.element.disabled||(_<=n.ButtonState.HOVER&&w.currentState===n.ButtonState.DOWN&&(w.imgDown&&(w.imgDown.style.visibility="hidden"),w.currentState=n.ButtonState.HOVER),_<=n.ButtonState.GROUP&&w.currentState===n.ButtonState.HOVER&&(w.imgHover&&(w.imgHover.style.visibility="hidden"),w.currentState=n.ButtonState.GROUP),_<=n.ButtonState.REST&&w.currentState===n.ButtonState.GROUP&&(h(w),w.currentState=n.ButtonState.REST))}}(ae),function(n){n.ButtonGroup=function(o){n.extend(!0,this,{buttons:[],clickTimeThreshold:n.DEFAULT_SETTINGS.clickTimeThreshold,clickDistThreshold:n.DEFAULT_SETTINGS.clickDistThreshold,labelText:""},o);var u=this.buttons.concat([]),h=this,m;if(this.element=o.element||n.makeNeutralElement("div"),!o.group)for(this.element.style.display="inline-block",m=0;m<u.length;m++)this.element.appendChild(u[m].element);n.setElementTouchActionNone(this.element),this.tracker=new n.MouseTracker({userData:"ButtonGroup.tracker",element:this.element,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold,enterHandler:function(y){var a;for(a=0;a<h.buttons.length;a++)h.buttons[a].notifyGroupEnter()},leaveHandler:function(y){var a;if(!y.insideElementPressed)for(a=0;a<h.buttons.length;a++)h.buttons[a].notifyGroupExit()}})},n.ButtonGroup.prototype={addButton:function(o){this.buttons.push(o),this.element.appendChild(o.element)},emulateEnter:function(){this.tracker.enterHandler({eventSource:this.tracker})},emulateLeave:function(){this.tracker.leaveHandler({eventSource:this.tracker})},destroy:function(){for(;this.buttons.length;){var o=this.buttons.pop();this.element.removeChild(o.element),o.destroy()}this.tracker.destroy(),this.element=null}}}(ae),function(n){n.Rect=function(o,u,h,m,y){this.x=typeof o=="number"?o:0,this.y=typeof u=="number"?u:0,this.width=typeof h=="number"?h:0,this.height=typeof m=="number"?m:0,this.degrees=typeof y=="number"?y:0,this.degrees=n.positiveModulo(this.degrees,360);var a,w;this.degrees>=270?(a=this.getTopRight(),this.x=a.x,this.y=a.y,w=this.height,this.height=this.width,this.width=w,this.degrees-=270):this.degrees>=180?(a=this.getBottomRight(),this.x=a.x,this.y=a.y,this.degrees-=180):this.degrees>=90&&(a=this.getBottomLeft(),this.x=a.x,this.y=a.y,w=this.height,this.height=this.width,this.width=w,this.degrees-=90)},n.Rect.fromSummits=function(o,u,h){var m=o.distanceTo(u),y=o.distanceTo(h),a=u.minus(o),w=Math.atan(a.y/a.x);return a.x<0?w+=Math.PI:a.y<0&&(w+=2*Math.PI),new n.Rect(o.x,o.y,m,y,w/Math.PI*180)},n.Rect.prototype={clone:function(){return new n.Rect(this.x,this.y,this.width,this.height,this.degrees)},getAspectRatio:function(){return this.width/this.height},getTopLeft:function(){return new n.Point(this.x,this.y)},getBottomRight:function(){return new n.Point(this.x+this.width,this.y+this.height).rotate(this.degrees,this.getTopLeft())},getTopRight:function(){return new n.Point(this.x+this.width,this.y).rotate(this.degrees,this.getTopLeft())},getBottomLeft:function(){return new n.Point(this.x,this.y+this.height).rotate(this.degrees,this.getTopLeft())},getCenter:function(){return new n.Point(this.x+this.width/2,this.y+this.height/2).rotate(this.degrees,this.getTopLeft())},getSize:function(){return new n.Point(this.width,this.height)},equals:function(o){return o instanceof n.Rect&&this.x===o.x&&this.y===o.y&&this.width===o.width&&this.height===o.height&&this.degrees===o.degrees},times:function(o){return new n.Rect(this.x*o,this.y*o,this.width*o,this.height*o,this.degrees)},translate:function(o){return new n.Rect(this.x+o.x,this.y+o.y,this.width,this.height,this.degrees)},union:function(o){var u=this.getBoundingBox(),h=o.getBoundingBox(),m=Math.min(u.x,h.x),y=Math.min(u.y,h.y),a=Math.max(u.x+u.width,h.x+h.width),w=Math.max(u.y+u.height,h.y+h.height);return new n.Rect(m,y,a-m,w-y)},intersection:function(o){var u=1e-10,h=[],m=this.getTopLeft();o.containsPoint(m,u)&&h.push(m);var y=this.getTopRight();o.containsPoint(y,u)&&h.push(y);var a=this.getBottomLeft();o.containsPoint(a,u)&&h.push(a);var w=this.getBottomRight();o.containsPoint(w,u)&&h.push(w);var _=o.getTopLeft();this.containsPoint(_,u)&&h.push(_);var A=o.getTopRight();this.containsPoint(A,u)&&h.push(A);var R=o.getBottomLeft();this.containsPoint(R,u)&&h.push(R);var k=o.getBottomRight();this.containsPoint(k,u)&&h.push(k);for(var G=this._getSegments(),W=o._getSegments(),O=0;O<G.length;O++)for(var $=G[O],ye=0;ye<W.length;ye++){var we=W[ye],ht=tt($[0],$[1],we[0],we[1]);ht&&h.push(ht)}function tt(Fe,Lt,ft,_t){var zt=Lt.minus(Fe),dt=_t.minus(ft),Dt=-dt.x*zt.y+zt.x*dt.y;if(Dt===0)return null;var Wt=(zt.x*(Fe.y-ft.y)-zt.y*(Fe.x-ft.x))/Dt,Gt=(dt.x*(Fe.y-ft.y)-dt.y*(Fe.x-ft.x))/Dt;return-u<=Wt&&Wt<=1-u&&-u<=Gt&&Gt<=1-u?new n.Point(Fe.x+Gt*zt.x,Fe.y+Gt*zt.y):null}if(h.length===0)return null;for(var Ve=h[0].x,Tt=h[0].x,Q=h[0].y,Ct=h[0].y,it=1;it<h.length;it++){var wt=h[it];wt.x<Ve&&(Ve=wt.x),wt.x>Tt&&(Tt=wt.x),wt.y<Q&&(Q=wt.y),wt.y>Ct&&(Ct=wt.y)}return new n.Rect(Ve,Q,Tt-Ve,Ct-Q)},_getSegments:function(){var o=this.getTopLeft(),u=this.getTopRight(),h=this.getBottomLeft(),m=this.getBottomRight();return[[o,u],[u,m],[m,h],[h,o]]},rotate:function(o,u){if(o=n.positiveModulo(o,360),o===0)return this.clone();u=u||this.getCenter();var h=this.getTopLeft().rotate(o,u),m=this.getTopRight().rotate(o,u),y=m.minus(h);y=y.apply(function(w){var _=1e-15;return Math.abs(w)<_?0:w});var a=Math.atan(y.y/y.x);return y.x<0?a+=Math.PI:y.y<0&&(a+=2*Math.PI),new n.Rect(h.x,h.y,this.width,this.height,a/Math.PI*180)},getBoundingBox:function(){if(this.degrees===0)return this.clone();var o=this.getTopLeft(),u=this.getTopRight(),h=this.getBottomLeft(),m=this.getBottomRight(),y=Math.min(o.x,u.x,h.x,m.x),a=Math.max(o.x,u.x,h.x,m.x),w=Math.min(o.y,u.y,h.y,m.y),_=Math.max(o.y,u.y,h.y,m.y);return new n.Rect(y,w,a-y,_-w)},getIntegerBoundingBox:function(){var o=this.getBoundingBox(),u=Math.floor(o.x),h=Math.floor(o.y),m=Math.ceil(o.width+o.x-u),y=Math.ceil(o.height+o.y-h);return new n.Rect(u,h,m,y)},containsPoint:function(o,u){u=u||0;var h=this.getTopLeft(),m=this.getTopRight(),y=this.getBottomLeft(),a=m.minus(h),w=y.minus(h);return(o.x-h.x)*a.x+(o.y-h.y)*a.y>=-u&&(o.x-m.x)*a.x+(o.y-m.y)*a.y<=u&&(o.x-h.x)*w.x+(o.y-h.y)*w.y>=-u&&(o.x-y.x)*w.x+(o.y-y.y)*w.y<=u},toString:function(){return"["+Math.round(this.x*100)/100+", "+Math.round(this.y*100)/100+", "+Math.round(this.width*100)/100+"x"+Math.round(this.height*100)/100+", "+Math.round(this.degrees*100)/100+"deg]"}}}(ae),function(n){var o={};n.ReferenceStrip=function(R){var k=this,G=R.viewer,W=n.getElementSize(G.element),O,$,ye;for(R.id||(R.id="referencestrip-"+n.now(),this.element=n.makeNeutralElement("div"),this.element.id=R.id,this.element.className="referencestrip"),R=n.extend(!0,{sizeRatio:n.DEFAULT_SETTINGS.referenceStripSizeRatio,position:n.DEFAULT_SETTINGS.referenceStripPosition,scroll:n.DEFAULT_SETTINGS.referenceStripScroll,clickTimeThreshold:n.DEFAULT_SETTINGS.clickTimeThreshold},R,{element:this.element}),n.extend(this,R),o[this.id]={animating:!1},this.minPixelRatio=this.viewer.minPixelRatio,this.element.tabIndex=0,$=this.element.style,$.marginTop="0px",$.marginRight="0px",$.marginBottom="0px",$.marginLeft="0px",$.left="0px",$.bottom="0px",$.border="0px",$.background="#000",$.position="relative",n.setElementTouchActionNone(this.element),n.setElementOpacity(this.element,.8),this.viewer=G,this.tracker=new n.MouseTracker({userData:"ReferenceStrip.tracker",element:this.element,clickHandler:n.delegate(this,u),dragHandler:n.delegate(this,h),scrollHandler:n.delegate(this,m),enterHandler:n.delegate(this,a),leaveHandler:n.delegate(this,w),keyDownHandler:n.delegate(this,_),keyHandler:n.delegate(this,A),preProcessEventHandler:function(we){we.eventType==="wheel"&&(we.preventDefault=!0)}}),R.width&&R.height?(this.element.style.width=R.width+"px",this.element.style.height=R.height+"px",G.addControl(this.element,{anchor:n.ControlAnchor.BOTTOM_LEFT})):R.scroll==="horizontal"?(this.element.style.width=W.x*R.sizeRatio*G.tileSources.length+12*G.tileSources.length+"px",this.element.style.height=W.y*R.sizeRatio+"px",G.addControl(this.element,{anchor:n.ControlAnchor.BOTTOM_LEFT})):(this.element.style.height=W.y*R.sizeRatio*G.tileSources.length+12*G.tileSources.length+"px",this.element.style.width=W.x*R.sizeRatio+"px",G.addControl(this.element,{anchor:n.ControlAnchor.TOP_LEFT})),this.panelWidth=W.x*this.sizeRatio+8,this.panelHeight=W.y*this.sizeRatio+8,this.panels=[],this.miniViewers={},ye=0;ye<G.tileSources.length;ye++)O=n.makeNeutralElement("div"),O.id=this.element.id+"-"+ye,O.style.width=k.panelWidth+"px",O.style.height=k.panelHeight+"px",O.style.display="inline",O.style.float="left",O.style.cssFloat="left",O.style.padding="2px",n.setElementTouchActionNone(O),n.setElementPointerEventsNone(O),this.element.appendChild(O),O.activePanel=!1,this.panels.push(O);y(this,this.scroll==="vertical"?W.y:W.x,0),this.setFocus(0)},n.ReferenceStrip.prototype={setFocus:function(R){var k=this.element.querySelector("#"+this.element.id+"-"+R),G=n.getElementSize(this.viewer.canvas),W=Number(this.element.style.width.replace("px","")),O=Number(this.element.style.height.replace("px","")),$=-Number(this.element.style.marginLeft.replace("px","")),ye=-Number(this.element.style.marginTop.replace("px","")),we;this.currentSelected!==k&&(this.currentSelected&&(this.currentSelected.style.background="#000"),this.currentSelected=k,this.currentSelected.style.background="#999",this.scroll==="horizontal"?(we=Number(R)*(this.panelWidth+3),we>$+G.x-this.panelWidth?(we=Math.min(we,W-G.x),this.element.style.marginLeft=-we+"px",y(this,G.x,-we)):we<$&&(we=Math.max(0,we-G.x/2),this.element.style.marginLeft=-we+"px",y(this,G.x,-we))):(we=Number(R)*(this.panelHeight+3),we>ye+G.y-this.panelHeight?(we=Math.min(we,O-G.y),this.element.style.marginTop=-we+"px",y(this,G.y,-we)):we<ye&&(we=Math.max(0,we-G.y/2),this.element.style.marginTop=-we+"px",y(this,G.y,-we))),this.currentPage=R,a.call(this,{eventSource:this.tracker}))},update:function(){return!!o[this.id].animating},destroy:function(){if(this.miniViewers)for(var R in this.miniViewers)this.miniViewers[R].destroy();this.tracker.destroy(),this.element&&this.viewer.removeControl(this.element)}};function u(R){if(R.quick){var k;this.scroll==="horizontal"?k=Math.floor(R.position.x/(this.panelWidth+4)):k=Math.floor(R.position.y/this.panelHeight),this.viewer.goToPage(k)}this.element.focus()}function h(R){if(this.dragging=!0,this.element){var k=Number(this.element.style.marginLeft.replace("px","")),G=Number(this.element.style.marginTop.replace("px","")),W=Number(this.element.style.width.replace("px","")),O=Number(this.element.style.height.replace("px","")),$=n.getElementSize(this.viewer.canvas);this.scroll==="horizontal"?-R.delta.x>0?k>-(W-$.x)&&(this.element.style.marginLeft=k+R.delta.x*2+"px",y(this,$.x,k+R.delta.x*2)):-R.delta.x<0&&k<0&&(this.element.style.marginLeft=k+R.delta.x*2+"px",y(this,$.x,k+R.delta.x*2)):-R.delta.y>0?G>-(O-$.y)&&(this.element.style.marginTop=G+R.delta.y*2+"px",y(this,$.y,G+R.delta.y*2)):-R.delta.y<0&&G<0&&(this.element.style.marginTop=G+R.delta.y*2+"px",y(this,$.y,G+R.delta.y*2))}}function m(R){if(this.element){var k=Number(this.element.style.marginLeft.replace("px","")),G=Number(this.element.style.marginTop.replace("px","")),W=Number(this.element.style.width.replace("px","")),O=Number(this.element.style.height.replace("px","")),$=n.getElementSize(this.viewer.canvas);this.scroll==="horizontal"?R.scroll>0?k>-(W-$.x)&&(this.element.style.marginLeft=k-R.scroll*60+"px",y(this,$.x,k-R.scroll*60)):R.scroll<0&&k<0&&(this.element.style.marginLeft=k-R.scroll*60+"px",y(this,$.x,k-R.scroll*60)):R.scroll<0?G>$.y-O&&(this.element.style.marginTop=G+R.scroll*60+"px",y(this,$.y,G+R.scroll*60)):R.scroll>0&&G<0&&(this.element.style.marginTop=G+R.scroll*60+"px",y(this,$.y,G+R.scroll*60)),R.preventDefault=!0}}function y(R,k,G){var W,O,$,ye,we,ht;for(R.scroll==="horizontal"?W=R.panelWidth:W=R.panelHeight,O=Math.ceil(k/W)+5,$=Math.ceil((Math.abs(G)+k)/W)+1,O=$-O,O=O<0?0:O,we=O;we<$&&we<R.panels.length;we++)if(ht=R.panels[we],!ht.activePanel){var tt,Ve=R.viewer.tileSources[we];Ve.referenceStripThumbnailUrl?tt={type:"image",url:Ve.referenceStripThumbnailUrl}:tt=Ve,ye=new n.Viewer({id:ht.id,tileSources:[tt],element:ht,navigatorSizeRatio:R.sizeRatio,showNavigator:!1,mouseNavEnabled:!1,showNavigationControl:!1,showSequenceControl:!1,immediateRender:!0,blendTime:0,animationTime:0,loadTilesWithAjax:R.viewer.loadTilesWithAjax,ajaxHeaders:R.viewer.ajaxHeaders,drawer:"canvas"}),n.setElementPointerEventsNone(ye.canvas),n.setElementPointerEventsNone(ye.container),ye.innerTracker.setTracking(!1),ye.outerTracker.setTracking(!1),R.miniViewers[ht.id]=ye,ht.activePanel=!0}}function a(R){var k=R.eventSource.element;this.scroll==="horizontal"?k.style.marginBottom="0px":k.style.marginLeft="0px"}function w(R){var k=R.eventSource.element;this.scroll==="horizontal"?k.style.marginBottom="-"+n.getElementSize(k).y/2+"px":k.style.marginLeft="-"+n.getElementSize(k).x/2+"px"}function _(R){if(!R.ctrl&&!R.alt&&!R.meta)switch(R.keyCode){case 38:m.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),R.preventDefault=!0;break;case 40:m.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),R.preventDefault=!0;break;case 37:m.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),R.preventDefault=!0;break;case 39:m.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),R.preventDefault=!0;break;default:R.preventDefault=!1;break}else R.preventDefault=!1}function A(R){if(!R.ctrl&&!R.alt&&!R.meta)switch(R.keyCode){case 61:m.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),R.preventDefault=!0;break;case 45:m.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),R.preventDefault=!0;break;case 48:case 119:case 87:m.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),R.preventDefault=!0;break;case 115:case 83:m.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),R.preventDefault=!0;break;case 97:m.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),R.preventDefault=!0;break;case 100:m.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),R.preventDefault=!0;break;default:R.preventDefault=!1;break}else R.preventDefault=!1}}(ae),function(n){n.DisplayRect=function(o,u,h,m,y,a){n.Rect.apply(this,[o,u,h,m]),this.minLevel=y,this.maxLevel=a},n.extend(n.DisplayRect.prototype,n.Rect.prototype)}(ae),function(n){n.Spring=function(u){var h=arguments;typeof u!="object"&&(u={initial:h.length&&typeof h[0]=="number"?h[0]:void 0,springStiffness:h.length>1?h[1].springStiffness:5,animationTime:h.length>1?h[1].animationTime:1.5}),n.console.assert(typeof u.springStiffness=="number"&&u.springStiffness!==0,"[OpenSeadragon.Spring] options.springStiffness must be a non-zero number"),n.console.assert(typeof u.animationTime=="number"&&u.animationTime>=0,"[OpenSeadragon.Spring] options.animationTime must be a number greater than or equal to 0"),u.exponential&&(this._exponential=!0,delete u.exponential),n.extend(!0,this,u),this.current={value:typeof this.initial=="number"?this.initial:this._exponential?0:1,time:n.now()},n.console.assert(!this._exponential||this.current.value!==0,"[OpenSeadragon.Spring] value must be non-zero for exponential springs"),this.start={value:this.current.value,time:this.current.time},this.target={value:this.current.value,time:this.current.time},this._exponential&&(this.start._logValue=Math.log(this.start.value),this.target._logValue=Math.log(this.target.value),this.current._logValue=Math.log(this.current.value))},n.Spring.prototype={resetTo:function(u){n.console.assert(!this._exponential||u!==0,"[OpenSeadragon.Spring.resetTo] target must be non-zero for exponential springs"),this.start.value=this.target.value=this.current.value=u,this.start.time=this.target.time=this.current.time=n.now(),this._exponential&&(this.start._logValue=Math.log(this.start.value),this.target._logValue=Math.log(this.target.value),this.current._logValue=Math.log(this.current.value))},springTo:function(u){n.console.assert(!this._exponential||u!==0,"[OpenSeadragon.Spring.springTo] target must be non-zero for exponential springs"),this.start.value=this.current.value,this.start.time=this.current.time,this.target.value=u,this.target.time=this.start.time+1e3*this.animationTime,this._exponential&&(this.start._logValue=Math.log(this.start.value),this.target._logValue=Math.log(this.target.value))},shiftBy:function(u){this.start.value+=u,this.target.value+=u,this._exponential&&(n.console.assert(this.target.value!==0&&this.start.value!==0,"[OpenSeadragon.Spring.shiftBy] spring value must be non-zero for exponential springs"),this.start._logValue=Math.log(this.start.value),this.target._logValue=Math.log(this.target.value))},setExponential:function(u){this._exponential=u,this._exponential&&(n.console.assert(this.current.value!==0&&this.target.value!==0&&this.start.value!==0,"[OpenSeadragon.Spring.setExponential] spring value must be non-zero for exponential springs"),this.start._logValue=Math.log(this.start.value),this.target._logValue=Math.log(this.target.value),this.current._logValue=Math.log(this.current.value))},update:function(){this.current.time=n.now();let u,h;if(this._exponential?(u=this.start._logValue,h=this.target._logValue):(u=this.start.value,h=this.target.value),this.current.time>=this.target.time)this.current.value=this.target.value;else{let m=u+(h-u)*o(this.springStiffness,(this.current.time-this.start.time)/(this.target.time-this.start.time));this._exponential?this.current.value=Math.exp(m):this.current.value=m}return this.current.value!==this.target.value},isAtTargetValue:function(){return this.current.value===this.target.value}};function o(u,h){return(1-Math.exp(u*-h))/(1-Math.exp(-u))}}(ae),function(n){n.ImageJob=function(u){n.extend(!0,this,{timeout:n.DEFAULT_SETTINGS.timeout,jobId:null,tries:0},u),this.data=null,this.userData={},this.errorMsg=null},n.ImageJob.prototype={start:function(){this.tries++;var u=this,h=this.abort;this.jobId=window.setTimeout(function(){u.finish(null,null,"Image load exceeded timeout ("+u.timeout+" ms)")},this.timeout),this.abort=function(){u.source.downloadTileAbort(u),typeof h=="function"&&h()},this.source.downloadTileStart(this)},finish:function(u,h,m){this.data=u,this.request=h,this.errorMsg=m,this.jobId&&window.clearTimeout(this.jobId),this.callback(this)}},n.ImageLoader=function(u){n.extend(!0,this,{jobLimit:n.DEFAULT_SETTINGS.imageLoaderLimit,timeout:n.DEFAULT_SETTINGS.timeout,jobQueue:[],failedTiles:[],jobsInProgress:0},u)},n.ImageLoader.prototype={addJob:function(u){if(!u.source){n.console.error("ImageLoader.prototype.addJob() requires [options.source]. TileSource since new API defines how images are fetched. Creating a dummy TileSource.");var h=n.TileSource.prototype;u.source={downloadTileStart:h.downloadTileStart,downloadTileAbort:h.downloadTileAbort}}var m=this,y=function(_){o(m,_,u.callback)},a={src:u.src,tile:u.tile||{},source:u.source,loadWithAjax:u.loadWithAjax,ajaxHeaders:u.loadWithAjax?u.ajaxHeaders:null,crossOriginPolicy:u.crossOriginPolicy,ajaxWithCredentials:u.ajaxWithCredentials,postData:u.postData,callback:y,abort:u.abort,timeout:this.timeout},w=new n.ImageJob(a);!this.jobLimit||this.jobsInProgress<this.jobLimit?(w.start(),this.jobsInProgress++):this.jobQueue.push(w)},clear:function(){for(var u=0;u<this.jobQueue.length;u++){var h=this.jobQueue[u];typeof h.abort=="function"&&h.abort()}this.jobQueue=[]}};function o(u,h,m){h.errorMsg!==""&&(h.data===null||h.data===void 0)&&h.tries<1+u.tileRetryMax&&u.failedTiles.push(h);var y;u.jobsInProgress--,(!u.jobLimit||u.jobsInProgress<u.jobLimit)&&u.jobQueue.length>0&&(y=u.jobQueue.shift(),y.start(),u.jobsInProgress++),u.tileRetryMax>0&&u.jobQueue.length===0&&(!u.jobLimit||u.jobsInProgress<u.jobLimit)&&u.failedTiles.length>0&&(y=u.failedTiles.shift(),setTimeout(function(){y.start()},u.tileRetryDelay),u.jobsInProgress++),m(h.data,h.errorMsg,h.request)}}(ae),function(n){n.Tile=function(o,u,h,m,y,a,w,_,A,R,k,G){this.level=o,this.x=u,this.y=h,this.bounds=m,this.positionedBounds=new ae.Rect(m.x,m.y,m.width,m.height),this.sourceBounds=R,this.exists=y,this._url=a,this.postData=k,this.context2D=w,this.loadWithAjax=_,this.ajaxHeaders=A,G===void 0&&(n.console.warn("Tile constructor needs 'cacheKey' variable: creation tile cache in Tile class is deprecated. TileSource.prototype.getTileHashKey will be used."),G=n.TileSource.prototype.getTileHashKey(o,u,h,a,A,k)),this.cacheKey=G,this.loaded=!1,this.loading=!1,this.element=null,this.imgElement=null,this.style=null,this.position=null,this.size=null,this.flipped=!1,this.blendStart=null,this.opacity=null,this.squaredDistance=null,this.visibility=null,this.hasTransparency=!1,this.beingDrawn=!1,this.lastTouchTime=0,this.isRightMost=!1,this.isBottomMost=!1},n.Tile.prototype={toString:function(){return this.level+"/"+this.x+"_"+this.y},_hasTransparencyChannel:function(){return console.warn("Tile.prototype._hasTransparencyChannel() has been deprecated and will be removed in the future. Use TileSource.prototype.hasTransparency() instead."),!!this.context2D||this.getUrl().match(".png")},get image(){return n.console.error("[Tile.image] property has been deprecated. Use [Tile.prototype.getImage] instead."),this.getImage()},get url(){return n.console.error("[Tile.url] property has been deprecated. Use [Tile.prototype.getUrl] instead."),this.getUrl()},getImage:function(){return this.cacheImageRecord.getImage()},getUrl:function(){return typeof this._url=="function"?this._url():this._url},getCanvasContext:function(){return this.context2D||this.cacheImageRecord&&this.cacheImageRecord.getRenderedContext()},getScaleForEdgeSmoothing:function(){var o;if(this.cacheImageRecord)o=this.cacheImageRecord.getRenderedContext();else if(this.context2D)o=this.context2D;else return n.console.warn("[Tile.drawCanvas] attempting to get tile scale %s when tile's not cached",this.toString()),1;return o.canvas.width/(this.size.x*n.pixelDensityRatio)},getTranslationForEdgeSmoothing:function(o,u,h){var m=Math.max(1,Math.ceil((h.x-u.x)/2)),y=Math.max(1,Math.ceil((h.y-u.y)/2));return new n.Point(m,y).minus(this.position.times(n.pixelDensityRatio).times(o||1).apply(function(a){return a%1}))},unload:function(){this.imgElement&&this.imgElement.parentNode&&this.imgElement.parentNode.removeChild(this.imgElement),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=null,this.imgElement=null,this.loaded=!1,this.loading=!1}}}(ae),function(n){n.OverlayPlacement=n.Placement,n.OverlayRotationMode=n.freezeObject({NO_ROTATION:1,EXACT:2,BOUNDING_BOX:3}),n.Overlay=function(o,u,h){var m;n.isPlainObject(o)?m=o:m={element:o,location:u,placement:h},this.elementWrapper=document.createElement("div"),this.element=m.element,this.elementWrapper.appendChild(this.element),this.element.id?this.elementWrapper.id="overlay-wrapper-"+this.element.id:this.elementWrapper.id="overlay-wrapper",this.style=this.elementWrapper.style,this._init(m)},n.Overlay.prototype={_init:function(o){this.location=o.location,this.placement=o.placement===void 0?n.Placement.TOP_LEFT:o.placement,this.onDraw=o.onDraw,this.checkResize=o.checkResize===void 0?!0:o.checkResize,this.width=o.width===void 0?null:o.width,this.height=o.height===void 0?null:o.height,this.rotationMode=o.rotationMode||n.OverlayRotationMode.EXACT,this.location instanceof n.Rect&&(this.width=this.location.width,this.height=this.location.height,this.location=this.location.getTopLeft(),this.placement=n.Placement.TOP_LEFT),this.scales=this.width!==null&&this.height!==null,this.bounds=new n.Rect(this.location.x,this.location.y,this.width,this.height),this.position=this.location},adjust:function(o,u){var h=n.Placement.properties[this.placement];h&&(h.isHorizontallyCentered?o.x-=u.x/2:h.isRight&&(o.x-=u.x),h.isVerticallyCentered?o.y-=u.y/2:h.isBottom&&(o.y-=u.y))},destroy:function(){var o=this.elementWrapper,u=this.style;o.parentNode&&(o.parentNode.removeChild(o),o.prevElementParent&&(u.display="none",document.body.appendChild(o))),this.onDraw=null,u.top="",u.left="",u.position="",this.width!==null&&(u.width=""),this.height!==null&&(u.height="");var h=n.getCssPropertyWithVendorPrefix("transformOrigin"),m=n.getCssPropertyWithVendorPrefix("transform");h&&m&&(u[h]="",u[m]="")},drawHTML:function(o,u){var h=this.elementWrapper;h.parentNode!==o&&(h.prevElementParent=h.parentNode,h.prevNextSibling=h.nextSibling,o.appendChild(h),this.style.position="absolute",this.size=n.getElementSize(this.elementWrapper));var m=this._getOverlayPositionAndSize(u),y=m.position,a=this.size=m.size,w="";u.overlayPreserveContentDirection&&(w=u.flipped?" scaleX(-1)":" scaleX(1)");var _=u.flipped?-m.rotate:m.rotate,A=u.flipped?" scaleX(-1)":"";if(this.onDraw)this.onDraw(y,a,this.element);else{var R=this.style,k=this.element.style;k.display="block",R.left=y.x+"px",R.top=y.y+"px",this.width!==null&&(k.width=a.x+"px"),this.height!==null&&(k.height=a.y+"px");var G=n.getCssPropertyWithVendorPrefix("transformOrigin"),W=n.getCssPropertyWithVendorPrefix("transform");G&&W&&(_&&!u.flipped?(k[W]="",R[G]=this._getTransformOrigin(),R[W]="rotate("+_+"deg)"):!_&&u.flipped?(k[W]=w,R[G]=this._getTransformOrigin(),R[W]=A):_&&u.flipped?(k[W]=w,R[G]=this._getTransformOrigin(),R[W]="rotate("+_+"deg)"+A):(k[W]="",R[G]="",R[W]="")),R.display="flex"}},_getOverlayPositionAndSize:function(o){var u=o.pixelFromPoint(this.location,!0),h=this._getSizeInPixels(o);this.adjust(u,h);var m=0;if(o.getRotation(!0)&&this.rotationMode!==n.OverlayRotationMode.NO_ROTATION)if(this.rotationMode===n.OverlayRotationMode.BOUNDING_BOX&&this.width!==null&&this.height!==null){var y=new n.Rect(u.x,u.y,h.x,h.y),a=this._getBoundingBox(y,o.getRotation(!0));u=a.getTopLeft(),h=a.getSize()}else m=o.getRotation(!0);return o.flipped&&(u.x=o.getContainerSize().x-u.x),{position:u,size:h,rotate:m}},_getSizeInPixels:function(o){var u=this.size.x,h=this.size.y;if(this.width!==null||this.height!==null){var m=o.deltaPixelsFromPointsNoRotate(new n.Point(this.width||0,this.height||0),!0);this.width!==null&&(u=m.x),this.height!==null&&(h=m.y)}if(this.checkResize&&(this.width===null||this.height===null)){var y=this.size=n.getElementSize(this.elementWrapper);this.width===null&&(u=y.x),this.height===null&&(h=y.y)}return new n.Point(u,h)},_getBoundingBox:function(o,u){var h=this._getPlacementPoint(o);return o.rotate(u,h).getBoundingBox()},_getPlacementPoint:function(o){var u=new n.Point(o.x,o.y),h=n.Placement.properties[this.placement];return h&&(h.isHorizontallyCentered?u.x+=o.width/2:h.isRight&&(u.x+=o.width),h.isVerticallyCentered?u.y+=o.height/2:h.isBottom&&(u.y+=o.height)),u},_getTransformOrigin:function(){var o="",u=n.Placement.properties[this.placement];return u&&(u.isLeft?o="left":u.isRight&&(o="right"),u.isTop?o+=" top":u.isBottom&&(o+=" bottom")),o},update:function(o,u){var h=n.isPlainObject(o)?o:{location:o,placement:u};this._init({location:h.location||this.location,placement:h.placement!==void 0?h.placement:this.placement,onDraw:h.onDraw||this.onDraw,checkResize:h.checkResize||this.checkResize,width:h.width!==void 0?h.width:this.width,height:h.height!==void 0?h.height:this.height,rotationMode:h.rotationMode||this.rotationMode})},getBounds:function(o){n.console.assert(o,"A viewport must now be passed to Overlay.getBounds.");var u=this.width,h=this.height;if(u===null||h===null){var m=o.deltaPointsFromPixelsNoRotate(this.size,!0);u===null&&(u=m.x),h===null&&(h=m.y)}var y=this.location.clone();return this.adjust(y,new n.Point(u,h)),this._adjustBoundsForRotation(o,new n.Rect(y.x,y.y,u,h))},_adjustBoundsForRotation:function(o,u){if(!o||o.getRotation(!0)===0||this.rotationMode===n.OverlayRotationMode.EXACT)return u;if(this.rotationMode===n.OverlayRotationMode.BOUNDING_BOX){if(this.width===null||this.height===null)return u;var h=this._getOverlayPositionAndSize(o);return o.viewerElementToViewportRectangle(new n.Rect(h.position.x,h.position.y,h.size.x,h.size.y))}return u.rotate(-o.getRotation(!0),this._getPlacementPoint(u))}}}(ae),function(n){const o=n;o.DrawerBase=class{constructor(h){n.console.assert(h.viewer,"[Drawer] options.viewer is required"),n.console.assert(h.viewport,"[Drawer] options.viewport is required"),n.console.assert(h.element,"[Drawer] options.element is required"),this.viewer=h.viewer,this.viewport=h.viewport,this.debugGridColor=typeof h.debugGridColor=="string"?[h.debugGridColor]:h.debugGridColor||n.DEFAULT_SETTINGS.debugGridColor,this.options=h.options||{},this.container=n.getElement(h.element),this._renderingTarget=this._createDrawingElement(),this.canvas.style.width="100%",this.canvas.style.height="100%",this.canvas.style.position="absolute",this.canvas.style.left="0",n.setElementOpacity(this.canvas,this.viewer.opacity,!0),n.setElementPointerEventsNone(this.canvas),n.setElementTouchActionNone(this.canvas),this.container.style.textAlign="left",this.container.appendChild(this.canvas),this._checkForAPIOverrides()}get canvas(){return this._renderingTarget}get element(){return n.console.error("Drawer.element is deprecated. Use Drawer.container instead."),this.container}getType(){n.console.error("Drawer.getType must be implemented by child class")}static isSupported(){n.console.error("Drawer.isSupported must be implemented by child class")}_createDrawingElement(){return n.console.error("Drawer._createDrawingElement must be implemented by child class"),null}draw(h){n.console.error("Drawer.draw must be implemented by child class")}canRotate(){n.console.error("Drawer.canRotate must be implemented by child class")}destroy(){n.console.error("Drawer.destroy must be implemented by child class")}minimumOverlapRequired(h){return!1}setImageSmoothingEnabled(h){n.console.error("Drawer.setImageSmoothingEnabled must be implemented by child class")}drawDebuggingRect(h){n.console.warn("[drawer].drawDebuggingRect is not implemented by this drawer")}clear(){n.console.warn("[drawer].clear() is deprecated. The drawer is responsible for clearing itself as needed before drawing tiles.")}_checkForAPIOverrides(){if(this._createDrawingElement===n.DrawerBase.prototype._createDrawingElement)throw new Error("[drawer]._createDrawingElement must be implemented by child class");if(this.draw===n.DrawerBase.prototype.draw)throw new Error("[drawer].draw must be implemented by child class");if(this.canRotate===n.DrawerBase.prototype.canRotate)throw new Error("[drawer].canRotate must be implemented by child class");if(this.destroy===n.DrawerBase.prototype.destroy)throw new Error("[drawer].destroy must be implemented by child class");if(this.setImageSmoothingEnabled===n.DrawerBase.prototype.setImageSmoothingEnabled)throw new Error("[drawer].setImageSmoothingEnabled must be implemented by child class")}viewportToDrawerRectangle(h){var m=this.viewport.pixelFromPointNoRotate(h.getTopLeft(),!0),y=this.viewport.deltaPixelsFromPointsNoRotate(h.getSize(),!0);return new n.Rect(m.x*n.pixelDensityRatio,m.y*n.pixelDensityRatio,y.x*n.pixelDensityRatio,y.y*n.pixelDensityRatio)}viewportCoordToDrawerCoord(h){var m=this.viewport.pixelFromPointNoRotate(h,!0);return new n.Point(m.x*n.pixelDensityRatio,m.y*n.pixelDensityRatio)}_calculateCanvasSize(){var h=n.pixelDensityRatio,m=this.viewport.getContainerSize();return new o.Point(Math.round(m.x*h),Math.round(m.y*h))}_raiseTiledImageDrawnEvent(h,m){this.viewer&&this.viewer.raiseEvent("tiled-image-drawn",{tiledImage:h,tiles:m})}_raiseDrawerErrorEvent(h,m){this.viewer&&this.viewer.raiseEvent("drawer-error",{tiledImage:h,drawer:this,error:m})}}}(ae),function(n){const o=n;class u extends o.DrawerBase{constructor(m){super(m),this.viewer.rejectEventHandler("tile-drawing","The HTMLDrawer does not raise the tile-drawing event"),this.viewer.allowEventHandler("tile-drawn")}static isSupported(){return!0}getType(){return"html"}minimumOverlapRequired(m){return!0}_createDrawingElement(){return n.makeNeutralElement("div")}draw(m){var y=this;this._prepareNewFrame(),m.forEach(function(a){a.opacity!==0&&y._drawTiles(a)})}canRotate(){return!1}destroy(){this.container.removeChild(this.canvas)}setImageSmoothingEnabled(){}_prepareNewFrame(){this.canvas.innerHTML=""}_drawTiles(m){var y=m.getTilesToDraw().map(_=>_.tile);if(!(m.opacity===0||y.length===0&&!m.placeholderFillStyle))for(var a=y.length-1;a>=0;a--){var w=y[a];this._drawTile(w),this.viewer&&this.viewer.raiseEvent("tile-drawn",{tiledImage:m,tile:w})}}_drawTile(m){n.console.assert(m,"[Drawer._drawTile] tile is required");let y=this.canvas;if(!m.cacheImageRecord){n.console.warn("[Drawer._drawTileToHTML] attempting to draw tile %s when it's not cached",m.toString());return}if(!m.loaded){n.console.warn("Attempting to draw tile %s when it's not yet loaded.",m.toString());return}if(!m.element){var a=m.getImage();if(!a)return;m.element=n.makeNeutralElement("div"),m.imgElement=a.cloneNode(),m.imgElement.style.msInterpolationMode="nearest-neighbor",m.imgElement.style.width="100%",m.imgElement.style.height="100%",m.style=m.element.style,m.style.position="absolute"}m.element.parentNode!==y&&y.appendChild(m.element),m.imgElement.parentNode!==m.element&&m.element.appendChild(m.imgElement),m.style.top=m.position.y+"px",m.style.left=m.position.x+"px",m.style.height=m.size.y+"px",m.style.width=m.size.x+"px",m.flipped&&(m.style.transform="scaleX(-1)"),n.setElementOpacity(m.element,m.opacity)}}n.HTMLDrawer=u}(ae),function(n){const o=n;class u extends o.DrawerBase{constructor(_){super(_),this.context=this.canvas.getContext("2d"),this.sketchCanvas=null,this.sketchContext=null,this._imageSmoothingEnabled=!0,this.viewer.allowEventHandler("tile-drawn"),this.viewer.allowEventHandler("tile-drawing")}static isSupported(){return n.supportsCanvas}getType(){return"canvas"}_createDrawingElement(){let _=n.makeNeutralElement("canvas"),A=this._calculateCanvasSize();return _.width=A.x,_.height=A.y,_}draw(_){this._prepareNewFrame(),this.viewer.viewport.getFlip()!==this._viewportFlipped&&this._flip();for(const A of _)A.opacity!==0&&this._drawTiles(A)}canRotate(){return!0}destroy(){this.canvas.width=1,this.canvas.height=1,this.sketchCanvas=null,this.sketchContext=null,this.container.removeChild(this.canvas)}minimumOverlapRequired(_){return!0}setImageSmoothingEnabled(_){this._imageSmoothingEnabled=!!_,this._updateImageSmoothingEnabled(this.context),this.viewer.forceRedraw()}drawDebuggingRect(_){var A=this.context;A.save(),A.lineWidth=2*n.pixelDensityRatio,A.strokeStyle=this.debugGridColor[0],A.fillStyle=this.debugGridColor[0],A.strokeRect(_.x*n.pixelDensityRatio,_.y*n.pixelDensityRatio,_.width*n.pixelDensityRatio,_.height*n.pixelDensityRatio),A.restore()}get _viewportFlipped(){return this.context.getTransform().a<0}_raiseTileDrawingEvent(_,A,R,k){this.viewer.raiseEvent("tile-drawing",{tiledImage:_,context:A,tile:R,rendered:k})}_prepareNewFrame(){var _=this._calculateCanvasSize();if((this.canvas.width!==_.x||this.canvas.height!==_.y)&&(this.canvas.width=_.x,this.canvas.height=_.y,this._updateImageSmoothingEnabled(this.context),this.sketchCanvas!==null)){var A=this._calculateSketchCanvasSize();this.sketchCanvas.width=A.x,this.sketchCanvas.height=A.y,this._updateImageSmoothingEnabled(this.sketchContext)}this._clear()}_clear(_,A){var R=this._getContext(_);if(A)R.clearRect(A.x,A.y,A.width,A.height);else{var k=R.canvas;R.clearRect(0,0,k.width,k.height)}}_drawTiles(_){var A=_.getTilesToDraw().map(Fe=>Fe.tile);if(!(_.opacity===0||A.length===0&&!_.placeholderFillStyle)){var R=A[0],k;R&&(k=_.opacity<1||_.compositeOperation&&_.compositeOperation!=="source-over"||!_._isBottomItem()&&_.source.hasTransparency(R.context2D,R.getUrl(),R.ajaxHeaders,R.postData));var G,W,O=this.viewport.getZoom(!0),$=_.viewportToImageZoom(O);A.length>1&&$>_.smoothTileEdgesMinZoom&&!_.iOSDevice&&_.getRotation(!0)%360===0&&(k=!0,G=R.getScaleForEdgeSmoothing(),W=R.getTranslationForEdgeSmoothing(G,this._getCanvasSize(!1),this._getCanvasSize(!0)));var ye;k&&(G||(ye=this.viewport.viewportToViewerElementRectangle(_.getClippedBounds(!0)).getIntegerBoundingBox(),ye=ye.times(n.pixelDensityRatio)),this._clear(!0,ye)),G||this._setRotations(_,k);var we=!1;if(_._clip){this._saveContext(k);var ht=_.imageToViewportRectangle(_._clip,!0);ht=ht.rotate(-_.getRotation(!0),_._getRotationPoint(!0));var tt=this.viewportToDrawerRectangle(ht);G&&(tt=tt.times(G)),W&&(tt=tt.translate(W)),this._setClip(tt,k),we=!0}if(_._croppingPolygons){var Ve=this;we||this._saveContext(k);try{var Tt=_._croppingPolygons.map(function(Fe){return Fe.map(function(Lt){var ft=_.imageToViewportCoordinates(Lt.x,Lt.y,!0).rotate(-_.getRotation(!0),_._getRotationPoint(!0)),_t=Ve.viewportCoordToDrawerCoord(ft);return G&&(_t=_t.times(G)),W&&(_t=_t.plus(W)),_t})});this._clipWithPolygons(Tt,k)}catch(Fe){n.console.error(Fe)}we=!0}if(_._hasOpaqueTile=!1,_.placeholderFillStyle&&_._hasOpaqueTile===!1){let Fe=this.viewportToDrawerRectangle(_.getBoundsNoRotate(!0));G&&(Fe=Fe.times(G)),W&&(Fe=Fe.translate(W));let Lt=null;typeof _.placeholderFillStyle=="function"?Lt=_.placeholderFillStyle(_,this.context):Lt=_.placeholderFillStyle,this._drawRectangle(Fe,Lt,k)}var Q=a(_.subPixelRoundingForTransparency),Ct=!1;if(Q===n.SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS)Ct=!0;else if(Q===n.SUBPIXEL_ROUNDING_OCCURRENCES.ONLY_AT_REST){var it=this.viewer&&this.viewer.isAnimating();Ct=!it}for(var wt=0;wt<A.length;wt++)R=A[wt],this._drawTile(R,_,k,G,W,Ct,_.source),this.viewer&&this.viewer.raiseEvent("tile-drawn",{tiledImage:_,tile:R});we&&this._restoreContext(k),G||(_.getRotation(!0)%360!==0&&this._restoreRotationChanges(k),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(k)),k&&(G&&this._setRotations(_),this.blendSketch({opacity:_.opacity,scale:G,translate:W,compositeOperation:_.compositeOperation,bounds:ye}),G&&(_.getRotation(!0)%360!==0&&this._restoreRotationChanges(!1),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(!1))),this._drawDebugInfo(_,A),this._raiseTiledImageDrawnEvent(_,A)}}_drawDebugInfo(_,A){if(_.debugMode)for(var R=A.length-1;R>=0;R--){var k=A[R];try{this._drawDebugInfoOnTile(k,A.length,R,_)}catch(G){n.console.error(G)}}}_clipWithPolygons(_,A){var R=this._getContext(A);R.beginPath();for(const k of _)for(const[G,W]of k.entries())R[G===0?"moveTo":"lineTo"](W.x,W.y);R.clip()}_drawTile(_,A,R,k,G,W,O){n.console.assert(_,"[Drawer._drawTile] tile is required"),n.console.assert(A,"[Drawer._drawTile] drawingHandler is required");var $=this._getContext(R);k=k||1,this._drawTileToCanvas(_,$,A,k,G,W,O)}_drawTileToCanvas(_,A,R,k,G,W,O){var $=_.position.times(n.pixelDensityRatio),ye=_.size.times(n.pixelDensityRatio),we;if(!_.context2D&&!_.cacheImageRecord){n.console.warn("[Drawer._drawTileToCanvas] attempting to draw tile %s when it's not cached",_.toString());return}if(we=_.getCanvasContext(),!_.loaded||!we){n.console.warn("Attempting to draw tile %s when it's not yet loaded.",_.toString());return}A.save(),typeof k=="number"&&k!==1&&($=$.times(k),ye=ye.times(k)),G instanceof n.Point&&($=$.plus(G)),A.globalAlpha===1&&_.hasTransparency&&(W&&($.x=Math.round($.x),$.y=Math.round($.y),ye.x=Math.round(ye.x),ye.y=Math.round(ye.y)),A.clearRect($.x,$.y,ye.x,ye.y)),this._raiseTileDrawingEvent(R,A,_,we);var ht,tt;_.sourceBounds?(ht=Math.min(_.sourceBounds.width,we.canvas.width),tt=Math.min(_.sourceBounds.height,we.canvas.height)):(ht=we.canvas.width,tt=we.canvas.height),A.translate($.x+ye.x/2,0),_.flipped&&A.scale(-1,1),A.drawImage(we.canvas,0,0,ht,tt,-ye.x/2,$.y,ye.x,ye.y),A.restore()}_getContext(_){var A=this.context;if(_){if(this.sketchCanvas===null){this.sketchCanvas=document.createElement("canvas");var R=this._calculateSketchCanvasSize();if(this.sketchCanvas.width=R.x,this.sketchCanvas.height=R.y,this.sketchContext=this.sketchCanvas.getContext("2d"),this.viewport.getRotation()===0){var k=this;this.viewer.addHandler("rotate",function G(){if(k.viewport.getRotation()!==0){k.viewer.removeHandler("rotate",G);var W=k._calculateSketchCanvasSize();k.sketchCanvas.width=W.x,k.sketchCanvas.height=W.y}})}this._updateImageSmoothingEnabled(this.sketchContext)}A=this.sketchContext}return A}_saveContext(_){this._getContext(_).save()}_restoreContext(_){this._getContext(_).restore()}_setClip(_,A){var R=this._getContext(A);R.beginPath(),R.rect(_.x,_.y,_.width,_.height),R.clip()}_drawRectangle(_,A,R){var k=this._getContext(R);k.save(),k.fillStyle=A,k.fillRect(_.x,_.y,_.width,_.height),k.restore()}blendSketch(_,A,R,k){var G=_;n.isPlainObject(G)||(G={opacity:_,scale:A,translate:R,compositeOperation:k}),_=G.opacity,k=G.compositeOperation;var W=G.bounds;if(this.context.save(),this.context.globalAlpha=_,k&&(this.context.globalCompositeOperation=k),W)W.x<0&&(W.width+=W.x,W.x=0),W.x+W.width>this.canvas.width&&(W.width=this.canvas.width-W.x),W.y<0&&(W.height+=W.y,W.y=0),W.y+W.height>this.canvas.height&&(W.height=this.canvas.height-W.y),this.context.drawImage(this.sketchCanvas,W.x,W.y,W.width,W.height,W.x,W.y,W.width,W.height);else{A=G.scale||1,R=G.translate;var O=R instanceof n.Point?R:new n.Point(0,0),$=0,ye=0;if(R){var we=this.sketchCanvas.width-this.canvas.width,ht=this.sketchCanvas.height-this.canvas.height;$=Math.round(we/2),ye=Math.round(ht/2)}this.context.drawImage(this.sketchCanvas,O.x-$*A,O.y-ye*A,(this.canvas.width+2*$)*A,(this.canvas.height+2*ye)*A,-$,-ye,this.canvas.width+2*$,this.canvas.height+2*ye)}this.context.restore()}_drawDebugInfoOnTile(_,A,R,k){var G=this.viewer.world.getIndexOfItem(k)%this.debugGridColor.length,W=this.context;W.save(),W.lineWidth=2*n.pixelDensityRatio,W.font="small-caps bold "+13*n.pixelDensityRatio+"px arial",W.strokeStyle=this.debugGridColor[G],W.fillStyle=this.debugGridColor[G],this._setRotations(k),this._viewportFlipped&&this._flip({point:_.position.plus(_.size.divide(2))}),W.strokeRect(_.position.x*n.pixelDensityRatio,_.position.y*n.pixelDensityRatio,_.size.x*n.pixelDensityRatio,_.size.y*n.pixelDensityRatio);var O=(_.position.x+_.size.x/2)*n.pixelDensityRatio,$=(_.position.y+_.size.y/2)*n.pixelDensityRatio;W.translate(O,$);const ye=this.viewport.getRotation(!0);W.rotate(Math.PI/180*-ye),W.translate(-O,-$),_.x===0&&_.y===0&&(W.fillText("Zoom: "+this.viewport.getZoom(),_.position.x*n.pixelDensityRatio,(_.position.y-30)*n.pixelDensityRatio),W.fillText("Pan: "+this.viewport.getBounds().toString(),_.position.x*n.pixelDensityRatio,(_.position.y-20)*n.pixelDensityRatio)),W.fillText("Level: "+_.level,(_.position.x+10)*n.pixelDensityRatio,(_.position.y+20)*n.pixelDensityRatio),W.fillText("Column: "+_.x,(_.position.x+10)*n.pixelDensityRatio,(_.position.y+30)*n.pixelDensityRatio),W.fillText("Row: "+_.y,(_.position.x+10)*n.pixelDensityRatio,(_.position.y+40)*n.pixelDensityRatio),W.fillText("Order: "+R+" of "+A,(_.position.x+10)*n.pixelDensityRatio,(_.position.y+50)*n.pixelDensityRatio),W.fillText("Size: "+_.size.toString(),(_.position.x+10)*n.pixelDensityRatio,(_.position.y+60)*n.pixelDensityRatio),W.fillText("Position: "+_.position.toString(),(_.position.x+10)*n.pixelDensityRatio,(_.position.y+70)*n.pixelDensityRatio),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(),k.getRotation(!0)%360!==0&&this._restoreRotationChanges(),W.restore()}_updateImageSmoothingEnabled(_){_.msImageSmoothingEnabled=this._imageSmoothingEnabled,_.imageSmoothingEnabled=this._imageSmoothingEnabled}_getCanvasSize(_){var A=this._getContext(_).canvas;return new n.Point(A.width,A.height)}_getCanvasCenter(){return new n.Point(this.canvas.width/2,this.canvas.height/2)}_setRotations(_,A=!1){var R=!1;this.viewport.getRotation(!0)%360!==0&&(this._offsetForRotation({degrees:this.viewport.getRotation(!0),useSketch:A,saveContext:R}),R=!1),_.getRotation(!0)%360!==0&&this._offsetForRotation({degrees:_.getRotation(!0),point:this.viewport.pixelFromPointNoRotate(_._getRotationPoint(!0),!0),useSketch:A,saveContext:R})}_offsetForRotation(_){var A=_.point?_.point.times(n.pixelDensityRatio):this._getCanvasCenter(),R=this._getContext(_.useSketch);R.save(),R.translate(A.x,A.y),R.rotate(Math.PI/180*_.degrees),R.translate(-A.x,-A.y)}_flip(_){_=_||{};var A=_.point?_.point.times(n.pixelDensityRatio):this._getCanvasCenter(),R=this._getContext(_.useSketch);R.translate(A.x,0),R.scale(-1,1),R.translate(-A.x,0)}_restoreRotationChanges(_){var A=this._getContext(_);A.restore()}_calculateCanvasSize(){var _=n.pixelDensityRatio,A=this.viewport.getContainerSize();return{x:Math.round(A.x*_),y:Math.round(A.y*_)}}_calculateSketchCanvasSize(){var _=this._calculateCanvasSize();if(this.viewport.getRotation()===0)return _;var A=Math.ceil(Math.sqrt(_.x*_.x+_.y*_.y));return{x:A,y:A}}}n.CanvasDrawer=u;var h=n.SUBPIXEL_ROUNDING_OCCURRENCES.NEVER;function m(w){return w!==n.SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS&&w!==n.SUBPIXEL_ROUNDING_OCCURRENCES.ONLY_AT_REST&&w!==n.SUBPIXEL_ROUNDING_OCCURRENCES.NEVER}function y(w){return m(w)?h:w}function a(w){if(typeof w=="number")return y(w);if(!w||!n.Browser)return h;var _=w[n.Browser.vendor];return m(_)&&(_=w["*"]),y(_)}}(ae),function(n){const o=n;o.WebGLDrawer=class extends o.DrawerBase{constructor(h){super(h),this._destroyed=!1,this._TextureMap=new Map,this._TileMap=new Map,this._gl=null,this._firstPass=null,this._secondPass=null,this._glFrameBuffer=null,this._renderToTexture=null,this._glFramebufferToCanvasTransform=null,this._outputCanvas=null,this._outputContext=null,this._clippingCanvas=null,this._clippingContext=null,this._renderingCanvas=null,this._backupCanvasDrawer=null,this._imageSmoothingEnabled=!0,this._boundToTileReady=m=>this._tileReadyHandler(m),this._boundToImageUnloaded=m=>this._imageUnloadedHandler(m),this.viewer.addHandler("tile-ready",this._boundToTileReady),this.viewer.addHandler("image-unloaded",this._boundToImageUnloaded),this.viewer.rejectEventHandler("tile-drawn","The WebGLDrawer does not raise the tile-drawn event"),this.viewer.rejectEventHandler("tile-drawing","The WebGLDrawer does not raise the tile-drawing event"),this._setupCanvases(),this._setupRenderer(),this.context=this._outputContext}destroy(){if(this._destroyed)return;let h=this._gl;var m=h.getParameter(h.MAX_TEXTURE_IMAGE_UNITS);for(let a=0;a<m;++a)h.activeTexture(h.TEXTURE0+a),h.bindTexture(h.TEXTURE_2D,null),h.bindTexture(h.TEXTURE_CUBE_MAP,null);h.bindBuffer(h.ARRAY_BUFFER,null),h.bindBuffer(h.ELEMENT_ARRAY_BUFFER,null),h.bindRenderbuffer(h.RENDERBUFFER,null),h.bindFramebuffer(h.FRAMEBUFFER,null),this._unloadTextures(),h.deleteBuffer(this._secondPass.bufferOutputPosition),h.deleteFramebuffer(this._glFrameBuffer),this._renderingCanvas.width=this._renderingCanvas.height=1,this._clippingCanvas.width=this._clippingCanvas.height=1,this._outputCanvas.width=this._outputCanvas.height=1,this._renderingCanvas=null,this._clippingCanvas=this._clippingContext=null,this._outputCanvas=this._outputContext=null;let y=h.getExtension("WEBGL_lose_context");y&&y.loseContext(),this.viewer.removeHandler("tile-ready",this._boundToTileReady),this.viewer.removeHandler("image-unloaded",this._boundToImageUnloaded),this.viewer.removeHandler("resize",this._resizeHandler),this._gl=null,this._backupCanvasDrawer&&(this._backupCanvasDrawer.destroy(),this._backupCanvasDrawer=null),this.container.removeChild(this.canvas),this.viewer.drawer===this&&(this.viewer.drawer=null),this._destroyed=!0}canRotate(){return!0}static isSupported(){let h=document.createElement("canvas"),m=n.isFunction(h.getContext)&&h.getContext("webgl"),y=m&&m.getExtension("WEBGL_lose_context");return y&&y.loseContext(),!!m}getType(){return"webgl"}minimumOverlapRequired(h){return h.isTainted()}_createDrawingElement(){let h=n.makeNeutralElement("canvas"),m=this._calculateCanvasSize();return h.width=m.x,h.height=m.y,h}_getBackupCanvasDrawer(){return this._backupCanvasDrawer||(this._backupCanvasDrawer=this.viewer.requestDrawer("canvas",{mainDrawer:!1}),this._backupCanvasDrawer.canvas.style.setProperty("visibility","hidden")),this._backupCanvasDrawer}draw(h){let m=this._gl;const y=this.viewport.getBoundsNoRotateWithMargins(!0);let a={bounds:y,center:new o.Point(y.x+y.width/2,y.y+y.height/2),rotation:this.viewport.getRotation(!0)*Math.PI/180},w=this.viewport.flipped?-1:1,_=n.Mat3.makeTranslation(-a.center.x,-a.center.y),A=n.Mat3.makeScaling(2/a.bounds.width*w,-2/a.bounds.height),R=n.Mat3.makeRotation(-a.rotation),k=A.multiply(R).multiply(_);m.bindFramebuffer(m.FRAMEBUFFER,null),m.clear(m.COLOR_BUFFER_BIT),this._outputContext.clearRect(0,0,this._outputCanvas.width,this._outputCanvas.height);let G=!1;h.forEach((W,O)=>{if(W.isTainted()){G&&(this._outputContext.drawImage(this._renderingCanvas,0,0),m.bindFramebuffer(m.FRAMEBUFFER,null),m.clear(m.COLOR_BUFFER_BIT),G=!1);const $=this._getBackupCanvasDrawer();$.draw([W]),this._outputContext.drawImage($.canvas,0,0)}else{let $=W.getTilesToDraw();if(W.placeholderFillStyle&&W._hasOpaqueTile===!1&&this._drawPlaceholder(W),$.length===0||W.getOpacity()===0)return;let ye=$[0],we=W.compositeOperation||this.viewer.compositeOperation||W._clip||W._croppingPolygons||W.debugMode,ht=we||W.opacity<1||ye.hasTransparency;we&&(G&&this._outputContext.drawImage(this._renderingCanvas,0,0),m.bindFramebuffer(m.FRAMEBUFFER,null),m.clear(m.COLOR_BUFFER_BIT)),m.useProgram(this._firstPass.shaderProgram),ht?(m.bindFramebuffer(m.FRAMEBUFFER,this._glFrameBuffer),m.clear(m.COLOR_BUFFER_BIT)):m.bindFramebuffer(m.FRAMEBUFFER,null);let tt=k,Ve=W.getRotation(!0);if(Ve%360!==0){let Fe=n.Mat3.makeRotation(-Ve*Math.PI/180),Lt=W.getBoundsNoRotate(!0).getCenter(),ft=n.Mat3.makeTranslation(Lt.x,Lt.y),_t=n.Mat3.makeTranslation(-Lt.x,-Lt.y),zt=ft.multiply(Fe).multiply(_t);tt=k.multiply(zt)}let Tt=this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS);if(Tt<=0)throw new Error(`WegGL error: bad value for gl parameter MAX_TEXTURE_IMAGE_UNITS (${Tt}). This could happen
7
+ if too many contexts have been created and not released, or there is another problem with the graphics card.`);let Q=new Float32Array(Tt*12),Ct=new Array(Tt),it=new Array(Tt),wt=new Array(Tt);for(let Fe=0;Fe<$.length;Fe++){let Lt=$[Fe].tile,ft=Fe%Tt,_t=ft+1,zt=Lt.getCanvasContext(),dt=zt?this._TextureMap.get(zt.canvas):null;if(dt||(this._tileReadyHandler({tile:Lt,tiledImage:W}),dt=zt?this._TextureMap.get(zt.canvas):null),dt&&this._getTileData(Lt,W,dt,tt,ft,Q,Ct,it,wt),_t===Tt||Fe===$.length-1){for(let Dt=0;Dt<=_t;Dt++)m.activeTexture(m.TEXTURE0+Dt),m.bindTexture(m.TEXTURE_2D,Ct[Dt]);m.bindBuffer(m.ARRAY_BUFFER,this._firstPass.bufferTexturePosition),m.bufferData(m.ARRAY_BUFFER,Q,m.DYNAMIC_DRAW),it.forEach((Dt,Wt)=>{m.uniformMatrix3fv(this._firstPass.uTransformMatrices[Wt],!1,Dt)}),m.uniform1fv(this._firstPass.uOpacities,new Float32Array(wt)),m.bindBuffer(m.ARRAY_BUFFER,this._firstPass.bufferOutputPosition),m.vertexAttribPointer(this._firstPass.aOutputPosition,2,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,this._firstPass.bufferTexturePosition),m.vertexAttribPointer(this._firstPass.aTexturePosition,2,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,this._firstPass.bufferIndex),m.vertexAttribPointer(this._firstPass.aIndex,1,m.FLOAT,!1,0,0),m.drawArrays(m.TRIANGLES,0,6*_t)}}ht&&(m.useProgram(this._secondPass.shaderProgram),m.bindFramebuffer(m.FRAMEBUFFER,null),m.activeTexture(m.TEXTURE0),m.bindTexture(m.TEXTURE_2D,this._renderToTexture),this._gl.uniform1f(this._secondPass.uOpacityMultiplier,W.opacity),m.bindBuffer(m.ARRAY_BUFFER,this._secondPass.bufferTexturePosition),m.vertexAttribPointer(this._secondPass.aTexturePosition,2,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,this._secondPass.bufferOutputPosition),m.vertexAttribPointer(this._secondPass.aOutputPosition,2,m.FLOAT,!1,0,0),m.drawArrays(m.TRIANGLES,0,6)),G=!0,we&&(this._applyContext2dPipeline(W,$,O),G=!1,m.bindFramebuffer(m.FRAMEBUFFER,null),m.clear(m.COLOR_BUFFER_BIT)),O===0&&this._raiseTiledImageDrawnEvent(W,$.map(Fe=>Fe.tile))}}),G&&this._outputContext.drawImage(this._renderingCanvas,0,0)}setImageSmoothingEnabled(h){this._imageSmoothingEnabled!==h&&(this._imageSmoothingEnabled=h,this._unloadTextures(),this.viewer.world.draw())}drawDebuggingRect(h){let m=this._outputContext;m.save(),m.lineWidth=2*n.pixelDensityRatio,m.strokeStyle=this.debugGridColor[0],m.fillStyle=this.debugGridColor[0],m.strokeRect(h.x*n.pixelDensityRatio,h.y*n.pixelDensityRatio,h.width*n.pixelDensityRatio,h.height*n.pixelDensityRatio),m.restore()}_getTextureDataFromTile(h){return h.getCanvasContext().canvas}_applyContext2dPipeline(h,m,y){if(this._outputContext.save(),this._outputContext.globalCompositeOperation=y===0?null:h.compositeOperation||this.viewer.compositeOperation,h._croppingPolygons||h._clip?(this._renderToClippingCanvas(h),this._outputContext.drawImage(this._clippingCanvas,0,0)):this._outputContext.drawImage(this._renderingCanvas,0,0),this._outputContext.restore(),h.debugMode){const a=this.viewer.viewport.getFlip();a&&this._flip(),this._drawDebugInfo(m,h,a),a&&this._flip()}}_getTileData(h,m,y,a,w,_,A,R,k){let G=y.texture,W=y.position;_.set(W,w*12);let O=this._calculateOverlapFraction(h,m),$=h.positionedBounds.width*O.x,ye=h.positionedBounds.height*O.y,we=h.positionedBounds.x+(h.x===0?0:$),ht=h.positionedBounds.y+(h.y===0?0:ye),tt=h.positionedBounds.x+h.positionedBounds.width-(h.isRightMost?0:$),Ve=h.positionedBounds.y+h.positionedBounds.height-(h.isBottomMost?0:ye),Tt=tt-we,Q=Ve-ht,Ct=new n.Mat3([Tt,0,0,0,Q,0,we,ht,1]);if(h.flipped){let wt=n.Mat3.makeTranslation(.5,0),Fe=n.Mat3.makeTranslation(-.5,0),Lt=wt.multiply(n.Mat3.makeScaling(-1,1)).multiply(Fe);Ct=Ct.multiply(Lt)}let it=a.multiply(Ct);k[w]=h.opacity,A[w]=G,R[w]=it.values}_textureFilter(){return this._imageSmoothingEnabled?this._gl.LINEAR:this._gl.NEAREST}_setupRenderer(){let h=this._gl;h||n.console.error("_setupCanvases must be called before _setupRenderer"),this._unitQuad=this._makeQuadVertexBuffer(0,1,0,1),this._makeFirstPassShaderProgram(),this._makeSecondPassShaderProgram(),this._renderToTexture=h.createTexture(),h.activeTexture(h.TEXTURE0),h.bindTexture(h.TEXTURE_2D,this._renderToTexture),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,this._renderingCanvas.width,this._renderingCanvas.height,0,h.RGBA,h.UNSIGNED_BYTE,null),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,this._textureFilter()),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),this._glFrameBuffer=h.createFramebuffer(),h.bindFramebuffer(h.FRAMEBUFFER,this._glFrameBuffer),h.framebufferTexture2D(h.FRAMEBUFFER,h.COLOR_ATTACHMENT0,h.TEXTURE_2D,this._renderToTexture,0),h.enable(h.BLEND),h.blendFunc(h.ONE,h.ONE_MINUS_SRC_ALPHA)}_makeFirstPassShaderProgram(){let h=this._glNumTextures=this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS),m=()=>[...Array(h).keys()].map(G=>`uniform mat3 u_matrix_${G};`).join(`
8
+ `),y=()=>[...Array(h).keys()].map(G=>`${G>0?"else ":""}if(int(a_index) == ${G}) { transform_matrix = u_matrix_${G}; }`).join(`
9
9
  `);const a=`
10
10
  attribute vec2 a_output_position;
11
11
  attribute vec2 a_texture_position;
12
12
  attribute float a_index;
13
13
 
14
- ${v()} // create a uniform mat3 for each potential tile to draw
14
+ ${m()} // create a uniform mat3 for each potential tile to draw
15
15
 
16
16
  varying vec2 v_texture_position;
17
17
  varying float v_image_index;
@@ -31,9 +31,9 @@ function Pe(n){return new Pe.Viewer(n)}(function(n){n.version={versionStr:"5.0.1
31
31
  precision mediump float;
32
32
 
33
33
  // our textures
34
- uniform sampler2D u_images[${c}];
34
+ uniform sampler2D u_images[${h}];
35
35
  // our opacities
36
- uniform float u_opacities[${c}];
36
+ uniform float u_opacities[${h}];
37
37
 
38
38
  // the varyings passed in from the vertex shader.
39
39
  varying vec2 v_texture_position;
@@ -41,13 +41,13 @@ function Pe(n){return new Pe.Viewer(n)}(function(n){n.version={versionStr:"5.0.1
41
41
 
42
42
  void main() {
43
43
  // can't index directly with a variable, need to use a loop iterator hack
44
- for(int i = 0; i < ${c}; ++i){
44
+ for(int i = 0; i < ${h}; ++i){
45
45
  if(i == int(v_image_index)){
46
46
  gl_FragColor = texture2D(u_images[i], v_texture_position) * u_opacities[i];
47
47
  }
48
48
  }
49
49
  }
50
- `;let _=this._gl,T=this.constructor.initShaderProgram(_,a,w);_.useProgram(T),this._firstPass={shaderProgram:T,aOutputPosition:_.getAttribLocation(T,"a_output_position"),aTexturePosition:_.getAttribLocation(T,"a_texture_position"),aIndex:_.getAttribLocation(T,"a_index"),uTransformMatrices:[...Array(this._glNumTextures).keys()].map(G=>_.getUniformLocation(T,`u_matrix_${G}`)),uImages:_.getUniformLocation(T,"u_images"),uOpacities:_.getUniformLocation(T,"u_opacities"),bufferOutputPosition:_.createBuffer(),bufferTexturePosition:_.createBuffer(),bufferIndex:_.createBuffer()},_.uniform1iv(this._firstPass.uImages,[...Array(c).keys()]);let I=new Float32Array(c*12);for(let G=0;G<c;++G)I.set(Float32Array.from(this._unitQuad),G*12);_.bindBuffer(_.ARRAY_BUFFER,this._firstPass.bufferOutputPosition),_.bufferData(_.ARRAY_BUFFER,I,_.STATIC_DRAW),_.enableVertexAttribArray(this._firstPass.aOutputPosition),_.bindBuffer(_.ARRAY_BUFFER,this._firstPass.bufferTexturePosition),_.enableVertexAttribArray(this._firstPass.aTexturePosition),_.bindBuffer(_.ARRAY_BUFFER,this._firstPass.bufferIndex);let k=[...Array(this._glNumTextures).keys()].map(G=>Array(6).fill(G)).flat();_.bufferData(_.ARRAY_BUFFER,new Float32Array(k),_.STATIC_DRAW),_.enableVertexAttribArray(this._firstPass.aIndex)}_makeSecondPassShaderProgram(){const c=`
50
+ `;let _=this._gl,A=this.constructor.initShaderProgram(_,a,w);_.useProgram(A),this._firstPass={shaderProgram:A,aOutputPosition:_.getAttribLocation(A,"a_output_position"),aTexturePosition:_.getAttribLocation(A,"a_texture_position"),aIndex:_.getAttribLocation(A,"a_index"),uTransformMatrices:[...Array(this._glNumTextures).keys()].map(G=>_.getUniformLocation(A,`u_matrix_${G}`)),uImages:_.getUniformLocation(A,"u_images"),uOpacities:_.getUniformLocation(A,"u_opacities"),bufferOutputPosition:_.createBuffer(),bufferTexturePosition:_.createBuffer(),bufferIndex:_.createBuffer()},_.uniform1iv(this._firstPass.uImages,[...Array(h).keys()]);let R=new Float32Array(h*12);for(let G=0;G<h;++G)R.set(Float32Array.from(this._unitQuad),G*12);_.bindBuffer(_.ARRAY_BUFFER,this._firstPass.bufferOutputPosition),_.bufferData(_.ARRAY_BUFFER,R,_.STATIC_DRAW),_.enableVertexAttribArray(this._firstPass.aOutputPosition),_.bindBuffer(_.ARRAY_BUFFER,this._firstPass.bufferTexturePosition),_.enableVertexAttribArray(this._firstPass.aTexturePosition),_.bindBuffer(_.ARRAY_BUFFER,this._firstPass.bufferIndex);let k=[...Array(this._glNumTextures).keys()].map(G=>Array(6).fill(G)).flat();_.bufferData(_.ARRAY_BUFFER,new Float32Array(k),_.STATIC_DRAW),_.enableVertexAttribArray(this._firstPass.aIndex)}_makeSecondPassShaderProgram(){const h=`
51
51
  attribute vec2 a_output_position;
52
52
  attribute vec2 a_texture_position;
53
53
 
@@ -60,7 +60,7 @@ function Pe(n){return new Pe.Viewer(n)}(function(n){n.version={versionStr:"5.0.1
60
60
 
61
61
  v_texture_position = a_texture_position;
62
62
  }
63
- `,v=`
63
+ `,m=`
64
64
  precision mediump float;
65
65
 
66
66
  // our texture
@@ -76,7 +76,7 @@ function Pe(n){return new Pe.Viewer(n)}(function(n){n.version={versionStr:"5.0.1
76
76
  gl_FragColor = texture2D(u_image, v_texture_position);
77
77
  gl_FragColor *= u_opacity_multiplier;
78
78
  }
79
- `;let y=this._gl,a=this.constructor.initShaderProgram(y,c,v);y.useProgram(a),this._secondPass={shaderProgram:a,aOutputPosition:y.getAttribLocation(a,"a_output_position"),aTexturePosition:y.getAttribLocation(a,"a_texture_position"),uMatrix:y.getUniformLocation(a,"u_matrix"),uImage:y.getUniformLocation(a,"u_image"),uOpacityMultiplier:y.getUniformLocation(a,"u_opacity_multiplier"),bufferOutputPosition:y.createBuffer(),bufferTexturePosition:y.createBuffer()},y.bindBuffer(y.ARRAY_BUFFER,this._secondPass.bufferOutputPosition),y.bufferData(y.ARRAY_BUFFER,this._unitQuad,y.STATIC_DRAW),y.enableVertexAttribArray(this._secondPass.aOutputPosition),y.bindBuffer(y.ARRAY_BUFFER,this._secondPass.bufferTexturePosition),y.bufferData(y.ARRAY_BUFFER,this._unitQuad,y.DYNAMIC_DRAW),y.enableVertexAttribArray(this._secondPass.aTexturePosition);let w=n.Mat3.makeScaling(2,2).multiply(n.Mat3.makeTranslation(-.5,-.5));y.uniformMatrix3fv(this._secondPass.uMatrix,!1,w.values)}_resizeRenderer(){let c=this._gl,v=this._renderingCanvas.width,y=this._renderingCanvas.height;c.viewport(0,0,v,y),c.deleteTexture(this._renderToTexture),this._renderToTexture=c.createTexture(),c.activeTexture(c.TEXTURE0),c.bindTexture(c.TEXTURE_2D,this._renderToTexture),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,v,y,0,c.RGBA,c.UNSIGNED_BYTE,null),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,this._textureFilter()),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.bindFramebuffer(c.FRAMEBUFFER,this._glFrameBuffer),c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,this._renderToTexture,0)}_setupCanvases(){let c=this;this._outputCanvas=this.canvas,this._outputContext=this._outputCanvas.getContext("2d"),this._renderingCanvas=document.createElement("canvas"),this._clippingCanvas=document.createElement("canvas"),this._clippingContext=this._clippingCanvas.getContext("2d"),this._renderingCanvas.width=this._clippingCanvas.width=this._outputCanvas.width,this._renderingCanvas.height=this._clippingCanvas.height=this._outputCanvas.height,this._gl=this._renderingCanvas.getContext("webgl"),this._resizeHandler=function(){c._outputCanvas!==c.viewer.drawer.canvas&&(c._outputCanvas.style.width=c.viewer.drawer.canvas.clientWidth+"px",c._outputCanvas.style.height=c.viewer.drawer.canvas.clientHeight+"px");let v=c._calculateCanvasSize();(c._outputCanvas.width!==v.x||c._outputCanvas.height!==v.y)&&(c._outputCanvas.width=v.x,c._outputCanvas.height=v.y),c._renderingCanvas.style.width=c._outputCanvas.clientWidth+"px",c._renderingCanvas.style.height=c._outputCanvas.clientHeight+"px",c._renderingCanvas.width=c._clippingCanvas.width=c._outputCanvas.width,c._renderingCanvas.height=c._clippingCanvas.height=c._outputCanvas.height,c._resizeRenderer()},this.viewer.addHandler("resize",this._resizeHandler)}_makeQuadVertexBuffer(c,v,y,a){return new Float32Array([c,a,v,a,c,y,c,y,v,a,v,y])}_tileReadyHandler(c){let v=c.tile,y=c.tiledImage;if(y.isTainted())return;let a=v.getCanvasContext(),w=a&&a.canvas;if(!w||n.isCanvasTainted(w)){y.isTainted()||(y.setTainted(!0),n.console.warn("WebGL cannot be used to draw this TiledImage because it has tainted data. Does crossOriginPolicy need to be set?"),this._raiseDrawerErrorEvent(y,"Tainted data cannot be used by the WebGLDrawer. Falling back to CanvasDrawer for this TiledImage."));return}if(!this._TextureMap.get(w)){let T=this._gl,I=T.createTexture(),k,G=y.source.tileOverlap,W,O;if(v.sourceBounds?(W=Math.min(v.sourceBounds.width,w.width)/w.width,O=Math.min(v.sourceBounds.height,w.height)/w.height):(W=1,O=1),G>0){let ve=this._calculateOverlapFraction(v,y),we=(v.x===0?0:ve.x)*W,ot=(v.y===0?0:ve.y)*O,Ge=(v.isRightMost?1:1-ve.x)*W,je=(v.isBottomMost?1:1-ve.y)*O;k=this._makeQuadVertexBuffer(we,Ge,ot,je)}else W===1&&O===1?k=this._unitQuad:k=this._makeQuadVertexBuffer(0,W,0,O);let ee={texture:I,position:k};this._TextureMap.set(w,ee),T.activeTexture(T.TEXTURE0),T.bindTexture(T.TEXTURE_2D,I),T.texParameteri(T.TEXTURE_2D,T.TEXTURE_WRAP_S,T.CLAMP_TO_EDGE),T.texParameteri(T.TEXTURE_2D,T.TEXTURE_WRAP_T,T.CLAMP_TO_EDGE),T.texParameteri(T.TEXTURE_2D,T.TEXTURE_MIN_FILTER,this._textureFilter()),T.texParameteri(T.TEXTURE_2D,T.TEXTURE_MAG_FILTER,this._textureFilter()),this._uploadImageData(a)}}_calculateOverlapFraction(c,v){let y=v.source.tileOverlap,a=c.sourceBounds.width,w=c.sourceBounds.height,_=(c.x===0?0:y)+(c.isRightMost?0:y),T=(c.y===0?0:y)+(c.isBottomMost?0:y),I=y/(a+_),k=y/(w+T);return{x:I,y:k}}_unloadTextures(){Array.from(this._TextureMap.keys()).forEach(v=>{this._cleanupImageData(v)})}_uploadImageData(c){let v=this._gl,y=c.canvas;try{if(!y)throw c;v.texImage2D(v.TEXTURE_2D,0,v.RGBA,v.RGBA,v.UNSIGNED_BYTE,y)}catch(a){n.console.error("Error uploading image data to WebGL",a)}}_imageUnloadedHandler(c){let v=c.context2D.canvas;this._cleanupImageData(v)}_cleanupImageData(c){let v=this._TextureMap.get(c);this._TextureMap.delete(c),v&&this._gl.deleteTexture(v.texture)}_setClip(){}_renderToClippingCanvas(c){if(this._clippingContext.clearRect(0,0,this._clippingCanvas.width,this._clippingCanvas.height),this._clippingContext.save(),this.viewer.viewport.getFlip()){const v=new n.Point(this.canvas.width/2,this.canvas.height/2);this._clippingContext.translate(v.x,0),this._clippingContext.scale(-1,1),this._clippingContext.translate(-v.x,0)}if(c._clip){let y=[{x:c._clip.x,y:c._clip.y},{x:c._clip.x+c._clip.width,y:c._clip.y},{x:c._clip.x+c._clip.width,y:c._clip.y+c._clip.height},{x:c._clip.x,y:c._clip.y+c._clip.height}].map(a=>{let w=c.imageToViewportCoordinates(a.x,a.y,!0).rotate(this.viewer.viewport.getRotation(!0),this.viewer.viewport.getCenter(!0));return this.viewportCoordToDrawerCoord(w)});this._clippingContext.beginPath(),y.forEach((a,w)=>{this._clippingContext[w===0?"moveTo":"lineTo"](a.x,a.y)}),this._clippingContext.clip(),this._setClip()}if(c._croppingPolygons){let v=c._croppingPolygons.map(y=>y.map(a=>{let w=c.imageToViewportCoordinates(a.x,a.y,!0).rotate(this.viewer.viewport.getRotation(!0),this.viewer.viewport.getCenter(!0));return this.viewportCoordToDrawerCoord(w)}));this._clippingContext.beginPath(),v.forEach(y=>{y.forEach((a,w)=>{this._clippingContext[w===0?"moveTo":"lineTo"](a.x,a.y)})}),this._clippingContext.clip()}if(this.viewer.viewport.getFlip()){const v=new n.Point(this.canvas.width/2,this.canvas.height/2);this._clippingContext.translate(v.x,0),this._clippingContext.scale(-1,1),this._clippingContext.translate(-v.x,0)}this._clippingContext.drawImage(this._renderingCanvas,0,0),this._clippingContext.restore()}_setRotations(c){var v=!1;this.viewport.getRotation(!0)%360!==0&&(this._offsetForRotation({degrees:this.viewport.getRotation(!0),saveContext:v}),v=!1),c.getRotation(!0)%360!==0&&this._offsetForRotation({degrees:c.getRotation(!0),point:this.viewport.pixelFromPointNoRotate(c._getRotationPoint(!0),!0),saveContext:v})}_offsetForRotation(c){var v=c.point?c.point.times(n.pixelDensityRatio):this._getCanvasCenter(),y=this._outputContext;y.save(),y.translate(v.x,v.y),y.rotate(Math.PI/180*c.degrees),y.translate(-v.x,-v.y)}_flip(c){c=c||{};var v=c.point?c.point.times(n.pixelDensityRatio):this._getCanvasCenter(),y=this._outputContext;y.translate(v.x,0),y.scale(-1,1),y.translate(-v.x,0)}_drawDebugInfo(c,v,y){for(var a=c.length-1;a>=0;a--){var w=c[a].tile;try{this._drawDebugInfoOnTile(w,c.length,a,v,y)}catch(_){n.console.error(_)}}}_drawDebugInfoOnTile(c,v,y,a,w){var _=this.viewer.world.getIndexOfItem(a)%this.debugGridColor.length,T=this.context;T.save(),T.lineWidth=2*n.pixelDensityRatio,T.font="small-caps bold "+13*n.pixelDensityRatio+"px arial",T.strokeStyle=this.debugGridColor[_],T.fillStyle=this.debugGridColor[_],this._setRotations(a),w&&this._flip({point:c.position.plus(c.size.divide(2))}),T.strokeRect(c.position.x*n.pixelDensityRatio,c.position.y*n.pixelDensityRatio,c.size.x*n.pixelDensityRatio,c.size.y*n.pixelDensityRatio);var I=(c.position.x+c.size.x/2)*n.pixelDensityRatio,k=(c.position.y+c.size.y/2)*n.pixelDensityRatio;T.translate(I,k);const G=this.viewport.getRotation(!0);T.rotate(Math.PI/180*-G),T.translate(-I,-k),c.x===0&&c.y===0&&(T.fillText("Zoom: "+this.viewport.getZoom(),c.position.x*n.pixelDensityRatio,(c.position.y-30)*n.pixelDensityRatio),T.fillText("Pan: "+this.viewport.getBounds().toString(),c.position.x*n.pixelDensityRatio,(c.position.y-20)*n.pixelDensityRatio)),T.fillText("Level: "+c.level,(c.position.x+10)*n.pixelDensityRatio,(c.position.y+20)*n.pixelDensityRatio),T.fillText("Column: "+c.x,(c.position.x+10)*n.pixelDensityRatio,(c.position.y+30)*n.pixelDensityRatio),T.fillText("Row: "+c.y,(c.position.x+10)*n.pixelDensityRatio,(c.position.y+40)*n.pixelDensityRatio),T.fillText("Order: "+y+" of "+v,(c.position.x+10)*n.pixelDensityRatio,(c.position.y+50)*n.pixelDensityRatio),T.fillText("Size: "+c.size.toString(),(c.position.x+10)*n.pixelDensityRatio,(c.position.y+60)*n.pixelDensityRatio),T.fillText("Position: "+c.position.toString(),(c.position.x+10)*n.pixelDensityRatio,(c.position.y+70)*n.pixelDensityRatio),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(),a.getRotation(!0)%360!==0&&this._restoreRotationChanges(),T.restore()}_drawPlaceholder(c){const v=c.getBounds(!0),y=this.viewportToDrawerRectangle(c.getBounds(!0)),a=this._outputContext;let w;typeof c.placeholderFillStyle=="function"?w=c.placeholderFillStyle(c,a):w=c.placeholderFillStyle,this._offsetForRotation({degrees:this.viewer.viewport.getRotation(!0)}),a.fillStyle=w,a.translate(y.x,y.y),a.rotate(Math.PI/180*v.degrees),a.translate(-y.x,-y.y),a.fillRect(y.x,y.y,y.width,y.height),this._restoreRotationChanges()}_getCanvasCenter(){return new n.Point(this.canvas.width/2,this.canvas.height/2)}_restoreRotationChanges(){var c=this._outputContext;c.restore()}static initShaderProgram(c,v,y){function a(I,k,G){const W=I.createShader(k);return I.shaderSource(W,G),I.compileShader(W),I.getShaderParameter(W,I.COMPILE_STATUS)?W:(n.console.error(`An error occurred compiling the shaders: ${I.getShaderInfoLog(W)}`),I.deleteShader(W),null)}const w=a(c,c.VERTEX_SHADER,v),_=a(c,c.FRAGMENT_SHADER,y),T=c.createProgram();return c.attachShader(T,w),c.attachShader(T,_),c.linkProgram(T),c.getProgramParameter(T,c.LINK_STATUS)?T:(n.console.error(`Unable to initialize the shader program: ${c.getProgramInfoLog(T)}`),null)}}}(Pe),function(n){n.Viewport=function(o){var d=arguments;d.length&&d[0]instanceof n.Point&&(o={containerSize:d[0],contentSize:d[1],config:d[2]}),o.config&&(n.extend(!0,o,o.config),delete o.config),this._margins=n.extend({left:0,top:0,right:0,bottom:0},o.margins||{}),delete o.margins,o.initialDegrees=o.degrees,delete o.degrees,n.extend(!0,this,{containerSize:null,contentSize:null,zoomPoint:null,rotationPivot:null,viewer:null,springStiffness:n.DEFAULT_SETTINGS.springStiffness,animationTime:n.DEFAULT_SETTINGS.animationTime,minZoomImageRatio:n.DEFAULT_SETTINGS.minZoomImageRatio,maxZoomPixelRatio:n.DEFAULT_SETTINGS.maxZoomPixelRatio,visibilityRatio:n.DEFAULT_SETTINGS.visibilityRatio,wrapHorizontal:n.DEFAULT_SETTINGS.wrapHorizontal,wrapVertical:n.DEFAULT_SETTINGS.wrapVertical,defaultZoomLevel:n.DEFAULT_SETTINGS.defaultZoomLevel,minZoomLevel:n.DEFAULT_SETTINGS.minZoomLevel,maxZoomLevel:n.DEFAULT_SETTINGS.maxZoomLevel,initialDegrees:n.DEFAULT_SETTINGS.degrees,flipped:n.DEFAULT_SETTINGS.flipped,homeFillsViewer:n.DEFAULT_SETTINGS.homeFillsViewer,silenceMultiImageWarnings:n.DEFAULT_SETTINGS.silenceMultiImageWarnings},o),this._updateContainerInnerSize(),this.centerSpringX=new n.Spring({initial:0,springStiffness:this.springStiffness,animationTime:this.animationTime}),this.centerSpringY=new n.Spring({initial:0,springStiffness:this.springStiffness,animationTime:this.animationTime}),this.zoomSpring=new n.Spring({exponential:!0,initial:1,springStiffness:this.springStiffness,animationTime:this.animationTime}),this.degreesSpring=new n.Spring({initial:o.initialDegrees,springStiffness:this.springStiffness,animationTime:this.animationTime}),this._oldCenterX=this.centerSpringX.current.value,this._oldCenterY=this.centerSpringY.current.value,this._oldZoom=this.zoomSpring.current.value,this._oldDegrees=this.degreesSpring.current.value,this._setContentBounds(new n.Rect(0,0,1,1),1),this.goHome(!0),this.update()},n.Viewport.prototype={get degrees(){return n.console.warn("Accessing [Viewport.degrees] is deprecated. Use viewport.getRotation instead."),this.getRotation()},set degrees(o){n.console.warn("Setting [Viewport.degrees] is deprecated. Use viewport.rotateTo, viewport.rotateBy, or viewport.setRotation instead."),this.rotateTo(o)},resetContentSize:function(o){return n.console.assert(o,"[Viewport.resetContentSize] contentSize is required"),n.console.assert(o instanceof n.Point,"[Viewport.resetContentSize] contentSize must be an OpenSeadragon.Point"),n.console.assert(o.x>0,"[Viewport.resetContentSize] contentSize.x must be greater than 0"),n.console.assert(o.y>0,"[Viewport.resetContentSize] contentSize.y must be greater than 0"),this._setContentBounds(new n.Rect(0,0,1,o.y/o.x),o.x),this},setHomeBounds:function(o,d){n.console.error("[Viewport.setHomeBounds] this function is deprecated; The content bounds should not be set manually."),this._setContentBounds(o,d)},_setContentBounds:function(o,d){n.console.assert(o,"[Viewport._setContentBounds] bounds is required"),n.console.assert(o instanceof n.Rect,"[Viewport._setContentBounds] bounds must be an OpenSeadragon.Rect"),n.console.assert(o.width>0,"[Viewport._setContentBounds] bounds.width must be greater than 0"),n.console.assert(o.height>0,"[Viewport._setContentBounds] bounds.height must be greater than 0"),this._contentBoundsNoRotate=o.clone(),this._contentSizeNoRotate=this._contentBoundsNoRotate.getSize().times(d),this._contentBounds=o.rotate(this.getRotation()).getBoundingBox(),this._contentSize=this._contentBounds.getSize().times(d),this._contentAspectRatio=this._contentSize.x/this._contentSize.y,this.viewer&&this.viewer.raiseEvent("reset-size",{contentSize:this._contentSizeNoRotate.clone(),contentFactor:d,homeBounds:this._contentBoundsNoRotate.clone(),contentBounds:this._contentBounds.clone()})},getHomeZoom:function(){if(this.defaultZoomLevel)return this.defaultZoomLevel;var o=this._contentAspectRatio/this.getAspectRatio(),d;return this.homeFillsViewer?d=o>=1?o:1:d=o>=1?1:o,d/this._contentBounds.width},getHomeBounds:function(){return this.getHomeBoundsNoRotate().rotate(-this.getRotation())},getHomeBoundsNoRotate:function(){var o=this._contentBounds.getCenter(),d=1/this.getHomeZoom(),c=d/this.getAspectRatio();return new n.Rect(o.x-d/2,o.y-c/2,d,c)},goHome:function(o){return this.viewer&&this.viewer.raiseEvent("home",{immediately:o}),this.fitBounds(this.getHomeBounds(),o)},getMinZoom:function(){var o=this.getHomeZoom(),d=this.minZoomLevel?this.minZoomLevel:this.minZoomImageRatio*o;return d},getMaxZoom:function(){var o=this.maxZoomLevel;return o||(o=this._contentSize.x*this.maxZoomPixelRatio/this._containerInnerSize.x,o/=this._contentBounds.width),Math.max(o,this.getHomeZoom())},getAspectRatio:function(){return this._containerInnerSize.x/this._containerInnerSize.y},getContainerSize:function(){return new n.Point(this.containerSize.x,this.containerSize.y)},getMargins:function(){return n.extend({},this._margins)},setMargins:function(o){n.console.assert(n.type(o)==="object","[Viewport.setMargins] margins must be an object"),this._margins=n.extend({left:0,top:0,right:0,bottom:0},o),this._updateContainerInnerSize(),this.viewer&&this.viewer.forceRedraw()},getBounds:function(o){return this.getBoundsNoRotate(o).rotate(-this.getRotation(o))},getBoundsNoRotate:function(o){var d=this.getCenter(o),c=1/this.getZoom(o),v=c/this.getAspectRatio();return new n.Rect(d.x-c/2,d.y-v/2,c,v)},getBoundsWithMargins:function(o){return this.getBoundsNoRotateWithMargins(o).rotate(-this.getRotation(o),this.getCenter(o))},getBoundsNoRotateWithMargins:function(o){var d=this.getBoundsNoRotate(o),c=this._containerInnerSize.x*this.getZoom(o);return d.x-=this._margins.left/c,d.y-=this._margins.top/c,d.width+=(this._margins.left+this._margins.right)/c,d.height+=(this._margins.top+this._margins.bottom)/c,d},getCenter:function(o){var d=new n.Point(this.centerSpringX.current.value,this.centerSpringY.current.value),c=new n.Point(this.centerSpringX.target.value,this.centerSpringY.target.value),v,y,a,w,_,T,I,k;return o?d:this.zoomPoint?(v=this.pixelFromPoint(this.zoomPoint,!0),y=this.getZoom(),a=1/y,w=a/this.getAspectRatio(),_=new n.Rect(d.x-a/2,d.y-w/2,a,w),T=this._pixelFromPoint(this.zoomPoint,_),I=T.minus(v).rotate(-this.getRotation(!0)),k=I.divide(this._containerInnerSize.x*y),c.plus(k)):c},getZoom:function(o){return o?this.zoomSpring.current.value:this.zoomSpring.target.value},_applyZoomConstraints:function(o){return Math.max(Math.min(o,this.getMaxZoom()),this.getMinZoom())},_applyBoundaryConstraints:function(o){var d=this.viewportToViewerElementRectangle(o).getBoundingBox(),c=this.viewportToViewerElementRectangle(this._contentBoundsNoRotate).getBoundingBox(),v=!1,y=!1;if(!this.wrapHorizontal){var a=d.x+d.width,w=c.x+c.width,_,T,I;d.width>c.width?_=this.visibilityRatio*c.width:_=this.visibilityRatio*d.width,T=c.x-a+_,I=w-d.x-_,_>c.width?(d.x+=(T+I)/2,v=!0):I<0?(d.x+=I,v=!0):T>0&&(d.x+=T,v=!0)}if(!this.wrapVertical){var k=d.y+d.height,G=c.y+c.height,W,O,ee;d.height>c.height?W=this.visibilityRatio*c.height:W=this.visibilityRatio*d.height,O=c.y-k+W,ee=G-d.y-W,W>c.height?(d.y+=(O+ee)/2,y=!0):ee<0?(d.y+=ee,y=!0):O>0&&(d.y+=O,y=!0)}var ve=v||y,we=ve?this.viewerElementToViewportRectangle(d):o.clone();return we.xConstrained=v,we.yConstrained=y,we.constraintApplied=ve,we},_raiseConstraintsEvent:function(o){this.viewer&&this.viewer.raiseEvent("constrain",{immediately:o})},applyConstraints:function(o){var d=this.getZoom(),c=this._applyZoomConstraints(d);d!==c&&this.zoomTo(c,this.zoomPoint,o);var v=this.getConstrainedBounds(!1);return v.constraintApplied&&(this.fitBounds(v,o),this._raiseConstraintsEvent(o)),this},ensureVisible:function(o){return this.applyConstraints(o)},_fitBounds:function(o,d){d=d||{};var c=d.immediately||!1,v=d.constraints||!1,y=this.getAspectRatio(),a=o.getCenter(),w=new n.Rect(o.x,o.y,o.width,o.height,o.degrees+this.getRotation()).getBoundingBox();w.getAspectRatio()>=y?w.height=w.width/y:w.width=w.height*y,w.x=a.x-w.width/2,w.y=a.y-w.height/2;var _=1/w.width;if(c)return this.panTo(a,!0),this.zoomTo(_,null,!0),v&&this.applyConstraints(!0),this;var T=this.getCenter(!0),I=this.getZoom(!0);this.panTo(T,!0),this.zoomTo(I,null,!0);var k=this.getBounds(),G=this.getZoom();if(G===0||Math.abs(_/G-1)<1e-8)return this.zoomTo(_,null,!0),this.panTo(a,c),v&&this.applyConstraints(!1),this;if(v){this.panTo(a,!1),_=this._applyZoomConstraints(_),this.zoomTo(_,null,!1);var W=this.getConstrainedBounds();this.panTo(T,!0),this.zoomTo(I,null,!0),this.fitBounds(W)}else{var O=w.rotate(-this.getRotation()),ee=O.getTopLeft().times(_).minus(k.getTopLeft().times(G)).divide(_-G);this.zoomTo(_,ee,c)}return this},fitBounds:function(o,d){return this._fitBounds(o,{immediately:d,constraints:!1})},fitBoundsWithConstraints:function(o,d){return this._fitBounds(o,{immediately:d,constraints:!0})},fitVertically:function(o){var d=new n.Rect(this._contentBounds.x+this._contentBounds.width/2,this._contentBounds.y,0,this._contentBounds.height);return this.fitBounds(d,o)},fitHorizontally:function(o){var d=new n.Rect(this._contentBounds.x,this._contentBounds.y+this._contentBounds.height/2,this._contentBounds.width,0);return this.fitBounds(d,o)},getConstrainedBounds:function(o){var d,c;return d=this.getBounds(o),c=this._applyBoundaryConstraints(d),c},panBy:function(o,d){var c=new n.Point(this.centerSpringX.target.value,this.centerSpringY.target.value);return this.panTo(c.plus(o),d)},panTo:function(o,d){return d?(this.centerSpringX.resetTo(o.x),this.centerSpringY.resetTo(o.y)):(this.centerSpringX.springTo(o.x),this.centerSpringY.springTo(o.y)),this.viewer&&this.viewer.raiseEvent("pan",{center:o,immediately:d}),this},zoomBy:function(o,d,c){return this.zoomTo(this.zoomSpring.target.value*o,d,c)},zoomTo:function(o,d,c){var v=this;return this.zoomPoint=d instanceof n.Point&&!isNaN(d.x)&&!isNaN(d.y)?d:null,c?this._adjustCenterSpringsForZoomPoint(function(){v.zoomSpring.resetTo(o)}):this.zoomSpring.springTo(o),this.viewer&&this.viewer.raiseEvent("zoom",{zoom:o,refPoint:d,immediately:c}),this},setRotation:function(o,d){return this.rotateTo(o,null,d)},getRotation:function(o){return o?this.degreesSpring.current.value:this.degreesSpring.target.value},setRotationWithPivot:function(o,d,c){return this.rotateTo(o,d,c)},rotateTo:function(o,d,c){if(!this.viewer||!this.viewer.drawer.canRotate())return this;if(this.degreesSpring.target.value===o&&this.degreesSpring.isAtTargetValue())return this;if(this.rotationPivot=d instanceof n.Point&&!isNaN(d.x)&&!isNaN(d.y)?d:null,c)if(this.rotationPivot){var v=o-this._oldDegrees;if(!v)return this.rotationPivot=null,this;this._rotateAboutPivot(o)}else this.degreesSpring.resetTo(o);else{var y=n.positiveModulo(this.degreesSpring.current.value,360),a=n.positiveModulo(o,360),w=a-y;w>180?a-=360:w<-180&&(a+=360);var _=y-a;this.degreesSpring.resetTo(o+_),this.degreesSpring.springTo(o)}return this._setContentBounds(this.viewer.world.getHomeBounds(),this.viewer.world.getContentFactor()),this.viewer.forceRedraw(),this.viewer.raiseEvent("rotate",{degrees:o,immediately:!!c,pivot:this.rotationPivot||this.getCenter()}),this},rotateBy:function(o,d,c){return this.rotateTo(this.degreesSpring.target.value+o,d,c)},resize:function(o,d){var c=this.getBoundsNoRotate(),v=c,y;this.containerSize.x=o.x,this.containerSize.y=o.y,this._updateContainerInnerSize(),d&&(y=o.x/this.containerSize.x,v.width=c.width*y,v.height=v.width/this.getAspectRatio()),this.viewer&&this.viewer.raiseEvent("resize",{newContainerSize:o,maintain:d});var a=this.fitBounds(v,!0);return this.viewer&&this.viewer.raiseEvent("after-resize",{newContainerSize:o,maintain:d}),a},_updateContainerInnerSize:function(){this._containerInnerSize=new n.Point(Math.max(1,this.containerSize.x-(this._margins.left+this._margins.right)),Math.max(1,this.containerSize.y-(this._margins.top+this._margins.bottom)))},update:function(){var o=this;this._adjustCenterSpringsForZoomPoint(function(){o.zoomSpring.update()}),this.degreesSpring.isAtTargetValue()&&(this.rotationPivot=null),this.centerSpringX.update(),this.centerSpringY.update(),this.rotationPivot?this._rotateAboutPivot(!0):this.degreesSpring.update();var d=this.centerSpringX.current.value!==this._oldCenterX||this.centerSpringY.current.value!==this._oldCenterY||this.zoomSpring.current.value!==this._oldZoom||this.degreesSpring.current.value!==this._oldDegrees;this._oldCenterX=this.centerSpringX.current.value,this._oldCenterY=this.centerSpringY.current.value,this._oldZoom=this.zoomSpring.current.value,this._oldDegrees=this.degreesSpring.current.value;var c=d||!this.zoomSpring.isAtTargetValue()||!this.centerSpringX.isAtTargetValue()||!this.centerSpringY.isAtTargetValue()||!this.degreesSpring.isAtTargetValue();return c},_rotateAboutPivot:function(o){var d=o===!0,c=this.rotationPivot.minus(this.getCenter());this.centerSpringX.shiftBy(c.x),this.centerSpringY.shiftBy(c.y),d?this.degreesSpring.update():this.degreesSpring.resetTo(o);var v=this.degreesSpring.current.value-this._oldDegrees,y=c.rotate(v*-1).times(-1);this.centerSpringX.shiftBy(y.x),this.centerSpringY.shiftBy(y.y)},_adjustCenterSpringsForZoomPoint:function(o){if(this.zoomPoint){var d=this.pixelFromPoint(this.zoomPoint,!0);o();var c=this.pixelFromPoint(this.zoomPoint,!0),v=c.minus(d),y=this.deltaPointsFromPixels(v,!0);this.centerSpringX.shiftBy(y.x),this.centerSpringY.shiftBy(y.y),this.zoomSpring.isAtTargetValue()&&(this.zoomPoint=null)}else o()},deltaPixelsFromPointsNoRotate:function(o,d){return o.times(this._containerInnerSize.x*this.getZoom(d))},deltaPixelsFromPoints:function(o,d){return this.deltaPixelsFromPointsNoRotate(o.rotate(this.getRotation(d)),d)},deltaPointsFromPixelsNoRotate:function(o,d){return o.divide(this._containerInnerSize.x*this.getZoom(d))},deltaPointsFromPixels:function(o,d){return this.deltaPointsFromPixelsNoRotate(o,d).rotate(-this.getRotation(d))},pixelFromPointNoRotate:function(o,d){return this._pixelFromPointNoRotate(o,this.getBoundsNoRotate(d))},pixelFromPoint:function(o,d){return this._pixelFromPoint(o,this.getBoundsNoRotate(d))},_pixelFromPointNoRotate:function(o,d){return o.minus(d.getTopLeft()).times(this._containerInnerSize.x/d.width).plus(new n.Point(this._margins.left,this._margins.top))},_pixelFromPoint:function(o,d){return this._pixelFromPointNoRotate(o.rotate(this.getRotation(!0),this.getCenter(!0)),d)},pointFromPixelNoRotate:function(o,d){var c=this.getBoundsNoRotate(d);return o.minus(new n.Point(this._margins.left,this._margins.top)).divide(this._containerInnerSize.x/c.width).plus(c.getTopLeft())},pointFromPixel:function(o,d){return this.pointFromPixelNoRotate(o,d).rotate(-this.getRotation(d),this.getCenter(d))},_viewportToImageDelta:function(o,d){var c=this._contentBoundsNoRotate.width;return new n.Point(o*this._contentSizeNoRotate.x/c,d*this._contentSizeNoRotate.x/c)},viewportToImageCoordinates:function(o,d){if(o instanceof n.Point)return this.viewportToImageCoordinates(o.x,o.y);if(this.viewer){var c=this.viewer.world.getItemCount();if(c>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.viewportToImageCoordinates] is not accurate with multi-image; use TiledImage.viewportToImageCoordinates instead.");else if(c===1){var v=this.viewer.world.getItemAt(0);return v.viewportToImageCoordinates(o,d,!0)}}return this._viewportToImageDelta(o-this._contentBoundsNoRotate.x,d-this._contentBoundsNoRotate.y)},_imageToViewportDelta:function(o,d){var c=this._contentBoundsNoRotate.width;return new n.Point(o/this._contentSizeNoRotate.x*c,d/this._contentSizeNoRotate.x*c)},imageToViewportCoordinates:function(o,d){if(o instanceof n.Point)return this.imageToViewportCoordinates(o.x,o.y);if(this.viewer){var c=this.viewer.world.getItemCount();if(c>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.imageToViewportCoordinates] is not accurate with multi-image; use TiledImage.imageToViewportCoordinates instead.");else if(c===1){var v=this.viewer.world.getItemAt(0);return v.imageToViewportCoordinates(o,d,!0)}}var y=this._imageToViewportDelta(o,d);return y.x+=this._contentBoundsNoRotate.x,y.y+=this._contentBoundsNoRotate.y,y},imageToViewportRectangle:function(o,d,c,v){var y=o;if(y instanceof n.Rect||(y=new n.Rect(o,d,c,v)),this.viewer){var a=this.viewer.world.getItemCount();if(a>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.imageToViewportRectangle] is not accurate with multi-image; use TiledImage.imageToViewportRectangle instead.");else if(a===1){var w=this.viewer.world.getItemAt(0);return w.imageToViewportRectangle(o,d,c,v,!0)}}var _=this.imageToViewportCoordinates(y.x,y.y),T=this._imageToViewportDelta(y.width,y.height);return new n.Rect(_.x,_.y,T.x,T.y,y.degrees)},viewportToImageRectangle:function(o,d,c,v){var y=o;if(y instanceof n.Rect||(y=new n.Rect(o,d,c,v)),this.viewer){var a=this.viewer.world.getItemCount();if(a>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.viewportToImageRectangle] is not accurate with multi-image; use TiledImage.viewportToImageRectangle instead.");else if(a===1){var w=this.viewer.world.getItemAt(0);return w.viewportToImageRectangle(o,d,c,v,!0)}}var _=this.viewportToImageCoordinates(y.x,y.y),T=this._viewportToImageDelta(y.width,y.height);return new n.Rect(_.x,_.y,T.x,T.y,y.degrees)},viewerElementToImageCoordinates:function(o){var d=this.pointFromPixel(o,!0);return this.viewportToImageCoordinates(d)},imageToViewerElementCoordinates:function(o){var d=this.imageToViewportCoordinates(o);return this.pixelFromPoint(d,!0)},windowToImageCoordinates:function(o){n.console.assert(this.viewer,"[Viewport.windowToImageCoordinates] the viewport must have a viewer.");var d=o.minus(n.getElementPosition(this.viewer.element));return this.viewerElementToImageCoordinates(d)},imageToWindowCoordinates:function(o){n.console.assert(this.viewer,"[Viewport.imageToWindowCoordinates] the viewport must have a viewer.");var d=this.imageToViewerElementCoordinates(o);return d.plus(n.getElementPosition(this.viewer.element))},viewerElementToViewportCoordinates:function(o){return this.pointFromPixel(o,!0)},viewportToViewerElementCoordinates:function(o){return this.pixelFromPoint(o,!0)},viewerElementToViewportRectangle:function(o){return n.Rect.fromSummits(this.pointFromPixel(o.getTopLeft(),!0),this.pointFromPixel(o.getTopRight(),!0),this.pointFromPixel(o.getBottomLeft(),!0))},viewportToViewerElementRectangle:function(o){return n.Rect.fromSummits(this.pixelFromPoint(o.getTopLeft(),!0),this.pixelFromPoint(o.getTopRight(),!0),this.pixelFromPoint(o.getBottomLeft(),!0))},windowToViewportCoordinates:function(o){n.console.assert(this.viewer,"[Viewport.windowToViewportCoordinates] the viewport must have a viewer.");var d=o.minus(n.getElementPosition(this.viewer.element));return this.viewerElementToViewportCoordinates(d)},viewportToWindowCoordinates:function(o){n.console.assert(this.viewer,"[Viewport.viewportToWindowCoordinates] the viewport must have a viewer.");var d=this.viewportToViewerElementCoordinates(o);return d.plus(n.getElementPosition(this.viewer.element))},viewportToImageZoom:function(o){if(this.viewer){var d=this.viewer.world.getItemCount();if(d>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.viewportToImageZoom] is not accurate with multi-image.");else if(d===1){var c=this.viewer.world.getItemAt(0);return c.viewportToImageZoom(o)}}var v=this._contentSizeNoRotate.x,y=this._containerInnerSize.x,a=this._contentBoundsNoRotate.width,w=y/v*a;return o*w},imageToViewportZoom:function(o){if(this.viewer){var d=this.viewer.world.getItemCount();if(d>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.imageToViewportZoom] is not accurate with multi-image. Instead, use [TiledImage.imageToViewportZoom] for the specific image of interest");else if(d===1){var c=this.viewer.world.getItemAt(0);return c.imageToViewportZoom(o)}}var v=this._contentSizeNoRotate.x,y=this._containerInnerSize.x,a=this._contentBoundsNoRotate.width,w=v/y/a;return o*w},toggleFlip:function(){return this.setFlip(!this.getFlip()),this},getFlip:function(){return this.flipped},setFlip:function(o){return this.flipped===o?this:(this.flipped=o,this.viewer.navigator&&this.viewer.navigator.setFlip(this.getFlip()),this.viewer.forceRedraw(),this.viewer.raiseEvent("flip",{flipped:o}),this)},getMaxZoomPixelRatio:function(){return this.maxZoomPixelRatio},setMaxZoomPixelRatio:function(o,d=!0,c=!1){n.console.assert(!isNaN(o),"[Viewport.setMaxZoomPixelRatio] ratio must be a number"),!isNaN(o)&&(this.maxZoomPixelRatio=o,d&&this.getZoom()>this.getMaxZoom()&&this.applyConstraints(c))}}}(Pe),function(n){n.TiledImage=function(o){this._initialized=!1,n.console.assert(o.tileCache,"[TiledImage] options.tileCache is required"),n.console.assert(o.drawer,"[TiledImage] options.drawer is required"),n.console.assert(o.viewer,"[TiledImage] options.viewer is required"),n.console.assert(o.imageLoader,"[TiledImage] options.imageLoader is required"),n.console.assert(o.source,"[TiledImage] options.source is required"),n.console.assert(!o.clip||o.clip instanceof n.Rect,"[TiledImage] options.clip must be an OpenSeadragon.Rect if present"),n.EventSource.call(this),this._tileCache=o.tileCache,delete o.tileCache,this._drawer=o.drawer,delete o.drawer,this._imageLoader=o.imageLoader,delete o.imageLoader,o.clip instanceof n.Rect&&(this._clip=o.clip.clone()),delete o.clip;var d=o.x||0;delete o.x;var c=o.y||0;delete o.y,this.normHeight=o.source.dimensions.y/o.source.dimensions.x,this.contentAspectX=o.source.dimensions.x/o.source.dimensions.y;var v=1;o.width?(v=o.width,delete o.width,o.height&&(n.console.error("specifying both width and height to a tiledImage is not supported"),delete o.height)):o.height&&(v=o.height/this.normHeight,delete o.height);var y=o.fitBounds;delete o.fitBounds;var a=o.fitBoundsPlacement||Pe.Placement.CENTER;delete o.fitBoundsPlacement;var w=o.degrees||0;delete o.degrees;var _=o.ajaxHeaders;delete o.ajaxHeaders,n.extend(!0,this,{viewer:null,tilesMatrix:{},coverage:{},loadingCoverage:{},lastDrawn:[],lastResetTime:0,_needsDraw:!0,_needsUpdate:!0,_hasOpaqueTile:!1,_tilesLoading:0,_tilesToDraw:[],_lastDrawn:[],_isBlending:!1,_wasBlending:!1,_isTainted:!1,springStiffness:n.DEFAULT_SETTINGS.springStiffness,animationTime:n.DEFAULT_SETTINGS.animationTime,minZoomImageRatio:n.DEFAULT_SETTINGS.minZoomImageRatio,wrapHorizontal:n.DEFAULT_SETTINGS.wrapHorizontal,wrapVertical:n.DEFAULT_SETTINGS.wrapVertical,immediateRender:n.DEFAULT_SETTINGS.immediateRender,blendTime:n.DEFAULT_SETTINGS.blendTime,alwaysBlend:n.DEFAULT_SETTINGS.alwaysBlend,minPixelRatio:n.DEFAULT_SETTINGS.minPixelRatio,smoothTileEdgesMinZoom:n.DEFAULT_SETTINGS.smoothTileEdgesMinZoom,iOSDevice:n.DEFAULT_SETTINGS.iOSDevice,debugMode:n.DEFAULT_SETTINGS.debugMode,crossOriginPolicy:n.DEFAULT_SETTINGS.crossOriginPolicy,ajaxWithCredentials:n.DEFAULT_SETTINGS.ajaxWithCredentials,placeholderFillStyle:n.DEFAULT_SETTINGS.placeholderFillStyle,opacity:n.DEFAULT_SETTINGS.opacity,preload:n.DEFAULT_SETTINGS.preload,compositeOperation:n.DEFAULT_SETTINGS.compositeOperation,subPixelRoundingForTransparency:n.DEFAULT_SETTINGS.subPixelRoundingForTransparency,maxTilesPerFrame:n.DEFAULT_SETTINGS.maxTilesPerFrame},o),this._preload=this.preload,delete this.preload,this._fullyLoaded=!1,this._xSpring=new n.Spring({initial:d,springStiffness:this.springStiffness,animationTime:this.animationTime}),this._ySpring=new n.Spring({initial:c,springStiffness:this.springStiffness,animationTime:this.animationTime}),this._scaleSpring=new n.Spring({initial:v,springStiffness:this.springStiffness,animationTime:this.animationTime}),this._degreesSpring=new n.Spring({initial:w,springStiffness:this.springStiffness,animationTime:this.animationTime}),this._updateForScale(),y&&this.fitBounds(y,a,!0),this._ownAjaxHeaders={},this.setAjaxHeaders(_,!1),this._initialized=!0},n.extend(n.TiledImage.prototype,n.EventSource.prototype,{needsDraw:function(){return this._needsDraw},redraw:function(){this._needsDraw=!0},getFullyLoaded:function(){return this._fullyLoaded},_setFullyLoaded:function(o){o!==this._fullyLoaded&&(this._fullyLoaded=o,this.raiseEvent("fully-loaded-change",{fullyLoaded:this._fullyLoaded}))},reset:function(){this._tileCache.clearTilesFor(this),this.lastResetTime=n.now(),this._needsDraw=!0},update:function(o){let d=this._xSpring.update(),c=this._ySpring.update(),v=this._scaleSpring.update(),y=this._degreesSpring.update(),a=d||c||v||y||this._needsUpdate;if(a||o||!this._fullyLoaded){let w=this._updateLevelsForViewport();this._setFullyLoaded(w)}return this._needsUpdate=!1,a?(this._updateForScale(),this._raiseBoundsChange(),this._needsDraw=!0,!0):!1},setDrawn:function(){return this._needsDraw=this._isBlending||this._wasBlending,this._needsDraw},setTainted(o){this._isTainted=o},isTainted(){return this._isTainted},destroy:function(){this.reset(),this.source.destroy&&this.source.destroy(this.viewer)},getBounds:function(o){return this.getBoundsNoRotate(o).rotate(this.getRotation(o),this._getRotationPoint(o))},getBoundsNoRotate:function(o){return o?new n.Rect(this._xSpring.current.value,this._ySpring.current.value,this._worldWidthCurrent,this._worldHeightCurrent):new n.Rect(this._xSpring.target.value,this._ySpring.target.value,this._worldWidthTarget,this._worldHeightTarget)},getWorldBounds:function(){return n.console.error("[TiledImage.getWorldBounds] is deprecated; use TiledImage.getBounds instead"),this.getBounds()},getClippedBounds:function(o){var d=this.getBoundsNoRotate(o);if(this._clip){var c=o?this._worldWidthCurrent:this._worldWidthTarget,v=c/this.source.dimensions.x,y=this._clip.times(v);d=new n.Rect(d.x+y.x,d.y+y.y,y.width,y.height)}return d.rotate(this.getRotation(o),this._getRotationPoint(o))},getTileBounds:function(o,d,c){var v=this.source.getNumTiles(o),y=(v.x+d%v.x)%v.x,a=(v.y+c%v.y)%v.y,w=this.source.getTileBounds(o,y,a);return this.getFlip()&&(w.x=Math.max(0,1-w.x-w.width)),w.x+=(d-y)/v.x,w.y+=this._worldHeightCurrent/this._worldWidthCurrent*((c-a)/v.y),w},getContentSize:function(){return new n.Point(this.source.dimensions.x,this.source.dimensions.y)},getSizeInWindowCoordinates:function(){var o=this.imageToWindowCoordinates(new n.Point(0,0)),d=this.imageToWindowCoordinates(this.getContentSize());return new n.Point(d.x-o.x,d.y-o.y)},_viewportToImageDelta:function(o,d,c){var v=c?this._scaleSpring.current.value:this._scaleSpring.target.value;return new n.Point(o*(this.source.dimensions.x/v),d*(this.source.dimensions.y*this.contentAspectX/v))},viewportToImageCoordinates:function(o,d,c){var v;return o instanceof n.Point?(c=d,v=o):v=new n.Point(o,d),v=v.rotate(-this.getRotation(c),this._getRotationPoint(c)),c?this._viewportToImageDelta(v.x-this._xSpring.current.value,v.y-this._ySpring.current.value):this._viewportToImageDelta(v.x-this._xSpring.target.value,v.y-this._ySpring.target.value)},_imageToViewportDelta:function(o,d,c){var v=c?this._scaleSpring.current.value:this._scaleSpring.target.value;return new n.Point(o/this.source.dimensions.x*v,d/this.source.dimensions.y/this.contentAspectX*v)},imageToViewportCoordinates:function(o,d,c){o instanceof n.Point&&(c=d,d=o.y,o=o.x);var v=this._imageToViewportDelta(o,d,c);return c?(v.x+=this._xSpring.current.value,v.y+=this._ySpring.current.value):(v.x+=this._xSpring.target.value,v.y+=this._ySpring.target.value),v.rotate(this.getRotation(c),this._getRotationPoint(c))},imageToViewportRectangle:function(o,d,c,v,y){var a=o;a instanceof n.Rect?y=d:a=new n.Rect(o,d,c,v);var w=this.imageToViewportCoordinates(a.getTopLeft(),y),_=this._imageToViewportDelta(a.width,a.height,y);return new n.Rect(w.x,w.y,_.x,_.y,a.degrees+this.getRotation(y))},viewportToImageRectangle:function(o,d,c,v,y){var a=o;o instanceof n.Rect?y=d:a=new n.Rect(o,d,c,v);var w=this.viewportToImageCoordinates(a.getTopLeft(),y),_=this._viewportToImageDelta(a.width,a.height,y);return new n.Rect(w.x,w.y,_.x,_.y,a.degrees-this.getRotation(y))},viewerElementToImageCoordinates:function(o){var d=this.viewport.pointFromPixel(o,!0);return this.viewportToImageCoordinates(d)},imageToViewerElementCoordinates:function(o){var d=this.imageToViewportCoordinates(o);return this.viewport.pixelFromPoint(d,!0)},windowToImageCoordinates:function(o){var d=o.minus(Pe.getElementPosition(this.viewer.element));return this.viewerElementToImageCoordinates(d)},imageToWindowCoordinates:function(o){var d=this.imageToViewerElementCoordinates(o);return d.plus(Pe.getElementPosition(this.viewer.element))},_viewportToTiledImageRectangle:function(o){var d=this._scaleSpring.current.value;return o=o.rotate(-this.getRotation(!0),this._getRotationPoint(!0)),new n.Rect((o.x-this._xSpring.current.value)/d,(o.y-this._ySpring.current.value)/d,o.width/d,o.height/d,o.degrees)},viewportToImageZoom:function(o){var d=this._scaleSpring.current.value*this.viewport._containerInnerSize.x/this.source.dimensions.x;return d*o},imageToViewportZoom:function(o){var d=this._scaleSpring.current.value*this.viewport._containerInnerSize.x/this.source.dimensions.x;return o/d},setPosition:function(o,d){var c=this._xSpring.target.value===o.x&&this._ySpring.target.value===o.y;if(d){if(c&&this._xSpring.current.value===o.x&&this._ySpring.current.value===o.y)return;this._xSpring.resetTo(o.x),this._ySpring.resetTo(o.y),this._needsDraw=!0,this._needsUpdate=!0}else{if(c)return;this._xSpring.springTo(o.x),this._ySpring.springTo(o.y),this._needsDraw=!0,this._needsUpdate=!0}c||this._raiseBoundsChange()},setWidth:function(o,d){this._setScale(o,d)},setHeight:function(o,d){this._setScale(o/this.normHeight,d)},setCroppingPolygons:function(o){var d=function(v){return v instanceof n.Point||typeof v.x=="number"&&typeof v.y=="number"},c=function(v){return v.map(function(y){try{if(d(y))return{x:y.x,y:y.y};throw new Error}catch{throw new Error("A Provided cropping polygon point is not supported")}})};try{if(!n.isArray(o))throw new Error("Provided cropping polygon is not an array");this._croppingPolygons=o.map(function(v){return c(v)}),this._needsDraw=!0}catch(v){n.console.error("[TiledImage.setCroppingPolygons] Cropping polygon format not supported"),n.console.error(v),this.resetCroppingPolygons()}},resetCroppingPolygons:function(){this._croppingPolygons=null,this._needsDraw=!0},fitBounds:function(o,d,c){d=d||n.Placement.CENTER;var v=n.Placement.properties[d],y=this.contentAspectX,a=0,w=0,_=1,T=1;if(this._clip&&(y=this._clip.getAspectRatio(),_=this._clip.width/this.source.dimensions.x,T=this._clip.height/this.source.dimensions.y,o.getAspectRatio()>y?(a=this._clip.x/this._clip.height*o.height,w=this._clip.y/this._clip.height*o.height):(a=this._clip.x/this._clip.width*o.width,w=this._clip.y/this._clip.width*o.width)),o.getAspectRatio()>y){var I=o.height/T,k=0;v.isHorizontallyCentered?k=(o.width-o.height*y)/2:v.isRight&&(k=o.width-o.height*y),this.setPosition(new n.Point(o.x-a+k,o.y-w),c),this.setHeight(I,c)}else{var G=o.width/_,W=0;v.isVerticallyCentered?W=(o.height-o.width/y)/2:v.isBottom&&(W=o.height-o.width/y),this.setPosition(new n.Point(o.x-a,o.y-w+W),c),this.setWidth(G,c)}},getClip:function(){return this._clip?this._clip.clone():null},setClip:function(o){n.console.assert(!o||o instanceof n.Rect,"[TiledImage.setClip] newClip must be an OpenSeadragon.Rect or null"),o instanceof n.Rect?this._clip=o.clone():this._clip=null,this._needsUpdate=!0,this._needsDraw=!0,this.raiseEvent("clip-change")},getFlip:function(){return this.flipped},setFlip:function(o){this.flipped=o},get flipped(){return this._flipped},set flipped(o){let d=this._flipped!==!!o;this._flipped=!!o,d&&(this.update(!0),this._needsDraw=!0,this._raiseBoundsChange())},get wrapHorizontal(){return this._wrapHorizontal},set wrapHorizontal(o){let d=this._wrapHorizontal!==!!o;this._wrapHorizontal=!!o,this._initialized&&d&&(this.update(!0),this._needsDraw=!0)},get wrapVertical(){return this._wrapVertical},set wrapVertical(o){let d=this._wrapVertical!==!!o;this._wrapVertical=!!o,this._initialized&&d&&(this.update(!0),this._needsDraw=!0)},get debugMode(){return this._debugMode},set debugMode(o){this._debugMode=!!o,this._needsDraw=!0},getOpacity:function(){return this.opacity},setOpacity:function(o){this.opacity=o},get opacity(){return this._opacity},set opacity(o){o!==this.opacity&&(this._opacity=o,this._needsDraw=!0,this.raiseEvent("opacity-change",{opacity:this.opacity}))},getPreload:function(){return this._preload},setPreload:function(o){this._preload=!!o,this._needsDraw=!0},getRotation:function(o){return o?this._degreesSpring.current.value:this._degreesSpring.target.value},setRotation:function(o,d){this._degreesSpring.target.value===o&&this._degreesSpring.isAtTargetValue()||(d?this._degreesSpring.resetTo(o):this._degreesSpring.springTo(o),this._needsDraw=!0,this._needsUpdate=!0,this._raiseBoundsChange())},getDrawArea:function(){if(this._opacity===0&&!this._preload)return!1;var o=this._viewportToTiledImageRectangle(this.viewport.getBoundsWithMargins(!0));if(!this.wrapHorizontal&&!this.wrapVertical){var d=this._viewportToTiledImageRectangle(this.getClippedBounds(!0));o=o.intersection(d)}return o},getTilesToDraw:function(){let o=this._tilesToDraw.flat();return this._updateTilesInViewport(o),o=this._tilesToDraw.flat(),o.forEach(d=>{d.tile.beingDrawn=!0}),this._lastDrawn=o,o},_getRotationPoint:function(o){return this.getBoundsNoRotate(o).getCenter()},get compositeOperation(){return this._compositeOperation},set compositeOperation(o){o!==this._compositeOperation&&(this._compositeOperation=o,this._needsDraw=!0,this.raiseEvent("composite-operation-change",{compositeOperation:this._compositeOperation}))},getCompositeOperation:function(){return this._compositeOperation},setCompositeOperation:function(o){this.compositeOperation=o},setAjaxHeaders:function(o,d){if(o===null&&(o={}),!n.isPlainObject(o)){console.error("[TiledImage.setAjaxHeaders] Ignoring invalid headers, must be a plain object");return}this._ownAjaxHeaders=o,this._updateAjaxHeaders(d)},_updateAjaxHeaders:function(o){if(o===void 0&&(o=!0),n.isPlainObject(this.viewer.ajaxHeaders)?this.ajaxHeaders=n.extend({},this.viewer.ajaxHeaders,this._ownAjaxHeaders):this.ajaxHeaders=this._ownAjaxHeaders,o){var d,c,v,y;for(var a in this.tilesMatrix){d=this.source.getNumTiles(a);for(var w in this.tilesMatrix[a]){c=(d.x+w%d.x)%d.x;for(var _ in this.tilesMatrix[a][w])if(v=(d.y+_%d.y)%d.y,y=this.tilesMatrix[a][w][_],y.loadWithAjax=this.loadTilesWithAjax,y.loadWithAjax){var T=this.source.getTileAjaxHeaders(a,c,v);y.ajaxHeaders=n.extend({},this.ajaxHeaders,T)}else y.ajaxHeaders=null}}for(var I=0;I<this._imageLoader.jobQueue.length;I++){var k=this._imageLoader.jobQueue[I];k.loadWithAjax=k.tile.loadWithAjax,k.ajaxHeaders=k.tile.loadWithAjax?k.tile.ajaxHeaders:null}}},_setScale:function(o,d){var c=this._scaleSpring.target.value===o;if(d){if(c&&this._scaleSpring.current.value===o)return;this._scaleSpring.resetTo(o),this._updateForScale(),this._needsDraw=!0,this._needsUpdate=!0}else{if(c)return;this._scaleSpring.springTo(o),this._updateForScale(),this._needsDraw=!0,this._needsUpdate=!0}c||this._raiseBoundsChange()},_updateForScale:function(){this._worldWidthTarget=this._scaleSpring.target.value,this._worldHeightTarget=this.normHeight*this._scaleSpring.target.value,this._worldWidthCurrent=this._scaleSpring.current.value,this._worldHeightCurrent=this.normHeight*this._scaleSpring.current.value},_raiseBoundsChange:function(){this.raiseEvent("bounds-change")},_isBottomItem:function(){return this.viewer.world.getItemAt(0)===this},_getLevelsInterval:function(){var o=Math.max(this.source.minLevel,Math.floor(Math.log(this.minZoomImageRatio)/Math.log(2))),d=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(0),!0).x*this._scaleSpring.current.value,c=Math.min(Math.abs(this.source.maxLevel),Math.abs(Math.floor(Math.log(d/this.minPixelRatio)/Math.log(2))));return c=Math.max(c,this.source.minLevel||0),o=Math.min(o,c),{lowestLevel:o,highestLevel:c}},_updateLevelsForViewport:function(){var o=this._getLevelsInterval(),d=o.lowestLevel,c=o.highestLevel,v=[],y=this.getDrawArea(),a=n.now();if(this._lastDrawn.forEach(Ge=>{Ge.tile.beingDrawn=!1}),this._tilesToDraw=[],this._tilesLoading=0,this.loadingCoverage={},!y)return this._needsDraw=!1,this._fullyLoaded;var w=new Array(c-d+1);for(let Ge=0,je=c;je>=d;je--,Ge++)w[Ge]=je;for(let Ge=c+1;Ge<=this.source.maxLevel;Ge++){var _=this.tilesMatrix[Ge]&&this.tilesMatrix[Ge][0]&&this.tilesMatrix[Ge][0][0];if(_&&_.isBottomMost&&_.isRightMost&&_.loaded){w.push(Ge);break}}let T=!1;for(let Ge=0;Ge<w.length;Ge++){let je=w[Ge];var I=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(je),!0).x*this._scaleSpring.current.value;if(Ge===w.length-1||I>=this.minPixelRatio)T=!0;else if(!T)continue;var k=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(je),!1).x*this._scaleSpring.current.value,G=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(Math.max(this.source.getClosestLevel(),0)),!1).x*this._scaleSpring.current.value,W=this.immediateRender?1:G,O=Math.min(1,(I-.5)/.5),ee=W/Math.abs(W-k),ve=this._updateLevel(je,O,ee,y,a,v);v=ve.bestTiles;var we=ve.updatedTiles.filter(xt=>xt.loaded),ot=function(xt,Q,vt){return function(Ne){return{tile:Ne,level:xt,levelOpacity:Q,currentTime:vt}}}(je,O,a);if(this._tilesToDraw[je]=we.map(ot),this._providesCoverage(this.coverage,je))break}return v&&v.length>0?(v.forEach(function(Ge){Ge&&!Ge.context2D&&this._loadTile(Ge,a)},this),this._needsDraw=!0,!1):this._tilesLoading===0},_updateTilesInViewport:function(o){let d=n.now(),c=this;this._tilesLoading=0,this._wasBlending=this._isBlending,this._isBlending=!1,this.loadingCoverage={};let v=o.length?o[0].level:0;if(!this.getDrawArea())return;function a(_){let T=_.tile;if(T&&T.loaded){let I=c._blendTile(T,T.x,T.y,_.level,_.levelOpacity,d,v);c._isBlending=c._isBlending||I,c._needsDraw=c._needsDraw||I||c._wasBlending}}let w=0;for(let _=0;_<o.length;_++){let T=o[_];a(T),this._providesCoverage(this.coverage,T.level)&&(w=Math.max(w,T.level))}if(w>0)for(let _ in this._tilesToDraw)_<w&&delete this._tilesToDraw[_]},_blendTile:function(o,d,c,v,y,a,w){let _=1e3*this.blendTime,T,I;return o.blendStart||(o.blendStart=a),T=a-o.blendStart,I=_?Math.min(1,T/_):1,v===w&&(I=1,T=_),this.alwaysBlend&&(I*=y),o.opacity=I,I===1&&(this._setCoverage(this.coverage,v,d,c,!0),this._hasOpaqueTile=!0),T<_},_updateLevel:function(o,d,c,v,y,a){var w=v.getBoundingBox().getTopLeft(),_=v.getBoundingBox().getBottomRight();this.viewer&&this.viewer.raiseEvent("update-level",{tiledImage:this,havedrawn:!0,level:o,opacity:d,visibility:c,drawArea:v,topleft:w,bottomright:_,currenttime:y,best:a}),this._resetCoverage(this.coverage,o),this._resetCoverage(this.loadingCoverage,o);var T=this._getCornerTiles(o,w,_),I=T.topLeft,k=T.bottomRight,G=this.source.getNumTiles(o),W=this.viewport.pixelFromPoint(this.viewport.getCenter());this.getFlip()&&(k.x+=1,this.wrapHorizontal||(k.x=Math.min(k.x,G.x-1)));for(var O=Math.max(0,(k.x-I.x)*(k.y-I.y)),ee=new Array(O),ve=0,we=I.x;we<=k.x;we++)for(var ot=I.y;ot<=k.y;ot++){var Ge;if(this.getFlip()){var je=(G.x+we%G.x)%G.x;Ge=we+G.x-je-je-1}else Ge=we;if(v.intersection(this.getTileBounds(o,Ge,ot))!==null){var xt=this._updateTile(Ge,ot,o,c,W,G,y,a);a=xt.bestTiles,ee[ve]=xt.tile,ve+=1}}return{bestTiles:a,updatedTiles:ee}},_positionTile:function(o,d,c,v,y){var a=o.bounds.getTopLeft();a.x*=this._scaleSpring.current.value,a.y*=this._scaleSpring.current.value,a.x+=this._xSpring.current.value,a.y+=this._ySpring.current.value;var w=o.bounds.getSize();w.x*=this._scaleSpring.current.value,w.y*=this._scaleSpring.current.value,o.positionedBounds.x=a.x,o.positionedBounds.y=a.y,o.positionedBounds.width=w.x,o.positionedBounds.height=w.y;var _=c.pixelFromPointNoRotate(a,!0),T=c.pixelFromPointNoRotate(a,!1),I=c.deltaPixelsFromPointsNoRotate(w,!0),k=c.deltaPixelsFromPointsNoRotate(w,!1),G=T.plus(k.divide(2)),W=v.squaredDistanceTo(G);this.viewer.drawer.minimumOverlapRequired(this)&&(d||(I=I.plus(new n.Point(1,1))),o.isRightMost&&this.wrapHorizontal&&(I.x+=.75),o.isBottomMost&&this.wrapVertical&&(I.y+=.75)),o.position=_,o.size=I,o.squaredDistance=W,o.visibility=y},_updateTile:function(o,d,c,v,y,a,w,_){var T=this._getTile(o,d,c,w,a);this.viewer&&this.viewer.raiseEvent("update-tile",{tiledImage:this,tile:T}),this._setCoverage(this.coverage,c,o,d,!1);var I=T.loaded||T.loading||this._isCovered(this.loadingCoverage,c,o,d);if(this._setCoverage(this.loadingCoverage,c,o,d,I),!T.exists)return{bestTiles:_,tile:T};if(T.loaded&&T.opacity===1&&this._setCoverage(this.coverage,c,o,d,!0),this._positionTile(T,this.source.tileOverlap,this.viewport,y,v),!T.loaded)if(T.context2D)this._setTileLoaded(T);else{var k=this._tileCache.getImageRecord(T.cacheKey);k&&this._setTileLoaded(T,k.getData())}return T.loading?this._tilesLoading++:I||(_=this._compareTiles(_,T,this.maxTilesPerFrame)),{bestTiles:_,tile:T}},_getCornerTiles:function(o,d,c){var v,y;this.wrapHorizontal?(v=n.positiveModulo(d.x,1),y=n.positiveModulo(c.x,1)):(v=Math.max(0,d.x),y=Math.min(1,c.x));var a,w,_=1/this.source.aspectRatio;this.wrapVertical?(a=n.positiveModulo(d.y,_),w=n.positiveModulo(c.y,_)):(a=Math.max(0,d.y),w=Math.min(_,c.y));var T=this.source.getTileAtPoint(o,new n.Point(v,a)),I=this.source.getTileAtPoint(o,new n.Point(y,w)),k=this.source.getNumTiles(o);return this.wrapHorizontal&&(T.x+=k.x*Math.floor(d.x),I.x+=k.x*Math.floor(c.x)),this.wrapVertical&&(T.y+=k.y*Math.floor(d.y/_),I.y+=k.y*Math.floor(c.y/_)),{topLeft:T,bottomRight:I}},_getTile:function(o,d,c,v,y){var a,w,_,T,I,k,G,W,O,ee,ve=this.tilesMatrix,we=this.source;return ve[c]||(ve[c]={}),ve[c][o]||(ve[c][o]={}),(!ve[c][o][d]||!ve[c][o][d].flipped!=!this.flipped)&&(a=(y.x+o%y.x)%y.x,w=(y.y+d%y.y)%y.y,_=this.getTileBounds(c,o,d),T=we.getTileBounds(c,a,w,!0),I=we.tileExists(c,a,w),k=we.getTileUrl(c,a,w),G=we.getTilePostData(c,a,w),this.loadTilesWithAjax?(W=we.getTileAjaxHeaders(c,a,w),n.isPlainObject(this.ajaxHeaders)&&(W=n.extend({},this.ajaxHeaders,W))):W=null,O=we.getContext2D?we.getContext2D(c,a,w):void 0,ee=new n.Tile(c,o,d,_,I,k,O,this.loadTilesWithAjax,W,T,G,we.getTileHashKey(c,a,w,k,W,G)),this.getFlip()?a===0&&(ee.isRightMost=!0):a===y.x-1&&(ee.isRightMost=!0),w===y.y-1&&(ee.isBottomMost=!0),ee.flipped=this.flipped,ve[c][o][d]=ee),ee=ve[c][o][d],ee.lastTouchTime=v,ee},_loadTile:function(o,d){var c=this;o.loading=!0,this._imageLoader.addJob({src:o.getUrl(),tile:o,source:this.source,postData:o.postData,loadWithAjax:o.loadWithAjax,ajaxHeaders:o.ajaxHeaders,crossOriginPolicy:this.crossOriginPolicy,ajaxWithCredentials:this.ajaxWithCredentials,callback:function(v,y,a){c._onTileLoad(o,d,v,y,a)},abort:function(){o.loading=!1}})},_onTileLoad:function(o,d,c,v,y){if(c)o.exists=!0;else{n.console.error("Tile %s failed to load: %s - error: %s",o,o.getUrl(),v),this.viewer.raiseEvent("tile-load-failed",{tile:o,tiledImage:this,time:d,message:v,tileRequest:y}),o.loading=!1,o.exists=!1;return}if(d<this.lastResetTime){n.console.warn("Ignoring tile %s loaded before reset: %s",o,o.getUrl()),o.loading=!1;return}var a=this,w=function(){var _=a.source,T=_.getClosestLevel();a._setTileLoaded(o,c,T,y)};w()},_setTileLoaded:function(o,d,c,v){var y=0,a=!1,w=this;function _(){return a&&n.console.error("Event 'tile-loaded' argument getCompletionCallback must be called synchronously. Its return value should be called asynchronously."),y++,T}function T(){y--,y===0&&(o.loading=!1,o.loaded=!0,o.hasTransparency=w.source.hasTransparency(o.context2D,o.getUrl(),o.ajaxHeaders,o.postData),o.context2D||w._tileCache.cacheTile({data:d,tile:o,cutoff:c,tiledImage:w}),w.viewer.raiseEvent("tile-ready",{tile:o,tiledImage:w,tileRequest:v}),w._needsDraw=!0)}var I=_();this.viewer.raiseEvent("tile-loaded",{tile:o,tiledImage:this,tileRequest:v,get image(){return n.console.error("[tile-loaded] event 'image' has been deprecated. Use 'data' property instead."),d},data:d,getCompletionCallback:_}),a=!0,I()},_compareTiles:function(o,d,c){return o?(o.push(d),this._sortTiles(o),o.length>c&&o.pop(),o):[d]},_sortTiles:function(o){o.sort(function(d,c){return d===null?1:c===null?-1:d.visibility===c.visibility?d.squaredDistance-c.squaredDistance:c.visibility-d.visibility})},_providesCoverage:function(o,d,c,v){var y,a,w,_;if(!o[d])return!1;if(c===void 0||v===void 0){y=o[d];for(w in y)if(Object.prototype.hasOwnProperty.call(y,w)){a=y[w];for(_ in a)if(Object.prototype.hasOwnProperty.call(a,_)&&!a[_])return!1}return!0}return o[d][c]===void 0||o[d][c][v]===void 0||o[d][c][v]===!0},_isCovered:function(o,d,c,v){return c===void 0||v===void 0?this._providesCoverage(o,d+1):this._providesCoverage(o,d+1,2*c,2*v)&&this._providesCoverage(o,d+1,2*c,2*v+1)&&this._providesCoverage(o,d+1,2*c+1,2*v)&&this._providesCoverage(o,d+1,2*c+1,2*v+1)},_setCoverage:function(o,d,c,v,y){if(!o[d]){n.console.warn("Setting coverage for a tile before its level's coverage has been reset: %s",d);return}o[d][c]||(o[d][c]={}),o[d][c][v]=y},_resetCoverage:function(o,d){o[d]={}}})}(Pe),function(n){var o=function(c){n.console.assert(c,"[TileCache.cacheTile] options is required"),n.console.assert(c.tile,"[TileCache.cacheTile] options.tile is required"),n.console.assert(c.tiledImage,"[TileCache.cacheTile] options.tiledImage is required"),this.tile=c.tile,this.tiledImage=c.tiledImage},d=function(c){n.console.assert(c,"[ImageRecord] options is required"),n.console.assert(c.data,"[ImageRecord] options.data is required"),this._tiles=[],c.create.apply(null,[this,c.data,c.ownerTile]),this._destroyImplementation=c.destroy.bind(null,this),this.getImage=c.getImage.bind(null,this),this.getData=c.getData.bind(null,this),this.getRenderedContext=c.getRenderedContext.bind(null,this)};d.prototype={destroy:function(){this._destroyImplementation(),this._tiles=null},addTile:function(c){n.console.assert(c,"[ImageRecord.addTile] tile is required"),this._tiles.push(c)},removeTile:function(c){for(var v=0;v<this._tiles.length;v++)if(this._tiles[v]===c){this._tiles.splice(v,1);return}n.console.warn("[ImageRecord.removeTile] trying to remove unknown tile",c)},getTileCount:function(){return this._tiles.length}},n.TileCache=function(c){c=c||{},this._maxImageCacheCount=c.maxImageCacheCount||n.DEFAULT_SETTINGS.maxImageCacheCount,this._tilesLoaded=[],this._imagesLoaded=[],this._imagesLoadedCount=0},n.TileCache.prototype={numTilesLoaded:function(){return this._tilesLoaded.length},cacheTile:function(c){n.console.assert(c,"[TileCache.cacheTile] options is required"),n.console.assert(c.tile,"[TileCache.cacheTile] options.tile is required"),n.console.assert(c.tile.cacheKey,"[TileCache.cacheTile] options.tile.cacheKey is required"),n.console.assert(c.tiledImage,"[TileCache.cacheTile] options.tiledImage is required");var v=c.cutoff||0,y=this._tilesLoaded.length,a=this._imagesLoaded[c.tile.cacheKey];if(a||(c.data||(n.console.error("[TileCache.cacheTile] options.image was renamed to options.data. '.image' attribute has been deprecated and will be removed in the future."),c.data=c.image),n.console.assert(c.data,"[TileCache.cacheTile] options.data is required to create an ImageRecord"),a=this._imagesLoaded[c.tile.cacheKey]=new d({data:c.data,ownerTile:c.tile,create:c.tiledImage.source.createTileCache,destroy:c.tiledImage.source.destroyTileCache,getImage:c.tiledImage.source.getTileCacheDataAsImage,getData:c.tiledImage.source.getTileCacheData,getRenderedContext:c.tiledImage.source.getTileCacheDataAsContext2D}),this._imagesLoadedCount++),a.addTile(c.tile),c.tile.cacheImageRecord=a,this._imagesLoadedCount>this._maxImageCacheCount){for(var w=null,_=-1,T=null,I,k,G,W,O,ee,ve=this._tilesLoaded.length-1;ve>=0;ve--)if(ee=this._tilesLoaded[ve],I=ee.tile,!(I.level<=v||I.beingDrawn)){if(!w){w=I,_=ve,T=ee;continue}W=I.lastTouchTime,k=w.lastTouchTime,O=I.level,G=w.level,(W<k||W===k&&O>G)&&(w=I,_=ve,T=ee)}w&&_>=0&&(this._unloadTile(T),y=_)}this._tilesLoaded[y]=new o({tile:c.tile,tiledImage:c.tiledImage})},clearTilesFor:function(c){n.console.assert(c,"[TileCache.clearTilesFor] tiledImage is required");for(var v,y=0;y<this._tilesLoaded.length;++y)v=this._tilesLoaded[y],v.tiledImage===c&&(this._unloadTile(v),this._tilesLoaded.splice(y,1),y--)},getImageRecord:function(c){return n.console.assert(c,"[TileCache.getImageRecord] cacheKey is required"),this._imagesLoaded[c]},_unloadTile:function(c){n.console.assert(c,"[TileCache._unloadTile] tileRecord is required");var v=c.tile,y=c.tiledImage;let a=v.getCanvasContext&&v.getCanvasContext();v.unload(),v.cacheImageRecord=null;var w=this._imagesLoaded[v.cacheKey];w&&(w.removeTile(v),w.getTileCount()||(w.destroy(),delete this._imagesLoaded[v.cacheKey],this._imagesLoadedCount--,a&&(a.canvas.width=0,a.canvas.height=0,y.viewer.raiseEvent("image-unloaded",{context2D:a,tile:v}))),y.viewer.raiseEvent("tile-unloaded",{tile:v,tiledImage:y}))}}}(Pe),function(n){n.World=function(o){var d=this;n.console.assert(o.viewer,"[World] options.viewer is required"),n.EventSource.call(this),this.viewer=o.viewer,this._items=[],this._needsDraw=!1,this._autoRefigureSizes=!0,this._needsSizesFigured=!1,this._delegatedFigureSizes=function(c){d._autoRefigureSizes?d._figureSizes():d._needsSizesFigured=!0},this._figureSizes()},n.extend(n.World.prototype,n.EventSource.prototype,{addItem:function(o,d){if(n.console.assert(o,"[World.addItem] item is required"),n.console.assert(o instanceof n.TiledImage,"[World.addItem] only TiledImages supported at this time"),d=d||{},d.index!==void 0){var c=Math.max(0,Math.min(this._items.length,d.index));this._items.splice(c,0,o)}else this._items.push(o);this._autoRefigureSizes?this._figureSizes():this._needsSizesFigured=!0,this._needsDraw=!0,o.addHandler("bounds-change",this._delegatedFigureSizes),o.addHandler("clip-change",this._delegatedFigureSizes),this.raiseEvent("add-item",{item:o})},getItemAt:function(o){return n.console.assert(o!==void 0,"[World.getItemAt] index is required"),this._items[o]},getIndexOfItem:function(o){return n.console.assert(o,"[World.getIndexOfItem] item is required"),n.indexOf(this._items,o)},getItemCount:function(){return this._items.length},setItemIndex:function(o,d){n.console.assert(o,"[World.setItemIndex] item is required"),n.console.assert(d!==void 0,"[World.setItemIndex] index is required");var c=this.getIndexOfItem(o);if(d>=this._items.length)throw new Error("Index bigger than number of layers.");d===c||c===-1||(this._items.splice(c,1),this._items.splice(d,0,o),this._needsDraw=!0,this.raiseEvent("item-index-change",{item:o,previousIndex:c,newIndex:d}))},removeItem:function(o){n.console.assert(o,"[World.removeItem] item is required");var d=n.indexOf(this._items,o);d!==-1&&(o.removeHandler("bounds-change",this._delegatedFigureSizes),o.removeHandler("clip-change",this._delegatedFigureSizes),o.destroy(),this._items.splice(d,1),this._figureSizes(),this._needsDraw=!0,this._raiseRemoveItem(o))},removeAll:function(){this.viewer._cancelPendingImages();var o,d;for(d=0;d<this._items.length;d++)o=this._items[d],o.removeHandler("bounds-change",this._delegatedFigureSizes),o.removeHandler("clip-change",this._delegatedFigureSizes),o.destroy();var c=this._items;for(this._items=[],this._figureSizes(),this._needsDraw=!0,d=0;d<c.length;d++)o=c[d],this._raiseRemoveItem(o)},resetItems:function(){for(var o=0;o<this._items.length;o++)this._items[o].reset()},update:function(o){for(var d=!1,c=0;c<this._items.length;c++)d=this._items[c].update(o)||d;return d},draw:function(){this.viewer.drawer.draw(this._items),this._needsDraw=!1,this._items.forEach(o=>{this._needsDraw=o.setDrawn()||this._needsDraw})},needsDraw:function(){for(var o=0;o<this._items.length;o++)if(this._items[o].needsDraw())return!0;return this._needsDraw},getHomeBounds:function(){return this._homeBounds.clone()},getContentFactor:function(){return this._contentFactor},setAutoRefigureSizes:function(o){this._autoRefigureSizes=o,o&this._needsSizesFigured&&(this._figureSizes(),this._needsSizesFigured=!1)},arrange:function(o){o=o||{};var d=o.immediately||!1,c=o.layout||n.DEFAULT_SETTINGS.collectionLayout,v=o.rows||n.DEFAULT_SETTINGS.collectionRows,y=o.columns||n.DEFAULT_SETTINGS.collectionColumns,a=o.tileSize||n.DEFAULT_SETTINGS.collectionTileSize,w=o.tileMargin||n.DEFAULT_SETTINGS.collectionTileMargin,_=a+w,T;!o.rows&&y?T=y:T=Math.ceil(this._items.length/v);var I=0,k=0,G,W,O,ee,ve;this.setAutoRefigureSizes(!1);for(var we=0;we<this._items.length;we++)we&&we%T===0&&(c==="horizontal"?(k+=_,I=0):(I+=_,k=0)),G=this._items[we],W=G.getBounds(),W.width>W.height?O=a:O=a*(W.width/W.height),ee=O*(W.height/W.width),ve=new n.Point(I+(a-O)/2,k+(a-ee)/2),G.setPosition(ve,d),G.setWidth(O,d),c==="horizontal"?I+=_:k+=_;this.setAutoRefigureSizes(!0)},_figureSizes:function(){var o=this._homeBounds?this._homeBounds.clone():null,d=this._contentSize?this._contentSize.clone():null,c=this._contentFactor||0;if(!this._items.length)this._homeBounds=new n.Rect(0,0,1,1),this._contentSize=new n.Point(1,1),this._contentFactor=1;else{var v=this._items[0],y=v.getBounds();this._contentFactor=v.getContentSize().x/y.width;for(var a=v.getClippedBounds().getBoundingBox(),w=a.x,_=a.y,T=a.x+a.width,I=a.y+a.height,k=1;k<this._items.length;k++)v=this._items[k],y=v.getBounds(),this._contentFactor=Math.max(this._contentFactor,v.getContentSize().x/y.width),a=v.getClippedBounds().getBoundingBox(),w=Math.min(w,a.x),_=Math.min(_,a.y),T=Math.max(T,a.x+a.width),I=Math.max(I,a.y+a.height);this._homeBounds=new n.Rect(w,_,T-w,I-_),this._contentSize=new n.Point(this._homeBounds.width*this._contentFactor,this._homeBounds.height*this._contentFactor)}(this._contentFactor!==c||!this._homeBounds.equals(o)||!this._contentSize.equals(d))&&this.raiseEvent("metrics-change",{})},_raiseRemoveItem:function(o){this.raiseEvent("remove-item",{item:o})}})}(Pe)}(Ui)),Ui.exports}var rn=Yi();const sn=nn(rn);var Xi={exports:{}};/*! For license information please see main.js.LICENSE.txt */(function($e,Pe){(function(n,o){$e.exports=o(Yi())})(self,n=>(()=>{var o={946:(y,a,w)=>{w.d(a,{A:()=>G});var _=w(354),T=w.n(_),I=w(314),k=w.n(I)()(T());k.push([y.id,`/**
79
+ `;let y=this._gl,a=this.constructor.initShaderProgram(y,h,m);y.useProgram(a),this._secondPass={shaderProgram:a,aOutputPosition:y.getAttribLocation(a,"a_output_position"),aTexturePosition:y.getAttribLocation(a,"a_texture_position"),uMatrix:y.getUniformLocation(a,"u_matrix"),uImage:y.getUniformLocation(a,"u_image"),uOpacityMultiplier:y.getUniformLocation(a,"u_opacity_multiplier"),bufferOutputPosition:y.createBuffer(),bufferTexturePosition:y.createBuffer()},y.bindBuffer(y.ARRAY_BUFFER,this._secondPass.bufferOutputPosition),y.bufferData(y.ARRAY_BUFFER,this._unitQuad,y.STATIC_DRAW),y.enableVertexAttribArray(this._secondPass.aOutputPosition),y.bindBuffer(y.ARRAY_BUFFER,this._secondPass.bufferTexturePosition),y.bufferData(y.ARRAY_BUFFER,this._unitQuad,y.DYNAMIC_DRAW),y.enableVertexAttribArray(this._secondPass.aTexturePosition);let w=n.Mat3.makeScaling(2,2).multiply(n.Mat3.makeTranslation(-.5,-.5));y.uniformMatrix3fv(this._secondPass.uMatrix,!1,w.values)}_resizeRenderer(){let h=this._gl,m=this._renderingCanvas.width,y=this._renderingCanvas.height;h.viewport(0,0,m,y),h.deleteTexture(this._renderToTexture),this._renderToTexture=h.createTexture(),h.activeTexture(h.TEXTURE0),h.bindTexture(h.TEXTURE_2D,this._renderToTexture),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,m,y,0,h.RGBA,h.UNSIGNED_BYTE,null),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,this._textureFilter()),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.bindFramebuffer(h.FRAMEBUFFER,this._glFrameBuffer),h.framebufferTexture2D(h.FRAMEBUFFER,h.COLOR_ATTACHMENT0,h.TEXTURE_2D,this._renderToTexture,0)}_setupCanvases(){let h=this;this._outputCanvas=this.canvas,this._outputContext=this._outputCanvas.getContext("2d"),this._renderingCanvas=document.createElement("canvas"),this._clippingCanvas=document.createElement("canvas"),this._clippingContext=this._clippingCanvas.getContext("2d"),this._renderingCanvas.width=this._clippingCanvas.width=this._outputCanvas.width,this._renderingCanvas.height=this._clippingCanvas.height=this._outputCanvas.height,this._gl=this._renderingCanvas.getContext("webgl"),this._resizeHandler=function(){h._outputCanvas!==h.viewer.drawer.canvas&&(h._outputCanvas.style.width=h.viewer.drawer.canvas.clientWidth+"px",h._outputCanvas.style.height=h.viewer.drawer.canvas.clientHeight+"px");let m=h._calculateCanvasSize();(h._outputCanvas.width!==m.x||h._outputCanvas.height!==m.y)&&(h._outputCanvas.width=m.x,h._outputCanvas.height=m.y),h._renderingCanvas.style.width=h._outputCanvas.clientWidth+"px",h._renderingCanvas.style.height=h._outputCanvas.clientHeight+"px",h._renderingCanvas.width=h._clippingCanvas.width=h._outputCanvas.width,h._renderingCanvas.height=h._clippingCanvas.height=h._outputCanvas.height,h._resizeRenderer()},this.viewer.addHandler("resize",this._resizeHandler)}_makeQuadVertexBuffer(h,m,y,a){return new Float32Array([h,a,m,a,h,y,h,y,m,a,m,y])}_tileReadyHandler(h){let m=h.tile,y=h.tiledImage;if(y.isTainted())return;let a=m.getCanvasContext(),w=a&&a.canvas;if(!w||n.isCanvasTainted(w)){y.isTainted()||(y.setTainted(!0),n.console.warn("WebGL cannot be used to draw this TiledImage because it has tainted data. Does crossOriginPolicy need to be set?"),this._raiseDrawerErrorEvent(y,"Tainted data cannot be used by the WebGLDrawer. Falling back to CanvasDrawer for this TiledImage."));return}if(!this._TextureMap.get(w)){let A=this._gl,R=A.createTexture(),k,G=y.source.tileOverlap,W,O;if(m.sourceBounds?(W=Math.min(m.sourceBounds.width,w.width)/w.width,O=Math.min(m.sourceBounds.height,w.height)/w.height):(W=1,O=1),G>0){let ye=this._calculateOverlapFraction(m,y),we=(m.x===0?0:ye.x)*W,ht=(m.y===0?0:ye.y)*O,tt=(m.isRightMost?1:1-ye.x)*W,Ve=(m.isBottomMost?1:1-ye.y)*O;k=this._makeQuadVertexBuffer(we,tt,ht,Ve)}else W===1&&O===1?k=this._unitQuad:k=this._makeQuadVertexBuffer(0,W,0,O);let $={texture:R,position:k};this._TextureMap.set(w,$),A.activeTexture(A.TEXTURE0),A.bindTexture(A.TEXTURE_2D,R),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_WRAP_S,A.CLAMP_TO_EDGE),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_WRAP_T,A.CLAMP_TO_EDGE),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MIN_FILTER,this._textureFilter()),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MAG_FILTER,this._textureFilter()),this._uploadImageData(a)}}_calculateOverlapFraction(h,m){let y=m.source.tileOverlap,a=h.sourceBounds.width,w=h.sourceBounds.height,_=(h.x===0?0:y)+(h.isRightMost?0:y),A=(h.y===0?0:y)+(h.isBottomMost?0:y),R=y/(a+_),k=y/(w+A);return{x:R,y:k}}_unloadTextures(){Array.from(this._TextureMap.keys()).forEach(m=>{this._cleanupImageData(m)})}_uploadImageData(h){let m=this._gl,y=h.canvas;try{if(!y)throw h;m.texImage2D(m.TEXTURE_2D,0,m.RGBA,m.RGBA,m.UNSIGNED_BYTE,y)}catch(a){n.console.error("Error uploading image data to WebGL",a)}}_imageUnloadedHandler(h){let m=h.context2D.canvas;this._cleanupImageData(m)}_cleanupImageData(h){let m=this._TextureMap.get(h);this._TextureMap.delete(h),m&&this._gl.deleteTexture(m.texture)}_setClip(){}_renderToClippingCanvas(h){if(this._clippingContext.clearRect(0,0,this._clippingCanvas.width,this._clippingCanvas.height),this._clippingContext.save(),this.viewer.viewport.getFlip()){const m=new n.Point(this.canvas.width/2,this.canvas.height/2);this._clippingContext.translate(m.x,0),this._clippingContext.scale(-1,1),this._clippingContext.translate(-m.x,0)}if(h._clip){let y=[{x:h._clip.x,y:h._clip.y},{x:h._clip.x+h._clip.width,y:h._clip.y},{x:h._clip.x+h._clip.width,y:h._clip.y+h._clip.height},{x:h._clip.x,y:h._clip.y+h._clip.height}].map(a=>{let w=h.imageToViewportCoordinates(a.x,a.y,!0).rotate(this.viewer.viewport.getRotation(!0),this.viewer.viewport.getCenter(!0));return this.viewportCoordToDrawerCoord(w)});this._clippingContext.beginPath(),y.forEach((a,w)=>{this._clippingContext[w===0?"moveTo":"lineTo"](a.x,a.y)}),this._clippingContext.clip(),this._setClip()}if(h._croppingPolygons){let m=h._croppingPolygons.map(y=>y.map(a=>{let w=h.imageToViewportCoordinates(a.x,a.y,!0).rotate(this.viewer.viewport.getRotation(!0),this.viewer.viewport.getCenter(!0));return this.viewportCoordToDrawerCoord(w)}));this._clippingContext.beginPath(),m.forEach(y=>{y.forEach((a,w)=>{this._clippingContext[w===0?"moveTo":"lineTo"](a.x,a.y)})}),this._clippingContext.clip()}if(this.viewer.viewport.getFlip()){const m=new n.Point(this.canvas.width/2,this.canvas.height/2);this._clippingContext.translate(m.x,0),this._clippingContext.scale(-1,1),this._clippingContext.translate(-m.x,0)}this._clippingContext.drawImage(this._renderingCanvas,0,0),this._clippingContext.restore()}_setRotations(h){var m=!1;this.viewport.getRotation(!0)%360!==0&&(this._offsetForRotation({degrees:this.viewport.getRotation(!0),saveContext:m}),m=!1),h.getRotation(!0)%360!==0&&this._offsetForRotation({degrees:h.getRotation(!0),point:this.viewport.pixelFromPointNoRotate(h._getRotationPoint(!0),!0),saveContext:m})}_offsetForRotation(h){var m=h.point?h.point.times(n.pixelDensityRatio):this._getCanvasCenter(),y=this._outputContext;y.save(),y.translate(m.x,m.y),y.rotate(Math.PI/180*h.degrees),y.translate(-m.x,-m.y)}_flip(h){h=h||{};var m=h.point?h.point.times(n.pixelDensityRatio):this._getCanvasCenter(),y=this._outputContext;y.translate(m.x,0),y.scale(-1,1),y.translate(-m.x,0)}_drawDebugInfo(h,m,y){for(var a=h.length-1;a>=0;a--){var w=h[a].tile;try{this._drawDebugInfoOnTile(w,h.length,a,m,y)}catch(_){n.console.error(_)}}}_drawDebugInfoOnTile(h,m,y,a,w){var _=this.viewer.world.getIndexOfItem(a)%this.debugGridColor.length,A=this.context;A.save(),A.lineWidth=2*n.pixelDensityRatio,A.font="small-caps bold "+13*n.pixelDensityRatio+"px arial",A.strokeStyle=this.debugGridColor[_],A.fillStyle=this.debugGridColor[_],this._setRotations(a),w&&this._flip({point:h.position.plus(h.size.divide(2))}),A.strokeRect(h.position.x*n.pixelDensityRatio,h.position.y*n.pixelDensityRatio,h.size.x*n.pixelDensityRatio,h.size.y*n.pixelDensityRatio);var R=(h.position.x+h.size.x/2)*n.pixelDensityRatio,k=(h.position.y+h.size.y/2)*n.pixelDensityRatio;A.translate(R,k);const G=this.viewport.getRotation(!0);A.rotate(Math.PI/180*-G),A.translate(-R,-k),h.x===0&&h.y===0&&(A.fillText("Zoom: "+this.viewport.getZoom(),h.position.x*n.pixelDensityRatio,(h.position.y-30)*n.pixelDensityRatio),A.fillText("Pan: "+this.viewport.getBounds().toString(),h.position.x*n.pixelDensityRatio,(h.position.y-20)*n.pixelDensityRatio)),A.fillText("Level: "+h.level,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+20)*n.pixelDensityRatio),A.fillText("Column: "+h.x,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+30)*n.pixelDensityRatio),A.fillText("Row: "+h.y,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+40)*n.pixelDensityRatio),A.fillText("Order: "+y+" of "+m,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+50)*n.pixelDensityRatio),A.fillText("Size: "+h.size.toString(),(h.position.x+10)*n.pixelDensityRatio,(h.position.y+60)*n.pixelDensityRatio),A.fillText("Position: "+h.position.toString(),(h.position.x+10)*n.pixelDensityRatio,(h.position.y+70)*n.pixelDensityRatio),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(),a.getRotation(!0)%360!==0&&this._restoreRotationChanges(),A.restore()}_drawPlaceholder(h){const m=h.getBounds(!0),y=this.viewportToDrawerRectangle(h.getBounds(!0)),a=this._outputContext;let w;typeof h.placeholderFillStyle=="function"?w=h.placeholderFillStyle(h,a):w=h.placeholderFillStyle,this._offsetForRotation({degrees:this.viewer.viewport.getRotation(!0)}),a.fillStyle=w,a.translate(y.x,y.y),a.rotate(Math.PI/180*m.degrees),a.translate(-y.x,-y.y),a.fillRect(y.x,y.y,y.width,y.height),this._restoreRotationChanges()}_getCanvasCenter(){return new n.Point(this.canvas.width/2,this.canvas.height/2)}_restoreRotationChanges(){var h=this._outputContext;h.restore()}static initShaderProgram(h,m,y){function a(R,k,G){const W=R.createShader(k);return R.shaderSource(W,G),R.compileShader(W),R.getShaderParameter(W,R.COMPILE_STATUS)?W:(n.console.error(`An error occurred compiling the shaders: ${R.getShaderInfoLog(W)}`),R.deleteShader(W),null)}const w=a(h,h.VERTEX_SHADER,m),_=a(h,h.FRAGMENT_SHADER,y),A=h.createProgram();return h.attachShader(A,w),h.attachShader(A,_),h.linkProgram(A),h.getProgramParameter(A,h.LINK_STATUS)?A:(n.console.error(`Unable to initialize the shader program: ${h.getProgramInfoLog(A)}`),null)}}}(ae),function(n){n.Viewport=function(o){var u=arguments;u.length&&u[0]instanceof n.Point&&(o={containerSize:u[0],contentSize:u[1],config:u[2]}),o.config&&(n.extend(!0,o,o.config),delete o.config),this._margins=n.extend({left:0,top:0,right:0,bottom:0},o.margins||{}),delete o.margins,o.initialDegrees=o.degrees,delete o.degrees,n.extend(!0,this,{containerSize:null,contentSize:null,zoomPoint:null,rotationPivot:null,viewer:null,springStiffness:n.DEFAULT_SETTINGS.springStiffness,animationTime:n.DEFAULT_SETTINGS.animationTime,minZoomImageRatio:n.DEFAULT_SETTINGS.minZoomImageRatio,maxZoomPixelRatio:n.DEFAULT_SETTINGS.maxZoomPixelRatio,visibilityRatio:n.DEFAULT_SETTINGS.visibilityRatio,wrapHorizontal:n.DEFAULT_SETTINGS.wrapHorizontal,wrapVertical:n.DEFAULT_SETTINGS.wrapVertical,defaultZoomLevel:n.DEFAULT_SETTINGS.defaultZoomLevel,minZoomLevel:n.DEFAULT_SETTINGS.minZoomLevel,maxZoomLevel:n.DEFAULT_SETTINGS.maxZoomLevel,initialDegrees:n.DEFAULT_SETTINGS.degrees,flipped:n.DEFAULT_SETTINGS.flipped,homeFillsViewer:n.DEFAULT_SETTINGS.homeFillsViewer,silenceMultiImageWarnings:n.DEFAULT_SETTINGS.silenceMultiImageWarnings},o),this._updateContainerInnerSize(),this.centerSpringX=new n.Spring({initial:0,springStiffness:this.springStiffness,animationTime:this.animationTime}),this.centerSpringY=new n.Spring({initial:0,springStiffness:this.springStiffness,animationTime:this.animationTime}),this.zoomSpring=new n.Spring({exponential:!0,initial:1,springStiffness:this.springStiffness,animationTime:this.animationTime}),this.degreesSpring=new n.Spring({initial:o.initialDegrees,springStiffness:this.springStiffness,animationTime:this.animationTime}),this._oldCenterX=this.centerSpringX.current.value,this._oldCenterY=this.centerSpringY.current.value,this._oldZoom=this.zoomSpring.current.value,this._oldDegrees=this.degreesSpring.current.value,this._setContentBounds(new n.Rect(0,0,1,1),1),this.goHome(!0),this.update()},n.Viewport.prototype={get degrees(){return n.console.warn("Accessing [Viewport.degrees] is deprecated. Use viewport.getRotation instead."),this.getRotation()},set degrees(o){n.console.warn("Setting [Viewport.degrees] is deprecated. Use viewport.rotateTo, viewport.rotateBy, or viewport.setRotation instead."),this.rotateTo(o)},resetContentSize:function(o){return n.console.assert(o,"[Viewport.resetContentSize] contentSize is required"),n.console.assert(o instanceof n.Point,"[Viewport.resetContentSize] contentSize must be an OpenSeadragon.Point"),n.console.assert(o.x>0,"[Viewport.resetContentSize] contentSize.x must be greater than 0"),n.console.assert(o.y>0,"[Viewport.resetContentSize] contentSize.y must be greater than 0"),this._setContentBounds(new n.Rect(0,0,1,o.y/o.x),o.x),this},setHomeBounds:function(o,u){n.console.error("[Viewport.setHomeBounds] this function is deprecated; The content bounds should not be set manually."),this._setContentBounds(o,u)},_setContentBounds:function(o,u){n.console.assert(o,"[Viewport._setContentBounds] bounds is required"),n.console.assert(o instanceof n.Rect,"[Viewport._setContentBounds] bounds must be an OpenSeadragon.Rect"),n.console.assert(o.width>0,"[Viewport._setContentBounds] bounds.width must be greater than 0"),n.console.assert(o.height>0,"[Viewport._setContentBounds] bounds.height must be greater than 0"),this._contentBoundsNoRotate=o.clone(),this._contentSizeNoRotate=this._contentBoundsNoRotate.getSize().times(u),this._contentBounds=o.rotate(this.getRotation()).getBoundingBox(),this._contentSize=this._contentBounds.getSize().times(u),this._contentAspectRatio=this._contentSize.x/this._contentSize.y,this.viewer&&this.viewer.raiseEvent("reset-size",{contentSize:this._contentSizeNoRotate.clone(),contentFactor:u,homeBounds:this._contentBoundsNoRotate.clone(),contentBounds:this._contentBounds.clone()})},getHomeZoom:function(){if(this.defaultZoomLevel)return this.defaultZoomLevel;var o=this._contentAspectRatio/this.getAspectRatio(),u;return this.homeFillsViewer?u=o>=1?o:1:u=o>=1?1:o,u/this._contentBounds.width},getHomeBounds:function(){return this.getHomeBoundsNoRotate().rotate(-this.getRotation())},getHomeBoundsNoRotate:function(){var o=this._contentBounds.getCenter(),u=1/this.getHomeZoom(),h=u/this.getAspectRatio();return new n.Rect(o.x-u/2,o.y-h/2,u,h)},goHome:function(o){return this.viewer&&this.viewer.raiseEvent("home",{immediately:o}),this.fitBounds(this.getHomeBounds(),o)},getMinZoom:function(){var o=this.getHomeZoom(),u=this.minZoomLevel?this.minZoomLevel:this.minZoomImageRatio*o;return u},getMaxZoom:function(){var o=this.maxZoomLevel;return o||(o=this._contentSize.x*this.maxZoomPixelRatio/this._containerInnerSize.x,o/=this._contentBounds.width),Math.max(o,this.getHomeZoom())},getAspectRatio:function(){return this._containerInnerSize.x/this._containerInnerSize.y},getContainerSize:function(){return new n.Point(this.containerSize.x,this.containerSize.y)},getMargins:function(){return n.extend({},this._margins)},setMargins:function(o){n.console.assert(n.type(o)==="object","[Viewport.setMargins] margins must be an object"),this._margins=n.extend({left:0,top:0,right:0,bottom:0},o),this._updateContainerInnerSize(),this.viewer&&this.viewer.forceRedraw()},getBounds:function(o){return this.getBoundsNoRotate(o).rotate(-this.getRotation(o))},getBoundsNoRotate:function(o){var u=this.getCenter(o),h=1/this.getZoom(o),m=h/this.getAspectRatio();return new n.Rect(u.x-h/2,u.y-m/2,h,m)},getBoundsWithMargins:function(o){return this.getBoundsNoRotateWithMargins(o).rotate(-this.getRotation(o),this.getCenter(o))},getBoundsNoRotateWithMargins:function(o){var u=this.getBoundsNoRotate(o),h=this._containerInnerSize.x*this.getZoom(o);return u.x-=this._margins.left/h,u.y-=this._margins.top/h,u.width+=(this._margins.left+this._margins.right)/h,u.height+=(this._margins.top+this._margins.bottom)/h,u},getCenter:function(o){var u=new n.Point(this.centerSpringX.current.value,this.centerSpringY.current.value),h=new n.Point(this.centerSpringX.target.value,this.centerSpringY.target.value),m,y,a,w,_,A,R,k;return o?u:this.zoomPoint?(m=this.pixelFromPoint(this.zoomPoint,!0),y=this.getZoom(),a=1/y,w=a/this.getAspectRatio(),_=new n.Rect(u.x-a/2,u.y-w/2,a,w),A=this._pixelFromPoint(this.zoomPoint,_),R=A.minus(m).rotate(-this.getRotation(!0)),k=R.divide(this._containerInnerSize.x*y),h.plus(k)):h},getZoom:function(o){return o?this.zoomSpring.current.value:this.zoomSpring.target.value},_applyZoomConstraints:function(o){return Math.max(Math.min(o,this.getMaxZoom()),this.getMinZoom())},_applyBoundaryConstraints:function(o){var u=this.viewportToViewerElementRectangle(o).getBoundingBox(),h=this.viewportToViewerElementRectangle(this._contentBoundsNoRotate).getBoundingBox(),m=!1,y=!1;if(!this.wrapHorizontal){var a=u.x+u.width,w=h.x+h.width,_,A,R;u.width>h.width?_=this.visibilityRatio*h.width:_=this.visibilityRatio*u.width,A=h.x-a+_,R=w-u.x-_,_>h.width?(u.x+=(A+R)/2,m=!0):R<0?(u.x+=R,m=!0):A>0&&(u.x+=A,m=!0)}if(!this.wrapVertical){var k=u.y+u.height,G=h.y+h.height,W,O,$;u.height>h.height?W=this.visibilityRatio*h.height:W=this.visibilityRatio*u.height,O=h.y-k+W,$=G-u.y-W,W>h.height?(u.y+=(O+$)/2,y=!0):$<0?(u.y+=$,y=!0):O>0&&(u.y+=O,y=!0)}var ye=m||y,we=ye?this.viewerElementToViewportRectangle(u):o.clone();return we.xConstrained=m,we.yConstrained=y,we.constraintApplied=ye,we},_raiseConstraintsEvent:function(o){this.viewer&&this.viewer.raiseEvent("constrain",{immediately:o})},applyConstraints:function(o){var u=this.getZoom(),h=this._applyZoomConstraints(u);u!==h&&this.zoomTo(h,this.zoomPoint,o);var m=this.getConstrainedBounds(!1);return m.constraintApplied&&(this.fitBounds(m,o),this._raiseConstraintsEvent(o)),this},ensureVisible:function(o){return this.applyConstraints(o)},_fitBounds:function(o,u){u=u||{};var h=u.immediately||!1,m=u.constraints||!1,y=this.getAspectRatio(),a=o.getCenter(),w=new n.Rect(o.x,o.y,o.width,o.height,o.degrees+this.getRotation()).getBoundingBox();w.getAspectRatio()>=y?w.height=w.width/y:w.width=w.height*y,w.x=a.x-w.width/2,w.y=a.y-w.height/2;var _=1/w.width;if(h)return this.panTo(a,!0),this.zoomTo(_,null,!0),m&&this.applyConstraints(!0),this;var A=this.getCenter(!0),R=this.getZoom(!0);this.panTo(A,!0),this.zoomTo(R,null,!0);var k=this.getBounds(),G=this.getZoom();if(G===0||Math.abs(_/G-1)<1e-8)return this.zoomTo(_,null,!0),this.panTo(a,h),m&&this.applyConstraints(!1),this;if(m){this.panTo(a,!1),_=this._applyZoomConstraints(_),this.zoomTo(_,null,!1);var W=this.getConstrainedBounds();this.panTo(A,!0),this.zoomTo(R,null,!0),this.fitBounds(W)}else{var O=w.rotate(-this.getRotation()),$=O.getTopLeft().times(_).minus(k.getTopLeft().times(G)).divide(_-G);this.zoomTo(_,$,h)}return this},fitBounds:function(o,u){return this._fitBounds(o,{immediately:u,constraints:!1})},fitBoundsWithConstraints:function(o,u){return this._fitBounds(o,{immediately:u,constraints:!0})},fitVertically:function(o){var u=new n.Rect(this._contentBounds.x+this._contentBounds.width/2,this._contentBounds.y,0,this._contentBounds.height);return this.fitBounds(u,o)},fitHorizontally:function(o){var u=new n.Rect(this._contentBounds.x,this._contentBounds.y+this._contentBounds.height/2,this._contentBounds.width,0);return this.fitBounds(u,o)},getConstrainedBounds:function(o){var u,h;return u=this.getBounds(o),h=this._applyBoundaryConstraints(u),h},panBy:function(o,u){var h=new n.Point(this.centerSpringX.target.value,this.centerSpringY.target.value);return this.panTo(h.plus(o),u)},panTo:function(o,u){return u?(this.centerSpringX.resetTo(o.x),this.centerSpringY.resetTo(o.y)):(this.centerSpringX.springTo(o.x),this.centerSpringY.springTo(o.y)),this.viewer&&this.viewer.raiseEvent("pan",{center:o,immediately:u}),this},zoomBy:function(o,u,h){return this.zoomTo(this.zoomSpring.target.value*o,u,h)},zoomTo:function(o,u,h){var m=this;return this.zoomPoint=u instanceof n.Point&&!isNaN(u.x)&&!isNaN(u.y)?u:null,h?this._adjustCenterSpringsForZoomPoint(function(){m.zoomSpring.resetTo(o)}):this.zoomSpring.springTo(o),this.viewer&&this.viewer.raiseEvent("zoom",{zoom:o,refPoint:u,immediately:h}),this},setRotation:function(o,u){return this.rotateTo(o,null,u)},getRotation:function(o){return o?this.degreesSpring.current.value:this.degreesSpring.target.value},setRotationWithPivot:function(o,u,h){return this.rotateTo(o,u,h)},rotateTo:function(o,u,h){if(!this.viewer||!this.viewer.drawer.canRotate())return this;if(this.degreesSpring.target.value===o&&this.degreesSpring.isAtTargetValue())return this;if(this.rotationPivot=u instanceof n.Point&&!isNaN(u.x)&&!isNaN(u.y)?u:null,h)if(this.rotationPivot){var m=o-this._oldDegrees;if(!m)return this.rotationPivot=null,this;this._rotateAboutPivot(o)}else this.degreesSpring.resetTo(o);else{var y=n.positiveModulo(this.degreesSpring.current.value,360),a=n.positiveModulo(o,360),w=a-y;w>180?a-=360:w<-180&&(a+=360);var _=y-a;this.degreesSpring.resetTo(o+_),this.degreesSpring.springTo(o)}return this._setContentBounds(this.viewer.world.getHomeBounds(),this.viewer.world.getContentFactor()),this.viewer.forceRedraw(),this.viewer.raiseEvent("rotate",{degrees:o,immediately:!!h,pivot:this.rotationPivot||this.getCenter()}),this},rotateBy:function(o,u,h){return this.rotateTo(this.degreesSpring.target.value+o,u,h)},resize:function(o,u){var h=this.getBoundsNoRotate(),m=h,y;this.containerSize.x=o.x,this.containerSize.y=o.y,this._updateContainerInnerSize(),u&&(y=o.x/this.containerSize.x,m.width=h.width*y,m.height=m.width/this.getAspectRatio()),this.viewer&&this.viewer.raiseEvent("resize",{newContainerSize:o,maintain:u});var a=this.fitBounds(m,!0);return this.viewer&&this.viewer.raiseEvent("after-resize",{newContainerSize:o,maintain:u}),a},_updateContainerInnerSize:function(){this._containerInnerSize=new n.Point(Math.max(1,this.containerSize.x-(this._margins.left+this._margins.right)),Math.max(1,this.containerSize.y-(this._margins.top+this._margins.bottom)))},update:function(){var o=this;this._adjustCenterSpringsForZoomPoint(function(){o.zoomSpring.update()}),this.degreesSpring.isAtTargetValue()&&(this.rotationPivot=null),this.centerSpringX.update(),this.centerSpringY.update(),this.rotationPivot?this._rotateAboutPivot(!0):this.degreesSpring.update();var u=this.centerSpringX.current.value!==this._oldCenterX||this.centerSpringY.current.value!==this._oldCenterY||this.zoomSpring.current.value!==this._oldZoom||this.degreesSpring.current.value!==this._oldDegrees;this._oldCenterX=this.centerSpringX.current.value,this._oldCenterY=this.centerSpringY.current.value,this._oldZoom=this.zoomSpring.current.value,this._oldDegrees=this.degreesSpring.current.value;var h=u||!this.zoomSpring.isAtTargetValue()||!this.centerSpringX.isAtTargetValue()||!this.centerSpringY.isAtTargetValue()||!this.degreesSpring.isAtTargetValue();return h},_rotateAboutPivot:function(o){var u=o===!0,h=this.rotationPivot.minus(this.getCenter());this.centerSpringX.shiftBy(h.x),this.centerSpringY.shiftBy(h.y),u?this.degreesSpring.update():this.degreesSpring.resetTo(o);var m=this.degreesSpring.current.value-this._oldDegrees,y=h.rotate(m*-1).times(-1);this.centerSpringX.shiftBy(y.x),this.centerSpringY.shiftBy(y.y)},_adjustCenterSpringsForZoomPoint:function(o){if(this.zoomPoint){var u=this.pixelFromPoint(this.zoomPoint,!0);o();var h=this.pixelFromPoint(this.zoomPoint,!0),m=h.minus(u),y=this.deltaPointsFromPixels(m,!0);this.centerSpringX.shiftBy(y.x),this.centerSpringY.shiftBy(y.y),this.zoomSpring.isAtTargetValue()&&(this.zoomPoint=null)}else o()},deltaPixelsFromPointsNoRotate:function(o,u){return o.times(this._containerInnerSize.x*this.getZoom(u))},deltaPixelsFromPoints:function(o,u){return this.deltaPixelsFromPointsNoRotate(o.rotate(this.getRotation(u)),u)},deltaPointsFromPixelsNoRotate:function(o,u){return o.divide(this._containerInnerSize.x*this.getZoom(u))},deltaPointsFromPixels:function(o,u){return this.deltaPointsFromPixelsNoRotate(o,u).rotate(-this.getRotation(u))},pixelFromPointNoRotate:function(o,u){return this._pixelFromPointNoRotate(o,this.getBoundsNoRotate(u))},pixelFromPoint:function(o,u){return this._pixelFromPoint(o,this.getBoundsNoRotate(u))},_pixelFromPointNoRotate:function(o,u){return o.minus(u.getTopLeft()).times(this._containerInnerSize.x/u.width).plus(new n.Point(this._margins.left,this._margins.top))},_pixelFromPoint:function(o,u){return this._pixelFromPointNoRotate(o.rotate(this.getRotation(!0),this.getCenter(!0)),u)},pointFromPixelNoRotate:function(o,u){var h=this.getBoundsNoRotate(u);return o.minus(new n.Point(this._margins.left,this._margins.top)).divide(this._containerInnerSize.x/h.width).plus(h.getTopLeft())},pointFromPixel:function(o,u){return this.pointFromPixelNoRotate(o,u).rotate(-this.getRotation(u),this.getCenter(u))},_viewportToImageDelta:function(o,u){var h=this._contentBoundsNoRotate.width;return new n.Point(o*this._contentSizeNoRotate.x/h,u*this._contentSizeNoRotate.x/h)},viewportToImageCoordinates:function(o,u){if(o instanceof n.Point)return this.viewportToImageCoordinates(o.x,o.y);if(this.viewer){var h=this.viewer.world.getItemCount();if(h>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.viewportToImageCoordinates] is not accurate with multi-image; use TiledImage.viewportToImageCoordinates instead.");else if(h===1){var m=this.viewer.world.getItemAt(0);return m.viewportToImageCoordinates(o,u,!0)}}return this._viewportToImageDelta(o-this._contentBoundsNoRotate.x,u-this._contentBoundsNoRotate.y)},_imageToViewportDelta:function(o,u){var h=this._contentBoundsNoRotate.width;return new n.Point(o/this._contentSizeNoRotate.x*h,u/this._contentSizeNoRotate.x*h)},imageToViewportCoordinates:function(o,u){if(o instanceof n.Point)return this.imageToViewportCoordinates(o.x,o.y);if(this.viewer){var h=this.viewer.world.getItemCount();if(h>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.imageToViewportCoordinates] is not accurate with multi-image; use TiledImage.imageToViewportCoordinates instead.");else if(h===1){var m=this.viewer.world.getItemAt(0);return m.imageToViewportCoordinates(o,u,!0)}}var y=this._imageToViewportDelta(o,u);return y.x+=this._contentBoundsNoRotate.x,y.y+=this._contentBoundsNoRotate.y,y},imageToViewportRectangle:function(o,u,h,m){var y=o;if(y instanceof n.Rect||(y=new n.Rect(o,u,h,m)),this.viewer){var a=this.viewer.world.getItemCount();if(a>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.imageToViewportRectangle] is not accurate with multi-image; use TiledImage.imageToViewportRectangle instead.");else if(a===1){var w=this.viewer.world.getItemAt(0);return w.imageToViewportRectangle(o,u,h,m,!0)}}var _=this.imageToViewportCoordinates(y.x,y.y),A=this._imageToViewportDelta(y.width,y.height);return new n.Rect(_.x,_.y,A.x,A.y,y.degrees)},viewportToImageRectangle:function(o,u,h,m){var y=o;if(y instanceof n.Rect||(y=new n.Rect(o,u,h,m)),this.viewer){var a=this.viewer.world.getItemCount();if(a>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.viewportToImageRectangle] is not accurate with multi-image; use TiledImage.viewportToImageRectangle instead.");else if(a===1){var w=this.viewer.world.getItemAt(0);return w.viewportToImageRectangle(o,u,h,m,!0)}}var _=this.viewportToImageCoordinates(y.x,y.y),A=this._viewportToImageDelta(y.width,y.height);return new n.Rect(_.x,_.y,A.x,A.y,y.degrees)},viewerElementToImageCoordinates:function(o){var u=this.pointFromPixel(o,!0);return this.viewportToImageCoordinates(u)},imageToViewerElementCoordinates:function(o){var u=this.imageToViewportCoordinates(o);return this.pixelFromPoint(u,!0)},windowToImageCoordinates:function(o){n.console.assert(this.viewer,"[Viewport.windowToImageCoordinates] the viewport must have a viewer.");var u=o.minus(n.getElementPosition(this.viewer.element));return this.viewerElementToImageCoordinates(u)},imageToWindowCoordinates:function(o){n.console.assert(this.viewer,"[Viewport.imageToWindowCoordinates] the viewport must have a viewer.");var u=this.imageToViewerElementCoordinates(o);return u.plus(n.getElementPosition(this.viewer.element))},viewerElementToViewportCoordinates:function(o){return this.pointFromPixel(o,!0)},viewportToViewerElementCoordinates:function(o){return this.pixelFromPoint(o,!0)},viewerElementToViewportRectangle:function(o){return n.Rect.fromSummits(this.pointFromPixel(o.getTopLeft(),!0),this.pointFromPixel(o.getTopRight(),!0),this.pointFromPixel(o.getBottomLeft(),!0))},viewportToViewerElementRectangle:function(o){return n.Rect.fromSummits(this.pixelFromPoint(o.getTopLeft(),!0),this.pixelFromPoint(o.getTopRight(),!0),this.pixelFromPoint(o.getBottomLeft(),!0))},windowToViewportCoordinates:function(o){n.console.assert(this.viewer,"[Viewport.windowToViewportCoordinates] the viewport must have a viewer.");var u=o.minus(n.getElementPosition(this.viewer.element));return this.viewerElementToViewportCoordinates(u)},viewportToWindowCoordinates:function(o){n.console.assert(this.viewer,"[Viewport.viewportToWindowCoordinates] the viewport must have a viewer.");var u=this.viewportToViewerElementCoordinates(o);return u.plus(n.getElementPosition(this.viewer.element))},viewportToImageZoom:function(o){if(this.viewer){var u=this.viewer.world.getItemCount();if(u>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.viewportToImageZoom] is not accurate with multi-image.");else if(u===1){var h=this.viewer.world.getItemAt(0);return h.viewportToImageZoom(o)}}var m=this._contentSizeNoRotate.x,y=this._containerInnerSize.x,a=this._contentBoundsNoRotate.width,w=y/m*a;return o*w},imageToViewportZoom:function(o){if(this.viewer){var u=this.viewer.world.getItemCount();if(u>1)this.silenceMultiImageWarnings||n.console.error("[Viewport.imageToViewportZoom] is not accurate with multi-image. Instead, use [TiledImage.imageToViewportZoom] for the specific image of interest");else if(u===1){var h=this.viewer.world.getItemAt(0);return h.imageToViewportZoom(o)}}var m=this._contentSizeNoRotate.x,y=this._containerInnerSize.x,a=this._contentBoundsNoRotate.width,w=m/y/a;return o*w},toggleFlip:function(){return this.setFlip(!this.getFlip()),this},getFlip:function(){return this.flipped},setFlip:function(o){return this.flipped===o?this:(this.flipped=o,this.viewer.navigator&&this.viewer.navigator.setFlip(this.getFlip()),this.viewer.forceRedraw(),this.viewer.raiseEvent("flip",{flipped:o}),this)},getMaxZoomPixelRatio:function(){return this.maxZoomPixelRatio},setMaxZoomPixelRatio:function(o,u=!0,h=!1){n.console.assert(!isNaN(o),"[Viewport.setMaxZoomPixelRatio] ratio must be a number"),!isNaN(o)&&(this.maxZoomPixelRatio=o,u&&this.getZoom()>this.getMaxZoom()&&this.applyConstraints(h))}}}(ae),function(n){n.TiledImage=function(o){this._initialized=!1,n.console.assert(o.tileCache,"[TiledImage] options.tileCache is required"),n.console.assert(o.drawer,"[TiledImage] options.drawer is required"),n.console.assert(o.viewer,"[TiledImage] options.viewer is required"),n.console.assert(o.imageLoader,"[TiledImage] options.imageLoader is required"),n.console.assert(o.source,"[TiledImage] options.source is required"),n.console.assert(!o.clip||o.clip instanceof n.Rect,"[TiledImage] options.clip must be an OpenSeadragon.Rect if present"),n.EventSource.call(this),this._tileCache=o.tileCache,delete o.tileCache,this._drawer=o.drawer,delete o.drawer,this._imageLoader=o.imageLoader,delete o.imageLoader,o.clip instanceof n.Rect&&(this._clip=o.clip.clone()),delete o.clip;var u=o.x||0;delete o.x;var h=o.y||0;delete o.y,this.normHeight=o.source.dimensions.y/o.source.dimensions.x,this.contentAspectX=o.source.dimensions.x/o.source.dimensions.y;var m=1;o.width?(m=o.width,delete o.width,o.height&&(n.console.error("specifying both width and height to a tiledImage is not supported"),delete o.height)):o.height&&(m=o.height/this.normHeight,delete o.height);var y=o.fitBounds;delete o.fitBounds;var a=o.fitBoundsPlacement||ae.Placement.CENTER;delete o.fitBoundsPlacement;var w=o.degrees||0;delete o.degrees;var _=o.ajaxHeaders;delete o.ajaxHeaders,n.extend(!0,this,{viewer:null,tilesMatrix:{},coverage:{},loadingCoverage:{},lastDrawn:[],lastResetTime:0,_needsDraw:!0,_needsUpdate:!0,_hasOpaqueTile:!1,_tilesLoading:0,_tilesToDraw:[],_lastDrawn:[],_isBlending:!1,_wasBlending:!1,_isTainted:!1,springStiffness:n.DEFAULT_SETTINGS.springStiffness,animationTime:n.DEFAULT_SETTINGS.animationTime,minZoomImageRatio:n.DEFAULT_SETTINGS.minZoomImageRatio,wrapHorizontal:n.DEFAULT_SETTINGS.wrapHorizontal,wrapVertical:n.DEFAULT_SETTINGS.wrapVertical,immediateRender:n.DEFAULT_SETTINGS.immediateRender,blendTime:n.DEFAULT_SETTINGS.blendTime,alwaysBlend:n.DEFAULT_SETTINGS.alwaysBlend,minPixelRatio:n.DEFAULT_SETTINGS.minPixelRatio,smoothTileEdgesMinZoom:n.DEFAULT_SETTINGS.smoothTileEdgesMinZoom,iOSDevice:n.DEFAULT_SETTINGS.iOSDevice,debugMode:n.DEFAULT_SETTINGS.debugMode,crossOriginPolicy:n.DEFAULT_SETTINGS.crossOriginPolicy,ajaxWithCredentials:n.DEFAULT_SETTINGS.ajaxWithCredentials,placeholderFillStyle:n.DEFAULT_SETTINGS.placeholderFillStyle,opacity:n.DEFAULT_SETTINGS.opacity,preload:n.DEFAULT_SETTINGS.preload,compositeOperation:n.DEFAULT_SETTINGS.compositeOperation,subPixelRoundingForTransparency:n.DEFAULT_SETTINGS.subPixelRoundingForTransparency,maxTilesPerFrame:n.DEFAULT_SETTINGS.maxTilesPerFrame},o),this._preload=this.preload,delete this.preload,this._fullyLoaded=!1,this._xSpring=new n.Spring({initial:u,springStiffness:this.springStiffness,animationTime:this.animationTime}),this._ySpring=new n.Spring({initial:h,springStiffness:this.springStiffness,animationTime:this.animationTime}),this._scaleSpring=new n.Spring({initial:m,springStiffness:this.springStiffness,animationTime:this.animationTime}),this._degreesSpring=new n.Spring({initial:w,springStiffness:this.springStiffness,animationTime:this.animationTime}),this._updateForScale(),y&&this.fitBounds(y,a,!0),this._ownAjaxHeaders={},this.setAjaxHeaders(_,!1),this._initialized=!0},n.extend(n.TiledImage.prototype,n.EventSource.prototype,{needsDraw:function(){return this._needsDraw},redraw:function(){this._needsDraw=!0},getFullyLoaded:function(){return this._fullyLoaded},_setFullyLoaded:function(o){o!==this._fullyLoaded&&(this._fullyLoaded=o,this.raiseEvent("fully-loaded-change",{fullyLoaded:this._fullyLoaded}))},reset:function(){this._tileCache.clearTilesFor(this),this.lastResetTime=n.now(),this._needsDraw=!0},update:function(o){let u=this._xSpring.update(),h=this._ySpring.update(),m=this._scaleSpring.update(),y=this._degreesSpring.update(),a=u||h||m||y||this._needsUpdate;if(a||o||!this._fullyLoaded){let w=this._updateLevelsForViewport();this._setFullyLoaded(w)}return this._needsUpdate=!1,a?(this._updateForScale(),this._raiseBoundsChange(),this._needsDraw=!0,!0):!1},setDrawn:function(){return this._needsDraw=this._isBlending||this._wasBlending,this._needsDraw},setTainted(o){this._isTainted=o},isTainted(){return this._isTainted},destroy:function(){this.reset(),this.source.destroy&&this.source.destroy(this.viewer)},getBounds:function(o){return this.getBoundsNoRotate(o).rotate(this.getRotation(o),this._getRotationPoint(o))},getBoundsNoRotate:function(o){return o?new n.Rect(this._xSpring.current.value,this._ySpring.current.value,this._worldWidthCurrent,this._worldHeightCurrent):new n.Rect(this._xSpring.target.value,this._ySpring.target.value,this._worldWidthTarget,this._worldHeightTarget)},getWorldBounds:function(){return n.console.error("[TiledImage.getWorldBounds] is deprecated; use TiledImage.getBounds instead"),this.getBounds()},getClippedBounds:function(o){var u=this.getBoundsNoRotate(o);if(this._clip){var h=o?this._worldWidthCurrent:this._worldWidthTarget,m=h/this.source.dimensions.x,y=this._clip.times(m);u=new n.Rect(u.x+y.x,u.y+y.y,y.width,y.height)}return u.rotate(this.getRotation(o),this._getRotationPoint(o))},getTileBounds:function(o,u,h){var m=this.source.getNumTiles(o),y=(m.x+u%m.x)%m.x,a=(m.y+h%m.y)%m.y,w=this.source.getTileBounds(o,y,a);return this.getFlip()&&(w.x=Math.max(0,1-w.x-w.width)),w.x+=(u-y)/m.x,w.y+=this._worldHeightCurrent/this._worldWidthCurrent*((h-a)/m.y),w},getContentSize:function(){return new n.Point(this.source.dimensions.x,this.source.dimensions.y)},getSizeInWindowCoordinates:function(){var o=this.imageToWindowCoordinates(new n.Point(0,0)),u=this.imageToWindowCoordinates(this.getContentSize());return new n.Point(u.x-o.x,u.y-o.y)},_viewportToImageDelta:function(o,u,h){var m=h?this._scaleSpring.current.value:this._scaleSpring.target.value;return new n.Point(o*(this.source.dimensions.x/m),u*(this.source.dimensions.y*this.contentAspectX/m))},viewportToImageCoordinates:function(o,u,h){var m;return o instanceof n.Point?(h=u,m=o):m=new n.Point(o,u),m=m.rotate(-this.getRotation(h),this._getRotationPoint(h)),h?this._viewportToImageDelta(m.x-this._xSpring.current.value,m.y-this._ySpring.current.value):this._viewportToImageDelta(m.x-this._xSpring.target.value,m.y-this._ySpring.target.value)},_imageToViewportDelta:function(o,u,h){var m=h?this._scaleSpring.current.value:this._scaleSpring.target.value;return new n.Point(o/this.source.dimensions.x*m,u/this.source.dimensions.y/this.contentAspectX*m)},imageToViewportCoordinates:function(o,u,h){o instanceof n.Point&&(h=u,u=o.y,o=o.x);var m=this._imageToViewportDelta(o,u,h);return h?(m.x+=this._xSpring.current.value,m.y+=this._ySpring.current.value):(m.x+=this._xSpring.target.value,m.y+=this._ySpring.target.value),m.rotate(this.getRotation(h),this._getRotationPoint(h))},imageToViewportRectangle:function(o,u,h,m,y){var a=o;a instanceof n.Rect?y=u:a=new n.Rect(o,u,h,m);var w=this.imageToViewportCoordinates(a.getTopLeft(),y),_=this._imageToViewportDelta(a.width,a.height,y);return new n.Rect(w.x,w.y,_.x,_.y,a.degrees+this.getRotation(y))},viewportToImageRectangle:function(o,u,h,m,y){var a=o;o instanceof n.Rect?y=u:a=new n.Rect(o,u,h,m);var w=this.viewportToImageCoordinates(a.getTopLeft(),y),_=this._viewportToImageDelta(a.width,a.height,y);return new n.Rect(w.x,w.y,_.x,_.y,a.degrees-this.getRotation(y))},viewerElementToImageCoordinates:function(o){var u=this.viewport.pointFromPixel(o,!0);return this.viewportToImageCoordinates(u)},imageToViewerElementCoordinates:function(o){var u=this.imageToViewportCoordinates(o);return this.viewport.pixelFromPoint(u,!0)},windowToImageCoordinates:function(o){var u=o.minus(ae.getElementPosition(this.viewer.element));return this.viewerElementToImageCoordinates(u)},imageToWindowCoordinates:function(o){var u=this.imageToViewerElementCoordinates(o);return u.plus(ae.getElementPosition(this.viewer.element))},_viewportToTiledImageRectangle:function(o){var u=this._scaleSpring.current.value;return o=o.rotate(-this.getRotation(!0),this._getRotationPoint(!0)),new n.Rect((o.x-this._xSpring.current.value)/u,(o.y-this._ySpring.current.value)/u,o.width/u,o.height/u,o.degrees)},viewportToImageZoom:function(o){var u=this._scaleSpring.current.value*this.viewport._containerInnerSize.x/this.source.dimensions.x;return u*o},imageToViewportZoom:function(o){var u=this._scaleSpring.current.value*this.viewport._containerInnerSize.x/this.source.dimensions.x;return o/u},setPosition:function(o,u){var h=this._xSpring.target.value===o.x&&this._ySpring.target.value===o.y;if(u){if(h&&this._xSpring.current.value===o.x&&this._ySpring.current.value===o.y)return;this._xSpring.resetTo(o.x),this._ySpring.resetTo(o.y),this._needsDraw=!0,this._needsUpdate=!0}else{if(h)return;this._xSpring.springTo(o.x),this._ySpring.springTo(o.y),this._needsDraw=!0,this._needsUpdate=!0}h||this._raiseBoundsChange()},setWidth:function(o,u){this._setScale(o,u)},setHeight:function(o,u){this._setScale(o/this.normHeight,u)},setCroppingPolygons:function(o){var u=function(m){return m instanceof n.Point||typeof m.x=="number"&&typeof m.y=="number"},h=function(m){return m.map(function(y){try{if(u(y))return{x:y.x,y:y.y};throw new Error}catch{throw new Error("A Provided cropping polygon point is not supported")}})};try{if(!n.isArray(o))throw new Error("Provided cropping polygon is not an array");this._croppingPolygons=o.map(function(m){return h(m)}),this._needsDraw=!0}catch(m){n.console.error("[TiledImage.setCroppingPolygons] Cropping polygon format not supported"),n.console.error(m),this.resetCroppingPolygons()}},resetCroppingPolygons:function(){this._croppingPolygons=null,this._needsDraw=!0},fitBounds:function(o,u,h){u=u||n.Placement.CENTER;var m=n.Placement.properties[u],y=this.contentAspectX,a=0,w=0,_=1,A=1;if(this._clip&&(y=this._clip.getAspectRatio(),_=this._clip.width/this.source.dimensions.x,A=this._clip.height/this.source.dimensions.y,o.getAspectRatio()>y?(a=this._clip.x/this._clip.height*o.height,w=this._clip.y/this._clip.height*o.height):(a=this._clip.x/this._clip.width*o.width,w=this._clip.y/this._clip.width*o.width)),o.getAspectRatio()>y){var R=o.height/A,k=0;m.isHorizontallyCentered?k=(o.width-o.height*y)/2:m.isRight&&(k=o.width-o.height*y),this.setPosition(new n.Point(o.x-a+k,o.y-w),h),this.setHeight(R,h)}else{var G=o.width/_,W=0;m.isVerticallyCentered?W=(o.height-o.width/y)/2:m.isBottom&&(W=o.height-o.width/y),this.setPosition(new n.Point(o.x-a,o.y-w+W),h),this.setWidth(G,h)}},getClip:function(){return this._clip?this._clip.clone():null},setClip:function(o){n.console.assert(!o||o instanceof n.Rect,"[TiledImage.setClip] newClip must be an OpenSeadragon.Rect or null"),o instanceof n.Rect?this._clip=o.clone():this._clip=null,this._needsUpdate=!0,this._needsDraw=!0,this.raiseEvent("clip-change")},getFlip:function(){return this.flipped},setFlip:function(o){this.flipped=o},get flipped(){return this._flipped},set flipped(o){let u=this._flipped!==!!o;this._flipped=!!o,u&&(this.update(!0),this._needsDraw=!0,this._raiseBoundsChange())},get wrapHorizontal(){return this._wrapHorizontal},set wrapHorizontal(o){let u=this._wrapHorizontal!==!!o;this._wrapHorizontal=!!o,this._initialized&&u&&(this.update(!0),this._needsDraw=!0)},get wrapVertical(){return this._wrapVertical},set wrapVertical(o){let u=this._wrapVertical!==!!o;this._wrapVertical=!!o,this._initialized&&u&&(this.update(!0),this._needsDraw=!0)},get debugMode(){return this._debugMode},set debugMode(o){this._debugMode=!!o,this._needsDraw=!0},getOpacity:function(){return this.opacity},setOpacity:function(o){this.opacity=o},get opacity(){return this._opacity},set opacity(o){o!==this.opacity&&(this._opacity=o,this._needsDraw=!0,this.raiseEvent("opacity-change",{opacity:this.opacity}))},getPreload:function(){return this._preload},setPreload:function(o){this._preload=!!o,this._needsDraw=!0},getRotation:function(o){return o?this._degreesSpring.current.value:this._degreesSpring.target.value},setRotation:function(o,u){this._degreesSpring.target.value===o&&this._degreesSpring.isAtTargetValue()||(u?this._degreesSpring.resetTo(o):this._degreesSpring.springTo(o),this._needsDraw=!0,this._needsUpdate=!0,this._raiseBoundsChange())},getDrawArea:function(){if(this._opacity===0&&!this._preload)return!1;var o=this._viewportToTiledImageRectangle(this.viewport.getBoundsWithMargins(!0));if(!this.wrapHorizontal&&!this.wrapVertical){var u=this._viewportToTiledImageRectangle(this.getClippedBounds(!0));o=o.intersection(u)}return o},getTilesToDraw:function(){let o=this._tilesToDraw.flat();return this._updateTilesInViewport(o),o=this._tilesToDraw.flat(),o.forEach(u=>{u.tile.beingDrawn=!0}),this._lastDrawn=o,o},_getRotationPoint:function(o){return this.getBoundsNoRotate(o).getCenter()},get compositeOperation(){return this._compositeOperation},set compositeOperation(o){o!==this._compositeOperation&&(this._compositeOperation=o,this._needsDraw=!0,this.raiseEvent("composite-operation-change",{compositeOperation:this._compositeOperation}))},getCompositeOperation:function(){return this._compositeOperation},setCompositeOperation:function(o){this.compositeOperation=o},setAjaxHeaders:function(o,u){if(o===null&&(o={}),!n.isPlainObject(o)){console.error("[TiledImage.setAjaxHeaders] Ignoring invalid headers, must be a plain object");return}this._ownAjaxHeaders=o,this._updateAjaxHeaders(u)},_updateAjaxHeaders:function(o){if(o===void 0&&(o=!0),n.isPlainObject(this.viewer.ajaxHeaders)?this.ajaxHeaders=n.extend({},this.viewer.ajaxHeaders,this._ownAjaxHeaders):this.ajaxHeaders=this._ownAjaxHeaders,o){var u,h,m,y;for(var a in this.tilesMatrix){u=this.source.getNumTiles(a);for(var w in this.tilesMatrix[a]){h=(u.x+w%u.x)%u.x;for(var _ in this.tilesMatrix[a][w])if(m=(u.y+_%u.y)%u.y,y=this.tilesMatrix[a][w][_],y.loadWithAjax=this.loadTilesWithAjax,y.loadWithAjax){var A=this.source.getTileAjaxHeaders(a,h,m);y.ajaxHeaders=n.extend({},this.ajaxHeaders,A)}else y.ajaxHeaders=null}}for(var R=0;R<this._imageLoader.jobQueue.length;R++){var k=this._imageLoader.jobQueue[R];k.loadWithAjax=k.tile.loadWithAjax,k.ajaxHeaders=k.tile.loadWithAjax?k.tile.ajaxHeaders:null}}},_setScale:function(o,u){var h=this._scaleSpring.target.value===o;if(u){if(h&&this._scaleSpring.current.value===o)return;this._scaleSpring.resetTo(o),this._updateForScale(),this._needsDraw=!0,this._needsUpdate=!0}else{if(h)return;this._scaleSpring.springTo(o),this._updateForScale(),this._needsDraw=!0,this._needsUpdate=!0}h||this._raiseBoundsChange()},_updateForScale:function(){this._worldWidthTarget=this._scaleSpring.target.value,this._worldHeightTarget=this.normHeight*this._scaleSpring.target.value,this._worldWidthCurrent=this._scaleSpring.current.value,this._worldHeightCurrent=this.normHeight*this._scaleSpring.current.value},_raiseBoundsChange:function(){this.raiseEvent("bounds-change")},_isBottomItem:function(){return this.viewer.world.getItemAt(0)===this},_getLevelsInterval:function(){var o=Math.max(this.source.minLevel,Math.floor(Math.log(this.minZoomImageRatio)/Math.log(2))),u=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(0),!0).x*this._scaleSpring.current.value,h=Math.min(Math.abs(this.source.maxLevel),Math.abs(Math.floor(Math.log(u/this.minPixelRatio)/Math.log(2))));return h=Math.max(h,this.source.minLevel||0),o=Math.min(o,h),{lowestLevel:o,highestLevel:h}},_updateLevelsForViewport:function(){var o=this._getLevelsInterval(),u=o.lowestLevel,h=o.highestLevel,m=[],y=this.getDrawArea(),a=n.now();if(this._lastDrawn.forEach(tt=>{tt.tile.beingDrawn=!1}),this._tilesToDraw=[],this._tilesLoading=0,this.loadingCoverage={},!y)return this._needsDraw=!1,this._fullyLoaded;var w=new Array(h-u+1);for(let tt=0,Ve=h;Ve>=u;Ve--,tt++)w[tt]=Ve;for(let tt=h+1;tt<=this.source.maxLevel;tt++){var _=this.tilesMatrix[tt]&&this.tilesMatrix[tt][0]&&this.tilesMatrix[tt][0][0];if(_&&_.isBottomMost&&_.isRightMost&&_.loaded){w.push(tt);break}}let A=!1;for(let tt=0;tt<w.length;tt++){let Ve=w[tt];var R=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(Ve),!0).x*this._scaleSpring.current.value;if(tt===w.length-1||R>=this.minPixelRatio)A=!0;else if(!A)continue;var k=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(Ve),!1).x*this._scaleSpring.current.value,G=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(Math.max(this.source.getClosestLevel(),0)),!1).x*this._scaleSpring.current.value,W=this.immediateRender?1:G,O=Math.min(1,(R-.5)/.5),$=W/Math.abs(W-k),ye=this._updateLevel(Ve,O,$,y,a,m);m=ye.bestTiles;var we=ye.updatedTiles.filter(Tt=>Tt.loaded),ht=function(Tt,Q,Ct){return function(it){return{tile:it,level:Tt,levelOpacity:Q,currentTime:Ct}}}(Ve,O,a);if(this._tilesToDraw[Ve]=we.map(ht),this._providesCoverage(this.coverage,Ve))break}return m&&m.length>0?(m.forEach(function(tt){tt&&!tt.context2D&&this._loadTile(tt,a)},this),this._needsDraw=!0,!1):this._tilesLoading===0},_updateTilesInViewport:function(o){let u=n.now(),h=this;this._tilesLoading=0,this._wasBlending=this._isBlending,this._isBlending=!1,this.loadingCoverage={};let m=o.length?o[0].level:0;if(!this.getDrawArea())return;function a(_){let A=_.tile;if(A&&A.loaded){let R=h._blendTile(A,A.x,A.y,_.level,_.levelOpacity,u,m);h._isBlending=h._isBlending||R,h._needsDraw=h._needsDraw||R||h._wasBlending}}let w=0;for(let _=0;_<o.length;_++){let A=o[_];a(A),this._providesCoverage(this.coverage,A.level)&&(w=Math.max(w,A.level))}if(w>0)for(let _ in this._tilesToDraw)_<w&&delete this._tilesToDraw[_]},_blendTile:function(o,u,h,m,y,a,w){let _=1e3*this.blendTime,A,R;return o.blendStart||(o.blendStart=a),A=a-o.blendStart,R=_?Math.min(1,A/_):1,m===w&&(R=1,A=_),this.alwaysBlend&&(R*=y),o.opacity=R,R===1&&(this._setCoverage(this.coverage,m,u,h,!0),this._hasOpaqueTile=!0),A<_},_updateLevel:function(o,u,h,m,y,a){var w=m.getBoundingBox().getTopLeft(),_=m.getBoundingBox().getBottomRight();this.viewer&&this.viewer.raiseEvent("update-level",{tiledImage:this,havedrawn:!0,level:o,opacity:u,visibility:h,drawArea:m,topleft:w,bottomright:_,currenttime:y,best:a}),this._resetCoverage(this.coverage,o),this._resetCoverage(this.loadingCoverage,o);var A=this._getCornerTiles(o,w,_),R=A.topLeft,k=A.bottomRight,G=this.source.getNumTiles(o),W=this.viewport.pixelFromPoint(this.viewport.getCenter());this.getFlip()&&(k.x+=1,this.wrapHorizontal||(k.x=Math.min(k.x,G.x-1)));for(var O=Math.max(0,(k.x-R.x)*(k.y-R.y)),$=new Array(O),ye=0,we=R.x;we<=k.x;we++)for(var ht=R.y;ht<=k.y;ht++){var tt;if(this.getFlip()){var Ve=(G.x+we%G.x)%G.x;tt=we+G.x-Ve-Ve-1}else tt=we;if(m.intersection(this.getTileBounds(o,tt,ht))!==null){var Tt=this._updateTile(tt,ht,o,h,W,G,y,a);a=Tt.bestTiles,$[ye]=Tt.tile,ye+=1}}return{bestTiles:a,updatedTiles:$}},_positionTile:function(o,u,h,m,y){var a=o.bounds.getTopLeft();a.x*=this._scaleSpring.current.value,a.y*=this._scaleSpring.current.value,a.x+=this._xSpring.current.value,a.y+=this._ySpring.current.value;var w=o.bounds.getSize();w.x*=this._scaleSpring.current.value,w.y*=this._scaleSpring.current.value,o.positionedBounds.x=a.x,o.positionedBounds.y=a.y,o.positionedBounds.width=w.x,o.positionedBounds.height=w.y;var _=h.pixelFromPointNoRotate(a,!0),A=h.pixelFromPointNoRotate(a,!1),R=h.deltaPixelsFromPointsNoRotate(w,!0),k=h.deltaPixelsFromPointsNoRotate(w,!1),G=A.plus(k.divide(2)),W=m.squaredDistanceTo(G);this.viewer.drawer.minimumOverlapRequired(this)&&(u||(R=R.plus(new n.Point(1,1))),o.isRightMost&&this.wrapHorizontal&&(R.x+=.75),o.isBottomMost&&this.wrapVertical&&(R.y+=.75)),o.position=_,o.size=R,o.squaredDistance=W,o.visibility=y},_updateTile:function(o,u,h,m,y,a,w,_){var A=this._getTile(o,u,h,w,a);this.viewer&&this.viewer.raiseEvent("update-tile",{tiledImage:this,tile:A}),this._setCoverage(this.coverage,h,o,u,!1);var R=A.loaded||A.loading||this._isCovered(this.loadingCoverage,h,o,u);if(this._setCoverage(this.loadingCoverage,h,o,u,R),!A.exists)return{bestTiles:_,tile:A};if(A.loaded&&A.opacity===1&&this._setCoverage(this.coverage,h,o,u,!0),this._positionTile(A,this.source.tileOverlap,this.viewport,y,m),!A.loaded)if(A.context2D)this._setTileLoaded(A);else{var k=this._tileCache.getImageRecord(A.cacheKey);k&&this._setTileLoaded(A,k.getData())}return A.loading?this._tilesLoading++:R||(_=this._compareTiles(_,A,this.maxTilesPerFrame)),{bestTiles:_,tile:A}},_getCornerTiles:function(o,u,h){var m,y;this.wrapHorizontal?(m=n.positiveModulo(u.x,1),y=n.positiveModulo(h.x,1)):(m=Math.max(0,u.x),y=Math.min(1,h.x));var a,w,_=1/this.source.aspectRatio;this.wrapVertical?(a=n.positiveModulo(u.y,_),w=n.positiveModulo(h.y,_)):(a=Math.max(0,u.y),w=Math.min(_,h.y));var A=this.source.getTileAtPoint(o,new n.Point(m,a)),R=this.source.getTileAtPoint(o,new n.Point(y,w)),k=this.source.getNumTiles(o);return this.wrapHorizontal&&(A.x+=k.x*Math.floor(u.x),R.x+=k.x*Math.floor(h.x)),this.wrapVertical&&(A.y+=k.y*Math.floor(u.y/_),R.y+=k.y*Math.floor(h.y/_)),{topLeft:A,bottomRight:R}},_getTile:function(o,u,h,m,y){var a,w,_,A,R,k,G,W,O,$,ye=this.tilesMatrix,we=this.source;return ye[h]||(ye[h]={}),ye[h][o]||(ye[h][o]={}),(!ye[h][o][u]||!ye[h][o][u].flipped!=!this.flipped)&&(a=(y.x+o%y.x)%y.x,w=(y.y+u%y.y)%y.y,_=this.getTileBounds(h,o,u),A=we.getTileBounds(h,a,w,!0),R=we.tileExists(h,a,w),k=we.getTileUrl(h,a,w),G=we.getTilePostData(h,a,w),this.loadTilesWithAjax?(W=we.getTileAjaxHeaders(h,a,w),n.isPlainObject(this.ajaxHeaders)&&(W=n.extend({},this.ajaxHeaders,W))):W=null,O=we.getContext2D?we.getContext2D(h,a,w):void 0,$=new n.Tile(h,o,u,_,R,k,O,this.loadTilesWithAjax,W,A,G,we.getTileHashKey(h,a,w,k,W,G)),this.getFlip()?a===0&&($.isRightMost=!0):a===y.x-1&&($.isRightMost=!0),w===y.y-1&&($.isBottomMost=!0),$.flipped=this.flipped,ye[h][o][u]=$),$=ye[h][o][u],$.lastTouchTime=m,$},_loadTile:function(o,u){var h=this;o.loading=!0,this._imageLoader.addJob({src:o.getUrl(),tile:o,source:this.source,postData:o.postData,loadWithAjax:o.loadWithAjax,ajaxHeaders:o.ajaxHeaders,crossOriginPolicy:this.crossOriginPolicy,ajaxWithCredentials:this.ajaxWithCredentials,callback:function(m,y,a){h._onTileLoad(o,u,m,y,a)},abort:function(){o.loading=!1}})},_onTileLoad:function(o,u,h,m,y){if(h)o.exists=!0;else{n.console.error("Tile %s failed to load: %s - error: %s",o,o.getUrl(),m),this.viewer.raiseEvent("tile-load-failed",{tile:o,tiledImage:this,time:u,message:m,tileRequest:y}),o.loading=!1,o.exists=!1;return}if(u<this.lastResetTime){n.console.warn("Ignoring tile %s loaded before reset: %s",o,o.getUrl()),o.loading=!1;return}var a=this,w=function(){var _=a.source,A=_.getClosestLevel();a._setTileLoaded(o,h,A,y)};w()},_setTileLoaded:function(o,u,h,m){var y=0,a=!1,w=this;function _(){return a&&n.console.error("Event 'tile-loaded' argument getCompletionCallback must be called synchronously. Its return value should be called asynchronously."),y++,A}function A(){y--,y===0&&(o.loading=!1,o.loaded=!0,o.hasTransparency=w.source.hasTransparency(o.context2D,o.getUrl(),o.ajaxHeaders,o.postData),o.context2D||w._tileCache.cacheTile({data:u,tile:o,cutoff:h,tiledImage:w}),w.viewer.raiseEvent("tile-ready",{tile:o,tiledImage:w,tileRequest:m}),w._needsDraw=!0)}var R=_();this.viewer.raiseEvent("tile-loaded",{tile:o,tiledImage:this,tileRequest:m,get image(){return n.console.error("[tile-loaded] event 'image' has been deprecated. Use 'data' property instead."),u},data:u,getCompletionCallback:_}),a=!0,R()},_compareTiles:function(o,u,h){return o?(o.push(u),this._sortTiles(o),o.length>h&&o.pop(),o):[u]},_sortTiles:function(o){o.sort(function(u,h){return u===null?1:h===null?-1:u.visibility===h.visibility?u.squaredDistance-h.squaredDistance:h.visibility-u.visibility})},_providesCoverage:function(o,u,h,m){var y,a,w,_;if(!o[u])return!1;if(h===void 0||m===void 0){y=o[u];for(w in y)if(Object.prototype.hasOwnProperty.call(y,w)){a=y[w];for(_ in a)if(Object.prototype.hasOwnProperty.call(a,_)&&!a[_])return!1}return!0}return o[u][h]===void 0||o[u][h][m]===void 0||o[u][h][m]===!0},_isCovered:function(o,u,h,m){return h===void 0||m===void 0?this._providesCoverage(o,u+1):this._providesCoverage(o,u+1,2*h,2*m)&&this._providesCoverage(o,u+1,2*h,2*m+1)&&this._providesCoverage(o,u+1,2*h+1,2*m)&&this._providesCoverage(o,u+1,2*h+1,2*m+1)},_setCoverage:function(o,u,h,m,y){if(!o[u]){n.console.warn("Setting coverage for a tile before its level's coverage has been reset: %s",u);return}o[u][h]||(o[u][h]={}),o[u][h][m]=y},_resetCoverage:function(o,u){o[u]={}}})}(ae),function(n){var o=function(h){n.console.assert(h,"[TileCache.cacheTile] options is required"),n.console.assert(h.tile,"[TileCache.cacheTile] options.tile is required"),n.console.assert(h.tiledImage,"[TileCache.cacheTile] options.tiledImage is required"),this.tile=h.tile,this.tiledImage=h.tiledImage},u=function(h){n.console.assert(h,"[ImageRecord] options is required"),n.console.assert(h.data,"[ImageRecord] options.data is required"),this._tiles=[],h.create.apply(null,[this,h.data,h.ownerTile]),this._destroyImplementation=h.destroy.bind(null,this),this.getImage=h.getImage.bind(null,this),this.getData=h.getData.bind(null,this),this.getRenderedContext=h.getRenderedContext.bind(null,this)};u.prototype={destroy:function(){this._destroyImplementation(),this._tiles=null},addTile:function(h){n.console.assert(h,"[ImageRecord.addTile] tile is required"),this._tiles.push(h)},removeTile:function(h){for(var m=0;m<this._tiles.length;m++)if(this._tiles[m]===h){this._tiles.splice(m,1);return}n.console.warn("[ImageRecord.removeTile] trying to remove unknown tile",h)},getTileCount:function(){return this._tiles.length}},n.TileCache=function(h){h=h||{},this._maxImageCacheCount=h.maxImageCacheCount||n.DEFAULT_SETTINGS.maxImageCacheCount,this._tilesLoaded=[],this._imagesLoaded=[],this._imagesLoadedCount=0},n.TileCache.prototype={numTilesLoaded:function(){return this._tilesLoaded.length},cacheTile:function(h){n.console.assert(h,"[TileCache.cacheTile] options is required"),n.console.assert(h.tile,"[TileCache.cacheTile] options.tile is required"),n.console.assert(h.tile.cacheKey,"[TileCache.cacheTile] options.tile.cacheKey is required"),n.console.assert(h.tiledImage,"[TileCache.cacheTile] options.tiledImage is required");var m=h.cutoff||0,y=this._tilesLoaded.length,a=this._imagesLoaded[h.tile.cacheKey];if(a||(h.data||(n.console.error("[TileCache.cacheTile] options.image was renamed to options.data. '.image' attribute has been deprecated and will be removed in the future."),h.data=h.image),n.console.assert(h.data,"[TileCache.cacheTile] options.data is required to create an ImageRecord"),a=this._imagesLoaded[h.tile.cacheKey]=new u({data:h.data,ownerTile:h.tile,create:h.tiledImage.source.createTileCache,destroy:h.tiledImage.source.destroyTileCache,getImage:h.tiledImage.source.getTileCacheDataAsImage,getData:h.tiledImage.source.getTileCacheData,getRenderedContext:h.tiledImage.source.getTileCacheDataAsContext2D}),this._imagesLoadedCount++),a.addTile(h.tile),h.tile.cacheImageRecord=a,this._imagesLoadedCount>this._maxImageCacheCount){for(var w=null,_=-1,A=null,R,k,G,W,O,$,ye=this._tilesLoaded.length-1;ye>=0;ye--)if($=this._tilesLoaded[ye],R=$.tile,!(R.level<=m||R.beingDrawn)){if(!w){w=R,_=ye,A=$;continue}W=R.lastTouchTime,k=w.lastTouchTime,O=R.level,G=w.level,(W<k||W===k&&O>G)&&(w=R,_=ye,A=$)}w&&_>=0&&(this._unloadTile(A),y=_)}this._tilesLoaded[y]=new o({tile:h.tile,tiledImage:h.tiledImage})},clearTilesFor:function(h){n.console.assert(h,"[TileCache.clearTilesFor] tiledImage is required");for(var m,y=0;y<this._tilesLoaded.length;++y)m=this._tilesLoaded[y],m.tiledImage===h&&(this._unloadTile(m),this._tilesLoaded.splice(y,1),y--)},getImageRecord:function(h){return n.console.assert(h,"[TileCache.getImageRecord] cacheKey is required"),this._imagesLoaded[h]},_unloadTile:function(h){n.console.assert(h,"[TileCache._unloadTile] tileRecord is required");var m=h.tile,y=h.tiledImage;let a=m.getCanvasContext&&m.getCanvasContext();m.unload(),m.cacheImageRecord=null;var w=this._imagesLoaded[m.cacheKey];w&&(w.removeTile(m),w.getTileCount()||(w.destroy(),delete this._imagesLoaded[m.cacheKey],this._imagesLoadedCount--,a&&(a.canvas.width=0,a.canvas.height=0,y.viewer.raiseEvent("image-unloaded",{context2D:a,tile:m}))),y.viewer.raiseEvent("tile-unloaded",{tile:m,tiledImage:y}))}}}(ae),function(n){n.World=function(o){var u=this;n.console.assert(o.viewer,"[World] options.viewer is required"),n.EventSource.call(this),this.viewer=o.viewer,this._items=[],this._needsDraw=!1,this._autoRefigureSizes=!0,this._needsSizesFigured=!1,this._delegatedFigureSizes=function(h){u._autoRefigureSizes?u._figureSizes():u._needsSizesFigured=!0},this._figureSizes()},n.extend(n.World.prototype,n.EventSource.prototype,{addItem:function(o,u){if(n.console.assert(o,"[World.addItem] item is required"),n.console.assert(o instanceof n.TiledImage,"[World.addItem] only TiledImages supported at this time"),u=u||{},u.index!==void 0){var h=Math.max(0,Math.min(this._items.length,u.index));this._items.splice(h,0,o)}else this._items.push(o);this._autoRefigureSizes?this._figureSizes():this._needsSizesFigured=!0,this._needsDraw=!0,o.addHandler("bounds-change",this._delegatedFigureSizes),o.addHandler("clip-change",this._delegatedFigureSizes),this.raiseEvent("add-item",{item:o})},getItemAt:function(o){return n.console.assert(o!==void 0,"[World.getItemAt] index is required"),this._items[o]},getIndexOfItem:function(o){return n.console.assert(o,"[World.getIndexOfItem] item is required"),n.indexOf(this._items,o)},getItemCount:function(){return this._items.length},setItemIndex:function(o,u){n.console.assert(o,"[World.setItemIndex] item is required"),n.console.assert(u!==void 0,"[World.setItemIndex] index is required");var h=this.getIndexOfItem(o);if(u>=this._items.length)throw new Error("Index bigger than number of layers.");u===h||h===-1||(this._items.splice(h,1),this._items.splice(u,0,o),this._needsDraw=!0,this.raiseEvent("item-index-change",{item:o,previousIndex:h,newIndex:u}))},removeItem:function(o){n.console.assert(o,"[World.removeItem] item is required");var u=n.indexOf(this._items,o);u!==-1&&(o.removeHandler("bounds-change",this._delegatedFigureSizes),o.removeHandler("clip-change",this._delegatedFigureSizes),o.destroy(),this._items.splice(u,1),this._figureSizes(),this._needsDraw=!0,this._raiseRemoveItem(o))},removeAll:function(){this.viewer._cancelPendingImages();var o,u;for(u=0;u<this._items.length;u++)o=this._items[u],o.removeHandler("bounds-change",this._delegatedFigureSizes),o.removeHandler("clip-change",this._delegatedFigureSizes),o.destroy();var h=this._items;for(this._items=[],this._figureSizes(),this._needsDraw=!0,u=0;u<h.length;u++)o=h[u],this._raiseRemoveItem(o)},resetItems:function(){for(var o=0;o<this._items.length;o++)this._items[o].reset()},update:function(o){for(var u=!1,h=0;h<this._items.length;h++)u=this._items[h].update(o)||u;return u},draw:function(){this.viewer.drawer.draw(this._items),this._needsDraw=!1,this._items.forEach(o=>{this._needsDraw=o.setDrawn()||this._needsDraw})},needsDraw:function(){for(var o=0;o<this._items.length;o++)if(this._items[o].needsDraw())return!0;return this._needsDraw},getHomeBounds:function(){return this._homeBounds.clone()},getContentFactor:function(){return this._contentFactor},setAutoRefigureSizes:function(o){this._autoRefigureSizes=o,o&this._needsSizesFigured&&(this._figureSizes(),this._needsSizesFigured=!1)},arrange:function(o){o=o||{};var u=o.immediately||!1,h=o.layout||n.DEFAULT_SETTINGS.collectionLayout,m=o.rows||n.DEFAULT_SETTINGS.collectionRows,y=o.columns||n.DEFAULT_SETTINGS.collectionColumns,a=o.tileSize||n.DEFAULT_SETTINGS.collectionTileSize,w=o.tileMargin||n.DEFAULT_SETTINGS.collectionTileMargin,_=a+w,A;!o.rows&&y?A=y:A=Math.ceil(this._items.length/m);var R=0,k=0,G,W,O,$,ye;this.setAutoRefigureSizes(!1);for(var we=0;we<this._items.length;we++)we&&we%A===0&&(h==="horizontal"?(k+=_,R=0):(R+=_,k=0)),G=this._items[we],W=G.getBounds(),W.width>W.height?O=a:O=a*(W.width/W.height),$=O*(W.height/W.width),ye=new n.Point(R+(a-O)/2,k+(a-$)/2),G.setPosition(ye,u),G.setWidth(O,u),h==="horizontal"?R+=_:k+=_;this.setAutoRefigureSizes(!0)},_figureSizes:function(){var o=this._homeBounds?this._homeBounds.clone():null,u=this._contentSize?this._contentSize.clone():null,h=this._contentFactor||0;if(!this._items.length)this._homeBounds=new n.Rect(0,0,1,1),this._contentSize=new n.Point(1,1),this._contentFactor=1;else{var m=this._items[0],y=m.getBounds();this._contentFactor=m.getContentSize().x/y.width;for(var a=m.getClippedBounds().getBoundingBox(),w=a.x,_=a.y,A=a.x+a.width,R=a.y+a.height,k=1;k<this._items.length;k++)m=this._items[k],y=m.getBounds(),this._contentFactor=Math.max(this._contentFactor,m.getContentSize().x/y.width),a=m.getClippedBounds().getBoundingBox(),w=Math.min(w,a.x),_=Math.min(_,a.y),A=Math.max(A,a.x+a.width),R=Math.max(R,a.y+a.height);this._homeBounds=new n.Rect(w,_,A-w,R-_),this._contentSize=new n.Point(this._homeBounds.width*this._contentFactor,this._homeBounds.height*this._contentFactor)}(this._contentFactor!==h||!this._homeBounds.equals(o)||!this._contentSize.equals(u))&&this.raiseEvent("metrics-change",{})},_raiseRemoveItem:function(o){this.raiseEvent("remove-item",{item:o})}})}(ae)}(Wi)),Wi.exports}var ln=Ki();const hn=an(ln);var Qi={exports:{}};/*! For license information please see main.js.LICENSE.txt */(function(Le,ae){(function(n,o){Le.exports=o(Ki())})(self,n=>(()=>{var o={946:(y,a,w)=>{w.d(a,{A:()=>G});var _=w(354),A=w.n(_),R=w(314),k=w.n(R)()(A());k.push([y.id,`/**
80
80
  * OpenSeadragon paperjs overlay plugin based on paper.js
81
81
  * @version 0.4.13
82
82
  *
@@ -1358,7 +1358,7 @@ input[type=range] {
1358
1358
 
1359
1359
  .rotate-by{
1360
1360
  transform:rotate(var(--rotate-angle));
1361
- }`],sourceRoot:""}]);const G=k},676:(y,a,w)=>{w.d(a,{A:()=>G});var _=w(354),T=w.n(_),I=w(314),k=w.n(I)()(T());k.push([y.id,`/**
1361
+ }`],sourceRoot:""}]);const G=k},676:(y,a,w)=>{w.d(a,{A:()=>G});var _=w(354),A=w.n(_),R=w(314),k=w.n(R)()(A());k.push([y.id,`/**
1362
1362
  * OpenSeadragon paperjs overlay plugin based on paper.js
1363
1363
  * @version 0.4.13
1364
1364
  *
@@ -1516,10 +1516,10 @@ input[type=range] {
1516
1516
  font-weight: inherit;
1517
1517
  font-size: inherit;
1518
1518
  font-family: inherit;
1519
- }`],sourceRoot:""}]);const G=k},314:y=>{y.exports=function(a){var w=[];return w.toString=function(){return this.map(function(_){var T="",I=_[5]!==void 0;return _[4]&&(T+="@supports (".concat(_[4],") {")),_[2]&&(T+="@media ".concat(_[2]," {")),I&&(T+="@layer".concat(_[5].length>0?" ".concat(_[5]):""," {")),T+=a(_),I&&(T+="}"),_[2]&&(T+="}"),_[4]&&(T+="}"),T}).join("")},w.i=function(_,T,I,k,G){typeof _=="string"&&(_=[[null,_,void 0]]);var W={};if(I)for(var O=0;O<this.length;O++){var ee=this[O][0];ee!=null&&(W[ee]=!0)}for(var ve=0;ve<_.length;ve++){var we=[].concat(_[ve]);I&&W[we[0]]||(G!==void 0&&(we[5]===void 0||(we[1]="@layer".concat(we[5].length>0?" ".concat(we[5]):""," {").concat(we[1],"}")),we[5]=G),T&&(we[2]&&(we[1]="@media ".concat(we[2]," {").concat(we[1],"}")),we[2]=T),k&&(we[4]?(we[1]="@supports (".concat(we[4],") {").concat(we[1],"}"),we[4]=k):we[4]="".concat(k)),w.push(we))}},w}},354:y=>{y.exports=function(a){var w=a[1],_=a[3];if(!_)return w;if(typeof btoa=="function"){var T=btoa(unescape(encodeURIComponent(JSON.stringify(_)))),I="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(T),k="/*# ".concat(I," */");return[w].concat([k]).join(`
1519
+ }`],sourceRoot:""}]);const G=k},314:y=>{y.exports=function(a){var w=[];return w.toString=function(){return this.map(function(_){var A="",R=_[5]!==void 0;return _[4]&&(A+="@supports (".concat(_[4],") {")),_[2]&&(A+="@media ".concat(_[2]," {")),R&&(A+="@layer".concat(_[5].length>0?" ".concat(_[5]):""," {")),A+=a(_),R&&(A+="}"),_[2]&&(A+="}"),_[4]&&(A+="}"),A}).join("")},w.i=function(_,A,R,k,G){typeof _=="string"&&(_=[[null,_,void 0]]);var W={};if(R)for(var O=0;O<this.length;O++){var $=this[O][0];$!=null&&(W[$]=!0)}for(var ye=0;ye<_.length;ye++){var we=[].concat(_[ye]);R&&W[we[0]]||(G!==void 0&&(we[5]===void 0||(we[1]="@layer".concat(we[5].length>0?" ".concat(we[5]):""," {").concat(we[1],"}")),we[5]=G),A&&(we[2]&&(we[1]="@media ".concat(we[2]," {").concat(we[1],"}")),we[2]=A),k&&(we[4]?(we[1]="@supports (".concat(we[4],") {").concat(we[1],"}"),we[4]=k):we[4]="".concat(k)),w.push(we))}},w}},354:y=>{y.exports=function(a){var w=a[1],_=a[3];if(!_)return w;if(typeof btoa=="function"){var A=btoa(unescape(encodeURIComponent(JSON.stringify(_)))),R="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(A),k="/*# ".concat(R," */");return[w].concat([k]).join(`
1520
1520
  `)}return[w].join(`
1521
- `)}},292:function(y,a,w){var _,T;(function(I,k){var G=(I=I||w(965)).window,W=I.document,O=new function(){function e(E,D,F){var H;return E&&((H=u(E,"length"))&&typeof H.value=="number"?m:function(U,J){for(var j in this)this.hasOwnProperty(j)&&U.call(J,this[j],j,this)}).call(E,D,F=F||E),F}var t=/^(statics|enumerable|beans|preserve)$/,i=[],r=i.slice,l=Object.create,u=Object.getOwnPropertyDescriptor,f=Object.defineProperty,m=i.forEach||function(E,D){for(var F=0,H=this.length;F<H;F++)E.call(D,this[F],F,this)},g=Object.assign||function(E){for(var D=1,F=arguments.length;D<F;D++){var H,U=arguments[D];for(H in U)U.hasOwnProperty(H)&&(E[H]=U[H])}return E};function x(E,D,F,H,U){var J={};function j(ae,le){var be,Ce=typeof(le=typeof(le=le||(le=u(D,ae))&&(le.get?le:le.value))=="string"&&le[0]==="#"&&E[le.substring(1)]||le)=="function",xe=le,Oe=U||Ce&&!le.base?le&&le.get?ae in E:E[ae]:null;U&&Oe||(Ce&&Oe&&(le.base=Oe),Ce&&H!==!1&&(be=ae.match(/^([gs]et|is)(([A-Z])(.*))$/))&&(J[be[3].toLowerCase()+be[4]]=be[2]),xe&&!Ce&&xe.get&&typeof xe.get=="function"&&S.isPlainObject(xe)||(xe={value:xe,writable:!0}),(u(E,ae)||{configurable:!0}).configurable&&(xe.configurable=!0,xe.enumerable=F??!be),f(E,ae,xe))}if(D){for(var q in D)D.hasOwnProperty(q)&&!t.test(q)&&j(q);for(var q in J){var $=J[q],re=E["set"+$];!($=E["get"+$]||re&&E["is"+$])||H!==!0&&$.length!==0||j(q,{get:$,set:re})}}return E}function S(){for(var E=0,D=arguments.length;E<D;E++){var F=arguments[E];F&&g(this,F)}return this}return x(S,{inject:function(E){var D,F,H;E&&(D=E.statics===!0?E:E.statics,F=E.beans,H=E.preserve,D!==E&&x(this.prototype,E,E.enumerable,F,H),x(this,D,null,F,H));for(var U=1,J=arguments.length;U<J;U++)this.inject(arguments[U]);return this},extend:function(){for(var E,D,F,H=this,U=0,J=arguments.length;U<J&&(!E||!D);U++)F=arguments[U],E=E||F.initialize,D=D||F.prototype;return D=(E=E||function(){H.apply(this,arguments)}).prototype=D||l(this.prototype),f(D,"constructor",{value:E,writable:!0,configurable:!0}),x(E,this),arguments.length&&this.inject.apply(E,arguments),E.base=H,E}}).inject({enumerable:!1,initialize:S,set:S,inject:function(){for(var E=0,D=arguments.length;E<D;E++){var F=arguments[E];F&&x(this,F,F.enumerable,F.beans,F.preserve)}return this},extend:function(){var E=l(this);return E.inject.apply(E,arguments)},each:function(E,D){return e(this,E,D)},clone:function(){return new this.constructor(this)},statics:{set:g,each:e,create:l,define:f,describe:u,clone:function(E){return g(new E.constructor,E)},isPlainObject:function(E){return(E=E!=null&&E.constructor)&&(E===Object||E===S||E.name==="Object")},pick:function(E,D){return E!==k?E:D},slice:function(E,D,F){return r.call(E,D,F)}}})};y.exports=O,O.inject({enumerable:!1,toString:function(){return this._id!=null?(this._class||"Object")+(this._name?" '"+this._name+"'":" @"+this._id):"{ "+O.each(this,function(e,t){/^_/.test(t)||this.push(t+": "+((t=typeof e)=="number"?Ge.instance.number(e):t=="string"?"'"+e+"'":e))},[]).join(", ")+" }"},getClassName:function(){return this._class||""},importJSON:function(e){return O.importJSON(e,this)},exportJSON:function(e){return O.exportJSON(this,e)},toJSON:function(){return O.serialize(this)},set:function(e,t){return e&&O.filter(this,e,t,this._prioritize),this}},{beans:!1,statics:{exports:{},extend:function e(){var t=e.base.apply(this,arguments),i=t.prototype._class;return i&&!O.exports[i]&&(O.exports[i]=t),t},equals:function(e,t){if(e===t)return!0;if(e&&e.equals)return e.equals(t);if(t&&t.equals)return t.equals(e);if(e&&t&&typeof e=="object"&&typeof t=="object"){if(Array.isArray(e)&&Array.isArray(t)){if((i=e.length)!==t.length)return!1;for(;i--;)if(!O.equals(e[i],t[i]))return!1}else{var i,r=Object.keys(e);if((i=r.length)!==Object.keys(t).length)return!1;for(;i--;){var l=r[i];if(!t.hasOwnProperty(l)||!O.equals(e[l],t[l]))return!1}}return!0}return!1},read:function(e,t,i,r){if(this===O){var l=this.peek(e,t);return e.__index++,l}var u=this.prototype,f=u._readIndex,m=t||f&&e.__index||0;return l=e.length,r=r||l-m,(t=e[m])instanceof this||i&&i.readNull&&t==null&&r<=1?(f&&(e.__index=m+1),t&&i&&i.clone?t.clone():t):(t=O.create(u),f&&(t.__read=!0),t=t.initialize.apply(t,0<m||m+r<l?O.slice(e,m,m+r):e)||t,f&&(e.__index=m+t.__read,(m=t.__filtered)&&(e.__filtered=m,t.__filtered=k),t.__read=k),t)},peek:function(e,t){return e[e.__index=t||e.__index||0]},remain:function(e){return e.length-(e.__index||0)},readList:function(e,t,i,r){for(var l,u=[],f=(t=t||0,r?t+r:e.length),m=t;m<f;m++)u.push(Array.isArray(l=e[m])?this.read(l,0,i):this.read(e,m,i,1));return u},readNamed:function(e,t,i,r,l){var u,f,m=this.getNamed(e,t),g=m!==k;return g&&((f=e.__filtered)||(u=this.getSource(e),(f=e.__filtered=O.create(u)).__unfiltered=u),f[t]=k),this.read(g?[m]:e,i,r,l)},readSupported:function(e,t){var i=this.getSource(e),r=this,l=!1;return i&&Object.keys(i).forEach(function(u){var f;u in t&&((f=r.readNamed(e,u))!==k&&(t[u]=f),l=!0)}),l},getSource:function(e){var t,i=e.__source;return i===k&&(t=e.length===1&&e[0],i=e.__source=t&&O.isPlainObject(t)?t:null),i},getNamed:function(e,t){var i=this.getSource(e);if(i)return t?i[t]:e.__filtered||i},hasNamed:function(e,t){return!!this.getNamed(e,t)},filter:function(e,t,i,r){var l;function u(S){var E;i&&S in i||l&&S in l||(E=t[S])!==k&&(e[S]=E)}if(r){for(var f,m={},g=0,x=r.length;g<x;g++)(f=r[g])in t&&(u(f),m[f]=!0);l=m}return Object.keys(t.__unfiltered||t).forEach(u),e},isPlainValue:function(e,t){return O.isPlainObject(e)||Array.isArray(e)||t&&typeof e=="string"},serialize:function(e,t,i,r){t=t||{};var l=!r;if(l&&(t.formatter=new Ge(t.precision),r={length:0,definitions:{},references:{},add:function(E,D){var F="#"+E._id,H=this.references[F];return H||(this.length++,D=D.call(E),(E=E._class)&&D[0]!==E&&D.unshift(E),this.definitions[F]=D,H=this.references[F]=[F]),H}}),e&&e._serialize){var u=e._serialize(t,r),f=e._class;!f||e._compactSerialize||!l&&i||u[0]===f||u.unshift(f)}else if(Array.isArray(e)){u=[];for(var m=0,g=e.length;m<g;m++)u[m]=O.serialize(e[m],t,i,r)}else if(O.isPlainObject(e)){u={};var x=Object.keys(e);for(m=0,g=x.length;m<g;m++){var S=x[m];u[S]=O.serialize(e[S],t,i,r)}}else u=typeof e=="number"?t.formatter.number(e,t.precision):e;return l&&0<r.length?[["dictionary",r.definitions],u]:u},deserialize:function(e,t,i,r,l){var u=e,f=!i,m=f&&e&&e.length&&e[0][0]==="dictionary";if(i=i||{},Array.isArray(e)){var g=e[0],x=g==="dictionary";if(e.length==1&&/^#/.test(g))return i.dictionary[g];u=[];for(var S,E=(g=O.exports[g])?1:0,D=e.length;E<D;E++)u.push(O.deserialize(e[E],t,i,x,m));g&&(S=u,u=t?t(g,S,f||l):new g(S))}else if(O.isPlainObject(e))for(var F in u={},r&&(i.dictionary=u),e)u[F]=O.deserialize(e[F],t,i);return m?u[1]:u},exportJSON:function(e,t){return e=O.serialize(e,t),t&&t.asString==0?e:JSON.stringify(e)},importJSON:function(e,t){return O.deserialize(typeof e=="string"?JSON.parse(e):e,function(i,r,l){var u=l&&t&&t.constructor===i,f=u?t:O.create(i.prototype);return!(r.length===1&&f instanceof at)||!u&&f instanceof Jt||(l=r[0],O.isPlainObject(l)&&(l.insert=!1,u&&(r=r.concat([at.INSERT])))),(u?f.set:i).apply(f,r),u&&(t=null),f})},push:function(e,t){var i=t.length;if(i<4096)e.push.apply(e,t);else{var r=e.length;e.length+=i;for(var l=0;l<i;l++)e[r+l]=t[l]}return e},splice:function(e,t,i,r){var l=t&&t.length,u=i===k;(i=u?e.length:i)>e.length&&(i=e.length);for(var f=0;f<l;f++)t[f]._index=i+f;if(u)return O.push(e,t),[];r=[i,r],t&&O.push(r,t);for(var m=e.splice.apply(e,r),g=(f=0,m.length);f<g;f++)m[f]._index=k;for(f=i+l,g=e.length;f<g;f++)e[f]._index=f;return m},capitalize:function(e){return e.replace(/\b[a-z]/g,function(t){return t.toUpperCase()})},camelize:function(e){return e.replace(/-(.)/g,function(t,i){return i.toUpperCase()})},hyphenate:function(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}}});var ee={on:function(e,t){var i,r;return typeof e!="string"?O.each(e,function(l,u){this.on(u,l)},this):(i=(r=this._eventTypes)&&r[e],(r=(r=this._callbacks=this._callbacks||{})[e]=r[e]||[]).indexOf(t)===-1&&(r.push(t),i&&i.install&&r.length===1&&i.install.call(this,e))),this},off:function(e,t){if(typeof e=="string"){var i,r,l=(r=this._eventTypes)&&r[e];return(r=this._callbacks&&this._callbacks[e])&&(!t||(i=r.indexOf(t))!==-1&&r.length===1?(l&&l.uninstall&&l.uninstall.call(this,e),delete this._callbacks[e]):i!==-1&&r.splice(i,1)),this}O.each(e,function(u,f){this.off(f,u)},this)},once:function(e,t){return this.on(e,function i(){t.apply(this,arguments),this.off(e,i)})},emit:function(e,t){if(!(l=this._callbacks&&this._callbacks[e]))return!1;var i=O.slice(arguments,1),r=t&&t.target&&!t.currentTarget,l=l.slice();r&&(t.currentTarget=this);for(var u=0,f=l.length;u<f;u++)if(l[u].apply(this,i)==0){t&&t.stop&&t.stop();break}return r&&delete t.currentTarget,!0},responds:function(e){return!(!this._callbacks||!this._callbacks[e])},attach:"#on",detach:"#off",fire:"#emit",_installEvents:function(e){var t,i=this._eventTypes,r=this._callbacks,l=e?"install":"uninstall";if(i)for(var u in r)0<r[u].length&&(t=(t=i[u])&&t[l])&&t.call(this,u)},statics:{inject:function e(t){var i,r=t._events;return r&&(i={},O.each(r,function(l,u){var f=typeof l=="string",m=f?l:u,g=(u=O.capitalize(m),m.substring(2).toLowerCase());i[g]=f?{}:l,m="_"+m,t["get"+u]=function(){return this[m]},t["set"+u]=function(x){var S=this[m];S&&this.off(g,S),x&&this.on(g,x),this[m]=x}}),t._eventTypes=i),e.base.apply(this,arguments)}}},ve=O.extend({_class:"PaperScope",initialize:function e(){(zt=this).settings=new O({applyMatrix:!0,insertItems:!0,handleSize:4,hitTolerance:0}),this.project=null,this.projects=[],this.tools=[],this._id=e._id++,e._scopes[this._id]=this;var t,i,r,l=e.prototype;this.support||(i=et.getContext(1,1)||{},l.support={nativeDash:"setLineDash"in i||"mozDash"in i,nativeBlendModes:_t.nativeModes},et.release(i)),this.agent||(t=I.navigator.userAgent.toLowerCase(),i=(/(darwin|win|mac|linux|freebsd|sunos)/.exec(t)||[])[0],r=l.agent=l.browser={platform:i=i==="darwin"?"mac":i},i&&(r[i]=!0),t.replace(/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\/?\s*([.\d]+)(?:.*version\/([.\d]+))?(?:.*rv\:v?([.\d]+))?/g,function(u,f,m,g,x){r.chrome||(m=f==="opera"?g:/^(node|trident)$/.test(f)?x:m,r.version=m,r.versionNumber=parseFloat(m),r.name=f={trident:"msie",jsdom:"node"}[f]||f,r[f]=!0)}),r.chrome&&delete r.webkit,r.atom&&delete r.chrome)},version:"0.12.17",getView:function(){var e=this.project;return e&&e._view},getPaper:function(){return this},execute:function(e,t){},install:function(e){var t,i=this;for(t in O.each(["project","view","tool"],function(r){O.define(e,r,{configurable:!0,get:function(){return i[r]}})}),this)!/^_/.test(t)&&this[t]&&(e[t]=this[t])},setup:function(e){return(zt=this).project=new jt(e),this},createCanvas:function(e,t){return et.getCanvas(e,t)},activate:function(){zt=this},clear:function(){for(var e=this.projects,t=this.tools,i=e.length-1;0<=i;i--)e[i].remove();for(i=t.length-1;0<=i;i--)t[i].remove()},remove:function(){this.clear(),delete ve._scopes[this._id]},statics:new function(){function e(t){return t+="Attribute",function(i,r){return i[t](r)||i[t]("data-paper-"+r)}}return{_scopes:{},_id:0,get:function(t){return this._scopes[t]||null},getAttribute:e("get"),hasAttribute:e("has")}}}),we=O.extend(ee,{initialize:function(e){this._scope=zt,this._index=this._scope[this._list].push(this)-1,!e&&this._scope[this._reference]||this.activate()},activate:function(){if(!this._scope)return!1;var e=this._scope[this._reference];return e&&e!==this&&e.emit("deactivate"),(this._scope[this._reference]=this).emit("activate",e),!0},isActive:function(){return this._scope[this._reference]===this},remove:function(){return this._index!=null&&(O.splice(this._scope[this._list],null,this._index,1),this._scope[this._reference]==this&&(this._scope[this._reference]=null),!(this._scope=null))},getView:function(){return this._scope.getView()}}),ot={findItemBoundsCollisions:function(e,t,i){function r(u){for(var f=new Array(u.length),m=0;m<u.length;m++){var g=u[m].getBounds();f[m]=[g.left,g.top,g.right,g.bottom]}return f}var l=r(e);return t=t&&t!==e?r(t):l,this.findBoundsCollisions(l,t,i||0)},findCurveBoundsCollisions:function(e,t,i,r){function l(E){for(var D=Math.min,F=Math.max,H=new Array(E.length),U=0;U<E.length;U++){var J=E[U];H[U]=[D(J[0],J[2],J[4],J[6]),D(J[1],J[3],J[5],J[7]),F(J[0],J[2],J[4],J[6]),F(J[1],J[3],J[5],J[7])]}return H}var u=l(e);if(t=t&&t!==e?l(t):u,r){for(var f=this.findBoundsCollisions(u,t,i||0,!1,!0),m=this.findBoundsCollisions(u,t,i||0,!0,!0),g=[],x=0,S=f.length;x<S;x++)g[x]={hor:f[x],ver:m[x]};return g}return this.findBoundsCollisions(u,t,i||0)},findBoundsCollisions:function(e,t,i,r,l){var u=!t||e===t,f=u?e:e.concat(t),m=e.length,g=f.length;function x(Ze,tt,lt){for(var M=0,s=Ze.length;M<s;){var h=s+M>>>1;f[Ze[h]][tt]<lt?M=1+h:s=h}return M-1}for(var S=r?1:0,E=2+S,D=r?0:1,F=2+D,H=new Array(g),U=0;U<g;U++)H[U]=U;H.sort(function(Ze,tt){return f[Ze][S]-f[tt][S]});var J=[],j=new Array(m);for(U=0;U<g;U++){var q=H[U],$=f[q],re=u?q:q-m,ae=q<m,le=u||!ae,be=ae?[]:null;if(J.length){var Ce=x(J,E,$[S]-i)+1;if(J.splice(0,Ce),u&&l){be=be.concat(J);for(var xe=0;xe<J.length;xe++)j[oe=J[xe]].push(re)}else{var Oe=$[F],_e=$[D];for(xe=0;xe<J.length;xe++){var oe=J[xe],ue=f[oe],De=oe<m,Se=u||m<=oe;(l||(ae&&Se||le&&De)&&Oe>=ue[D]-i&&_e<=ue[F]+i)&&(ae&&Se&&be.push(u?oe:oe-m),le&&De&&j[oe].push(re))}}}ae&&(e===t&&be.push(q),j[q]=be),J.length?($=x(J,E,$[E]),J.splice($+1,0,q)):J.push(q)}for(U=0;U<j.length;U++){var He=j[U];He&&He.sort(function(Ze,tt){return Ze-tt})}return j}},Ge=O.extend({initialize:function(e){this.precision=O.pick(e,5),this.multiplier=Math.pow(10,this.precision)},number:function(e){return this.precision<16?Math.round(e*this.multiplier)/this.multiplier:e},pair:function(e,t,i){return this.number(e)+(i||",")+this.number(t)},point:function(e,t){return this.number(e.x)+(t||",")+this.number(e.y)},size:function(e,t){return this.number(e.width)+(t||",")+this.number(e.height)},rectangle:function(e,t){return this.point(e,t)+(t||",")+this.size(e,t)}});Ge.instance=new Ge;var je=new function(){var e=[[.5773502691896257],[0,.7745966692414834],[.33998104358485626,.8611363115940526],[0,.5384693101056831,.906179845938664],[.2386191860831969,.6612093864662645,.932469514203152],[0,.4058451513773972,.7415311855993945,.9491079123427585],[.1834346424956498,.525532409916329,.7966664774136267,.9602898564975363],[0,.3242534234038089,.6133714327005904,.8360311073266358,.9681602395076261],[.14887433898163122,.4333953941292472,.6794095682990244,.8650633666889845,.9739065285171717],[0,.26954315595234496,.5190961292068118,.7301520055740494,.8870625997680953,.978228658146057],[.1252334085114689,.3678314989981802,.5873179542866175,.7699026741943047,.9041172563704749,.9815606342467192],[0,.2304583159551348,.44849275103644687,.6423493394403402,.8015780907333099,.9175983992229779,.9841830547185881],[.10805494870734367,.31911236892788974,.5152486363581541,.6872929048116855,.827201315069765,.9284348836635735,.9862838086968123],[0,.20119409399743451,.3941513470775634,.5709721726085388,.7244177313601701,.8482065834104272,.937273392400706,.9879925180204854],[.09501250983763744,.2816035507792589,.45801677765722737,.6178762444026438,.755404408355003,.8656312023878318,.9445750230732326,.9894009349916499]],t=[[1],[.8888888888888888,.5555555555555556],[.6521451548625461,.34785484513745385],[.5688888888888889,.47862867049936647,.23692688505618908],[.46791393457269104,.3607615730481386,.17132449237917036],[.4179591836734694,.3818300505051189,.27970539148927664,.1294849661688697],[.362683783378362,.31370664587788727,.22238103445337448,.10122853629037626],[.3302393550012598,.31234707704000286,.26061069640293544,.1806481606948574,.08127438836157441],[.29552422471475287,.26926671930999635,.21908636251598204,.1494513491505806,.06667134430868814],[.2729250867779006,.26280454451024665,.23319376459199048,.18629021092773426,.1255803694649046,.05566856711617366],[.24914704581340277,.2334925365383548,.20316742672306592,.16007832854334622,.10693932599531843,.04717533638651183],[.2325515532308739,.22628318026289723,.2078160475368885,.17814598076194574,.13887351021978725,.09212149983772845,.04048400476531588],[.2152638534631578,.2051984637212956,.18553839747793782,.15720316715819355,.12151857068790319,.08015808715976021,.03511946033175186],[.2025782419255613,.19843148532711158,.1861610000155622,.16626920581699392,.13957067792615432,.10715922046717194,.07036604748810812,.03075324199611727],[.1894506104550685,.18260341504492358,.16915651939500254,.14959598881657674,.12462897125553388,.09515851168249279,.062253523938647894,.027152459411754096]],i=Math.abs,r=Math.sqrt,l=Math.pow,u=Math.log2||function(E){return Math.log(E)*Math.LOG2E},f=1e-12,m=112e-18;function g(E,D,F){return E<D?D:F<E?F:E}function x(E,D,F){function H($){var re;return[re=$-(re=134217729*$)+re,$-re]}var U,J,j=D*D-E*F,q=D*D+E*F;return 3*i(j)<q&&(U=H(E),J=H(D),q=H(F),j=(D*=D)-(F*=E)+(J[0]*J[0]-D+2*J[0]*J[1]+J[1]*J[1]-(U[0]*q[0]-F+U[0]*q[1]+U[1]*q[0]+U[1]*q[1]))),j}function S(){var E=Math.max.apply(Math,arguments);return E&&(E<1e-8||1e8<E)?l(2,-Math.round(u(E))):0}return{EPSILON:f,MACHINE_EPSILON:m,CURVETIME_EPSILON:1e-8,GEOMETRIC_EPSILON:1e-7,TRIGONOMETRIC_EPSILON:1e-8,ANGULAR_EPSILON:1e-5,KAPPA:4*(r(2)-1)/3,isZero:function(E){return-f<=E&&E<=f},isMachineZero:function(E){return-m<=E&&E<=m},clamp:g,integrate:function(E,D,F,H){for(var U=e[H-2],J=t[H-2],j=.5*(F-D),q=j+D,$=0,re=H+1>>1,ae=1&H?J[$++]*E(q):0;$<re;){var le=j*U[$];ae+=J[$++]*(E(q+le)+E(q-le))}return j*ae},findRoot:function(E,D,F,H,U,J,j){for(var q=0;q<J;q++){var $=E(F),re=$/D(F),ae=F-re;if(i(re)<j){F=ae;break}F=0<$?(U=F,ae<=H?.5*(H+U):ae):(H=F,U<=ae?.5*(H+U):ae)}return g(F,H,U)},solveQuadratic:function(E,D,F,H,U,J){var j,q=1/0;if(i(E)<f){if(i(D)<f)return i(F)<f?-1:0;j=-F/D}else{var $,re=x(E,D*=-.5,F);re&&i(re)<m&&($=S(i(E),i(D),i(F)))&&(re=x(E*=$,D*=$,F*=$)),-m<=re&&(ae=re<0?0:r(re),q=(le=D+(D<0?-ae:ae))===0?-(j=F/E):(j=le/E,F/le))}var ae=0,le=(E=U==null,F=U-f,J+f);return isFinite(j)&&(E||F<j&&j<le)&&(H[ae++]=E?j:g(j,U,J)),q!==j&&isFinite(q)&&(E||F<q&&q<le)&&(H[ae++]=E?q:g(q,U,J)),ae},solveCubic:function(E,D,F,H,U,J,j){var q,$,re,ae,le,be=S(i(E),i(D),i(F),i(H));function Ce(ue){ue=E*(q=ue),ae=(ue+($=ue+D))*q+(re=$*q+F),le=re*q+H}if(be&&(E*=be,D*=be,F*=be,H*=be),i(E)<f)E=D,$=F,re=H,q=1/0;else if(i(H)<f)$=D,re=F,q=0;else{Ce(-D/E/3);var xe=l(i(_e=le/E),1/3),Oe=_e<0?-1:1,_e=0<(_e=-ae/E)?1.324717957244746*Math.max(xe,r(_e)):xe,oe=q-Oe*_e;if(oe!==q){for(;Ce(oe),Oe*q<Oe*(oe=ae===0?q:q-le/ae/(1+m)););i(E)*q*q>i(H/q)&&($=((re=-H/q)-F)/q)}}return xe=je.solveQuadratic(E,$,re,U,J,j),_e=J==null,isFinite(q)&&(xe===0||0<xe&&q!==U[0]&&q!==U[1])&&(_e||J-f<q&&q<j+f)&&(U[xe++]=_e?q:g(q,J,j)),xe}}},xt={_id:1,_pools:{},get:function(e){if(e){var t=this._pools[e];return(t=t||(this._pools[e]={_id:1}))._id++}return this._id++}},Q=O.extend({_class:"Point",_readIndex:!0,initialize:function(e,t){var i,r=typeof e,l=this.__read,u=0;return r=="number"?(this._set(e,(i=typeof t=="number")?t:e),l&&(u=i?2:1)):r=="undefined"||e===null?(this._set(0,0),l&&(u=e===null?1:0)):(e=r=="string"?e.split(/[\s,]+/)||[]:e,u=1,Array.isArray(e)?this._set(+e[0],+(1<e.length?e[1]:e[0])):"x"in e?this._set(e.x||0,e.y||0):"width"in e?this._set(e.width||0,e.height||0):"angle"in e?(this._set(e.length||0,0),this.setAngle(e.angle||0)):(this._set(0,0),u=0)),l&&(this.__read=u),this},set:"#initialize",_set:function(e,t){return this.x=e,this.y=t,this},equals:function(e){return this===e||e&&(this.x===e.x&&this.y===e.y||Array.isArray(e)&&this.x===e[0]&&this.y===e[1])||!1},clone:function(){return new Q(this.x,this.y)},toString:function(){var e=Ge.instance;return"{ x: "+e.number(this.x)+", y: "+e.number(this.y)+" }"},_serialize:function(e){return[(e=e.formatter).number(this.x),e.number(this.y)]},getLength:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setLength:function(e){var t;this.isZero()?(t=this._angle||0,this._set(Math.cos(t)*e,Math.sin(t)*e)):(e/=this.getLength(),je.isZero(e)&&this.getAngle(),this._set(this.x*e,this.y*e))},getAngle:function(){return 180*this.getAngleInRadians.apply(this,arguments)/Math.PI},setAngle:function(e){this.setAngleInRadians.call(this,e*Math.PI/180)},getAngleInDegrees:"#getAngle",setAngleInDegrees:"#setAngle",getAngleInRadians:function(){if(arguments.length){var e=Q.read(arguments),t=this.getLength()*e.getLength();return je.isZero(t)?NaN:(t=this.dot(e)/t,Math.acos(t<-1?-1:1<t?1:t))}return this.isZero()?this._angle||0:this._angle=Math.atan2(this.y,this.x)},setAngleInRadians:function(e){var t;this._angle=e,this.isZero()||(t=this.getLength(),this._set(Math.cos(e)*t,Math.sin(e)*t))},getQuadrant:function(){return 0<=this.x?0<=this.y?1:4:0<=this.y?2:3}},{beans:!1,getDirectedAngle:function(){var e=Q.read(arguments);return 180*Math.atan2(this.cross(e),this.dot(e))/Math.PI},getDistance:function(){var e=arguments,t=(i=Q.read(e)).x-this.x,i=t*t+(i=i.y-this.y)*i;return O.read(e)?i:Math.sqrt(i)},normalize:function(e){e===k&&(e=1),e=(t=this.getLength())!==0?e/t:0;var t=new Q(this.x*e,this.y*e);return 0<=e&&(t._angle=this._angle),t},rotate:function(e,t){if(e===0)return this.clone();e=e*Math.PI/180;var i=t?this.subtract(t):this,r=Math.sin(e);return e=Math.cos(e),i=new Q(i.x*e-i.y*r,i.x*r+i.y*e),t?i.add(t):i},transform:function(e){return e?e._transformPoint(this):this},add:function(){var e=Q.read(arguments);return new Q(this.x+e.x,this.y+e.y)},subtract:function(){var e=Q.read(arguments);return new Q(this.x-e.x,this.y-e.y)},multiply:function(){var e=Q.read(arguments);return new Q(this.x*e.x,this.y*e.y)},divide:function(){var e=Q.read(arguments);return new Q(this.x/e.x,this.y/e.y)},modulo:function(){var e=Q.read(arguments);return new Q(this.x%e.x,this.y%e.y)},negate:function(){return new Q(-this.x,-this.y)},isInside:function(){return ke.read(arguments).contains(this)},isClose:function(){var e=arguments,t=Q.read(e);return e=O.read(e),this.getDistance(t)<=e},isCollinear:function(){var e=Q.read(arguments);return Q.isCollinear(this.x,this.y,e.x,e.y)},isColinear:"#isCollinear",isOrthogonal:function(){var e=Q.read(arguments);return Q.isOrthogonal(this.x,this.y,e.x,e.y)},isZero:function(){var e=je.isZero;return e(this.x)&&e(this.y)},isNaN:function(){return isNaN(this.x)||isNaN(this.y)},isInQuadrant:function(e){return 0<=this.x*(1<e&&e<4?-1:1)&&0<=this.y*(2<e?-1:1)},dot:function(){var e=Q.read(arguments);return this.x*e.x+this.y*e.y},cross:function(){var e=Q.read(arguments);return this.x*e.y-this.y*e.x},project:function(){var e=Q.read(arguments),t=e.isZero()?0:this.dot(e)/e.dot(e);return new Q(e.x*t,e.y*t)},statics:{min:function(){var e=arguments,t=Q.read(e);return e=Q.read(e),new Q(Math.min(t.x,e.x),Math.min(t.y,e.y))},max:function(){var e=arguments,t=Q.read(e);return e=Q.read(e),new Q(Math.max(t.x,e.x),Math.max(t.y,e.y))},random:function(){return new Q(Math.random(),Math.random())},isCollinear:function(e,t,i,r){return Math.abs(e*r-t*i)<=1e-8*Math.sqrt((e*e+t*t)*(i*i+r*r))},isOrthogonal:function(e,t,i,r){return Math.abs(e*i+t*r)<=1e-8*Math.sqrt((e*e+t*t)*(i*i+r*r))}}},O.each(["round","ceil","floor","abs"],function(e){var t=Math[e];this[e]=function(){return new Q(t(this.x),t(this.y))}},{})),vt=Q.extend({initialize:function(e,t,i,r){this._x=e,this._y=t,this._owner=i,this._setter=r},_set:function(e,t,i){return this._x=e,this._y=t,i||this._owner[this._setter](this),this},getX:function(){return this._x},setX:function(e){this._x=e,this._owner[this._setter](this)},getY:function(){return this._y},setY:function(e){this._y=e,this._owner[this._setter](this)},isSelected:function(){return!!(this._owner._selection&this._getSelection())},setSelected:function(e){this._owner._changeSelection(this._getSelection(),e)},_getSelection:function(){return this._setter==="setPosition"?4:0}}),Ne=O.extend({_class:"Size",_readIndex:!0,initialize:function(e,t){var i,r=typeof e,l=this.__read,u=0;return r=="number"?(this._set(e,(i=typeof t=="number")?t:e),l&&(u=i?2:1)):r=="undefined"||e===null?(this._set(0,0),l&&(u=e===null?1:0)):(e=r=="string"?e.split(/[\s,]+/)||[]:e,u=1,Array.isArray(e)?this._set(+e[0],+(1<e.length?e[1]:e[0])):"width"in e?this._set(e.width||0,e.height||0):"x"in e?this._set(e.x||0,e.y||0):(this._set(0,0),u=0)),l&&(this.__read=u),this},set:"#initialize",_set:function(e,t){return this.width=e,this.height=t,this},equals:function(e){return e===this||e&&(this.width===e.width&&this.height===e.height||Array.isArray(e)&&this.width===e[0]&&this.height===e[1])||!1},clone:function(){return new Ne(this.width,this.height)},toString:function(){var e=Ge.instance;return"{ width: "+e.number(this.width)+", height: "+e.number(this.height)+" }"},_serialize:function(e){return[(e=e.formatter).number(this.width),e.number(this.height)]},add:function(){var e=Ne.read(arguments);return new Ne(this.width+e.width,this.height+e.height)},subtract:function(){var e=Ne.read(arguments);return new Ne(this.width-e.width,this.height-e.height)},multiply:function(){var e=Ne.read(arguments);return new Ne(this.width*e.width,this.height*e.height)},divide:function(){var e=Ne.read(arguments);return new Ne(this.width/e.width,this.height/e.height)},modulo:function(){var e=Ne.read(arguments);return new Ne(this.width%e.width,this.height%e.height)},negate:function(){return new Ne(-this.width,-this.height)},isZero:function(){var e=je.isZero;return e(this.width)&&e(this.height)},isNaN:function(){return isNaN(this.width)||isNaN(this.height)},statics:{min:function(e,t){return new Ne(Math.min(e.width,t.width),Math.min(e.height,t.height))},max:function(e,t){return new Ne(Math.max(e.width,t.width),Math.max(e.height,t.height))},random:function(){return new Ne(Math.random(),Math.random())}}},O.each(["round","ceil","floor","abs"],function(e){var t=Math[e];this[e]=function(){return new Ne(t(this.width),t(this.height))}},{})),dt=Ne.extend({initialize:function(e,t,i,r){this._width=e,this._height=t,this._owner=i,this._setter=r},_set:function(e,t,i){return this._width=e,this._height=t,i||this._owner[this._setter](this),this},getWidth:function(){return this._width},setWidth:function(e){this._width=e,this._owner[this._setter](this)},getHeight:function(){return this._height},setHeight:function(e){this._height=e,this._owner[this._setter](this)}}),ke=O.extend({_class:"Rectangle",_readIndex:!0,beans:!0,initialize:function(e,t,i,r){var l,u,f,m,g,x,S=arguments,E=typeof e;return E=="number"?(this._set(e,t,i,r),l=4):E=="undefined"||e===null?(this._set(0,0,0,0),l=e===null?1:0):S.length===1&&(Array.isArray(e)?(this._set.apply(this,e),l=1):e.x!==k||e.width!==k?(this._set(e.x||0,e.y||0,e.width||0,e.height||0),l=1):e.from===k&&e.to===k&&(this._set(0,0,0,0),O.readSupported(S,this)&&(l=1))),l===k&&(f=Q.readNamed(S,"from"),u=O.peek(S),E=f.x,f=f.y,u&&u.x!==k||O.hasNamed(S,"to")?(m=(x=Q.readNamed(S,"to")).x-E,g=x.y-f,m<0&&(E=x.x,m=-m),g<0&&(f=x.y,g=-g)):(m=(x=Ne.read(S)).width,g=x.height),this._set(E,f,m,g),l=S.__index),(S=S.__filtered)&&(this.__filtered=S),this.__read&&(this.__read=l),this},set:"#initialize",_set:function(e,t,i,r){return this.x=e,this.y=t,this.width=i,this.height=r,this},clone:function(){return new ke(this.x,this.y,this.width,this.height)},equals:function(e){var t=O.isPlainValue(e)?ke.read(arguments):e;return t===this||t&&this.x===t.x&&this.y===t.y&&this.width===t.width&&this.height===t.height||!1},toString:function(){var e=Ge.instance;return"{ x: "+e.number(this.x)+", y: "+e.number(this.y)+", width: "+e.number(this.width)+", height: "+e.number(this.height)+" }"},_serialize:function(e){return[(e=e.formatter).number(this.x),e.number(this.y),e.number(this.width),e.number(this.height)]},getPoint:function(e){return new(e?Q:vt)(this.x,this.y,this,"setPoint")},setPoint:function(){var e=Q.read(arguments);this.x=e.x,this.y=e.y},getSize:function(e){return new(e?Ne:dt)(this.width,this.height,this,"setSize")},_fw:1,_fh:1,setSize:function(){var e=Ne.read(arguments),t=this._sx,i=this._sy,r=e.width;e=e.height,t&&(this.x+=(this.width-r)*t),i&&(this.y+=(this.height-e)*i),this.width=r,this.height=e,this._fw=this._fh=1},getLeft:function(){return this.x},setLeft:function(e){var t;this._fw||(t=e-this.x,this.width-=this._sx===.5?2*t:t),this.x=e,this._sx=this._fw=0},getTop:function(){return this.y},setTop:function(e){var t;this._fh||(t=e-this.y,this.height-=this._sy===.5?2*t:t),this.y=e,this._sy=this._fh=0},getRight:function(){return this.x+this.width},setRight:function(e){var t;this._fw||(t=e-this.x,this.width=this._sx===.5?2*t:t),this.x=e-this.width,this._sx=1,this._fw=0},getBottom:function(){return this.y+this.height},setBottom:function(e){var t;this._fh||(t=e-this.y,this.height=this._sy===.5?2*t:t),this.y=e-this.height,this._sy=1,this._fh=0},getCenterX:function(){return this.x+this.width/2},setCenterX:function(e){this._fw||this._sx===.5?this.x=e-this.width/2:(this._sx&&(this.x+=2*(e-this.x)*this._sx),this.width=2*(e-this.x)),this._sx=.5,this._fw=0},getCenterY:function(){return this.y+this.height/2},setCenterY:function(e){this._fh||this._sy===.5?this.y=e-this.height/2:(this._sy&&(this.y+=2*(e-this.y)*this._sy),this.height=2*(e-this.y)),this._sy=.5,this._fh=0},getCenter:function(e){return new(e?Q:vt)(this.getCenterX(),this.getCenterY(),this,"setCenter")},setCenter:function(){var e=Q.read(arguments);return this.setCenterX(e.x),this.setCenterY(e.y),this},getArea:function(){return this.width*this.height},isEmpty:function(){return this.width===0||this.height===0},contains:function(e){return e&&e.width!==k||(Array.isArray(e)?e:arguments).length===4?this._containsRectangle(ke.read(arguments)):this._containsPoint(Q.read(arguments))},_containsPoint:function(e){var t=e.x;return e=e.y,t>=this.x&&e>=this.y&&t<=this.x+this.width&&e<=this.y+this.height},_containsRectangle:function(e){var t=e.x,i=e.y;return t>=this.x&&i>=this.y&&t+e.width<=this.x+this.width&&i+e.height<=this.y+this.height},intersects:function(){var e=ke.read(arguments),t=O.read(arguments)||0;return e.x+e.width>this.x-t&&e.y+e.height>this.y-t&&e.x<this.x+this.width+t&&e.y<this.y+this.height+t},intersect:function(){var e=ke.read(arguments),t=Math.max(this.x,e.x),i=Math.max(this.y,e.y),r=Math.min(this.x+this.width,e.x+e.width);return e=Math.min(this.y+this.height,e.y+e.height),new ke(t,i,r-t,e-i)},unite:function(){var e=ke.read(arguments),t=Math.min(this.x,e.x),i=Math.min(this.y,e.y),r=Math.max(this.x+this.width,e.x+e.width);return e=Math.max(this.y+this.height,e.y+e.height),new ke(t,i,r-t,e-i)},include:function(){var e=Q.read(arguments),t=Math.min(this.x,e.x),i=Math.min(this.y,e.y),r=Math.max(this.x+this.width,e.x);return e=Math.max(this.y+this.height,e.y),new ke(t,i,r-t,e-i)},expand:function(){var e=(t=Ne.read(arguments)).width,t=t.height;return new ke(this.x-e/2,this.y-t/2,this.width+e,this.height+t)},scale:function(e,t){return this.expand(this.width*e-this.width,this.height*(t===k?e:t)-this.height)}},O.each([["Top","Left"],["Top","Right"],["Bottom","Left"],["Bottom","Right"],["Left","Center"],["Top","Center"],["Right","Center"],["Bottom","Center"]],function(e,t){var i=e.join(""),r=/^[RL]/.test(i);4<=t&&(e[1]+=r?"Y":"X"),t=e[r?0:1],r=e[r?1:0];var l="get"+t,u="get"+r,f="set"+t,m="set"+r,g="set"+i;this["get"+i]=function(x){return new(x?Q:vt)(this[l](),this[u](),this,g)},this[g]=function(){var x=Q.read(arguments);this[f](x.x),this[m](x.y)}},{beans:!0})),Dt=ke.extend({initialize:function(e,t,i,r,l,u){this._set(e,t,i,r,!0),this._owner=l,this._setter=u},_set:function(e,t,i,r,l){return this._x=e,this._y=t,this._width=i,this._height=r,l||this._owner[this._setter](this),this}},new function(){var e=ke.prototype;return O.each(["x","y","width","height"],function(t){var i=O.capitalize(t),r="_"+t;this["get"+i]=function(){return this[r]},this["set"+i]=function(l){this[r]=l,this._dontNotify||this._owner[this._setter](this)}},O.each(["Point","Size","Center","Left","Top","Right","Bottom","CenterX","CenterY","TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],function(t){var i="set"+t;this[i]=function(){this._dontNotify=!0,e[i].apply(this,arguments),this._dontNotify=!1,this._owner[this._setter](this)}},{isSelected:function(){return!!(2&this._owner._selection)},setSelected:function(t){var i=this._owner;i._changeSelection&&i._changeSelection(2,t)}}))}),ut=O.extend({_class:"Matrix",initialize:function e(t,i){var r=arguments,l=r.length,u=!0;if(6<=l?this._set.apply(this,r):l===1||l===2?t instanceof e?this._set(t._a,t._b,t._c,t._d,t._tx,t._ty,i):Array.isArray(t)?this._set.apply(this,i?t.concat([i]):t):u=!1:l?u=!1:this.reset(),!u)throw new Error("Unsupported matrix parameters");return this},set:"#initialize",_set:function(e,t,i,r,l,u,f){return this._a=e,this._b=t,this._c=i,this._d=r,this._tx=l,this._ty=u,f||this._changed(),this},_serialize:function(e,t){return O.serialize(this.getValues(),e,!0,t)},_changed:function(){var e=this._owner;e&&(e._applyMatrix?e.transform(null,!0):e._changed(25))},clone:function(){return new ut(this._a,this._b,this._c,this._d,this._tx,this._ty)},equals:function(e){return e===this||e&&this._a===e._a&&this._b===e._b&&this._c===e._c&&this._d===e._d&&this._tx===e._tx&&this._ty===e._ty},toString:function(){var e=Ge.instance;return"[["+[e.number(this._a),e.number(this._c),e.number(this._tx)].join(", ")+"], ["+[e.number(this._b),e.number(this._d),e.number(this._ty)].join(", ")+"]]"},reset:function(e){return this._a=this._d=1,this._b=this._c=this._tx=this._ty=0,e||this._changed(),this},apply:function(e,t){var i=this._owner;return!!i&&(i.transform(null,O.pick(e,!0),t),this.isIdentity())},translate:function(){var e=(t=Q.read(arguments)).x,t=t.y;return this._tx+=e*this._a+t*this._c,this._ty+=e*this._b+t*this._d,this._changed(),this},scale:function(){var e=arguments,t=Q.read(e);return(e=Q.read(e,0,{readNull:!0}))&&this.translate(e),this._a*=t.x,this._b*=t.x,this._c*=t.y,this._d*=t.y,e&&this.translate(e.negate()),this._changed(),this},rotate:function(e){e*=Math.PI/180;var t=(g=Q.read(arguments,1)).x,i=g.y,r=Math.cos(e),l=Math.sin(e),u=t-t*r+i*l,f=i-t*l-i*r,m=this._a,g=this._b;return t=this._c,i=this._d,this._a=r*m+l*t,this._b=r*g+l*i,this._c=-l*m+r*t,this._d=-l*g+r*i,this._tx+=u*m+f*t,this._ty+=u*g+f*i,this._changed(),this},shear:function(){var e=arguments,t=Q.read(e),i=Q.read(e,0,{readNull:!0});i&&this.translate(i);var r=this._a;return e=this._b,this._a+=t.y*this._c,this._b+=t.y*this._d,this._c+=t.x*r,this._d+=t.x*e,i&&this.translate(i.negate()),this._changed(),this},skew:function(){var e=arguments,t=Q.read(e),i=Q.read(e,0,{readNull:!0});return e=Math.PI/180,e=new Q(Math.tan(t.x*e),Math.tan(t.y*e)),this.shear(e,i)},append:function(e,t){var i,r,l,u,f,m,g,x,S;return e&&(i=this._a,r=this._b,l=this._c,u=this._d,f=e._a,m=e._c,g=e._b,x=e._d,S=e._tx,e=e._ty,this._a=f*i+g*l,this._c=m*i+x*l,this._b=f*r+g*u,this._d=m*r+x*u,this._tx+=S*i+e*l,this._ty+=S*r+e*u,t||this._changed()),this},prepend:function(e,t){var i,r,l,u,f,m,g,x,S,E,D;return e&&(i=this._a,r=this._b,l=this._c,u=this._d,f=this._tx,m=this._ty,g=e._a,x=e._c,S=e._b,E=e._d,D=e._tx,e=e._ty,this._a=g*i+x*r,this._c=g*l+x*u,this._b=S*i+E*r,this._d=S*l+E*u,this._tx=g*f+x*m+D,this._ty=S*f+E*m+e,t||this._changed()),this},appended:function(e){return this.clone().append(e)},prepended:function(e){return this.clone().prepend(e)},invert:function(){var e=this._a,t=this._b,i=this._c,r=this._d,l=this._tx,u=this._ty,f=e*r-t*i,m=null;return f&&!isNaN(f)&&isFinite(l)&&isFinite(u)&&(this._a=r/f,this._b=-t/f,this._c=-i/f,this._d=e/f,this._tx=(i*u-r*l)/f,this._ty=(t*l-e*u)/f,m=this),m},inverted:function(){return this.clone().invert()},concatenate:"#append",preConcatenate:"#prepend",chain:"#appended",_shiftless:function(){return new ut(this._a,this._b,this._c,this._d,0,0)},_orNullIfIdentity:function(){return this.isIdentity()?null:this},isIdentity:function(){return this._a===1&&this._b===0&&this._c===0&&this._d===1&&this._tx===0&&this._ty===0},isInvertible:function(){var e=this._a*this._d-this._c*this._b;return e&&!isNaN(e)&&isFinite(this._tx)&&isFinite(this._ty)},isSingular:function(){return!this.isInvertible()},transform:function(e,t,i){return arguments.length<3?this._transformPoint(Q.read(arguments)):this._transformCoordinates(e,t,i)},_transformPoint:function(e,t,i){var r=e.x;return e=e.y,(t=t||new Q)._set(r*this._a+e*this._c+this._tx,r*this._b+e*this._d+this._ty,i)},_transformCoordinates:function(e,t,i){for(var r=0,l=2*i;r<l;r+=2){var u=e[r],f=e[r+1];t[r]=u*this._a+f*this._c+this._tx,t[r+1]=u*this._b+f*this._d+this._ty}return t},_transformCorners:function(e){var t=e.x,i=e.y,r=t+e.width;return e=[t,i,r,i,r,e=i+e.height,t,e],this._transformCoordinates(e,e,4)},_transformBounds:function(e,t,i){for(var r=this._transformCorners(e),l=r.slice(0,2),u=l.slice(),f=2;f<8;f++){var m=r[f],g=1&f;m<l[g]?l[g]=m:m>u[g]&&(u[g]=m)}return(t=t||new ke)._set(l[0],l[1],u[0]-l[0],u[1]-l[1],i)},inverseTransform:function(){return this._inverseTransform(Q.read(arguments))},_inverseTransform:function(e,t,i){var r=this._a,l=this._b,u=this._c,f=this._d,m=this._tx,g=this._ty,x=r*f-l*u,S=null;return x&&!isNaN(x)&&isFinite(m)&&isFinite(g)&&(g=e.x-this._tx,e=e.y-this._ty,S=(t=t||new Q)._set((g*f-e*u)/x,(e*r-g*l)/x,i)),S},decompose:function(){var e,t,i,r,l=this._a,u=this._b,f=this._c,m=this._d,g=l*m-u*f,x=Math.sqrt,S=Math.atan2,E=180/Math.PI;return r=l!==0||u!==0?(e=x(l*l+u*u),t=Math.acos(l/e)*(0<u?1:-1),i=[e,g/e],[S(l*f+u*m,e*e),0]):f!==0||m!==0?(r=x(f*f+m*m),t=Math.asin(f/r)*(0<m?1:-1),i=[g/r,r],[0,S(l*f+u*m,r*r)]):i=[t=0,0],{translation:this.getTranslation(),rotation:t*E,scaling:new Q(i),skewing:new Q(r[0]*E,r[1]*E)}},getValues:function(){return[this._a,this._b,this._c,this._d,this._tx,this._ty]},getTranslation:function(){return new Q(this._tx,this._ty)},getScaling:function(){return this.decompose().scaling},getRotation:function(){return this.decompose().rotation},applyToContext:function(e){this.isIdentity()||e.transform(this._a,this._b,this._c,this._d,this._tx,this._ty)}},O.each(["a","b","c","d","tx","ty"],function(e){var t=O.capitalize(e),i="_"+e;this["get"+t]=function(){return this[i]},this["set"+t]=function(r){this[i]=r,this._changed()}},{})),wt=O.extend({_class:"Line",initialize:function(e,t,i,r,l){(4<=arguments.length?(this._px=e,this._py=t,this._vx=i,this._vy=r,l):(this._px=e.x,this._py=e.y,this._vx=t.x,this._vy=t.y,i))||(this._vx-=this._px,this._vy-=this._py)},getPoint:function(){return new Q(this._px,this._py)},getVector:function(){return new Q(this._vx,this._vy)},getLength:function(){return this.getVector().getLength()},intersect:function(e,t){return wt.intersect(this._px,this._py,this._vx,this._vy,e._px,e._py,e._vx,e._vy,!0,t)},getSide:function(e,t){return wt.getSide(this._px,this._py,this._vx,this._vy,e.x,e.y,!0,t)},getDistance:function(e){return Math.abs(this.getSignedDistance(e))},getSignedDistance:function(e){return wt.getSignedDistance(this._px,this._py,this._vx,this._vy,e.x,e.y,!0)},isCollinear:function(e){return Q.isCollinear(this._vx,this._vy,e._vx,e._vy)},isOrthogonal:function(e){return Q.isOrthogonal(this._vx,this._vy,e._vx,e._vy)},statics:{intersect:function(e,t,i,r,l,u,f,m,g,x){if(g||(i-=e,r-=t,f-=l,m-=u),g=i*m-r*f,!je.isMachineZero(g)&&(m=(f*(u=t-u)-m*(l=e-l))/g,g=(i*u-r*l)/g,x||-1e-12<m&&m<1+1e-12&&-1e-12<g&&g<1+1e-12))return new Q(e+(m=x?m:m<=0?0:1<=m?1:m)*i,t+m*r)},getSide:function(e,t,i,r,l,u,f,m){return f||(i-=e,r-=t),t=(e=l-e)*r-(u-t)*i,(t=!m&&je.isMachineZero(t)&&0<=(t=(e*i+e*i)/(i*i+r*r))&&t<=1?0:t)<0?-1:0<t?1:0},getSignedDistance:function(e,t,i,r,l,u,f){return f||(i-=e,r-=t),i===0?0<r?l-e:e-l:r===0?i<0?u-t:t-u:((l-e)*r-(u-t)*i)/(i<r?r*Math.sqrt(1+i*i/(r*r)):i*Math.sqrt(1+r*r/(i*i)))},getDistance:function(e,t,i,r,l,u,f){return Math.abs(wt.getSignedDistance(e,t,i,r,l,u,f))}}}),jt=we.extend({_class:"Project",_list:"projects",_reference:"project",_compactSerialize:!0,initialize:function(e){we.call(this,!0),this._children=[],this._namedChildren={},this._activeLayer=null,this._currentStyle=new se(null,null,this),this._view=R.create(this,e||et.getCanvas(1,1)),this._selectionItems={},this._selectionCount=0,this._updateVersion=0},_serialize:function(e,t){return O.serialize(this._children,e,!0,t)},_changed:function(e,t){1&e&&(l=this._view)&&(l._needsUpdate=!0,!l._requested&&l._autoUpdate&&l.requestUpdate());var i,r,l,u=this._changes;u&&t&&((l=(i=this._changesById)[r=t._id])?l.flags|=e:u.push(i[r]={item:t,flags:e}))},clear:function(){for(var e=this._children,t=e.length-1;0<=t;t--)e[t].remove()},isEmpty:function(){return!this._children.length},remove:function e(){return!!e.base.call(this)&&(this._view&&this._view.remove(),!0)},getView:function(){return this._view},getCurrentStyle:function(){return this._currentStyle},setCurrentStyle:function(e){this._currentStyle.set(e)},getIndex:function(){return this._index},getOptions:function(){return this._scope.settings},getLayers:function(){return this._children},getActiveLayer:function(){return this._activeLayer||new Jt({project:this,insert:!0})},getSymbolDefinitions:function(){var e=[],t={};return this.getItems({class:ti,match:function(i){var r=i._definition;return i=r._id,t[i]||(t[i]=!0,e.push(r)),!1}}),e},getSymbols:"getSymbolDefinitions",getSelectedItems:function(){var e,t=this._selectionItems,i=[];for(e in t){var r=t[e],l=r._selection;1&l&&r.isInserted()?i.push(r):l||this._updateSelection(r)}return i},_updateSelection:function(e){var t=e._id,i=this._selectionItems;e._selection?i[t]!==e&&(this._selectionCount++,i[t]=e):i[t]===e&&(this._selectionCount--,delete i[t])},selectAll:function(){for(var e=this._children,t=0,i=e.length;t<i;t++)e[t].setFullySelected(!0)},deselectAll:function(){var e,t=this._selectionItems;for(e in t)t[e].setFullySelected(!1)},addLayer:function(e){return this.insertLayer(k,e)},insertLayer:function(e,t){return t instanceof Jt?(t._remove(!1,!0),O.splice(this._children,[t],e,0),t._setProject(this,!0),(e=t._name)&&t.setName(e),this._changes&&t._changed(5),this._activeLayer||(this._activeLayer=t)):t=null,t},_insertItem:function(e,t,i){return t=this.insertLayer(e,t)||(this._activeLayer||this._insertItem(k,new Jt(at.NO_INSERT),!0)).insertChild(e,t),i&&t.activate&&t.activate(),t},getItems:function(e){return at._getItems(this,e)},getItem:function(e){return at._getItems(this,e,null,null,!0)[0]||null},importJSON:function(e){this.activate();var t=this._activeLayer;return O.importJSON(e,t&&t.isEmpty()&&t)},removeOn:function(e){var t=this._removeSets;if(t){e==="mouseup"&&(t.mousedrag=null);var i=t[e];if(i){for(var r in i){var l,u=i[r];for(l in t){var f=t[l];f&&f!=i&&delete f[u._id]}u.remove()}t[e]=null}}},draw:function(e,t,i){this._updateVersion++,e.save(),t.applyToContext(e);for(var r=this._children,l=new O({offset:new Q(0,0),pixelRatio:i,viewMatrix:t.isIdentity()?null:t,matrices:[new ut],updateMatrix:!0}),u=0,f=r.length;u<f;u++)r[u].draw(e,l);if(e.restore(),0<this._selectionCount){e.save(),e.strokeWidth=1;var m,g=this._selectionItems,x=this._scope.settings.handleSize,S=this._updateVersion;for(m in g)g[m]._drawSelection(e,t,x,g,S);e.restore()}}}),at=O.extend(ee,{statics:{extend:function e(t){return t._serializeFields&&(t._serializeFields=O.set({},this.prototype._serializeFields,t._serializeFields)),e.base.apply(this,arguments)},INSERT:{insert:!0},NO_INSERT:{insert:!1}},_class:"Item",_name:null,_applyMatrix:!0,_canApplyMatrix:!0,_canScaleStroke:!1,_pivot:null,_visible:!0,_blendMode:"normal",_opacity:1,_locked:!1,_guide:!1,_clipMask:!1,_selection:0,_selectBounds:!0,_selectChildren:!1,_serializeFields:{name:null,applyMatrix:null,matrix:new ut,pivot:null,visible:!0,blendMode:"normal",opacity:1,locked:!1,guide:!1,clipMask:!1,selected:!1,data:{}},_prioritize:["applyMatrix"]},new function(){var e=["onMouseDown","onMouseUp","onMouseDrag","onClick","onDoubleClick","onMouseMove","onMouseEnter","onMouseLeave"];return O.each(e,function(t){this._events[t]={install:function(i){this.getView()._countItemEvent(i,1)},uninstall:function(i){this.getView()._countItemEvent(i,-1)}}},{_events:{onFrame:{install:function(){this.getView()._animateItem(this,!0)},uninstall:function(){this.getView()._animateItem(this,!1)}},onLoad:{},onError:{}},statics:{_itemHandlers:e}})},{initialize:function(){},_initialize:function(e,t){var i=e&&O.isPlainObject(e),r=i&&e.internal===!0,l=this._matrix=new ut,u=i&&e.project||zt.project,f=zt.settings;return this._id=r?null:xt.get(),this._parent=this._index=null,this._applyMatrix=this._canApplyMatrix&&f.applyMatrix,t&&l.translate(t),(l._owner=this)._style=new se(u._currentStyle,this,u),r||i&&e.insert==0||!f.insertItems&&(!i||e.insert!=1)?this._setProject(u):(i&&e.parent||u)._insertItem(k,this,!0),i&&e!==at.NO_INSERT&&e!==at.INSERT&&this.set(e,{internal:!0,insert:!0,project:!0,parent:!0}),i},_serialize:function(e,t){var i={},r=this;function l(u){for(var f in u){var m=r[f];O.equals(m,f==="leading"?1.2*u.fontSize:u[f])||(i[f]=O.serialize(m,e,f!=="data",t))}}return l(this._serializeFields),this instanceof Ot||l(this._style._defaults),[this._class,i]},_changed:function(e){var t=this._symbol,i=this._parent||t,r=this._project;8&e&&(this._bounds=this._position=this._decomposed=k),16&e&&(this._globalMatrix=k),i&&72&e&&at._clearBoundsCache(i),2&e&&at._clearBoundsCache(this),r&&r._changed(e,this),t&&t._changed(e)},getId:function(){return this._id},getName:function(){return this._name},setName:function(e){if(this._name&&this._removeNamed(),e===+e+"")throw new Error("Names consisting only of numbers are not supported.");var t,i=this._getOwner();e&&i&&(t=i._children,((i=i._namedChildren)[e]=i[e]||[]).push(this),e in t||(t[e]=this)),this._name=e||k,this._changed(256)},getStyle:function(){return this._style},setStyle:function(e){this.getStyle().set(e)}},O.each(["locked","visible","blendMode","opacity","guide"],function(e){var t=O.capitalize(e),i="_"+e,r={locked:256,visible:265};this["get"+t]=function(){return this[i]},this["set"+t]=function(l){l!=this[i]&&(this[i]=l,this._changed(r[e]||257))}},{}),{beans:!0,getSelection:function(){return this._selection},setSelection:function(e){e!==this._selection&&(this._selection=e,(e=this._project)&&(e._updateSelection(this),this._changed(257)))},_changeSelection:function(e,t){var i=this._selection;this.setSelection(t?i|e:i&~e)},isSelected:function(){if(this._selectChildren){for(var e=this._children,t=0,i=e.length;t<i;t++)if(e[t].isSelected())return!0}return!!(1&this._selection)},setSelected:function(e){if(this._selectChildren)for(var t=this._children,i=0,r=t.length;i<r;i++)t[i].setSelected(e);this._changeSelection(1,e)},isFullySelected:function(){var e=this._children,t=!!(1&this._selection);if(e&&t){for(var i=0,r=e.length;i<r;i++)if(!e[i].isFullySelected())return!1;return!0}return t},setFullySelected:function(e){var t=this._children;if(t)for(var i=0,r=t.length;i<r;i++)t[i].setFullySelected(e);this._changeSelection(1,e)},isClipMask:function(){return this._clipMask},setClipMask:function(e){this._clipMask!=(e=!!e)&&((this._clipMask=e)&&(this.setFillColor(null),this.setStrokeColor(null)),this._changed(257),this._parent&&this._parent._changed(2048))},getData:function(){return this._data||(this._data={}),this._data},setData:function(e){this._data=e},getPosition:function(e){return new(e?Q:vt)((e=this._position||(this._position=this._getPositionFromBounds())).x,e.y,this,"setPosition")},setPosition:function(){this.translate(Q.read(arguments).subtract(this.getPosition(!0)))},_getPositionFromBounds:function(e){return this._pivot?this._matrix._transformPoint(this._pivot):(e||this.getBounds()).getCenter(!0)},getPivot:function(){var e=this._pivot;return e?new vt(e.x,e.y,this,"setPivot"):null},setPivot:function(){this._pivot=Q.read(arguments,0,{clone:!0,readNull:!0}),this._position=k}},O.each({getStrokeBounds:{stroke:!0},getHandleBounds:{handle:!0},getInternalBounds:{internal:!0}},function(e,t){this[t]=function(i){return this.getBounds(i,e)}},{beans:!0,getBounds:function(e,t){var i=t||e instanceof ut,r=O.set({},i?t:e,this._boundsOptions);return r.stroke&&!this.getStrokeScaling()||(r.cacheItem=this),r=this._getCachedBounds(i&&e,r).rect,arguments.length?r:new Dt(r.x,r.y,r.width,r.height,this,"setBounds")},setBounds:function(){var e=ke.read(arguments),t=this.getBounds(),i=this._matrix,r=new ut,l=e.getCenter();r.translate(l),e.width==t.width&&e.height==t.height||(i.isInvertible()||(i.set(i._backup||new ut().translate(i.getTranslation())),t=this.getBounds()),r.scale(t.width!==0?e.width/t.width:0,t.height!==0?e.height/t.height:0)),l=t.getCenter(),r.translate(-l.x,-l.y),this.transform(r)},_getBounds:function(e,t){var i=this._children;return i&&i.length?(at._updateBoundsCache(this,t.cacheItem),at._getBounds(i,e,t)):new ke},_getBoundsCacheKey:function(e,t){return[e.stroke?1:0,e.handle?1:0,t?1:0].join("")},_getCachedBounds:function(e,t,i){e=e&&e._orNullIfIdentity();var r,l=t.internal&&!i,u=t.cacheItem,f=l?null:this._matrix._orNullIfIdentity(),m=u&&(!e||e.equals(f))&&this._getBoundsCacheKey(t,l);return i=this._bounds,at._updateBoundsCache(this._parent||this._symbol,u),m&&i&&m in i?{rect:(r=i[m]).rect.clone(),nonscaling:r.nonscaling}:(f=(e=this._getBounds(e||f,t)).rect||e,t=this._style,t=e.nonscaling||t.hasStroke()&&!t.getStrokeScaling(),m&&(i||(this._bounds=i={}),r=i[m]={rect:f.clone(),nonscaling:t,internal:l}),{rect:f,nonscaling:t})},_getStrokeMatrix:function(e,t){return(e=(t=this.getStrokeScaling()?null:t&&t.internal?this:this._parent||this._symbol&&this._symbol._item)?t.getViewMatrix().invert():e)&&e._shiftless()},statics:{_updateBoundsCache:function(e,t){var i;e&&t&&(i=t._id,(e=e._boundsCache=e._boundsCache||{ids:{},list:[]}).ids[i]||(e.list.push(t),e.ids[i]=t))},_clearBoundsCache:function(e){var t=e._boundsCache;if(t){e._bounds=e._position=e._boundsCache=k;for(var i=0,r=t.list,l=r.length;i<l;i++){var u=r[i];u!==e&&(u._bounds=u._position=k,u._boundsCache&&at._clearBoundsCache(u))}}},_getBounds:function(e,t,i){var r=x=1/0,l=S=-x,u=!1;i=i||{};for(var f=0,m=e.length;f<m;f++){var g,x,S,E=e[f];E._visible&&!E.isEmpty(!0)&&(E=(g=E._getCachedBounds(t&&t.appended(E._matrix),i,!0)).rect,x=Math.min(E.x,x),r=Math.min(E.y,r),S=Math.max(E.x+E.width,S),l=Math.max(E.y+E.height,l),g.nonscaling&&(u=!0))}return{rect:isFinite(x)?new ke(x,r,S-x,l-r):new ke,nonscaling:u}}}}),{beans:!0,_decompose:function(){return this._applyMatrix?null:this._decomposed||(this._decomposed=this._matrix.decompose())},getRotation:function(){var e=this._decompose();return e?e.rotation:0},setRotation:function(e){var t,i=this.getRotation();i!=null&&e!=null&&(t=this._decomposed,this.rotate(e-i),t&&(t.rotation=e,this._decomposed=t))},getScaling:function(){var e=(e=this._decompose())&&e.scaling;return new vt(e?e.x:1,e?e.y:1,this,"setScaling")},setScaling:function(){var e,t,i,r,l=this.getScaling(),u=Q.read(arguments,0,{clone:!0,readNull:!0});l&&u&&!l.equals(u)&&(e=this.getRotation(),t=this._decomposed,i=new ut,(r=je.isZero)(l.x)||r(l.y)?(i.translate(t.translation),e&&i.rotate(e),i.scale(u.x,u.y),this._matrix.set(i)):(r=this.getPosition(!0),i.translate(r),e&&i.rotate(e),i.scale(u.x/l.x,u.y/l.y),e&&i.rotate(-e),i.translate(r.negate()),this.transform(i)),t&&(t.scaling=u,this._decomposed=t))},getMatrix:function(){return this._matrix},setMatrix:function(){var e=this._matrix;e.set.apply(e,arguments)},getGlobalMatrix:function(e){if(r=this._globalMatrix)for(var t=this._parent,i=[];t;){if(!t._globalMatrix){for(var r=null,l=0,u=i.length;l<u;l++)i[l]._globalMatrix=null;break}i.push(t),t=t._parent}return r||(r=this._globalMatrix=this._matrix.clone(),(t=this._parent)&&r.prepend(t.getGlobalMatrix(!0))),e?r:r.clone()},getViewMatrix:function(){return this.getGlobalMatrix().prepend(this.getView()._matrix)},getApplyMatrix:function(){return this._applyMatrix},setApplyMatrix:function(e){(this._applyMatrix=this._canApplyMatrix&&!!e)&&this.transform(null,!0)},getTransformContent:"#getApplyMatrix",setTransformContent:"#setApplyMatrix"},{getProject:function(){return this._project},_setProject:function(e,t){if(this._project!==e){this._project&&this._installEvents(!1),this._project=e;for(var i=this._children,r=0,l=i&&i.length;r<l;r++)i[r]._setProject(e);t=!0}t&&this._installEvents(!0)},getView:function(){return this._project._view},_installEvents:function e(t){e.base.call(this,t);for(var i=this._children,r=0,l=i&&i.length;r<l;r++)i[r]._installEvents(t)},getLayer:function(){for(var e=this;e=e._parent;)if(e instanceof Jt)return e;return null},getParent:function(){return this._parent},setParent:function(e){return e.addChild(this)},_getOwner:"#getParent",getChildren:function(){return this._children},setChildren:function(e){this.removeChildren(),this.addChildren(e)},getFirstChild:function(){return this._children&&this._children[0]||null},getLastChild:function(){return this._children&&this._children[this._children.length-1]||null},getNextSibling:function(){var e=this._getOwner();return e&&e._children[this._index+1]||null},getPreviousSibling:function(){var e=this._getOwner();return e&&e._children[this._index-1]||null},getIndex:function(){return this._index},equals:function(e){return e===this||e&&this._class===e._class&&this._style.equals(e._style)&&this._matrix.equals(e._matrix)&&this._locked===e._locked&&this._visible===e._visible&&this._blendMode===e._blendMode&&this._opacity===e._opacity&&this._clipMask===e._clipMask&&this._guide===e._guide&&this._equals(e)||!1},_equals:function(e){return O.equals(this._children,e._children)},clone:function(e){var t=new this.constructor(at.NO_INSERT),i=this._children,r=O.pick(e?e.insert:k,e===k||e===!0);e=O.pick(e?e.deep:k,!0),i&&t.copyAttributes(this),i&&!e||t.copyContent(this),i||t.copyAttributes(this),r&&t.insertAbove(this);var l=this._name;if(r=this._parent,l&&r){i=r._children;for(var u=l,f=1;i[l];)l=u+" "+f++;l!==u&&t.setName(l)}return t},copyContent:function(e){for(var t=e._children,i=0,r=t&&t.length;i<r;i++)this.addChild(t[i].clone(!1),!0)},copyAttributes:function(e,t){this.setStyle(e._style);for(var i=["_locked","_visible","_blendMode","_opacity","_clipMask","_guide"],r=0,l=i.length;r<l;r++){var u=i[r];e.hasOwnProperty(u)&&(this[u]=e[u])}t||this._matrix.set(e._matrix,!0),this.setApplyMatrix(e._applyMatrix),this.setPivot(e._pivot),this.setSelection(e._selection);var f=e._data;t=e._name,this._data=f?O.clone(f):null,t&&this.setName(t)},rasterize:function(e,t){var i;O.isPlainObject(e)?(f=e.resolution,i=e.insert,r=e.raster):(f=e,i=t);var r=r||new ei(at.NO_INSERT),l=this.getStrokeBounds(),u=(f||this.getView().getResolution())/72,f=(e=l.getTopLeft().floor(),t=l.getBottomRight().ceil(),new Ne(t.subtract(e)));return l=f.multiply(u),r.setSize(l,!0),l.isZero()||(t=r.getContext(!0),l=new ut().scale(u).translate(e.negate()),t.save(),l.applyToContext(t),this.draw(t,new O({matrices:[l]})),t.restore()),r._matrix.set(new ut().translate(e.add(f.divide(2))).scale(1/u)),i!==k&&!i||r.insertAbove(this),r},contains:function(){var e=this._matrix;return e.isInvertible()&&!!this._contains(e._inverseTransform(Q.read(arguments)))},_contains:function(e){var t=this._children;if(t){for(var i=t.length-1;0<=i;i--)if(t[i].contains(e))return!0;return!1}return e.isInside(this.getInternalBounds())},isInside:function(){return ke.read(arguments).contains(this.getBounds())},_asPathItem:function(){return new It.Rectangle({rectangle:this.getInternalBounds(),matrix:this._matrix,insert:!1})},intersects:function(e,t){return e instanceof at&&0<this._asPathItem().getIntersections(e._asPathItem(),null,t,!0).length}},new function(){function e(){var r=arguments;return this._hitTest(Q.read(r),Yt.getOptions(r))}function t(){var r=arguments,l=Q.read(r),u=Yt.getOptions(r);return r=[],this._hitTest(l,new O({all:r},u)),r}function i(r,l,u,f){var m=this._children;if(m)for(var g=m.length-1;0<=g;g--){var x;if((x=(x=m[g])!==f&&x._hitTest(r,l,u))&&!l.all)return x}return null}return jt.inject({hitTest:e,hitTestAll:t,_hitTest:i}),{hitTest:e,hitTestAll:t,_hitTestChildren:i}},{_hitTest:function(e,t,i){if(this._locked||!this._visible||this._guide&&!t.guides||this.isEmpty())return null;var r=this._matrix,l=i?i.appended(r):this.getGlobalMatrix().prepend(this.getView()._matrix),u=Math.max(t.tolerance,1e-12),f=t._tolerancePadding=new Ne(It._getStrokePadding(u,r._shiftless().invert()));if(!(e=r._inverseTransform(e))||!this._children&&!this.getBounds({internal:!0,stroke:!0,handle:!0}).expand(f.multiply(2))._containsPoint(e))return null;var m,g,x=!(t.guides&&!this._guide||t.selected&&!this.isSelected()||t.type&&t.type!==O.hyphenate(this._class)||t.class&&!(this instanceof t.class)),S=t.match,E=this;function D(j){return(j=j&&S&&!S(j)?null:j)&&t.all&&t.all.push(j),j}function F(j,q){var $=q?m["get"+q]():E.getPosition();if(e.subtract($).divide(f).length<=1)return new Yt(j,E,{name:q?O.hyphenate(q):j,point:$})}var H=t.position;if(i=t.center,u=t.bounds,x&&this._parent&&(H||i||u)){if((i||u)&&(m=this.getInternalBounds()),!(g=H&&F("position")||i&&F("center","Center"))&&u)for(var U=["TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],J=0;J<8&&!g;J++)g=F("bounds",U[J]);g=D(g)}return(g=g||this._hitTestChildren(e,t,l)||x&&D(this._hitTestSelf(e,t,l,this.getStrokeScaling()?null:l._shiftless().invert()))||null)&&g.point&&(g.point=r.transform(g.point)),g},_hitTestSelf:function(e,t){if(t.fill&&this.hasFill()&&this._contains(e))return new Yt("fill",this)},matches:function(e,t){var i=typeof e;if(i=="object"){for(var r in e)if(e.hasOwnProperty(r)&&!this.matches(r,e[r]))return!1;return!0}if(i=="function")return e(this);if(e==="match")return t(this);if(i=/^(empty|editable)$/.test(e)?this["is"+O.capitalize(e)]():e==="type"?O.hyphenate(this._class):this[e],e==="class"){if(typeof t=="function")return this instanceof t;i=this._class}if(typeof t=="function")return!!t(i);if(t){if(t.test)return t.test(i);if(O.isPlainObject(t))return function l(u,f){for(var m in u)if(u.hasOwnProperty(m)){var g=u[m];if(m=f[m],O.isPlainObject(g)&&O.isPlainObject(m)){if(!l(g,m))return!1}else if(!O.equals(g,m))return!1}return!0}(t,i)}return O.equals(i,t)},getItems:function(e){return at._getItems(this,e,this._matrix)},getItem:function(e){return at._getItems(this,e,this._matrix,null,!0)[0]||null},statics:{_getItems:function e(t,i,r,l,u){var f,m,g;l||(m=(f=typeof i=="object"&&i)&&f.overlapping,g=f&&f.inside,x=(j=m||g)&&ke.read([j]),l={items:[],recursive:f&&f.recursive!==!1,inside:!!g,overlapping:!!m,rect:x,path:m&&new It.Rectangle({rectangle:x,insert:!1})},f&&(i=O.filter({},i,{recursive:!0,inside:!0,overlapping:!0})));var x,S=t._children,E=l.items;r=(x=l.rect)&&(r||new ut);for(var D=0,F=S&&S.length;D<F;D++){var H=S[D],U=r&&r.appended(H._matrix),J=!0;if(x){var j=H.getBounds(U);if(!x.intersects(j))continue;x.contains(j)||l.overlapping&&(j.contains(x)||l.path.intersects(H,U))||(J=!1)}if(J&&H.matches(i)&&(E.push(H),u)||(l.recursive!==!1&&e(H,i,U,l,u),u&&0<E.length))break}return E}}},{importJSON:function(e){return(e=O.importJSON(e,this))!==this?this.addChild(e):e},addChild:function(e){return this.insertChild(k,e)},insertChild:function(e,t){return(t=t?this.insertChildren(e,[t]):null)&&t[0]},addChildren:function(e){return this.insertChildren(this._children.length,e)},insertChildren:function(e,t){var i=this._children;if(i&&t&&0<t.length){for(var r={},l=(t=O.slice(t)).length-1;0<=l;l--){var u=(x=t[l])&&x._id;!x||r[u]?t.splice(l,1):(x._remove(!1,!0),r[u]=!0)}O.splice(i,t,e,0);for(var f=this._project,m=f._changes,g=(l=0,t.length);l<g;l++){var x,S=(x=t[l])._name;x._parent=this,x._setProject(f,!0),S&&x.setName(S),m&&x._changed(5)}this._changed(11)}else t=null;return t},_insertItem:"#insertChild",_insertAt:function(e,t){var i=e&&e._getOwner(),r=e!==this&&i?this:null;return r&&(r._remove(!1,!0),i._insertItem(e._index+t,r)),r},insertAbove:function(e){return this._insertAt(e,1)},insertBelow:function(e){return this._insertAt(e,0)},sendToBack:function(){var e=this._getOwner();return e?e._insertItem(0,this):null},bringToFront:function(){var e=this._getOwner();return e?e._insertItem(k,this):null},appendTop:"#addChild",appendBottom:function(e){return this.insertChild(0,e)},moveAbove:"#insertAbove",moveBelow:"#insertBelow",addTo:function(e){return e._insertItem(k,this)},copyTo:function(e){return this.clone(!1).addTo(e)},reduce:function(e){var t=this._children;return t&&t.length===1?(e=t[0].reduce(e),this._parent?(e.insertAbove(this),this.remove()):e.remove(),e):this},_removeNamed:function(){var e,t,i,r,l=this._getOwner();l&&(e=l._children,(l=(r=(t=l._namedChildren)[i=this._name])?r.indexOf(this):-1)!==-1&&(e[i]==this&&delete e[i],r.splice(l,1),r.length?e[i]=r[0]:delete t[i]))},_remove:function(e,t){var i=this._getOwner(),r=this._project,l=this._index;return this._style&&this._style._dispose(),!(!i||(this._name&&this._removeNamed(),l!=null&&(r._activeLayer===this&&(r._activeLayer=this.getNextSibling()||this.getPreviousSibling()),O.splice(i._children,null,l,1)),this._installEvents(!1),e&&r._changes&&this._changed(5),t&&i._changed(11,this),this._parent=null))},remove:function(){return this._remove(!0,!0)},replaceWith:function(e){return(e=e&&e.insertBelow(this))&&this.remove(),e},removeChildren:function(e,t){if(!this._children)return null;e=e||0,t=O.pick(t,this._children.length);for(var i=O.splice(this._children,null,e,t-e),r=i.length-1;0<=r;r--)i[r]._remove(!0,!1);return 0<i.length&&this._changed(11),i},clear:"#removeChildren",reverseChildren:function(){if(this._children){this._children.reverse();for(var e=0,t=this._children.length;e<t;e++)this._children[e]._index=e;this._changed(11)}},isEmpty:function(e){var t=this._children,i=t?t.length:0;if(e){for(var r=0;r<i;r++)if(!t[r].isEmpty(e))return!1;return!0}return!i},isEditable:function(){for(var e=this;e;){if(!e._visible||e._locked)return!1;e=e._parent}return!0},hasFill:function(){return this.getStyle().hasFill()},hasStroke:function(){return this.getStyle().hasStroke()},hasShadow:function(){return this.getStyle().hasShadow()},_getOrder:function(e){function t(f){for(var m=[];m.unshift(f),f=f._parent;);return m}for(var i=t(this),r=t(e),l=0,u=Math.min(i.length,r.length);l<u;l++)if(i[l]!=r[l])return i[l]._index<r[l]._index?1:-1;return 0},hasChildren:function(){return this._children&&0<this._children.length},isInserted:function(){return!!this._parent&&this._parent.isInserted()},isAbove:function(e){return this._getOrder(e)===-1},isBelow:function(e){return this._getOrder(e)===1},isParent:function(e){return this._parent===e},isChild:function(e){return e&&e._parent===this},isDescendant:function(e){for(var t=this;t=t._parent;)if(t===e)return!0;return!1},isAncestor:function(e){return!!e&&e.isDescendant(this)},isSibling:function(e){return this._parent===e._parent},isGroupedWith:function(e){for(var t=this._parent;t;){if(t._parent&&/^(Group|Layer|CompoundPath)$/.test(t._class)&&e.isDescendant(t))return!0;t=t._parent}return!1}},O.each(["rotate","scale","shear","skew"],function(e){var t=e==="rotate";this[e]=function(){var i=arguments,r=(t?O:Q).read(i);return i=Q.read(i,0,{readNull:!0}),this.transform(new ut()[e](r,i||this.getPosition(!0)))}},{translate:function(){var e=new ut;return this.transform(e.translate.apply(e,arguments))},transform:function(e,t,i){var r,l,u=this._matrix,f=e&&!e.isIdentity(),m=i&&this._canApplyMatrix||this._applyMatrix&&(f||!u.isIdentity()||t&&this._children);if(!f&&!m)return this;f&&(!e.isInvertible()&&u.isInvertible()&&(u._backup=u.getValues()),u.prepend(e,!0),r=(l=this._style).getFillColor(!0),l=l.getStrokeColor(!0),r&&r.transform(e),l&&l.transform(e)),(m=m&&this._transformContent(u,t,i))&&((t=this._pivot)&&u._transformPoint(t,t,!0),u.reset(!0),i&&this._canApplyMatrix&&(this._applyMatrix=!0));var g=this._bounds;if(u=this._position,(f||m)&&this._changed(25),(i=f&&g&&e.decompose())&&i.skewing.isZero()&&i.rotation%90==0){for(var x in g){var S=g[x];S.nonscaling?delete g[x]:!m&&S.internal||(S=S.rect,e._transformBounds(S,S))}(i=(this._bounds=g)[this._getBoundsCacheKey(this._boundsOptions||{})])&&(this._position=this._getPositionFromBounds(i.rect))}else f&&u&&this._pivot&&(this._position=e._transformPoint(u,u));return this},_transformContent:function(e,t,i){var r=this._children;if(r){for(var l=0,u=r.length;l<u;l++)r[l].transform(e,t,i);return!0}},globalToLocal:function(){return this.getGlobalMatrix(!0)._inverseTransform(Q.read(arguments))},localToGlobal:function(){return this.getGlobalMatrix(!0)._transformPoint(Q.read(arguments))},parentToLocal:function(){return this._matrix._inverseTransform(Q.read(arguments))},localToParent:function(){return this._matrix._transformPoint(Q.read(arguments))},fitBounds:function(e,t){e=ke.read(arguments);var i=this.getBounds(),r=i.height/i.width,l=e.height/e.width;l=(t?l<r:r<l)?e.width/i.width:e.height/i.height,(l=new ke(new Q,new Ne(i.width*l,i.height*l))).setCenter(e.getCenter()),this.setBounds(l)}}),{_setStyles:function(e,t,i){var r,l,u=this._style,f=this._matrix;u.hasFill()&&(e.fillStyle=u.getFillColor().toCanvasStyle(e,f)),u.hasStroke()&&(e.strokeStyle=u.getStrokeColor().toCanvasStyle(e,f),e.lineWidth=u.getStrokeWidth(),r=u.getStrokeJoin(),l=u.getStrokeCap(),f=u.getMiterLimit(),r&&(e.lineJoin=r),l&&(e.lineCap=l),f&&(e.miterLimit=f),zt.support.nativeDash&&(l=u.getDashArray(),f=u.getDashOffset(),l&&l.length&&("setLineDash"in e?(e.setLineDash(l),e.lineDashOffset=f):(e.mozDash=l,e.mozDashOffset=f)))),u.hasShadow()&&(t=t.pixelRatio||1,t=(i=i._shiftless().prepend(new ut().scale(t,t))).transform(new Q(u.getShadowBlur(),0)),i=i.transform(this.getShadowOffset()),e.shadowColor=u.getShadowColor().toCanvasStyle(e),e.shadowBlur=t.getLength(),e.shadowOffsetX=i.x,e.shadowOffsetY=i.y)},draw:function(e,t,i){if(this._updateVersion=this._project._updateVersion,this._visible&&this._opacity!==0){var r=t.matrices,l=t.viewMatrix,u=this._matrix;if((H=r[r.length-1].appended(u)).isInvertible()){l=l?l.appended(H):H,r.push(H),t.updateMatrix&&(this._globalMatrix=H);var f,m,g,x=this._blendMode,S=je.clamp(this._opacity,0,1),E=x==="normal",D=_t.nativeModes[x],F=E&&S===1||t.dontStart||t.clip||(D||E&&S<1)&&this._canComposite(),H=t.pixelRatio||1;if(!F){var U=this.getStrokeBounds(l);if(!U.width||!U.height)return void r.pop();g=t.offset,m=t.offset=U.getTopLeft().floor(),f=e,e=et.getContext(U.getSize().ceil().add(1).multiply(H)),H!==1&&e.scale(H,H)}e.save(),E=i?i.appended(u):this._canScaleStroke&&!this.getStrokeScaling(!0)&&l,U=!F&&t.clipItem,i=!E||U,F?(e.globalAlpha=S,D&&(e.globalCompositeOperation=x)):i&&e.translate(-m.x,-m.y),i&&(F?u:l).applyToContext(e),U&&t.clipItem.draw(e,t.extend({clip:!0})),E&&(e.setTransform(H,0,0,H,0,0),(U=t.offset)&&e.translate(-U.x,-U.y)),this._draw(e,t,l,E),e.restore(),r.pop(),t.clip&&!t.dontFinish&&e.clip(this.getFillRule()),F||(_t.process(x,e,f,S,m.subtract(g).multiply(H)),et.release(e),t.offset=g)}}},_isUpdated:function(e){var t=this._parent;if(t instanceof Xt)return t._isUpdated(e);var i=this._updateVersion===e;return!i&&t&&t._visible&&t._isUpdated(e)&&(this._updateVersion=e,i=!0),i},_drawSelection:function(e,t,i,r,l){var u=1&(m=this._selection),f=2&m||u&&this._selectBounds,m=4&m;if(((u=!!this._drawSelected&&u)||f||m)&&this._isUpdated(l)){var g=this.getSelectedColor(!0)||(g=this.getLayer())&&g.getSelectedColor(!0),x=(t=t.appended(this.getGlobalMatrix(!0)),i/2);if(e.strokeStyle=e.fillStyle=g?g.toCanvasStyle(e):"#009dec",u&&this._drawSelected(e,t,r),m){r=this.getPosition(!0);var S=(r=(m=this._parent)?m.localToGlobal(r):r).x,E=r.y;e.beginPath(),e.arc(S,E,x,0,2*Math.PI,!0),e.stroke();for(var D=[[0,-1],[1,0],[0,1],[-1,0]],F=x,H=i+1,U=0;U<4;U++){var J=(j=D[U])[0],j=j[1];e.moveTo(S+J*F,E+j*F),e.lineTo(S+J*H,E+j*H),e.stroke()}}if(f){var q=t._transformCorners(this.getInternalBounds());for(e.beginPath(),U=0;U<8;U++)e[U?"lineTo":"moveTo"](q[U],q[++U]);for(e.closePath(),e.stroke(),U=0;U<8;U++)e.fillRect(q[U]-x,q[++U]-x,i,i)}}},_canComposite:function(){return!1}},O.each(["down","drag","up","move"],function(e){this["removeOn"+O.capitalize(e)]=function(){var t={};return t[e]=!0,this.removeOn(t)}},{removeOn:function(e){for(var t in e){var i;e[t]&&(i="mouse"+t,(t=(t=this._project)._removeSets=t._removeSets||{})[i]=t[i]||{},t[i][this._id]=this)}return this}}),{tween:function(e,t,i){i||(i=t,t=e,e=null,i||(i=t,t=null));var r=i&&i.easing,l=i&&i.start,u=(i=i!=null&&(typeof i=="number"?i:i.duration),new Ft(this,e,t,i,r,l));return i&&this.on("frame",function f(m){u._handleFrame(1e3*m.time),u.running||this.off("frame",f)}),u},tweenTo:function(e,t){return this.tween(null,e,t)},tweenFrom:function(e,t){return this.tween(e,null,t)}}),Ot=at.extend({_class:"Group",_selectBounds:!1,_selectChildren:!0,_serializeFields:{children:[]},initialize:function(e){this._children=[],this._namedChildren={},this._initialize(e)||this.addChildren(Array.isArray(e)?e:arguments)},_changed:function e(t){e.base.call(this,t),2050&t&&(this._clipItem=k)},_getClipItem:function(){if((e=this._clipItem)===k){for(var e=null,t=this._children,i=0,r=t.length;i<r;i++)if(t[i]._clipMask){e=t[i];break}this._clipItem=e}return e},isClipped:function(){return!!this._getClipItem()},setClipped:function(e){var t=this.getFirstChild();t&&t.setClipMask(e)},_getBounds:function e(t,i){var r=this._getClipItem();return r?r._getCachedBounds(r._matrix.prepended(t),O.set({},i,{stroke:!1})):e.base.call(this,t,i)},_hitTestChildren:function e(t,i,r){var l=this._getClipItem();return(!l||l.contains(t))&&e.base.call(this,t,i,r,l)},_draw:function(e,t){var i=t.clip,r=!i&&this._getClipItem();t=t.extend({clipItem:r,clip:!1}),i?(e.beginPath(),t.dontStart=t.dontFinish=!0):r&&r.draw(e,t.extend({clip:!0}));for(var l=this._children,u=0,f=l.length;u<f;u++){var m=l[u];m!==r&&m.draw(e,t)}}}),Jt=Ot.extend({_class:"Layer",initialize:function(){Ot.apply(this,arguments)},_getOwner:function(){return this._parent||this._index!=null&&this._project},isInserted:function e(){return this._parent?e.base.call(this):this._index!=null},activate:function(){this._project._activeLayer=this},_hitTestSelf:function(){}}),kt=at.extend({_class:"Shape",_applyMatrix:!1,_canApplyMatrix:!1,_canScaleStroke:!0,_serializeFields:{type:null,size:null,radius:null},initialize:function(e,t){this._initialize(e,t)},_equals:function(e){return this._type===e._type&&this._size.equals(e._size)&&O.equals(this._radius,e._radius)},copyContent:function(e){this.setType(e._type),this.setSize(e._size),this.setRadius(e._radius)},getType:function(){return this._type},setType:function(e){this._type=e},getShape:"#getType",setShape:"#setType",getSize:function(){var e=this._size;return new dt(e.width,e.height,this,"setSize")},setSize:function(){var e,t,i,r=Ne.read(arguments);this._size?this._size.equals(r)||(e=this._type,t=r.width,i=r.height,e==="rectangle"?this._radius.set(Ne.min(this._radius,r.divide(2).abs())):e==="circle"?(t=i=(t+i)/2,this._radius=t/2):e==="ellipse"&&this._radius._set(t/2,i/2),this._size._set(t,i),this._changed(9)):this._size=r.clone()},getRadius:function(){var e=this._radius;return this._type==="circle"?e:new dt(e.width,e.height,this,"setRadius")},setRadius:function(e){var t=this._type;if(t==="circle"){if(e===this._radius)return;var i=2*e;this._radius=e,this._size._set(i,i)}else if(e=Ne.read(arguments),this._radius){if(this._radius.equals(e))return;this._radius.set(e),t==="rectangle"?(i=Ne.max(this._size,e.multiply(2)),this._size.set(i)):t==="ellipse"&&this._size._set(2*e.width,2*e.height)}else this._radius=e.clone();this._changed(9)},isEmpty:function(){return!1},toPath:function(e){var t=new It[O.capitalize(this._type)]({center:new Q,size:this._size,radius:this._radius,insert:!1});return t.copyAttributes(this),zt.settings.applyMatrix&&t.setApplyMatrix(!0),e!==k&&!e||t.insertAbove(this),t},toShape:"#clone",_asPathItem:function(){return this.toPath(!1)},_draw:function(e,t,i,r){var l,u,f,m,g,x=this._style,S=x.hasFill(),E=x.hasStroke(),D=t.dontFinish||t.clip,F=!r;(S||E||D)&&(f=this._type,m=this._radius,g=f==="circle",t.dontStart||e.beginPath(),F&&g?e.arc(0,0,m,0,2*Math.PI,!0):(l=g?m:m.width,u=g?m:m.height,m=(g=this._size).width,g=g.height,F&&f==="rectangle"&&l===0&&u===0?e.rect(-m/2,-g/2,m,g):(g=[-(F=m/2),-(f=g/2)+u,-F,(g=u*(m=.44771525016920644))-f,(m*=l)-F,-f,-F+l,-f,F-l,-f,F-m,-f,F,g-f,F,-f+u,F,f-u,F,f-g,F-m,f,F-l,f,-F+l,f,m-F,f,-F,f-g,-F,f-u],r&&r.transform(g,g,32),e.moveTo(g[0],g[1]),e.bezierCurveTo(g[2],g[3],g[4],g[5],g[6],g[7]),F!==l&&e.lineTo(g[8],g[9]),e.bezierCurveTo(g[10],g[11],g[12],g[13],g[14],g[15]),f!==u&&e.lineTo(g[16],g[17]),e.bezierCurveTo(g[18],g[19],g[20],g[21],g[22],g[23]),F!==l&&e.lineTo(g[24],g[25]),e.bezierCurveTo(g[26],g[27],g[28],g[29],g[30],g[31]))),e.closePath()),D||!S&&!E||(this._setStyles(e,t,i),S&&(e.fill(x.getFillRule()),e.shadowColor="rgba(0,0,0,0)"),E&&e.stroke())},_canComposite:function(){return!(this.hasFill()&&this.hasStroke())},_getBounds:function(e,t){var i=new ke(this._size).setCenter(0,0),r=this._style;return r=t.stroke&&r.hasStroke()&&r.getStrokeWidth(),e&&(i=e._transformBounds(i)),r?i.expand(It._getStrokePadding(r,this._getStrokeMatrix(e,t))):i}},new function(){function e(i,r,l){var u=i._radius;if(!u.isZero())for(var f=i._size.divide(2),m=1;m<=4;m++){var g=new Q(1<m&&m<4?-1:1,2<m?-1:1),x=g.multiply(f),S=x.subtract(g.multiply(u));if(new ke(l?x.add(g.multiply(l)):x,S).contains(r))return{point:S,quadrant:m}}}function t(i,r,l,u){return i=i.divide(r),(!u||i.isInQuadrant(u))&&i.subtract(i.normalize()).multiply(r).divide(l).length<=1}return{_contains:function i(r){if(this._type!=="rectangle")return r.divide(this.size).getLength()<=.5;var l=e(this,r);return l?r.subtract(l.point).divide(this._radius).getLength()<=1:i.base.call(this,r)},_hitTestSelf:function i(r,l,u,f){var m,g,x,S=!1,E=this._style,D=l.stroke&&E.hasStroke(),F=l.fill&&E.hasFill();return(D||F)&&(g=this._type,m=this._radius,x=D?E.getStrokeWidth()/2:0,F=l._tolerancePadding.add(It._getStrokePadding(x,!E.getStrokeScaling()&&f)),S=g==="rectangle"?(E=e(this,r,x=F.multiply(2)))?t(r.subtract(E.point),m,F,E.quadrant):(E=(g=new ke(this._size).setCenter(0,0)).expand(x),x=g.expand(x.negate()),E._containsPoint(r)&&!x._containsPoint(r)):t(r,m,F)),S?new Yt(D?"stroke":"fill",this):i.base.apply(this,arguments)}}},{statics:new function(){function e(t,i,r,l,u){var f=O.create(kt.prototype);return f._type=t,f._size=r,f._radius=l,f._initialize(O.getNamed(u),i),f}return{Circle:function(){var t=arguments,i=Q.readNamed(t,"center"),r=O.readNamed(t,"radius");return e("circle",i,new Ne(2*r),r,t)},Rectangle:function(){var t=arguments,i=ke.readNamed(t,"rectangle"),r=Ne.min(Ne.readNamed(t,"radius"),i.getSize(!0).divide(2));return e("rectangle",i.getCenter(!0),i.getSize(!0),r,t)},Ellipse:function(){var t=arguments,i=kt._readEllipse(t),r=i.radius;return e("ellipse",i.center,r.multiply(2),r,t)},_readEllipse:function(t){var i,r;return r=O.hasNamed(t,"radius")?(i=Q.readNamed(t,"center"),Ne.readNamed(t,"radius")):(i=(r=ke.readNamed(t,"rectangle")).getCenter(!0),r.getSize(!0).divide(2)),{center:i,radius:r}}}}}),ei=at.extend({_class:"Raster",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!1,handle:!1},_serializeFields:{crossOrigin:null,source:null},_prioritize:["crossOrigin"],_smoothing:"low",beans:!0,initialize:function(e,t){var i,r;this._initialize(e,t!==k&&Q.read(arguments))||((r=(r=typeof e)=="string"?W.getElementById(e):r=="object"?e:null)&&r!==at.NO_INSERT&&(r.getContext||r.naturalHeight!=null?i=r:r&&((r=Ne.read(arguments)).isZero()||(i=et.getCanvas(r)))),i?this.setImage(i):this.setSource(e)),this._size||(this._size=new Ne,this._loaded=!1)},_equals:function(e){return this.getSource()===e.getSource()},copyContent:function(e){var t=e._image,i=e._canvas;t?this._setImage(t):i&&((t=et.getCanvas(e._size)).getContext("2d").drawImage(i,0,0),this._setImage(t)),this._crossOrigin=e._crossOrigin},getSize:function(){var e=this._size;return new dt(e?e.width:0,e?e.height:0,this,"setSize")},setSize:function(e,t){var i,r=Ne.read(arguments);r.equals(this._size)?t&&this.clear():0<r.width&&0<r.height?(i=!t&&this.getElement(),this._setImage(et.getCanvas(r)),i&&this.getContext(!0).drawImage(i,0,0,r.width,r.height)):(this._canvas&&et.release(this._canvas),this._size=r.clone())},getWidth:function(){return this._size?this._size.width:0},setWidth:function(e){this.setSize(e,this.getHeight())},getHeight:function(){return this._size?this._size.height:0},setHeight:function(e){this.setSize(this.getWidth(),e)},getLoaded:function(){return this._loaded},isEmpty:function(){var e=this._size;return!e||e.width===0&&e.height===0},getResolution:function(){var e=this._matrix,t=new Q(0,0).transform(e),i=new Q(1,0).transform(e).subtract(t);return t=new Q(0,1).transform(e).subtract(t),new Ne(72/i.getLength(),72/t.getLength())},getPpi:"#getResolution",getImage:function(){return this._image},setImage:function(e){var t=this;function i(r){var l=t.getView(),u=r&&r.type||"load";l&&t.responds(u)&&(zt=l._scope,t.emit(u,new V(r)))}this._setImage(e),this._loaded?setTimeout(i,0):e&&ge.add(e,{load:function(r){t._setImage(e),i(r)},error:i})},_setImage:function(e){this._canvas&&et.release(this._canvas),e&&e.getContext?(this._image=null,this._canvas=e,this._loaded=!0):(this._image=e,this._canvas=null,this._loaded=!!(e&&e.src&&e.complete)),this._size=new Ne(e?e.naturalWidth||e.width:0,e?e.naturalHeight||e.height:0),this._context=null,this._changed(1033)},getCanvas:function(){if(!this._canvas){var e=et.getContext(this._size);try{this._image&&e.drawImage(this._image,0,0),this._canvas=e.canvas}catch{et.release(e)}}return this._canvas},setCanvas:"#setImage",getContext:function(e){return this._context||(this._context=this.getCanvas().getContext("2d")),e&&(this._image=null,this._changed(1025)),this._context},setContext:function(e){this._context=e},getSource:function(){var e=this._image;return e&&e.src||this.toDataURL()},setSource:function(e){var t=new I.Image,i=this._crossOrigin;i&&(t.crossOrigin=i),e&&(t.src=e),this.setImage(t)},getCrossOrigin:function(){var e=this._image;return e&&e.crossOrigin||this._crossOrigin||""},setCrossOrigin:function(e){this._crossOrigin=e;var t=this._image;t&&(t.crossOrigin=e)},getSmoothing:function(){return this._smoothing},setSmoothing:function(e){this._smoothing=typeof e=="string"?e:e?"low":"off",this._changed(257)},getElement:function(){return this._canvas||this._loaded&&this._image}},{beans:!1,getSubCanvas:function(){var e=ke.read(arguments),t=et.getContext(e.getSize());return t.drawImage(this.getCanvas(),e.x,e.y,e.width,e.height,0,0,e.width,e.height),t.canvas},getSubRaster:function(){var e=ke.read(arguments),t=new ei(at.NO_INSERT);return t._setImage(this.getSubCanvas(e)),t.translate(e.getCenter().subtract(this.getSize().divide(2))),t._matrix.prepend(this._matrix),t.insertAbove(this),t},toDataURL:function(){var e=(e=this._image)&&e.src;return/^data:/.test(e)?e:(e=this.getCanvas())?e.toDataURL.apply(e,arguments):null},drawImage:function(e){var t=Q.read(arguments,1);this.getContext(!0).drawImage(e,t.x,t.y)},getAverageColor:function(e){if(e?e instanceof Qt?l=(r=e).getBounds():typeof e=="object"&&("width"in e?l=new ke(e):"x"in e&&(l=new ke(e.x-.5,e.y-.5,1,1))):l=this.getBounds(),!l)return null;var t=Math.min(l.width,32),i=Math.min(l.height,32);(e=ei._sampleContext)?e.clearRect(0,0,33,33):e=ei._sampleContext=et.getContext(new Ne(32)),e.save(),(l=new ut().scale(t/l.width,i/l.height).translate(-l.x,-l.y)).applyToContext(e),r&&r.draw(e,new O({clip:!0,matrices:[l]})),this._matrix.applyToContext(e);var r=this.getElement(),l=this._size;r&&e.drawImage(r,-l.width/2,-l.height/2),e.restore();for(var u=e.getImageData(.5,.5,Math.ceil(t),Math.ceil(i)).data,f=[0,0,0],m=0,g=0,x=u.length;g<x;g+=4){var S=u[g+3];m+=S,S/=255,f[0]+=u[g]*S,f[1]+=u[g+1]*S,f[2]+=u[g+2]*S}for(g=0;g<3;g++)f[g]/=m;return m?St.read(f):null},getPixel:function(){var e=Q.read(arguments);return e=this.getContext().getImageData(e.x,e.y,1,1).data,new St("rgb",[e[0]/255,e[1]/255,e[2]/255],e[3]/255)},setPixel:function(){var e,t=arguments,i=Q.read(t),r=(e=St.read(t))._convert("rgb"),l=e._alpha,u=this.getContext(!0);(e=(t=u.createImageData(1,1)).data)[0]=255*r[0],e[1]=255*r[1],e[2]=255*r[2],e[3]=l!=null?255*l:255,u.putImageData(t,i.x,i.y)},clear:function(){var e=this._size;this.getContext(!0).clearRect(0,0,e.width+1,e.height+1)},createImageData:function(){var e=Ne.read(arguments);return this.getContext().createImageData(e.width,e.height)},getImageData:function(){var e=ke.read(arguments);return e.isEmpty()&&(e=new ke(this._size)),this.getContext().getImageData(e.x,e.y,e.width,e.height)},putImageData:function(e){var t=Q.read(arguments,1);this.getContext(!0).putImageData(e,t.x,t.y)},setImageData:function(e){this.setSize(e),this.getContext(!0).putImageData(e,0,0)},_getBounds:function(e,t){var i=new ke(this._size).setCenter(0,0);return e?e._transformBounds(i):i},_hitTestSelf:function(e){if(this._contains(e)){var t=this;return new Yt("pixel",t,{offset:e.add(t._size.divide(2)).round(),color:{get:function(){return t.getPixel(this.offset)}}})}},_draw:function(e,t,i){var r=this.getElement();r&&0<r.width&&0<r.height&&(e.globalAlpha=je.clamp(this._opacity,0,1),this._setStyles(e,t,i),t=this._smoothing,ye.setPrefixed(e,(i=t==="off")?"imageSmoothingEnabled":"imageSmoothingQuality",!i&&t),e.drawImage(r,-this._size.width/2,-this._size.height/2))},_canComposite:function(){return!0}}),ti=at.extend({_class:"SymbolItem",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!0},_serializeFields:{symbol:null},initialize:function(e,t){this._initialize(e,t!==k&&Q.read(arguments,1))||this.setDefinition(e instanceof mt?e:new mt(e))},_equals:function(e){return this._definition===e._definition},copyContent:function(e){this.setDefinition(e._definition)},getDefinition:function(){return this._definition},setDefinition:function(e){this._definition=e,this._changed(9)},getSymbol:"#getDefinition",setSymbol:"#setDefinition",isEmpty:function(){return this._definition._item.isEmpty()},_getBounds:function(e,t){var i=this._definition._item;return i._getCachedBounds(i._matrix.prepended(e),t)},_hitTestSelf:function(e,t,i){return t=t.extend({all:!1}),(i=this._definition._item._hitTest(e,t,i))&&(i.item=this),i},_draw:function(e,t){this._definition._item.draw(e,t)}}),mt=O.extend({_class:"SymbolDefinition",initialize:function(e,t){this._id=xt.get(),this.project=zt.project,e&&this.setItem(e,t)},_serialize:function(e,t){return t.add(this,function(){return O.serialize([this._class,this._item],e,!1,t)})},_changed:function(e){8&e&&at._clearBoundsCache(this),1&e&&this.project._changed(e)},getItem:function(){return this._item},setItem:function(e,t){e._symbol&&(e=e.clone()),this._item&&(this._item._symbol=null),(this._item=e).remove(),e.setSelected(!1),t||e.setPosition(new Q),(e._symbol=this)._changed(9)},getDefinition:"#getItem",setDefinition:"#setItem",place:function(e){return new ti(this,e)},clone:function(){return new mt(this._item.clone(!1))},equals:function(e){return e===this||e&&this._item.equals(e._item)||!1}}),Yt=O.extend({_class:"HitResult",initialize:function(e,t,i){this.type=e,this.item=t,i&&this.inject(i)},statics:{getOptions:function(e){return e=e&&O.read(e),new O({type:null,tolerance:zt.settings.hitTolerance,fill:!e,stroke:!e,segments:!e,handles:!1,ends:!1,position:!1,center:!1,bounds:!1,guides:!1,selected:!1},e)}}}),Xe=O.extend({_class:"Segment",beans:!0,_selection:0,initialize:function(e,t,i,r,l,u){var f,m,g,x,S=arguments.length;0<S&&(e==null||typeof e=="object"?x=S===1&&e&&"point"in e?(f=e.point,m=e.handleIn,g=e.handleOut,e.selection):(f=e,m=t,g=i,r):(f=[e,t],m=i!==k?[i,r]:null,g=l!==k?[l,u]:null)),new ni(f,this,"_point"),new ni(m,this,"_handleIn"),new ni(g,this,"_handleOut"),x&&this.setSelection(x)},_serialize:function(e,t){var i=this._point,r=this._selection;return i=r||this.hasHandles()?[i,this._handleIn,this._handleOut]:i,r&&i.push(r),O.serialize(i,e,!0,t)},_changed:function(e){var t,i,r,l=this._path;l&&(t=l._curves,i=this._index,t&&(e&&e!==this._point&&e!==this._handleIn||!(r=0<i?t[i-1]:l._closed?t[t.length-1]:null)||r._changed(),e&&e!==this._point&&e!==this._handleOut||!(r=t[i])||r._changed()),l._changed(41))},getPoint:function(){return this._point},setPoint:function(){this._point.set(Q.read(arguments))},getHandleIn:function(){return this._handleIn},setHandleIn:function(){this._handleIn.set(Q.read(arguments))},getHandleOut:function(){return this._handleOut},setHandleOut:function(){this._handleOut.set(Q.read(arguments))},hasHandles:function(){return!this._handleIn.isZero()||!this._handleOut.isZero()},isSmooth:function(){var e=this._handleIn,t=this._handleOut;return!e.isZero()&&!t.isZero()&&e.isCollinear(t)},clearHandles:function(){this._handleIn._set(0,0),this._handleOut._set(0,0)},getSelection:function(){return this._selection},setSelection:function(e){var t=this._selection,i=this._path;this._selection=e=e||0,i&&e!==t&&(i._updateSelection(this,t,e),i._changed(257))},_changeSelection:function(e,t){var i=this._selection;this.setSelection(t?i|e:i&~e)},isSelected:function(){return!!(7&this._selection)},setSelected:function(e){this._changeSelection(7,e)},getIndex:function(){return this._index!==k?this._index:null},getPath:function(){return this._path||null},getCurve:function(){var e=this._path,t=this._index;return e?(0<t&&!e._closed&&t===e._segments.length-1&&t--,e.getCurves()[t]||null):null},getLocation:function(){var e=this.getCurve();return e?new Zt(e,this===e._segment1?0:1):null},getNext:function(){var e=this._path&&this._path._segments;return e&&(e[this._index+1]||this._path._closed&&e[0])||null},smooth:function(e,t,i){var r=e||{},l=r.type,u=r.factor,f=this.getPrevious(),m=this.getNext(),g=(f||this)._point,x=this._point,S=(m||this)._point,E=g.getDistance(x);if(e=x.getDistance(S),l&&l!=="catmull-rom"){if(l!=="geometric")throw new Error("Smoothing method '"+l+"' not supported.");f&&m&&(r=g.subtract(S),l=(H=u===k?.4:u)*E/(E+e),t||this.setHandleIn(r.multiply(l)),i||this.setHandleOut(r.multiply(l-H)))}else{var D,F,H=u===k?.5:u;E=(u=Math.pow(E,H))*u,H=(e=Math.pow(e,H))*e,!t&&f&&(D=2*H+3*e*u+E,this.setHandleIn((F=3*e*(e+u))!=0?new Q((H*g._x+D*x._x-E*S._x)/F-x._x,(H*g._y+D*x._y-E*S._y)/F-x._y):new Q)),!i&&m&&(D=2*E+3*u*e+H,this.setHandleOut((F=3*u*(u+e))!=0?new Q((E*S._x+D*x._x-H*g._x)/F-x._x,(E*S._y+D*x._y-H*g._y)/F-x._y):new Q))}},getPrevious:function(){var e=this._path&&this._path._segments;return e&&(e[this._index-1]||this._path._closed&&e[e.length-1])||null},isFirst:function(){return!this._index},isLast:function(){var e=this._path;return e&&this._index===e._segments.length-1||!1},reverse:function(){var e=this._handleIn,t=this._handleOut,i=e.clone();e.set(t),t.set(i)},reversed:function(){return new Xe(this._point,this._handleOut,this._handleIn)},remove:function(){return!!this._path&&!!this._path.removeSegment(this._index)},clone:function(){return new Xe(this._point,this._handleIn,this._handleOut)},equals:function(e){return e===this||e&&this._class===e._class&&this._point.equals(e._point)&&this._handleIn.equals(e._handleIn)&&this._handleOut.equals(e._handleOut)||!1},toString:function(){var e=["point: "+this._point];return this._handleIn.isZero()||e.push("handleIn: "+this._handleIn),this._handleOut.isZero()||e.push("handleOut: "+this._handleOut),"{ "+e.join(", ")+" }"},transform:function(e){this._transformCoordinates(e,new Array(6),!0),this._changed()},interpolate:function(e,t,i){var r=1-i,l=i,u=e._point,f=t._point,m=e._handleIn;i=t._handleIn,t=t._handleOut,e=e._handleOut,this._point._set(r*u._x+l*f._x,r*u._y+l*f._y,!0),this._handleIn._set(r*m._x+l*i._x,r*m._y+l*i._y,!0),this._handleOut._set(r*e._x+l*t._x,r*e._y+l*t._y,!0),this._changed()},_transformCoordinates:function(e,t,i){var r=this._point,l=i&&this._handleIn.isZero()?null:this._handleIn,u=i&&this._handleOut.isZero()?null:this._handleOut,f=r._x,m=r._y,g=2;return t[0]=f,t[1]=m,l&&(t[g++]=l._x+f,t[g++]=l._y+m),u&&(t[g++]=u._x+f,t[g++]=u._y+m),e&&(e._transformCoordinates(t,t,g/2),f=t[0],m=t[1],i?(r._x=f,r._y=m,g=2,l&&(l._x=t[g++]-f,l._y=t[g++]-m),u&&(u._x=t[g++]-f,u._y=t[g++]-m)):(l||(t[g++]=f,t[g++]=m),u||(t[g++]=f,t[g++]=m))),t}}),ni=Q.extend({initialize:function(e,t,i){var r,l,u;e?(r=e[0])!==k?l=e[1]:((r=(u=e).x)===k&&(r=(u=Q.read(arguments)).x),l=u.y,u=u.selected):r=l=0,this._x=r,this._y=l,(this._owner=t)[i]=this,u&&this.setSelected(!0)},_set:function(e,t){return this._x=e,this._y=t,this._owner._changed(this),this},getX:function(){return this._x},setX:function(e){this._x=e,this._owner._changed(this)},getY:function(){return this._y},setY:function(e){this._y=e,this._owner._changed(this)},isZero:function(){var e=je.isZero;return e(this._x)&&e(this._y)},isSelected:function(){return!!(this._owner._selection&this._getSelection())},setSelected:function(e){this._owner._changeSelection(this._getSelection(),e)},_getSelection:function(){var e=this._owner;return this===e._point?1:this===e._handleIn?2:this===e._handleOut?4:0}}),Ve=O.extend({_class:"Curve",beans:!0,initialize:function(e,t,i,r,l,u,f,m){var g,x,S,E,D,F,H=arguments.length;H===3?(this._path=e,g=t,x=i):H?H===1?"segment1"in e?(g=new Xe(e.segment1),x=new Xe(e.segment2)):"point1"in e?(S=e.point1,D=e.handle1,F=e.handle2,E=e.point2):Array.isArray(e)&&(S=[e[0],e[1]],E=[e[6],e[7]],D=[e[2]-e[0],e[3]-e[1]],F=[e[4]-e[6],e[5]-e[7]]):H===2?(g=new Xe(e),x=new Xe(t)):H===4?(S=e,D=t,F=i,E=r):H===8&&(S=[e,t],E=[f,m],D=[i-e,r-t],F=[l-f,u-m]):(g=new Xe,x=new Xe),this._segment1=g||new Xe(S,null,D),this._segment2=x||new Xe(E,F,null)},_serialize:function(e,t){return O.serialize(this.hasHandles()?[this.getPoint1(),this.getHandle1(),this.getHandle2(),this.getPoint2()]:[this.getPoint1(),this.getPoint2()],e,!0,t)},_changed:function(){this._length=this._bounds=k},clone:function(){return new Ve(this._segment1,this._segment2)},toString:function(){var e=["point1: "+this._segment1._point];return this._segment1._handleOut.isZero()||e.push("handle1: "+this._segment1._handleOut),this._segment2._handleIn.isZero()||e.push("handle2: "+this._segment2._handleIn),e.push("point2: "+this._segment2._point),"{ "+e.join(", ")+" }"},classify:function(){return Ve.classify(this.getValues())},remove:function(){var e,t,i=!1;return this._path&&(t=(e=this._segment2)._handleOut,(i=e.remove())&&this._segment1._handleOut.set(t)),i},getPoint1:function(){return this._segment1._point},setPoint1:function(){this._segment1._point.set(Q.read(arguments))},getPoint2:function(){return this._segment2._point},setPoint2:function(){this._segment2._point.set(Q.read(arguments))},getHandle1:function(){return this._segment1._handleOut},setHandle1:function(){this._segment1._handleOut.set(Q.read(arguments))},getHandle2:function(){return this._segment2._handleIn},setHandle2:function(){this._segment2._handleIn.set(Q.read(arguments))},getSegment1:function(){return this._segment1},getSegment2:function(){return this._segment2},getPath:function(){return this._path},getIndex:function(){return this._segment1._index},getNext:function(){var e=this._path&&this._path._curves;return e&&(e[this._segment1._index+1]||this._path._closed&&e[0])||null},getPrevious:function(){var e=this._path&&this._path._curves;return e&&(e[this._segment1._index-1]||this._path._closed&&e[e.length-1])||null},isFirst:function(){return!this._segment1._index},isLast:function(){var e=this._path;return e&&this._segment1._index===e._curves.length-1||!1},isSelected:function(){return this.getPoint1().isSelected()&&this.getHandle1().isSelected()&&this.getHandle2().isSelected()&&this.getPoint2().isSelected()},setSelected:function(e){this.getPoint1().setSelected(e),this.getHandle1().setSelected(e),this.getHandle2().setSelected(e),this.getPoint2().setSelected(e)},getValues:function(e){return Ve.getValues(this._segment1,this._segment2,e)},getPoints:function(){for(var e=this.getValues(),t=[],i=0;i<8;i+=2)t.push(new Q(e[i],e[i+1]));return t}},{getLength:function(){return this._length==null&&(this._length=Ve.getLength(this.getValues(),0,1)),this._length},getArea:function(){return Ve.getArea(this.getValues())},getLine:function(){return new wt(this._segment1._point,this._segment2._point)},getPart:function(e,t){return new Ve(Ve.getPart(this.getValues(),e,t))},getPartLength:function(e,t){return Ve.getLength(this.getValues(),e,t)},divideAt:function(e){return this.divideAtTime(e&&e.curve===this?e.time:this.getTimeAt(e))},divideAtTime:function(e,t){var i,r,l,u,f,m,g=null;return 1e-8<=e&&e<=1-1e-8&&(i=(m=Ve.subdivide(this.getValues(),e))[0],r=m[1],l=t||this.hasHandles(),u=this._segment1,f=this._segment2,e=this._path,l&&(u._handleOut._set(i[2]-i[0],i[3]-i[1]),f._handleIn._set(r[4]-r[6],r[5]-r[7])),m=i[6],t=i[7],t=new Xe(new Q(m,t),l&&new Q(i[4]-m,i[5]-t),l&&new Q(r[2]-m,r[3]-t)),g=e?(e.insert(u._index+1,t),this.getNext()):(this._segment2=t,this._changed(),new Ve(t,f))),g},splitAt:function(e){var t=this._path;return t?t.splitAt(e):null},splitAtTime:function(e){return this.splitAt(this.getLocationAtTime(e))},divide:function(e,t){return this.divideAtTime(e===k?.5:t?e:this.getTimeAt(e))},split:function(e,t){return this.splitAtTime(e===k?.5:t?e:this.getTimeAt(e))},reversed:function(){return new Ve(this._segment2.reversed(),this._segment1.reversed())},clearHandles:function(){this._segment1._handleOut._set(0,0),this._segment2._handleIn._set(0,0)},statics:{getValues:function(e,t,i,r){var l=e._point,u=e._handleOut,f=t._handleIn,m=t._point;return e=l.x,t=l.y,l=m.x,m=m.y,m=r?[e,t,e,t,l,m,l,m]:[e,t,e+u._x,t+u._y,l+f._x,m+f._y,l,m],i&&i._transformCoordinates(m,m,4),m},subdivide:function(e,t){var i=e[0],r=e[1],l=e[2],u=e[3],f=e[4],m=e[5],g=e[6],x=e[7],S=1-(t=t===k?.5:t),E=S*i+t*l,D=S*r+t*u,F=S*l+t*f,H=S*u+t*m;return l=S*m+t*x,u=S*E+t*F,m=S*F+t*(e=S*f+t*g),F=S*H+t*l,[[i,r,E,D,u,f=S*D+t*H,H=S*u+t*m,t=S*f+t*F],[H,t,m,F,e,l,g,x]]},getMonoCurves:function(e,t){var i,r,l=[],u=e[0+(m=t?0:1)],f=e[2+m],m=(t=e[4+m],e[6+m]);return f<=u==t<=f&&t<=f==m<=t||Ve.isStraight(e)||!(r=je.solveQuadratic(3*(f-t)-u+m,2*(u+t)-4*f,f-u,i=[],1e-8,1-1e-8))?l.push(e):(i.sort(),f=i[0],u=Ve.subdivide(e,f),l.push(u[0]),1<r&&(f=(i[1]-f)/(1-f),u=Ve.subdivide(u[1],f),l.push(u[0])),l.push(u[1])),l},solveCubic:function(e,t,i,r,l,u){var f=e[t],m=e[t+2],g=e[t+4];return e=e[t+6],t=0,f<i&&e<i&&m<i&&g<i||i<f&&i<e&&i<m&&i<g?t:je.solveCubic(e-f-(e=3*(m-f))-(m=3*(g-m)-e),m,e,f-i,r,l,u)},getTimeOf:function(e,t){var i=new Q(e[0],e[1]),r=new Q(e[6],e[7]);if((t.isClose(i,1e-12)?0:t.isClose(r,1e-12)?1:null)===null)for(var l=[t.x,t.y],u=[],f=0;f<2;f++)for(var m=Ve.solveCubic(e,f,l[f],u,0,1),g=0;g<m;g++){var x=u[g];if(t.isClose(Ve.getPoint(e,x),1e-7))return x}return t.isClose(i,1e-7)?0:t.isClose(r,1e-7)?1:null},getNearestTime:function(e,t){if(Ve.isStraight(e)){var i=e[0],r=e[1],l=e[6]-i,u=e[7]-r,f=l*l+u*u;return f==0||(f=((t.x-i)*l+(t.y-r)*u)/f)<1e-12?0:.999999999999<f?1:Ve.getTimeOf(e,new Q(i+f*l,r+f*u))}var m=1/0,g=0;function x(D){if(0<=D&&D<=1){var F=t.getDistance(Ve.getPoint(e,D),!0);return F<m?(m=F,g=D,1):void 0}}for(var S=0;S<=100;S++)x(S/100);for(var E=.005;1e-8<E;)x(g-E)||x(g+E)||(E/=2);return g},getPart:function(e,t,i){var r,l=i<t;return l&&(r=t,t=i,i=r),0<t&&(e=Ve.subdivide(e,t)[1]),i<1&&(e=Ve.subdivide(e,(i-t)/(1-t))[0]),l?[e[6],e[7],e[4],e[5],e[2],e[3],e[0],e[1]]:e},isFlatEnough:function(e,t){var i=e[0],r=e[1],l=e[2],u=e[3],f=e[4],m=e[5],g=e[6];return l=3*l-2*i-g,u=3*u-2*r-(e=e[7]),i=3*f-2*g-i,r=3*m-2*e-r,Math.max(l*l,i*i)+Math.max(u*u,r*r)<=16*t*t},getArea:function(e){var t=e[0],i=e[1],r=e[2],l=e[3],u=e[4],f=e[5],m=e[6];return 3*(((e=e[7])-i)*(r+u)-(m-t)*(l+f)+l*(t-u)-r*(i-f)+e*(u+t/3)-m*(f+i/3))/20},getBounds:function(e){for(var t=e.slice(0,2),i=t.slice(),r=[0,0],l=0;l<2;l++)Ve._addBounds(e[l],e[l+2],e[l+4],e[l+6],l,0,t,i,r);return new ke(t[0],t[1],i[0]-t[0],i[1]-t[1])},_addBounds:function(e,t,i,r,l,u,f,m,g){function x(J,j){var q=J-j;j=J+j,q<f[l]&&(f[l]=q),j>m[l]&&(m[l]=j)}var S=f[l]+(u/=2),E=m[l]-u;if(e<S||t<S||i<S||r<S||E<e||E<t||E<i||E<r)if(t<e!=t<r&&i<e!=i<r)x(e,0),x(r,0);else{var D=je.solveQuadratic(3*(t-i)-e+r,2*(e+i)-4*t,t-e,g);x(r,0);for(var F=0;F<D;F++){var H=g[F],U=1-H;1e-8<=H&&H<=1-1e-8&&x(U*U*U*e+3*U*U*H*t+3*U*H*H*i+H*H*H*r,u)}}}}},O.each(["getBounds","getStrokeBounds","getHandleBounds"],function(e){this[e]=function(){return this._bounds||(this._bounds={}),(this._bounds[e]||(this._bounds[e]=It[e]([this._segment1,this._segment2],!1,this._path))).clone()}},{}),O.each({isStraight:function(e,t,i,r){if(t.isZero()&&i.isZero())return!0;var l=r.subtract(e);if(l.isZero())return!1;if(l.isCollinear(t)&&l.isCollinear(i)){var u=new wt(e,r);if(u.getDistance(e.add(t))<1e-7&&u.getDistance(r.add(i))<1e-7)return r=l.dot(l),t=l.dot(t)/r,r=l.dot(i)/r,0<=t&&t<=1&&r<=0&&-1<=r}return!1},isLinear:function(e,t,i,r){return e=r.subtract(e).divide(3),t.equals(e)&&i.negate().equals(e)}},function(e,t){this[t]=function(i){var r=this._segment1,l=this._segment2;return e(r._point,r._handleOut,l._handleIn,l._point,i)},this.statics[t]=function(i,r){var l=i[0],u=i[1],f=i[6],m=i[7];return e(new Q(l,u),new Q(i[2]-l,i[3]-u),new Q(i[4]-f,i[5]-m),new Q(f,m),r)}},{statics:{},hasHandles:function(){return!this._segment1._handleOut.isZero()||!this._segment2._handleIn.isZero()},hasLength:function(e){return(!this.getPoint1().equals(this.getPoint2())||this.hasHandles())&&this.getLength()>(e||0)},isCollinear:function(e){return e&&this.isStraight()&&e.isStraight()&&this.getLine().isCollinear(e.getLine())},isHorizontal:function(){return this.isStraight()&&Math.abs(this.getTangentAtTime(.5).y)<1e-8},isVertical:function(){return this.isStraight()&&Math.abs(this.getTangentAtTime(.5).x)<1e-8}}),{beans:!1,getLocationAt:function(e,t){return this.getLocationAtTime(t?e:this.getTimeAt(e))},getLocationAtTime:function(e){return e!=null&&0<=e&&e<=1?new Zt(this,e):null},getTimeAt:function(e,t){return Ve.getTimeAt(this.getValues(),e,t)},getParameterAt:"#getTimeAt",getTimesWithTangent:function(){var e=Q.read(arguments);return e.isZero()?[]:Ve.getTimesWithTangent(this.getValues(),e)},getOffsetAtTime:function(e){return this.getPartLength(0,e)},getLocationOf:function(){return this.getLocationAtTime(this.getTimeOf(Q.read(arguments)))},getOffsetOf:function(){var e=this.getLocationOf.apply(this,arguments);return e?e.getOffset():null},getTimeOf:function(){return Ve.getTimeOf(this.getValues(),Q.read(arguments))},getParameterOf:"#getTimeOf",getNearestLocation:function(){var e=Q.read(arguments),t=this.getValues(),i=Ve.getNearestTime(t,e);return t=Ve.getPoint(t,i),new Zt(this,i,t,null,e.getDistance(t))},getNearestPoint:function(){var e=this.getNearestLocation.apply(this,arguments);return e&&e.getPoint()}},new function(){var e=["getPoint","getTangent","getNormal","getWeightedTangent","getWeightedNormal","getCurvature"];return O.each(e,function(t){this[t+"At"]=function(i,r){var l=this.getValues();return Ve[t](l,r?i:Ve.getTimeAt(l,i))},this[t+"AtTime"]=function(i){return Ve[t](this.getValues(),i)}},{statics:{_evaluateMethods:e}})},new function(){function e(r){var l=r[0],u=r[1],f=r[2],m=r[3],g=r[4],x=r[5],S=r[6],E=(r=r[7],9*(f-g)+3*(S-l)),D=6*(l+g)-12*f,F=3*(f-l),H=9*(m-x)+3*(r-u),U=6*(u+x)-12*m,J=3*(m-u);return function(j){var q=(E*j+D)*j+F;return j=(H*j+U)*j+J,Math.sqrt(q*q+j*j)}}function t(r,l){return Math.max(2,Math.min(16,Math.ceil(32*Math.abs(l-r))))}function i(r,l,u,f){if(l==null||l<0||1<l)return null;var m=r[0],g=r[1],x=r[2],S=r[3],E=r[4],D=r[5],F=r[6],H=r[7];(ae=je.isZero)(x-m)&&ae(S-g)&&(x=m,S=g),ae(E-F)&&ae(D-H)&&(E=F,D=H);var U,J,j=3*(x-m),q=3*(E-x)-j,$=F-m-j-q,re=3*(S-g),ae=H-g-re-(r=3*(D-S)-re);return u===0?(U=l===0?m:l===1?F:(($*l+q)*l+j)*l+m,J=l===0?g:l===1?H:((ae*l+r)*l+re)*l+g):(J=l<1e-8?(U=j,re):1-1e-8<l?(U=3*(F-E),3*(H-D)):(U=(3*$*l+2*q)*l+j,(3*ae*l+2*r)*l+re),f&&(U===0&&J===0&&(l<1e-8||1-1e-8<l)&&(U=E-x,J=D-S),(S=Math.sqrt(U*U+J*J))&&(U/=S,J/=S)),u===3&&(E=6*$*l+2*q,D=6*ae*l+2*r,U=(r=Math.pow(U*U+J*J,1.5))!==0?(U*D-J*E)/r:0,J=0)),u===2?new Q(J,-U):new Q(U,J)}return{statics:{classify:function(r){var l=r[0],u=r[1],f=r[2],m=r[3],g=r[4],x=r[5],S=r[6],E=(r=f*(u-(E=r[7]))+m*(S-l)+l*E-u*S,S=(m=(f=3*(g*(m-u)+x*(l-f)+f*u-m*l))-r)-r+(l*(E-x)+u*(g-S)+S*x-E*g),(x=Math.sqrt(S*S+m*m+f*f))!==0?1/x:0);function D(F,H,U){var J=H!==k,j=J&&0<H&&H<1,q=J&&0<U&&U<1;return!J||(j||q)&&(F!=="loop"||j&&q)||(j=q=!(F="arch")),{type:F,roots:j||q?j&&q?H<U?[H,U]:[U,H]:[j?H:U]:null}}return x="serpentine",m*=E,f*=E,(g=je.isZero)(S*=E)?g(m)?D(g(f)?"line":"quadratic"):D(x,f/(3*m)):g(f=3*m*m-4*S*f)?D("cusp",m/(2*S)):D(0<f?x:"loop",(m+(g=0<f?Math.sqrt(f/3):Math.sqrt(-f)))/(S*=2),(m-g)/S)},getLength:function(r,l,u,f){if(l===k&&(l=0),u===k&&(u=1),Ve.isStraight(r)){var m=r;u<1&&(m=Ve.subdivide(m,u)[0],l/=u);var g=(m=0<l?Ve.subdivide(m,l)[1]:m)[6]-m[0];return m=m[7]-m[1],Math.sqrt(g*g+m*m)}return je.integrate(f||e(r),l,u,t(l,u))},getTimeAt:function(r,l,u){if(u===k&&(u=l<0?1:0),l===0)return u;var f=Math.abs,m=0<l,g=m?u:0,x=m?1:u,S=e(r),E=Ve.getLength(r,g,x,S);if(r=f(l)-E,f(r)<1e-12)return m?x:g;if(1e-12<r)return null;var D=0;return je.findRoot(function(F){return D+=je.integrate(S,u,F,t(u,F)),u=F,D-l},S,u+l/E,g,x,32,1e-12)},getPoint:function(r,l){return i(r,l,0,!1)},getTangent:function(r,l){return i(r,l,1,!0)},getWeightedTangent:function(r,l){return i(r,l,1,!1)},getNormal:function(r,l){return i(r,l,2,!0)},getWeightedNormal:function(r,l){return i(r,l,2,!1)},getCurvature:function(r,l){return i(r,l,3,!1).x},getPeaks:function(r){var l=r[0],u=r[1],f=r[2],m=r[3],g=r[4],x=r[5],S=3*f-l-3*g+r[6];return g=3*l-6*f+3*g,f=-3*l+3*f,r=3*m-u-3*x+r[7],x=3*u-6*m+3*x,u=-3*u+3*m,m=[],je.solveCubic(9*(S*S+r*r),9*(S*g+x*r),2*(g*g+x*x)+3*(f*S+u*r),f*g+x*u,m,1e-8,1-1e-8),m.sort()}}}},new function(){function e(g,x,S,E,D,F,H){var U=!H&&S.getPrevious()===D,J=!H&&S!==D&&S.getNext()===D;E!==null&&(U?1e-8:0)<=E&&E<=(J?1-1e-8:1)&&F!==null&&(J?1e-8:0)<=F&&F<=(U?1-1e-8:1)&&(E=new Zt(S,E,null,H),H=new Zt(D,F,null,H),(E._intersection=H)._intersection=E,x&&!x(E)||Zt.insert(g,E,!0))}function t(g,x,S,E,D,F,H,U,J,j,q,$,re){if(4096<=++J||40<=++U)return J;var ae,le,be,Ce,xe,Oe,_e=x[0],oe=x[1],ue=x[6],De=x[7],Se=wt.getSignedDistance,He=Se(_e,oe,ue,De,x[2],x[3]),Ze=Se(_e,oe,ue,De,x[4],x[5]),tt=(be=0<He*Ze?.75:4/9)*Math.min(0,He,Ze),lt=be*Math.max(0,He,Ze),M=Se(_e,oe,ue,De,g[0],g[1]),s=Se(_e,oe,ue,De,g[2],g[3]);return ue=function(h,p,b,A){var P=[0,h],L=[1/3,p],N=[2/3,b],Y=[1,A];return Y=(p-=(2*h+A)/3)*(h=b-(h+2*A)/3)<0?[[P,L,Y],[P,N,Y]]:[2<=(A=p/h)?[P,L,Y]:A<=.5?[P,N,Y]:[P,L,N,Y],[P,Y]],(p||h)<0?Y.reverse():Y}(M,s,be=Se(_e,oe,ue,De,g[4],g[5]),oe=Se(_e,oe,ue,De,g[6],g[7])),De=ue[0],ue=ue[1],He===0&&Ze===0&&M===0&&s===0&&be===0&&oe===0||(ae=i(De,ue,tt,lt))==null||(le=i(De.reverse(),ue.reverse(),tt,lt))==null||(lt=j+(q-j)*ae,q=j+(q-j)*le,Math.max(re-$,q-lt)<1e-9?(Ce=(lt+q)/2,Oe=($+re)/2,e(D,F,H?E:S,H?Oe:Ce,H?S:E,H?Ce:Oe)):(g=Ve.getPart(g,ae,le),j=re-$,J=.8<le-ae?j<q-lt?(J=t(x,(xe=Ve.subdivide(g,.5))[0],E,S,D,F,!H,U,J,$,re,lt,Ce=(lt+q)/2),t(x,xe[1],E,S,D,F,!H,U,J,$,re,Ce,q)):(J=t((xe=Ve.subdivide(x,.5))[0],g,E,S,D,F,!H,U,J,$,Oe=($+re)/2,lt,q),t(xe[1],g,E,S,D,F,!H,U,J,Oe,re,lt,q)):j==0||1e-9<=j?t(x,g,E,S,D,F,!H,U,J,$,re,lt,q):t(g,x,S,E,D,F,H,U,J,lt,q,$,re))),J}function i(g,x,S,E){return g[0][1]<S?r(g,!0,S):x[0][1]>E?r(x,!1,E):g[0][0]}function r(g,x,S){for(var E=g[0][0],D=g[0][1],F=1,H=g.length;F<H;F++){var U=g[F][0],J=g[F][1];if(x?S<=J:J<=S)return J===S?U:E+(S-D)*(U-E)/(J-D);E=U,D=J}return null}function l(g,x,S,E,D){var F=je.isZero;if(F(E)&&F(D))return(F=Ve.getTimeOf(g,new Q(x,S)))===null?[]:[F];E=Math.atan2(-D,E);for(var H=Math.sin(E),U=Math.cos(E),J=[],j=(E=[],0);j<8;j+=2){var q=g[j]-x,$=g[j+1]-S;J.push(q*U-$*H,q*H+$*U)}return Ve.solveCubic(J,1,0,E,0,1),E}function u(g,x,S,E,D,F){var H=1e-12,U=Math.min;if((le=Math.max)(g[0],g[2],g[4],g[6])+H>U(x[0],x[2],x[4],x[6])&&U(g[0],g[2],g[4],g[6])-H<le(x[0],x[2],x[4],x[6])&&le(g[1],g[3],g[5],g[7])+H>U(x[1],x[3],x[5],x[7])&&U(g[1],g[3],g[5],g[7])-H<le(x[1],x[3],x[5],x[7])){var J=m(g,x);if(J)for(var j=0;j<2;j++){var q=J[j];e(D,F,S,q[0],E,q[1],!0)}else{var $=Ve.isStraight(g),re=Ve.isStraight(x),ae=$&&re,le=(U=$&&!re,D.length);if((ae?function(_e,oe,ue,De,Se,He){var Ze=wt.intersect(_e[0],_e[1],_e[6],_e[7],oe[0],oe[1],oe[6],oe[7]);Ze&&e(Se,He,ue,Ve.getTimeOf(_e,Ze),De,Ve.getTimeOf(oe,Ze))}:$||re?function(_e,oe,ue,De,Se,He,Ze){for(var tt=oe[0],lt=oe[1],M=l(_e,tt,lt,oe[6]-tt,oe[7]-lt),s=0,h=M.length;s<h;s++){var p=M[s],b=Ve.getPoint(_e,p);(b=Ve.getTimeOf(oe,b))!==null&&e(Se,He,Ze?De:ue,Ze?b:p,Ze?ue:De,Ze?p:b)}}:t)(U?x:g,U?g:x,U?E:S,U?S:E,D,F,U,0,0,0,1,0,1),!ae||D.length===le)for(j=0;j<4;j++){var be=j>>1,Ce=1&j,xe=6*Ce,Oe=new Q(g[Oe=6*be],g[1+Oe]);xe=new Q(x[xe],x[1+xe]),Oe.isClose(xe,H)&&e(D,F,S,be,E,Ce)}}}return D}function f(g,x,S,E){return(g=Ve.classify(g)).type==="loop"&&e(S,E,x,(g=g.roots)[0],x,g[1]),S}function m(g,x){function S(ue){var De=ue[6]-ue[0];return De*De+(ue=ue[7]-ue[1])*ue}var E,D=Math.abs,F=wt.getDistance,H=1e-7,U=Ve.isStraight(g),J=Ve.isStraight(x),j=U&&J,q=(E=S(g)<S(x))?x:g,$=E?g:x,re=q[0],ae=q[1],le=q[6]-re;if(F(re,ae,le,E=q[7]-ae,$[0],$[1],!0)<H&&F(re,ae,le,E,$[6],$[7],!0)<H)!j&&F(re,ae,le,E,q[2],q[3],!0)<H&&F(re,ae,le,E,q[4],q[5],!0)<H&&F(re,ae,le,E,$[2],$[3],!0)<H&&F(re,ae,le,E,$[4],$[5],!0)<H&&(U=J=j=!0);else if(j)return null;if(U^J)return null;for(var be=[g,x],Ce=[],xe=0;xe<4&&Ce.length<2;xe++){var Oe=1&xe,_e=1^Oe,oe=xe>>1;if((_e=Ve.getTimeOf(be[Oe],new Q(be[_e][oe?6:0],be[_e][oe?7:1])))!=null&&(oe=Oe?[oe,_e]:[_e,oe],(!Ce.length||1e-8<D(oe[0]-Ce[0][0])&&1e-8<D(oe[1]-Ce[0][1]))&&Ce.push(oe)),2<xe&&!Ce.length)break}return Ce.length!==2?Ce=null:j||(g=Ve.getPart(g,Ce[0][0],Ce[1][0]),(D((x=Ve.getPart(x,Ce[0][1],Ce[1][1]))[2]-g[2])>H||D(x[3]-g[3])>H||D(x[4]-g[4])>H||D(x[5]-g[5])>H)&&(Ce=null)),Ce}return{getIntersections:function(g){var x=this.getValues(),S=g&&g!==this&&g.getValues();return S?u(x,S,this,g,[]):f(x,this,[])},statics:{getOverlaps:m,getIntersections:function(g,x,S,E,D,F){for(var H=!x,U=g.length,J=(x=H?g:x).length,j=new Array(U),q=H?j:new Array(J),$=[],re=0;re<U;re++)j[re]=g[re].getValues(E);if(!H)for(re=0;re<J;re++)q[re]=x[re].getValues(D);for(var ae=ot.findCurveBoundsCollisions(j,q,1e-7),le=0;le<U;le++){var be=g[le],Ce=j[le];H&&f(Ce,be,$,S);var xe=ae[le];if(xe)for(var Oe=0;Oe<xe.length;Oe++){if(F&&$.length)return $;var _e,oe=xe[Oe];(!H||le<oe)&&(_e=x[oe],u(Ce,q[oe],be,_e,$,S))}}return $},getCurveLineIntersections:l,getTimesWithTangent:function(g,x){var S,E=g[0],D=g[1],F=g[2],H=g[3],U=g[4],J=g[5],j=g[6],q=g[7];return x=(g=x.normalize()).x,j=3*j-9*U+9*F-3*E,q=3*q-9*J+9*H-3*D,U=6*U-12*F+6*E,J=6*J-12*H+6*D,F=3*F-3*E,E=3*H-3*D,H=2*j*(g=g.y)-2*q*x,D=[],Math.abs(H)<je.CURVETIME_EPSILON?(H=j*J-q*U)==0||0<=(S=-(j*E-q*F)/H)&&S<=1&&D.push(S):(S=U*g-J*x,0<=(E=(U*U-4*j*F)*g*g+(-2*U*J+4*q*F+4*j*E)*x*g+(J*J-4*q*E)*x*x)&&H!=0&&(E=(-S+(x=Math.sqrt(E)))/H,0<=(H=-(S+x)/H)&&H<=1&&D.push(H),0<=E&&E<=1&&D.push(E))),D}}}}),Zt=O.extend({_class:"CurveLocation",initialize:function(e,t,i,r,l){var u;.99999999<=t&&(u=e.getNext())&&(t=0,e=u),this._setCurve(e),this._time=t,this._point=i||e.getPointAtTime(t),this._overlap=r,this._distance=l,this._intersection=this._next=this._previous=null},_setPath:function(e){this._path=e,this._version=e?e._version:0},_setCurve:function(e){this._setPath(e._path),this._curve=e,this._segment=null,this._segment1=e._segment1,this._segment2=e._segment2},_setSegment:function(e){var t=e.getCurve();t?this._setCurve(t):(this._setPath(e._path),this._segment1=e,this._segment2=null),this._segment=e,this._time=e===this._segment1?0:1,this._point=e._point.clone()},getSegment:function(){var e,t,i=this._segment;return i||(e=this.getCurve(),(t=this.getTime())===0?i=e._segment1:t===1?i=e._segment2:t!=null&&(i=e.getPartLength(0,t)<e.getPartLength(t,1)?e._segment1:e._segment2),this._segment=i),i},getCurve:function(){var e=this._path,t=this;function i(r){if((r=r&&r.getCurve())&&(t._time=r.getTimeOf(t._point))!=null)return t._setCurve(r),r}return e&&e._version!==this._version&&(this._time=this._offset=this._curveOffset=this._curve=null),this._curve||i(this._segment)||i(this._segment1)||i(this._segment2.getPrevious())},getPath:function(){var e=this.getCurve();return e&&e._path},getIndex:function(){var e=this.getCurve();return e&&e.getIndex()},getTime:function(){var e=this.getCurve(),t=this._time;return e&&t==null?this._time=e.getTimeOf(this._point):t},getParameter:"#getTime",getPoint:function(){return this._point},getOffset:function(){if((e=this._offset)==null){var e=0,t=this.getPath(),i=this.getIndex();if(t&&i!=null)for(var r=t.getCurves(),l=0;l<i;l++)e+=r[l].getLength();this._offset=e+=this.getCurveOffset()}return e},getCurveOffset:function(){var e,t,i=this._curveOffset;return i==null&&(e=this.getCurve(),t=this.getTime(),this._curveOffset=i=t!=null&&e&&e.getPartLength(0,t)),i},getIntersection:function(){return this._intersection},getDistance:function(){return this._distance},divide:function(){var e;return(e=(e=this.getCurve())&&e.divideAtTime(this.getTime()))&&this._setSegment(e._segment1),e},split:function(){var e,t=(e=this.getCurve())._path;return(e=e&&e.splitAtTime(this.getTime()))&&this._setSegment(t.getLastSegment()),e},equals:function(e,t){var i,r,l,u,f=this===e;return!f&&e instanceof Zt&&(l=this.getCurve(),u=e.getCurve(),(i=l._path)===u._path&&(l=(r=Math.abs)(this.getOffset()-e.getOffset()),u=!t&&this._intersection,e=!t&&e._intersection,f=(l<1e-7||i&&r(i.getLength()-l)<1e-7)&&(!u&&!e||u&&e&&u.equals(e,!0)))),f},toString:function(){var e=[],t=this.getPoint(),i=Ge.instance;return t&&e.push("point: "+t),(t=this.getIndex())!=null&&e.push("index: "+t),(t=this.getTime())!=null&&e.push("time: "+i.number(t)),this._distance!=null&&e.push("distance: "+i.number(this._distance)),"{ "+e.join(", ")+" }"},isTouching:function(){if((t=this._intersection)&&this.getTangent().isCollinear(t.getTangent())){var e=this.getCurve(),t=t.getCurve();return!(e.isStraight()&&t.isStraight()&&e.getLine().intersect(t.getLine()))}return!1},isCrossing:function(){if(!(x=this._intersection))return!1;var e=this.getTime(),t=x.getTime(),i=1e-8,r=1-i,l=i<=e&&e<=r,u=i<=t&&t<=r;if(l&&u)return!this.isTouching();var f=this.getCurve(),m=f&&e<i?f.getPrevious():f,g=x.getCurve(),x=g&&t<i?g.getPrevious():g;if(r<e&&(f=f.getNext()),r<t&&(g=g.getNext()),!(m&&f&&x&&g))return!1;var S=[];function E(F,H){var U=F.getValues(),J=(F=(J=Ve.classify(U).roots||Ve.getPeaks(U)).length,Ve.getLength(U,H&&F?J[F-1]:0,!H&&F?J[0]:1));S.push(F?J:J/32)}function D(F,H,U){return H<U?H<F&&F<U:H<F||F<U}return l||(E(m,!0),E(f,!1)),u||(E(x,!0),E(g,!1)),i=this.getPoint(),r=Math.min.apply(Math,S),f=l?f.getTangentAtTime(e):f.getPointAt(r).subtract(i),m=l?f.negate():m.getPointAt(-r).subtract(i),g=u?g.getTangentAtTime(t):g.getPointAt(r).subtract(i),i=u?g.negate():x.getPointAt(-r).subtract(i),m=m.getAngle(),f=f.getAngle(),i=i.getAngle(),g=g.getAngle(),!!(l?D(m,i,g)^D(f,i,g)&&D(m,g,i)^D(f,g,i):D(i,m,f)^D(g,m,f)&&D(i,f,m)^D(g,f,m))},hasOverlap:function(){return!!this._overlap}},O.each(Ve._evaluateMethods,function(e){var t=e+"At";this[e]=function(){var i=this.getCurve(),r=this.getTime();return r!=null&&i&&i[t](r,!0)}},{preserve:!0}),new function(){function e(t,i,r){var l=t.length,u=0,f=l-1;function m(F,H){for(var U=F+H;-1<=U&&U<=l;U+=H){var J=t[(U%l+l)%l];if(!i.getPoint().isClose(J.getPoint(),1e-7))break;if(i.equals(J))return J}return null}for(;u<=f;){var g,x=u+f>>>1,S=t[x];if(r&&(g=i.equals(S)?S:m(x,-1)||m(x,1)))return i._overlap&&(g._overlap=g._intersection._overlap=!0),g;var E=i.getPath(),D=S.getPath();(E!==D?E._id-D._id:i.getIndex()+i.getTime()-(S.getIndex()+S.getTime()))<0?f=x-1:u=1+x}return t.splice(u,0,i),i}return{statics:{insert:e,expand:function(t){for(var i=t.slice(),r=t.length-1;0<=r;r--)e(i,t[r]._intersection,!1);return i}}}}),Qt=at.extend({_class:"PathItem",_selectBounds:!1,_canScaleStroke:!0,beans:!0,initialize:function(){},statics:{create:function(e){var t,i,r;return O.isPlainObject(e)?(i=e.segments,t=e.pathData):Array.isArray(e)?i=e:typeof e=="string"&&(t=e),i?r=(r=i[0])&&Array.isArray(r[0]):t&&(r=1<(t.match(/m/gi)||[]).length||/z\s*\S+/i.test(t)),new(r?Xt:It)(e)}},_asPathItem:function(){return this},isClockwise:function(){return 0<=this.getArea()},setClockwise:function(e){this.isClockwise()!=(e=!!e)&&this.reverse()},setPathData:function(e){var t,i,r=e&&e.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/gi),l=!1,u=new Q,f=new Q;function m($,re){return $=+E[$],l&&($+=u[re]),$}function g($){return new Q(m($,"x"),m($+1,"y"))}this.clear();for(var x=0,S=r&&r.length;x<S;x++){var E,D=r[x],F=D[0],H=F.toLowerCase(),U=(E=D.match(/[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g))&&E.length;switch(l=F===H,t!=="z"||/[mz]/.test(H)||this.moveTo(u),H){case"m":case"l":for(var J=H==="m",j=0;j<U;j+=2)this[J?"moveTo":"lineTo"](u=g(j)),J&&(f=u,J=!1);i=u;break;case"h":case"v":var q=H==="h"?"x":"y";for(u=u.clone(),j=0;j<U;j++)u[q]=m(j,q),this.lineTo(u);i=u;break;case"c":for(j=0;j<U;j+=6)this.cubicCurveTo(g(j),i=g(j+2),u=g(j+4));break;case"s":for(j=0;j<U;j+=4)this.cubicCurveTo(/[cs]/.test(t)?u.multiply(2).subtract(i):u,i=g(j),u=g(j+2)),t=H;break;case"q":for(j=0;j<U;j+=4)this.quadraticCurveTo(i=g(j),u=g(j+2));break;case"t":for(j=0;j<U;j+=2)this.quadraticCurveTo(i=/[qt]/.test(t)?u.multiply(2).subtract(i):u,u=g(j)),t=H;break;case"a":for(j=0;j<U;j+=7)this.arcTo(u=g(j+5),new Ne(+E[j],+E[j+1]),+E[j+2],+E[j+4],+E[j+3]);break;case"z":this.closePath(1e-12),u=f}t=H}},_canComposite:function(){return!(this.hasFill()&&this.hasStroke())},_contains:function(e){return(e=e.isInside(this.getBounds({internal:!0,handle:!0}))?this._getWinding(e):{}).onPath||!!(this.getFillRule()==="evenodd"?1&e.windingL||1&e.windingR:e.winding)},getIntersections:function(e,t,i,r){var l=this===e||!e,u=this._matrix._orNullIfIdentity();return i=l?u:(i||e._matrix)._orNullIfIdentity(),l||this.getBounds(u).intersects(e.getBounds(i),1e-12)?Ve.getIntersections(this.getCurves(),!l&&e.getCurves(),t,u,i,r):[]},getCrossings:function(e){return this.getIntersections(e,function(t){return t.isCrossing()})},getNearestLocation:function(){for(var e=Q.read(arguments),t=this.getCurves(),i=1/0,r=null,l=0,u=t.length;l<u;l++){var f=t[l].getNearestLocation(e);f._distance<i&&(i=f._distance,r=f)}return r},getNearestPoint:function(){var e=this.getNearestLocation.apply(this,arguments);return e&&e.getPoint()},interpolate:function(e,t,i){var r=!this._children,l=r?"_segments":"_children",u=e[l],f=t[l],m=this[l];if(!u||!f||u.length!==f.length)throw new Error("Invalid operands in interpolate() call: "+e+", "+t);t=m.length;var g=f.length;if(t<g)for(var x=r?Xe:It,S=t;S<g;S++)this.add(new x);else g<t&&this[r?"removeSegments":"removeChildren"](g,t);for(S=0;S<g;S++)m[S].interpolate(u[S],f[S],i);r&&(this.setClosed(e._closed),this._changed(9))},compare:function(e){var t=!1;if(e){var i=this._children||[this],r=e._children?e._children.slice():[e],l=i.length,u=(e=r.length,[]),f=0;t=!0;for(var m=ot.findItemBoundsCollisions(i,r,je.GEOMETRIC_EPSILON),g=l-1;0<=g&&t;g--){var x=i[g],S=(t=!1,m[g]);if(S)for(var E=S.length-1;0<=E&&!t;E--)x.compare(r[S[E]])&&(u[S[E]]||(u[S[E]]=!0,f++),t=!0)}t=t&&f===e}return t}}),It=Qt.extend({_class:"Path",_serializeFields:{segments:[],closed:!1},initialize:function(e){this._closed=!1,this._segments=[],this._version=0;var t=arguments;(t=Array.isArray(e)?typeof e[0]=="object"?e:t:!e||e.size!==k||e.x===k&&e.point===k?null:t)&&0<t.length?this.setSegments(t):(this._curves=k,this._segmentSelection=0,t||typeof e!="string"||(this.setPathData(e),e=null)),this._initialize(!t&&e)},_equals:function(e){return this._closed===e._closed&&O.equals(this._segments,e._segments)},copyContent:function(e){this.setSegments(e._segments),this._closed=e._closed},_changed:function e(t){if(e.base.call(this,t),8&t){if(this._length=this._area=k,32&t)this._version++;else if(this._curves)for(var i=0,r=this._curves.length;i<r;i++)this._curves[i]._changed()}else 64&t&&(this._bounds=k)},getStyle:function(){var e=this._parent;return(e instanceof Xt?e:this)._style},getSegments:function(){return this._segments},setSegments:function(e){var t,i=this.isFullySelected(),r=e&&e.length;this._segments.length=0,this._segmentSelection=0,this._curves=k,r&&(typeof(t=e[r-1])=="boolean"&&(this.setClosed(t),r--),this._add(Xe.readList(e,0,{},r))),i&&this.setFullySelected(!0)},getFirstSegment:function(){return this._segments[0]},getLastSegment:function(){return this._segments[this._segments.length-1]},getCurves:function(){var e=this._curves,t=this._segments;if(!e)for(var i=this._countCurves(),r=(e=this._curves=new Array(i),0);r<i;r++)e[r]=new Ve(this,t[r],t[r+1]||t[0]);return e},getFirstCurve:function(){return this.getCurves()[0]},getLastCurve:function(){var e=this.getCurves();return e[e.length-1]},isClosed:function(){return this._closed},setClosed:function(e){var t;this._closed!=(e=!!e)&&(this._closed=e,this._curves&&(t=this._curves.length=this._countCurves(),e&&(this._curves[t-1]=new Ve(this,this._segments[t-1],this._segments[0]))),this._changed(41))}},{beans:!0,getPathData:function(e,t){var i,r,l,u,f,m,g,x,S=this._segments,E=S.length,D=new Ge(t),F=new Array(6),H=!0,U=[];function J(q,$){q._transformCoordinates(e,F),i=F[0],r=F[1],H?(U.push("M"+D.pair(i,r)),H=!1):(f=F[2],m=F[3],f===i&&m===r&&g===l&&x===u?$||(q=r-u,U.push(($=i-l)==0?"v"+D.number(q):q==0?"h"+D.number($):"l"+D.pair($,q))):U.push("c"+D.pair(g-l,x-u)+" "+D.pair(f-l,m-u)+" "+D.pair(i-l,r-u))),l=i,u=r,g=F[4],x=F[5]}if(!E)return"";for(var j=0;j<E;j++)J(S[j]);return this._closed&&0<E&&(J(S[0],!0),U.push("z")),U.join("")},isEmpty:function(){return!this._segments.length},_transformContent:function(e){for(var t=this._segments,i=new Array(6),r=0,l=t.length;r<l;r++)t[r]._transformCoordinates(e,i,!0);return!0},_add:function(e,t){for(var i=this._segments,r=this._curves,l=e.length,u=(t=(S=t==null)?i.length:t,0);u<l;u++){var f=e[u];(f=f._path?e[u]=f.clone():f)._path=this,f._index=t+u,f._selection&&this._updateSelection(f,0,f._selection)}if(S)O.push(i,e);else{i.splice.apply(i,[t,0].concat(e)),u=t+l;for(var m=i.length;u<m;u++)i[u]._index=u}if(r){var g=this._countCurves(),x=0<t&&t+l-1===g?t-1:t,S=x,E=Math.min(x+l,g);for(e._curves&&(r.splice.apply(r,[x,0].concat(e._curves)),S+=e._curves.length),u=S;u<E;u++)r.splice(u,0,new Ve(this,null,null));this._adjustCurves(x,E)}return this._changed(41),e},_adjustCurves:function(e,t){for(var i,r=this._segments,l=this._curves,u=e;u<t;u++)(i=l[u])._path=this,i._segment1=r[u],i._segment2=r[u+1]||r[0],i._changed();(i=l[this._closed&&!e?r.length-1:e-1])&&(i._segment2=r[e]||r[0],i._changed()),(i=l[t])&&(i._segment1=r[t],i._changed())},_countCurves:function(){var e=this._segments.length;return!this._closed&&0<e?e-1:e},add:function(e){var t=arguments;return 1<t.length&&typeof e!="number"?this._add(Xe.readList(t)):this._add([Xe.read(t)])[0]},insert:function(e,t){var i=arguments;return 2<i.length&&typeof t!="number"?this._add(Xe.readList(i,1),e):this._add([Xe.read(i,1)],e)[0]},addSegment:function(){return this._add([Xe.read(arguments)])[0]},insertSegment:function(e){return this._add([Xe.read(arguments,1)],e)[0]},addSegments:function(e){return this._add(Xe.readList(e))},insertSegments:function(e,t){return this._add(Xe.readList(t),e)},removeSegment:function(e){return this.removeSegments(e,e+1)[0]||null},removeSegments:function(e,t,i){e=e||0,t=O.pick(t,this._segments.length);var r=this._segments,l=this._curves,u=r.length,f=r.splice(e,t-e),m=f.length;if(!m)return f;for(var g=0;g<m;g++){var x=f[g];x._selection&&this._updateSelection(x,x._selection,0),x._index=x._path=null}g=e;for(var S=r.length;g<S;g++)r[g]._index=g;if(l){for(e=0<e&&t===u+(this._closed?1:0)?e-1:e,g=(l=l.splice(e,m)).length-1;0<=g;g--)l[g]._path=null;i&&(f._curves=l.slice(1)),this._adjustCurves(e,e)}return this._changed(41),f},clear:"#removeSegments",hasHandles:function(){for(var e=this._segments,t=0,i=e.length;t<i;t++)if(e[t].hasHandles())return!0;return!1},clearHandles:function(){for(var e=this._segments,t=0,i=e.length;t<i;t++)e[t].clearHandles()},getLength:function(){if(this._length==null){for(var e=this.getCurves(),t=0,i=0,r=e.length;i<r;i++)t+=e[i].getLength();this._length=t}return this._length},getArea:function(){if((i=this._area)==null){for(var e=this._segments,t=this._closed,i=0,r=0,l=e.length;r<l;r++){var u=r+1===l;i+=Ve.getArea(Ve.getValues(e[r],e[u?0:r+1],null,u&&!t))}this._area=i}return i},isFullySelected:function(){var e=this._segments.length;return this.isSelected()&&0<e&&this._segmentSelection===7*e},setFullySelected:function(e){e&&this._selectSegments(!0),this.setSelected(e)},setSelection:function e(t){1&t||this._selectSegments(!1),e.base.call(this,t)},_selectSegments:function(e){var t=this._segments,i=t.length,r=e?7:0;this._segmentSelection=r*i;for(var l=0;l<i;l++)t[l]._selection=r},_updateSelection:function(e,t,i){e._selection=i,0<(this._segmentSelection+=i-t)&&this.setSelected(!0)},divideAt:function(e){var t;return(e=this.getLocationAt(e))&&(t=e.getCurve().divideAt(e.getCurveOffset()))?t._segment1:null},splitAt:function(e){var t,i=this.getLocationAt(e),r=i&&i.index;return 1-1e-8<(e=i&&i.time)&&(r++,e=0),i=this.getCurves(),0<=r&&r<i.length?(1e-8<=e&&i[r++].divideAtTime(e),r=this.removeSegments(r,this._segments.length,!0),this._closed?(this.setClosed(!1),t=this):((t=new It(at.NO_INSERT)).insertAbove(this),t.copyAttributes(this)),t._add(r,0),this.addSegment(r[0]),t):null},split:function(e,t){return(t=t===k?e:(e=this.getCurves()[e])&&e.getLocationAtTime(t))!=null?this.splitAt(t):null},join:function(e,t){var i=t||0;if(e&&e!==this){var r=e._segments,l=this.getLastSegment(),u=e.getLastSegment();if(!u)return this;l&&l._point.isClose(u._point,i)&&e.reverse(),t=e.getFirstSegment(),l&&l._point.isClose(t._point,i)?(l.setHandleOut(t._handleOut),this._add(r.slice(1))):((l=this.getFirstSegment())&&l._point.isClose(t._point,i)&&e.reverse(),u=e.getLastSegment(),l&&l._point.isClose(u._point,i)?(l.setHandleIn(u._handleIn),this._add(r.slice(0,r.length-1),0)):this._add(r.slice())),e._closed&&this._add([r[0]]),e.remove()}return(r=this.getFirstSegment())!==(e=this.getLastSegment())&&r._point.isClose(e._point,i)&&(r.setHandleIn(e._handleIn),e.remove(),this.setClosed(!0)),this},reduce:function(e){for(var t=this.getCurves(),i=e&&e.simplify,r=i?1e-7:0,l=t.length-1;0<=l;l--){var u=t[l];!u.hasHandles()&&(!u.hasLength(r)||i&&u.isCollinear(u.getNext()))&&u.remove()}return this},reverse:function(){this._segments.reverse();for(var e=0,t=this._segments.length;e<t;e++){var i=this._segments[e],r=i._handleIn;i._handleIn=i._handleOut,i._handleOut=r,i._index=e}this._curves=null,this._changed(9)},flatten:function(e){for(var t=new We(this,e||.25,256,!0).parts,i=t.length,r=[],l=0;l<i;l++)r.push(new Xe(t[l].curve.slice(0,2)));!this._closed&&0<i&&r.push(new Xe(t[i-1].curve.slice(6))),this.setSegments(r)},simplify:function(e){return(e=new Rt(this).fit(e||2.5))&&this.setSegments(e),!!e},smooth:function(e){var t=this,i=e||{},r=(e=i.type||"asymmetric",this._segments),l=r.length,u=this._closed;function f(tt,lt){var M=tt&&tt.index;if(M!=null){var s=tt.path;if(s&&s!==t)throw new Error(tt._class+" "+M+" of "+s+" is not part of "+t);lt&&tt instanceof Ve&&M++}else M=typeof tt=="number"?tt:lt;return Math.min(M<0&&u?M%l:M<0?M+l:M,l-1)}var m=u&&i.from===k&&i.to===k,g=f(i.from,0),x=f(i.to,l-1);if(x<g&&(u?g-=l:(E=g,g=x,x=E)),/^(?:asymmetric|continuous)$/.test(e)){var S=e==="asymmetric",E=Math.min,D=(e=x-g+1)-1,F=e=m?E(e,4):1,H=[];if(u||(F=E(1,g),e=E(1,l-x-1)),!((D+=F+e)<=1)){for(var U=0,J=g-F;U<=D;U++,J++)H[U]=r[(J<0?J+l:J)%l]._point;var j=D-1,q=[oe=H[0]._x+2*H[1]._x],$=[ue=H[0]._y+2*H[1]._y],re=[_e=2],ae=[],le=[];for(U=1;U<D;U++)var be=U<j,Ce=be?4:S?3:8,xe=be?2:S?0:1,Oe=(be||S?1:2)/_e,_e=re[U]=(be?4:S?2:7)-Oe,oe=q[U]=Ce*H[U]._x+xe*H[U+1]._x-Oe*oe,ue=$[U]=Ce*H[U]._y+xe*H[U+1]._y-Oe*ue;for(ae[j]=q[j]/re[j],le[j]=$[j]/re[j],U=D-2;0<=U;U--)ae[U]=(q[U]-ae[U+1])/re[U],le[U]=($[U]-le[U+1])/re[U];ae[D]=(3*H[D]._x-ae[j])/2,le[D]=(3*H[D]._y-le[j])/2,U=F;var De=D-e;for(J=g;U<=De;U++,J++){var Se=r[J<0?J+l:J],He=Se._point,Ze=ae[U]-He._x;He=le[U]-He._y,(m||U<De)&&Se.setHandleOut(Ze,He),(m||F<U)&&Se.setHandleIn(-Ze,-He)}}}else for(U=g;U<=x;U++)r[U<0?U+l:U].smooth(i,!m&&U===g,!m&&U===x)},toShape:function(e){if(!this._closed)return null;var t,i,r,l,u,f,m=this._segments;function g(F,H){var U=m[F],J=U.getNext();return H=(F=m[H]).getNext(),U._handleOut.isZero()&&J._handleIn.isZero()&&F._handleOut.isZero()&&H._handleIn.isZero()&&J._point.subtract(U._point).isCollinear(H._point.subtract(F._point))}function x(F){var H=m[F],U=H.getNext(),J=H._handleOut,j=U._handleIn,q=.5522847498307936;if(J.isOrthogonal(j))return F=H._point,H=U._point,(U=new wt(F,J,!0).intersect(new wt(H,j,!0),!0))&&je.isZero(J.getLength()/U.subtract(F).getLength()-q)&&je.isZero(j.getLength()/U.subtract(H).getLength()-q)}function S(F,H){return m[F]._point.getDistance(m[H]._point)}if(!this.hasHandles()&&m.length===4&&g(0,2)&&g(1,3)&&(f=(u=m[l=1]).getPrevious(),l=u.getNext(),f._handleOut.isZero()&&u._handleIn.isZero()&&u._handleOut.isZero()&&l._handleIn.isZero()&&u._point.subtract(f._point).isOrthogonal(l._point.subtract(u._point)))?(t=kt.Rectangle,i=new Ne(S(0,3),S(0,1)),r=m[1]._point.add(m[2]._point).divide(2)):m.length===8&&x(0)&&x(2)&&x(4)&&x(6)&&g(1,5)&&g(3,7)?(t=kt.Rectangle,D=(i=new Ne(S(1,6),S(0,3))).subtract(new Ne(S(0,7),S(1,2))).divide(2),r=m[3]._point.add(m[4]._point).divide(2)):m.length===4&&x(0)&&x(1)&&x(2)&&x(3)&&(D=je.isZero(S(0,2)-S(1,3))?(t=kt.Circle,S(0,2)/2):(t=kt.Ellipse,new Ne(S(2,0)/2,S(3,1)/2)),r=m[1]._point),t){var E=this.getPosition(!0),D=new t({center:E,size:i,radius:D,insert:!1});return D.copyAttributes(this,!0),D._matrix.prepend(this._matrix),D.rotate(r.subtract(E).getAngle()+90),e!==k&&!e||D.insertAbove(this),D}return null},toPath:"#clone",compare:function e(t){if(!t||t instanceof Xt)return e.base.call(this,t);var i=this.getCurves(),r=t.getCurves(),l=i.length,u=r.length;if(!l||!u)return l==u;for(var f,m,g=i[0].getValues(),x=[],S=0,E=0,D=0;D<u;D++){var F=r[D].getValues();if(x.push(F),J=Ve.getOverlaps(g,F)){f=!D&&0<J[0][0]?u-1:D,m=J[0][1];break}}var H,U=Math.abs;for(F=x[f];g&&F;){var J=Ve.getOverlaps(g,F);if(J&&U(J[0][0]-E)<1e-8){(E=J[1][0])===1&&(g=++S<l?i[S].getValues():null,E=0);var j=J[0][1];if(U(j-m)<1e-8){if(H=H||[f,j],(m=J[1][1])===1&&(F=x[f=++f>=u?0:f]||r[f].getValues(),m=0),!g)return H[0]===f&&H[1]===m;continue}}break}return!1},_hitTestSelf:function(e,t,i,r){var l,u,f,m,g,x,S=this,E=this.getStyle(),D=this._segments,F=D.length,H=this._closed,U=t._tolerancePadding,J=U,j=t.stroke&&E.hasStroke(),q=t.fill&&E.hasFill(),$=t.curves,re=j?E.getStrokeWidth()/2:q&&0<t.tolerance||$?0:null;function ae(oe,ue){return e.subtract(oe).divide(ue).length<=1}function le(oe,ue,De){if(!t.selected||ue.isSelected()){var Se=oe._point;if(ae(ue=ue!==Se?ue.add(Se):ue,J))return new Yt(De,S,{segment:oe,point:ue})}}function be(oe,ue){return(ue||t.segments)&&le(oe,oe._point,"segment")||!ue&&t.handles&&(le(oe,oe._handleIn,"handle-in")||le(oe,oe._handleOut,"handle-out"))}function Ce(oe){m.add(oe)}function xe(oe){var ue=H||0<oe._index&&oe._index<F-1;return(ue?l:u)==="round"?ae(oe._point,J):(m=new It({internal:!0,closed:!0}),ue?oe.isSmooth()||It._addBevelJoin(oe,l,re,f,null,r,Ce,!0):u==="square"&&It._addSquareCap(oe,u,re,null,r,Ce,!0),!m.isEmpty()&&(m.contains(e)||(oe=m.getNearestLocation(e))&&ae(oe.getPoint(),U)))}if(re!==null&&(0<re?(l=E.getStrokeJoin(),u=E.getStrokeCap(),f=E.getMiterLimit(),J=J.add(It._getStrokePadding(re,r))):l=u="round"),!t.ends||t.segments||H){if(t.segments||t.handles){for(var Oe=0;Oe<F;Oe++)if(g=be(D[Oe]))return g}}else if(g=be(D[0],!0)||be(D[F-1],!0))return g;if(re!==null&&((x=this.getNearestLocation(e))&&((E=x.getTime())===0||E===1&&1<F?xe(x.getSegment())||(x=null):ae(x.getPoint(),J)||(x=null)),!x&&l==="miter"&&1<F))for(Oe=0;Oe<F;Oe++){var _e=D[Oe];if(e.getDistance(_e._point)<=f*re&&xe(_e)){x=_e.getLocation();break}}return!x&&q&&this._contains(e)||x&&!j&&!$?new Yt("fill",this):x?new Yt(j?"stroke":"curve",this,{location:x,point:x.getPoint()}):null}},O.each(Ve._evaluateMethods,function(e){this[e+"At"]=function(t){return(t=this.getLocationAt(t))&&t[e]()}},{beans:!1,getLocationOf:function(){for(var e=Q.read(arguments),t=this.getCurves(),i=0,r=t.length;i<r;i++){var l=t[i].getLocationOf(e);if(l)return l}return null},getOffsetOf:function(){var e=this.getLocationOf.apply(this,arguments);return e?e.getOffset():null},getLocationAt:function(e){if(typeof e=="number"){for(var t=this.getCurves(),i=0,r=0,l=t.length;r<l;r++){var u=i,f=t[r];if(e<(i+=f.getLength()))return f.getLocationAt(e-u)}if(0<t.length&&e<=this.getLength())return new Zt(t[t.length-1],1)}else if(e&&e.getPath&&e.getPath()===this)return e;return null},getOffsetsWithTangent:function(){var e=Q.read(arguments);if(e.isZero())return[];for(var t=[],i=0,r=this.getCurves(),l=0,u=r.length;l<u;l++){for(var f=r[l],m=f.getTimesWithTangent(e),g=0,x=m.length;g<x;g++){var S=i+f.getOffsetAtTime(m[g]);t.indexOf(S)<0&&t.push(S)}i+=f.length}return t}}),new function(){function e(t,i,r){var l,u,f,m,g,x,S,E,D=i._segments,F=D.length,H=new Array(6),U=!0;function J(q){var $,re;u=r?(q._transformCoordinates(r,H),l=H[0],H[1]):($=q._point,l=$._x,$._y),U?(t.moveTo(l,u),U=!1):(x=r?(g=H[2],H[3]):(re=q._handleIn,g=l+re._x,u+re._y),g===l&&x===u&&S===f&&E===m?t.lineTo(l,u):t.bezierCurveTo(S,E,g,x,l,u)),f=l,m=u,E=r?(S=H[4],H[5]):(re=q._handleOut,S=f+re._x,m+re._y)}for(var j=0;j<F;j++)J(D[j]);i._closed&&0<F&&J(D[0])}return{_draw:function(t,i,r,l){var u=i.dontStart,f=i.dontFinish||i.clip,m=this.getStyle(),g=m.hasFill(),x=m.hasStroke(),S=m.getDashArray(),E=!zt.support.nativeDash&&x&&S&&S.length;function D(q){return S[(q%E+E)%E]}if(u||t.beginPath(),(g||x&&!E||f)&&(e(t,this,l),this._closed&&t.closePath()),!f&&(g||x)&&(this._setStyles(t,i,r),g&&(t.fill(m.getFillRule()),t.shadowColor="rgba(0,0,0,0)"),x)){if(E){u||t.beginPath();for(var F,H=new We(this,.25,32,!1,l),U=H.length,J=-m.getDashOffset(),j=0;0<J;)J-=D(j--)+D(j--);for(;J<U;)F=J+D(j++),(0<J||0<F)&&H.drawPart(t,Math.max(J,0),Math.max(F,0)),J=F+D(j++)}t.stroke()}},_drawSelected:function(t,i){t.beginPath(),e(t,this,i),t.stroke(),function(r,l,u,f){if(!(f<=0))for(var m,g,x=f/2,S=f-2,E=x-1,D=new Array(6),F=0,H=l.length;F<H;F++){var U=l[F],J=U._selection;U._transformCoordinates(u,D),m=D[0],g=D[1],2&J&&j(2),4&J&&j(4),r.fillRect(m-x,g-x,f,f),0<S&&!(1&J)&&(J=r.fillStyle,r.fillStyle="#ffffff",r.fillRect(m-E,g-E,S,S),r.fillStyle=J)}function j(q){var $=D[q];q=D[q+1],m==$&&g==q||(r.beginPath(),r.moveTo(m,g),r.lineTo($,q),r.stroke(),r.beginPath(),r.arc($,q,x,0,2*Math.PI,!0),r.fill())}}(t,this._segments,i,zt.settings.handleSize)}}},new function(){function e(t){if(!(t=t._segments).length)throw new Error("Use a moveTo() command first");return t[t.length-1]}return{moveTo:function(){var t=this._segments;t.length===1&&this.removeSegment(0),t.length||this._add([new Xe(Q.read(arguments))])},moveBy:function(){throw new Error("moveBy() is unsupported on Path items.")},lineTo:function(){this._add([new Xe(Q.read(arguments))])},cubicCurveTo:function(){var t=arguments,i=Q.read(t),r=Q.read(t),l=Q.read(t);(t=e(this)).setHandleOut(i.subtract(t._point)),this._add([new Xe(l,r.subtract(l))])},quadraticCurveTo:function(){var t=arguments,i=Q.read(t),r=Q.read(t);t=e(this)._point,this.cubicCurveTo(i.add(t.subtract(i).multiply(1/3)),i.add(r.subtract(i).multiply(1/3)),r)},curveTo:function(){var t=arguments,i=Q.read(t),r=Q.read(t),l=O.pick(O.read(t),.5),u=1-l;if(t=e(this)._point,(u=i.subtract(t.multiply(u*u)).subtract(r.multiply(l*l)).divide(2*l*u)).isNaN())throw new Error("Cannot put a curve through points with parameter = "+l);this.quadraticCurveTo(u,r)},arcTo:function(){var t,i=arguments,r=Math.abs,l=Math.sqrt,u=e(this),f=u._point,m=Q.read(i),g=O.peek(i);if(typeof(F=O.pick(g,!0))=="boolean")var x=(U=f.add(m).divide(2)).add(U.subtract(f).rotate(F?-90:90));else if(O.remain(i)<=2)x=m,m=Q.read(i);else if(!f.equals(m)){var S=Ne.read(i);if((E=je.isZero)(S.width)||E(S.height))return this.lineTo(m);var E,D=O.read(i),F=!!O.read(i),H=!!O.read(i),U=f.add(m).divide(2),J=(ue=f.subtract(U).rotate(-D)).x,j=ue.y,q=(ae=r(S.width))*ae;if(1<(S=l((E=J*J)/q+(i=j*j)/(g=(le=r(S.height))*le)))&&(q=(ae*=S)*ae,g=(le*=S)*le),(S=r(S=(q*g-q*i-g*E)/(q*i+g*E))<1e-12?0:S)<0)throw new Error("Cannot create an arc with the given arguments");$=new Q(ae*j/le,-le*J/ae).multiply((H===F?-1:1)*l(S)).rotate(D).add(U),D=(re=(t=new ut().translate($).rotate(D).scale(ae,le))._inverseTransform(f)).getDirectedAngle(t._inverseTransform(m)),!F&&0<D?D-=360:F&&D<0&&(D+=360)}if(x){var $,re,ae=new wt(f.add(x).divide(2),x.subtract(f).rotate(90),!0),le=new wt(x.add(m).divide(2),m.subtract(x).rotate(90),!0);if(x=(F=new wt(f,m)).getSide(x),!($=ae.intersect(le,!0))){if(!x)return this.lineTo(m);throw new Error("Cannot create an arc with the given arguments")}D=(re=f.subtract($)).getDirectedAngle(m.subtract($)),(F=F.getSide($,!0))===0?D=x*r(D):x===F&&(D+=D<0?360:-360)}if(D){for(var be=360<=(r=r(D))?4:Math.ceil((r-1e-5)/90),Ce=D/be,xe=(D=Ce*Math.PI/360,4/3*Math.sin(D)/(1+Math.cos(D))),Oe=[],_e=0;_e<=be;_e++){var oe,ue=m,De=null;_e<be&&(De=re.rotate(90).multiply(xe),t?(ue=t._transformPoint(re),De=t._transformPoint(re.add(De)).subtract(ue)):ue=$.add(re)),_e?(oe=re.rotate(-90).multiply(xe),t&&(oe=t._transformPoint(re.add(oe)).subtract(ue)),Oe.push(new Xe(ue,oe,De))):u.setHandleOut(De),re=re.rotate(Ce)}this._add(Oe)}},lineBy:function(){var t=Q.read(arguments),i=e(this)._point;this.lineTo(i.add(t))},curveBy:function(){var t=arguments,i=Q.read(t),r=Q.read(t),l=O.read(t);t=e(this)._point,this.curveTo(t.add(i),t.add(r),l)},cubicCurveBy:function(){var t=arguments,i=Q.read(t),r=Q.read(t),l=Q.read(t);t=e(this)._point,this.cubicCurveTo(t.add(i),t.add(r),t.add(l))},quadraticCurveBy:function(){var t=arguments,i=Q.read(t),r=Q.read(t);t=e(this)._point,this.quadraticCurveTo(t.add(i),t.add(r))},arcBy:function(){var t=arguments,i=e(this)._point,r=i.add(Q.read(t)),l=O.pick(O.peek(t),!0);typeof l=="boolean"?this.arcTo(r,l):this.arcTo(r,i.add(Q.read(t)))},closePath:function(t){this.setClosed(!0),this.join(this,t)}}},{_getBounds:function(e,t){var i=t.handle?"getHandleBounds":t.stroke?"getStrokeBounds":"getBounds";return It[i](this._segments,this._closed,this,e,t)},statics:{getBounds:function(e,t,i,r,l,u){var f=e[0];if(!f)return new ke;var m=new Array(6),g=f._transformCoordinates(r,new Array(6)),x=g.slice(0,2),S=x.slice(),E=new Array(2);function D(U){U._transformCoordinates(r,m);for(var J=0;J<2;J++)Ve._addBounds(g[J],g[J+4],m[J+2],m[J],J,u?u[J]:0,x,S,E);U=g,g=m,m=U}for(var F=1,H=e.length;F<H;F++)D(e[F]);return t&&D(f),new ke(x[0],x[1],S[0]-x[0],S[1]-x[1])},getStrokeBounds:function(e,t,i,r,l){var u=i.getStyle(),f=u.hasStroke(),m=u.getStrokeWidth(),g=f&&i._getStrokeMatrix(r,l),x=f&&It._getStrokePadding(m,g),S=It.getBounds(e,t,i,r,l,x);if(!f)return S;var E=m/2,D=u.getStrokeJoin(),F=(m=u.getStrokeCap(),u.getMiterLimit()),H=new ke(new Ne(x));function U(ae){S=S.include(ae)}function J(ae){S=S.unite(H.setCenter(ae._point.transform(r)))}function j(ae,le){le==="round"||ae.isSmooth()?J(ae):It._addBevelJoin(ae,le,E,F,r,g,U)}function q(ae,le){le==="round"?J(ae):It._addSquareCap(ae,le,E,r,g,U)}var $=e.length-(t?0:1);if(0<$){for(var re=1;re<$;re++)j(e[re],D);t?j(e[0],D):(q(e[0],m),q(e[e.length-1],m))}return S},_getStrokePadding:function(e,t){if(!t)return[e,e];var i=new Q(e,0).transform(t),r=new Q(0,e).transform(t),l=i.getAngleInRadians(),u=i.getLength();return e=r.getLength(),t=Math.sin(l),i=Math.cos(l),r=Math.tan(l),l=Math.atan2(e*r,u),r=Math.atan2(e,r*u),[Math.abs(u*Math.cos(l)*i+e*Math.sin(l)*t),Math.abs(e*Math.sin(r)*i+u*Math.cos(r)*t)]},_addBevelJoin:function(e,t,i,r,l,u,f,m){e=(g=e.getCurve()).getPrevious(),l=g.getPoint1().transform(l),e=e.getNormalAtTime(1).multiply(i).transform(u);var g=g.getNormalAtTime(0).multiply(i).transform(u);((u=e.getDirectedAngle(g))<0||180<=u)&&(e=e.negate(),g=g.negate()),m&&f(l),f(l.add(e)),t!=="miter"||(e=new wt(l.add(e),new Q(-e.y,e.x),!0).intersect(new wt(l.add(g),new Q(-g.y,g.x),!0),!0))&&l.getDistance(e)<=r*i&&f(e),f(l.add(g))},_addSquareCap:function(e,t,i,r,l,u,f){r=e._point.transform(r),l=(e=e.getLocation()).getNormal().multiply(e.getTime()===0?i:-i).transform(l),t==="square"&&(f&&(u(r.subtract(l)),u(r.add(l))),r=r.add(l.rotate(-90))),u(r.add(l)),u(r.subtract(l))},getHandleBounds:function(e,t,i,r,l){var u,f,m,g=i.getStyle();l.stroke&&g.hasStroke()&&(m=i._getStrokeMatrix(r,l),l=i=g.getStrokeWidth()/2,g.getStrokeJoin()==="miter"&&(l=i*g.getMiterLimit()),g.getStrokeCap()==="square"&&(l=Math.max(l,i*Math.SQRT2)),u=It._getStrokePadding(i,m),f=It._getStrokePadding(l,m));for(var x=new Array(6),S=1/0,E=-S,D=S,F=E,H=0,U=e.length;H<U;H++){e[H]._transformCoordinates(r,x);for(var J=0;J<6;J+=2){var j,q=(j=J?u:f)?j[0]:0,$=j?j[1]:0,re=x[J],ae=x[J+1];(j=re-q)<S&&(S=j),E<(re+=q)&&(E=re),(q=ae-$)<D&&(D=q),F<($=ae+$)&&(F=$)}}return new ke(S,D,E-S,F-D)}}});It.inject({statics:new function(){var e=.5522847498307936,t=[new Xe([-1,0],[0,e],[0,-e]),new Xe([0,-1],[-e,0],[e,0]),new Xe([1,0],[0,-e],[0,e]),new Xe([0,1],[e,0],[-e,0])];function i(l,u,f){var m=O.getNamed(f);return(f=new It(m&&(m.insert==1?at.INSERT:m.insert==0?at.NO_INSERT:null)))._add(l),f._closed=u,f.set(m,at.INSERT)}function r(l,u,f){for(var m=new Array(4),g=0;g<4;g++){var x=t[g];m[g]=new Xe(x._point.multiply(u).add(l),x._handleIn.multiply(u),x._handleOut.multiply(u))}return i(m,!0,f)}return{Line:function(){var l=arguments;return i([new Xe(Q.readNamed(l,"from")),new Xe(Q.readNamed(l,"to"))],!1,l)},Circle:function(){var l=arguments,u=Q.readNamed(l,"center"),f=O.readNamed(l,"radius");return r(u,new Ne(f),l)},Rectangle:function(){var l,u,f=arguments,m=ke.readNamed(f,"rectangle"),g=Ne.readNamed(f,"radius",0,{readNull:!0}),x=m.getBottomLeft(!0),S=m.getTopLeft(!0),E=m.getTopRight(!0),D=m.getBottomRight(!0);return i(!g||g.isZero()?[new Xe(x),new Xe(S),new Xe(E),new Xe(D)]:(l=(g=Ne.min(g,m.getSize(!0).divide(2))).width,u=g.height,m=l*e,g=u*e,[new Xe(x.add(l,0),null,[-m,0]),new Xe(x.subtract(0,u),[0,g]),new Xe(S.add(0,u),null,[0,-g]),new Xe(S.add(l,0),[-m,0],null),new Xe(E.subtract(l,0),null,[m,0]),new Xe(E.add(0,u),[0,-g],null),new Xe(D.subtract(0,u),null,[0,g]),new Xe(D.subtract(l,0),[m,0])]),!0,f)},RoundRectangle:"#Rectangle",Ellipse:function(){var l=arguments,u=kt._readEllipse(l);return r(u.center,u.radius,l)},Oval:"#Ellipse",Arc:function(){var l=arguments,u=Q.readNamed(l,"from"),f=Q.readNamed(l,"through"),m=Q.readNamed(l,"to"),g=O.getNamed(l);return(l=new It(g&&g.insert==0&&at.NO_INSERT)).moveTo(u),l.arcTo(f,m),l.set(g)},RegularPolygon:function(){for(var l=arguments,u=Q.readNamed(l,"center"),f=O.readNamed(l,"sides"),m=O.readNamed(l,"radius"),g=360/f,x=f%3==0,S=new Q(0,x?-m:m),E=x?-1:.5,D=new Array(f),F=0;F<f;F++)D[F]=new Xe(u.add(S.rotate((F+E)*g)));return i(D,!0,l)},Star:function(){for(var l=arguments,u=Q.readNamed(l,"center"),f=2*O.readNamed(l,"points"),m=O.readNamed(l,"radius1"),g=O.readNamed(l,"radius2"),x=360/f,S=new Q(0,-1),E=new Array(f),D=0;D<f;D++)E[D]=new Xe(u.add(S.rotate(x*D).multiply(D%2?g:m)));return i(E,!0,l)}}}});var Xt=Qt.extend({_class:"CompoundPath",_serializeFields:{children:[]},beans:!0,initialize:function(e){this._children=[],this._namedChildren={},this._initialize(e)||(typeof e=="string"?this.setPathData(e):this.addChildren(Array.isArray(e)?e:arguments))},insertChildren:function e(t,i){var r=i,l=r[0];l&&typeof l[0]=="number"&&(r=[r]);for(var u=i.length-1;0<=u;u--){var f=r[u];r!==i||f instanceof It||(r=O.slice(r)),Array.isArray(f)?r[u]=new It({segments:f,insert:!1}):f instanceof Xt&&(r.splice.apply(r,[u,1].concat(f.removeChildren())),f.remove())}return e.base.call(this,t,r)},reduce:function e(t){for(var i,r=this._children,l=r.length-1;0<=l;l--)(i=r[l].reduce(t)).isEmpty()&&i.remove();return r.length?e.base.call(this):((i=new It(at.NO_INSERT)).copyAttributes(this),i.insertAbove(this),this.remove(),i)},isClosed:function(){for(var e=this._children,t=0,i=e.length;t<i;t++)if(!e[t]._closed)return!1;return!0},setClosed:function(e){for(var t=this._children,i=0,r=t.length;i<r;i++)t[i].setClosed(e)},getFirstSegment:function(){var e=this.getFirstChild();return e&&e.getFirstSegment()},getLastSegment:function(){var e=this.getLastChild();return e&&e.getLastSegment()},getCurves:function(){for(var e=this._children,t=[],i=0,r=e.length;i<r;i++)O.push(t,e[i].getCurves());return t},getFirstCurve:function(){var e=this.getFirstChild();return e&&e.getFirstCurve()},getLastCurve:function(){var e=this.getLastChild();return e&&e.getLastCurve()},getArea:function(){for(var e=this._children,t=0,i=0,r=e.length;i<r;i++)t+=e[i].getArea();return t},getLength:function(){for(var e=this._children,t=0,i=0,r=e.length;i<r;i++)t+=e[i].getLength();return t},getPathData:function(e,t){for(var i=this._children,r=[],l=0,u=i.length;l<u;l++){var f=i[l],m=f._matrix;r.push(f.getPathData(e&&!m.isIdentity()?e.appended(m):e,t))}return r.join("")},_hitTestChildren:function e(t,i,r){return e.base.call(this,t,i.class===It||i.type==="path"?i:O.set({},i,{fill:!1}),r)},_draw:function(e,t,i,r){var l=this._children;if(l.length){t=t.extend({dontStart:!0,dontFinish:!0}),e.beginPath();for(var u=0,f=l.length;u<f;u++)l[u].draw(e,t,r);t.clip||(this._setStyles(e,t,i),(i=this._style).hasFill()&&(e.fill(i.getFillRule()),e.shadowColor="rgba(0,0,0,0)"),i.hasStroke()&&e.stroke())}},_drawSelected:function(e,t,i){for(var r=this._children,l=0,u=r.length;l<u;l++){var f=r[l],m=f._matrix;i[f._id]||f._drawSelected(e,m.isIdentity()?t:t.appended(m))}}},new function(){function e(t,i){if(t=t._children,i&&!t.length)throw new Error("Use a moveTo() command first");return t[t.length-1]}return O.each(["lineTo","cubicCurveTo","quadraticCurveTo","curveTo","arcTo","lineBy","cubicCurveBy","quadraticCurveBy","curveBy","arcBy"],function(t){this[t]=function(){var i=e(this,!0);i[t].apply(i,arguments)}},{moveTo:function(){var t=e(this),i=t&&t.isEmpty()?t:new It(at.NO_INSERT);i!==t&&this.addChild(i),i.moveTo.apply(i,arguments)},moveBy:function(){var t=(i=e(this,!0))&&i.getLastSegment(),i=Q.read(arguments);this.moveTo(t?i.add(t._point):i)},closePath:function(t){e(this,!0).closePath(t)}})},O.each(["reverse","flatten","simplify","smooth"],function(e){this[e]=function(t){for(var i,r=this._children,l=0,u=r.length;l<u;l++)i=r[l][e](t)||i;return i}},{}));Qt.inject(new function(){var e=Math.min,t=Math.max,i=Math.abs,r={unite:{1:!0,2:!0},intersect:{2:!0},subtract:{1:!0},exclude:{1:!0,"-1":!0}};function l(j){return j._children||[j]}function u(j,q){var $=j.clone(!1).reduce({simplify:!0}).transform(null,!0,!0);if(q){for(var re=l($),ae=0,le=re.length;ae<le;ae++)(j=re[ae])._closed||j.isEmpty()||(j.closePath(1e-12),j.getFirstSegment().setHandleIn(0,0),j.getLastSegment().setHandleOut(0,0));$=$.resolveCrossings().reorient($.getFillRule()==="nonzero",!0)}return $}function f(j,q,$,re,ae){var le=new Xt(at.NO_INSERT);return le.addChildren(j,!0),le=le.reduce({simplify:q}),ae&&ae.insert==0||le.insertAbove(re&&$.isSibling(re)&&$.getIndex()<re.getIndex()?re:$),le.copyAttributes($,!0),le}function m(j){return j.hasOverlap()||j.isCrossing()}function g(j,q,$,re){if(re&&(re.trace==0||re.stroke)&&/^(subtract|intersect)$/.test($))return x(j,q,$);var ae=u(j,!0),le=q&&j!==q&&u(q,!0),be=r[$];be[$]=!0,le&&(be.subtract||be.exclude)^le.isClockwise()^ae.isClockwise()&&le.reverse();var Ce,xe=F(Zt.expand(ae.getIntersections(le,m))),Oe=l(ae),_e=($=le&&l(le),[]),oe=[];function ue(b){for(var A=0,P=b.length;A<P;A++){var L=b[A];O.push(_e,L._segments),O.push(oe,L.getCurves()),L._overlapsOnly=!0}}function De(b){for(var A=[],P=0,L=b&&b.length;P<L;P++)A.push(oe[b[P]]);return A}if(xe.length){ue(Oe),$&&ue($);for(var Se=new Array(oe.length),He=0,Ze=oe.length;He<Ze;He++)Se[He]=oe[He].getValues();var tt=ot.findCurveBoundsCollisions(Se,Se,0,!0),lt={};for(He=0;He<oe.length;He++){var M=oe[He],s=M._path._id;(lt[s]=lt[s]||{})[M.getIndex()]={hor:De(tt[He].hor),ver:De(tt[He].ver)}}for(He=0,Ze=xe.length;He<Ze;He++)U(xe[He]._segment,ae,le,lt,be);for(He=0,Ze=_e.length;He<Ze;He++){var h=_e[He],p=h._intersection;h._winding||U(h,ae,le,lt,be),p&&p._overlap||(h._path._overlapsOnly=!1)}Ce=J(_e,be)}else Ce=D($?Oe.concat($):Oe.slice(),function(b){return!!be[b]});return f(Ce,!0,j,q,re)}function x(j,q,$){var re=u(j),ae=u(q),le=re.getIntersections(ae,m),be=$==="subtract",Ce=$==="divide",xe={},Oe=[];function _e(De){return!xe[De._id]&&(Ce||ae.contains(De.getPointAt(De.getLength()/2))^be)&&(Oe.unshift(De),xe[De._id]=!0)}for(var oe=le.length-1;0<=oe;oe--){var ue=le[oe].split();ue&&(_e(ue)&&ue.getFirstSegment().setHandleIn(0,0),re.getLastSegment().setHandleOut(0,0))}return _e(re),f(Oe,!1,j,q)}function S(j,q){for(var $=j;$;){if($===q)return;$=$._previous}for(;j._next&&j._next!==q;)j=j._next;if(!j._next){for(;q._previous;)q=q._previous;(j._next=q)._previous=j}}function E(j){for(var q=j.length-1;0<=q;q--)j[q].clearHandles()}function D(j,q,$){var re=j&&j.length;if(re){var ae=O.each(j,function(lt,M){this[lt._id]={container:null,winding:lt.isClockwise()?1:-1,index:M}},{}),le=j.slice().sort(function(lt,M){return i(M.getArea())-i(lt.getArea())}),be=le[0],Ce=ot.findItemBoundsCollisions(le,null,je.GEOMETRIC_EPSILON);$==null&&($=be.isClockwise());for(var xe=0;xe<re;xe++){var Oe,_e=le[xe],oe=ae[_e._id],ue=0,De=Ce[xe];if(De){for(var Se=null,He=De.length-1;0<=He;He--)if(De[He]<xe){Se=Se||_e.getInteriorPoint();var Ze=le[De[He]];if(Ze.contains(Se)){var tt=ae[Ze._id];ue=tt.winding,oe.winding+=ue,oe.container=tt.exclude?tt.container:Ze;break}}}q(oe.winding)===q(ue)?(oe.exclude=!0,j[oe.index]=null):(Oe=oe.container,_e.setClockwise(Oe?!Oe.isClockwise():$))}}return j}function F(j,q,$){var re,ae,le,be=q&&[],Ce=!1,xe=$||[],Oe=$&&{};function _e(p){return p._path._id+"."+p._segment1._index}for(var oe=($&&$.length)-1;0<=oe;oe--)(ue=$[oe])._path&&(Oe[_e(ue)]=!0);for(oe=j.length-1;0<=oe;oe--){var ue,De=(s=j[oe])._time,Se=De,He=q&&!q(s);if((ue=s._curve)&&(ue!==ae?(Ce=!ue.hasHandles()||Oe&&Oe[_e(ue)],re=[],le=null,ae=ue):1e-8<=le&&(De/=le)),He)re&&re.push(s);else{if(q&&be.unshift(s),le=Se,De<1e-8)Ze=ue._segment1;else if(.99999999<De)Ze=ue._segment2;else{Se=ue.divideAtTime(De,!0),Ce&&xe.push(ue,Se);for(var Ze=Se._segment1,tt=re.length-1;0<=tt;tt--){var lt=re[tt];lt._time=(lt._time-De)/(1-De)}}s._setSegment(Ze);var M=Ze._intersection,s=s._intersection;if(M){S(M,s);for(var h=M;h;)S(h._intersection,M),h=h._next}else Ze._intersection=s}}return $||E(xe),be||j}function H(j,q,$,re,ae){var le,be=Array.isArray(q)?q:q[$?"hor":"ver"],Ce=$?1:0,xe=1^Ce,Oe=[j.x,j.y],_e=Oe[Ce],oe=Oe[xe],ue=1e-6,De=_e-1e-9,Se=_e+1e-9,He=0,Ze=0,tt=0,lt=0,M=!1,s=!1,h=1,p=[];function b(ne){var ie=ne[xe+0],me=ne[xe+2],de=ne[xe+4],te=ne[xe+6];if(oe<=t(ie,me,de,te)&&oe>=e(ie,me,de,te)){ie=ne[Ce+0],me=ne[Ce+2],de=ne[Ce+4],te=ne[Ce+6];for(var he,ce=De>t(ie,me,de,te)||Se<e(ie,me,de,te)?[ne]:Ve.getMonoCurves(ne,$),Ee=0,Re=ce.length;Ee<Re;Ee++)if(he=function(Ae){var Me=Ae[xe+0],Le=Ae[xe+6];if(!(oe<e(Me,Le)||oe>t(Me,Le))){var Fe=Ae[Ce+0],Be=Ae[Ce+2],qe=Ae[Ce+4],Je=Ae[Ce+6];if(Me!==Le){var Qe=oe===Me?0:oe!==Le&&!(De>t(Fe,Be,qe,Je)||Se<e(Fe,Be,qe,Je))&&0<Ve.solveCubic(Ae,xe,oe,p,0,1)?p[0]:1,Ye=Qe===0?Fe:Qe===1?Je:Ve.getPoint(Ae,Qe)[$?"y":"x"];return Be=Le<Me?1:-1,qe=X[xe]>X[xe+6]?1:-1,Le=X[Ce+6],oe!==Me?(Ye<De?tt+=Be:Se<Ye?lt+=Be:M=!0,_e-ue<Ye&&Ye<_e+ue&&(h/=2)):(Be!=qe?Fe<De?tt+=Be:Se<Fe&&(lt+=Be):Fe!=Le&&(Le<Se&&Se<Ye?(lt+=Be,M=!0):De<Le&&Ye<De&&(tt+=Be,M=!0)),h/=4),X=Ae,!ae&&De<Ye&&Ye<Se&&Ve.getTangent(Ae,Qe)[$?"x":"y"]===0&&H(j,q,!$,re,!0)}(Fe<Se&&De<Je||Je<Se&&De<Fe)&&(M=!0)}}(ce[Ee]))return he}}for(var A=0,P=be.length;A<P;A++){var L=be[A],N=L._path,Y=L.getValues();if(!(A&&be[A-1]._path===N||(X=null,N._closed||(le=Ve.getValues(N.getLastCurve().getSegment2(),L.getSegment1(),null,!re))[xe]!==le[xe+6]&&(X=le),X)))for(var X=Y,Z=N.getLastCurve();Z&&Z!==L;){var pe=Z.getValues();if(pe[xe]!==pe[xe+6]){X=pe;break}Z=Z.getPrevious()}if(Y=b(Y))return Y;if(A+1===P||be[A+1]._path!==N){if(le&&(Y=b(le)))return Y;He+=tt=!M||tt||lt?tt:lt=N.isClockwise(re)^$?1:-1,Ze+=lt,tt=lt=0,M=M&&!(s=!0),le=null}}return He=i(He),Ze=i(Ze),{winding:t(He,Ze),windingL:He,windingR:Ze,quality:h,onPath:s}}function U(j,q,$,re,ae){var le=[],be=j,Ce=0;do;while((He=j.getCurve())&&(oe=He.getLength(),le.push({segment:j,curve:He,length:oe}),Ce+=oe),(j=j.getNext())&&!j._intersection&&j!==be);for(var xe=[.5,.25,.75],Oe={winding:0,quality:-1},_e=0;_e<xe.length&&Oe.quality<.5;_e++)for(var oe=Ce*xe[_e],ue=0,De=le.length;ue<De;ue++){var Se=(s=le[ue]).length;if(oe<=Se){var He,Ze=(He=s.curve)._path,tt=(h=Ze._parent)instanceof Xt?h:Ze,lt=je.clamp(He.getTimeAt(oe),.001,.999),M=He.getPointAtTime(lt),s=i(He.getTangentAtTime(lt).y)<Math.SQRT1_2,h=null;if(ae.subtract&&$&&(lt=(tt===q?$:q)._getWinding(M,s,!0),tt===q&&lt.winding||tt===$&&!lt.winding)){if(lt.quality<1)continue;h={winding:0,quality:1}}(h=h||H(M,re[Ze._id][He.getIndex()],s,!0)).quality>Oe.quality&&(Oe=h);break}oe-=Se}for(ue=le.length-1;0<=ue;ue--)le[ue].segment._winding=Oe}function J(j,q){var $,re=[];function ae(L){return!(!L||L._visited||q&&(!q[(L=L._winding||{}).winding]||q.unite&&L.winding===2&&L.windingL&&L.windingR))}function le(L){if(L){for(var N=0,Y=$.length;N<Y;N++)if(L===$[N])return!0}return!1}function be(L){for(var N=L._segments,Y=0,X=N.length;Y<X;Y++)N[Y]._visited=!0}j.sort(function(L,N){var Y=L._intersection,X=N._intersection,Z=!(!Y||!Y._overlap),pe=!(!X||!X._overlap),ne=L._path,ie=N._path;return Z^pe?Z?1:-1:!Y^!X?Y?1:-1:ne!==ie?ne._id-ie._id:L._index-N._index});for(var Ce=0,xe=j.length;Ce<xe;Ce++){var Oe,_e,oe,ue,De,Se=j[Ce],He=ae(Se),Ze=null,tt=!1,lt=!0,M=[];for(He&&Se._path._overlapsOnly&&(ue=Se._path,De=Se._intersection._segment._path,ue.compare(De)&&(ue.getArea()&&re.push(ue.clone(!1)),be(ue),be(De),He=!1));He;){var s=!Ze,h=function(L,N){var Y=L._intersection,X=Y,Z=[];function pe(ne,ie){for(;ne&&ne!==ie;){var me,de=ne._segment,te=de&&de._path;te&&(te=(me=de.getNext()||te.getFirstSegment())._intersection,de!==L&&(le(de)||le(me)||me&&ae(de)&&(ae(me)||te&&ae(te._segment)))&&Z.push(de),N&&$.push(de)),ne=ne._next}}if(N&&($=[L]),Y){for(pe(Y);Y&&Y._previous;)Y=Y._previous;pe(Y,X)}return Z}(Se,s),p=h.shift(),b=!(tt=!s&&(le(Se)||le(p)))&&p;if(s&&(Ze=new It(at.NO_INSERT),Oe=null),tt){(Se.isFirst()||Se.isLast())&&(lt=Se._path._closed),Se._visited=!0;break}if(b&&Oe&&(M.push(Oe),Oe=null),Oe||(b&&h.push(Se),Oe={start:Ze._segments.length,crossings:h,visited:_e=[],handleIn:oe}),!ae(Se=b?p:Se)){Ze.removeSegments(Oe.start);for(var A=0,P=_e.length;A<P;A++)_e[A]._visited=!1;for(_e.length=0;(Se=Oe&&Oe.crossings.shift())&&Se._path||(Se=null,(Oe=M.pop())&&(_e=Oe.visited,oe=Oe.handleIn)),Oe&&!ae(Se););if(!Se)break}p=Se.getNext(),Ze.add(new Xe(Se._point,oe,p&&Se._handleOut)),Se._visited=!0,_e.push(Se),Se=p||Se._path.getFirstSegment(),oe=p&&p._handleIn}tt&&(lt&&(Ze.getFirstSegment().setHandleIn(oe),Ze.setClosed(lt)),Ze.getArea()!==0&&re.push(Ze))}return re}return{_getWinding:function(j,q,$){return H(j,this.getCurves(),q,$)},unite:function(j,q){return g(this,j,"unite",q)},intersect:function(j,q){return g(this,j,"intersect",q)},subtract:function(j,q){return g(this,j,"subtract",q)},exclude:function(j,q){return g(this,j,"exclude",q)},divide:function(j,q){return q&&(q.trace==0||q.stroke)?x(this,j,"divide"):f([this.subtract(j,q),this.intersect(j,q)],!0,this,j,q)},resolveCrossings:function(){var j=this._children,q=j||[this];function $(Se,He){return(Se=Se&&Se._intersection)&&Se._overlap&&Se._path===He}var re,ae=!1,le=!1,be=this.getIntersections(null,function(Se){return Se.hasOverlap()?ae=!0:Se.isCrossing()&&(le=!0)}),Ce=ae&&le&&[];if(be=Zt.expand(be),ae)for(var xe=F(be,function(Se){return Se.hasOverlap()},Ce),Oe=xe.length-1;0<=Oe;Oe--){var _e=(De=xe[Oe])._path,oe=De._segment,ue=oe.getPrevious(),De=oe.getNext();$(ue,_e)&&$(De,_e)&&(oe.remove(),ue._handleOut._set(0,0),De._handleIn._set(0,0),ue===oe||ue.getCurve().hasLength()||(De._handleIn.set(ue._handleIn),ue.remove()))}return le&&(F(be,ae&&function(Se){var He=Se.getCurve(),Ze=Se.getSegment(),tt=(Se=(tt=Se._intersection)._curve,tt._segment);if(He&&Se&&He._path&&Se._path)return!0;Ze&&(Ze._intersection=null),tt&&(tt._intersection=null)},Ce),Ce&&E(Ce),q=J(O.each(q,function(Se){O.push(this,Se._segments)},[]))),1<(Ce=q.length)&&j?(q!==j&&this.setChildren(q),re=this):Ce!==1||j||(q[0]!==this&&this.setSegments(q[0].removeSegments()),re=this),re||((re=new Xt(at.NO_INSERT)).addChildren(q),(re=re.reduce()).copyAttributes(this),this.replaceWith(re)),re},reorient:function(j,q){var $=this._children;return $&&$.length?this.setChildren(D(this.removeChildren(),function(re){return!!(j?re:1&re)},q)):q!==k&&this.setClockwise(q),this},getInteriorPoint:function(){var j=this.getBounds().getCenter(!0);if(!this.contains(j)){for(var q=this.getCurves(),$=j.y,re=[],ae=[],le=0,be=q.length;le<be;le++){var Ce=q[le].getValues(),xe=Ce[1],Oe=Ce[3],_e=Ce[5],oe=Ce[7];if($>=e(xe,Oe,_e,oe)&&$<=t(xe,Oe,_e,oe))for(var ue=Ve.getMonoCurves(Ce),De=0,Se=ue.length;De<Se;De++){var He=ue[De],Ze=He[1],tt=He[7];Ze!==tt&&(Ze<=$&&$<=tt||tt<=$&&$<=Ze)&&(He=$===Ze?He[0]:$===tt?He[6]:Ve.solveCubic(He,1,$,ae,0,1)===1?Ve.getPoint(He,ae[0]).x:(He[0]+He[6])/2,re.push(He))}}1<re.length&&(re.sort(function(lt,M){return lt-M}),j.x=(re[0]+re[1])/2)}return j}}});var We=O.extend({_class:"PathFlattener",initialize:function(e,t,i,r,l){var u,f=[],m=[],g=0,x=1/(i||32),S=e._segments,E=S[0];function D(U,J){J=Ve.getValues(U,J,l),f.push(J),function j(q,$,re,ae){var le,be;!(x<ae-re)||r&&Ve.isStraight(q)||Ve.isFlatEnough(q,t||.25)?(le=q[6]-q[0],be=q[7]-q[1],0<(be=Math.sqrt(le*le+be*be))&&(g+=be,m.push({offset:g,curve:q,index:$,time:ae}))):(be=Ve.subdivide(q,.5),q=(re+ae)/2,j(be[0],$,re,q),j(be[1],$,q,ae))}(J,U._index,0,1)}for(var F=1,H=S.length;F<H;F++)D(E,u=S[F]),E=u;e._closed&&D(u||E,S[0]),this.curves=f,this.parts=m,this.length=g,this.index=0},_get:function(e){for(var t,i=this.parts,r=i.length,l=this.index;(t=l)&&!(i[--l].offset<e););for(;t<r;t++){var u=i[t];if(u.offset>=e){var f=(m=i[(this.index=t)-1])&&m.index===u.index?m.time:0,m=m?m.offset:0;return{index:u.index,time:f+(u.time-f)*(e-m)/(u.offset-m)}}}return{index:i[r-1].index,time:1}},drawPart:function(e,t,i){for(var r=this._get(t),l=this._get(i),u=r.index,f=l.index;u<=f;u++){var m=Ve.getPart(this.curves[u],u===r.index?r.time:0,u===l.index?l.time:1);u===r.index&&e.moveTo(m[0],m[1]),e.bezierCurveTo.apply(e,m.slice(2))}}},O.each(Ve._evaluateMethods,function(e){this[e+"At"]=function(t){return t=this._get(t),Ve[e](this.curves[t.index],t.time)}},{})),Rt=O.extend({initialize:function(e){for(var t,i=this.points=[],r=e._segments,l=(e=e._closed,0),u=r.length;l<u;l++){var f=r[l].point;t&&t.equals(f)||i.push(t=f.clone())}e&&(i.unshift(i[i.length-1]),i.push(i[1])),this.closed=e},fit:function(e){var t=this.points,i=t.length,r=null;return 0<i&&(r=[new Xe(t[0])],1<i&&(this.fitCubic(r,e,0,i-1,t[1].subtract(t[0]),t[i-2].subtract(t[i-1])),this.closed&&(r.shift(),r.pop()))),r},fitCubic:function(e,t,i,r,l,u){var f=this.points;if(r-i!=1){for(var m,g=this.chordLengthParameterize(i,r),x=Math.max(t,t*t),S=!0,E=0;E<=4;E++){var D=this.generateBezier(i,r,g,l,u),F=this.findMaxError(i,r,D,g);if(F.error<t&&S)return void this.addCurve(e,D);if(m=F.index,F.error>=x)break;S=this.reparameterize(i,r,g,D),x=F.error}var H=f[m-1].subtract(f[m+1]);this.fitCubic(e,t,i,m,l,H),this.fitCubic(e,t,m,r,H.negate(),u)}else{var U=f[i];H=f[r],f=U.getDistance(H)/3,this.addCurve(e,[U,U.add(l.normalize(f)),H.add(u.normalize(f)),H])}},addCurve:function(e,t){e[e.length-1].setHandleOut(t[1].subtract(t[0])),e.push(new Xe(t[3],t[2].subtract(t[3])))},generateBezier:function(e,t,i,r,l){for(var u=Math.abs,f=this.points,m=f[e],g=f[t],x=[[0,0],[0,0]],S=[0,0],E=0,D=t-e+1;E<D;E++){var F=(J=1-(q=i[E]))*J*J,H=(j=3*q*J)*J,U=j*q,J=q*q*q,j=r.normalize(H),q=l.normalize(U);J=f[e+E].subtract(m.multiply(F+H)).subtract(g.multiply(U+J)),x[0][0]+=j.dot(j),x[0][1]+=j.dot(q),x[1][0]=x[0][1],x[1][1]+=q.dot(q),S[0]+=j.dot(J),S[1]+=q.dot(J)}var $,re;1e-12<u(t=x[0][0]*x[1][1]-x[1][0]*x[0][1])?(re=x[0][0]*S[1]-x[1][0]*S[0],$=(S[0]*x[1][1]-S[1]*x[0][1])/t,re/=t):(t=x[0][0]+x[0][1],be=x[1][0]+x[1][1],$=re=1e-12<u(t)?S[0]/t:1e-12<u(be)?S[1]/be:0);var ae,le,be=1e-12*(u=g.getDistance(m));return $<be||re<be?$=re=u/3:(be=g.subtract(m),ae=r.normalize($),le=l.normalize(re),ae.dot(be)-le.dot(be)>u*u&&($=re=u/3,ae=le=null)),[m,m.add(ae||r.normalize($)),g.add(le||l.normalize(re)),g]},reparameterize:function(e,t,i,r){for(var l=e;l<=t;l++)i[l-e]=this.findRoot(r,this.points[l],i[l-e]);l=1;for(var u=i.length;l<u;l++)if(i[l]<=i[l-1])return!1;return!0},findRoot:function(e,t,i){for(var r=[],l=[],u=0;u<=2;u++)r[u]=e[u+1].subtract(e[u]).multiply(3);for(u=0;u<=1;u++)l[u]=r[u+1].subtract(r[u]).multiply(2);var f=this.evaluate(3,e,i),m=this.evaluate(2,r,i),g=this.evaluate(1,l,i);return t=f.subtract(t),g=m.dot(m)+t.dot(g),je.isMachineZero(g)?i:i-t.dot(m)/g},evaluate:function(e,t,i){for(var r=t.slice(),l=1;l<=e;l++)for(var u=0;u<=e-l;u++)r[u]=r[u].multiply(1-i).add(r[u+1].multiply(i));return r[0]},chordLengthParameterize:function(e,t){for(var i=[0],r=e+1;r<=t;r++)i[r-e]=i[r-e-1]+this.points[r].getDistance(this.points[r-1]);r=1;for(var l=t-e;r<=l;r++)i[r]/=i[l];return i},findMaxError:function(e,t,i,r){for(var l=Math.floor((t-e+1)/2),u=0,f=e+1;f<t;f++){var m;u<=(m=(m=this.evaluate(3,i,r[f-e]).subtract(this.points[f])).x*m.x+m.y*m.y)&&(u=m,l=f)}return{error:u,index:l}}}),Bt=at.extend({_class:"TextItem",_applyMatrix:!1,_canApplyMatrix:!1,_serializeFields:{content:null},_boundsOptions:{stroke:!1,handle:!1},initialize:function(e){this._content="",this._lines=[];var t=e&&O.isPlainObject(e)&&e.x===k&&e.y===k;this._initialize(t&&e,!t&&Q.read(arguments))},_equals:function(e){return this._content===e._content},copyContent:function(e){this.setContent(e._content)},getContent:function(){return this._content},setContent:function(e){this._content=""+e,this._lines=this._content.split(/\r\n|\n|\r/gm),this._changed(521)},isEmpty:function(){return!this._content},getCharacterStyle:"#getStyle",setCharacterStyle:"#setStyle",getParagraphStyle:"#getStyle",setParagraphStyle:"#setStyle"}),At=Bt.extend({_class:"PointText",initialize:function(){Bt.apply(this,arguments)},getPoint:function(){var e=this._matrix.getTranslation();return new vt(e.x,e.y,this,"setPoint")},setPoint:function(){var e=Q.read(arguments);this.translate(e.subtract(this._matrix.getTranslation()))},_draw:function(e,t,i){if(this._content){this._setStyles(e,t,i);var r=this._lines,l=(i=this._style).hasFill(),u=i.hasStroke(),f=i.getLeading(),m=e.shadowColor;e.font=i.getFontStyle(),e.textAlign=i.getJustification();for(var g=0,x=r.length;g<x;g++){e.shadowColor=m;var S=r[g];l&&(e.fillText(S,0,0),e.shadowColor="rgba(0,0,0,0)"),u&&e.strokeText(S,0,0),e.translate(0,f)}}},_getBounds:function(e,t){var i=this._style,r=(f=this._lines).length,l=i.getJustification(),u=i.getLeading(),f=(i=this.getView().getTextWidth(i.getFontStyle(),f),0);return l!=="left"&&(f-=i/(l==="center"?2:1)),u=new ke(f,r?-.75*u:0,i,r*u),e?e._transformBounds(u,u):u}}),St=O.extend(new function(){var e,t={gray:["gray"],rgb:["red","green","blue"],hsb:["hue","saturation","brightness"],hsl:["hue","saturation","lightness"],gradient:["gradient","origin","destination","highlight"]},i={},r={transparent:[0,0,0,0]},l=[[0,3,1],[2,0,1],[1,0,3],[1,2,0],[3,1,0],[0,1,2]],u={"rgb-hsb":function(f,m,g){var x=Math.max(f,m,g),S=x-Math.min(f,m,g);return[S==0?0:60*(x==f?(m-g)/S+(m<g?6:0):x==m?(g-f)/S+2:(f-m)/S+4),x===0?0:S/x,x]},"hsb-rgb":function(f,m,g){f=(f/60%6+6)%6;var x=Math.floor(f);return[(f=[g,g*(1-m),g*(1-m*(f-=x)),g*(1-m*(1-f))])[(x=l[x])[0]],f[x[1]],f[x[2]]]},"rgb-hsl":function(f,m,g){var x=Math.max(f,m,g),S=Math.min(f,m,g),E=x-S,D=E==0,F=(x+S)/2;return[D?0:60*(x==f?(m-g)/E+(m<g?6:0):x==m?(g-f)/E+2:(f-m)/E+4),D?0:F<.5?E/(x+S):E/(2-x-S),F]},"hsl-rgb":function(f,m,g){if(m===0)return[g,g,g];for(var x=[(f=(f/360%1+1)%1)+1/3,f,f-1/3],S=g<.5?g*(1+m):g+m-g*m,E=2*g-S,D=[],F=0;F<3;F++){var H=x[F];H<0&&(H+=1),1<H&&--H,D[F]=6*H<1?E+6*(S-E)*H:2*H<1?S:3*H<2?E+(S-E)*(2/3-H)*6:E}return D},"rgb-gray":function(f,m,g){return[.2989*f+.587*m+.114*g]},"gray-rgb":function(f){return[f,f,f]},"gray-hsb":function(f){return[0,0,f]},"gray-hsl":function(f){return[0,0,f]},"gradient-rgb":function(){return[]},"rgb-gradient":function(){return[]}};return O.each(t,function(f,m){i[m]=[],O.each(f,function(g,x){var S=O.capitalize(g),E=/^(hue|saturation)$/.test(g),D=i[m][x]=m==="gradient"?g==="gradient"?function(F){var H=this._components[0];return H!==(F=C.read(Array.isArray(F)?F:arguments,0,{readNull:!0}))&&(H&&H._removeOwner(this),F&&F._addOwner(this)),F}:function(){return Q.read(arguments,0,{readNull:g==="highlight",clone:!0})}:function(F){return F==null||isNaN(F)?0:+F};this["get"+S]=function(){return(this._type===m||E&&/^hs[bl]$/.test(this._type)?this._components:this._convert(m))[x]},this["set"+S]=function(F){this._type===m||E&&/^hs[bl]$/.test(this._type)||(this._components=this._convert(m),this._properties=t[m],this._type=m),this._components[x]=D.call(this,F),this._changed()}},this)},{_class:"Color",_readIndex:!0,initialize:function f(m){var g,x,S,E=arguments,D=this.__read,F=0,H=(m=Array.isArray(m)?(E=m)[0]:m)!=null&&typeof m;if(H==="string"&&m in t&&(U=m,m=E[1],Array.isArray(m)?(g=m,j=E[2]):(D&&(F=1),E=O.slice(E,1),H=typeof m)),!g){if(x=H==="number"?E:H==="object"&&m.length!=null?m:null){var U=U||(3<=x.length?"rgb":"gray"),J=t[U].length,j=x[J];D&&(F+=x===arguments?J+(j!=null?1:0):1),x.length>J&&(x=O.slice(x,0,J))}else if(H==="string")J=function(be){var Ce=be.match(/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})?$/i)||be.match(/^#([\da-f])([\da-f])([\da-f])([\da-f])?$/i),xe="rgb";if(Ce)for(var Oe=Ce[4]?4:3,_e=new Array(Oe),oe=0;oe<Oe;oe++){var ue=Ce[oe+1];_e[oe]=parseInt(ue.length==1?ue+ue:ue,16)/255}else if(Ce=be.match(/^(rgb|hsl)a?\((.*)\)$/)){xe=Ce[1],_e=Ce[2].trim().split(/[,\s]+/g);for(var De=xe==="hsl",Se=(oe=0,Math.min(_e.length,4));oe<Se;oe++){var He,Ze=_e[oe];ue=parseFloat(Ze),De?oe===0?(He=Ze.match(/([a-z]*)$/)[1],ue*={turn:360,rad:180/Math.PI,grad:.9}[He]||1):oe<3&&(ue/=100):oe<3&&(ue/=/%$/.test(Ze)?100:255),_e[oe]=ue}}else{var tt,lt=r[be];_e=(lt=lt||(G?(e||((e=et.getContext(1,1,{willReadFrequently:!0})).globalCompositeOperation="copy"),e.fillStyle="rgba(0,0,0,0)",e.fillStyle=be,e.fillRect(0,0,1,1),tt=e.getImageData(0,0,1,1).data,r[be]=[tt[0]/255,tt[1]/255,tt[2]/255]):[0,0,0])).slice()}return[xe,_e]}(m),U=J[0],(g=J[1]).length===4&&(j=g[3],g.length--);else if(H==="object")if(m.constructor===f){if(U=m._type,g=m._components.slice(),j=m._alpha,U==="gradient")for(var q=1,$=g.length;q<$;q++){var re=g[q];re&&(g[q]=re.clone())}}else if(m.constructor===C)U="gradient",x=E;else{var ae=t[U="hue"in m?"lightness"in m?"hsl":"hsb":"gradient"in m||"stops"in m||"radial"in m?"gradient":"gray"in m?"gray":"rgb"],le=i[U];for(this._components=g=[],q=0,$=ae.length;q<$;q++)(S=m[ae[q]])==null&&!q&&U==="gradient"&&"stops"in m&&(S={stops:m.stops,radial:m.radial}),(S=le[q].call(this,S))!=null&&(g[q]=S);j=m.alpha}D&&U&&(F=1)}if(this._type=U||"rgb",!g)for(this._components=g=[],q=0,$=(le=i[this._type]).length;q<$;q++)(S=le[q].call(this,x&&x[q]))!=null&&(g[q]=S);return this._components=g,this._properties=t[this._type],this._alpha=j,D&&(this.__read=F),this},set:"#initialize",_serialize:function(f,m){var g=this.getComponents();return O.serialize(/^(gray|rgb)$/.test(this._type)?g:[this._type].concat(g),f,!0,m)},_changed:function(){this._canvasStyle=null,this._owner&&(this._setter?this._owner[this._setter](this):this._owner._changed(129))},_convert:function(f){var m;return this._type===f?this._components.slice():(m=u[this._type+"-"+f])?m.apply(this,this._components):u["rgb-"+f].apply(this,u[this._type+"-rgb"].apply(this,this._components))},convert:function(f){return new St(f,this._convert(f),this._alpha)},getType:function(){return this._type},setType:function(f){this._components=this._convert(f),this._properties=t[f],this._type=f},getComponents:function(){var f=this._components.slice();return this._alpha!=null&&f.push(this._alpha),f},getAlpha:function(){return this._alpha!=null?this._alpha:1},setAlpha:function(f){this._alpha=f==null?null:Math.min(Math.max(f,0),1),this._changed()},hasAlpha:function(){return this._alpha!=null},equals:function(f){var m=O.isPlainValue(f,!0)?St.read(arguments):f;return m===this||m&&this._class===m._class&&this._type===m._type&&this.getAlpha()===m.getAlpha()&&O.equals(this._components,m._components)||!1},toString:function(){for(var f=this._properties,m=[],g=this._type==="gradient",x=Ge.instance,S=0,E=f.length;S<E;S++){var D=this._components[S];D!=null&&m.push(f[S]+": "+(g?D:x.number(D)))}return this._alpha!=null&&m.push("alpha: "+x.number(this._alpha)),"{ "+m.join(", ")+" }"},toCSS:function(f){var m=this._convert("rgb"),g=f||this._alpha==null?1:this._alpha;function x(S){return Math.round(255*(S<0?0:1<S?1:S))}return m=[x(m[0]),x(m[1]),x(m[2])],g<1&&m.push(g<0?0:g),f?"#"+((1<<24)+(m[0]<<16)+(m[1]<<8)+m[2]).toString(16).slice(1):(m.length==4?"rgba(":"rgb(")+m.join(",")+")"},toCanvasStyle:function(f,m){if(this._canvasStyle)return this._canvasStyle;if(this._type!=="gradient")return this._canvasStyle=this.toCSS();var g,x=(F=this._components)[0],S=x._stops,E=F[1],D=F[2],F=F[3];(m=m&&m.inverted())&&(E=m._transformPoint(E),D=m._transformPoint(D),F=F&&m._transformPoint(F)),g=x._radial?(m=D.getDistance(E),!F||(x=F.subtract(E)).getLength()>m&&(F=E.add(x.normalize(m-.1))),f.createRadialGradient((F=F||E).x,F.y,0,E.x,E.y,m)):f.createLinearGradient(E.x,E.y,D.x,D.y);for(var H=0,U=S.length;H<U;H++){var J=S[H],j=J._offset;g.addColorStop(j??H/(U-1),J._color.toCanvasStyle())}return this._canvasStyle=g},transform:function(f){if(this._type==="gradient"){for(var m=this._components,g=1,x=m.length;g<x;g++){var S=m[g];f._transformPoint(S,S,!0)}this._changed()}},statics:{_types:t,random:function(){var f=Math.random;return new St(f(),f(),f())},_setOwner:function(f,m,g){return f&&!(f=f._owner&&m&&f._owner!==m?f.clone():f)._owner^!m&&(f._owner=m||null,f._setter=g||null),f}}})},new function(){return O.each({add:function(e,t){return e+t},subtract:function(e,t){return e-t},multiply:function(e,t){return e*t},divide:function(e,t){return e/t}},function(e,t){this[t]=function(i){i=St.read(arguments);for(var r=this._type,l=this._components,u=i._convert(r),f=0,m=l.length;f<m;f++)u[f]=e(l[f],u[f]);return new St(r,u,this._alpha!=null?e(this._alpha,i.getAlpha()):null)}},{})}),C=O.extend({_class:"Gradient",initialize:function(e,t){this._id=xt.get(),e&&O.isPlainObject(e)&&(this.set(e),e=t=null),this._stops==null&&this.setStops(e||["white","black"]),this._radial==null&&this.setRadial(typeof t=="string"&&t==="radial"||t||!1)},_serialize:function(e,t){return t.add(this,function(){return O.serialize([this._stops,this._radial],e,!0,t)})},_changed:function(){for(var e=0,t=this._owners&&this._owners.length;e<t;e++)this._owners[e]._changed()},_addOwner:function(e){this._owners||(this._owners=[]),this._owners.push(e)},_removeOwner:function(e){(e=this._owners?this._owners.indexOf(e):-1)!=-1&&(this._owners.splice(e,1),this._owners.length||(this._owners=k))},clone:function(){for(var e=[],t=0,i=this._stops.length;t<i;t++)e[t]=this._stops[t].clone();return new C(e,this._radial)},getStops:function(){return this._stops},setStops:function(e){if(e.length<2)throw new Error("Gradient stop list needs to contain at least two stops.");var t=this._stops;if(t)for(var i=0,r=t.length;i<r;i++)t[i]._owner=k;for(i=0,r=(t=this._stops=z.readList(e,0,{clone:!0})).length;i<r;i++)t[i]._owner=this;this._changed()},getRadial:function(){return this._radial},setRadial:function(e){this._radial=e,this._changed()},equals:function(e){if(e===this)return!0;if(e&&this._class===e._class){var t=this._stops,i=e._stops,r=t.length;if(r===i.length){for(var l=0;l<r;l++)if(!t[l].equals(i[l]))return!1;return!0}}return!1}}),z=O.extend({_class:"GradientStop",initialize:function(e,t){var i=e,r=t;typeof e=="object"&&t===k&&(Array.isArray(e)&&typeof e[0]!="number"?(i=e[0],r=e[1]):("color"in e||"offset"in e||"rampPoint"in e)&&(i=e.color,r=e.offset||e.rampPoint||0)),this.setColor(i),this.setOffset(r)},clone:function(){return new z(this._color.clone(),this._offset)},_serialize:function(e,t){var i=this._color,r=this._offset;return O.serialize(r==null?[i]:[i,r],e,!0,t)},_changed:function(){this._owner&&this._owner._changed(129)},getOffset:function(){return this._offset},setOffset:function(e){this._offset=e,this._changed()},getRampPoint:"#getOffset",setRampPoint:"#setOffset",getColor:function(){return this._color},setColor:function(){St._setOwner(this._color,null),this._color=St._setOwner(St.read(arguments,0),this,"setColor"),this._changed()},equals:function(e){return e===this||e&&this._class===e._class&&this._color.equals(e._color)&&this._offset==e._offset||!1}}),se=O.extend(new function(){var e={fillColor:null,fillRule:"nonzero",strokeColor:null,strokeWidth:1,strokeCap:"butt",strokeJoin:"miter",strokeScaling:!0,miterLimit:10,dashOffset:0,dashArray:[],shadowColor:null,shadowBlur:0,shadowOffset:new Q,selectedColor:null},t=O.set({},e,{fontFamily:"sans-serif",fontWeight:"normal",fontSize:12,leading:null,justification:"left"}),i=O.set({},t,{fillColor:new St}),r={strokeWidth:193,strokeCap:193,strokeJoin:193,strokeScaling:201,miterLimit:193,fontFamily:9,fontWeight:9,fontSize:9,font:9,leading:9,justification:9},l={beans:!0},u={_class:"Style",beans:!0,initialize:function(f,m,g){this._values={},this._owner=m,this._project=m&&m._project||g||zt.project,this._defaults=!m||m instanceof Ot?t:m instanceof Bt?i:e,f&&this.set(f)}};return O.each(t,function(f,m){var g=/Color$/.test(m),x=m==="shadowOffset",S=O.capitalize(m),E=r[m],D="set"+S,F="get"+S;u[D]=function(H){var U,J=this._owner,j=J&&J._children,q=j&&0<j.length&&!(J instanceof Xt);if(q)for(var $=0,re=j.length;$<re;$++)j[$]._style[D](H);m!=="selectedColor"&&q||!(m in this._defaults)||(U=this._values[m])!==H&&(g&&(U&&(St._setOwner(U,null),U._canvasStyle=null),H&&H.constructor===St&&(H=St._setOwner(H,J,q&&D))),this._values[m]=H,J&&J._changed(E||129))},u[F]=function(H){var U,J=this._owner,j=J&&J._children,q=j&&0<j.length&&!(J instanceof Xt);if(q&&!H)for(var $=0,re=j.length;$<re;$++){var ae=j[$]._style[F]();if($){if(!O.equals(U,ae))return k}else U=ae}else m in this._defaults&&((U=this._values[m])===k?(U=this._defaults[m])&&U.clone&&(U=U.clone()):!(H=g?St:x?Q:null)||U&&U.constructor===H||(this._values[m]=U=H.read([U],0,{readNull:!0,clone:!0})));return U&&g?St._setOwner(U,J,q&&D):U},l[F]=function(H){return this._style[F](H)},l[D]=function(H){this._style[D](H)}}),O.each({Font:"FontFamily",WindingRule:"FillRule"},function(f,m){var g="get"+m;m="set"+m,u[g]=l[g]="#get"+f,u[m]=l[m]="#set"+f}),at.inject(l),u},{set:function(e){var t,i=e instanceof se,r=i?e._values:e;if(r)for(var l in r)l in this._defaults&&(t=r[l],this[l]=t&&i&&t.clone?t.clone():t)},equals:function(e){function t(i,r,l){var u,f=i._values,m=r._values,g=r._defaults;for(u in f){var x=f[u],S=m[u];if(!(l&&u in m||O.equals(x,S===k?g[u]:S)))return!1}return!0}return e===this||e&&this._class===e._class&&t(this,e)&&t(e,this,!0)||!1},_dispose:function(){var e=this.getFillColor();e&&(e._canvasStyle=null),(e=this.getStrokeColor())&&(e._canvasStyle=null),(e=this.getShadowColor())&&(e._canvasStyle=null)},hasFill:function(){var e=this.getFillColor();return!!e&&0<e.alpha},hasStroke:function(){var e=this.getStrokeColor();return!!e&&0<e.alpha&&0<this.getStrokeWidth()},hasShadow:function(){var e=this.getShadowColor();return!!e&&0<e.alpha&&(0<this.getShadowBlur()||!this.getShadowOffset().isZero())},getView:function(){return this._project._view},getFontStyle:function(){var e=this.getFontSize();return this.getFontWeight()+" "+e+(/[a-z]/i.test(e+"")?" ":"px ")+this.getFontFamily()},getFont:"#getFontFamily",setFont:"#setFontFamily",getLeading:function e(){var t=e.base.call(this),i=this.getFontSize();return/pt|em|%|px/.test(i)&&(i=this.getView().getPixelSize(i)),t??1.2*i}}),ye=new function(){function e(t,i,r,l){for(var u=["","webkit","moz","Moz","ms","o"],f=i[0].toUpperCase()+i.substring(1),m=0;m<6;m++){var g;if((g=(g=u[m])?g+f:i)in t){if(!r)return t[g];t[g]=l;break}}}return{getStyles:function(t){var i;return(i=(i=t&&t.nodeType!==9?t.ownerDocument:t)&&i.defaultView)&&i.getComputedStyle(t,"")},getBounds:function(t,i){var r,l=t.ownerDocument,u=l.body,f=l.documentElement;try{r=t.getBoundingClientRect()}catch{r={left:0,top:0,width:0,height:0}}var m=r.left-(f.clientLeft||u.clientLeft||0);return t=r.top-(f.clientTop||u.clientTop||0),i||(m+=(l=l.defaultView).pageXOffset||f.scrollLeft||u.scrollLeft,t+=l.pageYOffset||f.scrollTop||u.scrollTop),new ke(m,t,r.width,r.height)},getViewportBounds:function(t){t=(i=t.ownerDocument).defaultView;var i=i.documentElement;return new ke(0,0,t.innerWidth||i.clientWidth,t.innerHeight||i.clientHeight)},getOffset:function(t,i){return ye.getBounds(t,i).getPoint()},getSize:function(t){return ye.getBounds(t,!0).getSize()},isInvisible:function(t){return ye.getSize(t).equals(new Ne(0,0))},isInView:function(t){return!ye.isInvisible(t)&&ye.getViewportBounds(t).intersects(ye.getBounds(t,!0))},isInserted:function(t){return W.body.contains(t)},getPrefixed:function(t,i){return t&&e(t,i)},setPrefixed:function(t,i,r){if(typeof i=="object")for(var l in i)e(t,l,!0,i[l]);else e(t,i,!0,r)}}},ge={add:function(e,t){if(e)for(var i in t)for(var r=t[i],l=i.split(/[\s,]+/g),u=0,f=l.length;u<f;u++){var m=l[u];e.addEventListener(m,r,e===W&&(m==="touchstart"||m==="touchmove")&&{passive:!1})}},remove:function(e,t){if(e)for(var i in t)for(var r=t[i],l=i.split(/[\s,]+/g),u=0,f=l.length;u<f;u++)e.removeEventListener(l[u],r,!1)},getPoint:function(e){return e=e.targetTouches?(e.targetTouches.length?e.targetTouches:e.changedTouches)[0]:e,new Q(e.pageX||e.clientX+W.documentElement.scrollLeft,e.pageY||e.clientY+W.documentElement.scrollTop)},getTarget:function(e){return e.target||e.srcElement},getRelatedTarget:function(e){return e.relatedTarget||e.toElement},getOffset:function(e,t){return ge.getPoint(e).subtract(ye.getOffset(t||ge.getTarget(e)))}};ge.requestAnimationFrame=new function(){var e,t=ye.getPrefixed(G,"requestAnimationFrame"),i=!1,r=[];function l(){var u=r;r=[];for(var f=0,m=u.length;f<m;f++)u[f]();(i=t&&r.length)&&t(l)}return function(u){r.push(u),t?i||(t(l),i=!0):e=e||setInterval(l,16.666666666666668)}};var Ie,fe,nt,Ct,yt,rt,Lt,R=O.extend(ee,{_class:"View",initialize:function e(t,i){function r(S){return i[S]||parseInt(i.getAttribute(S),10)}function l(){var S=ye.getSize(i);return S.isNaN()||S.isZero()?new Ne(r("width"),r("height")):S}var u,f,m,g,x;G&&i?(this._id=i.getAttribute("id"),this._id==null&&i.setAttribute("id",this._id="paper-view-"+e._id++),ge.add(i,this._viewEvents),ye.setPrefixed(i.style,{userDrag:x="none",userSelect:x,touchCallout:x,contentZooming:x,tapHighlightColor:"rgba(0,0,0,0)"}),ve.hasAttribute(i,"resize")&&ge.add(G,(f=this)._windowEvents={resize:function(){f.setViewSize(l())}}),u=l(),ve.hasAttribute(i,"stats")&&typeof Stats<"u"&&(this._stats=new Stats,g=(m=this._stats.domElement).style,x=ye.getOffset(i),g.position="absolute",g.left=x.x+"px",g.top=x.y+"px",W.body.appendChild(m))):(u=new Ne(i),i=null),this._project=t,this._scope=t._scope,this._element=i,this._pixelRatio||(this._pixelRatio=G&&G.devicePixelRatio||1),this._setElementSize(u.width,u.height),this._viewSize=u,e._views.push(this),((e._viewsById[this._id]=this)._matrix=new ut)._owner=this,e._focused||(e._focused=this),this._frameItems={},this._frameItemCount=0,this._itemEvents={native:{},virtual:{}},this._autoUpdate=!zt.agent.node,this._needsUpdate=!1},remove:function(){if(!this._project)return!1;R._focused===this&&(R._focused=null),R._views.splice(R._views.indexOf(this),1),delete R._viewsById[this._id];var e=this._project;return e._view===this&&(e._view=null),ge.remove(this._element,this._viewEvents),ge.remove(G,this._windowEvents),this._element=this._project=null,this.off("frame"),this._animate=!1,this._frameItems={},!0},_events:O.each(at._itemHandlers.concat(["onResize","onKeyDown","onKeyUp"]),function(e){this[e]={}},{onFrame:{install:function(){this.play()},uninstall:function(){this.pause()}}}),_animate:!1,_time:0,_count:0,getAutoUpdate:function(){return this._autoUpdate},setAutoUpdate:function(e){(this._autoUpdate=e)&&this.requestUpdate()},update:function(){},draw:function(){this.update()},requestUpdate:function(){var e;this._requested||(e=this,ge.requestAnimationFrame(function(){var t;e._requested=!1,e._animate&&(e.requestUpdate(),t=e._element,ye.getPrefixed(W,"hidden")&&ve.getAttribute(t,"keepalive")!=="true"||!ye.isInView(t)||e._handleFrame()),e._autoUpdate&&e.update()}),this._requested=!0)},play:function(){this._animate=!0,this.requestUpdate()},pause:function(){this._animate=!1},_handleFrame:function(){zt=this._scope;var e=Date.now()/1e3,t=this._last?e-this._last:0;this._last=e,this.emit("frame",new O({delta:t,time:this._time+=t,count:this._count++})),this._stats&&this._stats.update()},_animateItem:function(e,t){var i=this._frameItems;t?(i[e._id]={item:e,time:0,count:0},++this._frameItemCount==1&&this.on("frame",this._handleFrameItems)):(delete i[e._id],--this._frameItemCount==0&&this.off("frame",this._handleFrameItems))},_handleFrameItems:function(e){for(var t in this._frameItems)(t=this._frameItems[t]).item.emit("frame",new O(e,{time:t.time+=e.delta,count:t.count++}))},_changed:function(){this._project._changed(4097),this._bounds=this._decomposed=k},getElement:function(){return this._element},getPixelRatio:function(){return this._pixelRatio},getResolution:function(){return 72*this._pixelRatio},getViewSize:function(){var e=this._viewSize;return new dt(e.width,e.height,this,"setViewSize")},setViewSize:function(){var e=Ne.read(arguments),t=e.subtract(this._viewSize);t.isZero()||(this._setElementSize(e.width,e.height),this._viewSize.set(e),this._changed(),this.emit("resize",{size:e,delta:t}),this._autoUpdate&&this.update())},_setElementSize:function(e,t){var i=this._element;i&&(i.width!==e&&(i.width=e),i.height!==t&&(i.height=t))},getBounds:function(){return this._bounds||(this._bounds=this._matrix.inverted()._transformBounds(new ke(new Q,this._viewSize))),this._bounds},getSize:function(){return this.getBounds().getSize()},isVisible:function(){return ye.isInView(this._element)},isInserted:function(){return ye.isInserted(this._element)},getPixelSize:function(e){var t,i,r=this._element;return r?(i=r.parentNode,(r=W.createElement("div")).style.fontSize=e,i.appendChild(r),t=parseFloat(ye.getStyles(r).fontSize),i.removeChild(r)):t=parseFloat(t),t},getTextWidth:function(e,t){return 0}},O.each(["rotate","scale","shear","skew"],function(e){var t=e==="rotate";this[e]=function(){var i=arguments,r=(t?O:Q).read(i);return i=Q.read(i,0,{readNull:!0}),this.transform(new ut()[e](r,i||this.getCenter(!0)))}},{_decompose:function(){return this._decomposed||(this._decomposed=this._matrix.decompose())},translate:function(){var e=new ut;return this.transform(e.translate.apply(e,arguments))},getCenter:function(){return this.getBounds().getCenter()},setCenter:function(){var e=Q.read(arguments);this.translate(this.getCenter().subtract(e))},getZoom:function(){var e=this._decompose().scaling;return(e.x+e.y)/2},setZoom:function(e){this.transform(new ut().scale(e/this.getZoom(),this.getCenter()))},getRotation:function(){return this._decompose().rotation},setRotation:function(e){var t=this.getRotation();t!=null&&e!=null&&this.rotate(e-t)},getScaling:function(){var e=this._decompose().scaling;return new vt(e.x,e.y,this,"setScaling")},setScaling:function(){var e=this.getScaling(),t=Q.read(arguments,0,{clone:!0,readNull:!0});e&&t&&this.scale(t.x/e.x,t.y/e.y)},getMatrix:function(){return this._matrix},setMatrix:function(){var e=this._matrix;e.set.apply(e,arguments)},transform:function(e){this._matrix.append(e)},scrollBy:function(){this.translate(Q.read(arguments).negate())}}),{projectToView:function(){return this._matrix._transformPoint(Q.read(arguments))},viewToProject:function(){return this._matrix._inverseTransform(Q.read(arguments))},getEventPoint:function(e){return this.viewToProject(ge.getOffset(e,this._element))}},{statics:{_views:[],_viewsById:{},_id:0,create:function(e,t){return W&&typeof t=="string"&&(t=W.getElementById(t)),new(G?B:R)(e,t)}}},new function(){if(G){var e,t,i,r,l,u=!1,f=!1;(g=G.navigator).pointerEnabled||g.msPointerEnabled?(i="pointerdown MSPointerDown",r="pointermove MSPointerMove",l="pointerup pointercancel MSPointerUp MSPointerCancel"):(i="touchstart",r="touchmove",l="touchend touchcancel","ontouchstart"in G&&g.userAgent.match(/mobile|tablet|ip(ad|hone|od)|android|silk/i)||(i+=" mousedown",r+=" mousemove",l+=" mouseup"));var m={},g={mouseout:function(_e){var oe,ue,De,Se=R._focused,He=ge.getRelatedTarget(_e);!Se||He&&He.nodeName!=="HTML"||(ue=(oe=ge.getOffset(_e,Se._element)).x,He=(De=Math.abs)(ue),oe.x=De(De=He-(1<<25))<He?De*(ue<0?-1:1):ue,Ce(Se,_e,Se.viewToProject(oe)))},scroll:be};m[i]=function(_e){var oe=R._focused=le(_e);u||(u=!0,oe._handleMouseEvent("mousedown",_e))},g[r]=function(_e){var oe,ue=R._focused;f||((oe=le(_e))?ue!==oe&&(ue&&Ce(ue,_e),e=e||ue,ue=R._focused=t=oe):t&&t===ue&&(e&&!e.isInserted()&&(e=null),ue=R._focused=e,e=null,be())),ue&&Ce(ue,_e)},g[i]=function(){f=!0},g[l]=function(_e){var oe=R._focused;oe&&u&&oe._handleMouseEvent("mouseup",_e),f=u=!1},ge.add(W,g),ge.add(G,{load:be});var x,S,E,D,F,H,U,J,j=!1,q=!1,$={doubleclick:"click",mousedrag:"mousemove"},re=!1,ae={mousedown:{mousedown:1,mousedrag:1,click:1,doubleclick:1},mouseup:{mouseup:1,mousedrag:1,click:1,doubleclick:1},mousemove:{mousedrag:1,mousemove:1,mouseenter:1,mouseleave:1}};return{_viewEvents:m,_handleMouseEvent:function(_e,oe,ue){var De=this._itemEvents,Se=De.native[_e],He=_e==="mousemove",Ze=this._scope.tool,tt=this;function lt(A){return De.virtual[A]||tt.responds(A)||Ze&&Ze.responds(A)}He&&u&&lt("mousedrag")&&(_e="mousedrag"),ue=ue||this.getEventPoint(oe);var M,s=this.getBounds().contains(ue),h=(M=Se&&s&&tt._project.hitTest(ue,{tolerance:0,fill:!0,stroke:!0}))&&M.item||null,p=!1;if((M={})[_e.substr(5)]=!0,Se&&h!==D&&(D&&xe(D,null,"mouseleave",oe,ue),h&&xe(h,null,"mouseenter",oe,ue),D=h),re^s&&(xe(this,null,s?"mouseenter":"mouseleave",oe,ue),p=!0),!s&&!M.drag||ue.equals(S)||(Oe(this,h,He?_e:"mousemove",oe,ue,S),p=!0),re=s,M.down&&s||M.up&&x){if(Oe(this,h,_e,oe,ue,x),M.down){if(J=h===H&&Date.now()-U<300,E=H=h,!q&&h){for(var b=h;b&&!b.responds("mousedrag");)b=b._parent;b&&(F=h)}x=ue}else M.up&&(q||h!==E||(U=Date.now(),Oe(this,h,J?"doubleclick":"click",oe,ue,x),J=!1),E=F=null);p=!(re=!1)}S=ue,p&&Ze&&(j=Ze._handleMouseEvent(_e,oe,ue,M)||j),oe.cancelable!==!1&&(j&&!M.move||M.down&&lt("mouseup"))&&oe.preventDefault()},_handleKeyEvent:function(_e,oe,ue,De){var Se,He=this._scope,Ze=He.tool;function tt(lt){lt.responds(_e)&&(zt=He,lt.emit(_e,Se=Se||new K(_e,oe,ue,De)))}this.isVisible()&&(tt(this),Ze&&Ze.responds(_e)&&tt(Ze))},_countItemEvent:function(_e,oe){var ue,De=(Se=this._itemEvents).native,Se=Se.virtual;for(ue in ae)De[ue]=(De[ue]||0)+(ae[ue][_e]||0)*oe;Se[_e]=(Se[_e]||0)+oe},statics:{updateFocus:be,_resetState:function(){u=f=j=re=!1,e=t=x=S=E=D=F=H=U=J=null}}}}function le(_e){return(_e=ge.getTarget(_e)).getAttribute&&R._viewsById[_e.getAttribute("id")]}function be(){var _e=R._focused;if(!_e||!_e.isVisible()){for(var oe=0,ue=R._views.length;oe<ue;oe++)if((_e=R._views[oe]).isVisible()){R._focused=t=_e;break}}}function Ce(_e,oe,ue){_e._handleMouseEvent("mousemove",oe,ue)}function xe(_e,oe,ue,De,Se,He,Ze){for(var tt,lt=!1;_e&&_e!==Ze&&!function M(s,h){if(s.responds(h)){if(tt=tt||new ze(h,De,Se,oe||s,He?Se.subtract(He):null),s.emit(h,tt)&&(j=!0,tt.prevented&&(q=!0),tt.stopped))return lt=!0}else if(h=$[h])return M(s,h)}(_e,ue);)_e=_e._parent;return lt}function Oe(_e,oe,ue,De,Se,He){return _e._project.removeOn(ue),q=j=!1,F&&xe(F,null,ue,De,Se,He)||oe&&oe!==F&&!oe.isDescendant(F)&&xe(oe,null,ue==="mousedrag"?"mousemove":ue,De,Se,He,F)||xe(_e,F||oe||_e,ue,De,Se,He)}}),B=R.extend({_class:"CanvasView",initialize:function(e,t){if(!(t instanceof G.HTMLCanvasElement)){var i=Ne.read(arguments,1);if(i.isZero())throw new Error("Cannot create CanvasView with the provided argument: "+O.slice(arguments,1));t=et.getCanvas(i)}var r=this._context=t.getContext("2d");r.save(),this._pixelRatio=1,/^off|false$/.test(ve.getAttribute(t,"hidpi"))||(i=G.devicePixelRatio||1,r=ye.getPrefixed(r,"backingStorePixelRatio")||1,this._pixelRatio=i/r),R.call(this,e,t),this._needsUpdate=!0},remove:function e(){return this._context.restore(),e.base.call(this)},_setElementSize:function e(t,i){var r,l,u=this._pixelRatio;e.base.call(this,t*u,i*u),u!==1&&(l=this._element,r=this._context,ve.hasAttribute(l,"resize")||((l=l.style).width=t+"px",l.height=i+"px"),r.restore(),r.save(),r.scale(u,u))},getContext:function(){return this._context},getPixelSize:function e(t){var i,r,l=zt.agent;return l&&l.firefox?i=e.base.call(this,t):(l=(r=this._context).font,r.font=t+" serif",i=parseFloat(r.font),r.font=l),i},getTextWidth:function(e,t){var i=this._context,r=i.font,l=0;i.font=e;for(var u=0,f=t.length;u<f;u++)l=Math.max(l,i.measureText(t[u]).width);return i.font=r,l},update:function(){if(!this._needsUpdate)return!1;var e=this._project,t=this._context,i=this._viewSize;return t.clearRect(0,0,i.width+1,i.height+1),e&&e.draw(t,this._matrix,this._pixelRatio),!(this._needsUpdate=!1)}}),V=O.extend({_class:"Event",initialize:function(e){this.event=e,this.type=e&&e.type},prevented:!1,stopped:!1,preventDefault:function(){this.prevented=!0,this.event.preventDefault()},stopPropagation:function(){this.stopped=!0,this.event.stopPropagation()},stop:function(){this.stopPropagation(),this.preventDefault()},getTimeStamp:function(){return this.event.timeStamp},getModifiers:function(){return Te.modifiers}}),K=V.extend({_class:"KeyEvent",initialize:function(e,t,i,r){this.type=e,this.event=t,this.key=i,this.character=r},toString:function(){return"{ type: '"+this.type+"', key: '"+this.key+"', character: '"+this.character+"', modifiers: "+this.getModifiers()+" }"}}),Te=new function(){var e,t,i={" ":"tab"," ":"space","\b":"backspace","":"delete",Spacebar:"space",Del:"delete",Win:"meta",Esc:"escape"},r={tab:" ",space:" ",enter:"\r"},l={},u={},f=new O({shift:!1,control:!1,alt:!1,meta:!1,capsLock:!1,space:!1}).inject({option:{get:function(){return this.alt}},command:{get:function(){var x=zt&&zt.agent;return x&&x.mac?this.meta:this.control}}});function m(x){var S=x.key||x.keyIdentifier;return S=/^U\+/.test(S)?String.fromCharCode(parseInt(S.substr(2),16)):/^Arrow[A-Z]/.test(S)?S.substr(5):S==="Unidentified"||S===k?String.fromCharCode(x.keyCode):S,i[S]||(1<S.length?O.hyphenate(S):S.toLowerCase())}function g(x,S,E,D){var F,H=R._focused;if((l[S]=x)?u[S]=E:delete u[S],1<S.length&&(F=O.camelize(S))in f){f[F]=x;var U=zt&&zt.agent;if(F==="meta"&&U&&U.mac)if(x)e={};else{for(var J in e)J in u&&g(!1,J,e[J],D);e=null}}else x&&e&&(e[S]=E);H&&H._handleKeyEvent(x?"keydown":"keyup",D,S,E)}return ge.add(W,{keydown:function(x){var S=m(x),E=zt&&zt.agent;1<S.length||E&&E.chrome&&(x.altKey||E.mac&&x.metaKey||!E.mac&&x.ctrlKey)?g(!0,S,r[S]||(1<S.length?"":S),x):t=S},keypress:function(x){var S,E;t&&(S=m(x),E=32<=(E=x.charCode)?String.fromCharCode(E):1<S.length?"":S,g(!0,S=S!==t?E.toLowerCase():S,E,x),t=null)},keyup:function(x){var S=m(x);S in u&&g(!1,S,u[S],x)}}),ge.add(G,{blur:function(x){for(var S in u)g(!1,S,u[S],x)}}),{modifiers:f,isDown:function(x){return!!l[x]}}},ze=V.extend({_class:"MouseEvent",initialize:function(e,t,i,r,l){this.type=e,this.event=t,this.point=i,this.target=r,this.delta=l},toString:function(){return"{ type: '"+this.type+"', point: "+this.point+", target: "+this.target+(this.delta?", delta: "+this.delta:"")+", modifiers: "+this.getModifiers()+" }"}}),ft=V.extend({_class:"ToolEvent",_item:null,initialize:function(e,t,i){this.tool=e,this.type=t,this.event=i},_choosePoint:function(e,t){return e||(t?t.clone():null)},getPoint:function(){return this._choosePoint(this._point,this.tool._point)},setPoint:function(e){this._point=e},getLastPoint:function(){return this._choosePoint(this._lastPoint,this.tool._lastPoint)},setLastPoint:function(e){this._lastPoint=e},getDownPoint:function(){return this._choosePoint(this._downPoint,this.tool._downPoint)},setDownPoint:function(e){this._downPoint=e},getMiddlePoint:function(){return!this._middlePoint&&this.tool._lastPoint?this.tool._point.add(this.tool._lastPoint).divide(2):this._middlePoint},setMiddlePoint:function(e){this._middlePoint=e},getDelta:function(){return!this._delta&&this.tool._lastPoint?this.tool._point.subtract(this.tool._lastPoint):this._delta},setDelta:function(e){this._delta=e},getCount:function(){return this.tool[/^mouse(down|up)$/.test(this.type)?"_downCount":"_moveCount"]},setCount:function(e){this.tool[/^mouse(down|up)$/.test(this.type)?"downCount":"count"]=e},getItem:function(){if(!this._item){var e=this.tool._scope.project.hitTest(this.getPoint());if(e){for(var t=e.item,i=t._parent;/^(Group|CompoundPath)$/.test(i._class);)i=(t=i)._parent;this._item=t}}return this._item},setItem:function(e){this._item=e},toString:function(){return"{ type: "+this.type+", point: "+this.getPoint()+", count: "+this.getCount()+", modifiers: "+this.getModifiers()+" }"}}),Ft=(we.extend({_class:"Tool",_list:"tools",_reference:"tool",_events:["onMouseDown","onMouseUp","onMouseDrag","onMouseMove","onActivate","onDeactivate","onEditOptions","onKeyDown","onKeyUp"],initialize:function(e){we.call(this),this._moveCount=-1,this._downCount=-1,this.set(e)},getMinDistance:function(){return this._minDistance},setMinDistance:function(e){(this._minDistance=e)!=null&&this._maxDistance!=null&&e>this._maxDistance&&(this._maxDistance=e)},getMaxDistance:function(){return this._maxDistance},setMaxDistance:function(e){this._maxDistance=e,this._minDistance!=null&&e!=null&&e<this._minDistance&&(this._minDistance=e)},getFixedDistance:function(){return this._minDistance==this._maxDistance?this._minDistance:null},setFixedDistance:function(e){this._minDistance=this._maxDistance=e},_handleMouseEvent:function(e,t,i,r){zt=this._scope,r.drag&&!this.responds(e)&&(e="mousemove");var l=r.move||r.drag,u=this.responds(e),f=this.minDistance,m=this.maxDistance,g=!1,x=this;function S(D,F){var H=i,U=l?x._point:x._downPoint||H;if(l){if(0<=x._moveCount&&H.equals(U))return;if(U&&(D!=null||F!=null)){var J=H.subtract(U),j=J.getLength();if(j<(D||0))return;F&&(H=U.add(J.normalize(Math.min(j,F))))}x._moveCount++}return x._point=H,x._lastPoint=U||H,r.down&&(x._moveCount=-1,x._downPoint=H,x._downCount++),1}function E(){u&&(g=x.emit(e,new ft(x,e,t))||g)}if(r.down)S(),E();else if(r.up)S(null,m),E();else if(u)for(;S(f,m);)E();return g}}),O.extend(ee,{_class:"Tween",statics:{easings:new O({linear:function(e){return e},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return e*(2-e)},easeInOutQuad:function(e){return e<.5?2*e*e:2*(2-e)*e-1},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return--e*e*e+1},easeInOutCubic:function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return 1- --e*e*e*e},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return 1+--e*e*e*e*e},easeInOutQuint:function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e}})},initialize:function e(t,i,r,l,u,f){this.object=t;var m=typeof u;t=m=="function",this.type=t?m:m=="string"?u:"linear",this.easing=t?u:e.easings[this.type],this.duration=l,this.running=!1,this._then=null,this._startTime=null,l=i||r,this._keys=l?Object.keys(l):[],this._parsedKeys=this._parseKeys(this._keys),this._from=l&&this._getState(i),this._to=l&&this._getState(r),f!==!1&&this.start()},then:function(e){return this._then=e,this},start:function(){return this._startTime=null,this.running=!0,this},stop:function(){return this.running=!1,this},update:function(e){if(this.running){let g=function(x){return typeof x=="function"?x(t,e):x};1<=e&&(this.running=!(e=1));for(var t=this.easing(e),i=this._keys,r=0,l=i&&i.length;r<l;r++){var u=i[r],f=g(this._from[u]),m=g(this._to[u]);f=f&&m&&f.__add&&m.__add?m.__subtract(f).__multiply(t).__add(f):(m-f)*t+f,this._setProperty(this._parsedKeys[u],f)}this.responds("update")&&this.emit("update",new O({progress:e,factor:t})),!this.running&&this._then&&this._then(this.object)}return this},_events:{onUpdate:{}},_handleFrame:function(e){var t=this._startTime,i=t?(e-t)/this.duration:0;t||(this._startTime=e),this.update(i)},_getState:function(e){for(var t=this._keys,i={},r=0,l=t.length;r<l;r++){var u,f=t[r],m=this._parsedKeys[f],g=this._getProperty(m);e?(u=this._resolveValue(g,e[f]),this._setProperty(m,u),u=(u=this._getProperty(m))&&u.clone?u.clone():u,this._setProperty(m,g)):u=g&&g.clone?g.clone():g,i[f]=u}return i},_resolveValue:function(e,t){if(t){if(Array.isArray(t)&&t.length===2){var i=t[0];return i&&i.match&&i.match(/^[+\-\*\/]=/)?this._calculate(e,i[0],t[1]):t}if(typeof t=="string"&&(i=t.match(/^[+\-*/]=(.*)/)))return i=JSON.parse(i[1].replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g,'"$2": ')),this._calculate(e,t[0],i)}return t},_calculate:function(e,t,i){return zt.PaperScript.calculateBinary(e,t,i)},_parseKeys:function(e){for(var t={},i=0,r=e.length;i<r;i++){var l=e[i],u=l.replace(/\.([^.]*)/g,"/$1").replace(/\[['"]?([^'"\]]*)['"]?\]/g,"/$1");t[l]=u.split("/")}return t},_getProperty:function(e,t){for(var i=this.object,r=0,l=e.length-(t||0);r<l&&i;r++)i=i[e[r]];return i},_setProperty:function(e,t){var i=this._getProperty(e,1);i&&(i[e[e.length-1]]=t)}})),et=O.exports.CanvasProvider={canvases:[],getCanvas:function(e,t,i){if(!G)return null;var r,l=!0;if(typeof e=="object"&&(t=e.height,e=e.width),this.canvases.length?r=this.canvases.pop():(r=W.createElement("canvas"),l=!1),!(i=r.getContext("2d",i||{})))throw new Error("Canvas "+r+" is unable to provide a 2D context.");return r.width===e&&r.height===t?l&&i.clearRect(0,0,e+1,t+1):(r.width=e,r.height=t),i.save(),r},getContext:function(e,t,i){return(t=this.getCanvas(e,t,i))?t.getContext("2d",i||{}):null},release:function(e){(e=e&&e.canvas?e.canvas:e)&&e.getContext&&(e.getContext("2d").restore(),this.canvases.push(e))}},_t=new function(){var e,t,i,r,l,u,f,m,g,x,S,E=Math.min,D=Math.max,F=Math.abs;function H(ae,le,be){return .2989*ae+.587*le+.114*be}function U(ae,le,be,Ce){var xe,Oe=Ce-H(ae,le,be);Ce=H(g=ae+Oe,x=le+Oe,S=be+Oe),be=E(g,x,S),Oe=D(g,x,S),be<0&&(g=Ce+(g-Ce)*Ce/(xe=Ce-be),x=Ce+(x-Ce)*Ce/xe,S=Ce+(S-Ce)*Ce/xe),255<Oe&&(g=Ce+(g-Ce)*(xe=255-Ce)/(Oe-=Ce),x=Ce+(x-Ce)*xe/Oe,S=Ce+(S-Ce)*xe/Oe)}function J(ae,le,be){return D(ae,le,be)-E(ae,le,be)}function j(ae,le,be,Ce){var xe=[ae,le,be],Oe=D(ae,le,be);be=E(ae,le,be),le=E(be=be===ae?0:be===le?1:2,Oe=Oe===ae?0:Oe===le?1:2)===0?D(be,Oe)===1?2:1:0,xe[Oe]>xe[be]?(xe[le]=(xe[le]-xe[be])*Ce/(xe[Oe]-xe[be]),xe[Oe]=Ce):xe[le]=xe[Oe]=0,xe[be]=0,g=xe[0],x=xe[1],S=xe[2]}var q={multiply:function(){g=l*e/255,x=u*t/255,S=f*i/255},screen:function(){g=l+e-l*e/255,x=u+t-u*t/255,S=f+i-f*i/255},overlay:function(){g=l<128?2*l*e/255:255-2*(255-l)*(255-e)/255,x=u<128?2*u*t/255:255-2*(255-u)*(255-t)/255,S=f<128?2*f*i/255:255-2*(255-f)*(255-i)/255},"soft-light":function(){var ae=e*l/255;g=ae+l*(255-(255-l)*(255-e)/255-ae)/255,x=(ae=t*u/255)+u*(255-(255-u)*(255-t)/255-ae)/255,S=(ae=i*f/255)+f*(255-(255-f)*(255-i)/255-ae)/255},"hard-light":function(){g=e<128?2*e*l/255:255-2*(255-e)*(255-l)/255,x=t<128?2*t*u/255:255-2*(255-t)*(255-u)/255,S=i<128?2*i*f/255:255-2*(255-i)*(255-f)/255},"color-dodge":function(){g=l===0?0:e===255?255:E(255,255*l/(255-e)),x=u===0?0:t===255?255:E(255,255*u/(255-t)),S=f===0?0:i===255?255:E(255,255*f/(255-i))},"color-burn":function(){g=l===255?255:e===0?0:D(0,255-255*(255-l)/e),x=u===255?255:t===0?0:D(0,255-255*(255-u)/t),S=f===255?255:i===0?0:D(0,255-255*(255-f)/i)},darken:function(){g=l<e?l:e,x=u<t?u:t,S=f<i?f:i},lighten:function(){g=e<l?l:e,x=t<u?u:t,S=i<f?f:i},difference:function(){(g=l-e)<0&&(g=-g),(x=u-t)<0&&(x=-x),(S=f-i)<0&&(S=-S)},exclusion:function(){g=l+e*(255-l-l)/255,x=u+t*(255-u-u)/255,S=f+i*(255-f-f)/255},hue:function(){j(e,t,i,J(l,u,f)),U(g,x,S,H(l,u,f))},saturation:function(){j(l,u,f,J(e,t,i)),U(g,x,S,H(l,u,f))},luminosity:function(){U(l,u,f,H(e,t,i))},color:function(){U(e,t,i,H(l,u,f))},add:function(){g=E(l+e,255),x=E(u+t,255),S=E(f+i,255)},subtract:function(){g=D(l-e,0),x=D(u-t,0),S=D(f-i,0)},average:function(){g=(l+e)/2,x=(u+t)/2,S=(f+i)/2},negation:function(){g=255-F(255-e-l),x=255-F(255-t-u),S=255-F(255-i-f)}},$=this.nativeModes=O.each(["source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","lighter","darker","copy","xor"],function(ae){this[ae]=!0},{}),re=et.getContext(1,1,{willReadFrequently:!0});re&&(O.each(q,function(ae,le){var be=le==="darken",Ce=!1;re.save();try{re.fillStyle=be?"#300":"#a00",re.fillRect(0,0,1,1),re.globalCompositeOperation=le,re.globalCompositeOperation===le&&(re.fillStyle=be?"#a00":"#300",re.fillRect(0,0,1,1),Ce=re.getImageData(0,0,1,1).data[0]!==be?170:51)}catch{}re.restore(),$[le]=Ce}),et.release(re)),this.process=function(ae,le,be,Ce,xe){var Oe=le.canvas,_e=ae==="normal";if(_e||$[ae])be.save(),be.setTransform(1,0,0,1,0,0),be.globalAlpha=Ce,_e||(be.globalCompositeOperation=ae),be.drawImage(Oe,xe.x,xe.y),be.restore();else{var oe=q[ae];if(oe){for(var ue=(ae=be.getImageData(xe.x,xe.y,Oe.width,Oe.height)).data,De=le.getImageData(0,0,Oe.width,Oe.height).data,Se=0,He=ue.length;Se<He;Se+=4){e=De[Se],l=ue[Se],t=De[Se+1],u=ue[Se+1],i=De[Se+2],f=ue[Se+2],r=De[Se+3],m=ue[Se+3],oe();var Ze=r*Ce/255,tt=1-Ze;ue[Se]=Ze*g+tt*l,ue[Se+1]=Ze*x+tt*u,ue[Se+2]=Ze*S+tt*f,ue[Se+3]=r*Ce+tt*m}be.putImageData(ae,xe.x,xe.y)}}}},Et=new function(){var e="http://www.w3.org/2000/svg",t="http://www.w3.org/2000/xmlns",i="http://www.w3.org/1999/xlink",r={href:i,xlink:t,xmlns:t+"/","xmlns:xlink":t+"/"};function l(u,f,m){for(var g in f){var x=f[g],S=r[g];typeof x=="number"&&m&&(x=m.number(x)),S?u.setAttributeNS(S,g,x):u.setAttribute(g,x)}return u}return{svg:e,xmlns:t,xlink:i,create:function(u,f,m){return l(W.createElementNS(e,u),f,m)},get:function(u,f){var m=r[f];return(f=m?u.getAttributeNS(m,f):u.getAttribute(f))==="null"?null:f},set:l}},ai=O.each({fillColor:["fill","color"],fillRule:["fill-rule","string"],strokeColor:["stroke","color"],strokeWidth:["stroke-width","number"],strokeCap:["stroke-linecap","string"],strokeJoin:["stroke-linejoin","string"],strokeScaling:["vector-effect","lookup",{true:"none",false:"non-scaling-stroke"},function(e,t){return!t&&(e instanceof Qt||e instanceof kt||e instanceof Bt)}],miterLimit:["stroke-miterlimit","number"],dashArray:["stroke-dasharray","array"],dashOffset:["stroke-dashoffset","number"],fontFamily:["font-family","string"],fontWeight:["font-weight","string"],fontSize:["font-size","number"],justification:["text-anchor","lookup",{left:"start",center:"middle",right:"end"}],opacity:["opacity","number"],blendMode:["mix-blend-mode","style"]},function(e,t){var i=O.capitalize(t),r=e[2];this[t]={type:e[1],property:t,attribute:e[0],toSVG:r,fromSVG:r&&O.each(r,function(l,u){this[l]=u},{}),exportFilter:e[3],get:"get"+i,set:"set"+i}},{});function li(e,t,i){var r,l,u=new O,f=e.getTranslation();return t&&(e.isInvertible()?(r=(e=e._shiftless())._inverseTransform(f),f=null):r=new Q,u[i?"cx":"x"]=r.x,u[i?"cy":"y"]=r.y),e.isIdentity()||((l=e.decompose())?(t=[],i=l.rotation,r=l.scaling,l=l.skewing,f&&!f.isZero()&&t.push("translate("+Ie.point(f)+")"),i&&t.push("rotate("+Ie.number(i)+")"),je.isZero(r.x-1)&&je.isZero(r.y-1)||t.push("scale("+Ie.point(r)+")"),l.x&&t.push("skewX("+Ie.number(l.x)+")"),l.y&&t.push("skewY("+Ie.number(l.y)+")"),u.transform=t.join(" ")):u.transform="matrix("+e.getValues().join(",")+")"),u}function fi(e,t){for(var i=li(e._matrix),r=e._children,l=Et.create("g",i,Ie),u=0,f=r.length;u<f;u++){var m,g=r[u],x=Si(g,t);x&&(g.isClipMask()?((m=Et.create("clipPath")).appendChild(x),Ei(g,m,"clip"),Et.set(l,{"clip-path":"url(#"+m.id+")"})):l.appendChild(x))}return l}function mi(e){var t,i=e._type,r=e._radius,l=li(e._matrix,!0,i!=="rectangle");return i==="rectangle"&&(i="rect",e=(t=e._size).width,t=t.height,l.x-=e/2,l.y-=t/2,l.width=e,l.height=t,r.isZero()&&(r=null)),r&&(i==="circle"?l.r=r:(l.rx=r.width,l.ry=r.height)),Et.create(i,l,Ie)}function Ci(e,t){return fe=fe||{ids:{},svgs:{}},e&&fe.svgs[t+"-"+(e._id||e.__id||(e.__id=xt.get("svg")))]}function Ei(e,t,i){fe||Ci();var r=fe.ids[i]=(fe.ids[i]||0)+1;t.id=i+"-"+r,fe.svgs[i+"-"+(e._id||e.__id)]=t}function Ti(e,t){var i=e,r=null;if(fe){for(var l in i=e.nodeName.toLowerCase()==="svg"&&e,fe.svgs)r||(i||(i=Et.create("svg")).appendChild(e),r=i.insertBefore(Et.create("defs"),i.firstChild)),r.appendChild(fe.svgs[l]);fe=null}return t.asString?new I.XMLSerializer().serializeToString(i):i}function Si(e,t,i){var r=nt[e._class],l=r&&r(e,t);return l&&((r=t.onExport)&&(l=r(e,l,t)||l),(t=JSON.stringify(e._data))&&t!=="{}"&&t!=="null"&&l.setAttribute("data-paper-data",t)),l&&function(u,f,m){var g={},x=!m&&u.getParent(),S=[];return u._name!=null&&(g.id=u._name),O.each(ai,function(E){var D=E.get,F=E.type,H=u[D]();(E.exportFilter?!E.exportFilter(u,H):x&&O.equals(x[D](),H))||(F!=="color"||H==null||(D=H.getAlpha())<1&&(g[E.attribute+"-opacity"]=D),F==="style"?S.push(E.attribute+": "+H):g[E.attribute]=H==null?"none":F==="color"?H.gradient?function(U){if(!(le=Ci(U,"color"))){var J,j,q=U.getGradient(),$=q._radial,re=U.getOrigin(),ae=U.getDestination();$?(J={cx:re.x,cy:re.y,r:re.getDistance(ae)},(j=U.getHighlight())&&(J.fx=j.x,J.fy=j.y)):J={x1:re.x,y1:re.y,x2:ae.x,y2:ae.y},J.gradientUnits="userSpaceOnUse";for(var le=Et.create(($?"radial":"linear")+"Gradient",J,Ie),be=q._stops,Ce=0,xe=be.length;Ce<xe;Ce++){var Oe,_e=(Oe=be[Ce])._color,oe=_e.getAlpha();J={offset:(Oe=Oe._offset)==null?Ce/(xe-1):Oe},_e&&(J["stop-color"]=_e.toCSS(!0)),oe<1&&(J["stop-opacity"]=oe),le.appendChild(Et.create("stop",J,Ie))}Ei(U,le,"color")}return"url(#"+le.id+")"}(H):H.toCSS(!0):F==="array"?H.join(","):F==="lookup"?E.toSVG[H]:H)}),S.length&&(g.style=S.join(";")),g.opacity===1&&delete g.opacity,u._visible||(g.visibility="hidden"),Et.set(f,g,Ie)}(e,l,i)}function vi(e){return Ie=new Ge((e=e||{}).precision),e}function di(e,t,i,r,l,u){return i=(u=Et.get(e,t)||u)==null?r?null:i?"":0:i?u:parseFloat(u),/%\s*$/.test(u)?i/100*(l?1:Ct[/x|^width/.test(t)?"width":"height"]):i}function ri(e,t,i,r,l,u,f){return t=di(e,t||"x",!1,r,l,u),i=di(e,i||"y",!1,r,l,f),!r||t!=null&&i!=null?new Q(t,i):null}function yi(e,t,i,r,l){return t=di(e,t||"width",!1,r,l),i=di(e,i||"height",!1,r,l),!r||t!=null&&i!=null?new Ne(t,i):null}function Di(e,t,i){return e==="none"?null:t==="number"?parseFloat(e):t==="array"?e?e.split(/[\s,]+/g).map(parseFloat):[]:t==="color"?Fi(e)||e:t==="lookup"?i[e]:e}function wi(e,t,i,r){var l=e.childNodes,u=t==="clippath",f=t==="defs",m=new Ot,g=m._project,x=(t=g._currentStyle,[]);if(u||f||(m=Pi(m,e,r),g._currentStyle=m._style.clone()),r)for(var S=e.querySelectorAll("defs"),E=0,D=S.length;E<D;E++)Ii(S[E],i,!1);for(E=0,D=l.length;E<D;E++){var F,H=l[E];H.nodeType!==1||/^defs$/i.test(H.nodeName)||!(F=Ii(H,i,!1))||F instanceof mt||x.push(F)}return m.addChildren(x),u&&(m=Pi(m.reduce(),e,r)),g._currentStyle=t,(u||f)&&(m.remove(),m=null),m}function zi(e,t){for(var i=e.getAttribute("points").match(/[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g),r=[],l=0,u=i.length;l<u;l+=2)r.push(new Q(parseFloat(i[l]),parseFloat(i[l+1])));return e=new It(r),t==="polygon"&&e.closePath(),e}function Oi(e,t){var i;if(t=t==="radialgradient",E=(di(e,"href",!0)||"").substring(1))(i=yt[E].getGradient())._radial^t&&((i=i.clone())._radial=t);else{for(var r=e.childNodes,l=[],u=0,f=r.length;u<f;u++){var m=r[u];m.nodeType===1&&l.push(Pi(new z,m))}i=new C(l,t)}var g,x,S,E=di(e,"gradientUnits",!0)!=="userSpaceOnUse";return t?(x=(g=ri(e,"cx","cy",!1,E,"50%","50%")).add(di(e,"r",!1,!1,E,"50%"),0),S=ri(e,"fx","fy",!0,E)):(g=ri(e,"x1","y1",!1,E,"0%","0%"),x=ri(e,"x2","y2",!1,E,"100%","0%")),Pi(new St(i,g,x,S),e)._scaleToBounds=E,null}function Bi(e,t,i,r){if(e.transform){for(var l=(r.getAttribute(i)||"").split(/\)\s*/g),u=new ut,f=0,m=l.length;f<m&&(x=l[f]);f++){for(var g=x.split(/\(\s*/),x=g[0],S=g[1].split(/[\s,]+/g),E=0,D=S.length;E<D;E++)S[E]=parseFloat(S[E]);switch(x){case"matrix":u.append(new ut(S[0],S[1],S[2],S[3],S[4],S[5]));break;case"rotate":u.rotate(S[0],S[1]||0,S[2]||0);break;case"translate":u.translate(S[0],S[1]||0);break;case"scale":u.scale(S);break;case"skewX":u.skew(S[0],0);break;case"skewY":u.skew(0,S[0])}}e.transform(u)}}function Hi(e,t,i){(i=e[i=i==="fill-opacity"?"getFillColor":"getStrokeColor"]&&e[i]())&&i.setAlpha(parseFloat(t))}function ki(e,t,i){var r;return!(r=(r=e.attributes[t])&&r.value)&&e.style&&(t=O.camelize(t),(r=e.style[t])||i.node[t]===i.parent[t]||(r=i.node[t])),r?r==="none"?null:r:k}function Pi(e,t,i){var r=t.parentNode,l={node:ye.getStyles(t)||{},parent:!i&&!/^defs$/i.test(r.tagName)&&ye.getStyles(r)||{}};return O.each(Lt,function(u,f){var m=ki(t,f,l);e=m!==k&&u(e,m,f,t,l)||e}),e}function Fi(e){return(e=(e=(e=e&&e.match(/\((?:["'#]*)([^"')]+)/))&&e[1])&&yt[G?e.replace(G.location.href.split("#")[0]+"#",""):e])&&e._scaleToBounds&&((e=e.clone())._scaleToBounds=!0),e}function Ii(e,t,i){var r,l,u,f=(D=e.nodeName.toLowerCase())!=="#document",m=W.body;i&&f&&(Ct=zt.getView().getSize(),Ct=yi(e,null,null,!0)||Ct,r=Et.create("svg",{style:"stroke-width: 1px; stroke-miterlimit: 10"}),l=e.parentNode,u=e.nextSibling,r.appendChild(e),m.appendChild(r));var g=zt.settings,x=g.applyMatrix,S=g.insertItems;g.applyMatrix=!1,g.insertItems=!1;var E=rt[D],D=E&&E(e,D,t,i)||null;return g.insertItems=S,g.applyMatrix=x,D&&(!f||D instanceof Ot||(D=Pi(D,e,i)),g=t.onImport,f=f&&e.getAttribute("data-paper-data"),g&&(D=g(e,D,t)||D),t.expandShapes&&D instanceof kt&&(D.remove(),D=D.toPath()),f&&(D._data=JSON.parse(f))),r&&(m.removeChild(r),l&&(u?l.insertBefore(e,u):l.appendChild(e))),i&&(yt={},D&&O.pick(t.applyMatrix,x)&&D.matrix.apply(!0,!0)),D}function ji(e,t,i){if(!e)return null;t=typeof t=="function"?{onLoad:t}:t||{};var r=zt,l=null;function u(x){try{var S=typeof x=="object"?x:new I.DOMParser().parseFromString(x.trim(),"image/svg+xml");if(!S.nodeName)throw S=null,new Error("Unsupported SVG source: "+e);zt=r,l=Ii(S,t,!0),t&&t.insert===!1||i._insertItem(k,l);var E=t.onLoad;E&&E(l,x)}catch(D){f(D)}}function f(x,S){var E=t.onError;if(!E)throw new Error(x);E(x,S)}if(typeof e!="string"||/^[\s\S]*</.test(e)){if(typeof File<"u"&&e instanceof File){var m=new FileReader;return m.onload=function(){u(m.result)},m.onerror=function(){f(m.error)},m.readAsText(e)}u(e)}else{var g=W.getElementById(e);g?u(g):function(x){var S=new I.XMLHttpRequest;S.open((x.method||"get").toUpperCase(),x.url,O.pick(x.async,!0)),x.mimeType&&S.overrideMimeType(x.mimeType),S.onload=function(){var E=S.status;E===0||E===200?x.onLoad&&x.onLoad.call(S,S.responseText):S.onerror()},S.onerror=function(){var E=S.status,D='Could not load "'+x.url+'" (Status: '+E+")";if(!x.onError)throw new Error(D);x.onError(D,E)},S.send(null)}({url:e,async:!0,onLoad:u,onError:f})}return l}nt={Group:fi,Layer:fi,Raster:function(e,t){var i=li(e._matrix,!0),r=e.getSize(),l=e.getImage();return i.x-=r.width/2,i.y-=r.height/2,i.width=r.width,i.height=r.height,i.href=t.embedImages==0&&l&&l.src||e.toDataURL(),Et.create("image",i,Ie)},Path:function(e,t){var i=t.matchShapes;if(i){var r=e.toShape(!1);if(r)return mi(r)}var l=e._segments,u=l.length,f=li(e._matrix);if(i&&2<=u&&!e.hasHandles())if(2<u){for(var m=e._closed?"polygon":"polyline",g=[],x=0;x<u;x++)g.push(Ie.point(l[x]._point));f.points=g.join(" ")}else m="line",r=l[0]._point,i=l[1]._point,f.set({x1:r.x,y1:r.y,x2:i.x,y2:i.y});else m="path",f.d=e.getPathData(null,t.precision);return Et.create(m,f,Ie)},Shape:mi,CompoundPath:function(e,t){var i=li(e._matrix);return(t=e.getPathData(null,t.precision))&&(i.d=t),Et.create("path",i,Ie)},SymbolItem:function(e,t){var i=li(e._matrix,!0),r=e._definition,l=Ci(r,"symbol"),u=r._item;return e=u.getStrokeBounds(),l||((l=Et.create("symbol",{viewBox:Ie.rectangle(e)})).appendChild(Si(u,t)),Ei(r,l,"symbol")),i.href="#"+l.id,i.x+=e.x,i.y+=e.y,i.width=e.width,i.height=e.height,i.overflow="visible",Et.create("use",i,Ie)},PointText:function(e){var t=Et.create("text",li(e._matrix,!0),Ie);return t.textContent=e._content,t}},at.inject({exportSVG:function(e){return Ti(Si(this,e=vi(e),!0),e)}}),jt.inject({exportSVG:function(e){e=vi(e);var t=this._children,i=this.getView(),r=O.pick(e.bounds,"view"),l=(l=e.matrix||r==="view"&&i._matrix)&&ut.read([l]);i=r==="view"?new ke([0,0],i.getViewSize()):r==="content"?at._getBounds(t,l,{stroke:!0}).rect:ke.read([r],0,{readNull:!0}),r={version:"1.1",xmlns:Et.svg,"xmlns:xlink":Et.xlink},i&&(r.width=i.width,r.height=i.height,(i.x||i.x===0||i.y||i.y===0)&&(r.viewBox=Ie.rectangle(i)));var u=r=Et.create("svg",r,Ie);l&&!l.isIdentity()&&(u=r.appendChild(Et.create("g",li(l),Ie)));for(var f=0,m=t.length;f<m;f++)u.appendChild(Si(t[f],e,!0));return Ti(r,e)}}),yt={},rt={"#document":function(e,t,i,r){for(var l=e.childNodes,u=0,f=l.length;u<f;u++){var m=l[u];if(m.nodeType===1)return Ii(m,i,r)}},g:wi,svg:wi,clippath:wi,polygon:zi,polyline:zi,path:function(e){return Qt.create(e.getAttribute("d"))},lineargradient:Oi,radialgradient:Oi,image:function(e){var t=new ei(di(e,"href",!0));return t.on("load",function(){var i=yi(e);this.setSize(i),i=ri(e).add(i.divide(2)),this._matrix.append(new ut().translate(i))}),t},symbol:function(e,t,i,r){return new mt(wi(e,t,i,r),!0)},defs:wi,use:function(e){var t=(di(e,"href",!0)||"").substring(1);return t=yt[t],e=ri(e),t?t instanceof mt?t.place(e):t.clone().translate(e):null},circle:function(e){return new kt.Circle(ri(e,"cx","cy"),di(e,"r"))},ellipse:function(e){return new kt.Ellipse({center:ri(e,"cx","cy"),radius:yi(e,"rx","ry")})},rect:function(e){return new kt.Rectangle(new ke(ri(e),yi(e)),yi(e,"rx","ry"))},line:function(e){return new It.Line(ri(e,"x1","y1"),ri(e,"x2","y2"))},text:function(e){var t=new At(ri(e).add(ri(e,"dx","dy")));return t.setContent(e.textContent.trim()||""),t},switch:wi},Lt=O.set(O.each(ai,function(e){this[e.attribute]=function(t,i){t[e.set]&&(t[e.set](Di(i,e.type,e.fromSVG)),e.type!=="color"||(i=t[e.get]())&&i._scaleToBounds&&(t=t.getBounds(),i.transform(new ut().translate(t.getPoint()).scale(t.getSize()))))}},{}),{id:function(e,t){(yt[t]=e).setName&&e.setName(t)},"clip-path":function(e,t){if(t=Fi(t)){if((t=t.clone()).setClipMask(!0),!(e instanceof Ot))return new Ot(t,e);e.insertChild(0,t)}},gradientTransform:Bi,transform:Bi,"fill-opacity":Hi,"stroke-opacity":Hi,visibility:function(e,t){e.setVisible&&e.setVisible(t==="visible")},display:function(e,t){e.setVisible&&e.setVisible(t!==null)},"stop-color":function(e,t){e.setColor&&e.setColor(t)},"stop-opacity":function(e,t){e._color&&e._color.setAlpha(parseFloat(t))},offset:function(e,t){var i;e.setOffset&&(i=t.match(/(.*)%$/),e.setOffset(i?i[1]/100:parseFloat(t)))},viewBox:function(e,t,i,r,l){var u,f,m=new ke(Di(t,"array"));t=yi(r,null,null,!0),e instanceof Ot?(f=t?t.divide(m.getSize()):1,u=new ut().scale(f).translate(m.getPoint().negate()),f=e):e instanceof mt&&(t&&m.setSize(t),f=e._item),f&&(ki(r,"overflow",l)!=="visible"&&((m=new kt.Rectangle(m)).setClipMask(!0),f.addChild(m)),u&&f.transform(u))}}),at.inject({importSVG:function(e,t){return ji(e,t,this)}}),jt.inject({importSVG:function(e,t){return this.activate(),ji(e,t,this)}});var zt=new(ve.inject(O.exports,{Base:O,Numerical:je,Key:Te,DomEvent:ge,DomElement:ye,document:W,window:G,Symbol:mt,PlacedSymbol:ti}));return zt.agent.node&&w(999)(zt),(T=typeof(_=zt)=="function"?_.call(a,w,a,y):_)!==void 0&&(y.exports=T),zt}).call(this,typeof self=="object"?self:null)},72:y=>{var a=[];function w(I){for(var k=-1,G=0;G<a.length;G++)if(a[G].identifier===I){k=G;break}return k}function _(I,k){for(var G={},W=[],O=0;O<I.length;O++){var ee=I[O],ve=k.base?ee[0]+k.base:ee[0],we=G[ve]||0,ot="".concat(ve," ").concat(we);G[ve]=we+1;var Ge=w(ot),je={css:ee[1],media:ee[2],sourceMap:ee[3],supports:ee[4],layer:ee[5]};if(Ge!==-1)a[Ge].references++,a[Ge].updater(je);else{var xt=T(je,k);k.byIndex=O,a.splice(O,0,{identifier:ot,updater:xt,references:1})}W.push(ot)}return W}function T(I,k){var G=k.domAPI(k);return G.update(I),function(W){if(W){if(W.css===I.css&&W.media===I.media&&W.sourceMap===I.sourceMap&&W.supports===I.supports&&W.layer===I.layer)return;G.update(I=W)}else G.remove()}}y.exports=function(I,k){var G=_(I=I||[],k=k||{});return function(W){W=W||[];for(var O=0;O<G.length;O++){var ee=w(G[O]);a[ee].references--}for(var ve=_(W,k),we=0;we<G.length;we++){var ot=w(G[we]);a[ot].references===0&&(a[ot].updater(),a.splice(ot,1))}G=ve}}},659:y=>{var a={};y.exports=function(w,_){var T=function(I){if(a[I]===void 0){var k=document.querySelector(I);if(window.HTMLIFrameElement&&k instanceof window.HTMLIFrameElement)try{k=k.contentDocument.head}catch{k=null}a[I]=k}return a[I]}(w);if(!T)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");T.appendChild(_)}},540:y=>{y.exports=function(a){var w=document.createElement("style");return a.setAttributes(w,a.attributes),a.insert(w,a.options),w}},56:(y,a,w)=>{y.exports=function(_){var T=w.nc;T&&_.setAttribute("nonce",T)}},825:y=>{y.exports=function(a){if(typeof document>"u")return{update:function(){},remove:function(){}};var w=a.insertStyleElement(a);return{update:function(_){(function(T,I,k){var G="";k.supports&&(G+="@supports (".concat(k.supports,") {")),k.media&&(G+="@media ".concat(k.media," {"));var W=k.layer!==void 0;W&&(G+="@layer".concat(k.layer.length>0?" ".concat(k.layer):""," {")),G+=k.css,W&&(G+="}"),k.media&&(G+="}"),k.supports&&(G+="}");var O=k.sourceMap;O&&typeof btoa<"u"&&(G+=`
1522
- /*# sourceMappingURL=data:application/json;base64,`.concat(btoa(unescape(encodeURIComponent(JSON.stringify(O))))," */")),I.styleTagTransform(G,T,I.options)})(w,a,_)},remove:function(){(function(_){if(_.parentNode===null)return!1;_.parentNode.removeChild(_)})(w)}}}},113:y=>{y.exports=function(a,w){if(w.styleSheet)w.styleSheet.cssText=a;else{for(;w.firstChild;)w.removeChild(w.firstChild);w.appendChild(document.createTextNode(a))}}},906:y=>{y.exports=n},999:()=>{},965:()=>{}},d={};function c(y){var a=d[y];if(a!==void 0)return a.exports;var w=d[y]={id:y,exports:{}};return o[y].call(w.exports,w,w.exports,c),w.exports}c.n=y=>{var a=y&&y.__esModule?()=>y.default:()=>y;return c.d(a,{a}),a},c.d=(y,a)=>{for(var w in a)c.o(a,w)&&!c.o(y,w)&&Object.defineProperty(y,w,{enumerable:!0,get:a[w]})},c.o=(y,a)=>Object.prototype.hasOwnProperty.call(y,a),c.r=y=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(y,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(y,"__esModule",{value:!0})},c.nc=void 0;var v={};return(()=>{c.r(v),c.d(v,{AnnotationToolbar:()=>vi,AnnotationToolkit:()=>Ce,AnnotationUITool:()=>dt,BrushTool:()=>ge,DefaultTool:()=>at,EllipseTool:()=>Ft,FeatureCollectionUI:()=>Oi,FeatureUI:()=>yi,FileDialog:()=>ki,LayerUI:()=>Bi,LinestringTool:()=>ai,OSDPaperjsAnnotation:()=>lt,PaperOffset:()=>ye,PaperOverlay:()=>F,PointTextTool:()=>K,PointTool:()=>R,PolygonTool:()=>_t,RasterTool:()=>Ti,RectangleTool:()=>ze,RotationControlOverlay:()=>xe,ScreenshotOverlay:()=>Ze,SelectTool:()=>fi,StyleTool:()=>Jt,ToolBase:()=>vt,TransformTool:()=>Ci,WandTool:()=>ni});let y=c(906),a=c(292);var w=c(72),_=c.n(w),T=c(825),I=c.n(T),k=c(659),G=c.n(k),W=c(56),O=c.n(W),ee=c(540),ve=c.n(ee),we=c(113),ot=c.n(we),Ge=c(676),je={};je.styleTagTransform=ot(),je.setAttributes=O(),je.insert=G().bind(null,"head"),je.domAPI=I(),je.insertStyleElement=ve(),_()(Ge.A,je),Ge.A&&Ge.A.locals&&Ge.A.locals;var xt=c(946),Q={};Q.styleTagTransform=ot(),Q.setAttributes=O(),Q.insert=G().bind(null,"head"),Q.domAPI=I(),Q.insertStyleElement=ve(),_()(xt.A,Q),xt.A&&xt.A.locals&&xt.A.locals;class vt{constructor(s){let h;this.project={getZoom:()=>s.view.getZoom(),toolLayer:s.project.layers.toolLayer||s.project.activeLayer,paperScope:s,overlay:s.overlay};let p=this;this._identityMatrix=new s.Matrix,this.extensions={onActivate:()=>{},onDeactivate:()=>{}},this.tool=new s.Tool,this.tool._toolObject=this,this.tool.extensions={onKeyUp:()=>{},onKeyDown:()=>{}},this.tool.onKeyDown=function(b){h||b.key!=="shift"||(h=!0,p.onDeactivate()),this.extensions.onKeyDown(b),p.onKeyDown(b)},this.tool.onKeyUp=function(b){b.key=="shift"&&(h=!1,p.onActivate()),this.extensions.onKeyUp(b),p.onKeyUp(b)},this.tool.onMouseDown=b=>{this.onMouseDown(b)},this.tool.onMouseDrag=b=>{this.onMouseDrag(b)},this.tool.onMouseMove=b=>{this.onMouseMove(b)},this.tool.onMouseUp=b=>{this.onMouseUp(b)},this.listeners={}}getTolerance(s,h=null){return h||(h=this.item),s/((h==null?void 0:h.layer.scaling.x)||1)/this.project.getZoom()}isActive(){return this._active}activate(){this.tool.activate(),this.onActivate()}deactivate(s){this.onDeactivate(s)}onActivate(){this.captureUserInput(!0),this.project.overlay.addEventListener("wheel",this.tool.onMouseWheel),this.project.toolLayer.bringToFront(),this.extensions.onActivate()}onDeactivate(s=!1){this.captureUserInput(!1),this.project.overlay.removeEventListener("wheel",this.tool.onMouseWheel),this.project.toolLayer.sendToBack(),this.extensions.onDeactivate(s)}addEventListener(s,h){this.listeners[s]=this.listeners[s]||[],this.listeners[s].push(h)}broadcast(s,...h){let p=this.listeners[s];p&&p.forEach(b=>b(...h))}captureUserInput(s=!0){this.project.overlay.setOSDMouseNavEnabled(!s)}onMouseDown(){}onMouseMove(){}onMouseDrag(){}onMouseUp(){}onKeyDown(){}onKeyUp(){}}class Ne{constructor(){}getSqDist(s,h){var p=s.x-h.x,b=s.y-h.y;return p*p+b*b}getSqSegDist(s,h,p){var b=h.x,A=h.y,P=p.x-b,L=p.y-A;if(P!==0||L!==0){var N=((s.x-b)*P+(s.y-A)*L)/(P*P+L*L);N>1?(b=p.x,A=p.y):N>0&&(b+=P*N,A+=L*N)}return(P=s.x-b)*P+(L=s.y-A)*L}simplifyRadialDist(s,h){for(var p,b=s[0],A=[b],P=1,L=s.length;P<L;P++)p=s[P],this.getSqDist(p,b)>h&&(A.push(p),b=p);return b!==p&&A.push(p),A}simplifyDPStep(s,h,p,b,A){for(var P,L=b,N=h+1;N<p;N++){var Y=this.getSqSegDist(s[N],s[h],s[p]);Y>L&&(P=N,L=Y)}L>b&&(P-h>1&&this.simplifyDPStep(s,h,P,b,A),A.push(s[P]),p-P>1&&this.simplifyDPStep(s,P,p,b,A))}simplifyDouglasPeucker(s,h){var p=s.length-1,b=[s[0]];return this.simplifyDPStep(s,0,p,h,b),b.push(s[p]),b}simplify(s,h,p){if(s.length<=2)return s;var b=h!==void 0?h*h:1;return s=p?s:this.simplifyRadialDist(s,b),this.simplifyDouglasPeucker(s,b)}}class dt extends vt{constructor(s){super(s),this._active=!1,this._items=[],this._item=null,this.simplifier=new Ne,this.tool.onMouseDown=h=>{this.onMouseDown(this._transformEvent(h))},this.tool.onMouseDrag=h=>{this.onMouseDrag(this._transformEvent(h))},this.tool.onMouseMove=h=>{this.onMouseMove(this._transformEvent(h))},this.tool.onMouseUp=h=>{this.onMouseUp(this._transformEvent(h))}}isActive(){return this._active}activate(){if(this._active)return;this._active=!0,this.getSelectedItems(),this._setTargetLayer();let s=this.project.paperScope.getActiveTool();this.tool.activate(),this.toolbarControl.activate(),s&&s!=this&&s.deactivate(!0),this.raiseCanvasZIndex(),this.onActivate(),this.broadcast("activated",{target:this})}deactivate(s){this._active&&(this._active=!1,this.toolbarControl.deactivate(),this.resetCanvasZIndex(),this.onDeactivate(s),this.broadcast("deactivated",{target:this}))}raiseCanvasZIndex(){const s=this.project.paperScope.overlay.viewer,h=s.canvas;this._canvasPriorZIndex=window.getComputedStyle(h)["z-index"];const p=Array.from(s.canvas.parentElement.children).filter(A=>A!==h),b=Math.max(...p.map(A=>{const P=window.getComputedStyle(A)["z-index"];return P==="auto"?0:parseInt(P)}));h.style["z-index"]=b+1}resetCanvasZIndex(){this.project.paperScope.overlay.viewer.canvas.style["z-index"]=this._canvasPriorZIndex}getToolbarControl(){return this.toolbarControl}setToolbarControl(s){return this.toolbarControl=s,this.toolbarControl}refreshItems(){return this.getSelectedItems()}getSelectedItems(){this._items=this.project.paperScope.findSelectedItems(),this._itemToCreate=this.project.paperScope.findSelectedNewItem()}selectionChanged(){this.getSelectedItems(),this._setTargetLayer(),this.onSelectionChanged()}onSelectionChanged(){}get items(){return this._items}get item(){return this._items.length==1?this._items[0]:null}get itemToCreate(){return this._itemToCreate}get targetLayer(){return this._targetLayer}get targetMatrix(){return this.targetLayer?this.targetLayer.matrix:this._identityMatrix}doSimplify(s){s&&!Array.isArray(s)&&(s=[s]),s||(s=this.items);for(const h of s){let p=10/this.project.getZoom(),b=2.5/this.project.getZoom();const A=h.clone();let P=[];(A.children||[A]).forEach(N=>{let Y=N.segments.map(Z=>(Z.point.subtract(Z.previous.point).length<p&&Z.point.subtract(Z.next.point).length<p&&(Z.point.x=(Z.point.x+Z.previous.point.x+Z.next.point.x)/3,Z.point.y=(Z.point.y+Z.previous.point.y+Z.next.point.y)/3),Z.point));Y.push(Y[0]);let X=this.simplifier.simplify(Y,b,!0);N.segments=X,(N.segments.length<3||Math.abs(N.area)<b*b)&&P.push(N)}),P.forEach(N=>N.remove());let L=A.unite(A,{insert:!1}).reduce().toCompoundPath();if(A._children?(A.removeChildren(),A.addChildren(L.children)):A.setSegments(L.children[0].segments),!h.isBoundingElement){let N=h.parent.children.filter(Y=>Y.isBoundingElement);A.applyBounds(N)}L.remove(),h._children?(h.removeChildren(),h.addChildren(A.children)):h.setSegments(A.segments),A.remove()}}_setTargetLayer(){if(this.item)this._targetLayer=this.item.layer;else if(this.itemToCreate)this._targetLayer=this.itemToCreate.layer;else if(this.items){let s=new Set(this.items.map(h=>h.layer));s.size===1?this._targetLayer=s.values().next().value:this._targetLayer=this.project.overlay.viewer.viewport.paperLayer}else this._targetLayer=this.project.paperScope.project.activeLayer}_transformEvent(s){let h=this.targetMatrix,p={point:h.inverseTransform(s.point),downPoint:h.inverseTransform(s.downPoint),lastPoint:h.inverseTransform(s.lastPoint),middlePoint:h.inverseTransform(s.middlePoint)},b=s.point.subtract(s.delta);return p.delta=p.point.subtract(h.inverseTransform(b)),s.original={point:s.point,downPoint:s.downPoint,lastPoint:s.lastPoint,middlePoint:s.middlePoint,delta:s.delta},Object.assign(s,p),s}}class ke{constructor(s){this._active=!1;let h=document.createElement("button");h.classList.add("btn","invisible"),h.textContent="Generic Tool",this.button=new y.Button({tooltip:"Generic Tool",element:h,onClick:function(p){p.eventSource.element.disabled||(s._active?s.deactivate(!0):s.activate())}}),this.button.configure=function(p,b){this.element.title=b,this.element.replaceChildren(p),this.element.classList.remove("invisible"),this.tooltip=b},this.dropdown=document.createElement("div"),this.dropdown.classList.add("dropdown"),this.tool=s}isEnabledForMode(s){return!1}activate(){this._active||(this._active=!0,this.button.element.classList.add("active"),this.dropdown.classList.add("active"))}deactivate(s){this._active&&(this._active=!1,this.button.element.classList.remove("active"),this.dropdown.classList.remove("active"))}}const Dt={"fa-pen-nib":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M368.4 18.3L312.7 74.1 437.9 199.3l55.7-55.7c21.9-21.9 21.9-57.3 0-79.2L447.6 18.3c-21.9-21.9-57.3-21.9-79.2 0zM288 94.6l-9.2 2.8L134.7 140.6c-19.9 6-35.7 21.2-42.3 41L3.8 445.8c-3.8 11.3-1 23.9 7.3 32.4L164.7 324.7c-3-6.3-4.7-13.3-4.7-20.7c0-26.5 21.5-48 48-48s48 21.5 48 48s-21.5 48-48 48c-7.4 0-14.4-1.7-20.7-4.7L33.7 500.9c8.6 8.3 21.1 11.2 32.4 7.3l264.3-88.6c19.7-6.6 35-22.4 41-42.3l43.2-144.1 2.8-9.2L288 94.6z"/></svg>',"fa-edit":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z"/></svg>',"fa-up-down-left-right":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32v96H128V192c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V288h96v96H192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H288V288h96v32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6v32H288V128h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z"/></svg>',"fa-palette":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M512 256c0 .9 0 1.8 0 2.7c-.4 36.5-33.6 61.3-70.1 61.3H344c-26.5 0-48 21.5-48 48c0 3.4 .4 6.7 1 9.9c2.1 10.2 6.5 20 10.8 29.9c6.1 13.8 12.1 27.5 12.1 42c0 31.8-21.6 60.7-53.4 62c-3.5 .1-7 .2-10.6 .2C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z"/></svg>',"fa-arrow-pointer":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 55.2V426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320H297.9c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"/></svg>',"fa-vector-square":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M368 80h32v32H368V80zM352 32c-17.7 0-32 14.3-32 32H128c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v64c0 17.7 14.3 32 32 32V352c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32H320c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32V160c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H352zM96 160c17.7 0 32-14.3 32-32H320c0 17.7 14.3 32 32 32V352c-17.7 0-32 14.3-32 32H128c0-17.7-14.3-32-32-32V160zM48 400H80v32H48V400zm320 32V400h32v32H368zM48 112V80H80v32H48z"/></svg>',"fa-image":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M448 80c8.8 0 16 7.2 16 16V415.8l-5-6.5-136-176c-4.5-5.9-11.6-9.3-19-9.3s-14.4 3.4-19 9.3L202 340.7l-30.5-42.7C167 291.7 159.8 288 152 288s-15 3.7-19.5 10.1l-80 112L48 416.3l0-.3V96c0-8.8 7.2-16 16-16H448zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm80 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z"/></svg>',"fa-draw-polygon":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M96 151.4V360.6c9.7 5.6 17.8 13.7 23.4 23.4H328.6c0-.1 .1-.2 .1-.3l-4.5-7.9-32-56 0 0c-1.4 .1-2.8 .1-4.2 .1c-35.3 0-64-28.7-64-64s28.7-64 64-64c1.4 0 2.8 0 4.2 .1l0 0 32-56 4.5-7.9-.1-.3H119.4c-5.6 9.7-13.7 17.8-23.4 23.4zM384.3 352c35.2 .2 63.7 28.7 63.7 64c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32H119.4c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4V151.4C12.9 140.4 0 119.7 0 96C0 60.7 28.7 32 64 32c23.7 0 44.4 12.9 55.4 32H328.6c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 35.3-28.5 63.8-63.7 64l-4.5 7.9-32 56-2.3 4c4.2 8.5 6.5 18 6.5 28.1s-2.3 19.6-6.5 28.1l2.3 4 32 56 4.5 7.9z"/></svg>',"fa-font":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M254 52.8C249.3 40.3 237.3 32 224 32s-25.3 8.3-30 20.8L57.8 416H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-1.8l18-48H303.8l18 48H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H390.2L254 52.8zM279.8 304H168.2L224 155.1 279.8 304z"/></svg>',"fa-map-pin":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M16 144a144 144 0 1 1 288 0A144 144 0 1 1 16 144zM160 80c8.8 0 16-7.2 16-16s-7.2-16-16-16c-53 0-96 43-96 96c0 8.8 7.2 16 16 16s16-7.2 16-16c0-35.3 28.7-64 64-64zM128 480V317.1c10.4 1.9 21.1 2.9 32 2.9s21.6-1 32-2.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32z"/></svg>',"fa-circle":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z"/></svg>',"fa-hand":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V336c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64H304c97.2 0 176-78.8 176-176V128c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V32z"/></svg>',"fa-brush":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M162.4 6c-1.5-3.6-5-6-8.9-6h-19c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6H48C21.5 0 0 21.5 0 48V224v22.4V256H9.6 374.4 384v-9.6V224 48c0-26.5-21.5-48-48-48H230.5c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6zM0 288v32c0 35.3 28.7 64 64 64h64v64c0 35.3 28.7 64 64 64s64-28.7 64-64V384h64c35.3 0 64-28.7 64-64V288H0zM192 432a16 16 0 1 1 0 32 16 16 0 1 1 0-32z"/></svg>',"fa-rotate":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M142.9 142.9c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5c0 0 0 0 0 0H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5c7.7-21.8 20.2-42.3 37.8-59.8zM16 312v7.6 .7V440c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l41.6-41.6c87.6 86.5 228.7 86.2 315.8-1c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.2 62.2-162.7 62.5-225.3 1L185 329c6.9-6.9 8.9-17.2 5.2-26.2s-12.5-14.8-22.2-14.8H48.4h-.7H40c-13.3 0-24 10.7-24 24z"/></svg>',"fa-pencil":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1v32c0 8.8 7.2 16 16 16h32zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z"/></svg>',"fa-save":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V173.3c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32H64zm0 96c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V128zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"/></svg>',"fa-wand-magic-sparkles":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M234.7 42.7L197 56.8c-3 1.1-5 4-5 7.2s2 6.1 5 7.2l37.7 14.1L248.8 123c1.1 3 4 5 7.2 5s6.1-2 7.2-5l14.1-37.7L315 71.2c3-1.1 5-4 5-7.2s-2-6.1-5-7.2L277.3 42.7 263.2 5c-1.1-3-4-5-7.2-5s-6.1 2-7.2 5L234.7 42.7zM46.1 395.4c-18.7 18.7-18.7 49.1 0 67.9l34.6 34.6c18.7 18.7 49.1 18.7 67.9 0L529.9 116.5c18.7-18.7 18.7-49.1 0-67.9L495.3 14.1c-18.7-18.7-49.1-18.7-67.9 0L46.1 395.4zM484.6 82.6l-105 105-23.3-23.3 105-105 23.3 23.3zM7.5 117.2C3 118.9 0 123.2 0 128s3 9.1 7.5 10.8L64 160l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L128 160l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L128 96 106.8 39.5C105.1 35 100.8 32 96 32s-9.1 3-10.8 7.5L64 96 7.5 117.2zm352 256c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L416 416l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L480 416l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L480 352l-21.2-56.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L416 352l-56.5 21.2z"/></svg>',"fa-trash-can":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7C140.6 6.8 151.7 0 163.8 0H284.2c12.1 0 23.2 6.8 28.6 17.7L320 32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32h96l7.2-14.3zM32 128H416V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V128zm96 64c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16z"/></svg>',"fa-sitemap":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M208 80c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48h-8v40H464c30.9 0 56 25.1 56 56v32h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H464c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V288c0-4.4-3.6-8-8-8H312v40h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H256c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V280H112c-4.4 0-8 3.6-8 8v32h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V288c0-30.9 25.1-56 56-56H264V192h-8c-26.5 0-48-21.5-48-48V80z"/></svg>',"fa-eye":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z"/></svg>',"fa-eye-slash":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z"/></svg>',"fa-binoculars":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M128 32h32c17.7 0 32 14.3 32 32V96H96V64c0-17.7 14.3-32 32-32zm64 96V448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V388.9c0-34.6 9.4-68.6 27.2-98.3C40.9 267.8 49.7 242.4 53 216L60.5 156c2-16 15.6-28 31.8-28H192zm227.8 0c16.1 0 29.8 12 31.8 28L459 216c3.3 26.4 12.1 51.8 25.8 74.6c17.8 29.7 27.2 63.7 27.2 98.3V448c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V128h99.8zM320 64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V96H320V64zm-32 64V288H224V128h64z"/></svg>',"fa-crop-simple":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32V64H32C14.3 64 0 78.3 0 96s14.3 32 32 32H64V384c0 35.3 28.7 64 64 64H352V384H128V32zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32V448h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H448l0-256c0-35.3-28.7-64-64-64L160 64v64l224 0 0 352z"/></svg>',"fa-plus":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z"/></svg>',"fa-caret-down":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"/></svg>',"fa-caret-up":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z"/></svg>',"fa-camera":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M149.1 64.8L138.7 96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H373.3L362.9 64.8C356.4 45.2 338.1 32 317.4 32H194.6c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z"/></svg>'};class ut{constructor(s){this._setupSymbols(s)}makeFaIcon(s,h=!0){const p=document.createElementNS("http://www.w3.org/2000/svg","svg");p.classList.add("icon"),h&&p.setAttribute("fill","currentColor");const b=document.createElementNS("http://www.w3.org/2000/svg","use");return b.setAttribute("href",`#${s}`),p.appendChild(b),p}convertFaIcons(s,h,p=["fa","fa-solid"]){h||(h=Object.keys(Dt));for(const b of h)s.querySelectorAll(`.${b}`).forEach(A=>{const P=this.makeFaIcon(b);A.classList.remove(b,...p),A.appendChild(P)})}_setupSymbols(s){const h=document.createElement("div");s.appendChild(h),h.style.position="absolute",h.style.display="none";const p=document.createElementNS("http://www.w3.org/2000/svg","svg");h.appendChild(p);let b="";for(const[A,P]of Object.entries(Dt))b+=P.replace("<svg",`<symbol id="${A}"`).replace("/svg>","/symbol>");p.innerHTML=b}}function wt(M,s=!0){const h=document.createElement("template");let p;return Dt[M]?(h.innerHTML=Dt[M],p=h.content.children[0]):p=document.createElementNS("http://www.w3.org/2000/svg","svg"),p.classList.add("icon"),s&&p.setAttribute("fill","currentColor"),p}function jt(M,s,h=["fa","fa-solid"]){s||(s=Object.keys(Dt));for(const p of s)M.querySelectorAll(`.${p}`).forEach(b=>{const A=wt(p);b.classList.remove(p,...h),b.appendChild(A)})}class at extends dt{constructor(s){super(s),this.setToolbarControl(new Ot(this))}onDeactivate(){}onActivate(){this.resetCanvasZIndex()}}class Ot extends ke{constructor(s){super(s);const h=wt("fa-hand");this.button.configure(h,"Image Navigation Tool")}isEnabledForMode(s){return!0}}class Jt extends dt{constructor(s){super(s);let h=this,p=this.tool;this._ignoreNextSelectionChange=!1,this._targetItems=[],this.setToolbarControl(new kt(this)),this.colorpicker=new ei(12,9,this.project.toolLayer),this.cursor=this.colorpicker.element,this.cursor.applyRescale(),this.extensions.onActivate=function(){h.pickingColor&&(h.project.overlay.addClass("tool-action").setAttribute("data-tool-action","colorpicker"),h.cursor.visible=!0),h.selectionChanged(),h.captureUserInput(!!h.pickingColor)},this.extensions.onDeactivate=function(b){h.project.overlay.removeClass("tool-action").setAttribute("data-tool-action",""),h.cursor.visible=!1,b&&h.cancelColorpicker()},p.extensions.onKeyUp=function(b){b.key=="escape"&&h.cancelColorpicker()},this.project.paperScope.project.on("edit-style",b=>{this.activateForItem(b.item)})}onMouseMove(s){this.pickingColor&&this.colorpicker.updatePosition(s.original.point)}onMouseUp(){this.pickingColor&&this.cursor.visible&&(this._colorpickerPromise&&this._colorpickerPromise.resolve(this.colorpicker.selectedColor),this._colorpickerPromise=null,this.cancelColorpicker())}activateForItem(s){this.targetItems=s,this._ignoreNextSelectionChange=!0,this.activate(),this.toolbarControl.updateDisplay(),this._ignoreNextSelectionChange=!1}onSelectionChanged(){this._ignoreNextSelectionChange||(this.targetItems=this.items,this.toolbarControl.updateDisplay()),this._ignoreNextSelectionChange=!1}get defaultTarget(){return this.project.paperScope.project}get targetItems(){return this._targetItems}set targetItems(s){this._targetItems=s?[s].flat().filter(h=>h.defaultStyle||h.style):[],this._targetItems.length==0&&(this._targetItems=[this.defaultTarget])}get targetItemStyles(){return this._targetItems.map(s=>s.defaultStyle||s.style)}get targetDescription(){if(this._targetItems.length==0)return"No target";if(this._targetItems.length>1)return`${this._targetItems.length} items`;{let s=this._targetItems[0];return s==this.defaultTarget?"Default style":s.displayName}}pickColor(){let s=this;return s.captureUserInput(!0),new Promise(function(h,p){s._colorpickerPromise&&s._colorpickerPromise.reject("Canceled"),s._colorpickerPromise={resolve:h,reject:p},s.activate(),s.pickingColor=!0,s.cursor.visible=!0,s.project.paperScope.project.layers.toolLayer.bringToFront(),s.tool.onMouseMove({point:s.cursor.view.center}),s.project.overlay.addClass("tool-action").setAttribute("data-tool-action","colorpicker")}).finally(()=>{s.captureUserInput(!1)})}cancelColorpicker(){this.cursor.addTo(this.project.toolLayer),this.pickingColor=!1,this.cursor.visible=!1,this.project.overlay.removeClass("tool-action").setAttribute("data-tool-action",""),this._colorpickerPromise&&this._colorpickerPromise.reject("Canceled")}createMaskedImage(s){let h=s.clone(),p=new a.Group([h]),b=this.project.paperScope.view.projectToView(h.bounds),A=b.x,P=b.y,L=h.bounds.width*this.project.getZoom(),N=h.bounds.height*this.project.getZoom(),Y=this.project.paperScope.view.pixelRatio;const X=document.createElement("canvas");canvas.setAttribute("width",L*Y),canvas.setAttribute("height",N*Y),X.getContext("2d").drawImage(this.project.overlay.viewer.drawer.canvas,A*Y,P*Y,L*Y,N*Y,0,0,L*Y,N*Y);let Z=X.toDataURL(),pe=new a.Raster({source:Z,position:h.bounds.center});return pe.scale(1/(Y*this.project.getZoom())),p.addChild(pe),p.clipped=!0,p.position.x=p.position.x+500,p}applyStrokeWidth(s){this.targetItems.forEach(h=>{h.defaultStyle&&(h=h.defaultStyle),h.strokeWidth=s,h.rescale&&(h.rescale.strokeWidth=s),h.isGeoJSONFeature&&h.applyRescale()})}applyOpacity(s,h){this.targetItems.forEach(p=>{(p.defaultStyle||p.style)[h]=s,p.isGeoJSONFeature&&(p.updateFillOpacity(),p.updateStrokeOpacity())})}applyColor(s,h,p){h=="fill"?this.applyFillColor(s,p):h=="stroke"?this.applyStrokeColor(s,p):console.warn(`Cannot apply color change - type "${h}" not recognized`)}applyFillColor(s,h){(h?[h]:this.targetItems).forEach(p=>{let b=new a.Color(s);(p.defaultStyle||p.style).fillColor=b,p.isGeoJSONFeature&&p.updateFillOpacity()})}applyStrokeColor(s,h){(h?[h]:this.targetItems).forEach(p=>{let b=new a.Color(s);(p.defaultStyle||p.style).strokeColor=b,p.isGeoJSONFeature&&p.updateStrokeOpacity()})}}class kt extends ke{constructor(s){super(s);let h=this;const p=wt("fa-palette");this.button.configure(p,"Style Tool"),this.dropdown.innerHTML=this.uiHTML(),jt(this.dropdown),this._hierarchy=[],this.dropdown.querySelectorAll('[data-action="pick-color"]').forEach(b=>{b.addEventListener("click",function(){let A=this.getAttribute("data-type"),P=h.dropdown.querySelector(`input[type="color"][data-type="${A}"]`);var L;h.dropdown.querySelectorAll('[data-action="pick-color"]').forEach(N=>N.classList.remove("active")),(L=P).offsetWidth||L.offsetHeight||L.getClientRects().length?h.dropdown.querySelectorAll(".colorpicker-row").forEach(N=>N.classList.add("hidden")):(h.dropdown.querySelectorAll(".colorpicker-row").forEach(N=>N.classList.add("hidden")),P.closest(".colorpicker-row").classList.remove("hidden"),this.classList.add("active"))})}),this.dropdown.querySelectorAll('input[type="color"]').forEach(b=>b.addEventListener("input",function(){let A=this.getAttribute("data-type");h.tool.applyColor(this.value,A),A=="fill"&&h.setFillButtonColor(new a.Color(this.value)),A=="stroke"&&h.setStrokeButtonColor(new a.Color(this.value))})),this.dropdown.querySelectorAll('input[type="number"]').forEach(b=>b.addEventListener("input",function(){h.tool.applyStrokeWidth(this.value)})),this.dropdown.querySelectorAll('input[data-action="opacity"]').forEach(b=>b.addEventListener("input",function(){let A=this.getAttribute("data-type"),P=this.getAttribute("data-property");h.tool.applyOpacity(this.value,P),A=="fill"&&h.setFillButtonOpacity(this.value),A=="stroke"&&h.setStrokeButtonOpacity(this.value)})),this.dropdown.querySelectorAll('[data-action="from-image"]').forEach(b=>b.addEventListener("click",function(){h.tool.pickColor().then(A=>{this.parentElement.querySelectorAll('input[type="color"]').forEach(P=>{P.value=A.toCSS(!0),P.dispatchEvent(new Event("input"))})}).catch(A=>{})})),this.dropdown.querySelectorAll('[data-action="from-average"]').forEach(b=>b.addEventListener("click",function(){let A=this.getAttribute("data-type");h.fromAverage(A)})),this.dropdown.querySelectorAll(".style-item").forEach(b=>b.addEventListener("click",function(){let A=h.tool.targetItems,P=A.every(N=>N.selected),L=A.filter(N=>N.isGeoJSONFeature);L.length>0&&(h.tool._ignoreNextSelectionChange=!0,L.forEach(N=>P?N.deselect():N.select())),h.updateTargetDescription()})),this.dropdown.querySelectorAll(".hierarchy-up").forEach(b=>b.addEventListener("click",function(){if(h._hierarchy&&h._hierarchy.length>0)h._hierarchy.index=(h._hierarchy.index+1)%h._hierarchy.length;else{let P=h.tool.targetItems,L=new Set(P.map(N=>N.hierarchy.filter(Y=>Y.isGeoJSONFeatureCollection&&Y!==N)).flat());L.size==0?P.indexOf(h.tool.defaultTarget)>-1?(h._hierarchy=[h.tool.defaultTarget],h._hierarchy.index=0):(h._hierarchy=[P,h.tool.defaultTarget],h._hierarchy.index=1):L.size==1?(h._hierarchy=[h.tool.targetItems,L.values().next().value,h.tool.defaultTarget],h._hierarchy.index=1):(h._hierarchy=[h.tool.targetItems,h.tool.defaultTarget],h._hierarchy.index=1)}let A=h._hierarchy;h.tool.activateForItem(h._hierarchy[h._hierarchy.index]),h._hierarchy=A}))}fromAverage(s){let h=this,p=this.tool.targetItems.map(b=>ti(b).then(A=>{h.tool.applyColor(A,s,b)}));Promise.all(p).then(()=>h.updateDisplay())}isEnabledForMode(s){return!0}uiHTML(){return`
1521
+ `)}},292:function(y,a,w){var _,A;(function(R,k){var G=(R=R||w(965)).window,W=R.document,O=new function(){function e(S,D,F){var H;return S&&((H=d(S,"length"))&&typeof H.value=="number"?v:function(U,K){for(var j in this)this.hasOwnProperty(j)&&U.call(K,this[j],j,this)}).call(S,D,F=F||S),F}var t=/^(statics|enumerable|beans|preserve)$/,i=[],r=i.slice,l=Object.create,d=Object.getOwnPropertyDescriptor,f=Object.defineProperty,v=i.forEach||function(S,D){for(var F=0,H=this.length;F<H;F++)S.call(D,this[F],F,this)},g=Object.assign||function(S){for(var D=1,F=arguments.length;D<F;D++){var H,U=arguments[D];for(H in U)U.hasOwnProperty(H)&&(S[H]=U[H])}return S};function x(S,D,F,H,U){var K={};function j(oe,le){var xe,Ee=typeof(le=typeof(le=le||(le=d(D,oe))&&(le.get?le:le.value))=="string"&&le[0]==="#"&&S[le.substring(1)]||le)=="function",Te=le,Me=U||Ee&&!le.base?le&&le.get?oe in S:S[oe]:null;U&&Me||(Ee&&Me&&(le.base=Me),Ee&&H!==!1&&(xe=oe.match(/^([gs]et|is)(([A-Z])(.*))$/))&&(K[xe[3].toLowerCase()+xe[4]]=xe[2]),Te&&!Ee&&Te.get&&typeof Te.get=="function"&&T.isPlainObject(Te)||(Te={value:Te,writable:!0}),(d(S,oe)||{configurable:!0}).configurable&&(Te.configurable=!0,Te.enumerable=F??!xe),f(S,oe,Te))}if(D){for(var Z in D)D.hasOwnProperty(Z)&&!t.test(Z)&&j(Z);for(var Z in K){var ee=K[Z],re=S["set"+ee];!(ee=S["get"+ee]||re&&S["is"+ee])||H!==!0&&ee.length!==0||j(Z,{get:ee,set:re})}}return S}function T(){for(var S=0,D=arguments.length;S<D;S++){var F=arguments[S];F&&g(this,F)}return this}return x(T,{inject:function(S){var D,F,H;S&&(D=S.statics===!0?S:S.statics,F=S.beans,H=S.preserve,D!==S&&x(this.prototype,S,S.enumerable,F,H),x(this,D,null,F,H));for(var U=1,K=arguments.length;U<K;U++)this.inject(arguments[U]);return this},extend:function(){for(var S,D,F,H=this,U=0,K=arguments.length;U<K&&(!S||!D);U++)F=arguments[U],S=S||F.initialize,D=D||F.prototype;return D=(S=S||function(){H.apply(this,arguments)}).prototype=D||l(this.prototype),f(D,"constructor",{value:S,writable:!0,configurable:!0}),x(S,this),arguments.length&&this.inject.apply(S,arguments),S.base=H,S}}).inject({enumerable:!1,initialize:T,set:T,inject:function(){for(var S=0,D=arguments.length;S<D;S++){var F=arguments[S];F&&x(this,F,F.enumerable,F.beans,F.preserve)}return this},extend:function(){var S=l(this);return S.inject.apply(S,arguments)},each:function(S,D){return e(this,S,D)},clone:function(){return new this.constructor(this)},statics:{set:g,each:e,create:l,define:f,describe:d,clone:function(S){return g(new S.constructor,S)},isPlainObject:function(S){return(S=S!=null&&S.constructor)&&(S===Object||S===T||S.name==="Object")},pick:function(S,D){return S!==k?S:D},slice:function(S,D,F){return r.call(S,D,F)}}})};y.exports=O,O.inject({enumerable:!1,toString:function(){return this._id!=null?(this._class||"Object")+(this._name?" '"+this._name+"'":" @"+this._id):"{ "+O.each(this,function(e,t){/^_/.test(t)||this.push(t+": "+((t=typeof e)=="number"?tt.instance.number(e):t=="string"?"'"+e+"'":e))},[]).join(", ")+" }"},getClassName:function(){return this._class||""},importJSON:function(e){return O.importJSON(e,this)},exportJSON:function(e){return O.exportJSON(this,e)},toJSON:function(){return O.serialize(this)},set:function(e,t){return e&&O.filter(this,e,t,this._prioritize),this}},{beans:!1,statics:{exports:{},extend:function e(){var t=e.base.apply(this,arguments),i=t.prototype._class;return i&&!O.exports[i]&&(O.exports[i]=t),t},equals:function(e,t){if(e===t)return!0;if(e&&e.equals)return e.equals(t);if(t&&t.equals)return t.equals(e);if(e&&t&&typeof e=="object"&&typeof t=="object"){if(Array.isArray(e)&&Array.isArray(t)){if((i=e.length)!==t.length)return!1;for(;i--;)if(!O.equals(e[i],t[i]))return!1}else{var i,r=Object.keys(e);if((i=r.length)!==Object.keys(t).length)return!1;for(;i--;){var l=r[i];if(!t.hasOwnProperty(l)||!O.equals(e[l],t[l]))return!1}}return!0}return!1},read:function(e,t,i,r){if(this===O){var l=this.peek(e,t);return e.__index++,l}var d=this.prototype,f=d._readIndex,v=t||f&&e.__index||0;return l=e.length,r=r||l-v,(t=e[v])instanceof this||i&&i.readNull&&t==null&&r<=1?(f&&(e.__index=v+1),t&&i&&i.clone?t.clone():t):(t=O.create(d),f&&(t.__read=!0),t=t.initialize.apply(t,0<v||v+r<l?O.slice(e,v,v+r):e)||t,f&&(e.__index=v+t.__read,(v=t.__filtered)&&(e.__filtered=v,t.__filtered=k),t.__read=k),t)},peek:function(e,t){return e[e.__index=t||e.__index||0]},remain:function(e){return e.length-(e.__index||0)},readList:function(e,t,i,r){for(var l,d=[],f=(t=t||0,r?t+r:e.length),v=t;v<f;v++)d.push(Array.isArray(l=e[v])?this.read(l,0,i):this.read(e,v,i,1));return d},readNamed:function(e,t,i,r,l){var d,f,v=this.getNamed(e,t),g=v!==k;return g&&((f=e.__filtered)||(d=this.getSource(e),(f=e.__filtered=O.create(d)).__unfiltered=d),f[t]=k),this.read(g?[v]:e,i,r,l)},readSupported:function(e,t){var i=this.getSource(e),r=this,l=!1;return i&&Object.keys(i).forEach(function(d){var f;d in t&&((f=r.readNamed(e,d))!==k&&(t[d]=f),l=!0)}),l},getSource:function(e){var t,i=e.__source;return i===k&&(t=e.length===1&&e[0],i=e.__source=t&&O.isPlainObject(t)?t:null),i},getNamed:function(e,t){var i=this.getSource(e);if(i)return t?i[t]:e.__filtered||i},hasNamed:function(e,t){return!!this.getNamed(e,t)},filter:function(e,t,i,r){var l;function d(T){var S;i&&T in i||l&&T in l||(S=t[T])!==k&&(e[T]=S)}if(r){for(var f,v={},g=0,x=r.length;g<x;g++)(f=r[g])in t&&(d(f),v[f]=!0);l=v}return Object.keys(t.__unfiltered||t).forEach(d),e},isPlainValue:function(e,t){return O.isPlainObject(e)||Array.isArray(e)||t&&typeof e=="string"},serialize:function(e,t,i,r){t=t||{};var l=!r;if(l&&(t.formatter=new tt(t.precision),r={length:0,definitions:{},references:{},add:function(S,D){var F="#"+S._id,H=this.references[F];return H||(this.length++,D=D.call(S),(S=S._class)&&D[0]!==S&&D.unshift(S),this.definitions[F]=D,H=this.references[F]=[F]),H}}),e&&e._serialize){var d=e._serialize(t,r),f=e._class;!f||e._compactSerialize||!l&&i||d[0]===f||d.unshift(f)}else if(Array.isArray(e)){d=[];for(var v=0,g=e.length;v<g;v++)d[v]=O.serialize(e[v],t,i,r)}else if(O.isPlainObject(e)){d={};var x=Object.keys(e);for(v=0,g=x.length;v<g;v++){var T=x[v];d[T]=O.serialize(e[T],t,i,r)}}else d=typeof e=="number"?t.formatter.number(e,t.precision):e;return l&&0<r.length?[["dictionary",r.definitions],d]:d},deserialize:function(e,t,i,r,l){var d=e,f=!i,v=f&&e&&e.length&&e[0][0]==="dictionary";if(i=i||{},Array.isArray(e)){var g=e[0],x=g==="dictionary";if(e.length==1&&/^#/.test(g))return i.dictionary[g];d=[];for(var T,S=(g=O.exports[g])?1:0,D=e.length;S<D;S++)d.push(O.deserialize(e[S],t,i,x,v));g&&(T=d,d=t?t(g,T,f||l):new g(T))}else if(O.isPlainObject(e))for(var F in d={},r&&(i.dictionary=d),e)d[F]=O.deserialize(e[F],t,i);return v?d[1]:d},exportJSON:function(e,t){return e=O.serialize(e,t),t&&t.asString==0?e:JSON.stringify(e)},importJSON:function(e,t){return O.deserialize(typeof e=="string"?JSON.parse(e):e,function(i,r,l){var d=l&&t&&t.constructor===i,f=d?t:O.create(i.prototype);return!(r.length===1&&f instanceof dt)||!d&&f instanceof Wt||(l=r[0],O.isPlainObject(l)&&(l.insert=!1,d&&(r=r.concat([dt.INSERT])))),(d?f.set:i).apply(f,r),d&&(t=null),f})},push:function(e,t){var i=t.length;if(i<4096)e.push.apply(e,t);else{var r=e.length;e.length+=i;for(var l=0;l<i;l++)e[r+l]=t[l]}return e},splice:function(e,t,i,r){var l=t&&t.length,d=i===k;(i=d?e.length:i)>e.length&&(i=e.length);for(var f=0;f<l;f++)t[f]._index=i+f;if(d)return O.push(e,t),[];r=[i,r],t&&O.push(r,t);for(var v=e.splice.apply(e,r),g=(f=0,v.length);f<g;f++)v[f]._index=k;for(f=i+l,g=e.length;f<g;f++)e[f]._index=f;return v},capitalize:function(e){return e.replace(/\b[a-z]/g,function(t){return t.toUpperCase()})},camelize:function(e){return e.replace(/-(.)/g,function(t,i){return i.toUpperCase()})},hyphenate:function(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}}});var $={on:function(e,t){var i,r;return typeof e!="string"?O.each(e,function(l,d){this.on(d,l)},this):(i=(r=this._eventTypes)&&r[e],(r=(r=this._callbacks=this._callbacks||{})[e]=r[e]||[]).indexOf(t)===-1&&(r.push(t),i&&i.install&&r.length===1&&i.install.call(this,e))),this},off:function(e,t){if(typeof e=="string"){var i,r,l=(r=this._eventTypes)&&r[e];return(r=this._callbacks&&this._callbacks[e])&&(!t||(i=r.indexOf(t))!==-1&&r.length===1?(l&&l.uninstall&&l.uninstall.call(this,e),delete this._callbacks[e]):i!==-1&&r.splice(i,1)),this}O.each(e,function(d,f){this.off(f,d)},this)},once:function(e,t){return this.on(e,function i(){t.apply(this,arguments),this.off(e,i)})},emit:function(e,t){if(!(l=this._callbacks&&this._callbacks[e]))return!1;var i=O.slice(arguments,1),r=t&&t.target&&!t.currentTarget,l=l.slice();r&&(t.currentTarget=this);for(var d=0,f=l.length;d<f;d++)if(l[d].apply(this,i)==0){t&&t.stop&&t.stop();break}return r&&delete t.currentTarget,!0},responds:function(e){return!(!this._callbacks||!this._callbacks[e])},attach:"#on",detach:"#off",fire:"#emit",_installEvents:function(e){var t,i=this._eventTypes,r=this._callbacks,l=e?"install":"uninstall";if(i)for(var d in r)0<r[d].length&&(t=(t=i[d])&&t[l])&&t.call(this,d)},statics:{inject:function e(t){var i,r=t._events;return r&&(i={},O.each(r,function(l,d){var f=typeof l=="string",v=f?l:d,g=(d=O.capitalize(v),v.substring(2).toLowerCase());i[g]=f?{}:l,v="_"+v,t["get"+d]=function(){return this[v]},t["set"+d]=function(x){var T=this[v];T&&this.off(g,T),x&&this.on(g,x),this[v]=x}}),t._eventTypes=i),e.base.apply(this,arguments)}}},ye=O.extend({_class:"PaperScope",initialize:function e(){(jt=this).settings=new O({applyMatrix:!0,insertItems:!0,handleSize:4,hitTolerance:0}),this.project=null,this.projects=[],this.tools=[],this._id=e._id++,e._scopes[this._id]=this;var t,i,r,l=e.prototype;this.support||(i=Ue.getContext(1,1)||{},l.support={nativeDash:"setLineDash"in i||"mozDash"in i,nativeBlendModes:kt.nativeModes},Ue.release(i)),this.agent||(t=R.navigator.userAgent.toLowerCase(),i=(/(darwin|win|mac|linux|freebsd|sunos)/.exec(t)||[])[0],r=l.agent=l.browser={platform:i=i==="darwin"?"mac":i},i&&(r[i]=!0),t.replace(/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\/?\s*([.\d]+)(?:.*version\/([.\d]+))?(?:.*rv\:v?([.\d]+))?/g,function(d,f,v,g,x){r.chrome||(v=f==="opera"?g:/^(node|trident)$/.test(f)?x:v,r.version=v,r.versionNumber=parseFloat(v),r.name=f={trident:"msie",jsdom:"node"}[f]||f,r[f]=!0)}),r.chrome&&delete r.webkit,r.atom&&delete r.chrome)},version:"0.12.17",getView:function(){var e=this.project;return e&&e._view},getPaper:function(){return this},execute:function(e,t){},install:function(e){var t,i=this;for(t in O.each(["project","view","tool"],function(r){O.define(e,r,{configurable:!0,get:function(){return i[r]}})}),this)!/^_/.test(t)&&this[t]&&(e[t]=this[t])},setup:function(e){return(jt=this).project=new zt(e),this},createCanvas:function(e,t){return Ue.getCanvas(e,t)},activate:function(){jt=this},clear:function(){for(var e=this.projects,t=this.tools,i=e.length-1;0<=i;i--)e[i].remove();for(i=t.length-1;0<=i;i--)t[i].remove()},remove:function(){this.clear(),delete ye._scopes[this._id]},statics:new function(){function e(t){return t+="Attribute",function(i,r){return i[t](r)||i[t]("data-paper-"+r)}}return{_scopes:{},_id:0,get:function(t){return this._scopes[t]||null},getAttribute:e("get"),hasAttribute:e("has")}}}),we=O.extend($,{initialize:function(e){this._scope=jt,this._index=this._scope[this._list].push(this)-1,!e&&this._scope[this._reference]||this.activate()},activate:function(){if(!this._scope)return!1;var e=this._scope[this._reference];return e&&e!==this&&e.emit("deactivate"),(this._scope[this._reference]=this).emit("activate",e),!0},isActive:function(){return this._scope[this._reference]===this},remove:function(){return this._index!=null&&(O.splice(this._scope[this._list],null,this._index,1),this._scope[this._reference]==this&&(this._scope[this._reference]=null),!(this._scope=null))},getView:function(){return this._scope.getView()}}),ht={findItemBoundsCollisions:function(e,t,i){function r(d){for(var f=new Array(d.length),v=0;v<d.length;v++){var g=d[v].getBounds();f[v]=[g.left,g.top,g.right,g.bottom]}return f}var l=r(e);return t=t&&t!==e?r(t):l,this.findBoundsCollisions(l,t,i||0)},findCurveBoundsCollisions:function(e,t,i,r){function l(S){for(var D=Math.min,F=Math.max,H=new Array(S.length),U=0;U<S.length;U++){var K=S[U];H[U]=[D(K[0],K[2],K[4],K[6]),D(K[1],K[3],K[5],K[7]),F(K[0],K[2],K[4],K[6]),F(K[1],K[3],K[5],K[7])]}return H}var d=l(e);if(t=t&&t!==e?l(t):d,r){for(var f=this.findBoundsCollisions(d,t,i||0,!1,!0),v=this.findBoundsCollisions(d,t,i||0,!0,!0),g=[],x=0,T=f.length;x<T;x++)g[x]={hor:f[x],ver:v[x]};return g}return this.findBoundsCollisions(d,t,i||0)},findBoundsCollisions:function(e,t,i,r,l){var d=!t||e===t,f=d?e:e.concat(t),v=e.length,g=f.length;function x($e,lt,vt){for(var L=0,s=$e.length;L<s;){var c=s+L>>>1;f[$e[c]][lt]<vt?L=1+c:s=c}return L-1}for(var T=r?1:0,S=2+T,D=r?0:1,F=2+D,H=new Array(g),U=0;U<g;U++)H[U]=U;H.sort(function($e,lt){return f[$e][T]-f[lt][T]});var K=[],j=new Array(v);for(U=0;U<g;U++){var Z=H[U],ee=f[Z],re=d?Z:Z-v,oe=Z<v,le=d||!oe,xe=oe?[]:null;if(K.length){var Ee=x(K,S,ee[T]-i)+1;if(K.splice(0,Ee),d&&l){xe=xe.concat(K);for(var Te=0;Te<K.length;Te++)j[se=K[Te]].push(re)}else{var Me=ee[F],be=ee[D];for(Te=0;Te<K.length;Te++){var se=K[Te],ue=f[se],We=se<v,Ie=d||v<=se;(l||(oe&&Ie||le&&We)&&Me>=ue[D]-i&&be<=ue[F]+i)&&(oe&&Ie&&xe.push(d?se:se-v),le&&We&&j[se].push(re))}}}oe&&(e===t&&xe.push(Z),j[Z]=xe),K.length?(ee=x(K,S,ee[S]),K.splice(ee+1,0,Z)):K.push(Z)}for(U=0;U<j.length;U++){var Ye=j[U];Ye&&Ye.sort(function($e,lt){return $e-lt})}return j}},tt=O.extend({initialize:function(e){this.precision=O.pick(e,5),this.multiplier=Math.pow(10,this.precision)},number:function(e){return this.precision<16?Math.round(e*this.multiplier)/this.multiplier:e},pair:function(e,t,i){return this.number(e)+(i||",")+this.number(t)},point:function(e,t){return this.number(e.x)+(t||",")+this.number(e.y)},size:function(e,t){return this.number(e.width)+(t||",")+this.number(e.height)},rectangle:function(e,t){return this.point(e,t)+(t||",")+this.size(e,t)}});tt.instance=new tt;var Ve=new function(){var e=[[.5773502691896257],[0,.7745966692414834],[.33998104358485626,.8611363115940526],[0,.5384693101056831,.906179845938664],[.2386191860831969,.6612093864662645,.932469514203152],[0,.4058451513773972,.7415311855993945,.9491079123427585],[.1834346424956498,.525532409916329,.7966664774136267,.9602898564975363],[0,.3242534234038089,.6133714327005904,.8360311073266358,.9681602395076261],[.14887433898163122,.4333953941292472,.6794095682990244,.8650633666889845,.9739065285171717],[0,.26954315595234496,.5190961292068118,.7301520055740494,.8870625997680953,.978228658146057],[.1252334085114689,.3678314989981802,.5873179542866175,.7699026741943047,.9041172563704749,.9815606342467192],[0,.2304583159551348,.44849275103644687,.6423493394403402,.8015780907333099,.9175983992229779,.9841830547185881],[.10805494870734367,.31911236892788974,.5152486363581541,.6872929048116855,.827201315069765,.9284348836635735,.9862838086968123],[0,.20119409399743451,.3941513470775634,.5709721726085388,.7244177313601701,.8482065834104272,.937273392400706,.9879925180204854],[.09501250983763744,.2816035507792589,.45801677765722737,.6178762444026438,.755404408355003,.8656312023878318,.9445750230732326,.9894009349916499]],t=[[1],[.8888888888888888,.5555555555555556],[.6521451548625461,.34785484513745385],[.5688888888888889,.47862867049936647,.23692688505618908],[.46791393457269104,.3607615730481386,.17132449237917036],[.4179591836734694,.3818300505051189,.27970539148927664,.1294849661688697],[.362683783378362,.31370664587788727,.22238103445337448,.10122853629037626],[.3302393550012598,.31234707704000286,.26061069640293544,.1806481606948574,.08127438836157441],[.29552422471475287,.26926671930999635,.21908636251598204,.1494513491505806,.06667134430868814],[.2729250867779006,.26280454451024665,.23319376459199048,.18629021092773426,.1255803694649046,.05566856711617366],[.24914704581340277,.2334925365383548,.20316742672306592,.16007832854334622,.10693932599531843,.04717533638651183],[.2325515532308739,.22628318026289723,.2078160475368885,.17814598076194574,.13887351021978725,.09212149983772845,.04048400476531588],[.2152638534631578,.2051984637212956,.18553839747793782,.15720316715819355,.12151857068790319,.08015808715976021,.03511946033175186],[.2025782419255613,.19843148532711158,.1861610000155622,.16626920581699392,.13957067792615432,.10715922046717194,.07036604748810812,.03075324199611727],[.1894506104550685,.18260341504492358,.16915651939500254,.14959598881657674,.12462897125553388,.09515851168249279,.062253523938647894,.027152459411754096]],i=Math.abs,r=Math.sqrt,l=Math.pow,d=Math.log2||function(S){return Math.log(S)*Math.LOG2E},f=1e-12,v=112e-18;function g(S,D,F){return S<D?D:F<S?F:S}function x(S,D,F){function H(ee){var re;return[re=ee-(re=134217729*ee)+re,ee-re]}var U,K,j=D*D-S*F,Z=D*D+S*F;return 3*i(j)<Z&&(U=H(S),K=H(D),Z=H(F),j=(D*=D)-(F*=S)+(K[0]*K[0]-D+2*K[0]*K[1]+K[1]*K[1]-(U[0]*Z[0]-F+U[0]*Z[1]+U[1]*Z[0]+U[1]*Z[1]))),j}function T(){var S=Math.max.apply(Math,arguments);return S&&(S<1e-8||1e8<S)?l(2,-Math.round(d(S))):0}return{EPSILON:f,MACHINE_EPSILON:v,CURVETIME_EPSILON:1e-8,GEOMETRIC_EPSILON:1e-7,TRIGONOMETRIC_EPSILON:1e-8,ANGULAR_EPSILON:1e-5,KAPPA:4*(r(2)-1)/3,isZero:function(S){return-f<=S&&S<=f},isMachineZero:function(S){return-v<=S&&S<=v},clamp:g,integrate:function(S,D,F,H){for(var U=e[H-2],K=t[H-2],j=.5*(F-D),Z=j+D,ee=0,re=H+1>>1,oe=1&H?K[ee++]*S(Z):0;ee<re;){var le=j*U[ee];oe+=K[ee++]*(S(Z+le)+S(Z-le))}return j*oe},findRoot:function(S,D,F,H,U,K,j){for(var Z=0;Z<K;Z++){var ee=S(F),re=ee/D(F),oe=F-re;if(i(re)<j){F=oe;break}F=0<ee?(U=F,oe<=H?.5*(H+U):oe):(H=F,U<=oe?.5*(H+U):oe)}return g(F,H,U)},solveQuadratic:function(S,D,F,H,U,K){var j,Z=1/0;if(i(S)<f){if(i(D)<f)return i(F)<f?-1:0;j=-F/D}else{var ee,re=x(S,D*=-.5,F);re&&i(re)<v&&(ee=T(i(S),i(D),i(F)))&&(re=x(S*=ee,D*=ee,F*=ee)),-v<=re&&(oe=re<0?0:r(re),Z=(le=D+(D<0?-oe:oe))===0?-(j=F/S):(j=le/S,F/le))}var oe=0,le=(S=U==null,F=U-f,K+f);return isFinite(j)&&(S||F<j&&j<le)&&(H[oe++]=S?j:g(j,U,K)),Z!==j&&isFinite(Z)&&(S||F<Z&&Z<le)&&(H[oe++]=S?Z:g(Z,U,K)),oe},solveCubic:function(S,D,F,H,U,K,j){var Z,ee,re,oe,le,xe=T(i(S),i(D),i(F),i(H));function Ee(ue){ue=S*(Z=ue),oe=(ue+(ee=ue+D))*Z+(re=ee*Z+F),le=re*Z+H}if(xe&&(S*=xe,D*=xe,F*=xe,H*=xe),i(S)<f)S=D,ee=F,re=H,Z=1/0;else if(i(H)<f)ee=D,re=F,Z=0;else{Ee(-D/S/3);var Te=l(i(be=le/S),1/3),Me=be<0?-1:1,be=0<(be=-oe/S)?1.324717957244746*Math.max(Te,r(be)):Te,se=Z-Me*be;if(se!==Z){for(;Ee(se),Me*Z<Me*(se=oe===0?Z:Z-le/oe/(1+v)););i(S)*Z*Z>i(H/Z)&&(ee=((re=-H/Z)-F)/Z)}}return Te=Ve.solveQuadratic(S,ee,re,U,K,j),be=K==null,isFinite(Z)&&(Te===0||0<Te&&Z!==U[0]&&Z!==U[1])&&(be||K-f<Z&&Z<j+f)&&(U[Te++]=be?Z:g(Z,K,j)),Te}}},Tt={_id:1,_pools:{},get:function(e){if(e){var t=this._pools[e];return(t=t||(this._pools[e]={_id:1}))._id++}return this._id++}},Q=O.extend({_class:"Point",_readIndex:!0,initialize:function(e,t){var i,r=typeof e,l=this.__read,d=0;return r=="number"?(this._set(e,(i=typeof t=="number")?t:e),l&&(d=i?2:1)):r=="undefined"||e===null?(this._set(0,0),l&&(d=e===null?1:0)):(e=r=="string"?e.split(/[\s,]+/)||[]:e,d=1,Array.isArray(e)?this._set(+e[0],+(1<e.length?e[1]:e[0])):"x"in e?this._set(e.x||0,e.y||0):"width"in e?this._set(e.width||0,e.height||0):"angle"in e?(this._set(e.length||0,0),this.setAngle(e.angle||0)):(this._set(0,0),d=0)),l&&(this.__read=d),this},set:"#initialize",_set:function(e,t){return this.x=e,this.y=t,this},equals:function(e){return this===e||e&&(this.x===e.x&&this.y===e.y||Array.isArray(e)&&this.x===e[0]&&this.y===e[1])||!1},clone:function(){return new Q(this.x,this.y)},toString:function(){var e=tt.instance;return"{ x: "+e.number(this.x)+", y: "+e.number(this.y)+" }"},_serialize:function(e){return[(e=e.formatter).number(this.x),e.number(this.y)]},getLength:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setLength:function(e){var t;this.isZero()?(t=this._angle||0,this._set(Math.cos(t)*e,Math.sin(t)*e)):(e/=this.getLength(),Ve.isZero(e)&&this.getAngle(),this._set(this.x*e,this.y*e))},getAngle:function(){return 180*this.getAngleInRadians.apply(this,arguments)/Math.PI},setAngle:function(e){this.setAngleInRadians.call(this,e*Math.PI/180)},getAngleInDegrees:"#getAngle",setAngleInDegrees:"#setAngle",getAngleInRadians:function(){if(arguments.length){var e=Q.read(arguments),t=this.getLength()*e.getLength();return Ve.isZero(t)?NaN:(t=this.dot(e)/t,Math.acos(t<-1?-1:1<t?1:t))}return this.isZero()?this._angle||0:this._angle=Math.atan2(this.y,this.x)},setAngleInRadians:function(e){var t;this._angle=e,this.isZero()||(t=this.getLength(),this._set(Math.cos(e)*t,Math.sin(e)*t))},getQuadrant:function(){return 0<=this.x?0<=this.y?1:4:0<=this.y?2:3}},{beans:!1,getDirectedAngle:function(){var e=Q.read(arguments);return 180*Math.atan2(this.cross(e),this.dot(e))/Math.PI},getDistance:function(){var e=arguments,t=(i=Q.read(e)).x-this.x,i=t*t+(i=i.y-this.y)*i;return O.read(e)?i:Math.sqrt(i)},normalize:function(e){e===k&&(e=1),e=(t=this.getLength())!==0?e/t:0;var t=new Q(this.x*e,this.y*e);return 0<=e&&(t._angle=this._angle),t},rotate:function(e,t){if(e===0)return this.clone();e=e*Math.PI/180;var i=t?this.subtract(t):this,r=Math.sin(e);return e=Math.cos(e),i=new Q(i.x*e-i.y*r,i.x*r+i.y*e),t?i.add(t):i},transform:function(e){return e?e._transformPoint(this):this},add:function(){var e=Q.read(arguments);return new Q(this.x+e.x,this.y+e.y)},subtract:function(){var e=Q.read(arguments);return new Q(this.x-e.x,this.y-e.y)},multiply:function(){var e=Q.read(arguments);return new Q(this.x*e.x,this.y*e.y)},divide:function(){var e=Q.read(arguments);return new Q(this.x/e.x,this.y/e.y)},modulo:function(){var e=Q.read(arguments);return new Q(this.x%e.x,this.y%e.y)},negate:function(){return new Q(-this.x,-this.y)},isInside:function(){return Fe.read(arguments).contains(this)},isClose:function(){var e=arguments,t=Q.read(e);return e=O.read(e),this.getDistance(t)<=e},isCollinear:function(){var e=Q.read(arguments);return Q.isCollinear(this.x,this.y,e.x,e.y)},isColinear:"#isCollinear",isOrthogonal:function(){var e=Q.read(arguments);return Q.isOrthogonal(this.x,this.y,e.x,e.y)},isZero:function(){var e=Ve.isZero;return e(this.x)&&e(this.y)},isNaN:function(){return isNaN(this.x)||isNaN(this.y)},isInQuadrant:function(e){return 0<=this.x*(1<e&&e<4?-1:1)&&0<=this.y*(2<e?-1:1)},dot:function(){var e=Q.read(arguments);return this.x*e.x+this.y*e.y},cross:function(){var e=Q.read(arguments);return this.x*e.y-this.y*e.x},project:function(){var e=Q.read(arguments),t=e.isZero()?0:this.dot(e)/e.dot(e);return new Q(e.x*t,e.y*t)},statics:{min:function(){var e=arguments,t=Q.read(e);return e=Q.read(e),new Q(Math.min(t.x,e.x),Math.min(t.y,e.y))},max:function(){var e=arguments,t=Q.read(e);return e=Q.read(e),new Q(Math.max(t.x,e.x),Math.max(t.y,e.y))},random:function(){return new Q(Math.random(),Math.random())},isCollinear:function(e,t,i,r){return Math.abs(e*r-t*i)<=1e-8*Math.sqrt((e*e+t*t)*(i*i+r*r))},isOrthogonal:function(e,t,i,r){return Math.abs(e*i+t*r)<=1e-8*Math.sqrt((e*e+t*t)*(i*i+r*r))}}},O.each(["round","ceil","floor","abs"],function(e){var t=Math[e];this[e]=function(){return new Q(t(this.x),t(this.y))}},{})),Ct=Q.extend({initialize:function(e,t,i,r){this._x=e,this._y=t,this._owner=i,this._setter=r},_set:function(e,t,i){return this._x=e,this._y=t,i||this._owner[this._setter](this),this},getX:function(){return this._x},setX:function(e){this._x=e,this._owner[this._setter](this)},getY:function(){return this._y},setY:function(e){this._y=e,this._owner[this._setter](this)},isSelected:function(){return!!(this._owner._selection&this._getSelection())},setSelected:function(e){this._owner._changeSelection(this._getSelection(),e)},_getSelection:function(){return this._setter==="setPosition"?4:0}}),it=O.extend({_class:"Size",_readIndex:!0,initialize:function(e,t){var i,r=typeof e,l=this.__read,d=0;return r=="number"?(this._set(e,(i=typeof t=="number")?t:e),l&&(d=i?2:1)):r=="undefined"||e===null?(this._set(0,0),l&&(d=e===null?1:0)):(e=r=="string"?e.split(/[\s,]+/)||[]:e,d=1,Array.isArray(e)?this._set(+e[0],+(1<e.length?e[1]:e[0])):"width"in e?this._set(e.width||0,e.height||0):"x"in e?this._set(e.x||0,e.y||0):(this._set(0,0),d=0)),l&&(this.__read=d),this},set:"#initialize",_set:function(e,t){return this.width=e,this.height=t,this},equals:function(e){return e===this||e&&(this.width===e.width&&this.height===e.height||Array.isArray(e)&&this.width===e[0]&&this.height===e[1])||!1},clone:function(){return new it(this.width,this.height)},toString:function(){var e=tt.instance;return"{ width: "+e.number(this.width)+", height: "+e.number(this.height)+" }"},_serialize:function(e){return[(e=e.formatter).number(this.width),e.number(this.height)]},add:function(){var e=it.read(arguments);return new it(this.width+e.width,this.height+e.height)},subtract:function(){var e=it.read(arguments);return new it(this.width-e.width,this.height-e.height)},multiply:function(){var e=it.read(arguments);return new it(this.width*e.width,this.height*e.height)},divide:function(){var e=it.read(arguments);return new it(this.width/e.width,this.height/e.height)},modulo:function(){var e=it.read(arguments);return new it(this.width%e.width,this.height%e.height)},negate:function(){return new it(-this.width,-this.height)},isZero:function(){var e=Ve.isZero;return e(this.width)&&e(this.height)},isNaN:function(){return isNaN(this.width)||isNaN(this.height)},statics:{min:function(e,t){return new it(Math.min(e.width,t.width),Math.min(e.height,t.height))},max:function(e,t){return new it(Math.max(e.width,t.width),Math.max(e.height,t.height))},random:function(){return new it(Math.random(),Math.random())}}},O.each(["round","ceil","floor","abs"],function(e){var t=Math[e];this[e]=function(){return new it(t(this.width),t(this.height))}},{})),wt=it.extend({initialize:function(e,t,i,r){this._width=e,this._height=t,this._owner=i,this._setter=r},_set:function(e,t,i){return this._width=e,this._height=t,i||this._owner[this._setter](this),this},getWidth:function(){return this._width},setWidth:function(e){this._width=e,this._owner[this._setter](this)},getHeight:function(){return this._height},setHeight:function(e){this._height=e,this._owner[this._setter](this)}}),Fe=O.extend({_class:"Rectangle",_readIndex:!0,beans:!0,initialize:function(e,t,i,r){var l,d,f,v,g,x,T=arguments,S=typeof e;return S=="number"?(this._set(e,t,i,r),l=4):S=="undefined"||e===null?(this._set(0,0,0,0),l=e===null?1:0):T.length===1&&(Array.isArray(e)?(this._set.apply(this,e),l=1):e.x!==k||e.width!==k?(this._set(e.x||0,e.y||0,e.width||0,e.height||0),l=1):e.from===k&&e.to===k&&(this._set(0,0,0,0),O.readSupported(T,this)&&(l=1))),l===k&&(f=Q.readNamed(T,"from"),d=O.peek(T),S=f.x,f=f.y,d&&d.x!==k||O.hasNamed(T,"to")?(v=(x=Q.readNamed(T,"to")).x-S,g=x.y-f,v<0&&(S=x.x,v=-v),g<0&&(f=x.y,g=-g)):(v=(x=it.read(T)).width,g=x.height),this._set(S,f,v,g),l=T.__index),(T=T.__filtered)&&(this.__filtered=T),this.__read&&(this.__read=l),this},set:"#initialize",_set:function(e,t,i,r){return this.x=e,this.y=t,this.width=i,this.height=r,this},clone:function(){return new Fe(this.x,this.y,this.width,this.height)},equals:function(e){var t=O.isPlainValue(e)?Fe.read(arguments):e;return t===this||t&&this.x===t.x&&this.y===t.y&&this.width===t.width&&this.height===t.height||!1},toString:function(){var e=tt.instance;return"{ x: "+e.number(this.x)+", y: "+e.number(this.y)+", width: "+e.number(this.width)+", height: "+e.number(this.height)+" }"},_serialize:function(e){return[(e=e.formatter).number(this.x),e.number(this.y),e.number(this.width),e.number(this.height)]},getPoint:function(e){return new(e?Q:Ct)(this.x,this.y,this,"setPoint")},setPoint:function(){var e=Q.read(arguments);this.x=e.x,this.y=e.y},getSize:function(e){return new(e?it:wt)(this.width,this.height,this,"setSize")},_fw:1,_fh:1,setSize:function(){var e=it.read(arguments),t=this._sx,i=this._sy,r=e.width;e=e.height,t&&(this.x+=(this.width-r)*t),i&&(this.y+=(this.height-e)*i),this.width=r,this.height=e,this._fw=this._fh=1},getLeft:function(){return this.x},setLeft:function(e){var t;this._fw||(t=e-this.x,this.width-=this._sx===.5?2*t:t),this.x=e,this._sx=this._fw=0},getTop:function(){return this.y},setTop:function(e){var t;this._fh||(t=e-this.y,this.height-=this._sy===.5?2*t:t),this.y=e,this._sy=this._fh=0},getRight:function(){return this.x+this.width},setRight:function(e){var t;this._fw||(t=e-this.x,this.width=this._sx===.5?2*t:t),this.x=e-this.width,this._sx=1,this._fw=0},getBottom:function(){return this.y+this.height},setBottom:function(e){var t;this._fh||(t=e-this.y,this.height=this._sy===.5?2*t:t),this.y=e-this.height,this._sy=1,this._fh=0},getCenterX:function(){return this.x+this.width/2},setCenterX:function(e){this._fw||this._sx===.5?this.x=e-this.width/2:(this._sx&&(this.x+=2*(e-this.x)*this._sx),this.width=2*(e-this.x)),this._sx=.5,this._fw=0},getCenterY:function(){return this.y+this.height/2},setCenterY:function(e){this._fh||this._sy===.5?this.y=e-this.height/2:(this._sy&&(this.y+=2*(e-this.y)*this._sy),this.height=2*(e-this.y)),this._sy=.5,this._fh=0},getCenter:function(e){return new(e?Q:Ct)(this.getCenterX(),this.getCenterY(),this,"setCenter")},setCenter:function(){var e=Q.read(arguments);return this.setCenterX(e.x),this.setCenterY(e.y),this},getArea:function(){return this.width*this.height},isEmpty:function(){return this.width===0||this.height===0},contains:function(e){return e&&e.width!==k||(Array.isArray(e)?e:arguments).length===4?this._containsRectangle(Fe.read(arguments)):this._containsPoint(Q.read(arguments))},_containsPoint:function(e){var t=e.x;return e=e.y,t>=this.x&&e>=this.y&&t<=this.x+this.width&&e<=this.y+this.height},_containsRectangle:function(e){var t=e.x,i=e.y;return t>=this.x&&i>=this.y&&t+e.width<=this.x+this.width&&i+e.height<=this.y+this.height},intersects:function(){var e=Fe.read(arguments),t=O.read(arguments)||0;return e.x+e.width>this.x-t&&e.y+e.height>this.y-t&&e.x<this.x+this.width+t&&e.y<this.y+this.height+t},intersect:function(){var e=Fe.read(arguments),t=Math.max(this.x,e.x),i=Math.max(this.y,e.y),r=Math.min(this.x+this.width,e.x+e.width);return e=Math.min(this.y+this.height,e.y+e.height),new Fe(t,i,r-t,e-i)},unite:function(){var e=Fe.read(arguments),t=Math.min(this.x,e.x),i=Math.min(this.y,e.y),r=Math.max(this.x+this.width,e.x+e.width);return e=Math.max(this.y+this.height,e.y+e.height),new Fe(t,i,r-t,e-i)},include:function(){var e=Q.read(arguments),t=Math.min(this.x,e.x),i=Math.min(this.y,e.y),r=Math.max(this.x+this.width,e.x);return e=Math.max(this.y+this.height,e.y),new Fe(t,i,r-t,e-i)},expand:function(){var e=(t=it.read(arguments)).width,t=t.height;return new Fe(this.x-e/2,this.y-t/2,this.width+e,this.height+t)},scale:function(e,t){return this.expand(this.width*e-this.width,this.height*(t===k?e:t)-this.height)}},O.each([["Top","Left"],["Top","Right"],["Bottom","Left"],["Bottom","Right"],["Left","Center"],["Top","Center"],["Right","Center"],["Bottom","Center"]],function(e,t){var i=e.join(""),r=/^[RL]/.test(i);4<=t&&(e[1]+=r?"Y":"X"),t=e[r?0:1],r=e[r?1:0];var l="get"+t,d="get"+r,f="set"+t,v="set"+r,g="set"+i;this["get"+i]=function(x){return new(x?Q:Ct)(this[l](),this[d](),this,g)},this[g]=function(){var x=Q.read(arguments);this[f](x.x),this[v](x.y)}},{beans:!0})),Lt=Fe.extend({initialize:function(e,t,i,r,l,d){this._set(e,t,i,r,!0),this._owner=l,this._setter=d},_set:function(e,t,i,r,l){return this._x=e,this._y=t,this._width=i,this._height=r,l||this._owner[this._setter](this),this}},new function(){var e=Fe.prototype;return O.each(["x","y","width","height"],function(t){var i=O.capitalize(t),r="_"+t;this["get"+i]=function(){return this[r]},this["set"+i]=function(l){this[r]=l,this._dontNotify||this._owner[this._setter](this)}},O.each(["Point","Size","Center","Left","Top","Right","Bottom","CenterX","CenterY","TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],function(t){var i="set"+t;this[i]=function(){this._dontNotify=!0,e[i].apply(this,arguments),this._dontNotify=!1,this._owner[this._setter](this)}},{isSelected:function(){return!!(2&this._owner._selection)},setSelected:function(t){var i=this._owner;i._changeSelection&&i._changeSelection(2,t)}}))}),ft=O.extend({_class:"Matrix",initialize:function e(t,i){var r=arguments,l=r.length,d=!0;if(6<=l?this._set.apply(this,r):l===1||l===2?t instanceof e?this._set(t._a,t._b,t._c,t._d,t._tx,t._ty,i):Array.isArray(t)?this._set.apply(this,i?t.concat([i]):t):d=!1:l?d=!1:this.reset(),!d)throw new Error("Unsupported matrix parameters");return this},set:"#initialize",_set:function(e,t,i,r,l,d,f){return this._a=e,this._b=t,this._c=i,this._d=r,this._tx=l,this._ty=d,f||this._changed(),this},_serialize:function(e,t){return O.serialize(this.getValues(),e,!0,t)},_changed:function(){var e=this._owner;e&&(e._applyMatrix?e.transform(null,!0):e._changed(25))},clone:function(){return new ft(this._a,this._b,this._c,this._d,this._tx,this._ty)},equals:function(e){return e===this||e&&this._a===e._a&&this._b===e._b&&this._c===e._c&&this._d===e._d&&this._tx===e._tx&&this._ty===e._ty},toString:function(){var e=tt.instance;return"[["+[e.number(this._a),e.number(this._c),e.number(this._tx)].join(", ")+"], ["+[e.number(this._b),e.number(this._d),e.number(this._ty)].join(", ")+"]]"},reset:function(e){return this._a=this._d=1,this._b=this._c=this._tx=this._ty=0,e||this._changed(),this},apply:function(e,t){var i=this._owner;return!!i&&(i.transform(null,O.pick(e,!0),t),this.isIdentity())},translate:function(){var e=(t=Q.read(arguments)).x,t=t.y;return this._tx+=e*this._a+t*this._c,this._ty+=e*this._b+t*this._d,this._changed(),this},scale:function(){var e=arguments,t=Q.read(e);return(e=Q.read(e,0,{readNull:!0}))&&this.translate(e),this._a*=t.x,this._b*=t.x,this._c*=t.y,this._d*=t.y,e&&this.translate(e.negate()),this._changed(),this},rotate:function(e){e*=Math.PI/180;var t=(g=Q.read(arguments,1)).x,i=g.y,r=Math.cos(e),l=Math.sin(e),d=t-t*r+i*l,f=i-t*l-i*r,v=this._a,g=this._b;return t=this._c,i=this._d,this._a=r*v+l*t,this._b=r*g+l*i,this._c=-l*v+r*t,this._d=-l*g+r*i,this._tx+=d*v+f*t,this._ty+=d*g+f*i,this._changed(),this},shear:function(){var e=arguments,t=Q.read(e),i=Q.read(e,0,{readNull:!0});i&&this.translate(i);var r=this._a;return e=this._b,this._a+=t.y*this._c,this._b+=t.y*this._d,this._c+=t.x*r,this._d+=t.x*e,i&&this.translate(i.negate()),this._changed(),this},skew:function(){var e=arguments,t=Q.read(e),i=Q.read(e,0,{readNull:!0});return e=Math.PI/180,e=new Q(Math.tan(t.x*e),Math.tan(t.y*e)),this.shear(e,i)},append:function(e,t){var i,r,l,d,f,v,g,x,T;return e&&(i=this._a,r=this._b,l=this._c,d=this._d,f=e._a,v=e._c,g=e._b,x=e._d,T=e._tx,e=e._ty,this._a=f*i+g*l,this._c=v*i+x*l,this._b=f*r+g*d,this._d=v*r+x*d,this._tx+=T*i+e*l,this._ty+=T*r+e*d,t||this._changed()),this},prepend:function(e,t){var i,r,l,d,f,v,g,x,T,S,D;return e&&(i=this._a,r=this._b,l=this._c,d=this._d,f=this._tx,v=this._ty,g=e._a,x=e._c,T=e._b,S=e._d,D=e._tx,e=e._ty,this._a=g*i+x*r,this._c=g*l+x*d,this._b=T*i+S*r,this._d=T*l+S*d,this._tx=g*f+x*v+D,this._ty=T*f+S*v+e,t||this._changed()),this},appended:function(e){return this.clone().append(e)},prepended:function(e){return this.clone().prepend(e)},invert:function(){var e=this._a,t=this._b,i=this._c,r=this._d,l=this._tx,d=this._ty,f=e*r-t*i,v=null;return f&&!isNaN(f)&&isFinite(l)&&isFinite(d)&&(this._a=r/f,this._b=-t/f,this._c=-i/f,this._d=e/f,this._tx=(i*d-r*l)/f,this._ty=(t*l-e*d)/f,v=this),v},inverted:function(){return this.clone().invert()},concatenate:"#append",preConcatenate:"#prepend",chain:"#appended",_shiftless:function(){return new ft(this._a,this._b,this._c,this._d,0,0)},_orNullIfIdentity:function(){return this.isIdentity()?null:this},isIdentity:function(){return this._a===1&&this._b===0&&this._c===0&&this._d===1&&this._tx===0&&this._ty===0},isInvertible:function(){var e=this._a*this._d-this._c*this._b;return e&&!isNaN(e)&&isFinite(this._tx)&&isFinite(this._ty)},isSingular:function(){return!this.isInvertible()},transform:function(e,t,i){return arguments.length<3?this._transformPoint(Q.read(arguments)):this._transformCoordinates(e,t,i)},_transformPoint:function(e,t,i){var r=e.x;return e=e.y,(t=t||new Q)._set(r*this._a+e*this._c+this._tx,r*this._b+e*this._d+this._ty,i)},_transformCoordinates:function(e,t,i){for(var r=0,l=2*i;r<l;r+=2){var d=e[r],f=e[r+1];t[r]=d*this._a+f*this._c+this._tx,t[r+1]=d*this._b+f*this._d+this._ty}return t},_transformCorners:function(e){var t=e.x,i=e.y,r=t+e.width;return e=[t,i,r,i,r,e=i+e.height,t,e],this._transformCoordinates(e,e,4)},_transformBounds:function(e,t,i){for(var r=this._transformCorners(e),l=r.slice(0,2),d=l.slice(),f=2;f<8;f++){var v=r[f],g=1&f;v<l[g]?l[g]=v:v>d[g]&&(d[g]=v)}return(t=t||new Fe)._set(l[0],l[1],d[0]-l[0],d[1]-l[1],i)},inverseTransform:function(){return this._inverseTransform(Q.read(arguments))},_inverseTransform:function(e,t,i){var r=this._a,l=this._b,d=this._c,f=this._d,v=this._tx,g=this._ty,x=r*f-l*d,T=null;return x&&!isNaN(x)&&isFinite(v)&&isFinite(g)&&(g=e.x-this._tx,e=e.y-this._ty,T=(t=t||new Q)._set((g*f-e*d)/x,(e*r-g*l)/x,i)),T},decompose:function(){var e,t,i,r,l=this._a,d=this._b,f=this._c,v=this._d,g=l*v-d*f,x=Math.sqrt,T=Math.atan2,S=180/Math.PI;return r=l!==0||d!==0?(e=x(l*l+d*d),t=Math.acos(l/e)*(0<d?1:-1),i=[e,g/e],[T(l*f+d*v,e*e),0]):f!==0||v!==0?(r=x(f*f+v*v),t=Math.asin(f/r)*(0<v?1:-1),i=[g/r,r],[0,T(l*f+d*v,r*r)]):i=[t=0,0],{translation:this.getTranslation(),rotation:t*S,scaling:new Q(i),skewing:new Q(r[0]*S,r[1]*S)}},getValues:function(){return[this._a,this._b,this._c,this._d,this._tx,this._ty]},getTranslation:function(){return new Q(this._tx,this._ty)},getScaling:function(){return this.decompose().scaling},getRotation:function(){return this.decompose().rotation},applyToContext:function(e){this.isIdentity()||e.transform(this._a,this._b,this._c,this._d,this._tx,this._ty)}},O.each(["a","b","c","d","tx","ty"],function(e){var t=O.capitalize(e),i="_"+e;this["get"+t]=function(){return this[i]},this["set"+t]=function(r){this[i]=r,this._changed()}},{})),_t=O.extend({_class:"Line",initialize:function(e,t,i,r,l){(4<=arguments.length?(this._px=e,this._py=t,this._vx=i,this._vy=r,l):(this._px=e.x,this._py=e.y,this._vx=t.x,this._vy=t.y,i))||(this._vx-=this._px,this._vy-=this._py)},getPoint:function(){return new Q(this._px,this._py)},getVector:function(){return new Q(this._vx,this._vy)},getLength:function(){return this.getVector().getLength()},intersect:function(e,t){return _t.intersect(this._px,this._py,this._vx,this._vy,e._px,e._py,e._vx,e._vy,!0,t)},getSide:function(e,t){return _t.getSide(this._px,this._py,this._vx,this._vy,e.x,e.y,!0,t)},getDistance:function(e){return Math.abs(this.getSignedDistance(e))},getSignedDistance:function(e){return _t.getSignedDistance(this._px,this._py,this._vx,this._vy,e.x,e.y,!0)},isCollinear:function(e){return Q.isCollinear(this._vx,this._vy,e._vx,e._vy)},isOrthogonal:function(e){return Q.isOrthogonal(this._vx,this._vy,e._vx,e._vy)},statics:{intersect:function(e,t,i,r,l,d,f,v,g,x){if(g||(i-=e,r-=t,f-=l,v-=d),g=i*v-r*f,!Ve.isMachineZero(g)&&(v=(f*(d=t-d)-v*(l=e-l))/g,g=(i*d-r*l)/g,x||-1e-12<v&&v<1+1e-12&&-1e-12<g&&g<1+1e-12))return new Q(e+(v=x?v:v<=0?0:1<=v?1:v)*i,t+v*r)},getSide:function(e,t,i,r,l,d,f,v){return f||(i-=e,r-=t),t=(e=l-e)*r-(d-t)*i,(t=!v&&Ve.isMachineZero(t)&&0<=(t=(e*i+e*i)/(i*i+r*r))&&t<=1?0:t)<0?-1:0<t?1:0},getSignedDistance:function(e,t,i,r,l,d,f){return f||(i-=e,r-=t),i===0?0<r?l-e:e-l:r===0?i<0?d-t:t-d:((l-e)*r-(d-t)*i)/(i<r?r*Math.sqrt(1+i*i/(r*r)):i*Math.sqrt(1+r*r/(i*i)))},getDistance:function(e,t,i,r,l,d,f){return Math.abs(_t.getSignedDistance(e,t,i,r,l,d,f))}}}),zt=we.extend({_class:"Project",_list:"projects",_reference:"project",_compactSerialize:!0,initialize:function(e){we.call(this,!0),this._children=[],this._namedChildren={},this._activeLayer=null,this._currentStyle=new fe(null,null,this),this._view=B.create(this,e||Ue.getCanvas(1,1)),this._selectionItems={},this._selectionCount=0,this._updateVersion=0},_serialize:function(e,t){return O.serialize(this._children,e,!0,t)},_changed:function(e,t){1&e&&(l=this._view)&&(l._needsUpdate=!0,!l._requested&&l._autoUpdate&&l.requestUpdate());var i,r,l,d=this._changes;d&&t&&((l=(i=this._changesById)[r=t._id])?l.flags|=e:d.push(i[r]={item:t,flags:e}))},clear:function(){for(var e=this._children,t=e.length-1;0<=t;t--)e[t].remove()},isEmpty:function(){return!this._children.length},remove:function e(){return!!e.base.call(this)&&(this._view&&this._view.remove(),!0)},getView:function(){return this._view},getCurrentStyle:function(){return this._currentStyle},setCurrentStyle:function(e){this._currentStyle.set(e)},getIndex:function(){return this._index},getOptions:function(){return this._scope.settings},getLayers:function(){return this._children},getActiveLayer:function(){return this._activeLayer||new Wt({project:this,insert:!0})},getSymbolDefinitions:function(){var e=[],t={};return this.getItems({class:ni,match:function(i){var r=i._definition;return i=r._id,t[i]||(t[i]=!0,e.push(r)),!1}}),e},getSymbols:"getSymbolDefinitions",getSelectedItems:function(){var e,t=this._selectionItems,i=[];for(e in t){var r=t[e],l=r._selection;1&l&&r.isInserted()?i.push(r):l||this._updateSelection(r)}return i},_updateSelection:function(e){var t=e._id,i=this._selectionItems;e._selection?i[t]!==e&&(this._selectionCount++,i[t]=e):i[t]===e&&(this._selectionCount--,delete i[t])},selectAll:function(){for(var e=this._children,t=0,i=e.length;t<i;t++)e[t].setFullySelected(!0)},deselectAll:function(){var e,t=this._selectionItems;for(e in t)t[e].setFullySelected(!1)},addLayer:function(e){return this.insertLayer(k,e)},insertLayer:function(e,t){return t instanceof Wt?(t._remove(!1,!0),O.splice(this._children,[t],e,0),t._setProject(this,!0),(e=t._name)&&t.setName(e),this._changes&&t._changed(5),this._activeLayer||(this._activeLayer=t)):t=null,t},_insertItem:function(e,t,i){return t=this.insertLayer(e,t)||(this._activeLayer||this._insertItem(k,new Wt(dt.NO_INSERT),!0)).insertChild(e,t),i&&t.activate&&t.activate(),t},getItems:function(e){return dt._getItems(this,e)},getItem:function(e){return dt._getItems(this,e,null,null,!0)[0]||null},importJSON:function(e){this.activate();var t=this._activeLayer;return O.importJSON(e,t&&t.isEmpty()&&t)},removeOn:function(e){var t=this._removeSets;if(t){e==="mouseup"&&(t.mousedrag=null);var i=t[e];if(i){for(var r in i){var l,d=i[r];for(l in t){var f=t[l];f&&f!=i&&delete f[d._id]}d.remove()}t[e]=null}}},draw:function(e,t,i){this._updateVersion++,e.save(),t.applyToContext(e);for(var r=this._children,l=new O({offset:new Q(0,0),pixelRatio:i,viewMatrix:t.isIdentity()?null:t,matrices:[new ft],updateMatrix:!0}),d=0,f=r.length;d<f;d++)r[d].draw(e,l);if(e.restore(),0<this._selectionCount){e.save(),e.strokeWidth=1;var v,g=this._selectionItems,x=this._scope.settings.handleSize,T=this._updateVersion;for(v in g)g[v]._drawSelection(e,t,x,g,T);e.restore()}}}),dt=O.extend($,{statics:{extend:function e(t){return t._serializeFields&&(t._serializeFields=O.set({},this.prototype._serializeFields,t._serializeFields)),e.base.apply(this,arguments)},INSERT:{insert:!0},NO_INSERT:{insert:!1}},_class:"Item",_name:null,_applyMatrix:!0,_canApplyMatrix:!0,_canScaleStroke:!1,_pivot:null,_visible:!0,_blendMode:"normal",_opacity:1,_locked:!1,_guide:!1,_clipMask:!1,_selection:0,_selectBounds:!0,_selectChildren:!1,_serializeFields:{name:null,applyMatrix:null,matrix:new ft,pivot:null,visible:!0,blendMode:"normal",opacity:1,locked:!1,guide:!1,clipMask:!1,selected:!1,data:{}},_prioritize:["applyMatrix"]},new function(){var e=["onMouseDown","onMouseUp","onMouseDrag","onClick","onDoubleClick","onMouseMove","onMouseEnter","onMouseLeave"];return O.each(e,function(t){this._events[t]={install:function(i){this.getView()._countItemEvent(i,1)},uninstall:function(i){this.getView()._countItemEvent(i,-1)}}},{_events:{onFrame:{install:function(){this.getView()._animateItem(this,!0)},uninstall:function(){this.getView()._animateItem(this,!1)}},onLoad:{},onError:{}},statics:{_itemHandlers:e}})},{initialize:function(){},_initialize:function(e,t){var i=e&&O.isPlainObject(e),r=i&&e.internal===!0,l=this._matrix=new ft,d=i&&e.project||jt.project,f=jt.settings;return this._id=r?null:Tt.get(),this._parent=this._index=null,this._applyMatrix=this._canApplyMatrix&&f.applyMatrix,t&&l.translate(t),(l._owner=this)._style=new fe(d._currentStyle,this,d),r||i&&e.insert==0||!f.insertItems&&(!i||e.insert!=1)?this._setProject(d):(i&&e.parent||d)._insertItem(k,this,!0),i&&e!==dt.NO_INSERT&&e!==dt.INSERT&&this.set(e,{internal:!0,insert:!0,project:!0,parent:!0}),i},_serialize:function(e,t){var i={},r=this;function l(d){for(var f in d){var v=r[f];O.equals(v,f==="leading"?1.2*d.fontSize:d[f])||(i[f]=O.serialize(v,e,f!=="data",t))}}return l(this._serializeFields),this instanceof Dt||l(this._style._defaults),[this._class,i]},_changed:function(e){var t=this._symbol,i=this._parent||t,r=this._project;8&e&&(this._bounds=this._position=this._decomposed=k),16&e&&(this._globalMatrix=k),i&&72&e&&dt._clearBoundsCache(i),2&e&&dt._clearBoundsCache(this),r&&r._changed(e,this),t&&t._changed(e)},getId:function(){return this._id},getName:function(){return this._name},setName:function(e){if(this._name&&this._removeNamed(),e===+e+"")throw new Error("Names consisting only of numbers are not supported.");var t,i=this._getOwner();e&&i&&(t=i._children,((i=i._namedChildren)[e]=i[e]||[]).push(this),e in t||(t[e]=this)),this._name=e||k,this._changed(256)},getStyle:function(){return this._style},setStyle:function(e){this.getStyle().set(e)}},O.each(["locked","visible","blendMode","opacity","guide"],function(e){var t=O.capitalize(e),i="_"+e,r={locked:256,visible:265};this["get"+t]=function(){return this[i]},this["set"+t]=function(l){l!=this[i]&&(this[i]=l,this._changed(r[e]||257))}},{}),{beans:!0,getSelection:function(){return this._selection},setSelection:function(e){e!==this._selection&&(this._selection=e,(e=this._project)&&(e._updateSelection(this),this._changed(257)))},_changeSelection:function(e,t){var i=this._selection;this.setSelection(t?i|e:i&~e)},isSelected:function(){if(this._selectChildren){for(var e=this._children,t=0,i=e.length;t<i;t++)if(e[t].isSelected())return!0}return!!(1&this._selection)},setSelected:function(e){if(this._selectChildren)for(var t=this._children,i=0,r=t.length;i<r;i++)t[i].setSelected(e);this._changeSelection(1,e)},isFullySelected:function(){var e=this._children,t=!!(1&this._selection);if(e&&t){for(var i=0,r=e.length;i<r;i++)if(!e[i].isFullySelected())return!1;return!0}return t},setFullySelected:function(e){var t=this._children;if(t)for(var i=0,r=t.length;i<r;i++)t[i].setFullySelected(e);this._changeSelection(1,e)},isClipMask:function(){return this._clipMask},setClipMask:function(e){this._clipMask!=(e=!!e)&&((this._clipMask=e)&&(this.setFillColor(null),this.setStrokeColor(null)),this._changed(257),this._parent&&this._parent._changed(2048))},getData:function(){return this._data||(this._data={}),this._data},setData:function(e){this._data=e},getPosition:function(e){return new(e?Q:Ct)((e=this._position||(this._position=this._getPositionFromBounds())).x,e.y,this,"setPosition")},setPosition:function(){this.translate(Q.read(arguments).subtract(this.getPosition(!0)))},_getPositionFromBounds:function(e){return this._pivot?this._matrix._transformPoint(this._pivot):(e||this.getBounds()).getCenter(!0)},getPivot:function(){var e=this._pivot;return e?new Ct(e.x,e.y,this,"setPivot"):null},setPivot:function(){this._pivot=Q.read(arguments,0,{clone:!0,readNull:!0}),this._position=k}},O.each({getStrokeBounds:{stroke:!0},getHandleBounds:{handle:!0},getInternalBounds:{internal:!0}},function(e,t){this[t]=function(i){return this.getBounds(i,e)}},{beans:!0,getBounds:function(e,t){var i=t||e instanceof ft,r=O.set({},i?t:e,this._boundsOptions);return r.stroke&&!this.getStrokeScaling()||(r.cacheItem=this),r=this._getCachedBounds(i&&e,r).rect,arguments.length?r:new Lt(r.x,r.y,r.width,r.height,this,"setBounds")},setBounds:function(){var e=Fe.read(arguments),t=this.getBounds(),i=this._matrix,r=new ft,l=e.getCenter();r.translate(l),e.width==t.width&&e.height==t.height||(i.isInvertible()||(i.set(i._backup||new ft().translate(i.getTranslation())),t=this.getBounds()),r.scale(t.width!==0?e.width/t.width:0,t.height!==0?e.height/t.height:0)),l=t.getCenter(),r.translate(-l.x,-l.y),this.transform(r)},_getBounds:function(e,t){var i=this._children;return i&&i.length?(dt._updateBoundsCache(this,t.cacheItem),dt._getBounds(i,e,t)):new Fe},_getBoundsCacheKey:function(e,t){return[e.stroke?1:0,e.handle?1:0,t?1:0].join("")},_getCachedBounds:function(e,t,i){e=e&&e._orNullIfIdentity();var r,l=t.internal&&!i,d=t.cacheItem,f=l?null:this._matrix._orNullIfIdentity(),v=d&&(!e||e.equals(f))&&this._getBoundsCacheKey(t,l);return i=this._bounds,dt._updateBoundsCache(this._parent||this._symbol,d),v&&i&&v in i?{rect:(r=i[v]).rect.clone(),nonscaling:r.nonscaling}:(f=(e=this._getBounds(e||f,t)).rect||e,t=this._style,t=e.nonscaling||t.hasStroke()&&!t.getStrokeScaling(),v&&(i||(this._bounds=i={}),r=i[v]={rect:f.clone(),nonscaling:t,internal:l}),{rect:f,nonscaling:t})},_getStrokeMatrix:function(e,t){return(e=(t=this.getStrokeScaling()?null:t&&t.internal?this:this._parent||this._symbol&&this._symbol._item)?t.getViewMatrix().invert():e)&&e._shiftless()},statics:{_updateBoundsCache:function(e,t){var i;e&&t&&(i=t._id,(e=e._boundsCache=e._boundsCache||{ids:{},list:[]}).ids[i]||(e.list.push(t),e.ids[i]=t))},_clearBoundsCache:function(e){var t=e._boundsCache;if(t){e._bounds=e._position=e._boundsCache=k;for(var i=0,r=t.list,l=r.length;i<l;i++){var d=r[i];d!==e&&(d._bounds=d._position=k,d._boundsCache&&dt._clearBoundsCache(d))}}},_getBounds:function(e,t,i){var r=x=1/0,l=T=-x,d=!1;i=i||{};for(var f=0,v=e.length;f<v;f++){var g,x,T,S=e[f];S._visible&&!S.isEmpty(!0)&&(S=(g=S._getCachedBounds(t&&t.appended(S._matrix),i,!0)).rect,x=Math.min(S.x,x),r=Math.min(S.y,r),T=Math.max(S.x+S.width,T),l=Math.max(S.y+S.height,l),g.nonscaling&&(d=!0))}return{rect:isFinite(x)?new Fe(x,r,T-x,l-r):new Fe,nonscaling:d}}}}),{beans:!0,_decompose:function(){return this._applyMatrix?null:this._decomposed||(this._decomposed=this._matrix.decompose())},getRotation:function(){var e=this._decompose();return e?e.rotation:0},setRotation:function(e){var t,i=this.getRotation();i!=null&&e!=null&&(t=this._decomposed,this.rotate(e-i),t&&(t.rotation=e,this._decomposed=t))},getScaling:function(){var e=(e=this._decompose())&&e.scaling;return new Ct(e?e.x:1,e?e.y:1,this,"setScaling")},setScaling:function(){var e,t,i,r,l=this.getScaling(),d=Q.read(arguments,0,{clone:!0,readNull:!0});l&&d&&!l.equals(d)&&(e=this.getRotation(),t=this._decomposed,i=new ft,(r=Ve.isZero)(l.x)||r(l.y)?(i.translate(t.translation),e&&i.rotate(e),i.scale(d.x,d.y),this._matrix.set(i)):(r=this.getPosition(!0),i.translate(r),e&&i.rotate(e),i.scale(d.x/l.x,d.y/l.y),e&&i.rotate(-e),i.translate(r.negate()),this.transform(i)),t&&(t.scaling=d,this._decomposed=t))},getMatrix:function(){return this._matrix},setMatrix:function(){var e=this._matrix;e.set.apply(e,arguments)},getGlobalMatrix:function(e){if(r=this._globalMatrix)for(var t=this._parent,i=[];t;){if(!t._globalMatrix){for(var r=null,l=0,d=i.length;l<d;l++)i[l]._globalMatrix=null;break}i.push(t),t=t._parent}return r||(r=this._globalMatrix=this._matrix.clone(),(t=this._parent)&&r.prepend(t.getGlobalMatrix(!0))),e?r:r.clone()},getViewMatrix:function(){return this.getGlobalMatrix().prepend(this.getView()._matrix)},getApplyMatrix:function(){return this._applyMatrix},setApplyMatrix:function(e){(this._applyMatrix=this._canApplyMatrix&&!!e)&&this.transform(null,!0)},getTransformContent:"#getApplyMatrix",setTransformContent:"#setApplyMatrix"},{getProject:function(){return this._project},_setProject:function(e,t){if(this._project!==e){this._project&&this._installEvents(!1),this._project=e;for(var i=this._children,r=0,l=i&&i.length;r<l;r++)i[r]._setProject(e);t=!0}t&&this._installEvents(!0)},getView:function(){return this._project._view},_installEvents:function e(t){e.base.call(this,t);for(var i=this._children,r=0,l=i&&i.length;r<l;r++)i[r]._installEvents(t)},getLayer:function(){for(var e=this;e=e._parent;)if(e instanceof Wt)return e;return null},getParent:function(){return this._parent},setParent:function(e){return e.addChild(this)},_getOwner:"#getParent",getChildren:function(){return this._children},setChildren:function(e){this.removeChildren(),this.addChildren(e)},getFirstChild:function(){return this._children&&this._children[0]||null},getLastChild:function(){return this._children&&this._children[this._children.length-1]||null},getNextSibling:function(){var e=this._getOwner();return e&&e._children[this._index+1]||null},getPreviousSibling:function(){var e=this._getOwner();return e&&e._children[this._index-1]||null},getIndex:function(){return this._index},equals:function(e){return e===this||e&&this._class===e._class&&this._style.equals(e._style)&&this._matrix.equals(e._matrix)&&this._locked===e._locked&&this._visible===e._visible&&this._blendMode===e._blendMode&&this._opacity===e._opacity&&this._clipMask===e._clipMask&&this._guide===e._guide&&this._equals(e)||!1},_equals:function(e){return O.equals(this._children,e._children)},clone:function(e){var t=new this.constructor(dt.NO_INSERT),i=this._children,r=O.pick(e?e.insert:k,e===k||e===!0);e=O.pick(e?e.deep:k,!0),i&&t.copyAttributes(this),i&&!e||t.copyContent(this),i||t.copyAttributes(this),r&&t.insertAbove(this);var l=this._name;if(r=this._parent,l&&r){i=r._children;for(var d=l,f=1;i[l];)l=d+" "+f++;l!==d&&t.setName(l)}return t},copyContent:function(e){for(var t=e._children,i=0,r=t&&t.length;i<r;i++)this.addChild(t[i].clone(!1),!0)},copyAttributes:function(e,t){this.setStyle(e._style);for(var i=["_locked","_visible","_blendMode","_opacity","_clipMask","_guide"],r=0,l=i.length;r<l;r++){var d=i[r];e.hasOwnProperty(d)&&(this[d]=e[d])}t||this._matrix.set(e._matrix,!0),this.setApplyMatrix(e._applyMatrix),this.setPivot(e._pivot),this.setSelection(e._selection);var f=e._data;t=e._name,this._data=f?O.clone(f):null,t&&this.setName(t)},rasterize:function(e,t){var i;O.isPlainObject(e)?(f=e.resolution,i=e.insert,r=e.raster):(f=e,i=t);var r=r||new ei(dt.NO_INSERT),l=this.getStrokeBounds(),d=(f||this.getView().getResolution())/72,f=(e=l.getTopLeft().floor(),t=l.getBottomRight().ceil(),new it(t.subtract(e)));return l=f.multiply(d),r.setSize(l,!0),l.isZero()||(t=r.getContext(!0),l=new ft().scale(d).translate(e.negate()),t.save(),l.applyToContext(t),this.draw(t,new O({matrices:[l]})),t.restore()),r._matrix.set(new ft().translate(e.add(f.divide(2))).scale(1/d)),i!==k&&!i||r.insertAbove(this),r},contains:function(){var e=this._matrix;return e.isInvertible()&&!!this._contains(e._inverseTransform(Q.read(arguments)))},_contains:function(e){var t=this._children;if(t){for(var i=t.length-1;0<=i;i--)if(t[i].contains(e))return!0;return!1}return e.isInside(this.getInternalBounds())},isInside:function(){return Fe.read(arguments).contains(this.getBounds())},_asPathItem:function(){return new St.Rectangle({rectangle:this.getInternalBounds(),matrix:this._matrix,insert:!1})},intersects:function(e,t){return e instanceof dt&&0<this._asPathItem().getIntersections(e._asPathItem(),null,t,!0).length}},new function(){function e(){var r=arguments;return this._hitTest(Q.read(r),Vt.getOptions(r))}function t(){var r=arguments,l=Q.read(r),d=Vt.getOptions(r);return r=[],this._hitTest(l,new O({all:r},d)),r}function i(r,l,d,f){var v=this._children;if(v)for(var g=v.length-1;0<=g;g--){var x;if((x=(x=v[g])!==f&&x._hitTest(r,l,d))&&!l.all)return x}return null}return zt.inject({hitTest:e,hitTestAll:t,_hitTest:i}),{hitTest:e,hitTestAll:t,_hitTestChildren:i}},{_hitTest:function(e,t,i){if(this._locked||!this._visible||this._guide&&!t.guides||this.isEmpty())return null;var r=this._matrix,l=i?i.appended(r):this.getGlobalMatrix().prepend(this.getView()._matrix),d=Math.max(t.tolerance,1e-12),f=t._tolerancePadding=new it(St._getStrokePadding(d,r._shiftless().invert()));if(!(e=r._inverseTransform(e))||!this._children&&!this.getBounds({internal:!0,stroke:!0,handle:!0}).expand(f.multiply(2))._containsPoint(e))return null;var v,g,x=!(t.guides&&!this._guide||t.selected&&!this.isSelected()||t.type&&t.type!==O.hyphenate(this._class)||t.class&&!(this instanceof t.class)),T=t.match,S=this;function D(j){return(j=j&&T&&!T(j)?null:j)&&t.all&&t.all.push(j),j}function F(j,Z){var ee=Z?v["get"+Z]():S.getPosition();if(e.subtract(ee).divide(f).length<=1)return new Vt(j,S,{name:Z?O.hyphenate(Z):j,point:ee})}var H=t.position;if(i=t.center,d=t.bounds,x&&this._parent&&(H||i||d)){if((i||d)&&(v=this.getInternalBounds()),!(g=H&&F("position")||i&&F("center","Center"))&&d)for(var U=["TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],K=0;K<8&&!g;K++)g=F("bounds",U[K]);g=D(g)}return(g=g||this._hitTestChildren(e,t,l)||x&&D(this._hitTestSelf(e,t,l,this.getStrokeScaling()?null:l._shiftless().invert()))||null)&&g.point&&(g.point=r.transform(g.point)),g},_hitTestSelf:function(e,t){if(t.fill&&this.hasFill()&&this._contains(e))return new Vt("fill",this)},matches:function(e,t){var i=typeof e;if(i=="object"){for(var r in e)if(e.hasOwnProperty(r)&&!this.matches(r,e[r]))return!1;return!0}if(i=="function")return e(this);if(e==="match")return t(this);if(i=/^(empty|editable)$/.test(e)?this["is"+O.capitalize(e)]():e==="type"?O.hyphenate(this._class):this[e],e==="class"){if(typeof t=="function")return this instanceof t;i=this._class}if(typeof t=="function")return!!t(i);if(t){if(t.test)return t.test(i);if(O.isPlainObject(t))return function l(d,f){for(var v in d)if(d.hasOwnProperty(v)){var g=d[v];if(v=f[v],O.isPlainObject(g)&&O.isPlainObject(v)){if(!l(g,v))return!1}else if(!O.equals(g,v))return!1}return!0}(t,i)}return O.equals(i,t)},getItems:function(e){return dt._getItems(this,e,this._matrix)},getItem:function(e){return dt._getItems(this,e,this._matrix,null,!0)[0]||null},statics:{_getItems:function e(t,i,r,l,d){var f,v,g;l||(v=(f=typeof i=="object"&&i)&&f.overlapping,g=f&&f.inside,x=(j=v||g)&&Fe.read([j]),l={items:[],recursive:f&&f.recursive!==!1,inside:!!g,overlapping:!!v,rect:x,path:v&&new St.Rectangle({rectangle:x,insert:!1})},f&&(i=O.filter({},i,{recursive:!0,inside:!0,overlapping:!0})));var x,T=t._children,S=l.items;r=(x=l.rect)&&(r||new ft);for(var D=0,F=T&&T.length;D<F;D++){var H=T[D],U=r&&r.appended(H._matrix),K=!0;if(x){var j=H.getBounds(U);if(!x.intersects(j))continue;x.contains(j)||l.overlapping&&(j.contains(x)||l.path.intersects(H,U))||(K=!1)}if(K&&H.matches(i)&&(S.push(H),d)||(l.recursive!==!1&&e(H,i,U,l,d),d&&0<S.length))break}return S}}},{importJSON:function(e){return(e=O.importJSON(e,this))!==this?this.addChild(e):e},addChild:function(e){return this.insertChild(k,e)},insertChild:function(e,t){return(t=t?this.insertChildren(e,[t]):null)&&t[0]},addChildren:function(e){return this.insertChildren(this._children.length,e)},insertChildren:function(e,t){var i=this._children;if(i&&t&&0<t.length){for(var r={},l=(t=O.slice(t)).length-1;0<=l;l--){var d=(x=t[l])&&x._id;!x||r[d]?t.splice(l,1):(x._remove(!1,!0),r[d]=!0)}O.splice(i,t,e,0);for(var f=this._project,v=f._changes,g=(l=0,t.length);l<g;l++){var x,T=(x=t[l])._name;x._parent=this,x._setProject(f,!0),T&&x.setName(T),v&&x._changed(5)}this._changed(11)}else t=null;return t},_insertItem:"#insertChild",_insertAt:function(e,t){var i=e&&e._getOwner(),r=e!==this&&i?this:null;return r&&(r._remove(!1,!0),i._insertItem(e._index+t,r)),r},insertAbove:function(e){return this._insertAt(e,1)},insertBelow:function(e){return this._insertAt(e,0)},sendToBack:function(){var e=this._getOwner();return e?e._insertItem(0,this):null},bringToFront:function(){var e=this._getOwner();return e?e._insertItem(k,this):null},appendTop:"#addChild",appendBottom:function(e){return this.insertChild(0,e)},moveAbove:"#insertAbove",moveBelow:"#insertBelow",addTo:function(e){return e._insertItem(k,this)},copyTo:function(e){return this.clone(!1).addTo(e)},reduce:function(e){var t=this._children;return t&&t.length===1?(e=t[0].reduce(e),this._parent?(e.insertAbove(this),this.remove()):e.remove(),e):this},_removeNamed:function(){var e,t,i,r,l=this._getOwner();l&&(e=l._children,(l=(r=(t=l._namedChildren)[i=this._name])?r.indexOf(this):-1)!==-1&&(e[i]==this&&delete e[i],r.splice(l,1),r.length?e[i]=r[0]:delete t[i]))},_remove:function(e,t){var i=this._getOwner(),r=this._project,l=this._index;return this._style&&this._style._dispose(),!(!i||(this._name&&this._removeNamed(),l!=null&&(r._activeLayer===this&&(r._activeLayer=this.getNextSibling()||this.getPreviousSibling()),O.splice(i._children,null,l,1)),this._installEvents(!1),e&&r._changes&&this._changed(5),t&&i._changed(11,this),this._parent=null))},remove:function(){return this._remove(!0,!0)},replaceWith:function(e){return(e=e&&e.insertBelow(this))&&this.remove(),e},removeChildren:function(e,t){if(!this._children)return null;e=e||0,t=O.pick(t,this._children.length);for(var i=O.splice(this._children,null,e,t-e),r=i.length-1;0<=r;r--)i[r]._remove(!0,!1);return 0<i.length&&this._changed(11),i},clear:"#removeChildren",reverseChildren:function(){if(this._children){this._children.reverse();for(var e=0,t=this._children.length;e<t;e++)this._children[e]._index=e;this._changed(11)}},isEmpty:function(e){var t=this._children,i=t?t.length:0;if(e){for(var r=0;r<i;r++)if(!t[r].isEmpty(e))return!1;return!0}return!i},isEditable:function(){for(var e=this;e;){if(!e._visible||e._locked)return!1;e=e._parent}return!0},hasFill:function(){return this.getStyle().hasFill()},hasStroke:function(){return this.getStyle().hasStroke()},hasShadow:function(){return this.getStyle().hasShadow()},_getOrder:function(e){function t(f){for(var v=[];v.unshift(f),f=f._parent;);return v}for(var i=t(this),r=t(e),l=0,d=Math.min(i.length,r.length);l<d;l++)if(i[l]!=r[l])return i[l]._index<r[l]._index?1:-1;return 0},hasChildren:function(){return this._children&&0<this._children.length},isInserted:function(){return!!this._parent&&this._parent.isInserted()},isAbove:function(e){return this._getOrder(e)===-1},isBelow:function(e){return this._getOrder(e)===1},isParent:function(e){return this._parent===e},isChild:function(e){return e&&e._parent===this},isDescendant:function(e){for(var t=this;t=t._parent;)if(t===e)return!0;return!1},isAncestor:function(e){return!!e&&e.isDescendant(this)},isSibling:function(e){return this._parent===e._parent},isGroupedWith:function(e){for(var t=this._parent;t;){if(t._parent&&/^(Group|Layer|CompoundPath)$/.test(t._class)&&e.isDescendant(t))return!0;t=t._parent}return!1}},O.each(["rotate","scale","shear","skew"],function(e){var t=e==="rotate";this[e]=function(){var i=arguments,r=(t?O:Q).read(i);return i=Q.read(i,0,{readNull:!0}),this.transform(new ft()[e](r,i||this.getPosition(!0)))}},{translate:function(){var e=new ft;return this.transform(e.translate.apply(e,arguments))},transform:function(e,t,i){var r,l,d=this._matrix,f=e&&!e.isIdentity(),v=i&&this._canApplyMatrix||this._applyMatrix&&(f||!d.isIdentity()||t&&this._children);if(!f&&!v)return this;f&&(!e.isInvertible()&&d.isInvertible()&&(d._backup=d.getValues()),d.prepend(e,!0),r=(l=this._style).getFillColor(!0),l=l.getStrokeColor(!0),r&&r.transform(e),l&&l.transform(e)),(v=v&&this._transformContent(d,t,i))&&((t=this._pivot)&&d._transformPoint(t,t,!0),d.reset(!0),i&&this._canApplyMatrix&&(this._applyMatrix=!0));var g=this._bounds;if(d=this._position,(f||v)&&this._changed(25),(i=f&&g&&e.decompose())&&i.skewing.isZero()&&i.rotation%90==0){for(var x in g){var T=g[x];T.nonscaling?delete g[x]:!v&&T.internal||(T=T.rect,e._transformBounds(T,T))}(i=(this._bounds=g)[this._getBoundsCacheKey(this._boundsOptions||{})])&&(this._position=this._getPositionFromBounds(i.rect))}else f&&d&&this._pivot&&(this._position=e._transformPoint(d,d));return this},_transformContent:function(e,t,i){var r=this._children;if(r){for(var l=0,d=r.length;l<d;l++)r[l].transform(e,t,i);return!0}},globalToLocal:function(){return this.getGlobalMatrix(!0)._inverseTransform(Q.read(arguments))},localToGlobal:function(){return this.getGlobalMatrix(!0)._transformPoint(Q.read(arguments))},parentToLocal:function(){return this._matrix._inverseTransform(Q.read(arguments))},localToParent:function(){return this._matrix._transformPoint(Q.read(arguments))},fitBounds:function(e,t){e=Fe.read(arguments);var i=this.getBounds(),r=i.height/i.width,l=e.height/e.width;l=(t?l<r:r<l)?e.width/i.width:e.height/i.height,(l=new Fe(new Q,new it(i.width*l,i.height*l))).setCenter(e.getCenter()),this.setBounds(l)}}),{_setStyles:function(e,t,i){var r,l,d=this._style,f=this._matrix;d.hasFill()&&(e.fillStyle=d.getFillColor().toCanvasStyle(e,f)),d.hasStroke()&&(e.strokeStyle=d.getStrokeColor().toCanvasStyle(e,f),e.lineWidth=d.getStrokeWidth(),r=d.getStrokeJoin(),l=d.getStrokeCap(),f=d.getMiterLimit(),r&&(e.lineJoin=r),l&&(e.lineCap=l),f&&(e.miterLimit=f),jt.support.nativeDash&&(l=d.getDashArray(),f=d.getDashOffset(),l&&l.length&&("setLineDash"in e?(e.setLineDash(l),e.lineDashOffset=f):(e.mozDash=l,e.mozDashOffset=f)))),d.hasShadow()&&(t=t.pixelRatio||1,t=(i=i._shiftless().prepend(new ft().scale(t,t))).transform(new Q(d.getShadowBlur(),0)),i=i.transform(this.getShadowOffset()),e.shadowColor=d.getShadowColor().toCanvasStyle(e),e.shadowBlur=t.getLength(),e.shadowOffsetX=i.x,e.shadowOffsetY=i.y)},draw:function(e,t,i){if(this._updateVersion=this._project._updateVersion,this._visible&&this._opacity!==0){var r=t.matrices,l=t.viewMatrix,d=this._matrix;if((H=r[r.length-1].appended(d)).isInvertible()){l=l?l.appended(H):H,r.push(H),t.updateMatrix&&(this._globalMatrix=H);var f,v,g,x=this._blendMode,T=Ve.clamp(this._opacity,0,1),S=x==="normal",D=kt.nativeModes[x],F=S&&T===1||t.dontStart||t.clip||(D||S&&T<1)&&this._canComposite(),H=t.pixelRatio||1;if(!F){var U=this.getStrokeBounds(l);if(!U.width||!U.height)return void r.pop();g=t.offset,v=t.offset=U.getTopLeft().floor(),f=e,e=Ue.getContext(U.getSize().ceil().add(1).multiply(H)),H!==1&&e.scale(H,H)}e.save(),S=i?i.appended(d):this._canScaleStroke&&!this.getStrokeScaling(!0)&&l,U=!F&&t.clipItem,i=!S||U,F?(e.globalAlpha=T,D&&(e.globalCompositeOperation=x)):i&&e.translate(-v.x,-v.y),i&&(F?d:l).applyToContext(e),U&&t.clipItem.draw(e,t.extend({clip:!0})),S&&(e.setTransform(H,0,0,H,0,0),(U=t.offset)&&e.translate(-U.x,-U.y)),this._draw(e,t,l,S),e.restore(),r.pop(),t.clip&&!t.dontFinish&&e.clip(this.getFillRule()),F||(kt.process(x,e,f,T,v.subtract(g).multiply(H)),Ue.release(e),t.offset=g)}}},_isUpdated:function(e){var t=this._parent;if(t instanceof Kt)return t._isUpdated(e);var i=this._updateVersion===e;return!i&&t&&t._visible&&t._isUpdated(e)&&(this._updateVersion=e,i=!0),i},_drawSelection:function(e,t,i,r,l){var d=1&(v=this._selection),f=2&v||d&&this._selectBounds,v=4&v;if(((d=!!this._drawSelected&&d)||f||v)&&this._isUpdated(l)){var g=this.getSelectedColor(!0)||(g=this.getLayer())&&g.getSelectedColor(!0),x=(t=t.appended(this.getGlobalMatrix(!0)),i/2);if(e.strokeStyle=e.fillStyle=g?g.toCanvasStyle(e):"#009dec",d&&this._drawSelected(e,t,r),v){r=this.getPosition(!0);var T=(r=(v=this._parent)?v.localToGlobal(r):r).x,S=r.y;e.beginPath(),e.arc(T,S,x,0,2*Math.PI,!0),e.stroke();for(var D=[[0,-1],[1,0],[0,1],[-1,0]],F=x,H=i+1,U=0;U<4;U++){var K=(j=D[U])[0],j=j[1];e.moveTo(T+K*F,S+j*F),e.lineTo(T+K*H,S+j*H),e.stroke()}}if(f){var Z=t._transformCorners(this.getInternalBounds());for(e.beginPath(),U=0;U<8;U++)e[U?"lineTo":"moveTo"](Z[U],Z[++U]);for(e.closePath(),e.stroke(),U=0;U<8;U++)e.fillRect(Z[U]-x,Z[++U]-x,i,i)}}},_canComposite:function(){return!1}},O.each(["down","drag","up","move"],function(e){this["removeOn"+O.capitalize(e)]=function(){var t={};return t[e]=!0,this.removeOn(t)}},{removeOn:function(e){for(var t in e){var i;e[t]&&(i="mouse"+t,(t=(t=this._project)._removeSets=t._removeSets||{})[i]=t[i]||{},t[i][this._id]=this)}return this}}),{tween:function(e,t,i){i||(i=t,t=e,e=null,i||(i=t,t=null));var r=i&&i.easing,l=i&&i.start,d=(i=i!=null&&(typeof i=="number"?i:i.duration),new ct(this,e,t,i,r,l));return i&&this.on("frame",function f(v){d._handleFrame(1e3*v.time),d.running||this.off("frame",f)}),d},tweenTo:function(e,t){return this.tween(null,e,t)},tweenFrom:function(e,t){return this.tween(e,null,t)}}),Dt=dt.extend({_class:"Group",_selectBounds:!1,_selectChildren:!0,_serializeFields:{children:[]},initialize:function(e){this._children=[],this._namedChildren={},this._initialize(e)||this.addChildren(Array.isArray(e)?e:arguments)},_changed:function e(t){e.base.call(this,t),2050&t&&(this._clipItem=k)},_getClipItem:function(){if((e=this._clipItem)===k){for(var e=null,t=this._children,i=0,r=t.length;i<r;i++)if(t[i]._clipMask){e=t[i];break}this._clipItem=e}return e},isClipped:function(){return!!this._getClipItem()},setClipped:function(e){var t=this.getFirstChild();t&&t.setClipMask(e)},_getBounds:function e(t,i){var r=this._getClipItem();return r?r._getCachedBounds(r._matrix.prepended(t),O.set({},i,{stroke:!1})):e.base.call(this,t,i)},_hitTestChildren:function e(t,i,r){var l=this._getClipItem();return(!l||l.contains(t))&&e.base.call(this,t,i,r,l)},_draw:function(e,t){var i=t.clip,r=!i&&this._getClipItem();t=t.extend({clipItem:r,clip:!1}),i?(e.beginPath(),t.dontStart=t.dontFinish=!0):r&&r.draw(e,t.extend({clip:!0}));for(var l=this._children,d=0,f=l.length;d<f;d++){var v=l[d];v!==r&&v.draw(e,t)}}}),Wt=Dt.extend({_class:"Layer",initialize:function(){Dt.apply(this,arguments)},_getOwner:function(){return this._parent||this._index!=null&&this._project},isInserted:function e(){return this._parent?e.base.call(this):this._index!=null},activate:function(){this._project._activeLayer=this},_hitTestSelf:function(){}}),Gt=dt.extend({_class:"Shape",_applyMatrix:!1,_canApplyMatrix:!1,_canScaleStroke:!0,_serializeFields:{type:null,size:null,radius:null},initialize:function(e,t){this._initialize(e,t)},_equals:function(e){return this._type===e._type&&this._size.equals(e._size)&&O.equals(this._radius,e._radius)},copyContent:function(e){this.setType(e._type),this.setSize(e._size),this.setRadius(e._radius)},getType:function(){return this._type},setType:function(e){this._type=e},getShape:"#getType",setShape:"#setType",getSize:function(){var e=this._size;return new wt(e.width,e.height,this,"setSize")},setSize:function(){var e,t,i,r=it.read(arguments);this._size?this._size.equals(r)||(e=this._type,t=r.width,i=r.height,e==="rectangle"?this._radius.set(it.min(this._radius,r.divide(2).abs())):e==="circle"?(t=i=(t+i)/2,this._radius=t/2):e==="ellipse"&&this._radius._set(t/2,i/2),this._size._set(t,i),this._changed(9)):this._size=r.clone()},getRadius:function(){var e=this._radius;return this._type==="circle"?e:new wt(e.width,e.height,this,"setRadius")},setRadius:function(e){var t=this._type;if(t==="circle"){if(e===this._radius)return;var i=2*e;this._radius=e,this._size._set(i,i)}else if(e=it.read(arguments),this._radius){if(this._radius.equals(e))return;this._radius.set(e),t==="rectangle"?(i=it.max(this._size,e.multiply(2)),this._size.set(i)):t==="ellipse"&&this._size._set(2*e.width,2*e.height)}else this._radius=e.clone();this._changed(9)},isEmpty:function(){return!1},toPath:function(e){var t=new St[O.capitalize(this._type)]({center:new Q,size:this._size,radius:this._radius,insert:!1});return t.copyAttributes(this),jt.settings.applyMatrix&&t.setApplyMatrix(!0),e!==k&&!e||t.insertAbove(this),t},toShape:"#clone",_asPathItem:function(){return this.toPath(!1)},_draw:function(e,t,i,r){var l,d,f,v,g,x=this._style,T=x.hasFill(),S=x.hasStroke(),D=t.dontFinish||t.clip,F=!r;(T||S||D)&&(f=this._type,v=this._radius,g=f==="circle",t.dontStart||e.beginPath(),F&&g?e.arc(0,0,v,0,2*Math.PI,!0):(l=g?v:v.width,d=g?v:v.height,v=(g=this._size).width,g=g.height,F&&f==="rectangle"&&l===0&&d===0?e.rect(-v/2,-g/2,v,g):(g=[-(F=v/2),-(f=g/2)+d,-F,(g=d*(v=.44771525016920644))-f,(v*=l)-F,-f,-F+l,-f,F-l,-f,F-v,-f,F,g-f,F,-f+d,F,f-d,F,f-g,F-v,f,F-l,f,-F+l,f,v-F,f,-F,f-g,-F,f-d],r&&r.transform(g,g,32),e.moveTo(g[0],g[1]),e.bezierCurveTo(g[2],g[3],g[4],g[5],g[6],g[7]),F!==l&&e.lineTo(g[8],g[9]),e.bezierCurveTo(g[10],g[11],g[12],g[13],g[14],g[15]),f!==d&&e.lineTo(g[16],g[17]),e.bezierCurveTo(g[18],g[19],g[20],g[21],g[22],g[23]),F!==l&&e.lineTo(g[24],g[25]),e.bezierCurveTo(g[26],g[27],g[28],g[29],g[30],g[31]))),e.closePath()),D||!T&&!S||(this._setStyles(e,t,i),T&&(e.fill(x.getFillRule()),e.shadowColor="rgba(0,0,0,0)"),S&&e.stroke())},_canComposite:function(){return!(this.hasFill()&&this.hasStroke())},_getBounds:function(e,t){var i=new Fe(this._size).setCenter(0,0),r=this._style;return r=t.stroke&&r.hasStroke()&&r.getStrokeWidth(),e&&(i=e._transformBounds(i)),r?i.expand(St._getStrokePadding(r,this._getStrokeMatrix(e,t))):i}},new function(){function e(i,r,l){var d=i._radius;if(!d.isZero())for(var f=i._size.divide(2),v=1;v<=4;v++){var g=new Q(1<v&&v<4?-1:1,2<v?-1:1),x=g.multiply(f),T=x.subtract(g.multiply(d));if(new Fe(l?x.add(g.multiply(l)):x,T).contains(r))return{point:T,quadrant:v}}}function t(i,r,l,d){return i=i.divide(r),(!d||i.isInQuadrant(d))&&i.subtract(i.normalize()).multiply(r).divide(l).length<=1}return{_contains:function i(r){if(this._type!=="rectangle")return r.divide(this.size).getLength()<=.5;var l=e(this,r);return l?r.subtract(l.point).divide(this._radius).getLength()<=1:i.base.call(this,r)},_hitTestSelf:function i(r,l,d,f){var v,g,x,T=!1,S=this._style,D=l.stroke&&S.hasStroke(),F=l.fill&&S.hasFill();return(D||F)&&(g=this._type,v=this._radius,x=D?S.getStrokeWidth()/2:0,F=l._tolerancePadding.add(St._getStrokePadding(x,!S.getStrokeScaling()&&f)),T=g==="rectangle"?(S=e(this,r,x=F.multiply(2)))?t(r.subtract(S.point),v,F,S.quadrant):(S=(g=new Fe(this._size).setCenter(0,0)).expand(x),x=g.expand(x.negate()),S._containsPoint(r)&&!x._containsPoint(r)):t(r,v,F)),T?new Vt(D?"stroke":"fill",this):i.base.apply(this,arguments)}}},{statics:new function(){function e(t,i,r,l,d){var f=O.create(Gt.prototype);return f._type=t,f._size=r,f._radius=l,f._initialize(O.getNamed(d),i),f}return{Circle:function(){var t=arguments,i=Q.readNamed(t,"center"),r=O.readNamed(t,"radius");return e("circle",i,new it(2*r),r,t)},Rectangle:function(){var t=arguments,i=Fe.readNamed(t,"rectangle"),r=it.min(it.readNamed(t,"radius"),i.getSize(!0).divide(2));return e("rectangle",i.getCenter(!0),i.getSize(!0),r,t)},Ellipse:function(){var t=arguments,i=Gt._readEllipse(t),r=i.radius;return e("ellipse",i.center,r.multiply(2),r,t)},_readEllipse:function(t){var i,r;return r=O.hasNamed(t,"radius")?(i=Q.readNamed(t,"center"),it.readNamed(t,"radius")):(i=(r=Fe.readNamed(t,"rectangle")).getCenter(!0),r.getSize(!0).divide(2)),{center:i,radius:r}}}}}),ei=dt.extend({_class:"Raster",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!1,handle:!1},_serializeFields:{crossOrigin:null,source:null},_prioritize:["crossOrigin"],_smoothing:"low",beans:!0,initialize:function(e,t){var i,r;this._initialize(e,t!==k&&Q.read(arguments))||((r=(r=typeof e)=="string"?W.getElementById(e):r=="object"?e:null)&&r!==dt.NO_INSERT&&(r.getContext||r.naturalHeight!=null?i=r:r&&((r=it.read(arguments)).isZero()||(i=Ue.getCanvas(r)))),i?this.setImage(i):this.setSource(e)),this._size||(this._size=new it,this._loaded=!1)},_equals:function(e){return this.getSource()===e.getSource()},copyContent:function(e){var t=e._image,i=e._canvas;t?this._setImage(t):i&&((t=Ue.getCanvas(e._size)).getContext("2d").drawImage(i,0,0),this._setImage(t)),this._crossOrigin=e._crossOrigin},getSize:function(){var e=this._size;return new wt(e?e.width:0,e?e.height:0,this,"setSize")},setSize:function(e,t){var i,r=it.read(arguments);r.equals(this._size)?t&&this.clear():0<r.width&&0<r.height?(i=!t&&this.getElement(),this._setImage(Ue.getCanvas(r)),i&&this.getContext(!0).drawImage(i,0,0,r.width,r.height)):(this._canvas&&Ue.release(this._canvas),this._size=r.clone())},getWidth:function(){return this._size?this._size.width:0},setWidth:function(e){this.setSize(e,this.getHeight())},getHeight:function(){return this._size?this._size.height:0},setHeight:function(e){this.setSize(this.getWidth(),e)},getLoaded:function(){return this._loaded},isEmpty:function(){var e=this._size;return!e||e.width===0&&e.height===0},getResolution:function(){var e=this._matrix,t=new Q(0,0).transform(e),i=new Q(1,0).transform(e).subtract(t);return t=new Q(0,1).transform(e).subtract(t),new it(72/i.getLength(),72/t.getLength())},getPpi:"#getResolution",getImage:function(){return this._image},setImage:function(e){var t=this;function i(r){var l=t.getView(),d=r&&r.type||"load";l&&t.responds(d)&&(jt=l._scope,t.emit(d,new N(r)))}this._setImage(e),this._loaded?setTimeout(i,0):e&&_e.add(e,{load:function(r){t._setImage(e),i(r)},error:i})},_setImage:function(e){this._canvas&&Ue.release(this._canvas),e&&e.getContext?(this._image=null,this._canvas=e,this._loaded=!0):(this._image=e,this._canvas=null,this._loaded=!!(e&&e.src&&e.complete)),this._size=new it(e?e.naturalWidth||e.width:0,e?e.naturalHeight||e.height:0),this._context=null,this._changed(1033)},getCanvas:function(){if(!this._canvas){var e=Ue.getContext(this._size);try{this._image&&e.drawImage(this._image,0,0),this._canvas=e.canvas}catch{Ue.release(e)}}return this._canvas},setCanvas:"#setImage",getContext:function(e){return this._context||(this._context=this.getCanvas().getContext("2d")),e&&(this._image=null,this._changed(1025)),this._context},setContext:function(e){this._context=e},getSource:function(){var e=this._image;return e&&e.src||this.toDataURL()},setSource:function(e){var t=new R.Image,i=this._crossOrigin;i&&(t.crossOrigin=i),e&&(t.src=e),this.setImage(t)},getCrossOrigin:function(){var e=this._image;return e&&e.crossOrigin||this._crossOrigin||""},setCrossOrigin:function(e){this._crossOrigin=e;var t=this._image;t&&(t.crossOrigin=e)},getSmoothing:function(){return this._smoothing},setSmoothing:function(e){this._smoothing=typeof e=="string"?e:e?"low":"off",this._changed(257)},getElement:function(){return this._canvas||this._loaded&&this._image}},{beans:!1,getSubCanvas:function(){var e=Fe.read(arguments),t=Ue.getContext(e.getSize());return t.drawImage(this.getCanvas(),e.x,e.y,e.width,e.height,0,0,e.width,e.height),t.canvas},getSubRaster:function(){var e=Fe.read(arguments),t=new ei(dt.NO_INSERT);return t._setImage(this.getSubCanvas(e)),t.translate(e.getCenter().subtract(this.getSize().divide(2))),t._matrix.prepend(this._matrix),t.insertAbove(this),t},toDataURL:function(){var e=(e=this._image)&&e.src;return/^data:/.test(e)?e:(e=this.getCanvas())?e.toDataURL.apply(e,arguments):null},drawImage:function(e){var t=Q.read(arguments,1);this.getContext(!0).drawImage(e,t.x,t.y)},getAverageColor:function(e){if(e?e instanceof Xt?l=(r=e).getBounds():typeof e=="object"&&("width"in e?l=new Fe(e):"x"in e&&(l=new Fe(e.x-.5,e.y-.5,1,1))):l=this.getBounds(),!l)return null;var t=Math.min(l.width,32),i=Math.min(l.height,32);(e=ei._sampleContext)?e.clearRect(0,0,33,33):e=ei._sampleContext=Ue.getContext(new it(32)),e.save(),(l=new ft().scale(t/l.width,i/l.height).translate(-l.x,-l.y)).applyToContext(e),r&&r.draw(e,new O({clip:!0,matrices:[l]})),this._matrix.applyToContext(e);var r=this.getElement(),l=this._size;r&&e.drawImage(r,-l.width/2,-l.height/2),e.restore();for(var d=e.getImageData(.5,.5,Math.ceil(t),Math.ceil(i)).data,f=[0,0,0],v=0,g=0,x=d.length;g<x;g+=4){var T=d[g+3];v+=T,T/=255,f[0]+=d[g]*T,f[1]+=d[g+1]*T,f[2]+=d[g+2]*T}for(g=0;g<3;g++)f[g]/=v;return v?At.read(f):null},getPixel:function(){var e=Q.read(arguments);return e=this.getContext().getImageData(e.x,e.y,1,1).data,new At("rgb",[e[0]/255,e[1]/255,e[2]/255],e[3]/255)},setPixel:function(){var e,t=arguments,i=Q.read(t),r=(e=At.read(t))._convert("rgb"),l=e._alpha,d=this.getContext(!0);(e=(t=d.createImageData(1,1)).data)[0]=255*r[0],e[1]=255*r[1],e[2]=255*r[2],e[3]=l!=null?255*l:255,d.putImageData(t,i.x,i.y)},clear:function(){var e=this._size;this.getContext(!0).clearRect(0,0,e.width+1,e.height+1)},createImageData:function(){var e=it.read(arguments);return this.getContext().createImageData(e.width,e.height)},getImageData:function(){var e=Fe.read(arguments);return e.isEmpty()&&(e=new Fe(this._size)),this.getContext().getImageData(e.x,e.y,e.width,e.height)},putImageData:function(e){var t=Q.read(arguments,1);this.getContext(!0).putImageData(e,t.x,t.y)},setImageData:function(e){this.setSize(e),this.getContext(!0).putImageData(e,0,0)},_getBounds:function(e,t){var i=new Fe(this._size).setCenter(0,0);return e?e._transformBounds(i):i},_hitTestSelf:function(e){if(this._contains(e)){var t=this;return new Vt("pixel",t,{offset:e.add(t._size.divide(2)).round(),color:{get:function(){return t.getPixel(this.offset)}}})}},_draw:function(e,t,i){var r=this.getElement();r&&0<r.width&&0<r.height&&(e.globalAlpha=Ve.clamp(this._opacity,0,1),this._setStyles(e,t,i),t=this._smoothing,Se.setPrefixed(e,(i=t==="off")?"imageSmoothingEnabled":"imageSmoothingQuality",!i&&t),e.drawImage(r,-this._size.width/2,-this._size.height/2))},_canComposite:function(){return!0}}),ni=dt.extend({_class:"SymbolItem",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!0},_serializeFields:{symbol:null},initialize:function(e,t){this._initialize(e,t!==k&&Q.read(arguments,1))||this.setDefinition(e instanceof bt?e:new bt(e))},_equals:function(e){return this._definition===e._definition},copyContent:function(e){this.setDefinition(e._definition)},getDefinition:function(){return this._definition},setDefinition:function(e){this._definition=e,this._changed(9)},getSymbol:"#getDefinition",setSymbol:"#setDefinition",isEmpty:function(){return this._definition._item.isEmpty()},_getBounds:function(e,t){var i=this._definition._item;return i._getCachedBounds(i._matrix.prepended(e),t)},_hitTestSelf:function(e,t,i){return t=t.extend({all:!1}),(i=this._definition._item._hitTest(e,t,i))&&(i.item=this),i},_draw:function(e,t){this._definition._item.draw(e,t)}}),bt=O.extend({_class:"SymbolDefinition",initialize:function(e,t){this._id=Tt.get(),this.project=jt.project,e&&this.setItem(e,t)},_serialize:function(e,t){return t.add(this,function(){return O.serialize([this._class,this._item],e,!1,t)})},_changed:function(e){8&e&&dt._clearBoundsCache(this),1&e&&this.project._changed(e)},getItem:function(){return this._item},setItem:function(e,t){e._symbol&&(e=e.clone()),this._item&&(this._item._symbol=null),(this._item=e).remove(),e.setSelected(!1),t||e.setPosition(new Q),(e._symbol=this)._changed(9)},getDefinition:"#getItem",setDefinition:"#setItem",place:function(e){return new ni(this,e)},clone:function(){return new bt(this._item.clone(!1))},equals:function(e){return e===this||e&&this._item.equals(e._item)||!1}}),Vt=O.extend({_class:"HitResult",initialize:function(e,t,i){this.type=e,this.item=t,i&&this.inject(i)},statics:{getOptions:function(e){return e=e&&O.read(e),new O({type:null,tolerance:jt.settings.hitTolerance,fill:!e,stroke:!e,segments:!e,handles:!1,ends:!1,position:!1,center:!1,bounds:!1,guides:!1,selected:!1},e)}}}),Ke=O.extend({_class:"Segment",beans:!0,_selection:0,initialize:function(e,t,i,r,l,d){var f,v,g,x,T=arguments.length;0<T&&(e==null||typeof e=="object"?x=T===1&&e&&"point"in e?(f=e.point,v=e.handleIn,g=e.handleOut,e.selection):(f=e,v=t,g=i,r):(f=[e,t],v=i!==k?[i,r]:null,g=l!==k?[l,d]:null)),new ii(f,this,"_point"),new ii(v,this,"_handleIn"),new ii(g,this,"_handleOut"),x&&this.setSelection(x)},_serialize:function(e,t){var i=this._point,r=this._selection;return i=r||this.hasHandles()?[i,this._handleIn,this._handleOut]:i,r&&i.push(r),O.serialize(i,e,!0,t)},_changed:function(e){var t,i,r,l=this._path;l&&(t=l._curves,i=this._index,t&&(e&&e!==this._point&&e!==this._handleIn||!(r=0<i?t[i-1]:l._closed?t[t.length-1]:null)||r._changed(),e&&e!==this._point&&e!==this._handleOut||!(r=t[i])||r._changed()),l._changed(41))},getPoint:function(){return this._point},setPoint:function(){this._point.set(Q.read(arguments))},getHandleIn:function(){return this._handleIn},setHandleIn:function(){this._handleIn.set(Q.read(arguments))},getHandleOut:function(){return this._handleOut},setHandleOut:function(){this._handleOut.set(Q.read(arguments))},hasHandles:function(){return!this._handleIn.isZero()||!this._handleOut.isZero()},isSmooth:function(){var e=this._handleIn,t=this._handleOut;return!e.isZero()&&!t.isZero()&&e.isCollinear(t)},clearHandles:function(){this._handleIn._set(0,0),this._handleOut._set(0,0)},getSelection:function(){return this._selection},setSelection:function(e){var t=this._selection,i=this._path;this._selection=e=e||0,i&&e!==t&&(i._updateSelection(this,t,e),i._changed(257))},_changeSelection:function(e,t){var i=this._selection;this.setSelection(t?i|e:i&~e)},isSelected:function(){return!!(7&this._selection)},setSelected:function(e){this._changeSelection(7,e)},getIndex:function(){return this._index!==k?this._index:null},getPath:function(){return this._path||null},getCurve:function(){var e=this._path,t=this._index;return e?(0<t&&!e._closed&&t===e._segments.length-1&&t--,e.getCurves()[t]||null):null},getLocation:function(){var e=this.getCurve();return e?new Jt(e,this===e._segment1?0:1):null},getNext:function(){var e=this._path&&this._path._segments;return e&&(e[this._index+1]||this._path._closed&&e[0])||null},smooth:function(e,t,i){var r=e||{},l=r.type,d=r.factor,f=this.getPrevious(),v=this.getNext(),g=(f||this)._point,x=this._point,T=(v||this)._point,S=g.getDistance(x);if(e=x.getDistance(T),l&&l!=="catmull-rom"){if(l!=="geometric")throw new Error("Smoothing method '"+l+"' not supported.");f&&v&&(r=g.subtract(T),l=(H=d===k?.4:d)*S/(S+e),t||this.setHandleIn(r.multiply(l)),i||this.setHandleOut(r.multiply(l-H)))}else{var D,F,H=d===k?.5:d;S=(d=Math.pow(S,H))*d,H=(e=Math.pow(e,H))*e,!t&&f&&(D=2*H+3*e*d+S,this.setHandleIn((F=3*e*(e+d))!=0?new Q((H*g._x+D*x._x-S*T._x)/F-x._x,(H*g._y+D*x._y-S*T._y)/F-x._y):new Q)),!i&&v&&(D=2*S+3*d*e+H,this.setHandleOut((F=3*d*(d+e))!=0?new Q((S*T._x+D*x._x-H*g._x)/F-x._x,(S*T._y+D*x._y-H*g._y)/F-x._y):new Q))}},getPrevious:function(){var e=this._path&&this._path._segments;return e&&(e[this._index-1]||this._path._closed&&e[e.length-1])||null},isFirst:function(){return!this._index},isLast:function(){var e=this._path;return e&&this._index===e._segments.length-1||!1},reverse:function(){var e=this._handleIn,t=this._handleOut,i=e.clone();e.set(t),t.set(i)},reversed:function(){return new Ke(this._point,this._handleOut,this._handleIn)},remove:function(){return!!this._path&&!!this._path.removeSegment(this._index)},clone:function(){return new Ke(this._point,this._handleIn,this._handleOut)},equals:function(e){return e===this||e&&this._class===e._class&&this._point.equals(e._point)&&this._handleIn.equals(e._handleIn)&&this._handleOut.equals(e._handleOut)||!1},toString:function(){var e=["point: "+this._point];return this._handleIn.isZero()||e.push("handleIn: "+this._handleIn),this._handleOut.isZero()||e.push("handleOut: "+this._handleOut),"{ "+e.join(", ")+" }"},transform:function(e){this._transformCoordinates(e,new Array(6),!0),this._changed()},interpolate:function(e,t,i){var r=1-i,l=i,d=e._point,f=t._point,v=e._handleIn;i=t._handleIn,t=t._handleOut,e=e._handleOut,this._point._set(r*d._x+l*f._x,r*d._y+l*f._y,!0),this._handleIn._set(r*v._x+l*i._x,r*v._y+l*i._y,!0),this._handleOut._set(r*e._x+l*t._x,r*e._y+l*t._y,!0),this._changed()},_transformCoordinates:function(e,t,i){var r=this._point,l=i&&this._handleIn.isZero()?null:this._handleIn,d=i&&this._handleOut.isZero()?null:this._handleOut,f=r._x,v=r._y,g=2;return t[0]=f,t[1]=v,l&&(t[g++]=l._x+f,t[g++]=l._y+v),d&&(t[g++]=d._x+f,t[g++]=d._y+v),e&&(e._transformCoordinates(t,t,g/2),f=t[0],v=t[1],i?(r._x=f,r._y=v,g=2,l&&(l._x=t[g++]-f,l._y=t[g++]-v),d&&(d._x=t[g++]-f,d._y=t[g++]-v)):(l||(t[g++]=f,t[g++]=v),d||(t[g++]=f,t[g++]=v))),t}}),ii=Q.extend({initialize:function(e,t,i){var r,l,d;e?(r=e[0])!==k?l=e[1]:((r=(d=e).x)===k&&(r=(d=Q.read(arguments)).x),l=d.y,d=d.selected):r=l=0,this._x=r,this._y=l,(this._owner=t)[i]=this,d&&this.setSelected(!0)},_set:function(e,t){return this._x=e,this._y=t,this._owner._changed(this),this},getX:function(){return this._x},setX:function(e){this._x=e,this._owner._changed(this)},getY:function(){return this._y},setY:function(e){this._y=e,this._owner._changed(this)},isZero:function(){var e=Ve.isZero;return e(this._x)&&e(this._y)},isSelected:function(){return!!(this._owner._selection&this._getSelection())},setSelected:function(e){this._owner._changeSelection(this._getSelection(),e)},_getSelection:function(){var e=this._owner;return this===e._point?1:this===e._handleIn?2:this===e._handleOut?4:0}}),ze=O.extend({_class:"Curve",beans:!0,initialize:function(e,t,i,r,l,d,f,v){var g,x,T,S,D,F,H=arguments.length;H===3?(this._path=e,g=t,x=i):H?H===1?"segment1"in e?(g=new Ke(e.segment1),x=new Ke(e.segment2)):"point1"in e?(T=e.point1,D=e.handle1,F=e.handle2,S=e.point2):Array.isArray(e)&&(T=[e[0],e[1]],S=[e[6],e[7]],D=[e[2]-e[0],e[3]-e[1]],F=[e[4]-e[6],e[5]-e[7]]):H===2?(g=new Ke(e),x=new Ke(t)):H===4?(T=e,D=t,F=i,S=r):H===8&&(T=[e,t],S=[f,v],D=[i-e,r-t],F=[l-f,d-v]):(g=new Ke,x=new Ke),this._segment1=g||new Ke(T,null,D),this._segment2=x||new Ke(S,F,null)},_serialize:function(e,t){return O.serialize(this.hasHandles()?[this.getPoint1(),this.getHandle1(),this.getHandle2(),this.getPoint2()]:[this.getPoint1(),this.getPoint2()],e,!0,t)},_changed:function(){this._length=this._bounds=k},clone:function(){return new ze(this._segment1,this._segment2)},toString:function(){var e=["point1: "+this._segment1._point];return this._segment1._handleOut.isZero()||e.push("handle1: "+this._segment1._handleOut),this._segment2._handleIn.isZero()||e.push("handle2: "+this._segment2._handleIn),e.push("point2: "+this._segment2._point),"{ "+e.join(", ")+" }"},classify:function(){return ze.classify(this.getValues())},remove:function(){var e,t,i=!1;return this._path&&(t=(e=this._segment2)._handleOut,(i=e.remove())&&this._segment1._handleOut.set(t)),i},getPoint1:function(){return this._segment1._point},setPoint1:function(){this._segment1._point.set(Q.read(arguments))},getPoint2:function(){return this._segment2._point},setPoint2:function(){this._segment2._point.set(Q.read(arguments))},getHandle1:function(){return this._segment1._handleOut},setHandle1:function(){this._segment1._handleOut.set(Q.read(arguments))},getHandle2:function(){return this._segment2._handleIn},setHandle2:function(){this._segment2._handleIn.set(Q.read(arguments))},getSegment1:function(){return this._segment1},getSegment2:function(){return this._segment2},getPath:function(){return this._path},getIndex:function(){return this._segment1._index},getNext:function(){var e=this._path&&this._path._curves;return e&&(e[this._segment1._index+1]||this._path._closed&&e[0])||null},getPrevious:function(){var e=this._path&&this._path._curves;return e&&(e[this._segment1._index-1]||this._path._closed&&e[e.length-1])||null},isFirst:function(){return!this._segment1._index},isLast:function(){var e=this._path;return e&&this._segment1._index===e._curves.length-1||!1},isSelected:function(){return this.getPoint1().isSelected()&&this.getHandle1().isSelected()&&this.getHandle2().isSelected()&&this.getPoint2().isSelected()},setSelected:function(e){this.getPoint1().setSelected(e),this.getHandle1().setSelected(e),this.getHandle2().setSelected(e),this.getPoint2().setSelected(e)},getValues:function(e){return ze.getValues(this._segment1,this._segment2,e)},getPoints:function(){for(var e=this.getValues(),t=[],i=0;i<8;i+=2)t.push(new Q(e[i],e[i+1]));return t}},{getLength:function(){return this._length==null&&(this._length=ze.getLength(this.getValues(),0,1)),this._length},getArea:function(){return ze.getArea(this.getValues())},getLine:function(){return new _t(this._segment1._point,this._segment2._point)},getPart:function(e,t){return new ze(ze.getPart(this.getValues(),e,t))},getPartLength:function(e,t){return ze.getLength(this.getValues(),e,t)},divideAt:function(e){return this.divideAtTime(e&&e.curve===this?e.time:this.getTimeAt(e))},divideAtTime:function(e,t){var i,r,l,d,f,v,g=null;return 1e-8<=e&&e<=1-1e-8&&(i=(v=ze.subdivide(this.getValues(),e))[0],r=v[1],l=t||this.hasHandles(),d=this._segment1,f=this._segment2,e=this._path,l&&(d._handleOut._set(i[2]-i[0],i[3]-i[1]),f._handleIn._set(r[4]-r[6],r[5]-r[7])),v=i[6],t=i[7],t=new Ke(new Q(v,t),l&&new Q(i[4]-v,i[5]-t),l&&new Q(r[2]-v,r[3]-t)),g=e?(e.insert(d._index+1,t),this.getNext()):(this._segment2=t,this._changed(),new ze(t,f))),g},splitAt:function(e){var t=this._path;return t?t.splitAt(e):null},splitAtTime:function(e){return this.splitAt(this.getLocationAtTime(e))},divide:function(e,t){return this.divideAtTime(e===k?.5:t?e:this.getTimeAt(e))},split:function(e,t){return this.splitAtTime(e===k?.5:t?e:this.getTimeAt(e))},reversed:function(){return new ze(this._segment2.reversed(),this._segment1.reversed())},clearHandles:function(){this._segment1._handleOut._set(0,0),this._segment2._handleIn._set(0,0)},statics:{getValues:function(e,t,i,r){var l=e._point,d=e._handleOut,f=t._handleIn,v=t._point;return e=l.x,t=l.y,l=v.x,v=v.y,v=r?[e,t,e,t,l,v,l,v]:[e,t,e+d._x,t+d._y,l+f._x,v+f._y,l,v],i&&i._transformCoordinates(v,v,4),v},subdivide:function(e,t){var i=e[0],r=e[1],l=e[2],d=e[3],f=e[4],v=e[5],g=e[6],x=e[7],T=1-(t=t===k?.5:t),S=T*i+t*l,D=T*r+t*d,F=T*l+t*f,H=T*d+t*v;return l=T*v+t*x,d=T*S+t*F,v=T*F+t*(e=T*f+t*g),F=T*H+t*l,[[i,r,S,D,d,f=T*D+t*H,H=T*d+t*v,t=T*f+t*F],[H,t,v,F,e,l,g,x]]},getMonoCurves:function(e,t){var i,r,l=[],d=e[0+(v=t?0:1)],f=e[2+v],v=(t=e[4+v],e[6+v]);return f<=d==t<=f&&t<=f==v<=t||ze.isStraight(e)||!(r=Ve.solveQuadratic(3*(f-t)-d+v,2*(d+t)-4*f,f-d,i=[],1e-8,1-1e-8))?l.push(e):(i.sort(),f=i[0],d=ze.subdivide(e,f),l.push(d[0]),1<r&&(f=(i[1]-f)/(1-f),d=ze.subdivide(d[1],f),l.push(d[0])),l.push(d[1])),l},solveCubic:function(e,t,i,r,l,d){var f=e[t],v=e[t+2],g=e[t+4];return e=e[t+6],t=0,f<i&&e<i&&v<i&&g<i||i<f&&i<e&&i<v&&i<g?t:Ve.solveCubic(e-f-(e=3*(v-f))-(v=3*(g-v)-e),v,e,f-i,r,l,d)},getTimeOf:function(e,t){var i=new Q(e[0],e[1]),r=new Q(e[6],e[7]);if((t.isClose(i,1e-12)?0:t.isClose(r,1e-12)?1:null)===null)for(var l=[t.x,t.y],d=[],f=0;f<2;f++)for(var v=ze.solveCubic(e,f,l[f],d,0,1),g=0;g<v;g++){var x=d[g];if(t.isClose(ze.getPoint(e,x),1e-7))return x}return t.isClose(i,1e-7)?0:t.isClose(r,1e-7)?1:null},getNearestTime:function(e,t){if(ze.isStraight(e)){var i=e[0],r=e[1],l=e[6]-i,d=e[7]-r,f=l*l+d*d;return f==0||(f=((t.x-i)*l+(t.y-r)*d)/f)<1e-12?0:.999999999999<f?1:ze.getTimeOf(e,new Q(i+f*l,r+f*d))}var v=1/0,g=0;function x(D){if(0<=D&&D<=1){var F=t.getDistance(ze.getPoint(e,D),!0);return F<v?(v=F,g=D,1):void 0}}for(var T=0;T<=100;T++)x(T/100);for(var S=.005;1e-8<S;)x(g-S)||x(g+S)||(S/=2);return g},getPart:function(e,t,i){var r,l=i<t;return l&&(r=t,t=i,i=r),0<t&&(e=ze.subdivide(e,t)[1]),i<1&&(e=ze.subdivide(e,(i-t)/(1-t))[0]),l?[e[6],e[7],e[4],e[5],e[2],e[3],e[0],e[1]]:e},isFlatEnough:function(e,t){var i=e[0],r=e[1],l=e[2],d=e[3],f=e[4],v=e[5],g=e[6];return l=3*l-2*i-g,d=3*d-2*r-(e=e[7]),i=3*f-2*g-i,r=3*v-2*e-r,Math.max(l*l,i*i)+Math.max(d*d,r*r)<=16*t*t},getArea:function(e){var t=e[0],i=e[1],r=e[2],l=e[3],d=e[4],f=e[5],v=e[6];return 3*(((e=e[7])-i)*(r+d)-(v-t)*(l+f)+l*(t-d)-r*(i-f)+e*(d+t/3)-v*(f+i/3))/20},getBounds:function(e){for(var t=e.slice(0,2),i=t.slice(),r=[0,0],l=0;l<2;l++)ze._addBounds(e[l],e[l+2],e[l+4],e[l+6],l,0,t,i,r);return new Fe(t[0],t[1],i[0]-t[0],i[1]-t[1])},_addBounds:function(e,t,i,r,l,d,f,v,g){function x(K,j){var Z=K-j;j=K+j,Z<f[l]&&(f[l]=Z),j>v[l]&&(v[l]=j)}var T=f[l]+(d/=2),S=v[l]-d;if(e<T||t<T||i<T||r<T||S<e||S<t||S<i||S<r)if(t<e!=t<r&&i<e!=i<r)x(e,0),x(r,0);else{var D=Ve.solveQuadratic(3*(t-i)-e+r,2*(e+i)-4*t,t-e,g);x(r,0);for(var F=0;F<D;F++){var H=g[F],U=1-H;1e-8<=H&&H<=1-1e-8&&x(U*U*U*e+3*U*U*H*t+3*U*H*H*i+H*H*H*r,d)}}}}},O.each(["getBounds","getStrokeBounds","getHandleBounds"],function(e){this[e]=function(){return this._bounds||(this._bounds={}),(this._bounds[e]||(this._bounds[e]=St[e]([this._segment1,this._segment2],!1,this._path))).clone()}},{}),O.each({isStraight:function(e,t,i,r){if(t.isZero()&&i.isZero())return!0;var l=r.subtract(e);if(l.isZero())return!1;if(l.isCollinear(t)&&l.isCollinear(i)){var d=new _t(e,r);if(d.getDistance(e.add(t))<1e-7&&d.getDistance(r.add(i))<1e-7)return r=l.dot(l),t=l.dot(t)/r,r=l.dot(i)/r,0<=t&&t<=1&&r<=0&&-1<=r}return!1},isLinear:function(e,t,i,r){return e=r.subtract(e).divide(3),t.equals(e)&&i.negate().equals(e)}},function(e,t){this[t]=function(i){var r=this._segment1,l=this._segment2;return e(r._point,r._handleOut,l._handleIn,l._point,i)},this.statics[t]=function(i,r){var l=i[0],d=i[1],f=i[6],v=i[7];return e(new Q(l,d),new Q(i[2]-l,i[3]-d),new Q(i[4]-f,i[5]-v),new Q(f,v),r)}},{statics:{},hasHandles:function(){return!this._segment1._handleOut.isZero()||!this._segment2._handleIn.isZero()},hasLength:function(e){return(!this.getPoint1().equals(this.getPoint2())||this.hasHandles())&&this.getLength()>(e||0)},isCollinear:function(e){return e&&this.isStraight()&&e.isStraight()&&this.getLine().isCollinear(e.getLine())},isHorizontal:function(){return this.isStraight()&&Math.abs(this.getTangentAtTime(.5).y)<1e-8},isVertical:function(){return this.isStraight()&&Math.abs(this.getTangentAtTime(.5).x)<1e-8}}),{beans:!1,getLocationAt:function(e,t){return this.getLocationAtTime(t?e:this.getTimeAt(e))},getLocationAtTime:function(e){return e!=null&&0<=e&&e<=1?new Jt(this,e):null},getTimeAt:function(e,t){return ze.getTimeAt(this.getValues(),e,t)},getParameterAt:"#getTimeAt",getTimesWithTangent:function(){var e=Q.read(arguments);return e.isZero()?[]:ze.getTimesWithTangent(this.getValues(),e)},getOffsetAtTime:function(e){return this.getPartLength(0,e)},getLocationOf:function(){return this.getLocationAtTime(this.getTimeOf(Q.read(arguments)))},getOffsetOf:function(){var e=this.getLocationOf.apply(this,arguments);return e?e.getOffset():null},getTimeOf:function(){return ze.getTimeOf(this.getValues(),Q.read(arguments))},getParameterOf:"#getTimeOf",getNearestLocation:function(){var e=Q.read(arguments),t=this.getValues(),i=ze.getNearestTime(t,e);return t=ze.getPoint(t,i),new Jt(this,i,t,null,e.getDistance(t))},getNearestPoint:function(){var e=this.getNearestLocation.apply(this,arguments);return e&&e.getPoint()}},new function(){var e=["getPoint","getTangent","getNormal","getWeightedTangent","getWeightedNormal","getCurvature"];return O.each(e,function(t){this[t+"At"]=function(i,r){var l=this.getValues();return ze[t](l,r?i:ze.getTimeAt(l,i))},this[t+"AtTime"]=function(i){return ze[t](this.getValues(),i)}},{statics:{_evaluateMethods:e}})},new function(){function e(r){var l=r[0],d=r[1],f=r[2],v=r[3],g=r[4],x=r[5],T=r[6],S=(r=r[7],9*(f-g)+3*(T-l)),D=6*(l+g)-12*f,F=3*(f-l),H=9*(v-x)+3*(r-d),U=6*(d+x)-12*v,K=3*(v-d);return function(j){var Z=(S*j+D)*j+F;return j=(H*j+U)*j+K,Math.sqrt(Z*Z+j*j)}}function t(r,l){return Math.max(2,Math.min(16,Math.ceil(32*Math.abs(l-r))))}function i(r,l,d,f){if(l==null||l<0||1<l)return null;var v=r[0],g=r[1],x=r[2],T=r[3],S=r[4],D=r[5],F=r[6],H=r[7];(oe=Ve.isZero)(x-v)&&oe(T-g)&&(x=v,T=g),oe(S-F)&&oe(D-H)&&(S=F,D=H);var U,K,j=3*(x-v),Z=3*(S-x)-j,ee=F-v-j-Z,re=3*(T-g),oe=H-g-re-(r=3*(D-T)-re);return d===0?(U=l===0?v:l===1?F:((ee*l+Z)*l+j)*l+v,K=l===0?g:l===1?H:((oe*l+r)*l+re)*l+g):(K=l<1e-8?(U=j,re):1-1e-8<l?(U=3*(F-S),3*(H-D)):(U=(3*ee*l+2*Z)*l+j,(3*oe*l+2*r)*l+re),f&&(U===0&&K===0&&(l<1e-8||1-1e-8<l)&&(U=S-x,K=D-T),(T=Math.sqrt(U*U+K*K))&&(U/=T,K/=T)),d===3&&(S=6*ee*l+2*Z,D=6*oe*l+2*r,U=(r=Math.pow(U*U+K*K,1.5))!==0?(U*D-K*S)/r:0,K=0)),d===2?new Q(K,-U):new Q(U,K)}return{statics:{classify:function(r){var l=r[0],d=r[1],f=r[2],v=r[3],g=r[4],x=r[5],T=r[6],S=(r=f*(d-(S=r[7]))+v*(T-l)+l*S-d*T,T=(v=(f=3*(g*(v-d)+x*(l-f)+f*d-v*l))-r)-r+(l*(S-x)+d*(g-T)+T*x-S*g),(x=Math.sqrt(T*T+v*v+f*f))!==0?1/x:0);function D(F,H,U){var K=H!==k,j=K&&0<H&&H<1,Z=K&&0<U&&U<1;return!K||(j||Z)&&(F!=="loop"||j&&Z)||(j=Z=!(F="arch")),{type:F,roots:j||Z?j&&Z?H<U?[H,U]:[U,H]:[j?H:U]:null}}return x="serpentine",v*=S,f*=S,(g=Ve.isZero)(T*=S)?g(v)?D(g(f)?"line":"quadratic"):D(x,f/(3*v)):g(f=3*v*v-4*T*f)?D("cusp",v/(2*T)):D(0<f?x:"loop",(v+(g=0<f?Math.sqrt(f/3):Math.sqrt(-f)))/(T*=2),(v-g)/T)},getLength:function(r,l,d,f){if(l===k&&(l=0),d===k&&(d=1),ze.isStraight(r)){var v=r;d<1&&(v=ze.subdivide(v,d)[0],l/=d);var g=(v=0<l?ze.subdivide(v,l)[1]:v)[6]-v[0];return v=v[7]-v[1],Math.sqrt(g*g+v*v)}return Ve.integrate(f||e(r),l,d,t(l,d))},getTimeAt:function(r,l,d){if(d===k&&(d=l<0?1:0),l===0)return d;var f=Math.abs,v=0<l,g=v?d:0,x=v?1:d,T=e(r),S=ze.getLength(r,g,x,T);if(r=f(l)-S,f(r)<1e-12)return v?x:g;if(1e-12<r)return null;var D=0;return Ve.findRoot(function(F){return D+=Ve.integrate(T,d,F,t(d,F)),d=F,D-l},T,d+l/S,g,x,32,1e-12)},getPoint:function(r,l){return i(r,l,0,!1)},getTangent:function(r,l){return i(r,l,1,!0)},getWeightedTangent:function(r,l){return i(r,l,1,!1)},getNormal:function(r,l){return i(r,l,2,!0)},getWeightedNormal:function(r,l){return i(r,l,2,!1)},getCurvature:function(r,l){return i(r,l,3,!1).x},getPeaks:function(r){var l=r[0],d=r[1],f=r[2],v=r[3],g=r[4],x=r[5],T=3*f-l-3*g+r[6];return g=3*l-6*f+3*g,f=-3*l+3*f,r=3*v-d-3*x+r[7],x=3*d-6*v+3*x,d=-3*d+3*v,v=[],Ve.solveCubic(9*(T*T+r*r),9*(T*g+x*r),2*(g*g+x*x)+3*(f*T+d*r),f*g+x*d,v,1e-8,1-1e-8),v.sort()}}}},new function(){function e(g,x,T,S,D,F,H){var U=!H&&T.getPrevious()===D,K=!H&&T!==D&&T.getNext()===D;S!==null&&(U?1e-8:0)<=S&&S<=(K?1-1e-8:1)&&F!==null&&(K?1e-8:0)<=F&&F<=(U?1-1e-8:1)&&(S=new Jt(T,S,null,H),H=new Jt(D,F,null,H),(S._intersection=H)._intersection=S,x&&!x(S)||Jt.insert(g,S,!0))}function t(g,x,T,S,D,F,H,U,K,j,Z,ee,re){if(4096<=++K||40<=++U)return K;var oe,le,xe,Ee,Te,Me,be=x[0],se=x[1],ue=x[6],We=x[7],Ie=_t.getSignedDistance,Ye=Ie(be,se,ue,We,x[2],x[3]),$e=Ie(be,se,ue,We,x[4],x[5]),lt=(xe=0<Ye*$e?.75:4/9)*Math.min(0,Ye,$e),vt=xe*Math.max(0,Ye,$e),L=Ie(be,se,ue,We,g[0],g[1]),s=Ie(be,se,ue,We,g[2],g[3]);return ue=function(c,p,b,C){var P=[0,c],M=[1/3,p],z=[2/3,b],J=[1,C];return J=(p-=(2*c+C)/3)*(c=b-(c+2*C)/3)<0?[[P,M,J],[P,z,J]]:[2<=(C=p/c)?[P,M,J]:C<=.5?[P,z,J]:[P,M,z,J],[P,J]],(p||c)<0?J.reverse():J}(L,s,xe=Ie(be,se,ue,We,g[4],g[5]),se=Ie(be,se,ue,We,g[6],g[7])),We=ue[0],ue=ue[1],Ye===0&&$e===0&&L===0&&s===0&&xe===0&&se===0||(oe=i(We,ue,lt,vt))==null||(le=i(We.reverse(),ue.reverse(),lt,vt))==null||(vt=j+(Z-j)*oe,Z=j+(Z-j)*le,Math.max(re-ee,Z-vt)<1e-9?(Ee=(vt+Z)/2,Me=(ee+re)/2,e(D,F,H?S:T,H?Me:Ee,H?T:S,H?Ee:Me)):(g=ze.getPart(g,oe,le),j=re-ee,K=.8<le-oe?j<Z-vt?(K=t(x,(Te=ze.subdivide(g,.5))[0],S,T,D,F,!H,U,K,ee,re,vt,Ee=(vt+Z)/2),t(x,Te[1],S,T,D,F,!H,U,K,ee,re,Ee,Z)):(K=t((Te=ze.subdivide(x,.5))[0],g,S,T,D,F,!H,U,K,ee,Me=(ee+re)/2,vt,Z),t(Te[1],g,S,T,D,F,!H,U,K,Me,re,vt,Z)):j==0||1e-9<=j?t(x,g,S,T,D,F,!H,U,K,ee,re,vt,Z):t(g,x,T,S,D,F,H,U,K,vt,Z,ee,re))),K}function i(g,x,T,S){return g[0][1]<T?r(g,!0,T):x[0][1]>S?r(x,!1,S):g[0][0]}function r(g,x,T){for(var S=g[0][0],D=g[0][1],F=1,H=g.length;F<H;F++){var U=g[F][0],K=g[F][1];if(x?T<=K:K<=T)return K===T?U:S+(T-D)*(U-S)/(K-D);S=U,D=K}return null}function l(g,x,T,S,D){var F=Ve.isZero;if(F(S)&&F(D))return(F=ze.getTimeOf(g,new Q(x,T)))===null?[]:[F];S=Math.atan2(-D,S);for(var H=Math.sin(S),U=Math.cos(S),K=[],j=(S=[],0);j<8;j+=2){var Z=g[j]-x,ee=g[j+1]-T;K.push(Z*U-ee*H,Z*H+ee*U)}return ze.solveCubic(K,1,0,S,0,1),S}function d(g,x,T,S,D,F){var H=1e-12,U=Math.min;if((le=Math.max)(g[0],g[2],g[4],g[6])+H>U(x[0],x[2],x[4],x[6])&&U(g[0],g[2],g[4],g[6])-H<le(x[0],x[2],x[4],x[6])&&le(g[1],g[3],g[5],g[7])+H>U(x[1],x[3],x[5],x[7])&&U(g[1],g[3],g[5],g[7])-H<le(x[1],x[3],x[5],x[7])){var K=v(g,x);if(K)for(var j=0;j<2;j++){var Z=K[j];e(D,F,T,Z[0],S,Z[1],!0)}else{var ee=ze.isStraight(g),re=ze.isStraight(x),oe=ee&&re,le=(U=ee&&!re,D.length);if((oe?function(be,se,ue,We,Ie,Ye){var $e=_t.intersect(be[0],be[1],be[6],be[7],se[0],se[1],se[6],se[7]);$e&&e(Ie,Ye,ue,ze.getTimeOf(be,$e),We,ze.getTimeOf(se,$e))}:ee||re?function(be,se,ue,We,Ie,Ye,$e){for(var lt=se[0],vt=se[1],L=l(be,lt,vt,se[6]-lt,se[7]-vt),s=0,c=L.length;s<c;s++){var p=L[s],b=ze.getPoint(be,p);(b=ze.getTimeOf(se,b))!==null&&e(Ie,Ye,$e?We:ue,$e?b:p,$e?ue:We,$e?p:b)}}:t)(U?x:g,U?g:x,U?S:T,U?T:S,D,F,U,0,0,0,1,0,1),!oe||D.length===le)for(j=0;j<4;j++){var xe=j>>1,Ee=1&j,Te=6*Ee,Me=new Q(g[Me=6*xe],g[1+Me]);Te=new Q(x[Te],x[1+Te]),Me.isClose(Te,H)&&e(D,F,T,xe,S,Ee)}}}return D}function f(g,x,T,S){return(g=ze.classify(g)).type==="loop"&&e(T,S,x,(g=g.roots)[0],x,g[1]),T}function v(g,x){function T(ue){var We=ue[6]-ue[0];return We*We+(ue=ue[7]-ue[1])*ue}var S,D=Math.abs,F=_t.getDistance,H=1e-7,U=ze.isStraight(g),K=ze.isStraight(x),j=U&&K,Z=(S=T(g)<T(x))?x:g,ee=S?g:x,re=Z[0],oe=Z[1],le=Z[6]-re;if(F(re,oe,le,S=Z[7]-oe,ee[0],ee[1],!0)<H&&F(re,oe,le,S,ee[6],ee[7],!0)<H)!j&&F(re,oe,le,S,Z[2],Z[3],!0)<H&&F(re,oe,le,S,Z[4],Z[5],!0)<H&&F(re,oe,le,S,ee[2],ee[3],!0)<H&&F(re,oe,le,S,ee[4],ee[5],!0)<H&&(U=K=j=!0);else if(j)return null;if(U^K)return null;for(var xe=[g,x],Ee=[],Te=0;Te<4&&Ee.length<2;Te++){var Me=1&Te,be=1^Me,se=Te>>1;if((be=ze.getTimeOf(xe[Me],new Q(xe[be][se?6:0],xe[be][se?7:1])))!=null&&(se=Me?[se,be]:[be,se],(!Ee.length||1e-8<D(se[0]-Ee[0][0])&&1e-8<D(se[1]-Ee[0][1]))&&Ee.push(se)),2<Te&&!Ee.length)break}return Ee.length!==2?Ee=null:j||(g=ze.getPart(g,Ee[0][0],Ee[1][0]),(D((x=ze.getPart(x,Ee[0][1],Ee[1][1]))[2]-g[2])>H||D(x[3]-g[3])>H||D(x[4]-g[4])>H||D(x[5]-g[5])>H)&&(Ee=null)),Ee}return{getIntersections:function(g){var x=this.getValues(),T=g&&g!==this&&g.getValues();return T?d(x,T,this,g,[]):f(x,this,[])},statics:{getOverlaps:v,getIntersections:function(g,x,T,S,D,F){for(var H=!x,U=g.length,K=(x=H?g:x).length,j=new Array(U),Z=H?j:new Array(K),ee=[],re=0;re<U;re++)j[re]=g[re].getValues(S);if(!H)for(re=0;re<K;re++)Z[re]=x[re].getValues(D);for(var oe=ht.findCurveBoundsCollisions(j,Z,1e-7),le=0;le<U;le++){var xe=g[le],Ee=j[le];H&&f(Ee,xe,ee,T);var Te=oe[le];if(Te)for(var Me=0;Me<Te.length;Me++){if(F&&ee.length)return ee;var be,se=Te[Me];(!H||le<se)&&(be=x[se],d(Ee,Z[se],xe,be,ee,T))}}return ee},getCurveLineIntersections:l,getTimesWithTangent:function(g,x){var T,S=g[0],D=g[1],F=g[2],H=g[3],U=g[4],K=g[5],j=g[6],Z=g[7];return x=(g=x.normalize()).x,j=3*j-9*U+9*F-3*S,Z=3*Z-9*K+9*H-3*D,U=6*U-12*F+6*S,K=6*K-12*H+6*D,F=3*F-3*S,S=3*H-3*D,H=2*j*(g=g.y)-2*Z*x,D=[],Math.abs(H)<Ve.CURVETIME_EPSILON?(H=j*K-Z*U)==0||0<=(T=-(j*S-Z*F)/H)&&T<=1&&D.push(T):(T=U*g-K*x,0<=(S=(U*U-4*j*F)*g*g+(-2*U*K+4*Z*F+4*j*S)*x*g+(K*K-4*Z*S)*x*x)&&H!=0&&(S=(-T+(x=Math.sqrt(S)))/H,0<=(H=-(T+x)/H)&&H<=1&&D.push(H),0<=S&&S<=1&&D.push(S))),D}}}}),Jt=O.extend({_class:"CurveLocation",initialize:function(e,t,i,r,l){var d;.99999999<=t&&(d=e.getNext())&&(t=0,e=d),this._setCurve(e),this._time=t,this._point=i||e.getPointAtTime(t),this._overlap=r,this._distance=l,this._intersection=this._next=this._previous=null},_setPath:function(e){this._path=e,this._version=e?e._version:0},_setCurve:function(e){this._setPath(e._path),this._curve=e,this._segment=null,this._segment1=e._segment1,this._segment2=e._segment2},_setSegment:function(e){var t=e.getCurve();t?this._setCurve(t):(this._setPath(e._path),this._segment1=e,this._segment2=null),this._segment=e,this._time=e===this._segment1?0:1,this._point=e._point.clone()},getSegment:function(){var e,t,i=this._segment;return i||(e=this.getCurve(),(t=this.getTime())===0?i=e._segment1:t===1?i=e._segment2:t!=null&&(i=e.getPartLength(0,t)<e.getPartLength(t,1)?e._segment1:e._segment2),this._segment=i),i},getCurve:function(){var e=this._path,t=this;function i(r){if((r=r&&r.getCurve())&&(t._time=r.getTimeOf(t._point))!=null)return t._setCurve(r),r}return e&&e._version!==this._version&&(this._time=this._offset=this._curveOffset=this._curve=null),this._curve||i(this._segment)||i(this._segment1)||i(this._segment2.getPrevious())},getPath:function(){var e=this.getCurve();return e&&e._path},getIndex:function(){var e=this.getCurve();return e&&e.getIndex()},getTime:function(){var e=this.getCurve(),t=this._time;return e&&t==null?this._time=e.getTimeOf(this._point):t},getParameter:"#getTime",getPoint:function(){return this._point},getOffset:function(){if((e=this._offset)==null){var e=0,t=this.getPath(),i=this.getIndex();if(t&&i!=null)for(var r=t.getCurves(),l=0;l<i;l++)e+=r[l].getLength();this._offset=e+=this.getCurveOffset()}return e},getCurveOffset:function(){var e,t,i=this._curveOffset;return i==null&&(e=this.getCurve(),t=this.getTime(),this._curveOffset=i=t!=null&&e&&e.getPartLength(0,t)),i},getIntersection:function(){return this._intersection},getDistance:function(){return this._distance},divide:function(){var e;return(e=(e=this.getCurve())&&e.divideAtTime(this.getTime()))&&this._setSegment(e._segment1),e},split:function(){var e,t=(e=this.getCurve())._path;return(e=e&&e.splitAtTime(this.getTime()))&&this._setSegment(t.getLastSegment()),e},equals:function(e,t){var i,r,l,d,f=this===e;return!f&&e instanceof Jt&&(l=this.getCurve(),d=e.getCurve(),(i=l._path)===d._path&&(l=(r=Math.abs)(this.getOffset()-e.getOffset()),d=!t&&this._intersection,e=!t&&e._intersection,f=(l<1e-7||i&&r(i.getLength()-l)<1e-7)&&(!d&&!e||d&&e&&d.equals(e,!0)))),f},toString:function(){var e=[],t=this.getPoint(),i=tt.instance;return t&&e.push("point: "+t),(t=this.getIndex())!=null&&e.push("index: "+t),(t=this.getTime())!=null&&e.push("time: "+i.number(t)),this._distance!=null&&e.push("distance: "+i.number(this._distance)),"{ "+e.join(", ")+" }"},isTouching:function(){if((t=this._intersection)&&this.getTangent().isCollinear(t.getTangent())){var e=this.getCurve(),t=t.getCurve();return!(e.isStraight()&&t.isStraight()&&e.getLine().intersect(t.getLine()))}return!1},isCrossing:function(){if(!(x=this._intersection))return!1;var e=this.getTime(),t=x.getTime(),i=1e-8,r=1-i,l=i<=e&&e<=r,d=i<=t&&t<=r;if(l&&d)return!this.isTouching();var f=this.getCurve(),v=f&&e<i?f.getPrevious():f,g=x.getCurve(),x=g&&t<i?g.getPrevious():g;if(r<e&&(f=f.getNext()),r<t&&(g=g.getNext()),!(v&&f&&x&&g))return!1;var T=[];function S(F,H){var U=F.getValues(),K=(F=(K=ze.classify(U).roots||ze.getPeaks(U)).length,ze.getLength(U,H&&F?K[F-1]:0,!H&&F?K[0]:1));T.push(F?K:K/32)}function D(F,H,U){return H<U?H<F&&F<U:H<F||F<U}return l||(S(v,!0),S(f,!1)),d||(S(x,!0),S(g,!1)),i=this.getPoint(),r=Math.min.apply(Math,T),f=l?f.getTangentAtTime(e):f.getPointAt(r).subtract(i),v=l?f.negate():v.getPointAt(-r).subtract(i),g=d?g.getTangentAtTime(t):g.getPointAt(r).subtract(i),i=d?g.negate():x.getPointAt(-r).subtract(i),v=v.getAngle(),f=f.getAngle(),i=i.getAngle(),g=g.getAngle(),!!(l?D(v,i,g)^D(f,i,g)&&D(v,g,i)^D(f,g,i):D(i,v,f)^D(g,v,f)&&D(i,f,v)^D(g,f,v))},hasOverlap:function(){return!!this._overlap}},O.each(ze._evaluateMethods,function(e){var t=e+"At";this[e]=function(){var i=this.getCurve(),r=this.getTime();return r!=null&&i&&i[t](r,!0)}},{preserve:!0}),new function(){function e(t,i,r){var l=t.length,d=0,f=l-1;function v(F,H){for(var U=F+H;-1<=U&&U<=l;U+=H){var K=t[(U%l+l)%l];if(!i.getPoint().isClose(K.getPoint(),1e-7))break;if(i.equals(K))return K}return null}for(;d<=f;){var g,x=d+f>>>1,T=t[x];if(r&&(g=i.equals(T)?T:v(x,-1)||v(x,1)))return i._overlap&&(g._overlap=g._intersection._overlap=!0),g;var S=i.getPath(),D=T.getPath();(S!==D?S._id-D._id:i.getIndex()+i.getTime()-(T.getIndex()+T.getTime()))<0?f=x-1:d=1+x}return t.splice(d,0,i),i}return{statics:{insert:e,expand:function(t){for(var i=t.slice(),r=t.length-1;0<=r;r--)e(i,t[r]._intersection,!1);return i}}}}),Xt=dt.extend({_class:"PathItem",_selectBounds:!1,_canScaleStroke:!0,beans:!0,initialize:function(){},statics:{create:function(e){var t,i,r;return O.isPlainObject(e)?(i=e.segments,t=e.pathData):Array.isArray(e)?i=e:typeof e=="string"&&(t=e),i?r=(r=i[0])&&Array.isArray(r[0]):t&&(r=1<(t.match(/m/gi)||[]).length||/z\s*\S+/i.test(t)),new(r?Kt:St)(e)}},_asPathItem:function(){return this},isClockwise:function(){return 0<=this.getArea()},setClockwise:function(e){this.isClockwise()!=(e=!!e)&&this.reverse()},setPathData:function(e){var t,i,r=e&&e.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/gi),l=!1,d=new Q,f=new Q;function v(ee,re){return ee=+S[ee],l&&(ee+=d[re]),ee}function g(ee){return new Q(v(ee,"x"),v(ee+1,"y"))}this.clear();for(var x=0,T=r&&r.length;x<T;x++){var S,D=r[x],F=D[0],H=F.toLowerCase(),U=(S=D.match(/[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g))&&S.length;switch(l=F===H,t!=="z"||/[mz]/.test(H)||this.moveTo(d),H){case"m":case"l":for(var K=H==="m",j=0;j<U;j+=2)this[K?"moveTo":"lineTo"](d=g(j)),K&&(f=d,K=!1);i=d;break;case"h":case"v":var Z=H==="h"?"x":"y";for(d=d.clone(),j=0;j<U;j++)d[Z]=v(j,Z),this.lineTo(d);i=d;break;case"c":for(j=0;j<U;j+=6)this.cubicCurveTo(g(j),i=g(j+2),d=g(j+4));break;case"s":for(j=0;j<U;j+=4)this.cubicCurveTo(/[cs]/.test(t)?d.multiply(2).subtract(i):d,i=g(j),d=g(j+2)),t=H;break;case"q":for(j=0;j<U;j+=4)this.quadraticCurveTo(i=g(j),d=g(j+2));break;case"t":for(j=0;j<U;j+=2)this.quadraticCurveTo(i=/[qt]/.test(t)?d.multiply(2).subtract(i):d,d=g(j)),t=H;break;case"a":for(j=0;j<U;j+=7)this.arcTo(d=g(j+5),new it(+S[j],+S[j+1]),+S[j+2],+S[j+4],+S[j+3]);break;case"z":this.closePath(1e-12),d=f}t=H}},_canComposite:function(){return!(this.hasFill()&&this.hasStroke())},_contains:function(e){return(e=e.isInside(this.getBounds({internal:!0,handle:!0}))?this._getWinding(e):{}).onPath||!!(this.getFillRule()==="evenodd"?1&e.windingL||1&e.windingR:e.winding)},getIntersections:function(e,t,i,r){var l=this===e||!e,d=this._matrix._orNullIfIdentity();return i=l?d:(i||e._matrix)._orNullIfIdentity(),l||this.getBounds(d).intersects(e.getBounds(i),1e-12)?ze.getIntersections(this.getCurves(),!l&&e.getCurves(),t,d,i,r):[]},getCrossings:function(e){return this.getIntersections(e,function(t){return t.isCrossing()})},getNearestLocation:function(){for(var e=Q.read(arguments),t=this.getCurves(),i=1/0,r=null,l=0,d=t.length;l<d;l++){var f=t[l].getNearestLocation(e);f._distance<i&&(i=f._distance,r=f)}return r},getNearestPoint:function(){var e=this.getNearestLocation.apply(this,arguments);return e&&e.getPoint()},interpolate:function(e,t,i){var r=!this._children,l=r?"_segments":"_children",d=e[l],f=t[l],v=this[l];if(!d||!f||d.length!==f.length)throw new Error("Invalid operands in interpolate() call: "+e+", "+t);t=v.length;var g=f.length;if(t<g)for(var x=r?Ke:St,T=t;T<g;T++)this.add(new x);else g<t&&this[r?"removeSegments":"removeChildren"](g,t);for(T=0;T<g;T++)v[T].interpolate(d[T],f[T],i);r&&(this.setClosed(e._closed),this._changed(9))},compare:function(e){var t=!1;if(e){var i=this._children||[this],r=e._children?e._children.slice():[e],l=i.length,d=(e=r.length,[]),f=0;t=!0;for(var v=ht.findItemBoundsCollisions(i,r,Ve.GEOMETRIC_EPSILON),g=l-1;0<=g&&t;g--){var x=i[g],T=(t=!1,v[g]);if(T)for(var S=T.length-1;0<=S&&!t;S--)x.compare(r[T[S]])&&(d[T[S]]||(d[T[S]]=!0,f++),t=!0)}t=t&&f===e}return t}}),St=Xt.extend({_class:"Path",_serializeFields:{segments:[],closed:!1},initialize:function(e){this._closed=!1,this._segments=[],this._version=0;var t=arguments;(t=Array.isArray(e)?typeof e[0]=="object"?e:t:!e||e.size!==k||e.x===k&&e.point===k?null:t)&&0<t.length?this.setSegments(t):(this._curves=k,this._segmentSelection=0,t||typeof e!="string"||(this.setPathData(e),e=null)),this._initialize(!t&&e)},_equals:function(e){return this._closed===e._closed&&O.equals(this._segments,e._segments)},copyContent:function(e){this.setSegments(e._segments),this._closed=e._closed},_changed:function e(t){if(e.base.call(this,t),8&t){if(this._length=this._area=k,32&t)this._version++;else if(this._curves)for(var i=0,r=this._curves.length;i<r;i++)this._curves[i]._changed()}else 64&t&&(this._bounds=k)},getStyle:function(){var e=this._parent;return(e instanceof Kt?e:this)._style},getSegments:function(){return this._segments},setSegments:function(e){var t,i=this.isFullySelected(),r=e&&e.length;this._segments.length=0,this._segmentSelection=0,this._curves=k,r&&(typeof(t=e[r-1])=="boolean"&&(this.setClosed(t),r--),this._add(Ke.readList(e,0,{},r))),i&&this.setFullySelected(!0)},getFirstSegment:function(){return this._segments[0]},getLastSegment:function(){return this._segments[this._segments.length-1]},getCurves:function(){var e=this._curves,t=this._segments;if(!e)for(var i=this._countCurves(),r=(e=this._curves=new Array(i),0);r<i;r++)e[r]=new ze(this,t[r],t[r+1]||t[0]);return e},getFirstCurve:function(){return this.getCurves()[0]},getLastCurve:function(){var e=this.getCurves();return e[e.length-1]},isClosed:function(){return this._closed},setClosed:function(e){var t;this._closed!=(e=!!e)&&(this._closed=e,this._curves&&(t=this._curves.length=this._countCurves(),e&&(this._curves[t-1]=new ze(this,this._segments[t-1],this._segments[0]))),this._changed(41))}},{beans:!0,getPathData:function(e,t){var i,r,l,d,f,v,g,x,T=this._segments,S=T.length,D=new tt(t),F=new Array(6),H=!0,U=[];function K(Z,ee){Z._transformCoordinates(e,F),i=F[0],r=F[1],H?(U.push("M"+D.pair(i,r)),H=!1):(f=F[2],v=F[3],f===i&&v===r&&g===l&&x===d?ee||(Z=r-d,U.push((ee=i-l)==0?"v"+D.number(Z):Z==0?"h"+D.number(ee):"l"+D.pair(ee,Z))):U.push("c"+D.pair(g-l,x-d)+" "+D.pair(f-l,v-d)+" "+D.pair(i-l,r-d))),l=i,d=r,g=F[4],x=F[5]}if(!S)return"";for(var j=0;j<S;j++)K(T[j]);return this._closed&&0<S&&(K(T[0],!0),U.push("z")),U.join("")},isEmpty:function(){return!this._segments.length},_transformContent:function(e){for(var t=this._segments,i=new Array(6),r=0,l=t.length;r<l;r++)t[r]._transformCoordinates(e,i,!0);return!0},_add:function(e,t){for(var i=this._segments,r=this._curves,l=e.length,d=(t=(T=t==null)?i.length:t,0);d<l;d++){var f=e[d];(f=f._path?e[d]=f.clone():f)._path=this,f._index=t+d,f._selection&&this._updateSelection(f,0,f._selection)}if(T)O.push(i,e);else{i.splice.apply(i,[t,0].concat(e)),d=t+l;for(var v=i.length;d<v;d++)i[d]._index=d}if(r){var g=this._countCurves(),x=0<t&&t+l-1===g?t-1:t,T=x,S=Math.min(x+l,g);for(e._curves&&(r.splice.apply(r,[x,0].concat(e._curves)),T+=e._curves.length),d=T;d<S;d++)r.splice(d,0,new ze(this,null,null));this._adjustCurves(x,S)}return this._changed(41),e},_adjustCurves:function(e,t){for(var i,r=this._segments,l=this._curves,d=e;d<t;d++)(i=l[d])._path=this,i._segment1=r[d],i._segment2=r[d+1]||r[0],i._changed();(i=l[this._closed&&!e?r.length-1:e-1])&&(i._segment2=r[e]||r[0],i._changed()),(i=l[t])&&(i._segment1=r[t],i._changed())},_countCurves:function(){var e=this._segments.length;return!this._closed&&0<e?e-1:e},add:function(e){var t=arguments;return 1<t.length&&typeof e!="number"?this._add(Ke.readList(t)):this._add([Ke.read(t)])[0]},insert:function(e,t){var i=arguments;return 2<i.length&&typeof t!="number"?this._add(Ke.readList(i,1),e):this._add([Ke.read(i,1)],e)[0]},addSegment:function(){return this._add([Ke.read(arguments)])[0]},insertSegment:function(e){return this._add([Ke.read(arguments,1)],e)[0]},addSegments:function(e){return this._add(Ke.readList(e))},insertSegments:function(e,t){return this._add(Ke.readList(t),e)},removeSegment:function(e){return this.removeSegments(e,e+1)[0]||null},removeSegments:function(e,t,i){e=e||0,t=O.pick(t,this._segments.length);var r=this._segments,l=this._curves,d=r.length,f=r.splice(e,t-e),v=f.length;if(!v)return f;for(var g=0;g<v;g++){var x=f[g];x._selection&&this._updateSelection(x,x._selection,0),x._index=x._path=null}g=e;for(var T=r.length;g<T;g++)r[g]._index=g;if(l){for(e=0<e&&t===d+(this._closed?1:0)?e-1:e,g=(l=l.splice(e,v)).length-1;0<=g;g--)l[g]._path=null;i&&(f._curves=l.slice(1)),this._adjustCurves(e,e)}return this._changed(41),f},clear:"#removeSegments",hasHandles:function(){for(var e=this._segments,t=0,i=e.length;t<i;t++)if(e[t].hasHandles())return!0;return!1},clearHandles:function(){for(var e=this._segments,t=0,i=e.length;t<i;t++)e[t].clearHandles()},getLength:function(){if(this._length==null){for(var e=this.getCurves(),t=0,i=0,r=e.length;i<r;i++)t+=e[i].getLength();this._length=t}return this._length},getArea:function(){if((i=this._area)==null){for(var e=this._segments,t=this._closed,i=0,r=0,l=e.length;r<l;r++){var d=r+1===l;i+=ze.getArea(ze.getValues(e[r],e[d?0:r+1],null,d&&!t))}this._area=i}return i},isFullySelected:function(){var e=this._segments.length;return this.isSelected()&&0<e&&this._segmentSelection===7*e},setFullySelected:function(e){e&&this._selectSegments(!0),this.setSelected(e)},setSelection:function e(t){1&t||this._selectSegments(!1),e.base.call(this,t)},_selectSegments:function(e){var t=this._segments,i=t.length,r=e?7:0;this._segmentSelection=r*i;for(var l=0;l<i;l++)t[l]._selection=r},_updateSelection:function(e,t,i){e._selection=i,0<(this._segmentSelection+=i-t)&&this.setSelected(!0)},divideAt:function(e){var t;return(e=this.getLocationAt(e))&&(t=e.getCurve().divideAt(e.getCurveOffset()))?t._segment1:null},splitAt:function(e){var t,i=this.getLocationAt(e),r=i&&i.index;return 1-1e-8<(e=i&&i.time)&&(r++,e=0),i=this.getCurves(),0<=r&&r<i.length?(1e-8<=e&&i[r++].divideAtTime(e),r=this.removeSegments(r,this._segments.length,!0),this._closed?(this.setClosed(!1),t=this):((t=new St(dt.NO_INSERT)).insertAbove(this),t.copyAttributes(this)),t._add(r,0),this.addSegment(r[0]),t):null},split:function(e,t){return(t=t===k?e:(e=this.getCurves()[e])&&e.getLocationAtTime(t))!=null?this.splitAt(t):null},join:function(e,t){var i=t||0;if(e&&e!==this){var r=e._segments,l=this.getLastSegment(),d=e.getLastSegment();if(!d)return this;l&&l._point.isClose(d._point,i)&&e.reverse(),t=e.getFirstSegment(),l&&l._point.isClose(t._point,i)?(l.setHandleOut(t._handleOut),this._add(r.slice(1))):((l=this.getFirstSegment())&&l._point.isClose(t._point,i)&&e.reverse(),d=e.getLastSegment(),l&&l._point.isClose(d._point,i)?(l.setHandleIn(d._handleIn),this._add(r.slice(0,r.length-1),0)):this._add(r.slice())),e._closed&&this._add([r[0]]),e.remove()}return(r=this.getFirstSegment())!==(e=this.getLastSegment())&&r._point.isClose(e._point,i)&&(r.setHandleIn(e._handleIn),e.remove(),this.setClosed(!0)),this},reduce:function(e){for(var t=this.getCurves(),i=e&&e.simplify,r=i?1e-7:0,l=t.length-1;0<=l;l--){var d=t[l];!d.hasHandles()&&(!d.hasLength(r)||i&&d.isCollinear(d.getNext()))&&d.remove()}return this},reverse:function(){this._segments.reverse();for(var e=0,t=this._segments.length;e<t;e++){var i=this._segments[e],r=i._handleIn;i._handleIn=i._handleOut,i._handleOut=r,i._index=e}this._curves=null,this._changed(9)},flatten:function(e){for(var t=new Xe(this,e||.25,256,!0).parts,i=t.length,r=[],l=0;l<i;l++)r.push(new Ke(t[l].curve.slice(0,2)));!this._closed&&0<i&&r.push(new Ke(t[i-1].curve.slice(6))),this.setSegments(r)},simplify:function(e){return(e=new Ot(this).fit(e||2.5))&&this.setSegments(e),!!e},smooth:function(e){var t=this,i=e||{},r=(e=i.type||"asymmetric",this._segments),l=r.length,d=this._closed;function f(lt,vt){var L=lt&&lt.index;if(L!=null){var s=lt.path;if(s&&s!==t)throw new Error(lt._class+" "+L+" of "+s+" is not part of "+t);vt&&lt instanceof ze&&L++}else L=typeof lt=="number"?lt:vt;return Math.min(L<0&&d?L%l:L<0?L+l:L,l-1)}var v=d&&i.from===k&&i.to===k,g=f(i.from,0),x=f(i.to,l-1);if(x<g&&(d?g-=l:(S=g,g=x,x=S)),/^(?:asymmetric|continuous)$/.test(e)){var T=e==="asymmetric",S=Math.min,D=(e=x-g+1)-1,F=e=v?S(e,4):1,H=[];if(d||(F=S(1,g),e=S(1,l-x-1)),!((D+=F+e)<=1)){for(var U=0,K=g-F;U<=D;U++,K++)H[U]=r[(K<0?K+l:K)%l]._point;var j=D-1,Z=[se=H[0]._x+2*H[1]._x],ee=[ue=H[0]._y+2*H[1]._y],re=[be=2],oe=[],le=[];for(U=1;U<D;U++)var xe=U<j,Ee=xe?4:T?3:8,Te=xe?2:T?0:1,Me=(xe||T?1:2)/be,be=re[U]=(xe?4:T?2:7)-Me,se=Z[U]=Ee*H[U]._x+Te*H[U+1]._x-Me*se,ue=ee[U]=Ee*H[U]._y+Te*H[U+1]._y-Me*ue;for(oe[j]=Z[j]/re[j],le[j]=ee[j]/re[j],U=D-2;0<=U;U--)oe[U]=(Z[U]-oe[U+1])/re[U],le[U]=(ee[U]-le[U+1])/re[U];oe[D]=(3*H[D]._x-oe[j])/2,le[D]=(3*H[D]._y-le[j])/2,U=F;var We=D-e;for(K=g;U<=We;U++,K++){var Ie=r[K<0?K+l:K],Ye=Ie._point,$e=oe[U]-Ye._x;Ye=le[U]-Ye._y,(v||U<We)&&Ie.setHandleOut($e,Ye),(v||F<U)&&Ie.setHandleIn(-$e,-Ye)}}}else for(U=g;U<=x;U++)r[U<0?U+l:U].smooth(i,!v&&U===g,!v&&U===x)},toShape:function(e){if(!this._closed)return null;var t,i,r,l,d,f,v=this._segments;function g(F,H){var U=v[F],K=U.getNext();return H=(F=v[H]).getNext(),U._handleOut.isZero()&&K._handleIn.isZero()&&F._handleOut.isZero()&&H._handleIn.isZero()&&K._point.subtract(U._point).isCollinear(H._point.subtract(F._point))}function x(F){var H=v[F],U=H.getNext(),K=H._handleOut,j=U._handleIn,Z=.5522847498307936;if(K.isOrthogonal(j))return F=H._point,H=U._point,(U=new _t(F,K,!0).intersect(new _t(H,j,!0),!0))&&Ve.isZero(K.getLength()/U.subtract(F).getLength()-Z)&&Ve.isZero(j.getLength()/U.subtract(H).getLength()-Z)}function T(F,H){return v[F]._point.getDistance(v[H]._point)}if(!this.hasHandles()&&v.length===4&&g(0,2)&&g(1,3)&&(f=(d=v[l=1]).getPrevious(),l=d.getNext(),f._handleOut.isZero()&&d._handleIn.isZero()&&d._handleOut.isZero()&&l._handleIn.isZero()&&d._point.subtract(f._point).isOrthogonal(l._point.subtract(d._point)))?(t=Gt.Rectangle,i=new it(T(0,3),T(0,1)),r=v[1]._point.add(v[2]._point).divide(2)):v.length===8&&x(0)&&x(2)&&x(4)&&x(6)&&g(1,5)&&g(3,7)?(t=Gt.Rectangle,D=(i=new it(T(1,6),T(0,3))).subtract(new it(T(0,7),T(1,2))).divide(2),r=v[3]._point.add(v[4]._point).divide(2)):v.length===4&&x(0)&&x(1)&&x(2)&&x(3)&&(D=Ve.isZero(T(0,2)-T(1,3))?(t=Gt.Circle,T(0,2)/2):(t=Gt.Ellipse,new it(T(2,0)/2,T(3,1)/2)),r=v[1]._point),t){var S=this.getPosition(!0),D=new t({center:S,size:i,radius:D,insert:!1});return D.copyAttributes(this,!0),D._matrix.prepend(this._matrix),D.rotate(r.subtract(S).getAngle()+90),e!==k&&!e||D.insertAbove(this),D}return null},toPath:"#clone",compare:function e(t){if(!t||t instanceof Kt)return e.base.call(this,t);var i=this.getCurves(),r=t.getCurves(),l=i.length,d=r.length;if(!l||!d)return l==d;for(var f,v,g=i[0].getValues(),x=[],T=0,S=0,D=0;D<d;D++){var F=r[D].getValues();if(x.push(F),K=ze.getOverlaps(g,F)){f=!D&&0<K[0][0]?d-1:D,v=K[0][1];break}}var H,U=Math.abs;for(F=x[f];g&&F;){var K=ze.getOverlaps(g,F);if(K&&U(K[0][0]-S)<1e-8){(S=K[1][0])===1&&(g=++T<l?i[T].getValues():null,S=0);var j=K[0][1];if(U(j-v)<1e-8){if(H=H||[f,j],(v=K[1][1])===1&&(F=x[f=++f>=d?0:f]||r[f].getValues(),v=0),!g)return H[0]===f&&H[1]===v;continue}}break}return!1},_hitTestSelf:function(e,t,i,r){var l,d,f,v,g,x,T=this,S=this.getStyle(),D=this._segments,F=D.length,H=this._closed,U=t._tolerancePadding,K=U,j=t.stroke&&S.hasStroke(),Z=t.fill&&S.hasFill(),ee=t.curves,re=j?S.getStrokeWidth()/2:Z&&0<t.tolerance||ee?0:null;function oe(se,ue){return e.subtract(se).divide(ue).length<=1}function le(se,ue,We){if(!t.selected||ue.isSelected()){var Ie=se._point;if(oe(ue=ue!==Ie?ue.add(Ie):ue,K))return new Vt(We,T,{segment:se,point:ue})}}function xe(se,ue){return(ue||t.segments)&&le(se,se._point,"segment")||!ue&&t.handles&&(le(se,se._handleIn,"handle-in")||le(se,se._handleOut,"handle-out"))}function Ee(se){v.add(se)}function Te(se){var ue=H||0<se._index&&se._index<F-1;return(ue?l:d)==="round"?oe(se._point,K):(v=new St({internal:!0,closed:!0}),ue?se.isSmooth()||St._addBevelJoin(se,l,re,f,null,r,Ee,!0):d==="square"&&St._addSquareCap(se,d,re,null,r,Ee,!0),!v.isEmpty()&&(v.contains(e)||(se=v.getNearestLocation(e))&&oe(se.getPoint(),U)))}if(re!==null&&(0<re?(l=S.getStrokeJoin(),d=S.getStrokeCap(),f=S.getMiterLimit(),K=K.add(St._getStrokePadding(re,r))):l=d="round"),!t.ends||t.segments||H){if(t.segments||t.handles){for(var Me=0;Me<F;Me++)if(g=xe(D[Me]))return g}}else if(g=xe(D[0],!0)||xe(D[F-1],!0))return g;if(re!==null&&((x=this.getNearestLocation(e))&&((S=x.getTime())===0||S===1&&1<F?Te(x.getSegment())||(x=null):oe(x.getPoint(),K)||(x=null)),!x&&l==="miter"&&1<F))for(Me=0;Me<F;Me++){var be=D[Me];if(e.getDistance(be._point)<=f*re&&Te(be)){x=be.getLocation();break}}return!x&&Z&&this._contains(e)||x&&!j&&!ee?new Vt("fill",this):x?new Vt(j?"stroke":"curve",this,{location:x,point:x.getPoint()}):null}},O.each(ze._evaluateMethods,function(e){this[e+"At"]=function(t){return(t=this.getLocationAt(t))&&t[e]()}},{beans:!1,getLocationOf:function(){for(var e=Q.read(arguments),t=this.getCurves(),i=0,r=t.length;i<r;i++){var l=t[i].getLocationOf(e);if(l)return l}return null},getOffsetOf:function(){var e=this.getLocationOf.apply(this,arguments);return e?e.getOffset():null},getLocationAt:function(e){if(typeof e=="number"){for(var t=this.getCurves(),i=0,r=0,l=t.length;r<l;r++){var d=i,f=t[r];if(e<(i+=f.getLength()))return f.getLocationAt(e-d)}if(0<t.length&&e<=this.getLength())return new Jt(t[t.length-1],1)}else if(e&&e.getPath&&e.getPath()===this)return e;return null},getOffsetsWithTangent:function(){var e=Q.read(arguments);if(e.isZero())return[];for(var t=[],i=0,r=this.getCurves(),l=0,d=r.length;l<d;l++){for(var f=r[l],v=f.getTimesWithTangent(e),g=0,x=v.length;g<x;g++){var T=i+f.getOffsetAtTime(v[g]);t.indexOf(T)<0&&t.push(T)}i+=f.length}return t}}),new function(){function e(t,i,r){var l,d,f,v,g,x,T,S,D=i._segments,F=D.length,H=new Array(6),U=!0;function K(Z){var ee,re;d=r?(Z._transformCoordinates(r,H),l=H[0],H[1]):(ee=Z._point,l=ee._x,ee._y),U?(t.moveTo(l,d),U=!1):(x=r?(g=H[2],H[3]):(re=Z._handleIn,g=l+re._x,d+re._y),g===l&&x===d&&T===f&&S===v?t.lineTo(l,d):t.bezierCurveTo(T,S,g,x,l,d)),f=l,v=d,S=r?(T=H[4],H[5]):(re=Z._handleOut,T=f+re._x,v+re._y)}for(var j=0;j<F;j++)K(D[j]);i._closed&&0<F&&K(D[0])}return{_draw:function(t,i,r,l){var d=i.dontStart,f=i.dontFinish||i.clip,v=this.getStyle(),g=v.hasFill(),x=v.hasStroke(),T=v.getDashArray(),S=!jt.support.nativeDash&&x&&T&&T.length;function D(Z){return T[(Z%S+S)%S]}if(d||t.beginPath(),(g||x&&!S||f)&&(e(t,this,l),this._closed&&t.closePath()),!f&&(g||x)&&(this._setStyles(t,i,r),g&&(t.fill(v.getFillRule()),t.shadowColor="rgba(0,0,0,0)"),x)){if(S){d||t.beginPath();for(var F,H=new Xe(this,.25,32,!1,l),U=H.length,K=-v.getDashOffset(),j=0;0<K;)K-=D(j--)+D(j--);for(;K<U;)F=K+D(j++),(0<K||0<F)&&H.drawPart(t,Math.max(K,0),Math.max(F,0)),K=F+D(j++)}t.stroke()}},_drawSelected:function(t,i){t.beginPath(),e(t,this,i),t.stroke(),function(r,l,d,f){if(!(f<=0))for(var v,g,x=f/2,T=f-2,S=x-1,D=new Array(6),F=0,H=l.length;F<H;F++){var U=l[F],K=U._selection;U._transformCoordinates(d,D),v=D[0],g=D[1],2&K&&j(2),4&K&&j(4),r.fillRect(v-x,g-x,f,f),0<T&&!(1&K)&&(K=r.fillStyle,r.fillStyle="#ffffff",r.fillRect(v-S,g-S,T,T),r.fillStyle=K)}function j(Z){var ee=D[Z];Z=D[Z+1],v==ee&&g==Z||(r.beginPath(),r.moveTo(v,g),r.lineTo(ee,Z),r.stroke(),r.beginPath(),r.arc(ee,Z,x,0,2*Math.PI,!0),r.fill())}}(t,this._segments,i,jt.settings.handleSize)}}},new function(){function e(t){if(!(t=t._segments).length)throw new Error("Use a moveTo() command first");return t[t.length-1]}return{moveTo:function(){var t=this._segments;t.length===1&&this.removeSegment(0),t.length||this._add([new Ke(Q.read(arguments))])},moveBy:function(){throw new Error("moveBy() is unsupported on Path items.")},lineTo:function(){this._add([new Ke(Q.read(arguments))])},cubicCurveTo:function(){var t=arguments,i=Q.read(t),r=Q.read(t),l=Q.read(t);(t=e(this)).setHandleOut(i.subtract(t._point)),this._add([new Ke(l,r.subtract(l))])},quadraticCurveTo:function(){var t=arguments,i=Q.read(t),r=Q.read(t);t=e(this)._point,this.cubicCurveTo(i.add(t.subtract(i).multiply(1/3)),i.add(r.subtract(i).multiply(1/3)),r)},curveTo:function(){var t=arguments,i=Q.read(t),r=Q.read(t),l=O.pick(O.read(t),.5),d=1-l;if(t=e(this)._point,(d=i.subtract(t.multiply(d*d)).subtract(r.multiply(l*l)).divide(2*l*d)).isNaN())throw new Error("Cannot put a curve through points with parameter = "+l);this.quadraticCurveTo(d,r)},arcTo:function(){var t,i=arguments,r=Math.abs,l=Math.sqrt,d=e(this),f=d._point,v=Q.read(i),g=O.peek(i);if(typeof(F=O.pick(g,!0))=="boolean")var x=(U=f.add(v).divide(2)).add(U.subtract(f).rotate(F?-90:90));else if(O.remain(i)<=2)x=v,v=Q.read(i);else if(!f.equals(v)){var T=it.read(i);if((S=Ve.isZero)(T.width)||S(T.height))return this.lineTo(v);var S,D=O.read(i),F=!!O.read(i),H=!!O.read(i),U=f.add(v).divide(2),K=(ue=f.subtract(U).rotate(-D)).x,j=ue.y,Z=(oe=r(T.width))*oe;if(1<(T=l((S=K*K)/Z+(i=j*j)/(g=(le=r(T.height))*le)))&&(Z=(oe*=T)*oe,g=(le*=T)*le),(T=r(T=(Z*g-Z*i-g*S)/(Z*i+g*S))<1e-12?0:T)<0)throw new Error("Cannot create an arc with the given arguments");ee=new Q(oe*j/le,-le*K/oe).multiply((H===F?-1:1)*l(T)).rotate(D).add(U),D=(re=(t=new ft().translate(ee).rotate(D).scale(oe,le))._inverseTransform(f)).getDirectedAngle(t._inverseTransform(v)),!F&&0<D?D-=360:F&&D<0&&(D+=360)}if(x){var ee,re,oe=new _t(f.add(x).divide(2),x.subtract(f).rotate(90),!0),le=new _t(x.add(v).divide(2),v.subtract(x).rotate(90),!0);if(x=(F=new _t(f,v)).getSide(x),!(ee=oe.intersect(le,!0))){if(!x)return this.lineTo(v);throw new Error("Cannot create an arc with the given arguments")}D=(re=f.subtract(ee)).getDirectedAngle(v.subtract(ee)),(F=F.getSide(ee,!0))===0?D=x*r(D):x===F&&(D+=D<0?360:-360)}if(D){for(var xe=360<=(r=r(D))?4:Math.ceil((r-1e-5)/90),Ee=D/xe,Te=(D=Ee*Math.PI/360,4/3*Math.sin(D)/(1+Math.cos(D))),Me=[],be=0;be<=xe;be++){var se,ue=v,We=null;be<xe&&(We=re.rotate(90).multiply(Te),t?(ue=t._transformPoint(re),We=t._transformPoint(re.add(We)).subtract(ue)):ue=ee.add(re)),be?(se=re.rotate(-90).multiply(Te),t&&(se=t._transformPoint(re.add(se)).subtract(ue)),Me.push(new Ke(ue,se,We))):d.setHandleOut(We),re=re.rotate(Ee)}this._add(Me)}},lineBy:function(){var t=Q.read(arguments),i=e(this)._point;this.lineTo(i.add(t))},curveBy:function(){var t=arguments,i=Q.read(t),r=Q.read(t),l=O.read(t);t=e(this)._point,this.curveTo(t.add(i),t.add(r),l)},cubicCurveBy:function(){var t=arguments,i=Q.read(t),r=Q.read(t),l=Q.read(t);t=e(this)._point,this.cubicCurveTo(t.add(i),t.add(r),t.add(l))},quadraticCurveBy:function(){var t=arguments,i=Q.read(t),r=Q.read(t);t=e(this)._point,this.quadraticCurveTo(t.add(i),t.add(r))},arcBy:function(){var t=arguments,i=e(this)._point,r=i.add(Q.read(t)),l=O.pick(O.peek(t),!0);typeof l=="boolean"?this.arcTo(r,l):this.arcTo(r,i.add(Q.read(t)))},closePath:function(t){this.setClosed(!0),this.join(this,t)}}},{_getBounds:function(e,t){var i=t.handle?"getHandleBounds":t.stroke?"getStrokeBounds":"getBounds";return St[i](this._segments,this._closed,this,e,t)},statics:{getBounds:function(e,t,i,r,l,d){var f=e[0];if(!f)return new Fe;var v=new Array(6),g=f._transformCoordinates(r,new Array(6)),x=g.slice(0,2),T=x.slice(),S=new Array(2);function D(U){U._transformCoordinates(r,v);for(var K=0;K<2;K++)ze._addBounds(g[K],g[K+4],v[K+2],v[K],K,d?d[K]:0,x,T,S);U=g,g=v,v=U}for(var F=1,H=e.length;F<H;F++)D(e[F]);return t&&D(f),new Fe(x[0],x[1],T[0]-x[0],T[1]-x[1])},getStrokeBounds:function(e,t,i,r,l){var d=i.getStyle(),f=d.hasStroke(),v=d.getStrokeWidth(),g=f&&i._getStrokeMatrix(r,l),x=f&&St._getStrokePadding(v,g),T=St.getBounds(e,t,i,r,l,x);if(!f)return T;var S=v/2,D=d.getStrokeJoin(),F=(v=d.getStrokeCap(),d.getMiterLimit()),H=new Fe(new it(x));function U(oe){T=T.include(oe)}function K(oe){T=T.unite(H.setCenter(oe._point.transform(r)))}function j(oe,le){le==="round"||oe.isSmooth()?K(oe):St._addBevelJoin(oe,le,S,F,r,g,U)}function Z(oe,le){le==="round"?K(oe):St._addSquareCap(oe,le,S,r,g,U)}var ee=e.length-(t?0:1);if(0<ee){for(var re=1;re<ee;re++)j(e[re],D);t?j(e[0],D):(Z(e[0],v),Z(e[e.length-1],v))}return T},_getStrokePadding:function(e,t){if(!t)return[e,e];var i=new Q(e,0).transform(t),r=new Q(0,e).transform(t),l=i.getAngleInRadians(),d=i.getLength();return e=r.getLength(),t=Math.sin(l),i=Math.cos(l),r=Math.tan(l),l=Math.atan2(e*r,d),r=Math.atan2(e,r*d),[Math.abs(d*Math.cos(l)*i+e*Math.sin(l)*t),Math.abs(e*Math.sin(r)*i+d*Math.cos(r)*t)]},_addBevelJoin:function(e,t,i,r,l,d,f,v){e=(g=e.getCurve()).getPrevious(),l=g.getPoint1().transform(l),e=e.getNormalAtTime(1).multiply(i).transform(d);var g=g.getNormalAtTime(0).multiply(i).transform(d);((d=e.getDirectedAngle(g))<0||180<=d)&&(e=e.negate(),g=g.negate()),v&&f(l),f(l.add(e)),t!=="miter"||(e=new _t(l.add(e),new Q(-e.y,e.x),!0).intersect(new _t(l.add(g),new Q(-g.y,g.x),!0),!0))&&l.getDistance(e)<=r*i&&f(e),f(l.add(g))},_addSquareCap:function(e,t,i,r,l,d,f){r=e._point.transform(r),l=(e=e.getLocation()).getNormal().multiply(e.getTime()===0?i:-i).transform(l),t==="square"&&(f&&(d(r.subtract(l)),d(r.add(l))),r=r.add(l.rotate(-90))),d(r.add(l)),d(r.subtract(l))},getHandleBounds:function(e,t,i,r,l){var d,f,v,g=i.getStyle();l.stroke&&g.hasStroke()&&(v=i._getStrokeMatrix(r,l),l=i=g.getStrokeWidth()/2,g.getStrokeJoin()==="miter"&&(l=i*g.getMiterLimit()),g.getStrokeCap()==="square"&&(l=Math.max(l,i*Math.SQRT2)),d=St._getStrokePadding(i,v),f=St._getStrokePadding(l,v));for(var x=new Array(6),T=1/0,S=-T,D=T,F=S,H=0,U=e.length;H<U;H++){e[H]._transformCoordinates(r,x);for(var K=0;K<6;K+=2){var j,Z=(j=K?d:f)?j[0]:0,ee=j?j[1]:0,re=x[K],oe=x[K+1];(j=re-Z)<T&&(T=j),S<(re+=Z)&&(S=re),(Z=oe-ee)<D&&(D=Z),F<(ee=oe+ee)&&(F=ee)}}return new Fe(T,D,S-T,F-D)}}});St.inject({statics:new function(){var e=.5522847498307936,t=[new Ke([-1,0],[0,e],[0,-e]),new Ke([0,-1],[-e,0],[e,0]),new Ke([1,0],[0,-e],[0,e]),new Ke([0,1],[e,0],[-e,0])];function i(l,d,f){var v=O.getNamed(f);return(f=new St(v&&(v.insert==1?dt.INSERT:v.insert==0?dt.NO_INSERT:null)))._add(l),f._closed=d,f.set(v,dt.INSERT)}function r(l,d,f){for(var v=new Array(4),g=0;g<4;g++){var x=t[g];v[g]=new Ke(x._point.multiply(d).add(l),x._handleIn.multiply(d),x._handleOut.multiply(d))}return i(v,!0,f)}return{Line:function(){var l=arguments;return i([new Ke(Q.readNamed(l,"from")),new Ke(Q.readNamed(l,"to"))],!1,l)},Circle:function(){var l=arguments,d=Q.readNamed(l,"center"),f=O.readNamed(l,"radius");return r(d,new it(f),l)},Rectangle:function(){var l,d,f=arguments,v=Fe.readNamed(f,"rectangle"),g=it.readNamed(f,"radius",0,{readNull:!0}),x=v.getBottomLeft(!0),T=v.getTopLeft(!0),S=v.getTopRight(!0),D=v.getBottomRight(!0);return i(!g||g.isZero()?[new Ke(x),new Ke(T),new Ke(S),new Ke(D)]:(l=(g=it.min(g,v.getSize(!0).divide(2))).width,d=g.height,v=l*e,g=d*e,[new Ke(x.add(l,0),null,[-v,0]),new Ke(x.subtract(0,d),[0,g]),new Ke(T.add(0,d),null,[0,-g]),new Ke(T.add(l,0),[-v,0],null),new Ke(S.subtract(l,0),null,[v,0]),new Ke(S.add(0,d),[0,-g],null),new Ke(D.subtract(0,d),null,[0,g]),new Ke(D.subtract(l,0),[v,0])]),!0,f)},RoundRectangle:"#Rectangle",Ellipse:function(){var l=arguments,d=Gt._readEllipse(l);return r(d.center,d.radius,l)},Oval:"#Ellipse",Arc:function(){var l=arguments,d=Q.readNamed(l,"from"),f=Q.readNamed(l,"through"),v=Q.readNamed(l,"to"),g=O.getNamed(l);return(l=new St(g&&g.insert==0&&dt.NO_INSERT)).moveTo(d),l.arcTo(f,v),l.set(g)},RegularPolygon:function(){for(var l=arguments,d=Q.readNamed(l,"center"),f=O.readNamed(l,"sides"),v=O.readNamed(l,"radius"),g=360/f,x=f%3==0,T=new Q(0,x?-v:v),S=x?-1:.5,D=new Array(f),F=0;F<f;F++)D[F]=new Ke(d.add(T.rotate((F+S)*g)));return i(D,!0,l)},Star:function(){for(var l=arguments,d=Q.readNamed(l,"center"),f=2*O.readNamed(l,"points"),v=O.readNamed(l,"radius1"),g=O.readNamed(l,"radius2"),x=360/f,T=new Q(0,-1),S=new Array(f),D=0;D<f;D++)S[D]=new Ke(d.add(T.rotate(x*D).multiply(D%2?g:v)));return i(S,!0,l)}}}});var Kt=Xt.extend({_class:"CompoundPath",_serializeFields:{children:[]},beans:!0,initialize:function(e){this._children=[],this._namedChildren={},this._initialize(e)||(typeof e=="string"?this.setPathData(e):this.addChildren(Array.isArray(e)?e:arguments))},insertChildren:function e(t,i){var r=i,l=r[0];l&&typeof l[0]=="number"&&(r=[r]);for(var d=i.length-1;0<=d;d--){var f=r[d];r!==i||f instanceof St||(r=O.slice(r)),Array.isArray(f)?r[d]=new St({segments:f,insert:!1}):f instanceof Kt&&(r.splice.apply(r,[d,1].concat(f.removeChildren())),f.remove())}return e.base.call(this,t,r)},reduce:function e(t){for(var i,r=this._children,l=r.length-1;0<=l;l--)(i=r[l].reduce(t)).isEmpty()&&i.remove();return r.length?e.base.call(this):((i=new St(dt.NO_INSERT)).copyAttributes(this),i.insertAbove(this),this.remove(),i)},isClosed:function(){for(var e=this._children,t=0,i=e.length;t<i;t++)if(!e[t]._closed)return!1;return!0},setClosed:function(e){for(var t=this._children,i=0,r=t.length;i<r;i++)t[i].setClosed(e)},getFirstSegment:function(){var e=this.getFirstChild();return e&&e.getFirstSegment()},getLastSegment:function(){var e=this.getLastChild();return e&&e.getLastSegment()},getCurves:function(){for(var e=this._children,t=[],i=0,r=e.length;i<r;i++)O.push(t,e[i].getCurves());return t},getFirstCurve:function(){var e=this.getFirstChild();return e&&e.getFirstCurve()},getLastCurve:function(){var e=this.getLastChild();return e&&e.getLastCurve()},getArea:function(){for(var e=this._children,t=0,i=0,r=e.length;i<r;i++)t+=e[i].getArea();return t},getLength:function(){for(var e=this._children,t=0,i=0,r=e.length;i<r;i++)t+=e[i].getLength();return t},getPathData:function(e,t){for(var i=this._children,r=[],l=0,d=i.length;l<d;l++){var f=i[l],v=f._matrix;r.push(f.getPathData(e&&!v.isIdentity()?e.appended(v):e,t))}return r.join("")},_hitTestChildren:function e(t,i,r){return e.base.call(this,t,i.class===St||i.type==="path"?i:O.set({},i,{fill:!1}),r)},_draw:function(e,t,i,r){var l=this._children;if(l.length){t=t.extend({dontStart:!0,dontFinish:!0}),e.beginPath();for(var d=0,f=l.length;d<f;d++)l[d].draw(e,t,r);t.clip||(this._setStyles(e,t,i),(i=this._style).hasFill()&&(e.fill(i.getFillRule()),e.shadowColor="rgba(0,0,0,0)"),i.hasStroke()&&e.stroke())}},_drawSelected:function(e,t,i){for(var r=this._children,l=0,d=r.length;l<d;l++){var f=r[l],v=f._matrix;i[f._id]||f._drawSelected(e,v.isIdentity()?t:t.appended(v))}}},new function(){function e(t,i){if(t=t._children,i&&!t.length)throw new Error("Use a moveTo() command first");return t[t.length-1]}return O.each(["lineTo","cubicCurveTo","quadraticCurveTo","curveTo","arcTo","lineBy","cubicCurveBy","quadraticCurveBy","curveBy","arcBy"],function(t){this[t]=function(){var i=e(this,!0);i[t].apply(i,arguments)}},{moveTo:function(){var t=e(this),i=t&&t.isEmpty()?t:new St(dt.NO_INSERT);i!==t&&this.addChild(i),i.moveTo.apply(i,arguments)},moveBy:function(){var t=(i=e(this,!0))&&i.getLastSegment(),i=Q.read(arguments);this.moveTo(t?i.add(t._point):i)},closePath:function(t){e(this,!0).closePath(t)}})},O.each(["reverse","flatten","simplify","smooth"],function(e){this[e]=function(t){for(var i,r=this._children,l=0,d=r.length;l<d;l++)i=r[l][e](t)||i;return i}},{}));Xt.inject(new function(){var e=Math.min,t=Math.max,i=Math.abs,r={unite:{1:!0,2:!0},intersect:{2:!0},subtract:{1:!0},exclude:{1:!0,"-1":!0}};function l(j){return j._children||[j]}function d(j,Z){var ee=j.clone(!1).reduce({simplify:!0}).transform(null,!0,!0);if(Z){for(var re=l(ee),oe=0,le=re.length;oe<le;oe++)(j=re[oe])._closed||j.isEmpty()||(j.closePath(1e-12),j.getFirstSegment().setHandleIn(0,0),j.getLastSegment().setHandleOut(0,0));ee=ee.resolveCrossings().reorient(ee.getFillRule()==="nonzero",!0)}return ee}function f(j,Z,ee,re,oe){var le=new Kt(dt.NO_INSERT);return le.addChildren(j,!0),le=le.reduce({simplify:Z}),oe&&oe.insert==0||le.insertAbove(re&&ee.isSibling(re)&&ee.getIndex()<re.getIndex()?re:ee),le.copyAttributes(ee,!0),le}function v(j){return j.hasOverlap()||j.isCrossing()}function g(j,Z,ee,re){if(re&&(re.trace==0||re.stroke)&&/^(subtract|intersect)$/.test(ee))return x(j,Z,ee);var oe=d(j,!0),le=Z&&j!==Z&&d(Z,!0),xe=r[ee];xe[ee]=!0,le&&(xe.subtract||xe.exclude)^le.isClockwise()^oe.isClockwise()&&le.reverse();var Ee,Te=F(Jt.expand(oe.getIntersections(le,v))),Me=l(oe),be=(ee=le&&l(le),[]),se=[];function ue(b){for(var C=0,P=b.length;C<P;C++){var M=b[C];O.push(be,M._segments),O.push(se,M.getCurves()),M._overlapsOnly=!0}}function We(b){for(var C=[],P=0,M=b&&b.length;P<M;P++)C.push(se[b[P]]);return C}if(Te.length){ue(Me),ee&&ue(ee);for(var Ie=new Array(se.length),Ye=0,$e=se.length;Ye<$e;Ye++)Ie[Ye]=se[Ye].getValues();var lt=ht.findCurveBoundsCollisions(Ie,Ie,0,!0),vt={};for(Ye=0;Ye<se.length;Ye++){var L=se[Ye],s=L._path._id;(vt[s]=vt[s]||{})[L.getIndex()]={hor:We(lt[Ye].hor),ver:We(lt[Ye].ver)}}for(Ye=0,$e=Te.length;Ye<$e;Ye++)U(Te[Ye]._segment,oe,le,vt,xe);for(Ye=0,$e=be.length;Ye<$e;Ye++){var c=be[Ye],p=c._intersection;c._winding||U(c,oe,le,vt,xe),p&&p._overlap||(c._path._overlapsOnly=!1)}Ee=K(be,xe)}else Ee=D(ee?Me.concat(ee):Me.slice(),function(b){return!!xe[b]});return f(Ee,!0,j,Z,re)}function x(j,Z,ee){var re=d(j),oe=d(Z),le=re.getIntersections(oe,v),xe=ee==="subtract",Ee=ee==="divide",Te={},Me=[];function be(We){return!Te[We._id]&&(Ee||oe.contains(We.getPointAt(We.getLength()/2))^xe)&&(Me.unshift(We),Te[We._id]=!0)}for(var se=le.length-1;0<=se;se--){var ue=le[se].split();ue&&(be(ue)&&ue.getFirstSegment().setHandleIn(0,0),re.getLastSegment().setHandleOut(0,0))}return be(re),f(Me,!1,j,Z)}function T(j,Z){for(var ee=j;ee;){if(ee===Z)return;ee=ee._previous}for(;j._next&&j._next!==Z;)j=j._next;if(!j._next){for(;Z._previous;)Z=Z._previous;(j._next=Z)._previous=j}}function S(j){for(var Z=j.length-1;0<=Z;Z--)j[Z].clearHandles()}function D(j,Z,ee){var re=j&&j.length;if(re){var oe=O.each(j,function(vt,L){this[vt._id]={container:null,winding:vt.isClockwise()?1:-1,index:L}},{}),le=j.slice().sort(function(vt,L){return i(L.getArea())-i(vt.getArea())}),xe=le[0],Ee=ht.findItemBoundsCollisions(le,null,Ve.GEOMETRIC_EPSILON);ee==null&&(ee=xe.isClockwise());for(var Te=0;Te<re;Te++){var Me,be=le[Te],se=oe[be._id],ue=0,We=Ee[Te];if(We){for(var Ie=null,Ye=We.length-1;0<=Ye;Ye--)if(We[Ye]<Te){Ie=Ie||be.getInteriorPoint();var $e=le[We[Ye]];if($e.contains(Ie)){var lt=oe[$e._id];ue=lt.winding,se.winding+=ue,se.container=lt.exclude?lt.container:$e;break}}}Z(se.winding)===Z(ue)?(se.exclude=!0,j[se.index]=null):(Me=se.container,be.setClockwise(Me?!Me.isClockwise():ee))}}return j}function F(j,Z,ee){var re,oe,le,xe=Z&&[],Ee=!1,Te=ee||[],Me=ee&&{};function be(p){return p._path._id+"."+p._segment1._index}for(var se=(ee&&ee.length)-1;0<=se;se--)(ue=ee[se])._path&&(Me[be(ue)]=!0);for(se=j.length-1;0<=se;se--){var ue,We=(s=j[se])._time,Ie=We,Ye=Z&&!Z(s);if((ue=s._curve)&&(ue!==oe?(Ee=!ue.hasHandles()||Me&&Me[be(ue)],re=[],le=null,oe=ue):1e-8<=le&&(We/=le)),Ye)re&&re.push(s);else{if(Z&&xe.unshift(s),le=Ie,We<1e-8)$e=ue._segment1;else if(.99999999<We)$e=ue._segment2;else{Ie=ue.divideAtTime(We,!0),Ee&&Te.push(ue,Ie);for(var $e=Ie._segment1,lt=re.length-1;0<=lt;lt--){var vt=re[lt];vt._time=(vt._time-We)/(1-We)}}s._setSegment($e);var L=$e._intersection,s=s._intersection;if(L){T(L,s);for(var c=L;c;)T(c._intersection,L),c=c._next}else $e._intersection=s}}return ee||S(Te),xe||j}function H(j,Z,ee,re,oe){var le,xe=Array.isArray(Z)?Z:Z[ee?"hor":"ver"],Ee=ee?1:0,Te=1^Ee,Me=[j.x,j.y],be=Me[Ee],se=Me[Te],ue=1e-6,We=be-1e-9,Ie=be+1e-9,Ye=0,$e=0,lt=0,vt=0,L=!1,s=!1,c=1,p=[];function b(ne){var ie=ne[Te+0],ve=ne[Te+2],de=ne[Te+4],te=ne[Te+6];if(se<=t(ie,ve,de,te)&&se>=e(ie,ve,de,te)){ie=ne[Ee+0],ve=ne[Ee+2],de=ne[Ee+4],te=ne[Ee+6];for(var he,ce=We>t(ie,ve,de,te)||Ie<e(ie,ve,de,te)?[ne]:ze.getMonoCurves(ne,ee),Re=0,Oe=ce.length;Re<Oe;Re++)if(he=function(Pe){var Ge=Pe[Te+0],He=Pe[Te+6];if(!(se<e(Ge,He)||se>t(Ge,He))){var qe=Pe[Ee+0],De=Pe[Ee+2],Qe=Pe[Ee+4],rt=Pe[Ee+6];if(Ge!==He){var ot=se===Ge?0:se!==He&&!(We>t(qe,De,Qe,rt)||Ie<e(qe,De,Qe,rt))&&0<ze.solveCubic(Pe,Te,se,p,0,1)?p[0]:1,et=ot===0?qe:ot===1?rt:ze.getPoint(Pe,ot)[ee?"y":"x"];return De=He<Ge?1:-1,Qe=X[Te]>X[Te+6]?1:-1,He=X[Ee+6],se!==Ge?(et<We?lt+=De:Ie<et?vt+=De:L=!0,be-ue<et&&et<be+ue&&(c/=2)):(De!=Qe?qe<We?lt+=De:Ie<qe&&(vt+=De):qe!=He&&(He<Ie&&Ie<et?(vt+=De,L=!0):We<He&&et<We&&(lt+=De,L=!0)),c/=4),X=Pe,!oe&&We<et&&et<Ie&&ze.getTangent(Pe,ot)[ee?"x":"y"]===0&&H(j,Z,!ee,re,!0)}(qe<Ie&&We<rt||rt<Ie&&We<qe)&&(L=!0)}}(ce[Re]))return he}}for(var C=0,P=xe.length;C<P;C++){var M=xe[C],z=M._path,J=M.getValues();if(!(C&&xe[C-1]._path===z||(X=null,z._closed||(le=ze.getValues(z.getLastCurve().getSegment2(),M.getSegment1(),null,!re))[Te]!==le[Te+6]&&(X=le),X)))for(var X=J,Y=z.getLastCurve();Y&&Y!==M;){var pe=Y.getValues();if(pe[Te]!==pe[Te+6]){X=pe;break}Y=Y.getPrevious()}if(J=b(J))return J;if(C+1===P||xe[C+1]._path!==z){if(le&&(J=b(le)))return J;Ye+=lt=!L||lt||vt?lt:vt=z.isClockwise(re)^ee?1:-1,$e+=vt,lt=vt=0,L=L&&!(s=!0),le=null}}return Ye=i(Ye),$e=i($e),{winding:t(Ye,$e),windingL:Ye,windingR:$e,quality:c,onPath:s}}function U(j,Z,ee,re,oe){var le=[],xe=j,Ee=0;do;while((Ye=j.getCurve())&&(se=Ye.getLength(),le.push({segment:j,curve:Ye,length:se}),Ee+=se),(j=j.getNext())&&!j._intersection&&j!==xe);for(var Te=[.5,.25,.75],Me={winding:0,quality:-1},be=0;be<Te.length&&Me.quality<.5;be++)for(var se=Ee*Te[be],ue=0,We=le.length;ue<We;ue++){var Ie=(s=le[ue]).length;if(se<=Ie){var Ye,$e=(Ye=s.curve)._path,lt=(c=$e._parent)instanceof Kt?c:$e,vt=Ve.clamp(Ye.getTimeAt(se),.001,.999),L=Ye.getPointAtTime(vt),s=i(Ye.getTangentAtTime(vt).y)<Math.SQRT1_2,c=null;if(oe.subtract&&ee&&(vt=(lt===Z?ee:Z)._getWinding(L,s,!0),lt===Z&&vt.winding||lt===ee&&!vt.winding)){if(vt.quality<1)continue;c={winding:0,quality:1}}(c=c||H(L,re[$e._id][Ye.getIndex()],s,!0)).quality>Me.quality&&(Me=c);break}se-=Ie}for(ue=le.length-1;0<=ue;ue--)le[ue].segment._winding=Me}function K(j,Z){var ee,re=[];function oe(M){return!(!M||M._visited||Z&&(!Z[(M=M._winding||{}).winding]||Z.unite&&M.winding===2&&M.windingL&&M.windingR))}function le(M){if(M){for(var z=0,J=ee.length;z<J;z++)if(M===ee[z])return!0}return!1}function xe(M){for(var z=M._segments,J=0,X=z.length;J<X;J++)z[J]._visited=!0}j.sort(function(M,z){var J=M._intersection,X=z._intersection,Y=!(!J||!J._overlap),pe=!(!X||!X._overlap),ne=M._path,ie=z._path;return Y^pe?Y?1:-1:!J^!X?J?1:-1:ne!==ie?ne._id-ie._id:M._index-z._index});for(var Ee=0,Te=j.length;Ee<Te;Ee++){var Me,be,se,ue,We,Ie=j[Ee],Ye=oe(Ie),$e=null,lt=!1,vt=!0,L=[];for(Ye&&Ie._path._overlapsOnly&&(ue=Ie._path,We=Ie._intersection._segment._path,ue.compare(We)&&(ue.getArea()&&re.push(ue.clone(!1)),xe(ue),xe(We),Ye=!1));Ye;){var s=!$e,c=function(M,z){var J=M._intersection,X=J,Y=[];function pe(ne,ie){for(;ne&&ne!==ie;){var ve,de=ne._segment,te=de&&de._path;te&&(te=(ve=de.getNext()||te.getFirstSegment())._intersection,de!==M&&(le(de)||le(ve)||ve&&oe(de)&&(oe(ve)||te&&oe(te._segment)))&&Y.push(de),z&&ee.push(de)),ne=ne._next}}if(z&&(ee=[M]),J){for(pe(J);J&&J._previous;)J=J._previous;pe(J,X)}return Y}(Ie,s),p=c.shift(),b=!(lt=!s&&(le(Ie)||le(p)))&&p;if(s&&($e=new St(dt.NO_INSERT),Me=null),lt){(Ie.isFirst()||Ie.isLast())&&(vt=Ie._path._closed),Ie._visited=!0;break}if(b&&Me&&(L.push(Me),Me=null),Me||(b&&c.push(Ie),Me={start:$e._segments.length,crossings:c,visited:be=[],handleIn:se}),!oe(Ie=b?p:Ie)){$e.removeSegments(Me.start);for(var C=0,P=be.length;C<P;C++)be[C]._visited=!1;for(be.length=0;(Ie=Me&&Me.crossings.shift())&&Ie._path||(Ie=null,(Me=L.pop())&&(be=Me.visited,se=Me.handleIn)),Me&&!oe(Ie););if(!Ie)break}p=Ie.getNext(),$e.add(new Ke(Ie._point,se,p&&Ie._handleOut)),Ie._visited=!0,be.push(Ie),Ie=p||Ie._path.getFirstSegment(),se=p&&p._handleIn}lt&&(vt&&($e.getFirstSegment().setHandleIn(se),$e.setClosed(vt)),$e.getArea()!==0&&re.push($e))}return re}return{_getWinding:function(j,Z,ee){return H(j,this.getCurves(),Z,ee)},unite:function(j,Z){return g(this,j,"unite",Z)},intersect:function(j,Z){return g(this,j,"intersect",Z)},subtract:function(j,Z){return g(this,j,"subtract",Z)},exclude:function(j,Z){return g(this,j,"exclude",Z)},divide:function(j,Z){return Z&&(Z.trace==0||Z.stroke)?x(this,j,"divide"):f([this.subtract(j,Z),this.intersect(j,Z)],!0,this,j,Z)},resolveCrossings:function(){var j=this._children,Z=j||[this];function ee(Ie,Ye){return(Ie=Ie&&Ie._intersection)&&Ie._overlap&&Ie._path===Ye}var re,oe=!1,le=!1,xe=this.getIntersections(null,function(Ie){return Ie.hasOverlap()?oe=!0:Ie.isCrossing()&&(le=!0)}),Ee=oe&&le&&[];if(xe=Jt.expand(xe),oe)for(var Te=F(xe,function(Ie){return Ie.hasOverlap()},Ee),Me=Te.length-1;0<=Me;Me--){var be=(We=Te[Me])._path,se=We._segment,ue=se.getPrevious(),We=se.getNext();ee(ue,be)&&ee(We,be)&&(se.remove(),ue._handleOut._set(0,0),We._handleIn._set(0,0),ue===se||ue.getCurve().hasLength()||(We._handleIn.set(ue._handleIn),ue.remove()))}return le&&(F(xe,oe&&function(Ie){var Ye=Ie.getCurve(),$e=Ie.getSegment(),lt=(Ie=(lt=Ie._intersection)._curve,lt._segment);if(Ye&&Ie&&Ye._path&&Ie._path)return!0;$e&&($e._intersection=null),lt&&(lt._intersection=null)},Ee),Ee&&S(Ee),Z=K(O.each(Z,function(Ie){O.push(this,Ie._segments)},[]))),1<(Ee=Z.length)&&j?(Z!==j&&this.setChildren(Z),re=this):Ee!==1||j||(Z[0]!==this&&this.setSegments(Z[0].removeSegments()),re=this),re||((re=new Kt(dt.NO_INSERT)).addChildren(Z),(re=re.reduce()).copyAttributes(this),this.replaceWith(re)),re},reorient:function(j,Z){var ee=this._children;return ee&&ee.length?this.setChildren(D(this.removeChildren(),function(re){return!!(j?re:1&re)},Z)):Z!==k&&this.setClockwise(Z),this},getInteriorPoint:function(){var j=this.getBounds().getCenter(!0);if(!this.contains(j)){for(var Z=this.getCurves(),ee=j.y,re=[],oe=[],le=0,xe=Z.length;le<xe;le++){var Ee=Z[le].getValues(),Te=Ee[1],Me=Ee[3],be=Ee[5],se=Ee[7];if(ee>=e(Te,Me,be,se)&&ee<=t(Te,Me,be,se))for(var ue=ze.getMonoCurves(Ee),We=0,Ie=ue.length;We<Ie;We++){var Ye=ue[We],$e=Ye[1],lt=Ye[7];$e!==lt&&($e<=ee&&ee<=lt||lt<=ee&&ee<=$e)&&(Ye=ee===$e?Ye[0]:ee===lt?Ye[6]:ze.solveCubic(Ye,1,ee,oe,0,1)===1?ze.getPoint(Ye,oe[0]).x:(Ye[0]+Ye[6])/2,re.push(Ye))}}1<re.length&&(re.sort(function(vt,L){return vt-L}),j.x=(re[0]+re[1])/2)}return j}}});var Xe=O.extend({_class:"PathFlattener",initialize:function(e,t,i,r,l){var d,f=[],v=[],g=0,x=1/(i||32),T=e._segments,S=T[0];function D(U,K){K=ze.getValues(U,K,l),f.push(K),function j(Z,ee,re,oe){var le,xe;!(x<oe-re)||r&&ze.isStraight(Z)||ze.isFlatEnough(Z,t||.25)?(le=Z[6]-Z[0],xe=Z[7]-Z[1],0<(xe=Math.sqrt(le*le+xe*xe))&&(g+=xe,v.push({offset:g,curve:Z,index:ee,time:oe}))):(xe=ze.subdivide(Z,.5),Z=(re+oe)/2,j(xe[0],ee,re,Z),j(xe[1],ee,Z,oe))}(K,U._index,0,1)}for(var F=1,H=T.length;F<H;F++)D(S,d=T[F]),S=d;e._closed&&D(d||S,T[0]),this.curves=f,this.parts=v,this.length=g,this.index=0},_get:function(e){for(var t,i=this.parts,r=i.length,l=this.index;(t=l)&&!(i[--l].offset<e););for(;t<r;t++){var d=i[t];if(d.offset>=e){var f=(v=i[(this.index=t)-1])&&v.index===d.index?v.time:0,v=v?v.offset:0;return{index:d.index,time:f+(d.time-f)*(e-v)/(d.offset-v)}}}return{index:i[r-1].index,time:1}},drawPart:function(e,t,i){for(var r=this._get(t),l=this._get(i),d=r.index,f=l.index;d<=f;d++){var v=ze.getPart(this.curves[d],d===r.index?r.time:0,d===l.index?l.time:1);d===r.index&&e.moveTo(v[0],v[1]),e.bezierCurveTo.apply(e,v.slice(2))}}},O.each(ze._evaluateMethods,function(e){this[e+"At"]=function(t){return t=this._get(t),ze[e](this.curves[t.index],t.time)}},{})),Ot=O.extend({initialize:function(e){for(var t,i=this.points=[],r=e._segments,l=(e=e._closed,0),d=r.length;l<d;l++){var f=r[l].point;t&&t.equals(f)||i.push(t=f.clone())}e&&(i.unshift(i[i.length-1]),i.push(i[1])),this.closed=e},fit:function(e){var t=this.points,i=t.length,r=null;return 0<i&&(r=[new Ke(t[0])],1<i&&(this.fitCubic(r,e,0,i-1,t[1].subtract(t[0]),t[i-2].subtract(t[i-1])),this.closed&&(r.shift(),r.pop()))),r},fitCubic:function(e,t,i,r,l,d){var f=this.points;if(r-i!=1){for(var v,g=this.chordLengthParameterize(i,r),x=Math.max(t,t*t),T=!0,S=0;S<=4;S++){var D=this.generateBezier(i,r,g,l,d),F=this.findMaxError(i,r,D,g);if(F.error<t&&T)return void this.addCurve(e,D);if(v=F.index,F.error>=x)break;T=this.reparameterize(i,r,g,D),x=F.error}var H=f[v-1].subtract(f[v+1]);this.fitCubic(e,t,i,v,l,H),this.fitCubic(e,t,v,r,H.negate(),d)}else{var U=f[i];H=f[r],f=U.getDistance(H)/3,this.addCurve(e,[U,U.add(l.normalize(f)),H.add(d.normalize(f)),H])}},addCurve:function(e,t){e[e.length-1].setHandleOut(t[1].subtract(t[0])),e.push(new Ke(t[3],t[2].subtract(t[3])))},generateBezier:function(e,t,i,r,l){for(var d=Math.abs,f=this.points,v=f[e],g=f[t],x=[[0,0],[0,0]],T=[0,0],S=0,D=t-e+1;S<D;S++){var F=(K=1-(Z=i[S]))*K*K,H=(j=3*Z*K)*K,U=j*Z,K=Z*Z*Z,j=r.normalize(H),Z=l.normalize(U);K=f[e+S].subtract(v.multiply(F+H)).subtract(g.multiply(U+K)),x[0][0]+=j.dot(j),x[0][1]+=j.dot(Z),x[1][0]=x[0][1],x[1][1]+=Z.dot(Z),T[0]+=j.dot(K),T[1]+=Z.dot(K)}var ee,re;1e-12<d(t=x[0][0]*x[1][1]-x[1][0]*x[0][1])?(re=x[0][0]*T[1]-x[1][0]*T[0],ee=(T[0]*x[1][1]-T[1]*x[0][1])/t,re/=t):(t=x[0][0]+x[0][1],xe=x[1][0]+x[1][1],ee=re=1e-12<d(t)?T[0]/t:1e-12<d(xe)?T[1]/xe:0);var oe,le,xe=1e-12*(d=g.getDistance(v));return ee<xe||re<xe?ee=re=d/3:(xe=g.subtract(v),oe=r.normalize(ee),le=l.normalize(re),oe.dot(xe)-le.dot(xe)>d*d&&(ee=re=d/3,oe=le=null)),[v,v.add(oe||r.normalize(ee)),g.add(le||l.normalize(re)),g]},reparameterize:function(e,t,i,r){for(var l=e;l<=t;l++)i[l-e]=this.findRoot(r,this.points[l],i[l-e]);l=1;for(var d=i.length;l<d;l++)if(i[l]<=i[l-1])return!1;return!0},findRoot:function(e,t,i){for(var r=[],l=[],d=0;d<=2;d++)r[d]=e[d+1].subtract(e[d]).multiply(3);for(d=0;d<=1;d++)l[d]=r[d+1].subtract(r[d]).multiply(2);var f=this.evaluate(3,e,i),v=this.evaluate(2,r,i),g=this.evaluate(1,l,i);return t=f.subtract(t),g=v.dot(v)+t.dot(g),Ve.isMachineZero(g)?i:i-t.dot(v)/g},evaluate:function(e,t,i){for(var r=t.slice(),l=1;l<=e;l++)for(var d=0;d<=e-l;d++)r[d]=r[d].multiply(1-i).add(r[d+1].multiply(i));return r[0]},chordLengthParameterize:function(e,t){for(var i=[0],r=e+1;r<=t;r++)i[r-e]=i[r-e-1]+this.points[r].getDistance(this.points[r-1]);r=1;for(var l=t-e;r<=l;r++)i[r]/=i[l];return i},findMaxError:function(e,t,i,r){for(var l=Math.floor((t-e+1)/2),d=0,f=e+1;f<t;f++){var v;d<=(v=(v=this.evaluate(3,i,r[f-e]).subtract(this.points[f])).x*v.x+v.y*v.y)&&(d=v,l=f)}return{error:d,index:l}}}),It=dt.extend({_class:"TextItem",_applyMatrix:!1,_canApplyMatrix:!1,_serializeFields:{content:null},_boundsOptions:{stroke:!1,handle:!1},initialize:function(e){this._content="",this._lines=[];var t=e&&O.isPlainObject(e)&&e.x===k&&e.y===k;this._initialize(t&&e,!t&&Q.read(arguments))},_equals:function(e){return this._content===e._content},copyContent:function(e){this.setContent(e._content)},getContent:function(){return this._content},setContent:function(e){this._content=""+e,this._lines=this._content.split(/\r\n|\n|\r/gm),this._changed(521)},isEmpty:function(){return!this._content},getCharacterStyle:"#getStyle",setCharacterStyle:"#setStyle",getParagraphStyle:"#getStyle",setParagraphStyle:"#setStyle"}),Et=It.extend({_class:"PointText",initialize:function(){It.apply(this,arguments)},getPoint:function(){var e=this._matrix.getTranslation();return new Ct(e.x,e.y,this,"setPoint")},setPoint:function(){var e=Q.read(arguments);this.translate(e.subtract(this._matrix.getTranslation()))},_draw:function(e,t,i){if(this._content){this._setStyles(e,t,i);var r=this._lines,l=(i=this._style).hasFill(),d=i.hasStroke(),f=i.getLeading(),v=e.shadowColor;e.font=i.getFontStyle(),e.textAlign=i.getJustification();for(var g=0,x=r.length;g<x;g++){e.shadowColor=v;var T=r[g];l&&(e.fillText(T,0,0),e.shadowColor="rgba(0,0,0,0)"),d&&e.strokeText(T,0,0),e.translate(0,f)}}},_getBounds:function(e,t){var i=this._style,r=(f=this._lines).length,l=i.getJustification(),d=i.getLeading(),f=(i=this.getView().getTextWidth(i.getFontStyle(),f),0);return l!=="left"&&(f-=i/(l==="center"?2:1)),d=new Fe(f,r?-.75*d:0,i,r*d),e?e._transformBounds(d,d):d}}),At=O.extend(new function(){var e,t={gray:["gray"],rgb:["red","green","blue"],hsb:["hue","saturation","brightness"],hsl:["hue","saturation","lightness"],gradient:["gradient","origin","destination","highlight"]},i={},r={transparent:[0,0,0,0]},l=[[0,3,1],[2,0,1],[1,0,3],[1,2,0],[3,1,0],[0,1,2]],d={"rgb-hsb":function(f,v,g){var x=Math.max(f,v,g),T=x-Math.min(f,v,g);return[T==0?0:60*(x==f?(v-g)/T+(v<g?6:0):x==v?(g-f)/T+2:(f-v)/T+4),x===0?0:T/x,x]},"hsb-rgb":function(f,v,g){f=(f/60%6+6)%6;var x=Math.floor(f);return[(f=[g,g*(1-v),g*(1-v*(f-=x)),g*(1-v*(1-f))])[(x=l[x])[0]],f[x[1]],f[x[2]]]},"rgb-hsl":function(f,v,g){var x=Math.max(f,v,g),T=Math.min(f,v,g),S=x-T,D=S==0,F=(x+T)/2;return[D?0:60*(x==f?(v-g)/S+(v<g?6:0):x==v?(g-f)/S+2:(f-v)/S+4),D?0:F<.5?S/(x+T):S/(2-x-T),F]},"hsl-rgb":function(f,v,g){if(v===0)return[g,g,g];for(var x=[(f=(f/360%1+1)%1)+1/3,f,f-1/3],T=g<.5?g*(1+v):g+v-g*v,S=2*g-T,D=[],F=0;F<3;F++){var H=x[F];H<0&&(H+=1),1<H&&--H,D[F]=6*H<1?S+6*(T-S)*H:2*H<1?T:3*H<2?S+(T-S)*(2/3-H)*6:S}return D},"rgb-gray":function(f,v,g){return[.2989*f+.587*v+.114*g]},"gray-rgb":function(f){return[f,f,f]},"gray-hsb":function(f){return[0,0,f]},"gray-hsl":function(f){return[0,0,f]},"gradient-rgb":function(){return[]},"rgb-gradient":function(){return[]}};return O.each(t,function(f,v){i[v]=[],O.each(f,function(g,x){var T=O.capitalize(g),S=/^(hue|saturation)$/.test(g),D=i[v][x]=v==="gradient"?g==="gradient"?function(F){var H=this._components[0];return H!==(F=E.read(Array.isArray(F)?F:arguments,0,{readNull:!0}))&&(H&&H._removeOwner(this),F&&F._addOwner(this)),F}:function(){return Q.read(arguments,0,{readNull:g==="highlight",clone:!0})}:function(F){return F==null||isNaN(F)?0:+F};this["get"+T]=function(){return(this._type===v||S&&/^hs[bl]$/.test(this._type)?this._components:this._convert(v))[x]},this["set"+T]=function(F){this._type===v||S&&/^hs[bl]$/.test(this._type)||(this._components=this._convert(v),this._properties=t[v],this._type=v),this._components[x]=D.call(this,F),this._changed()}},this)},{_class:"Color",_readIndex:!0,initialize:function f(v){var g,x,T,S=arguments,D=this.__read,F=0,H=(v=Array.isArray(v)?(S=v)[0]:v)!=null&&typeof v;if(H==="string"&&v in t&&(U=v,v=S[1],Array.isArray(v)?(g=v,j=S[2]):(D&&(F=1),S=O.slice(S,1),H=typeof v)),!g){if(x=H==="number"?S:H==="object"&&v.length!=null?v:null){var U=U||(3<=x.length?"rgb":"gray"),K=t[U].length,j=x[K];D&&(F+=x===arguments?K+(j!=null?1:0):1),x.length>K&&(x=O.slice(x,0,K))}else if(H==="string")K=function(xe){var Ee=xe.match(/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})?$/i)||xe.match(/^#([\da-f])([\da-f])([\da-f])([\da-f])?$/i),Te="rgb";if(Ee)for(var Me=Ee[4]?4:3,be=new Array(Me),se=0;se<Me;se++){var ue=Ee[se+1];be[se]=parseInt(ue.length==1?ue+ue:ue,16)/255}else if(Ee=xe.match(/^(rgb|hsl)a?\((.*)\)$/)){Te=Ee[1],be=Ee[2].trim().split(/[,\s]+/g);for(var We=Te==="hsl",Ie=(se=0,Math.min(be.length,4));se<Ie;se++){var Ye,$e=be[se];ue=parseFloat($e),We?se===0?(Ye=$e.match(/([a-z]*)$/)[1],ue*={turn:360,rad:180/Math.PI,grad:.9}[Ye]||1):se<3&&(ue/=100):se<3&&(ue/=/%$/.test($e)?100:255),be[se]=ue}}else{var lt,vt=r[xe];be=(vt=vt||(G?(e||((e=Ue.getContext(1,1,{willReadFrequently:!0})).globalCompositeOperation="copy"),e.fillStyle="rgba(0,0,0,0)",e.fillStyle=xe,e.fillRect(0,0,1,1),lt=e.getImageData(0,0,1,1).data,r[xe]=[lt[0]/255,lt[1]/255,lt[2]/255]):[0,0,0])).slice()}return[Te,be]}(v),U=K[0],(g=K[1]).length===4&&(j=g[3],g.length--);else if(H==="object")if(v.constructor===f){if(U=v._type,g=v._components.slice(),j=v._alpha,U==="gradient")for(var Z=1,ee=g.length;Z<ee;Z++){var re=g[Z];re&&(g[Z]=re.clone())}}else if(v.constructor===E)U="gradient",x=S;else{var oe=t[U="hue"in v?"lightness"in v?"hsl":"hsb":"gradient"in v||"stops"in v||"radial"in v?"gradient":"gray"in v?"gray":"rgb"],le=i[U];for(this._components=g=[],Z=0,ee=oe.length;Z<ee;Z++)(T=v[oe[Z]])==null&&!Z&&U==="gradient"&&"stops"in v&&(T={stops:v.stops,radial:v.radial}),(T=le[Z].call(this,T))!=null&&(g[Z]=T);j=v.alpha}D&&U&&(F=1)}if(this._type=U||"rgb",!g)for(this._components=g=[],Z=0,ee=(le=i[this._type]).length;Z<ee;Z++)(T=le[Z].call(this,x&&x[Z]))!=null&&(g[Z]=T);return this._components=g,this._properties=t[this._type],this._alpha=j,D&&(this.__read=F),this},set:"#initialize",_serialize:function(f,v){var g=this.getComponents();return O.serialize(/^(gray|rgb)$/.test(this._type)?g:[this._type].concat(g),f,!0,v)},_changed:function(){this._canvasStyle=null,this._owner&&(this._setter?this._owner[this._setter](this):this._owner._changed(129))},_convert:function(f){var v;return this._type===f?this._components.slice():(v=d[this._type+"-"+f])?v.apply(this,this._components):d["rgb-"+f].apply(this,d[this._type+"-rgb"].apply(this,this._components))},convert:function(f){return new At(f,this._convert(f),this._alpha)},getType:function(){return this._type},setType:function(f){this._components=this._convert(f),this._properties=t[f],this._type=f},getComponents:function(){var f=this._components.slice();return this._alpha!=null&&f.push(this._alpha),f},getAlpha:function(){return this._alpha!=null?this._alpha:1},setAlpha:function(f){this._alpha=f==null?null:Math.min(Math.max(f,0),1),this._changed()},hasAlpha:function(){return this._alpha!=null},equals:function(f){var v=O.isPlainValue(f,!0)?At.read(arguments):f;return v===this||v&&this._class===v._class&&this._type===v._type&&this.getAlpha()===v.getAlpha()&&O.equals(this._components,v._components)||!1},toString:function(){for(var f=this._properties,v=[],g=this._type==="gradient",x=tt.instance,T=0,S=f.length;T<S;T++){var D=this._components[T];D!=null&&v.push(f[T]+": "+(g?D:x.number(D)))}return this._alpha!=null&&v.push("alpha: "+x.number(this._alpha)),"{ "+v.join(", ")+" }"},toCSS:function(f){var v=this._convert("rgb"),g=f||this._alpha==null?1:this._alpha;function x(T){return Math.round(255*(T<0?0:1<T?1:T))}return v=[x(v[0]),x(v[1]),x(v[2])],g<1&&v.push(g<0?0:g),f?"#"+((1<<24)+(v[0]<<16)+(v[1]<<8)+v[2]).toString(16).slice(1):(v.length==4?"rgba(":"rgb(")+v.join(",")+")"},toCanvasStyle:function(f,v){if(this._canvasStyle)return this._canvasStyle;if(this._type!=="gradient")return this._canvasStyle=this.toCSS();var g,x=(F=this._components)[0],T=x._stops,S=F[1],D=F[2],F=F[3];(v=v&&v.inverted())&&(S=v._transformPoint(S),D=v._transformPoint(D),F=F&&v._transformPoint(F)),g=x._radial?(v=D.getDistance(S),!F||(x=F.subtract(S)).getLength()>v&&(F=S.add(x.normalize(v-.1))),f.createRadialGradient((F=F||S).x,F.y,0,S.x,S.y,v)):f.createLinearGradient(S.x,S.y,D.x,D.y);for(var H=0,U=T.length;H<U;H++){var K=T[H],j=K._offset;g.addColorStop(j??H/(U-1),K._color.toCanvasStyle())}return this._canvasStyle=g},transform:function(f){if(this._type==="gradient"){for(var v=this._components,g=1,x=v.length;g<x;g++){var T=v[g];f._transformPoint(T,T,!0)}this._changed()}},statics:{_types:t,random:function(){var f=Math.random;return new At(f(),f(),f())},_setOwner:function(f,v,g){return f&&!(f=f._owner&&v&&f._owner!==v?f.clone():f)._owner^!v&&(f._owner=v||null,f._setter=g||null),f}}})},new function(){return O.each({add:function(e,t){return e+t},subtract:function(e,t){return e-t},multiply:function(e,t){return e*t},divide:function(e,t){return e/t}},function(e,t){this[t]=function(i){i=At.read(arguments);for(var r=this._type,l=this._components,d=i._convert(r),f=0,v=l.length;f<v;f++)d[f]=e(l[f],d[f]);return new At(r,d,this._alpha!=null?e(this._alpha,i.getAlpha()):null)}},{})}),E=O.extend({_class:"Gradient",initialize:function(e,t){this._id=Tt.get(),e&&O.isPlainObject(e)&&(this.set(e),e=t=null),this._stops==null&&this.setStops(e||["white","black"]),this._radial==null&&this.setRadial(typeof t=="string"&&t==="radial"||t||!1)},_serialize:function(e,t){return t.add(this,function(){return O.serialize([this._stops,this._radial],e,!0,t)})},_changed:function(){for(var e=0,t=this._owners&&this._owners.length;e<t;e++)this._owners[e]._changed()},_addOwner:function(e){this._owners||(this._owners=[]),this._owners.push(e)},_removeOwner:function(e){(e=this._owners?this._owners.indexOf(e):-1)!=-1&&(this._owners.splice(e,1),this._owners.length||(this._owners=k))},clone:function(){for(var e=[],t=0,i=this._stops.length;t<i;t++)e[t]=this._stops[t].clone();return new E(e,this._radial)},getStops:function(){return this._stops},setStops:function(e){if(e.length<2)throw new Error("Gradient stop list needs to contain at least two stops.");var t=this._stops;if(t)for(var i=0,r=t.length;i<r;i++)t[i]._owner=k;for(i=0,r=(t=this._stops=q.readList(e,0,{clone:!0})).length;i<r;i++)t[i]._owner=this;this._changed()},getRadial:function(){return this._radial},setRadial:function(e){this._radial=e,this._changed()},equals:function(e){if(e===this)return!0;if(e&&this._class===e._class){var t=this._stops,i=e._stops,r=t.length;if(r===i.length){for(var l=0;l<r;l++)if(!t[l].equals(i[l]))return!1;return!0}}return!1}}),q=O.extend({_class:"GradientStop",initialize:function(e,t){var i=e,r=t;typeof e=="object"&&t===k&&(Array.isArray(e)&&typeof e[0]!="number"?(i=e[0],r=e[1]):("color"in e||"offset"in e||"rampPoint"in e)&&(i=e.color,r=e.offset||e.rampPoint||0)),this.setColor(i),this.setOffset(r)},clone:function(){return new q(this._color.clone(),this._offset)},_serialize:function(e,t){var i=this._color,r=this._offset;return O.serialize(r==null?[i]:[i,r],e,!0,t)},_changed:function(){this._owner&&this._owner._changed(129)},getOffset:function(){return this._offset},setOffset:function(e){this._offset=e,this._changed()},getRampPoint:"#getOffset",setRampPoint:"#setOffset",getColor:function(){return this._color},setColor:function(){At._setOwner(this._color,null),this._color=At._setOwner(At.read(arguments,0),this,"setColor"),this._changed()},equals:function(e){return e===this||e&&this._class===e._class&&this._color.equals(e._color)&&this._offset==e._offset||!1}}),fe=O.extend(new function(){var e={fillColor:null,fillRule:"nonzero",strokeColor:null,strokeWidth:1,strokeCap:"butt",strokeJoin:"miter",strokeScaling:!0,miterLimit:10,dashOffset:0,dashArray:[],shadowColor:null,shadowBlur:0,shadowOffset:new Q,selectedColor:null},t=O.set({},e,{fontFamily:"sans-serif",fontWeight:"normal",fontSize:12,leading:null,justification:"left"}),i=O.set({},t,{fillColor:new At}),r={strokeWidth:193,strokeCap:193,strokeJoin:193,strokeScaling:201,miterLimit:193,fontFamily:9,fontWeight:9,fontSize:9,font:9,leading:9,justification:9},l={beans:!0},d={_class:"Style",beans:!0,initialize:function(f,v,g){this._values={},this._owner=v,this._project=v&&v._project||g||jt.project,this._defaults=!v||v instanceof Dt?t:v instanceof It?i:e,f&&this.set(f)}};return O.each(t,function(f,v){var g=/Color$/.test(v),x=v==="shadowOffset",T=O.capitalize(v),S=r[v],D="set"+T,F="get"+T;d[D]=function(H){var U,K=this._owner,j=K&&K._children,Z=j&&0<j.length&&!(K instanceof Kt);if(Z)for(var ee=0,re=j.length;ee<re;ee++)j[ee]._style[D](H);v!=="selectedColor"&&Z||!(v in this._defaults)||(U=this._values[v])!==H&&(g&&(U&&(At._setOwner(U,null),U._canvasStyle=null),H&&H.constructor===At&&(H=At._setOwner(H,K,Z&&D))),this._values[v]=H,K&&K._changed(S||129))},d[F]=function(H){var U,K=this._owner,j=K&&K._children,Z=j&&0<j.length&&!(K instanceof Kt);if(Z&&!H)for(var ee=0,re=j.length;ee<re;ee++){var oe=j[ee]._style[F]();if(ee){if(!O.equals(U,oe))return k}else U=oe}else v in this._defaults&&((U=this._values[v])===k?(U=this._defaults[v])&&U.clone&&(U=U.clone()):!(H=g?At:x?Q:null)||U&&U.constructor===H||(this._values[v]=U=H.read([U],0,{readNull:!0,clone:!0})));return U&&g?At._setOwner(U,K,Z&&D):U},l[F]=function(H){return this._style[F](H)},l[D]=function(H){this._style[D](H)}}),O.each({Font:"FontFamily",WindingRule:"FillRule"},function(f,v){var g="get"+v;v="set"+v,d[g]=l[g]="#get"+f,d[v]=l[v]="#set"+f}),dt.inject(l),d},{set:function(e){var t,i=e instanceof fe,r=i?e._values:e;if(r)for(var l in r)l in this._defaults&&(t=r[l],this[l]=t&&i&&t.clone?t.clone():t)},equals:function(e){function t(i,r,l){var d,f=i._values,v=r._values,g=r._defaults;for(d in f){var x=f[d],T=v[d];if(!(l&&d in v||O.equals(x,T===k?g[d]:T)))return!1}return!0}return e===this||e&&this._class===e._class&&t(this,e)&&t(e,this,!0)||!1},_dispose:function(){var e=this.getFillColor();e&&(e._canvasStyle=null),(e=this.getStrokeColor())&&(e._canvasStyle=null),(e=this.getShadowColor())&&(e._canvasStyle=null)},hasFill:function(){var e=this.getFillColor();return!!e&&0<e.alpha},hasStroke:function(){var e=this.getStrokeColor();return!!e&&0<e.alpha&&0<this.getStrokeWidth()},hasShadow:function(){var e=this.getShadowColor();return!!e&&0<e.alpha&&(0<this.getShadowBlur()||!this.getShadowOffset().isZero())},getView:function(){return this._project._view},getFontStyle:function(){var e=this.getFontSize();return this.getFontWeight()+" "+e+(/[a-z]/i.test(e+"")?" ":"px ")+this.getFontFamily()},getFont:"#getFontFamily",setFont:"#setFontFamily",getLeading:function e(){var t=e.base.call(this),i=this.getFontSize();return/pt|em|%|px/.test(i)&&(i=this.getView().getPixelSize(i)),t??1.2*i}}),Se=new function(){function e(t,i,r,l){for(var d=["","webkit","moz","Moz","ms","o"],f=i[0].toUpperCase()+i.substring(1),v=0;v<6;v++){var g;if((g=(g=d[v])?g+f:i)in t){if(!r)return t[g];t[g]=l;break}}}return{getStyles:function(t){var i;return(i=(i=t&&t.nodeType!==9?t.ownerDocument:t)&&i.defaultView)&&i.getComputedStyle(t,"")},getBounds:function(t,i){var r,l=t.ownerDocument,d=l.body,f=l.documentElement;try{r=t.getBoundingClientRect()}catch{r={left:0,top:0,width:0,height:0}}var v=r.left-(f.clientLeft||d.clientLeft||0);return t=r.top-(f.clientTop||d.clientTop||0),i||(v+=(l=l.defaultView).pageXOffset||f.scrollLeft||d.scrollLeft,t+=l.pageYOffset||f.scrollTop||d.scrollTop),new Fe(v,t,r.width,r.height)},getViewportBounds:function(t){t=(i=t.ownerDocument).defaultView;var i=i.documentElement;return new Fe(0,0,t.innerWidth||i.clientWidth,t.innerHeight||i.clientHeight)},getOffset:function(t,i){return Se.getBounds(t,i).getPoint()},getSize:function(t){return Se.getBounds(t,!0).getSize()},isInvisible:function(t){return Se.getSize(t).equals(new it(0,0))},isInView:function(t){return!Se.isInvisible(t)&&Se.getViewportBounds(t).intersects(Se.getBounds(t,!0))},isInserted:function(t){return W.body.contains(t)},getPrefixed:function(t,i){return t&&e(t,i)},setPrefixed:function(t,i,r){if(typeof i=="object")for(var l in i)e(t,l,!0,i[l]);else e(t,i,!0,r)}}},_e={add:function(e,t){if(e)for(var i in t)for(var r=t[i],l=i.split(/[\s,]+/g),d=0,f=l.length;d<f;d++){var v=l[d];e.addEventListener(v,r,e===W&&(v==="touchstart"||v==="touchmove")&&{passive:!1})}},remove:function(e,t){if(e)for(var i in t)for(var r=t[i],l=i.split(/[\s,]+/g),d=0,f=l.length;d<f;d++)e.removeEventListener(l[d],r,!1)},getPoint:function(e){return e=e.targetTouches?(e.targetTouches.length?e.targetTouches:e.changedTouches)[0]:e,new Q(e.pageX||e.clientX+W.documentElement.scrollLeft,e.pageY||e.clientY+W.documentElement.scrollTop)},getTarget:function(e){return e.target||e.srcElement},getRelatedTarget:function(e){return e.relatedTarget||e.toElement},getOffset:function(e,t){return _e.getPoint(e).subtract(Se.getOffset(t||_e.getTarget(e)))}};_e.requestAnimationFrame=new function(){var e,t=Se.getPrefixed(G,"requestAnimationFrame"),i=!1,r=[];function l(){var d=r;r=[];for(var f=0,v=d.length;f<v;f++)d[f]();(i=t&&r.length)&&t(l)}return function(d){r.push(d),t?i||(t(l),i=!0):e=e||setInterval(l,16.666666666666668)}};var Ce,me,nt,Ae,Ne,Ze,mt,B=O.extend($,{_class:"View",initialize:function e(t,i){function r(T){return i[T]||parseInt(i.getAttribute(T),10)}function l(){var T=Se.getSize(i);return T.isNaN()||T.isZero()?new it(r("width"),r("height")):T}var d,f,v,g,x;G&&i?(this._id=i.getAttribute("id"),this._id==null&&i.setAttribute("id",this._id="paper-view-"+e._id++),_e.add(i,this._viewEvents),Se.setPrefixed(i.style,{userDrag:x="none",userSelect:x,touchCallout:x,contentZooming:x,tapHighlightColor:"rgba(0,0,0,0)"}),ye.hasAttribute(i,"resize")&&_e.add(G,(f=this)._windowEvents={resize:function(){f.setViewSize(l())}}),d=l(),ye.hasAttribute(i,"stats")&&typeof Stats<"u"&&(this._stats=new Stats,g=(v=this._stats.domElement).style,x=Se.getOffset(i),g.position="absolute",g.left=x.x+"px",g.top=x.y+"px",W.body.appendChild(v))):(d=new it(i),i=null),this._project=t,this._scope=t._scope,this._element=i,this._pixelRatio||(this._pixelRatio=G&&G.devicePixelRatio||1),this._setElementSize(d.width,d.height),this._viewSize=d,e._views.push(this),((e._viewsById[this._id]=this)._matrix=new ft)._owner=this,e._focused||(e._focused=this),this._frameItems={},this._frameItemCount=0,this._itemEvents={native:{},virtual:{}},this._autoUpdate=!jt.agent.node,this._needsUpdate=!1},remove:function(){if(!this._project)return!1;B._focused===this&&(B._focused=null),B._views.splice(B._views.indexOf(this),1),delete B._viewsById[this._id];var e=this._project;return e._view===this&&(e._view=null),_e.remove(this._element,this._viewEvents),_e.remove(G,this._windowEvents),this._element=this._project=null,this.off("frame"),this._animate=!1,this._frameItems={},!0},_events:O.each(dt._itemHandlers.concat(["onResize","onKeyDown","onKeyUp"]),function(e){this[e]={}},{onFrame:{install:function(){this.play()},uninstall:function(){this.pause()}}}),_animate:!1,_time:0,_count:0,getAutoUpdate:function(){return this._autoUpdate},setAutoUpdate:function(e){(this._autoUpdate=e)&&this.requestUpdate()},update:function(){},draw:function(){this.update()},requestUpdate:function(){var e;this._requested||(e=this,_e.requestAnimationFrame(function(){var t;e._requested=!1,e._animate&&(e.requestUpdate(),t=e._element,Se.getPrefixed(W,"hidden")&&ye.getAttribute(t,"keepalive")!=="true"||!Se.isInView(t)||e._handleFrame()),e._autoUpdate&&e.update()}),this._requested=!0)},play:function(){this._animate=!0,this.requestUpdate()},pause:function(){this._animate=!1},_handleFrame:function(){jt=this._scope;var e=Date.now()/1e3,t=this._last?e-this._last:0;this._last=e,this.emit("frame",new O({delta:t,time:this._time+=t,count:this._count++})),this._stats&&this._stats.update()},_animateItem:function(e,t){var i=this._frameItems;t?(i[e._id]={item:e,time:0,count:0},++this._frameItemCount==1&&this.on("frame",this._handleFrameItems)):(delete i[e._id],--this._frameItemCount==0&&this.off("frame",this._handleFrameItems))},_handleFrameItems:function(e){for(var t in this._frameItems)(t=this._frameItems[t]).item.emit("frame",new O(e,{time:t.time+=e.delta,count:t.count++}))},_changed:function(){this._project._changed(4097),this._bounds=this._decomposed=k},getElement:function(){return this._element},getPixelRatio:function(){return this._pixelRatio},getResolution:function(){return 72*this._pixelRatio},getViewSize:function(){var e=this._viewSize;return new wt(e.width,e.height,this,"setViewSize")},setViewSize:function(){var e=it.read(arguments),t=e.subtract(this._viewSize);t.isZero()||(this._setElementSize(e.width,e.height),this._viewSize.set(e),this._changed(),this.emit("resize",{size:e,delta:t}),this._autoUpdate&&this.update())},_setElementSize:function(e,t){var i=this._element;i&&(i.width!==e&&(i.width=e),i.height!==t&&(i.height=t))},getBounds:function(){return this._bounds||(this._bounds=this._matrix.inverted()._transformBounds(new Fe(new Q,this._viewSize))),this._bounds},getSize:function(){return this.getBounds().getSize()},isVisible:function(){return Se.isInView(this._element)},isInserted:function(){return Se.isInserted(this._element)},getPixelSize:function(e){var t,i,r=this._element;return r?(i=r.parentNode,(r=W.createElement("div")).style.fontSize=e,i.appendChild(r),t=parseFloat(Se.getStyles(r).fontSize),i.removeChild(r)):t=parseFloat(t),t},getTextWidth:function(e,t){return 0}},O.each(["rotate","scale","shear","skew"],function(e){var t=e==="rotate";this[e]=function(){var i=arguments,r=(t?O:Q).read(i);return i=Q.read(i,0,{readNull:!0}),this.transform(new ft()[e](r,i||this.getCenter(!0)))}},{_decompose:function(){return this._decomposed||(this._decomposed=this._matrix.decompose())},translate:function(){var e=new ft;return this.transform(e.translate.apply(e,arguments))},getCenter:function(){return this.getBounds().getCenter()},setCenter:function(){var e=Q.read(arguments);this.translate(this.getCenter().subtract(e))},getZoom:function(){var e=this._decompose().scaling;return(e.x+e.y)/2},setZoom:function(e){this.transform(new ft().scale(e/this.getZoom(),this.getCenter()))},getRotation:function(){return this._decompose().rotation},setRotation:function(e){var t=this.getRotation();t!=null&&e!=null&&this.rotate(e-t)},getScaling:function(){var e=this._decompose().scaling;return new Ct(e.x,e.y,this,"setScaling")},setScaling:function(){var e=this.getScaling(),t=Q.read(arguments,0,{clone:!0,readNull:!0});e&&t&&this.scale(t.x/e.x,t.y/e.y)},getMatrix:function(){return this._matrix},setMatrix:function(){var e=this._matrix;e.set.apply(e,arguments)},transform:function(e){this._matrix.append(e)},scrollBy:function(){this.translate(Q.read(arguments).negate())}}),{projectToView:function(){return this._matrix._transformPoint(Q.read(arguments))},viewToProject:function(){return this._matrix._inverseTransform(Q.read(arguments))},getEventPoint:function(e){return this.viewToProject(_e.getOffset(e,this._element))}},{statics:{_views:[],_viewsById:{},_id:0,create:function(e,t){return W&&typeof t=="string"&&(t=W.getElementById(t)),new(G?I:B)(e,t)}}},new function(){if(G){var e,t,i,r,l,d=!1,f=!1;(g=G.navigator).pointerEnabled||g.msPointerEnabled?(i="pointerdown MSPointerDown",r="pointermove MSPointerMove",l="pointerup pointercancel MSPointerUp MSPointerCancel"):(i="touchstart",r="touchmove",l="touchend touchcancel","ontouchstart"in G&&g.userAgent.match(/mobile|tablet|ip(ad|hone|od)|android|silk/i)||(i+=" mousedown",r+=" mousemove",l+=" mouseup"));var v={},g={mouseout:function(be){var se,ue,We,Ie=B._focused,Ye=_e.getRelatedTarget(be);!Ie||Ye&&Ye.nodeName!=="HTML"||(ue=(se=_e.getOffset(be,Ie._element)).x,Ye=(We=Math.abs)(ue),se.x=We(We=Ye-(1<<25))<Ye?We*(ue<0?-1:1):ue,Ee(Ie,be,Ie.viewToProject(se)))},scroll:xe};v[i]=function(be){var se=B._focused=le(be);d||(d=!0,se._handleMouseEvent("mousedown",be))},g[r]=function(be){var se,ue=B._focused;f||((se=le(be))?ue!==se&&(ue&&Ee(ue,be),e=e||ue,ue=B._focused=t=se):t&&t===ue&&(e&&!e.isInserted()&&(e=null),ue=B._focused=e,e=null,xe())),ue&&Ee(ue,be)},g[i]=function(){f=!0},g[l]=function(be){var se=B._focused;se&&d&&se._handleMouseEvent("mouseup",be),f=d=!1},_e.add(W,g),_e.add(G,{load:xe});var x,T,S,D,F,H,U,K,j=!1,Z=!1,ee={doubleclick:"click",mousedrag:"mousemove"},re=!1,oe={mousedown:{mousedown:1,mousedrag:1,click:1,doubleclick:1},mouseup:{mouseup:1,mousedrag:1,click:1,doubleclick:1},mousemove:{mousedrag:1,mousemove:1,mouseenter:1,mouseleave:1}};return{_viewEvents:v,_handleMouseEvent:function(be,se,ue){var We=this._itemEvents,Ie=We.native[be],Ye=be==="mousemove",$e=this._scope.tool,lt=this;function vt(C){return We.virtual[C]||lt.responds(C)||$e&&$e.responds(C)}Ye&&d&&vt("mousedrag")&&(be="mousedrag"),ue=ue||this.getEventPoint(se);var L,s=this.getBounds().contains(ue),c=(L=Ie&&s&&lt._project.hitTest(ue,{tolerance:0,fill:!0,stroke:!0}))&&L.item||null,p=!1;if((L={})[be.substr(5)]=!0,Ie&&c!==D&&(D&&Te(D,null,"mouseleave",se,ue),c&&Te(c,null,"mouseenter",se,ue),D=c),re^s&&(Te(this,null,s?"mouseenter":"mouseleave",se,ue),p=!0),!s&&!L.drag||ue.equals(T)||(Me(this,c,Ye?be:"mousemove",se,ue,T),p=!0),re=s,L.down&&s||L.up&&x){if(Me(this,c,be,se,ue,x),L.down){if(K=c===H&&Date.now()-U<300,S=H=c,!Z&&c){for(var b=c;b&&!b.responds("mousedrag");)b=b._parent;b&&(F=c)}x=ue}else L.up&&(Z||c!==S||(U=Date.now(),Me(this,c,K?"doubleclick":"click",se,ue,x),K=!1),S=F=null);p=!(re=!1)}T=ue,p&&$e&&(j=$e._handleMouseEvent(be,se,ue,L)||j),se.cancelable!==!1&&(j&&!L.move||L.down&&vt("mouseup"))&&se.preventDefault()},_handleKeyEvent:function(be,se,ue,We){var Ie,Ye=this._scope,$e=Ye.tool;function lt(vt){vt.responds(be)&&(jt=Ye,vt.emit(be,Ie=Ie||new V(be,se,ue,We)))}this.isVisible()&&(lt(this),$e&&$e.responds(be)&&lt($e))},_countItemEvent:function(be,se){var ue,We=(Ie=this._itemEvents).native,Ie=Ie.virtual;for(ue in oe)We[ue]=(We[ue]||0)+(oe[ue][be]||0)*se;Ie[be]=(Ie[be]||0)+se},statics:{updateFocus:xe,_resetState:function(){d=f=j=re=!1,e=t=x=T=S=D=F=H=U=K=null}}}}function le(be){return(be=_e.getTarget(be)).getAttribute&&B._viewsById[be.getAttribute("id")]}function xe(){var be=B._focused;if(!be||!be.isVisible()){for(var se=0,ue=B._views.length;se<ue;se++)if((be=B._views[se]).isVisible()){B._focused=t=be;break}}}function Ee(be,se,ue){be._handleMouseEvent("mousemove",se,ue)}function Te(be,se,ue,We,Ie,Ye,$e){for(var lt,vt=!1;be&&be!==$e&&!function L(s,c){if(s.responds(c)){if(lt=lt||new ke(c,We,Ie,se||s,Ye?Ie.subtract(Ye):null),s.emit(c,lt)&&(j=!0,lt.prevented&&(Z=!0),lt.stopped))return vt=!0}else if(c=ee[c])return L(s,c)}(be,ue);)be=be._parent;return vt}function Me(be,se,ue,We,Ie,Ye){return be._project.removeOn(ue),Z=j=!1,F&&Te(F,null,ue,We,Ie,Ye)||se&&se!==F&&!se.isDescendant(F)&&Te(se,null,ue==="mousedrag"?"mousemove":ue,We,Ie,Ye,F)||Te(be,F||se||be,ue,We,Ie,Ye)}}),I=B.extend({_class:"CanvasView",initialize:function(e,t){if(!(t instanceof G.HTMLCanvasElement)){var i=it.read(arguments,1);if(i.isZero())throw new Error("Cannot create CanvasView with the provided argument: "+O.slice(arguments,1));t=Ue.getCanvas(i)}var r=this._context=t.getContext("2d");r.save(),this._pixelRatio=1,/^off|false$/.test(ye.getAttribute(t,"hidpi"))||(i=G.devicePixelRatio||1,r=Se.getPrefixed(r,"backingStorePixelRatio")||1,this._pixelRatio=i/r),B.call(this,e,t),this._needsUpdate=!0},remove:function e(){return this._context.restore(),e.base.call(this)},_setElementSize:function e(t,i){var r,l,d=this._pixelRatio;e.base.call(this,t*d,i*d),d!==1&&(l=this._element,r=this._context,ye.hasAttribute(l,"resize")||((l=l.style).width=t+"px",l.height=i+"px"),r.restore(),r.save(),r.scale(d,d))},getContext:function(){return this._context},getPixelSize:function e(t){var i,r,l=jt.agent;return l&&l.firefox?i=e.base.call(this,t):(l=(r=this._context).font,r.font=t+" serif",i=parseFloat(r.font),r.font=l),i},getTextWidth:function(e,t){var i=this._context,r=i.font,l=0;i.font=e;for(var d=0,f=t.length;d<f;d++)l=Math.max(l,i.measureText(t[d]).width);return i.font=r,l},update:function(){if(!this._needsUpdate)return!1;var e=this._project,t=this._context,i=this._viewSize;return t.clearRect(0,0,i.width+1,i.height+1),e&&e.draw(t,this._matrix,this._pixelRatio),!(this._needsUpdate=!1)}}),N=O.extend({_class:"Event",initialize:function(e){this.event=e,this.type=e&&e.type},prevented:!1,stopped:!1,preventDefault:function(){this.prevented=!0,this.event.preventDefault()},stopPropagation:function(){this.stopped=!0,this.event.stopPropagation()},stop:function(){this.stopPropagation(),this.preventDefault()},getTimeStamp:function(){return this.event.timeStamp},getModifiers:function(){return ge.modifiers}}),V=N.extend({_class:"KeyEvent",initialize:function(e,t,i,r){this.type=e,this.event=t,this.key=i,this.character=r},toString:function(){return"{ type: '"+this.type+"', key: '"+this.key+"', character: '"+this.character+"', modifiers: "+this.getModifiers()+" }"}}),ge=new function(){var e,t,i={" ":"tab"," ":"space","\b":"backspace","":"delete",Spacebar:"space",Del:"delete",Win:"meta",Esc:"escape"},r={tab:" ",space:" ",enter:"\r"},l={},d={},f=new O({shift:!1,control:!1,alt:!1,meta:!1,capsLock:!1,space:!1}).inject({option:{get:function(){return this.alt}},command:{get:function(){var x=jt&&jt.agent;return x&&x.mac?this.meta:this.control}}});function v(x){var T=x.key||x.keyIdentifier;return T=/^U\+/.test(T)?String.fromCharCode(parseInt(T.substr(2),16)):/^Arrow[A-Z]/.test(T)?T.substr(5):T==="Unidentified"||T===k?String.fromCharCode(x.keyCode):T,i[T]||(1<T.length?O.hyphenate(T):T.toLowerCase())}function g(x,T,S,D){var F,H=B._focused;if((l[T]=x)?d[T]=S:delete d[T],1<T.length&&(F=O.camelize(T))in f){f[F]=x;var U=jt&&jt.agent;if(F==="meta"&&U&&U.mac)if(x)e={};else{for(var K in e)K in d&&g(!1,K,e[K],D);e=null}}else x&&e&&(e[T]=S);H&&H._handleKeyEvent(x?"keydown":"keyup",D,T,S)}return _e.add(W,{keydown:function(x){var T=v(x),S=jt&&jt.agent;1<T.length||S&&S.chrome&&(x.altKey||S.mac&&x.metaKey||!S.mac&&x.ctrlKey)?g(!0,T,r[T]||(1<T.length?"":T),x):t=T},keypress:function(x){var T,S;t&&(T=v(x),S=32<=(S=x.charCode)?String.fromCharCode(S):1<T.length?"":T,g(!0,T=T!==t?S.toLowerCase():T,S,x),t=null)},keyup:function(x){var T=v(x);T in d&&g(!1,T,d[T],x)}}),_e.add(G,{blur:function(x){for(var T in d)g(!1,T,d[T],x)}}),{modifiers:f,isDown:function(x){return!!l[x]}}},ke=N.extend({_class:"MouseEvent",initialize:function(e,t,i,r,l){this.type=e,this.event=t,this.point=i,this.target=r,this.delta=l},toString:function(){return"{ type: '"+this.type+"', point: "+this.point+", target: "+this.target+(this.delta?", delta: "+this.delta:"")+", modifiers: "+this.getModifiers()+" }"}}),je=N.extend({_class:"ToolEvent",_item:null,initialize:function(e,t,i){this.tool=e,this.type=t,this.event=i},_choosePoint:function(e,t){return e||(t?t.clone():null)},getPoint:function(){return this._choosePoint(this._point,this.tool._point)},setPoint:function(e){this._point=e},getLastPoint:function(){return this._choosePoint(this._lastPoint,this.tool._lastPoint)},setLastPoint:function(e){this._lastPoint=e},getDownPoint:function(){return this._choosePoint(this._downPoint,this.tool._downPoint)},setDownPoint:function(e){this._downPoint=e},getMiddlePoint:function(){return!this._middlePoint&&this.tool._lastPoint?this.tool._point.add(this.tool._lastPoint).divide(2):this._middlePoint},setMiddlePoint:function(e){this._middlePoint=e},getDelta:function(){return!this._delta&&this.tool._lastPoint?this.tool._point.subtract(this.tool._lastPoint):this._delta},setDelta:function(e){this._delta=e},getCount:function(){return this.tool[/^mouse(down|up)$/.test(this.type)?"_downCount":"_moveCount"]},setCount:function(e){this.tool[/^mouse(down|up)$/.test(this.type)?"downCount":"count"]=e},getItem:function(){if(!this._item){var e=this.tool._scope.project.hitTest(this.getPoint());if(e){for(var t=e.item,i=t._parent;/^(Group|CompoundPath)$/.test(i._class);)i=(t=i)._parent;this._item=t}}return this._item},setItem:function(e){this._item=e},toString:function(){return"{ type: "+this.type+", point: "+this.getPoint()+", count: "+this.getCount()+", modifiers: "+this.getModifiers()+" }"}}),ct=(we.extend({_class:"Tool",_list:"tools",_reference:"tool",_events:["onMouseDown","onMouseUp","onMouseDrag","onMouseMove","onActivate","onDeactivate","onEditOptions","onKeyDown","onKeyUp"],initialize:function(e){we.call(this),this._moveCount=-1,this._downCount=-1,this.set(e)},getMinDistance:function(){return this._minDistance},setMinDistance:function(e){(this._minDistance=e)!=null&&this._maxDistance!=null&&e>this._maxDistance&&(this._maxDistance=e)},getMaxDistance:function(){return this._maxDistance},setMaxDistance:function(e){this._maxDistance=e,this._minDistance!=null&&e!=null&&e<this._minDistance&&(this._minDistance=e)},getFixedDistance:function(){return this._minDistance==this._maxDistance?this._minDistance:null},setFixedDistance:function(e){this._minDistance=this._maxDistance=e},_handleMouseEvent:function(e,t,i,r){jt=this._scope,r.drag&&!this.responds(e)&&(e="mousemove");var l=r.move||r.drag,d=this.responds(e),f=this.minDistance,v=this.maxDistance,g=!1,x=this;function T(D,F){var H=i,U=l?x._point:x._downPoint||H;if(l){if(0<=x._moveCount&&H.equals(U))return;if(U&&(D!=null||F!=null)){var K=H.subtract(U),j=K.getLength();if(j<(D||0))return;F&&(H=U.add(K.normalize(Math.min(j,F))))}x._moveCount++}return x._point=H,x._lastPoint=U||H,r.down&&(x._moveCount=-1,x._downPoint=H,x._downCount++),1}function S(){d&&(g=x.emit(e,new je(x,e,t))||g)}if(r.down)T(),S();else if(r.up)T(null,v),S();else if(d)for(;T(f,v);)S();return g}}),O.extend($,{_class:"Tween",statics:{easings:new O({linear:function(e){return e},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return e*(2-e)},easeInOutQuad:function(e){return e<.5?2*e*e:2*(2-e)*e-1},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return--e*e*e+1},easeInOutCubic:function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return 1- --e*e*e*e},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return 1+--e*e*e*e*e},easeInOutQuint:function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e}})},initialize:function e(t,i,r,l,d,f){this.object=t;var v=typeof d;t=v=="function",this.type=t?v:v=="string"?d:"linear",this.easing=t?d:e.easings[this.type],this.duration=l,this.running=!1,this._then=null,this._startTime=null,l=i||r,this._keys=l?Object.keys(l):[],this._parsedKeys=this._parseKeys(this._keys),this._from=l&&this._getState(i),this._to=l&&this._getState(r),f!==!1&&this.start()},then:function(e){return this._then=e,this},start:function(){return this._startTime=null,this.running=!0,this},stop:function(){return this.running=!1,this},update:function(e){if(this.running){let g=function(x){return typeof x=="function"?x(t,e):x};1<=e&&(this.running=!(e=1));for(var t=this.easing(e),i=this._keys,r=0,l=i&&i.length;r<l;r++){var d=i[r],f=g(this._from[d]),v=g(this._to[d]);f=f&&v&&f.__add&&v.__add?v.__subtract(f).__multiply(t).__add(f):(v-f)*t+f,this._setProperty(this._parsedKeys[d],f)}this.responds("update")&&this.emit("update",new O({progress:e,factor:t})),!this.running&&this._then&&this._then(this.object)}return this},_events:{onUpdate:{}},_handleFrame:function(e){var t=this._startTime,i=t?(e-t)/this.duration:0;t||(this._startTime=e),this.update(i)},_getState:function(e){for(var t=this._keys,i={},r=0,l=t.length;r<l;r++){var d,f=t[r],v=this._parsedKeys[f],g=this._getProperty(v);e?(d=this._resolveValue(g,e[f]),this._setProperty(v,d),d=(d=this._getProperty(v))&&d.clone?d.clone():d,this._setProperty(v,g)):d=g&&g.clone?g.clone():g,i[f]=d}return i},_resolveValue:function(e,t){if(t){if(Array.isArray(t)&&t.length===2){var i=t[0];return i&&i.match&&i.match(/^[+\-\*\/]=/)?this._calculate(e,i[0],t[1]):t}if(typeof t=="string"&&(i=t.match(/^[+\-*/]=(.*)/)))return i=JSON.parse(i[1].replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g,'"$2": ')),this._calculate(e,t[0],i)}return t},_calculate:function(e,t,i){return jt.PaperScript.calculateBinary(e,t,i)},_parseKeys:function(e){for(var t={},i=0,r=e.length;i<r;i++){var l=e[i],d=l.replace(/\.([^.]*)/g,"/$1").replace(/\[['"]?([^'"\]]*)['"]?\]/g,"/$1");t[l]=d.split("/")}return t},_getProperty:function(e,t){for(var i=this.object,r=0,l=e.length-(t||0);r<l&&i;r++)i=i[e[r]];return i},_setProperty:function(e,t){var i=this._getProperty(e,1);i&&(i[e[e.length-1]]=t)}})),Ue=O.exports.CanvasProvider={canvases:[],getCanvas:function(e,t,i){if(!G)return null;var r,l=!0;if(typeof e=="object"&&(t=e.height,e=e.width),this.canvases.length?r=this.canvases.pop():(r=W.createElement("canvas"),l=!1),!(i=r.getContext("2d",i||{})))throw new Error("Canvas "+r+" is unable to provide a 2D context.");return r.width===e&&r.height===t?l&&i.clearRect(0,0,e+1,t+1):(r.width=e,r.height=t),i.save(),r},getContext:function(e,t,i){return(t=this.getCanvas(e,t,i))?t.getContext("2d",i||{}):null},release:function(e){(e=e&&e.canvas?e.canvas:e)&&e.getContext&&(e.getContext("2d").restore(),this.canvases.push(e))}},kt=new function(){var e,t,i,r,l,d,f,v,g,x,T,S=Math.min,D=Math.max,F=Math.abs;function H(oe,le,xe){return .2989*oe+.587*le+.114*xe}function U(oe,le,xe,Ee){var Te,Me=Ee-H(oe,le,xe);Ee=H(g=oe+Me,x=le+Me,T=xe+Me),xe=S(g,x,T),Me=D(g,x,T),xe<0&&(g=Ee+(g-Ee)*Ee/(Te=Ee-xe),x=Ee+(x-Ee)*Ee/Te,T=Ee+(T-Ee)*Ee/Te),255<Me&&(g=Ee+(g-Ee)*(Te=255-Ee)/(Me-=Ee),x=Ee+(x-Ee)*Te/Me,T=Ee+(T-Ee)*Te/Me)}function K(oe,le,xe){return D(oe,le,xe)-S(oe,le,xe)}function j(oe,le,xe,Ee){var Te=[oe,le,xe],Me=D(oe,le,xe);xe=S(oe,le,xe),le=S(xe=xe===oe?0:xe===le?1:2,Me=Me===oe?0:Me===le?1:2)===0?D(xe,Me)===1?2:1:0,Te[Me]>Te[xe]?(Te[le]=(Te[le]-Te[xe])*Ee/(Te[Me]-Te[xe]),Te[Me]=Ee):Te[le]=Te[Me]=0,Te[xe]=0,g=Te[0],x=Te[1],T=Te[2]}var Z={multiply:function(){g=l*e/255,x=d*t/255,T=f*i/255},screen:function(){g=l+e-l*e/255,x=d+t-d*t/255,T=f+i-f*i/255},overlay:function(){g=l<128?2*l*e/255:255-2*(255-l)*(255-e)/255,x=d<128?2*d*t/255:255-2*(255-d)*(255-t)/255,T=f<128?2*f*i/255:255-2*(255-f)*(255-i)/255},"soft-light":function(){var oe=e*l/255;g=oe+l*(255-(255-l)*(255-e)/255-oe)/255,x=(oe=t*d/255)+d*(255-(255-d)*(255-t)/255-oe)/255,T=(oe=i*f/255)+f*(255-(255-f)*(255-i)/255-oe)/255},"hard-light":function(){g=e<128?2*e*l/255:255-2*(255-e)*(255-l)/255,x=t<128?2*t*d/255:255-2*(255-t)*(255-d)/255,T=i<128?2*i*f/255:255-2*(255-i)*(255-f)/255},"color-dodge":function(){g=l===0?0:e===255?255:S(255,255*l/(255-e)),x=d===0?0:t===255?255:S(255,255*d/(255-t)),T=f===0?0:i===255?255:S(255,255*f/(255-i))},"color-burn":function(){g=l===255?255:e===0?0:D(0,255-255*(255-l)/e),x=d===255?255:t===0?0:D(0,255-255*(255-d)/t),T=f===255?255:i===0?0:D(0,255-255*(255-f)/i)},darken:function(){g=l<e?l:e,x=d<t?d:t,T=f<i?f:i},lighten:function(){g=e<l?l:e,x=t<d?d:t,T=i<f?f:i},difference:function(){(g=l-e)<0&&(g=-g),(x=d-t)<0&&(x=-x),(T=f-i)<0&&(T=-T)},exclusion:function(){g=l+e*(255-l-l)/255,x=d+t*(255-d-d)/255,T=f+i*(255-f-f)/255},hue:function(){j(e,t,i,K(l,d,f)),U(g,x,T,H(l,d,f))},saturation:function(){j(l,d,f,K(e,t,i)),U(g,x,T,H(l,d,f))},luminosity:function(){U(l,d,f,H(e,t,i))},color:function(){U(e,t,i,H(l,d,f))},add:function(){g=S(l+e,255),x=S(d+t,255),T=S(f+i,255)},subtract:function(){g=D(l-e,0),x=D(d-t,0),T=D(f-i,0)},average:function(){g=(l+e)/2,x=(d+t)/2,T=(f+i)/2},negation:function(){g=255-F(255-e-l),x=255-F(255-t-d),T=255-F(255-i-f)}},ee=this.nativeModes=O.each(["source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","lighter","darker","copy","xor"],function(oe){this[oe]=!0},{}),re=Ue.getContext(1,1,{willReadFrequently:!0});re&&(O.each(Z,function(oe,le){var xe=le==="darken",Ee=!1;re.save();try{re.fillStyle=xe?"#300":"#a00",re.fillRect(0,0,1,1),re.globalCompositeOperation=le,re.globalCompositeOperation===le&&(re.fillStyle=xe?"#a00":"#300",re.fillRect(0,0,1,1),Ee=re.getImageData(0,0,1,1).data[0]!==xe?170:51)}catch{}re.restore(),ee[le]=Ee}),Ue.release(re)),this.process=function(oe,le,xe,Ee,Te){var Me=le.canvas,be=oe==="normal";if(be||ee[oe])xe.save(),xe.setTransform(1,0,0,1,0,0),xe.globalAlpha=Ee,be||(xe.globalCompositeOperation=oe),xe.drawImage(Me,Te.x,Te.y),xe.restore();else{var se=Z[oe];if(se){for(var ue=(oe=xe.getImageData(Te.x,Te.y,Me.width,Me.height)).data,We=le.getImageData(0,0,Me.width,Me.height).data,Ie=0,Ye=ue.length;Ie<Ye;Ie+=4){e=We[Ie],l=ue[Ie],t=We[Ie+1],d=ue[Ie+1],i=We[Ie+2],f=ue[Ie+2],r=We[Ie+3],v=ue[Ie+3],se();var $e=r*Ee/255,lt=1-$e;ue[Ie]=$e*g+lt*l,ue[Ie+1]=$e*x+lt*d,ue[Ie+2]=$e*T+lt*f,ue[Ie+3]=r*Ee+lt*v}xe.putImageData(oe,Te.x,Te.y)}}}},pt=new function(){var e="http://www.w3.org/2000/svg",t="http://www.w3.org/2000/xmlns",i="http://www.w3.org/1999/xlink",r={href:i,xlink:t,xmlns:t+"/","xmlns:xlink":t+"/"};function l(d,f,v){for(var g in f){var x=f[g],T=r[g];typeof x=="number"&&v&&(x=v.number(x)),T?d.setAttributeNS(T,g,x):d.setAttribute(g,x)}return d}return{svg:e,xmlns:t,xlink:i,create:function(d,f,v){return l(W.createElementNS(e,d),f,v)},get:function(d,f){var v=r[f];return(f=v?d.getAttributeNS(v,f):d.getAttribute(f))==="null"?null:f},set:l}},ti=O.each({fillColor:["fill","color"],fillRule:["fill-rule","string"],strokeColor:["stroke","color"],strokeWidth:["stroke-width","number"],strokeCap:["stroke-linecap","string"],strokeJoin:["stroke-linejoin","string"],strokeScaling:["vector-effect","lookup",{true:"none",false:"non-scaling-stroke"},function(e,t){return!t&&(e instanceof Xt||e instanceof Gt||e instanceof It)}],miterLimit:["stroke-miterlimit","number"],dashArray:["stroke-dasharray","array"],dashOffset:["stroke-dashoffset","number"],fontFamily:["font-family","string"],fontWeight:["font-weight","string"],fontSize:["font-size","number"],justification:["text-anchor","lookup",{left:"start",center:"middle",right:"end"}],opacity:["opacity","number"],blendMode:["mix-blend-mode","style"]},function(e,t){var i=O.capitalize(t),r=e[2];this[t]={type:e[1],property:t,attribute:e[0],toSVG:r,fromSVG:r&&O.each(r,function(l,d){this[l]=d},{}),exportFilter:e[3],get:"get"+i,set:"set"+i}},{});function si(e,t,i){var r,l,d=new O,f=e.getTranslation();return t&&(e.isInvertible()?(r=(e=e._shiftless())._inverseTransform(f),f=null):r=new Q,d[i?"cx":"x"]=r.x,d[i?"cy":"y"]=r.y),e.isIdentity()||((l=e.decompose())?(t=[],i=l.rotation,r=l.scaling,l=l.skewing,f&&!f.isZero()&&t.push("translate("+Ce.point(f)+")"),i&&t.push("rotate("+Ce.number(i)+")"),Ve.isZero(r.x-1)&&Ve.isZero(r.y-1)||t.push("scale("+Ce.point(r)+")"),l.x&&t.push("skewX("+Ce.number(l.x)+")"),l.y&&t.push("skewY("+Ce.number(l.y)+")"),d.transform=t.join(" ")):d.transform="matrix("+e.getValues().join(",")+")"),d}function ci(e,t){for(var i=si(e._matrix),r=e._children,l=pt.create("g",i,Ce),d=0,f=r.length;d<f;d++){var v,g=r[d],x=gi(g,t);x&&(g.isClipMask()?((v=pt.create("clipPath")).appendChild(x),ui(g,v,"clip"),pt.set(l,{"clip-path":"url(#"+v.id+")"})):l.appendChild(x))}return l}function yi(e){var t,i=e._type,r=e._radius,l=si(e._matrix,!0,i!=="rectangle");return i==="rectangle"&&(i="rect",e=(t=e._size).width,t=t.height,l.x-=e/2,l.y-=t/2,l.width=e,l.height=t,r.isZero()&&(r=null)),r&&(i==="circle"?l.r=r:(l.rx=r.width,l.ry=r.height)),pt.create(i,l,Ce)}function wi(e,t){return me=me||{ids:{},svgs:{}},e&&me.svgs[t+"-"+(e._id||e.__id||(e.__id=Tt.get("svg")))]}function ui(e,t,i){me||wi();var r=me.ids[i]=(me.ids[i]||0)+1;t.id=i+"-"+r,me.svgs[i+"-"+(e._id||e.__id)]=t}function Ft(e,t){var i=e,r=null;if(me){for(var l in i=e.nodeName.toLowerCase()==="svg"&&e,me.svgs)r||(i||(i=pt.create("svg")).appendChild(e),r=i.insertBefore(pt.create("defs"),i.firstChild)),r.appendChild(me.svgs[l]);me=null}return t.asString?new R.XMLSerializer().serializeToString(i):i}function gi(e,t,i){var r=nt[e._class],l=r&&r(e,t);return l&&((r=t.onExport)&&(l=r(e,l,t)||l),(t=JSON.stringify(e._data))&&t!=="{}"&&t!=="null"&&l.setAttribute("data-paper-data",t)),l&&function(d,f,v){var g={},x=!v&&d.getParent(),T=[];return d._name!=null&&(g.id=d._name),O.each(ti,function(S){var D=S.get,F=S.type,H=d[D]();(S.exportFilter?!S.exportFilter(d,H):x&&O.equals(x[D](),H))||(F!=="color"||H==null||(D=H.getAlpha())<1&&(g[S.attribute+"-opacity"]=D),F==="style"?T.push(S.attribute+": "+H):g[S.attribute]=H==null?"none":F==="color"?H.gradient?function(U){if(!(le=wi(U,"color"))){var K,j,Z=U.getGradient(),ee=Z._radial,re=U.getOrigin(),oe=U.getDestination();ee?(K={cx:re.x,cy:re.y,r:re.getDistance(oe)},(j=U.getHighlight())&&(K.fx=j.x,K.fy=j.y)):K={x1:re.x,y1:re.y,x2:oe.x,y2:oe.y},K.gradientUnits="userSpaceOnUse";for(var le=pt.create((ee?"radial":"linear")+"Gradient",K,Ce),xe=Z._stops,Ee=0,Te=xe.length;Ee<Te;Ee++){var Me,be=(Me=xe[Ee])._color,se=be.getAlpha();K={offset:(Me=Me._offset)==null?Ee/(Te-1):Me},be&&(K["stop-color"]=be.toCSS(!0)),se<1&&(K["stop-opacity"]=se),le.appendChild(pt.create("stop",K,Ce))}ui(U,le,"color")}return"url(#"+le.id+")"}(H):H.toCSS(!0):F==="array"?H.join(","):F==="lookup"?S.toSVG[H]:H)}),T.length&&(g.style=T.join(";")),g.opacity===1&&delete g.opacity,d._visible||(g.visibility="hidden"),pt.set(f,g,Ce)}(e,l,i)}function Mt(e){return Ce=new tt((e=e||{}).precision),e}function di(e,t,i,r,l,d){return i=(d=pt.get(e,t)||d)==null?r?null:i?"":0:i?d:parseFloat(d),/%\s*$/.test(d)?i/100*(l?1:Ae[/x|^width/.test(t)?"width":"height"]):i}function oi(e,t,i,r,l,d,f){return t=di(e,t||"x",!1,r,l,d),i=di(e,i||"y",!1,r,l,f),!r||t!=null&&i!=null?new Q(t,i):null}function _i(e,t,i,r,l){return t=di(e,t||"width",!1,r,l),i=di(e,i||"height",!1,r,l),!r||t!=null&&i!=null?new it(t,i):null}function Oi(e,t,i){return e==="none"?null:t==="number"?parseFloat(e):t==="array"?e?e.split(/[\s,]+/g).map(parseFloat):[]:t==="color"?zi(e)||e:t==="lookup"?i[e]:e}function xi(e,t,i,r){var l=e.childNodes,d=t==="clippath",f=t==="defs",v=new Dt,g=v._project,x=(t=g._currentStyle,[]);if(d||f||(v=ki(v,e,r),g._currentStyle=v._style.clone()),r)for(var T=e.querySelectorAll("defs"),S=0,D=T.length;S<D;S++)Mi(T[S],i,!1);for(S=0,D=l.length;S<D;S++){var F,H=l[S];H.nodeType!==1||/^defs$/i.test(H.nodeName)||!(F=Mi(H,i,!1))||F instanceof bt||x.push(F)}return v.addChildren(x),d&&(v=ki(v.reduce(),e,r)),g._currentStyle=t,(d||f)&&(v.remove(),v=null),v}function Di(e,t){for(var i=e.getAttribute("points").match(/[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g),r=[],l=0,d=i.length;l<d;l+=2)r.push(new Q(parseFloat(i[l]),parseFloat(i[l+1])));return e=new St(r),t==="polygon"&&e.closePath(),e}function Ii(e,t){var i;if(t=t==="radialgradient",S=(di(e,"href",!0)||"").substring(1))(i=Ne[S].getGradient())._radial^t&&((i=i.clone())._radial=t);else{for(var r=e.childNodes,l=[],d=0,f=r.length;d<f;d++){var v=r[d];v.nodeType===1&&l.push(ki(new q,v))}i=new E(l,t)}var g,x,T,S=di(e,"gradientUnits",!0)!=="userSpaceOnUse";return t?(x=(g=oi(e,"cx","cy",!1,S,"50%","50%")).add(di(e,"r",!1,!1,S,"50%"),0),T=oi(e,"fx","fy",!0,S)):(g=oi(e,"x1","y1",!1,S,"0%","0%"),x=oi(e,"x2","y2",!1,S,"100%","0%")),ki(new At(i,g,x,T),e)._scaleToBounds=S,null}function Ai(e,t,i,r){if(e.transform){for(var l=(r.getAttribute(i)||"").split(/\)\s*/g),d=new ft,f=0,v=l.length;f<v&&(x=l[f]);f++){for(var g=x.split(/\(\s*/),x=g[0],T=g[1].split(/[\s,]+/g),S=0,D=T.length;S<D;S++)T[S]=parseFloat(T[S]);switch(x){case"matrix":d.append(new ft(T[0],T[1],T[2],T[3],T[4],T[5]));break;case"rotate":d.rotate(T[0],T[1]||0,T[2]||0);break;case"translate":d.translate(T[0],T[1]||0);break;case"scale":d.scale(T);break;case"skewX":d.skew(T[0],0);break;case"skewY":d.skew(0,T[0])}}e.transform(d)}}function ji(e,t,i){(i=e[i=i==="fill-opacity"?"getFillColor":"getStrokeColor"]&&e[i]())&&i.setAlpha(parseFloat(t))}function Fi(e,t,i){var r;return!(r=(r=e.attributes[t])&&r.value)&&e.style&&(t=O.camelize(t),(r=e.style[t])||i.node[t]===i.parent[t]||(r=i.node[t])),r?r==="none"?null:r:k}function ki(e,t,i){var r=t.parentNode,l={node:Se.getStyles(t)||{},parent:!i&&!/^defs$/i.test(r.tagName)&&Se.getStyles(r)||{}};return O.each(mt,function(d,f){var v=Fi(t,f,l);e=v!==k&&d(e,v,f,t,l)||e}),e}function zi(e){return(e=(e=(e=e&&e.match(/\((?:["'#]*)([^"')]+)/))&&e[1])&&Ne[G?e.replace(G.location.href.split("#")[0]+"#",""):e])&&e._scaleToBounds&&((e=e.clone())._scaleToBounds=!0),e}function Mi(e,t,i){var r,l,d,f=(D=e.nodeName.toLowerCase())!=="#document",v=W.body;i&&f&&(Ae=jt.getView().getSize(),Ae=_i(e,null,null,!0)||Ae,r=pt.create("svg",{style:"stroke-width: 1px; stroke-miterlimit: 10"}),l=e.parentNode,d=e.nextSibling,r.appendChild(e),v.appendChild(r));var g=jt.settings,x=g.applyMatrix,T=g.insertItems;g.applyMatrix=!1,g.insertItems=!1;var S=Ze[D],D=S&&S(e,D,t,i)||null;return g.insertItems=T,g.applyMatrix=x,D&&(!f||D instanceof Dt||(D=ki(D,e,i)),g=t.onImport,f=f&&e.getAttribute("data-paper-data"),g&&(D=g(e,D,t)||D),t.expandShapes&&D instanceof Gt&&(D.remove(),D=D.toPath()),f&&(D._data=JSON.parse(f))),r&&(v.removeChild(r),l&&(d?l.insertBefore(e,d):l.appendChild(e))),i&&(Ne={},D&&O.pick(t.applyMatrix,x)&&D.matrix.apply(!0,!0)),D}function Ui(e,t,i){if(!e)return null;t=typeof t=="function"?{onLoad:t}:t||{};var r=jt,l=null;function d(x){try{var T=typeof x=="object"?x:new R.DOMParser().parseFromString(x.trim(),"image/svg+xml");if(!T.nodeName)throw T=null,new Error("Unsupported SVG source: "+e);jt=r,l=Mi(T,t,!0),t&&t.insert===!1||i._insertItem(k,l);var S=t.onLoad;S&&S(l,x)}catch(D){f(D)}}function f(x,T){var S=t.onError;if(!S)throw new Error(x);S(x,T)}if(typeof e!="string"||/^[\s\S]*</.test(e)){if(typeof File<"u"&&e instanceof File){var v=new FileReader;return v.onload=function(){d(v.result)},v.onerror=function(){f(v.error)},v.readAsText(e)}d(e)}else{var g=W.getElementById(e);g?d(g):function(x){var T=new R.XMLHttpRequest;T.open((x.method||"get").toUpperCase(),x.url,O.pick(x.async,!0)),x.mimeType&&T.overrideMimeType(x.mimeType),T.onload=function(){var S=T.status;S===0||S===200?x.onLoad&&x.onLoad.call(T,T.responseText):T.onerror()},T.onerror=function(){var S=T.status,D='Could not load "'+x.url+'" (Status: '+S+")";if(!x.onError)throw new Error(D);x.onError(D,S)},T.send(null)}({url:e,async:!0,onLoad:d,onError:f})}return l}nt={Group:ci,Layer:ci,Raster:function(e,t){var i=si(e._matrix,!0),r=e.getSize(),l=e.getImage();return i.x-=r.width/2,i.y-=r.height/2,i.width=r.width,i.height=r.height,i.href=t.embedImages==0&&l&&l.src||e.toDataURL(),pt.create("image",i,Ce)},Path:function(e,t){var i=t.matchShapes;if(i){var r=e.toShape(!1);if(r)return yi(r)}var l=e._segments,d=l.length,f=si(e._matrix);if(i&&2<=d&&!e.hasHandles())if(2<d){for(var v=e._closed?"polygon":"polyline",g=[],x=0;x<d;x++)g.push(Ce.point(l[x]._point));f.points=g.join(" ")}else v="line",r=l[0]._point,i=l[1]._point,f.set({x1:r.x,y1:r.y,x2:i.x,y2:i.y});else v="path",f.d=e.getPathData(null,t.precision);return pt.create(v,f,Ce)},Shape:yi,CompoundPath:function(e,t){var i=si(e._matrix);return(t=e.getPathData(null,t.precision))&&(i.d=t),pt.create("path",i,Ce)},SymbolItem:function(e,t){var i=si(e._matrix,!0),r=e._definition,l=wi(r,"symbol"),d=r._item;return e=d.getStrokeBounds(),l||((l=pt.create("symbol",{viewBox:Ce.rectangle(e)})).appendChild(gi(d,t)),ui(r,l,"symbol")),i.href="#"+l.id,i.x+=e.x,i.y+=e.y,i.width=e.width,i.height=e.height,i.overflow="visible",pt.create("use",i,Ce)},PointText:function(e){var t=pt.create("text",si(e._matrix,!0),Ce);return t.textContent=e._content,t}},dt.inject({exportSVG:function(e){return Ft(gi(this,e=Mt(e),!0),e)}}),zt.inject({exportSVG:function(e){e=Mt(e);var t=this._children,i=this.getView(),r=O.pick(e.bounds,"view"),l=(l=e.matrix||r==="view"&&i._matrix)&&ft.read([l]);i=r==="view"?new Fe([0,0],i.getViewSize()):r==="content"?dt._getBounds(t,l,{stroke:!0}).rect:Fe.read([r],0,{readNull:!0}),r={version:"1.1",xmlns:pt.svg,"xmlns:xlink":pt.xlink},i&&(r.width=i.width,r.height=i.height,(i.x||i.x===0||i.y||i.y===0)&&(r.viewBox=Ce.rectangle(i)));var d=r=pt.create("svg",r,Ce);l&&!l.isIdentity()&&(d=r.appendChild(pt.create("g",si(l),Ce)));for(var f=0,v=t.length;f<v;f++)d.appendChild(gi(t[f],e,!0));return Ft(r,e)}}),Ne={},Ze={"#document":function(e,t,i,r){for(var l=e.childNodes,d=0,f=l.length;d<f;d++){var v=l[d];if(v.nodeType===1)return Mi(v,i,r)}},g:xi,svg:xi,clippath:xi,polygon:Di,polyline:Di,path:function(e){return Xt.create(e.getAttribute("d"))},lineargradient:Ii,radialgradient:Ii,image:function(e){var t=new ei(di(e,"href",!0));return t.on("load",function(){var i=_i(e);this.setSize(i),i=oi(e).add(i.divide(2)),this._matrix.append(new ft().translate(i))}),t},symbol:function(e,t,i,r){return new bt(xi(e,t,i,r),!0)},defs:xi,use:function(e){var t=(di(e,"href",!0)||"").substring(1);return t=Ne[t],e=oi(e),t?t instanceof bt?t.place(e):t.clone().translate(e):null},circle:function(e){return new Gt.Circle(oi(e,"cx","cy"),di(e,"r"))},ellipse:function(e){return new Gt.Ellipse({center:oi(e,"cx","cy"),radius:_i(e,"rx","ry")})},rect:function(e){return new Gt.Rectangle(new Fe(oi(e),_i(e)),_i(e,"rx","ry"))},line:function(e){return new St.Line(oi(e,"x1","y1"),oi(e,"x2","y2"))},text:function(e){var t=new Et(oi(e).add(oi(e,"dx","dy")));return t.setContent(e.textContent.trim()||""),t},switch:xi},mt=O.set(O.each(ti,function(e){this[e.attribute]=function(t,i){t[e.set]&&(t[e.set](Oi(i,e.type,e.fromSVG)),e.type!=="color"||(i=t[e.get]())&&i._scaleToBounds&&(t=t.getBounds(),i.transform(new ft().translate(t.getPoint()).scale(t.getSize()))))}},{}),{id:function(e,t){(Ne[t]=e).setName&&e.setName(t)},"clip-path":function(e,t){if(t=zi(t)){if((t=t.clone()).setClipMask(!0),!(e instanceof Dt))return new Dt(t,e);e.insertChild(0,t)}},gradientTransform:Ai,transform:Ai,"fill-opacity":ji,"stroke-opacity":ji,visibility:function(e,t){e.setVisible&&e.setVisible(t==="visible")},display:function(e,t){e.setVisible&&e.setVisible(t!==null)},"stop-color":function(e,t){e.setColor&&e.setColor(t)},"stop-opacity":function(e,t){e._color&&e._color.setAlpha(parseFloat(t))},offset:function(e,t){var i;e.setOffset&&(i=t.match(/(.*)%$/),e.setOffset(i?i[1]/100:parseFloat(t)))},viewBox:function(e,t,i,r,l){var d,f,v=new Fe(Oi(t,"array"));t=_i(r,null,null,!0),e instanceof Dt?(f=t?t.divide(v.getSize()):1,d=new ft().scale(f).translate(v.getPoint().negate()),f=e):e instanceof bt&&(t&&v.setSize(t),f=e._item),f&&(Fi(r,"overflow",l)!=="visible"&&((v=new Gt.Rectangle(v)).setClipMask(!0),f.addChild(v)),d&&f.transform(d))}}),dt.inject({importSVG:function(e,t){return Ui(e,t,this)}}),zt.inject({importSVG:function(e,t){return this.activate(),Ui(e,t,this)}});var jt=new(ye.inject(O.exports,{Base:O,Numerical:Ve,Key:ge,DomEvent:_e,DomElement:Se,document:W,window:G,Symbol:bt,PlacedSymbol:ni}));return jt.agent.node&&w(999)(jt),(A=typeof(_=jt)=="function"?_.call(a,w,a,y):_)!==void 0&&(y.exports=A),jt}).call(this,typeof self=="object"?self:null)},72:y=>{var a=[];function w(R){for(var k=-1,G=0;G<a.length;G++)if(a[G].identifier===R){k=G;break}return k}function _(R,k){for(var G={},W=[],O=0;O<R.length;O++){var $=R[O],ye=k.base?$[0]+k.base:$[0],we=G[ye]||0,ht="".concat(ye," ").concat(we);G[ye]=we+1;var tt=w(ht),Ve={css:$[1],media:$[2],sourceMap:$[3],supports:$[4],layer:$[5]};if(tt!==-1)a[tt].references++,a[tt].updater(Ve);else{var Tt=A(Ve,k);k.byIndex=O,a.splice(O,0,{identifier:ht,updater:Tt,references:1})}W.push(ht)}return W}function A(R,k){var G=k.domAPI(k);return G.update(R),function(W){if(W){if(W.css===R.css&&W.media===R.media&&W.sourceMap===R.sourceMap&&W.supports===R.supports&&W.layer===R.layer)return;G.update(R=W)}else G.remove()}}y.exports=function(R,k){var G=_(R=R||[],k=k||{});return function(W){W=W||[];for(var O=0;O<G.length;O++){var $=w(G[O]);a[$].references--}for(var ye=_(W,k),we=0;we<G.length;we++){var ht=w(G[we]);a[ht].references===0&&(a[ht].updater(),a.splice(ht,1))}G=ye}}},659:y=>{var a={};y.exports=function(w,_){var A=function(R){if(a[R]===void 0){var k=document.querySelector(R);if(window.HTMLIFrameElement&&k instanceof window.HTMLIFrameElement)try{k=k.contentDocument.head}catch{k=null}a[R]=k}return a[R]}(w);if(!A)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");A.appendChild(_)}},540:y=>{y.exports=function(a){var w=document.createElement("style");return a.setAttributes(w,a.attributes),a.insert(w,a.options),w}},56:(y,a,w)=>{y.exports=function(_){var A=w.nc;A&&_.setAttribute("nonce",A)}},825:y=>{y.exports=function(a){if(typeof document>"u")return{update:function(){},remove:function(){}};var w=a.insertStyleElement(a);return{update:function(_){(function(A,R,k){var G="";k.supports&&(G+="@supports (".concat(k.supports,") {")),k.media&&(G+="@media ".concat(k.media," {"));var W=k.layer!==void 0;W&&(G+="@layer".concat(k.layer.length>0?" ".concat(k.layer):""," {")),G+=k.css,W&&(G+="}"),k.media&&(G+="}"),k.supports&&(G+="}");var O=k.sourceMap;O&&typeof btoa<"u"&&(G+=`
1522
+ /*# sourceMappingURL=data:application/json;base64,`.concat(btoa(unescape(encodeURIComponent(JSON.stringify(O))))," */")),R.styleTagTransform(G,A,R.options)})(w,a,_)},remove:function(){(function(_){if(_.parentNode===null)return!1;_.parentNode.removeChild(_)})(w)}}}},113:y=>{y.exports=function(a,w){if(w.styleSheet)w.styleSheet.cssText=a;else{for(;w.firstChild;)w.removeChild(w.firstChild);w.appendChild(document.createTextNode(a))}}},906:y=>{y.exports=n},999:()=>{},965:()=>{}},u={};function h(y){var a=u[y];if(a!==void 0)return a.exports;var w=u[y]={id:y,exports:{}};return o[y].call(w.exports,w,w.exports,h),w.exports}h.n=y=>{var a=y&&y.__esModule?()=>y.default:()=>y;return h.d(a,{a}),a},h.d=(y,a)=>{for(var w in a)h.o(a,w)&&!h.o(y,w)&&Object.defineProperty(y,w,{enumerable:!0,get:a[w]})},h.o=(y,a)=>Object.prototype.hasOwnProperty.call(y,a),h.r=y=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(y,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(y,"__esModule",{value:!0})},h.nc=void 0;var m={};return(()=>{h.r(m),h.d(m,{AnnotationToolbar:()=>Mt,AnnotationToolkit:()=>Ee,AnnotationUITool:()=>wt,BrushTool:()=>_e,DefaultTool:()=>dt,EllipseTool:()=>ct,FeatureCollectionUI:()=>Ii,FeatureUI:()=>_i,FileDialog:()=>Fi,LayerUI:()=>Ai,LinestringTool:()=>ti,OSDPaperjsAnnotation:()=>vt,PaperOffset:()=>Se,PaperOverlay:()=>F,PointTextTool:()=>V,PointTool:()=>B,PolygonTool:()=>kt,RasterTool:()=>Ft,RectangleTool:()=>ke,RotationControlOverlay:()=>Te,ScreenshotOverlay:()=>$e,SelectTool:()=>ci,StyleTool:()=>Wt,ToolBase:()=>Ct,TransformTool:()=>wi,WandTool:()=>ii});let y=h(906),a=h(292);var w=h(72),_=h.n(w),A=h(825),R=h.n(A),k=h(659),G=h.n(k),W=h(56),O=h.n(W),$=h(540),ye=h.n($),we=h(113),ht=h.n(we),tt=h(676),Ve={};Ve.styleTagTransform=ht(),Ve.setAttributes=O(),Ve.insert=G().bind(null,"head"),Ve.domAPI=R(),Ve.insertStyleElement=ye(),_()(tt.A,Ve),tt.A&&tt.A.locals&&tt.A.locals;var Tt=h(946),Q={};Q.styleTagTransform=ht(),Q.setAttributes=O(),Q.insert=G().bind(null,"head"),Q.domAPI=R(),Q.insertStyleElement=ye(),_()(Tt.A,Q),Tt.A&&Tt.A.locals&&Tt.A.locals;class Ct{constructor(s){let c;this.project={getZoom:()=>s.view.getZoom(),toolLayer:s.project.layers.toolLayer||s.project.activeLayer,paperScope:s,overlay:s.overlay};let p=this;this._identityMatrix=new s.Matrix,this.extensions={onActivate:()=>{},onDeactivate:()=>{}},this.tool=new s.Tool,this.tool._toolObject=this,this.tool.extensions={onKeyUp:()=>{},onKeyDown:()=>{}},this.tool.onKeyDown=function(b){c||b.key!=="shift"||(c=!0,p.onDeactivate()),this.extensions.onKeyDown(b),p.onKeyDown(b)},this.tool.onKeyUp=function(b){b.key=="shift"&&(c=!1,p.onActivate()),this.extensions.onKeyUp(b),p.onKeyUp(b)},this.tool.onMouseDown=b=>{this.onMouseDown(b)},this.tool.onMouseDrag=b=>{this.onMouseDrag(b)},this.tool.onMouseMove=b=>{this.onMouseMove(b)},this.tool.onMouseUp=b=>{this.onMouseUp(b)},this.listeners={}}getTolerance(s,c=null){return c||(c=this.item),s/((c==null?void 0:c.layer.scaling.x)||1)/this.project.getZoom()}isActive(){return this._active}activate(){this.tool.activate(),this.onActivate()}deactivate(s){this.onDeactivate(s)}onActivate(){this.captureUserInput(!0),this.project.overlay.addEventListener("wheel",this.tool.onMouseWheel),this.project.toolLayer.bringToFront(),this.extensions.onActivate()}onDeactivate(s=!1){this.captureUserInput(!1),this.project.overlay.removeEventListener("wheel",this.tool.onMouseWheel),this.project.toolLayer.sendToBack(),this.extensions.onDeactivate(s)}addEventListener(s,c){this.listeners[s]=this.listeners[s]||[],this.listeners[s].push(c)}broadcast(s,...c){let p=this.listeners[s];p&&p.forEach(b=>b(...c))}captureUserInput(s=!0){this.project.overlay.setOSDMouseNavEnabled(!s)}onMouseDown(){}onMouseMove(){}onMouseDrag(){}onMouseUp(){}onKeyDown(){}onKeyUp(){}}class it{constructor(){}getSqDist(s,c){var p=s.x-c.x,b=s.y-c.y;return p*p+b*b}getSqSegDist(s,c,p){var b=c.x,C=c.y,P=p.x-b,M=p.y-C;if(P!==0||M!==0){var z=((s.x-b)*P+(s.y-C)*M)/(P*P+M*M);z>1?(b=p.x,C=p.y):z>0&&(b+=P*z,C+=M*z)}return(P=s.x-b)*P+(M=s.y-C)*M}simplifyRadialDist(s,c){for(var p,b=s[0],C=[b],P=1,M=s.length;P<M;P++)p=s[P],this.getSqDist(p,b)>c&&(C.push(p),b=p);return b!==p&&C.push(p),C}simplifyDPStep(s,c,p,b,C){for(var P,M=b,z=c+1;z<p;z++){var J=this.getSqSegDist(s[z],s[c],s[p]);J>M&&(P=z,M=J)}M>b&&(P-c>1&&this.simplifyDPStep(s,c,P,b,C),C.push(s[P]),p-P>1&&this.simplifyDPStep(s,P,p,b,C))}simplifyDouglasPeucker(s,c){var p=s.length-1,b=[s[0]];return this.simplifyDPStep(s,0,p,c,b),b.push(s[p]),b}simplify(s,c,p){if(s.length<=2)return s;var b=c!==void 0?c*c:1;return s=p?s:this.simplifyRadialDist(s,b),this.simplifyDouglasPeucker(s,b)}}class wt extends Ct{constructor(s){super(s),this._active=!1,this._items=[],this._item=null,this.simplifier=new it,this.tool.onMouseDown=c=>{this.onMouseDown(this._transformEvent(c))},this.tool.onMouseDrag=c=>{this.onMouseDrag(this._transformEvent(c))},this.tool.onMouseMove=c=>{this.onMouseMove(this._transformEvent(c))},this.tool.onMouseUp=c=>{this.onMouseUp(this._transformEvent(c))}}isActive(){return this._active}activate(){if(this._active)return;this._active=!0,this.getSelectedItems(),this._setTargetLayer();let s=this.project.paperScope.getActiveTool();this.tool.activate(),this.toolbarControl.activate(),s&&s!=this&&s.deactivate(!0),this.raiseCanvasZIndex(),this.onActivate(),this.broadcast("activated",{target:this})}deactivate(s){this._active&&(this._active=!1,this.toolbarControl.deactivate(),this.resetCanvasZIndex(),this.onDeactivate(s),this.broadcast("deactivated",{target:this}))}raiseCanvasZIndex(){const s=this.project.paperScope.overlay.viewer,c=s.canvas;this._canvasPriorZIndex=window.getComputedStyle(c)["z-index"];const p=Array.from(s.canvas.parentElement.children).filter(C=>C!==c),b=Math.max(...p.map(C=>{const P=window.getComputedStyle(C)["z-index"];return P==="auto"?0:parseInt(P)}));c.style["z-index"]=b+1}resetCanvasZIndex(){this.project.paperScope.overlay.viewer.canvas.style["z-index"]=this._canvasPriorZIndex}getToolbarControl(){return this.toolbarControl}setToolbarControl(s){return this.toolbarControl=s,this.toolbarControl}refreshItems(){return this.getSelectedItems()}getSelectedItems(){this._items=this.project.paperScope.findSelectedItems(),this._itemToCreate=this.project.paperScope.findSelectedNewItem()}selectionChanged(){this.getSelectedItems(),this._setTargetLayer(),this.onSelectionChanged()}onSelectionChanged(){}get items(){return this._items}get item(){return this._items.length==1?this._items[0]:null}get itemToCreate(){return this._itemToCreate}get targetLayer(){return this._targetLayer}get targetMatrix(){return this.targetLayer?this.targetLayer.matrix:this._identityMatrix}doSimplify(s){s&&!Array.isArray(s)&&(s=[s]),s||(s=this.items);for(const c of s){let p=10/this.project.getZoom(),b=2.5/this.project.getZoom();const C=c.clone();let P=[];(C.children||[C]).forEach(z=>{let J=z.segments.map(Y=>(Y.point.subtract(Y.previous.point).length<p&&Y.point.subtract(Y.next.point).length<p&&(Y.point.x=(Y.point.x+Y.previous.point.x+Y.next.point.x)/3,Y.point.y=(Y.point.y+Y.previous.point.y+Y.next.point.y)/3),Y.point));J.push(J[0]);let X=this.simplifier.simplify(J,b,!0);z.segments=X,(z.segments.length<3||Math.abs(z.area)<b*b)&&P.push(z)}),P.forEach(z=>z.remove());let M=C.unite(C,{insert:!1}).reduce().toCompoundPath();if(C._children?(C.removeChildren(),C.addChildren(M.children)):C.setSegments(M.children[0].segments),!c.isBoundingElement){let z=c.parent.children.filter(J=>J.isBoundingElement);C.applyBounds(z)}M.remove(),c._children?(c.removeChildren(),c.addChildren(C.children)):c.setSegments(C.segments),C.remove()}}_setTargetLayer(){if(this.item)this._targetLayer=this.item.layer;else if(this.itemToCreate)this._targetLayer=this.itemToCreate.layer;else if(this.items){let s=new Set(this.items.map(c=>c.layer));s.size===1?this._targetLayer=s.values().next().value:this._targetLayer=this.project.overlay.viewer.viewport.paperLayer}else this._targetLayer=this.project.paperScope.project.activeLayer}_transformEvent(s){let c=this.targetMatrix,p={point:c.inverseTransform(s.point),downPoint:c.inverseTransform(s.downPoint),lastPoint:c.inverseTransform(s.lastPoint),middlePoint:c.inverseTransform(s.middlePoint)},b=s.point.subtract(s.delta);return p.delta=p.point.subtract(c.inverseTransform(b)),s.original={point:s.point,downPoint:s.downPoint,lastPoint:s.lastPoint,middlePoint:s.middlePoint,delta:s.delta},Object.assign(s,p),s}}class Fe{constructor(s){this._active=!1;let c=document.createElement("button");c.classList.add("btn","invisible"),c.textContent="Generic Tool",this.button=new y.Button({tooltip:"Generic Tool",element:c,onClick:function(p){p.eventSource.element.disabled||(s._active?s.deactivate(!0):s.activate())}}),this.button.configure=function(p,b){this.element.title=b,this.element.replaceChildren(p),this.element.classList.remove("invisible"),this.tooltip=b},this.dropdown=document.createElement("div"),this.dropdown.classList.add("dropdown"),this.tool=s}isEnabledForMode(s){return!1}activate(){this._active||(this._active=!0,this.button.element.classList.add("active"),this.dropdown.classList.add("active"))}deactivate(s){this._active&&(this._active=!1,this.button.element.classList.remove("active"),this.dropdown.classList.remove("active"))}}const Lt={"fa-pen-nib":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M368.4 18.3L312.7 74.1 437.9 199.3l55.7-55.7c21.9-21.9 21.9-57.3 0-79.2L447.6 18.3c-21.9-21.9-57.3-21.9-79.2 0zM288 94.6l-9.2 2.8L134.7 140.6c-19.9 6-35.7 21.2-42.3 41L3.8 445.8c-3.8 11.3-1 23.9 7.3 32.4L164.7 324.7c-3-6.3-4.7-13.3-4.7-20.7c0-26.5 21.5-48 48-48s48 21.5 48 48s-21.5 48-48 48c-7.4 0-14.4-1.7-20.7-4.7L33.7 500.9c8.6 8.3 21.1 11.2 32.4 7.3l264.3-88.6c19.7-6.6 35-22.4 41-42.3l43.2-144.1 2.8-9.2L288 94.6z"/></svg>',"fa-edit":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z"/></svg>',"fa-up-down-left-right":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32v96H128V192c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V288h96v96H192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H288V288h96v32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6v32H288V128h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z"/></svg>',"fa-palette":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M512 256c0 .9 0 1.8 0 2.7c-.4 36.5-33.6 61.3-70.1 61.3H344c-26.5 0-48 21.5-48 48c0 3.4 .4 6.7 1 9.9c2.1 10.2 6.5 20 10.8 29.9c6.1 13.8 12.1 27.5 12.1 42c0 31.8-21.6 60.7-53.4 62c-3.5 .1-7 .2-10.6 .2C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z"/></svg>',"fa-arrow-pointer":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 55.2V426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320H297.9c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"/></svg>',"fa-vector-square":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M368 80h32v32H368V80zM352 32c-17.7 0-32 14.3-32 32H128c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v64c0 17.7 14.3 32 32 32V352c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32H320c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32V160c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H352zM96 160c17.7 0 32-14.3 32-32H320c0 17.7 14.3 32 32 32V352c-17.7 0-32 14.3-32 32H128c0-17.7-14.3-32-32-32V160zM48 400H80v32H48V400zm320 32V400h32v32H368zM48 112V80H80v32H48z"/></svg>',"fa-image":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M448 80c8.8 0 16 7.2 16 16V415.8l-5-6.5-136-176c-4.5-5.9-11.6-9.3-19-9.3s-14.4 3.4-19 9.3L202 340.7l-30.5-42.7C167 291.7 159.8 288 152 288s-15 3.7-19.5 10.1l-80 112L48 416.3l0-.3V96c0-8.8 7.2-16 16-16H448zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm80 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z"/></svg>',"fa-draw-polygon":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M96 151.4V360.6c9.7 5.6 17.8 13.7 23.4 23.4H328.6c0-.1 .1-.2 .1-.3l-4.5-7.9-32-56 0 0c-1.4 .1-2.8 .1-4.2 .1c-35.3 0-64-28.7-64-64s28.7-64 64-64c1.4 0 2.8 0 4.2 .1l0 0 32-56 4.5-7.9-.1-.3H119.4c-5.6 9.7-13.7 17.8-23.4 23.4zM384.3 352c35.2 .2 63.7 28.7 63.7 64c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32H119.4c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4V151.4C12.9 140.4 0 119.7 0 96C0 60.7 28.7 32 64 32c23.7 0 44.4 12.9 55.4 32H328.6c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 35.3-28.5 63.8-63.7 64l-4.5 7.9-32 56-2.3 4c4.2 8.5 6.5 18 6.5 28.1s-2.3 19.6-6.5 28.1l2.3 4 32 56 4.5 7.9z"/></svg>',"fa-font":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M254 52.8C249.3 40.3 237.3 32 224 32s-25.3 8.3-30 20.8L57.8 416H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-1.8l18-48H303.8l18 48H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H390.2L254 52.8zM279.8 304H168.2L224 155.1 279.8 304z"/></svg>',"fa-map-pin":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M16 144a144 144 0 1 1 288 0A144 144 0 1 1 16 144zM160 80c8.8 0 16-7.2 16-16s-7.2-16-16-16c-53 0-96 43-96 96c0 8.8 7.2 16 16 16s16-7.2 16-16c0-35.3 28.7-64 64-64zM128 480V317.1c10.4 1.9 21.1 2.9 32 2.9s21.6-1 32-2.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32z"/></svg>',"fa-circle":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z"/></svg>',"fa-hand":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V336c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64H304c97.2 0 176-78.8 176-176V128c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V32z"/></svg>',"fa-brush":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M162.4 6c-1.5-3.6-5-6-8.9-6h-19c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6H48C21.5 0 0 21.5 0 48V224v22.4V256H9.6 374.4 384v-9.6V224 48c0-26.5-21.5-48-48-48H230.5c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6zM0 288v32c0 35.3 28.7 64 64 64h64v64c0 35.3 28.7 64 64 64s64-28.7 64-64V384h64c35.3 0 64-28.7 64-64V288H0zM192 432a16 16 0 1 1 0 32 16 16 0 1 1 0-32z"/></svg>',"fa-rotate":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M142.9 142.9c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5c0 0 0 0 0 0H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5c7.7-21.8 20.2-42.3 37.8-59.8zM16 312v7.6 .7V440c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l41.6-41.6c87.6 86.5 228.7 86.2 315.8-1c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.2 62.2-162.7 62.5-225.3 1L185 329c6.9-6.9 8.9-17.2 5.2-26.2s-12.5-14.8-22.2-14.8H48.4h-.7H40c-13.3 0-24 10.7-24 24z"/></svg>',"fa-pencil":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1v32c0 8.8 7.2 16 16 16h32zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z"/></svg>',"fa-save":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V173.3c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32H64zm0 96c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V128zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"/></svg>',"fa-wand-magic-sparkles":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M234.7 42.7L197 56.8c-3 1.1-5 4-5 7.2s2 6.1 5 7.2l37.7 14.1L248.8 123c1.1 3 4 5 7.2 5s6.1-2 7.2-5l14.1-37.7L315 71.2c3-1.1 5-4 5-7.2s-2-6.1-5-7.2L277.3 42.7 263.2 5c-1.1-3-4-5-7.2-5s-6.1 2-7.2 5L234.7 42.7zM46.1 395.4c-18.7 18.7-18.7 49.1 0 67.9l34.6 34.6c18.7 18.7 49.1 18.7 67.9 0L529.9 116.5c18.7-18.7 18.7-49.1 0-67.9L495.3 14.1c-18.7-18.7-49.1-18.7-67.9 0L46.1 395.4zM484.6 82.6l-105 105-23.3-23.3 105-105 23.3 23.3zM7.5 117.2C3 118.9 0 123.2 0 128s3 9.1 7.5 10.8L64 160l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L128 160l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L128 96 106.8 39.5C105.1 35 100.8 32 96 32s-9.1 3-10.8 7.5L64 96 7.5 117.2zm352 256c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L416 416l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L480 416l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L480 352l-21.2-56.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L416 352l-56.5 21.2z"/></svg>',"fa-trash-can":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7C140.6 6.8 151.7 0 163.8 0H284.2c12.1 0 23.2 6.8 28.6 17.7L320 32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32h96l7.2-14.3zM32 128H416V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V128zm96 64c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16z"/></svg>',"fa-sitemap":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M208 80c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48h-8v40H464c30.9 0 56 25.1 56 56v32h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H464c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V288c0-4.4-3.6-8-8-8H312v40h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H256c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V280H112c-4.4 0-8 3.6-8 8v32h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V288c0-30.9 25.1-56 56-56H264V192h-8c-26.5 0-48-21.5-48-48V80z"/></svg>',"fa-eye":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z"/></svg>',"fa-eye-slash":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z"/></svg>',"fa-binoculars":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M128 32h32c17.7 0 32 14.3 32 32V96H96V64c0-17.7 14.3-32 32-32zm64 96V448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V388.9c0-34.6 9.4-68.6 27.2-98.3C40.9 267.8 49.7 242.4 53 216L60.5 156c2-16 15.6-28 31.8-28H192zm227.8 0c16.1 0 29.8 12 31.8 28L459 216c3.3 26.4 12.1 51.8 25.8 74.6c17.8 29.7 27.2 63.7 27.2 98.3V448c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V128h99.8zM320 64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V96H320V64zm-32 64V288H224V128h64z"/></svg>',"fa-crop-simple":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32V64H32C14.3 64 0 78.3 0 96s14.3 32 32 32H64V384c0 35.3 28.7 64 64 64H352V384H128V32zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32V448h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H448l0-256c0-35.3-28.7-64-64-64L160 64v64l224 0 0 352z"/></svg>',"fa-plus":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z"/></svg>',"fa-caret-down":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"/></svg>',"fa-caret-up":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z"/></svg>',"fa-camera":'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M149.1 64.8L138.7 96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H373.3L362.9 64.8C356.4 45.2 338.1 32 317.4 32H194.6c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z"/></svg>'};class ft{constructor(s){this._setupSymbols(s)}makeFaIcon(s,c=!0){const p=document.createElementNS("http://www.w3.org/2000/svg","svg");p.classList.add("icon"),c&&p.setAttribute("fill","currentColor");const b=document.createElementNS("http://www.w3.org/2000/svg","use");return b.setAttribute("href",`#${s}`),p.appendChild(b),p}convertFaIcons(s,c,p=["fa","fa-solid"]){c||(c=Object.keys(Lt));for(const b of c)s.querySelectorAll(`.${b}`).forEach(C=>{const P=this.makeFaIcon(b);C.classList.remove(b,...p),C.appendChild(P)})}_setupSymbols(s){const c=document.createElement("div");s.appendChild(c),c.style.position="absolute",c.style.display="none";const p=document.createElementNS("http://www.w3.org/2000/svg","svg");c.appendChild(p);let b="";for(const[C,P]of Object.entries(Lt))b+=P.replace("<svg",`<symbol id="${C}"`).replace("/svg>","/symbol>");p.innerHTML=b}}function _t(L,s=!0){const c=document.createElement("template");let p;return Lt[L]?(c.innerHTML=Lt[L],p=c.content.children[0]):p=document.createElementNS("http://www.w3.org/2000/svg","svg"),p.classList.add("icon"),s&&p.setAttribute("fill","currentColor"),p}function zt(L,s,c=["fa","fa-solid"]){s||(s=Object.keys(Lt));for(const p of s)L.querySelectorAll(`.${p}`).forEach(b=>{const C=_t(p);b.classList.remove(p,...c),b.appendChild(C)})}class dt extends wt{constructor(s){super(s),this.setToolbarControl(new Dt(this))}onDeactivate(){}onActivate(){this.resetCanvasZIndex()}}class Dt extends Fe{constructor(s){super(s);const c=_t("fa-hand");this.button.configure(c,"Image Navigation Tool")}isEnabledForMode(s){return!0}}class Wt extends wt{constructor(s){super(s);let c=this,p=this.tool;this._ignoreNextSelectionChange=!1,this._targetItems=[],this.setToolbarControl(new Gt(this)),this.colorpicker=new ei(12,9,this.project.toolLayer),this.cursor=this.colorpicker.element,this.cursor.applyRescale(),this.extensions.onActivate=function(){c.pickingColor&&(c.project.overlay.addClass("tool-action").setAttribute("data-tool-action","colorpicker"),c.cursor.visible=!0),c.selectionChanged(),c.captureUserInput(!!c.pickingColor)},this.extensions.onDeactivate=function(b){c.project.overlay.removeClass("tool-action").setAttribute("data-tool-action",""),c.cursor.visible=!1,b&&c.cancelColorpicker()},p.extensions.onKeyUp=function(b){b.key=="escape"&&c.cancelColorpicker()},this.project.paperScope.project.on("edit-style",b=>{this.activateForItem(b.item)})}onMouseMove(s){this.pickingColor&&this.colorpicker.updatePosition(s.original.point)}onMouseUp(){this.pickingColor&&this.cursor.visible&&(this._colorpickerPromise&&this._colorpickerPromise.resolve(this.colorpicker.selectedColor),this._colorpickerPromise=null,this.cancelColorpicker())}activateForItem(s){this.targetItems=s,this._ignoreNextSelectionChange=!0,this.activate(),this.toolbarControl.updateDisplay(),this._ignoreNextSelectionChange=!1}onSelectionChanged(){this._ignoreNextSelectionChange||(this.targetItems=this.items,this.toolbarControl.updateDisplay()),this._ignoreNextSelectionChange=!1}get defaultTarget(){return this.project.paperScope.project}get targetItems(){return this._targetItems}set targetItems(s){this._targetItems=s?[s].flat().filter(c=>c.defaultStyle||c.style):[],this._targetItems.length==0&&(this._targetItems=[this.defaultTarget])}get targetItemStyles(){return this._targetItems.map(s=>s.defaultStyle||s.style)}get targetDescription(){if(this._targetItems.length==0)return"No target";if(this._targetItems.length>1)return`${this._targetItems.length} items`;{let s=this._targetItems[0];return s==this.defaultTarget?"Default style":s.displayName}}pickColor(){let s=this;return s.captureUserInput(!0),new Promise(function(c,p){s._colorpickerPromise&&s._colorpickerPromise.reject("Canceled"),s._colorpickerPromise={resolve:c,reject:p},s.activate(),s.pickingColor=!0,s.cursor.visible=!0,s.project.paperScope.project.layers.toolLayer.bringToFront(),s.tool.onMouseMove({point:s.cursor.view.center}),s.project.overlay.addClass("tool-action").setAttribute("data-tool-action","colorpicker")}).finally(()=>{s.captureUserInput(!1)})}cancelColorpicker(){this.cursor.addTo(this.project.toolLayer),this.pickingColor=!1,this.cursor.visible=!1,this.project.overlay.removeClass("tool-action").setAttribute("data-tool-action",""),this._colorpickerPromise&&this._colorpickerPromise.reject("Canceled")}createMaskedImage(s){let c=s.clone(),p=new a.Group([c]),b=this.project.paperScope.view.projectToView(c.bounds),C=b.x,P=b.y,M=c.bounds.width*this.project.getZoom(),z=c.bounds.height*this.project.getZoom(),J=this.project.paperScope.view.pixelRatio;const X=document.createElement("canvas");canvas.setAttribute("width",M*J),canvas.setAttribute("height",z*J),X.getContext("2d").drawImage(this.project.overlay.viewer.drawer.canvas,C*J,P*J,M*J,z*J,0,0,M*J,z*J);let Y=X.toDataURL(),pe=new a.Raster({source:Y,position:c.bounds.center});return pe.scale(1/(J*this.project.getZoom())),p.addChild(pe),p.clipped=!0,p.position.x=p.position.x+500,p}applyStrokeWidth(s){this.targetItems.forEach(c=>{c.defaultStyle&&(c=c.defaultStyle),c.strokeWidth=s,c.rescale&&(c.rescale.strokeWidth=s),c.isGeoJSONFeature&&c.applyRescale()})}applyOpacity(s,c){this.targetItems.forEach(p=>{(p.defaultStyle||p.style)[c]=s,p.isGeoJSONFeature&&(p.updateFillOpacity(),p.updateStrokeOpacity())})}applyColor(s,c,p){c=="fill"?this.applyFillColor(s,p):c=="stroke"?this.applyStrokeColor(s,p):console.warn(`Cannot apply color change - type "${c}" not recognized`)}applyFillColor(s,c){(c?[c]:this.targetItems).forEach(p=>{let b=new a.Color(s);(p.defaultStyle||p.style).fillColor=b,p.isGeoJSONFeature&&p.updateFillOpacity()})}applyStrokeColor(s,c){(c?[c]:this.targetItems).forEach(p=>{let b=new a.Color(s);(p.defaultStyle||p.style).strokeColor=b,p.isGeoJSONFeature&&p.updateStrokeOpacity()})}}class Gt extends Fe{constructor(s){super(s);let c=this;const p=_t("fa-palette");this.button.configure(p,"Style Tool"),this.dropdown.innerHTML=this.uiHTML(),zt(this.dropdown),this._hierarchy=[],this.dropdown.querySelectorAll('[data-action="pick-color"]').forEach(b=>{b.addEventListener("click",function(){let C=this.getAttribute("data-type"),P=c.dropdown.querySelector(`input[type="color"][data-type="${C}"]`);var M;c.dropdown.querySelectorAll('[data-action="pick-color"]').forEach(z=>z.classList.remove("active")),(M=P).offsetWidth||M.offsetHeight||M.getClientRects().length?c.dropdown.querySelectorAll(".colorpicker-row").forEach(z=>z.classList.add("hidden")):(c.dropdown.querySelectorAll(".colorpicker-row").forEach(z=>z.classList.add("hidden")),P.closest(".colorpicker-row").classList.remove("hidden"),this.classList.add("active"))})}),this.dropdown.querySelectorAll('input[type="color"]').forEach(b=>b.addEventListener("input",function(){let C=this.getAttribute("data-type");c.tool.applyColor(this.value,C),C=="fill"&&c.setFillButtonColor(new a.Color(this.value)),C=="stroke"&&c.setStrokeButtonColor(new a.Color(this.value))})),this.dropdown.querySelectorAll('input[type="number"]').forEach(b=>b.addEventListener("input",function(){c.tool.applyStrokeWidth(this.value)})),this.dropdown.querySelectorAll('input[data-action="opacity"]').forEach(b=>b.addEventListener("input",function(){let C=this.getAttribute("data-type"),P=this.getAttribute("data-property");c.tool.applyOpacity(this.value,P),C=="fill"&&c.setFillButtonOpacity(this.value),C=="stroke"&&c.setStrokeButtonOpacity(this.value)})),this.dropdown.querySelectorAll('[data-action="from-image"]').forEach(b=>b.addEventListener("click",function(){c.tool.pickColor().then(C=>{this.parentElement.querySelectorAll('input[type="color"]').forEach(P=>{P.value=C.toCSS(!0),P.dispatchEvent(new Event("input"))})}).catch(C=>{})})),this.dropdown.querySelectorAll('[data-action="from-average"]').forEach(b=>b.addEventListener("click",function(){let C=this.getAttribute("data-type");c.fromAverage(C)})),this.dropdown.querySelectorAll(".style-item").forEach(b=>b.addEventListener("click",function(){let C=c.tool.targetItems,P=C.every(z=>z.selected),M=C.filter(z=>z.isGeoJSONFeature);M.length>0&&(c.tool._ignoreNextSelectionChange=!0,M.forEach(z=>P?z.deselect():z.select())),c.updateTargetDescription()})),this.dropdown.querySelectorAll(".hierarchy-up").forEach(b=>b.addEventListener("click",function(){if(c._hierarchy&&c._hierarchy.length>0)c._hierarchy.index=(c._hierarchy.index+1)%c._hierarchy.length;else{let P=c.tool.targetItems,M=new Set(P.map(z=>z.hierarchy.filter(J=>J.isGeoJSONFeatureCollection&&J!==z)).flat());M.size==0?P.indexOf(c.tool.defaultTarget)>-1?(c._hierarchy=[c.tool.defaultTarget],c._hierarchy.index=0):(c._hierarchy=[P,c.tool.defaultTarget],c._hierarchy.index=1):M.size==1?(c._hierarchy=[c.tool.targetItems,M.values().next().value,c.tool.defaultTarget],c._hierarchy.index=1):(c._hierarchy=[c.tool.targetItems,c.tool.defaultTarget],c._hierarchy.index=1)}let C=c._hierarchy;c.tool.activateForItem(c._hierarchy[c._hierarchy.index]),c._hierarchy=C}))}fromAverage(s){let c=this,p=this.tool.targetItems.map(b=>ni(b).then(C=>{c.tool.applyColor(C,s,b)}));Promise.all(p).then(()=>c.updateDisplay())}isEnabledForMode(s){return!0}uiHTML(){return`
1523
1523
  <div class="style-toolbar">
1524
1524
  <div class="flex-row style-row annotation-ui-buttonbar" >
1525
1525
  <span><span class="hierarchy-up fa-solid fa-sitemap" title='Cycle through hierarchy'></span><span class='style-item' title='Toggle selection'></span></span>
@@ -1540,7 +1540,7 @@ input[type=range] {
1540
1540
  <span class='btn' data-action="from-average" data-type="stroke">Area average</span>
1541
1541
  </div>
1542
1542
  </div>
1543
- `}updateTargetDescription(){let s=this.tool.targetDescription,h=this.tool.targetItems.every(b=>b.selected&&b.isGeoJSONFeature),p=this.dropdown.querySelector(".style-item");p.innerHTML=s,h?p.classList.add("selected"):p.classList.remove("selected")}updateDisplay(){this._hierarchy=[];let s=this.tool.targetItemStyles;this.updateTargetDescription();let h=s.map(L=>L.fillColor);h.length==1||new Set(h.map(L=>L.toCSS())).size==1?this.setFillButtonColor(h[0]):this.setFillButtonColor();let p=s.map(L=>L.strokeColor);p.length==1||new Set(p.map(L=>L.toCSS())).size==1?this.setStrokeButtonColor(p[0]):this.setStrokeButtonColor();let b=s.map(L=>L.fillOpacity);b.length==1||new Set(b).size==1?this.setFillButtonOpacity(b[0]):this.setFillButtonOpacity(1);let A=s.map(L=>L.strokeOpacity);A.length==1||new Set(A).size==1?this.setStrokeButtonOpacity(A[0]):this.setStrokeButtonOpacity(1);let P=s.map(L=>L.rescale?L.rescale.strokeWidth:L.strokeWidth);P.length==1||new Set(P).size==1?this.dropdown.querySelectorAll('input[type="number"]').forEach(L=>L.value=P[0]):this.dropdown.querySelectorAll('input[type="number"]').forEach(L=>L.value="")}setFillButtonColor(s=new a.Color("white")){s||(s=new a.Color("white"));let h=s.toCSS(!0),p=mt(s.toCSS(!0));this.dropdown.querySelectorAll('[data-type="fill"] .preview .text').forEach(b=>b.style.color=p),this.dropdown.querySelectorAll('[data-type="fill"] .preview .color').forEach(b=>{b.style.backgroundColor=h,b.style.outlineColor=p}),this.dropdown.querySelectorAll('input[type="color"][data-type="fill"]').forEach(b=>b.value=h)}setStrokeButtonColor(s=new a.Color("black")){s||(s=new a.Color("black"));let h=s.toCSS(!0),p=mt(s.toCSS(!0));this.dropdown.querySelectorAll('[data-type="stroke"] .preview .text').forEach(b=>b.style.color=p),this.dropdown.querySelectorAll('[data-type="stroke"] .preview .color').forEach(b=>{b.style.backgroundColor=h,b.style.outlineColor=p}),this.dropdown.querySelectorAll('input[type="color"][data-type="stroke"]').forEach(b=>b.value=h)}setFillButtonOpacity(s){this.dropdown.querySelectorAll('[data-type="fill"] .preview .bg').forEach(h=>h.style.opacity=s),this.dropdown.querySelectorAll('[data-type="fill"][data-action="opacity"]').forEach(h=>h.value=s)}setStrokeButtonOpacity(s){this.dropdown.querySelectorAll('[data-type="stroke"] .preview .bg').forEach(h=>h.style.opacity=s),this.dropdown.querySelectorAll('[data-type="stroke"][data-action="opacity"]').forEach(h=>h.value=s)}}function ei(M,s,h){let p=new a.Group({visible:!1,applyMatrix:!1});function b(){const me=p.view.getFlipped()?p.view.getRotation():180-p.view.getRotation();p.rotate(-me),p.scale(-1,1),p.rotate(me)}this.element=p,h.addChild(p),p.view.on("rotate",me=>p.rotate(-me.rotatedBy)),p.view.on("flip",b),p.numRows=s,p.numColumns=s;let A=document.createElement("canvas");A.height=p.numRows,A.width=p.numColumns;let P=A.getContext("2d",{willReadFrequently:!0}),L=M,N=-(s-1)/2,Y=N+s;for(var X=N;X<Y;X++)for(var Z=N;Z<Y;Z++){let me=new a.Shape.Rectangle({point:[Z*L,X*L],size:[L,L],strokeWidth:.5,strokeColor:"white",fillColor:"white",rescale:{position:[Z*L,X*L],size:[L,L],strokeWidth:.5}});p.addChild(me),Z==0&&X==0&&(p.centerCell=me)}Z=0,X=0;let pe=new a.Shape.Rectangle({point:[Z*L,X*L],size:[L,L],strokeWidth:1,strokeColor:"black",fillColor:null,rescale:{position:[Z*L,X*L],size:[L,L],strokeWidth:1}});p.addChild(pe),Z=0,X=0;let ne=M*(s+2),ie=new a.Shape.Rectangle({point:[Z*L,X*L],size:[ne,ne],strokeWidth:1,strokeColor:"black",fillColor:null,rescale:{position:[Z*L,X*L],size:[ne,ne],strokeWidth:1}});return p.addChild(ie),p.borderElement=ie,ie.sendToBack(),p.applyRescale=function(){p.children.forEach(me=>me.applyRescale())},p.view.getFlipped()&&b(),this.updatePosition=function(me){p.position=me;let de=p.project.overlay.paperToCanvasCoordinates(me.x,me.y),te=Math.round(de.x)-Math.floor(p.numColumns/2),he=Math.round(de.y)-Math.floor(p.numRows/2),ce=p.numColumns,Ee=p.numRows,Re=p.view.pixelRatio,Ae=p.project.overlay.getImageData(te*Re,he*Re,ce*Re,Ee*Re);P.clearRect(0,0,ce,Ee),window.createImageBitmap(Ae).then(Me=>{P.drawImage(Me,0,0,p.numColumns,p.numRows);let Le,Fe,Be=P.getImageData(0,0,ce,Ee);for(Le=0,Fe=1;Le<Be.data.length;Le+=4,Fe+=1)p.children[Fe].fillColor.red=Be.data[Le]/255,p.children[Fe].fillColor.green=Be.data[Le+1]/255,p.children[Fe].fillColor.blue=Be.data[Le+2]/255;p.borderElement.fillColor=p.centerCell.fillColor,this.selectedColor=p.centerCell.fillColor})},this}async function ti(M){let s=(M.project&&M.project.overlay||M.overlay).getViewportRaster();return new Promise(function(h,p){s.onLoad=function(){const b=M.clone();b.transform(b.layer.matrix);let A=s.getAverageColor(b);s.remove(),b.remove(),A||p("Error: The item must be visible on the screen to pick the average color of visible pixels. Please navigate and retry."),h(A)}})}function mt(M){return M=M.replace("#",""),(299*parseInt(M.substr(0,2),16)+587*parseInt(M.substr(2,2),16)+114*parseInt(M.substr(4,2),16))/1e3>=140?"black":"white"}class Yt{constructor(s){if(this.width=s.width,this.height=s.height,this.data=new Uint8Array(s.data),this.data){if(this.height*this.width!=this.data.length)throw"MORPH_DIMENSION_ERROR: incorrect dimensions"}else this.data=Array(this.width*this.height).fill(0);this.dilate=function(){let h=Array.from(this.data),p=this.width,b=this.height;for(var A=0;A<b;A++)for(var P=0;P<p;P++){var L=A*p+P;this.data[L]=h[L]?h[L]:this.adjacentIndices(L).some(function(N){return h[N]})?1:0}return{width:this.width,height:this.height,data:this.data}},this.addBorder=function(){this.width=this.width+2,this.height=this.height+2;let h=this.data;this.data=new Uint8Array(this.width*this.height).fill(0);for(var p=1;p<this.height-1;p++)for(var b=1;b<this.width-1;b++)this.data[p*this.width+b]=h[(p-1)*(this.width-2)+(b-1)];return{width:this.width,height:this.height,data:this.data}},this.adjacentIndices=function(h){var p=h-this.width-1,b=h+this.width-1;let A=this.data.length;return[p,p+1,p+2,h-1,h+1,b,b+1,b+2].filter(function(P){return P>=0&&P<A})}}}const Xe=new class{constructor(){this._map=new WeakMap}set(M,s,h){if(this._map.has(M)||this._map.set(M,new Map),typeof s=="object"){const p=s,b=this._map.get(M);for(const[A,P]of Object.entries(p))b.set(A,P)}else this._map.get(M).set(s,h)}get(M,s){if(this._map.has(M))return s===void 0?Object.fromEntries(this._map.get(M)):this._map.get(M).get(s);this._map.set(M,new Map)}remove(M,s){if(this._map.has(M)){var h=this._map.get(M).delete(s);return this._map.get(M).size===0&&this._map.delete(M),h}}};class ni extends dt{constructor(s){super(s);let h=this,p=this.tool;this.paperScope=h.project.paperScope,this.reduceMode=!1,this.replaceMode=!0,this.floodMode=!0,this.colors={pixelAllowed:new a.Color({red:0,green:0,blue:100}),pixelNotAllowed:new a.Color({red:100,green:0,blue:0}),currentItem:new a.Color({red:0,green:100,blue:0,alpha:.5}),nullColor:new a.Color({red:0,green:0,blue:0,alpha:0}),defaultColor:new a.Color({red:255,green:255,blue:255})},this.threshold=10,this.minThreshold=-1,this.maxThreshold=100,this.startThreshold=10,this.colorPicker=new ei(10,7,h.project.toolLayer),this.colorPicker.element.applyRescale(),this.MagicWand={floodFill:function(A,P,L,N,Y,X){return X?function(Z,pe,ne,ie,me){var de,te,he,ce,Ee,Re,Ae,Me,Le,Fe,Be=Z.data,qe=Z.width,Je=Z.height,Qe=Z.bytes,Ye=-1,ht=qe+1,st=-1,Ke=Je+1,Ue=ne*qe+pe,gt=new Uint8Array(qe*Je),bt=new Uint8Array(me||qe*Je);if(bt[Ue]===1)return null;var it=[Be[Ue*=Qe],Be[Ue+1],Be[Ue+2],Be[Ue+3]],Pt=[{y:ne,left:pe-1,right:pe+1,dir:1}];do{for(Fe=!1,te=(ce=Pt.shift()).left+1;te<ce.right;te++)if(Ue=((Ae=ce.y*qe)+te)*Qe,bt[Ae+te]!==1&&(Fe=!0,gt[Ae+te]=1,bt[Ae+te]=1,!((de=Be[Ue]-it[0])>ie||de<-ie||(de=Be[Ue+1]-it[1])>ie||de<-ie||(de=Be[Ue+2]-it[2])>ie||de<-ie||Be[Ue+3]===0))){for(Re=te-1;Re>-1&&(Ue=(Me=Ae+Re)*Qe,bt[Me]!==1)&&(gt[Me]=1,bt[Me]=1,Re--,!((de=Be[Ue]-it[0])>ie||de<-ie))&&!((de=Be[Ue+1]-it[1])>ie||de<-ie)&&!((de=Be[Ue+2]-it[2])>ie||de<-ie)&&Be[Ue+3]!==0;);for(Ee=te+1;Ee<qe&&(Ue=(Le=Ae+Ee)*Qe,bt[Le]!==1)&&(gt[Le]=1,bt[Le]=1,Ee++,!((de=Be[Ue]-it[0])>ie||de<-ie))&&!((de=Be[Ue+1]-it[1])>ie||de<-ie)&&!((de=Be[Ue+2]-it[2])>ie||de<-ie)&&Be[Ue+3]!==0;);Re<ht&&(ht=Re+1),Ee>Ye&&(Ye=Ee-1),(he=ce.y-ce.dir)>=0&&he<Je&&(Re<ce.left&&Pt.push({y:he,left:Re,right:ce.left,dir:-ce.dir}),ce.right<Ee&&Pt.push({y:he,left:ce.right,right:Ee,dir:-ce.dir})),(he=ce.y+ce.dir)>=0&&he<Je&&Re<Ee&&Pt.push({y:he,left:Re,right:Ee,dir:ce.dir})}Fe&&(ce.y<Ke&&(Ke=ce.y),ce.y>st&&(st=ce.y))}while(Pt.length>0);return{data:gt,width:Z.width,height:Z.height,bounds:{minX:ht,minY:Ke,maxX:Ye,maxY:st},sampleColor:it}}(A,P,L,N,Y):function(Z,pe,ne,ie,me){var de,te,he,ce,Ee,Re,Ae,Me,Le,Fe,Be=Z.data,qe=Z.width,Je=Z.height,Qe=Z.bytes,Ye=-1,ht=qe+1,st=-1,Ke=Je+1,Ue=ne*qe+pe,gt=new Uint8Array(qe*Je),bt=new Uint8Array(me||qe*Je);if(bt[Ue]===1)return null;var it=[Be[Ue*=Qe],Be[Ue+1],Be[Ue+2],Be[Ue+3]],Pt=[{y:ne,left:pe-1,right:pe+1,dir:1}];do{for(Fe=!1,te=(ce=Pt.shift()).left+1;te<ce.right;te++)if(Ue=((Ae=ce.y*qe)+te)*Qe,bt[Ae+te]!==1&&!((de=Be[Ue]-it[0])>ie||de<-ie||(de=Be[Ue+1]-it[1])>ie||de<-ie||(de=Be[Ue+2]-it[2])>ie||de<-ie||Be[Ue+3]===0)){for(Fe=!0,gt[Ae+te]=1,bt[Ae+te]=1,Re=te-1;Re>-1&&(Ue=(Me=Ae+Re)*Qe,bt[Me]!==1)&&!((de=Be[Ue]-it[0])>ie||de<-ie)&&!((de=Be[Ue+1]-it[1])>ie||de<-ie)&&!((de=Be[Ue+2]-it[2])>ie||de<-ie)&&Be[Ue+3]!==0;)gt[Me]=1,bt[Me]=1,Re--;for(Ee=te+1;Ee<qe&&(Ue=(Le=Ae+Ee)*Qe,bt[Le]!==1)&&!((de=Be[Ue]-it[0])>ie||de<-ie)&&!((de=Be[Ue+1]-it[1])>ie||de<-ie)&&!((de=Be[Ue+2]-it[2])>ie||de<-ie)&&Be[Ue+3]!==0;)gt[Le]=1,bt[Le]=1,Ee++;Re<ht&&(ht=Re+1),Ee>Ye&&(Ye=Ee-1),(he=ce.y-ce.dir)>=0&&he<Je&&(Re<ce.left&&Pt.push({y:he,left:Re,right:ce.left,dir:-ce.dir}),ce.right<Ee&&Pt.push({y:he,left:ce.right,right:Ee,dir:-ce.dir})),(he=ce.y+ce.dir)>=0&&he<Je&&Re<Ee&&Pt.push({y:he,left:Re,right:Ee,dir:ce.dir})}Fe&&(ce.y<Ke&&(Ke=ce.y),ce.y>st&&(st=ce.y))}while(Pt.length>0);return{data:gt,width:Z.width,height:Z.height,bounds:{minX:ht,minY:Ke,maxX:Ye,maxY:st},sampleColor:it}}(A,P,L,N,Y)},thresholdMask:function(A,P,L,N,Y={}){let X,Z,pe=A.data,ne=A.width,ie=A.height,me=A.bytes,de=L*ne+P,te=new Uint8Array(Y.append?Y.append:ne*ie),he=new Uint8Array(Y.ignore?Y.ignore:ne*ie);if(he[de]===1)return null;de*=me;var ce=[pe[de],pe[de+1],pe[de+2],pe[de+3]];for(de=0,Z=0;de<pe.length;de+=4,Z+=1)he[Z]||te[Z]||pe[de+3]!==0&&(X=pe[de]-ce[0],X>N||X<-N||(X=pe[de+1]-ce[1],X>N||X<-N||(X=pe[de+2]-ce[2],X>N||X<-N||(te[Z]=1))));return{data:te,width:A.width,height:A.height,bounds:{minX:0,minY:0,maxX:ne,maxY:ie},sampleColor:ce}},gaussBlur:function(A,P){var L,N,Y,X,Z,pe,ne,ie=2*P+1,me=P*P,de=new Float32Array(ie),te=0,he=A.width,ce=A.height,Ee=A.data,Re=A.bounds.minX,Ae=A.bounds.maxX,Me=A.bounds.minY,Le=A.bounds.maxY;for(L=0;L<P;L++){var Fe=(P-L)*(P-L),Be=Math.exp(-Fe/(2*me))/(2*Math.PI*me);de[P+L]=de[P-L]=Be,te+=2*Be}for(L=0;L<ie;L++)de[L]/=te;var qe=new Uint8Array(he*ce),Je=P+he,Qe=P+ce;for(Z=Me;Z<Le+1;Z++)for(X=Re;X<Ae+1;X++){for(pe=0,ne=Je-X<ie?Je-X:ie,Y=(N=Z*he+X)-P,L=P-X>0?P-X:0;L<ne;L++)pe+=Ee[Y+L]*de[L];for(ne=Qe-Z<ie?Qe-Z:ie,Y=N-P*he,L=P-Z>0?P-Z:0;L<ne;L++)pe+=Ee[Y+L*he]*de[L];qe[N]=pe>.5?1:0}return{data:qe,width:he,height:ce,bounds:{minX:Re,minY:Me,maxX:Ae,maxY:Le}}},gaussBlurOnlyBorder:function(A,P,L){var N,Y,X,Z,pe,ne,ie,me,de,te,he=function(Ue,gt,bt){var it,Pt,Ut,Mt,Tt,Wt,Gt,Vt=Ue.width,Kt=Ue.height,qt=Ue.data,Ht=new Uint8Array(qt),ci=Ue.bounds.minX,oi=Ue.bounds.maxX,pi=Ue.bounds.minY,Nt=Ue.bounds.maxY,si=Vt*Kt,$t=new Uint8Array(si),ii=[],gi=Math.max(ci,1),_i=Math.min(oi,Vt-2),bi=Math.max(pi,1),Ai=Math.min(Nt,Kt-2);if(bt&&bt.length>0)for(Tt=0;Tt<si;Tt++)bt[Tt]===1&&(Ht[Tt]=1);for(Mt=bi;Mt<Ai+1;Mt++)for(it=gi;it<_i+1;it++)qt[Tt=Mt*Vt+it]!==0&&(Wt=Tt+Vt,Gt=Tt-Vt,Ht[Tt+1]!==0&&Ht[Tt-1]!==0&&Ht[Wt]!==0&&Ht[Wt+1]!==0&&Ht[Wt-1]!==0&&Ht[Gt]!==0&&Ht[Gt+1]!==0&&Ht[Gt-1]!==0||ii.push(Tt));if(ci==0)for(Mt=pi;Mt<Nt+1;Mt++)qt[Mt*Vt]===1&&ii.push(Mt*Vt);if(oi==Vt-1)for(Mt=pi;Mt<Nt+1;Mt++)qt[Mt*Vt+oi]===1&&ii.push(Mt*Vt+oi);if(pi==0)for(it=ci;it<oi+1;it++)qt[it]===1&&ii.push(it);if(Nt==Kt-1)for(it=ci;it<oi+1;it++)qt[Nt*Vt+it]===1&&ii.push(Nt*Vt+it);var hi,ui=[],Ri=gt+Vt,xi=gt+Kt,Li=2*gt+1;for(si=ii.length,Ut=0;Ut<si;Ut++){for($t[Tt=ii[Ut]]=1,ui.push(Tt),Mt=(Tt-(it=Tt%Vt))/Vt,hi=Ri-it<Li?Ri-it:Li,Wt=Tt-gt,Pt=gt-it>0?gt-it:0;Pt<hi;Pt++)$t[Gt=Wt+Pt]===0&&($t[Gt]=1,ui.push(Gt));for(hi=xi-Mt<Li?xi-Mt:Li,Wt=Tt-gt*Vt,Pt=gt-Mt>0?gt-Mt:0;Pt<hi;Pt++)$t[Gt=Wt+Pt*Vt]===0&&($t[Gt]=1,ui.push(Gt))}return ui}(A,P,L),ce=2*P+1,Ee=2*P*P,Re=new Float32Array(ce),Ae=0,Me=A.width,Le=A.height,Fe=A.data,Be=A.bounds.minX,qe=A.bounds.maxX,Je=A.bounds.minY,Qe=A.bounds.maxY,Ye=he.length;for(X=0;X<P;X++)Y=(P-X)*(P-X),N=Math.exp(-Y/Ee)/Math.PI,Re[P+X]=Re[P-X]=N,Ae+=2*N;for(X=0;X<ce;X++)Re[X]/=Ae;var ht=new Uint8Array(Fe),st=P+Me,Ke=P+Le;for(X=0;X<Ye;X++){for(de=0,me=((pe=he[X])-(ie=pe%Me))/Me,te=st-ie<ce?st-ie:ce,ne=pe-P,Z=P-ie>0?P-ie:0;Z<te;Z++)de+=Fe[ne+Z]*Re[Z];if(de>.5)ht[pe]=1,ie<Be&&(Be=ie),ie>qe&&(qe=ie),me<Je&&(Je=me),me>Qe&&(Qe=me);else{for(te=Ke-me<ce?Ke-me:ce,ne=pe-P*Me,Z=P-me>0?P-me:0;Z<te;Z++)de+=Fe[ne+Z*Me]*Re[Z];de>.5?(ht[pe]=1,ie<Be&&(Be=ie),ie>qe&&(qe=ie),me<Je&&(Je=me),me>Qe&&(Qe=me)):ht[pe]=0}}return{data:ht,width:Me,height:Le,bounds:{minX:Be,minY:Je,maxX:qe,maxY:Qe}}},createBorderMask:function(A){var P,L,N,Y,X,Z=A.width,pe=A.height,ne=A.data,ie=A.bounds.minX,me=A.bounds.maxX,de=A.bounds.minY,te=A.bounds.maxY,he=me-ie+1,ce=te-de+1,Ee=new Uint8Array(he*ce),Re=Math.max(ie,1),Ae=Math.min(me,Z-2),Me=Math.max(de,1),Le=Math.min(te,pe-2);for(L=Me;L<Le+1;L++)for(P=Re;P<Ae+1;P++)ne[N=L*Z+P]!==0&&(Y=N+Z,X=N-Z,ne[N+1]!==0&&ne[N-1]!==0&&ne[Y]!==0&&ne[Y+1]!==0&&ne[Y-1]!==0&&ne[X]!==0&&ne[X+1]!==0&&ne[X-1]!==0||(Ee[(L-de)*he+(P-ie)]=1));if(ie==0)for(L=de;L<te+1;L++)ne[L*Z]===1&&(Ee[(L-de)*he]=1);if(me==Z-1)for(L=de;L<te+1;L++)ne[L*Z+me]===1&&(Ee[(L-de)*he+(me-ie)]=1);if(de==0)for(P=ie;P<me+1;P++)ne[P]===1&&(Ee[P-ie]=1);if(te==pe-1)for(P=ie;P<me+1;P++)ne[te*Z+P]===1&&(Ee[(te-de)*he+(P-ie)]=1);return{data:Ee,width:he,height:ce,offset:{x:ie,y:de}}},getBorderIndices:function(A){var P,L,N,Y,X,Z=A.width,pe=A.height,ne=A.data,ie=[],me=Z-1,de=pe-1;for(L=1;L<de;L++)for(P=1;P<me;P++)ne[N=L*Z+P]!==0&&(Y=N+Z,X=N-Z,ne[N+1]!==0&&ne[N-1]!==0&&ne[Y]!==0&&ne[Y+1]!==0&&ne[Y-1]!==0&&ne[X]!==0&&ne[X+1]!==0&&ne[X-1]!==0||ie.push(N));for(L=0;L<pe;L++)ne[L*Z]===1&&ie.push(L*Z);for(P=0;P<Z;P++)ne[P]===1&&ie.push(P);for(N=Z-1,L=0;L<pe;L++)ne[L*Z+N]===1&&ie.push(L*Z+N);for(N=(pe-1)*Z,P=0;P<Z;P++)ne[N+P]===1&&ie.push(N+P);return ie},traceContours:function(A){var P,L,N,Y,X,Z,pe,ne,ie,me,de,te,he,ce,Ee,Re=function(st){var Ke,Ue,gt=st.width,bt=st.data,it=st.bounds.minX,Pt=st.bounds.maxX,Ut=st.bounds.minY,Mt=st.bounds.maxY,Tt=Pt-it+3,Wt=Mt-Ut+3,Gt=new Uint8Array(Tt*Wt);for(Ue=Ut;Ue<Mt+1;Ue++)for(Ke=it;Ke<Pt+1;Ke++)bt[Ue*gt+Ke]===1&&(Gt[(Ue-Ut+1)*Tt+(Ke-it+1)]=1);return{data:Gt,width:Tt,height:Wt,offset:{x:it-1,y:Ut-1}}}(A),Ae=[],Me=0,Le=Re.width,Fe=2*Le,Be=Re.height,qe=Re.data,Je=Re.offset.x,Qe=Re.offset.y,Ye=new Uint8Array(qe),ht=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]];for(Y=1;Y<Be-1;Y++)for(N=1;N<Le-1;N++)if(qe[X=Y*Le+N]===1){for(P=-Le;P<Fe;P+=Fe)if(qe[X+P]===0&&Ye[X+P]===0){for(Me++,pe=[],ie=(ne=P===Le)?2:6,te=he=me={x:N,y:Y},de=null;;){for(Ye[te.y*Le+te.x]=Me,L=0;L<8;L++){if(Ee=ht[ie=(ie+1)%8],qe[Z=(ce={x:te.x+Ee[0],y:te.y+Ee[1]}).y*Le+ce.x]===1){Ye[Z]=Me;break}Ye[Z]=-1,ce=null}if(ce===null)break;if(te=ce,de){if(he.x===me.x&&he.y===me.y&&te.x===de.x&&te.y===de.y)break}else de=ce;pe.push({x:he.x+Je,y:he.y+Qe}),he=te,ie=(ie+4)%8}ce!=null&&(pe.push({x:me.x+Je,y:me.y+Qe}),Ae.push({inner:ne,label:Me,points:pe}))}}return Ae},simplifyContours:function(A,P,L){var N,Y,X,Z,pe,ne,ie,me,de,te,he,ce,Ee,Re,Ae,Me,Le,Fe,Be,qe,Je,Qe=A.length,Ye=[];for(Y=0;Y<Qe;Y++)if(pe=(Z=A[Y]).points,(ne=Z.points.length)<L){for(ie=[],X=0;X<ne;X++)ie.push({x:pe[X].x,y:pe[X].y});Ye.push({inner:Z.inner,label:Z.label,points:ie,initialCount:ne})}else{me=[0,ne-1],de=[{first:0,last:ne-1}];do if(!((te=de.shift()).last<=te.first+1)){for(he=-1,ce=te.first,N=te.first+1;N<te.last;N++)Be=pe[N],qe=pe[te.first],Je=pe[te.last],Le=Be.x-qe.x,Fe=Be.y-qe.y,Re=Math.sqrt(Le*Le+Fe*Fe),Le=Be.x-Je.x,Fe=Be.y-Je.y,Ae=Math.sqrt(Le*Le+Fe*Fe),Le=qe.x-Je.x,Fe=qe.y-Je.y,Me=Math.sqrt(Le*Le+Fe*Fe),(Ee=Re>=Math.sqrt(Ae*Ae+Me*Me)?Ae:Ae>=Math.sqrt(Re*Re+Me*Me)?Re:Math.abs((Fe*Be.x-Le*Be.y+qe.x*Je.y-Je.x*qe.y)/Me))>he&&(ce=N,he=Ee);he>P&&(me.push(ce),de.push({first:te.first,last:ce}),de.push({first:ce,last:te.last}))}while(de.length>0);for(ie=[],ne=me.length,me.sort(function(ht,st){return ht-st}),X=0;X<ne;X++)ie.push({x:pe[me[X]].x,y:pe[me[X]].y});Ye.push({inner:Z.inner,label:Z.label,points:ie,initialCount:Z.points.length})}return Ye}},this.setToolbarControl(new Ve(this)),this.toolbarControl.setThreshold(this.threshold);let b=function(){h.getImageData()};this.onSelectionChanged=b,this.extensions.onActivate=function(){let A=h.item||h.itemToCreate;h.itemLayer=A?A.layer:null,h.getImageData(),h.project.overlay.viewer.addHandler("animation-finish",b),h.project.overlay.viewer.addHandler("rotate",b),h.colorPicker.element.visible=!0,h.project.toolLayer.bringToFront()},this.extensions.onDeactivate=function(A){h.project.overlay.viewer.removeHandler("animation-finish",b),h.project.overlay.viewer.removeHandler("rotate",b),h.colorPicker.element.visible=!1,this.preview&&this.preview.remove(),A&&h.finish(),h.project.toolLayer.sendToBack()},p.extensions.onKeyUp=function(A){A.key=="a"&&h.applyChanges(),A.key=="e"&&h.toolbarControl.cycleReduceMode(),A.key=="r"&&h.toolbarControl.cycleReplaceMode(),A.key=="f"&&h.toolbarControl.cycleFloodMode()}}onMouseDown(s){this.startThreshold=this.threshold,this.imageData.dragStartMask=this.imageData.binaryMask,this.applyMagicWand(s.original.point),this.colorPicker.element.visible=!1}onMouseDrag(s){let h=s.original.point.subtract(s.original.downPoint).multiply(this.project.getZoom());this.reduceMode&&(h=h.multiply(-1));let p=Math.round((h.x+-1*h.y)/2);this.threshold=Math.min(Math.max(this.startThreshold+p,this.minThreshold),this.maxThreshold),Number.isNaN(this.threshold)&&console.warn("NaN value for threshold"),this.toolbarControl.setThreshold(this.threshold),this.applyMagicWand(s.original.downPoint)}onMouseMove(s){this.colorPicker.updatePosition(s.original.point)}onMouseUp(s){this.colorPicker.element.visible=!0,this.colorPicker.element.bringToFront(),this.colorPicker.updatePosition(s.original.point)}finish(){this.itemLayer=null,this.preview&&this.preview.remove(),this.deactivate()}setThreshold(s){this.threshold=parseInt(s)}setReduceMode(s){this.reduceMode=s,this.getImageData()}setFloodMode(s){this.floodMode=s}setReplaceMode(s){this.replaceMode=s}applyChanges(){this.itemToCreate&&(this.itemToCreate.initializeGeoJSONFeature("MultiPolygon"),this.refreshItems());let s={width:this.imageData.width,height:this.imageData.height,data:this.imageData.wandMask,bounds:{minX:0,minY:0,maxX:this.preview.width,maxY:this.preview.height}};if(this.reduceMode){let h=Zt(this.MagicWand,s);h.translate(-1,-1),h.translate(-this.preview.width/2,-this.preview.height/2),h.matrix=this.preview.matrix,h.transform(this.item.layer.matrix.inverted());let p=this.item.subtract(h,!1).toCompoundPath();h.remove(),this.item.children=p.children}else{let h=Zt(this.MagicWand,s);h.translate(-1,-1),h.translate(-this.preview.width/2,-this.preview.height/2),h.matrix=this.preview.matrix,h.transform(this.item.layer.matrix.inverted());let p=this.itemLayer?this.itemLayer.getItems({match:A=>A.isBoundingElement}):[];p.length>0&&(h.children=p.map(A=>A.intersect(h)));let b=this.item.unite(h,!1).toCompoundPath();h.remove(),this.item.children=b.children}this.getImageData()}getImageData(){let s=this,h=s.project.overlay.getImageData(),p=new a.Group({children:[],insert:!1}),b=s.tool.view.bounds,A=new a.Path(b.topLeft,b.topRight,b.bottomRight,b.bottomLeft);A.strokeWidth=0,p.addChild(A.clone()),p.addChild(A),p.clipped=!0;let P=this.itemLayer?this.itemLayer.getItems({match:X=>X.isBoundingElement}):[];if(A.fillColor=P.length==0?s.colors.pixelAllowed:s.colors.pixelNotAllowed,P.forEach(X=>{let Z=X.clone({insert:!1});Z.transform(s.item.layer.matrix),Z.fillColor=s.colors.pixelAllowed,Z.strokeWidth=0,p.addChild(Z)}),s.item){let X=s.item.clone({insert:!1});X.transform(s.item.layer.matrix),X.fillColor=s.colors.currentItem,X.strokeWidth=0,X.selected=!1,p.addChild(X)}p.selected=!1;let L=s.project.paperScope.project.getItems({match:X=>X.isGeoJSONFeatureCollection}),N=L.map(X=>X.visible);L.forEach(X=>X.visible=!1),s.project.toolLayer.addChild(p),s.tool.view.update();let Y=s.tool.view.getImageData();p.remove(),L.forEach((X,Z)=>X.visible=N[Z]),s.tool.view.update(),s.imageData={width:h.width,height:h.height,bytes:4,data:h.data,binaryMask:new Uint8ClampedArray(h.width*h.height),wandMask:new Uint8ClampedArray(h.width*h.height),colorMask:Y};for(let X=0,Z=0;X<s.imageData.data.length;X+=s.imageData.bytes,Z+=1)s.imageData.binaryMask[Z]=s.imageData.colorMask.data[X+1]?1:0;s.item&&s.item.isGeoJSONFeature&&s.item.getArea()?ti(s.item).then(X=>{let Z=[255*X.red,255*X.green,255*X.blue];s.imageData.sampleColor=Z,s.rasterPreview(s.imageData.binaryMask,Z)}):s.rasterPreview(s.imageData.binaryMask)}applyMagicWand(s){let h,p=this.paperScope.view.projectToView(s),b=this.paperScope.view.pixelRatio;p=p.multiply(b),h=this.floodMode?this.MagicWand.floodFill(this.imageData,Math.round(p.x),Math.round(p.y),this.threshold):this.MagicWand.thresholdMask(this.imageData,Math.round(p.x),Math.round(p.y),this.threshold);let A=this.imageData.binaryMask,P=this.imageData.wandMask,L=this.imageData.dragStartMask,N=this.imageData.colorMask.data,Y=h.data;if(this.replaceMode&&!this.reduceMode)for(let X=0,Z=0;X<N.length;X+=this.imageData.bytes,Z+=1)A[Z]=N[X+1]>0||N[X]==0&&Y[Z],P[Z]=Y[Z];else if(this.replaceMode&&this.reduceMode)for(let X=0,Z=0;X<N.length;X+=this.imageData.bytes,Z+=1)A[Z]=N[X+1]>0&&!(N[X]==0&&Y[Z]),P[Z]=Y[Z];else if(this.replaceMode||this.reduceMode){if(!this.replaceMode&&this.reduceMode)for(let X=0,Z=0;X<N.length;X+=this.imageData.bytes,Z+=1)A[Z]=L[Z]&&!(N[X]==0&&Y[Z]),P[Z]=P[Z]||Y[Z]}else for(let X=0,Z=0;X<N.length;X+=this.imageData.bytes,Z+=1)A[Z]=L[Z]||N[X]==0&&Y[Z],P[Z]=P[Z]||Y[Z];this.rasterPreview(this.imageData.binaryMask,this.imageData.sampleColor||h.sampleColor)}rasterPreview(s,h){let p,b=this,A={0:this.colors.nullColor,1:this.colors.defaultColor};h&&(A[1]=new a.Color(h[0],h[1],h[2]),A[1].hue+=180,A[1].brightness=(180+A[1].brightness)%360),this.preview&&this.preview.remove(),this.preview=this.project.paperScope.overlay.getViewportRaster(!1),window.preview=this.preview,this.project.toolLayer.insertChild(0,this.preview);let P=this.preview.createImageData(this.preview.size);for(var L=0,N=0;L<P.data.length;L+=4,N+=1)p=A[s[N]],P.data[L]=p.red,P.data[L+1]=p.blue,P.data[L+2]=p.green,P.data[L+3]=255*p.alpha;function Y(){b.preview.tweenTo({opacity:.15},{duration:1200,easing:"easeInQuart"}).then(X)}function X(){b.preview.tweenTo({opacity:1},{duration:800,easing:"easeOutCubic"}).then(Y)}this.preview.setImageData(P,new a.Point(0,0)),Y()}}class Ve extends ke{constructor(s){super(s);let h=wt("fa-wand-magic-sparkles");h.classList.add("rotate-by"),h.style.setProperty("--rotate-angle","270deg"),this.button.configure(h,"Magic Wand Tool");let p=document.createElement("div");p.classList.add("wand-toolbar","dropdown"),p.setAttribute("data-tool","wand"),this.dropdown.appendChild(p);let b=document.createElement("div");b.classList.add("threshold-container"),p.appendChild(b);let A=document.createElement("label");b.appendChild(A),A.innerHTML="Threshold",this.thresholdInput=document.createElement("input"),b.appendChild(this.thresholdInput),Object.assign(this.thresholdInput,{type:"range",min:-1,max:100,value:20}),this.thresholdInput.onchange=function(){s.setThreshold(this.value)};let P=document.createElement("div");P.classList.add("toggles"),p.appendChild(P);let L=this.cycleReplaceModeButton=document.createElement("span");L.classList.add("option-toggle"),P.appendChild(L),Xe.set(L,{prefix:"On click:",actions:[{replace:"Start new mask"},{append:"Add to current"}],onclick:function(pe){s.setReplaceMode(pe=="replace")}});let N=this.cycleFloodModeButton=document.createElement("span");N.classList.add("option-toggle"),P.appendChild(N),Xe.set(N,{prefix:"Fill rule:",actions:[{flood:"Contiguous"},{everywhere:"Anywhere"}],onclick:function(pe){s.setFloodMode(pe=="flood")}});let Y=this.cycleReduceModeButton=document.createElement("span");Y.classList.add("option-toggle"),P.appendChild(Y),Xe.set(Y,{prefix:"Use to:",actions:[{expand:"Expand selection"},{reduce:"Reduce selection"}],onclick:function(pe){s.setReduceMode(pe=="reduce")}}),[L,N,Y].forEach(pe=>{let ne=Xe.get(pe),ie=document.createElement("span");ie.classList.add("label","prefix"),ie.innerHTML=ne.prefix,pe.appendChild(ie),ne.actions.forEach((me,de)=>{let te=Object.values(me)[0],he=Object.keys(me)[0],ce=document.createElement("span");ce.classList.add("option"),ce.innerHTML=te,pe.appendChild(ce),Xe.set(ce,{key:he,index:de}),me.htmlElement=ce,me.key=he,de==0&&ce.classList.add("selected")}),pe.addEventListener("click",function(){var Re;let me=Xe.get(this),de=me.actions,te=this.querySelector(".option.selected"),he=(Re=Xe.get(te))==null?void 0:Re.index,ce=he===void 0?0:(he+1)%de.length;this.querySelectorAll(".option").forEach(Ae=>Ae.classList.remove("selected"));let Ee=de[ce];Ee.htmlElement.classList.add("selected"),me.onclick(Ee.key)})});let X=document.createElement("button");X.classList.add("btn","btn-secondary","btn-sm"),X.setAttribute("data-action","apply"),p.appendChild(X),X.innerHTML="Apply",X.onclick=function(){s.applyChanges()};let Z=document.createElement("button");Z.classList.add("btn","btn-secondary","btn-sm"),Z.setAttribute("data-action","done"),p.appendChild(Z),Z.innerHTML="Done",Z.onclick=function(){s.finish()}}isEnabledForMode(s){return["new","Polygon","MultiPolygon"].includes(s)}setThreshold(s){this.thresholdInput.value=s}cycleReduceMode(){this.cycleReduceModeButton.dispatchEvent(new Event("click"))}cycleReplaceMode(){this.cycleReplaceModeButton.dispatchEvent(new Event("click"))}cycleFloodMode(){this.cycleFloodModeButton.dispatchEvent(new Event("click"))}}function Zt(M,s,h){let p=new a.CompoundPath({children:[],fillRule:"evenodd",insert:!1});if(s){s=new Yt(s).addBorder(),s.bounds={minX:0,minY:0,maxX:s.width,maxY:s.height};let A=M.traceContours(s);p.children=A.map(function(P){let L=P.points.map(Y=>new a.Point(Y)),N=new a.Path(L,{insert:!1});return N.closed=!0,N}).filter(function(P){if(Math.abs(P.area)>=50)return!0;P.remove()})}return p}function Qt(M,s,h,p){var b=M.curve===s,A=s.getNormalAtTime(b?0:1).multiply(p),P=M.point.add(A),L=new a.Segment(P),N=b?"handleOut":"handleIn";return L[N]=M[N].add(h.subtract(A).divide(2)),L}function It(M,s){var h=new a.Curve(M.segment1.handleOut.add(M.segment1.point),new a.Point(0,0),new a.Point(0,0),M.segment2.handleIn.add(M.segment2.point)).getNormalAtTime(.5).multiply(s),p=Qt(M.segment1,M,h,s),b=Qt(M.segment2,M,h,s),A=new a.Curve(p,b);if(A.getIntersections(A).length===0){var P=Math.min(Math.abs(s)/10,1),L=A.getPointAtTime(.5).getDistance(M.getPointAtTime(.5));if(Math.abs(L-Math.abs(s))>P){var N=M.divideAtTime(.5);if(N!=null)return It(M,s).concat(It(N,s))}}return[p,b]}function Xt(M,s){return M.x*s.y-M.y*s.x}function We(M,s,h,p,b,A){var P,L,N,Y,X,Z,pe,ne,ie,me,de,te,he,ce,Ee=new a.Curve(M[0],M[1]),Re=new a.Curve(s[0],s[1]),Ae=Ee.getIntersections(Re),Me=M[1].point.getDistance(s[0].point);if(h.isSmooth())s[0].handleOut=s[0].handleOut.project(h.handleOut),s[0].handleIn=M[1].handleIn.project(h.handleIn),s[0].point=M[1].point.add(s[0].point).divide(2),M.pop();else if(Ae.length===0)if(Me>.1*Math.abs(b))switch(p){case"miter":var Le=(pe=Ee.point2,ne=Ee.point2.add(Ee.getTangentAtTime(1)),ie=Re.point1,me=Re.point1.add(Re.getTangentAtTime(0)),de=pe.subtract(ne),te=ie.subtract(me),he=Xt(pe,ne),ce=Xt(ie,me),new a.Point(he*te.x-de.x*ce,he*te.y-de.y*ce).divide(Xt(de,te)));Math.max(Le.getDistance(Ee.point2),Le.getDistance(Re.point1))<Math.abs(b)*A&&M.push(new a.Segment(Le));break;case"round":var Fe=(P=M[1],L=s[0],N=h.point,Y=b,X=P.point.subtract(N).add(L.point.subtract(N)).normalize(Math.abs(Y)).add(N),Z=new a.Path.Arc({from:P.point,to:L.point,through:X,insert:!1}),P.handleOut=Z.firstSegment.handleOut,L.handleIn=Z.lastSegment.handleIn,Z.segments.length===3?Z.segments[1]:null);Fe&&M.push(Fe)}else s[0].handleIn=M[1].handleIn,M.pop();else{var Be=Ee.divideAt(Ae[0]);if(Be){Le=Be.segment1;var qe=Re.divideAt(Re.getIntersections(Ee)[0]);Le.handleOut=qe?qe.segment1.handleOut:s[0].handleOut,M.pop(),s[0]=Le}else s[0].handleIn=M[1].handleIn,M.pop()}}function Rt(M){return M.children.length===1&&(M=M.children[0]).remove(),M}function Bt(M,s){if(s===void 0&&(s=.01),M.closed){var h=Math.abs(M.area*s);if(M.clockwise||M.reverse(),(M=M.unite(M,{insert:!1}))instanceof a.CompoundPath&&(M.children.filter(function(p){return Math.abs(p.area)<h}).forEach(function(p){return p.remove()}),M.children.length===1))return Rt(M)}return M}function At(M,s){var h=(M.segments[0].location.offset+M.segments[Math.max(1,Math.floor(M.segments.length/2))].location.offset)/3;return s.getNearestLocation(M.getPointAt(h)).offset<s.getNearestLocation(M.getPointAt(2*h)).offset}function St(M,s,h,p){var b,A;b=function(Z,pe){var ne=Z.clone({insert:!1});return ne.reduce({}),Z.clockwise||(ne.reverse(),pe=-pe),[ne,pe]}(M,s),A=b[0],s=b[1];for(var P=A.curves.slice().map(function(Z){return It(Z,s)}).flat(),L=[],N=0;N<P.length;N+=2)L.push(P.slice(N,N+2));var Y=function(Z,pe,ne,ie,me){var de=ne.segments;if(Z.length==0)return ne.segments;for(var te=Z[0].slice(),he=0;he<Z.length-1;++he)We(Z[he],Z[he+1],de[he+1],pe,ie,me);return ne.closed&&(We(Z[Z.length-1],te,de[0],pe,ie,me),Z[0][0]=te[0]),Z}(L,h,A,s,p).flat(),X=function(Z){if(Z.closed){var pe=Z.unite(Z,{insert:!1});if(pe instanceof a.CompoundPath)return pe.children.filter(function(ne){return!(ne.segments.length>1&&At(ne,Z))}).forEach(function(ne){return ne.remove()}),Rt(pe)}return Z}(new a.Path({segments:Y,insert:!1,closed:M.closed}));return X.reduce({}),A.closed&&(A.clockwise&&s<0||!A.clockwise&&s>0)&&function(Z,pe){var ne=function(ie){return ie instanceof a.CompoundPath?ie.children.map(function(me){return me.segments}).flat():ie.segments}(Z).slice();ne.forEach(function(ie){pe.contains(ie.point)||ie.remove()})}(X,M),A.clockwise!==M.clockwise&&X.reverse(),Bt(X)}function C(M,s,h){var p=M.point.add(s.point).divide(2),b=s.point.subtract(M.point).rotate(-90,new a.Point(0,0)).normalize(h),A=p.add(b);return new a.Path.Arc({from:M.point,to:s.point,through:A,insert:!1}).segments}function z(M,s,h,p,b){var A=St(M,s=M.clockwise?s:-s,h,b),P=St(M,-s,h,b);if(M.closed)return A.subtract(P,{insert:!1});var L=P,N=new Array;P instanceof a.CompoundPath&&((N=P.children.filter(function(ne){return ne.closed})).forEach(function(ne){return ne.remove()}),L=P.children[0]),L.reverse();var Y=function(ne,ie,me,de){if(ne instanceof a.CompoundPath){var te=ne.children.map(function(Me){return{c:Me,a:Math.abs(Me.area)}});ne=(te=te.sort(function(Me,Le){return Le.a-Me.a}))[0].c}var he=ne.segments.slice(),ce=ie.segments.slice();if(de==="round"){var Ee=C(ce[ce.length-1],he[0],me),Re=C(he[he.length-1],ce[0],me),Ae=new a.Path({segments:Ee.concat(he,Re,ce),closed:!0,insert:!1});return Ae.reduce({}),Ae}return new a.Path({segments:he.concat(ce),closed:!0,insert:!1})}(A,L,s,p);if(N.length>0)for(var X=0,Z=N;X<Z.length;X++){var pe=Z[X];Y=Y.subtract(pe,{insert:!1})}return Y}function se(M){return M.closed?M.unite(M,{insert:!1}):M}a===void 0&&console.error("paper-offset.mjs requires paper.js to have been loaded");var ye=function(){function M(){}return M.offset=function(s,h,p){var b=function(A,P,L,N){var Y=se(A),X=Y;if(Y instanceof a.Path)X=St(Y,P,L,N);else{var Z=Y.children.map(function(pe){if(pe.segments.length>1){At(pe,A)||pe.reverse();var ne=St(pe,P,L,N);return(ne=Bt(ne)).clockwise!==pe.clockwise&&ne.reverse(),ne instanceof a.CompoundPath?(ne.applyMatrix=!0,ne.children):ne}return null}).flat().filter(function(pe){return!!pe});X=new a.CompoundPath({children:Z,insert:!1})}return X.copyAttributes(Y,!1),X.remove(),X}(s,h,(p=p||{}).join||"miter",p.limit||10);return p.insert===void 0&&(p.insert=!0),p.insert&&(s.parent||a.project.activeLayer).addChild(b),b},M.offsetStroke=function(s,h,p){var b=function(A,P,L,N,Y){var X=se(A),Z=X;return(Z=X instanceof a.Path?z(X,P,L,N,Y):X.children.flatMap(function(pe){return z(pe,P,L,N,Y)}).reduce(function(pe,ne){return pe.unite(ne,{insert:!1})})).strokeWidth=0,Z.fillColor=X.strokeColor,Z.shadowBlur=X.shadowBlur,Z.shadowColor=X.shadowColor,Z.shadowOffset=X.shadowOffset,Z}(s,h,(p=p||{}).join||"miter",p.cap||"butt",p.limit||10);return p.insert===void 0&&(p.insert=!0),p.insert&&(s.parent||a.project.activeLayer).addChild(b),b},M}();class ge extends dt{constructor(s){super(s);let h=this;this.setToolbarControl(new Ie(this)),this.eraseMode=!1,this.drawColor=new a.Color("green"),this.eraseColor=new a.Color("red"),this.drawColor.alpha=.5,this.eraseColor.alpha=.5,this.autoSimplify=!1,this.radius=0,this.cursor=new a.Shape.Circle(new a.Point(0,0),this.radius),this.cursor.set({strokeWidth:1,strokeColor:"black",fillColor:this.drawColor,opacity:1,visible:!1}),this.cursor.name="brushtool",this.pathGroup=new a.Group([new a.Path,new a.Path]),h.project.toolLayer.addChild(this.pathGroup),h.project.toolLayer.addChild(this.cursor),this.extensions.onActivate=function(){h.cursor.radius=h.radius/h.project.getZoom(),h.cursor.strokeWidth=1/h.project.getZoom(),h.cursor.visible=!0,h.tool.minDistance=3/h.project.getZoom(),h.tool.maxDistance=10/h.project.getZoom(),h.targetLayer.addChild(h.pathGroup)},this.extensions.onDeactivate=function(p){h.cursor.visible=!1,h.project.toolLayer.addChild(h.pathGroup),p&&h.finish()},this.tool.onMouseWheel=function(p){p.preventDefault(),p.stopPropagation(),p.deltaY!=0&&h.toolbarControl.updateBrushRadius({larger:p.deltaY<0})},this.tool.extensions.onKeyDown=function(p){p.key=="e"&&(h.eraseMode===!1?h.setEraseMode(!0):h.eraseMode="keyhold")},this.tool.extensions.onKeyUp=function(p){p.key=="e"&&h.eraseMode=="keyhold"&&h.setEraseMode(!1)}}onMouseDown(s){s.preventDefault(),s.stopPropagation(),this.itemToCreate&&(this.itemToCreate.initializeGeoJSONFeature("MultiPolygon"),this.refreshItems()),this.cursor.position=s.original.point;let h=new a.Path([s.point]);h.mode=this.eraseMode?"erase":"draw",h.radius=this.radius/this.project.getZoom();const p=2*this.cursor.radius/this.targetLayer.scaling.x;this.pathGroup.lastChild.replaceWith(h),this.pathGroup.lastChild.set({strokeWidth:p,fillColor:null,strokeCap:"round"}),h.mode=="erase"?(this.pathGroup.firstChild.fillColor=this.eraseColor,this.pathGroup.lastChild.strokeColor=this.eraseColor):(this.pathGroup.firstChild.fillColor=this.drawColor,this.pathGroup.lastChild.strokeColor=this.drawColor)}onMouseUp(s){this.modifyArea()}onMouseMove(s){this.cursor.position=s.original.point}onMouseDrag(s){this.cursor.position=s.original.point,this.item&&(this.pathGroup.lastChild.add(s.point),this.pathGroup.lastChild.smooth({type:"continuous"}))}setRadius(s){this.radius=s,this.cursor.radius=s/this.project.getZoom()}setAutoSimplify(s){this.autoSimplify=!!s}setEraseMode(s){this.eraseMode=s,this.cursor.fillColor=s?this.eraseColor:this.drawColor,this.toolbarControl.setEraseMode(this.eraseMode)}finish(){this.deactivate()}modifyArea(){let s,h=this.pathGroup.lastChild;const p=h.radius/this.targetLayer.scaling.x;if(h.segments.length>1?(s=ye.offsetStroke(h,p,{join:"round",cap:"round",insert:!0}),s.contains(h.segments[0].point)||(console.error("Oops! Bad stroke offset! Trying to correct"),h.segments[0].point.x+=.001,s=ye.offsetStroke(h,p,{join:"round",cap:"round",insert:!0}))):s=new a.Path.RegularPolygon({center:h.firstSegment.point,radius:p,sides:360}),s.strokeWidth=1/this.project.getZoom(),s.strokeColor="black",s.fillColor="yellow",s.flatten(),s.name="shapeobject",!this.item.isBoundingElement){let A=this.item.parent.children.filter(P=>P.isBoundingElement);s.applyBounds(A)}let b;if(h.visible=!1,this.autoSimplify&&(s=s.toCompoundPath(),this.doSimplify(s)),b=this.eraseMode?this.item.subtract(s,{insert:!1}):this.item.unite(s,{insert:!1}),b){b=b.toCompoundPath();const A=b.children.filter(P=>P.area>0||Math.abs(P.area)>10);this.item.removeChildren(),this.item.addChildren(A),b.remove()}s.remove()}}class Ie extends ke{constructor(s){super(s);const h=wt("fa-brush");h.classList.add("rotate-by"),h.style.setProperty("--rotate-angle","225deg"),this.button.configure(h,"Brush Tool");const p=document.createElement("div");p.classList.add("dropdown","brush-toolbar"),p.setAttribute("data-tool","brush"),this.dropdown.appendChild(p);const b=document.createElement("label");b.innerHTML="Radius",p.appendChild(b),this.rangeInput=document.createElement("input"),p.appendChild(this.rangeInput),Object.assign(this.rangeInput,{type:"range",min:1,max:100,step:1,value:20}),this.rangeInput.addEventListener("change",function(){s.setRadius(this.value)}),this.eraseButton=document.createElement("button"),p.appendChild(this.eraseButton),this.eraseButton.innerHTML="Eraser",this.eraseButton.setAttribute("data-action","erase"),this.eraseButton.addEventListener("click",function(){let A=this.classList.toggle("active");s.setEraseMode(A)}),setTimeout(()=>s.setRadius(20),0)}isEnabledForMode(s){return["new","Polygon","MultiPolygon"].includes(s)}updateBrushRadius(s){s.larger?(this.rangeInput.value=parseInt(this.rangeInput.value)+parseInt(this.rangeInput.step),this.rangeInput.dispatchEvent(new Event("change"))):(this.rangeInput.value=parseInt(this.rangeInput.value)-parseInt(this.rangeInput.step),this.rangeInput.dispatchEvent(new Event("change")))}setEraseMode(s){s?this.eraseButton.classList.add("active"):this.eraseButton.classList.remove("active")}}class fe{constructor(s){var h;if(nt.includes(((h=s.geometry)==null?void 0:h.type)||s.geometry)===!1)throw"Bad GeoJSON Geometry type";this._paperItem=null,this._props=s.properties||{}}static supportsGeoJSONType(s,h){return!1}_supportsGeoJSONObj(s){var h,p,b;return this.constructor.supportsGeoJSONType((h=s.geometry)==null?void 0:h.type,(b=(p=s.geometry)==null?void 0:p.properties)==null?void 0:b.subtype)}getCoordinates(){return[]}getProperties(){return{}}getStyleProperties(){return this.paperItem.style.toJSON()}static onTransform(){}supportsGeoJSONType(s,h){return this.constructor.supportsGeoJSONType(s,h)}getGeoJSONType(){return{type:void 0,subtype:void 0}}getLabel(){if(this.paperItem.displayName)return this.paperItem.displayName;{const s=this.getGeoJSONType();return s.subtype||s.type}}get type(){return this.getGeoJSONType().type}get subtype(){return this.getGeoJSONType().subtype}get paperItem(){return this._paperItem}set paperItem(s){this._paperItem=s,function(h){let p=h.paperItem,b=h.constructor,A=h._props;Ce.registerFeature(p),p.onTransform=b.onTransform,h.setStyle(A),p.fillOpacity=p.fillColor?p.fillColor.alpha:1,p.displayName=A.label||h.getLabel(),p.annotationItem=h,p.replaceWith=rt,"selected"in A&&(p.selected=A.selected)}(this)}setStyle(s){this._paperItem&&this._paperItem.style.set(s)}toGeoJSONFeature(){return{type:"Feature",geometry:this.toGeoJSONGeometry(),properties:{label:this.paperItem.displayName,selected:this.paperItem.selected,...this.getStyleProperties(),userdata:this.paperItem.data.userdata}}}toGeoJSONGeometry(){let s={type:this.type,properties:this.getProperties(),coordinates:this.getCoordinates()};return this.subtype&&(s.properties=Object.assign(s.properties,{subtype:this.subtype})),s}}const nt=["Point","LineString","Polygon","MultiPoint","MultiLineString","MultiPolygon","GeometryCollection",null],Ct=[];class yt{constructor(){}static register(s){if(s.supportsGeoJSONType===fe.supportsGeoJSONType)throw console.error("Static accessor supportsGeoJSONType must be implemented"),"Static accessor supportsGeoJSONType must be implemented";Ct.includes(s)||Ct.push(s)}static getConstructor(s){var b,A,P;if(!("geometry"in s)||!("properties"in s))return void console.error("Invalid GeoJSON Feature object. Returning undefined.");let h=(b=s.geometry)==null?void 0:b.type,p=(P=(A=s.geometry)==null?void 0:A.properties)==null?void 0:P.subtype;return Ct.filter(L=>L.supportsGeoJSONType(h,p)).slice(-1)[0]}static itemFromGeoJSON(s){var p;nt.includes(s.type)&&(s={type:"Feature",geometry:s,properties:{}});let h=yt.getConstructor(s);if(h){let b=new h(s);return b.paperItem.data.userdata=(p=s.properties)==null?void 0:p.userdata,b.paperItem}}static itemFromAnnotationItem(s){if(!s.annotationItem)return void error("Only paper.Items constructed by AnnotationItem implementations are supported");let h={type:"Feature",geometry:s.annotationItem.toGeoJSONGeometry(),properties:s.annotationItem._props};return yt.itemFromGeoJSON(h)}}function rt(M){M.isGeoJSONFeature||console.warn("An item with isGeoJSONFeature==false was used to replace an item."),M._callbacks=this._callbacks;let s=y.extend(!0,this.rescale,M.rescale);return M.style=this.style,M.rescale=s,this.emit("item-replaced",{item:M}),M.project.emit("item-replaced",{item:M}),a.Item.prototype.replaceWith.call(this,M),M.selected=this.selected,M.updateFillOpacity(),M.applyRescale(),M.project.view.update(),M}class Lt extends fe{constructor(s){super(s),s.geometry.type!=="Point"&&error('Bad geoJSON object: type !=="Point"');let h=s.geometry.coordinates.slice(0,2),p=new a.Group;p.pivot=new a.Point(0,0),p.applyMatrix=!0;let b=new a.Path.Circle(new a.Point(0,0),6);b.scale(new a.Point(1,.5),new a.Point(0,0)),p.addChild(b);let A=new a.Path.Line(new a.Point(0,0),new a.Point(0,-6));p.addChild(A);let P=new a.Path.Circle(new a.Point(0,-9),3);p.addChild(P),p.position=new a.Point(...h),p.scaleFactor=p.project._scope.scaleByCurrentZoom(1),p.scale(p.scaleFactor,b.bounds.center),p.rescale=p.rescale||{},p.rescale.size=function(L){p.scale(1/(p.scaleFactor*L)),p.scaleFactor=1/L},p.applyRescale(),this.paperItem=p}setStyle(s){s.rescale=y.extend(!0,s.rescale,this.paperItem.rescale),this.paperItem.style.set(s)}static supportsGeoJSONType(s,h=null){return s.toLowerCase()==="point"&&h===null}getGeoJSONType(){return{type:"Point"}}getCoordinates(){let s=this.paperItem.children[0];return[s.bounds.center.x,s.bounds.center.y]}getStyleProperties(){return this.paperItem.children[0].style.toJSON()}static onTransform(){switch(arguments[0]){case"rotate":{let s=arguments[1],h=arguments[2];this.rotate(-s,h);let p=this.position.subtract(h),b=h.add(p.rotate(s)).subtract(this.position);this.translate(b);break}case"scale":{let s=arguments[1],h=arguments[2],p=arguments[3];this.matrix.append(p.inverted());let b=this.pivot.transform(this.matrix).subtract(s),A=b.rotate(-h).multiply(p.scaling).rotate(h).subtract(b);this.translate(A);break}}}}class R extends dt{constructor(s){super(s);let h=new Lt({geometry:{type:"Point",coordinates:[0,0]},properties:{label:"Point Tool"}}).paperItem;h.visible=!1,delete h.isGeoJSONFeature,this.cursor=h,this.dragging=!1,this.project.toolLayer.addChild(h),this.setToolbarControl(new B(this)),this.extensions.onActivate=()=>{this.project.toolLayer.bringToFront(),this.setCursorProps()},this.extensions.onDeactivate=()=>{this.project.toolLayer.sendToBack(),this.cursor.visible=!1,this.project.overlay.removeClass("point-tool-grab","point-tool-grabbing")},this.onSelectionChanged=()=>{this.setCursorProps()}}setCursorProps(){this.itemToCreate?(this.cursor.fillColor=this.itemToCreate.fillColor,this.cursor.strokeColor=this.itemToCreate.strokeColor,this.cursor.visible=!0):this.cursor.visible=!1}onMouseMove(s){this.cursor.position=s.original.point,this.item.hitTest(s.point)?this.project.overlay.addClass("point-tool-grab"):this.project.overlay.removeClass("point-tool-grab")}onMouseDown(s){this.itemToCreate?(this.itemToCreate.initializeGeoJSONFeature("Point"),this.refreshItems(),this.item.position=s.point,this.cursor.visible=!1,this.toolbarControl.updateInstructions("Point")):this.item&&this.item.hitTest(s.point)&&(this.dragging=!0,this.project.overlay.addClass("point-tool-grabbing"))}onMouseDrag(s){this.dragging&&this.item&&(this.item.position=this.item.position.add(s.delta))}onMouseUp(){this.dragging=!1,this.project.overlay.removeClass("point-tool-grabbing")}}class B extends ke{constructor(s){super(s);const h=wt("fa-map-pin");this.button.configure(h,"Point Tool"),this.instructions=document.createElement("span"),this.instructions.classList.add("instructions"),this.dropdown.appendChild(this.instructions)}isEnabledForMode(s){return this.updateInstructions(s),["new","Point"].includes(s)}updateInstructions(s){const h=s=="new"?"Click to drop a pin":s=="Point"?"Drag to reposition":"???";this.instructions.innerHTML=h}}class V extends fe{constructor(s){super(s),s.geometry.type!=="Point"&&error('Bad geoJSON object: type !=="Point"');let h=s.geometry.coordinates.slice(0,2),p=this.paperItem=new a.Group;p.pivot=new a.Point(0,0),p.applyMatrix=!0;let b=new a.Path.Circle(new a.Point(0,0),4);p.addChild(b);let A=new a.PointText({point:new a.Point(0,0),pivot:new a.Point(0,0),content:s.geometry.properties.content||"PointText",fontSize:18,strokeWidth:1});function P(){const N=p.view.getFlipped()?p.view.getRotation():180-p.view.getRotation();p.rotate(-N),p.scale(-1,1),p.rotate(N)}p.addChild(A),this.refreshTextOffset(),A.on("content-changed",()=>{this.refreshTextOffset()}),p.position=new a.Point(...h),p.scaleFactor=p.project._scope.scaleByCurrentZoom(1),p.scale(p.scaleFactor,b.bounds.center),p.rescale=p.rescale||{},p.rescale.size=function(N){p.scale(1/(p.scaleFactor*N)),p.scaleFactor=1/N,A.strokeWidth=0},p.view.getFlipped()&&P();const L=p.view.getFlipped()?180-p.view.getRotation():-p.view.getRotation();p.rotate(L),p.view.on("rotate",N=>{const Y=-N.rotatedBy;p.rotate(Y)}),p.view.on("flip",()=>{P()}),p.applyRescale()}setStyle(s){s.rescale=y.extend(!0,s.rescale,this.paperItem.rescale),this.paperItem.style.set(s)}get textitem(){return this.paperItem.children[1]}get circle(){return this.paperItem.children[0]}static supportsGeoJSONType(s,h){return s.toLowerCase()==="point"&&(h==null?void 0:h.toLowerCase())==="pointtext"}getGeoJSONType(){return{type:"Point",subtype:"PointText"}}getCoordinates(){let s=this.paperItem.children[0];return[s.bounds.center.x,s.bounds.center.y]}getProperties(){return{content:this.paperItem.children[1].content}}getStyleProperties(){return this.paperItem.children[0].style.toJSON()}static onTransform(){switch(arguments[0]){case"rotate":{let s=arguments[1],h=arguments[2];this.rotate(-s,h);let p=this.position.subtract(h),b=h.add(p.rotate(s)).subtract(this.position);this.translate(b);break}case"scale":{let s=arguments[1],h=arguments[2],p=arguments[3];this.matrix.append(p.inverted());let b=this.pivot.transform(this.matrix).subtract(s),A=b.rotate(-h).multiply(p.scaling).rotate(h).subtract(b);this.translate(A);break}}}refreshTextOffset(){const s=this.textitem.view.getFlipped();let h=this.textitem.getInternalBounds(),p=h.width/2/this.textitem.layer.scaling.x*(s?1:-1),b=-h.height/2/this.textitem.layer.scaling.x,A=s?180-this.textitem.view.getRotation():this.textitem.view.getRotation(),P=new a.Point(p,b).divide(this.textitem.view.getZoom()).rotate(-A);this.textitem.position=this.circle.bounds.center.add(P)}}class K extends dt{constructor(h){super(h);Gi(this,"onMouseDrag",function(h){this.dragging&&this.item&&(this.item.position=this.item.position.add(h.delta))});this.dragging=!1;let p=new V({geometry:{type:"Point",coordinates:[0,0],properties:{subtype:"PointText",content:"Click to place"}},properties:{label:"Text Tool"}}),b=this.cursor=p.paperItem;b.isGeoJSONFeature=!1,b.fillColor="grey",b.strokeColor="black",b.strokeWidth=1,b.visible=!1,this.project.toolLayer.addChild(b),p.refreshTextOffset(),b.applyRescale(),this.setToolbarControl(new Te(this)),this.extensions.onActivate=()=>{this.itemToCreate?(this.cursor.visible=!0,p.refreshTextOffset(),b.applyRescale()):this.item&&this._updateTextInput()},this.extensions.onDeactivate=()=>{this.project.toolLayer.addChild(this.cursor),this.cursor.visible=!1,this.project.overlay.removeClass("point-tool-grab","point-tool-grabbing")}}onSelectionChanged(){this.cursor.visible=!!this.itemToCreate,this._updateTextInput()}onMouseMove(h){this.cursor.position=h.original.point,this.item.hitTest(h.point)?this.project.overlay.addClass("point-tool-grab"):this.project.overlay.removeClass("point-tool-grab")}onMouseDown(h){this.itemToCreate?(this.itemToCreate.initializeGeoJSONFeature("Point","PointText"),this.refreshItems(),this.item.children[1].content=this.toolbarControl.getValue(),this.item.position=h.point,this.cursor.visible=!1,this.toolbarControl.updateInstructions("Point:PointText")):this.item&&this.item.hitTest(h.point)&&(this.dragging=!0,this.project.overlay.addClass("point-tool-grabbing"))}onMouseUp(){this.dragging=!1,this.project.overlay.removeClass("point-tool-grabbing")}_updateTextInput(){let h=this.item&&this.item.annotationItem.subtype=="PointText"?this.item.children[1].content:"";this.toolbarControl.setItemText(h),this.cursor.children[1].content=h.length?h:this.toolbarControl.input.getAttribute("placeholder")}}class Te extends ke{constructor(s){super(s);let h=this;const p=wt("fa-font");this.button.configure(p,"Text Tool"),this.instructions=document.createElement("span"),this.instructions.classList.add("instructions"),this.dropdown.appendChild(this.instructions),this.input=document.createElement("input"),this.input.setAttribute("type","text"),this.input.setAttribute("placeholder","Enter text"),this.dropdown.appendChild(this.input),this.input.addEventListener("input",function(){let b=h.getValue();h.tool.item&&h.tool.item.annotationItem.subtype=="PointText"&&(h.tool.item.children[1].content=b),h.tool.cursor.children[1].content=b}),this.input.dispatchEvent(new Event("input"))}setItemText(s){this.input.value=s}getValue(){let s=this.input;return s.value.trim()||s.getAttribute("placeholder")}isEnabledForMode(s){return this.updateInstructions(s),["new","Point:PointText"].includes(s)}updateInstructions(s){const h=s=="new"?"Click to place":s=="Point:PointText"?"Drag to reposition":"???";this.instructions.innerHTML=h}}class ze extends dt{constructor(s){super(s);let h=this,p=new a.Group({visible:!1}),b=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),A=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),P=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),L=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]});p.addChildren([b,A,P,L]),this.project.toolLayer.addChild(p),this.h1=b,this.h2=A,this.v1=P,this.v2=L,this.crosshairTool=p,this.mode=null,this.creating=null,this.setToolbarControl(new ft(this)),this.extensions.onActivate=this.onSelectionChanged=function(){h.itemToCreate?(h.mode="creating",p.visible=!0,h.creating=null,h.toolbarControl.updateInstructions("new")):h.creating&&h.creating.parent==h.item?(h.mode="creating",p.visible=!0,h.toolbarControl.updateInstructions("new")):h.item?(h.creating=null,h.mode="modifying",p.visible=!1,h.toolbarControl.updateInstructions("Point:Rectangle")):h.deactivate()},this.extensions.onDeactivate=function(N){N&&(h.creating=null),p.visible=!1,h.mode=null,h.project.overlay.removeClass("rectangle-tool-resize"),h.project.overlay.removeClass("rectangle-tool-move")}}get rectangle(){return this.item.children&&this.item.children[0]||this.item}setCursorPosition(s){let h=this.tool,p=h.view.projectToView(s),b=h.view.viewToProject(new a.Point(0,p.y)),A=h.view.viewToProject(new a.Point(h.view.viewSize.width,p.y)),P=h.view.viewToProject(new a.Point(p.x,0)),L=h.view.viewToProject(new a.Point(p.x,h.view.viewSize.height));this.h1.segments[0].point=b,this.h2.segments[0].point=b,this.h1.segments[1].point=A,this.h2.segments[1].point=A,this.v1.segments[0].point=P,this.v2.segments[0].point=P,this.v1.segments[1].point=L,this.v2.segments[1].point=L}onMouseDown(s){if(this.itemToCreate){this.itemToCreate.initializeGeoJSONFeature("Point","Rectangle"),this.refreshItems();let h=new a.Path.Rectangle(s.point,s.point);this.creating=h,this.item.removeChildren(),this.item.addChild(h),this.mode="creating"}else if(this.item){let h=this.item.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)});if(h){this.mode="corner-drag";let p=(h.segment.path.segments.indexOf(h.segment)+2)%h.segment.path.segments.length;return this.refPoint=h.segment.path.segments[p].point,void(this.ctrlPoint=h.segment.point.clone())}if(this.item.contains(s.point))return void(this.mode="fill-drag")}}onMouseMove(s){this.setCursorPosition(s.original.point),this.mode=="modifying"&&(this.item.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)})?this.project.overlay.addClass("rectangle-tool-resize"):this.project.overlay.removeClass("rectangle-tool-resize"),this.item.contains(s.point)?this.project.overlay.addClass("rectangle-tool-move"):this.project.overlay.removeClass("rectangle-tool-move"))}onMouseDrag(s){let h,p,b,A=this.item.center;if(this.mode=="creating")if(b=-(this.item.view.getRotation()+this.item.layer.getRotation()),h=s.downPoint,s.modifiers.command||s.modifiers.control){let N=s.point.subtract(s.downPoint),Y=[[1,1],[1,-1],[-1,-1],[-1,1]].map(Z=>new a.Point(Z[0],Z[1]).rotate(b)).sort((Z,pe)=>Z.dot(N)-pe.dot(N))[0],X=N.project(Y);p=s.downPoint.add(X)}else p=s.point;else{if(this.mode!="corner-drag")return this.mode=="fill-drag"?void this.item.translate(s.delta):void this.setCursorPosition(s.original.point);if(b=this.rectangle.segments[1].point.subtract(this.rectangle.segments[0].point).angle,h=this.refPoint,s.modifiers.command||s.modifiers.control){let N=s.point.subtract(this.refPoint),Y=this.ctrlPoint.subtract(this.refPoint),X=N.project(Y);p=this.refPoint.add(X)}else p=s.point}this.setCursorPosition(this.targetLayer.matrix.transform(p));let P=new a.Rectangle(h.rotate(-b,A),p.rotate(-b,A)),L=[P.topLeft,P.topRight,P.bottomRight,P.bottomLeft].map(N=>N.rotate(b,A));this.rectangle.set({segments:L})}onMouseUp(){this.mode="modifying",this.crosshairTool.visible=!1,this.creating=null,this.toolbarControl.updateInstructions("Point:Rectangle")}}class ft extends ke{constructor(s){super(s);const h=wt("fa-vector-square");this.button.configure(h,"Rectangle Tool"),this.instructions=document.createElement("span"),this.instructions.innerHTML="Click and drag to create a rectangle",this.dropdown.appendChild(this.instructions)}isEnabledForMode(s){return["new","Point:Rectangle"].includes(s)}updateInstructions(s){const h=s=="new"?"Click and drag to create a rectangle":s=="Point:Rectangle"?"Drag a corner to resize":"???";this.instructions.innerHTML=h}}class Ft extends dt{constructor(s){super(s);let h=this;this.crosshairTool=new a.Group({visible:!1}),this.h1=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),this.h2=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),this.v1=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),this.v2=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),this.crosshairTool.addChildren([this.h1,this.h2,this.v1,this.v2]),this.project.toolLayer.addChild(this.crosshairTool),this.mode=null,this.creating=null,this.setToolbarControl(new et(this)),this.extensions.onActivate=this.onSelectionChanged=function(){h.itemToCreate?(h.mode="creating",h.crosshairTool.visible=!0,h.creating=null,h.toolbarControl.updateInstructions("new")):h.creating&&h.creating.parent==h.item?(h.mode="creating",h.crosshairTool.visible=!0,h.toolbarControl.updateInstructions("new")):h.item?(h.creating=null,h.mode="modifying",h.crosshairTool.visible=!1,h.toolbarControl.updateInstructions("Point:Ellipse")):(h.creating=null,h.mode=null,h.crosshairTool.visible=!1,h.toolbarControl.updateInstructions("Point:Ellipse"))},this.extensions.onDeactivate=function(p){p&&(h.creating=null),h.crosshairTool.visible=!1,h.mode=null,h.project.overlay.removeClass("rectangle-tool-resize")}}onMouseDown(s){if(this.itemToCreate){this.itemToCreate.initializeGeoJSONFeature("Point","Ellipse"),this.refreshItems();let h=new a.Path.Ellipse(s.point,s.point);this.creating=h,this.item.removeChildren(),this.item.addChild(h),this.mode="creating"}else if(this.item){let h=this.item.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)});if(h){this.mode="segment-drag";let p=(h.segment.path.segments.indexOf(h.segment)+2)%h.segment.path.segments.length;return void(this.points={opposite:h.segment.path.segments[p].point.clone(),drag:h.segment.point.clone(),p1:h.segment.next.point.clone(),p2:h.segment.previous.point.clone()})}if(this.item.contains(s.point))return void(this.mode="fill-drag")}}onMouseDrag(s){let h,p=this.item.bounds.center;if(this.mode=="creating"){let b=-(this.item.view.getRotation()+this.item.layer.getRotation());if(this.item.view.getFlipped()&&(b=180-b),s.modifiers.command||s.modifiers.control){let L=s.point.subtract(s.downPoint),N=[[1,1],[1,-1],[-1,-1],[-1,1]].map(X=>new a.Point(X[0],X[1]).rotate(b)).sort((X,Z)=>X.dot(L)-Z.dot(L))[0],Y=L.project(N);h=s.downPoint.add(Y)}else h=s.point;let A=new a.Rectangle(s.downPoint.rotate(-b,p),h.rotate(-b,p)),P=new a.Path.Ellipse(A);P.rotate(b,p),this.item.children[0].set({segments:P.segments}),P.remove()}else{if(this.mode!="segment-drag")return this.mode=="fill-drag"?void this.item.translate(s.delta):void this.setCursorPosition(s.original.point);{let b=s.point.subtract(this.points.opposite),A=this.points.drag.subtract(this.points.opposite),P=b.project(A),L=A.angle;if(s.modifiers.command||s.modifiers.control){let N=P.length/A.length,Y=P.divide(2),X=this.points.opposite.add(Y),Z=Y.length,pe=Math.abs(this.points.p1.subtract(this.points.opposite).multiply(N).cross(P.normalize())),ne=new a.Path.Ellipse({center:X,radius:[Z,pe]}).rotate(L);this.item.children[0].set({segments:ne.segments}),ne.remove()}else{let N=P.divide(2),Y=this.points.opposite.add(N),X=N.length,Z=Math.abs(this.points.p1.subtract(this.points.opposite).cross(P.normalize())),pe=new a.Path.Ellipse({center:Y,radius:[X,Z]}).rotate(L);this.item.children[0].set({segments:pe.segments}),pe.remove()}}}this.setCursorPosition(this.targetLayer.matrix.transform(h))}onMouseMove(s){this.setCursorPosition(s.original.point),this.mode=="modifying"&&(this.item.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)})?this.project.overlay.addClass("rectangle-tool-resize"):this.project.overlay.removeClass("rectangle-tool-resize"),this.item.contains(s.point)?this.project.overlay.addClass("rectangle-tool-move"):this.project.overlay.removeClass("rectangle-tool-move"))}onMouseUp(){this.mode="modifying",this.crosshairTool.visible=!1,this.creating=null,this.toolbarControl.updateInstructions("Point:Ellipse")}setCursorPosition(s){let h=this.tool.view.projectToView(s),p=this.tool.view.viewToProject(new a.Point(0,h.y)),b=this.tool.view.viewToProject(new a.Point(this.tool.view.viewSize.width,h.y)),A=this.tool.view.viewToProject(new a.Point(h.x,0)),P=this.tool.view.viewToProject(new a.Point(h.x,this.tool.view.viewSize.height)),L=this.h1,N=this.h2,Y=this.v1,X=this.v2;L.segments[0].point=p,N.segments[0].point=p,L.segments[1].point=b,N.segments[1].point=b,Y.segments[0].point=A,X.segments[0].point=A,Y.segments[1].point=P,X.segments[1].point=P}}class et extends ke{constructor(s){super(s);const h=wt("fa-circle");this.button.configure(h,"Ellipse Tool"),this.instructions=document.createElement("span"),this.instructions.innerHTML="Click and drag to create an ellipse",this.dropdown.appendChild(this.instructions)}isEnabledForMode(s){return["new","Point:Ellipse"].includes(s)}updateInstructions(s){const h=s=="new"?"Click and drag to create an ellipse":s=="Point:Ellipse"?"Drag a point to resize":"???";this.instructions.innerHTML=h}}class _t extends dt{constructor(s){super(s);let h=this,p=this.tool;this._lastClickTime=0,this.drawingGroup=new a.Group,this._currentItem=null,this._currentItemSelectedColor=null,this.project.toolLayer.addChild(this.drawingGroup),this.drawingGroup.visible=!1,this.draggingSegment=null,this.eraseMode=!1,this.simplifying=null,this.setToolbarControl(new Et(this)),this.extensions.onActivate=function(){p.minDistance=4/h.project.getZoom(),p.maxDistance=20/h.project.getZoom(),h.drawingGroup.visible=!0,h.drawingGroup.selected=!0,h.targetLayer.addChild(h.drawingGroup),h._cacheCurrentItem()},this.extensions.onDeactivate=function(b){b&&(h.finish(),h.project.toolLayer.addChild(h.drawingGroup),h.drawingGroup.removeChildren(),h.drawingGroup.visible=!1,h.drawingGroup.selected=!1,h._restoreCachedItem(),h._currentItem=null)},p.extensions.onKeyDown=function(b){b.key=="e"&&(h.eraseMode===!1?h.setEraseMode(!0):h.eraseMode===!0&&(h.eraseMode="keyhold")),!b.event.metaKey&&!b.event.ctrlKey||b.event.shiftKey||b.event.key!=="z"||h.undo(),(b.event.metaKey||b.event.ctrlKey)&&b.event.shiftKey&&b.event.key==="z"&&h.redo()},p.extensions.onKeyUp=function(b){b.key=="e"&&h.eraseMode=="keyhold"&&h.setEraseMode(!1)}}_cacheCurrentItem(){this._currentItem=this.item,this._currentItem&&(this._currentItem.selectedColor=this._currentItemSelectedColor)}_restoreCachedItem(){this._currentItem&&(this._currentItem.selectedColor=this._currentItemSelectedColor)}onSelectionChanged(){this.item!==this._currentItem&&(this._restoreCachedItem(),this._cacheCurrentItem(),this.targetLayer.addChild(this.drawingGroup),this.drawingGroup.removeChildren(),this.setEraseMode(this.eraseMode))}onMouseDown(s){this.draggingSegment=null;let h=Date.now(),p=h-this._lastClickTime<300;this._lastClickTime=h,this.simplifying&&this.cancelSimplify(),this.itemToCreate&&(this.itemToCreate.initializeGeoJSONFeature("MultiPolygon"),this.refreshItems(),this._cacheCurrentItem(),this.saveHistory());let b=this.drawing();if(b&&p)return this.finishCurrentPath(),void(this.draggingSegment=null);let A=(b&&b.path||this.item).hitTest(s.point,{fill:!1,stroke:!0,segments:!0,tolerance:this.getTolerance(5)});if(A){if(A.type=="segment"&&this.eraseMode)A.segment.remove();else if(A.type=="segment")this.draggingSegment=A.segment;else if(A.type=="stroke"){let P=A.location.index+1;A.item.insert(P,s.point)}}else if(b){if(s.point.subtract(b.path.lastSegment).length<5/this.project.getZoom())return;b.path.add(s.point)}else this.drawingGroup.removeChildren(),this.drawingGroup.addChild(new a.Path([s.point])),this.drawingGroup.visible=!0,this.drawingGroup.selected=!0,this.drawingGroup.selectedColor=this.eraseMode?"red":null}onMouseUp(s){let h=this.drawing();if(h&&h.path.segments.length>1){let p=h.path.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)});p&&p.segment==h.path.firstSegment&&this.finishCurrentPath()}else if(this.draggingSegment&&(this.draggingSegment=null,!this.item.isBoundingElement)){let p=this.item.parent.children.filter(b=>b.isBoundingElement);this.item.applyBounds(p)}this.saveHistory()}onMouseMove(s){let h=this.drawing(),p=this.item&&(h&&h.path||this.item).hitTest(s.point,{fill:!1,stroke:!0,segments:!0,tolerance:this.getTolerance(5)});if(p){let b=p.type+(this.eraseMode?"-erase":"");this.project.overlay.addClass("tool-action").setAttribute("data-tool-action",b)}else this.project.overlay.removeClass("tool-action").setAttribute("data-tool-action","")}onMouseDrag(s){let h=this.drawing();h?h.path.add(s.point):this.draggingSegment&&(this.draggingSegment.point=this.draggingSegment.point.add(s.delta))}drawing(){return this.drawingGroup.lastChild&&{path:this.drawingGroup.lastChild}}finish(){this.setEraseMode(!1),this.draggingSegment=null,this.project.overlay.removeClass("tool-action").setAttribute("data-tool-action",""),this.deactivate(),this.drawingGroup.selected=!1,this.drawingGroup.visible=!1}setEraseMode(s){this.eraseMode=s,this.item&&(this.item.selectedColor=s?"red":null),this.drawingGroup.selectedColor=s?"red":null,this.toolbarControl.setEraseMode(s)}finishCurrentPath(){let s=this.drawing();if(!s||!this.item||!this.item.parent)return;s.path.closed=!0;let h=this.eraseMode?this.item.subtract(s.path,{insert:!1}):this.item.unite(s.path,{insert:!1});if(h){if(h=h.toCompoundPath(),!this.item.isBoundingElement){let p=this.item.parent.children.filter(b=>b.isBoundingElement);h.applyBounds(p)}this.item.removeChildren(),this.item.addChildren(h.children),this.item.children.forEach(p=>p.selected=!1),h.remove()}this.drawingGroup.removeChildren()}saveHistory(){let s=(this.item.history||[]).position||0;this.item.history=[{children:this.item.children.map(h=>h.clone({insert:!1,deep:!0})),drawingGroup:this.drawingGroup.children.map(h=>h.clone({insert:!1,deep:!0}))}].concat((this.item.history||[]).slice(s,10))}undo(){let s=this.item.history||[],h=(s.position||0)+1;h<s.length&&(this.drawingGroup.removeChildren(),this.item.removeChildren(),this.item.children=s[h].children.map(p=>p.clone({insert:!0,deep:!0})),this.drawingGroup.children=s[h].drawingGroup.map(p=>p.clone({insert:!0,deep:!0})),s.position=h)}redo(){let s=this.item.history||[],h=(s.position||0)-1;h>=0&&(this.drawingGroup.removeChildren(),this.item.removeChildren(),this.item.children=s[h].children.map(p=>p.clone({insert:!0,deep:!0})),this.drawingGroup.children=s[h].drawingGroup.map(p=>p.clone({insert:!0,deep:!0})),s.position=h)}}class Et extends ke{constructor(s){super(s);const h=wt("fa-draw-polygon");this.button.configure(h,"Polygon Tool");const p=document.createElement("div");p.classList.add("dropdown","polygon-toolbar"),p.setAttribute("data-tool","polygon"),this.dropdown.appendChild(p);const b=document.createElement("span");b.innerHTML="Click or Drag",p.appendChild(b);const A=document.createElement("div");p.appendChild(A),this.simplifyButton=document.createElement("button"),this.simplifyButton.setAttribute("data-action","simplify"),this.simplifyButton.innerHTML="Simplify",A.append(this.simplifyButton),this.simplifyButton.addEventListener("click",function(){s.doSimplify(),s.saveHistory()}),this.eraseButton=document.createElement("button"),p.appendChild(this.eraseButton),this.eraseButton.setAttribute("data-action","erase"),this.eraseButton.innerHTML="Eraser",this.eraseButton.addEventListener("click",function(){let L=this.classList.toggle("active");s.setEraseMode(L)});const P=document.createElement("span");p.appendChild(P),this.undoButton=document.createElement("button"),P.appendChild(this.undoButton),this.undoButton.setAttribute("data-action","undo"),this.undoButton.setAttribute("title","Undo (ctrl-Z)"),this.undoButton.innerHTML="<",this.undoButton.addEventListener("click",function(){s.undo()}),this.redoButton=document.createElement("button"),P.appendChild(this.redoButton),this.redoButton.setAttribute("data-action","redo"),this.redoButton.setAttribute("title","Redo (ctrl-shift-Z)"),this.redoButton.innerHTML=">",this.redoButton.addEventListener("click",function(){s.redo()})}isEnabledForMode(s){return["new","MultiPolygon","Polygon"].includes(s)}setEraseMode(s){s?this.eraseButton.classList.add("active"):this.eraseButton.classList.remove("active")}}class ai extends _t{constructor(s){super(s);let h=this,p=this.tool;this.setToolbarControl(new li(this));let b=new a.Color("green");new a.Color("red"),this.radius=0,this.cursor=new a.Shape.Circle(new a.Point(0,0),this.radius),this.cursor.set({strokeWidth:1,strokeColor:"black",fillColor:b,opacity:1,visible:!1}),h.project.toolLayer.addChild(this.cursor),this.clickAction="startPath",this.extensions.onActivate=()=>{this.cursor.radius=this.radius/this.project.getZoom(),this.cursor.strokeWidth=1/this.project.getZoom(),this.refreshCursorVisibility(),p.minDistance=4/h.project.getZoom(),p.maxDistance=10/h.project.getZoom()},this.extensions.onDeactivate=A=>{this.cursor.visible=!1,A&&this.finish()},p.onMouseWheel=A=>{A.preventDefault(),A.stopPropagation(),A.deltaY!=0&&this.toolbarControl.updateBrushRadius({larger:A.deltaY<0})}}setRadius(s){this.radius=s,this.cursor.radius=s/this.project.getZoom()}onMouseDown(s){var p;if(this.draggingSegment=null,this.itemToCreate)return this.itemToCreate.initializeGeoJSONFeature("MultiLineString"),this.refreshItems(),void this.startNewPath(s);let h=(p=this.item)==null?void 0:p.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)});if(h){if(h.type=="segment"&&this.eraseMode)h.segment.remove();else if(h.type=="segment")this.draggingSegment=h.segment;else if(h.type=="stroke"&&!this.eraseMode){let b=h.location.index+1;h.item.insert(b,s.point)}}else this.eraseMode||this.startNewPath(s)}onMouseMove(s){var p;this.cursor.position=s.original.point;let h=(p=this.item)==null?void 0:p.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)});if(h){let b=h.type+(this.eraseMode?"-erase":"");this.project.overlay.addClass("tool-action").setAttribute("data-tool-action",b),this.clickAction=b}else this.project.overlay.removeClass("tool-action").setAttribute("data-tool-action",""),this.clickAction="startPath";this.refreshCursorVisibility()}onMouseDrag(s){this.cursor.position=s.original.point,_t.prototype.onMouseDrag.call(this,s);let h=this.drawing();h&&(h.path.segments=this.simplifier.simplify(h.path.segments.map(p=>p.point)))}onMouseUp(s){this.finishCurrentPath()}startNewPath(s){this.finishCurrentPath(),this.drawingGroup.removeChildren(),this.drawingGroup.addChild(new a.Path([s.point])),this.drawingGroup.visible=!0,this.drawingGroup.selected=!0,this.drawingGroup.selectedColor=this.eraseMode?"red":null,this.drawing().path.set({strokeWidth:2*this.radius/this.targetLayer.scaling.x/this.project.getZoom(),strokeColor:this.item.strokeColor,strokeJoin:"round",strokeCap:"round"})}finishCurrentPath(){this.drawing()&&this.item&&(this.drawing().path.segments.length>1&&this.item.addChild(this.drawing().path),this.drawingGroup.removeChildren())}refreshCursorVisibility(){this.cursor.visible=!this.eraseMode&&this.clickAction==="startPath"}}class li extends ke{constructor(s){super(s),this.linestringTool=s;const h=wt("fa-pen-nib");this.button.configure(h,"Linestring Tool");const p=document.createElement("div");p.classList.add("dropdown","linestring-toolbar"),p.setAttribute("data-tool","linestring"),this.dropdown.appendChild(p);const b=document.createElement("label");b.innerHTML="Set pen width:",p.appendChild(b),this.rangeInput=document.createElement("input"),p.appendChild(this.rangeInput),Object.assign(this.rangeInput,{type:"range",min:.2,max:12,step:.1,value:4}),this.rangeInput.addEventListener("change",function(){s.setRadius(this.value)}),this.eraseButton=document.createElement("button"),p.appendChild(this.eraseButton),this.eraseButton.innerHTML="Eraser",this.eraseButton.setAttribute("data-action","erase"),this.eraseButton.addEventListener("click",function(){let A=this.classList.toggle("active");s.setEraseMode(A)}),setTimeout(()=>s.setRadius(4))}updateBrushRadius(s){s.larger?(this.rangeInput.value=parseFloat(this.rangeInput.value)+parseFloat(this.rangeInput.step),this.rangeInput.dispatchEvent(new Event("change"))):(this.rangeInput.value=parseFloat(this.rangeInput.value)-parseFloat(this.rangeInput.step),this.rangeInput.dispatchEvent(new Event("change")))}isEnabledForMode(s){return["new","LineString","MultiLineString"].includes(s)}setEraseMode(s){s?this.eraseButton.classList.add("active"):this.eraseButton.classList.remove("active"),this.linestringTool.refreshCursorVisibility()}}class fi extends dt{constructor(s){super(s);let h=this;this.ps=this.project.paperScope,this.setToolbarControl(new mi(this));let p=new a.Path.Rectangle({strokeWidth:1,rescale:{strokeWidth:1},strokeColor:"black"}),b=new a.Path.Rectangle({strokeWidth:1,dashArray:[10,10],rescale:{strokeWidth:1,dashArray:[10,10]},strokeColor:"white"});this.project.toolLayer.addChild(p),this.project.toolLayer.addChild(b),p.applyRescale(),b.applyRescale(),p.visible=!1,b.visible=!1,this.extensions.onActivate=function(){h.tool.onMouseMove=A=>h.onMouseMove(A)},this.extensions.onDeactivate=function(A){h.project.overlay.removeClass("selectable-layer"),h.tool.onMouseMove=null},this.tool.extensions.onKeyUp=function(A){A.key=="escape"&&h.project.paperScope.findSelectedItems().forEach(P=>P.deselect())},this.tool.onMouseUp=function(A){if(p.visible=!1,b.visible=!1,A.downPoint.subtract(A.point).length==0){let P=h.hitTestPoint(A);P&&h._isItemSelectable(P.item)&&P.item.toggle(A.modifiers.control||A.modifiers.meta)}else{let P=h.hitTestArea(A);A.modifiers.control||A.modifiers.meta||h.project.paperScope.findSelectedItems().forEach(L=>L.deselect()),P.forEach(L=>L.select(!0))}},this.tool.onMouseDrag=function(A){p.visible=!0,b.visible=!0;let P=new a.Rectangle(A.downPoint,A.point);p.set({segments:[P.topLeft,P.topRight,P.bottomRight,P.bottomLeft]}),b.set({segments:[P.topLeft,P.topRight,P.bottomRight,P.bottomLeft]})}}doAnnotationItemsExist(){return this.ps.project.getItems({match:s=>s.isGeoJSONFeature}).length>0}onMouseMove(s){s.item&&this._isItemSelectable(s.item)?(this.currentItem!=s.item&&s.item.emit("selection:mouseenter"),this.currentLayer!=s.item.layer&&s.item.layer.emit("selection:mouseenter"),this.currentItem=s.item,this.currentLayer=this.currentItem.layer,this.project.overlay.addClass("selectable-layer")):(this.currenItem&&this.currentItem.emit("selection:mouseleave",s),this.currentLayer&&this.currentLayer.emit("selection:mouseleave",s),this.project.overlay.removeClass("selectable-layer"),this.currentItem=null,this.currentLayer=null)}hitTestPoint(s){let h=this.ps.project.hitTest(s.point,{fill:!0,stroke:!0,segments:!0,tolerance:this.getTolerance(5),match:p=>p.item.isGeoJSONFeature||p.item.parent.isGeoJSONFeature});return h&&!h.item.isGeoJSONFeature&&(h.item=h.item.parent),h}hitTestArea(s,h){let p={match:A=>A.isGeoJSONFeature},b=new a.Rectangle(s.point,s.downPoint);return h?p.inside=b:p.overlapping=b,this.ps.project.getItems(p)}_isItemSelectable(s){return!0}}class mi extends ke{constructor(s){super(s),this.dropdown.classList.add("select-dropdown");const h=wt("fa-arrow-pointer");this.button.configure(h,"Selection Tool");const p=document.createElement("div");p.setAttribute("data-active","select"),this.dropdown.appendChild(p);const b=document.createElement("span");b.innerHTML="(Ctrl)click to select items.",p.append(b)}isEnabledForMode(s){return this.tool.doAnnotationItemsExist()&&["default","select","multiselection","Polygon","MultiPolygon","Point:Rectangle","Point:Ellipse","Point","LineString","MultiLineString","GeometryColletion:Raster"].includes(s)}}class Ci extends dt{constructor(s){super(s);let h=this;this.ps=this.project.paperScope,this._mode="transform",this._moving=[],this._active=!1,this.setToolbarControl(new Ei(this)),this._makeTransformToolObject(h.project.getZoom()),this.extensions.onActivate=function(){h._active=!0,h.enableTransformToolObject()},this.extensions.onDeactivate=function(p){h._active=!1,h.project.overlay.removeClass("transform-tool-resize","transform-tool-rotate","transform-tool-move"),p&&h.disableTransformToolObject()}}onSelectionChanged(){this.enableTransformToolObject()}setUniformScaling(s){this._alwaysRescaleUniformly=s}_makeTransformToolObject(s){let h=this,p=12;this._transformTool&&this._transformTool.remove(),this._transformTool=new a.Group,this.project.toolLayer.addChild(this._transformTool),this._transformTool.applyMatrix=!1,this._transformTool.transforming=[],this._transformTool.boundingRect=new a.Shape.Rectangle(new a.Point(0,0),new a.Size(0,0)),this._transformTool.boundingDisplay=new a.Shape.Rectangle(new a.Point(0,0),new a.Size(0,0)),this._transformTool.boundingRect.set({strokeWidth:0,fillColor:new a.Color(0,0,0,.001)}),this._transformTool.boundingDisplay.set({strokeWidth:5,strokeColor:"lightblue",rescale:{strokeWidth:5}}),this._transformTool.addChild(this._transformTool.boundingRect),this._transformTool.addChild(this._transformTool.boundingDisplay),this._transformTool.corners=[["topLeft","bottomRight"],["topRight","bottomLeft"],["bottomRight","topLeft"],["bottomLeft","topRight"]].reduce((b,A)=>{let P=new a.Shape.Rectangle(new a.Point(0,0),new a.Size(p/s,p/s));return P.set({rescale:{size:L=>new a.Size(p/L,p/L)},fillColor:"red",strokeColor:"black"}),h._transformTool.addChild(P),P.anchor=A[0],P.opposite=A[1],P.onMouseDown=function(L){L.stopPropagation()},P.onMouseDrag=function(L){let N=h.targetLayer.getRotation(),Y=(h.targetLayer.tiledImage.getFlip(),this.parent.rotation),X=L.delta.rotate(-Y),Z=this.parent.corners[this.opposite].position;(h._alwaysRescaleUniformly||L.modifiers.command||L.modifiers.control)&&(X=X.project(this.position.subtract(Z)));let pe=this.position,ne=this.position.add(X),ie=new a.Rectangle(Z,pe).size,me=new a.Rectangle(Z,ne).size.divide(ie),de=Z.transform(this.parent.matrix),te=this.parent.matrix.inverseTransform(this.parent.corners[this.opposite].refPos);te=h.targetMatrix.inverseTransform(te);let he=this.parent.matrix.transform(this.parent.boundingRect.position);h.targetMatrix.inverseTransform(he),this.parent.transforming.forEach(ce=>{let Ee=new a.Matrix;Ee.rotate(-N,te).scale(me.width,me.height,te).rotate(N,te),ce.matrix.append(Ee),ce.onTransform&&ce.onTransform("scale",de,Y,Ee)}),this.parent.boundingRect.scale(me.width,me.height,Z),this.parent.setBounds(!0)},b[A[0]]=P,b},{}),this._transformTool.rotationHandle=new a.Shape.Circle(new a.Point(0,0),p/s),this._transformTool.rotationHandle.set({fillColor:"red",strokeColor:"black",rescale:{radius:p}}),this._transformTool.addChild(this._transformTool.rotationHandle),this._transformTool.rotationHandle.onMouseDown=function(b){b.stopPropagation()},this._transformTool.rotationHandle.onMouseDrag=function(b){let A=this.parent.matrix.transform(this.parent.boundingRect.position),P=b.point.subtract(b.delta).subtract(A),L=b.point.subtract(A).angle-P.angle;this.parent.rotate(L,A),this.parent.transforming.forEach(N=>{let Y=h.targetMatrix.inverseTransform(A);N.layer.tiledImage.getFlip()&&(L=-L),N.rotate(L,Y),N.onTransform&&N.onTransform("rotate",L,Y)}),Object.values(this.parent.corners).forEach(N=>{N.refPos=N.refPos.rotate(L,A)})},this.onMouseDrag=b=>{if(!this._transformTool._moveOnDrag)return;this._transformTool.translate(b.original.delta);const A=b.delta;Object.values(this._transformTool.corners).forEach(P=>{P.refPos=P.refPos.add(b.original.delta)}),this._transformTool.transforming.forEach(P=>{P.translate(A),P.onTransform&&P.onTransform("translate",A)})},this._transformTool.setBounds=function(b=!1){if(!b){let P=this.transforming.reduce((X,Z)=>(Z.transform(h.targetLayer.matrix),X.minX=X.minX===null?Z.bounds.topLeft.x:Math.min(X.minX,Z.bounds.topLeft.x),X.minY=X.minY===null?Z.bounds.topLeft.y:Math.min(X.minY,Z.bounds.topLeft.y),X.maxX=X.maxX===null?Z.bounds.bottomRight.x:Math.max(X.maxX,Z.bounds.bottomRight.x),X.maxY=X.maxY===null?Z.bounds.bottomRight.y:Math.max(X.maxY,Z.bounds.bottomRight.y),Z.transform(h.targetLayer.matrix.inverted()),X),{minX:null,minY:null,maxX:null,maxY:null}),L=new a.Point(P.minX,P.minY),N=new a.Point(P.maxX,P.maxY),Y=new a.Rectangle(L,N);this.matrix.reset(),this.boundingRect.set({position:Y.center,size:Y.size})}let A=this.boundingRect;this.boundingDisplay.set({position:A.position,size:A.bounds.size}),Object.values(this.corners).forEach(P=>{P.position=A.bounds[P.anchor],b||(P.refPos=P.position)}),this.rotationHandle.set({position:A.position.subtract(new a.Point(0,A.bounds.size.height/2+2*this.rotationHandle.radius))})},this._transformTool.transformItems=function(b){this.transforming.forEach(A=>{A.matrix.apply(!0,!0),A.onTransform&&A.onTransform("complete")}),this.transforming=b,b.forEach(A=>A.applyMatrix=!1),this.matrix.reset(),this.boundingRect.matrix.reset(),this.boundingDisplay.matrix.reset(),this.setBounds()},this._transformTool.visible=!1}enableTransformToolObject(){this.items.length>0&&(this.project.toolLayer.bringToFront(),this._transformTool.visible=!0,this._transformTool.transformItems(this.items))}disableTransformToolObject(){this.project.toolLayer.sendToBack(),this._transformTool.transformItems([]),this._transformTool.visible=!1}hitTest(s){let h=this.ps.project.hitTest(s,{fill:!0,stroke:!0,segments:!0,tolerance:this.getTolerance(5),match:p=>p.item.isGeoJSONFeature||p.item.parent.isGeoJSONFeature});return h&&!h.item.isGeoJSONFeature&&(h.item=h.item.parent),h}onMouseMove(s){if(!this._active)return;let h=this.project.paperScope.project.hitTest(s.original.point);h?(Object.values(this._transformTool.corners).includes(h.item)?this.project.overlay.addClass("transform-tool-resize"):this.project.overlay.removeClass("transform-tool-resize"),this._transformTool.rotationHandle==h.item?this.project.overlay.addClass("transform-tool-rotate"):this.project.overlay.removeClass("transform-tool-rotate"),[this._transformTool.boundingRect,this._transformTool.boundingDisplay].includes(h.item)?(this.project.overlay.addClass("transform-tool-move"),this._transformTool._moveOnDrag=!0):(this.project.overlay.removeClass("transform-tool-move"),this._transformTool._moveOnDrag=!1)):this.project.overlay.removeClass("transform-tool-resize","transform-tool-rotate","transform-tool-move")}}class Ei extends ke{constructor(s){super(s),this.dropdown.classList.add("transform-dropdown");const h=wt("fa-up-down-left-right");this.button.configure(h,"Transform Tool")}isEnabledForMode(s){let h=this.tool.project.paperScope.findSelectedItems();return h.length>0&&["select","multiselection","Polygon","MultiPolygon","Point:Rectangle","Point:Ellipse","LineString","GeometryCollection:Raster"].includes(s)&&new Set(h.map(p=>p.layer)).size==1}}class Ti extends dt{constructor(s){super(s),this.setToolbarControl(new Si(this))}rasterize(){let s=this,h=this.item;if(h){let p=this.project.overlay.getViewportRaster();h.layer.addChild(p),p.onLoad=function(){let b=new a.Point(this.width/2,this.height/2),A=new a.Rectangle(b.add(this.matrix.inverseTransform(this.layer.matrix.transform(h.bounds.topLeft))).floor(),b.add(this.matrix.inverseTransform(this.layer.matrix.transform(h.bounds.bottomRight))).ceil()),P=this.getSubRaster(A);P.transform(this.layer.matrix.inverted()),P.selectedColor=null;let L={type:"Feature",geometry:{type:"GeometryCollection",properties:{subtype:"Raster",raster:{data:P}},geometries:[h]},properties:{}};h.replaceWith(a.Item.fromGeoJSON(L)),s.refreshItems(),this.remove()}}}}class Si extends ke{constructor(s){super(s);const h=wt("fa-image");this.button.configure(h,"raster Tool");const p=document.createElement("div");this.dropdown.appendChild(p);const b=document.createElement("button");b.innerHTML="Convert to raster",p.appendChild(b);const A=document.createElement("span");A.innerHTML="Warning: this cannot be undone!",p.appendChild(A),b.addEventListener("click",()=>s.rasterize())}isEnabledForMode(s){return["Polygon","MultiPolygon","Point:Rectangle","Point:Ellipse"].includes(s)}}class vi{constructor(s,h){if(h&&!Array.isArray(h))throw"Bad option: if present, tools must be an Array of tool names or constructors to use.";this.ui=this._makeUI(),this.paperScope=s,this.currentMode=null,this.setModeTimeout=null;let p=new s.Layer;p.isGeoJSONFeatureCollection=!1,p.name="toolLayer",p.applyMatrix=!1,s.project.addLayer(p),this.toolConstructors={default:at,select:fi,transform:Ci,style:Jt,rectangle:ze,ellipse:Ft,point:R,text:K,polygon:_t,brush:ge,wand:ni,linestring:ai,raster:Ti},this.tools={};let b=h||Object.keys(this.toolConstructors);b.indexOf("default")==-1&&(b=["default",...b]),this.paperScope.activate(),b.forEach(A=>{if(typeof A=="string"){if(!this.toolConstructors[A])return void console.warn(`The requested tool is invalid: ${A}. No constructor found for that name.`)}else if(!(A instanceof vt))return void console.warn(`${A} must inherit from class ToolBase`);let P=A instanceof vt?A:this.toolConstructors[A],L=this.tools[A]=new P(this.paperScope),N=L.getToolbarControl();N&&this.addToolbarControl(N),L.addEventListener("deactivated",Y=>{Y.target==this.paperScope.getActiveTool()&&this.tools.default.activate()})}),this.tools.default.activate(),this.setMode(),s.project.on({"item-replaced":()=>{this.setMode()},"item-selected":()=>{this.setMode()},"item-deselected":()=>{this.setMode()},"item-removed":()=>{this.setMode()},"items-changed":()=>{this.setMode()}})}get element(){return this._element}setMode(){let s=this;this.setModeTimeout&&clearTimeout(this.setModeTimeout),this.setModeTimeout=setTimeout(()=>{this.setModeTimeout=null;let h=this.paperScope.findSelectedItems(),p=this.paperScope.getActiveTool();if(h.length===0)this.currentMode="select";else if(h.length===1){let b=h[0].annotationItem||{},A=b.type;b.subtype&&(A+=":"+b.subtype);let P=A===null?"new":A;this.currentMode=P}else this.currentMode="multiselection";p.getToolbarControl().isEnabledForMode(this.currentMode)===!1&&(p.deactivate(!0),this.tools.default.activate()),Object.values(this.tools).forEach(b=>{let A=b.getToolbarControl();A&&(A.isEnabledForMode(s.currentMode)?A.button.enable():A.button.disable())}),p.selectionChanged()},0)}addToolbarControl(s){const h=s.button.element,p=s.dropdown;this._buttonbar.appendChild(h),this._dropdowns.appendChild(p),s.isEnabledForMode(this.currentMode)?s.button.enable():s.button.disable()}show(){this.element.style.display="inline-block"}hide(){this.element.style.display="none"}destroy(){this.element.remove()}_makeUI(){this._element=document.createElement("div"),this._buttonbar=document.createElement("div"),this._dropdowns=document.createElement("div");const s=document.createElement("div");this._element.appendChild(this._buttonbar),this._element.appendChild(s),s.appendChild(this._dropdowns),"annotation-ui-drawing-toolbar btn-group btn-group-sm mode-selection".split(" ").forEach(h=>this._element.classList.add(h)),s.classList.add("dropdowns-container"),this._dropdowns.classList.add("dropdowns"),this._buttonbar.classList.add("annotation-ui-buttonbar")}}class di{constructor(s){s=Object.assign({},{initialContent:"Enter text...",iconFactory:null},s),this._element=document.createElement("span"),this._textcontainer=document.createElement("span"),this._textcontainer.classList.add("text-container"),this._element.appendChild(this._textcontainer),this._textcontent=document.createElement("span"),this._textcontent.classList.add("text-content"),this._textcontainer.appendChild(this._textcontent);let h=this._textarea=document.createElement("textarea");this._textcontainer.appendChild(h),h.setAttribute("rows","1"),this._button=document.createElement("span"),this._element.appendChild(this._button),this._oldtext="";let p=s.iconFactory?s.iconFactory.makeFaIcon("fa-edit"):wt("fa-edit");this._button.appendChild(p),p.classList.add("edit-button","onhover"),this._element.classList.add("editablecontent"),this._textarea.textContent=s.initialContent,this._textarea.addEventListener("focusout",()=>{this._element.classList.contains("editing")&&(this._element.classList.remove("editing"),this._updateText(!0))}),this._textarea.addEventListener("keypress",b=>{this._element.classList.contains("editing")&&(b.stopPropagation(),b.key!="Enter"&&b.key!="Escape"||(b.preventDefault(),this._textarea.blur()))}),this._textarea.addEventListener("input",()=>{this._updateText()}),this._element.addEventListener("keydown keyup",b=>{this._element.classList.contains("editing")&&b.stopPropagation()}),this._button.addEventListener("click",b=>{this._onEditClicked&&this._onEditClicked(b),this._element.classList.toggle("editing"),this._oldtext=this._textarea.value.trim(),this._textarea.select()})}get element(){return this._element}get onChanged(){return this._onChanged}set onChanged(s){if(typeof s!="function"&&s!==null)throw"Value must be a function or null";this._onChanged=s}get onEditClicked(){return this._onEditClicked}set onEditClicked(s){if(typeof s!="function"&&s!==null)throw"Value must be a function or null";this._onEditClicked=s}_updateText(s){let h=this._textarea.value;s&&(h=h.trim()),this._textcontent.textContent=h,h!==this._oldtext&&this.onChanged&&this.onChanged(h)}setText(s){this._textarea.value=s,this._textcontent.textContent=s}}function ri(M){const s=document.createElement("template");return s.innerHTML=M,s.content.children.length===1?s.content.children[0]:s.content.children}class yi{constructor(s,h){this.paperItem=s;let p=this._element=ri(`
1543
+ `}updateTargetDescription(){let s=this.tool.targetDescription,c=this.tool.targetItems.every(b=>b.selected&&b.isGeoJSONFeature),p=this.dropdown.querySelector(".style-item");p.innerHTML=s,c?p.classList.add("selected"):p.classList.remove("selected")}updateDisplay(){this._hierarchy=[];let s=this.tool.targetItemStyles;this.updateTargetDescription();let c=s.map(M=>M.fillColor);c.length==1||new Set(c.map(M=>M.toCSS())).size==1?this.setFillButtonColor(c[0]):this.setFillButtonColor();let p=s.map(M=>M.strokeColor);p.length==1||new Set(p.map(M=>M.toCSS())).size==1?this.setStrokeButtonColor(p[0]):this.setStrokeButtonColor();let b=s.map(M=>M.fillOpacity);b.length==1||new Set(b).size==1?this.setFillButtonOpacity(b[0]):this.setFillButtonOpacity(1);let C=s.map(M=>M.strokeOpacity);C.length==1||new Set(C).size==1?this.setStrokeButtonOpacity(C[0]):this.setStrokeButtonOpacity(1);let P=s.map(M=>M.rescale?M.rescale.strokeWidth:M.strokeWidth);P.length==1||new Set(P).size==1?this.dropdown.querySelectorAll('input[type="number"]').forEach(M=>M.value=P[0]):this.dropdown.querySelectorAll('input[type="number"]').forEach(M=>M.value="")}setFillButtonColor(s=new a.Color("white")){s||(s=new a.Color("white"));let c=s.toCSS(!0),p=bt(s.toCSS(!0));this.dropdown.querySelectorAll('[data-type="fill"] .preview .text').forEach(b=>b.style.color=p),this.dropdown.querySelectorAll('[data-type="fill"] .preview .color').forEach(b=>{b.style.backgroundColor=c,b.style.outlineColor=p}),this.dropdown.querySelectorAll('input[type="color"][data-type="fill"]').forEach(b=>b.value=c)}setStrokeButtonColor(s=new a.Color("black")){s||(s=new a.Color("black"));let c=s.toCSS(!0),p=bt(s.toCSS(!0));this.dropdown.querySelectorAll('[data-type="stroke"] .preview .text').forEach(b=>b.style.color=p),this.dropdown.querySelectorAll('[data-type="stroke"] .preview .color').forEach(b=>{b.style.backgroundColor=c,b.style.outlineColor=p}),this.dropdown.querySelectorAll('input[type="color"][data-type="stroke"]').forEach(b=>b.value=c)}setFillButtonOpacity(s){this.dropdown.querySelectorAll('[data-type="fill"] .preview .bg').forEach(c=>c.style.opacity=s),this.dropdown.querySelectorAll('[data-type="fill"][data-action="opacity"]').forEach(c=>c.value=s)}setStrokeButtonOpacity(s){this.dropdown.querySelectorAll('[data-type="stroke"] .preview .bg').forEach(c=>c.style.opacity=s),this.dropdown.querySelectorAll('[data-type="stroke"][data-action="opacity"]').forEach(c=>c.value=s)}}function ei(L,s,c){let p=new a.Group({visible:!1,applyMatrix:!1});function b(){const ve=p.view.getFlipped()?p.view.getRotation():180-p.view.getRotation();p.rotate(-ve),p.scale(-1,1),p.rotate(ve)}this.element=p,c.addChild(p),p.view.on("rotate",ve=>p.rotate(-ve.rotatedBy)),p.view.on("flip",b),p.numRows=s,p.numColumns=s;let C=document.createElement("canvas");C.height=p.numRows,C.width=p.numColumns;let P=C.getContext("2d",{willReadFrequently:!0}),M=L,z=-(s-1)/2,J=z+s;for(var X=z;X<J;X++)for(var Y=z;Y<J;Y++){let ve=new a.Shape.Rectangle({point:[Y*M,X*M],size:[M,M],strokeWidth:.5,strokeColor:"white",fillColor:"white",rescale:{position:[Y*M,X*M],size:[M,M],strokeWidth:.5}});p.addChild(ve),Y==0&&X==0&&(p.centerCell=ve)}Y=0,X=0;let pe=new a.Shape.Rectangle({point:[Y*M,X*M],size:[M,M],strokeWidth:1,strokeColor:"black",fillColor:null,rescale:{position:[Y*M,X*M],size:[M,M],strokeWidth:1}});p.addChild(pe),Y=0,X=0;let ne=L*(s+2),ie=new a.Shape.Rectangle({point:[Y*M,X*M],size:[ne,ne],strokeWidth:1,strokeColor:"black",fillColor:null,rescale:{position:[Y*M,X*M],size:[ne,ne],strokeWidth:1}});return p.addChild(ie),p.borderElement=ie,ie.sendToBack(),p.applyRescale=function(){p.children.forEach(ve=>ve.applyRescale())},p.view.getFlipped()&&b(),this.updatePosition=function(ve){p.position=ve;let de=p.project.overlay.paperToCanvasCoordinates(ve.x,ve.y),te=Math.round(de.x)-Math.floor(p.numColumns/2),he=Math.round(de.y)-Math.floor(p.numRows/2),ce=p.numColumns,Re=p.numRows,Oe=p.view.pixelRatio,Pe=p.project.overlay.getImageData(te*Oe,he*Oe,ce*Oe,Re*Oe);P.clearRect(0,0,ce,Re),window.createImageBitmap(Pe).then(Ge=>{P.drawImage(Ge,0,0,p.numColumns,p.numRows);let He,qe,De=P.getImageData(0,0,ce,Re);for(He=0,qe=1;He<De.data.length;He+=4,qe+=1)p.children[qe].fillColor.red=De.data[He]/255,p.children[qe].fillColor.green=De.data[He+1]/255,p.children[qe].fillColor.blue=De.data[He+2]/255;p.borderElement.fillColor=p.centerCell.fillColor,this.selectedColor=p.centerCell.fillColor})},this}async function ni(L){let s=(L.project&&L.project.overlay||L.overlay).getViewportRaster();return new Promise(function(c,p){s.onLoad=function(){const b=L.clone();b.transform(b.layer.matrix);let C=s.getAverageColor(b);s.remove(),b.remove(),C||p("Error: The item must be visible on the screen to pick the average color of visible pixels. Please navigate and retry."),c(C)}})}function bt(L){return L=L.replace("#",""),(299*parseInt(L.substr(0,2),16)+587*parseInt(L.substr(2,2),16)+114*parseInt(L.substr(4,2),16))/1e3>=140?"black":"white"}class Vt{constructor(s){if(this.width=s.width,this.height=s.height,this.data=new Uint8Array(s.data),this.data){if(this.height*this.width!=this.data.length)throw"MORPH_DIMENSION_ERROR: incorrect dimensions"}else this.data=Array(this.width*this.height).fill(0);this.dilate=function(){let c=Array.from(this.data),p=this.width,b=this.height;for(var C=0;C<b;C++)for(var P=0;P<p;P++){var M=C*p+P;this.data[M]=c[M]?c[M]:this.adjacentIndices(M).some(function(z){return c[z]})?1:0}return{width:this.width,height:this.height,data:this.data}},this.addBorder=function(){this.width=this.width+2,this.height=this.height+2;let c=this.data;this.data=new Uint8Array(this.width*this.height).fill(0);for(var p=1;p<this.height-1;p++)for(var b=1;b<this.width-1;b++)this.data[p*this.width+b]=c[(p-1)*(this.width-2)+(b-1)];return{width:this.width,height:this.height,data:this.data}},this.adjacentIndices=function(c){var p=c-this.width-1,b=c+this.width-1;let C=this.data.length;return[p,p+1,p+2,c-1,c+1,b,b+1,b+2].filter(function(P){return P>=0&&P<C})}}}const Ke=new class{constructor(){this._map=new WeakMap}set(L,s,c){if(this._map.has(L)||this._map.set(L,new Map),typeof s=="object"){const p=s,b=this._map.get(L);for(const[C,P]of Object.entries(p))b.set(C,P)}else this._map.get(L).set(s,c)}get(L,s){if(this._map.has(L))return s===void 0?Object.fromEntries(this._map.get(L)):this._map.get(L).get(s);this._map.set(L,new Map)}remove(L,s){if(this._map.has(L)){var c=this._map.get(L).delete(s);return this._map.get(L).size===0&&this._map.delete(L),c}}};class ii extends wt{constructor(s){super(s);let c=this,p=this.tool;this.paperScope=c.project.paperScope,this.reduceMode=!1,this.replaceMode=!0,this.floodMode=!0,this.colors={pixelAllowed:new a.Color({red:0,green:0,blue:100}),pixelNotAllowed:new a.Color({red:100,green:0,blue:0}),currentItem:new a.Color({red:0,green:100,blue:0,alpha:.5}),nullColor:new a.Color({red:0,green:0,blue:0,alpha:0}),defaultColor:new a.Color({red:255,green:255,blue:255})},this.threshold=10,this.minThreshold=-1,this.maxThreshold=100,this.startThreshold=10,this.colorPicker=new ei(10,7,c.project.toolLayer),this.colorPicker.element.applyRescale(),this.MagicWand={floodFill:function(C,P,M,z,J,X){return X?function(Y,pe,ne,ie,ve){var de,te,he,ce,Re,Oe,Pe,Ge,He,qe,De=Y.data,Qe=Y.width,rt=Y.height,ot=Y.bytes,et=-1,yt=Qe+1,gt=-1,st=rt+1,Je=ne*Qe+pe,xt=new Uint8Array(Qe*rt),Pt=new Uint8Array(ve||Qe*rt);if(Pt[Je]===1)return null;var ut=[De[Je*=ot],De[Je+1],De[Je+2],De[Je+3]],Bt=[{y:ne,left:pe-1,right:pe+1,dir:1}];do{for(qe=!1,te=(ce=Bt.shift()).left+1;te<ce.right;te++)if(Je=((Pe=ce.y*Qe)+te)*ot,Pt[Pe+te]!==1&&(qe=!0,xt[Pe+te]=1,Pt[Pe+te]=1,!((de=De[Je]-ut[0])>ie||de<-ie||(de=De[Je+1]-ut[1])>ie||de<-ie||(de=De[Je+2]-ut[2])>ie||de<-ie||De[Je+3]===0))){for(Oe=te-1;Oe>-1&&(Je=(Ge=Pe+Oe)*ot,Pt[Ge]!==1)&&(xt[Ge]=1,Pt[Ge]=1,Oe--,!((de=De[Je]-ut[0])>ie||de<-ie))&&!((de=De[Je+1]-ut[1])>ie||de<-ie)&&!((de=De[Je+2]-ut[2])>ie||de<-ie)&&De[Je+3]!==0;);for(Re=te+1;Re<Qe&&(Je=(He=Pe+Re)*ot,Pt[He]!==1)&&(xt[He]=1,Pt[He]=1,Re++,!((de=De[Je]-ut[0])>ie||de<-ie))&&!((de=De[Je+1]-ut[1])>ie||de<-ie)&&!((de=De[Je+2]-ut[2])>ie||de<-ie)&&De[Je+3]!==0;);Oe<yt&&(yt=Oe+1),Re>et&&(et=Re-1),(he=ce.y-ce.dir)>=0&&he<rt&&(Oe<ce.left&&Bt.push({y:he,left:Oe,right:ce.left,dir:-ce.dir}),ce.right<Re&&Bt.push({y:he,left:ce.right,right:Re,dir:-ce.dir})),(he=ce.y+ce.dir)>=0&&he<rt&&Oe<Re&&Bt.push({y:he,left:Oe,right:Re,dir:ce.dir})}qe&&(ce.y<st&&(st=ce.y),ce.y>gt&&(gt=ce.y))}while(Bt.length>0);return{data:xt,width:Y.width,height:Y.height,bounds:{minX:yt,minY:st,maxX:et,maxY:gt},sampleColor:ut}}(C,P,M,z,J):function(Y,pe,ne,ie,ve){var de,te,he,ce,Re,Oe,Pe,Ge,He,qe,De=Y.data,Qe=Y.width,rt=Y.height,ot=Y.bytes,et=-1,yt=Qe+1,gt=-1,st=rt+1,Je=ne*Qe+pe,xt=new Uint8Array(Qe*rt),Pt=new Uint8Array(ve||Qe*rt);if(Pt[Je]===1)return null;var ut=[De[Je*=ot],De[Je+1],De[Je+2],De[Je+3]],Bt=[{y:ne,left:pe-1,right:pe+1,dir:1}];do{for(qe=!1,te=(ce=Bt.shift()).left+1;te<ce.right;te++)if(Je=((Pe=ce.y*Qe)+te)*ot,Pt[Pe+te]!==1&&!((de=De[Je]-ut[0])>ie||de<-ie||(de=De[Je+1]-ut[1])>ie||de<-ie||(de=De[Je+2]-ut[2])>ie||de<-ie||De[Je+3]===0)){for(qe=!0,xt[Pe+te]=1,Pt[Pe+te]=1,Oe=te-1;Oe>-1&&(Je=(Ge=Pe+Oe)*ot,Pt[Ge]!==1)&&!((de=De[Je]-ut[0])>ie||de<-ie)&&!((de=De[Je+1]-ut[1])>ie||de<-ie)&&!((de=De[Je+2]-ut[2])>ie||de<-ie)&&De[Je+3]!==0;)xt[Ge]=1,Pt[Ge]=1,Oe--;for(Re=te+1;Re<Qe&&(Je=(He=Pe+Re)*ot,Pt[He]!==1)&&!((de=De[Je]-ut[0])>ie||de<-ie)&&!((de=De[Je+1]-ut[1])>ie||de<-ie)&&!((de=De[Je+2]-ut[2])>ie||de<-ie)&&De[Je+3]!==0;)xt[He]=1,Pt[He]=1,Re++;Oe<yt&&(yt=Oe+1),Re>et&&(et=Re-1),(he=ce.y-ce.dir)>=0&&he<rt&&(Oe<ce.left&&Bt.push({y:he,left:Oe,right:ce.left,dir:-ce.dir}),ce.right<Re&&Bt.push({y:he,left:ce.right,right:Re,dir:-ce.dir})),(he=ce.y+ce.dir)>=0&&he<rt&&Oe<Re&&Bt.push({y:he,left:Oe,right:Re,dir:ce.dir})}qe&&(ce.y<st&&(st=ce.y),ce.y>gt&&(gt=ce.y))}while(Bt.length>0);return{data:xt,width:Y.width,height:Y.height,bounds:{minX:yt,minY:st,maxX:et,maxY:gt},sampleColor:ut}}(C,P,M,z,J)},thresholdMask:function(C,P,M,z,J={}){let X,Y,pe=C.data,ne=C.width,ie=C.height,ve=C.bytes,de=M*ne+P,te=new Uint8Array(J.append?J.append:ne*ie),he=new Uint8Array(J.ignore?J.ignore:ne*ie);if(he[de]===1)return null;de*=ve;var ce=[pe[de],pe[de+1],pe[de+2],pe[de+3]];for(de=0,Y=0;de<pe.length;de+=4,Y+=1)he[Y]||te[Y]||pe[de+3]!==0&&(X=pe[de]-ce[0],X>z||X<-z||(X=pe[de+1]-ce[1],X>z||X<-z||(X=pe[de+2]-ce[2],X>z||X<-z||(te[Y]=1))));return{data:te,width:C.width,height:C.height,bounds:{minX:0,minY:0,maxX:ne,maxY:ie},sampleColor:ce}},gaussBlur:function(C,P){var M,z,J,X,Y,pe,ne,ie=2*P+1,ve=P*P,de=new Float32Array(ie),te=0,he=C.width,ce=C.height,Re=C.data,Oe=C.bounds.minX,Pe=C.bounds.maxX,Ge=C.bounds.minY,He=C.bounds.maxY;for(M=0;M<P;M++){var qe=(P-M)*(P-M),De=Math.exp(-qe/(2*ve))/(2*Math.PI*ve);de[P+M]=de[P-M]=De,te+=2*De}for(M=0;M<ie;M++)de[M]/=te;var Qe=new Uint8Array(he*ce),rt=P+he,ot=P+ce;for(Y=Ge;Y<He+1;Y++)for(X=Oe;X<Pe+1;X++){for(pe=0,ne=rt-X<ie?rt-X:ie,J=(z=Y*he+X)-P,M=P-X>0?P-X:0;M<ne;M++)pe+=Re[J+M]*de[M];for(ne=ot-Y<ie?ot-Y:ie,J=z-P*he,M=P-Y>0?P-Y:0;M<ne;M++)pe+=Re[J+M*he]*de[M];Qe[z]=pe>.5?1:0}return{data:Qe,width:he,height:ce,bounds:{minX:Oe,minY:Ge,maxX:Pe,maxY:He}}},gaussBlurOnlyBorder:function(C,P,M){var z,J,X,Y,pe,ne,ie,ve,de,te,he=function(Je,xt,Pt){var ut,Bt,qt,Nt,Rt,Qt,Zt,Yt=Je.width,ri=Je.height,$t=Je.data,Ut=new Uint8Array($t),mi=Je.bounds.minX,pi=Je.bounds.maxX,bi=Je.bounds.minY,Ht=Je.bounds.maxY,hi=Yt*ri,ai=new Uint8Array(hi),li=[],Ci=Math.max(mi,1),Ti=Math.min(pi,Yt-2),Si=Math.max(bi,1),Pi=Math.min(Ht,ri-2);if(Pt&&Pt.length>0)for(Rt=0;Rt<hi;Rt++)Pt[Rt]===1&&(Ut[Rt]=1);for(Nt=Si;Nt<Pi+1;Nt++)for(ut=Ci;ut<Ti+1;ut++)$t[Rt=Nt*Yt+ut]!==0&&(Qt=Rt+Yt,Zt=Rt-Yt,Ut[Rt+1]!==0&&Ut[Rt-1]!==0&&Ut[Qt]!==0&&Ut[Qt+1]!==0&&Ut[Qt-1]!==0&&Ut[Zt]!==0&&Ut[Zt+1]!==0&&Ut[Zt-1]!==0||li.push(Rt));if(mi==0)for(Nt=bi;Nt<Ht+1;Nt++)$t[Nt*Yt]===1&&li.push(Nt*Yt);if(pi==Yt-1)for(Nt=bi;Nt<Ht+1;Nt++)$t[Nt*Yt+pi]===1&&li.push(Nt*Yt+pi);if(bi==0)for(ut=mi;ut<pi+1;ut++)$t[ut]===1&&li.push(ut);if(Ht==ri-1)for(ut=mi;ut<pi+1;ut++)$t[Ht*Yt+ut]===1&&li.push(Ht*Yt+ut);var fi,vi=[],Li=xt+Yt,Ei=xt+ri,Ni=2*xt+1;for(hi=li.length,qt=0;qt<hi;qt++){for(ai[Rt=li[qt]]=1,vi.push(Rt),Nt=(Rt-(ut=Rt%Yt))/Yt,fi=Li-ut<Ni?Li-ut:Ni,Qt=Rt-xt,Bt=xt-ut>0?xt-ut:0;Bt<fi;Bt++)ai[Zt=Qt+Bt]===0&&(ai[Zt]=1,vi.push(Zt));for(fi=Ei-Nt<Ni?Ei-Nt:Ni,Qt=Rt-xt*Yt,Bt=xt-Nt>0?xt-Nt:0;Bt<fi;Bt++)ai[Zt=Qt+Bt*Yt]===0&&(ai[Zt]=1,vi.push(Zt))}return vi}(C,P,M),ce=2*P+1,Re=2*P*P,Oe=new Float32Array(ce),Pe=0,Ge=C.width,He=C.height,qe=C.data,De=C.bounds.minX,Qe=C.bounds.maxX,rt=C.bounds.minY,ot=C.bounds.maxY,et=he.length;for(X=0;X<P;X++)J=(P-X)*(P-X),z=Math.exp(-J/Re)/Math.PI,Oe[P+X]=Oe[P-X]=z,Pe+=2*z;for(X=0;X<ce;X++)Oe[X]/=Pe;var yt=new Uint8Array(qe),gt=P+Ge,st=P+He;for(X=0;X<et;X++){for(de=0,ve=((pe=he[X])-(ie=pe%Ge))/Ge,te=gt-ie<ce?gt-ie:ce,ne=pe-P,Y=P-ie>0?P-ie:0;Y<te;Y++)de+=qe[ne+Y]*Oe[Y];if(de>.5)yt[pe]=1,ie<De&&(De=ie),ie>Qe&&(Qe=ie),ve<rt&&(rt=ve),ve>ot&&(ot=ve);else{for(te=st-ve<ce?st-ve:ce,ne=pe-P*Ge,Y=P-ve>0?P-ve:0;Y<te;Y++)de+=qe[ne+Y*Ge]*Oe[Y];de>.5?(yt[pe]=1,ie<De&&(De=ie),ie>Qe&&(Qe=ie),ve<rt&&(rt=ve),ve>ot&&(ot=ve)):yt[pe]=0}}return{data:yt,width:Ge,height:He,bounds:{minX:De,minY:rt,maxX:Qe,maxY:ot}}},createBorderMask:function(C){var P,M,z,J,X,Y=C.width,pe=C.height,ne=C.data,ie=C.bounds.minX,ve=C.bounds.maxX,de=C.bounds.minY,te=C.bounds.maxY,he=ve-ie+1,ce=te-de+1,Re=new Uint8Array(he*ce),Oe=Math.max(ie,1),Pe=Math.min(ve,Y-2),Ge=Math.max(de,1),He=Math.min(te,pe-2);for(M=Ge;M<He+1;M++)for(P=Oe;P<Pe+1;P++)ne[z=M*Y+P]!==0&&(J=z+Y,X=z-Y,ne[z+1]!==0&&ne[z-1]!==0&&ne[J]!==0&&ne[J+1]!==0&&ne[J-1]!==0&&ne[X]!==0&&ne[X+1]!==0&&ne[X-1]!==0||(Re[(M-de)*he+(P-ie)]=1));if(ie==0)for(M=de;M<te+1;M++)ne[M*Y]===1&&(Re[(M-de)*he]=1);if(ve==Y-1)for(M=de;M<te+1;M++)ne[M*Y+ve]===1&&(Re[(M-de)*he+(ve-ie)]=1);if(de==0)for(P=ie;P<ve+1;P++)ne[P]===1&&(Re[P-ie]=1);if(te==pe-1)for(P=ie;P<ve+1;P++)ne[te*Y+P]===1&&(Re[(te-de)*he+(P-ie)]=1);return{data:Re,width:he,height:ce,offset:{x:ie,y:de}}},getBorderIndices:function(C){var P,M,z,J,X,Y=C.width,pe=C.height,ne=C.data,ie=[],ve=Y-1,de=pe-1;for(M=1;M<de;M++)for(P=1;P<ve;P++)ne[z=M*Y+P]!==0&&(J=z+Y,X=z-Y,ne[z+1]!==0&&ne[z-1]!==0&&ne[J]!==0&&ne[J+1]!==0&&ne[J-1]!==0&&ne[X]!==0&&ne[X+1]!==0&&ne[X-1]!==0||ie.push(z));for(M=0;M<pe;M++)ne[M*Y]===1&&ie.push(M*Y);for(P=0;P<Y;P++)ne[P]===1&&ie.push(P);for(z=Y-1,M=0;M<pe;M++)ne[M*Y+z]===1&&ie.push(M*Y+z);for(z=(pe-1)*Y,P=0;P<Y;P++)ne[z+P]===1&&ie.push(z+P);return ie},traceContours:function(C){var P,M,z,J,X,Y,pe,ne,ie,ve,de,te,he,ce,Re,Oe=function(gt){var st,Je,xt=gt.width,Pt=gt.data,ut=gt.bounds.minX,Bt=gt.bounds.maxX,qt=gt.bounds.minY,Nt=gt.bounds.maxY,Rt=Bt-ut+3,Qt=Nt-qt+3,Zt=new Uint8Array(Rt*Qt);for(Je=qt;Je<Nt+1;Je++)for(st=ut;st<Bt+1;st++)Pt[Je*xt+st]===1&&(Zt[(Je-qt+1)*Rt+(st-ut+1)]=1);return{data:Zt,width:Rt,height:Qt,offset:{x:ut-1,y:qt-1}}}(C),Pe=[],Ge=0,He=Oe.width,qe=2*He,De=Oe.height,Qe=Oe.data,rt=Oe.offset.x,ot=Oe.offset.y,et=new Uint8Array(Qe),yt=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]];for(J=1;J<De-1;J++)for(z=1;z<He-1;z++)if(Qe[X=J*He+z]===1){for(P=-He;P<qe;P+=qe)if(Qe[X+P]===0&&et[X+P]===0){for(Ge++,pe=[],ie=(ne=P===He)?2:6,te=he=ve={x:z,y:J},de=null;;){for(et[te.y*He+te.x]=Ge,M=0;M<8;M++){if(Re=yt[ie=(ie+1)%8],Qe[Y=(ce={x:te.x+Re[0],y:te.y+Re[1]}).y*He+ce.x]===1){et[Y]=Ge;break}et[Y]=-1,ce=null}if(ce===null)break;if(te=ce,de){if(he.x===ve.x&&he.y===ve.y&&te.x===de.x&&te.y===de.y)break}else de=ce;pe.push({x:he.x+rt,y:he.y+ot}),he=te,ie=(ie+4)%8}ce!=null&&(pe.push({x:ve.x+rt,y:ve.y+ot}),Pe.push({inner:ne,label:Ge,points:pe}))}}return Pe},simplifyContours:function(C,P,M){var z,J,X,Y,pe,ne,ie,ve,de,te,he,ce,Re,Oe,Pe,Ge,He,qe,De,Qe,rt,ot=C.length,et=[];for(J=0;J<ot;J++)if(pe=(Y=C[J]).points,(ne=Y.points.length)<M){for(ie=[],X=0;X<ne;X++)ie.push({x:pe[X].x,y:pe[X].y});et.push({inner:Y.inner,label:Y.label,points:ie,initialCount:ne})}else{ve=[0,ne-1],de=[{first:0,last:ne-1}];do if(!((te=de.shift()).last<=te.first+1)){for(he=-1,ce=te.first,z=te.first+1;z<te.last;z++)De=pe[z],Qe=pe[te.first],rt=pe[te.last],He=De.x-Qe.x,qe=De.y-Qe.y,Oe=Math.sqrt(He*He+qe*qe),He=De.x-rt.x,qe=De.y-rt.y,Pe=Math.sqrt(He*He+qe*qe),He=Qe.x-rt.x,qe=Qe.y-rt.y,Ge=Math.sqrt(He*He+qe*qe),(Re=Oe>=Math.sqrt(Pe*Pe+Ge*Ge)?Pe:Pe>=Math.sqrt(Oe*Oe+Ge*Ge)?Oe:Math.abs((qe*De.x-He*De.y+Qe.x*rt.y-rt.x*Qe.y)/Ge))>he&&(ce=z,he=Re);he>P&&(ve.push(ce),de.push({first:te.first,last:ce}),de.push({first:ce,last:te.last}))}while(de.length>0);for(ie=[],ne=ve.length,ve.sort(function(yt,gt){return yt-gt}),X=0;X<ne;X++)ie.push({x:pe[ve[X]].x,y:pe[ve[X]].y});et.push({inner:Y.inner,label:Y.label,points:ie,initialCount:Y.points.length})}return et}},this.setToolbarControl(new ze(this)),this.toolbarControl.setThreshold(this.threshold);let b=function(){c.getImageData()};this.onSelectionChanged=b,this.extensions.onActivate=function(){let C=c.item||c.itemToCreate;c.itemLayer=C?C.layer:null,c.getImageData(),c.project.overlay.viewer.addHandler("animation-finish",b),c.project.overlay.viewer.addHandler("rotate",b),c.colorPicker.element.visible=!0,c.project.toolLayer.bringToFront()},this.extensions.onDeactivate=function(C){c.project.overlay.viewer.removeHandler("animation-finish",b),c.project.overlay.viewer.removeHandler("rotate",b),c.colorPicker.element.visible=!1,this.preview&&this.preview.remove(),C&&c.finish(),c.project.toolLayer.sendToBack()},p.extensions.onKeyUp=function(C){C.key=="a"&&c.applyChanges(),C.key=="e"&&c.toolbarControl.cycleReduceMode(),C.key=="r"&&c.toolbarControl.cycleReplaceMode(),C.key=="f"&&c.toolbarControl.cycleFloodMode()}}onMouseDown(s){this.startThreshold=this.threshold,this.imageData.dragStartMask=this.imageData.binaryMask,this.applyMagicWand(s.original.point),this.colorPicker.element.visible=!1}onMouseDrag(s){let c=s.original.point.subtract(s.original.downPoint).multiply(this.project.getZoom());this.reduceMode&&(c=c.multiply(-1));let p=Math.round((c.x+-1*c.y)/2);this.threshold=Math.min(Math.max(this.startThreshold+p,this.minThreshold),this.maxThreshold),Number.isNaN(this.threshold)&&console.warn("NaN value for threshold"),this.toolbarControl.setThreshold(this.threshold),this.applyMagicWand(s.original.downPoint)}onMouseMove(s){this.colorPicker.updatePosition(s.original.point)}onMouseUp(s){this.colorPicker.element.visible=!0,this.colorPicker.element.bringToFront(),this.colorPicker.updatePosition(s.original.point)}finish(){this.itemLayer=null,this.preview&&this.preview.remove(),this.deactivate()}setThreshold(s){this.threshold=parseInt(s)}setReduceMode(s){this.reduceMode=s,this.getImageData()}setFloodMode(s){this.floodMode=s}setReplaceMode(s){this.replaceMode=s}applyChanges(){this.itemToCreate&&(this.itemToCreate.initializeGeoJSONFeature("MultiPolygon"),this.refreshItems());let s={width:this.imageData.width,height:this.imageData.height,data:this.imageData.wandMask,bounds:{minX:0,minY:0,maxX:this.preview.width,maxY:this.preview.height}};if(this.reduceMode){let c=Jt(this.MagicWand,s);c.translate(-1,-1),c.translate(-this.preview.width/2,-this.preview.height/2),c.matrix=this.preview.matrix,c.transform(this.item.layer.matrix.inverted());let p=this.item.subtract(c,!1).toCompoundPath();c.remove(),this.item.children=p.children}else{let c=Jt(this.MagicWand,s);c.translate(-1,-1),c.translate(-this.preview.width/2,-this.preview.height/2),c.matrix=this.preview.matrix,c.transform(this.item.layer.matrix.inverted());let p=this.itemLayer?this.itemLayer.getItems({match:C=>C.isBoundingElement}):[];p.length>0&&(c.children=p.map(C=>C.intersect(c)));let b=this.item.unite(c,!1).toCompoundPath();c.remove(),this.item.children=b.children}this.getImageData()}getImageData(){let s=this,c=s.project.overlay.getImageData(),p=new a.Group({children:[],insert:!1}),b=s.tool.view.bounds,C=new a.Path(b.topLeft,b.topRight,b.bottomRight,b.bottomLeft);C.strokeWidth=0,p.addChild(C.clone()),p.addChild(C),p.clipped=!0;let P=this.itemLayer?this.itemLayer.getItems({match:X=>X.isBoundingElement}):[];if(C.fillColor=P.length==0?s.colors.pixelAllowed:s.colors.pixelNotAllowed,P.forEach(X=>{let Y=X.clone({insert:!1});Y.transform(s.item.layer.matrix),Y.fillColor=s.colors.pixelAllowed,Y.strokeWidth=0,p.addChild(Y)}),s.item){let X=s.item.clone({insert:!1});X.transform(s.item.layer.matrix),X.fillColor=s.colors.currentItem,X.strokeWidth=0,X.selected=!1,p.addChild(X)}p.selected=!1;let M=s.project.paperScope.project.getItems({match:X=>X.isGeoJSONFeatureCollection}),z=M.map(X=>X.visible);M.forEach(X=>X.visible=!1),s.project.toolLayer.addChild(p),s.tool.view.update();let J=s.tool.view.getImageData();p.remove(),M.forEach((X,Y)=>X.visible=z[Y]),s.tool.view.update(),s.imageData={width:c.width,height:c.height,bytes:4,data:c.data,binaryMask:new Uint8ClampedArray(c.width*c.height),wandMask:new Uint8ClampedArray(c.width*c.height),colorMask:J};for(let X=0,Y=0;X<s.imageData.data.length;X+=s.imageData.bytes,Y+=1)s.imageData.binaryMask[Y]=s.imageData.colorMask.data[X+1]?1:0;s.item&&s.item.isGeoJSONFeature&&s.item.getArea()?ni(s.item).then(X=>{let Y=[255*X.red,255*X.green,255*X.blue];s.imageData.sampleColor=Y,s.rasterPreview(s.imageData.binaryMask,Y)}):s.rasterPreview(s.imageData.binaryMask)}applyMagicWand(s){let c,p=this.paperScope.view.projectToView(s),b=this.paperScope.view.pixelRatio;p=p.multiply(b),c=this.floodMode?this.MagicWand.floodFill(this.imageData,Math.round(p.x),Math.round(p.y),this.threshold):this.MagicWand.thresholdMask(this.imageData,Math.round(p.x),Math.round(p.y),this.threshold);let C=this.imageData.binaryMask,P=this.imageData.wandMask,M=this.imageData.dragStartMask,z=this.imageData.colorMask.data,J=c.data;if(this.replaceMode&&!this.reduceMode)for(let X=0,Y=0;X<z.length;X+=this.imageData.bytes,Y+=1)C[Y]=z[X+1]>0||z[X]==0&&J[Y],P[Y]=J[Y];else if(this.replaceMode&&this.reduceMode)for(let X=0,Y=0;X<z.length;X+=this.imageData.bytes,Y+=1)C[Y]=z[X+1]>0&&!(z[X]==0&&J[Y]),P[Y]=J[Y];else if(this.replaceMode||this.reduceMode){if(!this.replaceMode&&this.reduceMode)for(let X=0,Y=0;X<z.length;X+=this.imageData.bytes,Y+=1)C[Y]=M[Y]&&!(z[X]==0&&J[Y]),P[Y]=P[Y]||J[Y]}else for(let X=0,Y=0;X<z.length;X+=this.imageData.bytes,Y+=1)C[Y]=M[Y]||z[X]==0&&J[Y],P[Y]=P[Y]||J[Y];this.rasterPreview(this.imageData.binaryMask,this.imageData.sampleColor||c.sampleColor)}rasterPreview(s,c){let p,b=this,C={0:this.colors.nullColor,1:this.colors.defaultColor};c&&(C[1]=new a.Color(c[0],c[1],c[2]),C[1].hue+=180,C[1].brightness=(180+C[1].brightness)%360),this.preview&&this.preview.remove(),this.preview=this.project.paperScope.overlay.getViewportRaster(!1),window.preview=this.preview,this.project.toolLayer.insertChild(0,this.preview);let P=this.preview.createImageData(this.preview.size);for(var M=0,z=0;M<P.data.length;M+=4,z+=1)p=C[s[z]],P.data[M]=p.red,P.data[M+1]=p.blue,P.data[M+2]=p.green,P.data[M+3]=255*p.alpha;function J(){b.preview.tweenTo({opacity:.15},{duration:1200,easing:"easeInQuart"}).then(X)}function X(){b.preview.tweenTo({opacity:1},{duration:800,easing:"easeOutCubic"}).then(J)}this.preview.setImageData(P,new a.Point(0,0)),J()}}class ze extends Fe{constructor(s){super(s);let c=_t("fa-wand-magic-sparkles");c.classList.add("rotate-by"),c.style.setProperty("--rotate-angle","270deg"),this.button.configure(c,"Magic Wand Tool");let p=document.createElement("div");p.classList.add("wand-toolbar","dropdown"),p.setAttribute("data-tool","wand"),this.dropdown.appendChild(p);let b=document.createElement("div");b.classList.add("threshold-container"),p.appendChild(b);let C=document.createElement("label");b.appendChild(C),C.innerHTML="Threshold",this.thresholdInput=document.createElement("input"),b.appendChild(this.thresholdInput),Object.assign(this.thresholdInput,{type:"range",min:-1,max:100,value:20}),this.thresholdInput.onchange=function(){s.setThreshold(this.value)};let P=document.createElement("div");P.classList.add("toggles"),p.appendChild(P);let M=this.cycleReplaceModeButton=document.createElement("span");M.classList.add("option-toggle"),P.appendChild(M),Ke.set(M,{prefix:"On click:",actions:[{replace:"Start new mask"},{append:"Add to current"}],onclick:function(pe){s.setReplaceMode(pe=="replace")}});let z=this.cycleFloodModeButton=document.createElement("span");z.classList.add("option-toggle"),P.appendChild(z),Ke.set(z,{prefix:"Fill rule:",actions:[{flood:"Contiguous"},{everywhere:"Anywhere"}],onclick:function(pe){s.setFloodMode(pe=="flood")}});let J=this.cycleReduceModeButton=document.createElement("span");J.classList.add("option-toggle"),P.appendChild(J),Ke.set(J,{prefix:"Use to:",actions:[{expand:"Expand selection"},{reduce:"Reduce selection"}],onclick:function(pe){s.setReduceMode(pe=="reduce")}}),[M,z,J].forEach(pe=>{let ne=Ke.get(pe),ie=document.createElement("span");ie.classList.add("label","prefix"),ie.innerHTML=ne.prefix,pe.appendChild(ie),ne.actions.forEach((ve,de)=>{let te=Object.values(ve)[0],he=Object.keys(ve)[0],ce=document.createElement("span");ce.classList.add("option"),ce.innerHTML=te,pe.appendChild(ce),Ke.set(ce,{key:he,index:de}),ve.htmlElement=ce,ve.key=he,de==0&&ce.classList.add("selected")}),pe.addEventListener("click",function(){var Oe;let ve=Ke.get(this),de=ve.actions,te=this.querySelector(".option.selected"),he=(Oe=Ke.get(te))==null?void 0:Oe.index,ce=he===void 0?0:(he+1)%de.length;this.querySelectorAll(".option").forEach(Pe=>Pe.classList.remove("selected"));let Re=de[ce];Re.htmlElement.classList.add("selected"),ve.onclick(Re.key)})});let X=document.createElement("button");X.classList.add("btn","btn-secondary","btn-sm"),X.setAttribute("data-action","apply"),p.appendChild(X),X.innerHTML="Apply",X.onclick=function(){s.applyChanges()};let Y=document.createElement("button");Y.classList.add("btn","btn-secondary","btn-sm"),Y.setAttribute("data-action","done"),p.appendChild(Y),Y.innerHTML="Done",Y.onclick=function(){s.finish()}}isEnabledForMode(s){return["new","Polygon","MultiPolygon"].includes(s)}setThreshold(s){this.thresholdInput.value=s}cycleReduceMode(){this.cycleReduceModeButton.dispatchEvent(new Event("click"))}cycleReplaceMode(){this.cycleReplaceModeButton.dispatchEvent(new Event("click"))}cycleFloodMode(){this.cycleFloodModeButton.dispatchEvent(new Event("click"))}}function Jt(L,s,c){let p=new a.CompoundPath({children:[],fillRule:"evenodd",insert:!1});if(s){s=new Vt(s).addBorder(),s.bounds={minX:0,minY:0,maxX:s.width,maxY:s.height};let C=L.traceContours(s);p.children=C.map(function(P){let M=P.points.map(J=>new a.Point(J)),z=new a.Path(M,{insert:!1});return z.closed=!0,z}).filter(function(P){if(Math.abs(P.area)>=50)return!0;P.remove()})}return p}function Xt(L,s,c,p){var b=L.curve===s,C=s.getNormalAtTime(b?0:1).multiply(p),P=L.point.add(C),M=new a.Segment(P),z=b?"handleOut":"handleIn";return M[z]=L[z].add(c.subtract(C).divide(2)),M}function St(L,s){var c=new a.Curve(L.segment1.handleOut.add(L.segment1.point),new a.Point(0,0),new a.Point(0,0),L.segment2.handleIn.add(L.segment2.point)).getNormalAtTime(.5).multiply(s),p=Xt(L.segment1,L,c,s),b=Xt(L.segment2,L,c,s),C=new a.Curve(p,b);if(C.getIntersections(C).length===0){var P=Math.min(Math.abs(s)/10,1),M=C.getPointAtTime(.5).getDistance(L.getPointAtTime(.5));if(Math.abs(M-Math.abs(s))>P){var z=L.divideAtTime(.5);if(z!=null)return St(L,s).concat(St(z,s))}}return[p,b]}function Kt(L,s){return L.x*s.y-L.y*s.x}function Xe(L,s,c,p,b,C){var P,M,z,J,X,Y,pe,ne,ie,ve,de,te,he,ce,Re=new a.Curve(L[0],L[1]),Oe=new a.Curve(s[0],s[1]),Pe=Re.getIntersections(Oe),Ge=L[1].point.getDistance(s[0].point);if(c.isSmooth())s[0].handleOut=s[0].handleOut.project(c.handleOut),s[0].handleIn=L[1].handleIn.project(c.handleIn),s[0].point=L[1].point.add(s[0].point).divide(2),L.pop();else if(Pe.length===0)if(Ge>.1*Math.abs(b))switch(p){case"miter":var He=(pe=Re.point2,ne=Re.point2.add(Re.getTangentAtTime(1)),ie=Oe.point1,ve=Oe.point1.add(Oe.getTangentAtTime(0)),de=pe.subtract(ne),te=ie.subtract(ve),he=Kt(pe,ne),ce=Kt(ie,ve),new a.Point(he*te.x-de.x*ce,he*te.y-de.y*ce).divide(Kt(de,te)));Math.max(He.getDistance(Re.point2),He.getDistance(Oe.point1))<Math.abs(b)*C&&L.push(new a.Segment(He));break;case"round":var qe=(P=L[1],M=s[0],z=c.point,J=b,X=P.point.subtract(z).add(M.point.subtract(z)).normalize(Math.abs(J)).add(z),Y=new a.Path.Arc({from:P.point,to:M.point,through:X,insert:!1}),P.handleOut=Y.firstSegment.handleOut,M.handleIn=Y.lastSegment.handleIn,Y.segments.length===3?Y.segments[1]:null);qe&&L.push(qe)}else s[0].handleIn=L[1].handleIn,L.pop();else{var De=Re.divideAt(Pe[0]);if(De){He=De.segment1;var Qe=Oe.divideAt(Oe.getIntersections(Re)[0]);He.handleOut=Qe?Qe.segment1.handleOut:s[0].handleOut,L.pop(),s[0]=He}else s[0].handleIn=L[1].handleIn,L.pop()}}function Ot(L){return L.children.length===1&&(L=L.children[0]).remove(),L}function It(L,s){if(s===void 0&&(s=.01),L.closed){var c=Math.abs(L.area*s);if(L.clockwise||L.reverse(),(L=L.unite(L,{insert:!1}))instanceof a.CompoundPath&&(L.children.filter(function(p){return Math.abs(p.area)<c}).forEach(function(p){return p.remove()}),L.children.length===1))return Ot(L)}return L}function Et(L,s){var c=(L.segments[0].location.offset+L.segments[Math.max(1,Math.floor(L.segments.length/2))].location.offset)/3;return s.getNearestLocation(L.getPointAt(c)).offset<s.getNearestLocation(L.getPointAt(2*c)).offset}function At(L,s,c,p){var b,C;b=function(Y,pe){var ne=Y.clone({insert:!1});return ne.reduce({}),Y.clockwise||(ne.reverse(),pe=-pe),[ne,pe]}(L,s),C=b[0],s=b[1];for(var P=C.curves.slice().map(function(Y){return St(Y,s)}).flat(),M=[],z=0;z<P.length;z+=2)M.push(P.slice(z,z+2));var J=function(Y,pe,ne,ie,ve){var de=ne.segments;if(Y.length==0)return ne.segments;for(var te=Y[0].slice(),he=0;he<Y.length-1;++he)Xe(Y[he],Y[he+1],de[he+1],pe,ie,ve);return ne.closed&&(Xe(Y[Y.length-1],te,de[0],pe,ie,ve),Y[0][0]=te[0]),Y}(M,c,C,s,p).flat(),X=function(Y){if(Y.closed){var pe=Y.unite(Y,{insert:!1});if(pe instanceof a.CompoundPath)return pe.children.filter(function(ne){return!(ne.segments.length>1&&Et(ne,Y))}).forEach(function(ne){return ne.remove()}),Ot(pe)}return Y}(new a.Path({segments:J,insert:!1,closed:L.closed}));return X.reduce({}),C.closed&&(C.clockwise&&s<0||!C.clockwise&&s>0)&&function(Y,pe){var ne=function(ie){return ie instanceof a.CompoundPath?ie.children.map(function(ve){return ve.segments}).flat():ie.segments}(Y).slice();ne.forEach(function(ie){pe.contains(ie.point)||ie.remove()})}(X,L),C.clockwise!==L.clockwise&&X.reverse(),It(X)}function E(L,s,c){var p=L.point.add(s.point).divide(2),b=s.point.subtract(L.point).rotate(-90,new a.Point(0,0)).normalize(c),C=p.add(b);return new a.Path.Arc({from:L.point,to:s.point,through:C,insert:!1}).segments}function q(L,s,c,p,b){var C=At(L,s=L.clockwise?s:-s,c,b),P=At(L,-s,c,b);if(L.closed)return C.subtract(P,{insert:!1});var M=P,z=new Array;P instanceof a.CompoundPath&&((z=P.children.filter(function(ne){return ne.closed})).forEach(function(ne){return ne.remove()}),M=P.children[0]),M.reverse();var J=function(ne,ie,ve,de){if(ne instanceof a.CompoundPath){var te=ne.children.map(function(Ge){return{c:Ge,a:Math.abs(Ge.area)}});ne=(te=te.sort(function(Ge,He){return He.a-Ge.a}))[0].c}var he=ne.segments.slice(),ce=ie.segments.slice();if(de==="round"){var Re=E(ce[ce.length-1],he[0],ve),Oe=E(he[he.length-1],ce[0],ve),Pe=new a.Path({segments:Re.concat(he,Oe,ce),closed:!0,insert:!1});return Pe.reduce({}),Pe}return new a.Path({segments:he.concat(ce),closed:!0,insert:!1})}(C,M,s,p);if(z.length>0)for(var X=0,Y=z;X<Y.length;X++){var pe=Y[X];J=J.subtract(pe,{insert:!1})}return J}function fe(L){return L.closed?L.unite(L,{insert:!1}):L}a===void 0&&console.error("paper-offset.mjs requires paper.js to have been loaded");var Se=function(){function L(){}return L.offset=function(s,c,p){var b=function(C,P,M,z){var J=fe(C),X=J;if(J instanceof a.Path)X=At(J,P,M,z);else{var Y=J.children.map(function(pe){if(pe.segments.length>1){Et(pe,C)||pe.reverse();var ne=At(pe,P,M,z);return(ne=It(ne)).clockwise!==pe.clockwise&&ne.reverse(),ne instanceof a.CompoundPath?(ne.applyMatrix=!0,ne.children):ne}return null}).flat().filter(function(pe){return!!pe});X=new a.CompoundPath({children:Y,insert:!1})}return X.copyAttributes(J,!1),X.remove(),X}(s,c,(p=p||{}).join||"miter",p.limit||10);return p.insert===void 0&&(p.insert=!0),p.insert&&(s.parent||a.project.activeLayer).addChild(b),b},L.offsetStroke=function(s,c,p){var b=function(C,P,M,z,J){var X=fe(C),Y=X;return(Y=X instanceof a.Path?q(X,P,M,z,J):X.children.flatMap(function(pe){return q(pe,P,M,z,J)}).reduce(function(pe,ne){return pe.unite(ne,{insert:!1})})).strokeWidth=0,Y.fillColor=X.strokeColor,Y.shadowBlur=X.shadowBlur,Y.shadowColor=X.shadowColor,Y.shadowOffset=X.shadowOffset,Y}(s,c,(p=p||{}).join||"miter",p.cap||"butt",p.limit||10);return p.insert===void 0&&(p.insert=!0),p.insert&&(s.parent||a.project.activeLayer).addChild(b),b},L}();class _e extends wt{constructor(s){super(s);let c=this;this.setToolbarControl(new Ce(this)),this.eraseMode=!1,this.drawColor=new a.Color("green"),this.eraseColor=new a.Color("red"),this.drawColor.alpha=.5,this.eraseColor.alpha=.5,this.autoSimplify=!1,this.radius=0,this.cursor=new a.Shape.Circle(new a.Point(0,0),this.radius),this.cursor.set({strokeWidth:1,strokeColor:"black",fillColor:this.drawColor,opacity:1,visible:!1}),this.cursor.name="brushtool",this.pathGroup=new a.Group([new a.Path,new a.Path]),c.project.toolLayer.addChild(this.pathGroup),c.project.toolLayer.addChild(this.cursor),this.extensions.onActivate=function(){c.cursor.radius=c.radius/c.project.getZoom(),c.cursor.strokeWidth=1/c.project.getZoom(),c.cursor.visible=!0,c.tool.minDistance=3/c.project.getZoom(),c.tool.maxDistance=10/c.project.getZoom(),c.targetLayer.addChild(c.pathGroup)},this.extensions.onDeactivate=function(p){c.cursor.visible=!1,c.project.toolLayer.addChild(c.pathGroup),p&&c.finish()},this.tool.onMouseWheel=function(p){p.preventDefault(),p.stopPropagation(),p.deltaY!=0&&c.toolbarControl.updateBrushRadius({larger:p.deltaY<0})},this.tool.extensions.onKeyDown=function(p){p.key=="e"&&(c.eraseMode===!1?c.setEraseMode(!0):c.eraseMode="keyhold")},this.tool.extensions.onKeyUp=function(p){p.key=="e"&&c.eraseMode=="keyhold"&&c.setEraseMode(!1)}}onMouseDown(s){s.preventDefault(),s.stopPropagation(),this.itemToCreate&&(this.itemToCreate.initializeGeoJSONFeature("MultiPolygon"),this.refreshItems()),this.cursor.position=s.original.point;let c=new a.Path([s.point]);c.mode=this.eraseMode?"erase":"draw",c.radius=this.radius/this.project.getZoom();const p=2*this.cursor.radius/this.targetLayer.scaling.x;this.pathGroup.lastChild.replaceWith(c),this.pathGroup.lastChild.set({strokeWidth:p,fillColor:null,strokeCap:"round"}),c.mode=="erase"?(this.pathGroup.firstChild.fillColor=this.eraseColor,this.pathGroup.lastChild.strokeColor=this.eraseColor):(this.pathGroup.firstChild.fillColor=this.drawColor,this.pathGroup.lastChild.strokeColor=this.drawColor)}onMouseUp(s){this.modifyArea()}onMouseMove(s){this.cursor.position=s.original.point}onMouseDrag(s){this.cursor.position=s.original.point,this.item&&(this.pathGroup.lastChild.add(s.point),this.pathGroup.lastChild.smooth({type:"continuous"}))}setRadius(s){this.radius=s,this.cursor.radius=s/this.project.getZoom()}setAutoSimplify(s){this.autoSimplify=!!s}setEraseMode(s){this.eraseMode=s,this.cursor.fillColor=s?this.eraseColor:this.drawColor,this.toolbarControl.setEraseMode(this.eraseMode)}finish(){this.deactivate()}modifyArea(){let s,c=this.pathGroup.lastChild;const p=c.radius/this.targetLayer.scaling.x;if(c.segments.length>1?(s=Se.offsetStroke(c,p,{join:"round",cap:"round",insert:!0}),s.contains(c.segments[0].point)||(console.error("Oops! Bad stroke offset! Trying to correct"),c.segments[0].point.x+=.001,s=Se.offsetStroke(c,p,{join:"round",cap:"round",insert:!0}))):s=new a.Path.RegularPolygon({center:c.firstSegment.point,radius:p,sides:360}),s.strokeWidth=1/this.project.getZoom(),s.strokeColor="black",s.fillColor="yellow",s.flatten(),s.name="shapeobject",!this.item.isBoundingElement){let C=this.item.parent.children.filter(P=>P.isBoundingElement);s.applyBounds(C)}let b;if(c.visible=!1,this.autoSimplify&&(s=s.toCompoundPath(),this.doSimplify(s)),b=this.eraseMode?this.item.subtract(s,{insert:!1}):this.item.unite(s,{insert:!1}),b){b=b.toCompoundPath();const C=b.children.filter(P=>P.area>0||Math.abs(P.area)>10);this.item.removeChildren(),this.item.addChildren(C),b.remove()}s.remove()}}class Ce extends Fe{constructor(s){super(s);const c=_t("fa-brush");c.classList.add("rotate-by"),c.style.setProperty("--rotate-angle","225deg"),this.button.configure(c,"Brush Tool");const p=document.createElement("div");p.classList.add("dropdown","brush-toolbar"),p.setAttribute("data-tool","brush"),this.dropdown.appendChild(p);const b=document.createElement("label");b.innerHTML="Radius",p.appendChild(b),this.rangeInput=document.createElement("input"),p.appendChild(this.rangeInput),Object.assign(this.rangeInput,{type:"range",min:1,max:100,step:1,value:20}),this.rangeInput.addEventListener("change",function(){s.setRadius(this.value)}),this.eraseButton=document.createElement("button"),p.appendChild(this.eraseButton),this.eraseButton.innerHTML="Eraser",this.eraseButton.setAttribute("data-action","erase"),this.eraseButton.addEventListener("click",function(){let C=this.classList.toggle("active");s.setEraseMode(C)}),setTimeout(()=>s.setRadius(20),0)}isEnabledForMode(s){return["new","Polygon","MultiPolygon"].includes(s)}updateBrushRadius(s){s.larger?(this.rangeInput.value=parseInt(this.rangeInput.value)+parseInt(this.rangeInput.step),this.rangeInput.dispatchEvent(new Event("change"))):(this.rangeInput.value=parseInt(this.rangeInput.value)-parseInt(this.rangeInput.step),this.rangeInput.dispatchEvent(new Event("change")))}setEraseMode(s){s?this.eraseButton.classList.add("active"):this.eraseButton.classList.remove("active")}}class me{constructor(s){var c;if(nt.includes(((c=s.geometry)==null?void 0:c.type)||s.geometry)===!1)throw"Bad GeoJSON Geometry type";this._paperItem=null,this._props=s.properties||{}}static supportsGeoJSONType(s,c){return!1}_supportsGeoJSONObj(s){var c,p,b;return this.constructor.supportsGeoJSONType((c=s.geometry)==null?void 0:c.type,(b=(p=s.geometry)==null?void 0:p.properties)==null?void 0:b.subtype)}getCoordinates(){return[]}getProperties(){return{}}getStyleProperties(){return this.paperItem.style.toJSON()}static onTransform(){}supportsGeoJSONType(s,c){return this.constructor.supportsGeoJSONType(s,c)}getGeoJSONType(){return{type:void 0,subtype:void 0}}getLabel(){if(this.paperItem.displayName)return this.paperItem.displayName;{const s=this.getGeoJSONType();return s.subtype||s.type}}get type(){return this.getGeoJSONType().type}get subtype(){return this.getGeoJSONType().subtype}get paperItem(){return this._paperItem}set paperItem(s){this._paperItem=s,function(c){let p=c.paperItem,b=c.constructor,C=c._props;Ee.registerFeature(p),p.onTransform=b.onTransform,c.setStyle(C),p.fillOpacity=p.fillColor?p.fillColor.alpha:1,p.displayName=C.label||c.getLabel(),p.annotationItem=c,p.replaceWith=Ze,"selected"in C&&(p.selected=C.selected)}(this)}setStyle(s){this._paperItem&&this._paperItem.style.set(s)}toGeoJSONFeature(){return{type:"Feature",geometry:this.toGeoJSONGeometry(),properties:{label:this.paperItem.displayName,selected:this.paperItem.selected,...this.getStyleProperties(),userdata:this.paperItem.data.userdata}}}toGeoJSONGeometry(){let s={type:this.type,properties:this.getProperties(),coordinates:this.getCoordinates()};return this.subtype&&(s.properties=Object.assign(s.properties,{subtype:this.subtype})),s}}const nt=["Point","LineString","Polygon","MultiPoint","MultiLineString","MultiPolygon","GeometryCollection",null],Ae=[];class Ne{constructor(){}static register(s){if(s.supportsGeoJSONType===me.supportsGeoJSONType)throw console.error("Static accessor supportsGeoJSONType must be implemented"),"Static accessor supportsGeoJSONType must be implemented";Ae.includes(s)||Ae.push(s)}static getConstructor(s){var b,C,P;if(!("geometry"in s)||!("properties"in s))return void console.error("Invalid GeoJSON Feature object. Returning undefined.");let c=(b=s.geometry)==null?void 0:b.type,p=(P=(C=s.geometry)==null?void 0:C.properties)==null?void 0:P.subtype;return Ae.filter(M=>M.supportsGeoJSONType(c,p)).slice(-1)[0]}static itemFromGeoJSON(s){var p;nt.includes(s.type)&&(s={type:"Feature",geometry:s,properties:{}});let c=Ne.getConstructor(s);if(c){let b=new c(s);return b.paperItem.data.userdata=(p=s.properties)==null?void 0:p.userdata,b.paperItem}}static itemFromAnnotationItem(s){if(!s.annotationItem)return void error("Only paper.Items constructed by AnnotationItem implementations are supported");let c={type:"Feature",geometry:s.annotationItem.toGeoJSONGeometry(),properties:s.annotationItem._props};return Ne.itemFromGeoJSON(c)}}function Ze(L){L.isGeoJSONFeature||console.warn("An item with isGeoJSONFeature==false was used to replace an item."),L._callbacks=this._callbacks;let s=y.extend(!0,this.rescale,L.rescale);return L.style=this.style,L.rescale=s,this.emit("item-replaced",{item:L}),L.project.emit("item-replaced",{item:L}),a.Item.prototype.replaceWith.call(this,L),L.selected=this.selected,L.updateFillOpacity(),L.applyRescale(),L.project.view.update(),L}class mt extends me{constructor(s){super(s),s.geometry.type!=="Point"&&error('Bad geoJSON object: type !=="Point"');let c=s.geometry.coordinates.slice(0,2),p=new a.Group;p.pivot=new a.Point(0,0),p.applyMatrix=!0;let b=new a.Path.Circle(new a.Point(0,0),6);b.scale(new a.Point(1,.5),new a.Point(0,0)),p.addChild(b);let C=new a.Path.Line(new a.Point(0,0),new a.Point(0,-6));p.addChild(C);let P=new a.Path.Circle(new a.Point(0,-9),3);p.addChild(P),p.position=new a.Point(...c),p.scaleFactor=p.project._scope.scaleByCurrentZoom(1),p.scale(p.scaleFactor,b.bounds.center),p.rescale=p.rescale||{},p.rescale.size=function(M){p.scale(1/(p.scaleFactor*M)),p.scaleFactor=1/M},p.applyRescale(),this.paperItem=p}setStyle(s){s.rescale=y.extend(!0,s.rescale,this.paperItem.rescale),this.paperItem.style.set(s)}static supportsGeoJSONType(s,c=null){return s.toLowerCase()==="point"&&c===null}getGeoJSONType(){return{type:"Point"}}getCoordinates(){let s=this.paperItem.children[0];return[s.bounds.center.x,s.bounds.center.y]}getStyleProperties(){return this.paperItem.children[0].style.toJSON()}static onTransform(){switch(arguments[0]){case"rotate":{let s=arguments[1],c=arguments[2];this.rotate(-s,c);let p=this.position.subtract(c),b=c.add(p.rotate(s)).subtract(this.position);this.translate(b);break}case"scale":{let s=arguments[1],c=arguments[2],p=arguments[3];this.matrix.append(p.inverted());let b=this.pivot.transform(this.matrix).subtract(s),C=b.rotate(-c).multiply(p.scaling).rotate(c).subtract(b);this.translate(C);break}}}}class B extends wt{constructor(s){super(s);let c=new mt({geometry:{type:"Point",coordinates:[0,0]},properties:{label:"Point Tool"}}).paperItem;c.visible=!1,delete c.isGeoJSONFeature,this.cursor=c,this.dragging=!1,this.project.toolLayer.addChild(c),this.setToolbarControl(new I(this)),this.extensions.onActivate=()=>{this.project.toolLayer.bringToFront(),this.setCursorProps()},this.extensions.onDeactivate=()=>{this.project.toolLayer.sendToBack(),this.cursor.visible=!1,this.project.overlay.removeClass("point-tool-grab","point-tool-grabbing")},this.onSelectionChanged=()=>{this.setCursorProps()}}setCursorProps(){this.itemToCreate?(this.cursor.fillColor=this.itemToCreate.fillColor,this.cursor.strokeColor=this.itemToCreate.strokeColor,this.cursor.visible=!0):this.cursor.visible=!1}onMouseMove(s){this.cursor.position=s.original.point,this.item.hitTest(s.point)?this.project.overlay.addClass("point-tool-grab"):this.project.overlay.removeClass("point-tool-grab")}onMouseDown(s){this.itemToCreate?(this.itemToCreate.initializeGeoJSONFeature("Point"),this.refreshItems(),this.item.position=s.point,this.cursor.visible=!1,this.toolbarControl.updateInstructions("Point")):this.item&&this.item.hitTest(s.point)&&(this.dragging=!0,this.project.overlay.addClass("point-tool-grabbing"))}onMouseDrag(s){this.dragging&&this.item&&(this.item.position=this.item.position.add(s.delta))}onMouseUp(){this.dragging=!1,this.project.overlay.removeClass("point-tool-grabbing")}}class I extends Fe{constructor(s){super(s);const c=_t("fa-map-pin");this.button.configure(c,"Point Tool"),this.instructions=document.createElement("span"),this.instructions.classList.add("instructions"),this.dropdown.appendChild(this.instructions)}isEnabledForMode(s){return this.updateInstructions(s),["new","Point"].includes(s)}updateInstructions(s){const c=s=="new"?"Click to drop a pin":s=="Point"?"Drag to reposition":"???";this.instructions.innerHTML=c}}class N extends me{constructor(s){super(s),s.geometry.type!=="Point"&&error('Bad geoJSON object: type !=="Point"');let c=s.geometry.coordinates.slice(0,2),p=this.paperItem=new a.Group;p.pivot=new a.Point(0,0),p.applyMatrix=!0;let b=new a.Path.Circle(new a.Point(0,0),4);p.addChild(b);let C=new a.PointText({point:new a.Point(0,0),pivot:new a.Point(0,0),content:s.geometry.properties.content||"PointText",fontSize:18,strokeWidth:1});function P(){const z=p.view.getFlipped()?p.view.getRotation():180-p.view.getRotation();p.rotate(-z),p.scale(-1,1),p.rotate(z)}p.addChild(C),this.refreshTextOffset(),C.on("content-changed",()=>{this.refreshTextOffset()}),p.position=new a.Point(...c),p.scaleFactor=p.project._scope.scaleByCurrentZoom(1),p.scale(p.scaleFactor,b.bounds.center),p.rescale=p.rescale||{},p.rescale.size=function(z){p.scale(1/(p.scaleFactor*z)),p.scaleFactor=1/z,C.strokeWidth=0},p.view.getFlipped()&&P();const M=p.view.getFlipped()?180-p.view.getRotation():-p.view.getRotation();p.rotate(M),p.view.on("rotate",z=>{const J=-z.rotatedBy;p.rotate(J)}),p.view.on("flip",()=>{P()}),p.applyRescale()}setStyle(s){s.rescale=y.extend(!0,s.rescale,this.paperItem.rescale),this.paperItem.style.set(s)}get textitem(){return this.paperItem.children[1]}get circle(){return this.paperItem.children[0]}static supportsGeoJSONType(s,c){return s.toLowerCase()==="point"&&(c==null?void 0:c.toLowerCase())==="pointtext"}getGeoJSONType(){return{type:"Point",subtype:"PointText"}}getCoordinates(){let s=this.paperItem.children[0];return[s.bounds.center.x,s.bounds.center.y]}getProperties(){return{content:this.paperItem.children[1].content}}getStyleProperties(){return this.paperItem.children[0].style.toJSON()}static onTransform(){switch(arguments[0]){case"rotate":{let s=arguments[1],c=arguments[2];this.rotate(-s,c);let p=this.position.subtract(c),b=c.add(p.rotate(s)).subtract(this.position);this.translate(b);break}case"scale":{let s=arguments[1],c=arguments[2],p=arguments[3];this.matrix.append(p.inverted());let b=this.pivot.transform(this.matrix).subtract(s),C=b.rotate(-c).multiply(p.scaling).rotate(c).subtract(b);this.translate(C);break}}}refreshTextOffset(){const s=this.textitem.view.getFlipped();let c=this.textitem.getInternalBounds(),p=c.width/2/this.textitem.layer.scaling.x*(s?1:-1),b=-c.height/2/this.textitem.layer.scaling.x,C=s?180-this.textitem.view.getRotation():this.textitem.view.getRotation(),P=new a.Point(p,b).divide(this.textitem.view.getZoom()).rotate(-C);this.textitem.position=this.circle.bounds.center.add(P)}}class V extends wt{constructor(c){super(c);Ri(this,"onMouseDrag",function(c){this.dragging&&this.item&&(this.item.position=this.item.position.add(c.delta))});this.dragging=!1;let p=new N({geometry:{type:"Point",coordinates:[0,0],properties:{subtype:"PointText",content:"Click to place"}},properties:{label:"Text Tool"}}),b=this.cursor=p.paperItem;b.isGeoJSONFeature=!1,b.fillColor="grey",b.strokeColor="black",b.strokeWidth=1,b.visible=!1,this.project.toolLayer.addChild(b),p.refreshTextOffset(),b.applyRescale(),this.setToolbarControl(new ge(this)),this.extensions.onActivate=()=>{this.itemToCreate?(this.cursor.visible=!0,p.refreshTextOffset(),b.applyRescale()):this.item&&this._updateTextInput()},this.extensions.onDeactivate=()=>{this.project.toolLayer.addChild(this.cursor),this.cursor.visible=!1,this.project.overlay.removeClass("point-tool-grab","point-tool-grabbing")}}onSelectionChanged(){this.cursor.visible=!!this.itemToCreate,this._updateTextInput()}onMouseMove(c){this.cursor.position=c.original.point,this.item.hitTest(c.point)?this.project.overlay.addClass("point-tool-grab"):this.project.overlay.removeClass("point-tool-grab")}onMouseDown(c){this.itemToCreate?(this.itemToCreate.initializeGeoJSONFeature("Point","PointText"),this.refreshItems(),this.item.children[1].content=this.toolbarControl.getValue(),this.item.position=c.point,this.cursor.visible=!1,this.toolbarControl.updateInstructions("Point:PointText")):this.item&&this.item.hitTest(c.point)&&(this.dragging=!0,this.project.overlay.addClass("point-tool-grabbing"))}onMouseUp(){this.dragging=!1,this.project.overlay.removeClass("point-tool-grabbing")}_updateTextInput(){let c=this.item&&this.item.annotationItem.subtype=="PointText"?this.item.children[1].content:"";this.toolbarControl.setItemText(c),this.cursor.children[1].content=c.length?c:this.toolbarControl.input.getAttribute("placeholder")}}class ge extends Fe{constructor(s){super(s);let c=this;const p=_t("fa-font");this.button.configure(p,"Text Tool"),this.instructions=document.createElement("span"),this.instructions.classList.add("instructions"),this.dropdown.appendChild(this.instructions),this.input=document.createElement("input"),this.input.setAttribute("type","text"),this.input.setAttribute("placeholder","Enter text"),this.dropdown.appendChild(this.input),this.input.addEventListener("input",function(){let b=c.getValue();c.tool.item&&c.tool.item.annotationItem.subtype=="PointText"&&(c.tool.item.children[1].content=b),c.tool.cursor.children[1].content=b}),this.input.dispatchEvent(new Event("input"))}setItemText(s){this.input.value=s}getValue(){let s=this.input;return s.value.trim()||s.getAttribute("placeholder")}isEnabledForMode(s){return this.updateInstructions(s),["new","Point:PointText"].includes(s)}updateInstructions(s){const c=s=="new"?"Click to place":s=="Point:PointText"?"Drag to reposition":"???";this.instructions.innerHTML=c}}class ke extends wt{constructor(s){super(s);let c=this,p=new a.Group({visible:!1}),b=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),C=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),P=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),M=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]});p.addChildren([b,C,P,M]),this.project.toolLayer.addChild(p),this.h1=b,this.h2=C,this.v1=P,this.v2=M,this.crosshairTool=p,this.mode=null,this.creating=null,this.setToolbarControl(new je(this)),this.extensions.onActivate=this.onSelectionChanged=function(){c.itemToCreate?(c.mode="creating",p.visible=!0,c.creating=null,c.toolbarControl.updateInstructions("new")):c.creating&&c.creating.parent==c.item?(c.mode="creating",p.visible=!0,c.toolbarControl.updateInstructions("new")):c.item?(c.creating=null,c.mode="modifying",p.visible=!1,c.toolbarControl.updateInstructions("Point:Rectangle")):c.deactivate()},this.extensions.onDeactivate=function(z){z&&(c.creating=null),p.visible=!1,c.mode=null,c.project.overlay.removeClass("rectangle-tool-resize"),c.project.overlay.removeClass("rectangle-tool-move")}}get rectangle(){return this.item.children&&this.item.children[0]||this.item}setCursorPosition(s){let c=this.tool,p=c.view.projectToView(s),b=c.view.viewToProject(new a.Point(0,p.y)),C=c.view.viewToProject(new a.Point(c.view.viewSize.width,p.y)),P=c.view.viewToProject(new a.Point(p.x,0)),M=c.view.viewToProject(new a.Point(p.x,c.view.viewSize.height));this.h1.segments[0].point=b,this.h2.segments[0].point=b,this.h1.segments[1].point=C,this.h2.segments[1].point=C,this.v1.segments[0].point=P,this.v2.segments[0].point=P,this.v1.segments[1].point=M,this.v2.segments[1].point=M}onMouseDown(s){if(this.itemToCreate){this.itemToCreate.initializeGeoJSONFeature("Point","Rectangle"),this.refreshItems();let c=new a.Path.Rectangle(s.point,s.point);this.creating=c,this.item.removeChildren(),this.item.addChild(c),this.mode="creating"}else if(this.item){let c=this.item.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)});if(c){this.mode="corner-drag";let p=(c.segment.path.segments.indexOf(c.segment)+2)%c.segment.path.segments.length;return this.refPoint=c.segment.path.segments[p].point,void(this.ctrlPoint=c.segment.point.clone())}if(this.item.contains(s.point))return void(this.mode="fill-drag")}}onMouseMove(s){this.setCursorPosition(s.original.point),this.mode=="modifying"&&(this.item.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)})?this.project.overlay.addClass("rectangle-tool-resize"):this.project.overlay.removeClass("rectangle-tool-resize"),this.item.contains(s.point)?this.project.overlay.addClass("rectangle-tool-move"):this.project.overlay.removeClass("rectangle-tool-move"))}onMouseDrag(s){let c,p,b,C=this.item.center;if(this.mode=="creating")if(b=-(this.item.view.getRotation()+this.item.layer.getRotation()),c=s.downPoint,s.modifiers.command||s.modifiers.control){let z=s.point.subtract(s.downPoint),J=[[1,1],[1,-1],[-1,-1],[-1,1]].map(Y=>new a.Point(Y[0],Y[1]).rotate(b)).sort((Y,pe)=>Y.dot(z)-pe.dot(z))[0],X=z.project(J);p=s.downPoint.add(X)}else p=s.point;else{if(this.mode!="corner-drag")return this.mode=="fill-drag"?void this.item.translate(s.delta):void this.setCursorPosition(s.original.point);if(b=this.rectangle.segments[1].point.subtract(this.rectangle.segments[0].point).angle,c=this.refPoint,s.modifiers.command||s.modifiers.control){let z=s.point.subtract(this.refPoint),J=this.ctrlPoint.subtract(this.refPoint),X=z.project(J);p=this.refPoint.add(X)}else p=s.point}this.setCursorPosition(this.targetLayer.matrix.transform(p));let P=new a.Rectangle(c.rotate(-b,C),p.rotate(-b,C)),M=[P.topLeft,P.topRight,P.bottomRight,P.bottomLeft].map(z=>z.rotate(b,C));this.rectangle.set({segments:M})}onMouseUp(){this.mode="modifying",this.crosshairTool.visible=!1,this.creating=null,this.toolbarControl.updateInstructions("Point:Rectangle")}}class je extends Fe{constructor(s){super(s);const c=_t("fa-vector-square");this.button.configure(c,"Rectangle Tool"),this.instructions=document.createElement("span"),this.instructions.innerHTML="Click and drag to create a rectangle",this.dropdown.appendChild(this.instructions)}isEnabledForMode(s){return["new","Point:Rectangle"].includes(s)}updateInstructions(s){const c=s=="new"?"Click and drag to create a rectangle":s=="Point:Rectangle"?"Drag a corner to resize":"???";this.instructions.innerHTML=c}}class ct extends wt{constructor(s){super(s);let c=this;this.crosshairTool=new a.Group({visible:!1}),this.h1=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),this.h2=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),this.v1=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),this.v2=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),this.crosshairTool.addChildren([this.h1,this.h2,this.v1,this.v2]),this.project.toolLayer.addChild(this.crosshairTool),this.mode=null,this.creating=null,this.setToolbarControl(new Ue(this)),this.extensions.onActivate=this.onSelectionChanged=function(){c.itemToCreate?(c.mode="creating",c.crosshairTool.visible=!0,c.creating=null,c.toolbarControl.updateInstructions("new")):c.creating&&c.creating.parent==c.item?(c.mode="creating",c.crosshairTool.visible=!0,c.toolbarControl.updateInstructions("new")):c.item?(c.creating=null,c.mode="modifying",c.crosshairTool.visible=!1,c.toolbarControl.updateInstructions("Point:Ellipse")):(c.creating=null,c.mode=null,c.crosshairTool.visible=!1,c.toolbarControl.updateInstructions("Point:Ellipse"))},this.extensions.onDeactivate=function(p){p&&(c.creating=null),c.crosshairTool.visible=!1,c.mode=null,c.project.overlay.removeClass("rectangle-tool-resize")}}onMouseDown(s){if(this.itemToCreate){this.itemToCreate.initializeGeoJSONFeature("Point","Ellipse"),this.refreshItems();let c=new a.Path.Ellipse(s.point,s.point);this.creating=c,this.item.removeChildren(),this.item.addChild(c),this.mode="creating"}else if(this.item){let c=this.item.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)});if(c){this.mode="segment-drag";let p=(c.segment.path.segments.indexOf(c.segment)+2)%c.segment.path.segments.length;return void(this.points={opposite:c.segment.path.segments[p].point.clone(),drag:c.segment.point.clone(),p1:c.segment.next.point.clone(),p2:c.segment.previous.point.clone()})}if(this.item.contains(s.point))return void(this.mode="fill-drag")}}onMouseDrag(s){let c,p=this.item.bounds.center;if(this.mode=="creating"){let b=-(this.item.view.getRotation()+this.item.layer.getRotation());if(this.item.view.getFlipped()&&(b=180-b),s.modifiers.command||s.modifiers.control){let M=s.point.subtract(s.downPoint),z=[[1,1],[1,-1],[-1,-1],[-1,1]].map(X=>new a.Point(X[0],X[1]).rotate(b)).sort((X,Y)=>X.dot(M)-Y.dot(M))[0],J=M.project(z);c=s.downPoint.add(J)}else c=s.point;let C=new a.Rectangle(s.downPoint.rotate(-b,p),c.rotate(-b,p)),P=new a.Path.Ellipse(C);P.rotate(b,p),this.item.children[0].set({segments:P.segments}),P.remove()}else{if(this.mode!="segment-drag")return this.mode=="fill-drag"?void this.item.translate(s.delta):void this.setCursorPosition(s.original.point);{let b=s.point.subtract(this.points.opposite),C=this.points.drag.subtract(this.points.opposite),P=b.project(C),M=C.angle;if(s.modifiers.command||s.modifiers.control){let z=P.length/C.length,J=P.divide(2),X=this.points.opposite.add(J),Y=J.length,pe=Math.abs(this.points.p1.subtract(this.points.opposite).multiply(z).cross(P.normalize())),ne=new a.Path.Ellipse({center:X,radius:[Y,pe]}).rotate(M);this.item.children[0].set({segments:ne.segments}),ne.remove()}else{let z=P.divide(2),J=this.points.opposite.add(z),X=z.length,Y=Math.abs(this.points.p1.subtract(this.points.opposite).cross(P.normalize())),pe=new a.Path.Ellipse({center:J,radius:[X,Y]}).rotate(M);this.item.children[0].set({segments:pe.segments}),pe.remove()}}}this.setCursorPosition(this.targetLayer.matrix.transform(c))}onMouseMove(s){this.setCursorPosition(s.original.point),this.mode=="modifying"&&(this.item.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)})?this.project.overlay.addClass("rectangle-tool-resize"):this.project.overlay.removeClass("rectangle-tool-resize"),this.item.contains(s.point)?this.project.overlay.addClass("rectangle-tool-move"):this.project.overlay.removeClass("rectangle-tool-move"))}onMouseUp(){this.mode="modifying",this.crosshairTool.visible=!1,this.creating=null,this.toolbarControl.updateInstructions("Point:Ellipse")}setCursorPosition(s){let c=this.tool.view.projectToView(s),p=this.tool.view.viewToProject(new a.Point(0,c.y)),b=this.tool.view.viewToProject(new a.Point(this.tool.view.viewSize.width,c.y)),C=this.tool.view.viewToProject(new a.Point(c.x,0)),P=this.tool.view.viewToProject(new a.Point(c.x,this.tool.view.viewSize.height)),M=this.h1,z=this.h2,J=this.v1,X=this.v2;M.segments[0].point=p,z.segments[0].point=p,M.segments[1].point=b,z.segments[1].point=b,J.segments[0].point=C,X.segments[0].point=C,J.segments[1].point=P,X.segments[1].point=P}}class Ue extends Fe{constructor(s){super(s);const c=_t("fa-circle");this.button.configure(c,"Ellipse Tool"),this.instructions=document.createElement("span"),this.instructions.innerHTML="Click and drag to create an ellipse",this.dropdown.appendChild(this.instructions)}isEnabledForMode(s){return["new","Point:Ellipse"].includes(s)}updateInstructions(s){const c=s=="new"?"Click and drag to create an ellipse":s=="Point:Ellipse"?"Drag a point to resize":"???";this.instructions.innerHTML=c}}class kt extends wt{constructor(s){super(s);let c=this,p=this.tool;this._lastClickTime=0,this.drawingGroup=new a.Group,this._currentItem=null,this._currentItemSelectedColor=null,this.project.toolLayer.addChild(this.drawingGroup),this.drawingGroup.visible=!1,this.draggingSegment=null,this.eraseMode=!1,this.simplifying=null,this.setToolbarControl(new pt(this)),this.extensions.onActivate=function(){p.minDistance=4/c.project.getZoom(),p.maxDistance=20/c.project.getZoom(),c.drawingGroup.visible=!0,c.drawingGroup.selected=!0,c.targetLayer.addChild(c.drawingGroup),c._cacheCurrentItem()},this.extensions.onDeactivate=function(b){b&&(c.finish(),c.project.toolLayer.addChild(c.drawingGroup),c.drawingGroup.removeChildren(),c.drawingGroup.visible=!1,c.drawingGroup.selected=!1,c._restoreCachedItem(),c._currentItem=null)},p.extensions.onKeyDown=function(b){b.key=="e"&&(c.eraseMode===!1?c.setEraseMode(!0):c.eraseMode===!0&&(c.eraseMode="keyhold")),!b.event.metaKey&&!b.event.ctrlKey||b.event.shiftKey||b.event.key!=="z"||c.undo(),(b.event.metaKey||b.event.ctrlKey)&&b.event.shiftKey&&b.event.key==="z"&&c.redo()},p.extensions.onKeyUp=function(b){b.key=="e"&&c.eraseMode=="keyhold"&&c.setEraseMode(!1)}}_cacheCurrentItem(){this._currentItem=this.item,this._currentItem&&(this._currentItem.selectedColor=this._currentItemSelectedColor)}_restoreCachedItem(){this._currentItem&&(this._currentItem.selectedColor=this._currentItemSelectedColor)}onSelectionChanged(){this.item!==this._currentItem&&(this._restoreCachedItem(),this._cacheCurrentItem(),this.targetLayer.addChild(this.drawingGroup),this.drawingGroup.removeChildren(),this.setEraseMode(this.eraseMode))}onMouseDown(s){this.draggingSegment=null;let c=Date.now(),p=c-this._lastClickTime<300;this._lastClickTime=c,this.simplifying&&this.cancelSimplify(),this.itemToCreate&&(this.itemToCreate.initializeGeoJSONFeature("MultiPolygon"),this.refreshItems(),this._cacheCurrentItem(),this.saveHistory());let b=this.drawing();if(b&&p)return this.finishCurrentPath(),void(this.draggingSegment=null);let C=(b&&b.path||this.item).hitTest(s.point,{fill:!1,stroke:!0,segments:!0,tolerance:this.getTolerance(5)});if(C){if(C.type=="segment"&&this.eraseMode)C.segment.remove();else if(C.type=="segment")this.draggingSegment=C.segment;else if(C.type=="stroke"){let P=C.location.index+1;C.item.insert(P,s.point)}}else if(b){if(s.point.subtract(b.path.lastSegment).length<5/this.project.getZoom())return;b.path.add(s.point)}else this.drawingGroup.removeChildren(),this.drawingGroup.addChild(new a.Path([s.point])),this.drawingGroup.visible=!0,this.drawingGroup.selected=!0,this.drawingGroup.selectedColor=this.eraseMode?"red":null}onMouseUp(s){let c=this.drawing();if(c&&c.path.segments.length>1){let p=c.path.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)});p&&p.segment==c.path.firstSegment&&this.finishCurrentPath()}else if(this.draggingSegment&&(this.draggingSegment=null,!this.item.isBoundingElement)){let p=this.item.parent.children.filter(b=>b.isBoundingElement);this.item.applyBounds(p)}this.saveHistory()}onMouseMove(s){let c=this.drawing(),p=this.item&&(c&&c.path||this.item).hitTest(s.point,{fill:!1,stroke:!0,segments:!0,tolerance:this.getTolerance(5)});if(p){let b=p.type+(this.eraseMode?"-erase":"");this.project.overlay.addClass("tool-action").setAttribute("data-tool-action",b)}else this.project.overlay.removeClass("tool-action").setAttribute("data-tool-action","")}onMouseDrag(s){let c=this.drawing();c?c.path.add(s.point):this.draggingSegment&&(this.draggingSegment.point=this.draggingSegment.point.add(s.delta))}drawing(){return this.drawingGroup.lastChild&&{path:this.drawingGroup.lastChild}}finish(){this.setEraseMode(!1),this.draggingSegment=null,this.project.overlay.removeClass("tool-action").setAttribute("data-tool-action",""),this.deactivate(),this.drawingGroup.selected=!1,this.drawingGroup.visible=!1}setEraseMode(s){this.eraseMode=s,this.item&&(this.item.selectedColor=s?"red":null),this.drawingGroup.selectedColor=s?"red":null,this.toolbarControl.setEraseMode(s)}finishCurrentPath(){let s=this.drawing();if(!s||!this.item||!this.item.parent)return;s.path.closed=!0;let c=this.eraseMode?this.item.subtract(s.path,{insert:!1}):this.item.unite(s.path,{insert:!1});if(c){if(c=c.toCompoundPath(),!this.item.isBoundingElement){let p=this.item.parent.children.filter(b=>b.isBoundingElement);c.applyBounds(p)}this.item.removeChildren(),this.item.addChildren(c.children),this.item.children.forEach(p=>p.selected=!1),c.remove()}this.drawingGroup.removeChildren()}saveHistory(){let s=(this.item.history||[]).position||0;this.item.history=[{children:this.item.children.map(c=>c.clone({insert:!1,deep:!0})),drawingGroup:this.drawingGroup.children.map(c=>c.clone({insert:!1,deep:!0}))}].concat((this.item.history||[]).slice(s,10))}undo(){let s=this.item.history||[],c=(s.position||0)+1;c<s.length&&(this.drawingGroup.removeChildren(),this.item.removeChildren(),this.item.children=s[c].children.map(p=>p.clone({insert:!0,deep:!0})),this.drawingGroup.children=s[c].drawingGroup.map(p=>p.clone({insert:!0,deep:!0})),s.position=c)}redo(){let s=this.item.history||[],c=(s.position||0)-1;c>=0&&(this.drawingGroup.removeChildren(),this.item.removeChildren(),this.item.children=s[c].children.map(p=>p.clone({insert:!0,deep:!0})),this.drawingGroup.children=s[c].drawingGroup.map(p=>p.clone({insert:!0,deep:!0})),s.position=c)}}class pt extends Fe{constructor(s){super(s);const c=_t("fa-draw-polygon");this.button.configure(c,"Polygon Tool");const p=document.createElement("div");p.classList.add("dropdown","polygon-toolbar"),p.setAttribute("data-tool","polygon"),this.dropdown.appendChild(p);const b=document.createElement("span");b.innerHTML="Click or Drag",p.appendChild(b);const C=document.createElement("div");p.appendChild(C),this.simplifyButton=document.createElement("button"),this.simplifyButton.setAttribute("data-action","simplify"),this.simplifyButton.innerHTML="Simplify",C.append(this.simplifyButton),this.simplifyButton.addEventListener("click",function(){s.doSimplify(),s.saveHistory()}),this.eraseButton=document.createElement("button"),p.appendChild(this.eraseButton),this.eraseButton.setAttribute("data-action","erase"),this.eraseButton.innerHTML="Eraser",this.eraseButton.addEventListener("click",function(){let M=this.classList.toggle("active");s.setEraseMode(M)});const P=document.createElement("span");p.appendChild(P),this.undoButton=document.createElement("button"),P.appendChild(this.undoButton),this.undoButton.setAttribute("data-action","undo"),this.undoButton.setAttribute("title","Undo (ctrl-Z)"),this.undoButton.innerHTML="<",this.undoButton.addEventListener("click",function(){s.undo()}),this.redoButton=document.createElement("button"),P.appendChild(this.redoButton),this.redoButton.setAttribute("data-action","redo"),this.redoButton.setAttribute("title","Redo (ctrl-shift-Z)"),this.redoButton.innerHTML=">",this.redoButton.addEventListener("click",function(){s.redo()})}isEnabledForMode(s){return["new","MultiPolygon","Polygon"].includes(s)}setEraseMode(s){s?this.eraseButton.classList.add("active"):this.eraseButton.classList.remove("active")}}class ti extends kt{constructor(s){super(s);let c=this,p=this.tool;this.setToolbarControl(new si(this));let b=new a.Color("green");new a.Color("red"),this.radius=0,this.cursor=new a.Shape.Circle(new a.Point(0,0),this.radius),this.cursor.set({strokeWidth:1,strokeColor:"black",fillColor:b,opacity:1,visible:!1}),c.project.toolLayer.addChild(this.cursor),this.clickAction="startPath",this.extensions.onActivate=()=>{this.cursor.radius=this.radius/this.project.getZoom(),this.cursor.strokeWidth=1/this.project.getZoom(),this.refreshCursorVisibility(),p.minDistance=4/c.project.getZoom(),p.maxDistance=10/c.project.getZoom()},this.extensions.onDeactivate=C=>{this.cursor.visible=!1,C&&this.finish()},p.onMouseWheel=C=>{C.preventDefault(),C.stopPropagation(),C.deltaY!=0&&this.toolbarControl.updateBrushRadius({larger:C.deltaY<0})}}setRadius(s){this.radius=s,this.cursor.radius=s/this.project.getZoom()}onMouseDown(s){var p;if(this.draggingSegment=null,this.itemToCreate)return this.itemToCreate.initializeGeoJSONFeature("MultiLineString"),this.refreshItems(),void this.startNewPath(s);let c=(p=this.item)==null?void 0:p.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)});if(c){if(c.type=="segment"&&this.eraseMode)c.segment.remove();else if(c.type=="segment")this.draggingSegment=c.segment;else if(c.type=="stroke"&&!this.eraseMode){let b=c.location.index+1;c.item.insert(b,s.point)}}else this.eraseMode||this.startNewPath(s)}onMouseMove(s){var p;this.cursor.position=s.original.point;let c=(p=this.item)==null?void 0:p.hitTest(s.point,{fill:!1,stroke:!1,segments:!0,tolerance:this.getTolerance(5)});if(c){let b=c.type+(this.eraseMode?"-erase":"");this.project.overlay.addClass("tool-action").setAttribute("data-tool-action",b),this.clickAction=b}else this.project.overlay.removeClass("tool-action").setAttribute("data-tool-action",""),this.clickAction="startPath";this.refreshCursorVisibility()}onMouseDrag(s){this.cursor.position=s.original.point,kt.prototype.onMouseDrag.call(this,s);let c=this.drawing();c&&(c.path.segments=this.simplifier.simplify(c.path.segments.map(p=>p.point)))}onMouseUp(s){this.finishCurrentPath()}startNewPath(s){this.finishCurrentPath(),this.drawingGroup.removeChildren(),this.drawingGroup.addChild(new a.Path([s.point])),this.drawingGroup.visible=!0,this.drawingGroup.selected=!0,this.drawingGroup.selectedColor=this.eraseMode?"red":null,this.drawing().path.set({strokeWidth:2*this.radius/this.targetLayer.scaling.x/this.project.getZoom(),strokeColor:this.item.strokeColor,strokeJoin:"round",strokeCap:"round"})}finishCurrentPath(){this.drawing()&&this.item&&(this.drawing().path.segments.length>1&&this.item.addChild(this.drawing().path),this.drawingGroup.removeChildren())}refreshCursorVisibility(){this.cursor.visible=!this.eraseMode&&this.clickAction==="startPath"}}class si extends Fe{constructor(s){super(s),this.linestringTool=s;const c=_t("fa-pen-nib");this.button.configure(c,"Linestring Tool");const p=document.createElement("div");p.classList.add("dropdown","linestring-toolbar"),p.setAttribute("data-tool","linestring"),this.dropdown.appendChild(p);const b=document.createElement("label");b.innerHTML="Set pen width:",p.appendChild(b),this.rangeInput=document.createElement("input"),p.appendChild(this.rangeInput),Object.assign(this.rangeInput,{type:"range",min:.2,max:12,step:.1,value:4}),this.rangeInput.addEventListener("change",function(){s.setRadius(this.value)}),this.eraseButton=document.createElement("button"),p.appendChild(this.eraseButton),this.eraseButton.innerHTML="Eraser",this.eraseButton.setAttribute("data-action","erase"),this.eraseButton.addEventListener("click",function(){let C=this.classList.toggle("active");s.setEraseMode(C)}),setTimeout(()=>s.setRadius(4))}updateBrushRadius(s){s.larger?(this.rangeInput.value=parseFloat(this.rangeInput.value)+parseFloat(this.rangeInput.step),this.rangeInput.dispatchEvent(new Event("change"))):(this.rangeInput.value=parseFloat(this.rangeInput.value)-parseFloat(this.rangeInput.step),this.rangeInput.dispatchEvent(new Event("change")))}isEnabledForMode(s){return["new","LineString","MultiLineString"].includes(s)}setEraseMode(s){s?this.eraseButton.classList.add("active"):this.eraseButton.classList.remove("active"),this.linestringTool.refreshCursorVisibility()}}class ci extends wt{constructor(s){super(s);let c=this;this.ps=this.project.paperScope,this.setToolbarControl(new yi(this));let p=new a.Path.Rectangle({strokeWidth:1,rescale:{strokeWidth:1},strokeColor:"black"}),b=new a.Path.Rectangle({strokeWidth:1,dashArray:[10,10],rescale:{strokeWidth:1,dashArray:[10,10]},strokeColor:"white"});this.project.toolLayer.addChild(p),this.project.toolLayer.addChild(b),p.applyRescale(),b.applyRescale(),p.visible=!1,b.visible=!1,this.extensions.onActivate=function(){c.tool.onMouseMove=C=>c.onMouseMove(C)},this.extensions.onDeactivate=function(C){c.project.overlay.removeClass("selectable-layer"),c.tool.onMouseMove=null},this.tool.extensions.onKeyUp=function(C){C.key=="escape"&&c.project.paperScope.findSelectedItems().forEach(P=>P.deselect())},this.tool.onMouseUp=function(C){if(p.visible=!1,b.visible=!1,C.downPoint.subtract(C.point).length==0){let P=c.hitTestPoint(C);P&&c._isItemSelectable(P.item)&&P.item.toggle(C.modifiers.control||C.modifiers.meta)}else{let P=c.hitTestArea(C);C.modifiers.control||C.modifiers.meta||c.project.paperScope.findSelectedItems().forEach(M=>M.deselect()),P.forEach(M=>M.select(!0))}},this.tool.onMouseDrag=function(C){p.visible=!0,b.visible=!0;let P=new a.Rectangle(C.downPoint,C.point);p.set({segments:[P.topLeft,P.topRight,P.bottomRight,P.bottomLeft]}),b.set({segments:[P.topLeft,P.topRight,P.bottomRight,P.bottomLeft]})}}doAnnotationItemsExist(){return this.ps.project.getItems({match:s=>s.isGeoJSONFeature}).length>0}onMouseMove(s){s.item&&this._isItemSelectable(s.item)?(this.currentItem!=s.item&&s.item.emit("selection:mouseenter"),this.currentLayer!=s.item.layer&&s.item.layer.emit("selection:mouseenter"),this.currentItem=s.item,this.currentLayer=this.currentItem.layer,this.project.overlay.addClass("selectable-layer")):(this.currenItem&&this.currentItem.emit("selection:mouseleave",s),this.currentLayer&&this.currentLayer.emit("selection:mouseleave",s),this.project.overlay.removeClass("selectable-layer"),this.currentItem=null,this.currentLayer=null)}hitTestPoint(s){let c=this.ps.project.hitTest(s.point,{fill:!0,stroke:!0,segments:!0,tolerance:this.getTolerance(5),match:p=>p.item.isGeoJSONFeature||p.item.parent.isGeoJSONFeature});return c&&!c.item.isGeoJSONFeature&&(c.item=c.item.parent),c}hitTestArea(s,c){let p={match:C=>C.isGeoJSONFeature},b=new a.Rectangle(s.point,s.downPoint);return c?p.inside=b:p.overlapping=b,this.ps.project.getItems(p)}_isItemSelectable(s){return!0}}class yi extends Fe{constructor(s){super(s),this.dropdown.classList.add("select-dropdown");const c=_t("fa-arrow-pointer");this.button.configure(c,"Selection Tool");const p=document.createElement("div");p.setAttribute("data-active","select"),this.dropdown.appendChild(p);const b=document.createElement("span");b.innerHTML="(Ctrl)click to select items.",p.append(b)}isEnabledForMode(s){return this.tool.doAnnotationItemsExist()&&["default","select","multiselection","Polygon","MultiPolygon","Point:Rectangle","Point:Ellipse","Point","LineString","MultiLineString","GeometryColletion:Raster"].includes(s)}}class wi extends wt{constructor(s){super(s);let c=this;this.ps=this.project.paperScope,this._mode="transform",this._moving=[],this._active=!1,this.setToolbarControl(new ui(this)),this._makeTransformToolObject(c.project.getZoom()),this.extensions.onActivate=function(){c._active=!0,c.enableTransformToolObject()},this.extensions.onDeactivate=function(p){c._active=!1,c.project.overlay.removeClass("transform-tool-resize","transform-tool-rotate","transform-tool-move"),p&&c.disableTransformToolObject()}}onSelectionChanged(){this.enableTransformToolObject()}setUniformScaling(s){this._alwaysRescaleUniformly=s}_makeTransformToolObject(s){let c=this,p=12;this._transformTool&&this._transformTool.remove(),this._transformTool=new a.Group,this.project.toolLayer.addChild(this._transformTool),this._transformTool.applyMatrix=!1,this._transformTool.transforming=[],this._transformTool.boundingRect=new a.Shape.Rectangle(new a.Point(0,0),new a.Size(0,0)),this._transformTool.boundingDisplay=new a.Shape.Rectangle(new a.Point(0,0),new a.Size(0,0)),this._transformTool.boundingRect.set({strokeWidth:0,fillColor:new a.Color(0,0,0,.001)}),this._transformTool.boundingDisplay.set({strokeWidth:5,strokeColor:"lightblue",rescale:{strokeWidth:5}}),this._transformTool.addChild(this._transformTool.boundingRect),this._transformTool.addChild(this._transformTool.boundingDisplay),this._transformTool.corners=[["topLeft","bottomRight"],["topRight","bottomLeft"],["bottomRight","topLeft"],["bottomLeft","topRight"]].reduce((b,C)=>{let P=new a.Shape.Rectangle(new a.Point(0,0),new a.Size(p/s,p/s));return P.set({rescale:{size:M=>new a.Size(p/M,p/M)},fillColor:"red",strokeColor:"black"}),c._transformTool.addChild(P),P.anchor=C[0],P.opposite=C[1],P.onMouseDown=function(M){M.stopPropagation()},P.onMouseDrag=function(M){let z=c.targetLayer.getRotation(),J=(c.targetLayer.tiledImage.getFlip(),this.parent.rotation),X=M.delta.rotate(-J),Y=this.parent.corners[this.opposite].position;(c._alwaysRescaleUniformly||M.modifiers.command||M.modifiers.control)&&(X=X.project(this.position.subtract(Y)));let pe=this.position,ne=this.position.add(X),ie=new a.Rectangle(Y,pe).size,ve=new a.Rectangle(Y,ne).size.divide(ie),de=Y.transform(this.parent.matrix),te=this.parent.matrix.inverseTransform(this.parent.corners[this.opposite].refPos);te=c.targetMatrix.inverseTransform(te);let he=this.parent.matrix.transform(this.parent.boundingRect.position);c.targetMatrix.inverseTransform(he),this.parent.transforming.forEach(ce=>{let Re=new a.Matrix;Re.rotate(-z,te).scale(ve.width,ve.height,te).rotate(z,te),ce.matrix.append(Re),ce.onTransform&&ce.onTransform("scale",de,J,Re)}),this.parent.boundingRect.scale(ve.width,ve.height,Y),this.parent.setBounds(!0)},b[C[0]]=P,b},{}),this._transformTool.rotationHandle=new a.Shape.Circle(new a.Point(0,0),p/s),this._transformTool.rotationHandle.set({fillColor:"red",strokeColor:"black",rescale:{radius:p}}),this._transformTool.addChild(this._transformTool.rotationHandle),this._transformTool.rotationHandle.onMouseDown=function(b){b.stopPropagation()},this._transformTool.rotationHandle.onMouseDrag=function(b){let C=this.parent.matrix.transform(this.parent.boundingRect.position),P=b.point.subtract(b.delta).subtract(C),M=b.point.subtract(C).angle-P.angle;this.parent.rotate(M,C),this.parent.transforming.forEach(z=>{let J=c.targetMatrix.inverseTransform(C);z.layer.tiledImage.getFlip()&&(M=-M),z.rotate(M,J),z.onTransform&&z.onTransform("rotate",M,J)}),Object.values(this.parent.corners).forEach(z=>{z.refPos=z.refPos.rotate(M,C)})},this.onMouseDrag=b=>{if(!this._transformTool._moveOnDrag)return;this._transformTool.translate(b.original.delta);const C=b.delta;Object.values(this._transformTool.corners).forEach(P=>{P.refPos=P.refPos.add(b.original.delta)}),this._transformTool.transforming.forEach(P=>{P.translate(C),P.onTransform&&P.onTransform("translate",C)})},this._transformTool.setBounds=function(b=!1){if(!b){let P=this.transforming.reduce((X,Y)=>(Y.transform(c.targetLayer.matrix),X.minX=X.minX===null?Y.bounds.topLeft.x:Math.min(X.minX,Y.bounds.topLeft.x),X.minY=X.minY===null?Y.bounds.topLeft.y:Math.min(X.minY,Y.bounds.topLeft.y),X.maxX=X.maxX===null?Y.bounds.bottomRight.x:Math.max(X.maxX,Y.bounds.bottomRight.x),X.maxY=X.maxY===null?Y.bounds.bottomRight.y:Math.max(X.maxY,Y.bounds.bottomRight.y),Y.transform(c.targetLayer.matrix.inverted()),X),{minX:null,minY:null,maxX:null,maxY:null}),M=new a.Point(P.minX,P.minY),z=new a.Point(P.maxX,P.maxY),J=new a.Rectangle(M,z);this.matrix.reset(),this.boundingRect.set({position:J.center,size:J.size})}let C=this.boundingRect;this.boundingDisplay.set({position:C.position,size:C.bounds.size}),Object.values(this.corners).forEach(P=>{P.position=C.bounds[P.anchor],b||(P.refPos=P.position)}),this.rotationHandle.set({position:C.position.subtract(new a.Point(0,C.bounds.size.height/2+2*this.rotationHandle.radius))})},this._transformTool.transformItems=function(b){this.transforming.forEach(C=>{C.matrix.apply(!0,!0),C.onTransform&&C.onTransform("complete")}),this.transforming=b,b.forEach(C=>C.applyMatrix=!1),this.matrix.reset(),this.boundingRect.matrix.reset(),this.boundingDisplay.matrix.reset(),this.setBounds()},this._transformTool.visible=!1}enableTransformToolObject(){this.items.length>0&&(this.project.toolLayer.bringToFront(),this._transformTool.visible=!0,this._transformTool.transformItems(this.items))}disableTransformToolObject(){this.project.toolLayer.sendToBack(),this._transformTool.transformItems([]),this._transformTool.visible=!1}hitTest(s){let c=this.ps.project.hitTest(s,{fill:!0,stroke:!0,segments:!0,tolerance:this.getTolerance(5),match:p=>p.item.isGeoJSONFeature||p.item.parent.isGeoJSONFeature});return c&&!c.item.isGeoJSONFeature&&(c.item=c.item.parent),c}onMouseMove(s){if(!this._active)return;let c=this.project.paperScope.project.hitTest(s.original.point);c?(Object.values(this._transformTool.corners).includes(c.item)?this.project.overlay.addClass("transform-tool-resize"):this.project.overlay.removeClass("transform-tool-resize"),this._transformTool.rotationHandle==c.item?this.project.overlay.addClass("transform-tool-rotate"):this.project.overlay.removeClass("transform-tool-rotate"),[this._transformTool.boundingRect,this._transformTool.boundingDisplay].includes(c.item)?(this.project.overlay.addClass("transform-tool-move"),this._transformTool._moveOnDrag=!0):(this.project.overlay.removeClass("transform-tool-move"),this._transformTool._moveOnDrag=!1)):this.project.overlay.removeClass("transform-tool-resize","transform-tool-rotate","transform-tool-move")}}class ui extends Fe{constructor(s){super(s),this.dropdown.classList.add("transform-dropdown");const c=_t("fa-up-down-left-right");this.button.configure(c,"Transform Tool")}isEnabledForMode(s){let c=this.tool.project.paperScope.findSelectedItems();return c.length>0&&["select","multiselection","Polygon","MultiPolygon","Point:Rectangle","Point:Ellipse","LineString","GeometryCollection:Raster"].includes(s)&&new Set(c.map(p=>p.layer)).size==1}}class Ft extends wt{constructor(s){super(s),this.setToolbarControl(new gi(this))}rasterize(){let s=this,c=this.item;if(c){let p=this.project.overlay.getViewportRaster();c.layer.addChild(p),p.onLoad=function(){let b=new a.Point(this.width/2,this.height/2),C=new a.Rectangle(b.add(this.matrix.inverseTransform(this.layer.matrix.transform(c.bounds.topLeft))).floor(),b.add(this.matrix.inverseTransform(this.layer.matrix.transform(c.bounds.bottomRight))).ceil()),P=this.getSubRaster(C);P.transform(this.layer.matrix.inverted()),P.selectedColor=null;let M={type:"Feature",geometry:{type:"GeometryCollection",properties:{subtype:"Raster",raster:{data:P}},geometries:[c]},properties:{}};c.replaceWith(a.Item.fromGeoJSON(M)),s.refreshItems(),this.remove()}}}}class gi extends Fe{constructor(s){super(s);const c=_t("fa-image");this.button.configure(c,"raster Tool");const p=document.createElement("div");this.dropdown.appendChild(p);const b=document.createElement("button");b.innerHTML="Convert to raster",p.appendChild(b);const C=document.createElement("span");C.innerHTML="Warning: this cannot be undone!",p.appendChild(C),b.addEventListener("click",()=>s.rasterize())}isEnabledForMode(s){return["Polygon","MultiPolygon","Point:Rectangle","Point:Ellipse"].includes(s)}}class Mt{constructor(s,c){if(c&&!Array.isArray(c))throw"Bad option: if present, tools must be an Array of tool names or constructors to use.";this.ui=this._makeUI(),this.paperScope=s,this.currentMode=null,this.setModeTimeout=null;let p=new s.Layer;p.isGeoJSONFeatureCollection=!1,p.name="toolLayer",p.applyMatrix=!1,s.project.addLayer(p),this.toolConstructors={default:dt,select:ci,transform:wi,style:Wt,rectangle:ke,ellipse:ct,point:B,text:V,polygon:kt,brush:_e,wand:ii,linestring:ti,raster:Ft},this.tools={};let b=c||Object.keys(this.toolConstructors);b.indexOf("default")==-1&&(b=["default",...b]),this.paperScope.activate(),b.forEach(C=>{if(typeof C=="string"){if(!this.toolConstructors[C])return void console.warn(`The requested tool is invalid: ${C}. No constructor found for that name.`)}else if(!(C instanceof Ct))return void console.warn(`${C} must inherit from class ToolBase`);let P=C instanceof Ct?C:this.toolConstructors[C],M=this.tools[C]=new P(this.paperScope),z=M.getToolbarControl();z&&this.addToolbarControl(z),M.addEventListener("deactivated",J=>{J.target==this.paperScope.getActiveTool()&&this.tools.default.activate()})}),this.tools.default.activate(),this.setMode(),s.project.on({"item-replaced":()=>{this.setMode()},"item-selected":()=>{this.setMode()},"item-deselected":()=>{this.setMode()},"item-removed":()=>{this.setMode()},"items-changed":()=>{this.setMode()}})}get element(){return this._element}setMode(){let s=this;this.setModeTimeout&&clearTimeout(this.setModeTimeout),this.setModeTimeout=setTimeout(()=>{this.setModeTimeout=null;let c=this.paperScope.findSelectedItems(),p=this.paperScope.getActiveTool();if(c.length===0)this.currentMode="select";else if(c.length===1){let b=c[0].annotationItem||{},C=b.type;b.subtype&&(C+=":"+b.subtype);let P=C===null?"new":C;this.currentMode=P}else this.currentMode="multiselection";p.getToolbarControl().isEnabledForMode(this.currentMode)===!1&&(p.deactivate(!0),this.tools.default.activate()),Object.values(this.tools).forEach(b=>{let C=b.getToolbarControl();C&&(C.isEnabledForMode(s.currentMode)?C.button.enable():C.button.disable())}),p.selectionChanged()},0)}addToolbarControl(s){const c=s.button.element,p=s.dropdown;this._buttonbar.appendChild(c),this._dropdowns.appendChild(p),s.isEnabledForMode(this.currentMode)?s.button.enable():s.button.disable()}show(){this.element.style.display="inline-block"}hide(){this.element.style.display="none"}destroy(){this.element.remove()}_makeUI(){this._element=document.createElement("div"),this._buttonbar=document.createElement("div"),this._dropdowns=document.createElement("div");const s=document.createElement("div");this._element.appendChild(this._buttonbar),this._element.appendChild(s),s.appendChild(this._dropdowns),"annotation-ui-drawing-toolbar btn-group btn-group-sm mode-selection".split(" ").forEach(c=>this._element.classList.add(c)),s.classList.add("dropdowns-container"),this._dropdowns.classList.add("dropdowns"),this._buttonbar.classList.add("annotation-ui-buttonbar")}}class di{constructor(s){s=Object.assign({},{initialContent:"Enter text...",iconFactory:null},s),this._element=document.createElement("span"),this._textcontainer=document.createElement("span"),this._textcontainer.classList.add("text-container"),this._element.appendChild(this._textcontainer),this._textcontent=document.createElement("span"),this._textcontent.classList.add("text-content"),this._textcontainer.appendChild(this._textcontent);let c=this._textarea=document.createElement("textarea");this._textcontainer.appendChild(c),c.setAttribute("rows","1"),this._button=document.createElement("span"),this._element.appendChild(this._button),this._oldtext="";let p=s.iconFactory?s.iconFactory.makeFaIcon("fa-edit"):_t("fa-edit");this._button.appendChild(p),p.classList.add("edit-button","onhover"),this._element.classList.add("editablecontent"),this._textarea.textContent=s.initialContent,this._textarea.addEventListener("focusout",()=>{this._element.classList.contains("editing")&&(this._element.classList.remove("editing"),this._updateText(!0))}),this._textarea.addEventListener("keypress",b=>{this._element.classList.contains("editing")&&(b.stopPropagation(),b.key!="Enter"&&b.key!="Escape"||(b.preventDefault(),this._textarea.blur()))}),this._textarea.addEventListener("input",()=>{this._updateText()}),this._element.addEventListener("keydown keyup",b=>{this._element.classList.contains("editing")&&b.stopPropagation()}),this._button.addEventListener("click",b=>{this._onEditClicked&&this._onEditClicked(b),this._element.classList.toggle("editing"),this._oldtext=this._textarea.value.trim(),this._textarea.select()})}get element(){return this._element}get onChanged(){return this._onChanged}set onChanged(s){if(typeof s!="function"&&s!==null)throw"Value must be a function or null";this._onChanged=s}get onEditClicked(){return this._onEditClicked}set onEditClicked(s){if(typeof s!="function"&&s!==null)throw"Value must be a function or null";this._onEditClicked=s}_updateText(s){let c=this._textarea.value;s&&(c=c.trim()),this._textcontent.textContent=c,c!==this._oldtext&&this.onChanged&&this.onChanged(c)}setText(s){this._textarea.value=s,this._textcontent.textContent=s}}function oi(L){const s=document.createElement("template");return s.innerHTML=L,s.content.children.length===1?s.content.children[0]:s.content.children}class _i{constructor(s,c){this.paperItem=s;let p=this._element=oi(`
1544
1544
  <div class='feature'>
1545
1545
  <div class='annotation-header hoverable-actions'>
1546
1546
  <span class='onhover fa-solid fa-crop-simple bounding-element' data-action="bounds" title='Bounding element'></span>
@@ -1550,7 +1550,7 @@ input[type=range] {
1550
1550
  <span class='onhover fa-solid fa-trash-can' data-action='trash' title='Remove'></span>
1551
1551
  </div>
1552
1552
  </div>
1553
- `);h.iconFactory?h.iconFactory.convertFaIcons(p):jt(p),this.paperItem.FeatureUI=this,this._editableName=new di,p.querySelector(".feature-item.name").appendChild(this._editableName.element),this._editableName.onChanged=b=>{this.setLabel(b,"user-defined")},this._editableName.onEditClicked=function(b){b.preventDefault(),b.stopPropagation()},Xe.set(p,{feature:this}),p.addEventListener("click",b=>{if(b.target.matches("[data-action]")){b.stopPropagation(),b.stopImmediatePropagation(),b.preventDefault();let A=b.target.dataset.action;switch(A){case"trash":this.removeItem();break;case"bounds":this.useAsBoundingElement(!0);break;case"style":this.openStyleEditor(b);break;case"zoom-to":this.centerItem();break;default:console.log("No function set for action:",A)}}}),p.addEventListener("click",b=>{b.stopPropagation(),this.paperItem.toggle(b.metaKey||b.ctrlKey)}),this.element=p,this.paperItem.on({selected:()=>{p.classList.add("selected"),p.dispatchEvent(new Event("selected"))},deselected:()=>{p.classList.remove("selected"),p.dispatchEvent(new Event("deselected"))},"selection:mouseenter":()=>{p.classList.add("item-hovered")},"selection:mouseleave":()=>{p.classList.remove("item-hovered")},"item-replaced":b=>{this.label.source=="user-defined"&&(b.item.displayName=this.label),this.paperItem=b.item,this.paperItem.FeatureUI=this,this.updateLabel()},"display-name-changed":b=>{this.updateLabel()},removed:b=>{b.item==this.paperItem&&this.remove()}}),this.paperItem.selected&&this.paperItem.emit("selected"),this.label?this.updateLabel():this.setLabel("Creating...","initializing")}get label(){return this.paperItem.displayName}set label(s){return this.setLabel(s)}setLabel(s,h){let p=new String(s);return p.source=h,this.paperItem.displayName=p,this.updateLabel(),p}updateLabel(){this._editableName.setText(this.label)}removeItem(){this.paperItem.remove(),this.paperItem.deselect()}remove(){this._element.remove(),this._element.dispatchEvent(new Event("removed"))}useAsBoundingElement(s=!1){if(!this.paperItem.canBeBoundingElement)return!1;let h=this._element.querySelector('[data-action="bounds"]');s?h.classList.toggle("active"):h.classList.add("active");let p=h.classList.contains("active");return this.paperItem.isBoundingElement=p,p}openStyleEditor(){this.paperItem.project.emit("edit-style",{item:this.paperItem})||console.warn("No event listeners are registered for paperScope.project for event 'edit-style'")}centerItem(s=!1){let h=this.paperItem.project.overlay.viewer.viewport,p=this.paperItem.bounds,b=h.imageToViewportCoordinates(p.center.x,p.center.y),A=1.5,P=h.imageToViewportCoordinates(p.center.x-p.width/A,p.center.y-p.height/A),L=h.imageToViewportCoordinates(2*p.width/A,2*p.height/A),N=new y.Rect(P.x,P.y,L.x,L.y),Y=h.getBounds();N.width>Y.width||N.height>Y.height?h.fitBounds(N,s):h.panTo(b,s)}}class Di{constructor(s){s.parent?s.selector?s.dropTarget?(this.element=s.parent,this.selector=s.selector,this.droptarget=s.dropTarget,this.onDrop=s.onDrop,this.placeholder=null,this.dragging=null,this.refresh(),this.droptarget.addEventListener("dragover",h=>(h.preventDefault(),!1)),this.droptarget.addEventListener("dragleave",h=>(h.preventDefault(),!1)),this.droptarget.addEventListener("dragend",h=>{if(this.dragging)return h.preventDefault(),this.cleanupDropTarget(),!1}),this.element.addEventListener("dragstart",h=>{h.target.matches(this.selector)&&(h.stopPropagation(),this.dragging=h.target,this.placeholder=h.target.cloneNode(!0),this.placeholder.classList.add("draganddrop-placeholder"),h.target.classList.add("draganddrop-dragging"),this.setupDropTarget())}),this.element.addEventListener("dragend",h=>{h.target.matches(this.selector)&&(h.stopPropagation(),h.target.classList.remove("draganddrop-dragging","draganddrop-hide"),this.placeholder&&this.placeholder.remove(),this.placeholder=null,this.dragging=null,this.cleanupDropTarget())}),this.element.addEventListener("dragleave",h=>{h.target.matches(this.selector)&&h.stopPropagation()}),this.element.addEventListener("drop",h=>{this.dragging&&this.placeholder.parentNode==this.droptarget&&(h.stopPropagation(),this.placeholder.replaceWith(this.dragging),this.dragging=null,this.placeholder=null,this.onDrop&&this.onDrop())}),this.element.addEventListener("dragover",h=>{if(this.dragging)if(h.preventDefault(),this.dragging.classList.add("draganddrop-hide"),h.target.matches(this.selector)){h.stopPropagation();let p=h.target.getBoundingClientRect().top,b=h.target.getBoundingClientRect().bottom;if(this.placeholder==h.target)return;h.clientY<(p+b)/2?h.target.parentNode.insertBefore(this.placeholder,h.target):h.target.parentNode.insertBefore(this.placeholder,h.target.nextSibling)}else h.target==this.element&&(this.droptarget.appendChild(this.placeholder),h.stopPropagation())})):console.error("droptarget is required"):console.error("selector is required"):console.error("element is required")}refresh(){this.element.querySelectorAll(this.selector).forEach(s=>{s.setAttribute("draggable",!0)})}setupDropTarget(){this.droptarget.classList.add("draganddrop-drop-target")}cleanupDropTarget(){this.droptarget.classList.remove("draganddrop-drop-target")}}class wi extends fe{constructor(s){super({type:"Feature",geometry:null}),this.paperItem=new a.Path,this.paperItem.style=new a.Style(s),this.paperItem.initializeGeoJSONFeature=zi}static supportsGeoJSONType(s,h=null){return s.toLowerCase()===null&&h===null}getGeoJSONType(){return{type:null}}getCoordinates(){return[]}getProperties(){return this.paperItem.style}}function zi(M,s){let h={geometry:{type:M,coordinates:[],properties:{subtype:s}},properties:this.style},p=a.Item.fromGeoJSON(h);return this.replaceWith(p),p}class Oi{constructor(s,h){return this.element=ri(`
1553
+ `);c.iconFactory?c.iconFactory.convertFaIcons(p):zt(p),this.paperItem.FeatureUI=this,this._editableName=new di,p.querySelector(".feature-item.name").appendChild(this._editableName.element),this._editableName.onChanged=b=>{this.setLabel(b,"user-defined")},this._editableName.onEditClicked=function(b){b.preventDefault(),b.stopPropagation()},Ke.set(p,{feature:this}),p.addEventListener("click",b=>{if(b.target.matches("[data-action]")){b.stopPropagation(),b.stopImmediatePropagation(),b.preventDefault();let C=b.target.dataset.action;switch(C){case"trash":this.removeItem();break;case"bounds":this.useAsBoundingElement(!0);break;case"style":this.openStyleEditor(b);break;case"zoom-to":this.centerItem();break;default:console.log("No function set for action:",C)}}}),p.addEventListener("click",b=>{b.stopPropagation(),this.paperItem.toggle(b.metaKey||b.ctrlKey)}),this.element=p,this.paperItem.on({selected:()=>{p.classList.add("selected"),p.dispatchEvent(new Event("selected"))},deselected:()=>{p.classList.remove("selected"),p.dispatchEvent(new Event("deselected"))},"selection:mouseenter":()=>{p.classList.add("item-hovered")},"selection:mouseleave":()=>{p.classList.remove("item-hovered")},"item-replaced":b=>{this.label.source=="user-defined"&&(b.item.displayName=this.label),this.paperItem=b.item,this.paperItem.FeatureUI=this,this.updateLabel()},"display-name-changed":b=>{this.updateLabel()},removed:b=>{b.item==this.paperItem&&this.remove()}}),this.paperItem.selected&&this.paperItem.emit("selected"),this.label?this.updateLabel():this.setLabel("Creating...","initializing")}get label(){return this.paperItem.displayName}set label(s){return this.setLabel(s)}setLabel(s,c){let p=new String(s);return p.source=c,this.paperItem.displayName=p,this.updateLabel(),p}updateLabel(){this._editableName.setText(this.label)}removeItem(){this.paperItem.remove(),this.paperItem.deselect()}remove(){this._element.remove(),this._element.dispatchEvent(new Event("removed"))}useAsBoundingElement(s=!1){if(!this.paperItem.canBeBoundingElement)return!1;let c=this._element.querySelector('[data-action="bounds"]');s?c.classList.toggle("active"):c.classList.add("active");let p=c.classList.contains("active");return this.paperItem.isBoundingElement=p,p}openStyleEditor(){this.paperItem.project.emit("edit-style",{item:this.paperItem})||console.warn("No event listeners are registered for paperScope.project for event 'edit-style'")}centerItem(s=!1){let c=this.paperItem.project.overlay.viewer.viewport,p=this.paperItem.bounds,b=c.imageToViewportCoordinates(p.center.x,p.center.y),C=1.5,P=c.imageToViewportCoordinates(p.center.x-p.width/C,p.center.y-p.height/C),M=c.imageToViewportCoordinates(2*p.width/C,2*p.height/C),z=new y.Rect(P.x,P.y,M.x,M.y),J=c.getBounds();z.width>J.width||z.height>J.height?c.fitBounds(z,s):c.panTo(b,s)}}class Oi{constructor(s){s.parent?s.selector?s.dropTarget?(this.element=s.parent,this.selector=s.selector,this.droptarget=s.dropTarget,this.onDrop=s.onDrop,this.placeholder=null,this.dragging=null,this.refresh(),this.droptarget.addEventListener("dragover",c=>(c.preventDefault(),!1)),this.droptarget.addEventListener("dragleave",c=>(c.preventDefault(),!1)),this.droptarget.addEventListener("dragend",c=>{if(this.dragging)return c.preventDefault(),this.cleanupDropTarget(),!1}),this.element.addEventListener("dragstart",c=>{c.target.matches(this.selector)&&(c.stopPropagation(),this.dragging=c.target,this.placeholder=c.target.cloneNode(!0),this.placeholder.classList.add("draganddrop-placeholder"),c.target.classList.add("draganddrop-dragging"),this.setupDropTarget())}),this.element.addEventListener("dragend",c=>{c.target.matches(this.selector)&&(c.stopPropagation(),c.target.classList.remove("draganddrop-dragging","draganddrop-hide"),this.placeholder&&this.placeholder.remove(),this.placeholder=null,this.dragging=null,this.cleanupDropTarget())}),this.element.addEventListener("dragleave",c=>{c.target.matches(this.selector)&&c.stopPropagation()}),this.element.addEventListener("drop",c=>{this.dragging&&this.placeholder.parentNode==this.droptarget&&(c.stopPropagation(),this.placeholder.replaceWith(this.dragging),this.dragging=null,this.placeholder=null,this.onDrop&&this.onDrop())}),this.element.addEventListener("dragover",c=>{if(this.dragging)if(c.preventDefault(),this.dragging.classList.add("draganddrop-hide"),c.target.matches(this.selector)){c.stopPropagation();let p=c.target.getBoundingClientRect().top,b=c.target.getBoundingClientRect().bottom;if(this.placeholder==c.target)return;c.clientY<(p+b)/2?c.target.parentNode.insertBefore(this.placeholder,c.target):c.target.parentNode.insertBefore(this.placeholder,c.target.nextSibling)}else c.target==this.element&&(this.droptarget.appendChild(this.placeholder),c.stopPropagation())})):console.error("droptarget is required"):console.error("selector is required"):console.error("element is required")}refresh(){this.element.querySelectorAll(this.selector).forEach(s=>{s.setAttribute("draggable",!0)})}setupDropTarget(){this.droptarget.classList.add("draganddrop-drop-target")}cleanupDropTarget(){this.droptarget.classList.remove("draganddrop-drop-target")}}class xi extends me{constructor(s){super({type:"Feature",geometry:null}),this.paperItem=new a.Path,this.paperItem.style=new a.Style(s),this.paperItem.initializeGeoJSONFeature=Di}static supportsGeoJSONType(s,c=null){return s.toLowerCase()===null&&c===null}getGeoJSONType(){return{type:null}}getCoordinates(){return[]}getProperties(){return this.paperItem.style}}function Di(L,s){let c={geometry:{type:L,coordinates:[],properties:{subtype:s}},properties:this.style},p=a.Item.fromGeoJSON(c);return this.replaceWith(p),p}class Ii{constructor(s,c){return this.element=oi(`
1554
1554
  <div class='feature-collection'>
1555
1555
  <div class='annotation-header hoverable-actions'>
1556
1556
  <span class="visibility-toggle"><span class="fa fa-eye" data-action="hide"></span><span class="fa fa-eye-slash" data-action="show"></span></span>
@@ -1569,7 +1569,7 @@ input[type=range] {
1569
1569
  </div>
1570
1570
  </div>
1571
1571
  </div>
1572
- `),h.iconFactory?h.iconFactory.convertFaIcons(this.element):jt(this.element),this._editableName=new di({iconFactory:h.iconFactory}),this.element.querySelector(".annotation-name.name").appendChild(this._editableName.element),this._editableName.onChanged=p=>{this.label=p},this._editableName.onEditClicked=p=>{p.preventDefault(),p.stopPropagation()},this._featurelist=this.element.querySelector(".features-list"),this._dragAndDrop=new Di({parent:this.element,selector:".features-list .feature",dropTarget:this._featurelist,onDrop:()=>{this.features.forEach(p=>this.group.addChild(p.paperItem))}}),this.group=s,this.group.on({"selection:mouseenter":()=>{this.element.classList.add("svg-hovered"),this.element.dispatchEvent(new Event("mouseover"))},"selection:mouseleave":()=>{this.element.classList.remove("svg-hovered"),this.element.dispatchEvent(new Event("mouseout"))},selected:()=>{this.element.classList.add("selected"),this.element.dispatchEvent(new Event("selected"))},deselected:()=>{this.element.classList.remove("selected"),this.element.dispatchEvent(new Event("deselected"))},"display-name-changed":()=>{this.updateLabel()},removed:()=>{this.remove()},"child-added":p=>{let b=p.item.FeatureUI||new yi(p.item,h);this._addFeature(b)}}),this.group.featureCollectionUI=this,this.remove=()=>{this.element.remove()},this.numFeatures=()=>this.features.length,this._addFeature=p=>(p.paperItem.updateFillOpacity(),this._featurelist.appendChild(p.element),this._sortableDebounce&&window.clearTimeout(this._sortableDebounce),self._sortableDebounce=window.setTimeout(()=>this._dragAndDrop.refresh(),15),p.element),this.createFeature=function(){let p=this.group.defaultStyle,b={fillColor:new a.Color(p.fillColor),strokeColor:new a.Color(p.strokeColor),rescale:y.extend(!0,{},p.rescale),fillOpacity:p.fillOpacity,strokeOpacity:p.strokeOpacity,strokeWidth:p.strokeWidth},A=new wi(b);return this.group.addChild(A.paperItem),A.paperItem},this.ui={setOpacity:p=>{this.group.opacity=p},setFillOpacity:p=>{this.group.fillOpacity=p}},Xe.set(this.element,{featureCollection:this}),this.label=this.group.displayName,this.element.addEventListener("click",p=>{p.stopPropagation()}),this.element.querySelector(".toggle-list").addEventListener("click",p=>{let b=this._featurelist.children.length;this.element.querySelector(".num-annotations").textContent=b,this.element.querySelector(".features-summary").dataset.numElements=b,this.element.querySelector(".features").classList.toggle("collapsed"),p.stopPropagation(),p.preventDefault()}),this.element.addEventListener("click",p=>{if(p.target.matches(".annotation-header [data-action]")){p.stopPropagation(),p.stopImmediatePropagation(),p.preventDefault();let b=p.target.dataset.action;switch(b){case"trash":this.removeLayer(!0);break;case"style":this.openStyleEditor(p);break;case"show":case"hide":this.toggleVisibility();break;default:console.log("No function set for action:",b)}}}),this.element.querySelector(".new-feature").addEventListener("click",p=>{p.stopPropagation(),this.createFeature().select()}),this}get features(){return Array.from(this._featurelist.querySelectorAll(".feature")).map(s=>Xe.get(s,"feature"))}get label(){return this.group.displayName}set label(s){return this.setLabel(s)}setLabel(s,h){let p=new String(s);return p.source=h,this.group.displayName=p,this.updateLabel(),p}updateLabel(){this._editableName.setText(this.label)}toggleVisibility(){this.element.classList.toggle("annotation-hidden"),this.group.visible=!this.element.classList.contains("annotation-hidden")}removeLayer(s=!0){s&&window.confirm("Remove this layer?")==1&&this.group.remove()}openStyleEditor(s){this.group.project.emit("edit-style",{item:this.group})||console.warn("No event listeners are registered for paperScope.project for event 'edit-style'")}}class Bi extends y.EventSource{constructor(s,h){super();let p=this;this._tk=s,this.paperScope=this._tk.paperScope,this.paperScope.project.on("feature-collection-added",P=>this._onFeatureCollectionAdded(P)),this.element=function(){let P=ri(`
1572
+ `),c.iconFactory?c.iconFactory.convertFaIcons(this.element):zt(this.element),this._editableName=new di({iconFactory:c.iconFactory}),this.element.querySelector(".annotation-name.name").appendChild(this._editableName.element),this._editableName.onChanged=p=>{this.label=p},this._editableName.onEditClicked=p=>{p.preventDefault(),p.stopPropagation()},this._featurelist=this.element.querySelector(".features-list"),this._dragAndDrop=new Oi({parent:this.element,selector:".features-list .feature",dropTarget:this._featurelist,onDrop:()=>{this.features.forEach(p=>this.group.addChild(p.paperItem))}}),this.group=s,this.group.on({"selection:mouseenter":()=>{this.element.classList.add("svg-hovered"),this.element.dispatchEvent(new Event("mouseover"))},"selection:mouseleave":()=>{this.element.classList.remove("svg-hovered"),this.element.dispatchEvent(new Event("mouseout"))},selected:()=>{this.element.classList.add("selected"),this.element.dispatchEvent(new Event("selected"))},deselected:()=>{this.element.classList.remove("selected"),this.element.dispatchEvent(new Event("deselected"))},"display-name-changed":()=>{this.updateLabel()},removed:()=>{this.remove()},"child-added":p=>{let b=p.item.FeatureUI||new _i(p.item,c);this._addFeature(b)}}),this.group.featureCollectionUI=this,this.remove=()=>{this.element.remove()},this.numFeatures=()=>this.features.length,this._addFeature=p=>(p.paperItem.updateFillOpacity(),this._featurelist.appendChild(p.element),this._sortableDebounce&&window.clearTimeout(this._sortableDebounce),self._sortableDebounce=window.setTimeout(()=>this._dragAndDrop.refresh(),15),p.element),this.createFeature=function(){let p=this.group.defaultStyle,b={fillColor:new a.Color(p.fillColor),strokeColor:new a.Color(p.strokeColor),rescale:y.extend(!0,{},p.rescale),fillOpacity:p.fillOpacity,strokeOpacity:p.strokeOpacity,strokeWidth:p.strokeWidth},C=new xi(b);return this.group.addChild(C.paperItem),C.paperItem},this.ui={setOpacity:p=>{this.group.opacity=p},setFillOpacity:p=>{this.group.fillOpacity=p}},Ke.set(this.element,{featureCollection:this}),this.label=this.group.displayName,this.element.addEventListener("click",p=>{p.stopPropagation()}),this.element.querySelector(".toggle-list").addEventListener("click",p=>{let b=this._featurelist.children.length;this.element.querySelector(".num-annotations").textContent=b,this.element.querySelector(".features-summary").dataset.numElements=b,this.element.querySelector(".features").classList.toggle("collapsed"),p.stopPropagation(),p.preventDefault()}),this.element.addEventListener("click",p=>{if(p.target.matches(".annotation-header [data-action]")){p.stopPropagation(),p.stopImmediatePropagation(),p.preventDefault();let b=p.target.dataset.action;switch(b){case"trash":this.removeLayer(!0);break;case"style":this.openStyleEditor(p);break;case"show":case"hide":this.toggleVisibility();break;default:console.log("No function set for action:",b)}}}),this.element.querySelector(".new-feature").addEventListener("click",p=>{p.stopPropagation(),this.createFeature().select()}),this}get features(){return Array.from(this._featurelist.querySelectorAll(".feature")).map(s=>Ke.get(s,"feature"))}get label(){return this.group.displayName}set label(s){return this.setLabel(s)}setLabel(s,c){let p=new String(s);return p.source=c,this.group.displayName=p,this.updateLabel(),p}updateLabel(){this._editableName.setText(this.label)}toggleVisibility(){this.element.classList.toggle("annotation-hidden"),this.group.visible=!this.element.classList.contains("annotation-hidden")}removeLayer(s=!0){s&&window.confirm("Remove this layer?")==1&&this.group.remove()}openStyleEditor(s){this.group.project.emit("edit-style",{item:this.group})||console.warn("No event listeners are registered for paperScope.project for event 'edit-style'")}}class Ai extends y.EventSource{constructor(s,c){super();let p=this;this._tk=s,this.paperScope=this._tk.paperScope,this.paperScope.project.on("feature-collection-added",P=>this._onFeatureCollectionAdded(P)),this.element=function(){let P=oi(`
1573
1573
  <div class="annotation-ui-mainwindow" title="Annotations">
1574
1574
  <div><span class='fa-save'></span> <span class="annotation-ui-title">Annotation Interface</span></div>
1575
1575
  <div class='annotation-ui-toolbar annotation-visibility-controls'>
@@ -1588,7 +1588,7 @@ input[type=range] {
1588
1588
  <div class='annotation-ui-feature-collections disable-when-annotations-hidden disable-when-deactivated'></div>
1589
1589
  <div class='new-feature-collection disable-when-deactivated'><span class='glyphicon glyphicon-plus fa fa-plus'></span>Add Feature Collection</div>
1590
1590
  <div class='icon-factory-container'></div>
1591
- </div>`),L="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(N){let Y=16*Math.random()|0;return(N=="x"?Y:3&Y|8).toString(16)});return P.dataset.uiId=L,P}(),this.iconFactory=new ut(this.element.querySelector(".icon-factory-container")),this.iconFactory.convertFaIcons(this.element),this.element.querySelector(".new-feature-collection").addEventListener("click",P=>{P.stopPropagation(),P.preventDefault(),this._tk.addEmptyFeatureCollectionGroup()}),this.element.querySelector(".annotation-ui-feature-collections").addEventListener("click",function(){this.textContent.trim().length===0&&p._tk.addEmptyFeatureCollectionGroup()}),this.element.querySelector(".toggle-annotations").addEventListener("click",()=>{let P=this.element.querySelectorAll(".annotation-ui-feature-collections .feature-collection.annotation-hidden");P.length>0?P.forEach(L=>{L.querySelectorAll('[data-action="show"]').forEach(N=>N.dispatchEvent(new Event("click",{bubbles:!0})))}):this.element.querySelectorAll('.annotation-ui-feature-collections .feature-collection:not(.hidden) [data-action="hide"]').forEach(L=>L.dispatchEvent(new Event("click",{bubbles:!0})))}),this._dragAndDrop=new Di({parent:this.element,selector:".feature-collection",dropTarget:this.element.querySelector(".annotation-ui-feature-collections"),onDrop:()=>{this.element.querySelectorAll(".annotation-ui-feature-collections .feature-collection").forEach(P=>{Xe.get(P,"featureCollection").group.bringToFront()})}}),this.element.addEventListener("selected",function(P){P.target.matches(".feature")&&(P.stopPropagation(),this.classList.add("selected"),this.scrollIntoView({block:"nearest"}))}),this.element.addEventListener("deselected",function(P){P.target.matches(".feature")&&(P.stopPropagation(),this.classList.remove("selected"))}),this.element.addEventListener("click",function(P){P.target.matches(".toggle-list")&&(this.closest(".features").classList.toggle("collapsed"),P.stopPropagation())}),this.element.addEventListener("value-changed",()=>{this.element.querySelector(".feature.selected").dispatchEvent(new Event("selected")),this.element.querySelector(".feature-collection.active").dispatchEvent(new Event("selected"))});const b=this.element.querySelector("input.annotation-total-opacity");b.addEventListener("input",function(){(function(P){let L=Array.from(p.element.querySelectorAll(".feature-collection")).reduce(function(N,Y){return Y.classList.contains("selected")?N.selected.push(Y):Y.matches(":hover,.svg-hovered")?N.hover.push(Y):N.other.push(Y),N},{selected:[],hover:[],other:[]});L.selected.length>0?(L.selected.forEach(function(N){let Y=1*P,X=Xe.get(N,"featureCollection");X&&X.ui.setOpacity(Y)}),L.hover.concat(L.other).forEach(function(N){let Y=.25*P,X=Xe.get(N,"featureCollection");X&&X.ui.setOpacity(Y)})):L.hover.length>0?(L.hover.forEach(function(N){let Y=1*P,X=Xe.get(N,"featureCollection");X&&X.ui.setOpacity(Y)}),L.other.forEach(function(N){let Y=.25*P,X=Xe.get(N,"featureCollection");X&&X.ui.setOpacity(Y)})):L.other.forEach(function(N){let Y=1*P,X=Xe.get(N,"featureCollection");X&&X.ui.setOpacity(Y)})})(this.value)}),b.dispatchEvent(new Event("input"));const A=this.element.querySelector("input.annotation-fill-opacity");A.addEventListener("input",function(){p.paperScope.view.fillOpacity=this.value}),A.dispatchEvent(new Event("input"))}hide(){this.element.classList.add("hidden"),this.raiseEvent("hide")}show(){this.element.classList.remove("hidden"),this.raiseEvent("show")}toggle(){this.element.matches(":visible")?this.hide():this.show()}deactivate(){this.element.classList.add("deactivated")}activate(){this.element.classList.remove("deactivated")}destroy(){this.raiseEvent("destroy"),this.element.remove()}_onFeatureCollectionAdded(s){let h=s.group,p=new Oi(h,{iconFactory:this.iconFactory});this.element.querySelector(".annotation-ui-feature-collections").appendChild(p.element),this._dragAndDrop.refresh(),p.element.dispatchEvent(new Event("element-added")),setTimeout(function(){p.element.classList.add("inserted")},30)}}class Hi{constructor({innerHTML:s,title:h}){const p=document.createElement("div");document.querySelector("body").appendChild(p),p.style.position="fixed",p.style.width="100vw",p.style.height="100vh",p.style.left=0,p.style.top=0;const b=document.createElement("div");p.appendChild(b),b.style.backgroundColor="gray",b.style.opacity=.9,b.style.width="100%",b.style.height="100%",b.style.position="absolute";const A=document.createElement("div");A.classList.add("ui-dialog"),p.appendChild(A),A.style.setProperty("max-height","80%"),A.style.setProperty("max-width","80%"),A.style.left="50%",A.style.top="50%",A.style.transform="translate(-50%, -50%)",A.style.overflow="auto",A.style.position="relative",A.style.backgroundColor="white",A.style.display="inline-block",A.style.padding="2px",A.style.borderRadius="2px";const P=document.createElement("div");A.appendChild(P),P.style.padding="0.3em 0.6em",P.style.backgroundColor="rgb(233, 233, 233)",P.style.borderColor="rgb(220, 220, 220)",P.style.borderRadius="2px",P.style.display="flex";const L=document.createElement("label");P.appendChild(L),L.innerText=h,L.style.fontWeight="bold",L.style.flexGrow=1;const N=document.createElement("button");N.innerText="x",N.style.marginLeft="1em",P.appendChild(N),N.addEventListener("click",()=>this.hide());const Y=document.createElement("div");A.appendChild(Y),Y.innerHTML=s,b.addEventListener("click",()=>this.hide()),this.element=p,this.container=Y,this.background=b,this.foreground=A,this.topbar=P,this.hide()}show(){this.element.style.display="block"}hide(){this.element.style.display="none"}toggle(){this.element.style.display==="none"?this.show():this.hide()}}class ki{constructor(s,h){let p=this;function b(N){var X;let Y=((X=s.viewer.world.getItemAt(0))==null?void 0:X.source.name)||"";return Y.length>0&&(Y+=N),Y}function A(){var N,Y;(N=p.element.querySelector(".featurecollection-list"))==null||N.replaceChildren(),(Y=p.element.querySelector(".finalize"))==null||Y.replaceChildren()}function P(N){let Y=p.element.querySelector(".featurecollection-list");return Y.replaceChildren(),N.forEach(X=>{let Z=X.label||X.displayName;const pe=document.createElement("div");Y.appendChild(pe);const ne=document.createElement("input");pe.appendChild(ne),ne.setAttribute("type","checkbox"),ne.setAttribute("checked","true"),Xe.set(ne,"fc",X);const ie=document.createElement("label");ie.innerText=Z,pe.appendChild(ie)}),Y}function L(N,Y,X,Z){function pe(de,te,he){de&&(Object.keys(localStorage).includes(te)?he.classList.add("key-exists"):he.classList.remove("key-exists"))}const ne=p.element.querySelector(".finalize"),ie=document.createElement("button");let me;if(ie.innerText=N,ne.appendChild(ie),Y){const de=document.createElement("div"),te=document.createElement("div");de.appendChild(te),ne.appendChild(de),te.innerText=Y,me=new di,me.setText(X),de.appendChild(me.element),Z&&de.classList.add("localstorage-key-test"),me.onChanged=he=>{ie.setAttribute("data-label",he),pe(Z,he,de)},pe(Z,X,de)}return ne.appendChild(ie),ie.setAttribute("data-label",X),ie}this.dialog=new Hi({innerHTML:`
1591
+ </div>`),M="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(z){let J=16*Math.random()|0;return(z=="x"?J:3&J|8).toString(16)});return P.dataset.uiId=M,P}(),this.iconFactory=new ft(this.element.querySelector(".icon-factory-container")),this.iconFactory.convertFaIcons(this.element),this.element.querySelector(".new-feature-collection").addEventListener("click",P=>{P.stopPropagation(),P.preventDefault(),this._tk.addEmptyFeatureCollectionGroup()}),this.element.querySelector(".annotation-ui-feature-collections").addEventListener("click",function(){this.textContent.trim().length===0&&p._tk.addEmptyFeatureCollectionGroup()}),this.element.querySelector(".toggle-annotations").addEventListener("click",()=>{let P=this.element.querySelectorAll(".annotation-ui-feature-collections .feature-collection.annotation-hidden");P.length>0?P.forEach(M=>{M.querySelectorAll('[data-action="show"]').forEach(z=>z.dispatchEvent(new Event("click",{bubbles:!0})))}):this.element.querySelectorAll('.annotation-ui-feature-collections .feature-collection:not(.hidden) [data-action="hide"]').forEach(M=>M.dispatchEvent(new Event("click",{bubbles:!0})))}),this._dragAndDrop=new Oi({parent:this.element,selector:".feature-collection",dropTarget:this.element.querySelector(".annotation-ui-feature-collections"),onDrop:()=>{this.element.querySelectorAll(".annotation-ui-feature-collections .feature-collection").forEach(P=>{Ke.get(P,"featureCollection").group.bringToFront()})}}),this.element.addEventListener("selected",function(P){P.target.matches(".feature")&&(P.stopPropagation(),this.classList.add("selected"),this.scrollIntoView({block:"nearest"}))}),this.element.addEventListener("deselected",function(P){P.target.matches(".feature")&&(P.stopPropagation(),this.classList.remove("selected"))}),this.element.addEventListener("click",function(P){P.target.matches(".toggle-list")&&(this.closest(".features").classList.toggle("collapsed"),P.stopPropagation())}),this.element.addEventListener("value-changed",()=>{this.element.querySelector(".feature.selected").dispatchEvent(new Event("selected")),this.element.querySelector(".feature-collection.active").dispatchEvent(new Event("selected"))});const b=this.element.querySelector("input.annotation-total-opacity");b.addEventListener("input",function(){(function(P){let M=Array.from(p.element.querySelectorAll(".feature-collection")).reduce(function(z,J){return J.classList.contains("selected")?z.selected.push(J):J.matches(":hover,.svg-hovered")?z.hover.push(J):z.other.push(J),z},{selected:[],hover:[],other:[]});M.selected.length>0?(M.selected.forEach(function(z){let J=1*P,X=Ke.get(z,"featureCollection");X&&X.ui.setOpacity(J)}),M.hover.concat(M.other).forEach(function(z){let J=.25*P,X=Ke.get(z,"featureCollection");X&&X.ui.setOpacity(J)})):M.hover.length>0?(M.hover.forEach(function(z){let J=1*P,X=Ke.get(z,"featureCollection");X&&X.ui.setOpacity(J)}),M.other.forEach(function(z){let J=.25*P,X=Ke.get(z,"featureCollection");X&&X.ui.setOpacity(J)})):M.other.forEach(function(z){let J=1*P,X=Ke.get(z,"featureCollection");X&&X.ui.setOpacity(J)})})(this.value)}),b.dispatchEvent(new Event("input"));const C=this.element.querySelector("input.annotation-fill-opacity");C.addEventListener("input",function(){p.paperScope.view.fillOpacity=this.value}),C.dispatchEvent(new Event("input"))}hide(){this.element.classList.add("hidden"),this.raiseEvent("hide")}show(){this.element.classList.remove("hidden"),this.raiseEvent("show")}toggle(){this.element.matches(":visible")?this.hide():this.show()}deactivate(){this.element.classList.add("deactivated")}activate(){this.element.classList.remove("deactivated")}destroy(){this.raiseEvent("destroy"),this.element.remove()}_onFeatureCollectionAdded(s){let c=s.group,p=new Ii(c,{iconFactory:this.iconFactory});this.element.querySelector(".annotation-ui-feature-collections").appendChild(p.element),this._dragAndDrop.refresh(),p.element.dispatchEvent(new Event("element-added")),setTimeout(function(){p.element.classList.add("inserted")},30)}}class ji{constructor({innerHTML:s,title:c}){const p=document.createElement("div");document.querySelector("body").appendChild(p),p.style.position="fixed",p.style.width="100vw",p.style.height="100vh",p.style.left=0,p.style.top=0;const b=document.createElement("div");p.appendChild(b),b.style.backgroundColor="gray",b.style.opacity=.9,b.style.width="100%",b.style.height="100%",b.style.position="absolute";const C=document.createElement("div");C.classList.add("ui-dialog"),p.appendChild(C),C.style.setProperty("max-height","80%"),C.style.setProperty("max-width","80%"),C.style.left="50%",C.style.top="50%",C.style.transform="translate(-50%, -50%)",C.style.overflow="auto",C.style.position="relative",C.style.backgroundColor="white",C.style.display="inline-block",C.style.padding="2px",C.style.borderRadius="2px";const P=document.createElement("div");C.appendChild(P),P.style.padding="0.3em 0.6em",P.style.backgroundColor="rgb(233, 233, 233)",P.style.borderColor="rgb(220, 220, 220)",P.style.borderRadius="2px",P.style.display="flex";const M=document.createElement("label");P.appendChild(M),M.innerText=c,M.style.fontWeight="bold",M.style.flexGrow=1;const z=document.createElement("button");z.innerText="x",z.style.marginLeft="1em",P.appendChild(z),z.addEventListener("click",()=>this.hide());const J=document.createElement("div");C.appendChild(J),J.innerHTML=s,b.addEventListener("click",()=>this.hide()),this.element=p,this.container=J,this.background=b,this.foreground=C,this.topbar=P,this.hide()}show(){this.element.style.display="block"}hide(){this.element.style.display="none"}toggle(){this.element.style.display==="none"?this.show():this.hide()}}class Fi{constructor(s,c){let p=this;function b(z){var X;let J=((X=s.viewer.world.getItemAt(0))==null?void 0:X.source.name)||"";return J.length>0&&(J+=z),J}function C(){var z,J;(z=p.element.querySelector(".featurecollection-list"))==null||z.replaceChildren(),(J=p.element.querySelector(".finalize"))==null||J.replaceChildren()}function P(z){let J=p.element.querySelector(".featurecollection-list");return J.replaceChildren(),z.forEach(X=>{let Y=X.label||X.displayName;const pe=document.createElement("div");J.appendChild(pe);const ne=document.createElement("input");pe.appendChild(ne),ne.setAttribute("type","checkbox"),ne.setAttribute("checked","true"),Ke.set(ne,"fc",X);const ie=document.createElement("label");ie.innerText=Y,pe.appendChild(ie)}),J}function M(z,J,X,Y){function pe(de,te,he){de&&(Object.keys(localStorage).includes(te)?he.classList.add("key-exists"):he.classList.remove("key-exists"))}const ne=p.element.querySelector(".finalize"),ie=document.createElement("button");let ve;if(ie.innerText=z,ne.appendChild(ie),J){const de=document.createElement("div"),te=document.createElement("div");de.appendChild(te),ne.appendChild(de),te.innerText=J,ve=new di,ve.setText(X),de.appendChild(ve.element),Y&&de.classList.add("localstorage-key-test"),ve.onChanged=he=>{ie.setAttribute("data-label",he),pe(Y,he,de)},pe(Y,X,de)}return ne.appendChild(ie),ie.setAttribute("data-label",X),ie}this.dialog=new ji({innerHTML:`
1592
1592
  <div class="annotation-ui-filedialog" title="Save and Load Feature Collections">
1593
1593
  <div class="file-actions">
1594
1594
  <div class='header'>1. Available actions</div>
@@ -1610,7 +1610,7 @@ input[type=range] {
1610
1610
 
1611
1611
  </div>
1612
1612
  </div>
1613
- </div>`,title:""}),this.element=this.dialog.container,this.element.querySelector('button[data-action="geojson-load"]').addEventListener("click",function(){A();const N=document.createElement("input");N.type="file",N.accept="text/geojson,.geojson,text/json,.json",N.addEventListener("change",function(){let Y=this.files[0],X=new FileReader,Z=[];X.onload=function(){try{Z=JSON.parse(this.result)}catch{return void alert("Bad file - JSON could not be parsed")}Array.isArray(Z)||(Z=[Z]);let pe=Array.from(new Set(Z.map(me=>me.type)));if(pe.length==0&&p.element.find(".featurecollection-list").text("Bad file - no Features or FeatureCollections were found"),pe.length>1)return void alert("Bad file - valid geoJSON consists of an array of objects with single type (FeatureCollection or Feature)");pe[0]=="Feature"&&(Z=[{type:"FeatureCollection",features:Z,properties:{label:Y.name}}]),P(Z);const ne=document.createElement("button");p.element.querySelector(".finalize").appendChild(ne),ne.innerText="Replace existing layers",ne.addEventListener("click",()=>s.addFeatureCollections(Z,!0));const ie=document.createElement("button");p.element.querySelector(".finalize").appendChild(ie),ie.innerText="Add new layers",ie.addEventListener("click",()=>s.addFeatureCollections(Z,!1))},X.readAsText(Y)}),N.click()}),this.element.querySelector('button[data-action="geojson-save"]').addEventListener("click",function(){A();let N=P(s.toGeoJSON());L("Create file","Choose file name:",b("-")+"FeatureCollections.json").addEventListener("click",function(){var me;(me=this.parentElement.querySelector(".download-link"))==null||me.remove();let Y=Array.from(N.querySelectorAll("input:checked")).map(de=>Xe.get(de,"fc")),X=JSON.stringify(Y),Z=new Blob([X],{type:"text/json"}),pe=this.getAttribute("data-label");const ne=document.createElement("div");ne.classList.add("download-link"),this.parentElement.insertBefore(ne,this.nextSibling);const ie=document.createElement("a");ie.href=window.URL.createObjectURL(Z),ie.download=pe,ie.target="_blank",ie.innerText="Download file",ne.appendChild(ie)})}),this.element.querySelector('button[data-action="svg-export"]').addEventListener("click",function(){A();let N=P(s.getFeatureCollectionGroups());L("Create file","Choose file name:",b("-")+"FeatureCollections.svg").addEventListener("click",function(){var X;(X=this.parentElement.querySelector(".download-link"))==null||X.remove();let Y=Array.from(N.querySelectorAll("input:checked")).map(function(Z){return Xe.get(Z,"fc")});if(Y.length>0){let Z=new a.PaperScope;Z.setup(),Y.forEach(function(de){Z.project.activeLayer.addChildren(de.layer.clone({insert:!1,deep:!0}).children)});let pe=new Blob([Z.project.exportSVG({asString:!0,bounds:"content"})],{type:"text/svg"}),ne=this.getAttribute("data-label");const ie=document.createElement("div");ie.classList.add("download-link"),this.parentElement.insertBefore(ie,this.nextSibling);const me=document.createElement("a");me.href=window.URL.createObjectURL(pe),me.download=ne,me.target="_blank",me.innerText="Download file",ie.appendChild(me)}})}),this.element.querySelector('button[data-action="png-export"]').addEventListener("click",function(){A();let N=P(s.getFeatureCollectionGroups());L("Create file","Choose file name:",b("-")+"raster.png").addEventListener("click",function(){var X;(X=this.parentElement.querySelector(".download-link"))==null||X.remove();let Y=Array.from(N.querySelectorAll("input:checked")).map(function(Z){return Xe.get(Z,"fc")});if(Y.length>0){let Z=new a.PaperScope;Z.setup(),Y.forEach(function(me){Z.project.activeLayer.addChildren(me.layer.clone({insert:!1,deep:!0}).children)});let pe=this.getAttribute("data-label");const ne=document.createElement("div");ne.classList.add("download-link"),this.parentElement.insertBefore(ne,this.nextSibling);const ie=document.createElement("a");ie.href=Z.project.activeLayer.rasterize({insert:!1}).toDataURL(),ie.download=pe,ie.target="_blank",ie.innerText="Download file",ne.appendChild(ie)}})}),this.element.querySelector('button[data-action="ls-store"]').addEventListener("click",function(){A();let N=P(s.toGeoJSON());L("Save data","Local storage key:",b(),!0).addEventListener("click",function(){let Y=Array.from(N.querySelectorAll("input:checked")).map(function(pe){return Xe.get(pe,"fc")}),X=JSON.stringify(Y),Z=this.getAttribute("data-label");window.localStorage.setItem(Z,X)})}),this.element.querySelector('button[data-action="ls-load"]').addEventListener("click",function(){A();let N=[],Y=b(),X=Object.keys(window.localStorage),Z=p.element.querySelector(".featurecollection-list");Z.innerText="";const pe=document.createElement("div");pe.classList.add("localstorage-key-list"),Z.appendChild(pe),X.sort((ne,ie)=>ne.localeCompare(ie)).forEach(ne=>{const ie=document.createElement("div");ie.classList.add("localstorage-key"),ie.style.order=ne==Y?0:1,ie.innerText=ne,pe.appendChild(ie)}),pe.querySelectorAll(".localstorage-key").forEach(ne=>ne.addEventListener("click",function(){let ie=window.localStorage.getItem(this.textContent);if(!ie)return void alert(`No data found in local storage for key=${this.textContent}`);try{N=JSON.parse(ie)}catch{return void alert("Bad data - JSON could not be parsed")}P(N);const me=document.createElement("button");me.innerText="Replace existing layers",me.addEventListener("click",()=>s.addFeatureCollections(N,!0)),p.element.querySelector(".finalize").appendChild(me);const de=document.createElement("button");de.innerText="Add new layers",de.addEventListener("click",()=>s.addFeatureCollections(N,!1)),p.element.querySelector(".finalize").appendChild(de)}))})}show(){this.dialog.show()}hide(){this.dialog.hide()}toggle(){this.dialog.toggle()}}class Pi{constructor(s,h){var b,A,P,L;h=this.options=Object.assign({autoOpen:!0,featureCollections:[],addButton:!0,addToolbar:!0,tools:null,addLayerUI:!0,addFileButton:!0,buttonTogglesToolbar:!0,buttonTogglesLayerUI:!0},h);let p=this._viewer=s.viewer;this._isOpen=!!h.autoOpen,h.addToolbar&&(this._toolbar=new vi(s.overlay.paperScope,h.tools)),this._fileDialog=new ki(s,{appendTo:p.element}),this._filebutton=null,h.addFileButton&&(this._filebutton=s.overlay.addViewerButton({onClick:()=>{this._fileDialog.toggle()},faIconClass:"fa-save",tooltip:"Save/Load Annotations"})),h.addLayerUI&&(this._layerUI=new Bi(s,h.addFileButton)),this._addToViewer(),h.autoOpen?((b=this._layerUI)==null||b.show(),(A=this._toolbar)==null||A.show()):((P=this._layerUI)==null||P.hide(),(L=this._toolbar)==null||L.hide()),this._button=null,h.addButton&&(this._button=s.overlay.addViewerButton({onClick:()=>{this._isOpen=!this._isOpen,this._isOpen?(this.options.buttonTogglesToolbar&&this._toolbar.show(),this.options.buttonTogglesLayerUI&&this._layerUI.show()):(this.options.buttonTogglesToolbar&&this._toolbar.hide(),this.options.buttonTogglesLayerUI&&this._layerUI.hide())},faIconClass:"fa-pencil",tooltip:"Annotation Interface"})),h.featureCollections&&s.loadGeoJSON(h.featureCollections)}destroy(){if(this._layerUI.destroy(),this._toolbar.destroy(),this._button){let s=this._viewer.buttonGroup.buttons.indexOf(this._button);s>-1&&this._viewer.buttonGroup.buttons.splice(s,1),this._button.element.remove()}if(this._filebutton){let s=this._viewer.buttonGroup.buttons.indexOf(this._filebutton);s>-1&&this._viewer.buttonGroup.buttons.splice(s,1),this._filebutton.element.remove()}}showUI(){this.ui.show()}hideUI(){this.ui.hide()}showToolbar(){this.toolbar.show()}hideToolbar(){this.toolbar.hide()}get ui(){return this._layerUI}get toolbar(){return this._toolbar}get element(){return this._layerUI.element}_addToViewer(){const s=document.createElement("div");this._viewer.element.appendChild(s);const h=document.createElement("div"),p=document.createElement("div"),b=document.createElement("div"),A=document.createElement("div"),P=document.createElement("div"),L=document.createElement("div");Object.entries({"annotation-ui-grid":s,top:h,bottom:p,center:b,left:A,right:P,"resize-right":L}).forEach(([ie,me])=>me.classList.add(ie)),[b,P,A,h,p].forEach(ie=>s.appendChild(ie)),b.appendChild(this._viewer.container),P.appendChild(L),P.appendChild(this.element),h.appendChild(this._toolbar.element);const Y=this.element,X=document.querySelector("body");let Z;function pe(ie){if(L.classList.contains("resizing")){if(ie.movementX){const me=Y.getBoundingClientRect();Y.style.width=me.right-ie.x-Z+"px"}ie.preventDefault()}}function ne(ie){document.removeEventListener("mousemove",pe),document.removeEventListener("mouseleave",ne),document.removeEventListener("mouseup",ne),X.classList.remove(".annotation-ui-noselect"),L.classList.remove("resizing")}L.addEventListener("mousedown",function(ie){this.classList.add("resizing"),X.classList.add(".annotation-ui-noselect"),document.addEventListener("mousemove",pe),document.addEventListener("mouseleave",ne),document.addEventListener("mouseup",ne),Z=Y.getBoundingClientRect().left-ie.x})}}function Fi(){this._computedFillOpacity=this.hierarchy.filter(M=>"fillOpacity"in M&&(M._multiplyOpacity||M==this)).reduce((M,s)=>M*s.fillOpacity,1),this.fillColor&&(this.fillColor.alpha=this._computedFillOpacity)}a.View.prototype.getZoom=function(){var M=this._decompose().scaling;return(Math.abs(M.x)+Math.abs(M.y))/2},a.CanvasView.prototype._setElementSize.base=function(M,s){var h=this._element;M=Math.round(M),s=Math.round(s),h&&(h.width!==M&&(h.width=M),h.height!==s&&(h.height=s))},a.View.prototype.setRotation=function(M,s){let h=M-(this._rotation||0);this.rotate(h,s),this._rotation=y.positiveModulo(M,360),this.emit("rotate",{rotatedBy:h,currentRotation:this._rotation,center:s})},a.View.prototype.setFlipped=function(M,s){M!==this.getFlipped()&&(this.rotate(-s),this.scale(-1,1),this.rotate(s),this.emit("flip",{flipped:M}))},a.View.prototype.getFlipped=function(M){return this.scaling.x*this.scaling.y<0},Object.defineProperty(a.Item.prototype,"hierarchy",{get:function(){return this.parent?this.parent.hierarchy.concat(this):this.project?this.project.hierarchy.concat(this):[this.view,this]}}),Object.defineProperty(a.Item.prototype,"descendants",{get:function(){return(this.children?this.children.map(M=>M.descendants).flat():[]).concat(this.isGeoJSONFeature?[this]:[])}}),Object.defineProperty(a.Item.prototype,"fillOpacity",{set:function(M){(this.style||this.defaultStyle).fillOpacity=M,this.descendants.forEach(s=>s.updateFillOpacity())},get:function(){return(this.style||this.defaultStyle).fillOpacity}}),Object.defineProperty(a.Item.prototype,"strokeOpacity",{set:function(M){(this.style||this.defaultStyle).strokeOpacity=M,this.descendants.forEach(s=>s.updateStrokeOpacity())},get:function(){return(this.style||this.defaultStyle).strokeOpacity}}),Object.defineProperty(a.Item.prototype,"rescale",{set:function(M){this._style.rescale=M},get:function(){return this._style.rescale}}),Object.defineProperty(a.Item.prototype,"stroke",{get:function(){return this._stroke},set:function(M){this._stroke=M,this.strokeWidth=M/(this.view.getZoom()*this.hierarchy.filter(s=>s.tiledImage)[0].scaling.x)}}),Object.defineProperty(a.Style.prototype,"fillOpacity",{set:function(M){this._fillOpacity=this._values.fillOpacity=M},get:function(){return this._fillOpacity===void 0?1:this._fillOpacity}}),Object.defineProperty(a.Style.prototype,"strokeOpacity",{set:function(M){this._strokeOpacity=this._values.strokeOpacity=M},get:function(){return this._strokeOpacity===void 0?1:this._strokeOpacity}}),Object.defineProperty(a.Style.prototype,"rescale",{set:function(M){this._rescale=this._values.rescale=M},get:function(){return this._rescale}}),Object.defineProperty(a.CompoundPath.prototype,"descendants",{get:function(){return[this]}}),Object.defineProperty(a.Project.prototype,"hierarchy",{get:function(){return this.parent?this.parent.hierarchy.concat(this):this.project?this.project.hierarchy.concat(this):[this.view,this]}}),Object.defineProperty(a.Project.prototype,"fillOpacity",{set:function(M){(this.style||this.defaultStyle).fillOpacity=M,this.descendants.forEach(s=>s.updateFillOpacity())},get:function(){return(this.style||this.defaultStyle).fillOpacity}}),Object.defineProperty(a.View.prototype,"fillOpacity",{set:function(M){this._fillOpacity=M,this._project.descendants.forEach(s=>s.updateFillOpacity())},get:function(){return this._fillOpacity}}),Object.defineProperty(a.View.prototype,"_fillOpacity",{value:1,writable:!0}),Object.defineProperty(a.Project.prototype,"strokeOpacity",{set:function(M){(this.style||this.defaultStyle).strokeOpacity=M,this.descendants.forEach(s=>s.updateStrokeOpacity())},get:function(){return(this.style||this.defaultStyle).strokeOpacity}}),a.Item.prototype.updateFillOpacity=Fi,a.Item.prototype.updateStrokeOpacity=function(){this.strokeColor&&(this.strokeColor.alpha=this.hierarchy.filter(M=>"strokeOpacity"in M&&(M._multiplyOpacity||M==this)).reduce((M,s)=>M*s.strokeOpacity,1))},a.Project.prototype.updateFillOpacity=Fi,a.View.prototype._multiplyOpacity=!0,a.Style.prototype.set=function(M){var s=M instanceof a.Style,h=s?M._values:M;if(h){for(var p in h)if(p in this._defaults||a.Style.prototype.hasOwnProperty(p)){var b=h[p];this[p]=b&&s&&b.clone?b.clone():b}}},a.Item.prototype.applyRescale=function(){let M=this,s=M.rescale;if(s){let h=M.view.scaling.x*M.layer.scaling.x;Object.keys(s).forEach(function(p){typeof s[p]=="function"?M[p]=s[p](h):Array.isArray(s[p])?M[p]=s[p].map(function(b){return b/h}):M[p]=s[p]/h})}},a.PathItem.prototype.isClockwise=function(){return this.getArea()>=-1e-8},Object.defineProperty(a.PathItem.prototype,"clockwise",{get:function(){return this.isClockwise()}});var Ii={findItemBoundsCollisions:function(M,s,h){function p(P){for(var L=new Array(P.length),N=0;N<P.length;N++){var Y=P[N].getBounds();L[N]=[Y.left,Y.top,Y.right,Y.bottom]}return L}var b=p(M),A=s&&s!==M?p(s):b;return this.findBoundsCollisions(b,A,h||0)},findCurveBoundsCollisions:function(M,s,h,p){function b(pe){for(var ne=Math.min,ie=Math.max,me=new Array(pe.length),de=0;de<pe.length;de++){var te=pe[de];me[de]=[ne(te[0],te[2],te[4],te[6]),ne(te[1],te[3],te[5],te[7]),ie(te[0],te[2],te[4],te[6]),ie(te[1],te[3],te[5],te[7])]}return me}var A=b(M),P=s&&s!==M?b(s):A;if(p){for(var L=this.findBoundsCollisions(A,P,h||0,!1,!0),N=this.findBoundsCollisions(A,P,h||0,!0,!0),Y=[],X=0,Z=L.length;X<Z;X++)Y[X]={hor:L[X],ver:N[X]};return Y}return this.findBoundsCollisions(A,P,h||0)},findBoundsCollisions:function(M,s,h,p,b){var A=!s||M===s,P=A?M:M.concat(s),L=M.length,N=P.length;function Y(Ue,gt,bt){for(var it=0,Pt=Ue.length;it<Pt;){var Ut=Pt+it>>>1;P[Ue[Ut]][gt]<bt?it=Ut+1:Pt=Ut}return it-1}for(var X=p?1:0,Z=X+2,pe=p?0:1,ne=pe+2,ie=new Array(N),me=0;me<N;me++)ie[me]=me;ie.sort(function(Ue,gt){return P[Ue][X]-P[gt][X]});var de=[],te=new Array(L);for(me=0;me<N;me++){var he=ie[me],ce=P[he],Ee=A?he:he-L,Re=he<L,Ae=A||!Re,Me=Re?[]:null;if(de.length){var Le=Y(de,Z,ce[X]-h)+1;if(de.splice(0,Le),A&&b){Me=Me.concat(de);for(var Fe=0;Fe<de.length;Fe++)te[Je=de[Fe]].push(Ee)}else{var Be=ce[ne],qe=ce[pe];for(Fe=0;Fe<de.length;Fe++){var Je=de[Fe],Qe=P[Je],Ye=Je<L,ht=A||Je>=L;(b||(Re&&ht||Ae&&Ye)&&Be>=Qe[pe]-h&&qe<=Qe[ne]+h)&&(Re&&ht&&Me.push(A?Je:Je-L),Ae&&Ye&&te[Je].push(Ee))}}}if(Re&&(M===s&&Me.push(he),te[he]=Me),de.length){var st=Y(de,Z,ce[Z]);de.splice(st+1,0,he)}else de.push(he)}for(me=0;me<te.length;me++){var Ke=te[me];Ke&&Ke.sort(function(Ue,gt){return Ue-gt})}return te}};const ji=a.PathItem,zt=a.Path,e=a.CompoundPath,t=a.Base,i=a.Item,r=a.Segment,l=a.Curve,u=a.CurveLocation,f=a.Numerical;ji.inject(new function(){var M=Math.min,s=Math.max,h=Math.abs,p={unite:{1:!0,2:!0},intersect:{2:!0},subtract:{1:!0},exclude:{1:!0,"-1":!0}};function b(te){return te._children||[te]}function A(te,he){var ce=te.clone(!1).reduce({simplify:!0}).transform(null,!0,!0);if(he){for(var Ee=b(ce),Re=0,Ae=Ee.length;Re<Ae;Re++)(te=Ee[Re])._closed||te.isEmpty()||(te.closePath(f.EPSILON),te.getFirstSegment().setHandleIn(0,0),te.getLastSegment().setHandleOut(0,0));ce=ce.resolveCrossings().reorient(ce.getFillRule()==="nonzero",!0)}return ce}function P(te,he,ce,Ee,Re){var Ae=new e(i.NO_INSERT);return Ae.addChildren(te,!0),Ae=Ae.reduce({simplify:he}),Re&&Re.insert==0||Ae.insertAbove(Ee&&ce.isSibling(Ee)&&ce.getIndex()<Ee.getIndex()?Ee:ce),Ae.copyAttributes(ce,!0),Ae}function L(te){return te.hasOverlap()||te.isCrossing()}function N(te,he,ce,Ee){if(Ee&&(Ee.trace==0||Ee.stroke)&&/^(subtract|intersect)$/.test(ce))return Y(te,he,ce);var Re=A(te,!0),Ae=he&&te!==he&&A(he,!0),Me=p[ce];Me[ce]=!0,Ae&&(Me.subtract||Me.exclude)^Ae.isClockwise()^Re.isClockwise()&&Ae.reverse();var Le,Fe=ne(u.expand(Re.getIntersections(Ae,L))),Be=b(Re),qe=Ae&&b(Ae),Je=[],Qe=[];function Ye(Tt){for(var Wt=0,Gt=Tt.length;Wt<Gt;Wt++){var Vt=Tt[Wt];t.push(Je,Vt._segments),t.push(Qe,Vt.getCurves()),Vt._overlapsOnly=!0}}function ht(Tt){for(var Wt=[],Gt=0,Vt=Tt&&Tt.length;Gt<Vt;Gt++)Wt.push(Qe[Tt[Gt]]);return Wt}if(Fe.length){Ye(Be),qe&&Ye(qe);for(let Tt=Fe.length-1;Tt>-1;Tt--)Je[Tt].curve.length<1e-7&&(Je[Tt].remove(),Je.splice(Tt,1),Qe.splice(Tt,1));for(var st=new Array(Qe.length),Ke=0,Ue=Qe.length;Ke<Ue;Ke++)st[Ke]=Qe[Ke].getValues();var gt=Ii.findCurveBoundsCollisions(st,st,0,!0),bt={};for(Ke=0;Ke<Qe.length;Ke++){var it=Qe[Ke],Pt=it._path._id;(bt[Pt]=bt[Pt]||{})[it.getIndex()]={hor:ht(gt[Ke].hor),ver:ht(gt[Ke].ver)}}for(Ke=0,Ue=Fe.length;Ke<Ue;Ke++)me(Fe[Ke]._segment,Re,Ae,bt,Me);for(Ke=0,Ue=Je.length;Ke<Ue;Ke++){var Ut=Je[Ke],Mt=Ut._intersection;Ut._winding||me(Ut,Re,Ae,bt,Me),Mt&&Mt._overlap||(Ut._path._overlapsOnly=!1)}Le=de(Je,Me)}else Le=pe(qe?Be.concat(qe):Be.slice(),function(Tt){return!!Me[Tt]});return P(Le,!0,te,he,Ee)}function Y(te,he,ce){var Ee=A(te),Re=A(he),Ae=Ee.getIntersections(Re,L),Me=ce==="subtract",Le=ce==="divide",Fe={},Be=[];function qe(Ye){if(!Fe[Ye._id]&&(Le||Re.contains(Ye.getPointAt(Ye.getLength()/2))^Me))return Be.unshift(Ye),Fe[Ye._id]=!0}for(var Je=Ae.length-1;Je>=0;Je--){var Qe=Ae[Je].split();Qe&&(qe(Qe)&&Qe.getFirstSegment().setHandleIn(0,0),Ee.getLastSegment().setHandleOut(0,0))}return qe(Ee),P(Be,!1,te,he)}function X(te,he){for(var ce=te;ce;){if(ce===he)return;ce=ce._previous}for(;te._next&&te._next!==he;)te=te._next;if(!te._next){for(;he._previous;)he=he._previous;te._next=he,he._previous=te}}function Z(te){for(var he=te.length-1;he>=0;he--)te[he].clearHandles()}function pe(te,he,ce){var Ee=te&&te.length;if(Ee){var Re=t.each(te,function(gt,bt){this[gt._id]={container:null,winding:gt.isClockwise()?1:-1,index:bt}},{}),Ae=te.slice().sort(function(gt,bt){return h(bt.getArea())-h(gt.getArea())}),Me=Ae[0],Le=Ii.findItemBoundsCollisions(Ae,null,f.GEOMETRIC_EPSILON);ce==null&&(ce=Me.isClockwise());for(var Fe=0;Fe<Ee;Fe++){var Be=Ae[Fe],qe=Re[Be._id],Je=0,Qe=Le[Fe];if(Qe){for(var Ye=null,ht=Qe.length-1;ht>=0;ht--)if(Qe[ht]<Fe){Ye=Ye||Be.getInteriorPoint();var st=Ae[Qe[ht]];if(st.contains(Ye)){var Ke=Re[st._id];Je=Ke.winding,qe.winding+=Je,qe.container=Ke.exclude?Ke.container:st;break}}}if(he(qe.winding)===he(Je))qe.exclude=!0,te[qe.index]=null;else{var Ue=qe.container;Be.setClockwise(Ue?!Ue.isClockwise():ce)}}}return te}function ne(te,he,ce){var Ee,Re,Ae,Me=he&&[],Le=f.CURVETIME_EPSILON,Fe=1-Le,Be=!1,qe=ce||[],Je=ce&&{};function Qe(Gt){return Gt._path._id+"."+Gt._segment1._index}for(var Ye=(ce&&ce.length)-1;Ye>=0;Ye--)(ht=ce[Ye])._path&&(Je[Qe(ht)]=!0);for(Ye=te.length-1;Ye>=0;Ye--){var ht,st,Ke=te[Ye],Ue=Ke._time,gt=Ue,bt=he&&!he(Ke);if((ht=Ke._curve)&&(ht!==Re?(Be=!ht.hasHandles()||Je&&Je[Qe(ht)],Ee=[],Ae=null,Re=ht):Ae>=Le&&(Ue/=Ae)),bt)Ee&&Ee.push(Ke);else{if(he&&Me.unshift(Ke),Ae=gt,Ue<Le)st=ht._segment1;else if(Ue>Fe)st=ht._segment2;else{var it=ht.divideAtTime(Ue,!0);Be&&qe.push(ht,it),st=it._segment1;for(var Pt=Ee.length-1;Pt>=0;Pt--){var Ut=Ee[Pt];Ut._time=(Ut._time-Ue)/(1-Ue)}}Ke._setSegment(st);var Mt=st._intersection,Tt=Ke._intersection;if(Mt){X(Mt,Tt);for(var Wt=Mt;Wt;)X(Wt._intersection,Mt),Wt=Wt._next}else st._intersection=Tt}}return ce||Z(qe),Me||te}function ie(te,he,ce,Ee,Re){var Ae,Me,Le=Array.isArray(he)?he:he[ce?"hor":"ver"],Fe=ce?1:0,Be=1^Fe,qe=[te.x,te.y],Je=qe[Fe],Qe=qe[Be],Ye=1e-6,ht=Je-1e-9,st=Je+1e-9,Ke=0,Ue=0,gt=0,bt=0,it=!1,Pt=!1,Ut=1,Mt=[];function Tt(Nt){var si=Nt[Be+0],$t=Nt[Be+6];if(!(Qe<M(si,$t)||Qe>s(si,$t))){var ii=Nt[Fe+0],gi=Nt[Fe+2],_i=Nt[Fe+4],bi=Nt[Fe+6];if(si!==$t){var Ai=Qe===si?0:Qe===$t||ht>s(ii,gi,_i,bi)||st<M(ii,gi,_i,bi)?1:l.solveCubic(Nt,Be,Qe,Mt,0,1)>0?Mt[0]:1,hi=Ai===0?ii:Ai===1?bi:l.getPoint(Nt,Ai)[ce?"y":"x"],ui=si>$t?1:-1,Ri=Ae[Be]>Ae[Be+6]?1:-1,xi=Ae[Fe+6];return Qe!==si?(hi<ht?gt+=ui:hi>st?bt+=ui:it=!0,hi>Je-Ye&&hi<Je+Ye&&(Ut/=2)):(ui!==Ri?ii<ht?gt+=ui:ii>st&&(bt+=ui):ii!=xi&&(xi<st&&hi>st?(bt+=ui,it=!0):xi>ht&&hi<ht&&(gt+=ui,it=!0)),Ut/=4),Ae=Nt,!Re&&hi>ht&&hi<st&&l.getTangent(Nt,Ai)[ce?"x":"y"]===0&&ie(te,he,!ce,Ee,!0)}(ii<st&&bi>ht||bi<st&&ii>ht)&&(it=!0)}}function Wt(Nt){var si=Nt[Be+0],$t=Nt[Be+2],ii=Nt[Be+4],gi=Nt[Be+6];if(Qe<=s(si,$t,ii,gi)&&Qe>=M(si,$t,ii,gi)){for(var _i,bi=Nt[Fe+0],Ai=Nt[Fe+2],hi=Nt[Fe+4],ui=Nt[Fe+6],Ri=ht>s(bi,Ai,hi,ui)||st<M(bi,Ai,hi,ui)?[Nt]:l.getMonoCurves(Nt,ce),xi=0,Li=Ri.length;xi<Li;xi++)if(_i=Tt(Ri[xi]))return _i}}for(var Gt=0,Vt=Le.length;Gt<Vt;Gt++){var Kt,qt=Le[Gt],Ht=qt._path,ci=qt.getValues();if(!(Gt&&Le[Gt-1]._path===Ht||(Ae=null,Ht._closed||(Me=l.getValues(Ht.getLastCurve().getSegment2(),qt.getSegment1(),null,!Ee))[Be]!==Me[Be+6]&&(Ae=Me),Ae))){Ae=ci;for(var oi=Ht.getLastCurve();oi&&oi!==qt;){var pi=oi.getValues();if(pi[Be]!==pi[Be+6]){Ae=pi;break}oi=oi.getPrevious()}}if(Kt=Wt(ci))return Kt;if(Gt+1===Vt||Le[Gt+1]._path!==Ht){if(Me&&(Kt=Wt(Me)))return Kt;!it||gt||bt||(gt=bt=Ht.isClockwise(Ee)^ce?1:-1),Ke+=gt,Ue+=bt,gt=bt=0,it&&(Pt=!0,it=!1),Me=null}}return Ke=h(Ke),Ue=h(Ue),{winding:s(Ke,Ue),windingL:Ke,windingR:Ue,quality:Ut,onPath:Pt}}function me(te,he,ce,Ee,Re){var Ae=[],Me=te,Le=0;do{if(Ke=te.getCurve()){var Fe=Ke.getLength();Ae.push({segment:te,curve:Ke,length:Fe}),Le+=Fe}te=te.getNext()}while(te&&!te._intersection&&te!==Me);for(var Be=[.5,.25,.75],qe={winding:0,quality:-1},Je=0;Je<Be.length&&qe.quality<.5;Je++){Fe=Le*Be[Je];for(var Qe=0,Ye=Ae.length;Qe<Ye;Qe++){var ht=Ae[Qe],st=ht.length;if(Fe<=st){var Ke,Ue=(Ke=ht.curve)._path,gt=Ue._parent,bt=gt instanceof e?gt:Ue,it=f.clamp(Ke.getTimeAt(Fe),.001,.999),Pt=Ke.getPointAtTime(it),Ut=h(Ke.getTangentAtTime(it).y)<Math.SQRT1_2,Mt=null;if(Re.subtract&&ce){var Tt=(bt===he?ce:he)._getWinding(Pt,Ut,!0);if(bt===he&&Tt.winding||bt===ce&&!Tt.winding){if(Tt.quality<1)continue;Mt={winding:0,quality:1}}}(Mt=Mt||ie(Pt,Ee[Ue._id][Ke.getIndex()],Ut,!0)).quality>qe.quality&&(qe=Mt);break}Fe-=st}}for(Qe=Ae.length-1;Qe>=0;Qe--)Ae[Qe].segment._winding=qe}function de(te,he){var ce,Ee=[];function Re(Kt){var qt;return!(!Kt||Kt._visited||he&&(!he[(qt=Kt._winding||{}).winding]||he.unite&&qt.winding===2&&qt.windingL&&qt.windingR))}function Ae(Kt){if(Kt){for(var qt=0,Ht=ce.length;qt<Ht;qt++)if(Kt===ce[qt])return!0}return!1}function Me(Kt){for(var qt=Kt._segments,Ht=0,ci=qt.length;Ht<ci;Ht++)qt[Ht]._visited=!0}function Le(Kt,qt){var Ht=Kt._intersection,ci=Ht,oi=[];function pi(Nt,si){for(;Nt&&Nt!==si;){var $t=Nt._segment,ii=$t&&$t._path;if(ii){var gi=$t.getNext()||ii.getFirstSegment(),_i=gi._intersection;$t!==Kt&&(Ae($t)||Ae(gi)||gi&&Re($t)&&(Re(gi)||_i&&Re(_i._segment)))&&oi.push($t),qt&&ce.push($t)}Nt=Nt._next}}if(qt&&(ce=[Kt]),Ht){for(pi(Ht);Ht&&Ht._previous;)Ht=Ht._previous;pi(Ht,ci)}return oi}te.sort(function(Kt,qt){var Ht=Kt._intersection,ci=qt._intersection,oi=!(!Ht||!Ht._overlap),pi=!(!ci||!ci._overlap),Nt=Kt._path,si=qt._path;return oi^pi?oi?1:-1:!Ht^!ci?Ht?1:-1:Nt!==si?Nt._id-si._id:Kt._index-qt._index});for(var Fe=0,Be=te.length;Fe<Be;Fe++){var qe,Je,Qe,Ye=te[Fe],ht=Re(Ye),st=null,Ke=!1,Ue=!0,gt=[];if(ht&&Ye._path._overlapsOnly){var bt=Ye._path,it=Ye._intersection._segment._path;bt.compare(it)&&(bt.getArea()&&Ee.push(bt.clone(!1)),Me(bt),Me(it),ht=!1)}for(;ht;){var Pt=!st,Ut=Le(Ye,Pt),Mt=Ut.shift(),Tt=!(Ke=!Pt&&(Ae(Ye)||Ae(Mt)))&&Mt;if(Pt&&(st=new zt(i.NO_INSERT),qe=null),Ke){(Ye.isFirst()||Ye.isLast())&&(Ue=Ye._path._closed),Ye._visited=!0;break}if(Tt&&qe&&(gt.push(qe),qe=null),qe||(Tt&&Ut.push(Ye),qe={start:st._segments.length,crossings:Ut,visited:Je=[],handleIn:Qe}),Tt&&(Ye=Mt),!Re(Ye)){st.removeSegments(qe.start);for(var Wt=0,Gt=Je.length;Wt<Gt;Wt++)Je[Wt]._visited=!1;Je.length=0;do(Ye=qe&&qe.crossings.shift())&&Ye._path||(Ye=null,(qe=gt.pop())&&(Je=qe.visited,Qe=qe.handleIn));while(qe&&!Re(Ye));if(!Ye)break}var Vt=Ye.getNext();st.add(new r(Ye._point,Qe,Vt&&Ye._handleOut)),Ye._visited=!0,Je.push(Ye),Ye=Vt||Ye._path.getFirstSegment(),Qe=Vt&&Vt._handleIn}Ke&&(Ue&&(st.getFirstSegment().setHandleIn(Qe),st.setClosed(Ue)),st.getArea()!==0&&Ee.push(st))}return Ee}return{_getWinding:function(te,he,ce){return ie(te,this.getCurves(),he,ce)},unite:function(te,he){return N(this,te,"unite",he)},intersect:function(te,he){return N(this,te,"intersect",he)},subtract:function(te,he){return N(this,te,"subtract",he)},exclude:function(te,he){return N(this,te,"exclude",he)},divide:function(te,he){return he&&(he.trace==0||he.stroke)?Y(this,te,"divide"):P([this.subtract(te,he),this.intersect(te,he)],!0,this,te,he)},resolveCrossings:function(){var te=this._children,he=te||[this];function ce(Ke,Ue){var gt=Ke&&Ke._intersection;return gt&&gt._overlap&&gt._path===Ue}var Ee=!1,Re=!1,Ae=this.getIntersections(null,function(Ke){return Ke.hasOverlap()&&(Ee=!0)||Ke.isCrossing()&&(Re=!0)}),Me=Ee&&Re&&[];if(Ae=u.expand(Ae),Ee)for(var Le=ne(Ae,function(Ke){return Ke.hasOverlap()},Me),Fe=Le.length-1;Fe>=0;Fe--){var Be=Le[Fe],qe=Be._path,Je=Be._segment,Qe=Je.getPrevious(),Ye=Je.getNext();ce(Qe,qe)&&ce(Ye,qe)&&(Je.remove(),Qe._handleOut._set(0,0),Ye._handleIn._set(0,0),Qe===Je||Qe.getCurve().hasLength()||(Ye._handleIn.set(Qe._handleIn),Qe.remove()))}Re&&(ne(Ae,Ee&&function(Ke){var Ue=Ke.getCurve(),gt=Ke.getSegment(),bt=Ke._intersection,it=bt._curve,Pt=bt._segment;if(Ue&&it&&Ue._path&&it._path)return!0;gt&&(gt._intersection=null),Pt&&(Pt._intersection=null)},Me),Me&&Z(Me),he=de(t.each(he,function(Ke){t.push(this,Ke._segments)},[])));var ht,st=he.length;return st>1&&te?(he!==te&&this.setChildren(he),ht=this):st!==1||te||(he[0]!==this&&this.setSegments(he[0].removeSegments()),ht=this),ht||((ht=new e(i.NO_INSERT)).addChildren(he),(ht=ht.reduce()).copyAttributes(this),this.replaceWith(ht)),ht},reorient:function(te,he){var ce=this._children;return ce&&ce.length?this.setChildren(pe(this.removeChildren(),function(Ee){return!!(te?Ee:1&Ee)},he)):he!==void 0&&this.setClockwise(he),this},getInteriorPoint:function(){var te=this.getBounds().getCenter(!0);if(!this.contains(te)){for(var he=this.getCurves(),ce=te.y,Ee=[],Re=[],Ae=0,Me=he.length;Ae<Me;Ae++){var Le=he[Ae].getValues(),Fe=Le[1],Be=Le[3],qe=Le[5],Je=Le[7];if(ce>=M(Fe,Be,qe,Je)&&ce<=s(Fe,Be,qe,Je))for(var Qe=l.getMonoCurves(Le),Ye=0,ht=Qe.length;Ye<ht;Ye++){var st=Qe[Ye],Ke=st[1],Ue=st[7];if(Ke!==Ue&&(ce>=Ke&&ce<=Ue||ce>=Ue&&ce<=Ke)){var gt=ce===Ke?st[0]:ce===Ue?st[6]:l.solveCubic(st,1,ce,Re,0,1)===1?l.getPoint(st,Re[0]).x:(st[0]+st[6])/2;Ee.push(gt)}}}Ee.length>1&&(Ee.sort(function(bt,it){return bt-it}),te.x=(Ee[0]+Ee[1])/2)}return te}}});const m=["unite","intersect","subtract","exclude","divide"];for(const M of m){const s=a.PathItem.prototype[M];a.PathItem.prototype[M]=function(){const h=arguments[0],p=this.getBounds(),b=h.getBounds(),A=Math.min(p.x,b.x),P=Math.max(p.x+p.width,b.x+b.width),L=Math.min(p.y,b.y),N=Math.max(p.y+p.height,b.y+b.height);if(A>-1e3&&P<1e3&&L>-1e3&&N<1e3)return s.apply(this,arguments);const Y=P-A,X=N-L,Z=Math.pow(2,Math.ceil(Math.log2(Y/2e3))),pe=Math.pow(2,Math.ceil(Math.log2(X/2e3))),ne=Math.max(Z,pe),ie=new a.Point((A+P)/2,(L+N)/2),me=new a.Point(-Math.round(ie.x),-Math.round(ie.y));ne>1&&(this.scale(1/ne,ie),h!==this&&h.scale(1/ne,ie)),this.translate(me),h!==this&&h.translate(me);const de=s.apply(this,arguments);return this.translate(me.multiply(-1)),de.translate(me.multiply(-1)),h!==this&&h.translate(me.multiply(-1)),ne>1&&(this.scale(ne,ie),de.scale(ne,ie),h!==this&&h.scale(ne,ie)),de}}function g(){return{get:function(){let M=this._paperLayerMap.size;return M===1?this._paperLayerMap.values().next().value:M===0?null:this._paperLayerMap.get(a)||null}}}function x(){return{get:function(){return this.__paperLayerMap||(this.__paperLayerMap=new Map),this.__paperLayerMap}}}function S(M){return function(s,h){let p=new a.Layer({applyMatrix:!1});return h.project.addLayer(p),s._paperLayerMap.set(h,p),p}(this,M.paperScope)}function E(M){this.paperLayer?(this.paperLayer.addChild(M),M.applyRescale()):console.error("No layer has been set up in the active paper scope for this object. Does a scope need to be activated?")}var D;a.Curve.getTimeOf=function(M,s){var h=new a.Point(M[0],M[1]),p=new a.Point(M[6],M[7]),b=1e-7,A=s.isClose(h,b)?0:s.isClose(p,b)?1:null;if(A===null)for(var P=[s.x,s.y],L=[],N=0;N<2;N++)for(var Y=a.Curve.solveCubic(M,N,P[N],L,0,1),X=0;X<Y;X++){var Z=L[X];if(s.isClose(a.Curve.getPoint(M,Z),b))return Z}return A},Object.defineProperty(y.Viewer.prototype,"paperLayer",g()),Object.defineProperty(y.TiledImage.prototype,"paperLayer",g()),Object.defineProperty(y.Viewport.prototype,"paperLayer",g()),Object.defineProperty(y.TiledImage.prototype,"_paperLayerMap",x()),Object.defineProperty(y.Viewer.prototype,"_paperLayerMap",x()),Object.defineProperty(y.Viewport.prototype,"_paperLayerMap",x()),Object.defineProperty(y.Viewer.prototype,"paperItems",{get:function(){return this.paperLayer.children}}),Object.defineProperty(y.TiledImage.prototype,"paperItems",{get:function(){return this.paperLayer.children}}),Object.defineProperty(y.Viewport.prototype,"paperItems",{get:function(){return this.paperLayer.children}}),y.Viewer.prototype._setupPaper=S,y.Viewport.prototype._setupPaper=function(M){let s=S.call(this,M);s.viewport=this,s.matrix.scale(M.scaleFactor),M.addHandler("update-scale",function(){s.matrix.reset(),s.matrix.scale(M.scaleFactor)})},y.TiledImage.prototype._setupPaper=function(M){let s=this,h=S.call(this,M);function p(){let b=s.getRotation(),A=s.getBoundsNoRotate(),P=s.getFlip(),L=new a.Point((A.x+A.width/2)*M.scaleFactor,(A.y+A.height/2)*M.scaleFactor),N=new a.Matrix;P&&N.scale(-1,1,L),N.rotate(b,L),N.translate({x:A.x*M.scaleFactor,y:A.y*M.scaleFactor}),N.scale(A.width*M.scaleFactor/s.source.width),h.matrix.set(N)}h.tiledImage=this,this.addHandler("bounds-change",p),M.addHandler("update-scale",p),p()},y.Viewer.prototype.addPaperItem=E,y.Viewport.prototype.addPaperItem=E,y.TiledImage.prototype.addPaperItem=E,y.Viewer.prototype.createPaperOverlay=function(){return new F(this,...arguments)},(D=y)!==void 0&&a!==void 0?D.Viewer.prototype.PaperOverlays?console.warn("Cannot redefine Viewer.prototype.PaperOverlays"):Object.defineProperty(D.Viewer.prototype,"PaperOverlays",{get:function(){return this._PaperOverlays||(this._PaperOverlays=[])}}):console.error("[paper-overlay.mjs] requires OpenSeadragon and paper.js");class F extends y.EventSource{constructor(s,h){super(),h=y.extend(!0,{overlayType:"image"},h),this.viewer=s,this.overlayType=h.overlayType,s.PaperOverlays.push(this);let p=H();this._id="paper-overlay-canvas-"+p,this._containerWidth=0,this._containerHeight=0,this._canvasdiv=document.createElement("div"),this._canvasdiv.setAttribute("id","paper-overlay-"+p),this._canvasdiv.classList.add("paper-overlay"),this._canvasdiv.style.position="absolute",this._canvasdiv.style.left="0px",this._canvasdiv.style.top="0px",this._canvasdiv.style.width="100%",this._canvasdiv.style.height="100%",this._canvas=document.createElement("canvas"),this._canvas.setAttribute("id",this._id),this._canvasdiv.appendChild(this._canvas),s.canvas.appendChild(this._canvasdiv),this._viewerButtons=[],this.paperScope=new a.PaperScope,this.paperScope.overlay=this;let b=this.paperScope.setup(this._canvas);if(this.paperScope.project.overlay=this,this.ps=b,this._paperProject=b.project,this._resize(),this.overlayType=="image"){this.viewer.viewport._setupPaper(this);for(let A=0;A<s.world.getItemCount();++A){let P=this.viewer.world.getItemAt(A);this._setupTiledImage(P)}this.onAddItem=(A=>function(P){let L=P.item;A._setupTiledImage(L)})(this),this.onRemoveItem=(A=>function(P){let L=P.item;A._removeTiledImage(L)})(this),s.world.addHandler("add-item",this.onAddItem),s.world.addHandler("remove-item",this.onRemoveItem),this._updatePaperView()}else this.overlayType=="viewer"?this.viewer._setupPaper(this):console.error("Unrecognized overlay type: "+this.overlayType);this.onViewerDestroy=(A=>function(){A.destroy(!0)})(this),this.onViewportChange=(A=>function(){A._updatePaperView()})(this),this.onViewerResetSize=(A=>function(P){setTimeout(()=>{A.destroyed||(A._resize(),A._updatePaperView())})})(this),this.onViewerResize=(A=>function(){A._resize(),A.paperScope.view.emit("resize",{size:new a.Size(A._containerWidth,A._containerHeight)}),A._updatePaperView()})(this),this.onViewerRotate=function(A){this._pivot=A.pivot||this._getCenter()},this.onViewerFlip=(A=>function(P){A.paperScope.view.setFlipped(P.flipped,s.viewport.getRotation(!0))})(this),s.addHandler("resize",this.onViewerResize),s.addHandler("reset-size",this.onViewerResetSize),s.addHandler("viewport-change",this.onViewportChange),s.addHandler("rotate",this.onViewerRotate),s.addHandler("flip",this.onViewerFlip),s.addOnceHandler("destroy",this.onViewerDestroy)}get scaleFactor(){return this._currentScaleFactor=this._currentScaleFactor||this.viewer.drawer.canvas.clientWidth,this._currentScaleFactor}addViewerButton(s={}){const h=this.viewer.prefixUrl;let p=new y.Button({tooltip:s.tooltip,srcRest:h+"button_rest.png",srcGroup:h+"button_grouphover.png",srcHover:h+"button_hover.png",srcDown:h+"button_pressed.png",onClick:s.onClick});if(s.faIconClass){let b=wt(s.faIconClass);b.style="position:absolute;top:calc(50% - 4px);left:50%;transform:translate(-50%, -50%);color:#01010187;",p.element.appendChild(b)}return this.viewer.buttonGroup.buttons.push(p),this.viewer.buttonGroup.element.appendChild(p.element),this._viewerButtons.push(p),p}bringToFront(){this.viewer.PaperOverlays.splice(this.viewer.PaperOverlays.indexOf(this),1),this.viewer.PaperOverlays.push(this),this.viewer.PaperOverlays.forEach(s=>this.viewer.canvas.appendChild(s._canvasdiv)),this.paperScope.activate()}sendToBack(){this.viewer.PaperOverlays.splice(this.viewer.PaperOverlays.indexOf(this),1),this.viewer.PaperOverlays.splice(0,0,this),this.viewer.PaperOverlays.forEach(s=>this.viewer.canvas.appendChild(s._canvasdiv)),this.viewer.PaperOverlays[this.viewer.PaperOverlays.length-1].paperScope.activate()}destroy(s){this.destroyed=!0,this._canvasdiv.remove(),this.paperScope.project&&this.paperScope.project.remove(),this.ps&&this.ps.remove(),s||(this.viewer.removeHandler("viewport-change",this.onViewportChange),this.viewer.removeHandler("resize",this.onViewerResize),this.viewer.removeHandler("reset-size",this.onViewerResetSize),this.viewer.removeHandler("rotate",this.onViewerRotate),this.viewer.removeHandler("flip",this.onViewerFlip),this.viewer.world.removeHandler("add-item",this.onAddItem),this.viewer.world.removeHandler("remove-item",this.onRemoveItem),this.setOSDMouseNavEnabled(!0),this._viewerButtons.forEach(h=>{h.element.remove()}),this._viewerButtons=[],this.viewer.PaperOverlays.splice(this.viewer.PaperOverlays.indexOf(this),1),this.viewer.PaperOverlays.length>0&&this.viewer.PaperOverlays[this.viewer.PaperOverlays.length-1].paperScope.activate())}clear(){this.paperScope.project.clear()}canvas(){return this._canvas}addClass(s){return this._canvas.classList.add(...arguments),this}removeClass(s){return this._canvas.classList.remove(...arguments),this}setAttribute(s,h){return this._canvas.setAttribute(s,h),this}addEventListener(s,h){return this._canvas.addEventListener(s,h),this}removeEventListener(s,h){return this._canvas.removeEventListener(s,h),this}setOSDMouseNavEnabled(s=!0){let h=this.viewer.isMouseNavEnabled();return this.viewer.setMouseNavEnabled(s),s!==h&&this.viewer.raiseEvent("mouse-nav-changed",{enabled:s,overlay:this}),h}autoRescaleItems(s=!1){let h=this;function p(){h.rescaleItems()}this.ps.view.off("zoom-changed",p),s&&this.ps.view.on("zoom-changed",p)}rescaleItems(){this._paperProject.getItems({match:function(s){return s.rescale}}).forEach(function(s){s.applyRescale()})}paperToCanvasCoordinates(s,h){let p=new y.Point(s,h).divide(this.scaleFactor);return this.viewer.viewport.viewportToViewerElementCoordinates(p)}getImageData(s,h,p,b){return s=s||0,h=h||0,p=p??this.viewer.drawer.canvas.width,b=b??this.viewer.drawer.canvas.height,this.ps.view.getFlipped()&&(s=this.viewer.drawer.canvas.width-s-p),this.viewer.drawer.canvas.getContext("2d",{willReadFrequently:!0}).getImageData(s,h,p,b)}getViewportRaster(s=!0){let h=this.paperScope.view,p=h.viewToProject(new a.Point(h.viewSize.width/2,h.viewSize.height/2)),b=-1*this.viewer.viewport.getRotation(),A={insert:!1};s?A.canvas=this.viewer.drawer.canvas:A.size=new a.Size(this.viewer.drawer.canvas.width,this.viewer.drawer.canvas.height);let P=new a.Raster(A);P.position=p,P.rotate(b);let L=h.viewSize.width/h.getZoom()/this.viewer.drawer.canvas.width;if(P.scale(L),h.getFlipped()){const N=h.getRotation();P.rotate(-N),P.scale(-1,1),P.rotate(N)}return P}_setupTiledImage(s){s._setupPaper(this)}_removeTiledImage(s){var h,p,b;(p=(h=s._paperLayerMap)==null?void 0:h.get(this.paperScope))==null||p.remove(),(b=s._paperLayerMap)==null||b.delete(this.paperScope)}_resize(){let s=!1;if(this._containerWidth!==this.viewer.container.clientWidth&&(this._containerWidth=this.viewer.container.clientWidth,this._canvasdiv.setAttribute("width",this._containerWidth),this._canvas.setAttribute("width",this._containerWidth),s=!0),this._containerHeight!==this.viewer.container.clientHeight&&(this._containerHeight=this.viewer.container.clientHeight,this._canvasdiv.setAttribute("height",this._containerHeight),this._canvas.setAttribute("height",this._containerHeight),s=!0),s){const h=this._currentScaleFactor;this._currentScaleFactor=this.viewer.drawer.canvas.clientWidth,h!==this._currentScaleFactor&&this.raiseEvent("update-scale",{scaleFactor:this._currentScaleFactor}),this.paperScope.view.viewSize=new a.Size(this._containerWidth,this._containerHeight),this.paperScope.view.update()}}_updatePaperView(){if(this.overlayType==="viewer")return;let s=this.viewer.viewport.getZoom(!0),h=this.paperScope.view.getZoom();this.paperScope.view.setZoom(this.viewer.viewport._containerInnerSize.x*s/this.scaleFactor);let p=this._getCenter();this.viewer.drawer.canvas.pixelRatio=window.devicePixelRatio,this.paperScope.view.center=new a.Point(p.x,p.y).multiply(this.scaleFactor);let b=this.viewer.viewport.getRotation(!0),A=this._getPivot();this.paperScope.view.setRotation(b,A);const P=this.paperScope.view.getZoom();Math.abs(P-h)>1e-7&&this.paperScope.view.emit("zoom-changed",{zoom:P}),this.paperScope.view.update()}_getPivot(){if(this._pivot)return this._pivot.multiply(this.scaleFactor)}_getCenter(){return this.viewer.viewport.getCenter(!0)}}let H=function(){let M=1;return function(){return M++}}();class U extends fe{constructor(s){var A;let h;super(s),this._supportsGeoJSONObj(s)||error(`Bad geoJSON object: geometry type ${(A=s.geometry)==null?void 0:A.type} is not supported by this factory.`),h=s.geometry.type.toLowerCase()==="multipolygon"?s.geometry.coordinates.flat():s.geometry.coordinates;let p=h.map(function(P){let L=P.map(function(N){return new a.Point(N[0],N[1])});return new a.Path(L)}),b=new a.CompoundPath({children:p,fillRule:"evenodd",closed:!0});b=b.replaceWith(b.unite(b).toCompoundPath()),b.canBeBoundingElement=!0,this.paperItem=b}static supportsGeoJSONType(s,h=null){return["polygon","multipolygon"].includes(s.toLowerCase())&&h===null}getGeoJSONType(){return{type:this.paperItem.children.filter(s=>s.area>0&&s.segments.length>2).length>1?"MultiPolygon":"Polygon"}}getCoordinates(){let s=this.paperItem.children.filter(b=>b.area>0&&b.segments.length>2),h=this.paperItem.children.filter(b=>b.area<=0&&b.segments.length>2),p=s.map(b=>[b.segments.map(A=>[A.point.x,A.point.y])].concat(h.filter(A=>b.contains(A.segments[0].point)).map(A=>A.segments.map(P=>[P.point.x,P.point.y]))));return p.forEach(b=>{b.forEach(A=>{let P=A[0],L=A.slice(-1)[0];P[0]===L[0]&&P[1]===L[1]||A.push([P[0],P[1]])})}),p.length===1&&(p=p[0]),p}getProperties(){}}class J extends fe{constructor(s){super(s),s.geometry.type!=="LineString"&&error('Bad geoJSON object: type !=="LineString"');let h=s.geometry.coordinates.map(function(b){return new a.Point(b[0],b[1])}),p=new a.Group({children:[new a.Path(h)]});p.fillColor=null,this.paperItem=p}static supportsGeoJSONType(s,h=null){return s.toLowerCase()==="linestring"&&h===null}getGeoJSONType(){return{type:"Linestring"}}getCoordinates(){return this.paperItem.children.map(function(s){return s.segments.map(function(h){return[h.point.x,h.point.y]})})}getProperties(){return{strokeWidths:this.paperItem.children.map(s=>s.strokeWidth)}}setStyle(s){Object.assign({},s),s.rescale&&delete s.rescale.strokeWidth,this._paperItem.style.set(s)}}class j extends fe{constructor(s){super(s),s.geometry.type!=="MultiLineString"&&error('Bad geoJSON object: type !=="MultiLineString"');let h=s.geometry.coordinates.map(function(b,A){let P=b.map(function(L){return new a.Point(L[0],L[1])});return new a.Path(P).strokeWidth=s.geometry.properties.strokeWidths[A],new a.Path(P)}),p=new a.Group({children:h});p.fillColor=null,this.paperItem=p}static supportsGeoJSONType(s,h=null){return s.toLowerCase()==="multilinestring"&&h===null}getGeoJSONType(){return{type:"MultiLineString"}}getCoordinates(){return this.paperItem.children.map(function(s){return s.segments.map(function(h){return[h.point.x,h.point.y]})})}getProperties(){let s=this.paperItem;return{strokeColor:s.children.length>0?s.children[0].strokeColor:void 0,strokeWidths:s.children.map(h=>h.strokeWidth)}}getStyleProperties(){return this.paperItem.children[0].style.toJSON()}setStyle(s){Object.assign({},s),s.rescale&&delete s.rescale.strokeWidth,this._paperItem.style.set(s)}}class q extends fe{constructor(s){super(s),s.geometry.type==="GeometryCollection"&&s.geometry.properties.subtype==="Raster"||error('Bad geoJSON object: type !=="GeometryCollection" or subtype !=="Raster"');let h,p=s.geometry.properties.raster,b=s.geometry.geometries;p||error("Bad input: geometry.properties.raster must hold raster data, or a paper.Raster object"),p.data instanceof a.Raster?h=p.data:(h=new a.Raster(p.data),h.translate(p.center[0],p.center[1]),h.scale(p.scaling[0],p.scaling[1]),h.rotate(p.rotation)),this._rasterSelectedColor=new a.Color(0,0,0,0),h.selectedColor=this._rasterSelectedColor;let A=new a.Group([h]);if(A.updateFillOpacity=function(){a.Group.prototype.updateFillOpacity.call(this),h.opacity=this.opacity*this._computedFillOpacity,A.clipped&&(A.children[0].fillColor=null)},b.length>0){let P=new a.Group;A.insertChild(0,P),A.clipped=!0,b.forEach(L=>{let N=L instanceof a.Item?a.Item.fromAnnotationItem(L):a.Item.fromGeoJSON(L);delete N.isGeoJSONFeature,N._annotationItem=N.annotationItem,delete N.annotationItem,setTimeout(()=>N.strokeColor=(L.properties||L).strokeColor),N.strokeWidth=(L.properties||L).strokeWidth,N.rescale=(L.properties||L).rescale,P.addChild(N)})}s.geometry.properties.transform&&(A.matrix=new a.Matrix(s.geometry.properties.transform)),A.on("selected",()=>{A.clipped&&(A.children[0].selected=!1)}),this.paperItem=A}static supportsGeoJSONType(s,h){return s.toLowerCase()==="geometrycollection"&&(h==null?void 0:h.toLowerCase())==="raster"}getGeoJSONType(){return{type:"GeometryCollection",subtype:"Raster"}}toGeoJSONGeometry(){let s=this.paperItem,h=s.children[0],p=s.children[1];return{type:"GeometryCollection",properties:{subtype:"Raster",raster:{data:p.toDataURL(),center:[p.bounds.center.x,p.bounds.center.y],width:p.width,height:p.height,scaling:[p.matrix.scaling.x,p.matrix.scaling.y],rotation:p.matrix.rotation},transform:s.matrix.values},geometries:h.children.map(A=>{let P=A._annotationItem.toGeoJSONFeature(),L=P.geometry;return L.properties||(L.properties={}),L.properties.strokeColor=P.properties.strokeColor,L.properties.strokeWidth=P.properties.strokeWidth,L.properties.rescale=P.properties.rescale,L})}}}class $ extends fe{constructor(s){super(s),s.geometry.type==="Point"&&s.geometry.properties.subtype==="Rectangle"||error('Bad geoJSON object: type !=="Point" or subtype !=="Rectangle"');let h=new a.CompoundPath({children:[],fillRule:"evenodd"});if(s.geometry.coordinates.length>1){let p=s.geometry.coordinates.slice(0,2),b=p[0]||0,A=p[1]||0,P=s.geometry.properties,L=P.width||0,N=P.height||0,Y=P.angle||0,X=[[b-L/2,A-N/2],[b+L/2,A-N/2],[b+L/2,A+N/2],[b-L/2,A+N/2]].map(function(pe){return new a.Point(pe[0],pe[1])}),Z=new a.Path(X);h.addChild(Z),h.closed=!0,h.rotate(Y)}h.canBeBoundingElement=!0,this.paperItem=h}static supportsGeoJSONType(s,h){return s.toLowerCase()==="point"&&(h==null?void 0:h.toLowerCase())==="rectangle"}getGeoJSONType(){return{type:"Point",subtype:"Rectangle"}}getCoordinates(){let s=this.paperItem;return[s.position.x,s.position.y]}getProperties(){let s=this.paperItem.children[0].segments.map(b=>b.point),h=s[1].subtract(s[0]),p=s[0].subtract(s[3]);return{width:h.length,height:p.length,angle:h.angleInDegrees}}static onTransform(){switch(arguments[0]){case"scale":{let s=this.layer.matrix.inverseTransform(arguments[1]),h=arguments[2],p=arguments[3];this.matrix.append(p.inverted());let b=this.children[0].segments;b.map((A,P)=>{let L=A.point.transform(this.matrix),N=b[(P+1)%4],Y=N.point.transform(this.matrix).subtract(L).divide(2),X=L.add(Y);return X.normal=Y.rotate(-90).normalize(),X.segments=[A,N],X}).forEach(A=>{let P=A.subtract(s),L=P.rotate(-h).multiply(p.scaling).rotate(h).subtract(P).project(A.normal);A.segments.forEach(N=>{let Y=N.point.transform(this.matrix).add(L);N.point=this.matrix.inverseTransform(Y)})});break}}}}class re extends fe{constructor(s){super(s),s.geometry.type==="Point"&&s.geometry.properties.subtype==="Ellipse"||error('Bad geoJSON object: type !=="Point" or subtype !=="Rectangle"');let h=new a.CompoundPath({children:[],fillRule:"evenodd"});if(s.geometry.coordinates.length>1){let p=s.geometry.coordinates.slice(0,2),b=p[0]||0,A=p[1]||0,P=s.geometry.properties,L=P.majorRadius||0,N=P.minorRadius||0,Y=P.angle||0,X=new a.Path.Ellipse({center:new a.Point(b,A),radius:new a.Size(L,N)});h.addChild(X),h.rotate(Y)}h.canBeBoundingElement=!0,this.paperItem=h}static supportsGeoJSONType(s,h){return s.toLowerCase()==="point"&&(h==null?void 0:h.toLowerCase())==="ellipse"}getGeoJSONType(){return{type:"Point",subtype:"Ellipse"}}getCoordinates(){let s=this.paperItem;return[s.position.x,s.position.y]}getProperties(){let s,h,p=this.paperItem.children[0].segments.map(L=>L.point),b=p[2].subtract(p[0]),A=p[3].subtract(p[1]);b.length>A.length?(s=b,h=A):(s=A,h=b);let P=s.angle;return{majorRadius:s.length/2,minorRadius:h.length/2,angle:P}}static onTransform(){switch(arguments[0]){case"complete":{let s=this.children[0].curves,h=this.bounds.center,p=s.slice(0,2).map(Y=>({curve:Y,location:Y.getNearestLocation(h)})).sort((Y,X)=>Y.location.distance-X.location.distance),b=p[0].location.point;if(b.equals(p[0].curve.segment1.point)||b.equals(p[0].curve.segment2.point))return;let A=p[0].location.curve==p[0].curve?p[0].location.time:1,P=b.subtract(h),L=p[1].curve.getLocationAtTime(A).point.subtract(h),N=new a.Path.Ellipse({center:h,radius:[L.length,P.length]}).rotate(L.angle);this.children[0].set({segments:N.segments});break}}}}const ae=function(M,s=0){let h=3735928559^s,p=1103547991^s;for(let b,A=0;A<M.length;A++)b=M.charCodeAt(A),h=Math.imul(h^b,2654435761),p=Math.imul(p^b,1597334677);return h=Math.imul(h^h>>>16,2246822507),h^=Math.imul(p^p>>>13,3266489909),p=Math.imul(p^p>>>16,2246822507),p^=Math.imul(h^h>>>13,3266489909),4294967296*(2097151&p)+(h>>>0)};Object.defineProperty(a.Item.prototype,"displayName",{set:function(M){Array.isArray(M)?(this._displayName=new String(M[0]),this._displayName.source=M[1]):this._displayName=M,this.name=this._displayName,this.emit("display-name-changed",{displayName:this._displayName})},get:function(){return this._displayName}}),Object.defineProperty(a.Item.prototype,"featureCollection",{get:function(){return this.hierarchy.filter(M=>M.isGeoJSONFeatureCollection)[0]}}),Object.defineProperty(a.TextItem.prototype,"content",function(){let M=a.TextItem.prototype._setContent||Object.getOwnPropertyDescriptor(a.TextItem.prototype,"content").set;return a.TextItem.prototype._setContent=M,{get:function(){return this._content},set:function(s){M.call(this,s),this.emit("content-changed")}}}()),Object.defineProperty(a.Project.prototype,"descendants",{get:function(){return this.layers?this.getItems({match:M=>M.isGeoJSONFeatureCollection}).map(M=>M.descendants).flat():[this]}});let le,be=a.Item.prototype.remove;a.Item.prototype.remove=function(){const M=this.getItems({match:s=>s.isGeoJSONFeatureCollection});(this.isGeoJSONFeature||this.isGeoJSONFeatureCollection)&&this.project.emit("item-removed",{item:this}),M.forEach(s=>this.project.emit("item-removed",{item:s})),be.call(this),(this.isGeoJSONFeature||this.isGeoJSONFeatureCollection)&&this.emit("removed",{item:this}),M.forEach(s=>s.emit("removed",{item:s}))},a.Group.prototype.insertChildren=function(){let M=a.Group.prototype.insertChildren.original||a.Group.prototype.insertChildren;function s(){let h=M.apply(this,arguments),p=arguments[0],b=Array.from(arguments[1]);return b&&b.forEach((A,P)=>{if(A.isGeoJSONFeature){let L=p!==void 0?p+1:-1;this.emit("child-added",{item:A,index:L})}}),h}return s.original=M,s}(),a.Color.prototype.toJSON=a.Color.prototype.toCSS,a.Style.prototype.toJSON=function(){let M={};return Object.keys(this._values).forEach(s=>{M[s]=this[s]}),M},a.View.prototype.getImageData=function(){return this.element.getContext("2d").getImageData(0,0,this.element.width,this.element.height)},a.PathItem.prototype.toCompoundPath=function(){if(this.constructor!==a.CompoundPath){let M=new a.CompoundPath({children:[this],fillRule:"evenodd"});return M.selected=this.selected,this.selected=!1,M}return this},a.PathItem.prototype.applyBounds=function(M){if(M.length==0)return;let s;if(M.length==1)s=M[0].intersect(this,{insert:!1});else if(M.length>1){let h=new a.CompoundPath(M.map(p=>p.clone().children).flat());s=h.intersect(this,{insert:!1}),h.remove()}this.children?(this.removeChildren(),this.addChildren(s.children?s.children:[s])):this.segments=s.segments?s.segments:s.firstChild.segments},a.Item.prototype.select=function(M){M||this.project._scope.findSelectedItems().forEach(s=>s.deselect()),this.selected=!0,this.emit("selected"),this.project.emit("item-selected",{item:this})},a.Item.prototype.deselect=function(M){M?(this.selected=!1,this.emit("deselected"),this.project.emit("item-deselected",{item:this})):this.project._scope.findSelectedItems().forEach(s=>s.deselect(!0))},a.Item.prototype.toggle=function(M){this.selected?this.deselect(M):this.select(M)},a.PaperScope.prototype.findSelectedNewItem=function(){return this.project.getItems({selected:!0,match:function(M){return M.isGeoJSONFeature&&M.initializeGeoJSONFeature}})[0]},a.PaperScope.prototype.findSelectedItems=function(){return this.project.getItems({selected:!0,match:function(M){return M.isGeoJSONFeature}})},a.PaperScope.prototype.findSelectedItem=function(){return this.findSelectedItems()[0]},a.PaperScope.prototype.scaleByCurrentZoom=function(M){return M/this.view.getZoom()},a.PaperScope.prototype.getActiveTool=function(){return this.tool?this.tool._toolObject:null};class Ce extends y.EventSource{constructor(s,h={}){if(super(),h||(h={}),this._defaultOptions={addUI:!1,overlay:null,destroyOnViewerClose:!1,cacheAnnotations:!1},this.options=Object.assign({},this._defaultOptions,h),this._defaultStyle={fillColor:new a.Color("white"),strokeColor:new a.Color("black"),fillOpacity:1,strokeOpacity:1,strokeWidth:1,rescale:{strokeWidth:1}},this.viewer=s,this.options.overlay?this.options.overlay instanceof F&&(this.overlay=this.options.overlay):this.overlay=new F(this.viewer,{type:"image"}),this.paperScope.project.defaultStyle=new a.Style,this.paperScope.project.defaultStyle.set(this.defaultStyle),this.overlay.autoRescaleItems(!0),this.options.destroyOnViewerClose&&this.viewer.addOnceHandler("close",()=>this.destroy()),this.viewer.annotationToolkit=this,this.paperScope.annotationToolkit=this,this.viewer.world.addHandler("add-item",p=>{this.options.cacheAnnotations&&this._loadCachedAnnotations(p.item)}),this.viewer.world.addHandler("remove-item",p=>{this.options.cacheAnnotations&&this._cacheAnnotations(p.item)},!1,1),yt.register(U),yt.register(wi),yt.register(J),yt.register(j),yt.register(q),yt.register(Lt),yt.register(V),yt.register($),yt.register(re),a.Item.fromGeoJSON=yt.itemFromGeoJSON,a.Item.fromAnnotationItem=yt.itemFromAnnotationItem,this._cached={},this.options.addUI){let p={};typeof h.addUI=="object"&&(p=this.options.addUI),this.addAnnotationUI(p)}}get defaultStyle(){return this._defaultStyle}get annotationUI(){return this._annotationUI}get paperScope(){return this.overlay.paperScope}clearCache(){this._cached={}}_cacheAnnotations(s){try{const h=ae(JSON.stringify(s.source)),p=s.paperLayer.getItems({match:b=>b.isGeoJSONFeatureCollection});this._cached[h]=p}catch(h){console.error("Error with caching",h)}}_loadCachedAnnotations(s){try{const h=ae(JSON.stringify(s.source)),p=this._cached[h]||[];for(const b of p)this._addFeatureCollectionGroupToLayer(b,s.paperLayer)}catch(h){console.error("Error with fetching from cache",h)}}addAnnotationUI(s={}){return this._annotationUI||(this._annotationUI=new Pi(this,s)),this._annotationUI}destroy(){this.raiseEvent("before-destroy");let s=this.paperScope&&this.paperScope.getActiveTool();s&&s.deactivate(!0),this.viewer.annotationToolkit=null,this._annotationUI&&this._annotationUI.destroy(),this.overlay.destroy(),this.raiseEvent("destroy")}close(){this.raiseEvent("before-close");let s=this.paperScope&&this.paperScope.getActiveTool();s&&s.deactivate(!0),this.addFeatureCollections([],!0)}setGlobalVisibility(s=!1){this.paperScope.view._element.setAttribute("style","visibility:"+(s?"visible;":"hidden;"))}addFeatureCollections(s,h,p){this.loadGeoJSON(s,h,p),this.overlay.rescaleItems(),this.paperScope.project.emit("items-changed")}getFeatureCollectionGroups(s){return this.paperScope.project.getItems({match:h=>h.isGeoJSONFeatureCollection&&(!s||h.layer===s)})}getFeatures(){return this.paperScope.project.getItems({match:s=>s.isGeoJSONFeature})}static registerFeature(s){s.isGeoJSONFeature=!0}static registerFeatureCollection(s){s.isGeoJSONFeatureCollection=!0}toGeoJSON(s){return((s=Object.assign({layer:null},s)).layer||this.paperScope.project).getItems({match:h=>h.isGeoJSONFeatureCollection}).map(h=>({type:"FeatureCollection",features:h.descendants.filter(p=>p.annotationItem).map(p=>p.annotationItem.toGeoJSONFeature()),properties:{defaultStyle:h.defaultStyle.toJSON(),userdata:h.data.userdata},label:h.displayName}))}toGeoJSONString(s,h){return JSON.stringify(this.toGeoJSON(),s,h)}loadGeoJSON(s,h,p){let b=!!p&&p.paperLayer;h&&this.getFeatureCollectionGroups(p).forEach(A=>A.remove()),Array.isArray(s)||(s=[s]),s.forEach(A=>{if(A.type=="FeatureCollection"){let P=this._createFeatureCollectionGroup({label:A.label,parent:b}),L=A.properties||{};P.data.userdata=Object.assign({},L.userdata),P.defaultStyle.set(L.defaultStyle),A.features.forEach(N=>{let Y=a.Item.fromGeoJSON(N);P.addChild(Y)})}else console.warn("GeoJSON object not loaded: wrong type. Only FeatureCollection objects are currently supported")})}addEmptyFeatureCollectionGroup(){return this._createFeatureCollectionGroup()}_createFeatureCollectionGroup(s={}){let h=(s=Object.assign({},{label:null,parent:null},s)).label,p=s.parent;if(!p){let P=this.viewer.world.getItemCount();P==1?p=this.viewer.world.getItemAt(0).paperLayer:P==0?p=this.viewer.viewport.paperLayer:(console.warn("Use of AnnotationToolkit with multi-image is not yet fully supported. All annotations will be added to the top-level tiled image."),p=this.viewer.world.getItemAt(P-1).paperLayer)}if(!p)return void console.error("Failed to create feature collection group: no parent could be found");let b=new a.Group;this._addFeatureCollectionGroupToLayer(b,p);let A=this.getFeatureCollectionGroups().length;return b.name=b.displayName=h!==null?h:`Annotation Group ${A}`,b.defaultStyle=new a.Style(this.paperScope.project.defaultStyle),b}_addFeatureCollectionGroupToLayer(s,h){h.addChild(s),Ce.registerFeatureCollection(s),this.paperScope.project.emit("feature-collection-added",{group:s}),s.children&&s.insertChildren(0,s.children)}makePlaceholderItem(s){return new wi(s)}}class xe{constructor(s){var A;let h=this.overlay=new F(s,{overlayType:"viewer"}),p=this.tool=new Oe(this.overlay.paperScope,this);this.dummyTool=new this.overlay.paperScope.Tool,this.dummyTool.activate(),this._mouseNavEnabledAtActivation=!0,(A=h.addViewerButton({faIconClass:"fa-rotate",tooltip:"Rotate viewer",onClick:()=>{p.active?this.deactivate():this.activate()}}).element.querySelector("svg.icon"))==null||A.style.setProperty("width","1em")}activate(){this._mouseNavEnabledAtActivation=this.overlay.viewer.isMouseNavEnabled(),this.tool.activate(),this.tool.active=!0,this.overlay.bringToFront()}deactivate(){this.tool.deactivate(!0),this.dummyTool.activate(),this.overlay.viewer.setMouseNavEnabled(this._mouseNavEnabledAtActivation),this.tool.active=!1,this.overlay.sendToBack()}}class Oe extends vt{constructor(s,h){super(s);let p=s.view.bounds,b=new _e(s.view.bounds.center,function(P,L){if(!L){let N=new y.Point(b.item.position.x,b.item.position.y);L=A.viewport.pointFromPixel(N)}A.viewport.rotateTo(P,L,!0)},function(){h.deactivate()});s.view.on("flip",()=>{b.closeButton.scale(-1,1,b.item.bounds.center)});let A=s.overlay.viewer;A.addHandler("rotate",P=>b.setCurrentRotation(P.degrees)),s.view.on("resize",function(P){let L=b.item.position,N=L.x/p.width,Y=L.y/p.height;p=s.view.bounds,b.item.position=new a.Point(N*p.width,Y*p.height)}),b.item.visible=!1,this.project.toolLayer.addChild(b.item),this.tool.onMouseDown=function(P){},this.tool.onMouseDrag=function(P){},this.tool.onMouseMove=function(P){b.setLineOrientation(P.point)},this.tool.onMouseUp=function(){},this.tool.extensions.onKeyDown=function(P){P.key=="escape"&&h.deactivate()},this.extensions.onActivate=function(){b.item.visible==0&&(b.item.position=s.view.bounds.center),b.item.visible=!0,b.item.opacity=1},this.extensions.onDeactivate=function(P){P&&(b.item.visible=!1),b.item.opacity=.3}}}function _e(M,s,h){let p=2*M.x,b=2*M.y,A=Math.min(p/5,b/5,30),P=.3*A,L=new a.Point(0,-1).angle,N=new a.Group({insert:!1}),Y=new a.Path.Circle({center:new a.Point(0,0),radius:A});Y.fillColor=new a.Color(0,0,0,.01),Y.strokeColor="black",Y.strokeWidth=2,[0,90,180,270].map(Ae=>{let Me=new a.Path.Line(new a.Point(0,P),new a.Point(0,A));Me.rotate(Ae,new a.Point(0,0)),Me.fillColor=null,Me.strokeColor="black",Me.strokeWidth=2,N.addChild(Me)});let X=[0,90,180,270].map(Ae=>{let Me=new a.Path.Rectangle(new a.Point(-P,0),new a.Size(2*P,-1*(A+1.5*P))),Le=Me.subtract(Y,{insert:!1});return Me.remove(),Le.rotate(Ae,new a.Point(0,0)),Le.fillColor=new a.Color(100,100,100,.5),Le.strokeColor="black",Le._angle=Ae,N.addChild(Le),Le});N.addChild(Y);let Z=new a.Path.Circle({center:new a.Point(0,-A),radius:P/1.5});Z.set({fillColor:"yellow",strokeColor:"black",applyMatrix:!1}),N.addChild(Z);let pe=new a.Group({applyMatrix:!1}),ne=new a.Group({applyMatrix:!1}),ie=new a.Color(.3,.3,.3,.8),me=new a.Path.Line(new a.Point(0,-P),new a.Point(0,-Math.max(p,b)));me.strokeColor=ie,me.strokeWidth=1,me.applyMatrix=!1,pe.addChild(me),pe.addChild(ne);let de=new a.Path.RegularPolygon(new a.Point(1.2*-P,0),3,.8*P);de.rotate(-94);let te=new a.Path.RegularPolygon(new a.Point(1.2*P,0),3,.8*P);te.rotate(94);let he=new a.Path.Arc(new a.Point(1.2*-P,0),new a.Point(0,-P/4),new a.Point(1.2*P,0)),ce=he.clone();ne.addChildren([ce,he,de,te]),ne.fillColor="yellow",he.strokeWidth=P/2,ce.strokeWidth=he.strokeWidth+2,ce.strokeColor=ie,de.strokeColor=ie,te.strokeColor=ie,he.strokeColor="yellow",he.fillColor=null,N.addChild(pe);let Ee=new a.Group({insert:!1});Ee.addChild(new a.Path.Circle({radius:P})),Ee.addChild(new a.Path.Line(new a.Point(-P/2,-P/2),new a.Point(P/2,P/2))),Ee.addChild(new a.Path.Line(new a.Point(P/2,-P/2),new a.Point(-P/2,P/2))),Ee.set({fillColor:"red",strokeColor:"black",opacity:.7}),Ee.position=new a.Point(1.5*A,1.5*-A),N.addChild(Ee),N.pivot=Y.bounds.center,N.position=M;let Re={};return Re.item=N,Re.circle=Y,Re.cardinalControls=X,Re.rotationLineControl=pe,Re.closeButton=Ee,Re.setCurrentRotation=Ae=>{Z.rotate(Ae-Z.rotation,Y.bounds.center)},Re.setLineOrientation=(Ae,Me=!1)=>{let Le=Ae.subtract(Y.bounds.center),Fe=Le.angle-L,Be=Le.length;pe.rotate(Fe-pe.rotation,Y.bounds.center),pe.visible=Me||Be>A+1.5*P,ne.position=new a.Point(0,-Be),me.segments[1].point=new a.Point(0,-Be)},X.forEach(Ae=>{Ae.onClick=function(){s(Ae._angle)}}),Z.onMouseDrag=function(Ae){let Me=Ae.point.subtract(Y.bounds.center).angle;s(Me-L)},ne.onMouseDown=function(Ae){ne._angleOffset=Z.rotation-Ae.point.subtract(Y.bounds.center).angle},ne.onMouseDrag=function(Ae){let Me,Le=this.project.hitTestAll(Ae.point).filter(Fe=>X.includes(Fe.item));Le.length>0&&(Ae.point=Le[0].item.bounds.center),Me=Ae.point.subtract(Y.bounds.center).angle+ne._angleOffset,s(Me),Re.setLineOrientation(Ae.point,!0)},Y.onMouseDrag=function(Ae){Re.item.position=Re.item.position.add(Ae.delta)},Ee.onClick=function(){h()},Re}const oe=112,ue=72,De=89,Se=115;function He(M,s,h,p){if(h==="image/jpeg")return M[13]=1,M[14]=s>>8,M[15]=255&s,M[16]=s>>8,M[17]=255&s,M;if(h==="image/png"){const b=new Uint8Array(13);s*=39.3701,b[0]=oe,b[1]=ue,b[2]=De,b[3]=Se,b[4]=s>>>24,b[5]=s>>>16,b[6]=s>>>8,b[7]=255&s,b[8]=b[4],b[9]=b[5],b[10]=b[6],b[11]=b[7],b[12]=1;const A=function(L){let N=-1;le||(le=function(){const Y=new Int32Array(256);for(let X=0;X<256;X++){let Z=X;for(let pe=0;pe<8;pe++)Z=1&Z?3988292384^Z>>>1:Z>>>1;Y[X]=Z}return Y}());for(let Y=0;Y<L.length;Y++)N=le[255&(N^L[Y])]^N>>>8;return~N}(b),P=new Uint8Array(4);P[0]=A>>>24,P[1]=A>>>16,P[2]=A>>>8,P[3]=255&A;{const L=new Uint8Array(4);L[0]=0,L[1]=0,L[2]=0,L[3]=9;const N=new Uint8Array(54);return N.set(M,0),N.set(L,33),N.set(b,37),N.set(P,50),N}}}class Ze{constructor(s,h){var P;this.viewer=s;let p=this.overlay=new F(s,{overlayType:"viewer"}),b=this.tool=new tt(this.overlay.paperScope,this);this.dummyTool=new this.overlay.paperScope.Tool,this.dummyTool.activate(),this._mouseNavEnabledAtActivation=!0,(P=p.addViewerButton({faIconClass:"fa-camera",tooltip:"Take Screenshot",onClick:()=>{b.active?this.deactivate():this.activate()}}).element.querySelector("svg.icon"))==null||P.style.setProperty("width","1em"),this._makeDialog(h),this.tool.addEventListener("region-selected",L=>this._setupScreenshotDialog(L))}activate(){let s=this.overlay.setOSDMouseNavEnabled(!1);this._mouseNavEnabledAtActivation=this._mouseNavEnabledAtActivation||s,this.overlay.bringToFront(),this.tool.activate()}deactivate(){this.dialog.classList.add("hidden"),this.tool.deactivate(!0),this.dummyTool.activate(),this.overlay.setOSDMouseNavEnabled(this._mouseNavEnabledAtActivation),this._mouseNavEnabledAtActivation=!1,this.overlay.sendToBack()}_startRegion(){this.dialog.classList.add("hidden"),this.tool.activate()}_makeDialog(s){let h=`<div class="screenshot-dialog hidden">
1613
+ </div>`,title:""}),this.element=this.dialog.container,this.element.querySelector('button[data-action="geojson-load"]').addEventListener("click",function(){C();const z=document.createElement("input");z.type="file",z.accept="text/geojson,.geojson,text/json,.json",z.addEventListener("change",function(){let J=this.files[0],X=new FileReader,Y=[];X.onload=function(){try{Y=JSON.parse(this.result)}catch{return void alert("Bad file - JSON could not be parsed")}Array.isArray(Y)||(Y=[Y]);let pe=Array.from(new Set(Y.map(ve=>ve.type)));if(pe.length==0&&p.element.find(".featurecollection-list").text("Bad file - no Features or FeatureCollections were found"),pe.length>1)return void alert("Bad file - valid geoJSON consists of an array of objects with single type (FeatureCollection or Feature)");pe[0]=="Feature"&&(Y=[{type:"FeatureCollection",features:Y,properties:{label:J.name}}]),P(Y);const ne=document.createElement("button");p.element.querySelector(".finalize").appendChild(ne),ne.innerText="Replace existing layers",ne.addEventListener("click",()=>s.addFeatureCollections(Y,!0));const ie=document.createElement("button");p.element.querySelector(".finalize").appendChild(ie),ie.innerText="Add new layers",ie.addEventListener("click",()=>s.addFeatureCollections(Y,!1))},X.readAsText(J)}),z.click()}),this.element.querySelector('button[data-action="geojson-save"]').addEventListener("click",function(){C();let z=P(s.toGeoJSON());M("Create file","Choose file name:",b("-")+"FeatureCollections.json").addEventListener("click",function(){var ve;(ve=this.parentElement.querySelector(".download-link"))==null||ve.remove();let J=Array.from(z.querySelectorAll("input:checked")).map(de=>Ke.get(de,"fc")),X=JSON.stringify(J),Y=new Blob([X],{type:"text/json"}),pe=this.getAttribute("data-label");const ne=document.createElement("div");ne.classList.add("download-link"),this.parentElement.insertBefore(ne,this.nextSibling);const ie=document.createElement("a");ie.href=window.URL.createObjectURL(Y),ie.download=pe,ie.target="_blank",ie.innerText="Download file",ne.appendChild(ie)})}),this.element.querySelector('button[data-action="svg-export"]').addEventListener("click",function(){C();let z=P(s.getFeatureCollectionGroups());M("Create file","Choose file name:",b("-")+"FeatureCollections.svg").addEventListener("click",function(){var X;(X=this.parentElement.querySelector(".download-link"))==null||X.remove();let J=Array.from(z.querySelectorAll("input:checked")).map(function(Y){return Ke.get(Y,"fc")});if(J.length>0){let Y=new a.PaperScope;Y.setup(),J.forEach(function(de){Y.project.activeLayer.addChildren(de.layer.clone({insert:!1,deep:!0}).children)});let pe=new Blob([Y.project.exportSVG({asString:!0,bounds:"content"})],{type:"text/svg"}),ne=this.getAttribute("data-label");const ie=document.createElement("div");ie.classList.add("download-link"),this.parentElement.insertBefore(ie,this.nextSibling);const ve=document.createElement("a");ve.href=window.URL.createObjectURL(pe),ve.download=ne,ve.target="_blank",ve.innerText="Download file",ie.appendChild(ve)}})}),this.element.querySelector('button[data-action="png-export"]').addEventListener("click",function(){C();let z=P(s.getFeatureCollectionGroups());M("Create file","Choose file name:",b("-")+"raster.png").addEventListener("click",function(){var X;(X=this.parentElement.querySelector(".download-link"))==null||X.remove();let J=Array.from(z.querySelectorAll("input:checked")).map(function(Y){return Ke.get(Y,"fc")});if(J.length>0){let Y=new a.PaperScope;Y.setup(),J.forEach(function(ve){Y.project.activeLayer.addChildren(ve.layer.clone({insert:!1,deep:!0}).children)});let pe=this.getAttribute("data-label");const ne=document.createElement("div");ne.classList.add("download-link"),this.parentElement.insertBefore(ne,this.nextSibling);const ie=document.createElement("a");ie.href=Y.project.activeLayer.rasterize({insert:!1}).toDataURL(),ie.download=pe,ie.target="_blank",ie.innerText="Download file",ne.appendChild(ie)}})}),this.element.querySelector('button[data-action="ls-store"]').addEventListener("click",function(){C();let z=P(s.toGeoJSON());M("Save data","Local storage key:",b(),!0).addEventListener("click",function(){let J=Array.from(z.querySelectorAll("input:checked")).map(function(pe){return Ke.get(pe,"fc")}),X=JSON.stringify(J),Y=this.getAttribute("data-label");window.localStorage.setItem(Y,X)})}),this.element.querySelector('button[data-action="ls-load"]').addEventListener("click",function(){C();let z=[],J=b(),X=Object.keys(window.localStorage),Y=p.element.querySelector(".featurecollection-list");Y.innerText="";const pe=document.createElement("div");pe.classList.add("localstorage-key-list"),Y.appendChild(pe),X.sort((ne,ie)=>ne.localeCompare(ie)).forEach(ne=>{const ie=document.createElement("div");ie.classList.add("localstorage-key"),ie.style.order=ne==J?0:1,ie.innerText=ne,pe.appendChild(ie)}),pe.querySelectorAll(".localstorage-key").forEach(ne=>ne.addEventListener("click",function(){let ie=window.localStorage.getItem(this.textContent);if(!ie)return void alert(`No data found in local storage for key=${this.textContent}`);try{z=JSON.parse(ie)}catch{return void alert("Bad data - JSON could not be parsed")}P(z);const ve=document.createElement("button");ve.innerText="Replace existing layers",ve.addEventListener("click",()=>s.addFeatureCollections(z,!0)),p.element.querySelector(".finalize").appendChild(ve);const de=document.createElement("button");de.innerText="Add new layers",de.addEventListener("click",()=>s.addFeatureCollections(z,!1)),p.element.querySelector(".finalize").appendChild(de)}))})}show(){this.dialog.show()}hide(){this.dialog.hide()}toggle(){this.dialog.toggle()}}class ki{constructor(s,c){var b,C,P,M;c=this.options=Object.assign({autoOpen:!0,featureCollections:[],addButton:!0,addToolbar:!0,tools:null,addLayerUI:!0,addFileButton:!0,buttonTogglesToolbar:!0,buttonTogglesLayerUI:!0},c);let p=this._viewer=s.viewer;this._isOpen=!!c.autoOpen,c.addToolbar&&(this._toolbar=new Mt(s.overlay.paperScope,c.tools)),this._fileDialog=new Fi(s,{appendTo:p.element}),this._filebutton=null,c.addFileButton&&(this._filebutton=s.overlay.addViewerButton({onClick:()=>{this._fileDialog.toggle()},faIconClass:"fa-save",tooltip:"Save/Load Annotations"})),c.addLayerUI&&(this._layerUI=new Ai(s,c.addFileButton)),this._addToViewer(),c.autoOpen?((b=this._layerUI)==null||b.show(),(C=this._toolbar)==null||C.show()):((P=this._layerUI)==null||P.hide(),(M=this._toolbar)==null||M.hide()),this._button=null,c.addButton&&(this._button=s.overlay.addViewerButton({onClick:()=>{this._isOpen=!this._isOpen,this._isOpen?(this.options.buttonTogglesToolbar&&this._toolbar.show(),this.options.buttonTogglesLayerUI&&this._layerUI.show()):(this.options.buttonTogglesToolbar&&this._toolbar.hide(),this.options.buttonTogglesLayerUI&&this._layerUI.hide())},faIconClass:"fa-pencil",tooltip:"Annotation Interface"})),c.featureCollections&&s.loadGeoJSON(c.featureCollections)}destroy(){if(this._layerUI.destroy(),this._toolbar.destroy(),this._button){let s=this._viewer.buttonGroup.buttons.indexOf(this._button);s>-1&&this._viewer.buttonGroup.buttons.splice(s,1),this._button.element.remove()}if(this._filebutton){let s=this._viewer.buttonGroup.buttons.indexOf(this._filebutton);s>-1&&this._viewer.buttonGroup.buttons.splice(s,1),this._filebutton.element.remove()}}showUI(){this.ui.show()}hideUI(){this.ui.hide()}showToolbar(){this.toolbar.show()}hideToolbar(){this.toolbar.hide()}get ui(){return this._layerUI}get toolbar(){return this._toolbar}get element(){return this._layerUI.element}_addToViewer(){const s=document.createElement("div");this._viewer.element.appendChild(s);const c=document.createElement("div"),p=document.createElement("div"),b=document.createElement("div"),C=document.createElement("div"),P=document.createElement("div"),M=document.createElement("div");Object.entries({"annotation-ui-grid":s,top:c,bottom:p,center:b,left:C,right:P,"resize-right":M}).forEach(([ie,ve])=>ve.classList.add(ie)),[b,P,C,c,p].forEach(ie=>s.appendChild(ie)),b.appendChild(this._viewer.container),P.appendChild(M),P.appendChild(this.element),c.appendChild(this._toolbar.element);const J=this.element,X=document.querySelector("body");let Y;function pe(ie){if(M.classList.contains("resizing")){if(ie.movementX){const ve=J.getBoundingClientRect();J.style.width=ve.right-ie.x-Y+"px"}ie.preventDefault()}}function ne(ie){document.removeEventListener("mousemove",pe),document.removeEventListener("mouseleave",ne),document.removeEventListener("mouseup",ne),X.classList.remove(".annotation-ui-noselect"),M.classList.remove("resizing")}M.addEventListener("mousedown",function(ie){this.classList.add("resizing"),X.classList.add(".annotation-ui-noselect"),document.addEventListener("mousemove",pe),document.addEventListener("mouseleave",ne),document.addEventListener("mouseup",ne),Y=J.getBoundingClientRect().left-ie.x})}}function zi(){this._computedFillOpacity=this.hierarchy.filter(L=>"fillOpacity"in L&&(L._multiplyOpacity||L==this)).reduce((L,s)=>L*s.fillOpacity,1),this.fillColor&&(this.fillColor.alpha=this._computedFillOpacity)}a.View.prototype.getZoom=function(){var L=this._decompose().scaling;return(Math.abs(L.x)+Math.abs(L.y))/2},a.CanvasView.prototype._setElementSize.base=function(L,s){var c=this._element;L=Math.round(L),s=Math.round(s),c&&(c.width!==L&&(c.width=L),c.height!==s&&(c.height=s))},a.View.prototype.setRotation=function(L,s){let c=L-(this._rotation||0);this.rotate(c,s),this._rotation=y.positiveModulo(L,360),this.emit("rotate",{rotatedBy:c,currentRotation:this._rotation,center:s})},a.View.prototype.setFlipped=function(L,s){L!==this.getFlipped()&&(this.rotate(-s),this.scale(-1,1),this.rotate(s),this.emit("flip",{flipped:L}))},a.View.prototype.getFlipped=function(L){return this.scaling.x*this.scaling.y<0},Object.defineProperty(a.Item.prototype,"hierarchy",{get:function(){return this.parent?this.parent.hierarchy.concat(this):this.project?this.project.hierarchy.concat(this):[this.view,this]}}),Object.defineProperty(a.Item.prototype,"descendants",{get:function(){return(this.children?this.children.map(L=>L.descendants).flat():[]).concat(this.isGeoJSONFeature?[this]:[])}}),Object.defineProperty(a.Item.prototype,"fillOpacity",{set:function(L){(this.style||this.defaultStyle).fillOpacity=L,this.descendants.forEach(s=>s.updateFillOpacity())},get:function(){return(this.style||this.defaultStyle).fillOpacity}}),Object.defineProperty(a.Item.prototype,"strokeOpacity",{set:function(L){(this.style||this.defaultStyle).strokeOpacity=L,this.descendants.forEach(s=>s.updateStrokeOpacity())},get:function(){return(this.style||this.defaultStyle).strokeOpacity}}),Object.defineProperty(a.Item.prototype,"rescale",{set:function(L){this._style.rescale=L},get:function(){return this._style.rescale}}),Object.defineProperty(a.Item.prototype,"stroke",{get:function(){return this._stroke},set:function(L){this._stroke=L,this.strokeWidth=L/(this.view.getZoom()*this.hierarchy.filter(s=>s.tiledImage)[0].scaling.x)}}),Object.defineProperty(a.Style.prototype,"fillOpacity",{set:function(L){this._fillOpacity=this._values.fillOpacity=L},get:function(){return this._fillOpacity===void 0?1:this._fillOpacity}}),Object.defineProperty(a.Style.prototype,"strokeOpacity",{set:function(L){this._strokeOpacity=this._values.strokeOpacity=L},get:function(){return this._strokeOpacity===void 0?1:this._strokeOpacity}}),Object.defineProperty(a.Style.prototype,"rescale",{set:function(L){this._rescale=this._values.rescale=L},get:function(){return this._rescale}}),Object.defineProperty(a.CompoundPath.prototype,"descendants",{get:function(){return[this]}}),Object.defineProperty(a.Project.prototype,"hierarchy",{get:function(){return this.parent?this.parent.hierarchy.concat(this):this.project?this.project.hierarchy.concat(this):[this.view,this]}}),Object.defineProperty(a.Project.prototype,"fillOpacity",{set:function(L){(this.style||this.defaultStyle).fillOpacity=L,this.descendants.forEach(s=>s.updateFillOpacity())},get:function(){return(this.style||this.defaultStyle).fillOpacity}}),Object.defineProperty(a.View.prototype,"fillOpacity",{set:function(L){this._fillOpacity=L,this._project.descendants.forEach(s=>s.updateFillOpacity())},get:function(){return this._fillOpacity}}),Object.defineProperty(a.View.prototype,"_fillOpacity",{value:1,writable:!0}),Object.defineProperty(a.Project.prototype,"strokeOpacity",{set:function(L){(this.style||this.defaultStyle).strokeOpacity=L,this.descendants.forEach(s=>s.updateStrokeOpacity())},get:function(){return(this.style||this.defaultStyle).strokeOpacity}}),a.Item.prototype.updateFillOpacity=zi,a.Item.prototype.updateStrokeOpacity=function(){this.strokeColor&&(this.strokeColor.alpha=this.hierarchy.filter(L=>"strokeOpacity"in L&&(L._multiplyOpacity||L==this)).reduce((L,s)=>L*s.strokeOpacity,1))},a.Project.prototype.updateFillOpacity=zi,a.View.prototype._multiplyOpacity=!0,a.Style.prototype.set=function(L){var s=L instanceof a.Style,c=s?L._values:L;if(c){for(var p in c)if(p in this._defaults||a.Style.prototype.hasOwnProperty(p)){var b=c[p];this[p]=b&&s&&b.clone?b.clone():b}}},a.Item.prototype.applyRescale=function(){let L=this,s=L.rescale;if(s){let c=L.view.scaling.x*L.layer.scaling.x;Object.keys(s).forEach(function(p){typeof s[p]=="function"?L[p]=s[p](c):Array.isArray(s[p])?L[p]=s[p].map(function(b){return b/c}):L[p]=s[p]/c})}},a.PathItem.prototype.isClockwise=function(){return this.getArea()>=-1e-8},Object.defineProperty(a.PathItem.prototype,"clockwise",{get:function(){return this.isClockwise()}});var Mi={findItemBoundsCollisions:function(L,s,c){function p(P){for(var M=new Array(P.length),z=0;z<P.length;z++){var J=P[z].getBounds();M[z]=[J.left,J.top,J.right,J.bottom]}return M}var b=p(L),C=s&&s!==L?p(s):b;return this.findBoundsCollisions(b,C,c||0)},findCurveBoundsCollisions:function(L,s,c,p){function b(pe){for(var ne=Math.min,ie=Math.max,ve=new Array(pe.length),de=0;de<pe.length;de++){var te=pe[de];ve[de]=[ne(te[0],te[2],te[4],te[6]),ne(te[1],te[3],te[5],te[7]),ie(te[0],te[2],te[4],te[6]),ie(te[1],te[3],te[5],te[7])]}return ve}var C=b(L),P=s&&s!==L?b(s):C;if(p){for(var M=this.findBoundsCollisions(C,P,c||0,!1,!0),z=this.findBoundsCollisions(C,P,c||0,!0,!0),J=[],X=0,Y=M.length;X<Y;X++)J[X]={hor:M[X],ver:z[X]};return J}return this.findBoundsCollisions(C,P,c||0)},findBoundsCollisions:function(L,s,c,p,b){var C=!s||L===s,P=C?L:L.concat(s),M=L.length,z=P.length;function J(Je,xt,Pt){for(var ut=0,Bt=Je.length;ut<Bt;){var qt=Bt+ut>>>1;P[Je[qt]][xt]<Pt?ut=qt+1:Bt=qt}return ut-1}for(var X=p?1:0,Y=X+2,pe=p?0:1,ne=pe+2,ie=new Array(z),ve=0;ve<z;ve++)ie[ve]=ve;ie.sort(function(Je,xt){return P[Je][X]-P[xt][X]});var de=[],te=new Array(M);for(ve=0;ve<z;ve++){var he=ie[ve],ce=P[he],Re=C?he:he-M,Oe=he<M,Pe=C||!Oe,Ge=Oe?[]:null;if(de.length){var He=J(de,Y,ce[X]-c)+1;if(de.splice(0,He),C&&b){Ge=Ge.concat(de);for(var qe=0;qe<de.length;qe++)te[rt=de[qe]].push(Re)}else{var De=ce[ne],Qe=ce[pe];for(qe=0;qe<de.length;qe++){var rt=de[qe],ot=P[rt],et=rt<M,yt=C||rt>=M;(b||(Oe&&yt||Pe&&et)&&De>=ot[pe]-c&&Qe<=ot[ne]+c)&&(Oe&&yt&&Ge.push(C?rt:rt-M),Pe&&et&&te[rt].push(Re))}}}if(Oe&&(L===s&&Ge.push(he),te[he]=Ge),de.length){var gt=J(de,Y,ce[Y]);de.splice(gt+1,0,he)}else de.push(he)}for(ve=0;ve<te.length;ve++){var st=te[ve];st&&st.sort(function(Je,xt){return Je-xt})}return te}};const Ui=a.PathItem,jt=a.Path,e=a.CompoundPath,t=a.Base,i=a.Item,r=a.Segment,l=a.Curve,d=a.CurveLocation,f=a.Numerical;Ui.inject(new function(){var L=Math.min,s=Math.max,c=Math.abs,p={unite:{1:!0,2:!0},intersect:{2:!0},subtract:{1:!0},exclude:{1:!0,"-1":!0}};function b(te){return te._children||[te]}function C(te,he){var ce=te.clone(!1).reduce({simplify:!0}).transform(null,!0,!0);if(he){for(var Re=b(ce),Oe=0,Pe=Re.length;Oe<Pe;Oe++)(te=Re[Oe])._closed||te.isEmpty()||(te.closePath(f.EPSILON),te.getFirstSegment().setHandleIn(0,0),te.getLastSegment().setHandleOut(0,0));ce=ce.resolveCrossings().reorient(ce.getFillRule()==="nonzero",!0)}return ce}function P(te,he,ce,Re,Oe){var Pe=new e(i.NO_INSERT);return Pe.addChildren(te,!0),Pe=Pe.reduce({simplify:he}),Oe&&Oe.insert==0||Pe.insertAbove(Re&&ce.isSibling(Re)&&ce.getIndex()<Re.getIndex()?Re:ce),Pe.copyAttributes(ce,!0),Pe}function M(te){return te.hasOverlap()||te.isCrossing()}function z(te,he,ce,Re){if(Re&&(Re.trace==0||Re.stroke)&&/^(subtract|intersect)$/.test(ce))return J(te,he,ce);var Oe=C(te,!0),Pe=he&&te!==he&&C(he,!0),Ge=p[ce];Ge[ce]=!0,Pe&&(Ge.subtract||Ge.exclude)^Pe.isClockwise()^Oe.isClockwise()&&Pe.reverse();var He,qe=ne(d.expand(Oe.getIntersections(Pe,M))),De=b(Oe),Qe=Pe&&b(Pe),rt=[],ot=[];function et(Rt){for(var Qt=0,Zt=Rt.length;Qt<Zt;Qt++){var Yt=Rt[Qt];t.push(rt,Yt._segments),t.push(ot,Yt.getCurves()),Yt._overlapsOnly=!0}}function yt(Rt){for(var Qt=[],Zt=0,Yt=Rt&&Rt.length;Zt<Yt;Zt++)Qt.push(ot[Rt[Zt]]);return Qt}if(qe.length){et(De),Qe&&et(Qe);for(let Rt=qe.length-1;Rt>-1;Rt--)rt[Rt].curve.length<1e-7&&(rt[Rt].remove(),rt.splice(Rt,1),ot.splice(Rt,1));for(var gt=new Array(ot.length),st=0,Je=ot.length;st<Je;st++)gt[st]=ot[st].getValues();var xt=Mi.findCurveBoundsCollisions(gt,gt,0,!0),Pt={};for(st=0;st<ot.length;st++){var ut=ot[st],Bt=ut._path._id;(Pt[Bt]=Pt[Bt]||{})[ut.getIndex()]={hor:yt(xt[st].hor),ver:yt(xt[st].ver)}}for(st=0,Je=qe.length;st<Je;st++)ve(qe[st]._segment,Oe,Pe,Pt,Ge);for(st=0,Je=rt.length;st<Je;st++){var qt=rt[st],Nt=qt._intersection;qt._winding||ve(qt,Oe,Pe,Pt,Ge),Nt&&Nt._overlap||(qt._path._overlapsOnly=!1)}He=de(rt,Ge)}else He=pe(Qe?De.concat(Qe):De.slice(),function(Rt){return!!Ge[Rt]});return P(He,!0,te,he,Re)}function J(te,he,ce){var Re=C(te),Oe=C(he),Pe=Re.getIntersections(Oe,M),Ge=ce==="subtract",He=ce==="divide",qe={},De=[];function Qe(et){if(!qe[et._id]&&(He||Oe.contains(et.getPointAt(et.getLength()/2))^Ge))return De.unshift(et),qe[et._id]=!0}for(var rt=Pe.length-1;rt>=0;rt--){var ot=Pe[rt].split();ot&&(Qe(ot)&&ot.getFirstSegment().setHandleIn(0,0),Re.getLastSegment().setHandleOut(0,0))}return Qe(Re),P(De,!1,te,he)}function X(te,he){for(var ce=te;ce;){if(ce===he)return;ce=ce._previous}for(;te._next&&te._next!==he;)te=te._next;if(!te._next){for(;he._previous;)he=he._previous;te._next=he,he._previous=te}}function Y(te){for(var he=te.length-1;he>=0;he--)te[he].clearHandles()}function pe(te,he,ce){var Re=te&&te.length;if(Re){var Oe=t.each(te,function(xt,Pt){this[xt._id]={container:null,winding:xt.isClockwise()?1:-1,index:Pt}},{}),Pe=te.slice().sort(function(xt,Pt){return c(Pt.getArea())-c(xt.getArea())}),Ge=Pe[0],He=Mi.findItemBoundsCollisions(Pe,null,f.GEOMETRIC_EPSILON);ce==null&&(ce=Ge.isClockwise());for(var qe=0;qe<Re;qe++){var De=Pe[qe],Qe=Oe[De._id],rt=0,ot=He[qe];if(ot){for(var et=null,yt=ot.length-1;yt>=0;yt--)if(ot[yt]<qe){et=et||De.getInteriorPoint();var gt=Pe[ot[yt]];if(gt.contains(et)){var st=Oe[gt._id];rt=st.winding,Qe.winding+=rt,Qe.container=st.exclude?st.container:gt;break}}}if(he(Qe.winding)===he(rt))Qe.exclude=!0,te[Qe.index]=null;else{var Je=Qe.container;De.setClockwise(Je?!Je.isClockwise():ce)}}}return te}function ne(te,he,ce){var Re,Oe,Pe,Ge=he&&[],He=f.CURVETIME_EPSILON,qe=1-He,De=!1,Qe=ce||[],rt=ce&&{};function ot(Zt){return Zt._path._id+"."+Zt._segment1._index}for(var et=(ce&&ce.length)-1;et>=0;et--)(yt=ce[et])._path&&(rt[ot(yt)]=!0);for(et=te.length-1;et>=0;et--){var yt,gt,st=te[et],Je=st._time,xt=Je,Pt=he&&!he(st);if((yt=st._curve)&&(yt!==Oe?(De=!yt.hasHandles()||rt&&rt[ot(yt)],Re=[],Pe=null,Oe=yt):Pe>=He&&(Je/=Pe)),Pt)Re&&Re.push(st);else{if(he&&Ge.unshift(st),Pe=xt,Je<He)gt=yt._segment1;else if(Je>qe)gt=yt._segment2;else{var ut=yt.divideAtTime(Je,!0);De&&Qe.push(yt,ut),gt=ut._segment1;for(var Bt=Re.length-1;Bt>=0;Bt--){var qt=Re[Bt];qt._time=(qt._time-Je)/(1-Je)}}st._setSegment(gt);var Nt=gt._intersection,Rt=st._intersection;if(Nt){X(Nt,Rt);for(var Qt=Nt;Qt;)X(Qt._intersection,Nt),Qt=Qt._next}else gt._intersection=Rt}}return ce||Y(Qe),Ge||te}function ie(te,he,ce,Re,Oe){var Pe,Ge,He=Array.isArray(he)?he:he[ce?"hor":"ver"],qe=ce?1:0,De=1^qe,Qe=[te.x,te.y],rt=Qe[qe],ot=Qe[De],et=1e-6,yt=rt-1e-9,gt=rt+1e-9,st=0,Je=0,xt=0,Pt=0,ut=!1,Bt=!1,qt=1,Nt=[];function Rt(Ht){var hi=Ht[De+0],ai=Ht[De+6];if(!(ot<L(hi,ai)||ot>s(hi,ai))){var li=Ht[qe+0],Ci=Ht[qe+2],Ti=Ht[qe+4],Si=Ht[qe+6];if(hi!==ai){var Pi=ot===hi?0:ot===ai||yt>s(li,Ci,Ti,Si)||gt<L(li,Ci,Ti,Si)?1:l.solveCubic(Ht,De,ot,Nt,0,1)>0?Nt[0]:1,fi=Pi===0?li:Pi===1?Si:l.getPoint(Ht,Pi)[ce?"y":"x"],vi=hi>ai?1:-1,Li=Pe[De]>Pe[De+6]?1:-1,Ei=Pe[qe+6];return ot!==hi?(fi<yt?xt+=vi:fi>gt?Pt+=vi:ut=!0,fi>rt-et&&fi<rt+et&&(qt/=2)):(vi!==Li?li<yt?xt+=vi:li>gt&&(Pt+=vi):li!=Ei&&(Ei<gt&&fi>gt?(Pt+=vi,ut=!0):Ei>yt&&fi<yt&&(xt+=vi,ut=!0)),qt/=4),Pe=Ht,!Oe&&fi>yt&&fi<gt&&l.getTangent(Ht,Pi)[ce?"x":"y"]===0&&ie(te,he,!ce,Re,!0)}(li<gt&&Si>yt||Si<gt&&li>yt)&&(ut=!0)}}function Qt(Ht){var hi=Ht[De+0],ai=Ht[De+2],li=Ht[De+4],Ci=Ht[De+6];if(ot<=s(hi,ai,li,Ci)&&ot>=L(hi,ai,li,Ci)){for(var Ti,Si=Ht[qe+0],Pi=Ht[qe+2],fi=Ht[qe+4],vi=Ht[qe+6],Li=yt>s(Si,Pi,fi,vi)||gt<L(Si,Pi,fi,vi)?[Ht]:l.getMonoCurves(Ht,ce),Ei=0,Ni=Li.length;Ei<Ni;Ei++)if(Ti=Rt(Li[Ei]))return Ti}}for(var Zt=0,Yt=He.length;Zt<Yt;Zt++){var ri,$t=He[Zt],Ut=$t._path,mi=$t.getValues();if(!(Zt&&He[Zt-1]._path===Ut||(Pe=null,Ut._closed||(Ge=l.getValues(Ut.getLastCurve().getSegment2(),$t.getSegment1(),null,!Re))[De]!==Ge[De+6]&&(Pe=Ge),Pe))){Pe=mi;for(var pi=Ut.getLastCurve();pi&&pi!==$t;){var bi=pi.getValues();if(bi[De]!==bi[De+6]){Pe=bi;break}pi=pi.getPrevious()}}if(ri=Qt(mi))return ri;if(Zt+1===Yt||He[Zt+1]._path!==Ut){if(Ge&&(ri=Qt(Ge)))return ri;!ut||xt||Pt||(xt=Pt=Ut.isClockwise(Re)^ce?1:-1),st+=xt,Je+=Pt,xt=Pt=0,ut&&(Bt=!0,ut=!1),Ge=null}}return st=c(st),Je=c(Je),{winding:s(st,Je),windingL:st,windingR:Je,quality:qt,onPath:Bt}}function ve(te,he,ce,Re,Oe){var Pe=[],Ge=te,He=0;do{if(st=te.getCurve()){var qe=st.getLength();Pe.push({segment:te,curve:st,length:qe}),He+=qe}te=te.getNext()}while(te&&!te._intersection&&te!==Ge);for(var De=[.5,.25,.75],Qe={winding:0,quality:-1},rt=0;rt<De.length&&Qe.quality<.5;rt++){qe=He*De[rt];for(var ot=0,et=Pe.length;ot<et;ot++){var yt=Pe[ot],gt=yt.length;if(qe<=gt){var st,Je=(st=yt.curve)._path,xt=Je._parent,Pt=xt instanceof e?xt:Je,ut=f.clamp(st.getTimeAt(qe),.001,.999),Bt=st.getPointAtTime(ut),qt=c(st.getTangentAtTime(ut).y)<Math.SQRT1_2,Nt=null;if(Oe.subtract&&ce){var Rt=(Pt===he?ce:he)._getWinding(Bt,qt,!0);if(Pt===he&&Rt.winding||Pt===ce&&!Rt.winding){if(Rt.quality<1)continue;Nt={winding:0,quality:1}}}(Nt=Nt||ie(Bt,Re[Je._id][st.getIndex()],qt,!0)).quality>Qe.quality&&(Qe=Nt);break}qe-=gt}}for(ot=Pe.length-1;ot>=0;ot--)Pe[ot].segment._winding=Qe}function de(te,he){var ce,Re=[];function Oe(ri){var $t;return!(!ri||ri._visited||he&&(!he[($t=ri._winding||{}).winding]||he.unite&&$t.winding===2&&$t.windingL&&$t.windingR))}function Pe(ri){if(ri){for(var $t=0,Ut=ce.length;$t<Ut;$t++)if(ri===ce[$t])return!0}return!1}function Ge(ri){for(var $t=ri._segments,Ut=0,mi=$t.length;Ut<mi;Ut++)$t[Ut]._visited=!0}function He(ri,$t){var Ut=ri._intersection,mi=Ut,pi=[];function bi(Ht,hi){for(;Ht&&Ht!==hi;){var ai=Ht._segment,li=ai&&ai._path;if(li){var Ci=ai.getNext()||li.getFirstSegment(),Ti=Ci._intersection;ai!==ri&&(Pe(ai)||Pe(Ci)||Ci&&Oe(ai)&&(Oe(Ci)||Ti&&Oe(Ti._segment)))&&pi.push(ai),$t&&ce.push(ai)}Ht=Ht._next}}if($t&&(ce=[ri]),Ut){for(bi(Ut);Ut&&Ut._previous;)Ut=Ut._previous;bi(Ut,mi)}return pi}te.sort(function(ri,$t){var Ut=ri._intersection,mi=$t._intersection,pi=!(!Ut||!Ut._overlap),bi=!(!mi||!mi._overlap),Ht=ri._path,hi=$t._path;return pi^bi?pi?1:-1:!Ut^!mi?Ut?1:-1:Ht!==hi?Ht._id-hi._id:ri._index-$t._index});for(var qe=0,De=te.length;qe<De;qe++){var Qe,rt,ot,et=te[qe],yt=Oe(et),gt=null,st=!1,Je=!0,xt=[];if(yt&&et._path._overlapsOnly){var Pt=et._path,ut=et._intersection._segment._path;Pt.compare(ut)&&(Pt.getArea()&&Re.push(Pt.clone(!1)),Ge(Pt),Ge(ut),yt=!1)}for(;yt;){var Bt=!gt,qt=He(et,Bt),Nt=qt.shift(),Rt=!(st=!Bt&&(Pe(et)||Pe(Nt)))&&Nt;if(Bt&&(gt=new jt(i.NO_INSERT),Qe=null),st){(et.isFirst()||et.isLast())&&(Je=et._path._closed),et._visited=!0;break}if(Rt&&Qe&&(xt.push(Qe),Qe=null),Qe||(Rt&&qt.push(et),Qe={start:gt._segments.length,crossings:qt,visited:rt=[],handleIn:ot}),Rt&&(et=Nt),!Oe(et)){gt.removeSegments(Qe.start);for(var Qt=0,Zt=rt.length;Qt<Zt;Qt++)rt[Qt]._visited=!1;rt.length=0;do(et=Qe&&Qe.crossings.shift())&&et._path||(et=null,(Qe=xt.pop())&&(rt=Qe.visited,ot=Qe.handleIn));while(Qe&&!Oe(et));if(!et)break}var Yt=et.getNext();gt.add(new r(et._point,ot,Yt&&et._handleOut)),et._visited=!0,rt.push(et),et=Yt||et._path.getFirstSegment(),ot=Yt&&Yt._handleIn}st&&(Je&&(gt.getFirstSegment().setHandleIn(ot),gt.setClosed(Je)),gt.getArea()!==0&&Re.push(gt))}return Re}return{_getWinding:function(te,he,ce){return ie(te,this.getCurves(),he,ce)},unite:function(te,he){return z(this,te,"unite",he)},intersect:function(te,he){return z(this,te,"intersect",he)},subtract:function(te,he){return z(this,te,"subtract",he)},exclude:function(te,he){return z(this,te,"exclude",he)},divide:function(te,he){return he&&(he.trace==0||he.stroke)?J(this,te,"divide"):P([this.subtract(te,he),this.intersect(te,he)],!0,this,te,he)},resolveCrossings:function(){var te=this._children,he=te||[this];function ce(st,Je){var xt=st&&st._intersection;return xt&&xt._overlap&&xt._path===Je}var Re=!1,Oe=!1,Pe=this.getIntersections(null,function(st){return st.hasOverlap()&&(Re=!0)||st.isCrossing()&&(Oe=!0)}),Ge=Re&&Oe&&[];if(Pe=d.expand(Pe),Re)for(var He=ne(Pe,function(st){return st.hasOverlap()},Ge),qe=He.length-1;qe>=0;qe--){var De=He[qe],Qe=De._path,rt=De._segment,ot=rt.getPrevious(),et=rt.getNext();ce(ot,Qe)&&ce(et,Qe)&&(rt.remove(),ot._handleOut._set(0,0),et._handleIn._set(0,0),ot===rt||ot.getCurve().hasLength()||(et._handleIn.set(ot._handleIn),ot.remove()))}Oe&&(ne(Pe,Re&&function(st){var Je=st.getCurve(),xt=st.getSegment(),Pt=st._intersection,ut=Pt._curve,Bt=Pt._segment;if(Je&&ut&&Je._path&&ut._path)return!0;xt&&(xt._intersection=null),Bt&&(Bt._intersection=null)},Ge),Ge&&Y(Ge),he=de(t.each(he,function(st){t.push(this,st._segments)},[])));var yt,gt=he.length;return gt>1&&te?(he!==te&&this.setChildren(he),yt=this):gt!==1||te||(he[0]!==this&&this.setSegments(he[0].removeSegments()),yt=this),yt||((yt=new e(i.NO_INSERT)).addChildren(he),(yt=yt.reduce()).copyAttributes(this),this.replaceWith(yt)),yt},reorient:function(te,he){var ce=this._children;return ce&&ce.length?this.setChildren(pe(this.removeChildren(),function(Re){return!!(te?Re:1&Re)},he)):he!==void 0&&this.setClockwise(he),this},getInteriorPoint:function(){var te=this.getBounds().getCenter(!0);if(!this.contains(te)){for(var he=this.getCurves(),ce=te.y,Re=[],Oe=[],Pe=0,Ge=he.length;Pe<Ge;Pe++){var He=he[Pe].getValues(),qe=He[1],De=He[3],Qe=He[5],rt=He[7];if(ce>=L(qe,De,Qe,rt)&&ce<=s(qe,De,Qe,rt))for(var ot=l.getMonoCurves(He),et=0,yt=ot.length;et<yt;et++){var gt=ot[et],st=gt[1],Je=gt[7];if(st!==Je&&(ce>=st&&ce<=Je||ce>=Je&&ce<=st)){var xt=ce===st?gt[0]:ce===Je?gt[6]:l.solveCubic(gt,1,ce,Oe,0,1)===1?l.getPoint(gt,Oe[0]).x:(gt[0]+gt[6])/2;Re.push(xt)}}}Re.length>1&&(Re.sort(function(Pt,ut){return Pt-ut}),te.x=(Re[0]+Re[1])/2)}return te}}});const v=["unite","intersect","subtract","exclude","divide"];for(const L of v){const s=a.PathItem.prototype[L];a.PathItem.prototype[L]=function(){const c=arguments[0],p=this.getBounds(),b=c.getBounds(),C=Math.min(p.x,b.x),P=Math.max(p.x+p.width,b.x+b.width),M=Math.min(p.y,b.y),z=Math.max(p.y+p.height,b.y+b.height);if(C>-1e3&&P<1e3&&M>-1e3&&z<1e3)return s.apply(this,arguments);const J=P-C,X=z-M,Y=Math.pow(2,Math.ceil(Math.log2(J/2e3))),pe=Math.pow(2,Math.ceil(Math.log2(X/2e3))),ne=Math.max(Y,pe),ie=new a.Point((C+P)/2,(M+z)/2),ve=new a.Point(-Math.round(ie.x),-Math.round(ie.y));ne>1&&(this.scale(1/ne,ie),c!==this&&c.scale(1/ne,ie)),this.translate(ve),c!==this&&c.translate(ve);const de=s.apply(this,arguments);return this.translate(ve.multiply(-1)),de.translate(ve.multiply(-1)),c!==this&&c.translate(ve.multiply(-1)),ne>1&&(this.scale(ne,ie),de.scale(ne,ie),c!==this&&c.scale(ne,ie)),de}}function g(){return{get:function(){let L=this._paperLayerMap.size;return L===1?this._paperLayerMap.values().next().value:L===0?null:this._paperLayerMap.get(a)||null}}}function x(){return{get:function(){return this.__paperLayerMap||(this.__paperLayerMap=new Map),this.__paperLayerMap}}}function T(L){return function(s,c){let p=new a.Layer({applyMatrix:!1});return c.project.addLayer(p),s._paperLayerMap.set(c,p),p}(this,L.paperScope)}function S(L){this.paperLayer?(this.paperLayer.addChild(L),L.applyRescale()):console.error("No layer has been set up in the active paper scope for this object. Does a scope need to be activated?")}var D;a.Curve.getTimeOf=function(L,s){var c=new a.Point(L[0],L[1]),p=new a.Point(L[6],L[7]),b=1e-7,C=s.isClose(c,b)?0:s.isClose(p,b)?1:null;if(C===null)for(var P=[s.x,s.y],M=[],z=0;z<2;z++)for(var J=a.Curve.solveCubic(L,z,P[z],M,0,1),X=0;X<J;X++){var Y=M[X];if(s.isClose(a.Curve.getPoint(L,Y),b))return Y}return C},Object.defineProperty(y.Viewer.prototype,"paperLayer",g()),Object.defineProperty(y.TiledImage.prototype,"paperLayer",g()),Object.defineProperty(y.Viewport.prototype,"paperLayer",g()),Object.defineProperty(y.TiledImage.prototype,"_paperLayerMap",x()),Object.defineProperty(y.Viewer.prototype,"_paperLayerMap",x()),Object.defineProperty(y.Viewport.prototype,"_paperLayerMap",x()),Object.defineProperty(y.Viewer.prototype,"paperItems",{get:function(){return this.paperLayer.children}}),Object.defineProperty(y.TiledImage.prototype,"paperItems",{get:function(){return this.paperLayer.children}}),Object.defineProperty(y.Viewport.prototype,"paperItems",{get:function(){return this.paperLayer.children}}),y.Viewer.prototype._setupPaper=T,y.Viewport.prototype._setupPaper=function(L){let s=T.call(this,L);s.viewport=this,s.matrix.scale(L.scaleFactor),L.addHandler("update-scale",function(){s.matrix.reset(),s.matrix.scale(L.scaleFactor)})},y.TiledImage.prototype._setupPaper=function(L){let s=this,c=T.call(this,L);function p(){let b=s.getRotation(),C=s.getBoundsNoRotate(),P=s.getFlip(),M=new a.Point((C.x+C.width/2)*L.scaleFactor,(C.y+C.height/2)*L.scaleFactor),z=new a.Matrix;P&&z.scale(-1,1,M),z.rotate(b,M),z.translate({x:C.x*L.scaleFactor,y:C.y*L.scaleFactor}),z.scale(C.width*L.scaleFactor/s.source.width),c.matrix.set(z)}c.tiledImage=this,this.addHandler("bounds-change",p),L.addHandler("update-scale",p),p()},y.Viewer.prototype.addPaperItem=S,y.Viewport.prototype.addPaperItem=S,y.TiledImage.prototype.addPaperItem=S,y.Viewer.prototype.createPaperOverlay=function(){return new F(this,...arguments)},(D=y)!==void 0&&a!==void 0?D.Viewer.prototype.PaperOverlays?console.warn("Cannot redefine Viewer.prototype.PaperOverlays"):Object.defineProperty(D.Viewer.prototype,"PaperOverlays",{get:function(){return this._PaperOverlays||(this._PaperOverlays=[])}}):console.error("[paper-overlay.mjs] requires OpenSeadragon and paper.js");class F extends y.EventSource{constructor(s,c){super(),c=y.extend(!0,{overlayType:"image"},c),this.viewer=s,this.overlayType=c.overlayType,s.PaperOverlays.push(this);let p=H();this._id="paper-overlay-canvas-"+p,this._containerWidth=0,this._containerHeight=0,this._canvasdiv=document.createElement("div"),this._canvasdiv.setAttribute("id","paper-overlay-"+p),this._canvasdiv.classList.add("paper-overlay"),this._canvasdiv.style.position="absolute",this._canvasdiv.style.left="0px",this._canvasdiv.style.top="0px",this._canvasdiv.style.width="100%",this._canvasdiv.style.height="100%",this._canvas=document.createElement("canvas"),this._canvas.setAttribute("id",this._id),this._canvasdiv.appendChild(this._canvas),s.canvas.appendChild(this._canvasdiv),this._viewerButtons=[],this.paperScope=new a.PaperScope,this.paperScope.overlay=this;let b=this.paperScope.setup(this._canvas);if(this.paperScope.project.overlay=this,this.ps=b,this._paperProject=b.project,this._resize(),this.overlayType=="image"){this.viewer.viewport._setupPaper(this);for(let C=0;C<s.world.getItemCount();++C){let P=this.viewer.world.getItemAt(C);this._setupTiledImage(P)}this.onAddItem=(C=>function(P){let M=P.item;C._setupTiledImage(M)})(this),this.onRemoveItem=(C=>function(P){let M=P.item;C._removeTiledImage(M)})(this),s.world.addHandler("add-item",this.onAddItem),s.world.addHandler("remove-item",this.onRemoveItem),this._updatePaperView()}else this.overlayType=="viewer"?this.viewer._setupPaper(this):console.error("Unrecognized overlay type: "+this.overlayType);this.onViewerDestroy=(C=>function(){C.destroy(!0)})(this),this.onViewportChange=(C=>function(){C._updatePaperView()})(this),this.onViewerResetSize=(C=>function(P){setTimeout(()=>{C.destroyed||(C._resize(),C._updatePaperView())})})(this),this.onViewerResize=(C=>function(){C._resize(),C.paperScope.view.emit("resize",{size:new a.Size(C._containerWidth,C._containerHeight)}),C._updatePaperView()})(this),this.onViewerRotate=function(C){this._pivot=C.pivot||this._getCenter()},this.onViewerFlip=(C=>function(P){C.paperScope.view.setFlipped(P.flipped,s.viewport.getRotation(!0))})(this),s.addHandler("resize",this.onViewerResize),s.addHandler("reset-size",this.onViewerResetSize),s.addHandler("viewport-change",this.onViewportChange),s.addHandler("rotate",this.onViewerRotate),s.addHandler("flip",this.onViewerFlip),s.addOnceHandler("destroy",this.onViewerDestroy)}get scaleFactor(){return this._currentScaleFactor=this._currentScaleFactor||this.viewer.drawer.canvas.clientWidth,this._currentScaleFactor}addViewerButton(s={}){const c=this.viewer.prefixUrl;let p=new y.Button({tooltip:s.tooltip,srcRest:c+"button_rest.png",srcGroup:c+"button_grouphover.png",srcHover:c+"button_hover.png",srcDown:c+"button_pressed.png",onClick:s.onClick});if(s.faIconClass){let b=_t(s.faIconClass);b.style="position:absolute;top:calc(50% - 4px);left:50%;transform:translate(-50%, -50%);color:#01010187;",p.element.appendChild(b)}return this.viewer.buttonGroup.buttons.push(p),this.viewer.buttonGroup.element.appendChild(p.element),this._viewerButtons.push(p),p}bringToFront(){this.viewer.PaperOverlays.splice(this.viewer.PaperOverlays.indexOf(this),1),this.viewer.PaperOverlays.push(this),this.viewer.PaperOverlays.forEach(s=>this.viewer.canvas.appendChild(s._canvasdiv)),this.paperScope.activate()}sendToBack(){this.viewer.PaperOverlays.splice(this.viewer.PaperOverlays.indexOf(this),1),this.viewer.PaperOverlays.splice(0,0,this),this.viewer.PaperOverlays.forEach(s=>this.viewer.canvas.appendChild(s._canvasdiv)),this.viewer.PaperOverlays[this.viewer.PaperOverlays.length-1].paperScope.activate()}destroy(s){this.destroyed=!0,this._canvasdiv.remove(),this.paperScope.project&&this.paperScope.project.remove(),this.ps&&this.ps.remove(),s||(this.viewer.removeHandler("viewport-change",this.onViewportChange),this.viewer.removeHandler("resize",this.onViewerResize),this.viewer.removeHandler("reset-size",this.onViewerResetSize),this.viewer.removeHandler("rotate",this.onViewerRotate),this.viewer.removeHandler("flip",this.onViewerFlip),this.viewer.world.removeHandler("add-item",this.onAddItem),this.viewer.world.removeHandler("remove-item",this.onRemoveItem),this.setOSDMouseNavEnabled(!0),this._viewerButtons.forEach(c=>{c.element.remove()}),this._viewerButtons=[],this.viewer.PaperOverlays.splice(this.viewer.PaperOverlays.indexOf(this),1),this.viewer.PaperOverlays.length>0&&this.viewer.PaperOverlays[this.viewer.PaperOverlays.length-1].paperScope.activate())}clear(){this.paperScope.project.clear()}canvas(){return this._canvas}addClass(s){return this._canvas.classList.add(...arguments),this}removeClass(s){return this._canvas.classList.remove(...arguments),this}setAttribute(s,c){return this._canvas.setAttribute(s,c),this}addEventListener(s,c){return this._canvas.addEventListener(s,c),this}removeEventListener(s,c){return this._canvas.removeEventListener(s,c),this}setOSDMouseNavEnabled(s=!0){let c=this.viewer.isMouseNavEnabled();return this.viewer.setMouseNavEnabled(s),s!==c&&this.viewer.raiseEvent("mouse-nav-changed",{enabled:s,overlay:this}),c}autoRescaleItems(s=!1){let c=this;function p(){c.rescaleItems()}this.ps.view.off("zoom-changed",p),s&&this.ps.view.on("zoom-changed",p)}rescaleItems(){this._paperProject.getItems({match:function(s){return s.rescale}}).forEach(function(s){s.applyRescale()})}paperToCanvasCoordinates(s,c){let p=new y.Point(s,c).divide(this.scaleFactor);return this.viewer.viewport.viewportToViewerElementCoordinates(p)}getImageData(s,c,p,b){return s=s||0,c=c||0,p=p??this.viewer.drawer.canvas.width,b=b??this.viewer.drawer.canvas.height,this.ps.view.getFlipped()&&(s=this.viewer.drawer.canvas.width-s-p),this.viewer.drawer.canvas.getContext("2d",{willReadFrequently:!0}).getImageData(s,c,p,b)}getViewportRaster(s=!0){let c=this.paperScope.view,p=c.viewToProject(new a.Point(c.viewSize.width/2,c.viewSize.height/2)),b=-1*this.viewer.viewport.getRotation(),C={insert:!1};s?C.canvas=this.viewer.drawer.canvas:C.size=new a.Size(this.viewer.drawer.canvas.width,this.viewer.drawer.canvas.height);let P=new a.Raster(C);P.position=p,P.rotate(b);let M=c.viewSize.width/c.getZoom()/this.viewer.drawer.canvas.width;if(P.scale(M),c.getFlipped()){const z=c.getRotation();P.rotate(-z),P.scale(-1,1),P.rotate(z)}return P}_setupTiledImage(s){s._setupPaper(this)}_removeTiledImage(s){var c,p,b;(p=(c=s._paperLayerMap)==null?void 0:c.get(this.paperScope))==null||p.remove(),(b=s._paperLayerMap)==null||b.delete(this.paperScope)}_resize(){let s=!1;if(this._containerWidth!==this.viewer.container.clientWidth&&(this._containerWidth=this.viewer.container.clientWidth,this._canvasdiv.setAttribute("width",this._containerWidth),this._canvas.setAttribute("width",this._containerWidth),s=!0),this._containerHeight!==this.viewer.container.clientHeight&&(this._containerHeight=this.viewer.container.clientHeight,this._canvasdiv.setAttribute("height",this._containerHeight),this._canvas.setAttribute("height",this._containerHeight),s=!0),s){const c=this._currentScaleFactor;this._currentScaleFactor=this.viewer.drawer.canvas.clientWidth,c!==this._currentScaleFactor&&this.raiseEvent("update-scale",{scaleFactor:this._currentScaleFactor}),this.paperScope.view.viewSize=new a.Size(this._containerWidth,this._containerHeight),this.paperScope.view.update()}}_updatePaperView(){if(this.overlayType==="viewer")return;let s=this.viewer.viewport.getZoom(!0),c=this.paperScope.view.getZoom();this.paperScope.view.setZoom(this.viewer.viewport._containerInnerSize.x*s/this.scaleFactor);let p=this._getCenter();this.viewer.drawer.canvas.pixelRatio=window.devicePixelRatio,this.paperScope.view.center=new a.Point(p.x,p.y).multiply(this.scaleFactor);let b=this.viewer.viewport.getRotation(!0),C=this._getPivot();this.paperScope.view.setRotation(b,C);const P=this.paperScope.view.getZoom();Math.abs(P-c)>1e-7&&this.paperScope.view.emit("zoom-changed",{zoom:P}),this.paperScope.view.update()}_getPivot(){if(this._pivot)return this._pivot.multiply(this.scaleFactor)}_getCenter(){return this.viewer.viewport.getCenter(!0)}}let H=function(){let L=1;return function(){return L++}}();class U extends me{constructor(s){var C;let c;super(s),this._supportsGeoJSONObj(s)||error(`Bad geoJSON object: geometry type ${(C=s.geometry)==null?void 0:C.type} is not supported by this factory.`),c=s.geometry.type.toLowerCase()==="multipolygon"?s.geometry.coordinates.flat():s.geometry.coordinates;let p=c.map(function(P){let M=P.map(function(z){return new a.Point(z[0],z[1])});return new a.Path(M)}),b=new a.CompoundPath({children:p,fillRule:"evenodd",closed:!0});b=b.replaceWith(b.unite(b).toCompoundPath()),b.canBeBoundingElement=!0,this.paperItem=b}static supportsGeoJSONType(s,c=null){return["polygon","multipolygon"].includes(s.toLowerCase())&&c===null}getGeoJSONType(){return{type:this.paperItem.children.filter(s=>s.area>0&&s.segments.length>2).length>1?"MultiPolygon":"Polygon"}}getCoordinates(){let s=this.paperItem.children.filter(b=>b.area>0&&b.segments.length>2),c=this.paperItem.children.filter(b=>b.area<=0&&b.segments.length>2),p=s.map(b=>[b.segments.map(C=>[C.point.x,C.point.y])].concat(c.filter(C=>b.contains(C.segments[0].point)).map(C=>C.segments.map(P=>[P.point.x,P.point.y]))));return p.forEach(b=>{b.forEach(C=>{let P=C[0],M=C.slice(-1)[0];P[0]===M[0]&&P[1]===M[1]||C.push([P[0],P[1]])})}),p.length===1&&(p=p[0]),p}getProperties(){}}class K extends me{constructor(s){super(s),s.geometry.type!=="LineString"&&error('Bad geoJSON object: type !=="LineString"');let c=s.geometry.coordinates.map(function(b){return new a.Point(b[0],b[1])}),p=new a.Group({children:[new a.Path(c)]});p.fillColor=null,this.paperItem=p}static supportsGeoJSONType(s,c=null){return s.toLowerCase()==="linestring"&&c===null}getGeoJSONType(){return{type:"Linestring"}}getCoordinates(){return this.paperItem.children.map(function(s){return s.segments.map(function(c){return[c.point.x,c.point.y]})})}getProperties(){return{strokeWidths:this.paperItem.children.map(s=>s.strokeWidth)}}setStyle(s){Object.assign({},s),s.rescale&&delete s.rescale.strokeWidth,this._paperItem.style.set(s)}}class j extends me{constructor(s){super(s),s.geometry.type!=="MultiLineString"&&error('Bad geoJSON object: type !=="MultiLineString"');let c=s.geometry.coordinates.map(function(b,C){let P=b.map(function(M){return new a.Point(M[0],M[1])});return new a.Path(P).strokeWidth=s.geometry.properties.strokeWidths[C],new a.Path(P)}),p=new a.Group({children:c});p.fillColor=null,this.paperItem=p}static supportsGeoJSONType(s,c=null){return s.toLowerCase()==="multilinestring"&&c===null}getGeoJSONType(){return{type:"MultiLineString"}}getCoordinates(){return this.paperItem.children.map(function(s){return s.segments.map(function(c){return[c.point.x,c.point.y]})})}getProperties(){let s=this.paperItem;return{strokeColor:s.children.length>0?s.children[0].strokeColor:void 0,strokeWidths:s.children.map(c=>c.strokeWidth)}}getStyleProperties(){return this.paperItem.children[0].style.toJSON()}setStyle(s){Object.assign({},s),s.rescale&&delete s.rescale.strokeWidth,this._paperItem.style.set(s)}}class Z extends me{constructor(s){super(s),s.geometry.type==="GeometryCollection"&&s.geometry.properties.subtype==="Raster"||error('Bad geoJSON object: type !=="GeometryCollection" or subtype !=="Raster"');let c,p=s.geometry.properties.raster,b=s.geometry.geometries;p||error("Bad input: geometry.properties.raster must hold raster data, or a paper.Raster object"),p.data instanceof a.Raster?c=p.data:(c=new a.Raster(p.data),c.translate(p.center[0],p.center[1]),c.scale(p.scaling[0],p.scaling[1]),c.rotate(p.rotation)),this._rasterSelectedColor=new a.Color(0,0,0,0),c.selectedColor=this._rasterSelectedColor;let C=new a.Group([c]);if(C.updateFillOpacity=function(){a.Group.prototype.updateFillOpacity.call(this),c.opacity=this.opacity*this._computedFillOpacity,C.clipped&&(C.children[0].fillColor=null)},b.length>0){let P=new a.Group;C.insertChild(0,P),C.clipped=!0,b.forEach(M=>{let z=M instanceof a.Item?a.Item.fromAnnotationItem(M):a.Item.fromGeoJSON(M);delete z.isGeoJSONFeature,z._annotationItem=z.annotationItem,delete z.annotationItem,setTimeout(()=>z.strokeColor=(M.properties||M).strokeColor),z.strokeWidth=(M.properties||M).strokeWidth,z.rescale=(M.properties||M).rescale,P.addChild(z)})}s.geometry.properties.transform&&(C.matrix=new a.Matrix(s.geometry.properties.transform)),C.on("selected",()=>{C.clipped&&(C.children[0].selected=!1)}),this.paperItem=C}static supportsGeoJSONType(s,c){return s.toLowerCase()==="geometrycollection"&&(c==null?void 0:c.toLowerCase())==="raster"}getGeoJSONType(){return{type:"GeometryCollection",subtype:"Raster"}}toGeoJSONGeometry(){let s=this.paperItem,c=s.children[0],p=s.children[1];return{type:"GeometryCollection",properties:{subtype:"Raster",raster:{data:p.toDataURL(),center:[p.bounds.center.x,p.bounds.center.y],width:p.width,height:p.height,scaling:[p.matrix.scaling.x,p.matrix.scaling.y],rotation:p.matrix.rotation},transform:s.matrix.values},geometries:c.children.map(C=>{let P=C._annotationItem.toGeoJSONFeature(),M=P.geometry;return M.properties||(M.properties={}),M.properties.strokeColor=P.properties.strokeColor,M.properties.strokeWidth=P.properties.strokeWidth,M.properties.rescale=P.properties.rescale,M})}}}class ee extends me{constructor(s){super(s),s.geometry.type==="Point"&&s.geometry.properties.subtype==="Rectangle"||error('Bad geoJSON object: type !=="Point" or subtype !=="Rectangle"');let c=new a.CompoundPath({children:[],fillRule:"evenodd"});if(s.geometry.coordinates.length>1){let p=s.geometry.coordinates.slice(0,2),b=p[0]||0,C=p[1]||0,P=s.geometry.properties,M=P.width||0,z=P.height||0,J=P.angle||0,X=[[b-M/2,C-z/2],[b+M/2,C-z/2],[b+M/2,C+z/2],[b-M/2,C+z/2]].map(function(pe){return new a.Point(pe[0],pe[1])}),Y=new a.Path(X);c.addChild(Y),c.closed=!0,c.rotate(J)}c.canBeBoundingElement=!0,this.paperItem=c}static supportsGeoJSONType(s,c){return s.toLowerCase()==="point"&&(c==null?void 0:c.toLowerCase())==="rectangle"}getGeoJSONType(){return{type:"Point",subtype:"Rectangle"}}getCoordinates(){let s=this.paperItem;return[s.position.x,s.position.y]}getProperties(){let s=this.paperItem.children[0].segments.map(b=>b.point),c=s[1].subtract(s[0]),p=s[0].subtract(s[3]);return{width:c.length,height:p.length,angle:c.angleInDegrees}}static onTransform(){switch(arguments[0]){case"scale":{let s=this.layer.matrix.inverseTransform(arguments[1]),c=arguments[2],p=arguments[3];this.matrix.append(p.inverted());let b=this.children[0].segments;b.map((C,P)=>{let M=C.point.transform(this.matrix),z=b[(P+1)%4],J=z.point.transform(this.matrix).subtract(M).divide(2),X=M.add(J);return X.normal=J.rotate(-90).normalize(),X.segments=[C,z],X}).forEach(C=>{let P=C.subtract(s),M=P.rotate(-c).multiply(p.scaling).rotate(c).subtract(P).project(C.normal);C.segments.forEach(z=>{let J=z.point.transform(this.matrix).add(M);z.point=this.matrix.inverseTransform(J)})});break}}}}class re extends me{constructor(s){super(s),s.geometry.type==="Point"&&s.geometry.properties.subtype==="Ellipse"||error('Bad geoJSON object: type !=="Point" or subtype !=="Rectangle"');let c=new a.CompoundPath({children:[],fillRule:"evenodd"});if(s.geometry.coordinates.length>1){let p=s.geometry.coordinates.slice(0,2),b=p[0]||0,C=p[1]||0,P=s.geometry.properties,M=P.majorRadius||0,z=P.minorRadius||0,J=P.angle||0,X=new a.Path.Ellipse({center:new a.Point(b,C),radius:new a.Size(M,z)});c.addChild(X),c.rotate(J)}c.canBeBoundingElement=!0,this.paperItem=c}static supportsGeoJSONType(s,c){return s.toLowerCase()==="point"&&(c==null?void 0:c.toLowerCase())==="ellipse"}getGeoJSONType(){return{type:"Point",subtype:"Ellipse"}}getCoordinates(){let s=this.paperItem;return[s.position.x,s.position.y]}getProperties(){let s,c,p=this.paperItem.children[0].segments.map(M=>M.point),b=p[2].subtract(p[0]),C=p[3].subtract(p[1]);b.length>C.length?(s=b,c=C):(s=C,c=b);let P=s.angle;return{majorRadius:s.length/2,minorRadius:c.length/2,angle:P}}static onTransform(){switch(arguments[0]){case"complete":{let s=this.children[0].curves,c=this.bounds.center,p=s.slice(0,2).map(J=>({curve:J,location:J.getNearestLocation(c)})).sort((J,X)=>J.location.distance-X.location.distance),b=p[0].location.point;if(b.equals(p[0].curve.segment1.point)||b.equals(p[0].curve.segment2.point))return;let C=p[0].location.curve==p[0].curve?p[0].location.time:1,P=b.subtract(c),M=p[1].curve.getLocationAtTime(C).point.subtract(c),z=new a.Path.Ellipse({center:c,radius:[M.length,P.length]}).rotate(M.angle);this.children[0].set({segments:z.segments});break}}}}const oe=function(L,s=0){let c=3735928559^s,p=1103547991^s;for(let b,C=0;C<L.length;C++)b=L.charCodeAt(C),c=Math.imul(c^b,2654435761),p=Math.imul(p^b,1597334677);return c=Math.imul(c^c>>>16,2246822507),c^=Math.imul(p^p>>>13,3266489909),p=Math.imul(p^p>>>16,2246822507),p^=Math.imul(c^c>>>13,3266489909),4294967296*(2097151&p)+(c>>>0)};Object.defineProperty(a.Item.prototype,"displayName",{set:function(L){Array.isArray(L)?(this._displayName=new String(L[0]),this._displayName.source=L[1]):this._displayName=L,this.name=this._displayName,this.emit("display-name-changed",{displayName:this._displayName})},get:function(){return this._displayName}}),Object.defineProperty(a.Item.prototype,"featureCollection",{get:function(){return this.hierarchy.filter(L=>L.isGeoJSONFeatureCollection)[0]}}),Object.defineProperty(a.TextItem.prototype,"content",function(){let L=a.TextItem.prototype._setContent||Object.getOwnPropertyDescriptor(a.TextItem.prototype,"content").set;return a.TextItem.prototype._setContent=L,{get:function(){return this._content},set:function(s){L.call(this,s),this.emit("content-changed")}}}()),Object.defineProperty(a.Project.prototype,"descendants",{get:function(){return this.layers?this.getItems({match:L=>L.isGeoJSONFeatureCollection}).map(L=>L.descendants).flat():[this]}});let le,xe=a.Item.prototype.remove;a.Item.prototype.remove=function(){const L=this.getItems({match:s=>s.isGeoJSONFeatureCollection});(this.isGeoJSONFeature||this.isGeoJSONFeatureCollection)&&this.project.emit("item-removed",{item:this}),L.forEach(s=>this.project.emit("item-removed",{item:s})),xe.call(this),(this.isGeoJSONFeature||this.isGeoJSONFeatureCollection)&&this.emit("removed",{item:this}),L.forEach(s=>s.emit("removed",{item:s}))},a.Group.prototype.insertChildren=function(){let L=a.Group.prototype.insertChildren.original||a.Group.prototype.insertChildren;function s(){let c=L.apply(this,arguments),p=arguments[0],b=Array.from(arguments[1]);return b&&b.forEach((C,P)=>{if(C.isGeoJSONFeature){let M=p!==void 0?p+1:-1;this.emit("child-added",{item:C,index:M})}}),c}return s.original=L,s}(),a.Color.prototype.toJSON=a.Color.prototype.toCSS,a.Style.prototype.toJSON=function(){let L={};return Object.keys(this._values).forEach(s=>{L[s]=this[s]}),L},a.View.prototype.getImageData=function(){return this.element.getContext("2d").getImageData(0,0,this.element.width,this.element.height)},a.PathItem.prototype.toCompoundPath=function(){if(this.constructor!==a.CompoundPath){let L=new a.CompoundPath({children:[this],fillRule:"evenodd"});return L.selected=this.selected,this.selected=!1,L}return this},a.PathItem.prototype.applyBounds=function(L){if(L.length==0)return;let s;if(L.length==1)s=L[0].intersect(this,{insert:!1});else if(L.length>1){let c=new a.CompoundPath(L.map(p=>p.clone().children).flat());s=c.intersect(this,{insert:!1}),c.remove()}this.children?(this.removeChildren(),this.addChildren(s.children?s.children:[s])):this.segments=s.segments?s.segments:s.firstChild.segments},a.Item.prototype.select=function(L){L||this.project._scope.findSelectedItems().forEach(s=>s.deselect()),this.selected=!0,this.emit("selected"),this.project.emit("item-selected",{item:this})},a.Item.prototype.deselect=function(L){L?(this.selected=!1,this.emit("deselected"),this.project.emit("item-deselected",{item:this})):this.project._scope.findSelectedItems().forEach(s=>s.deselect(!0))},a.Item.prototype.toggle=function(L){this.selected?this.deselect(L):this.select(L)},a.PaperScope.prototype.findSelectedNewItem=function(){return this.project.getItems({selected:!0,match:function(L){return L.isGeoJSONFeature&&L.initializeGeoJSONFeature}})[0]},a.PaperScope.prototype.findSelectedItems=function(){return this.project.getItems({selected:!0,match:function(L){return L.isGeoJSONFeature}})},a.PaperScope.prototype.findSelectedItem=function(){return this.findSelectedItems()[0]},a.PaperScope.prototype.scaleByCurrentZoom=function(L){return L/this.view.getZoom()},a.PaperScope.prototype.getActiveTool=function(){return this.tool?this.tool._toolObject:null};class Ee extends y.EventSource{constructor(s,c={}){if(super(),c||(c={}),this._defaultOptions={addUI:!1,overlay:null,destroyOnViewerClose:!1,cacheAnnotations:!1},this.options=Object.assign({},this._defaultOptions,c),this._defaultStyle={fillColor:new a.Color("white"),strokeColor:new a.Color("black"),fillOpacity:1,strokeOpacity:1,strokeWidth:1,rescale:{strokeWidth:1}},this.viewer=s,this.options.overlay?this.options.overlay instanceof F&&(this.overlay=this.options.overlay):this.overlay=new F(this.viewer,{type:"image"}),this.paperScope.project.defaultStyle=new a.Style,this.paperScope.project.defaultStyle.set(this.defaultStyle),this.overlay.autoRescaleItems(!0),this.options.destroyOnViewerClose&&this.viewer.addOnceHandler("close",()=>this.destroy()),this.viewer.annotationToolkit=this,this.paperScope.annotationToolkit=this,this.viewer.world.addHandler("add-item",p=>{this.options.cacheAnnotations&&this._loadCachedAnnotations(p.item)}),this.viewer.world.addHandler("remove-item",p=>{this.options.cacheAnnotations&&this._cacheAnnotations(p.item)},!1,1),Ne.register(U),Ne.register(xi),Ne.register(K),Ne.register(j),Ne.register(Z),Ne.register(mt),Ne.register(N),Ne.register(ee),Ne.register(re),a.Item.fromGeoJSON=Ne.itemFromGeoJSON,a.Item.fromAnnotationItem=Ne.itemFromAnnotationItem,this._cached={},this.options.addUI){let p={};typeof c.addUI=="object"&&(p=this.options.addUI),this.addAnnotationUI(p)}}get defaultStyle(){return this._defaultStyle}get annotationUI(){return this._annotationUI}get paperScope(){return this.overlay.paperScope}clearCache(){this._cached={}}_cacheAnnotations(s){try{const c=oe(JSON.stringify(s.source)),p=s.paperLayer.getItems({match:b=>b.isGeoJSONFeatureCollection});this._cached[c]=p}catch(c){console.error("Error with caching",c)}}_loadCachedAnnotations(s){try{const c=oe(JSON.stringify(s.source)),p=this._cached[c]||[];for(const b of p)this._addFeatureCollectionGroupToLayer(b,s.paperLayer)}catch(c){console.error("Error with fetching from cache",c)}}addAnnotationUI(s={}){return this._annotationUI||(this._annotationUI=new ki(this,s)),this._annotationUI}destroy(){this.raiseEvent("before-destroy");let s=this.paperScope&&this.paperScope.getActiveTool();s&&s.deactivate(!0),this.viewer.annotationToolkit=null,this._annotationUI&&this._annotationUI.destroy(),this.overlay.destroy(),this.raiseEvent("destroy")}close(){this.raiseEvent("before-close");let s=this.paperScope&&this.paperScope.getActiveTool();s&&s.deactivate(!0),this.addFeatureCollections([],!0)}setGlobalVisibility(s=!1){this.paperScope.view._element.setAttribute("style","visibility:"+(s?"visible;":"hidden;"))}addFeatureCollections(s,c,p){this.loadGeoJSON(s,c,p),this.overlay.rescaleItems(),this.paperScope.project.emit("items-changed")}getFeatureCollectionGroups(s){return this.paperScope.project.getItems({match:c=>c.isGeoJSONFeatureCollection&&(!s||c.layer===s)})}getFeatures(){return this.paperScope.project.getItems({match:s=>s.isGeoJSONFeature})}static registerFeature(s){s.isGeoJSONFeature=!0}static registerFeatureCollection(s){s.isGeoJSONFeatureCollection=!0}toGeoJSON(s){return((s=Object.assign({layer:null},s)).layer||this.paperScope.project).getItems({match:c=>c.isGeoJSONFeatureCollection}).map(c=>({type:"FeatureCollection",features:c.descendants.filter(p=>p.annotationItem).map(p=>p.annotationItem.toGeoJSONFeature()),properties:{defaultStyle:c.defaultStyle.toJSON(),userdata:c.data.userdata},label:c.displayName}))}toGeoJSONString(s,c){return JSON.stringify(this.toGeoJSON(),s,c)}loadGeoJSON(s,c,p){let b=!!p&&p.paperLayer;c&&this.getFeatureCollectionGroups(p).forEach(C=>C.remove()),Array.isArray(s)||(s=[s]),s.forEach(C=>{if(C.type=="FeatureCollection"){let P=this._createFeatureCollectionGroup({label:C.label,parent:b}),M=C.properties||{};P.data.userdata=Object.assign({},M.userdata),P.defaultStyle.set(M.defaultStyle),C.features.forEach(z=>{let J=a.Item.fromGeoJSON(z);P.addChild(J)})}else console.warn("GeoJSON object not loaded: wrong type. Only FeatureCollection objects are currently supported")})}addEmptyFeatureCollectionGroup(){return this._createFeatureCollectionGroup()}_createFeatureCollectionGroup(s={}){let c=(s=Object.assign({},{label:null,parent:null},s)).label,p=s.parent;if(!p){let P=this.viewer.world.getItemCount();P==1?p=this.viewer.world.getItemAt(0).paperLayer:P==0?p=this.viewer.viewport.paperLayer:(console.warn("Use of AnnotationToolkit with multi-image is not yet fully supported. All annotations will be added to the top-level tiled image."),p=this.viewer.world.getItemAt(P-1).paperLayer)}if(!p)return void console.error("Failed to create feature collection group: no parent could be found");let b=new a.Group;this._addFeatureCollectionGroupToLayer(b,p);let C=this.getFeatureCollectionGroups().length;return b.name=b.displayName=c!==null?c:`Annotation Group ${C}`,b.defaultStyle=new a.Style(this.paperScope.project.defaultStyle),b}_addFeatureCollectionGroupToLayer(s,c){c.addChild(s),Ee.registerFeatureCollection(s),this.paperScope.project.emit("feature-collection-added",{group:s}),s.children&&s.insertChildren(0,s.children)}makePlaceholderItem(s){return new xi(s)}}class Te{constructor(s){var C;let c=this.overlay=new F(s,{overlayType:"viewer"}),p=this.tool=new Me(this.overlay.paperScope,this);this.dummyTool=new this.overlay.paperScope.Tool,this.dummyTool.activate(),this._mouseNavEnabledAtActivation=!0,(C=c.addViewerButton({faIconClass:"fa-rotate",tooltip:"Rotate viewer",onClick:()=>{p.active?this.deactivate():this.activate()}}).element.querySelector("svg.icon"))==null||C.style.setProperty("width","1em")}activate(){this._mouseNavEnabledAtActivation=this.overlay.viewer.isMouseNavEnabled(),this.tool.activate(),this.tool.active=!0,this.overlay.bringToFront()}deactivate(){this.tool.deactivate(!0),this.dummyTool.activate(),this.overlay.viewer.setMouseNavEnabled(this._mouseNavEnabledAtActivation),this.tool.active=!1,this.overlay.sendToBack()}}class Me extends Ct{constructor(s,c){super(s);let p=s.view.bounds,b=new be(s.view.bounds.center,function(P,M){if(!M){let z=new y.Point(b.item.position.x,b.item.position.y);M=C.viewport.pointFromPixel(z)}C.viewport.rotateTo(P,M,!0)},function(){c.deactivate()});s.view.on("flip",()=>{b.closeButton.scale(-1,1,b.item.bounds.center)});let C=s.overlay.viewer;C.addHandler("rotate",P=>b.setCurrentRotation(P.degrees)),s.view.on("resize",function(P){let M=b.item.position,z=M.x/p.width,J=M.y/p.height;p=s.view.bounds,b.item.position=new a.Point(z*p.width,J*p.height)}),b.item.visible=!1,this.project.toolLayer.addChild(b.item),this.tool.onMouseDown=function(P){},this.tool.onMouseDrag=function(P){},this.tool.onMouseMove=function(P){b.setLineOrientation(P.point)},this.tool.onMouseUp=function(){},this.tool.extensions.onKeyDown=function(P){P.key=="escape"&&c.deactivate()},this.extensions.onActivate=function(){b.item.visible==0&&(b.item.position=s.view.bounds.center),b.item.visible=!0,b.item.opacity=1},this.extensions.onDeactivate=function(P){P&&(b.item.visible=!1),b.item.opacity=.3}}}function be(L,s,c){let p=2*L.x,b=2*L.y,C=Math.min(p/5,b/5,30),P=.3*C,M=new a.Point(0,-1).angle,z=new a.Group({insert:!1}),J=new a.Path.Circle({center:new a.Point(0,0),radius:C});J.fillColor=new a.Color(0,0,0,.01),J.strokeColor="black",J.strokeWidth=2,[0,90,180,270].map(Pe=>{let Ge=new a.Path.Line(new a.Point(0,P),new a.Point(0,C));Ge.rotate(Pe,new a.Point(0,0)),Ge.fillColor=null,Ge.strokeColor="black",Ge.strokeWidth=2,z.addChild(Ge)});let X=[0,90,180,270].map(Pe=>{let Ge=new a.Path.Rectangle(new a.Point(-P,0),new a.Size(2*P,-1*(C+1.5*P))),He=Ge.subtract(J,{insert:!1});return Ge.remove(),He.rotate(Pe,new a.Point(0,0)),He.fillColor=new a.Color(100,100,100,.5),He.strokeColor="black",He._angle=Pe,z.addChild(He),He});z.addChild(J);let Y=new a.Path.Circle({center:new a.Point(0,-C),radius:P/1.5});Y.set({fillColor:"yellow",strokeColor:"black",applyMatrix:!1}),z.addChild(Y);let pe=new a.Group({applyMatrix:!1}),ne=new a.Group({applyMatrix:!1}),ie=new a.Color(.3,.3,.3,.8),ve=new a.Path.Line(new a.Point(0,-P),new a.Point(0,-Math.max(p,b)));ve.strokeColor=ie,ve.strokeWidth=1,ve.applyMatrix=!1,pe.addChild(ve),pe.addChild(ne);let de=new a.Path.RegularPolygon(new a.Point(1.2*-P,0),3,.8*P);de.rotate(-94);let te=new a.Path.RegularPolygon(new a.Point(1.2*P,0),3,.8*P);te.rotate(94);let he=new a.Path.Arc(new a.Point(1.2*-P,0),new a.Point(0,-P/4),new a.Point(1.2*P,0)),ce=he.clone();ne.addChildren([ce,he,de,te]),ne.fillColor="yellow",he.strokeWidth=P/2,ce.strokeWidth=he.strokeWidth+2,ce.strokeColor=ie,de.strokeColor=ie,te.strokeColor=ie,he.strokeColor="yellow",he.fillColor=null,z.addChild(pe);let Re=new a.Group({insert:!1});Re.addChild(new a.Path.Circle({radius:P})),Re.addChild(new a.Path.Line(new a.Point(-P/2,-P/2),new a.Point(P/2,P/2))),Re.addChild(new a.Path.Line(new a.Point(P/2,-P/2),new a.Point(-P/2,P/2))),Re.set({fillColor:"red",strokeColor:"black",opacity:.7}),Re.position=new a.Point(1.5*C,1.5*-C),z.addChild(Re),z.pivot=J.bounds.center,z.position=L;let Oe={};return Oe.item=z,Oe.circle=J,Oe.cardinalControls=X,Oe.rotationLineControl=pe,Oe.closeButton=Re,Oe.setCurrentRotation=Pe=>{Y.rotate(Pe-Y.rotation,J.bounds.center)},Oe.setLineOrientation=(Pe,Ge=!1)=>{let He=Pe.subtract(J.bounds.center),qe=He.angle-M,De=He.length;pe.rotate(qe-pe.rotation,J.bounds.center),pe.visible=Ge||De>C+1.5*P,ne.position=new a.Point(0,-De),ve.segments[1].point=new a.Point(0,-De)},X.forEach(Pe=>{Pe.onClick=function(){s(Pe._angle)}}),Y.onMouseDrag=function(Pe){let Ge=Pe.point.subtract(J.bounds.center).angle;s(Ge-M)},ne.onMouseDown=function(Pe){ne._angleOffset=Y.rotation-Pe.point.subtract(J.bounds.center).angle},ne.onMouseDrag=function(Pe){let Ge,He=this.project.hitTestAll(Pe.point).filter(qe=>X.includes(qe.item));He.length>0&&(Pe.point=He[0].item.bounds.center),Ge=Pe.point.subtract(J.bounds.center).angle+ne._angleOffset,s(Ge),Oe.setLineOrientation(Pe.point,!0)},J.onMouseDrag=function(Pe){Oe.item.position=Oe.item.position.add(Pe.delta)},Re.onClick=function(){c()},Oe}const se=112,ue=72,We=89,Ie=115;function Ye(L,s,c,p){if(c==="image/jpeg")return L[13]=1,L[14]=s>>8,L[15]=255&s,L[16]=s>>8,L[17]=255&s,L;if(c==="image/png"){const b=new Uint8Array(13);s*=39.3701,b[0]=se,b[1]=ue,b[2]=We,b[3]=Ie,b[4]=s>>>24,b[5]=s>>>16,b[6]=s>>>8,b[7]=255&s,b[8]=b[4],b[9]=b[5],b[10]=b[6],b[11]=b[7],b[12]=1;const C=function(M){let z=-1;le||(le=function(){const J=new Int32Array(256);for(let X=0;X<256;X++){let Y=X;for(let pe=0;pe<8;pe++)Y=1&Y?3988292384^Y>>>1:Y>>>1;J[X]=Y}return J}());for(let J=0;J<M.length;J++)z=le[255&(z^M[J])]^z>>>8;return~z}(b),P=new Uint8Array(4);P[0]=C>>>24,P[1]=C>>>16,P[2]=C>>>8,P[3]=255&C;{const M=new Uint8Array(4);M[0]=0,M[1]=0,M[2]=0,M[3]=9;const z=new Uint8Array(54);return z.set(L,0),z.set(M,33),z.set(b,37),z.set(P,50),z}}}class $e{constructor(s,c){var P;this.viewer=s;let p=this.overlay=new F(s,{overlayType:"viewer"}),b=this.tool=new lt(this.overlay.paperScope,this);this.dummyTool=new this.overlay.paperScope.Tool,this.dummyTool.activate(),this._mouseNavEnabledAtActivation=!0,(P=p.addViewerButton({faIconClass:"fa-camera",tooltip:"Take Screenshot",onClick:()=>{b.active?this.deactivate():this.activate()}}).element.querySelector("svg.icon"))==null||P.style.setProperty("width","1em"),this._makeDialog(c),this.tool.addEventListener("region-selected",M=>this._setupScreenshotDialog(M))}activate(){let s=this.overlay.setOSDMouseNavEnabled(!1);this._mouseNavEnabledAtActivation=this._mouseNavEnabledAtActivation||s,this.overlay.bringToFront(),this.tool.activate()}deactivate(){this.dialog.classList.add("hidden"),this.tool.deactivate(!0),this.dummyTool.activate(),this.overlay.setOSDMouseNavEnabled(this._mouseNavEnabledAtActivation),this._mouseNavEnabledAtActivation=!1,this.overlay.sendToBack()}_startRegion(){this.dialog.classList.add("hidden"),this.tool.activate()}_makeDialog(s){let c=`<div class="screenshot-dialog hidden">
1614
1614
  <div class="size">
1615
1615
  <h3>Aspect Ratio</h3>
1616
1616
  <label>Lock</label><input class="lock-aspect-ratio" type="checkbox"/>
@@ -1662,7 +1662,7 @@ input[type=range] {
1662
1662
  </div>
1663
1663
  <hr>
1664
1664
  <button class='rect'>Select a new area</button> | <button class='close'>Close</button>
1665
- </div>`;document.querySelector('style[data-type="screenshot-tool"]')||document.querySelector("head").appendChild(ri(`<style data-type="screenshot-tool">
1665
+ </div>`;document.querySelector('style[data-type="screenshot-tool"]')||document.querySelector("head").appendChild(oi(`<style data-type="screenshot-tool">
1666
1666
  .screenshot-dialog{
1667
1667
  position: absolute;
1668
1668
  top: 50%;
@@ -1705,5 +1705,5 @@ input[type=range] {
1705
1705
  .scalebar-opts.hidden{
1706
1706
  visibility:hidden;
1707
1707
  }
1708
- </style>`));const p=ri(h);this.viewer.container.appendChild(p),p.addEventListener("mousemove",b=>b.stopPropagation()),p.querySelectorAll(".close").forEach(b=>b.addEventListener("click",()=>this.deactivate())),p.querySelectorAll(".rect").forEach(b=>b.addEventListener("click",()=>this._startRegion())),p.querySelectorAll(".cancel-screenshot").forEach(b=>b.addEventListener("click",()=>p.querySelector(".screenshot-results").classList.remove("pending","created"))),p.querySelectorAll(".create-screenshot").forEach(b=>b.addEventListener("click",()=>{const A=p.querySelector(".select-size"),P=A.options[A.selectedIndex],L=JSON.parse(P.getAttribute("data-dims"));this.dialog.querySelector(".screenshot-results").classList.add("pending"),this._createScreenshot(L).then(N=>{const Y=this.dialog.querySelector(".screenshot-results");Y.classList.remove("pending"),Y.classList.add("created"),this.dialog.querySelector(".screenshot-link").href=this.blobURL}).catch(N=>{alert("There was a problem creating the screenshot. "+N)})})),p.querySelectorAll("button.download-screenshot").forEach(b=>b.addEventListener("click",()=>{p.querySelectorAll("a.download-screenshot").dispatchEvent(new Event("change"))})),p.querySelectorAll(".aspect-width").forEach(b=>{b.addEventListener("change",A=>this.tool.setAspectWidth(Number(A.target.value))),b.dispatchEvent(new Event("change"))}),p.querySelectorAll(".aspect-height").forEach(b=>{b.addEventListener("change",A=>this.tool.setAspectHeight(Number(A.target.value))),b.dispatchEvent(new Event("change"))}),p.querySelectorAll(".lock-aspect-ratio").forEach(b=>{b.addEventListener("change",A=>this.tool.setAspectLocked(A.target.checked)),b.dispatchEvent(new Event("change"))}),p.querySelectorAll(".apply-aspect-ratio").forEach(b=>b.addEventListener("click",A=>this._applyAspectRatio())),p.querySelectorAll(".region-dim").forEach(b=>b.addEventListener("change",()=>this._updateROI())),p.querySelectorAll(".scalebar-width").forEach(b=>{b.addEventListener("change",A=>this._scalebarWidth=Number(A.target.value),this._resetScreenshotResults()),b.dispatchEvent(new Event("change"))}),p.querySelectorAll(".scalebar-height").forEach(b=>{b.addEventListener("change",A=>this._scalebarHeight=Number(A.target.value),this._resetScreenshotResults()),b.dispatchEvent(new Event("change"))}),p.querySelectorAll(".include-scalebar").forEach(b=>{b.addEventListener("change",A=>{this._includeScalebar=A.target.checked;let P=p.querySelector(".scalebar-opts");this._includeScalebar?P.classList.remove("hidden"):P.classList.add("hidden"),this._resetScreenshotResults()}),b.dispatchEvent(new Event("change"))}),this.dialog=p}_updateROI(){let s=this.dialog.querySelector(".region-width").value,h=this.dialog.querySelector(".region-height").value;this._currentBounds.width=Number(s),this._currentBounds.height=Number(h),this._setupScreenshotDialog(this._currentBounds),this.dialog.querySelector(".lock-aspect-ratio").checked&&this._applyAspectRatio()}_applyAspectRatio(){let s=this._currentBounds.width/this._currentBounds.height,h=this.tool._aspectWidth/this.tool._aspectHeight;s/h>1?(this._currentBounds.width=Math.round(this._currentBounds.height*h),this._setupScreenshotDialog(this._currentBounds)):s/h<1&&(this._currentBounds.height=Math.round(this._currentBounds.width/h),this._setupScreenshotDialog(this._currentBounds))}_setupScreenshotDialog(s){this._resetScreenshotResults(),this._currentBounds=s,this.dialog.querySelector(".region-width").value=s.width,this.dialog.querySelector(".region-height").value=s.height;let h=this.viewer.viewport,p=(this.viewer.world.getItemAt(this.viewer.currentPage()),new y.Rect(s.x,s.y,s.width,s.height)),b=h.viewerElementToViewportRectangle(p),A=h.viewportToImageRectangle(b);const P=Math.max(A.width,A.height)/Math.max(p.width,p.height);let L={width:p.width*P,height:p.height*P},N=!1;if(this._mpp=null,this.dialog.querySelector(".include-scalebar").disabled=!0,this.viewer.world.getItemCount()===1){let ie=this.viewer.world.getItemAt(0).source.mpp;ie&&(this.dialog.querySelector(".region-width-mm").textContent=""+(ie.x/1e3*L.width).toFixed(3),this.dialog.querySelector(".region-height-mm").textContent=""+(ie.y/1e3*L.height).toFixed(3),N=!0,this.dialog.querySelector(".include-scalebar").disabled=!1,this._mpp=ie)}N||this.dialog.querySelectorAll(".region-width-mm, .region-height-mm").forEach(ie=>ie.textContent="??");let Y=this.dialog.querySelector(".select-size");Y.textContent="";let X=L.width,Z=L.height;for(;X>s.width&&Z>s.height;){let ie={w:Math.round(X),h:Math.round(Z),imageBounds:A,scaleFactor:X/L.width},me=document.createElement("option");Y.appendChild(me),me.textContent=`${Math.round(X)} x ${Math.round(Z)}`,me.setAttribute("data-dims",JSON.stringify(ie)),(X>23767||Z>23767||X*Z>268435456)&&me.setAttribute("disabled",!0),X/=2,Z/=2}let pe={w:s.width,h:s.height,imageBounds:A,scaleFactor:s.width/L.width},ne=document.createElement("option");Y.appendChild(ne),ne.textContent=`${Math.round(X)} x ${Math.round(Z)}`,ne.setAttribute("data-dims",JSON.stringify(pe)),this.dialog.classList.remove("hidden")}_resetScreenshotResults(){var s;(s=this.dialog)==null||s.querySelector(".screenshot-results").classList.remove("created","pending")}_setProgress(s,h){if(this.dialog){const p=this.dialog.querySelector("progress");p.value=s,p.max=h,this.dialog.querySelector(".loaded").textContent=s,this.dialog.querySelector(".total").textContent=h}}_createScreenshot(s){let h=s.w,p=s.h,b=s.imageBounds,A=new y.Rect(b.x,b.y,b.width,b.height,b.degrees),P=s.scaleFactor;return new Promise((L,N)=>{try{let Y=y.pixelDensityRatio;h/=Y,p/=Y;const X=document.createElement("div");document.body.appendChild(X),X.style.cssText=`width:${h}px;height:${p}px;position:fixed;left:-${2*h}px;`;let Z=this.viewer.tileSources[this.viewer.currentPage()],pe=this.viewer.world.getItemAt(this.viewer.currentPage()),ne=y({element:X,tileSources:[Z],crossOriginPolicy:this.viewer.crossOriginPolicy,prefixUrl:this.viewer.prefixUrl,immediateRender:!0});ne.viewport.setRotation(this.viewer.viewport.getRotation(!0),!0),ne.addHandler("tile-drawn",ie=>{let me=ie.tiledImage.coverage,de=Object.keys(me),te=de[de.length-1];if(ie.tile.level==te){let he=me[te],ce=Object.values(he).map(Ee=>Object.values(Ee)).flat();this._setProgress(ce.filter(Ee=>Ee).length,ce.length)}}),ne.addHandler("open",()=>{ne.world.getItemAt(0).setRotation(pe.getRotation(!0),!0),ne.world.getItemAt(0).addOnceHandler("fully-loaded-change",me=>{if(this._includeScalebar&&this._mpp){let de=Math.round(1e3*this._scalebarWidth/this._mpp.x*P),te=Math.round(this._scalebarHeight),he=ne.drawer.canvas,ce=he.getContext("2d"),Ee=he.width,Re=he.height;ce.fillRect(Ee-te,Re-te,-de,-te)}ne.drawer.canvas.toBlob(async de=>{Y!=1&&(de=await function(he,ce){const Ee=he.slice(0,33);return new Promise((Re,Ae)=>{const Me=new FileReader;Me.onload=()=>{const Le=new Uint8Array(Me.result),Fe=he.slice(33),Be=He(Le,ce,he.type);Re(new Blob([Be,Fe],{type:he.type}))},Me.readAsArrayBuffer(Ee)})}(de,96*Y)),this.blobURL&&URL.revokeObjectURL(this.blobURL),this.blobURL=URL.createObjectURL(de),L(this.blobURL);let te=ne.element;ne.destroy(),te.remove()})});let ie=ne.viewport.imageToViewportRectangle(A);ne.viewport.fitBounds(ie)})}catch(Y){N(Y)}})}}class tt extends vt{constructor(s,h){super(s);let p=this;this._ps=s,this.compoundPath=new a.CompoundPath({children:[],fillRule:"evenodd"}),this.compoundPath.visible=!1,this.compoundPath.fillColor="black",this.compoundPath.opacity=.3,this.project.toolLayer.addChild(this.compoundPath),this.crosshairTool=new a.Group;let b=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),A=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),P=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),L=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]});this.crosshairTool.addChildren([b,A,P,L]),this.project.toolLayer.addChild(this.crosshairTool),this.crosshairTool.visible=!1,this._aspectHeight=1,this._aspectWidth=1,this._aspectLocked=!1,this.tool.onMouseDown=N=>{this.crosshairTool.visible=!1,this.compoundPath.visible=!0,this.compoundPath.removeChildren(),this.compoundPath.addChild(new a.Path.Rectangle(this._ps.view.bounds)),window.cp=this.compoundPath},this.tool.onMouseDrag=N=>{this.compoundPath.removeChildren(1);let Y=this.getPoint(N);this.compoundPath.addChild(new a.Path.Rectangle(N.downPoint,Y))},this.tool.onMouseMove=N=>{this.crosshairTool.visible=!0,function(Y,X){let Z=Y.view.projectToView(X),pe=Y.view.viewToProject(new a.Point(0,Z.y)),ne=Y.view.viewToProject(new a.Point(Y.view.viewSize.width,Z.y)),ie=Y.view.viewToProject(new a.Point(Z.x,0)),me=Y.view.viewToProject(new a.Point(Z.x,Y.view.viewSize.height));b.segments[0].point=pe,A.segments[0].point=pe,b.segments[1].point=ne,A.segments[1].point=ne,P.segments[0].point=ie,L.segments[0].point=ie,P.segments[1].point=me,L.segments[1].point=me}(p.tool,N.point)},this.tool.onMouseUp=N=>{let Y=this.getPoint(N);this.broadcast("region-selected",new a.Rectangle(N.downPoint,Y))},this.tool.extensions.onKeyDown=function(N){N.key=="escape"&&h.deactivate()},this.extensions.onActivate=()=>{this.crosshairTool.visible=!0,this.compoundPath.visible=!1},this.extensions.onDeactivate=N=>{this.crosshairTool.visible=!1,this.compoundPath.visible=!1}}activate(){this.tool.activate(),this.crosshairTool.visible=!0,this.compoundPath.visible=!1}deactivate(){this.crosshairTool.visible=!1,this.compoundPath.visible=!1}setAspectHeight(s){this._aspectHeight=s}setAspectWidth(s){this._aspectWidth=s}setAspectLocked(s){this._aspectLocked=s}getPoint(s){let h=s.point;if(this._aspectLocked){let p=s.point.subtract(s.downPoint);Math.abs(p.x)>Math.abs(p.y)?h.y=s.downPoint.y+(p.y<0?-1:1)*Math.abs(p.x)*this._aspectHeight/this._aspectWidth:h.x=s.downPoint.x+(p.x<0?-1:1)*Math.abs(p.y)*this._aspectWidth/this._aspectHeight}return h}}const lt={AnnotationToolkit:Ce,AnnotationToolbar:vi,FeatureCollectionUI:Oi,FeatureUI:yi,FileDialog:ki,LayerUI:Bi,PaperOffset:ye,PaperOverlay:F,RotationControlOverlay:xe,ScreenshotOverlay:Ze,AnnotationUITool:dt,ToolBase:vt,BrushTool:ge,DefaultTool:at,EllipseTool:Ft,LinestringTool:ai,PointTool:R,PointTextTool:K,PolygonTool:_t,RasterTool:Ti,RectangleTool:ze,SelectTool:fi,StyleTool:Jt,TransformTool:Ci,WandTool:ni}})(),v})())})(Xi);var Wi=Xi.exports;function Mi($e,Pe){if(Pe>=1)return $e;if($e.startsWith("rgba(")||$e.startsWith("rgb(")){const n=$e.match(/(\d+(?:\.\d+)?)/g);if(n&&n.length>=3){const o=n[0],d=n[1],c=n[2];return`rgba(${o}, ${d}, ${c}, ${Pe})`}}else if($e.startsWith("#")){const n=$e.replace("#",""),o=parseInt(n.substring(0,2),16),d=parseInt(n.substring(2,4),16),c=parseInt(n.substring(4,6),16);return`rgba(${o}, ${d}, ${c}, ${Pe})`}return $e}const Ni={documentProperties:[{key:"id",label:"ID",formatter:$e=>String($e)},{key:"elementCount",label:"Elements",formatter:$e=>String($e)},{key:"totalPoints",label:"Points/Vertices",formatter:$e=>String($e)},{key:"types",label:"Types",formatter:$e=>Array.isArray($e)&&$e.length>0?$e.join(", "):"N/A",show:!0},{key:"filteredCount",label:"Filtered",formatter:($e,Pe)=>Pe.filteredCount!==void 0&&Pe.filteredCount>0?`${Pe.filteredCount} element(s) (${Pe.filteredPoints||0} points) skipped`:"None",show:!0}],showFetchedSection:!0,showProvidedSection:!0,showTotalSection:!0,headerText:"Annotation Information"},Ji=pt.forwardRef(({imageInfo:$e,annotations:Pe=[],annotationIds:n=[],apiBaseUrl:o,onViewerReady:d,onAnnotationClick:c,defaultAnnotationColor:v="#ff0000",strokeWidth:y=2,osdOptions:a={},className:w="",height:_="600px",width:T="100%",showAnnotationInfo:I=!1,annotationInfoConfig:k,maxPointsPerAnnotation:G=1e4,maxTotalPoints:W=1e5,fetchFn:O,apiHeaders:ee,showAnnotationControls:ve=!1,defaultAnnotationOpacity:we=1},ot)=>{var At,St;const Ge=pt.useRef(null),[je,xt]=pt.useState(null),[Q,vt]=pt.useState(null),[Ne,dt]=pt.useState(null),[ke,Dt]=pt.useState([]),[ut,wt]=pt.useState([]),jt=pt.useRef(null),at=pt.useRef(""),[Ot,Jt]=pt.useState(we),kt=pt.useRef(!0);pt.useEffect(()=>(kt.current=!0,()=>{kt.current=!1}),[]);const[ei,ti]=pt.useState(!0);pt.useEffect(()=>{if(!Ge.current)return;const C=new IntersectionObserver(z=>{z.forEach(se=>{se.isIntersecting&&se.intersectionRatio>.1?ti(!0):ti(!1)})},{threshold:.1,rootMargin:"50px"});return C.observe(Ge.current),()=>{Ge.current&&C.unobserve(Ge.current)}},[]);const mt=pt.useCallback(C=>{if(!C||!C.view)return!1;const z=C.view;return!(z._transformBounds===null||z._transformBounds===void 0||typeof C.view.draw!="function")},[]),Yt=pt.useCallback(C=>{if(kt.current){if(!mt(C)){console.warn("Paper.js not fully initialized, skipping draw operation");return}try{C.view&&typeof C.view.draw=="function"&&C.view.draw()}catch(z){z instanceof Error&&z.message.includes("_transformBounds")?console.warn("Paper.js draw operation skipped (component likely unmounting or hidden)"):console.error("Error drawing Paper.js view:",z)}}},[mt]),Xe=pt.useMemo(()=>ke.map(C=>`${C.id}:${C.left}:${C.top}:${C.width}:${C.height}`).join("|"),[ke]),ni=pt.useRef(`osd-viewer-${Math.random().toString(36).substr(2,9)}`),Ve=pt.useRef(!1),Zt=pt.useRef(d);pt.useEffect(()=>{Zt.current=d},[d]);const Qt=pt.useRef(c);pt.useEffect(()=>{Qt.current=c},[c]);const It=pt.useMemo(()=>$e.dziUrl||`${$e.imageId}-${$e.baseUrl}`,[$e.dziUrl,$e.imageId,$e.baseUrl]),Xt=pt.useMemo(()=>{var C;return Array.isArray(Pe)?JSON.stringify(Pe.map(z=>({id:z.id,left:z.left,top:z.top,width:z.width,height:z.height}))):Pe&&typeof Pe=="object"&&"type"in Pe&&Pe.type==="FeatureCollection"?JSON.stringify(((C=Pe.features)==null?void 0:C.map(z=>({id:z.id})))||[]):"[]"},[Pe]),We=pt.useMemo(()=>!Array.isArray(Pe)&&Pe&&typeof Pe=="object"&&"type"in Pe&&Pe.type==="FeatureCollection"?Pe.features.map(C=>{var z,se,ye,ge;if(C.geometry.type==="Polygon"){const Ie=C.geometry.coordinates[0];if(Ie.length>=4){const[fe,nt]=Ie[0],[Ct,,,yt]=Ie[2],rt=Ct-fe,Lt=yt-nt;return{id:C.id||((z=C.properties)==null?void 0:z.id),left:fe,top:nt,width:rt,height:Lt,color:((se=C.properties)==null?void 0:se.color)||v,group:(ye=C.properties)==null?void 0:ye.group,label:(ge=C.properties)==null?void 0:ge.label,...C.properties}}}return null}).filter(C=>C!==null):Array.isArray(Pe)?[...Pe]:[],[Xt,v]);pt.useEffect(()=>{if(!Ge.current||!ei||Ve.current)return;let C=null,z=null,se=null;const ye=setTimeout(()=>{if(!(!kt.current||!Ge.current))try{Ve.current=!0,Ge.current.id=ni.current;const ge={id:ni.current,prefixUrl:"https://openseadragon.github.io/openseadragon/images/",maxImageCacheCount:1e3,crossOriginPolicy:"Anonymous",autoHideControls:!1,debugMode:!1,showNavigator:!0,showZoomControl:!0,showHomeControl:!0,showFullPageControl:!0,...a};if(C=sn(ge),z=C.createPaperOverlay(),kt.current&&vt(z),se=new Wi.AnnotationToolkit(C,{overlay:z}),kt.current&&dt(se),!C)return;if(C.addHandler("open-failed",Ie=>{console.warn("OpenSeadragon: Open failed",Ie)}),C.addHandler("open",Ie=>{!kt.current||!C||(console.log("OpenSeadragon: Image opened",Ie),xt(C),Zt.current&&Zt.current(C))}),C.world.addHandler("add-item",Ie=>{if(!kt.current)return;const fe=Ie;console.log("Tiled image added:",fe.item),jt.current=fe.item}),$e.dziUrl)C.open($e.dziUrl);else{if(!$e.imageId||!$e.width||!$e.height||!$e.tileWidth||!$e.levels||!$e.baseUrl){console.error("SlideViewer: If dziUrl is not provided, all manual fields (imageId, width, height, tileWidth, levels, baseUrl) are required");return}const Ie={width:$e.width,height:$e.height,tileSize:$e.tileWidth,minLevel:0,maxLevel:$e.levels-1,getTileUrl:(fe,nt,Ct)=>`${$e.baseUrl}/wsi/files/tile/${$e.imageId}/${fe}/${nt}/${Ct}`};C&&C.addTiledImage({tileSource:Ie,success:()=>{!kt.current||!C||(xt(C),Zt.current&&Zt.current(C))}})}}catch(ge){console.error("Error initializing SlideViewer:",ge),Ve.current=!1}},100);return()=>{if(clearTimeout(ye),se)try{se.destroy()}catch(ge){console.warn("Error destroying annotation toolkit:",ge)}if(z)try{z.destroy()}catch(ge){console.warn("Error destroying paper overlay:",ge)}if(C)try{if(typeof C.isDestroyed=="boolean"&&C.isDestroyed)return;C.destroy()}catch(ge){console.warn("Error destroying OpenSeadragon viewer:",ge)}Ve.current=!1}},[It,ei,a]),pt.useEffect(()=>{if(!kt.current)return;if(!n||n.length===0||!o){Dt(z=>z.length===0?z:[]),wt(z=>z.length===0?z:[]);return}(async()=>{try{console.log(`Fetching ${n.length} annotation(s) from DSA API...`);const z=O||fetch,se=n.map(async rt=>{const Lt=`${o}/annotation/${rt}`;console.log(`Fetching annotation ${rt} from: ${Lt}`);const R={};ee&&(R.headers=ee);const B=await z(Lt,R);if(!B.ok)return console.warn(`Failed to fetch annotation ${rt}:`,B.statusText,B.status),null;const V=await B.json();return console.log(`Successfully fetched annotation ${rt}:`,V),V}),ye=await Promise.all(se);if(!kt.current){console.log("Component unmounted during annotation fetch, skipping state update");return}const ge=[];let Ie=0,fe=0;const nt=ye.filter(rt=>rt!=null).map((rt,Lt)=>{var Ft;const R=n[Lt],B=new Set,V=[];let K=0,Te=0,ze=0,ft=[];if(rt&&typeof rt=="object"){const et=rt;et.elements&&Array.isArray(et.elements)?ft=et.elements:(Ft=et.annotation)!=null&&Ft.elements&&(ft=et.annotation.elements)}for(const et of ft)if(et&&typeof et=="object"){const _t=et;if(_t.type&&B.add(_t.type),_t.type==="rectangle"&&_t.x!==void 0&&_t.y!==void 0&&_t.width!==void 0&&_t.height!==void 0)4>G?(Te++,ze+=4,console.warn(`Skipping rectangle annotation ${_t.group||V.length} in document ${R}: has 4 points (exceeds limit of ${G})`)):(K+=4,V.push({id:_t.group||V.length,left:_t.x,top:_t.y,width:_t.width,height:_t.height,color:_t.lineColor||v,group:_t.group,label:_t.label,annotationType:"rectangle",element:_t}));else if(_t.type==="polyline"&&_t.points&&_t.points.length>=2){const Et=_t.points.length;if(Et>G)Te++,ze+=Et,console.warn(`Skipping polyline annotation ${_t.group||V.length} in document ${R}: has ${Et} points (exceeds limit of ${G})`);else{K+=Et;const ai=_t.points.map(vi=>vi[0]),li=_t.points.map(vi=>vi[1]),fi=Math.min(...ai),mi=Math.min(...li),Ci=Math.max(...ai),Ei=Math.max(...li),Ti=Ci-fi,Si=Ei-mi;V.push({id:_t.group||V.length,left:fi,top:mi,width:Ti,height:Si,color:_t.lineColor||v,group:_t.group,label:_t.label,annotationType:"polyline",points:_t.points,closed:_t.closed,fillColor:_t.fillColor,element:_t})}}}return ge.push({id:R,elementCount:V.length,totalPoints:K,types:Array.from(B),filteredCount:Te>0?Te:void 0,filteredPoints:ze>0?ze:void 0}),Ie+=Te,fe+=ze,V}).flat();let Ct=nt;const yt=nt.reduce((rt,Lt)=>Lt.annotationType==="polyline"&&Lt.points?rt+Lt.points.length:rt+4,0);if(yt>W){console.warn(`Total points (${yt}) exceeds limit (${W}). Filtering annotations starting from largest ones...`);const rt=nt.map(R=>({annotation:R,pointCount:R.annotationType==="polyline"&&R.points?R.points.length:4}));rt.sort((R,B)=>B.pointCount-R.pointCount);let Lt=0;Ct=[];for(const{annotation:R,pointCount:B}of rt)Lt+B<=W?(Ct.push(R),Lt+=B):console.warn(`Skipping annotation ${R.id}: adding ${B} points would exceed total limit (${Lt+B} > ${W})`);console.warn(`Filtered annotations: ${nt.length} → ${Ct.length} (${nt.length-Ct.length} skipped)`)}if(Ie>0&&console.warn(`Annotation document(s) ${n.join(", ")}: ${Ie} annotation(s) filtered due to per-annotation point limits (${fe} total points skipped)`),console.log(`Parsed ${Ct.length} annotation feature(s) from ${n.length} annotation document(s)`),!kt.current){console.log("Component unmounted after annotation parsing, skipping state update");return}Dt(Ct),wt(ge)}catch(z){console.error("Error fetching annotations:",z),kt.current&&Dt([])}})()},[n?JSON.stringify(n):"",o||"",v,G,W]),pt.useEffect(()=>{if(!je||!Q||!Ne)return;const C=Q.paperScope;if(!C||!C.project)return;const z=jt.current;if(!z||typeof z.addPaperItem!="function")return;const se=[...We,...ke],ye=`${Xt}:${Xe}`;if(at.current!==ye){if(at.current=ye,console.log(`Rendering ${se.length} total annotation(s)`),se.length===0){try{const ge=Ne.getFeatures();if(ge&&Array.isArray(ge))for(const Ie of ge)try{Ie.remove()}catch(fe){console.warn("Error removing feature:",fe)}}catch(ge){console.warn("Could not clear existing features:",ge)}return}console.log(`About to render ${se.length} annotations, tiledImage:`,z);try{if(z.paperItems&&Array.isArray(z.paperItems)&&z.paperItems.length>0){const ge=[...z.paperItems].reverse();for(const Ie of ge)try{Ie&&typeof Ie.remove=="function"&&Ie.remove()}catch{}}try{const ge=Ne.getFeatures();if(ge&&Array.isArray(ge)&&ge.length>0){const Ie=ge.filter(fe=>fe!=null&&typeof fe.remove=="function");for(const fe of Ie)try{fe.remove()}catch{}}}catch{}}catch(ge){console.warn("Error clearing existing annotations:",ge)}for(const ge of se)try{let Ie;if(ge.annotationType==="polyline"&&ge.points&&Array.isArray(ge.points)){const fe=new C.Path,nt=ge.color||v;fe.strokeColor=Mi(nt,Ot),fe.strokeWidth=y;const Ct=ge.fillColor||"rgba(0, 0, 0, 0)";fe.fillColor=Mi(Ct,Ot),ge.points.forEach((yt,rt)=>{rt===0?fe.moveTo(yt[0],yt[1]):fe.lineTo(yt[0],yt[1])}),ge.closed&&fe.closePath(),Ie=fe}else{const fe=new C.Rectangle(ge.left,ge.top,ge.width,ge.height),nt=new C.Path.Rectangle(fe),Ct=ge.color||v;nt.strokeColor=Mi(Ct,Ot),nt.strokeWidth=y,nt.fillColor=Mi("rgba(0, 0, 0, 0)",Ot),Ie=nt}if(Ie.data={annotation:ge},Ie.annotationId=ge.id,Qt.current&&(Ie.onClick=fe=>{var nt;(nt=Qt.current)==null||nt.call(Qt,ge)}),Ie.style={rescale:{strokeWidth:y}},z.addPaperItem(Ie),Ie&&typeof Ie=="object")try{Wi.AnnotationToolkit.registerFeature(Ie)}catch(fe){console.warn("Failed to register feature with toolkit:",fe)}}catch(Ie){console.error(`Error rendering annotation ${ge.id}:`,Ie,ge)}Yt(C),console.log(`Finished rendering ${se.length} annotations`)}},[je,Q,Ne,Xt,Xe,y,Ot]),pt.useEffect(()=>{var z;if(!je||!Q||!Ne)return;const C=Q.paperScope;if(!(!C||!C.project))try{const se=Ne.getFeatures();if(se&&Array.isArray(se)){for(const ye of se)try{if(ye&&typeof ye=="object"){const ge=ye,Ie=(z=ge.data)==null?void 0:z.annotation;if(Ie){const fe=Ie.color||v,nt=Ie.fillColor||"rgba(0, 0, 0, 0)";ge.strokeColor&&(ge.strokeColor=Mi(fe,Ot)),ge.fillColor&&(ge.fillColor=Mi(nt,Ot))}}}catch(ge){console.warn("Error updating annotation opacity:",ge)}Yt(C)}}catch(se){console.warn("Could not update annotation opacity:",se)}},[Ot,je,Q,Ne,v]);const Rt=pt.useMemo(()=>({documentProperties:(k==null?void 0:k.documentProperties)??Ni.documentProperties??[],showFetchedSection:(k==null?void 0:k.showFetchedSection)??Ni.showFetchedSection??!0,showProvidedSection:(k==null?void 0:k.showProvidedSection)??Ni.showProvidedSection??!0,showTotalSection:(k==null?void 0:k.showTotalSection)??Ni.showTotalSection??!0,headerText:(k==null?void 0:k.headerText)??Ni.headerText??"Annotation Information"}),[k]),Bt={width:typeof T=="number"?`${T}px`:T,height:typeof _=="number"?`${_}px`:_};return ct.jsxs("div",{ref:ot,className:`bdsa-slide-viewer ${w}`,style:Bt,children:[ct.jsx("div",{ref:Ge,className:"bdsa-slide-viewer__container"}),(I||ve)&&ct.jsxs("div",{className:"bdsa-slide-viewer__sidebar",children:[ve&&ct.jsxs("div",{className:"bdsa-slide-viewer__controls",children:[ct.jsx("div",{className:"bdsa-slide-viewer__controls-header",children:ct.jsx("strong",{children:"Annotation Controls"})}),ct.jsxs("div",{className:"bdsa-slide-viewer__controls-section",children:[ct.jsxs("div",{className:"bdsa-slide-viewer__controls-label",children:["Opacity: ",Math.round(Ot*100),"%"]}),ct.jsx("input",{type:"range",min:"0",max:"1",step:"0.01",value:Ot,onChange:C=>Jt(parseFloat(C.target.value)),className:"bdsa-slide-viewer__opacity-slider"})]})]}),I&&(Array.isArray(Pe)&&Pe.length>0||!Array.isArray(Pe)&&Pe&&"type"in Pe&&Pe.type==="FeatureCollection"&&((At=Pe.features)==null?void 0:At.length)>0||ut.length>0||ke.length>0)&&ct.jsxs("div",{className:"bdsa-slide-viewer__annotation-info",children:[ct.jsx("div",{className:"bdsa-slide-viewer__annotation-info-header",children:ct.jsx("strong",{children:Rt.headerText})}),Rt.showFetchedSection&&ut.length>0&&ct.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[ct.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Fetched from DSA API:"}),ut.map(C=>ct.jsx("div",{className:"bdsa-slide-viewer__annotation-info-item",children:Rt.documentProperties.filter(z=>z.show!==!1).map(z=>{const se=C[z.key],ye=z.formatter?z.formatter(se,{...C,totalPoints:C.totalPoints??0}):String(se??"N/A");return ct.jsxs("div",{children:[z.label,": ",ye]},z.key)})},C.id))]}),Rt.showProvidedSection&&(Array.isArray(Pe)&&Pe.length>0||!Array.isArray(Pe)&&Pe&&Pe.type==="FeatureCollection")&&ct.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[ct.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Provided Annotations:"}),ct.jsx("div",{className:"bdsa-slide-viewer__annotation-info-item",children:Array.isArray(Pe)?ct.jsxs("div",{children:["Count: ",Pe.length]}):ct.jsxs("div",{children:["GeoJSON FeatureCollection with ",((St=Pe.features)==null?void 0:St.length)||0," features"]})})]}),Rt.showTotalSection&&ct.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[ct.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Total Rendered:"}),ct.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-item",children:[ke.length+(Array.isArray(Pe)?Pe.length:0)," annotation(s)"]})]})]})]})]})});Ji.displayName="SlideViewer";const Ki=pt.forwardRef(({imageId:$e,apiBaseUrl:Pe,limit:n=50,fetchFn:o,apiHeaders:d,onAnnotationsLoaded:c,onError:v,showDebugPanel:y=!1,className:a="",children:w},_)=>{const[T,I]=pt.useState([]),[k,G]=pt.useState(!1),[W,O]=pt.useState(null),[ee,ve]=pt.useState(null);pt.useEffect(()=>{if(!$e||!Pe){I([]),G(!1),O(null),ve(null);return}(async()=>{G(!0),O(null),ve(null);try{const Ge=new URLSearchParams({itemId:$e,limit:String(n),offset:"0",sort:"lowerName",sortdir:"1"}),je=`${Pe}/annotation?${Ge.toString()}`,xt=o||fetch,Q={};d&&(Q.headers=d),console.log(`AnnotationManager: Fetching annotations from: ${je}`);const vt=await xt(je,Q);if(!vt.ok)throw new Error(`Failed to fetch annotations: ${vt.status} ${vt.statusText}`);const Ne=await vt.json();console.log("AnnotationManager: API response:",Ne),y&&ve(JSON.stringify(Ne,null,2));let dt=[];Array.isArray(Ne)?(dt=Ne,console.log(`AnnotationManager: Parsed ${dt.length} annotation(s) from array response`)):Ne&&Array.isArray(Ne.data)?(dt=Ne.data,console.log(`AnnotationManager: Parsed ${dt.length} annotation(s) from paginated response`)):Ne&&typeof Ne=="object"?(dt=[Ne],console.log("AnnotationManager: Parsed 1 annotation from single object response")):console.warn("AnnotationManager: Unexpected response format:",typeof Ne,Ne),I(dt),console.log(`AnnotationManager: Fetched ${dt.length} annotation(s) from API`),dt.length>0&&console.log("AnnotationManager: Annotation IDs:",dt.map(ke=>ke._id)),c&&c(dt)}catch(Ge){const je=Ge instanceof Error?Ge:new Error(String(Ge));O(je),ve(null),v&&v(je)}finally{G(!1)}})()},[$e,Pe,n,o,d,c,v,y]);const we=pt.useMemo(()=>({annotations:T,loading:k,error:W,annotationIds:T.map(ot=>ot._id)}),[T,k,W]);return ct.jsxs("div",{ref:_,className:`bdsa-annotation-manager ${a}`,children:[w&&typeof w=="function"?w(we):w,y&&ee&&ct.jsxs("div",{className:"bdsa-annotation-manager__debug-panel",children:[ct.jsx("div",{className:"bdsa-annotation-manager__debug-panel-header",children:ct.jsx("strong",{children:"Raw API Response (Debug)"})}),ct.jsx("pre",{className:"bdsa-annotation-manager__debug-panel-content",children:ee})]})]})});Ki.displayName="AnnotationManager";const Qi=pt.forwardRef(({apiBaseUrl:$e,fetchFn:Pe,apiHeaders:n,onResourceSelect:o,onSelectionChange:d,showCollections:c=!0,rootId:v,rootType:y,startCollectionId:a,startFolderId:w,parentFolderId:_,foldersPerPage:T=50,className:I="",renderCollection:k,renderFolder:G},W)=>{const[O,ee]=pt.useState([]),[ve,we]=pt.useState(null),[ot,Ge]=pt.useState(null),[je,xt]=pt.useState({}),[Q,vt]=pt.useState({}),[Ne,dt]=pt.useState(new Set),[ke,Dt]=pt.useState(new Set),[ut,wt]=pt.useState(null),[jt,at]=pt.useState(!1),[Ot,Jt]=pt.useState({}),[kt,ei]=pt.useState(null),ti=pt.useCallback(()=>{const We={};return n&&(We.headers=n),We},[n]),mt=pt.useCallback(async()=>{if(!$e){ei(new Error("API base URL is required"));return}at(!0),ei(null);try{const We=`${$e}/collection`,Rt=Pe||fetch,Bt=ti(),At=await Rt(We,Bt);if(!At.ok)throw new Error(`Failed to fetch collections: ${At.status} ${At.statusText}`);const St=await At.json(),C=Array.isArray(St)?St:St.items||[];ee(C),a&&C.some(z=>z._id===a)&&(dt(new Set([a])),await Yt(C.find(z=>z._id===a)))}catch(We){const Rt=We instanceof Error?We:new Error("Unknown error loading collections");ei(Rt),console.error("Error loading collections:",Rt)}finally{at(!1)}},[$e,Pe,ti,a]),Yt=pt.useCallback(async(We,Rt=!1)=>{if(!$e||!(We!=null&&We._id))return;const Bt=Rt&&Q[We._id]?Q[We._id].offset:0;Jt(At=>({...At,[We._id]:!0}));try{const At=new URLSearchParams({parentType:"collection",parentId:We._id});T>0&&(At.append("limit",String(T)),At.append("offset",String(Bt)));const St=`${$e}/folder?${At.toString()}`,C=Pe||fetch,z=ti(),se=await C(St,z);if(!se.ok){console.warn(`Failed to fetch folders for collection ${We._id}:`,se.statusText);return}const ye=await se.json();let ge=[],Ie=!1;Array.isArray(ye)?(ge=ye,Ie=T>0&&ye.length===T):(ge=ye.items||[],Ie=T>0&&ye.total>Bt+ge.length),xt(fe=>({...fe,[We._id]:Rt?[...fe[We._id]||[],...ge]:ge})),T>0&&vt(fe=>({...fe,[We._id]:{offset:Bt+ge.length,hasMore:Ie}})),!Rt&&w&&ge.some(fe=>fe._id===w)&&(Dt(fe=>new Set(fe).add(w)),await Xe(ge.find(fe=>fe._id===w),!0))}catch(At){console.error(`Error loading folders for collection ${We._id}:`,At)}finally{Jt(At=>({...At,[We._id]:!1}))}},[$e,Pe,ti,w,T,Q]),Xe=pt.useCallback(async(We,Rt=!1)=>{if(!$e||!(We!=null&&We._id))return;const Bt=Rt&&Q[We._id]?Q[We._id].offset:0;Jt(At=>({...At,[We._id]:!0}));try{const At=new URLSearchParams({parentType:"folder",parentId:We._id});T>0&&(At.append("limit",String(T)),At.append("offset",String(Bt)));const St=`${$e}/folder?${At.toString()}`,C=Pe||fetch,z=ti(),se=await C(St,z);if(!se.ok){console.warn(`Failed to fetch subfolders for folder ${We._id}:`,se.statusText);return}const ye=await se.json();let ge=[],Ie=!1;Array.isArray(ye)?(ge=ye,Ie=T>0&&ye.length===T):(ge=ye.items||[],Ie=T>0&&ye.total>Bt+ge.length),xt(fe=>({...fe,[We._id]:Rt?[...fe[We._id]||[],...ge]:ge})),T>0&&vt(fe=>({...fe,[We._id]:{offset:Bt+ge.length,hasMore:Ie}}))}catch(At){console.error(`Error loading subfolders for folder ${We._id}:`,At)}finally{Jt(At=>({...At,[We._id]:!1}))}},[$e,Pe,ti,T,Q]),ni=pt.useCallback(async()=>{if(!(!$e||!v||!y)){at(!0),ei(null);try{const We=y==="collection"?`${$e}/collection/${v}`:`${$e}/folder/${v}`,Rt=Pe||fetch,Bt=ti(),At=await Rt(We,Bt);if(!At.ok)throw new Error(`Failed to fetch ${y}: ${At.status} ${At.statusText}`);const St=await At.json();if(y==="collection"){const C=St;we(C),dt(new Set([v])),await Yt(C)}else{const C=St;Ge(C),Dt(new Set([v])),await Xe(C)}}catch(We){const Rt=We instanceof Error?We:new Error(`Unknown error loading ${y}`);ei(Rt),console.error(`Error loading root ${y}:`,Rt)}finally{at(!1)}}},[$e,v,y,Pe,ti,Yt,Xe]),Ve=pt.useCallback(async We=>{Ne.has(We._id)?dt(Bt=>{const At=new Set(Bt);return At.delete(We._id),At}):(dt(Bt=>new Set(Bt).add(We._id)),await Yt(We,!1))},[Ne,Yt]),Zt=pt.useCallback(async We=>{ke.has(We._id)?Dt(Bt=>{const At=new Set(Bt);return At.delete(We._id),At}):(Dt(Bt=>new Set(Bt).add(We._id)),await Xe(We,!1))},[ke,Xe]),Qt=pt.useCallback((We,Rt)=>{const Bt={...We,type:Rt};wt(Bt),o==null||o(Bt),d==null||d(Bt)},[o,d]);pt.useEffect(()=>{v&&y&&$e?ni():c&&$e?mt():c&&!$e&&(ei(new Error("API base URL is required")),at(!1))},[v,y,c,$e,mt,ni]);const It=pt.useCallback(We=>{var St;const Rt=Ne.has(We._id),Bt=je[We._id]||[],At=(ut==null?void 0:ut._id)===We._id&&(ut==null?void 0:ut.type)==="collection";return k?k(We,Rt,()=>Ve(We)):ct.jsxs("div",{className:"bdsa-folder-browser__collection",children:[ct.jsxs("div",{className:`bdsa-folder-browser__folder-header ${At?"selected":""}`,onClick:()=>Ve(We),onDoubleClick:()=>Qt(We,"collection"),children:[ct.jsx("span",{className:`bdsa-folder-browser__folder-icon ${Rt?"expanded":""}`,children:Rt?"📂":"📁"}),ct.jsx("span",{className:"bdsa-folder-browser__folder-name",children:We.name}),ct.jsx("span",{className:"bdsa-folder-browser__folder-type",children:"Collection"})]}),Rt&&ct.jsxs("div",{className:"bdsa-folder-browser__folder-contents",children:[Bt.map(C=>Xt(C,1)),T>0&&((St=Q[We._id])==null?void 0:St.hasMore)&&ct.jsx("div",{className:"bdsa-folder-browser__load-more",children:ct.jsx("button",{className:"bdsa-folder-browser__load-more-btn",onClick:()=>Yt(We,!0),disabled:Ot[We._id],children:Ot[We._id]?"Loading...":"Load More"})})]})]},We._id)},[Ne,je,ut,k,Ve,Qt,T,Q,Ot,Yt]),Xt=pt.useCallback((We,Rt=0)=>{var C;const Bt=ke.has(We._id),At=je[We._id]||[],St=(ut==null?void 0:ut._id)===We._id&&(ut==null?void 0:ut.type)==="folder";return G?G(We,Rt,Bt,()=>Zt(We)):ct.jsxs("div",{className:"bdsa-folder-browser__folder",style:{marginLeft:`${Rt*20}px`},children:[ct.jsxs("div",{className:`bdsa-folder-browser__folder-header ${St?"selected":""}`,onClick:()=>Zt(We),onDoubleClick:()=>Qt(We,"folder"),children:[ct.jsx("span",{className:`bdsa-folder-browser__folder-icon ${Bt?"expanded":""}`,children:Bt?"📂":"📁"}),ct.jsx("span",{className:"bdsa-folder-browser__folder-name",children:We.name}),ct.jsx("span",{className:"bdsa-folder-browser__folder-type",children:"Folder"})]}),Bt&&ct.jsxs("div",{className:"bdsa-folder-browser__folder-contents",children:[At.map(z=>Xt(z,Rt+1)),T>0&&((C=Q[We._id])==null?void 0:C.hasMore)&&ct.jsx("div",{className:"bdsa-folder-browser__load-more",style:{marginLeft:`${(Rt+1)*20}px`},children:ct.jsx("button",{className:"bdsa-folder-browser__load-more-btn",onClick:()=>Xe(We,!0),disabled:Ot[We._id],children:Ot[We._id]?"Loading...":"Load More"})})]})]},We._id)},[ke,je,ut,G,Zt,Qt,T,Q,Ot,Xe]);return ct.jsxs("div",{ref:W,className:`bdsa-folder-browser ${I}`,children:[jt&&ct.jsx("div",{className:"bdsa-folder-browser__loading",children:ct.jsx("span",{children:v&&y?`Loading ${y}...`:"Loading collections..."})}),kt&&ct.jsxs("div",{className:"bdsa-folder-browser__error",children:[ct.jsx("span",{children:kt.message}),ct.jsx("button",{onClick:()=>{v&&y?ni():mt()},children:"Retry"})]}),!jt&&!kt&&ct.jsxs(ct.Fragment,{children:[v&&y==="collection"&&ve&&ct.jsx("div",{className:"bdsa-folder-browser__collections",children:It(ve)}),v&&y==="folder"&&ot&&ct.jsx("div",{className:"bdsa-folder-browser__collections",children:Xt(ot,0)}),!v&&c&&ct.jsx("div",{className:"bdsa-folder-browser__collections",children:O.length===0?ct.jsx("div",{className:"bdsa-folder-browser__empty",children:ct.jsx("span",{children:"No collections found"})}):O.map(We=>It(We))})]})]})});Qi.displayName="FolderBrowser";exports.AnnotationManager=Ki;exports.Button=qi;exports.Card=Zi;exports.FolderBrowser=Qi;exports.SlideViewer=Ji;
1708
+ </style>`));const p=oi(c);this.viewer.container.appendChild(p),p.addEventListener("mousemove",b=>b.stopPropagation()),p.querySelectorAll(".close").forEach(b=>b.addEventListener("click",()=>this.deactivate())),p.querySelectorAll(".rect").forEach(b=>b.addEventListener("click",()=>this._startRegion())),p.querySelectorAll(".cancel-screenshot").forEach(b=>b.addEventListener("click",()=>p.querySelector(".screenshot-results").classList.remove("pending","created"))),p.querySelectorAll(".create-screenshot").forEach(b=>b.addEventListener("click",()=>{const C=p.querySelector(".select-size"),P=C.options[C.selectedIndex],M=JSON.parse(P.getAttribute("data-dims"));this.dialog.querySelector(".screenshot-results").classList.add("pending"),this._createScreenshot(M).then(z=>{const J=this.dialog.querySelector(".screenshot-results");J.classList.remove("pending"),J.classList.add("created"),this.dialog.querySelector(".screenshot-link").href=this.blobURL}).catch(z=>{alert("There was a problem creating the screenshot. "+z)})})),p.querySelectorAll("button.download-screenshot").forEach(b=>b.addEventListener("click",()=>{p.querySelectorAll("a.download-screenshot").dispatchEvent(new Event("change"))})),p.querySelectorAll(".aspect-width").forEach(b=>{b.addEventListener("change",C=>this.tool.setAspectWidth(Number(C.target.value))),b.dispatchEvent(new Event("change"))}),p.querySelectorAll(".aspect-height").forEach(b=>{b.addEventListener("change",C=>this.tool.setAspectHeight(Number(C.target.value))),b.dispatchEvent(new Event("change"))}),p.querySelectorAll(".lock-aspect-ratio").forEach(b=>{b.addEventListener("change",C=>this.tool.setAspectLocked(C.target.checked)),b.dispatchEvent(new Event("change"))}),p.querySelectorAll(".apply-aspect-ratio").forEach(b=>b.addEventListener("click",C=>this._applyAspectRatio())),p.querySelectorAll(".region-dim").forEach(b=>b.addEventListener("change",()=>this._updateROI())),p.querySelectorAll(".scalebar-width").forEach(b=>{b.addEventListener("change",C=>this._scalebarWidth=Number(C.target.value),this._resetScreenshotResults()),b.dispatchEvent(new Event("change"))}),p.querySelectorAll(".scalebar-height").forEach(b=>{b.addEventListener("change",C=>this._scalebarHeight=Number(C.target.value),this._resetScreenshotResults()),b.dispatchEvent(new Event("change"))}),p.querySelectorAll(".include-scalebar").forEach(b=>{b.addEventListener("change",C=>{this._includeScalebar=C.target.checked;let P=p.querySelector(".scalebar-opts");this._includeScalebar?P.classList.remove("hidden"):P.classList.add("hidden"),this._resetScreenshotResults()}),b.dispatchEvent(new Event("change"))}),this.dialog=p}_updateROI(){let s=this.dialog.querySelector(".region-width").value,c=this.dialog.querySelector(".region-height").value;this._currentBounds.width=Number(s),this._currentBounds.height=Number(c),this._setupScreenshotDialog(this._currentBounds),this.dialog.querySelector(".lock-aspect-ratio").checked&&this._applyAspectRatio()}_applyAspectRatio(){let s=this._currentBounds.width/this._currentBounds.height,c=this.tool._aspectWidth/this.tool._aspectHeight;s/c>1?(this._currentBounds.width=Math.round(this._currentBounds.height*c),this._setupScreenshotDialog(this._currentBounds)):s/c<1&&(this._currentBounds.height=Math.round(this._currentBounds.width/c),this._setupScreenshotDialog(this._currentBounds))}_setupScreenshotDialog(s){this._resetScreenshotResults(),this._currentBounds=s,this.dialog.querySelector(".region-width").value=s.width,this.dialog.querySelector(".region-height").value=s.height;let c=this.viewer.viewport,p=(this.viewer.world.getItemAt(this.viewer.currentPage()),new y.Rect(s.x,s.y,s.width,s.height)),b=c.viewerElementToViewportRectangle(p),C=c.viewportToImageRectangle(b);const P=Math.max(C.width,C.height)/Math.max(p.width,p.height);let M={width:p.width*P,height:p.height*P},z=!1;if(this._mpp=null,this.dialog.querySelector(".include-scalebar").disabled=!0,this.viewer.world.getItemCount()===1){let ie=this.viewer.world.getItemAt(0).source.mpp;ie&&(this.dialog.querySelector(".region-width-mm").textContent=""+(ie.x/1e3*M.width).toFixed(3),this.dialog.querySelector(".region-height-mm").textContent=""+(ie.y/1e3*M.height).toFixed(3),z=!0,this.dialog.querySelector(".include-scalebar").disabled=!1,this._mpp=ie)}z||this.dialog.querySelectorAll(".region-width-mm, .region-height-mm").forEach(ie=>ie.textContent="??");let J=this.dialog.querySelector(".select-size");J.textContent="";let X=M.width,Y=M.height;for(;X>s.width&&Y>s.height;){let ie={w:Math.round(X),h:Math.round(Y),imageBounds:C,scaleFactor:X/M.width},ve=document.createElement("option");J.appendChild(ve),ve.textContent=`${Math.round(X)} x ${Math.round(Y)}`,ve.setAttribute("data-dims",JSON.stringify(ie)),(X>23767||Y>23767||X*Y>268435456)&&ve.setAttribute("disabled",!0),X/=2,Y/=2}let pe={w:s.width,h:s.height,imageBounds:C,scaleFactor:s.width/M.width},ne=document.createElement("option");J.appendChild(ne),ne.textContent=`${Math.round(X)} x ${Math.round(Y)}`,ne.setAttribute("data-dims",JSON.stringify(pe)),this.dialog.classList.remove("hidden")}_resetScreenshotResults(){var s;(s=this.dialog)==null||s.querySelector(".screenshot-results").classList.remove("created","pending")}_setProgress(s,c){if(this.dialog){const p=this.dialog.querySelector("progress");p.value=s,p.max=c,this.dialog.querySelector(".loaded").textContent=s,this.dialog.querySelector(".total").textContent=c}}_createScreenshot(s){let c=s.w,p=s.h,b=s.imageBounds,C=new y.Rect(b.x,b.y,b.width,b.height,b.degrees),P=s.scaleFactor;return new Promise((M,z)=>{try{let J=y.pixelDensityRatio;c/=J,p/=J;const X=document.createElement("div");document.body.appendChild(X),X.style.cssText=`width:${c}px;height:${p}px;position:fixed;left:-${2*c}px;`;let Y=this.viewer.tileSources[this.viewer.currentPage()],pe=this.viewer.world.getItemAt(this.viewer.currentPage()),ne=y({element:X,tileSources:[Y],crossOriginPolicy:this.viewer.crossOriginPolicy,prefixUrl:this.viewer.prefixUrl,immediateRender:!0});ne.viewport.setRotation(this.viewer.viewport.getRotation(!0),!0),ne.addHandler("tile-drawn",ie=>{let ve=ie.tiledImage.coverage,de=Object.keys(ve),te=de[de.length-1];if(ie.tile.level==te){let he=ve[te],ce=Object.values(he).map(Re=>Object.values(Re)).flat();this._setProgress(ce.filter(Re=>Re).length,ce.length)}}),ne.addHandler("open",()=>{ne.world.getItemAt(0).setRotation(pe.getRotation(!0),!0),ne.world.getItemAt(0).addOnceHandler("fully-loaded-change",ve=>{if(this._includeScalebar&&this._mpp){let de=Math.round(1e3*this._scalebarWidth/this._mpp.x*P),te=Math.round(this._scalebarHeight),he=ne.drawer.canvas,ce=he.getContext("2d"),Re=he.width,Oe=he.height;ce.fillRect(Re-te,Oe-te,-de,-te)}ne.drawer.canvas.toBlob(async de=>{J!=1&&(de=await function(he,ce){const Re=he.slice(0,33);return new Promise((Oe,Pe)=>{const Ge=new FileReader;Ge.onload=()=>{const He=new Uint8Array(Ge.result),qe=he.slice(33),De=Ye(He,ce,he.type);Oe(new Blob([De,qe],{type:he.type}))},Ge.readAsArrayBuffer(Re)})}(de,96*J)),this.blobURL&&URL.revokeObjectURL(this.blobURL),this.blobURL=URL.createObjectURL(de),M(this.blobURL);let te=ne.element;ne.destroy(),te.remove()})});let ie=ne.viewport.imageToViewportRectangle(C);ne.viewport.fitBounds(ie)})}catch(J){z(J)}})}}class lt extends Ct{constructor(s,c){super(s);let p=this;this._ps=s,this.compoundPath=new a.CompoundPath({children:[],fillRule:"evenodd"}),this.compoundPath.visible=!1,this.compoundPath.fillColor="black",this.compoundPath.opacity=.3,this.project.toolLayer.addChild(this.compoundPath),this.crosshairTool=new a.Group;let b=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),C=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),P=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),M=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]});this.crosshairTool.addChildren([b,C,P,M]),this.project.toolLayer.addChild(this.crosshairTool),this.crosshairTool.visible=!1,this._aspectHeight=1,this._aspectWidth=1,this._aspectLocked=!1,this.tool.onMouseDown=z=>{this.crosshairTool.visible=!1,this.compoundPath.visible=!0,this.compoundPath.removeChildren(),this.compoundPath.addChild(new a.Path.Rectangle(this._ps.view.bounds)),window.cp=this.compoundPath},this.tool.onMouseDrag=z=>{this.compoundPath.removeChildren(1);let J=this.getPoint(z);this.compoundPath.addChild(new a.Path.Rectangle(z.downPoint,J))},this.tool.onMouseMove=z=>{this.crosshairTool.visible=!0,function(J,X){let Y=J.view.projectToView(X),pe=J.view.viewToProject(new a.Point(0,Y.y)),ne=J.view.viewToProject(new a.Point(J.view.viewSize.width,Y.y)),ie=J.view.viewToProject(new a.Point(Y.x,0)),ve=J.view.viewToProject(new a.Point(Y.x,J.view.viewSize.height));b.segments[0].point=pe,C.segments[0].point=pe,b.segments[1].point=ne,C.segments[1].point=ne,P.segments[0].point=ie,M.segments[0].point=ie,P.segments[1].point=ve,M.segments[1].point=ve}(p.tool,z.point)},this.tool.onMouseUp=z=>{let J=this.getPoint(z);this.broadcast("region-selected",new a.Rectangle(z.downPoint,J))},this.tool.extensions.onKeyDown=function(z){z.key=="escape"&&c.deactivate()},this.extensions.onActivate=()=>{this.crosshairTool.visible=!0,this.compoundPath.visible=!1},this.extensions.onDeactivate=z=>{this.crosshairTool.visible=!1,this.compoundPath.visible=!1}}activate(){this.tool.activate(),this.crosshairTool.visible=!0,this.compoundPath.visible=!1}deactivate(){this.crosshairTool.visible=!1,this.compoundPath.visible=!1}setAspectHeight(s){this._aspectHeight=s}setAspectWidth(s){this._aspectWidth=s}setAspectLocked(s){this._aspectLocked=s}getPoint(s){let c=s.point;if(this._aspectLocked){let p=s.point.subtract(s.downPoint);Math.abs(p.x)>Math.abs(p.y)?c.y=s.downPoint.y+(p.y<0?-1:1)*Math.abs(p.x)*this._aspectHeight/this._aspectWidth:c.x=s.downPoint.x+(p.x<0?-1:1)*Math.abs(p.y)*this._aspectWidth/this._aspectHeight}return c}}const vt={AnnotationToolkit:Ee,AnnotationToolbar:Mt,FeatureCollectionUI:Ii,FeatureUI:_i,FileDialog:Fi,LayerUI:Ai,PaperOffset:Se,PaperOverlay:F,RotationControlOverlay:Te,ScreenshotOverlay:$e,AnnotationUITool:wt,ToolBase:Ct,BrushTool:_e,DefaultTool:dt,EllipseTool:ct,LinestringTool:ti,PointTool:B,PointTextTool:V,PolygonTool:kt,RasterTool:Ft,RectangleTool:ke,SelectTool:ci,StyleTool:Wt,TransformTool:wi,WandTool:ii}})(),m})())})(Qi);var Yi=Qi.exports;class cn{constructor(ae){Ri(this,"cache");Ri(this,"hits",0);Ri(this,"misses",0);Ri(this,"maxSize");this.cache=new Map,this.maxSize=ae==null?void 0:ae.maxSize}normalizeId(ae){return String(ae)}isExpired(ae){const n=this.cache.get(ae);return n?n.expiresAt&&n.expiresAt<Date.now()?(this.cache.delete(ae),!0):!1:!0}evictIfNeeded(){if(this.maxSize&&this.cache.size>=this.maxSize){const ae=this.cache.keys().next().value;ae&&this.cache.delete(ae)}}async get(ae,n){const o=this.normalizeId(ae);if(!this.cache.has(o)||this.isExpired(o))return this.misses++,null;const u=this.cache.get(o);return u?n!==void 0&&u.versionHash!==n?(this.cache.delete(o),this.misses++,null):(this.hits++,u.data):(this.misses++,null)}async set(ae,n,o){const u=this.normalizeId(ae),h=o!=null&&o.ttl?Date.now()+o.ttl:void 0;this.evictIfNeeded(),this.cache.set(u,{data:n,expiresAt:h,versionHash:o==null?void 0:o.versionHash})}async has(ae,n){const o=this.normalizeId(ae);if(!this.cache.has(o)||this.isExpired(o))return!1;const u=this.cache.get(o);return!(!u||n!==void 0&&u.versionHash!==n)}async delete(ae){const n=this.normalizeId(ae);this.cache.delete(n)}async clear(){this.cache.clear(),this.hits=0,this.misses=0}async getStats(){const ae=this.hits+this.misses,n=ae>0?this.hits/ae:0;return{size:this.cache.size,hits:this.hits,misses:this.misses,hitRate:n}}}const un="bdsa-annotation-cache",Gi="annotations",dn=1;class qi{constructor(){Ri(this,"db",null);Ri(this,"initPromise",null)}async init(){if(!this.db)return this.initPromise?this.initPromise:(this.initPromise=new Promise((ae,n)=>{const o=indexedDB.open(un,dn);o.onerror=()=>{n(new Error(`Failed to open IndexedDB: ${o.error}`))},o.onsuccess=()=>{this.db=o.result,ae()},o.onupgradeneeded=u=>{const h=u.target.result;h.objectStoreNames.contains(Gi)||h.createObjectStore(Gi,{keyPath:"id"}).createIndex("expiresAt","expiresAt",{unique:!1})}}),this.initPromise)}async getStore(ae="readonly"){if(await this.init(),!this.db)throw new Error("IndexedDB not initialized");return this.db.transaction([Gi],ae).objectStore(Gi)}async get(ae,n){await this.init();const o=String(ae),u=await this.getStore();return new Promise((h,m)=>{const y=u.get(o);y.onerror=()=>{m(new Error(`Failed to get from cache: ${y.error}`))},y.onsuccess=()=>{const a=y.result;if(!a){h(void 0);return}if(a.expiresAt&&a.expiresAt<Date.now()){this.delete(ae).catch(console.error),h(void 0);return}if(n!==void 0&&a.versionHash!==n){this.delete(ae).catch(console.error),h(void 0);return}h(a.data)}})}async set(ae,n,o){await this.init();const u=String(ae),h=await this.getStore("readwrite"),m={id:u,data:n,timestamp:Date.now(),expiresAt:o!=null&&o.ttl?Date.now()+o.ttl:void 0,versionHash:o==null?void 0:o.versionHash};return new Promise((y,a)=>{const w=h.put(m);w.onerror=()=>{a(new Error(`Failed to set cache entry: ${w.error}`))},w.onsuccess=()=>{y()}})}async has(ae,n){await this.init();const o=String(ae),u=await this.getStore();return new Promise((h,m)=>{const y=u.get(o);y.onerror=()=>{m(new Error(`Failed to check cache: ${y.error}`))},y.onsuccess=()=>{const a=y.result;if(!a){h(!1);return}if(a.expiresAt&&a.expiresAt<Date.now()){this.delete(ae).catch(console.error),h(!1);return}if(n!==void 0&&a.versionHash!==n){h(!1);return}h(!0)}})}async delete(ae){await this.init();const n=String(ae),o=await this.getStore("readwrite");return new Promise((u,h)=>{const m=o.delete(n);m.onerror=()=>{h(new Error(`Failed to delete cache entry: ${m.error}`))},m.onsuccess=()=>{u()}})}async clear(){await this.init();const ae=await this.getStore("readwrite");return new Promise((n,o)=>{const u=ae.clear();u.onerror=()=>{o(new Error(`Failed to clear cache: ${u.error}`))},u.onsuccess=()=>{n()}})}async getStats(){await this.init();const ae=await this.getStore();return new Promise((n,o)=>{const u=ae.count();u.onerror=()=>{o(new Error(`Failed to get cache stats: ${u.error}`))},u.onsuccess=()=>{n({size:u.result,count:u.result})}})}}async function $i(){if(!("storage"in navigator)||!("estimate"in navigator.storage))return console.warn("Storage quota API not available in this browser"),null;try{const Le=await navigator.storage.estimate(),ae=Le.quota||0,n=Le.usage||0,o=ae-n,u=ae>0?n/ae*100:0;let h=!1;return"persisted"in navigator.storage&&"persist"in navigator.storage&&(h=await navigator.storage.persisted()),{quota:ae,usage:n,available:o,usagePercent:u,persistent:h}}catch(Le){return console.error("Failed to check IndexedDB quota:",Le),null}}async function pn(){if(!("storage"in navigator)||!("persist"in navigator.storage))return console.warn("Persistent storage API not available in this browser"),!1;try{const Le=await navigator.storage.persist();return Le?console.log("Persistent storage granted - data will not be cleared automatically"):console.warn("Persistent storage not granted - data may be cleared during browser cleanup"),Le}catch(Le){return console.error("Failed to request persistent storage:",Le),!1}}function Vi(Le){if(Le===0)return"0 Bytes";const ae=1024,n=["Bytes","KB","MB","GB","TB"],o=Math.floor(Math.log(Le)/Math.log(ae));return Math.round(Le/Math.pow(ae,o)*100)/100+" "+n[o]}async function fn(){const Le=await $i();if(!Le){console.log("Quota information not available");return}console.log("=== IndexedDB Quota Information ==="),console.log(`Quota: ${Vi(Le.quota)}`),console.log(`Usage: ${Vi(Le.usage)} (${Le.usagePercent.toFixed(1)}%)`),console.log(`Available: ${Vi(Le.available)}`),console.log(`Persistent storage: ${Le.persistent?"Granted":"Not granted"}`),Le.usagePercent>80&&console.warn("⚠️ Storage usage is above 80% - consider requesting persistent storage")}function gn(Le){const ae={};if(Le._id!==void 0&&(ae._id=Le._id),Le._version!==void 0&&(ae._version=Le._version),Le._modelType!==void 0&&(ae._modelType=Le._modelType),Le.updated!==void 0&&(ae.updated=Le.updated),Le.modified!==void 0&&(ae.modified=Le.modified),Le._accessLevel!==void 0&&(ae._accessLevel=Le._accessLevel),Le.annotation&&typeof Le.annotation=="object"){const u=Le.annotation;u.name!==void 0&&(ae.name=u.name)}const n=JSON.stringify(ae,Object.keys(ae).sort());let o=5381;for(let u=0;u<n.length;u++)o=(o<<5)+o+n.charCodeAt(u),o=o&o;return(o>>>0).toString(16)}function Bi(Le,ae){const n=Math.max(0,Math.min(1,ae));if(Le.startsWith("rgba(")){const o=Le.match(/(\d+(?:\.\d+)?)/g);if(o&&o.length>=3){const u=o[0],h=o[1],m=o[2];return`rgba(${u}, ${h}, ${m}, ${n})`}}else if(Le.startsWith("rgb(")){const o=Le.match(/(\d+(?:\.\d+)?)/g);if(o&&o.length>=3){const u=o[0],h=o[1],m=o[2];return`rgba(${u}, ${h}, ${m}, ${n})`}}else if(Le.startsWith("#")){const o=Le.replace("#","");let u,h,m;return o.length===3?(u=parseInt(o[0]+o[0],16),h=parseInt(o[1]+o[1],16),m=parseInt(o[2]+o[2],16)):(u=parseInt(o.substring(0,2),16),h=parseInt(o.substring(2,4),16),m=parseInt(o.substring(4,6),16)),`rgba(${u}, ${h}, ${m}, ${n})`}return Le}const Hi={documentProperties:[{key:"id",label:"ID",formatter:Le=>String(Le)},{key:"elementCount",label:"Elements",formatter:Le=>String(Le)},{key:"totalPoints",label:"Points/Vertices",formatter:Le=>String(Le)},{key:"types",label:"Types",formatter:Le=>Array.isArray(Le)&&Le.length>0?Le.join(", "):"N/A",show:!0},{key:"filteredCount",label:"Filtered",formatter:(Le,ae)=>ae.filteredCount!==void 0&&ae.filteredCount>0?`${ae.filteredCount} element(s) (${ae.filteredPoints||0} points) skipped`:"None",show:!0}],showFetchedSection:!0,showProvidedSection:!0,showTotalSection:!0,headerText:"Annotation Information"},en=at.forwardRef(({imageInfo:Le,annotations:ae=[],annotationIds:n=[],apiBaseUrl:o,onViewerReady:u,onAnnotationClick:h,defaultAnnotationColor:m="#ff0000",strokeWidth:y=2,osdOptions:a={},className:w="",height:_="600px",width:A="100%",showAnnotationInfo:R=!1,annotationInfoConfig:k,maxPointsPerAnnotation:G=1e4,maxTotalPoints:W=1e5,fetchFn:O,apiHeaders:$,showAnnotationControls:ye=!1,defaultAnnotationOpacity:we=1,annotationOpacities:ht,visibleAnnotations:tt,onAnnotationReady:Ve,annotationCache:Tt,disableCache:Q=!1,annotationHeaders:Ct},it)=>{var me,nt;const wt=at.useRef(null),[Fe,Lt]=at.useState(null),[ft,_t]=at.useState(null),[zt,dt]=at.useState(null),[Dt,Wt]=at.useState([]),[Gt,ei]=at.useState([]),ni=at.useRef(null),bt=at.useRef(""),[Vt,Ke]=at.useState(we),ii=at.useMemo(()=>Q||Tt===null?null:Tt||new qi,[Tt,Q]),ze=at.useRef(!0);at.useEffect(()=>(ze.current=!0,()=>{ze.current=!1}),[]);const[Jt,Xt]=at.useState(!0);at.useEffect(()=>{if(!wt.current)return;const Ae=new IntersectionObserver(Ne=>{Ne.forEach(Ze=>{Ze.isIntersecting&&Ze.intersectionRatio>.1?Xt(!0):Xt(!1)})},{threshold:.1,rootMargin:"50px"});return Ae.observe(wt.current),()=>{wt.current&&Ae.unobserve(wt.current)}},[]),at.useEffect(()=>{const Ae=Ze=>{const mt=Ze instanceof ErrorEvent?Ze.message:String(Ze);return mt&&typeof mt=="string"&&mt.includes("_transformBounds")?(console.warn("Suppressed _transformBounds error from library"),Ze instanceof ErrorEvent&&Ze.preventDefault(),!0):!1},Ne=Ze=>{const mt=Ze.reason;((mt==null?void 0:mt.message)||String(mt||"")).includes("_transformBounds")&&(console.warn("Suppressed _transformBounds promise rejection"),Ze.preventDefault())};return window.addEventListener("error",Ae,!0),window.addEventListener("unhandledrejection",Ne),()=>{window.removeEventListener("error",Ae,!0),window.removeEventListener("unhandledrejection",Ne)}},[]);const St=at.useCallback(Ae=>{if(!Ae||!Ae.view)return!1;const Ne=Ae.view;return!(Ne._transformBounds===null||Ne._transformBounds===void 0||typeof Ae.view.draw!="function")},[]),Kt=at.useCallback(Ae=>{if(ze.current){if(!St(Ae)){console.warn("Paper.js not fully initialized, skipping draw operation");return}try{Ae.view&&typeof Ae.view.draw=="function"&&Ae.view.draw()}catch(Ne){Ne instanceof Error&&Ne.message.includes("_transformBounds")?console.warn("Paper.js draw operation skipped (component likely unmounting or hidden)"):console.error("Error drawing Paper.js view:",Ne)}}},[St]),Xe=at.useMemo(()=>Dt.map(Ae=>`${Ae.id}:${Ae.left}:${Ae.top}:${Ae.width}:${Ae.height}`).join("|"),[Dt]),Ot=at.useRef(`osd-viewer-${Math.random().toString(36).substr(2,9)}`),It=at.useRef(!1),Et=at.useRef(""),At=at.useRef(u);at.useEffect(()=>{At.current=u},[u]);const E=at.useRef(h);at.useEffect(()=>{E.current=h},[h]);const q=at.useMemo(()=>Le.dziUrl||`${Le.imageId}-${Le.baseUrl}`,[Le.dziUrl,Le.imageId,Le.baseUrl]),fe=at.useMemo(()=>{var Ae;return Array.isArray(ae)?JSON.stringify(ae.map(Ne=>({id:Ne.id,left:Ne.left,top:Ne.top,width:Ne.width,height:Ne.height}))):ae&&typeof ae=="object"&&"type"in ae&&ae.type==="FeatureCollection"?JSON.stringify(((Ae=ae.features)==null?void 0:Ae.map(Ne=>({id:Ne.id})))||[]):"[]"},[ae]),Se=at.useMemo(()=>!Array.isArray(ae)&&ae&&typeof ae=="object"&&"type"in ae&&ae.type==="FeatureCollection"?ae.features.map(Ae=>{var Ne,Ze,mt,B;if(Ae.geometry.type==="Polygon"){const I=Ae.geometry.coordinates[0];if(I.length>=4){const[N,V]=I[0],[ge,,,ke]=I[2],je=ge-N,ct=ke-V;return{id:Ae.id||((Ne=Ae.properties)==null?void 0:Ne.id),left:N,top:V,width:je,height:ct,color:((Ze=Ae.properties)==null?void 0:Ze.color)||m,group:(mt=Ae.properties)==null?void 0:mt.group,label:(B=Ae.properties)==null?void 0:B.label,...Ae.properties}}}return null}).filter(Ae=>Ae!==null):Array.isArray(ae)?[...ae]:[],[fe,m]);at.useEffect(()=>{if(!wt.current||!Jt&&!It.current||It.current)return;let Ae=null,Ne=null,Ze=null;const mt=setTimeout(()=>{var B,I;if(!(!ze.current||!wt.current)&&Jt)try{It.current=!0,Et.current=q,wt.current.id=Ot.current;const N={id:Ot.current,prefixUrl:"https://openseadragon.github.io/openseadragon/images/",maxImageCacheCount:1e3,crossOriginPolicy:"Anonymous",autoHideControls:!1,debugMode:!1,showNavigator:!0,showZoomControl:!0,showHomeControl:!0,showFullPageControl:!0,...a};if(Ae=hn(N),Ne=Ae.createPaperOverlay(),ze.current&&_t(Ne),Ze=new Yi.AnnotationToolkit(Ae,{overlay:Ne}),Ze&&typeof((I=(B=Ze.overlay)==null?void 0:B.paperScope)==null?void 0:I.view)<"u"){const V=Ze.overlay.paperScope;if(V&&V.view){const ge=V.view,ke=new Proxy(ge,{get:(je,ct)=>ct==="getBounds"||ct==="_transformBounds"?function(...Ue){var kt;try{return je._transformBounds===null||je._transformBounds===void 0?(console.warn("Paper.js view not fully initialized, skipping bounds operation"),null):ct==="getBounds"?(kt=ge.getBounds)==null?void 0:kt.apply(je,Ue):je[ct]}catch(pt){if(pt instanceof Error&&pt.message.includes("_transformBounds"))return null;throw pt}}:je[ct]});try{V.view=ke}catch{}}}if(ze.current&&dt(Ze),!Ae)return;if(Ae.addHandler("open-failed",V=>{console.warn("OpenSeadragon: Open failed",V)}),Ae.addHandler("open",V=>{!ze.current||!Ae||(console.log("OpenSeadragon: Image opened",V),Lt(Ae),At.current&&At.current(Ae))}),Ae.world.addHandler("add-item",V=>{if(!ze.current)return;const ge=V;console.log("Tiled image added:",ge.item),ni.current=ge.item}),Le.dziUrl)Ae.open(Le.dziUrl);else{if(!Le.imageId||!Le.width||!Le.height||!Le.tileWidth||!Le.levels||!Le.baseUrl){console.error("SlideViewer: If dziUrl is not provided, all manual fields (imageId, width, height, tileWidth, levels, baseUrl) are required");return}const V={width:Le.width,height:Le.height,tileSize:Le.tileWidth,minLevel:0,maxLevel:Le.levels-1,getTileUrl:(ge,ke,je)=>`${Le.baseUrl}/wsi/files/tile/${Le.imageId}/${ge}/${ke}/${je}`};Ae&&Ae.addTiledImage({tileSource:V,success:()=>{!ze.current||!Ae||(Lt(Ae),At.current&&At.current(Ae))}})}}catch(N){console.error("Error initializing SlideViewer:",N),It.current=!1}},100);return()=>{clearTimeout(mt);const B=q!==Et.current;if(!ze.current||B){if(B&&(Et.current=q),Ze)try{Ze.destroy()}catch(N){console.warn("Error destroying annotation toolkit:",N)}if(Ne)try{Ne.destroy()}catch(N){console.warn("Error destroying paper overlay:",N)}if(Ae)try{if(typeof Ae.isDestroyed=="boolean"&&Ae.isDestroyed)return;Ae.destroy()}catch(N){console.warn("Error destroying OpenSeadragon viewer:",N)}ze.current||(It.current=!1)}}},[q,a]),at.useEffect(()=>{if(!ze.current)return;if(!n||n.length===0||!o){Wt(Ne=>Ne.length===0?Ne:[]),ei(Ne=>Ne.length===0?Ne:[]);return}(async()=>{try{console.log(`Fetching ${n.length} annotation(s) from DSA API...`);const Ne=O||fetch,Ze=n.map(async je=>{var ci,yi,wi,ui,Ft,gi;const ct=Ct?Ct instanceof Map?Ct.get(je):Ct[String(je)]:void 0,Ue=ct?gn(ct):void 0;if(ii){try{const Mt=await ii.get(je,Ue);if(Mt!=null){if(Mt&&typeof Mt=="object"&&(Mt.elements||((ci=Mt.annotation)==null?void 0:ci.elements)||((yi=Mt.annotation)==null?void 0:yi.elements)===null||Array.isArray((wi=Mt.annotation)==null?void 0:wi.elements)))return console.log(`Cache hit for annotation ${je}${Ue?` (version hash: ${Ue})`:""}`,{hasElements:!!(Mt!=null&&Mt.elements)||!!((ui=Mt==null?void 0:Mt.annotation)!=null&&ui.elements),elementCount:Array.isArray(Mt==null?void 0:Mt.elements)?Mt.elements.length:Array.isArray((Ft=Mt==null?void 0:Mt.annotation)==null?void 0:Ft.elements)?Mt.annotation.elements.length:0}),Mt;console.warn(`Invalid cached data format for annotation ${je}, clearing cache and fetching fresh...`,{type:typeof Mt,keys:Mt&&typeof Mt=="object"?Object.keys(Mt):"N/A",hasElements:!!(Mt!=null&&Mt.elements)||!!((gi=Mt==null?void 0:Mt.annotation)!=null&&gi.elements)}),await ii.delete(je).catch(oi=>console.warn("Failed to delete invalid cache entry:",oi))}}catch(Mt){console.warn(`Error reading from cache for annotation ${je}, fetching from API:`,Mt)}console.log(Ue?`Cache miss or version mismatch for annotation ${je} (current version hash: ${Ue}), fetching from API...`:`Cache miss for annotation ${je}, fetching from API...`)}const kt=`${o}/annotation/${je}`;console.log(`Fetching annotation ${je} from: ${kt}`);const pt={};$&&(pt.headers=$);const ti=await Ne(kt,pt);if(!ti.ok)return console.warn(`Failed to fetch annotation ${je}:`,ti.statusText,ti.status),null;const si=await ti.json();return console.log(`Successfully fetched annotation ${je}:`,si),ii&&si&&await ii.set(je,si,{versionHash:Ue}),si}),mt=await Promise.all(Ze);if(!ze.current){console.log("Component unmounted during annotation fetch, skipping state update");return}const B=[];let I=0,N=0;const V=mt.filter(je=>je!=null).map((je,ct)=>{var wi;const Ue=String(n[ct]),kt=new Set,pt=[];let ti=0,si=0,ci=0,yi=[];if(je&&typeof je=="object"){const ui=je;ui.elements&&Array.isArray(ui.elements)?yi=ui.elements:(wi=ui.annotation)!=null&&wi.elements&&(yi=ui.annotation.elements)}for(const ui of yi)if(ui&&typeof ui=="object"){const Ft=ui;if(Ft.type&&kt.add(Ft.type),Ft.type==="rectangle"&&Ft.x!==void 0&&Ft.y!==void 0&&Ft.width!==void 0&&Ft.height!==void 0)4>G?(si++,ci+=4,console.warn(`Skipping rectangle annotation ${Ft.group||pt.length} in document ${Ue}: has 4 points (exceeds limit of ${G})`)):(ti+=4,pt.push({id:Ft.group||pt.length,left:Ft.x,top:Ft.y,width:Ft.width,height:Ft.height,color:Ft.lineColor||m,group:Ft.group,label:Ft.label,annotationType:"rectangle",element:Ft,documentId:Ue}));else if(Ft.type==="polyline"&&Ft.points&&Ft.points.length>=2){const gi=Ft.points.length;if(gi>G)si++,ci+=gi,console.warn(`Skipping polyline annotation ${Ft.group||pt.length} in document ${Ue}: has ${gi} points (exceeds limit of ${G})`);else{ti+=gi;const Mt=Ft.points.map(Ai=>Ai[0]),di=Ft.points.map(Ai=>Ai[1]),oi=Math.min(...Mt),_i=Math.min(...di),Oi=Math.max(...Mt),xi=Math.max(...di),Di=Oi-oi,Ii=xi-_i;pt.push({id:Ft.group||pt.length,left:oi,top:_i,width:Di,height:Ii,color:Ft.lineColor||m,group:Ft.group,label:Ft.label,annotationType:"polyline",points:Ft.points,closed:Ft.closed,fillColor:Ft.fillColor,element:Ft,documentId:Ue})}}}return B.push({id:Ue,elementCount:pt.length,totalPoints:ti,types:Array.from(kt),filteredCount:si>0?si:void 0,filteredPoints:ci>0?ci:void 0}),I+=si,N+=ci,pt}).flat();let ge=V;const ke=V.reduce((je,ct)=>ct.annotationType==="polyline"&&ct.points?je+ct.points.length:je+4,0);if(ke>W){console.warn(`Total points (${ke}) exceeds limit (${W}). Filtering annotations starting from largest ones...`);const je=V.map(Ue=>({annotation:Ue,pointCount:Ue.annotationType==="polyline"&&Ue.points?Ue.points.length:4}));je.sort((Ue,kt)=>kt.pointCount-Ue.pointCount);let ct=0;ge=[];for(const{annotation:Ue,pointCount:kt}of je)ct+kt<=W?(ge.push(Ue),ct+=kt):console.warn(`Skipping annotation ${Ue.id}: adding ${kt} points would exceed total limit (${ct+kt} > ${W})`);console.warn(`Filtered annotations: ${V.length} → ${ge.length} (${V.length-ge.length} skipped)`)}if(I>0&&console.warn(`Annotation document(s) ${n.join(", ")}: ${I} annotation(s) filtered due to per-annotation point limits (${N} total points skipped)`),console.log(`Parsed ${ge.length} annotation feature(s) from ${n.length} annotation document(s)`),!ze.current){console.log("Component unmounted after annotation parsing, skipping state update");return}Wt(ge),ei(B)}catch(Ne){console.error("Error fetching annotations:",Ne),ze.current&&Wt([])}})()},[n?JSON.stringify(n):"",o||"",m,G,W]),at.useEffect(()=>{if(!Fe||!ft||!zt)return;const Ae=ft.paperScope;if(!Ae||!Ae.project)return;const Ne=ni.current;if(!Ne||typeof Ne.addPaperItem!="function")return;const Ze=[...Se,...Dt],mt=`${fe}:${Xe}`;if(bt.current===mt)return;if(bt.current=mt,console.log(`Rendering ${Ze.length} total annotation(s)`),Ze.length===0){try{const N=zt.getFeatures();if(N&&Array.isArray(N))for(const V of N)try{V.remove()}catch(ge){console.warn("Error removing feature:",ge)}}catch(N){console.warn("Could not clear existing features:",N)}return}console.log(`About to render ${Ze.length} annotations, tiledImage:`,Ne);try{if(Ne.paperItems&&Array.isArray(Ne.paperItems)&&Ne.paperItems.length>0){const N=[...Ne.paperItems].reverse();for(const V of N)try{V&&typeof V.remove=="function"&&V.remove()}catch{}}try{const N=zt.getFeatures();if(N&&Array.isArray(N)&&N.length>0){const V=N.filter(ge=>ge!=null&&typeof ge.remove=="function");for(const ge of V)try{ge.remove()}catch{}}}catch{}}catch(N){console.warn("Error clearing existing annotations:",N)}const B=ht instanceof Map?new Map(Array.from(ht.entries()).map(([N,V])=>[String(N),V])):ht?new Map(Object.entries(ht).map(([N,V])=>[String(N),V])):null,I=new Set;for(const N of Ze)try{const V=N.documentId,ge=V!==void 0?String(V):void 0;console.log(`SlideViewer: Processing annotation feature id=${N.id}, documentId=${V}, lookupId=${ge}`);let ke=Vt;if(B&&ge!==void 0){const ct=B.get(ge);ct!==void 0&&(ke=ct)}if(console.log(`SlideViewer: Annotation opacity=${ke}, will ${ke<=0?"skip":"render"}`),ke<=0){console.log("SlideViewer: Skipping annotation with opacity 0 (hidden)");continue}let je;if(N.annotationType==="polyline"&&N.points&&Array.isArray(N.points)){const ct=new Ae.Path,Ue=N.color||m;ct.strokeColor=Bi(Ue,ke),ct.strokeWidth=y;const kt=N.fillColor||"rgba(0, 0, 0, 0)";ct.fillColor=Bi(kt,ke),N.points.forEach((pt,ti)=>{ti===0?ct.moveTo(pt[0],pt[1]):ct.lineTo(pt[0],pt[1])}),N.closed&&ct.closePath(),je=ct}else{const ct=new Ae.Rectangle(N.left,N.top,N.width,N.height),Ue=new Ae.Path.Rectangle(ct),kt=N.color||m;Ue.strokeColor=Bi(kt,ke),Ue.strokeWidth=y,Ue.fillColor=Bi("rgba(0, 0, 0, 0)",ke),je=Ue}if(je.data={annotation:N},je.annotationId=N.id,E.current&&(je.onClick=ct=>{var Ue;(Ue=E.current)==null||Ue.call(E,N)}),je.style={rescale:{strokeWidth:y}},Ne.addPaperItem(je),je&&typeof je=="object")try{Yi.AnnotationToolkit.registerFeature(je)}catch(ct){console.warn("Failed to register feature with toolkit:",ct)}ge!==void 0?(I.add(ge),console.log(`SlideViewer: Added documentId '${ge}' to renderedDocumentIds. Set now has:`,Array.from(I))):console.warn(`SlideViewer: Cannot track document ID - lookupId is undefined for annotation id=${N.id}`)}catch(V){console.error(`Error rendering annotation ${N.id}:`,V,N)}Kt(Ae),console.log(`Finished rendering ${Ze.length} annotations`),console.log(`SlideViewer: onAnnotationReady is ${Ve?"defined":"undefined"}, renderedDocumentIds has ${I.size} items:`,Array.from(I)),Ve&&I.size>0?setTimeout(()=>{console.log(`SlideViewer: setTimeout fired, calling onAnnotationReady for ${I.size} document(s)`),I.forEach(N=>{try{console.log(`SlideViewer: Calling onAnnotationReady('${N}')`),Ve(N)}catch(V){console.error(`Error calling onAnnotationReady for ${N}:`,V)}})},100):console.warn(`SlideViewer: Not calling onAnnotationReady - callback is ${Ve?"":"not "}defined, renderedDocumentIds has ${I.size} items`)},[Fe,ft,zt,fe,Xe,y,Vt,ht,tt,Ve]),at.useEffect(()=>{var Ne;if(!Fe||!ft||!zt)return;const Ae=ft.paperScope;if(!(!Ae||!Ae.project))try{const Ze=zt.getFeatures();if(Ze&&Array.isArray(Ze)){const mt=ht instanceof Map?ht:ht?new Map(Object.entries(ht).map(([I,N])=>[String(I),N])):null;let B=!1;for(const I of Ze)try{if(I&&typeof I=="object"){const N=I,V=(Ne=N.data)==null?void 0:Ne.annotation;if(!V)continue;const ge=V.documentId,ke=ge!==void 0?String(ge):void 0;if(ke===void 0)continue;let je=Vt;if(mt&&ke!==void 0){const pt=mt.get(ke);pt!==void 0&&(je=pt)}if(je<=0){try{const pt=V.color||m,ti=V.fillColor||"rgba(0, 0, 0, 0)";N.strokeColor&&(N.strokeColor=Bi(pt,0),B=!0),N.fillColor&&(N.fillColor=Bi(ti,0),B=!0)}catch{try{N.remove&&(N.remove(),B=!0)}catch(ti){console.warn("Could not hide annotation:",ti)}}continue}let ct=Vt;if(mt&&ke!==void 0&&mt.has(ke)){const pt=mt.get(ke);pt!==void 0&&(ct=pt)}const Ue=V.color||m,kt=V.fillColor||"rgba(0, 0, 0, 0)";N.strokeColor&&(N.strokeColor=Bi(Ue,ct),B=!0),N.fillColor&&(N.fillColor=Bi(kt,ct),B=!0)}}catch(N){console.warn("Error updating annotation opacity:",N)}B&&Kt(Ae)}}catch(Ze){console.warn("Could not update annotation opacity:",Ze)}},[Vt,ht,tt,Fe,ft,zt,we,m,Kt]);const _e=at.useMemo(()=>({documentProperties:(k==null?void 0:k.documentProperties)??Hi.documentProperties??[],showFetchedSection:(k==null?void 0:k.showFetchedSection)??Hi.showFetchedSection??!0,showProvidedSection:(k==null?void 0:k.showProvidedSection)??Hi.showProvidedSection??!0,showTotalSection:(k==null?void 0:k.showTotalSection)??Hi.showTotalSection??!0,headerText:(k==null?void 0:k.headerText)??Hi.headerText??"Annotation Information"}),[k]),Ce={width:typeof A=="number"?`${A}px`:A,height:typeof _=="number"?`${_}px`:_};return Be.jsxs("div",{ref:it,className:`bdsa-slide-viewer ${w}`,style:Ce,children:[Be.jsx("div",{ref:wt,className:"bdsa-slide-viewer__container"}),(R||ye)&&Be.jsxs("div",{className:"bdsa-slide-viewer__sidebar",children:[ye&&Be.jsxs("div",{className:"bdsa-slide-viewer__controls",children:[Be.jsx("div",{className:"bdsa-slide-viewer__controls-header",children:Be.jsx("strong",{children:"Annotation Controls"})}),Be.jsxs("div",{className:"bdsa-slide-viewer__controls-section",children:[Be.jsxs("div",{className:"bdsa-slide-viewer__controls-label",children:["Opacity: ",Math.round(Vt*100),"%"]}),Be.jsx("input",{type:"range",min:"0",max:"1",step:"0.01",value:Vt,onChange:Ae=>Ke(parseFloat(Ae.target.value)),className:"bdsa-slide-viewer__opacity-slider"})]})]}),R&&(Array.isArray(ae)&&ae.length>0||!Array.isArray(ae)&&ae&&"type"in ae&&ae.type==="FeatureCollection"&&((me=ae.features)==null?void 0:me.length)>0||Gt.length>0||Dt.length>0)&&Be.jsxs("div",{className:"bdsa-slide-viewer__annotation-info",children:[Be.jsx("div",{className:"bdsa-slide-viewer__annotation-info-header",children:Be.jsx("strong",{children:_e.headerText})}),_e.showFetchedSection&&Gt.length>0&&Be.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[Be.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Fetched from DSA API:"}),Gt.map(Ae=>Be.jsx("div",{className:"bdsa-slide-viewer__annotation-info-item",children:_e.documentProperties.filter(Ne=>Ne.show!==!1).map(Ne=>{const Ze=Ae[Ne.key],mt=Ne.formatter?Ne.formatter(Ze,{...Ae,totalPoints:Ae.totalPoints??0}):String(Ze??"N/A");return Be.jsxs("div",{children:[Ne.label,": ",mt]},Ne.key)})},Ae.id))]}),_e.showProvidedSection&&(Array.isArray(ae)&&ae.length>0||!Array.isArray(ae)&&ae&&ae.type==="FeatureCollection")&&Be.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[Be.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Provided Annotations:"}),Be.jsx("div",{className:"bdsa-slide-viewer__annotation-info-item",children:Array.isArray(ae)?Be.jsxs("div",{children:["Count: ",ae.length]}):Be.jsxs("div",{children:["GeoJSON FeatureCollection with ",((nt=ae.features)==null?void 0:nt.length)||0," features"]})})]}),_e.showTotalSection&&Be.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[Be.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Total Rendered:"}),Be.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-item",children:[Dt.length+(Array.isArray(ae)?ae.length:0)," annotation(s)"]})]})]})]})]})});en.displayName="SlideViewer";const tn=at.forwardRef(({imageId:Le,apiBaseUrl:ae,limit:n=50,fetchFn:o,apiHeaders:u,onAnnotationsLoaded:h,onError:m,showDebugPanel:y=!1,onAnnotationLoadChange:a,onAnnotationVisibilityChange:w,onAnnotationOpacityChange:_,onAnnotationReady:A,onLoadedAnnotationIdsChange:R,onAnnotationLoad:k,onAnnotationHide:G,loadedAnnotations:W,visibleAnnotations:O,annotationOpacities:$,annotationCache:ye,disableCache:we=!1,showDefaultUI:ht=!0,className:tt="",children:Ve},Tt)=>{const[Q,Ct]=at.useState([]),[it,wt]=at.useState(!1),[Fe,Lt]=at.useState(null),[ft,_t]=at.useState(null),[zt,dt]=at.useState(new Set),[Dt,Wt]=at.useState(new Map),[Gt,ei]=at.useState(new Map),ni=at.useRef(new Map),[bt,Vt]=at.useState(null),[Ke,ii]=at.useState(new Set),[ze,Jt]=at.useState(new Set),Xt=at.useMemo(()=>we||ye===null?null:ye||new qi,[ye,we]),St=W??zt,Kt=O??Dt,Xe=$??Gt,Ot=at.useMemo(()=>Array.from(St).sort(),[St]);at.useEffect(()=>{R&&R(Ot)},[Ot,R]);const It=at.useCallback(_e=>{ii(Ce=>{const me=new Set(Ce);return me.delete(_e),me}),A==null||A(_e)},[A]),Et=at.useCallback(_e=>{const Ce=String(_e);console.log(`AnnotationManager: Clearing loading state for annotation ${Ce}`),ii(me=>{const nt=new Set(me),Ae=nt.has(Ce);return nt.delete(Ce),console.log(`AnnotationManager: Loading state for ${Ce} was ${Ae?"present":"missing"}, now cleared. Remaining:`,Array.from(nt)),nt}),Xt&&Xt.has(Ce).then(me=>{me&&Jt(nt=>new Set(nt).add(Ce))}).catch(()=>{}),A==null||A(Ce)},[A,Xt]),At=at.useCallback(_e=>{const Ce=String(_e);St.has(Ce)?(W||dt(nt=>{const Ae=new Set(nt);return Ae.delete(Ce),Ae}),O||Wt(nt=>{const Ae=new Map(nt);return Ae.delete(Ce),Ae}),$||ei(nt=>{const Ae=new Map(nt);return Ae.delete(Ce),Ae}),a==null||a(Ce,!1),G==null||G(Ce),ii(nt=>{const Ae=new Set(nt);return Ae.delete(Ce),Ae})):(console.log(`AnnotationManager: Starting to load annotation ${Ce}`),ii(nt=>{const Ae=new Set(nt).add(Ce);return console.log(`AnnotationManager: Added ${Ce} to loading set. Now loading:`,Array.from(Ae)),Ae}),W||dt(nt=>new Set(nt).add(Ce)),O||Wt(nt=>new Map(nt).set(Ce,!0)),$||ei(nt=>new Map(nt).set(Ce,1)),a==null||a(Ce,!0),k==null||k(Ce))},[W,O,$,St,a,k,G]),E=at.useCallback(_e=>{const Ce=Xe.get(_e)??1;if(Ce>0){ni.current.set(_e,Ce);const nt=0;$||ei(Ae=>new Map(Ae).set(_e,nt)),_==null||_(_e,nt),O||Wt(Ae=>new Map(Ae).set(_e,!1)),w==null||w(_e,!1)}else{const nt=ni.current.get(_e)??1;ni.current.delete(_e),$||ei(Ae=>new Map(Ae).set(_e,nt)),_==null||_(_e,nt),O||Wt(Ae=>new Map(Ae).set(_e,!0)),w==null||w(_e,!0)}},[$,O,Xe,_,w]),q=at.useCallback((_e,Ce)=>{$||ei(me=>new Map(me).set(_e,Ce)),_==null||_(_e,Ce)},[$,_]);at.useEffect(()=>{if(!Le||!ae){Ct([]),wt(!1),Lt(null),_t(null);return}(async()=>{wt(!0),Lt(null),_t(null);try{const Ce=new URLSearchParams({itemId:Le,limit:String(n),offset:"0",sort:"lowerName",sortdir:"1"}),me=`${ae}/annotation?${Ce.toString()}`,nt=o||fetch,Ae={};u&&(Ae.headers=u),console.log(`AnnotationManager: Fetching annotations from: ${me}`);const Ne=await nt(me,Ae);if(!Ne.ok)throw new Error(`Failed to fetch annotations: ${Ne.status} ${Ne.statusText}`);const Ze=await Ne.json();console.log("AnnotationManager: API response:",Ze),y&&_t(JSON.stringify(Ze,null,2));let mt=[];Array.isArray(Ze)?(mt=Ze,console.log(`AnnotationManager: Parsed ${mt.length} annotation(s) from array response`)):Ze&&Array.isArray(Ze.data)?(mt=Ze.data,console.log(`AnnotationManager: Parsed ${mt.length} annotation(s) from paginated response`)):Ze&&typeof Ze=="object"?(mt=[Ze],console.log("AnnotationManager: Parsed 1 annotation from single object response")):console.warn("AnnotationManager: Unexpected response format:",typeof Ze,Ze),Ct(mt),console.log(`AnnotationManager: Fetched ${mt.length} annotation(s) from API`),mt.length>0&&console.log("AnnotationManager: Annotation IDs:",mt.map(B=>B._id)),Xt&&mt.length>0?(async()=>{const I=new Set;for(const N of mt){const V=String(N._id);try{await Xt.has(V)&&I.add(V)}catch{}}Jt(I)})():Jt(new Set),h&&h(mt)}catch(Ce){const me=Ce instanceof Error?Ce:new Error(String(Ce));Lt(me),_t(null),m&&m(me)}finally{wt(!1)}})()},[Le,ae,n,o,u,h,m,y]);const fe=at.useMemo(()=>({annotations:Q,loading:it,error:Fe,annotationIds:Q.map(_e=>_e._id),loadedAnnotations:St,visibleAnnotations:Kt,annotationOpacities:Xe,toggleLoad:At,toggleVisibility:E,setOpacity:q,handleAnnotationReady:It,onAnnotationReady:Et,loadingAnnotations:Ke}),[Q,it,Fe,St,Kt,Xe,At,E,q,It,Et,Ke]),Se=()=>{if(it)return Be.jsx("div",{className:"bdsa-annotation-manager__list",children:Be.jsx("div",{className:"bdsa-annotation-manager__empty-state",children:Be.jsx("p",{children:"Loading annotations..."})})});if(Fe)return Be.jsx("div",{className:"bdsa-annotation-manager__list",children:Be.jsx("div",{className:"bdsa-annotation-manager__empty-state",style:{color:"#dc3545"},children:Be.jsxs("p",{children:["Error: ",Fe.message]})})});if(Q.length===0)return Be.jsx("div",{className:"bdsa-annotation-manager__list",children:Be.jsx("div",{className:"bdsa-annotation-manager__empty-state",children:Be.jsx("p",{children:"No annotations found"})})});const _e=Array.from(St).length;return Be.jsxs("div",{className:"bdsa-annotation-manager__list",children:[Be.jsxs("div",{className:"bdsa-annotation-manager__list-header",children:[Be.jsxs("h3",{children:["Annotations (",Q.length," total)"]}),Be.jsxs("p",{children:[_e," loaded in viewer"]})]}),Q.map(Ce=>{var B;const me=String(Ce._id),nt=St.has(me),Ae=Ke.has(me),Ne=Xe.get(me)??1,Ze=ze.has(me),mt=bt===me;return Be.jsxs("div",{className:`bdsa-annotation-manager__annotation-card ${nt?"bdsa-annotation-manager__annotation-card--loaded":""} ${mt?"bdsa-annotation-manager__annotation-card--selected":""}`,onClick:()=>Vt(Ce._id),children:[Be.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-header",children:[Be.jsx("h4",{className:"bdsa-annotation-manager__annotation-card-title",children:((B=Ce.annotation)==null?void 0:B.name)||Ce._id}),Be.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-meta",children:[Ce.public===!1&&Be.jsx("span",{className:"bdsa-annotation-manager__annotation-card-badge bdsa-annotation-manager__annotation-card-badge--private",children:"Private"}),Ce.public===!0&&Be.jsx("span",{className:"bdsa-annotation-manager__annotation-card-badge bdsa-annotation-manager__annotation-card-badge--public",children:"Public"}),Ze&&Be.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-cache-indicator-group",children:[Be.jsx("span",{className:"bdsa-annotation-manager__annotation-card-cache-indicator",title:"Cached locally - will load quickly",children:Be.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[Be.jsx("rect",{x:"2",y:"3",width:"20",height:"18",rx:"2"}),Be.jsx("path",{d:"M7 3h10M7 21h10M9 9h6M9 15h6"})]})}),Xt&&typeof Xt.delete=="function"&&Be.jsx("button",{className:"bdsa-annotation-manager__annotation-card-cache-bypass",onClick:async I=>{I.stopPropagation();const N=String(Ce._id);try{await Xt.delete(N),Jt(V=>{const ge=new Set(V);return ge.delete(N),ge}),St.has(N)&&(At(N),setTimeout(()=>At(N),100))}catch(V){console.warn("Failed to clear cache for annotation:",V)}},title:"Clear cache and refresh this annotation",children:Be.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[Be.jsx("path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"}),Be.jsx("path",{d:"M21 3v5h-5"}),Be.jsx("path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"}),Be.jsx("path",{d:"M3 21v-5h5"})]})})]}),Be.jsx("button",{className:"bdsa-annotation-manager__annotation-card-button bdsa-annotation-manager__annotation-card-button--load bdsa-annotation-manager__annotation-card-button--load-header",onClick:I=>{I.stopPropagation(),At(String(Ce._id))},title:nt?"Unload annotation":"Load annotation",children:nt?Be.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:Be.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})}):Be.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[Be.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),Be.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})})]})]}),Be.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-details",children:[Ce._elementCount!==void 0&&Be.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-detail",children:[Be.jsx("strong",{children:"Elements:"})," ",Ce._elementCount]}),Ce._detailsCount!==void 0&&Be.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-detail",children:[Be.jsx("strong",{children:"Points:"})," ",Ce._detailsCount.toLocaleString()]})]}),Be.jsx("div",{className:"bdsa-annotation-manager__annotation-card-controls",children:Ae?Be.jsxs("div",{className:"bdsa-annotation-manager__loading-indicator",children:[Be.jsx("div",{className:"bdsa-annotation-manager__spinner"}),Be.jsx("span",{children:"Loading..."})]}):nt?Be.jsxs(Be.Fragment,{children:[Be.jsx("button",{className:"bdsa-annotation-manager__annotation-card-button bdsa-annotation-manager__annotation-card-button--visibility",onClick:I=>{I.stopPropagation(),E(Ce._id)},title:Ne>0?"Hide annotation":"Show annotation",children:Be.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:Ne>0?Be.jsxs(Be.Fragment,{children:[Be.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),Be.jsx("circle",{cx:"12",cy:"12",r:"3"})]}):Be.jsxs(Be.Fragment,{children:[Be.jsx("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),Be.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]})})}),Be.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-opacity",onClick:I=>I.stopPropagation(),children:[Be.jsxs("label",{className:"bdsa-annotation-manager__annotation-card-opacity-label",children:["Opacity: ",Math.round(Ne*100),"%"]}),Be.jsx("input",{type:"range",min:"0",max:"1",step:"0.01",value:Ne,onChange:I=>q(Ce._id,parseFloat(I.target.value)),onClick:I=>I.stopPropagation(),onMouseDown:I=>I.stopPropagation(),className:"bdsa-annotation-manager__annotation-card-opacity-slider"})]})]}):null})]},Ce._id)})]})};return Be.jsxs("div",{ref:Tt,className:`bdsa-annotation-manager ${tt}`,children:[ht?Be.jsxs(Be.Fragment,{children:[Se(),Ve&&typeof Ve=="function"?Ve(fe):Ve]}):Ve&&typeof Ve=="function"?Ve(fe):Ve,y&&ft&&Be.jsxs("div",{className:"bdsa-annotation-manager__debug-panel",children:[Be.jsx("div",{className:"bdsa-annotation-manager__debug-panel-header",children:Be.jsx("strong",{children:"Raw API Response (Debug)"})}),Be.jsx("pre",{className:"bdsa-annotation-manager__debug-panel-content",children:ft})]})]})});tn.displayName="AnnotationManager";const nn=at.forwardRef(({apiBaseUrl:Le,fetchFn:ae,apiHeaders:n,onResourceSelect:o,onSelectionChange:u,showCollections:h=!0,rootId:m,rootType:y,startCollectionId:a,startFolderId:w,parentFolderId:_,foldersPerPage:A=50,className:R="",renderCollection:k,renderFolder:G},W)=>{const[O,$]=at.useState([]),[ye,we]=at.useState(null),[ht,tt]=at.useState(null),[Ve,Tt]=at.useState({}),[Q,Ct]=at.useState({}),[it,wt]=at.useState(new Set),[Fe,Lt]=at.useState(new Set),[ft,_t]=at.useState(null),[zt,dt]=at.useState(!1),[Dt,Wt]=at.useState({}),[Gt,ei]=at.useState(null),ni=at.useCallback(()=>{const Xe={};return n&&(Xe.headers=n),Xe},[n]),bt=at.useCallback(async()=>{if(!Le){ei(new Error("API base URL is required"));return}dt(!0),ei(null);try{const Xe=`${Le}/collection`,Ot=ae||fetch,It=ni(),Et=await Ot(Xe,It);if(!Et.ok)throw new Error(`Failed to fetch collections: ${Et.status} ${Et.statusText}`);const At=await Et.json(),E=Array.isArray(At)?At:At.items||[];$(E),a&&E.some(q=>q._id===a)&&(wt(new Set([a])),await Vt(E.find(q=>q._id===a)))}catch(Xe){const Ot=Xe instanceof Error?Xe:new Error("Unknown error loading collections");ei(Ot),console.error("Error loading collections:",Ot)}finally{dt(!1)}},[Le,ae,ni,a]),Vt=at.useCallback(async(Xe,Ot=!1)=>{if(!Le||!(Xe!=null&&Xe._id))return;const It=Ot&&Q[Xe._id]?Q[Xe._id].offset:0;Wt(Et=>({...Et,[Xe._id]:!0}));try{const Et=new URLSearchParams({parentType:"collection",parentId:Xe._id});A>0&&(Et.append("limit",String(A)),Et.append("offset",String(It)));const At=`${Le}/folder?${Et.toString()}`,E=ae||fetch,q=ni(),fe=await E(At,q);if(!fe.ok){console.warn(`Failed to fetch folders for collection ${Xe._id}:`,fe.statusText);return}const Se=await fe.json();let _e=[],Ce=!1;Array.isArray(Se)?(_e=Se,Ce=A>0&&Se.length===A):(_e=Se.items||[],Ce=A>0&&Se.total>It+_e.length),Tt(me=>({...me,[Xe._id]:Ot?[...me[Xe._id]||[],..._e]:_e})),A>0&&Ct(me=>({...me,[Xe._id]:{offset:It+_e.length,hasMore:Ce}})),!Ot&&w&&_e.some(me=>me._id===w)&&(Lt(me=>new Set(me).add(w)),await Ke(_e.find(me=>me._id===w),!0))}catch(Et){console.error(`Error loading folders for collection ${Xe._id}:`,Et)}finally{Wt(Et=>({...Et,[Xe._id]:!1}))}},[Le,ae,ni,w,A,Q]),Ke=at.useCallback(async(Xe,Ot=!1)=>{if(!Le||!(Xe!=null&&Xe._id))return;const It=Ot&&Q[Xe._id]?Q[Xe._id].offset:0;Wt(Et=>({...Et,[Xe._id]:!0}));try{const Et=new URLSearchParams({parentType:"folder",parentId:Xe._id});A>0&&(Et.append("limit",String(A)),Et.append("offset",String(It)));const At=`${Le}/folder?${Et.toString()}`,E=ae||fetch,q=ni(),fe=await E(At,q);if(!fe.ok){console.warn(`Failed to fetch subfolders for folder ${Xe._id}:`,fe.statusText);return}const Se=await fe.json();let _e=[],Ce=!1;Array.isArray(Se)?(_e=Se,Ce=A>0&&Se.length===A):(_e=Se.items||[],Ce=A>0&&Se.total>It+_e.length),Tt(me=>({...me,[Xe._id]:Ot?[...me[Xe._id]||[],..._e]:_e})),A>0&&Ct(me=>({...me,[Xe._id]:{offset:It+_e.length,hasMore:Ce}}))}catch(Et){console.error(`Error loading subfolders for folder ${Xe._id}:`,Et)}finally{Wt(Et=>({...Et,[Xe._id]:!1}))}},[Le,ae,ni,A,Q]),ii=at.useCallback(async()=>{if(!(!Le||!m||!y)){dt(!0),ei(null);try{const Xe=y==="collection"?`${Le}/collection/${m}`:`${Le}/folder/${m}`,Ot=ae||fetch,It=ni(),Et=await Ot(Xe,It);if(!Et.ok)throw new Error(`Failed to fetch ${y}: ${Et.status} ${Et.statusText}`);const At=await Et.json();if(y==="collection"){const E=At;we(E),wt(new Set([m])),await Vt(E)}else{const E=At;tt(E),Lt(new Set([m])),await Ke(E)}}catch(Xe){const Ot=Xe instanceof Error?Xe:new Error(`Unknown error loading ${y}`);ei(Ot),console.error(`Error loading root ${y}:`,Ot)}finally{dt(!1)}}},[Le,m,y,ae,ni,Vt,Ke]),ze=at.useCallback(async Xe=>{it.has(Xe._id)?wt(It=>{const Et=new Set(It);return Et.delete(Xe._id),Et}):(wt(It=>new Set(It).add(Xe._id)),await Vt(Xe,!1))},[it,Vt]),Jt=at.useCallback(async Xe=>{Fe.has(Xe._id)?Lt(It=>{const Et=new Set(It);return Et.delete(Xe._id),Et}):(Lt(It=>new Set(It).add(Xe._id)),await Ke(Xe,!1))},[Fe,Ke]),Xt=at.useCallback((Xe,Ot)=>{const It={...Xe,type:Ot};_t(It),o==null||o(It),u==null||u(It)},[o,u]);at.useEffect(()=>{m&&y&&Le?ii():h&&Le?bt():h&&!Le&&(ei(new Error("API base URL is required")),dt(!1))},[m,y,h,Le,bt,ii]);const St=at.useCallback(Xe=>{var At;const Ot=it.has(Xe._id),It=Ve[Xe._id]||[],Et=(ft==null?void 0:ft._id)===Xe._id&&(ft==null?void 0:ft.type)==="collection";return k?k(Xe,Ot,()=>ze(Xe)):Be.jsxs("div",{className:"bdsa-folder-browser__collection",children:[Be.jsxs("div",{className:`bdsa-folder-browser__folder-header ${Et?"selected":""}`,onClick:()=>ze(Xe),onDoubleClick:()=>Xt(Xe,"collection"),children:[Be.jsx("span",{className:`bdsa-folder-browser__folder-icon ${Ot?"expanded":""}`,children:Ot?"📂":"📁"}),Be.jsx("span",{className:"bdsa-folder-browser__folder-name",children:Xe.name}),Be.jsx("span",{className:"bdsa-folder-browser__folder-type",children:"Collection"})]}),Ot&&Be.jsxs("div",{className:"bdsa-folder-browser__folder-contents",children:[It.map(E=>Kt(E,1)),A>0&&((At=Q[Xe._id])==null?void 0:At.hasMore)&&Be.jsx("div",{className:"bdsa-folder-browser__load-more",children:Be.jsx("button",{className:"bdsa-folder-browser__load-more-btn",onClick:()=>Vt(Xe,!0),disabled:Dt[Xe._id],children:Dt[Xe._id]?"Loading...":"Load More"})})]})]},Xe._id)},[it,Ve,ft,k,ze,Xt,A,Q,Dt,Vt]),Kt=at.useCallback((Xe,Ot=0)=>{var E;const It=Fe.has(Xe._id),Et=Ve[Xe._id]||[],At=(ft==null?void 0:ft._id)===Xe._id&&(ft==null?void 0:ft.type)==="folder";return G?G(Xe,Ot,It,()=>Jt(Xe)):Be.jsxs("div",{className:"bdsa-folder-browser__folder",style:{marginLeft:`${Ot*20}px`},children:[Be.jsxs("div",{className:`bdsa-folder-browser__folder-header ${At?"selected":""}`,onClick:()=>Jt(Xe),onDoubleClick:()=>Xt(Xe,"folder"),children:[Be.jsx("span",{className:`bdsa-folder-browser__folder-icon ${It?"expanded":""}`,children:It?"📂":"📁"}),Be.jsx("span",{className:"bdsa-folder-browser__folder-name",children:Xe.name}),Be.jsx("span",{className:"bdsa-folder-browser__folder-type",children:"Folder"})]}),It&&Be.jsxs("div",{className:"bdsa-folder-browser__folder-contents",children:[Et.map(q=>Kt(q,Ot+1)),A>0&&((E=Q[Xe._id])==null?void 0:E.hasMore)&&Be.jsx("div",{className:"bdsa-folder-browser__load-more",style:{marginLeft:`${(Ot+1)*20}px`},children:Be.jsx("button",{className:"bdsa-folder-browser__load-more-btn",onClick:()=>Ke(Xe,!0),disabled:Dt[Xe._id],children:Dt[Xe._id]?"Loading...":"Load More"})})]})]},Xe._id)},[Fe,Ve,ft,G,Jt,Xt,A,Q,Dt,Ke]);return Be.jsxs("div",{ref:W,className:`bdsa-folder-browser ${R}`,children:[zt&&Be.jsx("div",{className:"bdsa-folder-browser__loading",children:Be.jsx("span",{children:m&&y?`Loading ${y}...`:"Loading collections..."})}),Gt&&Be.jsxs("div",{className:"bdsa-folder-browser__error",children:[Be.jsx("span",{children:Gt.message}),Be.jsx("button",{onClick:()=>{m&&y?ii():bt()},children:"Retry"})]}),!zt&&!Gt&&Be.jsxs(Be.Fragment,{children:[m&&y==="collection"&&ye&&Be.jsx("div",{className:"bdsa-folder-browser__collections",children:St(ye)}),m&&y==="folder"&&ht&&Be.jsx("div",{className:"bdsa-folder-browser__collections",children:Kt(ht,0)}),!m&&h&&Be.jsx("div",{className:"bdsa-folder-browser__collections",children:O.length===0?Be.jsx("div",{className:"bdsa-folder-browser__empty",children:Be.jsx("span",{children:"No collections found"})}):O.map(Xe=>St(Xe))})]})]})});nn.displayName="FolderBrowser";exports.AnnotationManager=tn;exports.Button=Ji;exports.Card=Xi;exports.FolderBrowser=nn;exports.IndexedDBAnnotationCache=qi;exports.MemoryAnnotationCache=cn;exports.SlideViewer=en;exports.checkIndexedDBQuota=$i;exports.formatBytes=Vi;exports.logQuotaInfo=fn;exports.requestPersistentStorage=pn;
1709
1709
  //# sourceMappingURL=index.cjs.map