bdsa-react-components 0.1.8 → 0.1.10
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/CURSOR_INTEGRATION.md +1 -1
- package/dist/components/AnnotationManager/AnnotationManager.d.ts +33 -1
- package/dist/components/AnnotationManager/AnnotationManager.d.ts.map +1 -1
- package/dist/index.cjs +15 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4843 -4815
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"use strict";var rn=Object.defineProperty;var sn=(Oe,
|
|
1
|
+
"use strict";var rn=Object.defineProperty;var sn=(Oe,he,n)=>he in Oe?rn(Oe,he,{enumerable:!0,configurable:!0,writable:!0,value:n}):Oe[he]=n;var ki=(Oe,he,n)=>sn(Oe,typeof he!="symbol"?he+"":he,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Pe=require("react/jsx-runtime"),tt=require("react"),Ji=tt.forwardRef(({variant:Oe="primary",size:he="medium",fullWidth:n=!1,loading:o=!1,className:u="",children:h,disabled:g,...y},a)=>{const w=["bdsa-button",`bdsa-button--${Oe}`,`bdsa-button--${he}`,n?"bdsa-button--full-width":"",o?"bdsa-button--loading":"",u].filter(Boolean).join(" ");return Pe.jsx("button",{ref:a,className:w,disabled:g||o,...y,children:o?Pe.jsxs(Pe.Fragment,{children:[Pe.jsx("span",{className:"bdsa-button__spinner"}),Pe.jsx("span",{className:"bdsa-button__text",children:h})]}):h})});Ji.displayName="Button";const Xi=tt.forwardRef(({header:Oe,footer:he,children:n,shadow:o="small",bordered:u=!0,hoverable:h=!1,padding:g="medium",className:y="",...a},w)=>{const _=["bdsa-card",`bdsa-card--shadow-${o}`,u?"bdsa-card--bordered":"",h?"bdsa-card--hoverable":"",y].filter(Boolean).join(" "),T=["bdsa-card__content",`bdsa-card__content--padding-${g}`].join(" ");return Pe.jsxs("div",{ref:w,className:_,...a,children:[Oe&&Pe.jsx("div",{className:"bdsa-card__header",children:Oe}),Pe.jsx("div",{className:T,children:n}),he&&Pe.jsx("div",{className:"bdsa-card__footer",children:he})]})});Xi.displayName="Card";var on=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function an(Oe){return Oe&&Oe.__esModule&&Object.prototype.hasOwnProperty.call(Oe,"default")?Oe.default:Oe}var Wi={exports:{}},Zi;function Ki(){return Zi||(Zi=1,function(Oe){//! 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 le(n){return new le.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(g){return n.type(g)==="function"},n.isArray=Array.isArray||function(g){return n.type(g)==="array"},n.isWindow=function(g){return g&&typeof g=="object"&&"setInterval"in g},n.type=function(g){return g==null?String(g):o[u.call(g)]||"object"},n.isPlainObject=function(g){if(!g||le.type(g)!=="object"||g.nodeType||n.isWindow(g)||g.constructor&&!h.call(g,"constructor")&&!h.call(g.constructor.prototype,"isPrototypeOf"))return!1;var y;for(var a in g)y=a;return y===void 0||h.call(g,y)},n.isEmptyObject=function(g){for(var y in g)return!1;return!0},n.freezeObject=function(g){return Object.freeze?n.freezeObject=Object.freeze:n.freezeObject=function(y){return y},n.freezeObject(g)},n.supportsCanvas=function(){var g=document.createElement("canvas");return!!(n.isFunction(g.getContext)&&g.getContext("2d"))}(),n.isCanvasTainted=function(g){var y=!1;try{g.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 g=0;if(n.supportsAddEventListener)try{var y={get capture(){return g++,!1},get once(){return g++,!1},get passive(){return g++,!1}};window.addEventListener("test",null,y),window.removeEventListener("test",null,y)}catch{g=0}return g>=3}(),n.getCurrentPixelDensityRatio=function(){if(n.supportsCanvas){var g=document.createElement("canvas").getContext("2d"),y=window.devicePixelRatio||1,a=g.webkitBackingStorePixelRatio||g.mozBackingStorePixelRatio||g.msBackingStorePixelRatio||g.oBackingStorePixelRatio||g.backingStorePixelRatio||1;return Math.max(y,1)/a}else return 1},n.pixelDensityRatio=n.getCurrentPixelDensityRatio()})(le),function(n){n.extend=function(){var a,w,_,S,B,O,V=arguments[0]||{},W=arguments.length,k=!1,ee=1;for(typeof V=="boolean"&&(k=V,V=arguments[1]||{},ee=2),typeof V!="object"&&!le.isFunction(V)&&(V={}),W===ee&&(V=this,--ee);ee<W;ee++)if(a=arguments[ee],a!==null||a!==void 0)for(w in a){var _e=Object.getOwnPropertyDescriptor(a,w);if(_e!==void 0){if(_e.get||_e.set){Object.defineProperty(V,w,_e);continue}S=_e.value}else{n.console.warn('Could not copy inherited property "'+w+'".');continue}V!==S&&(k&&S&&(le.isPlainObject(S)||(B=le.isArray(S)))?(_=V[w],B?(B=!1,O=_&&le.isArray(_)?_:[]):O=_&&le.isPlainObject(_)?_:{},V[w]=le.extend(k,O,S)):S!==void 0&&(V[w]=S))}return V};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,_,S;for(a=n.getElement(a),_=n.getElementStyle(a).position==="fixed",S=y(a,_);S;)w.x+=a.offsetLeft,w.y+=a.offsetTop,_&&(w=w.plus(n.getPageScroll())),a=S,_=n.getElementStyle(a).position==="fixed",S=y(a,_);return w},getElementOffset:function(a){a=n.getElement(a);var w=a&&a.ownerDocument,_,S,B={top:0,left:0};return w?(_=w.documentElement,typeof a.getBoundingClientRect<"u"&&(B=a.getBoundingClientRect()),S=w===w.window?w:w.nodeType===9?w.defaultView||w.parentWindow:!1,new n.Point(B.left+(S.pageXOffset||_.scrollLeft)-(_.clientLeft||0),B.top+(S.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 S=document.createElement("div").style,B=null;if(S[_]!==void 0)B=_;else for(var O=["Webkit","Moz","MS","O","webkit","moz","ms","o"],V=n.capitalizeFirstLetter(_),W=0;W<O.length;W++){var k=O[W]+V;if(S[k]!==void 0){B=k;break}}return w[_]=B,B},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),S=n.getElementSize(a);return w.x>=_.x&&w.x<_.x+S.x&&w.y<_.y+S.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(S){window.scrollTo(S.x,S.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(S){document.body.scrollLeft=S.x,document.body.scrollTop=S.y};return}if(document.documentElement.scrollLeft=a.x,document.documentElement.scrollTop=a.y,_=n.getPageScroll(),_.x!==w.x&&_.y!==w.y){n.setPageScroll=function(S){document.documentElement.scrollLeft=S.x,document.documentElement.scrollTop=S.y};return}n.setPageScroll=function(S){}}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 S,B;a=n.getElement(a),_&&!n.Browser.alpha&&(w=Math.round(w)),n.Browser.opacity?a.style.opacity=w<1?w:"":w<1?(S=Math.round(100*w),B="alpha(opacity="+S+")",a.style.filter=B):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(S,B,O){return S.indexOf(B,O)}:this.indexOf=function(S,B,O){var V,W=O||0,k;if(!S)throw new TypeError;if(k=S.length,k===0||W>=k)return-1;for(W<0&&(W=k-Math.abs(W)),V=W;V<k;V++)if(S[V]===B)return V;return-1},this.indexOf(a,w,_)},removeClass:function(a,w){var _,S=[],B;for(a=n.getElement(a),_=a.className.split(/\s+/),B=0;B<_.length;B++)_[B]&&_[B]!==w&&S.push(_[B]);a.className=S.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,_,S){S=n.normalizeEventListenerOptions(S),a=n.getElement(a),a.addEventListener(w,_,S)};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,_,S){S=n.normalizeEventListenerOptions(S),a=n.getElement(a),a.removeEventListener(w,_,S)};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 _=[],S;for(S=2;S<arguments.length;S++)_.push(arguments[S]);return function(){var B=_.concat([]),O;for(O=0;O<arguments.length;O++)B.push(arguments[O]);return w.apply(a,B)}},getUrlParameter:function(a){var w=g[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 S,B,O,V;n.isPlainObject(a)&&(w=a.success,_=a.error,S=a.withCredentials,B=a.headers,O=a.responseType||null,V=a.postData||null,a=a.url);var W=n.getUrlProtocol(a),k=n.createAjaxRequest();if(!n.isFunction(w))throw new Error("makeAjaxRequest requires a success callback");k.onreadystatechange=function(){k.readyState===4&&(k.onreadystatechange=function(){},k.status>=200&&k.status<300||k.status===0&&W!=="http:"&&W!=="https:"?w(k):n.isFunction(_)?_(k):n.console.error("AJAX request returned %d: %s",k.status,a))};var ee=V?"POST":"GET";try{if(k.open(ee,a,!0),O&&(k.responseType=O),B)for(var _e in B)Object.prototype.hasOwnProperty.call(B,_e)&&B[_e]&&k.setRequestHeader(_e,B[_e]);S&&(k.withCredentials=!0),k.send(V)}catch(be){n.console.error("%s while making AJAX request: %s",be.name,be.message),k.onreadystatechange=function(){},n.isFunction(_)&&_(k,be)}return k},jsonp:function(a){var w,_=a.url,S=document.head||document.getElementsByTagName("head")[0]||document.documentElement,B=a.callbackName||"openseadragon"+n.now(),O=window[B],V="$1"+B+"$2",W=a.param||"callback",k=a.callback;_=_.replace(/(=)\?(&|$)|\?\?/i,V),_+=(/\?/.test(_)?"&":"?")+W+"="+B,window[B]=function(ee){if(O)window[B]=O;else try{delete window[B]}catch{}k&&n.isFunction(k)&&k(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,_e){(_e||!w.readyState||/loaded|complete/.test(w.readyState))&&(w.onload=w.onreadystatechange=null,S&&w.parentNode&&S.removeChild(w),w=void 0)},S.insertBefore(w,S.firstChild)},createFromDZI:function(){throw"OpenSeadragon.createFromDZI is deprecated, use Viewer.open."},parseXml:function(a){if(window.DOMParser)n.parseXml=function(w){var _=null,S;return S=new DOMParser,_=S.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},g={};(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 S=window.location.search.substring(1),B=S.split("&"),O,V,W;for(W=0;W<B.length;W++)if(O=B[W],V=O.indexOf("="),V>0){var k=O.substring(0,V),ee=O.substring(V+1);try{g[k]=decodeURIComponent(ee)}catch{n.console.error("Ignoring malformed URL parameter: %s=%s",k,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 S=[],B=[],O=0,V;n.requestAnimationFrame=function(W){return S.push([++O,W]),V||(V=setInterval(function(){if(S.length){var k=n.now(),ee=B;for(B=S,S=ee;B.length;)B.shift()[1](k)}else clearInterval(V),V=void 0},1e3/50)),O},n.cancelAnimationFrame=function(W){var k,ee;for(k=0,ee=S.length;k<ee;k+=1)if(S[k][0]===W){S.splice(k,1);return}for(k=0,ee=B.length;k<ee;k+=1)if(B[k][0]===W){B.splice(k,1);return}}}}(window);function y(a,w){return w&&a!==document.body?document.body:a.offsetParent}}(le),function(n,o){Oe.exports?Oe.exports=o():n.OpenSeadragon=o()}(on,function(){return le}),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,g){return new o([1,0,0,0,1,0,h,g,1])}static makeRotation(h){var g=Math.cos(h),y=Math.sin(h);return new o([g,-y,0,y,g,0,0,0,1])}static makeScaling(h,g){return new o([h,0,0,0,g,0,0,0,1])}multiply(h){let g=this.values,y=h.values;var a=g[0*3+0],w=g[0*3+1],_=g[0*3+2],S=g[1*3+0],B=g[1*3+1],O=g[1*3+2],V=g[2*3+0],W=g[2*3+1],k=g[2*3+2],ee=y[0*3+0],_e=y[0*3+1],be=y[0*3+2],lt=y[1*3+0],Qe=y[1*3+1],Xe=y[1*3+2],bt=y[2*3+0],$=y[2*3+1],At=y[2*3+2];return new o([ee*a+_e*S+be*V,ee*w+_e*B+be*W,ee*_+_e*O+be*k,lt*a+Qe*S+Xe*V,lt*w+Qe*B+Xe*W,lt*_+Qe*O+Xe*k,bt*a+$*S+At*V,bt*w+$*B+At*W,bt*_+$*O+At*k])}}n.Mat3=o}(le),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)}(le),function(n){n.EventSource=function(){this.events={},this._rejectedEventList={}},n.EventSource.prototype={addOnceHandler:function(o,u,h,g,y){var a=this;g=g||1;var w=0,_=function(S){return w++,w===g&&a.removeHandler(o,_),u(S)};return this.addHandler(o,_,h,y)},addHandler:function(o,u,h,g){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:g||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],g=[],y;if(h&&n.isArray(h)){for(y=0;y<h.length;y++)h[y].handler!==u&&g.push(h[y]);this.events[o]=g}},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,g){var y,a=u.length;for(y=0;y<a;y++)u[y]&&(g.eventSource=h,g.userData=u[y].userData,u[y].handler(g))})},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]}}}(le),function(n){var o={};n.MouseTracker=function(T){var x=arguments;n.isPlainObject(T)||(T={element:x[0],clickTimeThreshold:x[1],clickDistThreshold:x[2]}),this.hash=Math.random(),this.element=n.getElement(T.element),this.clickTimeThreshold=T.clickTimeThreshold||n.DEFAULT_SETTINGS.clickTimeThreshold,this.clickDistThreshold=T.clickDistThreshold||n.DEFAULT_SETTINGS.clickDistThreshold,this.dblClickTimeThreshold=T.dblClickTimeThreshold||n.DEFAULT_SETTINGS.dblClickTimeThreshold,this.dblClickDistThreshold=T.dblClickDistThreshold||n.DEFAULT_SETTINGS.dblClickDistThreshold,this.userData=T.userData||null,this.stopDelay=T.stopDelay||50,this.preProcessEventHandler=T.preProcessEventHandler||null,this.contextMenuHandler=T.contextMenuHandler||null,this.enterHandler=T.enterHandler||null,this.leaveHandler=T.leaveHandler||null,this.exitHandler=T.exitHandler||null,this.overHandler=T.overHandler||null,this.outHandler=T.outHandler||null,this.pressHandler=T.pressHandler||null,this.nonPrimaryPressHandler=T.nonPrimaryPressHandler||null,this.releaseHandler=T.releaseHandler||null,this.nonPrimaryReleaseHandler=T.nonPrimaryReleaseHandler||null,this.moveHandler=T.moveHandler||null,this.scrollHandler=T.scrollHandler||null,this.clickHandler=T.clickHandler||null,this.dblClickHandler=T.dblClickHandler||null,this.dragHandler=T.dragHandler||null,this.dragEndHandler=T.dragEndHandler||null,this.pinchHandler=T.pinchHandler||null,this.stopHandler=T.stopHandler||null,this.keyDownHandler=T.keyDownHandler||null,this.keyUpHandler=T.keyUpHandler||null,this.keyHandler=T.keyHandler||null,this.focusHandler=T.focusHandler||null,this.blurHandler=T.blurHandler||null;var M=this;o[this.hash]={click:function(L){be(M,L)},dblclick:function(L){lt(M,L)},keydown:function(L){Qe(M,L)},keyup:function(L){Xe(M,L)},keypress:function(L){bt(M,L)},focus:function(L){$(M,L)},blur:function(L){At(M,L)},contextmenu:function(L){$e(M,L)},wheel:function(L){Tt(M,L)},mousewheel:function(L){De(M,L)},DOMMouseScroll:function(L){De(M,L)},MozMousePixelScroll:function(L){De(M,L)},losecapture:function(L){_t(M,L)},mouseenter:function(L){yt(M,L)},mouseleave:function(L){ri(M,L)},mouseover:function(L){Ke(M,L)},mouseout:function(L){ei(M,L)},mousedown:function(L){Ye(M,L)},mouseup:function(L){Dt(M,L)},mousemove:function(L){qt(M,L)},touchstart:function(L){gt(M,L)},touchend:function(L){Ft(M,L)},touchmove:function(L){dt(M,L)},touchcancel:function(L){Nt(M,L)},gesturestart:function(L){Vt(M,L)},gesturechange:function(L){Wt(M,L)},gotpointercapture:function(L){ni(M,L)},lostpointercapture:function(L){zt(M,L)},pointerenter:function(L){yt(M,L)},pointerleave:function(L){ri(M,L)},pointerover:function(L){Ke(M,L)},pointerout:function(L){ei(M,L)},pointerdown:function(L){Ye(M,L)},pointerup:function(L){Dt(M,L)},pointermove:function(L){qt(M,L)},pointercancel:function(L){ti(M,L)},pointerupcaptured:function(L){oi(M,L)},pointermovecaptured:function(L){di(M,L)},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."),T.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(T){return T?y(this):a(this),this},getActivePointersListByType:function(T){var x=o[this.hash],M,L=x?x.activePointersLists.length:0,ie;for(M=0;M<L;M++)if(x.activePointersLists[M].type===T)return x.activePointersLists[M];return ie=new n.MouseTracker.GesturePointList(T),x&&x.activePointersLists.push(ie),ie},getActivePointerCount:function(){var T=o[this.hash],x,M=T.activePointersLists.length,L=0;for(x=0;x<M;x++)L+=T.activePointersLists[x].getLength();return L},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(T){try{return T.addEventListener&&T.removeEventListener}catch{return!1}}n.MouseTracker.gesturePointVelocityTracker=function(){var T=[],x=0,M=0,L=function(Me,Re){return Me.hash.toString()+Re.type+Re.id.toString()},ie=function(){var Me,Re=T.length,He,ht,Et=n.now(),kt,Zt,si;for(kt=Et-M,M=Et,Me=0;Me<Re;Me++)He=T[Me],ht=He.gPoint,ht.direction=Math.atan2(ht.currentPos.y-He.lastPos.y,ht.currentPos.x-He.lastPos.x),Zt=He.lastPos.distanceTo(ht.currentPos),He.lastPos=ht.currentPos,si=1e3*Zt/(kt+1),ht.speed=.75*si+.25*ht.speed},ve=function(Me,Re){var He=L(Me,Re);T.push({guid:He,gPoint:Re,lastPos:Re.currentPos}),T.length===1&&(M=n.now(),x=window.setInterval(ie,50))},Ne=function(Me,Re){var He=L(Me,Re),ht,Et=T.length;for(ht=0;ht<Et;ht++)if(T[ht].guid===He){T.splice(ht,1),Et--,Et===0&&window.clearInterval(x);break}};return{addPoint:ve,removePoint:Ne}}(),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 T=document.createElement("div");return n.isFunction(T.setPointerCapture)&&n.isFunction(T.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 T=document.createElement("div");return n.isFunction(T.setCapture)&&n.isFunction(T.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(T){this._gPoints=[],this.type=T,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(T){return this._gPoints.push(T)},removeById:function(T){var x,M=this._gPoints.length;for(x=0;x<M;x++)if(this._gPoints[x].id===T){this._gPoints.splice(x,1);break}return this._gPoints.length},getByIndex:function(T){return T<this._gPoints.length?this._gPoints[T]:null},getById:function(T){var x,M=this._gPoints.length;for(x=0;x<M;x++)if(this._gPoints[x].id===T)return this._gPoints[x];return null},getPrimary:function(T){var x,M=this._gPoints.length;for(x=0;x<M;x++)if(this._gPoints[x].isPrimary)return this._gPoints[x];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 g(T){var x=o[T.hash],M,L,ie,ve,Ne,Me=x.activePointersLists.length;for(M=0;M<Me;M++)if(ie=x.activePointersLists[M],ie.getLength()>0){for(Ne=[],ve=ie.asArray(),L=0;L<ve.length;L++)Ne.push(ve[L]);for(L=0;L<Ne.length;L++)It(T,ie,Ne[L])}for(M=0;M<Me;M++)x.activePointersLists.pop();x.sentDragEvent=!1}function y(T){var x=o[T.hash],M,L;if(!x.tracking){for(L=0;L<n.MouseTracker.subscribeEvents.length;L++)M=n.MouseTracker.subscribeEvents[L],n.addEvent(T.element,M,x[M],M===n.MouseTracker.wheelEventName?{passive:!1,capture:!1}:!1);g(T),x.tracking=!0}}function a(T){var x=o[T.hash],M,L;if(x.tracking){for(L=0;L<n.MouseTracker.subscribeEvents.length;L++)M=n.MouseTracker.subscribeEvents[L],n.removeEvent(T.element,M,x[M],!1);g(T),x.tracking=!1}}function w(T,x){var M=o[T.hash];if(x==="pointerevent")return{upName:"pointerup",upHandler:M.pointerupcaptured,moveName:"pointermove",moveHandler:M.pointermovecaptured};if(x==="mouse")return{upName:"pointerup",upHandler:M.pointerupcaptured,moveName:"pointermove",moveHandler:M.pointermovecaptured};if(x==="touch")return{upName:"touchend",upHandler:M.touchendcaptured,moveName:"touchmove",moveHandler:M.touchmovecaptured};throw new Error("MouseTracker.getCaptureEventParams: Unknown pointer type.")}function _(T,x){var M;if(n.MouseTracker.havePointerCapture)if(n.MouseTracker.havePointerEvents)try{T.element.setPointerCapture(x.id)}catch{n.console.warn("setPointerCapture() called on invalid pointer ID");return}else T.element.setCapture(!0);else M=w(T,n.MouseTracker.havePointerEvents?"pointerevent":x.type),u&&h(window.top)&&n.addEvent(window.top,M.upName,M.upHandler,!0),n.addEvent(n.MouseTracker.captureElement,M.upName,M.upHandler,!0),n.addEvent(n.MouseTracker.captureElement,M.moveName,M.moveHandler,!0);pe(T,x,!0)}function S(T,x){var M,L,ie;if(n.MouseTracker.havePointerCapture)if(n.MouseTracker.havePointerEvents){if(L=T.getActivePointersListByType(x.type),ie=L.getById(x.id),!ie||!ie.captured)return;try{T.element.releasePointerCapture(x.id)}catch{}}else T.element.releaseCapture();else M=w(T,n.MouseTracker.havePointerEvents?"pointerevent":x.type),u&&h(window.top)&&n.removeEvent(window.top,M.upName,M.upHandler,!0),n.removeEvent(n.MouseTracker.captureElement,M.moveName,M.moveHandler,!0),n.removeEvent(n.MouseTracker.captureElement,M.upName,M.upHandler,!0);pe(T,x,!1)}function B(T){return n.MouseTracker.havePointerEvents?T.pointerId:n.MouseTracker.mousePointerId}function O(T){return n.MouseTracker.havePointerEvents&&T.pointerType?T.pointerType:"mouse"}function V(T){return n.MouseTracker.havePointerEvents?T.isPrimary:!0}function W(T){return n.getMousePosition(T)}function k(T,x){return ee(W(T),x)}function ee(T,x){var M=n.getElementOffset(x);return T.minus(M)}function _e(T,x){return new n.Point((T.x+x.x)/2,(T.y+x.y)/2)}function be(T,x){var M={originalEvent:x,eventType:"click",pointerType:"mouse",isEmulated:!1};q(T,M),M.preventDefault&&!M.defaultPrevented&&n.cancelEvent(x),M.stopPropagation&&n.stopEvent(x)}function lt(T,x){var M={originalEvent:x,eventType:"dblclick",pointerType:"mouse",isEmulated:!1};q(T,M),M.preventDefault&&!M.defaultPrevented&&n.cancelEvent(x),M.stopPropagation&&n.stopEvent(x)}function Qe(T,x){var M=null,L={originalEvent:x,eventType:"keydown",pointerType:"",isEmulated:!1};q(T,L),T.keyDownHandler&&!L.preventGesture&&!L.defaultPrevented&&(M={eventSource:T,keyCode:x.keyCode?x.keyCode:x.charCode,ctrl:x.ctrlKey,shift:x.shiftKey,alt:x.altKey,meta:x.metaKey,originalEvent:x,preventDefault:L.preventDefault||L.defaultPrevented,userData:T.userData},T.keyDownHandler(M)),(M&&M.preventDefault||L.preventDefault&&!L.defaultPrevented)&&n.cancelEvent(x),L.stopPropagation&&n.stopEvent(x)}function Xe(T,x){var M=null,L={originalEvent:x,eventType:"keyup",pointerType:"",isEmulated:!1};q(T,L),T.keyUpHandler&&!L.preventGesture&&!L.defaultPrevented&&(M={eventSource:T,keyCode:x.keyCode?x.keyCode:x.charCode,ctrl:x.ctrlKey,shift:x.shiftKey,alt:x.altKey,meta:x.metaKey,originalEvent:x,preventDefault:L.preventDefault||L.defaultPrevented,userData:T.userData},T.keyUpHandler(M)),(M&&M.preventDefault||L.preventDefault&&!L.defaultPrevented)&&n.cancelEvent(x),L.stopPropagation&&n.stopEvent(x)}function bt(T,x){var M=null,L={originalEvent:x,eventType:"keypress",pointerType:"",isEmulated:!1};q(T,L),T.keyHandler&&!L.preventGesture&&!L.defaultPrevented&&(M={eventSource:T,keyCode:x.keyCode?x.keyCode:x.charCode,ctrl:x.ctrlKey,shift:x.shiftKey,alt:x.altKey,meta:x.metaKey,originalEvent:x,preventDefault:L.preventDefault||L.defaultPrevented,userData:T.userData},T.keyHandler(M)),(M&&M.preventDefault||L.preventDefault&&!L.defaultPrevented)&&n.cancelEvent(x),L.stopPropagation&&n.stopEvent(x)}function $(T,x){var M={originalEvent:x,eventType:"focus",pointerType:"",isEmulated:!1};q(T,M),T.focusHandler&&!M.preventGesture&&T.focusHandler({eventSource:T,originalEvent:x,userData:T.userData})}function At(T,x){var M={originalEvent:x,eventType:"blur",pointerType:"",isEmulated:!1};q(T,M),T.blurHandler&&!M.preventGesture&&T.blurHandler({eventSource:T,originalEvent:x,userData:T.userData})}function $e(T,x){var M=null,L={originalEvent:x,eventType:"contextmenu",pointerType:"mouse",isEmulated:!1};q(T,L),T.contextMenuHandler&&!L.preventGesture&&!L.defaultPrevented&&(M={eventSource:T,position:ee(W(x),T.element),originalEvent:L.originalEvent,preventDefault:L.preventDefault||L.defaultPrevented,userData:T.userData},T.contextMenuHandler(M)),(M&&M.preventDefault||L.preventDefault&&!L.defaultPrevented)&&n.cancelEvent(x),L.stopPropagation&&n.stopEvent(x)}function Tt(T,x){Mt(T,x,x)}function De(T,x){var M={target:x.target||x.srcElement,type:"wheel",shiftKey:x.shiftKey||!1,clientX:x.clientX,clientY:x.clientY,pageX:x.pageX?x.pageX:x.clientX,pageY:x.pageY?x.pageY:x.clientY,deltaMode:x.type==="MozMousePixelScroll"?0:1,deltaX:0,deltaZ:0};n.MouseTracker.wheelEventName==="mousewheel"?M.deltaY=-x.wheelDelta/n.DEFAULT_SETTINGS.pixelsPerWheelLine:M.deltaY=x.detail,Mt(T,M,x)}function Mt(T,x,M){var L=0,ie,ve=null;L=x.deltaY?x.deltaY<0?1:-1:0,ie={originalEvent:x,eventType:"wheel",pointerType:"mouse",isEmulated:x!==M},q(T,ie),T.scrollHandler&&!ie.preventGesture&&!ie.defaultPrevented&&(ve={eventSource:T,pointerType:"mouse",position:k(x,T.element),scroll:L,shift:x.shiftKey,isTouchEvent:!1,originalEvent:M,preventDefault:ie.preventDefault||ie.defaultPrevented,userData:T.userData},T.scrollHandler(ve)),ie.stopPropagation&&n.stopEvent(M),(ve&&ve.preventDefault||ie.preventDefault&&!ie.defaultPrevented)&&n.cancelEvent(M)}function _t(T,x){var M={id:n.MouseTracker.mousePointerId,type:"mouse"},L={originalEvent:x,eventType:"lostpointercapture",pointerType:"mouse",isEmulated:!1};q(T,L),x.target===T.element&&pe(T,M,!1),L.stopPropagation&&n.stopEvent(x)}function gt(T,x){var M,L,ie=x.changedTouches.length,ve,Ne=T.getActivePointersListByType("touch");M=n.now(),Ne.getLength()>x.touches.length-ie&&n.console.warn("Tracked touch contact count doesn't match event.touches.length");var Me={originalEvent:x,eventType:"pointerdown",pointerType:"touch",isEmulated:!1};for(q(T,Me),L=0;L<ie;L++)ve={id:x.changedTouches[L].identifier,type:"touch",isPrimary:Ne.getLength()===0,currentPos:W(x.changedTouches[L]),currentTime:M},Ie(T,Me,ve),vt(T,Me,ve,0),pe(T,ve,!0);Me.preventDefault&&!Me.defaultPrevented&&n.cancelEvent(x),Me.stopPropagation&&n.stopEvent(x)}function Ft(T,x){var M,L,ie=x.changedTouches.length,ve;M=n.now();var Ne={originalEvent:x,eventType:"pointerup",pointerType:"touch",isEmulated:!1};for(q(T,Ne),L=0;L<ie;L++)ve={id:x.changedTouches[L].identifier,type:"touch",currentPos:W(x.changedTouches[L]),currentTime:M},Rt(T,Ne,ve,0),pe(T,ve,!1),je(T,Ne,ve);Ne.preventDefault&&!Ne.defaultPrevented&&n.cancelEvent(x),Ne.stopPropagation&&n.stopEvent(x)}function dt(T,x){var M,L,ie=x.changedTouches.length,ve;M=n.now();var Ne={originalEvent:x,eventType:"pointermove",pointerType:"touch",isEmulated:!1};for(q(T,Ne),L=0;L<ie;L++)ve={id:x.changedTouches[L].identifier,type:"touch",currentPos:W(x.changedTouches[L]),currentTime:M},Q(T,Ne,ve);Ne.preventDefault&&!Ne.defaultPrevented&&n.cancelEvent(x),Ne.stopPropagation&&n.stopEvent(x)}function Nt(T,x){var M=x.changedTouches.length,L,ie,ve={originalEvent:x,eventType:"pointercancel",pointerType:"touch",isEmulated:!1};for(q(T,ve),L=0;L<M;L++)ie={id:x.changedTouches[L].identifier,type:"touch"},ye(T,ve,ie);ve.stopPropagation&&n.stopEvent(x)}function Vt(T,x){return n.eventIsCanceled(x)||x.preventDefault(),!1}function Wt(T,x){return n.eventIsCanceled(x)||x.preventDefault(),!1}function ni(T,x){var M={originalEvent:x,eventType:"gotpointercapture",pointerType:O(x),isEmulated:!1};q(T,M),x.target===T.element&&pe(T,{id:x.pointerId,type:O(x)},!0),M.stopPropagation&&n.stopEvent(x)}function zt(T,x){var M={originalEvent:x,eventType:"lostpointercapture",pointerType:O(x),isEmulated:!1};q(T,M),x.target===T.element&&pe(T,{id:x.pointerId,type:O(x)},!1),M.stopPropagation&&n.stopEvent(x)}function yt(T,x){var M={id:B(x),type:O(x),isPrimary:V(x),currentPos:W(x),currentTime:n.now()},L={originalEvent:x,eventType:"pointerenter",pointerType:M.type,isEmulated:!1};q(T,L),Ie(T,L,M)}function ri(T,x){var M={id:B(x),type:O(x),isPrimary:V(x),currentPos:W(x),currentTime:n.now()},L={originalEvent:x,eventType:"pointerleave",pointerType:M.type,isEmulated:!1};q(T,L),je(T,L,M)}function Ke(T,x){var M={id:B(x),type:O(x),isPrimary:V(x),currentPos:W(x),currentTime:n.now()},L={originalEvent:x,eventType:"pointerover",pointerType:M.type,isEmulated:!1};q(T,L),et(T,L,M),L.preventDefault&&!L.defaultPrevented&&n.cancelEvent(x),L.stopPropagation&&n.stopEvent(x)}function ei(T,x){var M={id:B(x),type:O(x),isPrimary:V(x),currentPos:W(x),currentTime:n.now()},L={originalEvent:x,eventType:"pointerout",pointerType:M.type,isEmulated:!1};q(T,L),ke(T,L,M),L.preventDefault&&!L.defaultPrevented&&n.cancelEvent(x),L.stopPropagation&&n.stopEvent(x)}function Ye(T,x){var M={id:B(x),type:O(x),isPrimary:V(x),currentPos:W(x),currentTime:n.now()},L=n.MouseTracker.havePointerEvents&&M.type==="touch",ie={originalEvent:x,eventType:"pointerdown",pointerType:M.type,isEmulated:!1};q(T,ie),vt(T,ie,M,x.button),ie.preventDefault&&!ie.defaultPrevented&&n.cancelEvent(x),ie.stopPropagation&&n.stopEvent(x),ie.shouldCapture&&(L?pe(T,M,!0):_(T,M))}function Dt(T,x){St(T,x)}function oi(T,x){var M=T.getActivePointersListByType(O(x));M.getById(x.pointerId)&&St(T,x),n.stopEvent(x)}function St(T,x){var M;M={id:B(x),type:O(x),isPrimary:V(x),currentPos:W(x),currentTime:n.now()};var L={originalEvent:x,eventType:"pointerup",pointerType:M.type,isEmulated:!1};q(T,L),Rt(T,L,M,x.button),L.preventDefault&&!L.defaultPrevented&&n.cancelEvent(x),L.stopPropagation&&n.stopEvent(x),L.shouldReleaseCapture&&(x.target===T.element?S(T,M):pe(T,M,!1))}function qt(T,x){$t(T,x)}function di(T,x){var M=T.getActivePointersListByType(O(x));M.getById(x.pointerId)&&$t(T,x),n.stopEvent(x)}function $t(T,x){var M={id:B(x),type:O(x),isPrimary:V(x),currentPos:W(x),currentTime:n.now()},L={originalEvent:x,eventType:"pointermove",pointerType:M.type,isEmulated:!1};q(T,L),Q(T,L,M),L.preventDefault&&!L.defaultPrevented&&n.cancelEvent(x),L.stopPropagation&&n.stopEvent(x)}function ti(T,x){var M={id:x.pointerId,type:O(x)},L={originalEvent:x,eventType:"pointercancel",pointerType:M.type,isEmulated:!1};q(T,L),ye(T,L,M),L.stopPropagation&&n.stopEvent(x)}function jt(T,x){return x.speed=0,x.direction=0,x.contactPos=x.currentPos,x.contactTime=x.currentTime,x.lastPos=x.currentPos,x.lastTime=x.currentTime,T.add(x)}function It(T,x,M){var L,ie=x.getById(M.id);return ie?(ie.captured&&(n.console.warn("stopTrackingPointer() called on captured pointer"),S(T,ie)),x.removeContact(),L=x.removeById(M.id)):L=x.getLength(),L}function I(T,x){switch(x.eventType){case"pointermove":x.isStoppable=!0,x.isCancelable=!0,x.preventDefault=!1,x.preventGesture=!T.hasGestureHandlers,x.stopPropagation=!1;break;case"pointerover":case"pointerout":case"contextmenu":case"keydown":case"keyup":case"keypress":x.isStoppable=!0,x.isCancelable=!0,x.preventDefault=!1,x.preventGesture=!1,x.stopPropagation=!1;break;case"pointerdown":x.isStoppable=!0,x.isCancelable=!0,x.preventDefault=!1,x.preventGesture=!T.hasGestureHandlers,x.stopPropagation=!1;break;case"pointerup":x.isStoppable=!0,x.isCancelable=!0,x.preventDefault=!1,x.preventGesture=!T.hasGestureHandlers,x.stopPropagation=!1;break;case"wheel":x.isStoppable=!0,x.isCancelable=!0,x.preventDefault=!1,x.preventGesture=!T.hasScrollHandler,x.stopPropagation=!1;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":x.isStoppable=!0,x.isCancelable=!1,x.preventDefault=!1,x.preventGesture=!1,x.stopPropagation=!1;break;case"click":x.isStoppable=!0,x.isCancelable=!0,x.preventDefault=!!T.clickHandler,x.preventGesture=!1,x.stopPropagation=!1;break;case"dblclick":x.isStoppable=!0,x.isCancelable=!0,x.preventDefault=!!T.dblClickHandler,x.preventGesture=!1,x.stopPropagation=!1;break;case"focus":case"blur":case"pointerenter":case"pointerleave":default:x.isStoppable=!1,x.isCancelable=!1,x.preventDefault=!1,x.preventGesture=!1,x.stopPropagation=!1;break}}function q(T,x){x.eventSource=T,x.eventPhase=x.originalEvent&&typeof x.originalEvent.eventPhase<"u"?x.originalEvent.eventPhase:0,x.defaultPrevented=n.eventIsCanceled(x.originalEvent),x.shouldCapture=!1,x.shouldReleaseCapture=!1,x.userData=T.userData,I(T,x),T.preProcessEventHandler&&T.preProcessEventHandler(x)}function pe(T,x,M){var L=T.getActivePointersListByType(x.type),ie=L.getById(x.id);ie?M&&!ie.captured?(ie.captured=!0,L.captureCount++):!M&&ie.captured&&(ie.captured=!1,L.captureCount--,L.captureCount<0&&(L.captureCount=0,n.console.warn("updatePointerCaptured() - pointsList.captureCount went negative"))):n.console.warn("updatePointerCaptured() called on untracked pointer")}function Ie(T,x,M){var L=T.getActivePointersListByType(M.type),ie;ie=L.getById(M.id),ie?(ie.insideElement=!0,ie.lastPos=ie.currentPos,ie.lastTime=ie.currentTime,ie.currentPos=M.currentPos,ie.currentTime=M.currentTime,M=ie):(M.captured=!1,M.insideElementPressed=!1,M.insideElement=!0,jt(L,M)),T.enterHandler&&T.enterHandler({eventSource:T,pointerType:M.type,position:ee(M.currentPos,T.element),buttons:L.buttons,pointers:T.getActivePointerCount(),insideElementPressed:M.insideElementPressed,buttonDownAny:L.buttons!==0,isTouchEvent:M.type==="touch",originalEvent:x.originalEvent,userData:T.userData})}function je(T,x,M){var L=T.getActivePointersListByType(M.type),ie,ve;ie=L.getById(M.id),ie?(ie.captured?(ie.insideElement=!1,ie.lastPos=ie.currentPos,ie.lastTime=ie.currentTime,ie.currentPos=M.currentPos,ie.currentTime=M.currentTime):It(T,L,ie),M=ie):(M.captured=!1,M.insideElementPressed=!1),(T.leaveHandler||T.exitHandler)&&(ve={eventSource:T,pointerType:M.type,position:M.currentPos&&ee(M.currentPos,T.element),buttons:L.buttons,pointers:T.getActivePointerCount(),insideElementPressed:M.insideElementPressed,buttonDownAny:L.buttons!==0,isTouchEvent:M.type==="touch",originalEvent:x.originalEvent,userData:T.userData},T.leaveHandler&&T.leaveHandler(ve),T.exitHandler&&T.exitHandler(ve))}function et(T,x,M){var L,ie;L=T.getActivePointersListByType(M.type),ie=L.getById(M.id),ie?M=ie:(M.captured=!1,M.insideElementPressed=!1),T.overHandler&&T.overHandler({eventSource:T,pointerType:M.type,position:ee(M.currentPos,T.element),buttons:L.buttons,pointers:T.getActivePointerCount(),insideElementPressed:M.insideElementPressed,buttonDownAny:L.buttons!==0,isTouchEvent:M.type==="touch",originalEvent:x.originalEvent,userData:T.userData})}function ke(T,x,M){var L,ie;L=T.getActivePointersListByType(M.type),ie=L.getById(M.id),ie?M=ie:(M.captured=!1,M.insideElementPressed=!1),T.outHandler&&T.outHandler({eventSource:T,pointerType:M.type,position:M.currentPos&&ee(M.currentPos,T.element),buttons:L.buttons,pointers:T.getActivePointerCount(),insideElementPressed:M.insideElementPressed,buttonDownAny:L.buttons!==0,isTouchEvent:M.type==="touch",originalEvent:x.originalEvent,userData:T.userData})}function vt(T,x,M,L){var ie=o[T.hash],ve=T.getActivePointersListByType(M.type),Ne;if(typeof x.originalEvent.buttons<"u"?ve.buttons=x.originalEvent.buttons:L===0?ve.buttons|=1:L===1?ve.buttons|=4:L===2?ve.buttons|=2:L===3?ve.buttons|=8:L===4?ve.buttons|=16:L===5&&(ve.buttons|=32),L!==0){x.shouldCapture=!1,x.shouldReleaseCapture=!1,T.nonPrimaryPressHandler&&!x.preventGesture&&!x.defaultPrevented&&(x.preventDefault=!0,T.nonPrimaryPressHandler({eventSource:T,pointerType:M.type,position:ee(M.currentPos,T.element),button:L,buttons:ve.buttons,isTouchEvent:M.type==="touch",originalEvent:x.originalEvent,userData:T.userData}));return}Ne=ve.getById(M.id),Ne?(Ne.insideElementPressed=!0,Ne.insideElement=!0,Ne.originalTarget=x.originalEvent.target,Ne.contactPos=M.currentPos,Ne.contactTime=M.currentTime,Ne.lastPos=Ne.currentPos,Ne.lastTime=Ne.currentTime,Ne.currentPos=M.currentPos,Ne.currentTime=M.currentTime,M=Ne):(M.captured=!1,M.insideElementPressed=!0,M.insideElement=!0,M.originalTarget=x.originalEvent.target,jt(ve,M)),ve.addContact(),!x.preventGesture&&!x.defaultPrevented?(x.shouldCapture=!0,x.shouldReleaseCapture=!1,x.preventDefault=!0,(T.dragHandler||T.dragEndHandler||T.pinchHandler)&&n.MouseTracker.gesturePointVelocityTracker.addPoint(T,M),ve.contacts===1?T.pressHandler&&!x.preventGesture&&T.pressHandler({eventSource:T,pointerType:M.type,position:ee(M.contactPos,T.element),buttons:ve.buttons,isTouchEvent:M.type==="touch",originalEvent:x.originalEvent,userData:T.userData}):ve.contacts===2&&T.pinchHandler&&M.type==="touch"&&(ie.pinchGPoints=ve.asArray(),ie.lastPinchDist=ie.currentPinchDist=ie.pinchGPoints[0].currentPos.distanceTo(ie.pinchGPoints[1].currentPos),ie.lastPinchCenter=ie.currentPinchCenter=_e(ie.pinchGPoints[0].currentPos,ie.pinchGPoints[1].currentPos))):(x.shouldCapture=!1,x.shouldReleaseCapture=!1)}function Rt(T,x,M,L){var ie=o[T.hash],ve=T.getActivePointersListByType(M.type),Ne,Me,Re,He=!1,ht;if(typeof x.originalEvent.buttons<"u"?ve.buttons=x.originalEvent.buttons:L===0?ve.buttons^=-2:L===1?ve.buttons^=-5:L===2?ve.buttons^=-3:L===3?ve.buttons^=-9:L===4?ve.buttons^=-17:L===5&&(ve.buttons^=-33),x.shouldCapture=!1,L!==0){x.shouldReleaseCapture=!1,T.nonPrimaryReleaseHandler&&!x.preventGesture&&!x.defaultPrevented&&(x.preventDefault=!0,T.nonPrimaryReleaseHandler({eventSource:T,pointerType:M.type,position:ee(M.currentPos,T.element),button:L,buttons:ve.buttons,isTouchEvent:M.type==="touch",originalEvent:x.originalEvent,userData:T.userData}));return}Re=ve.getById(M.id),Re?(ve.removeContact(),Re.captured&&(He=!0),Re.lastPos=Re.currentPos,Re.lastTime=Re.currentTime,Re.currentPos=M.currentPos,Re.currentTime=M.currentTime,Re.insideElement||It(T,ve,Re),Ne=Re.currentPos,Me=Re.currentTime):(M.captured=!1,M.insideElementPressed=!1,M.insideElement=!0,jt(ve,M),Re=M),!x.preventGesture&&!x.defaultPrevented&&(He?(x.shouldReleaseCapture=!0,x.preventDefault=!0,(T.dragHandler||T.dragEndHandler||T.pinchHandler)&&n.MouseTracker.gesturePointVelocityTracker.removePoint(T,Re),ve.contacts===0?(T.releaseHandler&&Ne&&T.releaseHandler({eventSource:T,pointerType:Re.type,position:ee(Ne,T.element),buttons:ve.buttons,insideElementPressed:Re.insideElementPressed,insideElementReleased:Re.insideElement,isTouchEvent:Re.type==="touch",originalEvent:x.originalEvent,userData:T.userData}),T.dragEndHandler&&ie.sentDragEvent&&T.dragEndHandler({eventSource:T,pointerType:Re.type,position:ee(Re.currentPos,T.element),speed:Re.speed,direction:Re.direction,shift:x.originalEvent.shiftKey,isTouchEvent:Re.type==="touch",originalEvent:x.originalEvent,userData:T.userData}),ie.sentDragEvent=!1,(T.clickHandler||T.dblClickHandler)&&Re.insideElement&&(ht=Me-Re.contactTime<=T.clickTimeThreshold&&Re.contactPos.distanceTo(Ne)<=T.clickDistThreshold,T.clickHandler&&T.clickHandler({eventSource:T,pointerType:Re.type,position:ee(Re.currentPos,T.element),quick:ht,shift:x.originalEvent.shiftKey,isTouchEvent:Re.type==="touch",originalEvent:x.originalEvent,originalTarget:Re.originalTarget,userData:T.userData}),T.dblClickHandler&&ht&&(ve.clicks++,ve.clicks===1?(ie.lastClickPos=Ne,ie.dblClickTimeOut=setTimeout(function(){ve.clicks=0},T.dblClickTimeThreshold)):ve.clicks===2&&(clearTimeout(ie.dblClickTimeOut),ve.clicks=0,ie.lastClickPos.distanceTo(Ne)<=T.dblClickDistThreshold&&T.dblClickHandler({eventSource:T,pointerType:Re.type,position:ee(Re.currentPos,T.element),shift:x.originalEvent.shiftKey,isTouchEvent:Re.type==="touch",originalEvent:x.originalEvent,userData:T.userData}),ie.lastClickPos=null)))):ve.contacts===2&&T.pinchHandler&&Re.type==="touch"&&(ie.pinchGPoints=ve.asArray(),ie.lastPinchDist=ie.currentPinchDist=ie.pinchGPoints[0].currentPos.distanceTo(ie.pinchGPoints[1].currentPos),ie.lastPinchCenter=ie.currentPinchCenter=_e(ie.pinchGPoints[0].currentPos,ie.pinchGPoints[1].currentPos))):(x.shouldReleaseCapture=!1,T.releaseHandler&&Ne&&(T.releaseHandler({eventSource:T,pointerType:Re.type,position:ee(Ne,T.element),buttons:ve.buttons,insideElementPressed:Re.insideElementPressed,insideElementReleased:Re.insideElement,isTouchEvent:Re.type==="touch",originalEvent:x.originalEvent,userData:T.userData}),x.preventDefault=!0)))}function Q(T,x,M){var L=o[T.hash],ie=T.getActivePointersListByType(M.type),ve,Ne,Me;if(typeof x.originalEvent.buttons<"u"&&(ie.buttons=x.originalEvent.buttons),ve=ie.getById(M.id),ve)ve.lastPos=ve.currentPos,ve.lastTime=ve.currentTime,ve.currentPos=M.currentPos,ve.currentTime=M.currentTime;else return;x.shouldCapture=!1,x.shouldReleaseCapture=!1,T.stopHandler&&M.type==="mouse"&&(clearTimeout(T.stopTimeOut),T.stopTimeOut=setTimeout(function(){qe(T,x.originalEvent,M.type)},T.stopDelay)),ie.contacts===0?T.moveHandler&&T.moveHandler({eventSource:T,pointerType:M.type,position:ee(M.currentPos,T.element),buttons:ie.buttons,isTouchEvent:M.type==="touch",originalEvent:x.originalEvent,userData:T.userData}):ie.contacts===1?(T.moveHandler&&(ve=ie.asArray()[0],T.moveHandler({eventSource:T,pointerType:ve.type,position:ee(ve.currentPos,T.element),buttons:ie.buttons,isTouchEvent:ve.type==="touch",originalEvent:x.originalEvent,userData:T.userData})),T.dragHandler&&!x.preventGesture&&!x.defaultPrevented&&(ve=ie.asArray()[0],Me=ve.currentPos.minus(ve.lastPos),T.dragHandler({eventSource:T,pointerType:ve.type,position:ee(ve.currentPos,T.element),buttons:ie.buttons,delta:Me,speed:ve.speed,direction:ve.direction,shift:x.originalEvent.shiftKey,isTouchEvent:ve.type==="touch",originalEvent:x.originalEvent,userData:T.userData}),x.preventDefault=!0,L.sentDragEvent=!0)):ie.contacts===2&&(T.moveHandler&&(Ne=ie.asArray(),T.moveHandler({eventSource:T,pointerType:Ne[0].type,position:ee(_e(Ne[0].currentPos,Ne[1].currentPos),T.element),buttons:ie.buttons,isTouchEvent:Ne[0].type==="touch",originalEvent:x.originalEvent,userData:T.userData})),T.pinchHandler&&M.type==="touch"&&!x.preventGesture&&!x.defaultPrevented&&(Me=L.pinchGPoints[0].currentPos.distanceTo(L.pinchGPoints[1].currentPos),Me!==L.currentPinchDist&&(L.lastPinchDist=L.currentPinchDist,L.currentPinchDist=Me,L.lastPinchCenter=L.currentPinchCenter,L.currentPinchCenter=_e(L.pinchGPoints[0].currentPos,L.pinchGPoints[1].currentPos),T.pinchHandler({eventSource:T,pointerType:"touch",gesturePoints:L.pinchGPoints,lastCenter:ee(L.lastPinchCenter,T.element),center:ee(L.currentPinchCenter,T.element),lastDistance:L.lastPinchDist,distance:L.currentPinchDist,shift:x.originalEvent.shiftKey,originalEvent:x.originalEvent,userData:T.userData}),x.preventDefault=!0)))}function ye(T,x,M){var L=T.getActivePointersListByType(M.type),ie;ie=L.getById(M.id),ie&&It(T,L,ie)}function qe(T,x,M){T.stopHandler&&T.stopHandler({eventSource:T,pointerType:M,position:k(x,T.element),buttons:T.getActivePointersListByType(M).buttons,isTouchEvent:M==="touch",originalEvent:x,userData:T.userData})}}(le),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 g=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):g.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)}}}(le),function(n){n.ControlDock=function(u){var h=["topleft","topright","bottomright","bottomleft"],g,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++)g=h[y],this.controls[g]=n.makeNeutralElement("div"),this.controls[g].style.position="absolute",g.match("left")&&(this.controls[g].style.left="0px"),g.match("right")&&(this.controls[g].style.right="0px"),g.match("top")&&(this.controls[g].style.top="0px"),g.match("bottom")&&(this.controls[g].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 g=null;if(!(o(this,u)>=0)){switch(h.anchor){case n.ControlAnchor.TOP_RIGHT:g=this.controls.topright,u.style.position="relative",u.style.paddingRight="0px",u.style.paddingTop="0px";break;case n.ControlAnchor.BOTTOM_RIGHT:g=this.controls.bottomright,u.style.position="relative",u.style.paddingRight="0px",u.style.paddingBottom="0px";break;case n.ControlAnchor.BOTTOM_LEFT:g=this.controls.bottomleft,u.style.position="relative",u.style.paddingLeft="0px",u.style.paddingBottom="0px";break;case n.ControlAnchor.TOP_LEFT:g=this.controls.topleft,u.style.position="relative",u.style.paddingLeft="0px",u.style.paddingTop="0px";break;case n.ControlAnchor.ABSOLUTE:g=this.container,u.style.margin="0px",u.style.padding="0px";break;default:case n.ControlAnchor.NONE:g=this.container,u.style.margin="0px",u.style.padding="0px";break}this.controls.push(new n.Control(u,h,g)),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 g=u.controls,y;for(y=g.length-1;y>=0;y--)if(g[y].element===h)return y;return-1}}(le),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}}})}(le),function(n){var o={},u=1;n.Viewer=function(I){var q=arguments,pe=this,Ie;n.isPlainObject(I)||(I={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}),I.config&&(n.extend(!0,I,I.config),delete I.config);let je=["useCanvas"];if(I.drawerOptions=Object.assign({},je.reduce((ke,vt)=>(ke[vt]=I[vt],delete I[vt],ke),{}),I.drawerOptions),n.extend(!0,this,{id:I.id,hash:I.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,I),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(ke){var vt=n.getString("Errors.OpenFailed",ke.eventSource,ke.message);pe._showMessage(vt)}),n.ControlDock.call(this,I),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(ke){ke.width="100%",ke.height="100%",ke.overflow="hidden",ke.position="absolute",ke.top="0px",ke.left="0px"}(this.canvas.style),n.setElementTouchActionNone(this.canvas),I.tabIndex!==""&&(this.canvas.tabIndex=I.tabIndex===void 0?0:I.tabIndex),this.container.className="openseadragon-container",function(ke){ke.width="100%",ke.height="100%",ke.position="relative",ke.overflow="hidden",ke.left="0px",ke.top="0px",ke.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,k),keyDownHandler:n.delegate(this,ee),keyHandler:n.delegate(this,_e),clickHandler:n.delegate(this,be),dblClickHandler:n.delegate(this,lt),dragHandler:n.delegate(this,Qe),dragEndHandler:n.delegate(this,Xe),enterHandler:n.delegate(this,bt),leaveHandler:n.delegate(this,$),pressHandler:n.delegate(this,At),releaseHandler:n.delegate(this,$e),nonPrimaryPressHandler:n.delegate(this,Tt),nonPrimaryReleaseHandler:n.delegate(this,De),scrollHandler:n.delegate(this,Ft),pinchHandler:n.delegate(this,Mt),focusHandler:n.delegate(this,_t),blurHandler:n.delegate(this,gt)}),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,Nt)}),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[pe.hash].needsResize=!0}),this._resizeObserver.observe(this.container,{})):this._autoResizePolling=!0,this.world=new n.World({viewer:this}),this.world.addHandler("add-item",function(ke){pe.source=pe.world.getItemAt(0).source,o[pe.hash].forceRedraw=!0,pe._updateRequestId||(pe._updateRequestId=w(pe,Vt))}),this.world.addHandler("remove-item",function(ke){pe.world.getItemCount()?pe.source=pe.world.getItemAt(0).source:pe.source=null,o[pe.hash].forceRedraw=!0}),this.world.addHandler("metrics-change",function(ke){pe.viewport&&pe.viewport._setContentBounds(pe.world.getHomeBounds(),pe.world.getContentFactor())}),this.world.addHandler("item-index-change",function(ke){pe.source=pe.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:I.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 et=Array.isArray(this.drawer)?this.drawer:[this.drawer];et.length===0&&(et=[n.DEFAULT_SETTINGS.drawer].flat(),n.console.warn("No valid drawers were selected. Using the default value.")),this.drawer=null;for(const ke of et)if(this.requestDrawer(ke,{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&&(Ie=this.buttonGroup.buttons.indexOf(this.rotateLeft),this.buttonGroup.buttons.splice(Ie,1),this.buttonGroup.element.removeChild(this.rotateLeft.element)),this.rotateRight&&(Ie=this.buttonGroup.buttons.indexOf(this.rotateRight),this.buttonGroup.buttons.splice(Ie,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),Ie=0;Ie<this.customControls.length;Ie++)this.addControl(this.customControls[Ie].id,{anchor:this.customControls[Ie].anchor});n.requestAnimationFrame(function(){S(pe)}),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(I){return n.console.error("[Viewer.openDzi] this function is deprecated; use Viewer.open() instead."),this.open(I)},openTileSource:function(I){return n.console.error("[Viewer.openTileSource] this function is deprecated; use Viewer.open() instead."),this.open(I)},get buttons(){return n.console.warn("Viewer.buttons is deprecated; Please use Viewer.buttonGroup"),this.buttonGroup},open:function(I,q){var pe=this;if(this.close(),!I)return this;if(this.sequenceMode&&n.isArray(I))return this.referenceStrip&&(this.referenceStrip.destroy(),this.referenceStrip=null),typeof q<"u"&&!isNaN(q)&&(this.initialPage=q),this.tileSources=I,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(I)||(I=[I]),!I.length)return this;this._opening=!0;for(var Ie=I.length,je=0,et=0,ke,vt=function(){if(je+et===Ie)if(je){(pe._firstOpen||!pe.preserveViewport)&&(pe.viewport.goHome(!0),pe.viewport.update()),pe._firstOpen=!1;var ye=I[0];if(ye.tileSource&&(ye=ye.tileSource),pe.overlays&&!pe.preserveOverlays)for(var qe=0;qe<pe.overlays.length;qe++)pe.currentOverlays[qe]=y(pe,pe.overlays[qe]);pe._drawOverlays(),pe._opening=!1,pe.raiseEvent("open",{source:ye})}else pe._opening=!1,pe.raiseEvent("open-failed",ke)},Rt=function(ye){(!n.isPlainObject(ye)||!ye.tileSource)&&(ye={tileSource:ye}),ye.index!==void 0&&(n.console.error("[Viewer.open] setting indexes here is not supported; use addTiledImage instead"),delete ye.index),ye.collectionImmediately===void 0&&(ye.collectionImmediately=!0);var qe=ye.success;ye.success=function(x){if(je++,ye.tileSource.overlays)for(var M=0;M<ye.tileSource.overlays.length;M++)pe.addOverlay(ye.tileSource.overlays[M]);qe&&qe(x),vt()};var T=ye.error;ye.error=function(x){et++,ke||(ke=x),T&&T(x),vt()},pe.addTiledImage(ye)},Q=0;Q<I.length;Q++)Rt(I[Q]);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(I,q){const pe={mainDrawer:!0,redrawImmediately:!0,drawerOptions:null};q=n.extend(!0,pe,q);const Ie=q.mainDrawer,je=q.redrawImmediately,et=q.drawerOptions,ke=this.drawer;let vt=null;if(I&&I.prototype instanceof n.DrawerBase?(vt=I,I="custom"):typeof I=="string"&&(vt=n.determineDrawer(I)),vt||n.console.warn("Unsupported drawer! Drawer must be an existing string type, or a class that extends OpenSeadragon.DrawerBase."),vt&&vt.isSupported()){ke&&Ie&&ke.destroy();const Rt=new vt({viewer:this,viewport:this.viewport,element:this.canvas,debugGridColor:this.debugGridColor,options:et||this.drawerOptions[I]});return Ie&&(this.drawer=Rt,je&&this.forceRedraw()),Rt}return!1},isMouseNavEnabled:function(){return this.innerTracker.isTracking()},setMouseNavEnabled:function(I){return this.innerTracker.setTracking(I),this.outerTracker.setTracking(I),this.raiseEvent("mouse-enabled",{enabled:I}),this},areControlsEnabled:function(){var I=this.controls.length,q;for(q=0;q<this.controls.length;q++)I=I&&this.controls[q].isVisible();return I},setControlsEnabled:function(I){return I?O(this):S(this),this.raiseEvent("controls-enabled",{enabled:I}),this},setDebugMode:function(I){for(var q=0;q<this.world.getItemCount();q++)this.world.getItemAt(q).debugMode=I;this.debugMode=I,this.forceRedraw()},setAjaxHeaders:function(I,q){if(I===null&&(I={}),!n.isPlainObject(I)){console.error("[Viewer.setAjaxHeaders] Ignoring invalid headers, must be a plain object");return}if(q===void 0&&(q=!0),this.ajaxHeaders=I,q){for(var pe=0;pe<this.world.getItemCount();pe++)this.world.getItemAt(pe)._updateAjaxHeaders(!0);if(this.navigator&&this.navigator.setAjaxHeaders(this.ajaxHeaders,!0),this.referenceStrip&&this.referenceStrip.miniViewers)for(var Ie in this.referenceStrip.miniViewers)this.referenceStrip.miniViewers[Ie].setAjaxHeaders(this.ajaxHeaders,!0)}},addButton:function(I){this.buttonGroup.addButton(I)},isFullPage:function(){return o[this.hash]&&o[this.hash].fullPage},setFullPage:function(I){var q=document.body,pe=q.style,Ie=document.documentElement.style,je=this,et,ke;if(I===this.isFullPage())return this;var vt={fullPage:I,preventDefaultAction:!1};if(this.raiseEvent("pre-full-page",vt),vt.preventDefaultAction)return this;if(I&&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=pe.margin,this.docMargin=Ie.margin,pe.margin="0",Ie.margin="0",this.bodyPadding=pe.padding,this.docPadding=Ie.padding,pe.padding="0",Ie.padding="0",this.bodyWidth=pe.width,this.docWidth=Ie.width,pe.width="100%",Ie.width="100%",this.bodyHeight=pe.height,this.docHeight=Ie.height,pe.height="100%",Ie.height="100%",this.bodyDisplay=pe.display,pe.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,et=q.childNodes.length,ke=0;ke<et;ke++)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,pe.margin=this.bodyMargin,Ie.margin=this.docMargin,pe.padding=this.bodyPadding,Ie.padding=this.docPadding,pe.width=this.bodyWidth,Ie.width=this.docWidth,pe.height=this.bodyHeight,Ie.height=this.docHeight,pe.display=this.bodyDisplay,q.removeChild(this.element),et=this.previousBody.length,ke=0;ke<et;ke++)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 Rt=0,Q=function(){n.setPageScroll(je.pageScroll);var ye=n.getPageScroll();Rt++,Rt<10&&(ye.x!==je.pageScroll.x||ye.y!==je.pageScroll.y)&&n.requestAnimationFrame(Q)};n.requestAnimationFrame(Q),o[this.hash].fullPage=!1,n.delegate(this,Nt)({})}return this.navigator&&this.viewport&&this.navigator.update(this.viewport),this.raiseEvent("full-page",{fullPage:I}),this},setFullScreen:function(I){var q=this;if(!n.supportsFullScreen)return this.setFullPage(I);if(n.isFullScreen()===I)return this;var pe={fullScreen:I,preventDefaultAction:!1};if(this.raiseEvent("pre-full-screen",pe),pe.preventDefaultAction)return this;if(I){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 Ie=function(){var je=n.isFullScreen();je||(n.removeEvent(document,n.fullScreenEventName,Ie),n.removeEvent(document,n.fullScreenErrorEventName,Ie),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:je})};n.addEvent(document,n.fullScreenEventName,Ie),n.addEvent(document,n.fullScreenErrorEventName,Ie),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(I){return this.container.style.visibility=I?"":"hidden",this.raiseEvent("visible",{visible:I}),this},addTiledImage:function(I){n.console.assert(I,"[Viewer.addTiledImage] options is required"),n.console.assert(I.tileSource,"[Viewer.addTiledImage] options.tileSource is required"),n.console.assert(!I.replace||I.index>-1&&I.index<this.world.getItemCount(),"[Viewer.addTiledImage] if options.replace is used, options.index must be a valid index in Viewer.world");var q=this;I.replace&&(I.replaceItem=q.world.getItemAt(I.index)),this._hideMessage(),I.placeholderFillStyle===void 0&&(I.placeholderFillStyle=this.placeholderFillStyle),I.opacity===void 0&&(I.opacity=this.opacity),I.preload===void 0&&(I.preload=this.preload),I.compositeOperation===void 0&&(I.compositeOperation=this.compositeOperation),I.crossOriginPolicy===void 0&&(I.crossOriginPolicy=I.tileSource.crossOriginPolicy!==void 0?I.tileSource.crossOriginPolicy:this.crossOriginPolicy),I.ajaxWithCredentials===void 0&&(I.ajaxWithCredentials=this.ajaxWithCredentials),I.loadTilesWithAjax===void 0&&(I.loadTilesWithAjax=this.loadTilesWithAjax),n.isPlainObject(I.ajaxHeaders)||(I.ajaxHeaders={});var pe={options:I};function Ie(ke){for(var vt=0;vt<q._loadQueue.length;vt++)if(q._loadQueue[vt]===pe){q._loadQueue.splice(vt,1);break}q._loadQueue.length===0&&je(pe),q.raiseEvent("add-item-failed",ke),I.error&&I.error(ke)}function je(ke){q.collectionMode&&(q.world.arrange({immediately:ke.options.collectionImmediately,rows:q.collectionRows,columns:q.collectionColumns,layout:q.collectionLayout,tileSize:q.collectionTileSize,tileMargin:q.collectionTileMargin}),q.world.setAutoRefigureSizes(!0))}if(n.isArray(I.tileSource)){setTimeout(function(){Ie({message:"[Viewer.addTiledImage] Sequences can not be added; add them one at a time instead.",source:I.tileSource,options:I})});return}this._loadQueue.push(pe);function et(){for(var ke,vt,Rt;q._loadQueue.length&&(ke=q._loadQueue[0],!!ke.tileSource);){if(q._loadQueue.splice(0,1),ke.options.replace){var Q=q.world.getIndexOfItem(ke.options.replaceItem);Q!==-1&&(ke.options.index=Q),q.world.removeItem(ke.options.replaceItem)}vt=new n.TiledImage({viewer:q,source:ke.tileSource,viewport:q.viewport,drawer:q.drawer,tileCache:q.tileCache,imageLoader:q.imageLoader,x:ke.options.x,y:ke.options.y,width:ke.options.width,height:ke.options.height,fitBounds:ke.options.fitBounds,fitBoundsPlacement:ke.options.fitBoundsPlacement,clip:ke.options.clip,placeholderFillStyle:ke.options.placeholderFillStyle,opacity:ke.options.opacity,preload:ke.options.preload,degrees:ke.options.degrees,flipped:ke.options.flipped,compositeOperation:ke.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:ke.options.crossOriginPolicy,ajaxWithCredentials:ke.options.ajaxWithCredentials,loadTilesWithAjax:ke.options.loadTilesWithAjax,ajaxHeaders:ke.options.ajaxHeaders,debugMode:q.debugMode,subPixelRoundingForTransparency:q.subPixelRoundingForTransparency}),q.collectionMode&&q.world.setAutoRefigureSizes(!1),q.navigator&&(Rt=n.extend({},ke.options,{replace:!1,originalTiledImage:vt,tileSource:ke.tileSource}),q.navigator.addTiledImage(Rt)),q.world.addItem(vt,{index:ke.options.index}),q._loadQueue.length===0&&je(ke),q.world.getItemCount()===1&&!q.preserveViewport&&q.viewport.goHome(!0),ke.options.success&&ke.options.success({item:vt})}}g(this,I.tileSource,I,function(ke){pe.tileSource=ke,et()},function(ke){ke.options=I,Ie(ke),et()})},addSimpleImage:function(I){n.console.assert(I,"[Viewer.addSimpleImage] options is required"),n.console.assert(I.url,"[Viewer.addSimpleImage] options.url is required");var q=n.extend({},I,{tileSource:{type:"image",url:I.url}});delete q.url,this.addTiledImage(q)},addLayer:function(I){var q=this;n.console.error("[Viewer.addLayer] this function is deprecated; use Viewer.addTiledImage() instead.");var pe=n.extend({},I,{success:function(Ie){q.raiseEvent("add-layer",{options:I,drawer:Ie.item})},error:function(Ie){q.raiseEvent("add-layer-failed",Ie)}});return this.addTiledImage(pe),this},getLayerAtLevel:function(I){return n.console.error("[Viewer.getLayerAtLevel] this function is deprecated; use World.getItemAt() instead."),this.world.getItemAt(I)},getLevelOfLayer:function(I){return n.console.error("[Viewer.getLevelOfLayer] this function is deprecated; use World.getIndexOfItem() instead."),this.world.getIndexOfItem(I)},getLayersCount:function(){return n.console.error("[Viewer.getLayersCount] this function is deprecated; use World.getItemCount() instead."),this.world.getItemCount()},setLayerLevel:function(I,q){return n.console.error("[Viewer.setLayerLevel] this function is deprecated; use World.setItemIndex() instead."),this.world.setItemIndex(I,q)},removeLayer:function(I){return n.console.error("[Viewer.removeLayer] this function is deprecated; use World.removeItem() instead."),this.world.removeItem(I)},forceRedraw:function(){return o[this.hash].forceRedraw=!0,this},forceResize:function(){o[this.hash].needsResize=!0,o[this.hash].forceResize=!0},bindSequenceControls:function(){var I=n.delegate(this,V),q=n.delegate(this,W),pe=n.delegate(this,this.goToNextPage),Ie=n.delegate(this,this.goToPreviousPage),je=this.navImages,et=!0;return this.showSequenceControl&&((this.previousButton||this.nextButton)&&(et=!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:yt(this.prefixUrl,je.previous.REST),srcGroup:yt(this.prefixUrl,je.previous.GROUP),srcHover:yt(this.prefixUrl,je.previous.HOVER),srcDown:yt(this.prefixUrl,je.previous.DOWN),onRelease:Ie,onFocus:I,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:yt(this.prefixUrl,je.next.REST),srcGroup:yt(this.prefixUrl,je.next.GROUP),srcHover:yt(this.prefixUrl,je.next.HOVER),srcDown:yt(this.prefixUrl,je.next.DOWN),onRelease:pe,onFocus:I,onBlur:q}),this.navPrevNextWrap||this.previousButton.disable(),(!this.tileSources||!this.tileSources.length)&&this.nextButton.disable(),et&&(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 I=n.delegate(this,ri),q=n.delegate(this,ei),pe=n.delegate(this,oi),Ie=n.delegate(this,Ke),je=n.delegate(this,St),et=n.delegate(this,di),ke=n.delegate(this,$t),vt=n.delegate(this,ti),Rt=n.delegate(this,jt),Q=n.delegate(this,It),ye=n.delegate(this,V),qe=n.delegate(this,W),T=this.navImages,x=[],M=!0;return this.showNavigationControl&&((this.zoomInButton||this.zoomOutButton||this.homeButton||this.fullPageButton||this.rotateLeftButton||this.rotateRightButton||this.flipButton)&&(M=!1),this.showZoomControl&&(x.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:yt(this.prefixUrl,T.zoomIn.REST),srcGroup:yt(this.prefixUrl,T.zoomIn.GROUP),srcHover:yt(this.prefixUrl,T.zoomIn.HOVER),srcDown:yt(this.prefixUrl,T.zoomIn.DOWN),onPress:I,onRelease:q,onClick:pe,onEnter:I,onExit:q,onFocus:ye,onBlur:qe})),x.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:yt(this.prefixUrl,T.zoomOut.REST),srcGroup:yt(this.prefixUrl,T.zoomOut.GROUP),srcHover:yt(this.prefixUrl,T.zoomOut.HOVER),srcDown:yt(this.prefixUrl,T.zoomOut.DOWN),onPress:Ie,onRelease:q,onClick:je,onEnter:Ie,onExit:q,onFocus:ye,onBlur:qe}))),this.showHomeControl&&x.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:yt(this.prefixUrl,T.home.REST),srcGroup:yt(this.prefixUrl,T.home.GROUP),srcHover:yt(this.prefixUrl,T.home.HOVER),srcDown:yt(this.prefixUrl,T.home.DOWN),onRelease:et,onFocus:ye,onBlur:qe})),this.showFullPageControl&&x.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:yt(this.prefixUrl,T.fullpage.REST),srcGroup:yt(this.prefixUrl,T.fullpage.GROUP),srcHover:yt(this.prefixUrl,T.fullpage.HOVER),srcDown:yt(this.prefixUrl,T.fullpage.DOWN),onRelease:ke,onFocus:ye,onBlur:qe})),this.showRotationControl&&(x.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:yt(this.prefixUrl,T.rotateleft.REST),srcGroup:yt(this.prefixUrl,T.rotateleft.GROUP),srcHover:yt(this.prefixUrl,T.rotateleft.HOVER),srcDown:yt(this.prefixUrl,T.rotateleft.DOWN),onRelease:vt,onFocus:ye,onBlur:qe})),x.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:yt(this.prefixUrl,T.rotateright.REST),srcGroup:yt(this.prefixUrl,T.rotateright.GROUP),srcHover:yt(this.prefixUrl,T.rotateright.HOVER),srcDown:yt(this.prefixUrl,T.rotateright.DOWN),onRelease:Rt,onFocus:ye,onBlur:qe}))),this.showFlipControl&&x.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:yt(this.prefixUrl,T.flip.REST),srcGroup:yt(this.prefixUrl,T.flip.GROUP),srcHover:yt(this.prefixUrl,T.flip.HOVER),srcDown:yt(this.prefixUrl,T.flip.DOWN),onRelease:Q,onFocus:ye,onBlur:qe})),M?(this.buttonGroup=new n.ButtonGroup({buttons:x,clickTimeThreshold:this.clickTimeThreshold,clickDistThreshold:this.clickDistThreshold}),this.navControl=this.buttonGroup.element,this.addHandler("open",n.delegate(this,qt)),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=x),this},currentPage:function(){return this._sequenceIndex},goToPage:function(I){return this.tileSources&&I>=0&&I<this.tileSources.length&&(this._sequenceIndex=I,this._updateSequenceButtons(I),this.open(this.tileSources[I]),this.referenceStrip&&this.referenceStrip.setFocus(I),this.raiseEvent("page",{page:I})),this},addOverlay:function(I,q,pe,Ie){var je;if(n.isPlainObject(I)?je=I:je={element:I,location:q,placement:pe,onDraw:Ie},I=n.getElement(je.element),a(this.currentOverlays,I)>=0)return this;var et=y(this,je);return this.currentOverlays.push(et),et.drawHTML(this.overlaysContainer,this.viewport),this.raiseEvent("add-overlay",{element:I,location:je.location,placement:je.placement}),this},updateOverlay:function(I,q,pe){var Ie;return I=n.getElement(I),Ie=a(this.currentOverlays,I),Ie>=0&&(this.currentOverlays[Ie].update(q,pe),o[this.hash].forceRedraw=!0,this.raiseEvent("update-overlay",{element:I,location:q,placement:pe})),this},removeOverlay:function(I){var q;return I=n.getElement(I),q=a(this.currentOverlays,I),q>=0&&(this.currentOverlays[q].destroy(),this.currentOverlays.splice(q,1),o[this.hash].forceRedraw=!0,this.raiseEvent("remove-overlay",{element:I})),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(I){var q;return I=n.getElement(I),q=a(this.currentOverlays,I),q>=0?this.currentOverlays[q]:null},_updateSequenceButtons:function(I){this.nextButton&&(!this.tileSources||this.tileSources.length-1===I?this.navPrevNextWrap||this.nextButton.disable():this.nextButton.enable()),this.previousButton&&(I>0?this.previousButton.enable():this.navPrevNextWrap||this.previousButton.disable())},_showMessage:function(I){this._hideMessage();var q=n.makeNeutralElement("div");q.appendChild(document.createTextNode(I)),this.messageDiv=n.makeCenteredNode(q),n.addClass(this.messageDiv,"openseadragon-message"),this.container.appendChild(this.messageDiv)},_hideMessage:function(){var I=this.messageDiv;I&&(I.parentNode.removeChild(I),delete this.messageDiv)},gestureSettingsByDeviceType:function(I){switch(I){case"mouse":return this.gestureSettingsMouse;case"touch":return this.gestureSettingsTouch;case"pen":return this.gestureSettingsPen;default:return this.gestureSettingsUnknown}},_drawOverlays:function(){var I,q=this.currentOverlays.length;for(I=0;I<q;I++)this.currentOverlays[I].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 I=n.pixelDensityRatio,q=n.getCurrentPixelDensityRatio();I!==q&&(n.pixelDensityRatio=q,this.forceResize())},goToPreviousPage:function(){var I=this._sequenceIndex-1;this.navPrevNextWrap&&I<0&&(I+=this.tileSources.length),this.goToPage(I)},goToNextPage:function(){var I=this._sequenceIndex+1;this.navPrevNextWrap&&I>=this.tileSources.length&&(I=0),this.goToPage(I)},isAnimating:function(){return o[this.hash].animating}});function h(I){return I=n.getElement(I),new n.Point(I.clientWidth===0?1:I.clientWidth,I.clientHeight===0?1:I.clientHeight)}function g(I,q,pe,Ie,je){var et=I;if(n.type(q)==="string"){if(q.match(/^\s*<.*>\s*$/))q=n.parseXml(q);else if(q.match(/^\s*[{[].*[}\]]\s*$/))try{var ke=n.parseJSON(q);q=ke}catch{}}function vt(Rt,Q){Rt.ready?Ie(Rt):(Rt.addHandler("ready",function(){Ie(Rt)}),Rt.addHandler("open-failed",function(ye){je({message:ye.message,source:Q})}))}setTimeout(function(){if(n.type(q)==="string")q=new n.TileSource({url:q,crossOriginPolicy:pe.crossOriginPolicy!==void 0?pe.crossOriginPolicy:I.crossOriginPolicy,ajaxWithCredentials:I.ajaxWithCredentials,ajaxHeaders:pe.ajaxHeaders?pe.ajaxHeaders:I.ajaxHeaders,splitHashDataForPost:I.splitHashDataForPost,success:function(qe){Ie(qe.tileSource)}}),q.addHandler("open-failed",function(qe){je(qe)});else if(n.isPlainObject(q)||q.nodeType)if(q.crossOriginPolicy===void 0&&(pe.crossOriginPolicy!==void 0||I.crossOriginPolicy!==void 0)&&(q.crossOriginPolicy=pe.crossOriginPolicy!==void 0?pe.crossOriginPolicy:I.crossOriginPolicy),q.ajaxWithCredentials===void 0&&(q.ajaxWithCredentials=I.ajaxWithCredentials),n.isFunction(q.getTileUrl)){var Rt=new n.TileSource(q);Rt.getTileUrl=q.getTileUrl,Ie(Rt)}else{var Q=n.TileSource.determineType(et,q);if(!Q){je({message:"Unable to load TileSource",source:q});return}var ye=Q.prototype.configure.apply(et,[q]);vt(new Q(ye),q)}else vt(q,q)})}function y(I,q){if(q instanceof n.Overlay)return q;var pe=null;if(q.element)pe=n.getElement(q.element);else{var Ie=q.id?q.id:"openseadragon-overlay-"+Math.floor(Math.random()*1e7);pe=n.getElement(q.id),pe||(pe=document.createElement("a"),pe.href="#/overlay/"+Ie),pe.id=Ie,n.addClass(pe,q.className?q.className:"openseadragon-overlay")}var je=q.location,et=q.width,ke=q.height;if(!je){var vt=q.x,Rt=q.y;if(q.px!==void 0){var Q=I.viewport.imageToViewportRectangle(new n.Rect(q.px,q.py,et||0,ke||0));vt=Q.x,Rt=Q.y,et=et!==void 0?Q.width:void 0,ke=ke!==void 0?Q.height:void 0}je=new n.Point(vt,Rt)}var ye=q.placement;return ye&&n.type(ye)==="string"&&(ye=n.Placement[q.placement.toUpperCase()]),new n.Overlay({element:pe,location:je,placement:ye,onDraw:q.onDraw,checkResize:q.checkResize,width:et,height:ke,rotationMode:q.rotationMode})}function a(I,q){var pe;for(pe=I.length-1;pe>=0;pe--)if(I[pe].element===q)return pe;return-1}function w(I,q){return n.requestAnimationFrame(function(){q(I)})}function _(I){n.requestAnimationFrame(function(){B(I)})}function S(I){I.autoHideControls&&(I.controlsShouldFade=!0,I.controlsFadeBeginTime=n.now()+I.controlsFadeDelay,window.setTimeout(function(){_(I)},I.controlsFadeDelay))}function B(I){var q,pe,Ie,je;if(I.controlsShouldFade){for(q=n.now(),pe=q-I.controlsFadeBeginTime,Ie=1-pe/I.controlsFadeLength,Ie=Math.min(1,Ie),Ie=Math.max(0,Ie),je=I.controls.length-1;je>=0;je--)I.controls[je].autoFade&&I.controls[je].setOpacity(Ie);Ie>0&&_(I)}}function O(I){var q;for(I.controlsShouldFade=!1,q=I.controls.length-1;q>=0;q--)I.controls[q].setOpacity(1)}function V(){O(this)}function W(){S(this)}function k(I){var q={tracker:I.eventSource,position:I.position,originalEvent:I.originalEvent,preventDefault:I.preventDefault};this.raiseEvent("canvas-contextmenu",q),I.preventDefault=q.preventDefault}function ee(I){var q={originalEvent:I.originalEvent,preventDefaultAction:!1,preventVerticalPan:I.preventVerticalPan||!this.panVertical,preventHorizontalPan:I.preventHorizontalPan||!this.panHorizontal};if(this.raiseEvent("canvas-key",q),!q.preventDefaultAction&&!I.ctrl&&!I.alt&&!I.meta)switch(I.keyCode){case 38:q.preventVerticalPan||(I.shift?this.viewport.zoomBy(1.1):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,-this.pixelsPerArrowPress))),this.viewport.applyConstraints()),I.preventDefault=!0;break;case 40:q.preventVerticalPan||(I.shift?this.viewport.zoomBy(.9):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,this.pixelsPerArrowPress))),this.viewport.applyConstraints()),I.preventDefault=!0;break;case 37:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(-this.pixelsPerArrowPress,0))),this.viewport.applyConstraints()),I.preventDefault=!0;break;case 39:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(this.pixelsPerArrowPress,0))),this.viewport.applyConstraints()),I.preventDefault=!0;break;case 187:this.viewport.zoomBy(1.1),this.viewport.applyConstraints(),I.preventDefault=!0;break;case 189:this.viewport.zoomBy(.9),this.viewport.applyConstraints(),I.preventDefault=!0;break;case 48:this.viewport.goHome(),this.viewport.applyConstraints(),I.preventDefault=!0;break;case 87:q.preventVerticalPan||(I.shift?this.viewport.zoomBy(1.1):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,-40))),this.viewport.applyConstraints()),I.preventDefault=!0;break;case 83:q.preventVerticalPan||(I.shift?this.viewport.zoomBy(.9):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,40))),this.viewport.applyConstraints()),I.preventDefault=!0;break;case 65:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(-40,0))),this.viewport.applyConstraints()),I.preventDefault=!0;break;case 68:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(40,0))),this.viewport.applyConstraints()),I.preventDefault=!0;break;case 82:I.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(),I.preventDefault=!0;break;case 70:this.viewport.toggleFlip(),I.preventDefault=!0;break;case 74:this.goToPreviousPage();break;case 75:this.goToNextPage();break;default:I.preventDefault=!1;break}else I.preventDefault=!1}function _e(I){var q={originalEvent:I.originalEvent};this.raiseEvent("canvas-key-press",q)}function be(I){var q,pe=document.activeElement===this.canvas;pe||this.canvas.focus(),this.viewport.flipped&&(I.position.x=this.viewport.getContainerSize().x-I.position.x);var Ie={tracker:I.eventSource,position:I.position,quick:I.quick,shift:I.shift,originalEvent:I.originalEvent,originalTarget:I.originalTarget,preventDefaultAction:!1};this.raiseEvent("canvas-click",Ie),!Ie.preventDefaultAction&&this.viewport&&I.quick&&(q=this.gestureSettingsByDeviceType(I.pointerType),q.clickToZoom===!0&&(this.viewport.zoomBy(I.shift?1/this.zoomPerClick:this.zoomPerClick,q.zoomToRefPoint?this.viewport.pointFromPixel(I.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 lt(I){var q,pe={tracker:I.eventSource,position:I.position,shift:I.shift,originalEvent:I.originalEvent,preventDefaultAction:!1};this.raiseEvent("canvas-double-click",pe),!pe.preventDefaultAction&&this.viewport&&(q=this.gestureSettingsByDeviceType(I.pointerType),q.dblClickToZoom&&(this.viewport.zoomBy(I.shift?1/this.zoomPerClick:this.zoomPerClick,q.zoomToRefPoint?this.viewport.pointFromPixel(I.position,!0):null),this.viewport.applyConstraints()))}function Qe(I){var q,pe={tracker:I.eventSource,pointerType:I.pointerType,position:I.position,delta:I.delta,speed:I.speed,direction:I.direction,shift:I.shift,originalEvent:I.originalEvent,preventDefaultAction:!1};if(this.raiseEvent("canvas-drag",pe),q=this.gestureSettingsByDeviceType(I.pointerType),!pe.preventDefaultAction&&this.viewport){if(q.dblClickDragToZoom&&o[this.hash].draggingToZoom){var Ie=Math.pow(this.zoomPerDblClickDrag,I.delta.y/50);this.viewport.zoomBy(Ie)}else if(q.dragToPan&&!o[this.hash].draggingToZoom){if(this.panHorizontal||(I.delta.x=0),this.panVertical||(I.delta.y=0),this.viewport.flipped&&(I.delta.x=-I.delta.x),this.constrainDuringPan){var je=this.viewport.deltaPointsFromPixels(I.delta.negate());this.viewport.centerSpringX.target.value+=je.x,this.viewport.centerSpringY.target.value+=je.y;var et=this.viewport.getConstrainedBounds();this.viewport.centerSpringX.target.value-=je.x,this.viewport.centerSpringY.target.value-=je.y,et.xConstrained&&(I.delta.x=0),et.yConstrained&&(I.delta.y=0)}this.viewport.panBy(this.viewport.deltaPointsFromPixels(I.delta.negate()),q.flickEnabled&&!this.constrainDuringPan)}}}function Xe(I){var q,pe={tracker:I.eventSource,pointerType:I.pointerType,position:I.position,speed:I.speed,direction:I.direction,shift:I.shift,originalEvent:I.originalEvent,preventDefaultAction:!1};if(this.raiseEvent("canvas-drag-end",pe),q=this.gestureSettingsByDeviceType(I.pointerType),!pe.preventDefaultAction&&this.viewport){if(!o[this.hash].draggingToZoom&&q.dragToPan&&q.flickEnabled&&I.speed>=q.flickMinSpeed){var Ie=0;this.panHorizontal&&(Ie=q.flickMomentum*I.speed*Math.cos(I.direction));var je=0;this.panVertical&&(je=q.flickMomentum*I.speed*Math.sin(I.direction));var et=this.viewport.pixelFromPoint(this.viewport.getCenter(!0)),ke=this.viewport.pointFromPixel(new n.Point(et.x-Ie,et.y-je));this.viewport.panTo(ke,!1)}this.viewport.applyConstraints()}q.dblClickDragToZoom&&o[this.hash].draggingToZoom===!0&&(o[this.hash].draggingToZoom=!1)}function bt(I){this.raiseEvent("canvas-enter",{tracker:I.eventSource,pointerType:I.pointerType,position:I.position,buttons:I.buttons,pointers:I.pointers,insideElementPressed:I.insideElementPressed,buttonDownAny:I.buttonDownAny,originalEvent:I.originalEvent})}function $(I){this.raiseEvent("canvas-exit",{tracker:I.eventSource,pointerType:I.pointerType,position:I.position,buttons:I.buttons,pointers:I.pointers,insideElementPressed:I.insideElementPressed,buttonDownAny:I.buttonDownAny,originalEvent:I.originalEvent})}function At(I){var q;if(this.raiseEvent("canvas-press",{tracker:I.eventSource,pointerType:I.pointerType,position:I.position,insideElementPressed:I.insideElementPressed,insideElementReleased:I.insideElementReleased,originalEvent:I.originalEvent}),q=this.gestureSettingsByDeviceType(I.pointerType),q.dblClickDragToZoom){var pe=o[this.hash].lastClickTime,Ie=n.now();if(pe===null)return;Ie-pe<this.dblClickTimeThreshold&&(o[this.hash].draggingToZoom=!0),o[this.hash].lastClickTime=null}}function $e(I){this.raiseEvent("canvas-release",{tracker:I.eventSource,pointerType:I.pointerType,position:I.position,insideElementPressed:I.insideElementPressed,insideElementReleased:I.insideElementReleased,originalEvent:I.originalEvent})}function Tt(I){this.raiseEvent("canvas-nonprimary-press",{tracker:I.eventSource,position:I.position,pointerType:I.pointerType,button:I.button,buttons:I.buttons,originalEvent:I.originalEvent})}function De(I){this.raiseEvent("canvas-nonprimary-release",{tracker:I.eventSource,position:I.position,pointerType:I.pointerType,button:I.button,buttons:I.buttons,originalEvent:I.originalEvent})}function Mt(I){var q,pe,Ie,je,et={tracker:I.eventSource,pointerType:I.pointerType,gesturePoints:I.gesturePoints,lastCenter:I.lastCenter,center:I.center,lastDistance:I.lastDistance,distance:I.distance,shift:I.shift,originalEvent:I.originalEvent,preventDefaultPanAction:!1,preventDefaultZoomAction:!1,preventDefaultRotateAction:!1};if(this.raiseEvent("canvas-pinch",et),this.viewport&&(q=this.gestureSettingsByDeviceType(I.pointerType),q.pinchToZoom&&(!et.preventDefaultPanAction||!et.preventDefaultZoomAction)&&(pe=this.viewport.pointFromPixel(I.center,!0),q.zoomToRefPoint&&!et.preventDefaultPanAction&&(Ie=this.viewport.pointFromPixel(I.lastCenter,!0),je=Ie.minus(pe),this.panHorizontal||(je.x=0),this.panVertical||(je.y=0),this.viewport.panBy(je,!0)),et.preventDefaultZoomAction||this.viewport.zoomBy(I.distance/I.lastDistance,pe,!0),this.viewport.applyConstraints()),q.pinchRotate&&!et.preventDefaultRotateAction)){var ke=Math.atan2(I.gesturePoints[0].currentPos.y-I.gesturePoints[1].currentPos.y,I.gesturePoints[0].currentPos.x-I.gesturePoints[1].currentPos.x),vt=Math.atan2(I.gesturePoints[0].lastPos.y-I.gesturePoints[1].lastPos.y,I.gesturePoints[0].lastPos.x-I.gesturePoints[1].lastPos.x);pe=this.viewport.pointFromPixel(I.center,!0),this.viewport.rotateTo(this.viewport.getRotation(!0)+(ke-vt)*(180/Math.PI),pe,!0)}}function _t(I){this.raiseEvent("canvas-focus",{tracker:I.eventSource,originalEvent:I.originalEvent})}function gt(I){this.raiseEvent("canvas-blur",{tracker:I.eventSource,originalEvent:I.originalEvent})}function Ft(I){var q,pe,Ie,je,et;je=n.now(),et=je-this._lastScrollTime,et>this.minScrollDeltaTime?(this._lastScrollTime=je,q={tracker:I.eventSource,position:I.position,scroll:I.scroll,shift:I.shift,originalEvent:I.originalEvent,preventDefaultAction:!1,preventDefault:!0},this.raiseEvent("canvas-scroll",q),!q.preventDefaultAction&&this.viewport&&(this.viewport.flipped&&(I.position.x=this.viewport.getContainerSize().x-I.position.x),pe=this.gestureSettingsByDeviceType(I.pointerType),pe.scrollToZoom&&(Ie=Math.pow(this.zoomPerScroll,I.scroll),this.viewport.zoomBy(Ie,pe.zoomToRefPoint?this.viewport.pointFromPixel(I.position,!0):null),this.viewport.applyConstraints())),I.preventDefault=q.preventDefault):I.preventDefault=!0}function dt(I){o[this.hash].mouseInside=!0,O(this),this.raiseEvent("container-enter",{tracker:I.eventSource,pointerType:I.pointerType,position:I.position,buttons:I.buttons,pointers:I.pointers,insideElementPressed:I.insideElementPressed,buttonDownAny:I.buttonDownAny,originalEvent:I.originalEvent})}function Nt(I){I.pointers<1&&(o[this.hash].mouseInside=!1,o[this.hash].animating||S(this)),this.raiseEvent("container-exit",{tracker:I.eventSource,pointerType:I.pointerType,position:I.position,buttons:I.buttons,pointers:I.pointers,insideElementPressed:I.insideElementPressed,buttonDownAny:I.buttonDownAny,originalEvent:I.originalEvent})}function Vt(I){ni(I),I.isOpen()?I._updateRequestId=w(I,Vt):I._updateRequestId=!1}function Wt(I,q){var pe=I.viewport,Ie=pe.getZoom(),je=pe.getCenter();pe.resize(q,I.preserveImageSizeOnResize),pe.panTo(je,!0);var et;if(I.preserveImageSizeOnResize)et=o[I.hash].prevContainerSize.x/q.x;else{var ke=new n.Point(0,0),vt=new n.Point(o[I.hash].prevContainerSize.x,o[I.hash].prevContainerSize.y).distanceTo(ke),Rt=new n.Point(q.x,q.y).distanceTo(ke);et=Rt/vt*o[I.hash].prevContainerSize.x/q.x}pe.zoomTo(Ie*et,null,!0),o[I.hash].prevContainerSize=q,o[I.hash].forceRedraw=!0,o[I.hash].needsResize=!1,o[I.hash].forceResize=!1}function ni(I){if(!(I._opening||!o[I.hash])){if(I.autoResize||o[I.hash].forceResize){var q;if(I._autoResizePolling){q=h(I.container);var pe=o[I.hash].prevContainerSize;q.equals(pe)||(o[I.hash].needsResize=!0)}o[I.hash].needsResize&&Wt(I,q||h(I.container))}var Ie=I.viewport.update(),je=I.world.update(Ie)||Ie;Ie&&I.raiseEvent("viewport-change"),I.referenceStrip&&(je=I.referenceStrip.update(I.viewport)||je);var et=o[I.hash].animating;!et&&je&&(I.raiseEvent("animation-start"),O(I));var ke=et&&!je;ke&&(o[I.hash].animating=!1),(je||ke||o[I.hash].forceRedraw||I.world.needsDraw())&&(zt(I),I._drawOverlays(),I.navigator&&I.navigator.update(I.viewport),o[I.hash].forceRedraw=!1,je&&I.raiseEvent("animation")),ke&&(I.raiseEvent("animation-finish"),o[I.hash].mouseInside||S(I)),o[I.hash].animating=je}}function zt(I){I.imageLoader.clear(),I.world.draw(),I.raiseEvent("update-viewport",{})}function yt(I,q){return I?I+q:q}function ri(){o[this.hash].lastZoomTime=n.now(),o[this.hash].zoomFactor=this.zoomPerSecond,o[this.hash].zooming=!0,Ye(this)}function Ke(){o[this.hash].lastZoomTime=n.now(),o[this.hash].zoomFactor=1/this.zoomPerSecond,o[this.hash].zooming=!0,Ye(this)}function ei(){o[this.hash].zooming=!1}function Ye(I){n.requestAnimationFrame(n.delegate(I,Dt))}function Dt(){var I,q,pe;o[this.hash].zooming&&this.viewport&&(I=n.now(),q=I-o[this.hash].lastZoomTime,pe=Math.pow(o[this.hash].zoomFactor,q/1e3),this.viewport.zoomBy(pe),this.viewport.applyConstraints(),o[this.hash].lastZoomTime=I,Ye(this))}function oi(){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 qt(){this.buttonGroup&&(this.buttonGroup.emulateEnter(),this.buttonGroup.emulateLeave())}function di(){this.viewport&&this.viewport.goHome()}function $t(){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 ti(){if(this.viewport){var I=this.viewport.getRotation();this.viewport.flipped?I+=this.rotationIncrement:I-=this.rotationIncrement,this.viewport.setRotation(I)}}function jt(){if(this.viewport){var I=this.viewport.getRotation();this.viewport.flipped?I-=this.rotationIncrement:I+=this.rotationIncrement,this.viewport.setRotation(I)}}function It(){this.viewport.toggleFlip()}n.determineDrawer=function(I){for(let q in le){const pe=le[q],Ie=pe.prototype;if(Ie&&Ie instanceof le.DrawerBase&&n.isFunction(Ie.getType)&&Ie.getType.call(pe)===I)return pe}return null}}(le),function(n){n.Navigator=function(w){var _=w.viewer,S=this,B,O;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(k,ee){k.margin="0px",k.border=ee+"px solid "+w.borderColor,k.padding="0px",k.background=w.background,k.opacity=w.opacity,k.overflow="hidden"}(this.element.style,this.borderWidth),this.displayRegion=n.makeNeutralElement("div"),this.displayRegion.id=this.element.id+"-displayregion",this.displayRegion.className="displayregion",function(k,ee){k.position="relative",k.top="0px",k.left="0px",k.fontSize="0px",k.overflow="hidden",k.border=ee+"px solid "+w.displayRegionColor,k.margin="0px",k.padding="0px",k.background="transparent",k.float="left",k.cssFloat="left",k.zIndex=999999999,k.cursor="default",k.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&&(B=n.getElementSize(_.element),this.element.style.height=Math.round(B.y*w.sizeRatio)+"px",this.element.style.width=Math.round(B.x*w.sizeRatio)+"px",this.oldViewerSize=B,O=n.getElementSize(this.element),this.elementArea=O.x*O.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 V(k,ee){y(S.displayRegionContainer,k),y(S.displayRegion,-k),S.viewport.setRotation(k,ee)}if(w.navigatorRotate){var W=w.viewer.viewport?w.viewer.viewport.getRotation():w.viewer.degrees||0;V(W,!0),w.viewer.addHandler("rotate",function(k){V(k.degrees,k.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,g),preProcessEventHandler:function(k){k.eventType==="wheel"&&(k.preventDefault=!0)}}),this.outerTracker.userData="Navigator.outerTracker",n.setElementPointerEventsNone(this.canvas),n.setElementPointerEventsNone(this.container),this.addHandler("reset-size",function(){S.viewport&&S.viewport.goHome(!0)}),_.world.addHandler("item-index-change",function(k){window.setTimeout(function(){var ee=S.world.getItemAt(k.previousIndex);S.world.setItemIndex(ee,k.newIndex)},1)}),_.world.addHandler("remove-item",function(k){var ee=k.item,_e=S._getMatchingItem(ee);_e&&S.world.removeItem(_e)}),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 _,S,B,O,V,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?(S=_.x*this.sizeRatio,B=_.y*this.sizeRatio):(S=Math.sqrt(this.elementArea*(_.x/_.y)),B=this.elementArea/S),this.element.style.width=Math.round(S)+"px",this.element.style.height=Math.round(B)+"px",this.elementArea||(this.elementArea=S*B),this.updateSize()),w&&this.viewport){if(O=w.getBoundsNoRotate(!0),V=this.viewport.pixelFromPointNoRotate(O.getTopLeft(),!1),W=this.viewport.pixelFromPointNoRotate(O.getBottomRight(),!1).minus(this.totalBorderWidths),!this.navigatorRotate){var k=w.getRotation(!0);y(this.displayRegion,-k)}var ee=this.displayRegion.style;ee.display=this.world.getItemCount()?"block":"none",ee.top=V.y.toFixed(2)+"px",ee.left=V.x.toFixed(2)+"px";var _e=W.x-V.x,be=W.y-V.y;ee.width=Math.round(Math.max(_e,0))+"px",ee.height=Math.round(Math.max(be,0))+"px"}},addTiledImage:function(w){var _=this,S=w.originalTiledImage;delete w.original;var B=n.extend({},w,{success:function(O){var V=O.item;V._originalForNavigator=S,_._matchBounds(V,S,!0),_._matchOpacity(V,S),_._matchCompositeOperation(V,S);function W(){_._matchBounds(V,S)}function k(){_._matchOpacity(V,S)}function ee(){_._matchCompositeOperation(V,S)}S.addHandler("bounds-change",W),S.addHandler("clip-change",W),S.addHandler("opacity-change",k),S.addHandler("composite-operation-change",ee)}});return n.Viewer.prototype.addTiledImage.apply(this,[B])},destroy:function(){return n.Viewer.prototype.destroy.apply(this)},_getMatchingItem:function(w){for(var _=this.world.getItemCount(),S,B=0;B<_;B++)if(S=this.world.getItemAt(B),S._originalForNavigator===w)return S;return null},_matchBounds:function(w,_,S){var B=_.getBoundsNoRotate();w.setPosition(B.getTopLeft(),S),w.setWidth(B.width,S),w.setRotation(_.getRotation(),S),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 S=this.viewport.pointFromPixel(w.position);this.panVertical?this.panHorizontal||(S.x=this.viewer.viewport.getCenter(!0).x):S.y=this.viewer.viewport.getCenter(!0).y,this.viewer.viewport.panTo(S),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 g(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=_}}(le),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("."),g=null,y=arguments,a=o,w;for(w=0;w<h.length-1;w++)a=a[h[w]]||{};return g=a[h[w]],typeof g!="string"&&(n.console.error("Untranslated source string:",u),g=""),g.replace(/\{\d+\}/g,function(_){var S=parseInt(_.match(/\d+/),10)+1;return S<y.length?y[S]:""})},setString:function(u,h){var g=u.split("."),y=o,a;for(a=0;a<g.length-1;a++)y[g[a]]||(y[g[a]]={}),y=y[g[a]];y[g[a]]=h}})}(le),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,g;if(o%90===0){var y=n.positiveModulo(o,360);switch(y){case 0:h=1,g=0;break;case 90:h=0,g=1;break;case 180:h=-1,g=0;break;case 270:h=0,g=-1;break}}else{var a=o*Math.PI/180;h=Math.cos(a),g=Math.sin(a)}var w=h*(this.x-u.x)-g*(this.y-u.y)+u.x,_=g*(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+")"}}}(le),function(n){n.TileSource=function(u,h,g,y,a,w){var _=this,S=arguments,B,O;if(n.isPlainObject(u)?B=u:B={width:S[0],height:S[1],tileSize:S[2],tileOverlap:S[3],minLevel:S[4],maxLevel:S[5]},n.EventSource.call(this),n.extend(!0,this,B),!this.success){for(O=0;O<arguments.length;O++)if(n.isFunction(arguments[O])){this.success=arguments[O];break}}this.success&&this.addHandler("ready",function(V){_.success(V)}),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=B.width&&B.height?B.width/B.height:1,this.dimensions=new n.Point(B.width,B.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=B.tileOverlap?B.tileOverlap:0,this.minLevel=B.minLevel?B.minLevel:0,this.maxLevel=B.maxLevel!==void 0&&B.maxLevel!==null?B.maxLevel:B.width&&B.height?Math.ceil(Math.log(Math.max(B.width,B.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(g){return u[g]}},getNumTiles:function(u){var h=this.getLevelScale(u),g=Math.ceil(h*this.dimensions.x/this.getTileWidth(u)),y=Math.ceil(h*this.dimensions.y/this.getTileHeight(u));return new n.Point(g,y)},getPixelRatio:function(u){var h=this.dimensions.times(this.getLevelScale(u)),g=1/h.x*n.pixelDensityRatio,y=1/h.y*n.pixelDensityRatio;return new n.Point(g,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 g=h.x>=0&&h.x<=1&&h.y>=0&&h.y<=1/this.aspectRatio;n.console.assert(g,"[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)),S=Math.floor(w/this.getTileHeight(u));h.x>=1&&(_=this.getNumTiles(u).x-1);var B=1e-15;return h.y>=1/this.aspectRatio-B&&(S=this.getNumTiles(u).y-1),new n.Point(_,S)},getTileBounds:function(u,h,g,y){var a=this.dimensions.times(this.getLevelScale(u)),w=this.getTileWidth(u),_=this.getTileHeight(u),S=h===0?0:w*h-this.tileOverlap,B=g===0?0:_*g-this.tileOverlap,O=w+(h===0?1:2)*this.tileOverlap,V=_+(g===0?1:2)*this.tileOverlap,W=1/a.x;return O=Math.min(O,a.x-S),V=Math.min(V,a.y-B),y?new n.Rect(0,0,O,V):new n.Rect(S*W,B*W,O*W,V*W)},getImageInfo:function(u){var h=this,g,y,a,w,_,S,B;u&&(_=u.split("/"),S=_[_.length-1],B=S.lastIndexOf("."),B>-1&&(_[_.length-1]=S.slice(0,B)));var O=null;if(this.splitHashDataForPost){var V=u.indexOf("#");V!==-1&&(O=u.substring(V+1),u=u.substr(0,V))}y=function(W){typeof W=="string"&&(W=n.parseXml(W));var k=n.TileSource.determineType(h,W,u);if(!k){h.raiseEvent("open-failed",{message:"Unable to load TileSource",source:u});return}w=k.prototype.configure.apply(h,[W,u,O]),w.ajaxWithCredentials===void 0&&(w.ajaxWithCredentials=h.ajaxWithCredentials),a=new k(w),h.ready=!0,h.raiseEvent("ready",{tileSource:a})},u.match(/\.js$/)?(g=u.split("/").pop().replace(".js",""),n.jsonp({url:u,async:!1,callbackName:g,callback:y})):n.makeAjaxRequest({url:u,postData:O,withCredentials:this.ajaxWithCredentials,headers:this.ajaxHeaders,success:function(W){var k=o(W);y(k)},error:function(W,k){var ee;try{ee="HTTP "+W.status+" attempting to load TileSource: "+u}catch{var _e;typeof k>"u"||!k.toString?_e="Unknown error":_e=k.toString(),ee=_e+" attempting to load TileSource: "+u}n.console.error(ee),h.raiseEvent("open-failed",{message:ee,source:u,postData:O})}})},supports:function(u,h){return!1},configure:function(u,h,g){throw new Error("Method not implemented.")},getTileUrl:function(u,h,g){throw new Error("Method not implemented.")},getTilePostData:function(u,h,g){return null},getTileAjaxHeaders:function(u,h,g){return{}},getTileHashKey:function(u,h,g,y,a,w){function _(S){return a?S+"+"+JSON.stringify(a):S}return _(typeof y!="string"?u+"/"+h+"_"+g:y)},tileExists:function(u,h,g){var y=this.getNumTiles(u);return u>=this.minLevel&&u<=this.maxLevel&&h>=0&&g>=0&&h<y.x&&g<y.y},hasTransparency:function(u,h,g,y){return!!u||h.match(".png")},downloadTileStart:function(u){var h=u.userData,g=new Image;h.image=g,h.request=null;var y=function(a){if(!g){u.finish(null,h.request,"Image load failed: undefined Image instance.");return}g.onload=g.onerror=g.onabort=null,u.finish(a?null:g,h.request,a)};g.onload=function(){y()},g.onabort=g.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(B){var _=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;if(B.name==="TypeError"&&_){var S=new _;S.append(a.response),w=S.getBlob()}}w.size===0?y("Empty image response."):g.src=(window.URL||window.webkitURL).createObjectURL(w)},error:function(a){y("Image load aborted - XHR error")}}):(u.crossOriginPolicy!==!1&&(g.crossOrigin=u.crossOriginPolicy),g.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,g){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,g=u.status,y,a;if(u){if(u.status!==200&&u.status!==0)throw g=u.status,y=g===404?"Not Found":u.statusText,new Error(n.getString("Errors.Status",g,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,g){var y;for(y in le)if(y.match(/.+TileSource$/)&&n.isFunction(le[y])&&n.isFunction(le[y].prototype.supports)&&le[y].prototype.supports.call(u,h,g))return le[y];return n.console.error("No TileSource was able to open %s %s",g,h),null}}(le),function(n){n.DziTileSource=function(h,g,y,a,w,_,S,B,O){var V,W,k,ee;if(n.isPlainObject(h)?ee=h: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(V=this.displayRects.length-1;V>=0;V--)for(W=this.displayRects[V],k=W.minLevel;k<=W.maxLevel;k++)this._levelRects[k]||(this._levelRects[k]=[]),this._levelRects[k].push(W);n.TileSource.apply(this,[ee])},n.extend(n.DziTileSource.prototype,n.TileSource.prototype,{supports:function(h,g){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,g,y){var a;return n.isPlainObject(h)?a=u(this,h):a=o(this,h),g&&!a.tilesUrl&&(a.tilesUrl=g.replace(/([^/]+?)(\.(dzi|xml|js)?(\?[^/]*)?)?\/?$/,"$1_files/"),g.search(/\.(dzi|xml|js)\?/)!==-1?a.queryParams=g.match(/\?.*/):a.queryParams=""),a},getTileUrl:function(h,g,y){return[this.tilesUrl,h,"/",g,"_",y,".",this.fileFormat,this.queryParams].join("")},tileExists:function(h,g,y){var a=this._levelRects[h],w,_,S,B,O,V,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),S=w.x*_,B=w.y*_,O=S+w.width*_,V=B+w.height*_,S=Math.floor(S/this._tileWidth),B=Math.floor(B/this._tileWidth),O=Math.ceil(O/this._tileWidth),V=Math.ceil(V/this._tileWidth),S<=g&&g<O&&B<=y&&y<V))return!0;return!1}});function o(h,g){if(!g||!g.documentElement)throw new Error(n.getString("Errors.Xml"));var y=g.documentElement,a=y.localName||y.tagName,w=g.documentElement.namespaceURI,_=null,S=[],B,O,V,W,k;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(B=y.getElementsByTagName("DisplayRect"),B===void 0&&(B=y.getElementsByTagNameNS(w,"DisplayRect")[0]),k=0;k<B.length;k++)O=B[k],V=O.getElementsByTagName("Rect")[0],V===void 0&&(V=O.getElementsByTagNameNS(w,"Rect")[0]),S.push({Rect:{X:parseInt(V.getAttribute("X"),10),Y:parseInt(V.getAttribute("Y"),10),Width:parseInt(V.getAttribute("Width"),10),Height:parseInt(V.getAttribute("Height"),10),MinLevel:parseInt(O.getAttribute("MinLevel"),10),MaxLevel:parseInt(O.getAttribute("MaxLevel"),10)}});return S.length&&(_.Image.DisplayRect=S),u(h,_)}catch(be){throw be instanceof Error?be: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],_e=ee.firstChild.nodeValue;throw new Error(_e)}}throw new Error(n.getString("Errors.Dzi"))}function u(h,g){var y=g.Image,a=y.Url,w=y.Format,_=y.Size,S=y.DisplayRect||[],B=parseInt(_.Width,10),O=parseInt(_.Height,10),V=parseInt(y.TileSize,10),W=parseInt(y.Overlap,10),k=[],ee,_e;for(_e=0;_e<S.length;_e++)ee=S[_e].Rect,k.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:B,height:O,tileSize:V,tileOverlap:W,minLevel:null,maxLevel:null,tilesUrl:a,fileFormat:w,displayRects:k},g)}}(le),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 S=Math.min(this.height,this.width),B=[256,512,1024],O=[],V=0;V<B.length;V++)B[V]<=S&&O.push(B[V]);O.length>0?y.tileSize=Math.max.apply(null,O):y.tileSize=S}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 k=this.sizes.length;(k===y.maxLevel||k===y.maxLevel+1)&&(this.levelSizes=this.sizes.slice().sort((ee,_e)=>ee.width-_e.width),k===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 S=y["@context"];if(Array.isArray(S)){for(var B=0;B<S.length;B++)if(typeof S[B]=="string"&&(/^http:\/\/iiif\.io\/api\/image\/[1-3]\/context\.json$/.test(S[B])||S[B]==="http://library.stanford.edu/iiif/image-api/1.1/context.json")){S=S[B];break}}switch(S){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 O=0;O<y.preferredFormats.length;O++)if(le.imageFormatSupported(y.preferredFormats[O])){y.tileFormat=y.preferredFormats[O];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)),S=Math.ceil(w.height/this.getTileHeight(y));return new n.Point(_,S)}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,S=a.x*_,B=a.y*_,O=Math.floor(S/this.getTileWidth(y)),V=Math.floor(B/this.getTileHeight(y));a.x>=1&&(O=this.getNumTiles(y).x-1);var W=1e-15;return a.y>=1/this.aspectRatio-W&&(V=this.getNumTiles(y).y-1),new n.Point(O,V)}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 S="0",B=Math.pow(.5,this.maxLevel-y),O,V,W,k,ee,_e,be,lt,Qe,Xe,bt,$,At,$e,Tt,De;return this.levelSizes?(O=this.levelSizes[y].width,V=this.levelSizes[y].height):(O=Math.ceil(this.width*B),V=Math.ceil(this.height*B)),W=this.getTileWidth(y),k=this.getTileHeight(y),ee=Math.round(W/B),_e=Math.round(k/B),this.version===1?Tt="native."+this.tileFormat:Tt="default."+this.tileFormat,O<W&&V<k?(this.version===2&&O===this.width?$="full":this.version===3&&O===this.width&&V===this.height?$="max":this.version===3?$=O+","+V:$=O+",",be="full"):(lt=a*ee,Qe=w*_e,Xe=Math.min(ee,this.width-lt),bt=Math.min(_e,this.height-Qe),a===0&&w===0&&Xe===this.width&&bt===this.height?be="full":be=[lt,Qe,Xe,bt].join(","),At=Math.min(W,O-a*W),$e=Math.min(k,V-w*k),this.version===2&&At===this.width?$="full":this.version===3&&At===this.width&&$e===this.height?$="max":this.version===3?$=At+","+$e:$=At+","),De=[this._id,be,$,S,Tt].join("/"),De},__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,S=!1;return y.version===2&&y.profile.length>1&&y.profile[1].supports&&(S=y.profile[1].supports.indexOf("sizeByW")!==-1),y.version===3&&y.extraFeatures&&(S=y.extraFeatures.indexOf("sizeByWh")!==-1),!_||S}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(_,S){return _.width-S.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 _={},g(a,_),_}catch(S){throw S instanceof Error?S:new Error(n.getString("Errors.IIIF"))}throw new Error(n.getString("Errors.IIIF"))}function g(y,a,w){var _,S;if(y.nodeType===3&&w)S=y.nodeValue.trim(),S.match(/^\d*$/)&&(S=Number(S)),a[w]?(n.isArray(a[w])||(a[w]=[a[w]]),a[w].push(S)):a[w]=S;else if(y.nodeType===1)for(_=0;_<y.childNodes.length;_++)g(y.childNodes[_],a,y.nodeName)}}(le),function(n){n.OsmTileSource=function(o,u,h,g,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"}})}(le),function(n){n.TmsTileSource=function(o,u,h,g,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,S;w>_?S=w/256:S=_/256,a.maxLevel=Math.ceil(Math.log(S)/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 g=this.getNumTiles(o).y-1;return this.tilesUrl+o+"/"+u+"/"+(g-h)+".png"}})}(le),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,le.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 g=0,y={},a=0;a<o;a++)y=this.gridSize[a],g+=y.x*y.y;return y=this.gridSize[o],g+=y.x*h+u,g},supports:function(o,u){return o.type&&o.type==="zoomifytileservice"},configure:function(o,u,h){return o},getTileUrl:function(o,u,h){var g=0,y=this._calculateAbsoluteTileNumber(o,u,h);return g=Math.floor(y/256),this.tilesUrl+"TileGroup"+g+"/"+o+"-"+u+"-"+h+"."+this.fileFormat}})}(le),function(n){n.LegacyTileSource=function(g){var y,a,w;n.isArray(g)&&(y={type:"legacy-image-pyramid",levels:g}),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(g,y){return g.type&&g.type==="legacy-image-pyramid"||g.documentElement&&g.documentElement.getAttribute("type")==="legacy-image-pyramid"},configure:function(g,y,a){var w;return n.isPlainObject(g)?w=h(this,g):w=u(this,g),w},getLevelScale:function(g){var y=NaN;return this.levels.length>0&&g>=this.minLevel&&g<=this.maxLevel&&(y=this.levels[g].width/this.levels[this.maxLevel].width),y},getNumTiles:function(g){var y=this.getLevelScale(g);return y?new n.Point(1,1):new n.Point(0,0)},getTileUrl:function(g,y,a){var w=null;return this.levels.length>0&&g>=this.minLevel&&g<=this.maxLevel&&(w=this.levels[g].url),w}});function o(g){var y=[],a,w;for(w=0;w<g.length;w++)a=g[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(_,S){return _.height-S.height})}function u(g,y){if(!y||!y.documentElement)throw new Error(n.getString("Errors.Xml"));var a=y.documentElement,w=a.tagName,_=null,S=[],B,O;if(w==="image")try{for(_={type:a.getAttribute("type"),levels:[]},S=a.getElementsByTagName("level"),O=0;O<S.length;O++)B=S[O],_.levels.push({url:B.getAttribute("url"),width:parseInt(B.getAttribute("width"),10),height:parseInt(B.getAttribute("height"),10)});return h(g,_)}catch(V){throw V instanceof Error?V: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(g,y){return y.levels}}(le),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 g=null;return o>=this.minLevel&&o<=this.maxLevel&&(g=this.levels[o].url),g},getContext2D:function(o,u,h){var g=null;return o>=this.minLevel&&o<=this.maxLevel&&(g=this.levels[o].context2D),g},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,g=document.createElement("canvas"),y=g.getContext("2d");if(g.width=u,g.height=h,y.drawImage(this._image,0,0,u,h),o[0].context2D=y,delete this._image,n.isCanvasTainted(g))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(g,0,0,u,h),o.splice(0,0,{context2D:w,width:u,height:h}),g=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}))}})}(le),function(n){n.TileSourceCollection=function(o,u,h,g){n.console.error("TileSourceCollection is deprecated; use World instead")}}(le),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(S){S.insideElementPressed?(y(_,n.ButtonState.DOWN),_.raiseEvent("enter",{originalEvent:S.originalEvent})):S.buttonDownAny||y(_,n.ButtonState.HOVER)},focusHandler:function(S){_.tracker.enterHandler(S),_.raiseEvent("focus",{originalEvent:S.originalEvent})},leaveHandler:function(S){a(_,n.ButtonState.GROUP),S.insideElementPressed&&_.raiseEvent("exit",{originalEvent:S.originalEvent})},blurHandler:function(S){_.tracker.leaveHandler(S),_.raiseEvent("blur",{originalEvent:S.originalEvent})},pressHandler:function(S){y(_,n.ButtonState.DOWN),_.raiseEvent("press",{originalEvent:S.originalEvent})},releaseHandler:function(S){S.insideElementPressed&&S.insideElementReleased?(a(_,n.ButtonState.HOVER),_.raiseEvent("release",{originalEvent:S.originalEvent})):S.insideElementPressed?a(_,n.ButtonState.GROUP):y(_,n.ButtonState.HOVER)},clickHandler:function(S){S.quick&&_.raiseEvent("click",{originalEvent:S.originalEvent})},keyHandler:function(S){S.keyCode===13?(_.raiseEvent("click",{originalEvent:S.originalEvent}),_.raiseEvent("release",{originalEvent:S.originalEvent}),S.preventDefault=!0):S.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 _,S,B;w.shouldFade&&(_=n.now(),S=_-w.fadeBeginTime,B=1-S/w.fadeLength,B=Math.min(1,B),B=Math.max(0,B),w.imgGroup&&n.setElementOpacity(w.imgGroup,B,!0),B>0&&o(w))}function h(w){w.shouldFade=!0,w.fadeBeginTime=n.now()+w.fadeDelay,window.setTimeout(function(){o(w)},w.fadeDelay)}function g(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&&(g(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))}}(le),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,g;if(this.element=o.element||n.makeNeutralElement("div"),!o.group)for(this.element.style.display="inline-block",g=0;g<u.length;g++)this.element.appendChild(u[g].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}}}(le),function(n){n.Rect=function(o,u,h,g,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 g=="number"?g: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 g=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,g,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(),g=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(g,y,a-g,w-y)},intersection:function(o){var u=1e-10,h=[],g=this.getTopLeft();o.containsPoint(g,u)&&h.push(g);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 S=o.getTopRight();this.containsPoint(S,u)&&h.push(S);var B=o.getBottomLeft();this.containsPoint(B,u)&&h.push(B);var O=o.getBottomRight();this.containsPoint(O,u)&&h.push(O);for(var V=this._getSegments(),W=o._getSegments(),k=0;k<V.length;k++)for(var ee=V[k],_e=0;_e<W.length;_e++){var be=W[_e],lt=Qe(ee[0],ee[1],be[0],be[1]);lt&&h.push(lt)}function Qe(De,Mt,_t,gt){var Ft=Mt.minus(De),dt=gt.minus(_t),Nt=-dt.x*Ft.y+Ft.x*dt.y;if(Nt===0)return null;var Vt=(Ft.x*(De.y-_t.y)-Ft.y*(De.x-_t.x))/Nt,Wt=(dt.x*(De.y-_t.y)-dt.y*(De.x-_t.x))/Nt;return-u<=Vt&&Vt<=1-u&&-u<=Wt&&Wt<=1-u?new n.Point(De.x+Wt*Ft.x,De.y+Wt*Ft.y):null}if(h.length===0)return null;for(var Xe=h[0].x,bt=h[0].x,$=h[0].y,At=h[0].y,$e=1;$e<h.length;$e++){var Tt=h[$e];Tt.x<Xe&&(Xe=Tt.x),Tt.x>bt&&(bt=Tt.x),Tt.y<$&&($=Tt.y),Tt.y>At&&(At=Tt.y)}return new n.Rect(Xe,$,bt-Xe,At-$)},_getSegments:function(){var o=this.getTopLeft(),u=this.getTopRight(),h=this.getBottomLeft(),g=this.getBottomRight();return[[o,u],[u,g],[g,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),g=this.getTopRight().rotate(o,u),y=g.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(),g=this.getBottomRight(),y=Math.min(o.x,u.x,h.x,g.x),a=Math.max(o.x,u.x,h.x,g.x),w=Math.min(o.y,u.y,h.y,g.y),_=Math.max(o.y,u.y,h.y,g.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),g=Math.ceil(o.width+o.x-u),y=Math.ceil(o.height+o.y-h);return new n.Rect(u,h,g,y)},containsPoint:function(o,u){u=u||0;var h=this.getTopLeft(),g=this.getTopRight(),y=this.getBottomLeft(),a=g.minus(h),w=y.minus(h);return(o.x-h.x)*a.x+(o.y-h.y)*a.y>=-u&&(o.x-g.x)*a.x+(o.y-g.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]"}}}(le),function(n){var o={};n.ReferenceStrip=function(B){var O=this,V=B.viewer,W=n.getElementSize(V.element),k,ee,_e;for(B.id||(B.id="referencestrip-"+n.now(),this.element=n.makeNeutralElement("div"),this.element.id=B.id,this.element.className="referencestrip"),B=n.extend(!0,{sizeRatio:n.DEFAULT_SETTINGS.referenceStripSizeRatio,position:n.DEFAULT_SETTINGS.referenceStripPosition,scroll:n.DEFAULT_SETTINGS.referenceStripScroll,clickTimeThreshold:n.DEFAULT_SETTINGS.clickTimeThreshold},B,{element:this.element}),n.extend(this,B),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=V,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,g),enterHandler:n.delegate(this,a),leaveHandler:n.delegate(this,w),keyDownHandler:n.delegate(this,_),keyHandler:n.delegate(this,S),preProcessEventHandler:function(be){be.eventType==="wheel"&&(be.preventDefault=!0)}}),B.width&&B.height?(this.element.style.width=B.width+"px",this.element.style.height=B.height+"px",V.addControl(this.element,{anchor:n.ControlAnchor.BOTTOM_LEFT})):B.scroll==="horizontal"?(this.element.style.width=W.x*B.sizeRatio*V.tileSources.length+12*V.tileSources.length+"px",this.element.style.height=W.y*B.sizeRatio+"px",V.addControl(this.element,{anchor:n.ControlAnchor.BOTTOM_LEFT})):(this.element.style.height=W.y*B.sizeRatio*V.tileSources.length+12*V.tileSources.length+"px",this.element.style.width=W.x*B.sizeRatio+"px",V.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={},_e=0;_e<V.tileSources.length;_e++)k=n.makeNeutralElement("div"),k.id=this.element.id+"-"+_e,k.style.width=O.panelWidth+"px",k.style.height=O.panelHeight+"px",k.style.display="inline",k.style.float="left",k.style.cssFloat="left",k.style.padding="2px",n.setElementTouchActionNone(k),n.setElementPointerEventsNone(k),this.element.appendChild(k),k.activePanel=!1,this.panels.push(k);y(this,this.scroll==="vertical"?W.y:W.x,0),this.setFocus(0)},n.ReferenceStrip.prototype={setFocus:function(B){var O=this.element.querySelector("#"+this.element.id+"-"+B),V=n.getElementSize(this.viewer.canvas),W=Number(this.element.style.width.replace("px","")),k=Number(this.element.style.height.replace("px","")),ee=-Number(this.element.style.marginLeft.replace("px","")),_e=-Number(this.element.style.marginTop.replace("px","")),be;this.currentSelected!==O&&(this.currentSelected&&(this.currentSelected.style.background="#000"),this.currentSelected=O,this.currentSelected.style.background="#999",this.scroll==="horizontal"?(be=Number(B)*(this.panelWidth+3),be>ee+V.x-this.panelWidth?(be=Math.min(be,W-V.x),this.element.style.marginLeft=-be+"px",y(this,V.x,-be)):be<ee&&(be=Math.max(0,be-V.x/2),this.element.style.marginLeft=-be+"px",y(this,V.x,-be))):(be=Number(B)*(this.panelHeight+3),be>_e+V.y-this.panelHeight?(be=Math.min(be,k-V.y),this.element.style.marginTop=-be+"px",y(this,V.y,-be)):be<_e&&(be=Math.max(0,be-V.y/2),this.element.style.marginTop=-be+"px",y(this,V.y,-be))),this.currentPage=B,a.call(this,{eventSource:this.tracker}))},update:function(){return!!o[this.id].animating},destroy:function(){if(this.miniViewers)for(var B in this.miniViewers)this.miniViewers[B].destroy();this.tracker.destroy(),this.element&&this.viewer.removeControl(this.element)}};function u(B){if(B.quick){var O;this.scroll==="horizontal"?O=Math.floor(B.position.x/(this.panelWidth+4)):O=Math.floor(B.position.y/this.panelHeight),this.viewer.goToPage(O)}this.element.focus()}function h(B){if(this.dragging=!0,this.element){var O=Number(this.element.style.marginLeft.replace("px","")),V=Number(this.element.style.marginTop.replace("px","")),W=Number(this.element.style.width.replace("px","")),k=Number(this.element.style.height.replace("px","")),ee=n.getElementSize(this.viewer.canvas);this.scroll==="horizontal"?-B.delta.x>0?O>-(W-ee.x)&&(this.element.style.marginLeft=O+B.delta.x*2+"px",y(this,ee.x,O+B.delta.x*2)):-B.delta.x<0&&O<0&&(this.element.style.marginLeft=O+B.delta.x*2+"px",y(this,ee.x,O+B.delta.x*2)):-B.delta.y>0?V>-(k-ee.y)&&(this.element.style.marginTop=V+B.delta.y*2+"px",y(this,ee.y,V+B.delta.y*2)):-B.delta.y<0&&V<0&&(this.element.style.marginTop=V+B.delta.y*2+"px",y(this,ee.y,V+B.delta.y*2))}}function g(B){if(this.element){var O=Number(this.element.style.marginLeft.replace("px","")),V=Number(this.element.style.marginTop.replace("px","")),W=Number(this.element.style.width.replace("px","")),k=Number(this.element.style.height.replace("px","")),ee=n.getElementSize(this.viewer.canvas);this.scroll==="horizontal"?B.scroll>0?O>-(W-ee.x)&&(this.element.style.marginLeft=O-B.scroll*60+"px",y(this,ee.x,O-B.scroll*60)):B.scroll<0&&O<0&&(this.element.style.marginLeft=O-B.scroll*60+"px",y(this,ee.x,O-B.scroll*60)):B.scroll<0?V>ee.y-k&&(this.element.style.marginTop=V+B.scroll*60+"px",y(this,ee.y,V+B.scroll*60)):B.scroll>0&&V<0&&(this.element.style.marginTop=V+B.scroll*60+"px",y(this,ee.y,V+B.scroll*60)),B.preventDefault=!0}}function y(B,O,V){var W,k,ee,_e,be,lt;for(B.scroll==="horizontal"?W=B.panelWidth:W=B.panelHeight,k=Math.ceil(O/W)+5,ee=Math.ceil((Math.abs(V)+O)/W)+1,k=ee-k,k=k<0?0:k,be=k;be<ee&&be<B.panels.length;be++)if(lt=B.panels[be],!lt.activePanel){var Qe,Xe=B.viewer.tileSources[be];Xe.referenceStripThumbnailUrl?Qe={type:"image",url:Xe.referenceStripThumbnailUrl}:Qe=Xe,_e=new n.Viewer({id:lt.id,tileSources:[Qe],element:lt,navigatorSizeRatio:B.sizeRatio,showNavigator:!1,mouseNavEnabled:!1,showNavigationControl:!1,showSequenceControl:!1,immediateRender:!0,blendTime:0,animationTime:0,loadTilesWithAjax:B.viewer.loadTilesWithAjax,ajaxHeaders:B.viewer.ajaxHeaders,drawer:"canvas"}),n.setElementPointerEventsNone(_e.canvas),n.setElementPointerEventsNone(_e.container),_e.innerTracker.setTracking(!1),_e.outerTracker.setTracking(!1),B.miniViewers[lt.id]=_e,lt.activePanel=!0}}function a(B){var O=B.eventSource.element;this.scroll==="horizontal"?O.style.marginBottom="0px":O.style.marginLeft="0px"}function w(B){var O=B.eventSource.element;this.scroll==="horizontal"?O.style.marginBottom="-"+n.getElementSize(O).y/2+"px":O.style.marginLeft="-"+n.getElementSize(O).x/2+"px"}function _(B){if(!B.ctrl&&!B.alt&&!B.meta)switch(B.keyCode){case 38:g.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),B.preventDefault=!0;break;case 40:g.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),B.preventDefault=!0;break;case 37:g.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),B.preventDefault=!0;break;case 39:g.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),B.preventDefault=!0;break;default:B.preventDefault=!1;break}else B.preventDefault=!1}function S(B){if(!B.ctrl&&!B.alt&&!B.meta)switch(B.keyCode){case 61:g.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),B.preventDefault=!0;break;case 45:g.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),B.preventDefault=!0;break;case 48:case 119:case 87:g.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),B.preventDefault=!0;break;case 115:case 83:g.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),B.preventDefault=!0;break;case 97:g.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),B.preventDefault=!0;break;case 100:g.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),B.preventDefault=!0;break;default:B.preventDefault=!1;break}else B.preventDefault=!1}}(le),function(n){n.DisplayRect=function(o,u,h,g,y,a){n.Rect.apply(this,[o,u,h,g]),this.minLevel=y,this.maxLevel=a},n.extend(n.DisplayRect.prototype,n.Rect.prototype)}(le),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 g=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(g):this.current.value=g}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))}}(le),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,g){this.data=u,this.request=h,this.errorMsg=g,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 g=this,y=function(_){o(g,_,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,g){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++),g(h.data,h.errorMsg,h.request)}}(le),function(n){n.Tile=function(o,u,h,g,y,a,w,_,S,B,O,V){this.level=o,this.x=u,this.y=h,this.bounds=g,this.positionedBounds=new le.Rect(g.x,g.y,g.width,g.height),this.sourceBounds=B,this.exists=y,this._url=a,this.postData=O,this.context2D=w,this.loadWithAjax=_,this.ajaxHeaders=S,V===void 0&&(n.console.warn("Tile constructor needs 'cacheKey' variable: creation tile cache in Tile class is deprecated. TileSource.prototype.getTileHashKey will be used."),V=n.TileSource.prototype.getTileHashKey(o,u,h,a,S,O)),this.cacheKey=V,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 g=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(g,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}}}(le),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 g;n.isPlainObject(o)?g=o:g={element:o,location:u,placement:h},this.elementWrapper=document.createElement("div"),this.element=g.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(g)},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"),g=n.getCssPropertyWithVendorPrefix("transform");h&&g&&(u[h]="",u[g]="")},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 g=this._getOverlayPositionAndSize(u),y=g.position,a=this.size=g.size,w="";u.overlayPreserveContentDirection&&(w=u.flipped?" scaleX(-1)":" scaleX(1)");var _=u.flipped?-g.rotate:g.rotate,S=u.flipped?" scaleX(-1)":"";if(this.onDraw)this.onDraw(y,a,this.element);else{var B=this.style,O=this.element.style;O.display="block",B.left=y.x+"px",B.top=y.y+"px",this.width!==null&&(O.width=a.x+"px"),this.height!==null&&(O.height=a.y+"px");var V=n.getCssPropertyWithVendorPrefix("transformOrigin"),W=n.getCssPropertyWithVendorPrefix("transform");V&&W&&(_&&!u.flipped?(O[W]="",B[V]=this._getTransformOrigin(),B[W]="rotate("+_+"deg)"):!_&&u.flipped?(O[W]=w,B[V]=this._getTransformOrigin(),B[W]=S):_&&u.flipped?(O[W]=w,B[V]=this._getTransformOrigin(),B[W]="rotate("+_+"deg)"+S):(O[W]="",B[V]="",B[W]="")),B.display="flex"}},_getOverlayPositionAndSize:function(o){var u=o.pixelFromPoint(this.location,!0),h=this._getSizeInPixels(o);this.adjust(u,h);var g=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 g=o.getRotation(!0);return o.flipped&&(u.x=o.getContainerSize().x-u.x),{position:u,size:h,rotate:g}},_getSizeInPixels:function(o){var u=this.size.x,h=this.size.y;if(this.width!==null||this.height!==null){var g=o.deltaPixelsFromPointsNoRotate(new n.Point(this.width||0,this.height||0),!0);this.width!==null&&(u=g.x),this.height!==null&&(h=g.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 g=o.deltaPointsFromPixelsNoRotate(this.size,!0);u===null&&(u=g.x),h===null&&(h=g.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))}}}(le),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 g=this.viewport.pixelFromPointNoRotate(h.getTopLeft(),!0),y=this.viewport.deltaPixelsFromPointsNoRotate(h.getSize(),!0);return new n.Rect(g.x*n.pixelDensityRatio,g.y*n.pixelDensityRatio,y.x*n.pixelDensityRatio,y.y*n.pixelDensityRatio)}viewportCoordToDrawerCoord(h){var g=this.viewport.pixelFromPointNoRotate(h,!0);return new n.Point(g.x*n.pixelDensityRatio,g.y*n.pixelDensityRatio)}_calculateCanvasSize(){var h=n.pixelDensityRatio,g=this.viewport.getContainerSize();return new o.Point(Math.round(g.x*h),Math.round(g.y*h))}_raiseTiledImageDrawnEvent(h,g){this.viewer&&this.viewer.raiseEvent("tiled-image-drawn",{tiledImage:h,tiles:g})}_raiseDrawerErrorEvent(h,g){this.viewer&&this.viewer.raiseEvent("drawer-error",{tiledImage:h,drawer:this,error:g})}}}(le),function(n){const o=n;class u extends o.DrawerBase{constructor(g){super(g),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(g){return!0}_createDrawingElement(){return n.makeNeutralElement("div")}draw(g){var y=this;this._prepareNewFrame(),g.forEach(function(a){a.opacity!==0&&y._drawTiles(a)})}canRotate(){return!1}destroy(){this.container.removeChild(this.canvas)}setImageSmoothingEnabled(){}_prepareNewFrame(){this.canvas.innerHTML=""}_drawTiles(g){var y=g.getTilesToDraw().map(_=>_.tile);if(!(g.opacity===0||y.length===0&&!g.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:g,tile:w})}}_drawTile(g){n.console.assert(g,"[Drawer._drawTile] tile is required");let y=this.canvas;if(!g.cacheImageRecord){n.console.warn("[Drawer._drawTileToHTML] attempting to draw tile %s when it's not cached",g.toString());return}if(!g.loaded){n.console.warn("Attempting to draw tile %s when it's not yet loaded.",g.toString());return}if(!g.element){var a=g.getImage();if(!a)return;g.element=n.makeNeutralElement("div"),g.imgElement=a.cloneNode(),g.imgElement.style.msInterpolationMode="nearest-neighbor",g.imgElement.style.width="100%",g.imgElement.style.height="100%",g.style=g.element.style,g.style.position="absolute"}g.element.parentNode!==y&&y.appendChild(g.element),g.imgElement.parentNode!==g.element&&g.element.appendChild(g.imgElement),g.style.top=g.position.y+"px",g.style.left=g.position.x+"px",g.style.height=g.size.y+"px",g.style.width=g.size.x+"px",g.flipped&&(g.style.transform="scaleX(-1)"),n.setElementOpacity(g.element,g.opacity)}}n.HTMLDrawer=u}(le),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"),S=this._calculateCanvasSize();return _.width=S.x,_.height=S.y,_}draw(_){this._prepareNewFrame(),this.viewer.viewport.getFlip()!==this._viewportFlipped&&this._flip();for(const S of _)S.opacity!==0&&this._drawTiles(S)}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 S=this.context;S.save(),S.lineWidth=2*n.pixelDensityRatio,S.strokeStyle=this.debugGridColor[0],S.fillStyle=this.debugGridColor[0],S.strokeRect(_.x*n.pixelDensityRatio,_.y*n.pixelDensityRatio,_.width*n.pixelDensityRatio,_.height*n.pixelDensityRatio),S.restore()}get _viewportFlipped(){return this.context.getTransform().a<0}_raiseTileDrawingEvent(_,S,B,O){this.viewer.raiseEvent("tile-drawing",{tiledImage:_,context:S,tile:B,rendered:O})}_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 S=this._calculateSketchCanvasSize();this.sketchCanvas.width=S.x,this.sketchCanvas.height=S.y,this._updateImageSmoothingEnabled(this.sketchContext)}this._clear()}_clear(_,S){var B=this._getContext(_);if(S)B.clearRect(S.x,S.y,S.width,S.height);else{var O=B.canvas;B.clearRect(0,0,O.width,O.height)}}_drawTiles(_){var S=_.getTilesToDraw().map(De=>De.tile);if(!(_.opacity===0||S.length===0&&!_.placeholderFillStyle)){var B=S[0],O;B&&(O=_.opacity<1||_.compositeOperation&&_.compositeOperation!=="source-over"||!_._isBottomItem()&&_.source.hasTransparency(B.context2D,B.getUrl(),B.ajaxHeaders,B.postData));var V,W,k=this.viewport.getZoom(!0),ee=_.viewportToImageZoom(k);S.length>1&&ee>_.smoothTileEdgesMinZoom&&!_.iOSDevice&&_.getRotation(!0)%360===0&&(O=!0,V=B.getScaleForEdgeSmoothing(),W=B.getTranslationForEdgeSmoothing(V,this._getCanvasSize(!1),this._getCanvasSize(!0)));var _e;O&&(V||(_e=this.viewport.viewportToViewerElementRectangle(_.getClippedBounds(!0)).getIntegerBoundingBox(),_e=_e.times(n.pixelDensityRatio)),this._clear(!0,_e)),V||this._setRotations(_,O);var be=!1;if(_._clip){this._saveContext(O);var lt=_.imageToViewportRectangle(_._clip,!0);lt=lt.rotate(-_.getRotation(!0),_._getRotationPoint(!0));var Qe=this.viewportToDrawerRectangle(lt);V&&(Qe=Qe.times(V)),W&&(Qe=Qe.translate(W)),this._setClip(Qe,O),be=!0}if(_._croppingPolygons){var Xe=this;be||this._saveContext(O);try{var bt=_._croppingPolygons.map(function(De){return De.map(function(Mt){var _t=_.imageToViewportCoordinates(Mt.x,Mt.y,!0).rotate(-_.getRotation(!0),_._getRotationPoint(!0)),gt=Xe.viewportCoordToDrawerCoord(_t);return V&&(gt=gt.times(V)),W&&(gt=gt.plus(W)),gt})});this._clipWithPolygons(bt,O)}catch(De){n.console.error(De)}be=!0}if(_._hasOpaqueTile=!1,_.placeholderFillStyle&&_._hasOpaqueTile===!1){let De=this.viewportToDrawerRectangle(_.getBoundsNoRotate(!0));V&&(De=De.times(V)),W&&(De=De.translate(W));let Mt=null;typeof _.placeholderFillStyle=="function"?Mt=_.placeholderFillStyle(_,this.context):Mt=_.placeholderFillStyle,this._drawRectangle(De,Mt,O)}var $=a(_.subPixelRoundingForTransparency),At=!1;if($===n.SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS)At=!0;else if($===n.SUBPIXEL_ROUNDING_OCCURRENCES.ONLY_AT_REST){var $e=this.viewer&&this.viewer.isAnimating();At=!$e}for(var Tt=0;Tt<S.length;Tt++)B=S[Tt],this._drawTile(B,_,O,V,W,At,_.source),this.viewer&&this.viewer.raiseEvent("tile-drawn",{tiledImage:_,tile:B});be&&this._restoreContext(O),V||(_.getRotation(!0)%360!==0&&this._restoreRotationChanges(O),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(O)),O&&(V&&this._setRotations(_),this.blendSketch({opacity:_.opacity,scale:V,translate:W,compositeOperation:_.compositeOperation,bounds:_e}),V&&(_.getRotation(!0)%360!==0&&this._restoreRotationChanges(!1),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(!1))),this._drawDebugInfo(_,S),this._raiseTiledImageDrawnEvent(_,S)}}_drawDebugInfo(_,S){if(_.debugMode)for(var B=S.length-1;B>=0;B--){var O=S[B];try{this._drawDebugInfoOnTile(O,S.length,B,_)}catch(V){n.console.error(V)}}}_clipWithPolygons(_,S){var B=this._getContext(S);B.beginPath();for(const O of _)for(const[V,W]of O.entries())B[V===0?"moveTo":"lineTo"](W.x,W.y);B.clip()}_drawTile(_,S,B,O,V,W,k){n.console.assert(_,"[Drawer._drawTile] tile is required"),n.console.assert(S,"[Drawer._drawTile] drawingHandler is required");var ee=this._getContext(B);O=O||1,this._drawTileToCanvas(_,ee,S,O,V,W,k)}_drawTileToCanvas(_,S,B,O,V,W,k){var ee=_.position.times(n.pixelDensityRatio),_e=_.size.times(n.pixelDensityRatio),be;if(!_.context2D&&!_.cacheImageRecord){n.console.warn("[Drawer._drawTileToCanvas] attempting to draw tile %s when it's not cached",_.toString());return}if(be=_.getCanvasContext(),!_.loaded||!be){n.console.warn("Attempting to draw tile %s when it's not yet loaded.",_.toString());return}S.save(),typeof O=="number"&&O!==1&&(ee=ee.times(O),_e=_e.times(O)),V instanceof n.Point&&(ee=ee.plus(V)),S.globalAlpha===1&&_.hasTransparency&&(W&&(ee.x=Math.round(ee.x),ee.y=Math.round(ee.y),_e.x=Math.round(_e.x),_e.y=Math.round(_e.y)),S.clearRect(ee.x,ee.y,_e.x,_e.y)),this._raiseTileDrawingEvent(B,S,_,be);var lt,Qe;_.sourceBounds?(lt=Math.min(_.sourceBounds.width,be.canvas.width),Qe=Math.min(_.sourceBounds.height,be.canvas.height)):(lt=be.canvas.width,Qe=be.canvas.height),S.translate(ee.x+_e.x/2,0),_.flipped&&S.scale(-1,1),S.drawImage(be.canvas,0,0,lt,Qe,-_e.x/2,ee.y,_e.x,_e.y),S.restore()}_getContext(_){var S=this.context;if(_){if(this.sketchCanvas===null){this.sketchCanvas=document.createElement("canvas");var B=this._calculateSketchCanvasSize();if(this.sketchCanvas.width=B.x,this.sketchCanvas.height=B.y,this.sketchContext=this.sketchCanvas.getContext("2d"),this.viewport.getRotation()===0){var O=this;this.viewer.addHandler("rotate",function V(){if(O.viewport.getRotation()!==0){O.viewer.removeHandler("rotate",V);var W=O._calculateSketchCanvasSize();O.sketchCanvas.width=W.x,O.sketchCanvas.height=W.y}})}this._updateImageSmoothingEnabled(this.sketchContext)}S=this.sketchContext}return S}_saveContext(_){this._getContext(_).save()}_restoreContext(_){this._getContext(_).restore()}_setClip(_,S){var B=this._getContext(S);B.beginPath(),B.rect(_.x,_.y,_.width,_.height),B.clip()}_drawRectangle(_,S,B){var O=this._getContext(B);O.save(),O.fillStyle=S,O.fillRect(_.x,_.y,_.width,_.height),O.restore()}blendSketch(_,S,B,O){var V=_;n.isPlainObject(V)||(V={opacity:_,scale:S,translate:B,compositeOperation:O}),_=V.opacity,O=V.compositeOperation;var W=V.bounds;if(this.context.save(),this.context.globalAlpha=_,O&&(this.context.globalCompositeOperation=O),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{S=V.scale||1,B=V.translate;var k=B instanceof n.Point?B:new n.Point(0,0),ee=0,_e=0;if(B){var be=this.sketchCanvas.width-this.canvas.width,lt=this.sketchCanvas.height-this.canvas.height;ee=Math.round(be/2),_e=Math.round(lt/2)}this.context.drawImage(this.sketchCanvas,k.x-ee*S,k.y-_e*S,(this.canvas.width+2*ee)*S,(this.canvas.height+2*_e)*S,-ee,-_e,this.canvas.width+2*ee,this.canvas.height+2*_e)}this.context.restore()}_drawDebugInfoOnTile(_,S,B,O){var V=this.viewer.world.getIndexOfItem(O)%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[V],W.fillStyle=this.debugGridColor[V],this._setRotations(O),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 k=(_.position.x+_.size.x/2)*n.pixelDensityRatio,ee=(_.position.y+_.size.y/2)*n.pixelDensityRatio;W.translate(k,ee);const _e=this.viewport.getRotation(!0);W.rotate(Math.PI/180*-_e),W.translate(-k,-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: "+B+" of "+S,(_.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(),O.getRotation(!0)%360!==0&&this._restoreRotationChanges(),W.restore()}_updateImageSmoothingEnabled(_){_.msImageSmoothingEnabled=this._imageSmoothingEnabled,_.imageSmoothingEnabled=this._imageSmoothingEnabled}_getCanvasSize(_){var S=this._getContext(_).canvas;return new n.Point(S.width,S.height)}_getCanvasCenter(){return new n.Point(this.canvas.width/2,this.canvas.height/2)}_setRotations(_,S=!1){var B=!1;this.viewport.getRotation(!0)%360!==0&&(this._offsetForRotation({degrees:this.viewport.getRotation(!0),useSketch:S,saveContext:B}),B=!1),_.getRotation(!0)%360!==0&&this._offsetForRotation({degrees:_.getRotation(!0),point:this.viewport.pixelFromPointNoRotate(_._getRotationPoint(!0),!0),useSketch:S,saveContext:B})}_offsetForRotation(_){var S=_.point?_.point.times(n.pixelDensityRatio):this._getCanvasCenter(),B=this._getContext(_.useSketch);B.save(),B.translate(S.x,S.y),B.rotate(Math.PI/180*_.degrees),B.translate(-S.x,-S.y)}_flip(_){_=_||{};var S=_.point?_.point.times(n.pixelDensityRatio):this._getCanvasCenter(),B=this._getContext(_.useSketch);B.translate(S.x,0),B.scale(-1,1),B.translate(-S.x,0)}_restoreRotationChanges(_){var S=this._getContext(_);S.restore()}_calculateCanvasSize(){var _=n.pixelDensityRatio,S=this.viewport.getContainerSize();return{x:Math.round(S.x*_),y:Math.round(S.y*_)}}_calculateSketchCanvasSize(){var _=this._calculateCanvasSize();if(this.viewport.getRotation()===0)return _;var S=Math.ceil(Math.sqrt(_.x*_.x+_.y*_.y));return{x:S,y:S}}}n.CanvasDrawer=u;var h=n.SUBPIXEL_ROUNDING_OCCURRENCES.NEVER;function g(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 g(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 g(_)&&(_=w["*"]),y(_)}}(le),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=g=>this._tileReadyHandler(g),this._boundToImageUnloaded=g=>this._imageUnloadedHandler(g),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 g=h.getParameter(h.MAX_TEXTURE_IMAGE_UNITS);for(let a=0;a<g;++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"),g=n.isFunction(h.getContext)&&h.getContext("webgl"),y=g&&g.getExtension("WEBGL_lose_context");return y&&y.loseContext(),!!g}getType(){return"webgl"}minimumOverlapRequired(h){return h.isTainted()}_createDrawingElement(){let h=n.makeNeutralElement("canvas"),g=this._calculateCanvasSize();return h.width=g.x,h.height=g.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 g=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),S=n.Mat3.makeScaling(2/a.bounds.width*w,-2/a.bounds.height),B=n.Mat3.makeRotation(-a.rotation),O=S.multiply(B).multiply(_);g.bindFramebuffer(g.FRAMEBUFFER,null),g.clear(g.COLOR_BUFFER_BIT),this._outputContext.clearRect(0,0,this._outputCanvas.width,this._outputCanvas.height);let V=!1;h.forEach((W,k)=>{if(W.isTainted()){V&&(this._outputContext.drawImage(this._renderingCanvas,0,0),g.bindFramebuffer(g.FRAMEBUFFER,null),g.clear(g.COLOR_BUFFER_BIT),V=!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 _e=ee[0],be=W.compositeOperation||this.viewer.compositeOperation||W._clip||W._croppingPolygons||W.debugMode,lt=be||W.opacity<1||_e.hasTransparency;be&&(V&&this._outputContext.drawImage(this._renderingCanvas,0,0),g.bindFramebuffer(g.FRAMEBUFFER,null),g.clear(g.COLOR_BUFFER_BIT)),g.useProgram(this._firstPass.shaderProgram),lt?(g.bindFramebuffer(g.FRAMEBUFFER,this._glFrameBuffer),g.clear(g.COLOR_BUFFER_BIT)):g.bindFramebuffer(g.FRAMEBUFFER,null);let Qe=O,Xe=W.getRotation(!0);if(Xe%360!==0){let De=n.Mat3.makeRotation(-Xe*Math.PI/180),Mt=W.getBoundsNoRotate(!0).getCenter(),_t=n.Mat3.makeTranslation(Mt.x,Mt.y),gt=n.Mat3.makeTranslation(-Mt.x,-Mt.y),Ft=_t.multiply(De).multiply(gt);Qe=O.multiply(Ft)}let bt=this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS);if(bt<=0)throw new Error(`WegGL error: bad value for gl parameter MAX_TEXTURE_IMAGE_UNITS (${bt}). This could happen
|
|
7
|
-
if too many contexts have been created and not released, or there is another problem with the graphics card.`);let $=new Float32Array(bt*12),
|
|
6
|
+
function he(n){return new he.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(g){return n.type(g)==="function"},n.isArray=Array.isArray||function(g){return n.type(g)==="array"},n.isWindow=function(g){return g&&typeof g=="object"&&"setInterval"in g},n.type=function(g){return g==null?String(g):o[u.call(g)]||"object"},n.isPlainObject=function(g){if(!g||he.type(g)!=="object"||g.nodeType||n.isWindow(g)||g.constructor&&!h.call(g,"constructor")&&!h.call(g.constructor.prototype,"isPrototypeOf"))return!1;var y;for(var a in g)y=a;return y===void 0||h.call(g,y)},n.isEmptyObject=function(g){for(var y in g)return!1;return!0},n.freezeObject=function(g){return Object.freeze?n.freezeObject=Object.freeze:n.freezeObject=function(y){return y},n.freezeObject(g)},n.supportsCanvas=function(){var g=document.createElement("canvas");return!!(n.isFunction(g.getContext)&&g.getContext("2d"))}(),n.isCanvasTainted=function(g){var y=!1;try{g.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 g=0;if(n.supportsAddEventListener)try{var y={get capture(){return g++,!1},get once(){return g++,!1},get passive(){return g++,!1}};window.addEventListener("test",null,y),window.removeEventListener("test",null,y)}catch{g=0}return g>=3}(),n.getCurrentPixelDensityRatio=function(){if(n.supportsCanvas){var g=document.createElement("canvas").getContext("2d"),y=window.devicePixelRatio||1,a=g.webkitBackingStorePixelRatio||g.mozBackingStorePixelRatio||g.msBackingStorePixelRatio||g.oBackingStorePixelRatio||g.backingStorePixelRatio||1;return Math.max(y,1)/a}else return 1},n.pixelDensityRatio=n.getCurrentPixelDensityRatio()})(he),function(n){n.extend=function(){var a,w,_,T,k,M,V=arguments[0]||{},W=arguments.length,O=!1,te=1;for(typeof V=="boolean"&&(O=V,V=arguments[1]||{},te=2),typeof V!="object"&&!he.isFunction(V)&&(V={}),W===te&&(V=this,--te);te<W;te++)if(a=arguments[te],a!==null||a!==void 0)for(w in a){var _e=Object.getOwnPropertyDescriptor(a,w);if(_e!==void 0){if(_e.get||_e.set){Object.defineProperty(V,w,_e);continue}T=_e.value}else{n.console.warn('Could not copy inherited property "'+w+'".');continue}V!==T&&(O&&T&&(he.isPlainObject(T)||(k=he.isArray(T)))?(_=V[w],k?(k=!1,M=_&&he.isArray(_)?_:[]):M=_&&he.isPlainObject(_)?_:{},V[w]=he.extend(O,M,T)):T!==void 0&&(V[w]=T))}return V};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,k={top:0,left:0};return w?(_=w.documentElement,typeof a.getBoundingClientRect<"u"&&(k=a.getBoundingClientRect()),T=w===w.window?w:w.nodeType===9?w.defaultView||w.parentWindow:!1,new n.Point(k.left+(T.pageXOffset||_.scrollLeft)-(_.clientLeft||0),k.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,k=null;if(T[_]!==void 0)k=_;else for(var M=["Webkit","Moz","MS","O","webkit","moz","ms","o"],V=n.capitalizeFirstLetter(_),W=0;W<M.length;W++){var O=M[W]+V;if(T[O]!==void 0){k=O;break}}return w[_]=k,k},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,k;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),k="alpha(opacity="+T+")",a.style.filter=k):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,k,M){return T.indexOf(k,M)}:this.indexOf=function(T,k,M){var V,W=M||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)),V=W;V<O;V++)if(T[V]===k)return V;return-1},this.indexOf(a,w,_)},removeClass:function(a,w){var _,T=[],k;for(a=n.getElement(a),_=a.className.split(/\s+/),k=0;k<_.length;k++)_[k]&&_[k]!==w&&T.push(_[k]);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 k=_.concat([]),M;for(M=0;M<arguments.length;M++)k.push(arguments[M]);return w.apply(a,k)}},getUrlParameter:function(a){var w=g[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,k,M,V;n.isPlainObject(a)&&(w=a.success,_=a.error,T=a.withCredentials,k=a.headers,M=a.responseType||null,V=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 te=V?"POST":"GET";try{if(O.open(te,a,!0),M&&(O.responseType=M),k)for(var _e in k)Object.prototype.hasOwnProperty.call(k,_e)&&k[_e]&&O.setRequestHeader(_e,k[_e]);T&&(O.withCredentials=!0),O.send(V)}catch(be){n.console.error("%s while making AJAX request: %s",be.name,be.message),O.onreadystatechange=function(){},n.isFunction(_)&&_(O,be)}return O},jsonp:function(a){var w,_=a.url,T=document.head||document.getElementsByTagName("head")[0]||document.documentElement,k=a.callbackName||"openseadragon"+n.now(),M=window[k],V="$1"+k+"$2",W=a.param||"callback",O=a.callback;_=_.replace(/(=)\?(&|$)|\?\?/i,V),_+=(/\?/.test(_)?"&":"?")+W+"="+k,window[k]=function(te){if(M)window[k]=M;else try{delete window[k]}catch{}O&&n.isFunction(O)&&O(te)},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(te,_e){(_e||!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||"",!!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},g={};(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),k=T.split("&"),M,V,W;for(W=0;W<k.length;W++)if(M=k[W],V=M.indexOf("="),V>0){var O=M.substring(0,V),te=M.substring(V+1);try{g[O]=decodeURIComponent(te)}catch{n.console.error("Ignoring malformed URL parameter: %s=%s",O,te)}}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=[],k=[],M=0,V;n.requestAnimationFrame=function(W){return T.push([++M,W]),V||(V=setInterval(function(){if(T.length){var O=n.now(),te=k;for(k=T,T=te;k.length;)k.shift()[1](O)}else clearInterval(V),V=void 0},1e3/50)),M},n.cancelAnimationFrame=function(W){var O,te;for(O=0,te=T.length;O<te;O+=1)if(T[O][0]===W){T.splice(O,1);return}for(O=0,te=k.length;O<te;O+=1)if(k[O][0]===W){k.splice(O,1);return}}}}(window);function y(a,w){return w&&a!==document.body?document.body:a.offsetParent}}(he),function(n,o){Oe.exports?Oe.exports=o():n.OpenSeadragon=o()}(on,function(){return he}),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,g){return new o([1,0,0,0,1,0,h,g,1])}static makeRotation(h){var g=Math.cos(h),y=Math.sin(h);return new o([g,-y,0,y,g,0,0,0,1])}static makeScaling(h,g){return new o([h,0,0,0,g,0,0,0,1])}multiply(h){let g=this.values,y=h.values;var a=g[0*3+0],w=g[0*3+1],_=g[0*3+2],T=g[1*3+0],k=g[1*3+1],M=g[1*3+2],V=g[2*3+0],W=g[2*3+1],O=g[2*3+2],te=y[0*3+0],_e=y[0*3+1],be=y[0*3+2],ht=y[1*3+0],$e=y[1*3+1],Xe=y[1*3+2],bt=y[2*3+0],$=y[2*3+1],Tt=y[2*3+2];return new o([te*a+_e*T+be*V,te*w+_e*k+be*W,te*_+_e*M+be*O,ht*a+$e*T+Xe*V,ht*w+$e*k+Xe*W,ht*_+$e*M+Xe*O,bt*a+$*T+Tt*V,bt*w+$*k+Tt*W,bt*_+$*M+Tt*O])}}n.Mat3=o}(he),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)}(he),function(n){n.EventSource=function(){this.events={},this._rejectedEventList={}},n.EventSource.prototype={addOnceHandler:function(o,u,h,g,y){var a=this;g=g||1;var w=0,_=function(T){return w++,w===g&&a.removeHandler(o,_),u(T)};return this.addHandler(o,_,h,y)},addHandler:function(o,u,h,g){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:g||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],g=[],y;if(h&&n.isArray(h)){for(y=0;y<h.length;y++)h[y].handler!==u&&g.push(h[y]);this.events[o]=g}},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,g){var y,a=u.length;for(y=0;y<a;y++)u[y]&&(g.eventSource=h,g.userData=u[y].userData,u[y].handler(g))})},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]}}}(he),function(n){var o={};n.MouseTracker=function(I){var C=arguments;n.isPlainObject(I)||(I={element:C[0],clickTimeThreshold:C[1],clickDistThreshold:C[2]}),this.hash=Math.random(),this.element=n.getElement(I.element),this.clickTimeThreshold=I.clickTimeThreshold||n.DEFAULT_SETTINGS.clickTimeThreshold,this.clickDistThreshold=I.clickDistThreshold||n.DEFAULT_SETTINGS.clickDistThreshold,this.dblClickTimeThreshold=I.dblClickTimeThreshold||n.DEFAULT_SETTINGS.dblClickTimeThreshold,this.dblClickDistThreshold=I.dblClickDistThreshold||n.DEFAULT_SETTINGS.dblClickDistThreshold,this.userData=I.userData||null,this.stopDelay=I.stopDelay||50,this.preProcessEventHandler=I.preProcessEventHandler||null,this.contextMenuHandler=I.contextMenuHandler||null,this.enterHandler=I.enterHandler||null,this.leaveHandler=I.leaveHandler||null,this.exitHandler=I.exitHandler||null,this.overHandler=I.overHandler||null,this.outHandler=I.outHandler||null,this.pressHandler=I.pressHandler||null,this.nonPrimaryPressHandler=I.nonPrimaryPressHandler||null,this.releaseHandler=I.releaseHandler||null,this.nonPrimaryReleaseHandler=I.nonPrimaryReleaseHandler||null,this.moveHandler=I.moveHandler||null,this.scrollHandler=I.scrollHandler||null,this.clickHandler=I.clickHandler||null,this.dblClickHandler=I.dblClickHandler||null,this.dragHandler=I.dragHandler||null,this.dragEndHandler=I.dragEndHandler||null,this.pinchHandler=I.pinchHandler||null,this.stopHandler=I.stopHandler||null,this.keyDownHandler=I.keyDownHandler||null,this.keyUpHandler=I.keyUpHandler||null,this.keyHandler=I.keyHandler||null,this.focusHandler=I.focusHandler||null,this.blurHandler=I.blurHandler||null;var B=this;o[this.hash]={click:function(L){be(B,L)},dblclick:function(L){ht(B,L)},keydown:function(L){$e(B,L)},keyup:function(L){Xe(B,L)},keypress:function(L){bt(B,L)},focus:function(L){$(B,L)},blur:function(L){Tt(B,L)},contextmenu:function(L){et(B,L)},wheel:function(L){St(B,L)},mousewheel:function(L){Me(B,L)},DOMMouseScroll:function(L){Me(B,L)},MozMousePixelScroll:function(L){Me(B,L)},losecapture:function(L){_t(B,L)},mouseenter:function(L){yt(B,L)},mouseleave:function(L){si(B,L)},mouseover:function(L){Ke(B,L)},mouseout:function(L){ti(B,L)},mousedown:function(L){Ye(B,L)},mouseup:function(L){Dt(B,L)},mousemove:function(L){Kt(B,L)},touchstart:function(L){gt(B,L)},touchend:function(L){Ft(B,L)},touchmove:function(L){dt(B,L)},touchcancel:function(L){Nt(B,L)},gesturestart:function(L){Vt(B,L)},gesturechange:function(L){Wt(B,L)},gotpointercapture:function(L){ri(B,L)},lostpointercapture:function(L){zt(B,L)},pointerenter:function(L){yt(B,L)},pointerleave:function(L){si(B,L)},pointerover:function(L){Ke(B,L)},pointerout:function(L){ti(B,L)},pointerdown:function(L){Ye(B,L)},pointerup:function(L){Dt(B,L)},pointermove:function(L){Kt(B,L)},pointercancel:function(L){qt(B,L)},pointerupcaptured:function(L){ii(B,L)},pointermovecaptured:function(L){hi(B,L)},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."),I.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(I){return I?y(this):a(this),this},getActivePointersListByType:function(I){var C=o[this.hash],B,L=C?C.activePointersLists.length:0,ee;for(B=0;B<L;B++)if(C.activePointersLists[B].type===I)return C.activePointersLists[B];return ee=new n.MouseTracker.GesturePointList(I),C&&C.activePointersLists.push(ee),ee},getActivePointerCount:function(){var I=o[this.hash],C,B=I.activePointersLists.length,L=0;for(C=0;C<B;C++)L+=I.activePointersLists[C].getLength();return L},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(I){try{return I.addEventListener&&I.removeEventListener}catch{return!1}}n.MouseTracker.gesturePointVelocityTracker=function(){var I=[],C=0,B=0,L=function(De,Ae){return De.hash.toString()+Ae.type+Ae.id.toString()},ee=function(){var De,Ae=I.length,qe,it,Pt=n.now(),Bt,Ht,oi;for(Bt=Pt-B,B=Pt,De=0;De<Ae;De++)qe=I[De],it=qe.gPoint,it.direction=Math.atan2(it.currentPos.y-qe.lastPos.y,it.currentPos.x-qe.lastPos.x),Ht=qe.lastPos.distanceTo(it.currentPos),qe.lastPos=it.currentPos,oi=1e3*Ht/(Bt+1),it.speed=.75*oi+.25*it.speed},ae=function(De,Ae){var qe=L(De,Ae);I.push({guid:qe,gPoint:Ae,lastPos:Ae.currentPos}),I.length===1&&(B=n.now(),C=window.setInterval(ee,50))},ze=function(De,Ae){var qe=L(De,Ae),it,Pt=I.length;for(it=0;it<Pt;it++)if(I[it].guid===qe){I.splice(it,1),Pt--,Pt===0&&window.clearInterval(C);break}};return{addPoint:ae,removePoint:ze}}(),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 I=document.createElement("div");return n.isFunction(I.setPointerCapture)&&n.isFunction(I.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 I=document.createElement("div");return n.isFunction(I.setCapture)&&n.isFunction(I.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(I){this._gPoints=[],this.type=I,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(I){return this._gPoints.push(I)},removeById:function(I){var C,B=this._gPoints.length;for(C=0;C<B;C++)if(this._gPoints[C].id===I){this._gPoints.splice(C,1);break}return this._gPoints.length},getByIndex:function(I){return I<this._gPoints.length?this._gPoints[I]:null},getById:function(I){var C,B=this._gPoints.length;for(C=0;C<B;C++)if(this._gPoints[C].id===I)return this._gPoints[C];return null},getPrimary:function(I){var C,B=this._gPoints.length;for(C=0;C<B;C++)if(this._gPoints[C].isPrimary)return this._gPoints[C];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 g(I){var C=o[I.hash],B,L,ee,ae,ze,De=C.activePointersLists.length;for(B=0;B<De;B++)if(ee=C.activePointersLists[B],ee.getLength()>0){for(ze=[],ae=ee.asArray(),L=0;L<ae.length;L++)ze.push(ae[L]);for(L=0;L<ze.length;L++)xt(I,ee,ze[L])}for(B=0;B<De;B++)C.activePointersLists.pop();C.sentDragEvent=!1}function y(I){var C=o[I.hash],B,L;if(!C.tracking){for(L=0;L<n.MouseTracker.subscribeEvents.length;L++)B=n.MouseTracker.subscribeEvents[L],n.addEvent(I.element,B,C[B],B===n.MouseTracker.wheelEventName?{passive:!1,capture:!1}:!1);g(I),C.tracking=!0}}function a(I){var C=o[I.hash],B,L;if(C.tracking){for(L=0;L<n.MouseTracker.subscribeEvents.length;L++)B=n.MouseTracker.subscribeEvents[L],n.removeEvent(I.element,B,C[B],!1);g(I),C.tracking=!1}}function w(I,C){var B=o[I.hash];if(C==="pointerevent")return{upName:"pointerup",upHandler:B.pointerupcaptured,moveName:"pointermove",moveHandler:B.pointermovecaptured};if(C==="mouse")return{upName:"pointerup",upHandler:B.pointerupcaptured,moveName:"pointermove",moveHandler:B.pointermovecaptured};if(C==="touch")return{upName:"touchend",upHandler:B.touchendcaptured,moveName:"touchmove",moveHandler:B.touchmovecaptured};throw new Error("MouseTracker.getCaptureEventParams: Unknown pointer type.")}function _(I,C){var B;if(n.MouseTracker.havePointerCapture)if(n.MouseTracker.havePointerEvents)try{I.element.setPointerCapture(C.id)}catch{n.console.warn("setPointerCapture() called on invalid pointer ID");return}else I.element.setCapture(!0);else B=w(I,n.MouseTracker.havePointerEvents?"pointerevent":C.type),u&&h(window.top)&&n.addEvent(window.top,B.upName,B.upHandler,!0),n.addEvent(n.MouseTracker.captureElement,B.upName,B.upHandler,!0),n.addEvent(n.MouseTracker.captureElement,B.moveName,B.moveHandler,!0);fe(I,C,!0)}function T(I,C){var B,L,ee;if(n.MouseTracker.havePointerCapture)if(n.MouseTracker.havePointerEvents){if(L=I.getActivePointersListByType(C.type),ee=L.getById(C.id),!ee||!ee.captured)return;try{I.element.releasePointerCapture(C.id)}catch{}}else I.element.releaseCapture();else B=w(I,n.MouseTracker.havePointerEvents?"pointerevent":C.type),u&&h(window.top)&&n.removeEvent(window.top,B.upName,B.upHandler,!0),n.removeEvent(n.MouseTracker.captureElement,B.moveName,B.moveHandler,!0),n.removeEvent(n.MouseTracker.captureElement,B.upName,B.upHandler,!0);fe(I,C,!1)}function k(I){return n.MouseTracker.havePointerEvents?I.pointerId:n.MouseTracker.mousePointerId}function M(I){return n.MouseTracker.havePointerEvents&&I.pointerType?I.pointerType:"mouse"}function V(I){return n.MouseTracker.havePointerEvents?I.isPrimary:!0}function W(I){return n.getMousePosition(I)}function O(I,C){return te(W(I),C)}function te(I,C){var B=n.getElementOffset(C);return I.minus(B)}function _e(I,C){return new n.Point((I.x+C.x)/2,(I.y+C.y)/2)}function be(I,C){var B={originalEvent:C,eventType:"click",pointerType:"mouse",isEmulated:!1};q(I,B),B.preventDefault&&!B.defaultPrevented&&n.cancelEvent(C),B.stopPropagation&&n.stopEvent(C)}function ht(I,C){var B={originalEvent:C,eventType:"dblclick",pointerType:"mouse",isEmulated:!1};q(I,B),B.preventDefault&&!B.defaultPrevented&&n.cancelEvent(C),B.stopPropagation&&n.stopEvent(C)}function $e(I,C){var B=null,L={originalEvent:C,eventType:"keydown",pointerType:"",isEmulated:!1};q(I,L),I.keyDownHandler&&!L.preventGesture&&!L.defaultPrevented&&(B={eventSource:I,keyCode:C.keyCode?C.keyCode:C.charCode,ctrl:C.ctrlKey,shift:C.shiftKey,alt:C.altKey,meta:C.metaKey,originalEvent:C,preventDefault:L.preventDefault||L.defaultPrevented,userData:I.userData},I.keyDownHandler(B)),(B&&B.preventDefault||L.preventDefault&&!L.defaultPrevented)&&n.cancelEvent(C),L.stopPropagation&&n.stopEvent(C)}function Xe(I,C){var B=null,L={originalEvent:C,eventType:"keyup",pointerType:"",isEmulated:!1};q(I,L),I.keyUpHandler&&!L.preventGesture&&!L.defaultPrevented&&(B={eventSource:I,keyCode:C.keyCode?C.keyCode:C.charCode,ctrl:C.ctrlKey,shift:C.shiftKey,alt:C.altKey,meta:C.metaKey,originalEvent:C,preventDefault:L.preventDefault||L.defaultPrevented,userData:I.userData},I.keyUpHandler(B)),(B&&B.preventDefault||L.preventDefault&&!L.defaultPrevented)&&n.cancelEvent(C),L.stopPropagation&&n.stopEvent(C)}function bt(I,C){var B=null,L={originalEvent:C,eventType:"keypress",pointerType:"",isEmulated:!1};q(I,L),I.keyHandler&&!L.preventGesture&&!L.defaultPrevented&&(B={eventSource:I,keyCode:C.keyCode?C.keyCode:C.charCode,ctrl:C.ctrlKey,shift:C.shiftKey,alt:C.altKey,meta:C.metaKey,originalEvent:C,preventDefault:L.preventDefault||L.defaultPrevented,userData:I.userData},I.keyHandler(B)),(B&&B.preventDefault||L.preventDefault&&!L.defaultPrevented)&&n.cancelEvent(C),L.stopPropagation&&n.stopEvent(C)}function $(I,C){var B={originalEvent:C,eventType:"focus",pointerType:"",isEmulated:!1};q(I,B),I.focusHandler&&!B.preventGesture&&I.focusHandler({eventSource:I,originalEvent:C,userData:I.userData})}function Tt(I,C){var B={originalEvent:C,eventType:"blur",pointerType:"",isEmulated:!1};q(I,B),I.blurHandler&&!B.preventGesture&&I.blurHandler({eventSource:I,originalEvent:C,userData:I.userData})}function et(I,C){var B=null,L={originalEvent:C,eventType:"contextmenu",pointerType:"mouse",isEmulated:!1};q(I,L),I.contextMenuHandler&&!L.preventGesture&&!L.defaultPrevented&&(B={eventSource:I,position:te(W(C),I.element),originalEvent:L.originalEvent,preventDefault:L.preventDefault||L.defaultPrevented,userData:I.userData},I.contextMenuHandler(B)),(B&&B.preventDefault||L.preventDefault&&!L.defaultPrevented)&&n.cancelEvent(C),L.stopPropagation&&n.stopEvent(C)}function St(I,C){Mt(I,C,C)}function Me(I,C){var B={target:C.target||C.srcElement,type:"wheel",shiftKey:C.shiftKey||!1,clientX:C.clientX,clientY:C.clientY,pageX:C.pageX?C.pageX:C.clientX,pageY:C.pageY?C.pageY:C.clientY,deltaMode:C.type==="MozMousePixelScroll"?0:1,deltaX:0,deltaZ:0};n.MouseTracker.wheelEventName==="mousewheel"?B.deltaY=-C.wheelDelta/n.DEFAULT_SETTINGS.pixelsPerWheelLine:B.deltaY=C.detail,Mt(I,B,C)}function Mt(I,C,B){var L=0,ee,ae=null;L=C.deltaY?C.deltaY<0?1:-1:0,ee={originalEvent:C,eventType:"wheel",pointerType:"mouse",isEmulated:C!==B},q(I,ee),I.scrollHandler&&!ee.preventGesture&&!ee.defaultPrevented&&(ae={eventSource:I,pointerType:"mouse",position:O(C,I.element),scroll:L,shift:C.shiftKey,isTouchEvent:!1,originalEvent:B,preventDefault:ee.preventDefault||ee.defaultPrevented,userData:I.userData},I.scrollHandler(ae)),ee.stopPropagation&&n.stopEvent(B),(ae&&ae.preventDefault||ee.preventDefault&&!ee.defaultPrevented)&&n.cancelEvent(B)}function _t(I,C){var B={id:n.MouseTracker.mousePointerId,type:"mouse"},L={originalEvent:C,eventType:"lostpointercapture",pointerType:"mouse",isEmulated:!1};q(I,L),C.target===I.element&&fe(I,B,!1),L.stopPropagation&&n.stopEvent(C)}function gt(I,C){var B,L,ee=C.changedTouches.length,ae,ze=I.getActivePointersListByType("touch");B=n.now(),ze.getLength()>C.touches.length-ee&&n.console.warn("Tracked touch contact count doesn't match event.touches.length");var De={originalEvent:C,eventType:"pointerdown",pointerType:"touch",isEmulated:!1};for(q(I,De),L=0;L<ee;L++)ae={id:C.changedTouches[L].identifier,type:"touch",isPrimary:ze.getLength()===0,currentPos:W(C.changedTouches[L]),currentTime:B},Re(I,De,ae),vt(I,De,ae,0),fe(I,ae,!0);De.preventDefault&&!De.defaultPrevented&&n.cancelEvent(C),De.stopPropagation&&n.stopEvent(C)}function Ft(I,C){var B,L,ee=C.changedTouches.length,ae;B=n.now();var ze={originalEvent:C,eventType:"pointerup",pointerType:"touch",isEmulated:!1};for(q(I,ze),L=0;L<ee;L++)ae={id:C.changedTouches[L].identifier,type:"touch",currentPos:W(C.changedTouches[L]),currentTime:B},Rt(I,ze,ae,0),fe(I,ae,!1),He(I,ze,ae);ze.preventDefault&&!ze.defaultPrevented&&n.cancelEvent(C),ze.stopPropagation&&n.stopEvent(C)}function dt(I,C){var B,L,ee=C.changedTouches.length,ae;B=n.now();var ze={originalEvent:C,eventType:"pointermove",pointerType:"touch",isEmulated:!1};for(q(I,ze),L=0;L<ee;L++)ae={id:C.changedTouches[L].identifier,type:"touch",currentPos:W(C.changedTouches[L]),currentTime:B},Q(I,ze,ae);ze.preventDefault&&!ze.defaultPrevented&&n.cancelEvent(C),ze.stopPropagation&&n.stopEvent(C)}function Nt(I,C){var B=C.changedTouches.length,L,ee,ae={originalEvent:C,eventType:"pointercancel",pointerType:"touch",isEmulated:!1};for(q(I,ae),L=0;L<B;L++)ee={id:C.changedTouches[L].identifier,type:"touch"},ye(I,ae,ee);ae.stopPropagation&&n.stopEvent(C)}function Vt(I,C){return n.eventIsCanceled(C)||C.preventDefault(),!1}function Wt(I,C){return n.eventIsCanceled(C)||C.preventDefault(),!1}function ri(I,C){var B={originalEvent:C,eventType:"gotpointercapture",pointerType:M(C),isEmulated:!1};q(I,B),C.target===I.element&&fe(I,{id:C.pointerId,type:M(C)},!0),B.stopPropagation&&n.stopEvent(C)}function zt(I,C){var B={originalEvent:C,eventType:"lostpointercapture",pointerType:M(C),isEmulated:!1};q(I,B),C.target===I.element&&fe(I,{id:C.pointerId,type:M(C)},!1),B.stopPropagation&&n.stopEvent(C)}function yt(I,C){var B={id:k(C),type:M(C),isPrimary:V(C),currentPos:W(C),currentTime:n.now()},L={originalEvent:C,eventType:"pointerenter",pointerType:B.type,isEmulated:!1};q(I,L),Re(I,L,B)}function si(I,C){var B={id:k(C),type:M(C),isPrimary:V(C),currentPos:W(C),currentTime:n.now()},L={originalEvent:C,eventType:"pointerleave",pointerType:B.type,isEmulated:!1};q(I,L),He(I,L,B)}function Ke(I,C){var B={id:k(C),type:M(C),isPrimary:V(C),currentPos:W(C),currentTime:n.now()},L={originalEvent:C,eventType:"pointerover",pointerType:B.type,isEmulated:!1};q(I,L),Qe(I,L,B),L.preventDefault&&!L.defaultPrevented&&n.cancelEvent(C),L.stopPropagation&&n.stopEvent(C)}function ti(I,C){var B={id:k(C),type:M(C),isPrimary:V(C),currentPos:W(C),currentTime:n.now()},L={originalEvent:C,eventType:"pointerout",pointerType:B.type,isEmulated:!1};q(I,L),ke(I,L,B),L.preventDefault&&!L.defaultPrevented&&n.cancelEvent(C),L.stopPropagation&&n.stopEvent(C)}function Ye(I,C){var B={id:k(C),type:M(C),isPrimary:V(C),currentPos:W(C),currentTime:n.now()},L=n.MouseTracker.havePointerEvents&&B.type==="touch",ee={originalEvent:C,eventType:"pointerdown",pointerType:B.type,isEmulated:!1};q(I,ee),vt(I,ee,B,C.button),ee.preventDefault&&!ee.defaultPrevented&&n.cancelEvent(C),ee.stopPropagation&&n.stopEvent(C),ee.shouldCapture&&(L?fe(I,B,!0):_(I,B))}function Dt(I,C){Et(I,C)}function ii(I,C){var B=I.getActivePointersListByType(M(C));B.getById(C.pointerId)&&Et(I,C),n.stopEvent(C)}function Et(I,C){var B;B={id:k(C),type:M(C),isPrimary:V(C),currentPos:W(C),currentTime:n.now()};var L={originalEvent:C,eventType:"pointerup",pointerType:B.type,isEmulated:!1};q(I,L),Rt(I,L,B,C.button),L.preventDefault&&!L.defaultPrevented&&n.cancelEvent(C),L.stopPropagation&&n.stopEvent(C),L.shouldReleaseCapture&&(C.target===I.element?T(I,B):fe(I,B,!1))}function Kt(I,C){Yt(I,C)}function hi(I,C){var B=I.getActivePointersListByType(M(C));B.getById(C.pointerId)&&Yt(I,C),n.stopEvent(C)}function Yt(I,C){var B={id:k(C),type:M(C),isPrimary:V(C),currentPos:W(C),currentTime:n.now()},L={originalEvent:C,eventType:"pointermove",pointerType:B.type,isEmulated:!1};q(I,L),Q(I,L,B),L.preventDefault&&!L.defaultPrevented&&n.cancelEvent(C),L.stopPropagation&&n.stopEvent(C)}function qt(I,C){var B={id:C.pointerId,type:M(C)},L={originalEvent:C,eventType:"pointercancel",pointerType:B.type,isEmulated:!1};q(I,L),ye(I,L,B),L.stopPropagation&&n.stopEvent(C)}function Zt(I,C){return C.speed=0,C.direction=0,C.contactPos=C.currentPos,C.contactTime=C.currentTime,C.lastPos=C.currentPos,C.lastTime=C.currentTime,I.add(C)}function xt(I,C,B){var L,ee=C.getById(B.id);return ee?(ee.captured&&(n.console.warn("stopTrackingPointer() called on captured pointer"),T(I,ee)),C.removeContact(),L=C.removeById(B.id)):L=C.getLength(),L}function P(I,C){switch(C.eventType){case"pointermove":C.isStoppable=!0,C.isCancelable=!0,C.preventDefault=!1,C.preventGesture=!I.hasGestureHandlers,C.stopPropagation=!1;break;case"pointerover":case"pointerout":case"contextmenu":case"keydown":case"keyup":case"keypress":C.isStoppable=!0,C.isCancelable=!0,C.preventDefault=!1,C.preventGesture=!1,C.stopPropagation=!1;break;case"pointerdown":C.isStoppable=!0,C.isCancelable=!0,C.preventDefault=!1,C.preventGesture=!I.hasGestureHandlers,C.stopPropagation=!1;break;case"pointerup":C.isStoppable=!0,C.isCancelable=!0,C.preventDefault=!1,C.preventGesture=!I.hasGestureHandlers,C.stopPropagation=!1;break;case"wheel":C.isStoppable=!0,C.isCancelable=!0,C.preventDefault=!1,C.preventGesture=!I.hasScrollHandler,C.stopPropagation=!1;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":C.isStoppable=!0,C.isCancelable=!1,C.preventDefault=!1,C.preventGesture=!1,C.stopPropagation=!1;break;case"click":C.isStoppable=!0,C.isCancelable=!0,C.preventDefault=!!I.clickHandler,C.preventGesture=!1,C.stopPropagation=!1;break;case"dblclick":C.isStoppable=!0,C.isCancelable=!0,C.preventDefault=!!I.dblClickHandler,C.preventGesture=!1,C.stopPropagation=!1;break;case"focus":case"blur":case"pointerenter":case"pointerleave":default:C.isStoppable=!1,C.isCancelable=!1,C.preventDefault=!1,C.preventGesture=!1,C.stopPropagation=!1;break}}function q(I,C){C.eventSource=I,C.eventPhase=C.originalEvent&&typeof C.originalEvent.eventPhase<"u"?C.originalEvent.eventPhase:0,C.defaultPrevented=n.eventIsCanceled(C.originalEvent),C.shouldCapture=!1,C.shouldReleaseCapture=!1,C.userData=I.userData,P(I,C),I.preProcessEventHandler&&I.preProcessEventHandler(C)}function fe(I,C,B){var L=I.getActivePointersListByType(C.type),ee=L.getById(C.id);ee?B&&!ee.captured?(ee.captured=!0,L.captureCount++):!B&&ee.captured&&(ee.captured=!1,L.captureCount--,L.captureCount<0&&(L.captureCount=0,n.console.warn("updatePointerCaptured() - pointsList.captureCount went negative"))):n.console.warn("updatePointerCaptured() called on untracked pointer")}function Re(I,C,B){var L=I.getActivePointersListByType(B.type),ee;ee=L.getById(B.id),ee?(ee.insideElement=!0,ee.lastPos=ee.currentPos,ee.lastTime=ee.currentTime,ee.currentPos=B.currentPos,ee.currentTime=B.currentTime,B=ee):(B.captured=!1,B.insideElementPressed=!1,B.insideElement=!0,Zt(L,B)),I.enterHandler&&I.enterHandler({eventSource:I,pointerType:B.type,position:te(B.currentPos,I.element),buttons:L.buttons,pointers:I.getActivePointerCount(),insideElementPressed:B.insideElementPressed,buttonDownAny:L.buttons!==0,isTouchEvent:B.type==="touch",originalEvent:C.originalEvent,userData:I.userData})}function He(I,C,B){var L=I.getActivePointersListByType(B.type),ee,ae;ee=L.getById(B.id),ee?(ee.captured?(ee.insideElement=!1,ee.lastPos=ee.currentPos,ee.lastTime=ee.currentTime,ee.currentPos=B.currentPos,ee.currentTime=B.currentTime):xt(I,L,ee),B=ee):(B.captured=!1,B.insideElementPressed=!1),(I.leaveHandler||I.exitHandler)&&(ae={eventSource:I,pointerType:B.type,position:B.currentPos&&te(B.currentPos,I.element),buttons:L.buttons,pointers:I.getActivePointerCount(),insideElementPressed:B.insideElementPressed,buttonDownAny:L.buttons!==0,isTouchEvent:B.type==="touch",originalEvent:C.originalEvent,userData:I.userData},I.leaveHandler&&I.leaveHandler(ae),I.exitHandler&&I.exitHandler(ae))}function Qe(I,C,B){var L,ee;L=I.getActivePointersListByType(B.type),ee=L.getById(B.id),ee?B=ee:(B.captured=!1,B.insideElementPressed=!1),I.overHandler&&I.overHandler({eventSource:I,pointerType:B.type,position:te(B.currentPos,I.element),buttons:L.buttons,pointers:I.getActivePointerCount(),insideElementPressed:B.insideElementPressed,buttonDownAny:L.buttons!==0,isTouchEvent:B.type==="touch",originalEvent:C.originalEvent,userData:I.userData})}function ke(I,C,B){var L,ee;L=I.getActivePointersListByType(B.type),ee=L.getById(B.id),ee?B=ee:(B.captured=!1,B.insideElementPressed=!1),I.outHandler&&I.outHandler({eventSource:I,pointerType:B.type,position:B.currentPos&&te(B.currentPos,I.element),buttons:L.buttons,pointers:I.getActivePointerCount(),insideElementPressed:B.insideElementPressed,buttonDownAny:L.buttons!==0,isTouchEvent:B.type==="touch",originalEvent:C.originalEvent,userData:I.userData})}function vt(I,C,B,L){var ee=o[I.hash],ae=I.getActivePointersListByType(B.type),ze;if(typeof C.originalEvent.buttons<"u"?ae.buttons=C.originalEvent.buttons:L===0?ae.buttons|=1:L===1?ae.buttons|=4:L===2?ae.buttons|=2:L===3?ae.buttons|=8:L===4?ae.buttons|=16:L===5&&(ae.buttons|=32),L!==0){C.shouldCapture=!1,C.shouldReleaseCapture=!1,I.nonPrimaryPressHandler&&!C.preventGesture&&!C.defaultPrevented&&(C.preventDefault=!0,I.nonPrimaryPressHandler({eventSource:I,pointerType:B.type,position:te(B.currentPos,I.element),button:L,buttons:ae.buttons,isTouchEvent:B.type==="touch",originalEvent:C.originalEvent,userData:I.userData}));return}ze=ae.getById(B.id),ze?(ze.insideElementPressed=!0,ze.insideElement=!0,ze.originalTarget=C.originalEvent.target,ze.contactPos=B.currentPos,ze.contactTime=B.currentTime,ze.lastPos=ze.currentPos,ze.lastTime=ze.currentTime,ze.currentPos=B.currentPos,ze.currentTime=B.currentTime,B=ze):(B.captured=!1,B.insideElementPressed=!0,B.insideElement=!0,B.originalTarget=C.originalEvent.target,Zt(ae,B)),ae.addContact(),!C.preventGesture&&!C.defaultPrevented?(C.shouldCapture=!0,C.shouldReleaseCapture=!1,C.preventDefault=!0,(I.dragHandler||I.dragEndHandler||I.pinchHandler)&&n.MouseTracker.gesturePointVelocityTracker.addPoint(I,B),ae.contacts===1?I.pressHandler&&!C.preventGesture&&I.pressHandler({eventSource:I,pointerType:B.type,position:te(B.contactPos,I.element),buttons:ae.buttons,isTouchEvent:B.type==="touch",originalEvent:C.originalEvent,userData:I.userData}):ae.contacts===2&&I.pinchHandler&&B.type==="touch"&&(ee.pinchGPoints=ae.asArray(),ee.lastPinchDist=ee.currentPinchDist=ee.pinchGPoints[0].currentPos.distanceTo(ee.pinchGPoints[1].currentPos),ee.lastPinchCenter=ee.currentPinchCenter=_e(ee.pinchGPoints[0].currentPos,ee.pinchGPoints[1].currentPos))):(C.shouldCapture=!1,C.shouldReleaseCapture=!1)}function Rt(I,C,B,L){var ee=o[I.hash],ae=I.getActivePointersListByType(B.type),ze,De,Ae,qe=!1,it;if(typeof C.originalEvent.buttons<"u"?ae.buttons=C.originalEvent.buttons:L===0?ae.buttons^=-2:L===1?ae.buttons^=-5:L===2?ae.buttons^=-3:L===3?ae.buttons^=-9:L===4?ae.buttons^=-17:L===5&&(ae.buttons^=-33),C.shouldCapture=!1,L!==0){C.shouldReleaseCapture=!1,I.nonPrimaryReleaseHandler&&!C.preventGesture&&!C.defaultPrevented&&(C.preventDefault=!0,I.nonPrimaryReleaseHandler({eventSource:I,pointerType:B.type,position:te(B.currentPos,I.element),button:L,buttons:ae.buttons,isTouchEvent:B.type==="touch",originalEvent:C.originalEvent,userData:I.userData}));return}Ae=ae.getById(B.id),Ae?(ae.removeContact(),Ae.captured&&(qe=!0),Ae.lastPos=Ae.currentPos,Ae.lastTime=Ae.currentTime,Ae.currentPos=B.currentPos,Ae.currentTime=B.currentTime,Ae.insideElement||xt(I,ae,Ae),ze=Ae.currentPos,De=Ae.currentTime):(B.captured=!1,B.insideElementPressed=!1,B.insideElement=!0,Zt(ae,B),Ae=B),!C.preventGesture&&!C.defaultPrevented&&(qe?(C.shouldReleaseCapture=!0,C.preventDefault=!0,(I.dragHandler||I.dragEndHandler||I.pinchHandler)&&n.MouseTracker.gesturePointVelocityTracker.removePoint(I,Ae),ae.contacts===0?(I.releaseHandler&&ze&&I.releaseHandler({eventSource:I,pointerType:Ae.type,position:te(ze,I.element),buttons:ae.buttons,insideElementPressed:Ae.insideElementPressed,insideElementReleased:Ae.insideElement,isTouchEvent:Ae.type==="touch",originalEvent:C.originalEvent,userData:I.userData}),I.dragEndHandler&&ee.sentDragEvent&&I.dragEndHandler({eventSource:I,pointerType:Ae.type,position:te(Ae.currentPos,I.element),speed:Ae.speed,direction:Ae.direction,shift:C.originalEvent.shiftKey,isTouchEvent:Ae.type==="touch",originalEvent:C.originalEvent,userData:I.userData}),ee.sentDragEvent=!1,(I.clickHandler||I.dblClickHandler)&&Ae.insideElement&&(it=De-Ae.contactTime<=I.clickTimeThreshold&&Ae.contactPos.distanceTo(ze)<=I.clickDistThreshold,I.clickHandler&&I.clickHandler({eventSource:I,pointerType:Ae.type,position:te(Ae.currentPos,I.element),quick:it,shift:C.originalEvent.shiftKey,isTouchEvent:Ae.type==="touch",originalEvent:C.originalEvent,originalTarget:Ae.originalTarget,userData:I.userData}),I.dblClickHandler&&it&&(ae.clicks++,ae.clicks===1?(ee.lastClickPos=ze,ee.dblClickTimeOut=setTimeout(function(){ae.clicks=0},I.dblClickTimeThreshold)):ae.clicks===2&&(clearTimeout(ee.dblClickTimeOut),ae.clicks=0,ee.lastClickPos.distanceTo(ze)<=I.dblClickDistThreshold&&I.dblClickHandler({eventSource:I,pointerType:Ae.type,position:te(Ae.currentPos,I.element),shift:C.originalEvent.shiftKey,isTouchEvent:Ae.type==="touch",originalEvent:C.originalEvent,userData:I.userData}),ee.lastClickPos=null)))):ae.contacts===2&&I.pinchHandler&&Ae.type==="touch"&&(ee.pinchGPoints=ae.asArray(),ee.lastPinchDist=ee.currentPinchDist=ee.pinchGPoints[0].currentPos.distanceTo(ee.pinchGPoints[1].currentPos),ee.lastPinchCenter=ee.currentPinchCenter=_e(ee.pinchGPoints[0].currentPos,ee.pinchGPoints[1].currentPos))):(C.shouldReleaseCapture=!1,I.releaseHandler&&ze&&(I.releaseHandler({eventSource:I,pointerType:Ae.type,position:te(ze,I.element),buttons:ae.buttons,insideElementPressed:Ae.insideElementPressed,insideElementReleased:Ae.insideElement,isTouchEvent:Ae.type==="touch",originalEvent:C.originalEvent,userData:I.userData}),C.preventDefault=!0)))}function Q(I,C,B){var L=o[I.hash],ee=I.getActivePointersListByType(B.type),ae,ze,De;if(typeof C.originalEvent.buttons<"u"&&(ee.buttons=C.originalEvent.buttons),ae=ee.getById(B.id),ae)ae.lastPos=ae.currentPos,ae.lastTime=ae.currentTime,ae.currentPos=B.currentPos,ae.currentTime=B.currentTime;else return;C.shouldCapture=!1,C.shouldReleaseCapture=!1,I.stopHandler&&B.type==="mouse"&&(clearTimeout(I.stopTimeOut),I.stopTimeOut=setTimeout(function(){We(I,C.originalEvent,B.type)},I.stopDelay)),ee.contacts===0?I.moveHandler&&I.moveHandler({eventSource:I,pointerType:B.type,position:te(B.currentPos,I.element),buttons:ee.buttons,isTouchEvent:B.type==="touch",originalEvent:C.originalEvent,userData:I.userData}):ee.contacts===1?(I.moveHandler&&(ae=ee.asArray()[0],I.moveHandler({eventSource:I,pointerType:ae.type,position:te(ae.currentPos,I.element),buttons:ee.buttons,isTouchEvent:ae.type==="touch",originalEvent:C.originalEvent,userData:I.userData})),I.dragHandler&&!C.preventGesture&&!C.defaultPrevented&&(ae=ee.asArray()[0],De=ae.currentPos.minus(ae.lastPos),I.dragHandler({eventSource:I,pointerType:ae.type,position:te(ae.currentPos,I.element),buttons:ee.buttons,delta:De,speed:ae.speed,direction:ae.direction,shift:C.originalEvent.shiftKey,isTouchEvent:ae.type==="touch",originalEvent:C.originalEvent,userData:I.userData}),C.preventDefault=!0,L.sentDragEvent=!0)):ee.contacts===2&&(I.moveHandler&&(ze=ee.asArray(),I.moveHandler({eventSource:I,pointerType:ze[0].type,position:te(_e(ze[0].currentPos,ze[1].currentPos),I.element),buttons:ee.buttons,isTouchEvent:ze[0].type==="touch",originalEvent:C.originalEvent,userData:I.userData})),I.pinchHandler&&B.type==="touch"&&!C.preventGesture&&!C.defaultPrevented&&(De=L.pinchGPoints[0].currentPos.distanceTo(L.pinchGPoints[1].currentPos),De!==L.currentPinchDist&&(L.lastPinchDist=L.currentPinchDist,L.currentPinchDist=De,L.lastPinchCenter=L.currentPinchCenter,L.currentPinchCenter=_e(L.pinchGPoints[0].currentPos,L.pinchGPoints[1].currentPos),I.pinchHandler({eventSource:I,pointerType:"touch",gesturePoints:L.pinchGPoints,lastCenter:te(L.lastPinchCenter,I.element),center:te(L.currentPinchCenter,I.element),lastDistance:L.lastPinchDist,distance:L.currentPinchDist,shift:C.originalEvent.shiftKey,originalEvent:C.originalEvent,userData:I.userData}),C.preventDefault=!0)))}function ye(I,C,B){var L=I.getActivePointersListByType(B.type),ee;ee=L.getById(B.id),ee&&xt(I,L,ee)}function We(I,C,B){I.stopHandler&&I.stopHandler({eventSource:I,pointerType:B,position:O(C,I.element),buttons:I.getActivePointersListByType(B).buttons,isTouchEvent:B==="touch",originalEvent:C,userData:I.userData})}}(he),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 g=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):g.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)}}}(he),function(n){n.ControlDock=function(u){var h=["topleft","topright","bottomright","bottomleft"],g,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++)g=h[y],this.controls[g]=n.makeNeutralElement("div"),this.controls[g].style.position="absolute",g.match("left")&&(this.controls[g].style.left="0px"),g.match("right")&&(this.controls[g].style.right="0px"),g.match("top")&&(this.controls[g].style.top="0px"),g.match("bottom")&&(this.controls[g].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 g=null;if(!(o(this,u)>=0)){switch(h.anchor){case n.ControlAnchor.TOP_RIGHT:g=this.controls.topright,u.style.position="relative",u.style.paddingRight="0px",u.style.paddingTop="0px";break;case n.ControlAnchor.BOTTOM_RIGHT:g=this.controls.bottomright,u.style.position="relative",u.style.paddingRight="0px",u.style.paddingBottom="0px";break;case n.ControlAnchor.BOTTOM_LEFT:g=this.controls.bottomleft,u.style.position="relative",u.style.paddingLeft="0px",u.style.paddingBottom="0px";break;case n.ControlAnchor.TOP_LEFT:g=this.controls.topleft,u.style.position="relative",u.style.paddingLeft="0px",u.style.paddingTop="0px";break;case n.ControlAnchor.ABSOLUTE:g=this.container,u.style.margin="0px",u.style.padding="0px";break;default:case n.ControlAnchor.NONE:g=this.container,u.style.margin="0px",u.style.padding="0px";break}this.controls.push(new n.Control(u,h,g)),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 g=u.controls,y;for(y=g.length-1;y>=0;y--)if(g[y].element===h)return y;return-1}}(he),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}}})}(he),function(n){var o={},u=1;n.Viewer=function(P){var q=arguments,fe=this,Re;n.isPlainObject(P)||(P={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}),P.config&&(n.extend(!0,P,P.config),delete P.config);let He=["useCanvas"];if(P.drawerOptions=Object.assign({},He.reduce((ke,vt)=>(ke[vt]=P[vt],delete P[vt],ke),{}),P.drawerOptions),n.extend(!0,this,{id:P.id,hash:P.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,P),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(ke){var vt=n.getString("Errors.OpenFailed",ke.eventSource,ke.message);fe._showMessage(vt)}),n.ControlDock.call(this,P),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(ke){ke.width="100%",ke.height="100%",ke.overflow="hidden",ke.position="absolute",ke.top="0px",ke.left="0px"}(this.canvas.style),n.setElementTouchActionNone(this.canvas),P.tabIndex!==""&&(this.canvas.tabIndex=P.tabIndex===void 0?0:P.tabIndex),this.container.className="openseadragon-container",function(ke){ke.width="100%",ke.height="100%",ke.position="relative",ke.overflow="hidden",ke.left="0px",ke.top="0px",ke.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,te),keyHandler:n.delegate(this,_e),clickHandler:n.delegate(this,be),dblClickHandler:n.delegate(this,ht),dragHandler:n.delegate(this,$e),dragEndHandler:n.delegate(this,Xe),enterHandler:n.delegate(this,bt),leaveHandler:n.delegate(this,$),pressHandler:n.delegate(this,Tt),releaseHandler:n.delegate(this,et),nonPrimaryPressHandler:n.delegate(this,St),nonPrimaryReleaseHandler:n.delegate(this,Me),scrollHandler:n.delegate(this,Ft),pinchHandler:n.delegate(this,Mt),focusHandler:n.delegate(this,_t),blurHandler:n.delegate(this,gt)}),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,Nt)}),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(ke){fe.source=fe.world.getItemAt(0).source,o[fe.hash].forceRedraw=!0,fe._updateRequestId||(fe._updateRequestId=w(fe,Vt))}),this.world.addHandler("remove-item",function(ke){fe.world.getItemCount()?fe.source=fe.world.getItemAt(0).source:fe.source=null,o[fe.hash].forceRedraw=!0}),this.world.addHandler("metrics-change",function(ke){fe.viewport&&fe.viewport._setContentBounds(fe.world.getHomeBounds(),fe.world.getContentFactor())}),this.world.addHandler("item-index-change",function(ke){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:P.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 Qe=Array.isArray(this.drawer)?this.drawer:[this.drawer];Qe.length===0&&(Qe=[n.DEFAULT_SETTINGS.drawer].flat(),n.console.warn("No valid drawers were selected. Using the default value.")),this.drawer=null;for(const ke of Qe)if(this.requestDrawer(ke,{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&&(Re=this.buttonGroup.buttons.indexOf(this.rotateLeft),this.buttonGroup.buttons.splice(Re,1),this.buttonGroup.element.removeChild(this.rotateLeft.element)),this.rotateRight&&(Re=this.buttonGroup.buttons.indexOf(this.rotateRight),this.buttonGroup.buttons.splice(Re,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),Re=0;Re<this.customControls.length;Re++)this.addControl(this.customControls[Re].id,{anchor:this.customControls[Re].anchor});n.requestAnimationFrame(function(){T(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(P){return n.console.error("[Viewer.openDzi] this function is deprecated; use Viewer.open() instead."),this.open(P)},openTileSource:function(P){return n.console.error("[Viewer.openTileSource] this function is deprecated; use Viewer.open() instead."),this.open(P)},get buttons(){return n.console.warn("Viewer.buttons is deprecated; Please use Viewer.buttonGroup"),this.buttonGroup},open:function(P,q){var fe=this;if(this.close(),!P)return this;if(this.sequenceMode&&n.isArray(P))return this.referenceStrip&&(this.referenceStrip.destroy(),this.referenceStrip=null),typeof q<"u"&&!isNaN(q)&&(this.initialPage=q),this.tileSources=P,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(P)||(P=[P]),!P.length)return this;this._opening=!0;for(var Re=P.length,He=0,Qe=0,ke,vt=function(){if(He+Qe===Re)if(He){(fe._firstOpen||!fe.preserveViewport)&&(fe.viewport.goHome(!0),fe.viewport.update()),fe._firstOpen=!1;var ye=P[0];if(ye.tileSource&&(ye=ye.tileSource),fe.overlays&&!fe.preserveOverlays)for(var We=0;We<fe.overlays.length;We++)fe.currentOverlays[We]=y(fe,fe.overlays[We]);fe._drawOverlays(),fe._opening=!1,fe.raiseEvent("open",{source:ye})}else fe._opening=!1,fe.raiseEvent("open-failed",ke)},Rt=function(ye){(!n.isPlainObject(ye)||!ye.tileSource)&&(ye={tileSource:ye}),ye.index!==void 0&&(n.console.error("[Viewer.open] setting indexes here is not supported; use addTiledImage instead"),delete ye.index),ye.collectionImmediately===void 0&&(ye.collectionImmediately=!0);var We=ye.success;ye.success=function(C){if(He++,ye.tileSource.overlays)for(var B=0;B<ye.tileSource.overlays.length;B++)fe.addOverlay(ye.tileSource.overlays[B]);We&&We(C),vt()};var I=ye.error;ye.error=function(C){Qe++,ke||(ke=C),I&&I(C),vt()},fe.addTiledImage(ye)},Q=0;Q<P.length;Q++)Rt(P[Q]);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(P,q){const fe={mainDrawer:!0,redrawImmediately:!0,drawerOptions:null};q=n.extend(!0,fe,q);const Re=q.mainDrawer,He=q.redrawImmediately,Qe=q.drawerOptions,ke=this.drawer;let vt=null;if(P&&P.prototype instanceof n.DrawerBase?(vt=P,P="custom"):typeof P=="string"&&(vt=n.determineDrawer(P)),vt||n.console.warn("Unsupported drawer! Drawer must be an existing string type, or a class that extends OpenSeadragon.DrawerBase."),vt&&vt.isSupported()){ke&&Re&&ke.destroy();const Rt=new vt({viewer:this,viewport:this.viewport,element:this.canvas,debugGridColor:this.debugGridColor,options:Qe||this.drawerOptions[P]});return Re&&(this.drawer=Rt,He&&this.forceRedraw()),Rt}return!1},isMouseNavEnabled:function(){return this.innerTracker.isTracking()},setMouseNavEnabled:function(P){return this.innerTracker.setTracking(P),this.outerTracker.setTracking(P),this.raiseEvent("mouse-enabled",{enabled:P}),this},areControlsEnabled:function(){var P=this.controls.length,q;for(q=0;q<this.controls.length;q++)P=P&&this.controls[q].isVisible();return P},setControlsEnabled:function(P){return P?M(this):T(this),this.raiseEvent("controls-enabled",{enabled:P}),this},setDebugMode:function(P){for(var q=0;q<this.world.getItemCount();q++)this.world.getItemAt(q).debugMode=P;this.debugMode=P,this.forceRedraw()},setAjaxHeaders:function(P,q){if(P===null&&(P={}),!n.isPlainObject(P)){console.error("[Viewer.setAjaxHeaders] Ignoring invalid headers, must be a plain object");return}if(q===void 0&&(q=!0),this.ajaxHeaders=P,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 Re in this.referenceStrip.miniViewers)this.referenceStrip.miniViewers[Re].setAjaxHeaders(this.ajaxHeaders,!0)}},addButton:function(P){this.buttonGroup.addButton(P)},isFullPage:function(){return o[this.hash]&&o[this.hash].fullPage},setFullPage:function(P){var q=document.body,fe=q.style,Re=document.documentElement.style,He=this,Qe,ke;if(P===this.isFullPage())return this;var vt={fullPage:P,preventDefaultAction:!1};if(this.raiseEvent("pre-full-page",vt),vt.preventDefaultAction)return this;if(P&&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=Re.margin,fe.margin="0",Re.margin="0",this.bodyPadding=fe.padding,this.docPadding=Re.padding,fe.padding="0",Re.padding="0",this.bodyWidth=fe.width,this.docWidth=Re.width,fe.width="100%",Re.width="100%",this.bodyHeight=fe.height,this.docHeight=Re.height,fe.height="100%",Re.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,Qe=q.childNodes.length,ke=0;ke<Qe;ke++)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,Re.margin=this.docMargin,fe.padding=this.bodyPadding,Re.padding=this.docPadding,fe.width=this.bodyWidth,Re.width=this.docWidth,fe.height=this.bodyHeight,Re.height=this.docHeight,fe.display=this.bodyDisplay,q.removeChild(this.element),Qe=this.previousBody.length,ke=0;ke<Qe;ke++)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 Rt=0,Q=function(){n.setPageScroll(He.pageScroll);var ye=n.getPageScroll();Rt++,Rt<10&&(ye.x!==He.pageScroll.x||ye.y!==He.pageScroll.y)&&n.requestAnimationFrame(Q)};n.requestAnimationFrame(Q),o[this.hash].fullPage=!1,n.delegate(this,Nt)({})}return this.navigator&&this.viewport&&this.navigator.update(this.viewport),this.raiseEvent("full-page",{fullPage:P}),this},setFullScreen:function(P){var q=this;if(!n.supportsFullScreen)return this.setFullPage(P);if(n.isFullScreen()===P)return this;var fe={fullScreen:P,preventDefaultAction:!1};if(this.raiseEvent("pre-full-screen",fe),fe.preventDefaultAction)return this;if(P){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 Re=function(){var He=n.isFullScreen();He||(n.removeEvent(document,n.fullScreenEventName,Re),n.removeEvent(document,n.fullScreenErrorEventName,Re),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:He})};n.addEvent(document,n.fullScreenEventName,Re),n.addEvent(document,n.fullScreenErrorEventName,Re),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(P){return this.container.style.visibility=P?"":"hidden",this.raiseEvent("visible",{visible:P}),this},addTiledImage:function(P){n.console.assert(P,"[Viewer.addTiledImage] options is required"),n.console.assert(P.tileSource,"[Viewer.addTiledImage] options.tileSource is required"),n.console.assert(!P.replace||P.index>-1&&P.index<this.world.getItemCount(),"[Viewer.addTiledImage] if options.replace is used, options.index must be a valid index in Viewer.world");var q=this;P.replace&&(P.replaceItem=q.world.getItemAt(P.index)),this._hideMessage(),P.placeholderFillStyle===void 0&&(P.placeholderFillStyle=this.placeholderFillStyle),P.opacity===void 0&&(P.opacity=this.opacity),P.preload===void 0&&(P.preload=this.preload),P.compositeOperation===void 0&&(P.compositeOperation=this.compositeOperation),P.crossOriginPolicy===void 0&&(P.crossOriginPolicy=P.tileSource.crossOriginPolicy!==void 0?P.tileSource.crossOriginPolicy:this.crossOriginPolicy),P.ajaxWithCredentials===void 0&&(P.ajaxWithCredentials=this.ajaxWithCredentials),P.loadTilesWithAjax===void 0&&(P.loadTilesWithAjax=this.loadTilesWithAjax),n.isPlainObject(P.ajaxHeaders)||(P.ajaxHeaders={});var fe={options:P};function Re(ke){for(var vt=0;vt<q._loadQueue.length;vt++)if(q._loadQueue[vt]===fe){q._loadQueue.splice(vt,1);break}q._loadQueue.length===0&&He(fe),q.raiseEvent("add-item-failed",ke),P.error&&P.error(ke)}function He(ke){q.collectionMode&&(q.world.arrange({immediately:ke.options.collectionImmediately,rows:q.collectionRows,columns:q.collectionColumns,layout:q.collectionLayout,tileSize:q.collectionTileSize,tileMargin:q.collectionTileMargin}),q.world.setAutoRefigureSizes(!0))}if(n.isArray(P.tileSource)){setTimeout(function(){Re({message:"[Viewer.addTiledImage] Sequences can not be added; add them one at a time instead.",source:P.tileSource,options:P})});return}this._loadQueue.push(fe);function Qe(){for(var ke,vt,Rt;q._loadQueue.length&&(ke=q._loadQueue[0],!!ke.tileSource);){if(q._loadQueue.splice(0,1),ke.options.replace){var Q=q.world.getIndexOfItem(ke.options.replaceItem);Q!==-1&&(ke.options.index=Q),q.world.removeItem(ke.options.replaceItem)}vt=new n.TiledImage({viewer:q,source:ke.tileSource,viewport:q.viewport,drawer:q.drawer,tileCache:q.tileCache,imageLoader:q.imageLoader,x:ke.options.x,y:ke.options.y,width:ke.options.width,height:ke.options.height,fitBounds:ke.options.fitBounds,fitBoundsPlacement:ke.options.fitBoundsPlacement,clip:ke.options.clip,placeholderFillStyle:ke.options.placeholderFillStyle,opacity:ke.options.opacity,preload:ke.options.preload,degrees:ke.options.degrees,flipped:ke.options.flipped,compositeOperation:ke.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:ke.options.crossOriginPolicy,ajaxWithCredentials:ke.options.ajaxWithCredentials,loadTilesWithAjax:ke.options.loadTilesWithAjax,ajaxHeaders:ke.options.ajaxHeaders,debugMode:q.debugMode,subPixelRoundingForTransparency:q.subPixelRoundingForTransparency}),q.collectionMode&&q.world.setAutoRefigureSizes(!1),q.navigator&&(Rt=n.extend({},ke.options,{replace:!1,originalTiledImage:vt,tileSource:ke.tileSource}),q.navigator.addTiledImage(Rt)),q.world.addItem(vt,{index:ke.options.index}),q._loadQueue.length===0&&He(ke),q.world.getItemCount()===1&&!q.preserveViewport&&q.viewport.goHome(!0),ke.options.success&&ke.options.success({item:vt})}}g(this,P.tileSource,P,function(ke){fe.tileSource=ke,Qe()},function(ke){ke.options=P,Re(ke),Qe()})},addSimpleImage:function(P){n.console.assert(P,"[Viewer.addSimpleImage] options is required"),n.console.assert(P.url,"[Viewer.addSimpleImage] options.url is required");var q=n.extend({},P,{tileSource:{type:"image",url:P.url}});delete q.url,this.addTiledImage(q)},addLayer:function(P){var q=this;n.console.error("[Viewer.addLayer] this function is deprecated; use Viewer.addTiledImage() instead.");var fe=n.extend({},P,{success:function(Re){q.raiseEvent("add-layer",{options:P,drawer:Re.item})},error:function(Re){q.raiseEvent("add-layer-failed",Re)}});return this.addTiledImage(fe),this},getLayerAtLevel:function(P){return n.console.error("[Viewer.getLayerAtLevel] this function is deprecated; use World.getItemAt() instead."),this.world.getItemAt(P)},getLevelOfLayer:function(P){return n.console.error("[Viewer.getLevelOfLayer] this function is deprecated; use World.getIndexOfItem() instead."),this.world.getIndexOfItem(P)},getLayersCount:function(){return n.console.error("[Viewer.getLayersCount] this function is deprecated; use World.getItemCount() instead."),this.world.getItemCount()},setLayerLevel:function(P,q){return n.console.error("[Viewer.setLayerLevel] this function is deprecated; use World.setItemIndex() instead."),this.world.setItemIndex(P,q)},removeLayer:function(P){return n.console.error("[Viewer.removeLayer] this function is deprecated; use World.removeItem() instead."),this.world.removeItem(P)},forceRedraw:function(){return o[this.hash].forceRedraw=!0,this},forceResize:function(){o[this.hash].needsResize=!0,o[this.hash].forceResize=!0},bindSequenceControls:function(){var P=n.delegate(this,V),q=n.delegate(this,W),fe=n.delegate(this,this.goToNextPage),Re=n.delegate(this,this.goToPreviousPage),He=this.navImages,Qe=!0;return this.showSequenceControl&&((this.previousButton||this.nextButton)&&(Qe=!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:yt(this.prefixUrl,He.previous.REST),srcGroup:yt(this.prefixUrl,He.previous.GROUP),srcHover:yt(this.prefixUrl,He.previous.HOVER),srcDown:yt(this.prefixUrl,He.previous.DOWN),onRelease:Re,onFocus:P,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:yt(this.prefixUrl,He.next.REST),srcGroup:yt(this.prefixUrl,He.next.GROUP),srcHover:yt(this.prefixUrl,He.next.HOVER),srcDown:yt(this.prefixUrl,He.next.DOWN),onRelease:fe,onFocus:P,onBlur:q}),this.navPrevNextWrap||this.previousButton.disable(),(!this.tileSources||!this.tileSources.length)&&this.nextButton.disable(),Qe&&(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 P=n.delegate(this,si),q=n.delegate(this,ti),fe=n.delegate(this,ii),Re=n.delegate(this,Ke),He=n.delegate(this,Et),Qe=n.delegate(this,hi),ke=n.delegate(this,Yt),vt=n.delegate(this,qt),Rt=n.delegate(this,Zt),Q=n.delegate(this,xt),ye=n.delegate(this,V),We=n.delegate(this,W),I=this.navImages,C=[],B=!0;return this.showNavigationControl&&((this.zoomInButton||this.zoomOutButton||this.homeButton||this.fullPageButton||this.rotateLeftButton||this.rotateRightButton||this.flipButton)&&(B=!1),this.showZoomControl&&(C.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:yt(this.prefixUrl,I.zoomIn.REST),srcGroup:yt(this.prefixUrl,I.zoomIn.GROUP),srcHover:yt(this.prefixUrl,I.zoomIn.HOVER),srcDown:yt(this.prefixUrl,I.zoomIn.DOWN),onPress:P,onRelease:q,onClick:fe,onEnter:P,onExit:q,onFocus:ye,onBlur:We})),C.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:yt(this.prefixUrl,I.zoomOut.REST),srcGroup:yt(this.prefixUrl,I.zoomOut.GROUP),srcHover:yt(this.prefixUrl,I.zoomOut.HOVER),srcDown:yt(this.prefixUrl,I.zoomOut.DOWN),onPress:Re,onRelease:q,onClick:He,onEnter:Re,onExit:q,onFocus:ye,onBlur:We}))),this.showHomeControl&&C.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:yt(this.prefixUrl,I.home.REST),srcGroup:yt(this.prefixUrl,I.home.GROUP),srcHover:yt(this.prefixUrl,I.home.HOVER),srcDown:yt(this.prefixUrl,I.home.DOWN),onRelease:Qe,onFocus:ye,onBlur:We})),this.showFullPageControl&&C.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:yt(this.prefixUrl,I.fullpage.REST),srcGroup:yt(this.prefixUrl,I.fullpage.GROUP),srcHover:yt(this.prefixUrl,I.fullpage.HOVER),srcDown:yt(this.prefixUrl,I.fullpage.DOWN),onRelease:ke,onFocus:ye,onBlur:We})),this.showRotationControl&&(C.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:yt(this.prefixUrl,I.rotateleft.REST),srcGroup:yt(this.prefixUrl,I.rotateleft.GROUP),srcHover:yt(this.prefixUrl,I.rotateleft.HOVER),srcDown:yt(this.prefixUrl,I.rotateleft.DOWN),onRelease:vt,onFocus:ye,onBlur:We})),C.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:yt(this.prefixUrl,I.rotateright.REST),srcGroup:yt(this.prefixUrl,I.rotateright.GROUP),srcHover:yt(this.prefixUrl,I.rotateright.HOVER),srcDown:yt(this.prefixUrl,I.rotateright.DOWN),onRelease:Rt,onFocus:ye,onBlur:We}))),this.showFlipControl&&C.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:yt(this.prefixUrl,I.flip.REST),srcGroup:yt(this.prefixUrl,I.flip.GROUP),srcHover:yt(this.prefixUrl,I.flip.HOVER),srcDown:yt(this.prefixUrl,I.flip.DOWN),onRelease:Q,onFocus:ye,onBlur:We})),B?(this.buttonGroup=new n.ButtonGroup({buttons:C,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=C),this},currentPage:function(){return this._sequenceIndex},goToPage:function(P){return this.tileSources&&P>=0&&P<this.tileSources.length&&(this._sequenceIndex=P,this._updateSequenceButtons(P),this.open(this.tileSources[P]),this.referenceStrip&&this.referenceStrip.setFocus(P),this.raiseEvent("page",{page:P})),this},addOverlay:function(P,q,fe,Re){var He;if(n.isPlainObject(P)?He=P:He={element:P,location:q,placement:fe,onDraw:Re},P=n.getElement(He.element),a(this.currentOverlays,P)>=0)return this;var Qe=y(this,He);return this.currentOverlays.push(Qe),Qe.drawHTML(this.overlaysContainer,this.viewport),this.raiseEvent("add-overlay",{element:P,location:He.location,placement:He.placement}),this},updateOverlay:function(P,q,fe){var Re;return P=n.getElement(P),Re=a(this.currentOverlays,P),Re>=0&&(this.currentOverlays[Re].update(q,fe),o[this.hash].forceRedraw=!0,this.raiseEvent("update-overlay",{element:P,location:q,placement:fe})),this},removeOverlay:function(P){var q;return P=n.getElement(P),q=a(this.currentOverlays,P),q>=0&&(this.currentOverlays[q].destroy(),this.currentOverlays.splice(q,1),o[this.hash].forceRedraw=!0,this.raiseEvent("remove-overlay",{element:P})),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(P){var q;return P=n.getElement(P),q=a(this.currentOverlays,P),q>=0?this.currentOverlays[q]:null},_updateSequenceButtons:function(P){this.nextButton&&(!this.tileSources||this.tileSources.length-1===P?this.navPrevNextWrap||this.nextButton.disable():this.nextButton.enable()),this.previousButton&&(P>0?this.previousButton.enable():this.navPrevNextWrap||this.previousButton.disable())},_showMessage:function(P){this._hideMessage();var q=n.makeNeutralElement("div");q.appendChild(document.createTextNode(P)),this.messageDiv=n.makeCenteredNode(q),n.addClass(this.messageDiv,"openseadragon-message"),this.container.appendChild(this.messageDiv)},_hideMessage:function(){var P=this.messageDiv;P&&(P.parentNode.removeChild(P),delete this.messageDiv)},gestureSettingsByDeviceType:function(P){switch(P){case"mouse":return this.gestureSettingsMouse;case"touch":return this.gestureSettingsTouch;case"pen":return this.gestureSettingsPen;default:return this.gestureSettingsUnknown}},_drawOverlays:function(){var P,q=this.currentOverlays.length;for(P=0;P<q;P++)this.currentOverlays[P].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 P=n.pixelDensityRatio,q=n.getCurrentPixelDensityRatio();P!==q&&(n.pixelDensityRatio=q,this.forceResize())},goToPreviousPage:function(){var P=this._sequenceIndex-1;this.navPrevNextWrap&&P<0&&(P+=this.tileSources.length),this.goToPage(P)},goToNextPage:function(){var P=this._sequenceIndex+1;this.navPrevNextWrap&&P>=this.tileSources.length&&(P=0),this.goToPage(P)},isAnimating:function(){return o[this.hash].animating}});function h(P){return P=n.getElement(P),new n.Point(P.clientWidth===0?1:P.clientWidth,P.clientHeight===0?1:P.clientHeight)}function g(P,q,fe,Re,He){var Qe=P;if(n.type(q)==="string"){if(q.match(/^\s*<.*>\s*$/))q=n.parseXml(q);else if(q.match(/^\s*[{[].*[}\]]\s*$/))try{var ke=n.parseJSON(q);q=ke}catch{}}function vt(Rt,Q){Rt.ready?Re(Rt):(Rt.addHandler("ready",function(){Re(Rt)}),Rt.addHandler("open-failed",function(ye){He({message:ye.message,source:Q})}))}setTimeout(function(){if(n.type(q)==="string")q=new n.TileSource({url:q,crossOriginPolicy:fe.crossOriginPolicy!==void 0?fe.crossOriginPolicy:P.crossOriginPolicy,ajaxWithCredentials:P.ajaxWithCredentials,ajaxHeaders:fe.ajaxHeaders?fe.ajaxHeaders:P.ajaxHeaders,splitHashDataForPost:P.splitHashDataForPost,success:function(We){Re(We.tileSource)}}),q.addHandler("open-failed",function(We){He(We)});else if(n.isPlainObject(q)||q.nodeType)if(q.crossOriginPolicy===void 0&&(fe.crossOriginPolicy!==void 0||P.crossOriginPolicy!==void 0)&&(q.crossOriginPolicy=fe.crossOriginPolicy!==void 0?fe.crossOriginPolicy:P.crossOriginPolicy),q.ajaxWithCredentials===void 0&&(q.ajaxWithCredentials=P.ajaxWithCredentials),n.isFunction(q.getTileUrl)){var Rt=new n.TileSource(q);Rt.getTileUrl=q.getTileUrl,Re(Rt)}else{var Q=n.TileSource.determineType(Qe,q);if(!Q){He({message:"Unable to load TileSource",source:q});return}var ye=Q.prototype.configure.apply(Qe,[q]);vt(new Q(ye),q)}else vt(q,q)})}function y(P,q){if(q instanceof n.Overlay)return q;var fe=null;if(q.element)fe=n.getElement(q.element);else{var Re=q.id?q.id:"openseadragon-overlay-"+Math.floor(Math.random()*1e7);fe=n.getElement(q.id),fe||(fe=document.createElement("a"),fe.href="#/overlay/"+Re),fe.id=Re,n.addClass(fe,q.className?q.className:"openseadragon-overlay")}var He=q.location,Qe=q.width,ke=q.height;if(!He){var vt=q.x,Rt=q.y;if(q.px!==void 0){var Q=P.viewport.imageToViewportRectangle(new n.Rect(q.px,q.py,Qe||0,ke||0));vt=Q.x,Rt=Q.y,Qe=Qe!==void 0?Q.width:void 0,ke=ke!==void 0?Q.height:void 0}He=new n.Point(vt,Rt)}var ye=q.placement;return ye&&n.type(ye)==="string"&&(ye=n.Placement[q.placement.toUpperCase()]),new n.Overlay({element:fe,location:He,placement:ye,onDraw:q.onDraw,checkResize:q.checkResize,width:Qe,height:ke,rotationMode:q.rotationMode})}function a(P,q){var fe;for(fe=P.length-1;fe>=0;fe--)if(P[fe].element===q)return fe;return-1}function w(P,q){return n.requestAnimationFrame(function(){q(P)})}function _(P){n.requestAnimationFrame(function(){k(P)})}function T(P){P.autoHideControls&&(P.controlsShouldFade=!0,P.controlsFadeBeginTime=n.now()+P.controlsFadeDelay,window.setTimeout(function(){_(P)},P.controlsFadeDelay))}function k(P){var q,fe,Re,He;if(P.controlsShouldFade){for(q=n.now(),fe=q-P.controlsFadeBeginTime,Re=1-fe/P.controlsFadeLength,Re=Math.min(1,Re),Re=Math.max(0,Re),He=P.controls.length-1;He>=0;He--)P.controls[He].autoFade&&P.controls[He].setOpacity(Re);Re>0&&_(P)}}function M(P){var q;for(P.controlsShouldFade=!1,q=P.controls.length-1;q>=0;q--)P.controls[q].setOpacity(1)}function V(){M(this)}function W(){T(this)}function O(P){var q={tracker:P.eventSource,position:P.position,originalEvent:P.originalEvent,preventDefault:P.preventDefault};this.raiseEvent("canvas-contextmenu",q),P.preventDefault=q.preventDefault}function te(P){var q={originalEvent:P.originalEvent,preventDefaultAction:!1,preventVerticalPan:P.preventVerticalPan||!this.panVertical,preventHorizontalPan:P.preventHorizontalPan||!this.panHorizontal};if(this.raiseEvent("canvas-key",q),!q.preventDefaultAction&&!P.ctrl&&!P.alt&&!P.meta)switch(P.keyCode){case 38:q.preventVerticalPan||(P.shift?this.viewport.zoomBy(1.1):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,-this.pixelsPerArrowPress))),this.viewport.applyConstraints()),P.preventDefault=!0;break;case 40:q.preventVerticalPan||(P.shift?this.viewport.zoomBy(.9):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,this.pixelsPerArrowPress))),this.viewport.applyConstraints()),P.preventDefault=!0;break;case 37:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(-this.pixelsPerArrowPress,0))),this.viewport.applyConstraints()),P.preventDefault=!0;break;case 39:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(this.pixelsPerArrowPress,0))),this.viewport.applyConstraints()),P.preventDefault=!0;break;case 187:this.viewport.zoomBy(1.1),this.viewport.applyConstraints(),P.preventDefault=!0;break;case 189:this.viewport.zoomBy(.9),this.viewport.applyConstraints(),P.preventDefault=!0;break;case 48:this.viewport.goHome(),this.viewport.applyConstraints(),P.preventDefault=!0;break;case 87:q.preventVerticalPan||(P.shift?this.viewport.zoomBy(1.1):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,-40))),this.viewport.applyConstraints()),P.preventDefault=!0;break;case 83:q.preventVerticalPan||(P.shift?this.viewport.zoomBy(.9):this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(0,40))),this.viewport.applyConstraints()),P.preventDefault=!0;break;case 65:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(-40,0))),this.viewport.applyConstraints()),P.preventDefault=!0;break;case 68:q.preventHorizontalPan||(this.viewport.panBy(this.viewport.deltaPointsFromPixels(new n.Point(40,0))),this.viewport.applyConstraints()),P.preventDefault=!0;break;case 82:P.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(),P.preventDefault=!0;break;case 70:this.viewport.toggleFlip(),P.preventDefault=!0;break;case 74:this.goToPreviousPage();break;case 75:this.goToNextPage();break;default:P.preventDefault=!1;break}else P.preventDefault=!1}function _e(P){var q={originalEvent:P.originalEvent};this.raiseEvent("canvas-key-press",q)}function be(P){var q,fe=document.activeElement===this.canvas;fe||this.canvas.focus(),this.viewport.flipped&&(P.position.x=this.viewport.getContainerSize().x-P.position.x);var Re={tracker:P.eventSource,position:P.position,quick:P.quick,shift:P.shift,originalEvent:P.originalEvent,originalTarget:P.originalTarget,preventDefaultAction:!1};this.raiseEvent("canvas-click",Re),!Re.preventDefaultAction&&this.viewport&&P.quick&&(q=this.gestureSettingsByDeviceType(P.pointerType),q.clickToZoom===!0&&(this.viewport.zoomBy(P.shift?1/this.zoomPerClick:this.zoomPerClick,q.zoomToRefPoint?this.viewport.pointFromPixel(P.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(P){var q,fe={tracker:P.eventSource,position:P.position,shift:P.shift,originalEvent:P.originalEvent,preventDefaultAction:!1};this.raiseEvent("canvas-double-click",fe),!fe.preventDefaultAction&&this.viewport&&(q=this.gestureSettingsByDeviceType(P.pointerType),q.dblClickToZoom&&(this.viewport.zoomBy(P.shift?1/this.zoomPerClick:this.zoomPerClick,q.zoomToRefPoint?this.viewport.pointFromPixel(P.position,!0):null),this.viewport.applyConstraints()))}function $e(P){var q,fe={tracker:P.eventSource,pointerType:P.pointerType,position:P.position,delta:P.delta,speed:P.speed,direction:P.direction,shift:P.shift,originalEvent:P.originalEvent,preventDefaultAction:!1};if(this.raiseEvent("canvas-drag",fe),q=this.gestureSettingsByDeviceType(P.pointerType),!fe.preventDefaultAction&&this.viewport){if(q.dblClickDragToZoom&&o[this.hash].draggingToZoom){var Re=Math.pow(this.zoomPerDblClickDrag,P.delta.y/50);this.viewport.zoomBy(Re)}else if(q.dragToPan&&!o[this.hash].draggingToZoom){if(this.panHorizontal||(P.delta.x=0),this.panVertical||(P.delta.y=0),this.viewport.flipped&&(P.delta.x=-P.delta.x),this.constrainDuringPan){var He=this.viewport.deltaPointsFromPixels(P.delta.negate());this.viewport.centerSpringX.target.value+=He.x,this.viewport.centerSpringY.target.value+=He.y;var Qe=this.viewport.getConstrainedBounds();this.viewport.centerSpringX.target.value-=He.x,this.viewport.centerSpringY.target.value-=He.y,Qe.xConstrained&&(P.delta.x=0),Qe.yConstrained&&(P.delta.y=0)}this.viewport.panBy(this.viewport.deltaPointsFromPixels(P.delta.negate()),q.flickEnabled&&!this.constrainDuringPan)}}}function Xe(P){var q,fe={tracker:P.eventSource,pointerType:P.pointerType,position:P.position,speed:P.speed,direction:P.direction,shift:P.shift,originalEvent:P.originalEvent,preventDefaultAction:!1};if(this.raiseEvent("canvas-drag-end",fe),q=this.gestureSettingsByDeviceType(P.pointerType),!fe.preventDefaultAction&&this.viewport){if(!o[this.hash].draggingToZoom&&q.dragToPan&&q.flickEnabled&&P.speed>=q.flickMinSpeed){var Re=0;this.panHorizontal&&(Re=q.flickMomentum*P.speed*Math.cos(P.direction));var He=0;this.panVertical&&(He=q.flickMomentum*P.speed*Math.sin(P.direction));var Qe=this.viewport.pixelFromPoint(this.viewport.getCenter(!0)),ke=this.viewport.pointFromPixel(new n.Point(Qe.x-Re,Qe.y-He));this.viewport.panTo(ke,!1)}this.viewport.applyConstraints()}q.dblClickDragToZoom&&o[this.hash].draggingToZoom===!0&&(o[this.hash].draggingToZoom=!1)}function bt(P){this.raiseEvent("canvas-enter",{tracker:P.eventSource,pointerType:P.pointerType,position:P.position,buttons:P.buttons,pointers:P.pointers,insideElementPressed:P.insideElementPressed,buttonDownAny:P.buttonDownAny,originalEvent:P.originalEvent})}function $(P){this.raiseEvent("canvas-exit",{tracker:P.eventSource,pointerType:P.pointerType,position:P.position,buttons:P.buttons,pointers:P.pointers,insideElementPressed:P.insideElementPressed,buttonDownAny:P.buttonDownAny,originalEvent:P.originalEvent})}function Tt(P){var q;if(this.raiseEvent("canvas-press",{tracker:P.eventSource,pointerType:P.pointerType,position:P.position,insideElementPressed:P.insideElementPressed,insideElementReleased:P.insideElementReleased,originalEvent:P.originalEvent}),q=this.gestureSettingsByDeviceType(P.pointerType),q.dblClickDragToZoom){var fe=o[this.hash].lastClickTime,Re=n.now();if(fe===null)return;Re-fe<this.dblClickTimeThreshold&&(o[this.hash].draggingToZoom=!0),o[this.hash].lastClickTime=null}}function et(P){this.raiseEvent("canvas-release",{tracker:P.eventSource,pointerType:P.pointerType,position:P.position,insideElementPressed:P.insideElementPressed,insideElementReleased:P.insideElementReleased,originalEvent:P.originalEvent})}function St(P){this.raiseEvent("canvas-nonprimary-press",{tracker:P.eventSource,position:P.position,pointerType:P.pointerType,button:P.button,buttons:P.buttons,originalEvent:P.originalEvent})}function Me(P){this.raiseEvent("canvas-nonprimary-release",{tracker:P.eventSource,position:P.position,pointerType:P.pointerType,button:P.button,buttons:P.buttons,originalEvent:P.originalEvent})}function Mt(P){var q,fe,Re,He,Qe={tracker:P.eventSource,pointerType:P.pointerType,gesturePoints:P.gesturePoints,lastCenter:P.lastCenter,center:P.center,lastDistance:P.lastDistance,distance:P.distance,shift:P.shift,originalEvent:P.originalEvent,preventDefaultPanAction:!1,preventDefaultZoomAction:!1,preventDefaultRotateAction:!1};if(this.raiseEvent("canvas-pinch",Qe),this.viewport&&(q=this.gestureSettingsByDeviceType(P.pointerType),q.pinchToZoom&&(!Qe.preventDefaultPanAction||!Qe.preventDefaultZoomAction)&&(fe=this.viewport.pointFromPixel(P.center,!0),q.zoomToRefPoint&&!Qe.preventDefaultPanAction&&(Re=this.viewport.pointFromPixel(P.lastCenter,!0),He=Re.minus(fe),this.panHorizontal||(He.x=0),this.panVertical||(He.y=0),this.viewport.panBy(He,!0)),Qe.preventDefaultZoomAction||this.viewport.zoomBy(P.distance/P.lastDistance,fe,!0),this.viewport.applyConstraints()),q.pinchRotate&&!Qe.preventDefaultRotateAction)){var ke=Math.atan2(P.gesturePoints[0].currentPos.y-P.gesturePoints[1].currentPos.y,P.gesturePoints[0].currentPos.x-P.gesturePoints[1].currentPos.x),vt=Math.atan2(P.gesturePoints[0].lastPos.y-P.gesturePoints[1].lastPos.y,P.gesturePoints[0].lastPos.x-P.gesturePoints[1].lastPos.x);fe=this.viewport.pointFromPixel(P.center,!0),this.viewport.rotateTo(this.viewport.getRotation(!0)+(ke-vt)*(180/Math.PI),fe,!0)}}function _t(P){this.raiseEvent("canvas-focus",{tracker:P.eventSource,originalEvent:P.originalEvent})}function gt(P){this.raiseEvent("canvas-blur",{tracker:P.eventSource,originalEvent:P.originalEvent})}function Ft(P){var q,fe,Re,He,Qe;He=n.now(),Qe=He-this._lastScrollTime,Qe>this.minScrollDeltaTime?(this._lastScrollTime=He,q={tracker:P.eventSource,position:P.position,scroll:P.scroll,shift:P.shift,originalEvent:P.originalEvent,preventDefaultAction:!1,preventDefault:!0},this.raiseEvent("canvas-scroll",q),!q.preventDefaultAction&&this.viewport&&(this.viewport.flipped&&(P.position.x=this.viewport.getContainerSize().x-P.position.x),fe=this.gestureSettingsByDeviceType(P.pointerType),fe.scrollToZoom&&(Re=Math.pow(this.zoomPerScroll,P.scroll),this.viewport.zoomBy(Re,fe.zoomToRefPoint?this.viewport.pointFromPixel(P.position,!0):null),this.viewport.applyConstraints())),P.preventDefault=q.preventDefault):P.preventDefault=!0}function dt(P){o[this.hash].mouseInside=!0,M(this),this.raiseEvent("container-enter",{tracker:P.eventSource,pointerType:P.pointerType,position:P.position,buttons:P.buttons,pointers:P.pointers,insideElementPressed:P.insideElementPressed,buttonDownAny:P.buttonDownAny,originalEvent:P.originalEvent})}function Nt(P){P.pointers<1&&(o[this.hash].mouseInside=!1,o[this.hash].animating||T(this)),this.raiseEvent("container-exit",{tracker:P.eventSource,pointerType:P.pointerType,position:P.position,buttons:P.buttons,pointers:P.pointers,insideElementPressed:P.insideElementPressed,buttonDownAny:P.buttonDownAny,originalEvent:P.originalEvent})}function Vt(P){ri(P),P.isOpen()?P._updateRequestId=w(P,Vt):P._updateRequestId=!1}function Wt(P,q){var fe=P.viewport,Re=fe.getZoom(),He=fe.getCenter();fe.resize(q,P.preserveImageSizeOnResize),fe.panTo(He,!0);var Qe;if(P.preserveImageSizeOnResize)Qe=o[P.hash].prevContainerSize.x/q.x;else{var ke=new n.Point(0,0),vt=new n.Point(o[P.hash].prevContainerSize.x,o[P.hash].prevContainerSize.y).distanceTo(ke),Rt=new n.Point(q.x,q.y).distanceTo(ke);Qe=Rt/vt*o[P.hash].prevContainerSize.x/q.x}fe.zoomTo(Re*Qe,null,!0),o[P.hash].prevContainerSize=q,o[P.hash].forceRedraw=!0,o[P.hash].needsResize=!1,o[P.hash].forceResize=!1}function ri(P){if(!(P._opening||!o[P.hash])){if(P.autoResize||o[P.hash].forceResize){var q;if(P._autoResizePolling){q=h(P.container);var fe=o[P.hash].prevContainerSize;q.equals(fe)||(o[P.hash].needsResize=!0)}o[P.hash].needsResize&&Wt(P,q||h(P.container))}var Re=P.viewport.update(),He=P.world.update(Re)||Re;Re&&P.raiseEvent("viewport-change"),P.referenceStrip&&(He=P.referenceStrip.update(P.viewport)||He);var Qe=o[P.hash].animating;!Qe&&He&&(P.raiseEvent("animation-start"),M(P));var ke=Qe&&!He;ke&&(o[P.hash].animating=!1),(He||ke||o[P.hash].forceRedraw||P.world.needsDraw())&&(zt(P),P._drawOverlays(),P.navigator&&P.navigator.update(P.viewport),o[P.hash].forceRedraw=!1,He&&P.raiseEvent("animation")),ke&&(P.raiseEvent("animation-finish"),o[P.hash].mouseInside||T(P)),o[P.hash].animating=He}}function zt(P){P.imageLoader.clear(),P.world.draw(),P.raiseEvent("update-viewport",{})}function yt(P,q){return P?P+q:q}function si(){o[this.hash].lastZoomTime=n.now(),o[this.hash].zoomFactor=this.zoomPerSecond,o[this.hash].zooming=!0,Ye(this)}function Ke(){o[this.hash].lastZoomTime=n.now(),o[this.hash].zoomFactor=1/this.zoomPerSecond,o[this.hash].zooming=!0,Ye(this)}function ti(){o[this.hash].zooming=!1}function Ye(P){n.requestAnimationFrame(n.delegate(P,Dt))}function Dt(){var P,q,fe;o[this.hash].zooming&&this.viewport&&(P=n.now(),q=P-o[this.hash].lastZoomTime,fe=Math.pow(o[this.hash].zoomFactor,q/1e3),this.viewport.zoomBy(fe),this.viewport.applyConstraints(),o[this.hash].lastZoomTime=P,Ye(this))}function ii(){this.viewport&&(o[this.hash].zooming=!1,this.viewport.zoomBy(this.zoomPerClick/1),this.viewport.applyConstraints())}function Et(){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 hi(){this.viewport&&this.viewport.goHome()}function Yt(){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 qt(){if(this.viewport){var P=this.viewport.getRotation();this.viewport.flipped?P+=this.rotationIncrement:P-=this.rotationIncrement,this.viewport.setRotation(P)}}function Zt(){if(this.viewport){var P=this.viewport.getRotation();this.viewport.flipped?P-=this.rotationIncrement:P+=this.rotationIncrement,this.viewport.setRotation(P)}}function xt(){this.viewport.toggleFlip()}n.determineDrawer=function(P){for(let q in he){const fe=he[q],Re=fe.prototype;if(Re&&Re instanceof he.DrawerBase&&n.isFunction(Re.getType)&&Re.getType.call(fe)===P)return fe}return null}}(he),function(n){n.Navigator=function(w){var _=w.viewer,T=this,k,M;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,te){O.margin="0px",O.border=te+"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,te){O.position="relative",O.top="0px",O.left="0px",O.fontSize="0px",O.overflow="hidden",O.border=te+"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&&(k=n.getElementSize(_.element),this.element.style.height=Math.round(k.y*w.sizeRatio)+"px",this.element.style.width=Math.round(k.x*w.sizeRatio)+"px",this.oldViewerSize=k,M=n.getElementSize(this.element),this.elementArea=M.x*M.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 V(O,te){y(T.displayRegionContainer,O),y(T.displayRegion,-O),T.viewport.setRotation(O,te)}if(w.navigatorRotate){var W=w.viewer.viewport?w.viewer.viewport.getRotation():w.viewer.degrees||0;V(W,!0),w.viewer.addHandler("rotate",function(O){V(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,g),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 te=T.world.getItemAt(O.previousIndex);T.world.setItemIndex(te,O.newIndex)},1)}),_.world.addHandler("remove-item",function(O){var te=O.item,_e=T._getMatchingItem(te);_e&&T.world.removeItem(_e)}),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,k,M,V,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,k=_.y*this.sizeRatio):(T=Math.sqrt(this.elementArea*(_.x/_.y)),k=this.elementArea/T),this.element.style.width=Math.round(T)+"px",this.element.style.height=Math.round(k)+"px",this.elementArea||(this.elementArea=T*k),this.updateSize()),w&&this.viewport){if(M=w.getBoundsNoRotate(!0),V=this.viewport.pixelFromPointNoRotate(M.getTopLeft(),!1),W=this.viewport.pixelFromPointNoRotate(M.getBottomRight(),!1).minus(this.totalBorderWidths),!this.navigatorRotate){var O=w.getRotation(!0);y(this.displayRegion,-O)}var te=this.displayRegion.style;te.display=this.world.getItemCount()?"block":"none",te.top=V.y.toFixed(2)+"px",te.left=V.x.toFixed(2)+"px";var _e=W.x-V.x,be=W.y-V.y;te.width=Math.round(Math.max(_e,0))+"px",te.height=Math.round(Math.max(be,0))+"px"}},addTiledImage:function(w){var _=this,T=w.originalTiledImage;delete w.original;var k=n.extend({},w,{success:function(M){var V=M.item;V._originalForNavigator=T,_._matchBounds(V,T,!0),_._matchOpacity(V,T),_._matchCompositeOperation(V,T);function W(){_._matchBounds(V,T)}function O(){_._matchOpacity(V,T)}function te(){_._matchCompositeOperation(V,T)}T.addHandler("bounds-change",W),T.addHandler("clip-change",W),T.addHandler("opacity-change",O),T.addHandler("composite-operation-change",te)}});return n.Viewer.prototype.addTiledImage.apply(this,[k])},destroy:function(){return n.Viewer.prototype.destroy.apply(this)},_getMatchingItem:function(w){for(var _=this.world.getItemCount(),T,k=0;k<_;k++)if(T=this.world.getItemAt(k),T._originalForNavigator===w)return T;return null},_matchBounds:function(w,_,T){var k=_.getBoundsNoRotate();w.setPosition(k.getTopLeft(),T),w.setWidth(k.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 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 g(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=_}}(he),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("."),g=null,y=arguments,a=o,w;for(w=0;w<h.length-1;w++)a=a[h[w]]||{};return g=a[h[w]],typeof g!="string"&&(n.console.error("Untranslated source string:",u),g=""),g.replace(/\{\d+\}/g,function(_){var T=parseInt(_.match(/\d+/),10)+1;return T<y.length?y[T]:""})},setString:function(u,h){var g=u.split("."),y=o,a;for(a=0;a<g.length-1;a++)y[g[a]]||(y[g[a]]={}),y=y[g[a]];y[g[a]]=h}})}(he),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,g;if(o%90===0){var y=n.positiveModulo(o,360);switch(y){case 0:h=1,g=0;break;case 90:h=0,g=1;break;case 180:h=-1,g=0;break;case 270:h=0,g=-1;break}}else{var a=o*Math.PI/180;h=Math.cos(a),g=Math.sin(a)}var w=h*(this.x-u.x)-g*(this.y-u.y)+u.x,_=g*(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+")"}}}(he),function(n){n.TileSource=function(u,h,g,y,a,w){var _=this,T=arguments,k,M;if(n.isPlainObject(u)?k=u:k={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,k),!this.success){for(M=0;M<arguments.length;M++)if(n.isFunction(arguments[M])){this.success=arguments[M];break}}this.success&&this.addHandler("ready",function(V){_.success(V)}),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=k.width&&k.height?k.width/k.height:1,this.dimensions=new n.Point(k.width,k.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=k.tileOverlap?k.tileOverlap:0,this.minLevel=k.minLevel?k.minLevel:0,this.maxLevel=k.maxLevel!==void 0&&k.maxLevel!==null?k.maxLevel:k.width&&k.height?Math.ceil(Math.log(Math.max(k.width,k.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(g){return u[g]}},getNumTiles:function(u){var h=this.getLevelScale(u),g=Math.ceil(h*this.dimensions.x/this.getTileWidth(u)),y=Math.ceil(h*this.dimensions.y/this.getTileHeight(u));return new n.Point(g,y)},getPixelRatio:function(u){var h=this.dimensions.times(this.getLevelScale(u)),g=1/h.x*n.pixelDensityRatio,y=1/h.y*n.pixelDensityRatio;return new n.Point(g,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 g=h.x>=0&&h.x<=1&&h.y>=0&&h.y<=1/this.aspectRatio;n.console.assert(g,"[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)),T=Math.floor(w/this.getTileHeight(u));h.x>=1&&(_=this.getNumTiles(u).x-1);var k=1e-15;return h.y>=1/this.aspectRatio-k&&(T=this.getNumTiles(u).y-1),new n.Point(_,T)},getTileBounds:function(u,h,g,y){var a=this.dimensions.times(this.getLevelScale(u)),w=this.getTileWidth(u),_=this.getTileHeight(u),T=h===0?0:w*h-this.tileOverlap,k=g===0?0:_*g-this.tileOverlap,M=w+(h===0?1:2)*this.tileOverlap,V=_+(g===0?1:2)*this.tileOverlap,W=1/a.x;return M=Math.min(M,a.x-T),V=Math.min(V,a.y-k),y?new n.Rect(0,0,M,V):new n.Rect(T*W,k*W,M*W,V*W)},getImageInfo:function(u){var h=this,g,y,a,w,_,T,k;u&&(_=u.split("/"),T=_[_.length-1],k=T.lastIndexOf("."),k>-1&&(_[_.length-1]=T.slice(0,k)));var M=null;if(this.splitHashDataForPost){var V=u.indexOf("#");V!==-1&&(M=u.substring(V+1),u=u.substr(0,V))}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,M]),w.ajaxWithCredentials===void 0&&(w.ajaxWithCredentials=h.ajaxWithCredentials),a=new O(w),h.ready=!0,h.raiseEvent("ready",{tileSource:a})},u.match(/\.js$/)?(g=u.split("/").pop().replace(".js",""),n.jsonp({url:u,async:!1,callbackName:g,callback:y})):n.makeAjaxRequest({url:u,postData:M,withCredentials:this.ajaxWithCredentials,headers:this.ajaxHeaders,success:function(W){var O=o(W);y(O)},error:function(W,O){var te;try{te="HTTP "+W.status+" attempting to load TileSource: "+u}catch{var _e;typeof O>"u"||!O.toString?_e="Unknown error":_e=O.toString(),te=_e+" attempting to load TileSource: "+u}n.console.error(te),h.raiseEvent("open-failed",{message:te,source:u,postData:M})}})},supports:function(u,h){return!1},configure:function(u,h,g){throw new Error("Method not implemented.")},getTileUrl:function(u,h,g){throw new Error("Method not implemented.")},getTilePostData:function(u,h,g){return null},getTileAjaxHeaders:function(u,h,g){return{}},getTileHashKey:function(u,h,g,y,a,w){function _(T){return a?T+"+"+JSON.stringify(a):T}return _(typeof y!="string"?u+"/"+h+"_"+g:y)},tileExists:function(u,h,g){var y=this.getNumTiles(u);return u>=this.minLevel&&u<=this.maxLevel&&h>=0&&g>=0&&h<y.x&&g<y.y},hasTransparency:function(u,h,g,y){return!!u||h.match(".png")},downloadTileStart:function(u){var h=u.userData,g=new Image;h.image=g,h.request=null;var y=function(a){if(!g){u.finish(null,h.request,"Image load failed: undefined Image instance.");return}g.onload=g.onerror=g.onabort=null,u.finish(a?null:g,h.request,a)};g.onload=function(){y()},g.onabort=g.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(k){var _=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;if(k.name==="TypeError"&&_){var T=new _;T.append(a.response),w=T.getBlob()}}w.size===0?y("Empty image response."):g.src=(window.URL||window.webkitURL).createObjectURL(w)},error:function(a){y("Image load aborted - XHR error")}}):(u.crossOriginPolicy!==!1&&(g.crossOrigin=u.crossOriginPolicy),g.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,g){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,g=u.status,y,a;if(u){if(u.status!==200&&u.status!==0)throw g=u.status,y=g===404?"Not Found":u.statusText,new Error(n.getString("Errors.Status",g,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,g){var y;for(y in he)if(y.match(/.+TileSource$/)&&n.isFunction(he[y])&&n.isFunction(he[y].prototype.supports)&&he[y].prototype.supports.call(u,h,g))return he[y];return n.console.error("No TileSource was able to open %s %s",g,h),null}}(he),function(n){n.DziTileSource=function(h,g,y,a,w,_,T,k,M){var V,W,O,te;if(n.isPlainObject(h)?te=h:te={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=te.tilesUrl,this.fileFormat=te.fileFormat,this.displayRects=te.displayRects,this.displayRects)for(V=this.displayRects.length-1;V>=0;V--)for(W=this.displayRects[V],O=W.minLevel;O<=W.maxLevel;O++)this._levelRects[O]||(this._levelRects[O]=[]),this._levelRects[O].push(W);n.TileSource.apply(this,[te])},n.extend(n.DziTileSource.prototype,n.TileSource.prototype,{supports:function(h,g){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,g,y){var a;return n.isPlainObject(h)?a=u(this,h):a=o(this,h),g&&!a.tilesUrl&&(a.tilesUrl=g.replace(/([^/]+?)(\.(dzi|xml|js)?(\?[^/]*)?)?\/?$/,"$1_files/"),g.search(/\.(dzi|xml|js)\?/)!==-1?a.queryParams=g.match(/\?.*/):a.queryParams=""),a},getTileUrl:function(h,g,y){return[this.tilesUrl,h,"/",g,"_",y,".",this.fileFormat,this.queryParams].join("")},tileExists:function(h,g,y){var a=this._levelRects[h],w,_,T,k,M,V,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),T=w.x*_,k=w.y*_,M=T+w.width*_,V=k+w.height*_,T=Math.floor(T/this._tileWidth),k=Math.floor(k/this._tileWidth),M=Math.ceil(M/this._tileWidth),V=Math.ceil(V/this._tileWidth),T<=g&&g<M&&k<=y&&y<V))return!0;return!1}});function o(h,g){if(!g||!g.documentElement)throw new Error(n.getString("Errors.Xml"));var y=g.documentElement,a=y.localName||y.tagName,w=g.documentElement.namespaceURI,_=null,T=[],k,M,V,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(k=y.getElementsByTagName("DisplayRect"),k===void 0&&(k=y.getElementsByTagNameNS(w,"DisplayRect")[0]),O=0;O<k.length;O++)M=k[O],V=M.getElementsByTagName("Rect")[0],V===void 0&&(V=M.getElementsByTagNameNS(w,"Rect")[0]),T.push({Rect:{X:parseInt(V.getAttribute("X"),10),Y:parseInt(V.getAttribute("Y"),10),Width:parseInt(V.getAttribute("Width"),10),Height:parseInt(V.getAttribute("Height"),10),MinLevel:parseInt(M.getAttribute("MinLevel"),10),MaxLevel:parseInt(M.getAttribute("MaxLevel"),10)}});return T.length&&(_.Image.DisplayRect=T),u(h,_)}catch(be){throw be instanceof Error?be:new Error(n.getString("Errors.Dzi"))}else{if(a==="Collection")throw new Error(n.getString("Errors.Dzc"));if(a==="Error"){var te=y.getElementsByTagName("Message")[0],_e=te.firstChild.nodeValue;throw new Error(_e)}}throw new Error(n.getString("Errors.Dzi"))}function u(h,g){var y=g.Image,a=y.Url,w=y.Format,_=y.Size,T=y.DisplayRect||[],k=parseInt(_.Width,10),M=parseInt(_.Height,10),V=parseInt(y.TileSize,10),W=parseInt(y.Overlap,10),O=[],te,_e;for(_e=0;_e<T.length;_e++)te=T[_e].Rect,O.push(new n.DisplayRect(parseInt(te.X,10),parseInt(te.Y,10),parseInt(te.Width,10),parseInt(te.Height,10),parseInt(te.MinLevel,10),parseInt(te.MaxLevel,10)));return n.extend(!0,{width:k,height:M,tileSize:V,tileOverlap:W,minLevel:null,maxLevel:null,tilesUrl:a,fileFormat:w,displayRects:O},g)}}(he),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),k=[256,512,1024],M=[],V=0;V<k.length;V++)k[V]<=T&&M.push(k[V]);M.length>0?y.tileSize=Math.max.apply(null,M):y.tileSize=T}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((te,_e)=>te.width-_e.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 k=0;k<T.length;k++)if(typeof T[k]=="string"&&(/^http:\/\/iiif\.io\/api\/image\/[1-3]\/context\.json$/.test(T[k])||T[k]==="http://library.stanford.edu/iiif/image-api/1.1/context.json")){T=T[k];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 M=0;M<y.preferredFormats.length;M++)if(he.imageFormatSupported(y.preferredFormats[M])){y.tileFormat=y.preferredFormats[M];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)),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*_,k=a.y*_,M=Math.floor(T/this.getTileWidth(y)),V=Math.floor(k/this.getTileHeight(y));a.x>=1&&(M=this.getNumTiles(y).x-1);var W=1e-15;return a.y>=1/this.aspectRatio-W&&(V=this.getNumTiles(y).y-1),new n.Point(M,V)}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",k=Math.pow(.5,this.maxLevel-y),M,V,W,O,te,_e,be,ht,$e,Xe,bt,$,Tt,et,St,Me;return this.levelSizes?(M=this.levelSizes[y].width,V=this.levelSizes[y].height):(M=Math.ceil(this.width*k),V=Math.ceil(this.height*k)),W=this.getTileWidth(y),O=this.getTileHeight(y),te=Math.round(W/k),_e=Math.round(O/k),this.version===1?St="native."+this.tileFormat:St="default."+this.tileFormat,M<W&&V<O?(this.version===2&&M===this.width?$="full":this.version===3&&M===this.width&&V===this.height?$="max":this.version===3?$=M+","+V:$=M+",",be="full"):(ht=a*te,$e=w*_e,Xe=Math.min(te,this.width-ht),bt=Math.min(_e,this.height-$e),a===0&&w===0&&Xe===this.width&&bt===this.height?be="full":be=[ht,$e,Xe,bt].join(","),Tt=Math.min(W,M-a*W),et=Math.min(O,V-w*O),this.version===2&&Tt===this.width?$="full":this.version===3&&Tt===this.width&&et===this.height?$="max":this.version===3?$=Tt+","+et:$=Tt+","),Me=[this._id,be,$,T,St].join("/"),Me},__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,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 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(_,T){return _.width-T.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 _={},g(a,_),_}catch(T){throw T instanceof Error?T:new Error(n.getString("Errors.IIIF"))}throw new Error(n.getString("Errors.IIIF"))}function g(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;_++)g(y.childNodes[_],a,y.nodeName)}}(he),function(n){n.OsmTileSource=function(o,u,h,g,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"}})}(he),function(n){n.TmsTileSource=function(o,u,h,g,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,u){return o.type&&o.type==="tiledmapservice"},configure:function(o,u,h){return o},getTileUrl:function(o,u,h){var g=this.getNumTiles(o).y-1;return this.tilesUrl+o+"/"+u+"/"+(g-h)+".png"}})}(he),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,he.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 g=0,y={},a=0;a<o;a++)y=this.gridSize[a],g+=y.x*y.y;return y=this.gridSize[o],g+=y.x*h+u,g},supports:function(o,u){return o.type&&o.type==="zoomifytileservice"},configure:function(o,u,h){return o},getTileUrl:function(o,u,h){var g=0,y=this._calculateAbsoluteTileNumber(o,u,h);return g=Math.floor(y/256),this.tilesUrl+"TileGroup"+g+"/"+o+"-"+u+"-"+h+"."+this.fileFormat}})}(he),function(n){n.LegacyTileSource=function(g){var y,a,w;n.isArray(g)&&(y={type:"legacy-image-pyramid",levels:g}),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(g,y){return g.type&&g.type==="legacy-image-pyramid"||g.documentElement&&g.documentElement.getAttribute("type")==="legacy-image-pyramid"},configure:function(g,y,a){var w;return n.isPlainObject(g)?w=h(this,g):w=u(this,g),w},getLevelScale:function(g){var y=NaN;return this.levels.length>0&&g>=this.minLevel&&g<=this.maxLevel&&(y=this.levels[g].width/this.levels[this.maxLevel].width),y},getNumTiles:function(g){var y=this.getLevelScale(g);return y?new n.Point(1,1):new n.Point(0,0)},getTileUrl:function(g,y,a){var w=null;return this.levels.length>0&&g>=this.minLevel&&g<=this.maxLevel&&(w=this.levels[g].url),w}});function o(g){var y=[],a,w;for(w=0;w<g.length;w++)a=g[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 u(g,y){if(!y||!y.documentElement)throw new Error(n.getString("Errors.Xml"));var a=y.documentElement,w=a.tagName,_=null,T=[],k,M;if(w==="image")try{for(_={type:a.getAttribute("type"),levels:[]},T=a.getElementsByTagName("level"),M=0;M<T.length;M++)k=T[M],_.levels.push({url:k.getAttribute("url"),width:parseInt(k.getAttribute("width"),10),height:parseInt(k.getAttribute("height"),10)});return h(g,_)}catch(V){throw V instanceof Error?V: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(g,y){return y.levels}}(he),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 g=null;return o>=this.minLevel&&o<=this.maxLevel&&(g=this.levels[o].url),g},getContext2D:function(o,u,h){var g=null;return o>=this.minLevel&&o<=this.maxLevel&&(g=this.levels[o].context2D),g},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,g=document.createElement("canvas"),y=g.getContext("2d");if(g.width=u,g.height=h,y.drawImage(this._image,0,0,u,h),o[0].context2D=y,delete this._image,n.isCanvasTainted(g))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(g,0,0,u,h),o.splice(0,0,{context2D:w,width:u,height:h}),g=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}))}})}(he),function(n){n.TileSourceCollection=function(o,u,h,g){n.console.error("TileSourceCollection is deprecated; use World instead")}}(he),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(){u(w)})}function u(w){var _,T,k;w.shouldFade&&(_=n.now(),T=_-w.fadeBeginTime,k=1-T/w.fadeLength,k=Math.min(1,k),k=Math.max(0,k),w.imgGroup&&n.setElementOpacity(w.imgGroup,k,!0),k>0&&o(w))}function h(w){w.shouldFade=!0,w.fadeBeginTime=n.now()+w.fadeDelay,window.setTimeout(function(){o(w)},w.fadeDelay)}function g(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&&(g(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))}}(he),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,g;if(this.element=o.element||n.makeNeutralElement("div"),!o.group)for(this.element.style.display="inline-block",g=0;g<u.length;g++)this.element.appendChild(u[g].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}}}(he),function(n){n.Rect=function(o,u,h,g,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 g=="number"?g: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 g=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,g,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(),g=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(g,y,a-g,w-y)},intersection:function(o){var u=1e-10,h=[],g=this.getTopLeft();o.containsPoint(g,u)&&h.push(g);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 T=o.getTopRight();this.containsPoint(T,u)&&h.push(T);var k=o.getBottomLeft();this.containsPoint(k,u)&&h.push(k);var M=o.getBottomRight();this.containsPoint(M,u)&&h.push(M);for(var V=this._getSegments(),W=o._getSegments(),O=0;O<V.length;O++)for(var te=V[O],_e=0;_e<W.length;_e++){var be=W[_e],ht=$e(te[0],te[1],be[0],be[1]);ht&&h.push(ht)}function $e(Me,Mt,_t,gt){var Ft=Mt.minus(Me),dt=gt.minus(_t),Nt=-dt.x*Ft.y+Ft.x*dt.y;if(Nt===0)return null;var Vt=(Ft.x*(Me.y-_t.y)-Ft.y*(Me.x-_t.x))/Nt,Wt=(dt.x*(Me.y-_t.y)-dt.y*(Me.x-_t.x))/Nt;return-u<=Vt&&Vt<=1-u&&-u<=Wt&&Wt<=1-u?new n.Point(Me.x+Wt*Ft.x,Me.y+Wt*Ft.y):null}if(h.length===0)return null;for(var Xe=h[0].x,bt=h[0].x,$=h[0].y,Tt=h[0].y,et=1;et<h.length;et++){var St=h[et];St.x<Xe&&(Xe=St.x),St.x>bt&&(bt=St.x),St.y<$&&($=St.y),St.y>Tt&&(Tt=St.y)}return new n.Rect(Xe,$,bt-Xe,Tt-$)},_getSegments:function(){var o=this.getTopLeft(),u=this.getTopRight(),h=this.getBottomLeft(),g=this.getBottomRight();return[[o,u],[u,g],[g,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),g=this.getTopRight().rotate(o,u),y=g.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(),g=this.getBottomRight(),y=Math.min(o.x,u.x,h.x,g.x),a=Math.max(o.x,u.x,h.x,g.x),w=Math.min(o.y,u.y,h.y,g.y),_=Math.max(o.y,u.y,h.y,g.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),g=Math.ceil(o.width+o.x-u),y=Math.ceil(o.height+o.y-h);return new n.Rect(u,h,g,y)},containsPoint:function(o,u){u=u||0;var h=this.getTopLeft(),g=this.getTopRight(),y=this.getBottomLeft(),a=g.minus(h),w=y.minus(h);return(o.x-h.x)*a.x+(o.y-h.y)*a.y>=-u&&(o.x-g.x)*a.x+(o.y-g.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]"}}}(he),function(n){var o={};n.ReferenceStrip=function(k){var M=this,V=k.viewer,W=n.getElementSize(V.element),O,te,_e;for(k.id||(k.id="referencestrip-"+n.now(),this.element=n.makeNeutralElement("div"),this.element.id=k.id,this.element.className="referencestrip"),k=n.extend(!0,{sizeRatio:n.DEFAULT_SETTINGS.referenceStripSizeRatio,position:n.DEFAULT_SETTINGS.referenceStripPosition,scroll:n.DEFAULT_SETTINGS.referenceStripScroll,clickTimeThreshold:n.DEFAULT_SETTINGS.clickTimeThreshold},k,{element:this.element}),n.extend(this,k),o[this.id]={animating:!1},this.minPixelRatio=this.viewer.minPixelRatio,this.element.tabIndex=0,te=this.element.style,te.marginTop="0px",te.marginRight="0px",te.marginBottom="0px",te.marginLeft="0px",te.left="0px",te.bottom="0px",te.border="0px",te.background="#000",te.position="relative",n.setElementTouchActionNone(this.element),n.setElementOpacity(this.element,.8),this.viewer=V,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,g),enterHandler:n.delegate(this,a),leaveHandler:n.delegate(this,w),keyDownHandler:n.delegate(this,_),keyHandler:n.delegate(this,T),preProcessEventHandler:function(be){be.eventType==="wheel"&&(be.preventDefault=!0)}}),k.width&&k.height?(this.element.style.width=k.width+"px",this.element.style.height=k.height+"px",V.addControl(this.element,{anchor:n.ControlAnchor.BOTTOM_LEFT})):k.scroll==="horizontal"?(this.element.style.width=W.x*k.sizeRatio*V.tileSources.length+12*V.tileSources.length+"px",this.element.style.height=W.y*k.sizeRatio+"px",V.addControl(this.element,{anchor:n.ControlAnchor.BOTTOM_LEFT})):(this.element.style.height=W.y*k.sizeRatio*V.tileSources.length+12*V.tileSources.length+"px",this.element.style.width=W.x*k.sizeRatio+"px",V.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={},_e=0;_e<V.tileSources.length;_e++)O=n.makeNeutralElement("div"),O.id=this.element.id+"-"+_e,O.style.width=M.panelWidth+"px",O.style.height=M.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(k){var M=this.element.querySelector("#"+this.element.id+"-"+k),V=n.getElementSize(this.viewer.canvas),W=Number(this.element.style.width.replace("px","")),O=Number(this.element.style.height.replace("px","")),te=-Number(this.element.style.marginLeft.replace("px","")),_e=-Number(this.element.style.marginTop.replace("px","")),be;this.currentSelected!==M&&(this.currentSelected&&(this.currentSelected.style.background="#000"),this.currentSelected=M,this.currentSelected.style.background="#999",this.scroll==="horizontal"?(be=Number(k)*(this.panelWidth+3),be>te+V.x-this.panelWidth?(be=Math.min(be,W-V.x),this.element.style.marginLeft=-be+"px",y(this,V.x,-be)):be<te&&(be=Math.max(0,be-V.x/2),this.element.style.marginLeft=-be+"px",y(this,V.x,-be))):(be=Number(k)*(this.panelHeight+3),be>_e+V.y-this.panelHeight?(be=Math.min(be,O-V.y),this.element.style.marginTop=-be+"px",y(this,V.y,-be)):be<_e&&(be=Math.max(0,be-V.y/2),this.element.style.marginTop=-be+"px",y(this,V.y,-be))),this.currentPage=k,a.call(this,{eventSource:this.tracker}))},update:function(){return!!o[this.id].animating},destroy:function(){if(this.miniViewers)for(var k in this.miniViewers)this.miniViewers[k].destroy();this.tracker.destroy(),this.element&&this.viewer.removeControl(this.element)}};function u(k){if(k.quick){var M;this.scroll==="horizontal"?M=Math.floor(k.position.x/(this.panelWidth+4)):M=Math.floor(k.position.y/this.panelHeight),this.viewer.goToPage(M)}this.element.focus()}function h(k){if(this.dragging=!0,this.element){var M=Number(this.element.style.marginLeft.replace("px","")),V=Number(this.element.style.marginTop.replace("px","")),W=Number(this.element.style.width.replace("px","")),O=Number(this.element.style.height.replace("px","")),te=n.getElementSize(this.viewer.canvas);this.scroll==="horizontal"?-k.delta.x>0?M>-(W-te.x)&&(this.element.style.marginLeft=M+k.delta.x*2+"px",y(this,te.x,M+k.delta.x*2)):-k.delta.x<0&&M<0&&(this.element.style.marginLeft=M+k.delta.x*2+"px",y(this,te.x,M+k.delta.x*2)):-k.delta.y>0?V>-(O-te.y)&&(this.element.style.marginTop=V+k.delta.y*2+"px",y(this,te.y,V+k.delta.y*2)):-k.delta.y<0&&V<0&&(this.element.style.marginTop=V+k.delta.y*2+"px",y(this,te.y,V+k.delta.y*2))}}function g(k){if(this.element){var M=Number(this.element.style.marginLeft.replace("px","")),V=Number(this.element.style.marginTop.replace("px","")),W=Number(this.element.style.width.replace("px","")),O=Number(this.element.style.height.replace("px","")),te=n.getElementSize(this.viewer.canvas);this.scroll==="horizontal"?k.scroll>0?M>-(W-te.x)&&(this.element.style.marginLeft=M-k.scroll*60+"px",y(this,te.x,M-k.scroll*60)):k.scroll<0&&M<0&&(this.element.style.marginLeft=M-k.scroll*60+"px",y(this,te.x,M-k.scroll*60)):k.scroll<0?V>te.y-O&&(this.element.style.marginTop=V+k.scroll*60+"px",y(this,te.y,V+k.scroll*60)):k.scroll>0&&V<0&&(this.element.style.marginTop=V+k.scroll*60+"px",y(this,te.y,V+k.scroll*60)),k.preventDefault=!0}}function y(k,M,V){var W,O,te,_e,be,ht;for(k.scroll==="horizontal"?W=k.panelWidth:W=k.panelHeight,O=Math.ceil(M/W)+5,te=Math.ceil((Math.abs(V)+M)/W)+1,O=te-O,O=O<0?0:O,be=O;be<te&&be<k.panels.length;be++)if(ht=k.panels[be],!ht.activePanel){var $e,Xe=k.viewer.tileSources[be];Xe.referenceStripThumbnailUrl?$e={type:"image",url:Xe.referenceStripThumbnailUrl}:$e=Xe,_e=new n.Viewer({id:ht.id,tileSources:[$e],element:ht,navigatorSizeRatio:k.sizeRatio,showNavigator:!1,mouseNavEnabled:!1,showNavigationControl:!1,showSequenceControl:!1,immediateRender:!0,blendTime:0,animationTime:0,loadTilesWithAjax:k.viewer.loadTilesWithAjax,ajaxHeaders:k.viewer.ajaxHeaders,drawer:"canvas"}),n.setElementPointerEventsNone(_e.canvas),n.setElementPointerEventsNone(_e.container),_e.innerTracker.setTracking(!1),_e.outerTracker.setTracking(!1),k.miniViewers[ht.id]=_e,ht.activePanel=!0}}function a(k){var M=k.eventSource.element;this.scroll==="horizontal"?M.style.marginBottom="0px":M.style.marginLeft="0px"}function w(k){var M=k.eventSource.element;this.scroll==="horizontal"?M.style.marginBottom="-"+n.getElementSize(M).y/2+"px":M.style.marginLeft="-"+n.getElementSize(M).x/2+"px"}function _(k){if(!k.ctrl&&!k.alt&&!k.meta)switch(k.keyCode){case 38:g.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),k.preventDefault=!0;break;case 40:g.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),k.preventDefault=!0;break;case 37:g.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),k.preventDefault=!0;break;case 39:g.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),k.preventDefault=!0;break;default:k.preventDefault=!1;break}else k.preventDefault=!1}function T(k){if(!k.ctrl&&!k.alt&&!k.meta)switch(k.keyCode){case 61:g.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),k.preventDefault=!0;break;case 45:g.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),k.preventDefault=!0;break;case 48:case 119:case 87:g.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),k.preventDefault=!0;break;case 115:case 83:g.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),k.preventDefault=!0;break;case 97:g.call(this,{eventSource:this.tracker,position:null,scroll:-1,shift:null}),k.preventDefault=!0;break;case 100:g.call(this,{eventSource:this.tracker,position:null,scroll:1,shift:null}),k.preventDefault=!0;break;default:k.preventDefault=!1;break}else k.preventDefault=!1}}(he),function(n){n.DisplayRect=function(o,u,h,g,y,a){n.Rect.apply(this,[o,u,h,g]),this.minLevel=y,this.maxLevel=a},n.extend(n.DisplayRect.prototype,n.Rect.prototype)}(he),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 g=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(g):this.current.value=g}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))}}(he),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,g){this.data=u,this.request=h,this.errorMsg=g,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 g=this,y=function(_){o(g,_,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,g){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++),g(h.data,h.errorMsg,h.request)}}(he),function(n){n.Tile=function(o,u,h,g,y,a,w,_,T,k,M,V){this.level=o,this.x=u,this.y=h,this.bounds=g,this.positionedBounds=new he.Rect(g.x,g.y,g.width,g.height),this.sourceBounds=k,this.exists=y,this._url=a,this.postData=M,this.context2D=w,this.loadWithAjax=_,this.ajaxHeaders=T,V===void 0&&(n.console.warn("Tile constructor needs 'cacheKey' variable: creation tile cache in Tile class is deprecated. TileSource.prototype.getTileHashKey will be used."),V=n.TileSource.prototype.getTileHashKey(o,u,h,a,T,M)),this.cacheKey=V,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 g=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(g,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}}}(he),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 g;n.isPlainObject(o)?g=o:g={element:o,location:u,placement:h},this.elementWrapper=document.createElement("div"),this.element=g.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(g)},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"),g=n.getCssPropertyWithVendorPrefix("transform");h&&g&&(u[h]="",u[g]="")},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 g=this._getOverlayPositionAndSize(u),y=g.position,a=this.size=g.size,w="";u.overlayPreserveContentDirection&&(w=u.flipped?" scaleX(-1)":" scaleX(1)");var _=u.flipped?-g.rotate:g.rotate,T=u.flipped?" scaleX(-1)":"";if(this.onDraw)this.onDraw(y,a,this.element);else{var k=this.style,M=this.element.style;M.display="block",k.left=y.x+"px",k.top=y.y+"px",this.width!==null&&(M.width=a.x+"px"),this.height!==null&&(M.height=a.y+"px");var V=n.getCssPropertyWithVendorPrefix("transformOrigin"),W=n.getCssPropertyWithVendorPrefix("transform");V&&W&&(_&&!u.flipped?(M[W]="",k[V]=this._getTransformOrigin(),k[W]="rotate("+_+"deg)"):!_&&u.flipped?(M[W]=w,k[V]=this._getTransformOrigin(),k[W]=T):_&&u.flipped?(M[W]=w,k[V]=this._getTransformOrigin(),k[W]="rotate("+_+"deg)"+T):(M[W]="",k[V]="",k[W]="")),k.display="flex"}},_getOverlayPositionAndSize:function(o){var u=o.pixelFromPoint(this.location,!0),h=this._getSizeInPixels(o);this.adjust(u,h);var g=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 g=o.getRotation(!0);return o.flipped&&(u.x=o.getContainerSize().x-u.x),{position:u,size:h,rotate:g}},_getSizeInPixels:function(o){var u=this.size.x,h=this.size.y;if(this.width!==null||this.height!==null){var g=o.deltaPixelsFromPointsNoRotate(new n.Point(this.width||0,this.height||0),!0);this.width!==null&&(u=g.x),this.height!==null&&(h=g.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 g=o.deltaPointsFromPixelsNoRotate(this.size,!0);u===null&&(u=g.x),h===null&&(h=g.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))}}}(he),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 g=this.viewport.pixelFromPointNoRotate(h.getTopLeft(),!0),y=this.viewport.deltaPixelsFromPointsNoRotate(h.getSize(),!0);return new n.Rect(g.x*n.pixelDensityRatio,g.y*n.pixelDensityRatio,y.x*n.pixelDensityRatio,y.y*n.pixelDensityRatio)}viewportCoordToDrawerCoord(h){var g=this.viewport.pixelFromPointNoRotate(h,!0);return new n.Point(g.x*n.pixelDensityRatio,g.y*n.pixelDensityRatio)}_calculateCanvasSize(){var h=n.pixelDensityRatio,g=this.viewport.getContainerSize();return new o.Point(Math.round(g.x*h),Math.round(g.y*h))}_raiseTiledImageDrawnEvent(h,g){this.viewer&&this.viewer.raiseEvent("tiled-image-drawn",{tiledImage:h,tiles:g})}_raiseDrawerErrorEvent(h,g){this.viewer&&this.viewer.raiseEvent("drawer-error",{tiledImage:h,drawer:this,error:g})}}}(he),function(n){const o=n;class u extends o.DrawerBase{constructor(g){super(g),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(g){return!0}_createDrawingElement(){return n.makeNeutralElement("div")}draw(g){var y=this;this._prepareNewFrame(),g.forEach(function(a){a.opacity!==0&&y._drawTiles(a)})}canRotate(){return!1}destroy(){this.container.removeChild(this.canvas)}setImageSmoothingEnabled(){}_prepareNewFrame(){this.canvas.innerHTML=""}_drawTiles(g){var y=g.getTilesToDraw().map(_=>_.tile);if(!(g.opacity===0||y.length===0&&!g.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:g,tile:w})}}_drawTile(g){n.console.assert(g,"[Drawer._drawTile] tile is required");let y=this.canvas;if(!g.cacheImageRecord){n.console.warn("[Drawer._drawTileToHTML] attempting to draw tile %s when it's not cached",g.toString());return}if(!g.loaded){n.console.warn("Attempting to draw tile %s when it's not yet loaded.",g.toString());return}if(!g.element){var a=g.getImage();if(!a)return;g.element=n.makeNeutralElement("div"),g.imgElement=a.cloneNode(),g.imgElement.style.msInterpolationMode="nearest-neighbor",g.imgElement.style.width="100%",g.imgElement.style.height="100%",g.style=g.element.style,g.style.position="absolute"}g.element.parentNode!==y&&y.appendChild(g.element),g.imgElement.parentNode!==g.element&&g.element.appendChild(g.imgElement),g.style.top=g.position.y+"px",g.style.left=g.position.x+"px",g.style.height=g.size.y+"px",g.style.width=g.size.x+"px",g.flipped&&(g.style.transform="scaleX(-1)"),n.setElementOpacity(g.element,g.opacity)}}n.HTMLDrawer=u}(he),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"),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,k,M){this.viewer.raiseEvent("tile-drawing",{tiledImage:_,context:T,tile:k,rendered:M})}_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 k=this._getContext(_);if(T)k.clearRect(T.x,T.y,T.width,T.height);else{var M=k.canvas;k.clearRect(0,0,M.width,M.height)}}_drawTiles(_){var T=_.getTilesToDraw().map(Me=>Me.tile);if(!(_.opacity===0||T.length===0&&!_.placeholderFillStyle)){var k=T[0],M;k&&(M=_.opacity<1||_.compositeOperation&&_.compositeOperation!=="source-over"||!_._isBottomItem()&&_.source.hasTransparency(k.context2D,k.getUrl(),k.ajaxHeaders,k.postData));var V,W,O=this.viewport.getZoom(!0),te=_.viewportToImageZoom(O);T.length>1&&te>_.smoothTileEdgesMinZoom&&!_.iOSDevice&&_.getRotation(!0)%360===0&&(M=!0,V=k.getScaleForEdgeSmoothing(),W=k.getTranslationForEdgeSmoothing(V,this._getCanvasSize(!1),this._getCanvasSize(!0)));var _e;M&&(V||(_e=this.viewport.viewportToViewerElementRectangle(_.getClippedBounds(!0)).getIntegerBoundingBox(),_e=_e.times(n.pixelDensityRatio)),this._clear(!0,_e)),V||this._setRotations(_,M);var be=!1;if(_._clip){this._saveContext(M);var ht=_.imageToViewportRectangle(_._clip,!0);ht=ht.rotate(-_.getRotation(!0),_._getRotationPoint(!0));var $e=this.viewportToDrawerRectangle(ht);V&&($e=$e.times(V)),W&&($e=$e.translate(W)),this._setClip($e,M),be=!0}if(_._croppingPolygons){var Xe=this;be||this._saveContext(M);try{var bt=_._croppingPolygons.map(function(Me){return Me.map(function(Mt){var _t=_.imageToViewportCoordinates(Mt.x,Mt.y,!0).rotate(-_.getRotation(!0),_._getRotationPoint(!0)),gt=Xe.viewportCoordToDrawerCoord(_t);return V&&(gt=gt.times(V)),W&&(gt=gt.plus(W)),gt})});this._clipWithPolygons(bt,M)}catch(Me){n.console.error(Me)}be=!0}if(_._hasOpaqueTile=!1,_.placeholderFillStyle&&_._hasOpaqueTile===!1){let Me=this.viewportToDrawerRectangle(_.getBoundsNoRotate(!0));V&&(Me=Me.times(V)),W&&(Me=Me.translate(W));let Mt=null;typeof _.placeholderFillStyle=="function"?Mt=_.placeholderFillStyle(_,this.context):Mt=_.placeholderFillStyle,this._drawRectangle(Me,Mt,M)}var $=a(_.subPixelRoundingForTransparency),Tt=!1;if($===n.SUBPIXEL_ROUNDING_OCCURRENCES.ALWAYS)Tt=!0;else if($===n.SUBPIXEL_ROUNDING_OCCURRENCES.ONLY_AT_REST){var et=this.viewer&&this.viewer.isAnimating();Tt=!et}for(var St=0;St<T.length;St++)k=T[St],this._drawTile(k,_,M,V,W,Tt,_.source),this.viewer&&this.viewer.raiseEvent("tile-drawn",{tiledImage:_,tile:k});be&&this._restoreContext(M),V||(_.getRotation(!0)%360!==0&&this._restoreRotationChanges(M),this.viewport.getRotation(!0)%360!==0&&this._restoreRotationChanges(M)),M&&(V&&this._setRotations(_),this.blendSketch({opacity:_.opacity,scale:V,translate:W,compositeOperation:_.compositeOperation,bounds:_e}),V&&(_.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 k=T.length-1;k>=0;k--){var M=T[k];try{this._drawDebugInfoOnTile(M,T.length,k,_)}catch(V){n.console.error(V)}}}_clipWithPolygons(_,T){var k=this._getContext(T);k.beginPath();for(const M of _)for(const[V,W]of M.entries())k[V===0?"moveTo":"lineTo"](W.x,W.y);k.clip()}_drawTile(_,T,k,M,V,W,O){n.console.assert(_,"[Drawer._drawTile] tile is required"),n.console.assert(T,"[Drawer._drawTile] drawingHandler is required");var te=this._getContext(k);M=M||1,this._drawTileToCanvas(_,te,T,M,V,W,O)}_drawTileToCanvas(_,T,k,M,V,W,O){var te=_.position.times(n.pixelDensityRatio),_e=_.size.times(n.pixelDensityRatio),be;if(!_.context2D&&!_.cacheImageRecord){n.console.warn("[Drawer._drawTileToCanvas] attempting to draw tile %s when it's not cached",_.toString());return}if(be=_.getCanvasContext(),!_.loaded||!be){n.console.warn("Attempting to draw tile %s when it's not yet loaded.",_.toString());return}T.save(),typeof M=="number"&&M!==1&&(te=te.times(M),_e=_e.times(M)),V instanceof n.Point&&(te=te.plus(V)),T.globalAlpha===1&&_.hasTransparency&&(W&&(te.x=Math.round(te.x),te.y=Math.round(te.y),_e.x=Math.round(_e.x),_e.y=Math.round(_e.y)),T.clearRect(te.x,te.y,_e.x,_e.y)),this._raiseTileDrawingEvent(k,T,_,be);var ht,$e;_.sourceBounds?(ht=Math.min(_.sourceBounds.width,be.canvas.width),$e=Math.min(_.sourceBounds.height,be.canvas.height)):(ht=be.canvas.width,$e=be.canvas.height),T.translate(te.x+_e.x/2,0),_.flipped&&T.scale(-1,1),T.drawImage(be.canvas,0,0,ht,$e,-_e.x/2,te.y,_e.x,_e.y),T.restore()}_getContext(_){var T=this.context;if(_){if(this.sketchCanvas===null){this.sketchCanvas=document.createElement("canvas");var k=this._calculateSketchCanvasSize();if(this.sketchCanvas.width=k.x,this.sketchCanvas.height=k.y,this.sketchContext=this.sketchCanvas.getContext("2d"),this.viewport.getRotation()===0){var M=this;this.viewer.addHandler("rotate",function V(){if(M.viewport.getRotation()!==0){M.viewer.removeHandler("rotate",V);var W=M._calculateSketchCanvasSize();M.sketchCanvas.width=W.x,M.sketchCanvas.height=W.y}})}this._updateImageSmoothingEnabled(this.sketchContext)}T=this.sketchContext}return T}_saveContext(_){this._getContext(_).save()}_restoreContext(_){this._getContext(_).restore()}_setClip(_,T){var k=this._getContext(T);k.beginPath(),k.rect(_.x,_.y,_.width,_.height),k.clip()}_drawRectangle(_,T,k){var M=this._getContext(k);M.save(),M.fillStyle=T,M.fillRect(_.x,_.y,_.width,_.height),M.restore()}blendSketch(_,T,k,M){var V=_;n.isPlainObject(V)||(V={opacity:_,scale:T,translate:k,compositeOperation:M}),_=V.opacity,M=V.compositeOperation;var W=V.bounds;if(this.context.save(),this.context.globalAlpha=_,M&&(this.context.globalCompositeOperation=M),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=V.scale||1,k=V.translate;var O=k instanceof n.Point?k:new n.Point(0,0),te=0,_e=0;if(k){var be=this.sketchCanvas.width-this.canvas.width,ht=this.sketchCanvas.height-this.canvas.height;te=Math.round(be/2),_e=Math.round(ht/2)}this.context.drawImage(this.sketchCanvas,O.x-te*T,O.y-_e*T,(this.canvas.width+2*te)*T,(this.canvas.height+2*_e)*T,-te,-_e,this.canvas.width+2*te,this.canvas.height+2*_e)}this.context.restore()}_drawDebugInfoOnTile(_,T,k,M){var V=this.viewer.world.getIndexOfItem(M)%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[V],W.fillStyle=this.debugGridColor[V],this._setRotations(M),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,te=(_.position.y+_.size.y/2)*n.pixelDensityRatio;W.translate(O,te);const _e=this.viewport.getRotation(!0);W.rotate(Math.PI/180*-_e),W.translate(-O,-te),_.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: "+k+" 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(),M.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 k=!1;this.viewport.getRotation(!0)%360!==0&&(this._offsetForRotation({degrees:this.viewport.getRotation(!0),useSketch:T,saveContext:k}),k=!1),_.getRotation(!0)%360!==0&&this._offsetForRotation({degrees:_.getRotation(!0),point:this.viewport.pixelFromPointNoRotate(_._getRotationPoint(!0),!0),useSketch:T,saveContext:k})}_offsetForRotation(_){var T=_.point?_.point.times(n.pixelDensityRatio):this._getCanvasCenter(),k=this._getContext(_.useSketch);k.save(),k.translate(T.x,T.y),k.rotate(Math.PI/180*_.degrees),k.translate(-T.x,-T.y)}_flip(_){_=_||{};var T=_.point?_.point.times(n.pixelDensityRatio):this._getCanvasCenter(),k=this._getContext(_.useSketch);k.translate(T.x,0),k.scale(-1,1),k.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=u;var h=n.SUBPIXEL_ROUNDING_OCCURRENCES.NEVER;function g(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 g(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 g(_)&&(_=w["*"]),y(_)}}(he),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=g=>this._tileReadyHandler(g),this._boundToImageUnloaded=g=>this._imageUnloadedHandler(g),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 g=h.getParameter(h.MAX_TEXTURE_IMAGE_UNITS);for(let a=0;a<g;++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"),g=n.isFunction(h.getContext)&&h.getContext("webgl"),y=g&&g.getExtension("WEBGL_lose_context");return y&&y.loseContext(),!!g}getType(){return"webgl"}minimumOverlapRequired(h){return h.isTainted()}_createDrawingElement(){let h=n.makeNeutralElement("canvas"),g=this._calculateCanvasSize();return h.width=g.x,h.height=g.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 g=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),k=n.Mat3.makeRotation(-a.rotation),M=T.multiply(k).multiply(_);g.bindFramebuffer(g.FRAMEBUFFER,null),g.clear(g.COLOR_BUFFER_BIT),this._outputContext.clearRect(0,0,this._outputCanvas.width,this._outputCanvas.height);let V=!1;h.forEach((W,O)=>{if(W.isTainted()){V&&(this._outputContext.drawImage(this._renderingCanvas,0,0),g.bindFramebuffer(g.FRAMEBUFFER,null),g.clear(g.COLOR_BUFFER_BIT),V=!1);const te=this._getBackupCanvasDrawer();te.draw([W]),this._outputContext.drawImage(te.canvas,0,0)}else{let te=W.getTilesToDraw();if(W.placeholderFillStyle&&W._hasOpaqueTile===!1&&this._drawPlaceholder(W),te.length===0||W.getOpacity()===0)return;let _e=te[0],be=W.compositeOperation||this.viewer.compositeOperation||W._clip||W._croppingPolygons||W.debugMode,ht=be||W.opacity<1||_e.hasTransparency;be&&(V&&this._outputContext.drawImage(this._renderingCanvas,0,0),g.bindFramebuffer(g.FRAMEBUFFER,null),g.clear(g.COLOR_BUFFER_BIT)),g.useProgram(this._firstPass.shaderProgram),ht?(g.bindFramebuffer(g.FRAMEBUFFER,this._glFrameBuffer),g.clear(g.COLOR_BUFFER_BIT)):g.bindFramebuffer(g.FRAMEBUFFER,null);let $e=M,Xe=W.getRotation(!0);if(Xe%360!==0){let Me=n.Mat3.makeRotation(-Xe*Math.PI/180),Mt=W.getBoundsNoRotate(!0).getCenter(),_t=n.Mat3.makeTranslation(Mt.x,Mt.y),gt=n.Mat3.makeTranslation(-Mt.x,-Mt.y),Ft=_t.multiply(Me).multiply(gt);$e=M.multiply(Ft)}let bt=this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS);if(bt<=0)throw new Error(`WegGL error: bad value for gl parameter MAX_TEXTURE_IMAGE_UNITS (${bt}). This could happen
|
|
7
|
+
if too many contexts have been created and not released, or there is another problem with the graphics card.`);let $=new Float32Array(bt*12),Tt=new Array(bt),et=new Array(bt),St=new Array(bt);for(let Me=0;Me<te.length;Me++){let Mt=te[Me].tile,_t=Me%bt,gt=_t+1,Ft=Mt.getCanvasContext(),dt=Ft?this._TextureMap.get(Ft.canvas):null;if(dt||(this._tileReadyHandler({tile:Mt,tiledImage:W}),dt=Ft?this._TextureMap.get(Ft.canvas):null),dt&&this._getTileData(Mt,W,dt,$e,_t,$,Tt,et,St),gt===bt||Me===te.length-1){for(let Nt=0;Nt<=gt;Nt++)g.activeTexture(g.TEXTURE0+Nt),g.bindTexture(g.TEXTURE_2D,Tt[Nt]);g.bindBuffer(g.ARRAY_BUFFER,this._firstPass.bufferTexturePosition),g.bufferData(g.ARRAY_BUFFER,$,g.DYNAMIC_DRAW),et.forEach((Nt,Vt)=>{g.uniformMatrix3fv(this._firstPass.uTransformMatrices[Vt],!1,Nt)}),g.uniform1fv(this._firstPass.uOpacities,new Float32Array(St)),g.bindBuffer(g.ARRAY_BUFFER,this._firstPass.bufferOutputPosition),g.vertexAttribPointer(this._firstPass.aOutputPosition,2,g.FLOAT,!1,0,0),g.bindBuffer(g.ARRAY_BUFFER,this._firstPass.bufferTexturePosition),g.vertexAttribPointer(this._firstPass.aTexturePosition,2,g.FLOAT,!1,0,0),g.bindBuffer(g.ARRAY_BUFFER,this._firstPass.bufferIndex),g.vertexAttribPointer(this._firstPass.aIndex,1,g.FLOAT,!1,0,0),g.drawArrays(g.TRIANGLES,0,6*gt)}}ht&&(g.useProgram(this._secondPass.shaderProgram),g.bindFramebuffer(g.FRAMEBUFFER,null),g.activeTexture(g.TEXTURE0),g.bindTexture(g.TEXTURE_2D,this._renderToTexture),this._gl.uniform1f(this._secondPass.uOpacityMultiplier,W.opacity),g.bindBuffer(g.ARRAY_BUFFER,this._secondPass.bufferTexturePosition),g.vertexAttribPointer(this._secondPass.aTexturePosition,2,g.FLOAT,!1,0,0),g.bindBuffer(g.ARRAY_BUFFER,this._secondPass.bufferOutputPosition),g.vertexAttribPointer(this._secondPass.aOutputPosition,2,g.FLOAT,!1,0,0),g.drawArrays(g.TRIANGLES,0,6)),V=!0,be&&(this._applyContext2dPipeline(W,te,O),V=!1,g.bindFramebuffer(g.FRAMEBUFFER,null),g.clear(g.COLOR_BUFFER_BIT)),O===0&&this._raiseTiledImageDrawnEvent(W,te.map(Me=>Me.tile))}}),V&&this._outputContext.drawImage(this._renderingCanvas,0,0)}setImageSmoothingEnabled(h){this._imageSmoothingEnabled!==h&&(this._imageSmoothingEnabled=h,this._unloadTextures(),this.viewer.world.draw())}drawDebuggingRect(h){let g=this._outputContext;g.save(),g.lineWidth=2*n.pixelDensityRatio,g.strokeStyle=this.debugGridColor[0],g.fillStyle=this.debugGridColor[0],g.strokeRect(h.x*n.pixelDensityRatio,h.y*n.pixelDensityRatio,h.width*n.pixelDensityRatio,h.height*n.pixelDensityRatio),g.restore()}_getTextureDataFromTile(h){return h.getCanvasContext().canvas}_applyContext2dPipeline(h,g,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(g,h,a),a&&this._flip()}}_getTileData(h,g,y,a,w,_,T,k,M){let V=y.texture,W=y.position;_.set(W,w*12);let O=this._calculateOverlapFraction(h,g),te=h.positionedBounds.width*O.x,_e=h.positionedBounds.height*O.y,be=h.positionedBounds.x+(h.x===0?0:te),ht=h.positionedBounds.y+(h.y===0?0:_e),$e=h.positionedBounds.x+h.positionedBounds.width-(h.isRightMost?0:te),Xe=h.positionedBounds.y+h.positionedBounds.height-(h.isBottomMost?0:_e),bt=$e-be,$=Xe-ht,Tt=new n.Mat3([bt,0,0,0,$,0,be,ht,1]);if(h.flipped){let St=n.Mat3.makeTranslation(.5,0),Me=n.Mat3.makeTranslation(-.5,0),Mt=St.multiply(n.Mat3.makeScaling(-1,1)).multiply(Me);Tt=Tt.multiply(Mt)}let et=a.multiply(Tt);M[w]=h.opacity,T[w]=V,k[w]=et.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),g=()=>[...Array(h).keys()].map(V=>`uniform mat3 u_matrix_${V};`).join(`
|
|
8
8
|
`),y=()=>[...Array(h).keys()].map(V=>`${V>0?"else ":""}if(int(a_index) == ${V}) { transform_matrix = u_matrix_${V}; }`).join(`
|
|
9
9
|
`);const a=`
|
|
10
10
|
attribute vec2 a_output_position;
|
|
@@ -47,7 +47,7 @@ function le(n){return new le.Viewer(n)}(function(n){n.version={versionStr:"5.0.1
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
`;let _=this._gl,
|
|
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(V=>_.getUniformLocation(T,`u_matrix_${V}`)),uImages:_.getUniformLocation(T,"u_images"),uOpacities:_.getUniformLocation(T,"u_opacities"),bufferOutputPosition:_.createBuffer(),bufferTexturePosition:_.createBuffer(),bufferIndex:_.createBuffer()},_.uniform1iv(this._firstPass.uImages,[...Array(h).keys()]);let k=new Float32Array(h*12);for(let V=0;V<h;++V)k.set(Float32Array.from(this._unitQuad),V*12);_.bindBuffer(_.ARRAY_BUFFER,this._firstPass.bufferOutputPosition),_.bufferData(_.ARRAY_BUFFER,k,_.STATIC_DRAW),_.enableVertexAttribArray(this._firstPass.aOutputPosition),_.bindBuffer(_.ARRAY_BUFFER,this._firstPass.bufferTexturePosition),_.enableVertexAttribArray(this._firstPass.aTexturePosition),_.bindBuffer(_.ARRAY_BUFFER,this._firstPass.bufferIndex);let M=[...Array(this._glNumTextures).keys()].map(V=>Array(6).fill(V)).flat();_.bufferData(_.ARRAY_BUFFER,new Float32Array(M),_.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
|
|
|
@@ -76,7 +76,7 @@ function le(n){return new le.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,h,g);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,g=this._renderingCanvas.width,y=this._renderingCanvas.height;h.viewport(0,0,g,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,g,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 g=h._calculateCanvasSize();(h._outputCanvas.width!==g.x||h._outputCanvas.height!==g.y)&&(h._outputCanvas.width=g.x,h._outputCanvas.height=g.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,g,y,a){return new Float32Array([h,a,g,a,h,y,h,y,g,a,g,y])}_tileReadyHandler(h){let g=h.tile,y=h.tiledImage;if(y.isTainted())return;let a=g.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 S=this._gl,B=S.createTexture(),O,V=y.source.tileOverlap,W,k;if(g.sourceBounds?(W=Math.min(g.sourceBounds.width,w.width)/w.width,k=Math.min(g.sourceBounds.height,w.height)/w.height):(W=1,k=1),V>0){let _e=this._calculateOverlapFraction(g,y),be=(g.x===0?0:_e.x)*W,lt=(g.y===0?0:_e.y)*k,Qe=(g.isRightMost?1:1-_e.x)*W,Xe=(g.isBottomMost?1:1-_e.y)*k;O=this._makeQuadVertexBuffer(be,Qe,lt,Xe)}else W===1&&k===1?O=this._unitQuad:O=this._makeQuadVertexBuffer(0,W,0,k);let ee={texture:B,position:O};this._TextureMap.set(w,ee),S.activeTexture(S.TEXTURE0),S.bindTexture(S.TEXTURE_2D,B),S.texParameteri(S.TEXTURE_2D,S.TEXTURE_WRAP_S,S.CLAMP_TO_EDGE),S.texParameteri(S.TEXTURE_2D,S.TEXTURE_WRAP_T,S.CLAMP_TO_EDGE),S.texParameteri(S.TEXTURE_2D,S.TEXTURE_MIN_FILTER,this._textureFilter()),S.texParameteri(S.TEXTURE_2D,S.TEXTURE_MAG_FILTER,this._textureFilter()),this._uploadImageData(a)}}_calculateOverlapFraction(h,g){let y=g.source.tileOverlap,a=h.sourceBounds.width,w=h.sourceBounds.height,_=(h.x===0?0:y)+(h.isRightMost?0:y),S=(h.y===0?0:y)+(h.isBottomMost?0:y),B=y/(a+_),O=y/(w+S);return{x:B,y:O}}_unloadTextures(){Array.from(this._TextureMap.keys()).forEach(g=>{this._cleanupImageData(g)})}_uploadImageData(h){let g=this._gl,y=h.canvas;try{if(!y)throw h;g.texImage2D(g.TEXTURE_2D,0,g.RGBA,g.RGBA,g.UNSIGNED_BYTE,y)}catch(a){n.console.error("Error uploading image data to WebGL",a)}}_imageUnloadedHandler(h){let g=h.context2D.canvas;this._cleanupImageData(g)}_cleanupImageData(h){let g=this._TextureMap.get(h);this._TextureMap.delete(h),g&&this._gl.deleteTexture(g.texture)}_setClip(){}_renderToClippingCanvas(h){if(this._clippingContext.clearRect(0,0,this._clippingCanvas.width,this._clippingCanvas.height),this._clippingContext.save(),this.viewer.viewport.getFlip()){const g=new n.Point(this.canvas.width/2,this.canvas.height/2);this._clippingContext.translate(g.x,0),this._clippingContext.scale(-1,1),this._clippingContext.translate(-g.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 g=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(),g.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 g=new n.Point(this.canvas.width/2,this.canvas.height/2);this._clippingContext.translate(g.x,0),this._clippingContext.scale(-1,1),this._clippingContext.translate(-g.x,0)}this._clippingContext.drawImage(this._renderingCanvas,0,0),this._clippingContext.restore()}_setRotations(h){var g=!1;this.viewport.getRotation(!0)%360!==0&&(this._offsetForRotation({degrees:this.viewport.getRotation(!0),saveContext:g}),g=!1),h.getRotation(!0)%360!==0&&this._offsetForRotation({degrees:h.getRotation(!0),point:this.viewport.pixelFromPointNoRotate(h._getRotationPoint(!0),!0),saveContext:g})}_offsetForRotation(h){var g=h.point?h.point.times(n.pixelDensityRatio):this._getCanvasCenter(),y=this._outputContext;y.save(),y.translate(g.x,g.y),y.rotate(Math.PI/180*h.degrees),y.translate(-g.x,-g.y)}_flip(h){h=h||{};var g=h.point?h.point.times(n.pixelDensityRatio):this._getCanvasCenter(),y=this._outputContext;y.translate(g.x,0),y.scale(-1,1),y.translate(-g.x,0)}_drawDebugInfo(h,g,y){for(var a=h.length-1;a>=0;a--){var w=h[a].tile;try{this._drawDebugInfoOnTile(w,h.length,a,g,y)}catch(_){n.console.error(_)}}}_drawDebugInfoOnTile(h,g,y,a,w){var _=this.viewer.world.getIndexOfItem(a)%this.debugGridColor.length,S=this.context;S.save(),S.lineWidth=2*n.pixelDensityRatio,S.font="small-caps bold "+13*n.pixelDensityRatio+"px arial",S.strokeStyle=this.debugGridColor[_],S.fillStyle=this.debugGridColor[_],this._setRotations(a),w&&this._flip({point:h.position.plus(h.size.divide(2))}),S.strokeRect(h.position.x*n.pixelDensityRatio,h.position.y*n.pixelDensityRatio,h.size.x*n.pixelDensityRatio,h.size.y*n.pixelDensityRatio);var B=(h.position.x+h.size.x/2)*n.pixelDensityRatio,O=(h.position.y+h.size.y/2)*n.pixelDensityRatio;S.translate(B,O);const V=this.viewport.getRotation(!0);S.rotate(Math.PI/180*-V),S.translate(-B,-O),h.x===0&&h.y===0&&(S.fillText("Zoom: "+this.viewport.getZoom(),h.position.x*n.pixelDensityRatio,(h.position.y-30)*n.pixelDensityRatio),S.fillText("Pan: "+this.viewport.getBounds().toString(),h.position.x*n.pixelDensityRatio,(h.position.y-20)*n.pixelDensityRatio)),S.fillText("Level: "+h.level,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+20)*n.pixelDensityRatio),S.fillText("Column: "+h.x,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+30)*n.pixelDensityRatio),S.fillText("Row: "+h.y,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+40)*n.pixelDensityRatio),S.fillText("Order: "+y+" of "+g,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+50)*n.pixelDensityRatio),S.fillText("Size: "+h.size.toString(),(h.position.x+10)*n.pixelDensityRatio,(h.position.y+60)*n.pixelDensityRatio),S.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(),S.restore()}_drawPlaceholder(h){const g=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*g.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,g,y){function a(B,O,V){const W=B.createShader(O);return B.shaderSource(W,V),B.compileShader(W),B.getShaderParameter(W,B.COMPILE_STATUS)?W:(n.console.error(`An error occurred compiling the shaders: ${B.getShaderInfoLog(W)}`),B.deleteShader(W),null)}const w=a(h,h.VERTEX_SHADER,g),_=a(h,h.FRAGMENT_SHADER,y),S=h.createProgram();return h.attachShader(S,w),h.attachShader(S,_),h.linkProgram(S),h.getProgramParameter(S,h.LINK_STATUS)?S:(n.console.error(`Unable to initialize the shader program: ${h.getProgramInfoLog(S)}`),null)}}}(le),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),g=h/this.getAspectRatio();return new n.Rect(u.x-h/2,u.y-g/2,h,g)},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),g,y,a,w,_,S,B,O;return o?u:this.zoomPoint?(g=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),S=this._pixelFromPoint(this.zoomPoint,_),B=S.minus(g).rotate(-this.getRotation(!0)),O=B.divide(this._containerInnerSize.x*y),h.plus(O)):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(),g=!1,y=!1;if(!this.wrapHorizontal){var a=u.x+u.width,w=h.x+h.width,_,S,B;u.width>h.width?_=this.visibilityRatio*h.width:_=this.visibilityRatio*u.width,S=h.x-a+_,B=w-u.x-_,_>h.width?(u.x+=(S+B)/2,g=!0):B<0?(u.x+=B,g=!0):S>0&&(u.x+=S,g=!0)}if(!this.wrapVertical){var O=u.y+u.height,V=h.y+h.height,W,k,ee;u.height>h.height?W=this.visibilityRatio*h.height:W=this.visibilityRatio*u.height,k=h.y-O+W,ee=V-u.y-W,W>h.height?(u.y+=(k+ee)/2,y=!0):ee<0?(u.y+=ee,y=!0):k>0&&(u.y+=k,y=!0)}var _e=g||y,be=_e?this.viewerElementToViewportRectangle(u):o.clone();return be.xConstrained=g,be.yConstrained=y,be.constraintApplied=_e,be},_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 g=this.getConstrainedBounds(!1);return g.constraintApplied&&(this.fitBounds(g,o),this._raiseConstraintsEvent(o)),this},ensureVisible:function(o){return this.applyConstraints(o)},_fitBounds:function(o,u){u=u||{};var h=u.immediately||!1,g=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),g&&this.applyConstraints(!0),this;var S=this.getCenter(!0),B=this.getZoom(!0);this.panTo(S,!0),this.zoomTo(B,null,!0);var O=this.getBounds(),V=this.getZoom();if(V===0||Math.abs(_/V-1)<1e-8)return this.zoomTo(_,null,!0),this.panTo(a,h),g&&this.applyConstraints(!1),this;if(g){this.panTo(a,!1),_=this._applyZoomConstraints(_),this.zoomTo(_,null,!1);var W=this.getConstrainedBounds();this.panTo(S,!0),this.zoomTo(B,null,!0),this.fitBounds(W)}else{var k=w.rotate(-this.getRotation()),ee=k.getTopLeft().times(_).minus(O.getTopLeft().times(V)).divide(_-V);this.zoomTo(_,ee,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 g=this;return this.zoomPoint=u instanceof n.Point&&!isNaN(u.x)&&!isNaN(u.y)?u:null,h?this._adjustCenterSpringsForZoomPoint(function(){g.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 g=o-this._oldDegrees;if(!g)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(),g=h,y;this.containerSize.x=o.x,this.containerSize.y=o.y,this._updateContainerInnerSize(),u&&(y=o.x/this.containerSize.x,g.width=h.width*y,g.height=g.width/this.getAspectRatio()),this.viewer&&this.viewer.raiseEvent("resize",{newContainerSize:o,maintain:u});var a=this.fitBounds(g,!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 g=this.degreesSpring.current.value-this._oldDegrees,y=h.rotate(g*-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),g=h.minus(u),y=this.deltaPointsFromPixels(g,!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 g=this.viewer.world.getItemAt(0);return g.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 g=this.viewer.world.getItemAt(0);return g.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,g){var y=o;if(y instanceof n.Rect||(y=new n.Rect(o,u,h,g)),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,g,!0)}}var _=this.imageToViewportCoordinates(y.x,y.y),S=this._imageToViewportDelta(y.width,y.height);return new n.Rect(_.x,_.y,S.x,S.y,y.degrees)},viewportToImageRectangle:function(o,u,h,g){var y=o;if(y instanceof n.Rect||(y=new n.Rect(o,u,h,g)),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,g,!0)}}var _=this.viewportToImageCoordinates(y.x,y.y),S=this._viewportToImageDelta(y.width,y.height);return new n.Rect(_.x,_.y,S.x,S.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 g=this._contentSizeNoRotate.x,y=this._containerInnerSize.x,a=this._contentBoundsNoRotate.width,w=y/g*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 g=this._contentSizeNoRotate.x,y=this._containerInnerSize.x,a=this._contentBoundsNoRotate.width,w=g/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))}}}(le),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 g=1;o.width?(g=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&&(g=o.height/this.normHeight,delete o.height);var y=o.fitBounds;delete o.fitBounds;var a=o.fitBoundsPlacement||le.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:g,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(),g=this._scaleSpring.update(),y=this._degreesSpring.update(),a=u||h||g||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,g=h/this.source.dimensions.x,y=this._clip.times(g);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 g=this.source.getNumTiles(o),y=(g.x+u%g.x)%g.x,a=(g.y+h%g.y)%g.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)/g.x,w.y+=this._worldHeightCurrent/this._worldWidthCurrent*((h-a)/g.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 g=h?this._scaleSpring.current.value:this._scaleSpring.target.value;return new n.Point(o*(this.source.dimensions.x/g),u*(this.source.dimensions.y*this.contentAspectX/g))},viewportToImageCoordinates:function(o,u,h){var g;return o instanceof n.Point?(h=u,g=o):g=new n.Point(o,u),g=g.rotate(-this.getRotation(h),this._getRotationPoint(h)),h?this._viewportToImageDelta(g.x-this._xSpring.current.value,g.y-this._ySpring.current.value):this._viewportToImageDelta(g.x-this._xSpring.target.value,g.y-this._ySpring.target.value)},_imageToViewportDelta:function(o,u,h){var g=h?this._scaleSpring.current.value:this._scaleSpring.target.value;return new n.Point(o/this.source.dimensions.x*g,u/this.source.dimensions.y/this.contentAspectX*g)},imageToViewportCoordinates:function(o,u,h){o instanceof n.Point&&(h=u,u=o.y,o=o.x);var g=this._imageToViewportDelta(o,u,h);return h?(g.x+=this._xSpring.current.value,g.y+=this._ySpring.current.value):(g.x+=this._xSpring.target.value,g.y+=this._ySpring.target.value),g.rotate(this.getRotation(h),this._getRotationPoint(h))},imageToViewportRectangle:function(o,u,h,g,y){var a=o;a instanceof n.Rect?y=u:a=new n.Rect(o,u,h,g);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,g,y){var a=o;o instanceof n.Rect?y=u:a=new n.Rect(o,u,h,g);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(le.getElementPosition(this.viewer.element));return this.viewerElementToImageCoordinates(u)},imageToWindowCoordinates:function(o){var u=this.imageToViewerElementCoordinates(o);return u.plus(le.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(g){return g instanceof n.Point||typeof g.x=="number"&&typeof g.y=="number"},h=function(g){return g.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(g){return h(g)}),this._needsDraw=!0}catch(g){n.console.error("[TiledImage.setCroppingPolygons] Cropping polygon format not supported"),n.console.error(g),this.resetCroppingPolygons()}},resetCroppingPolygons:function(){this._croppingPolygons=null,this._needsDraw=!0},fitBounds:function(o,u,h){u=u||n.Placement.CENTER;var g=n.Placement.properties[u],y=this.contentAspectX,a=0,w=0,_=1,S=1;if(this._clip&&(y=this._clip.getAspectRatio(),_=this._clip.width/this.source.dimensions.x,S=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 B=o.height/S,O=0;g.isHorizontallyCentered?O=(o.width-o.height*y)/2:g.isRight&&(O=o.width-o.height*y),this.setPosition(new n.Point(o.x-a+O,o.y-w),h),this.setHeight(B,h)}else{var V=o.width/_,W=0;g.isVerticallyCentered?W=(o.height-o.width/y)/2:g.isBottom&&(W=o.height-o.width/y),this.setPosition(new n.Point(o.x-a,o.y-w+W),h),this.setWidth(V,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,g,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(g=(u.y+_%u.y)%u.y,y=this.tilesMatrix[a][w][_],y.loadWithAjax=this.loadTilesWithAjax,y.loadWithAjax){var S=this.source.getTileAjaxHeaders(a,h,g);y.ajaxHeaders=n.extend({},this.ajaxHeaders,S)}else y.ajaxHeaders=null}}for(var B=0;B<this._imageLoader.jobQueue.length;B++){var O=this._imageLoader.jobQueue[B];O.loadWithAjax=O.tile.loadWithAjax,O.ajaxHeaders=O.tile.loadWithAjax?O.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,g=[],y=this.getDrawArea(),a=n.now();if(this._lastDrawn.forEach(Qe=>{Qe.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 Qe=0,Xe=h;Xe>=u;Xe--,Qe++)w[Qe]=Xe;for(let Qe=h+1;Qe<=this.source.maxLevel;Qe++){var _=this.tilesMatrix[Qe]&&this.tilesMatrix[Qe][0]&&this.tilesMatrix[Qe][0][0];if(_&&_.isBottomMost&&_.isRightMost&&_.loaded){w.push(Qe);break}}let S=!1;for(let Qe=0;Qe<w.length;Qe++){let Xe=w[Qe];var B=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(Xe),!0).x*this._scaleSpring.current.value;if(Qe===w.length-1||B>=this.minPixelRatio)S=!0;else if(!S)continue;var O=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(Xe),!1).x*this._scaleSpring.current.value,V=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(Math.max(this.source.getClosestLevel(),0)),!1).x*this._scaleSpring.current.value,W=this.immediateRender?1:V,k=Math.min(1,(B-.5)/.5),ee=W/Math.abs(W-O),_e=this._updateLevel(Xe,k,ee,y,a,g);g=_e.bestTiles;var be=_e.updatedTiles.filter(bt=>bt.loaded),lt=function(bt,$,At){return function($e){return{tile:$e,level:bt,levelOpacity:$,currentTime:At}}}(Xe,k,a);if(this._tilesToDraw[Xe]=be.map(lt),this._providesCoverage(this.coverage,Xe))break}return g&&g.length>0?(g.forEach(function(Qe){Qe&&!Qe.context2D&&this._loadTile(Qe,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 g=o.length?o[0].level:0;if(!this.getDrawArea())return;function a(_){let S=_.tile;if(S&&S.loaded){let B=h._blendTile(S,S.x,S.y,_.level,_.levelOpacity,u,g);h._isBlending=h._isBlending||B,h._needsDraw=h._needsDraw||B||h._wasBlending}}let w=0;for(let _=0;_<o.length;_++){let S=o[_];a(S),this._providesCoverage(this.coverage,S.level)&&(w=Math.max(w,S.level))}if(w>0)for(let _ in this._tilesToDraw)_<w&&delete this._tilesToDraw[_]},_blendTile:function(o,u,h,g,y,a,w){let _=1e3*this.blendTime,S,B;return o.blendStart||(o.blendStart=a),S=a-o.blendStart,B=_?Math.min(1,S/_):1,g===w&&(B=1,S=_),this.alwaysBlend&&(B*=y),o.opacity=B,B===1&&(this._setCoverage(this.coverage,g,u,h,!0),this._hasOpaqueTile=!0),S<_},_updateLevel:function(o,u,h,g,y,a){var w=g.getBoundingBox().getTopLeft(),_=g.getBoundingBox().getBottomRight();this.viewer&&this.viewer.raiseEvent("update-level",{tiledImage:this,havedrawn:!0,level:o,opacity:u,visibility:h,drawArea:g,topleft:w,bottomright:_,currenttime:y,best:a}),this._resetCoverage(this.coverage,o),this._resetCoverage(this.loadingCoverage,o);var S=this._getCornerTiles(o,w,_),B=S.topLeft,O=S.bottomRight,V=this.source.getNumTiles(o),W=this.viewport.pixelFromPoint(this.viewport.getCenter());this.getFlip()&&(O.x+=1,this.wrapHorizontal||(O.x=Math.min(O.x,V.x-1)));for(var k=Math.max(0,(O.x-B.x)*(O.y-B.y)),ee=new Array(k),_e=0,be=B.x;be<=O.x;be++)for(var lt=B.y;lt<=O.y;lt++){var Qe;if(this.getFlip()){var Xe=(V.x+be%V.x)%V.x;Qe=be+V.x-Xe-Xe-1}else Qe=be;if(g.intersection(this.getTileBounds(o,Qe,lt))!==null){var bt=this._updateTile(Qe,lt,o,h,W,V,y,a);a=bt.bestTiles,ee[_e]=bt.tile,_e+=1}}return{bestTiles:a,updatedTiles:ee}},_positionTile:function(o,u,h,g,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),S=h.pixelFromPointNoRotate(a,!1),B=h.deltaPixelsFromPointsNoRotate(w,!0),O=h.deltaPixelsFromPointsNoRotate(w,!1),V=S.plus(O.divide(2)),W=g.squaredDistanceTo(V);this.viewer.drawer.minimumOverlapRequired(this)&&(u||(B=B.plus(new n.Point(1,1))),o.isRightMost&&this.wrapHorizontal&&(B.x+=.75),o.isBottomMost&&this.wrapVertical&&(B.y+=.75)),o.position=_,o.size=B,o.squaredDistance=W,o.visibility=y},_updateTile:function(o,u,h,g,y,a,w,_){var S=this._getTile(o,u,h,w,a);this.viewer&&this.viewer.raiseEvent("update-tile",{tiledImage:this,tile:S}),this._setCoverage(this.coverage,h,o,u,!1);var B=S.loaded||S.loading||this._isCovered(this.loadingCoverage,h,o,u);if(this._setCoverage(this.loadingCoverage,h,o,u,B),!S.exists)return{bestTiles:_,tile:S};if(S.loaded&&S.opacity===1&&this._setCoverage(this.coverage,h,o,u,!0),this._positionTile(S,this.source.tileOverlap,this.viewport,y,g),!S.loaded)if(S.context2D)this._setTileLoaded(S);else{var O=this._tileCache.getImageRecord(S.cacheKey);O&&this._setTileLoaded(S,O.getData())}return S.loading?this._tilesLoading++:B||(_=this._compareTiles(_,S,this.maxTilesPerFrame)),{bestTiles:_,tile:S}},_getCornerTiles:function(o,u,h){var g,y;this.wrapHorizontal?(g=n.positiveModulo(u.x,1),y=n.positiveModulo(h.x,1)):(g=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 S=this.source.getTileAtPoint(o,new n.Point(g,a)),B=this.source.getTileAtPoint(o,new n.Point(y,w)),O=this.source.getNumTiles(o);return this.wrapHorizontal&&(S.x+=O.x*Math.floor(u.x),B.x+=O.x*Math.floor(h.x)),this.wrapVertical&&(S.y+=O.y*Math.floor(u.y/_),B.y+=O.y*Math.floor(h.y/_)),{topLeft:S,bottomRight:B}},_getTile:function(o,u,h,g,y){var a,w,_,S,B,O,V,W,k,ee,_e=this.tilesMatrix,be=this.source;return _e[h]||(_e[h]={}),_e[h][o]||(_e[h][o]={}),(!_e[h][o][u]||!_e[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),S=be.getTileBounds(h,a,w,!0),B=be.tileExists(h,a,w),O=be.getTileUrl(h,a,w),V=be.getTilePostData(h,a,w),this.loadTilesWithAjax?(W=be.getTileAjaxHeaders(h,a,w),n.isPlainObject(this.ajaxHeaders)&&(W=n.extend({},this.ajaxHeaders,W))):W=null,k=be.getContext2D?be.getContext2D(h,a,w):void 0,ee=new n.Tile(h,o,u,_,B,O,k,this.loadTilesWithAjax,W,S,V,be.getTileHashKey(h,a,w,O,W,V)),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,_e[h][o][u]=ee),ee=_e[h][o][u],ee.lastTouchTime=g,ee},_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(g,y,a){h._onTileLoad(o,u,g,y,a)},abort:function(){o.loading=!1}})},_onTileLoad:function(o,u,h,g,y){if(h)o.exists=!0;else{n.console.error("Tile %s failed to load: %s - error: %s",o,o.getUrl(),g),this.viewer.raiseEvent("tile-load-failed",{tile:o,tiledImage:this,time:u,message:g,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,S=_.getClosestLevel();a._setTileLoaded(o,h,S,y)};w()},_setTileLoaded:function(o,u,h,g){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++,S}function S(){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:g}),w._needsDraw=!0)}var B=_();this.viewer.raiseEvent("tile-loaded",{tile:o,tiledImage:this,tileRequest:g,get image(){return n.console.error("[tile-loaded] event 'image' has been deprecated. Use 'data' property instead."),u},data:u,getCompletionCallback:_}),a=!0,B()},_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,g){var y,a,w,_;if(!o[u])return!1;if(h===void 0||g===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][g]===void 0||o[u][h][g]===!0},_isCovered:function(o,u,h,g){return h===void 0||g===void 0?this._providesCoverage(o,u+1):this._providesCoverage(o,u+1,2*h,2*g)&&this._providesCoverage(o,u+1,2*h,2*g+1)&&this._providesCoverage(o,u+1,2*h+1,2*g)&&this._providesCoverage(o,u+1,2*h+1,2*g+1)},_setCoverage:function(o,u,h,g,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][g]=y},_resetCoverage:function(o,u){o[u]={}}})}(le),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 g=0;g<this._tiles.length;g++)if(this._tiles[g]===h){this._tiles.splice(g,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 g=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,S=null,B,O,V,W,k,ee,_e=this._tilesLoaded.length-1;_e>=0;_e--)if(ee=this._tilesLoaded[_e],B=ee.tile,!(B.level<=g||B.beingDrawn)){if(!w){w=B,_=_e,S=ee;continue}W=B.lastTouchTime,O=w.lastTouchTime,k=B.level,V=w.level,(W<O||W===O&&k>V)&&(w=B,_=_e,S=ee)}w&&_>=0&&(this._unloadTile(S),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 g,y=0;y<this._tilesLoaded.length;++y)g=this._tilesLoaded[y],g.tiledImage===h&&(this._unloadTile(g),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 g=h.tile,y=h.tiledImage;let a=g.getCanvasContext&&g.getCanvasContext();g.unload(),g.cacheImageRecord=null;var w=this._imagesLoaded[g.cacheKey];w&&(w.removeTile(g),w.getTileCount()||(w.destroy(),delete this._imagesLoaded[g.cacheKey],this._imagesLoadedCount--,a&&(a.canvas.width=0,a.canvas.height=0,y.viewer.raiseEvent("image-unloaded",{context2D:a,tile:g}))),y.viewer.raiseEvent("tile-unloaded",{tile:g,tiledImage:y}))}}}(le),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,g=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,S;!o.rows&&y?S=y:S=Math.ceil(this._items.length/g);var B=0,O=0,V,W,k,ee,_e;this.setAutoRefigureSizes(!1);for(var be=0;be<this._items.length;be++)be&&be%S===0&&(h==="horizontal"?(O+=_,B=0):(B+=_,O=0)),V=this._items[be],W=V.getBounds(),W.width>W.height?k=a:k=a*(W.width/W.height),ee=k*(W.height/W.width),_e=new n.Point(B+(a-k)/2,O+(a-ee)/2),V.setPosition(_e,u),V.setWidth(k,u),h==="horizontal"?B+=_:O+=_;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 g=this._items[0],y=g.getBounds();this._contentFactor=g.getContentSize().x/y.width;for(var a=g.getClippedBounds().getBoundingBox(),w=a.x,_=a.y,S=a.x+a.width,B=a.y+a.height,O=1;O<this._items.length;O++)g=this._items[O],y=g.getBounds(),this._contentFactor=Math.max(this._contentFactor,g.getContentSize().x/y.width),a=g.getClippedBounds().getBoundingBox(),w=Math.min(w,a.x),_=Math.min(_,a.y),S=Math.max(S,a.x+a.width),B=Math.max(B,a.y+a.height);this._homeBounds=new n.Rect(w,_,S-w,B-_),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})}})}(le)}(Wi)),Wi.exports}var ln=Ki();const hn=an(ln);var Qi={exports:{}};/*! For license information please see main.js.LICENSE.txt */(function(Oe,le){(function(n,o){Oe.exports=o(Ki())})(self,n=>(()=>{var o={946:(y,a,w)=>{w.d(a,{A:()=>V});var _=w(354),S=w.n(_),B=w(314),O=w.n(B)()(S());O.push([y.id,`/**
|
|
79
|
+
`;let y=this._gl,a=this.constructor.initShaderProgram(y,h,g);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,g=this._renderingCanvas.width,y=this._renderingCanvas.height;h.viewport(0,0,g,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,g,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 g=h._calculateCanvasSize();(h._outputCanvas.width!==g.x||h._outputCanvas.height!==g.y)&&(h._outputCanvas.width=g.x,h._outputCanvas.height=g.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,g,y,a){return new Float32Array([h,a,g,a,h,y,h,y,g,a,g,y])}_tileReadyHandler(h){let g=h.tile,y=h.tiledImage;if(y.isTainted())return;let a=g.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,k=T.createTexture(),M,V=y.source.tileOverlap,W,O;if(g.sourceBounds?(W=Math.min(g.sourceBounds.width,w.width)/w.width,O=Math.min(g.sourceBounds.height,w.height)/w.height):(W=1,O=1),V>0){let _e=this._calculateOverlapFraction(g,y),be=(g.x===0?0:_e.x)*W,ht=(g.y===0?0:_e.y)*O,$e=(g.isRightMost?1:1-_e.x)*W,Xe=(g.isBottomMost?1:1-_e.y)*O;M=this._makeQuadVertexBuffer(be,$e,ht,Xe)}else W===1&&O===1?M=this._unitQuad:M=this._makeQuadVertexBuffer(0,W,0,O);let te={texture:k,position:M};this._TextureMap.set(w,te),T.activeTexture(T.TEXTURE0),T.bindTexture(T.TEXTURE_2D,k),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(h,g){let y=g.source.tileOverlap,a=h.sourceBounds.width,w=h.sourceBounds.height,_=(h.x===0?0:y)+(h.isRightMost?0:y),T=(h.y===0?0:y)+(h.isBottomMost?0:y),k=y/(a+_),M=y/(w+T);return{x:k,y:M}}_unloadTextures(){Array.from(this._TextureMap.keys()).forEach(g=>{this._cleanupImageData(g)})}_uploadImageData(h){let g=this._gl,y=h.canvas;try{if(!y)throw h;g.texImage2D(g.TEXTURE_2D,0,g.RGBA,g.RGBA,g.UNSIGNED_BYTE,y)}catch(a){n.console.error("Error uploading image data to WebGL",a)}}_imageUnloadedHandler(h){let g=h.context2D.canvas;this._cleanupImageData(g)}_cleanupImageData(h){let g=this._TextureMap.get(h);this._TextureMap.delete(h),g&&this._gl.deleteTexture(g.texture)}_setClip(){}_renderToClippingCanvas(h){if(this._clippingContext.clearRect(0,0,this._clippingCanvas.width,this._clippingCanvas.height),this._clippingContext.save(),this.viewer.viewport.getFlip()){const g=new n.Point(this.canvas.width/2,this.canvas.height/2);this._clippingContext.translate(g.x,0),this._clippingContext.scale(-1,1),this._clippingContext.translate(-g.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 g=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(),g.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 g=new n.Point(this.canvas.width/2,this.canvas.height/2);this._clippingContext.translate(g.x,0),this._clippingContext.scale(-1,1),this._clippingContext.translate(-g.x,0)}this._clippingContext.drawImage(this._renderingCanvas,0,0),this._clippingContext.restore()}_setRotations(h){var g=!1;this.viewport.getRotation(!0)%360!==0&&(this._offsetForRotation({degrees:this.viewport.getRotation(!0),saveContext:g}),g=!1),h.getRotation(!0)%360!==0&&this._offsetForRotation({degrees:h.getRotation(!0),point:this.viewport.pixelFromPointNoRotate(h._getRotationPoint(!0),!0),saveContext:g})}_offsetForRotation(h){var g=h.point?h.point.times(n.pixelDensityRatio):this._getCanvasCenter(),y=this._outputContext;y.save(),y.translate(g.x,g.y),y.rotate(Math.PI/180*h.degrees),y.translate(-g.x,-g.y)}_flip(h){h=h||{};var g=h.point?h.point.times(n.pixelDensityRatio):this._getCanvasCenter(),y=this._outputContext;y.translate(g.x,0),y.scale(-1,1),y.translate(-g.x,0)}_drawDebugInfo(h,g,y){for(var a=h.length-1;a>=0;a--){var w=h[a].tile;try{this._drawDebugInfoOnTile(w,h.length,a,g,y)}catch(_){n.console.error(_)}}}_drawDebugInfoOnTile(h,g,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:h.position.plus(h.size.divide(2))}),T.strokeRect(h.position.x*n.pixelDensityRatio,h.position.y*n.pixelDensityRatio,h.size.x*n.pixelDensityRatio,h.size.y*n.pixelDensityRatio);var k=(h.position.x+h.size.x/2)*n.pixelDensityRatio,M=(h.position.y+h.size.y/2)*n.pixelDensityRatio;T.translate(k,M);const V=this.viewport.getRotation(!0);T.rotate(Math.PI/180*-V),T.translate(-k,-M),h.x===0&&h.y===0&&(T.fillText("Zoom: "+this.viewport.getZoom(),h.position.x*n.pixelDensityRatio,(h.position.y-30)*n.pixelDensityRatio),T.fillText("Pan: "+this.viewport.getBounds().toString(),h.position.x*n.pixelDensityRatio,(h.position.y-20)*n.pixelDensityRatio)),T.fillText("Level: "+h.level,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+20)*n.pixelDensityRatio),T.fillText("Column: "+h.x,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+30)*n.pixelDensityRatio),T.fillText("Row: "+h.y,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+40)*n.pixelDensityRatio),T.fillText("Order: "+y+" of "+g,(h.position.x+10)*n.pixelDensityRatio,(h.position.y+50)*n.pixelDensityRatio),T.fillText("Size: "+h.size.toString(),(h.position.x+10)*n.pixelDensityRatio,(h.position.y+60)*n.pixelDensityRatio),T.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(),T.restore()}_drawPlaceholder(h){const g=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*g.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,g,y){function a(k,M,V){const W=k.createShader(M);return k.shaderSource(W,V),k.compileShader(W),k.getShaderParameter(W,k.COMPILE_STATUS)?W:(n.console.error(`An error occurred compiling the shaders: ${k.getShaderInfoLog(W)}`),k.deleteShader(W),null)}const w=a(h,h.VERTEX_SHADER,g),_=a(h,h.FRAGMENT_SHADER,y),T=h.createProgram();return h.attachShader(T,w),h.attachShader(T,_),h.linkProgram(T),h.getProgramParameter(T,h.LINK_STATUS)?T:(n.console.error(`Unable to initialize the shader program: ${h.getProgramInfoLog(T)}`),null)}}}(he),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),g=h/this.getAspectRatio();return new n.Rect(u.x-h/2,u.y-g/2,h,g)},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),g,y,a,w,_,T,k,M;return o?u:this.zoomPoint?(g=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),T=this._pixelFromPoint(this.zoomPoint,_),k=T.minus(g).rotate(-this.getRotation(!0)),M=k.divide(this._containerInnerSize.x*y),h.plus(M)):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(),g=!1,y=!1;if(!this.wrapHorizontal){var a=u.x+u.width,w=h.x+h.width,_,T,k;u.width>h.width?_=this.visibilityRatio*h.width:_=this.visibilityRatio*u.width,T=h.x-a+_,k=w-u.x-_,_>h.width?(u.x+=(T+k)/2,g=!0):k<0?(u.x+=k,g=!0):T>0&&(u.x+=T,g=!0)}if(!this.wrapVertical){var M=u.y+u.height,V=h.y+h.height,W,O,te;u.height>h.height?W=this.visibilityRatio*h.height:W=this.visibilityRatio*u.height,O=h.y-M+W,te=V-u.y-W,W>h.height?(u.y+=(O+te)/2,y=!0):te<0?(u.y+=te,y=!0):O>0&&(u.y+=O,y=!0)}var _e=g||y,be=_e?this.viewerElementToViewportRectangle(u):o.clone();return be.xConstrained=g,be.yConstrained=y,be.constraintApplied=_e,be},_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 g=this.getConstrainedBounds(!1);return g.constraintApplied&&(this.fitBounds(g,o),this._raiseConstraintsEvent(o)),this},ensureVisible:function(o){return this.applyConstraints(o)},_fitBounds:function(o,u){u=u||{};var h=u.immediately||!1,g=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),g&&this.applyConstraints(!0),this;var T=this.getCenter(!0),k=this.getZoom(!0);this.panTo(T,!0),this.zoomTo(k,null,!0);var M=this.getBounds(),V=this.getZoom();if(V===0||Math.abs(_/V-1)<1e-8)return this.zoomTo(_,null,!0),this.panTo(a,h),g&&this.applyConstraints(!1),this;if(g){this.panTo(a,!1),_=this._applyZoomConstraints(_),this.zoomTo(_,null,!1);var W=this.getConstrainedBounds();this.panTo(T,!0),this.zoomTo(k,null,!0),this.fitBounds(W)}else{var O=w.rotate(-this.getRotation()),te=O.getTopLeft().times(_).minus(M.getTopLeft().times(V)).divide(_-V);this.zoomTo(_,te,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 g=this;return this.zoomPoint=u instanceof n.Point&&!isNaN(u.x)&&!isNaN(u.y)?u:null,h?this._adjustCenterSpringsForZoomPoint(function(){g.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 g=o-this._oldDegrees;if(!g)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(),g=h,y;this.containerSize.x=o.x,this.containerSize.y=o.y,this._updateContainerInnerSize(),u&&(y=o.x/this.containerSize.x,g.width=h.width*y,g.height=g.width/this.getAspectRatio()),this.viewer&&this.viewer.raiseEvent("resize",{newContainerSize:o,maintain:u});var a=this.fitBounds(g,!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 g=this.degreesSpring.current.value-this._oldDegrees,y=h.rotate(g*-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),g=h.minus(u),y=this.deltaPointsFromPixels(g,!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 g=this.viewer.world.getItemAt(0);return g.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 g=this.viewer.world.getItemAt(0);return g.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,g){var y=o;if(y instanceof n.Rect||(y=new n.Rect(o,u,h,g)),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,g,!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,u,h,g){var y=o;if(y instanceof n.Rect||(y=new n.Rect(o,u,h,g)),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,g,!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 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 g=this._contentSizeNoRotate.x,y=this._containerInnerSize.x,a=this._contentBoundsNoRotate.width,w=y/g*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 g=this._contentSizeNoRotate.x,y=this._containerInnerSize.x,a=this._contentBoundsNoRotate.width,w=g/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))}}}(he),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 g=1;o.width?(g=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&&(g=o.height/this.normHeight,delete o.height);var y=o.fitBounds;delete o.fitBounds;var a=o.fitBoundsPlacement||he.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:g,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(),g=this._scaleSpring.update(),y=this._degreesSpring.update(),a=u||h||g||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,g=h/this.source.dimensions.x,y=this._clip.times(g);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 g=this.source.getNumTiles(o),y=(g.x+u%g.x)%g.x,a=(g.y+h%g.y)%g.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)/g.x,w.y+=this._worldHeightCurrent/this._worldWidthCurrent*((h-a)/g.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 g=h?this._scaleSpring.current.value:this._scaleSpring.target.value;return new n.Point(o*(this.source.dimensions.x/g),u*(this.source.dimensions.y*this.contentAspectX/g))},viewportToImageCoordinates:function(o,u,h){var g;return o instanceof n.Point?(h=u,g=o):g=new n.Point(o,u),g=g.rotate(-this.getRotation(h),this._getRotationPoint(h)),h?this._viewportToImageDelta(g.x-this._xSpring.current.value,g.y-this._ySpring.current.value):this._viewportToImageDelta(g.x-this._xSpring.target.value,g.y-this._ySpring.target.value)},_imageToViewportDelta:function(o,u,h){var g=h?this._scaleSpring.current.value:this._scaleSpring.target.value;return new n.Point(o/this.source.dimensions.x*g,u/this.source.dimensions.y/this.contentAspectX*g)},imageToViewportCoordinates:function(o,u,h){o instanceof n.Point&&(h=u,u=o.y,o=o.x);var g=this._imageToViewportDelta(o,u,h);return h?(g.x+=this._xSpring.current.value,g.y+=this._ySpring.current.value):(g.x+=this._xSpring.target.value,g.y+=this._ySpring.target.value),g.rotate(this.getRotation(h),this._getRotationPoint(h))},imageToViewportRectangle:function(o,u,h,g,y){var a=o;a instanceof n.Rect?y=u:a=new n.Rect(o,u,h,g);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,g,y){var a=o;o instanceof n.Rect?y=u:a=new n.Rect(o,u,h,g);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(he.getElementPosition(this.viewer.element));return this.viewerElementToImageCoordinates(u)},imageToWindowCoordinates:function(o){var u=this.imageToViewerElementCoordinates(o);return u.plus(he.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(g){return g instanceof n.Point||typeof g.x=="number"&&typeof g.y=="number"},h=function(g){return g.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(g){return h(g)}),this._needsDraw=!0}catch(g){n.console.error("[TiledImage.setCroppingPolygons] Cropping polygon format not supported"),n.console.error(g),this.resetCroppingPolygons()}},resetCroppingPolygons:function(){this._croppingPolygons=null,this._needsDraw=!0},fitBounds:function(o,u,h){u=u||n.Placement.CENTER;var g=n.Placement.properties[u],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 k=o.height/T,M=0;g.isHorizontallyCentered?M=(o.width-o.height*y)/2:g.isRight&&(M=o.width-o.height*y),this.setPosition(new n.Point(o.x-a+M,o.y-w),h),this.setHeight(k,h)}else{var V=o.width/_,W=0;g.isVerticallyCentered?W=(o.height-o.width/y)/2:g.isBottom&&(W=o.height-o.width/y),this.setPosition(new n.Point(o.x-a,o.y-w+W),h),this.setWidth(V,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,g,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(g=(u.y+_%u.y)%u.y,y=this.tilesMatrix[a][w][_],y.loadWithAjax=this.loadTilesWithAjax,y.loadWithAjax){var T=this.source.getTileAjaxHeaders(a,h,g);y.ajaxHeaders=n.extend({},this.ajaxHeaders,T)}else y.ajaxHeaders=null}}for(var k=0;k<this._imageLoader.jobQueue.length;k++){var M=this._imageLoader.jobQueue[k];M.loadWithAjax=M.tile.loadWithAjax,M.ajaxHeaders=M.tile.loadWithAjax?M.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,g=[],y=this.getDrawArea(),a=n.now();if(this._lastDrawn.forEach($e=>{$e.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 $e=0,Xe=h;Xe>=u;Xe--,$e++)w[$e]=Xe;for(let $e=h+1;$e<=this.source.maxLevel;$e++){var _=this.tilesMatrix[$e]&&this.tilesMatrix[$e][0]&&this.tilesMatrix[$e][0][0];if(_&&_.isBottomMost&&_.isRightMost&&_.loaded){w.push($e);break}}let T=!1;for(let $e=0;$e<w.length;$e++){let Xe=w[$e];var k=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(Xe),!0).x*this._scaleSpring.current.value;if($e===w.length-1||k>=this.minPixelRatio)T=!0;else if(!T)continue;var M=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(Xe),!1).x*this._scaleSpring.current.value,V=this.viewport.deltaPixelsFromPointsNoRotate(this.source.getPixelRatio(Math.max(this.source.getClosestLevel(),0)),!1).x*this._scaleSpring.current.value,W=this.immediateRender?1:V,O=Math.min(1,(k-.5)/.5),te=W/Math.abs(W-M),_e=this._updateLevel(Xe,O,te,y,a,g);g=_e.bestTiles;var be=_e.updatedTiles.filter(bt=>bt.loaded),ht=function(bt,$,Tt){return function(et){return{tile:et,level:bt,levelOpacity:$,currentTime:Tt}}}(Xe,O,a);if(this._tilesToDraw[Xe]=be.map(ht),this._providesCoverage(this.coverage,Xe))break}return g&&g.length>0?(g.forEach(function($e){$e&&!$e.context2D&&this._loadTile($e,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 g=o.length?o[0].level:0;if(!this.getDrawArea())return;function a(_){let T=_.tile;if(T&&T.loaded){let k=h._blendTile(T,T.x,T.y,_.level,_.levelOpacity,u,g);h._isBlending=h._isBlending||k,h._needsDraw=h._needsDraw||k||h._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,u,h,g,y,a,w){let _=1e3*this.blendTime,T,k;return o.blendStart||(o.blendStart=a),T=a-o.blendStart,k=_?Math.min(1,T/_):1,g===w&&(k=1,T=_),this.alwaysBlend&&(k*=y),o.opacity=k,k===1&&(this._setCoverage(this.coverage,g,u,h,!0),this._hasOpaqueTile=!0),T<_},_updateLevel:function(o,u,h,g,y,a){var w=g.getBoundingBox().getTopLeft(),_=g.getBoundingBox().getBottomRight();this.viewer&&this.viewer.raiseEvent("update-level",{tiledImage:this,havedrawn:!0,level:o,opacity:u,visibility:h,drawArea:g,topleft:w,bottomright:_,currenttime:y,best:a}),this._resetCoverage(this.coverage,o),this._resetCoverage(this.loadingCoverage,o);var T=this._getCornerTiles(o,w,_),k=T.topLeft,M=T.bottomRight,V=this.source.getNumTiles(o),W=this.viewport.pixelFromPoint(this.viewport.getCenter());this.getFlip()&&(M.x+=1,this.wrapHorizontal||(M.x=Math.min(M.x,V.x-1)));for(var O=Math.max(0,(M.x-k.x)*(M.y-k.y)),te=new Array(O),_e=0,be=k.x;be<=M.x;be++)for(var ht=k.y;ht<=M.y;ht++){var $e;if(this.getFlip()){var Xe=(V.x+be%V.x)%V.x;$e=be+V.x-Xe-Xe-1}else $e=be;if(g.intersection(this.getTileBounds(o,$e,ht))!==null){var bt=this._updateTile($e,ht,o,h,W,V,y,a);a=bt.bestTiles,te[_e]=bt.tile,_e+=1}}return{bestTiles:a,updatedTiles:te}},_positionTile:function(o,u,h,g,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),T=h.pixelFromPointNoRotate(a,!1),k=h.deltaPixelsFromPointsNoRotate(w,!0),M=h.deltaPixelsFromPointsNoRotate(w,!1),V=T.plus(M.divide(2)),W=g.squaredDistanceTo(V);this.viewer.drawer.minimumOverlapRequired(this)&&(u||(k=k.plus(new n.Point(1,1))),o.isRightMost&&this.wrapHorizontal&&(k.x+=.75),o.isBottomMost&&this.wrapVertical&&(k.y+=.75)),o.position=_,o.size=k,o.squaredDistance=W,o.visibility=y},_updateTile:function(o,u,h,g,y,a,w,_){var T=this._getTile(o,u,h,w,a);this.viewer&&this.viewer.raiseEvent("update-tile",{tiledImage:this,tile:T}),this._setCoverage(this.coverage,h,o,u,!1);var k=T.loaded||T.loading||this._isCovered(this.loadingCoverage,h,o,u);if(this._setCoverage(this.loadingCoverage,h,o,u,k),!T.exists)return{bestTiles:_,tile:T};if(T.loaded&&T.opacity===1&&this._setCoverage(this.coverage,h,o,u,!0),this._positionTile(T,this.source.tileOverlap,this.viewport,y,g),!T.loaded)if(T.context2D)this._setTileLoaded(T);else{var M=this._tileCache.getImageRecord(T.cacheKey);M&&this._setTileLoaded(T,M.getData())}return T.loading?this._tilesLoading++:k||(_=this._compareTiles(_,T,this.maxTilesPerFrame)),{bestTiles:_,tile:T}},_getCornerTiles:function(o,u,h){var g,y;this.wrapHorizontal?(g=n.positiveModulo(u.x,1),y=n.positiveModulo(h.x,1)):(g=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 T=this.source.getTileAtPoint(o,new n.Point(g,a)),k=this.source.getTileAtPoint(o,new n.Point(y,w)),M=this.source.getNumTiles(o);return this.wrapHorizontal&&(T.x+=M.x*Math.floor(u.x),k.x+=M.x*Math.floor(h.x)),this.wrapVertical&&(T.y+=M.y*Math.floor(u.y/_),k.y+=M.y*Math.floor(h.y/_)),{topLeft:T,bottomRight:k}},_getTile:function(o,u,h,g,y){var a,w,_,T,k,M,V,W,O,te,_e=this.tilesMatrix,be=this.source;return _e[h]||(_e[h]={}),_e[h][o]||(_e[h][o]={}),(!_e[h][o][u]||!_e[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),T=be.getTileBounds(h,a,w,!0),k=be.tileExists(h,a,w),M=be.getTileUrl(h,a,w),V=be.getTilePostData(h,a,w),this.loadTilesWithAjax?(W=be.getTileAjaxHeaders(h,a,w),n.isPlainObject(this.ajaxHeaders)&&(W=n.extend({},this.ajaxHeaders,W))):W=null,O=be.getContext2D?be.getContext2D(h,a,w):void 0,te=new n.Tile(h,o,u,_,k,M,O,this.loadTilesWithAjax,W,T,V,be.getTileHashKey(h,a,w,M,W,V)),this.getFlip()?a===0&&(te.isRightMost=!0):a===y.x-1&&(te.isRightMost=!0),w===y.y-1&&(te.isBottomMost=!0),te.flipped=this.flipped,_e[h][o][u]=te),te=_e[h][o][u],te.lastTouchTime=g,te},_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(g,y,a){h._onTileLoad(o,u,g,y,a)},abort:function(){o.loading=!1}})},_onTileLoad:function(o,u,h,g,y){if(h)o.exists=!0;else{n.console.error("Tile %s failed to load: %s - error: %s",o,o.getUrl(),g),this.viewer.raiseEvent("tile-load-failed",{tile:o,tiledImage:this,time:u,message:g,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,T=_.getClosestLevel();a._setTileLoaded(o,h,T,y)};w()},_setTileLoaded:function(o,u,h,g){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:u,tile:o,cutoff:h,tiledImage:w}),w.viewer.raiseEvent("tile-ready",{tile:o,tiledImage:w,tileRequest:g}),w._needsDraw=!0)}var k=_();this.viewer.raiseEvent("tile-loaded",{tile:o,tiledImage:this,tileRequest:g,get image(){return n.console.error("[tile-loaded] event 'image' has been deprecated. Use 'data' property instead."),u},data:u,getCompletionCallback:_}),a=!0,k()},_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,g){var y,a,w,_;if(!o[u])return!1;if(h===void 0||g===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][g]===void 0||o[u][h][g]===!0},_isCovered:function(o,u,h,g){return h===void 0||g===void 0?this._providesCoverage(o,u+1):this._providesCoverage(o,u+1,2*h,2*g)&&this._providesCoverage(o,u+1,2*h,2*g+1)&&this._providesCoverage(o,u+1,2*h+1,2*g)&&this._providesCoverage(o,u+1,2*h+1,2*g+1)},_setCoverage:function(o,u,h,g,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][g]=y},_resetCoverage:function(o,u){o[u]={}}})}(he),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 g=0;g<this._tiles.length;g++)if(this._tiles[g]===h){this._tiles.splice(g,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 g=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,T=null,k,M,V,W,O,te,_e=this._tilesLoaded.length-1;_e>=0;_e--)if(te=this._tilesLoaded[_e],k=te.tile,!(k.level<=g||k.beingDrawn)){if(!w){w=k,_=_e,T=te;continue}W=k.lastTouchTime,M=w.lastTouchTime,O=k.level,V=w.level,(W<M||W===M&&O>V)&&(w=k,_=_e,T=te)}w&&_>=0&&(this._unloadTile(T),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 g,y=0;y<this._tilesLoaded.length;++y)g=this._tilesLoaded[y],g.tiledImage===h&&(this._unloadTile(g),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 g=h.tile,y=h.tiledImage;let a=g.getCanvasContext&&g.getCanvasContext();g.unload(),g.cacheImageRecord=null;var w=this._imagesLoaded[g.cacheKey];w&&(w.removeTile(g),w.getTileCount()||(w.destroy(),delete this._imagesLoaded[g.cacheKey],this._imagesLoadedCount--,a&&(a.canvas.width=0,a.canvas.height=0,y.viewer.raiseEvent("image-unloaded",{context2D:a,tile:g}))),y.viewer.raiseEvent("tile-unloaded",{tile:g,tiledImage:y}))}}}(he),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,g=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/g);var k=0,M=0,V,W,O,te,_e;this.setAutoRefigureSizes(!1);for(var be=0;be<this._items.length;be++)be&&be%T===0&&(h==="horizontal"?(M+=_,k=0):(k+=_,M=0)),V=this._items[be],W=V.getBounds(),W.width>W.height?O=a:O=a*(W.width/W.height),te=O*(W.height/W.width),_e=new n.Point(k+(a-O)/2,M+(a-te)/2),V.setPosition(_e,u),V.setWidth(O,u),h==="horizontal"?k+=_:M+=_;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 g=this._items[0],y=g.getBounds();this._contentFactor=g.getContentSize().x/y.width;for(var a=g.getClippedBounds().getBoundingBox(),w=a.x,_=a.y,T=a.x+a.width,k=a.y+a.height,M=1;M<this._items.length;M++)g=this._items[M],y=g.getBounds(),this._contentFactor=Math.max(this._contentFactor,g.getContentSize().x/y.width),a=g.getClippedBounds().getBoundingBox(),w=Math.min(w,a.x),_=Math.min(_,a.y),T=Math.max(T,a.x+a.width),k=Math.max(k,a.y+a.height);this._homeBounds=new n.Rect(w,_,T-w,k-_),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})}})}(he)}(Wi)),Wi.exports}var ln=Ki();const hn=an(ln);var Qi={exports:{}};/*! For license information please see main.js.LICENSE.txt */(function(Oe,he){(function(n,o){Oe.exports=o(Ki())})(self,n=>(()=>{var o={946:(y,a,w)=>{w.d(a,{A:()=>V});var _=w(354),T=w.n(_),k=w(314),M=w.n(k)()(T());M.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 V=
|
|
1361
|
+
}`],sourceRoot:""}]);const V=M},676:(y,a,w)=>{w.d(a,{A:()=>V});var _=w(354),T=w.n(_),k=w(314),M=w.n(k)()(T());M.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 V=
|
|
1519
|
+
}`],sourceRoot:""}]);const V=M},314:y=>{y.exports=function(a){var w=[];return w.toString=function(){return this.map(function(_){var T="",k=_[5]!==void 0;return _[4]&&(T+="@supports (".concat(_[4],") {")),_[2]&&(T+="@media ".concat(_[2]," {")),k&&(T+="@layer".concat(_[5].length>0?" ".concat(_[5]):""," {")),T+=a(_),k&&(T+="}"),_[2]&&(T+="}"),_[4]&&(T+="}"),T}).join("")},w.i=function(_,T,k,M,V){typeof _=="string"&&(_=[[null,_,void 0]]);var W={};if(k)for(var O=0;O<this.length;O++){var te=this[O][0];te!=null&&(W[te]=!0)}for(var _e=0;_e<_.length;_e++){var be=[].concat(_[_e]);k&&W[be[0]]||(V!==void 0&&(be[5]===void 0||(be[1]="@layer".concat(be[5].length>0?" ".concat(be[5]):""," {").concat(be[1],"}")),be[5]=V),T&&(be[2]&&(be[1]="@media ".concat(be[2]," {").concat(be[1],"}")),be[2]=T),M&&(be[4]?(be[1]="@supports (".concat(be[4],") {").concat(be[1],"}"),be[4]=M):be[4]="".concat(M)),w.push(be))}},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(_)))),k="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(T),M="/*# ".concat(k," */");return[w].concat([M]).join(`
|
|
1520
1520
|
`)}return[w].join(`
|
|
1521
|
-
`)}},292:function(y,a,w){var _,S;(function(B,O){var V=(B=B||w(965)).window,W=B.document,k=new function(){function e(P,N,z){var j;return P&&((j=d(P,"length"))&&typeof j.value=="number"?v:function(G,K){for(var U in this)this.hasOwnProperty(U)&&G.call(K,this[U],U,this)}).call(P,N,z=z||P),z}var t=/^(statics|enumerable|beans|preserve)$/,i=[],r=i.slice,l=Object.create,d=Object.getOwnPropertyDescriptor,f=Object.defineProperty,v=i.forEach||function(P,N){for(var z=0,j=this.length;z<j;z++)P.call(N,this[z],z,this)},m=Object.assign||function(P){for(var N=1,z=arguments.length;N<z;N++){var j,G=arguments[N];for(j in G)G.hasOwnProperty(j)&&(P[j]=G[j])}return P};function C(P,N,z,j,G){var K={};function U(he,ce){var Ce,Te=typeof(ce=typeof(ce=ce||(ce=d(N,he))&&(ce.get?ce:ce.value))=="string"&&ce[0]==="#"&&P[ce.substring(1)]||ce)=="function",Ae=ce,Fe=G||Te&&!ce.base?ce&&ce.get?he in P:P[he]:null;G&&Fe||(Te&&Fe&&(ce.base=Fe),Te&&j!==!1&&(Ce=he.match(/^([gs]et|is)(([A-Z])(.*))$/))&&(K[Ce[3].toLowerCase()+Ce[4]]=Ce[2]),Ae&&!Te&&Ae.get&&typeof Ae.get=="function"&&E.isPlainObject(Ae)||(Ae={value:Ae,writable:!0}),(d(P,he)||{configurable:!0}).configurable&&(Ae.configurable=!0,Ae.enumerable=z??!Ce),f(P,he,Ae))}if(N){for(var Z in N)N.hasOwnProperty(Z)&&!t.test(Z)&&U(Z);for(var Z in K){var te=K[Z],oe=P["set"+te];!(te=P["get"+te]||oe&&P["is"+te])||j!==!0&&te.length!==0||U(Z,{get:te,set:oe})}}return P}function E(){for(var P=0,N=arguments.length;P<N;P++){var z=arguments[P];z&&m(this,z)}return this}return C(E,{inject:function(P){var N,z,j;P&&(N=P.statics===!0?P:P.statics,z=P.beans,j=P.preserve,N!==P&&C(this.prototype,P,P.enumerable,z,j),C(this,N,null,z,j));for(var G=1,K=arguments.length;G<K;G++)this.inject(arguments[G]);return this},extend:function(){for(var P,N,z,j=this,G=0,K=arguments.length;G<K&&(!P||!N);G++)z=arguments[G],P=P||z.initialize,N=N||z.prototype;return N=(P=P||function(){j.apply(this,arguments)}).prototype=N||l(this.prototype),f(N,"constructor",{value:P,writable:!0,configurable:!0}),C(P,this),arguments.length&&this.inject.apply(P,arguments),P.base=j,P}}).inject({enumerable:!1,initialize:E,set:E,inject:function(){for(var P=0,N=arguments.length;P<N;P++){var z=arguments[P];z&&C(this,z,z.enumerable,z.beans,z.preserve)}return this},extend:function(){var P=l(this);return P.inject.apply(P,arguments)},each:function(P,N){return e(this,P,N)},clone:function(){return new this.constructor(this)},statics:{set:m,each:e,create:l,define:f,describe:d,clone:function(P){return m(new P.constructor,P)},isPlainObject:function(P){return(P=P!=null&&P.constructor)&&(P===Object||P===E||P.name==="Object")},pick:function(P,N){return P!==O?P:N},slice:function(P,N,z){return r.call(P,N,z)}}})};y.exports=k,k.inject({enumerable:!1,toString:function(){return this._id!=null?(this._class||"Object")+(this._name?" '"+this._name+"'":" @"+this._id):"{ "+k.each(this,function(e,t){/^_/.test(t)||this.push(t+": "+((t=typeof e)=="number"?Qe.instance.number(e):t=="string"?"'"+e+"'":e))},[]).join(", ")+" }"},getClassName:function(){return this._class||""},importJSON:function(e){return k.importJSON(e,this)},exportJSON:function(e){return k.exportJSON(this,e)},toJSON:function(){return k.serialize(this)},set:function(e,t){return e&&k.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&&!k.exports[i]&&(k.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(!k.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)||!k.equals(e[l],t[l]))return!1}}return!0}return!1},read:function(e,t,i,r){if(this===k){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=k.create(d),f&&(t.__read=!0),t=t.initialize.apply(t,0<v||v+r<l?k.slice(e,v,v+r):e)||t,f&&(e.__index=v+t.__read,(v=t.__filtered)&&(e.__filtered=v,t.__filtered=O),t.__read=O),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),m=v!==O;return m&&((f=e.__filtered)||(d=this.getSource(e),(f=e.__filtered=k.create(d)).__unfiltered=d),f[t]=O),this.read(m?[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))!==O&&(t[d]=f),l=!0)}),l},getSource:function(e){var t,i=e.__source;return i===O&&(t=e.length===1&&e[0],i=e.__source=t&&k.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(E){var P;i&&E in i||l&&E in l||(P=t[E])!==O&&(e[E]=P)}if(r){for(var f,v={},m=0,C=r.length;m<C;m++)(f=r[m])in t&&(d(f),v[f]=!0);l=v}return Object.keys(t.__unfiltered||t).forEach(d),e},isPlainValue:function(e,t){return k.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 Qe(t.precision),r={length:0,definitions:{},references:{},add:function(P,N){var z="#"+P._id,j=this.references[z];return j||(this.length++,N=N.call(P),(P=P._class)&&N[0]!==P&&N.unshift(P),this.definitions[z]=N,j=this.references[z]=[z]),j}}),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,m=e.length;v<m;v++)d[v]=k.serialize(e[v],t,i,r)}else if(k.isPlainObject(e)){d={};var C=Object.keys(e);for(v=0,m=C.length;v<m;v++){var E=C[v];d[E]=k.serialize(e[E],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 m=e[0],C=m==="dictionary";if(e.length==1&&/^#/.test(m))return i.dictionary[m];d=[];for(var E,P=(m=k.exports[m])?1:0,N=e.length;P<N;P++)d.push(k.deserialize(e[P],t,i,C,v));m&&(E=d,d=t?t(m,E,f||l):new m(E))}else if(k.isPlainObject(e))for(var z in d={},r&&(i.dictionary=d),e)d[z]=k.deserialize(e[z],t,i);return v?d[1]:d},exportJSON:function(e,t){return e=k.serialize(e,t),t&&t.asString==0?e:JSON.stringify(e)},importJSON:function(e,t){return k.deserialize(typeof e=="string"?JSON.parse(e):e,function(i,r,l){var d=l&&t&&t.constructor===i,f=d?t:k.create(i.prototype);return!(r.length===1&&f instanceof dt)||!d&&f instanceof Vt||(l=r[0],k.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===O;(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 k.push(e,t),[];r=[i,r],t&&k.push(r,t);for(var v=e.splice.apply(e,r),m=(f=0,v.length);f<m;f++)v[f]._index=O;for(f=i+l,m=e.length;f<m;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 ee={on:function(e,t){var i,r;return typeof e!="string"?k.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}k.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=k.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={},k.each(r,function(l,d){var f=typeof l=="string",v=f?l:d,m=(d=k.capitalize(v),v.substring(2).toLowerCase());i[m]=f?{}:l,v="_"+v,t["get"+d]=function(){return this[v]},t["set"+d]=function(C){var E=this[v];E&&this.off(m,E),C&&this.on(m,C),this[v]=C}}),t._eventTypes=i),e.base.apply(this,arguments)}}},_e=k.extend({_class:"PaperScope",initialize:function e(){(Ut=this).settings=new k({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=Re.getContext(1,1)||{},l.support={nativeDash:"setLineDash"in i||"mozDash"in i,nativeBlendModes:He.nativeModes},Re.release(i)),this.agent||(t=B.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,m,C){r.chrome||(v=f==="opera"?m:/^(node|trident)$/.test(f)?C: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 k.each(["project","view","tool"],function(r){k.define(e,r,{configurable:!0,get:function(){return i[r]}})}),this)!/^_/.test(t)&&this[t]&&(e[t]=this[t])},setup:function(e){return(Ut=this).project=new Ft(e),this},createCanvas:function(e,t){return Re.getCanvas(e,t)},activate:function(){Ut=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 _e._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")}}}),be=k.extend(ee,{initialize:function(e){this._scope=Ut,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&&(k.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()}}),lt={findItemBoundsCollisions:function(e,t,i){function r(d){for(var f=new Array(d.length),v=0;v<d.length;v++){var m=d[v].getBounds();f[v]=[m.left,m.top,m.right,m.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(P){for(var N=Math.min,z=Math.max,j=new Array(P.length),G=0;G<P.length;G++){var K=P[G];j[G]=[N(K[0],K[2],K[4],K[6]),N(K[1],K[3],K[5],K[7]),z(K[0],K[2],K[4],K[6]),z(K[1],K[3],K[5],K[7])]}return j}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),m=[],C=0,E=f.length;C<E;C++)m[C]={hor:f[C],ver:v[C]};return m}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,m=f.length;function C(nt,ct,ft){for(var F=0,s=nt.length;F<s;){var c=s+F>>>1;f[nt[c]][ct]<ft?F=1+c:s=c}return F-1}for(var E=r?1:0,P=2+E,N=r?0:1,z=2+N,j=new Array(m),G=0;G<m;G++)j[G]=G;j.sort(function(nt,ct){return f[nt][E]-f[ct][E]});var K=[],U=new Array(v);for(G=0;G<m;G++){var Z=j[G],te=f[Z],oe=d?Z:Z-v,he=Z<v,ce=d||!he,Ce=he?[]:null;if(K.length){var Te=C(K,P,te[E]-i)+1;if(K.splice(0,Te),d&&l){Ce=Ce.concat(K);for(var Ae=0;Ae<K.length;Ae++)U[ae=K[Ae]].push(oe)}else{var Fe=te[z],xe=te[N];for(Ae=0;Ae<K.length;Ae++){var ae=K[Ae],fe=f[ae],Ve=ae<v,Pe=d||v<=ae;(l||(he&&Pe||ce&&Ve)&&Fe>=fe[N]-i&&xe<=fe[z]+i)&&(he&&Pe&&Ce.push(d?ae:ae-v),ce&&Ve&&U[ae].push(oe))}}}he&&(e===t&&Ce.push(Z),U[Z]=Ce),K.length?(te=C(K,P,te[P]),K.splice(te+1,0,Z)):K.push(Z)}for(G=0;G<U.length;G++){var Ze=U[G];Ze&&Ze.sort(function(nt,ct){return nt-ct})}return U}},Qe=k.extend({initialize:function(e){this.precision=k.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)}});Qe.instance=new Qe;var Xe=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(P){return Math.log(P)*Math.LOG2E},f=1e-12,v=112e-18;function m(P,N,z){return P<N?N:z<P?z:P}function C(P,N,z){function j(te){var oe;return[oe=te-(oe=134217729*te)+oe,te-oe]}var G,K,U=N*N-P*z,Z=N*N+P*z;return 3*i(U)<Z&&(G=j(P),K=j(N),Z=j(z),U=(N*=N)-(z*=P)+(K[0]*K[0]-N+2*K[0]*K[1]+K[1]*K[1]-(G[0]*Z[0]-z+G[0]*Z[1]+G[1]*Z[0]+G[1]*Z[1]))),U}function E(){var P=Math.max.apply(Math,arguments);return P&&(P<1e-8||1e8<P)?l(2,-Math.round(d(P))):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(P){return-f<=P&&P<=f},isMachineZero:function(P){return-v<=P&&P<=v},clamp:m,integrate:function(P,N,z,j){for(var G=e[j-2],K=t[j-2],U=.5*(z-N),Z=U+N,te=0,oe=j+1>>1,he=1&j?K[te++]*P(Z):0;te<oe;){var ce=U*G[te];he+=K[te++]*(P(Z+ce)+P(Z-ce))}return U*he},findRoot:function(P,N,z,j,G,K,U){for(var Z=0;Z<K;Z++){var te=P(z),oe=te/N(z),he=z-oe;if(i(oe)<U){z=he;break}z=0<te?(G=z,he<=j?.5*(j+G):he):(j=z,G<=he?.5*(j+G):he)}return m(z,j,G)},solveQuadratic:function(P,N,z,j,G,K){var U,Z=1/0;if(i(P)<f){if(i(N)<f)return i(z)<f?-1:0;U=-z/N}else{var te,oe=C(P,N*=-.5,z);oe&&i(oe)<v&&(te=E(i(P),i(N),i(z)))&&(oe=C(P*=te,N*=te,z*=te)),-v<=oe&&(he=oe<0?0:r(oe),Z=(ce=N+(N<0?-he:he))===0?-(U=z/P):(U=ce/P,z/ce))}var he=0,ce=(P=G==null,z=G-f,K+f);return isFinite(U)&&(P||z<U&&U<ce)&&(j[he++]=P?U:m(U,G,K)),Z!==U&&isFinite(Z)&&(P||z<Z&&Z<ce)&&(j[he++]=P?Z:m(Z,G,K)),he},solveCubic:function(P,N,z,j,G,K,U){var Z,te,oe,he,ce,Ce=E(i(P),i(N),i(z),i(j));function Te(fe){fe=P*(Z=fe),he=(fe+(te=fe+N))*Z+(oe=te*Z+z),ce=oe*Z+j}if(Ce&&(P*=Ce,N*=Ce,z*=Ce,j*=Ce),i(P)<f)P=N,te=z,oe=j,Z=1/0;else if(i(j)<f)te=N,oe=z,Z=0;else{Te(-N/P/3);var Ae=l(i(xe=ce/P),1/3),Fe=xe<0?-1:1,xe=0<(xe=-he/P)?1.324717957244746*Math.max(Ae,r(xe)):Ae,ae=Z-Fe*xe;if(ae!==Z){for(;Te(ae),Fe*Z<Fe*(ae=he===0?Z:Z-ce/he/(1+v)););i(P)*Z*Z>i(j/Z)&&(te=((oe=-j/Z)-z)/Z)}}return Ae=Xe.solveQuadratic(P,te,oe,G,K,U),xe=K==null,isFinite(Z)&&(Ae===0||0<Ae&&Z!==G[0]&&Z!==G[1])&&(xe||K-f<Z&&Z<U+f)&&(G[Ae++]=xe?Z:m(Z,K,U)),Ae}}},bt={_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++}},$=k.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 $(this.x,this.y)},toString:function(){var e=Qe.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(),Xe.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=$.read(arguments),t=this.getLength()*e.getLength();return Xe.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=$.read(arguments);return 180*Math.atan2(this.cross(e),this.dot(e))/Math.PI},getDistance:function(){var e=arguments,t=(i=$.read(e)).x-this.x,i=t*t+(i=i.y-this.y)*i;return k.read(e)?i:Math.sqrt(i)},normalize:function(e){e===O&&(e=1),e=(t=this.getLength())!==0?e/t:0;var t=new $(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 $(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=$.read(arguments);return new $(this.x+e.x,this.y+e.y)},subtract:function(){var e=$.read(arguments);return new $(this.x-e.x,this.y-e.y)},multiply:function(){var e=$.read(arguments);return new $(this.x*e.x,this.y*e.y)},divide:function(){var e=$.read(arguments);return new $(this.x/e.x,this.y/e.y)},modulo:function(){var e=$.read(arguments);return new $(this.x%e.x,this.y%e.y)},negate:function(){return new $(-this.x,-this.y)},isInside:function(){return De.read(arguments).contains(this)},isClose:function(){var e=arguments,t=$.read(e);return e=k.read(e),this.getDistance(t)<=e},isCollinear:function(){var e=$.read(arguments);return $.isCollinear(this.x,this.y,e.x,e.y)},isColinear:"#isCollinear",isOrthogonal:function(){var e=$.read(arguments);return $.isOrthogonal(this.x,this.y,e.x,e.y)},isZero:function(){var e=Xe.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=$.read(arguments);return this.x*e.x+this.y*e.y},cross:function(){var e=$.read(arguments);return this.x*e.y-this.y*e.x},project:function(){var e=$.read(arguments),t=e.isZero()?0:this.dot(e)/e.dot(e);return new $(e.x*t,e.y*t)},statics:{min:function(){var e=arguments,t=$.read(e);return e=$.read(e),new $(Math.min(t.x,e.x),Math.min(t.y,e.y))},max:function(){var e=arguments,t=$.read(e);return e=$.read(e),new $(Math.max(t.x,e.x),Math.max(t.y,e.y))},random:function(){return new $(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))}}},k.each(["round","ceil","floor","abs"],function(e){var t=Math[e];this[e]=function(){return new $(t(this.x),t(this.y))}},{})),At=$.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}}),$e=k.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 $e(this.width,this.height)},toString:function(){var e=Qe.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=$e.read(arguments);return new $e(this.width+e.width,this.height+e.height)},subtract:function(){var e=$e.read(arguments);return new $e(this.width-e.width,this.height-e.height)},multiply:function(){var e=$e.read(arguments);return new $e(this.width*e.width,this.height*e.height)},divide:function(){var e=$e.read(arguments);return new $e(this.width/e.width,this.height/e.height)},modulo:function(){var e=$e.read(arguments);return new $e(this.width%e.width,this.height%e.height)},negate:function(){return new $e(-this.width,-this.height)},isZero:function(){var e=Xe.isZero;return e(this.width)&&e(this.height)},isNaN:function(){return isNaN(this.width)||isNaN(this.height)},statics:{min:function(e,t){return new $e(Math.min(e.width,t.width),Math.min(e.height,t.height))},max:function(e,t){return new $e(Math.max(e.width,t.width),Math.max(e.height,t.height))},random:function(){return new $e(Math.random(),Math.random())}}},k.each(["round","ceil","floor","abs"],function(e){var t=Math[e];this[e]=function(){return new $e(t(this.width),t(this.height))}},{})),Tt=$e.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)}}),De=k.extend({_class:"Rectangle",_readIndex:!0,beans:!0,initialize:function(e,t,i,r){var l,d,f,v,m,C,E=arguments,P=typeof e;return P=="number"?(this._set(e,t,i,r),l=4):P=="undefined"||e===null?(this._set(0,0,0,0),l=e===null?1:0):E.length===1&&(Array.isArray(e)?(this._set.apply(this,e),l=1):e.x!==O||e.width!==O?(this._set(e.x||0,e.y||0,e.width||0,e.height||0),l=1):e.from===O&&e.to===O&&(this._set(0,0,0,0),k.readSupported(E,this)&&(l=1))),l===O&&(f=$.readNamed(E,"from"),d=k.peek(E),P=f.x,f=f.y,d&&d.x!==O||k.hasNamed(E,"to")?(v=(C=$.readNamed(E,"to")).x-P,m=C.y-f,v<0&&(P=C.x,v=-v),m<0&&(f=C.y,m=-m)):(v=(C=$e.read(E)).width,m=C.height),this._set(P,f,v,m),l=E.__index),(E=E.__filtered)&&(this.__filtered=E),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 De(this.x,this.y,this.width,this.height)},equals:function(e){var t=k.isPlainValue(e)?De.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=Qe.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?$:At)(this.x,this.y,this,"setPoint")},setPoint:function(){var e=$.read(arguments);this.x=e.x,this.y=e.y},getSize:function(e){return new(e?$e:Tt)(this.width,this.height,this,"setSize")},_fw:1,_fh:1,setSize:function(){var e=$e.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?$:At)(this.getCenterX(),this.getCenterY(),this,"setCenter")},setCenter:function(){var e=$.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!==O||(Array.isArray(e)?e:arguments).length===4?this._containsRectangle(De.read(arguments)):this._containsPoint($.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=De.read(arguments),t=k.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=De.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 De(t,i,r-t,e-i)},unite:function(){var e=De.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 De(t,i,r-t,e-i)},include:function(){var e=$.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 De(t,i,r-t,e-i)},expand:function(){var e=(t=$e.read(arguments)).width,t=t.height;return new De(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===O?e:t)-this.height)}},k.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,m="set"+i;this["get"+i]=function(C){return new(C?$:At)(this[l](),this[d](),this,m)},this[m]=function(){var C=$.read(arguments);this[f](C.x),this[v](C.y)}},{beans:!0})),Mt=De.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=De.prototype;return k.each(["x","y","width","height"],function(t){var i=k.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)}},k.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)}}))}),_t=k.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 k.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 _t(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=Qe.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,k.pick(e,!0),t),this.isIdentity())},translate:function(){var e=(t=$.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=$.read(e);return(e=$.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=(m=$.read(arguments,1)).x,i=m.y,r=Math.cos(e),l=Math.sin(e),d=t-t*r+i*l,f=i-t*l-i*r,v=this._a,m=this._b;return t=this._c,i=this._d,this._a=r*v+l*t,this._b=r*m+l*i,this._c=-l*v+r*t,this._d=-l*m+r*i,this._tx+=d*v+f*t,this._ty+=d*m+f*i,this._changed(),this},shear:function(){var e=arguments,t=$.read(e),i=$.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=$.read(e),i=$.read(e,0,{readNull:!0});return e=Math.PI/180,e=new $(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,m,C,E;return e&&(i=this._a,r=this._b,l=this._c,d=this._d,f=e._a,v=e._c,m=e._b,C=e._d,E=e._tx,e=e._ty,this._a=f*i+m*l,this._c=v*i+C*l,this._b=f*r+m*d,this._d=v*r+C*d,this._tx+=E*i+e*l,this._ty+=E*r+e*d,t||this._changed()),this},prepend:function(e,t){var i,r,l,d,f,v,m,C,E,P,N;return e&&(i=this._a,r=this._b,l=this._c,d=this._d,f=this._tx,v=this._ty,m=e._a,C=e._c,E=e._b,P=e._d,N=e._tx,e=e._ty,this._a=m*i+C*r,this._c=m*l+C*d,this._b=E*i+P*r,this._d=E*l+P*d,this._tx=m*f+C*v+N,this._ty=E*f+P*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 _t(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($.read(arguments)):this._transformCoordinates(e,t,i)},_transformPoint:function(e,t,i){var r=e.x;return e=e.y,(t=t||new $)._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],m=1&f;v<l[m]?l[m]=v:v>d[m]&&(d[m]=v)}return(t=t||new De)._set(l[0],l[1],d[0]-l[0],d[1]-l[1],i)},inverseTransform:function(){return this._inverseTransform($.read(arguments))},_inverseTransform:function(e,t,i){var r=this._a,l=this._b,d=this._c,f=this._d,v=this._tx,m=this._ty,C=r*f-l*d,E=null;return C&&!isNaN(C)&&isFinite(v)&&isFinite(m)&&(m=e.x-this._tx,e=e.y-this._ty,E=(t=t||new $)._set((m*f-e*d)/C,(e*r-m*l)/C,i)),E},decompose:function(){var e,t,i,r,l=this._a,d=this._b,f=this._c,v=this._d,m=l*v-d*f,C=Math.sqrt,E=Math.atan2,P=180/Math.PI;return r=l!==0||d!==0?(e=C(l*l+d*d),t=Math.acos(l/e)*(0<d?1:-1),i=[e,m/e],[E(l*f+d*v,e*e),0]):f!==0||v!==0?(r=C(f*f+v*v),t=Math.asin(f/r)*(0<v?1:-1),i=[m/r,r],[0,E(l*f+d*v,r*r)]):i=[t=0,0],{translation:this.getTranslation(),rotation:t*P,scaling:new $(i),skewing:new $(r[0]*P,r[1]*P)}},getValues:function(){return[this._a,this._b,this._c,this._d,this._tx,this._ty]},getTranslation:function(){return new $(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)}},k.each(["a","b","c","d","tx","ty"],function(e){var t=k.capitalize(e),i="_"+e;this["get"+t]=function(){return this[i]},this["set"+t]=function(r){this[i]=r,this._changed()}},{})),gt=k.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 $(this._px,this._py)},getVector:function(){return new $(this._vx,this._vy)},getLength:function(){return this.getVector().getLength()},intersect:function(e,t){return gt.intersect(this._px,this._py,this._vx,this._vy,e._px,e._py,e._vx,e._vy,!0,t)},getSide:function(e,t){return gt.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 gt.getSignedDistance(this._px,this._py,this._vx,this._vy,e.x,e.y,!0)},isCollinear:function(e){return $.isCollinear(this._vx,this._vy,e._vx,e._vy)},isOrthogonal:function(e){return $.isOrthogonal(this._vx,this._vy,e._vx,e._vy)},statics:{intersect:function(e,t,i,r,l,d,f,v,m,C){if(m||(i-=e,r-=t,f-=l,v-=d),m=i*v-r*f,!Xe.isMachineZero(m)&&(v=(f*(d=t-d)-v*(l=e-l))/m,m=(i*d-r*l)/m,C||-1e-12<v&&v<1+1e-12&&-1e-12<m&&m<1+1e-12))return new $(e+(v=C?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&&Xe.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(gt.getSignedDistance(e,t,i,r,l,d,f))}}}),Ft=be.extend({_class:"Project",_list:"projects",_reference:"project",_compactSerialize:!0,initialize:function(e){be.call(this,!0),this._children=[],this._namedChildren={},this._activeLayer=null,this._currentStyle=new pe(null,null,this),this._view=T.create(this,e||Re.getCanvas(1,1)),this._selectionItems={},this._selectionCount=0,this._updateVersion=0},_serialize:function(e,t){return k.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 Vt({project:this,insert:!0})},getSymbolDefinitions:function(){var e=[],t={};return this.getItems({class:zt,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(O,e)},insertLayer:function(e,t){return t instanceof Vt?(t._remove(!1,!0),k.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(O,new Vt(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 k.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 k({offset:new $(0,0),pixelRatio:i,viewMatrix:t.isIdentity()?null:t,matrices:[new _t],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,m=this._selectionItems,C=this._scope.settings.handleSize,E=this._updateVersion;for(v in m)m[v]._drawSelection(e,t,C,m,E);e.restore()}}}),dt=k.extend(ee,{statics:{extend:function e(t){return t._serializeFields&&(t._serializeFields=k.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 _t,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 k.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&&k.isPlainObject(e),r=i&&e.internal===!0,l=this._matrix=new _t,d=i&&e.project||Ut.project,f=Ut.settings;return this._id=r?null:bt.get(),this._parent=this._index=null,this._applyMatrix=this._canApplyMatrix&&f.applyMatrix,t&&l.translate(t),(l._owner=this)._style=new pe(d._currentStyle,this,d),r||i&&e.insert==0||!f.insertItems&&(!i||e.insert!=1)?this._setProject(d):(i&&e.parent||d)._insertItem(O,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];k.equals(v,f==="leading"?1.2*d.fontSize:d[f])||(i[f]=k.serialize(v,e,f!=="data",t))}}return l(this._serializeFields),this instanceof Nt||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=O),16&e&&(this._globalMatrix=O),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||O,this._changed(256)},getStyle:function(){return this._style},setStyle:function(e){this.getStyle().set(e)}},k.each(["locked","visible","blendMode","opacity","guide"],function(e){var t=k.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?$:At)((e=this._position||(this._position=this._getPositionFromBounds())).x,e.y,this,"setPosition")},setPosition:function(){this.translate($.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 At(e.x,e.y,this,"setPivot"):null},setPivot:function(){this._pivot=$.read(arguments,0,{clone:!0,readNull:!0}),this._position=O}},k.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 _t,r=k.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 Mt(r.x,r.y,r.width,r.height,this,"setBounds")},setBounds:function(){var e=De.read(arguments),t=this.getBounds(),i=this._matrix,r=new _t,l=e.getCenter();r.translate(l),e.width==t.width&&e.height==t.height||(i.isInvertible()||(i.set(i._backup||new _t().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 De},_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=O;for(var i=0,r=t.list,l=r.length;i<l;i++){var d=r[i];d!==e&&(d._bounds=d._position=O,d._boundsCache&&dt._clearBoundsCache(d))}}},_getBounds:function(e,t,i){var r=C=1/0,l=E=-C,d=!1;i=i||{};for(var f=0,v=e.length;f<v;f++){var m,C,E,P=e[f];P._visible&&!P.isEmpty(!0)&&(P=(m=P._getCachedBounds(t&&t.appended(P._matrix),i,!0)).rect,C=Math.min(P.x,C),r=Math.min(P.y,r),E=Math.max(P.x+P.width,E),l=Math.max(P.y+P.height,l),m.nonscaling&&(d=!0))}return{rect:isFinite(C)?new De(C,r,E-C,l-r):new De,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 At(e?e.x:1,e?e.y:1,this,"setScaling")},setScaling:function(){var e,t,i,r,l=this.getScaling(),d=$.read(arguments,0,{clone:!0,readNull:!0});l&&d&&!l.equals(d)&&(e=this.getRotation(),t=this._decomposed,i=new _t,(r=Xe.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 Vt)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 k.equals(this._children,e._children)},clone:function(e){var t=new this.constructor(dt.NO_INSERT),i=this._children,r=k.pick(e?e.insert:O,e===O||e===!0);e=k.pick(e?e.deep:O,!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?k.clone(f):null,t&&this.setName(t)},rasterize:function(e,t){var i;k.isPlainObject(e)?(f=e.resolution,i=e.insert,r=e.raster):(f=e,i=t);var r=r||new ni(dt.NO_INSERT),l=this.getStrokeBounds(),d=(f||this.getView().getResolution())/72,f=(e=l.getTopLeft().floor(),t=l.getBottomRight().ceil(),new $e(t.subtract(e)));return l=f.multiply(d),r.setSize(l,!0),l.isZero()||(t=r.getContext(!0),l=new _t().scale(d).translate(e.negate()),t.save(),l.applyToContext(t),this.draw(t,new k({matrices:[l]})),t.restore()),r._matrix.set(new _t().translate(e.add(f.divide(2))).scale(1/d)),i!==O&&!i||r.insertAbove(this),r},contains:function(){var e=this._matrix;return e.isInvertible()&&!!this._contains(e._inverseTransform($.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 De.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($.read(r),ri.getOptions(r))}function t(){var r=arguments,l=$.read(r),d=ri.getOptions(r);return r=[],this._hitTest(l,new k({all:r},d)),r}function i(r,l,d,f){var v=this._children;if(v)for(var m=v.length-1;0<=m;m--){var C;if((C=(C=v[m])!==f&&C._hitTest(r,l,d))&&!l.all)return C}return null}return Ft.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 $e(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,m,C=!(t.guides&&!this._guide||t.selected&&!this.isSelected()||t.type&&t.type!==k.hyphenate(this._class)||t.class&&!(this instanceof t.class)),E=t.match,P=this;function N(U){return(U=U&&E&&!E(U)?null:U)&&t.all&&t.all.push(U),U}function z(U,Z){var te=Z?v["get"+Z]():P.getPosition();if(e.subtract(te).divide(f).length<=1)return new ri(U,P,{name:Z?k.hyphenate(Z):U,point:te})}var j=t.position;if(i=t.center,d=t.bounds,C&&this._parent&&(j||i||d)){if((i||d)&&(v=this.getInternalBounds()),!(m=j&&z("position")||i&&z("center","Center"))&&d)for(var G=["TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],K=0;K<8&&!m;K++)m=z("bounds",G[K]);m=N(m)}return(m=m||this._hitTestChildren(e,t,l)||C&&N(this._hitTestSelf(e,t,l,this.getStrokeScaling()?null:l._shiftless().invert()))||null)&&m.point&&(m.point=r.transform(m.point)),m},_hitTestSelf:function(e,t){if(t.fill&&this.hasFill()&&this._contains(e))return new ri("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"+k.capitalize(e)]():e==="type"?k.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(k.isPlainObject(t))return function l(d,f){for(var v in d)if(d.hasOwnProperty(v)){var m=d[v];if(v=f[v],k.isPlainObject(m)&&k.isPlainObject(v)){if(!l(m,v))return!1}else if(!k.equals(m,v))return!1}return!0}(t,i)}return k.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,m;l||(v=(f=typeof i=="object"&&i)&&f.overlapping,m=f&&f.inside,C=(U=v||m)&&De.read([U]),l={items:[],recursive:f&&f.recursive!==!1,inside:!!m,overlapping:!!v,rect:C,path:v&&new St.Rectangle({rectangle:C,insert:!1})},f&&(i=k.filter({},i,{recursive:!0,inside:!0,overlapping:!0})));var C,E=t._children,P=l.items;r=(C=l.rect)&&(r||new _t);for(var N=0,z=E&&E.length;N<z;N++){var j=E[N],G=r&&r.appended(j._matrix),K=!0;if(C){var U=j.getBounds(G);if(!C.intersects(U))continue;C.contains(U)||l.overlapping&&(U.contains(C)||l.path.intersects(j,G))||(K=!1)}if(K&&j.matches(i)&&(P.push(j),d)||(l.recursive!==!1&&e(j,i,G,l,d),d&&0<P.length))break}return P}}},{importJSON:function(e){return(e=k.importJSON(e,this))!==this?this.addChild(e):e},addChild:function(e){return this.insertChild(O,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=k.slice(t)).length-1;0<=l;l--){var d=(C=t[l])&&C._id;!C||r[d]?t.splice(l,1):(C._remove(!1,!0),r[d]=!0)}k.splice(i,t,e,0);for(var f=this._project,v=f._changes,m=(l=0,t.length);l<m;l++){var C,E=(C=t[l])._name;C._parent=this,C._setProject(f,!0),E&&C.setName(E),v&&C._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(O,this):null},appendTop:"#addChild",appendBottom:function(e){return this.insertChild(0,e)},moveAbove:"#insertAbove",moveBelow:"#insertBelow",addTo:function(e){return e._insertItem(O,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()),k.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=k.pick(t,this._children.length);for(var i=k.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}},k.each(["rotate","scale","shear","skew"],function(e){var t=e==="rotate";this[e]=function(){var i=arguments,r=(t?k:$).read(i);return i=$.read(i,0,{readNull:!0}),this.transform(new _t()[e](r,i||this.getPosition(!0)))}},{translate:function(){var e=new _t;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 m=this._bounds;if(d=this._position,(f||v)&&this._changed(25),(i=f&&m&&e.decompose())&&i.skewing.isZero()&&i.rotation%90==0){for(var C in m){var E=m[C];E.nonscaling?delete m[C]:!v&&E.internal||(E=E.rect,e._transformBounds(E,E))}(i=(this._bounds=m)[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($.read(arguments))},localToGlobal:function(){return this.getGlobalMatrix(!0)._transformPoint($.read(arguments))},parentToLocal:function(){return this._matrix._inverseTransform($.read(arguments))},localToParent:function(){return this._matrix._transformPoint($.read(arguments))},fitBounds:function(e,t){e=De.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 De(new $,new $e(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),Ut.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 _t().scale(t,t))).transform(new $(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((j=r[r.length-1].appended(d)).isInvertible()){l=l?l.appended(j):j,r.push(j),t.updateMatrix&&(this._globalMatrix=j);var f,v,m,C=this._blendMode,E=Xe.clamp(this._opacity,0,1),P=C==="normal",N=He.nativeModes[C],z=P&&E===1||t.dontStart||t.clip||(N||P&&E<1)&&this._canComposite(),j=t.pixelRatio||1;if(!z){var G=this.getStrokeBounds(l);if(!G.width||!G.height)return void r.pop();m=t.offset,v=t.offset=G.getTopLeft().floor(),f=e,e=Re.getContext(G.getSize().ceil().add(1).multiply(j)),j!==1&&e.scale(j,j)}e.save(),P=i?i.appended(d):this._canScaleStroke&&!this.getStrokeScaling(!0)&&l,G=!z&&t.clipItem,i=!P||G,z?(e.globalAlpha=E,N&&(e.globalCompositeOperation=C)):i&&e.translate(-v.x,-v.y),i&&(z?d:l).applyToContext(e),G&&t.clipItem.draw(e,t.extend({clip:!0})),P&&(e.setTransform(j,0,0,j,0,0),(G=t.offset)&&e.translate(-G.x,-G.y)),this._draw(e,t,l,P),e.restore(),r.pop(),t.clip&&!t.dontFinish&&e.clip(this.getFillRule()),z||(He.process(C,e,f,E,v.subtract(m).multiply(j)),Re.release(e),t.offset=m)}}},_isUpdated:function(e){var t=this._parent;if(t instanceof qt)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 m=this.getSelectedColor(!0)||(m=this.getLayer())&&m.getSelectedColor(!0),C=(t=t.appended(this.getGlobalMatrix(!0)),i/2);if(e.strokeStyle=e.fillStyle=m?m.toCanvasStyle(e):"#009dec",d&&this._drawSelected(e,t,r),v){r=this.getPosition(!0);var E=(r=(v=this._parent)?v.localToGlobal(r):r).x,P=r.y;e.beginPath(),e.arc(E,P,C,0,2*Math.PI,!0),e.stroke();for(var N=[[0,-1],[1,0],[0,1],[-1,0]],z=C,j=i+1,G=0;G<4;G++){var K=(U=N[G])[0],U=U[1];e.moveTo(E+K*z,P+U*z),e.lineTo(E+K*j,P+U*j),e.stroke()}}if(f){var Z=t._transformCorners(this.getInternalBounds());for(e.beginPath(),G=0;G<8;G++)e[G?"lineTo":"moveTo"](Z[G],Z[++G]);for(e.closePath(),e.stroke(),G=0;G<8;G++)e.fillRect(Z[G]-C,Z[++G]-C,i,i)}}},_canComposite:function(){return!1}},k.each(["down","drag","up","move"],function(e){this["removeOn"+k.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 Me(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)}}),Nt=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=O)},_getClipItem:function(){if((e=this._clipItem)===O){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),k.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)}}}),Vt=Nt.extend({_class:"Layer",initialize:function(){Nt.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(){}}),Wt=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)&&k.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 Tt(e.width,e.height,this,"setSize")},setSize:function(){var e,t,i,r=$e.read(arguments);this._size?this._size.equals(r)||(e=this._type,t=r.width,i=r.height,e==="rectangle"?this._radius.set($e.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 Tt(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=$e.read(arguments),this._radius){if(this._radius.equals(e))return;this._radius.set(e),t==="rectangle"?(i=$e.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[k.capitalize(this._type)]({center:new $,size:this._size,radius:this._radius,insert:!1});return t.copyAttributes(this),Ut.settings.applyMatrix&&t.setApplyMatrix(!0),e!==O&&!e||t.insertAbove(this),t},toShape:"#clone",_asPathItem:function(){return this.toPath(!1)},_draw:function(e,t,i,r){var l,d,f,v,m,C=this._style,E=C.hasFill(),P=C.hasStroke(),N=t.dontFinish||t.clip,z=!r;(E||P||N)&&(f=this._type,v=this._radius,m=f==="circle",t.dontStart||e.beginPath(),z&&m?e.arc(0,0,v,0,2*Math.PI,!0):(l=m?v:v.width,d=m?v:v.height,v=(m=this._size).width,m=m.height,z&&f==="rectangle"&&l===0&&d===0?e.rect(-v/2,-m/2,v,m):(m=[-(z=v/2),-(f=m/2)+d,-z,(m=d*(v=.44771525016920644))-f,(v*=l)-z,-f,-z+l,-f,z-l,-f,z-v,-f,z,m-f,z,-f+d,z,f-d,z,f-m,z-v,f,z-l,f,-z+l,f,v-z,f,-z,f-m,-z,f-d],r&&r.transform(m,m,32),e.moveTo(m[0],m[1]),e.bezierCurveTo(m[2],m[3],m[4],m[5],m[6],m[7]),z!==l&&e.lineTo(m[8],m[9]),e.bezierCurveTo(m[10],m[11],m[12],m[13],m[14],m[15]),f!==d&&e.lineTo(m[16],m[17]),e.bezierCurveTo(m[18],m[19],m[20],m[21],m[22],m[23]),z!==l&&e.lineTo(m[24],m[25]),e.bezierCurveTo(m[26],m[27],m[28],m[29],m[30],m[31]))),e.closePath()),N||!E&&!P||(this._setStyles(e,t,i),E&&(e.fill(C.getFillRule()),e.shadowColor="rgba(0,0,0,0)"),P&&e.stroke())},_canComposite:function(){return!(this.hasFill()&&this.hasStroke())},_getBounds:function(e,t){var i=new De(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 m=new $(1<v&&v<4?-1:1,2<v?-1:1),C=m.multiply(f),E=C.subtract(m.multiply(d));if(new De(l?C.add(m.multiply(l)):C,E).contains(r))return{point:E,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,m,C,E=!1,P=this._style,N=l.stroke&&P.hasStroke(),z=l.fill&&P.hasFill();return(N||z)&&(m=this._type,v=this._radius,C=N?P.getStrokeWidth()/2:0,z=l._tolerancePadding.add(St._getStrokePadding(C,!P.getStrokeScaling()&&f)),E=m==="rectangle"?(P=e(this,r,C=z.multiply(2)))?t(r.subtract(P.point),v,z,P.quadrant):(P=(m=new De(this._size).setCenter(0,0)).expand(C),C=m.expand(C.negate()),P._containsPoint(r)&&!C._containsPoint(r)):t(r,v,z)),E?new ri(N?"stroke":"fill",this):i.base.apply(this,arguments)}}},{statics:new function(){function e(t,i,r,l,d){var f=k.create(Wt.prototype);return f._type=t,f._size=r,f._radius=l,f._initialize(k.getNamed(d),i),f}return{Circle:function(){var t=arguments,i=$.readNamed(t,"center"),r=k.readNamed(t,"radius");return e("circle",i,new $e(2*r),r,t)},Rectangle:function(){var t=arguments,i=De.readNamed(t,"rectangle"),r=$e.min($e.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=Wt._readEllipse(t),r=i.radius;return e("ellipse",i.center,r.multiply(2),r,t)},_readEllipse:function(t){var i,r;return r=k.hasNamed(t,"radius")?(i=$.readNamed(t,"center"),$e.readNamed(t,"radius")):(i=(r=De.readNamed(t,"rectangle")).getCenter(!0),r.getSize(!0).divide(2)),{center:i,radius:r}}}}}),ni=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!==O&&$.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=$e.read(arguments)).isZero()||(i=Re.getCanvas(r)))),i?this.setImage(i):this.setSource(e)),this._size||(this._size=new $e,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=Re.getCanvas(e._size)).getContext("2d").drawImage(i,0,0),this._setImage(t)),this._crossOrigin=e._crossOrigin},getSize:function(){var e=this._size;return new Tt(e?e.width:0,e?e.height:0,this,"setSize")},setSize:function(e,t){var i,r=$e.read(arguments);r.equals(this._size)?t&&this.clear():0<r.width&&0<r.height?(i=!t&&this.getElement(),this._setImage(Re.getCanvas(r)),i&&this.getContext(!0).drawImage(i,0,0,r.width,r.height)):(this._canvas&&Re.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 $(0,0).transform(e),i=new $(1,0).transform(e).subtract(t);return t=new $(0,1).transform(e).subtract(t),new $e(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)&&(Ut=l._scope,t.emit(d,new M(r)))}this._setImage(e),this._loaded?setTimeout(i,0):e&&je.add(e,{load:function(r){t._setImage(e),i(r)},error:i})},_setImage:function(e){this._canvas&&Re.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 $e(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=Re.getContext(this._size);try{this._image&&e.drawImage(this._image,0,0),this._canvas=e.canvas}catch{Re.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 B.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=De.read(arguments),t=Re.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=De.read(arguments),t=new ni(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=$.read(arguments,1);this.getContext(!0).drawImage(e,t.x,t.y)},getAverageColor:function(e){if(e?e instanceof oi?l=(r=e).getBounds():typeof e=="object"&&("width"in e?l=new De(e):"x"in e&&(l=new De(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=ni._sampleContext)?e.clearRect(0,0,33,33):e=ni._sampleContext=Re.getContext(new $e(32)),e.save(),(l=new _t().scale(t/l.width,i/l.height).translate(-l.x,-l.y)).applyToContext(e),r&&r.draw(e,new k({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,m=0,C=d.length;m<C;m+=4){var E=d[m+3];v+=E,E/=255,f[0]+=d[m]*E,f[1]+=d[m+1]*E,f[2]+=d[m+2]*E}for(m=0;m<3;m++)f[m]/=v;return v?It.read(f):null},getPixel:function(){var e=$.read(arguments);return e=this.getContext().getImageData(e.x,e.y,1,1).data,new It("rgb",[e[0]/255,e[1]/255,e[2]/255],e[3]/255)},setPixel:function(){var e,t=arguments,i=$.read(t),r=(e=It.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=$e.read(arguments);return this.getContext().createImageData(e.width,e.height)},getImageData:function(){var e=De.read(arguments);return e.isEmpty()&&(e=new De(this._size)),this.getContext().getImageData(e.x,e.y,e.width,e.height)},putImageData:function(e){var t=$.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 De(this._size).setCenter(0,0);return e?e._transformBounds(i):i},_hitTestSelf:function(e){if(this._contains(e)){var t=this;return new ri("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=Xe.clamp(this._opacity,0,1),this._setStyles(e,t,i),t=this._smoothing,Ie.setPrefixed(e,(i=t==="off")?"imageSmoothingEnabled":"imageSmoothingQuality",!i&&t),e.drawImage(r,-this._size.width/2,-this._size.height/2))},_canComposite:function(){return!0}}),zt=dt.extend({_class:"SymbolItem",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!0},_serializeFields:{symbol:null},initialize:function(e,t){this._initialize(e,t!==O&&$.read(arguments,1))||this.setDefinition(e instanceof yt?e:new yt(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)}}),yt=k.extend({_class:"SymbolDefinition",initialize:function(e,t){this._id=bt.get(),this.project=Ut.project,e&&this.setItem(e,t)},_serialize:function(e,t){return t.add(this,function(){return k.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 $),(e._symbol=this)._changed(9)},getDefinition:"#getItem",setDefinition:"#setItem",place:function(e){return new zt(this,e)},clone:function(){return new yt(this._item.clone(!1))},equals:function(e){return e===this||e&&this._item.equals(e._item)||!1}}),ri=k.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&&k.read(e),new k({type:null,tolerance:Ut.settings.hitTolerance,fill:!e,stroke:!e,segments:!e,handles:!1,ends:!1,position:!1,center:!1,bounds:!1,guides:!1,selected:!1},e)}}}),Ke=k.extend({_class:"Segment",beans:!0,_selection:0,initialize:function(e,t,i,r,l,d){var f,v,m,C,E=arguments.length;0<E&&(e==null||typeof e=="object"?C=E===1&&e&&"point"in e?(f=e.point,v=e.handleIn,m=e.handleOut,e.selection):(f=e,v=t,m=i,r):(f=[e,t],v=i!==O?[i,r]:null,m=l!==O?[l,d]:null)),new ei(f,this,"_point"),new ei(v,this,"_handleIn"),new ei(m,this,"_handleOut"),C&&this.setSelection(C)},_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),k.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($.read(arguments))},getHandleIn:function(){return this._handleIn},setHandleIn:function(){this._handleIn.set($.read(arguments))},getHandleOut:function(){return this._handleOut},setHandleOut:function(){this._handleOut.set($.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!==O?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 Dt(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(),m=(f||this)._point,C=this._point,E=(v||this)._point,P=m.getDistance(C);if(e=C.getDistance(E),l&&l!=="catmull-rom"){if(l!=="geometric")throw new Error("Smoothing method '"+l+"' not supported.");f&&v&&(r=m.subtract(E),l=(j=d===O?.4:d)*P/(P+e),t||this.setHandleIn(r.multiply(l)),i||this.setHandleOut(r.multiply(l-j)))}else{var N,z,j=d===O?.5:d;P=(d=Math.pow(P,j))*d,j=(e=Math.pow(e,j))*e,!t&&f&&(N=2*j+3*e*d+P,this.setHandleIn((z=3*e*(e+d))!=0?new $((j*m._x+N*C._x-P*E._x)/z-C._x,(j*m._y+N*C._y-P*E._y)/z-C._y):new $)),!i&&v&&(N=2*P+3*d*e+j,this.setHandleOut((z=3*d*(d+e))!=0?new $((P*E._x+N*C._x-j*m._x)/z-C._x,(P*E._y+N*C._y-j*m._y)/z-C._y):new $))}},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,m=2;return t[0]=f,t[1]=v,l&&(t[m++]=l._x+f,t[m++]=l._y+v),d&&(t[m++]=d._x+f,t[m++]=d._y+v),e&&(e._transformCoordinates(t,t,m/2),f=t[0],v=t[1],i?(r._x=f,r._y=v,m=2,l&&(l._x=t[m++]-f,l._y=t[m++]-v),d&&(d._x=t[m++]-f,d._y=t[m++]-v)):(l||(t[m++]=f,t[m++]=v),d||(t[m++]=f,t[m++]=v))),t}}),ei=$.extend({initialize:function(e,t,i){var r,l,d;e?(r=e[0])!==O?l=e[1]:((r=(d=e).x)===O&&(r=(d=$.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=Xe.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}}),Ye=k.extend({_class:"Curve",beans:!0,initialize:function(e,t,i,r,l,d,f,v){var m,C,E,P,N,z,j=arguments.length;j===3?(this._path=e,m=t,C=i):j?j===1?"segment1"in e?(m=new Ke(e.segment1),C=new Ke(e.segment2)):"point1"in e?(E=e.point1,N=e.handle1,z=e.handle2,P=e.point2):Array.isArray(e)&&(E=[e[0],e[1]],P=[e[6],e[7]],N=[e[2]-e[0],e[3]-e[1]],z=[e[4]-e[6],e[5]-e[7]]):j===2?(m=new Ke(e),C=new Ke(t)):j===4?(E=e,N=t,z=i,P=r):j===8&&(E=[e,t],P=[f,v],N=[i-e,r-t],z=[l-f,d-v]):(m=new Ke,C=new Ke),this._segment1=m||new Ke(E,null,N),this._segment2=C||new Ke(P,z,null)},_serialize:function(e,t){return k.serialize(this.hasHandles()?[this.getPoint1(),this.getHandle1(),this.getHandle2(),this.getPoint2()]:[this.getPoint1(),this.getPoint2()],e,!0,t)},_changed:function(){this._length=this._bounds=O},clone:function(){return new Ye(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 Ye.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($.read(arguments))},getPoint2:function(){return this._segment2._point},setPoint2:function(){this._segment2._point.set($.read(arguments))},getHandle1:function(){return this._segment1._handleOut},setHandle1:function(){this._segment1._handleOut.set($.read(arguments))},getHandle2:function(){return this._segment2._handleIn},setHandle2:function(){this._segment2._handleIn.set($.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 Ye.getValues(this._segment1,this._segment2,e)},getPoints:function(){for(var e=this.getValues(),t=[],i=0;i<8;i+=2)t.push(new $(e[i],e[i+1]));return t}},{getLength:function(){return this._length==null&&(this._length=Ye.getLength(this.getValues(),0,1)),this._length},getArea:function(){return Ye.getArea(this.getValues())},getLine:function(){return new gt(this._segment1._point,this._segment2._point)},getPart:function(e,t){return new Ye(Ye.getPart(this.getValues(),e,t))},getPartLength:function(e,t){return Ye.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,m=null;return 1e-8<=e&&e<=1-1e-8&&(i=(v=Ye.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 $(v,t),l&&new $(i[4]-v,i[5]-t),l&&new $(r[2]-v,r[3]-t)),m=e?(e.insert(d._index+1,t),this.getNext()):(this._segment2=t,this._changed(),new Ye(t,f))),m},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===O?.5:t?e:this.getTimeAt(e))},split:function(e,t){return this.splitAtTime(e===O?.5:t?e:this.getTimeAt(e))},reversed:function(){return new Ye(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],m=e[6],C=e[7],E=1-(t=t===O?.5:t),P=E*i+t*l,N=E*r+t*d,z=E*l+t*f,j=E*d+t*v;return l=E*v+t*C,d=E*P+t*z,v=E*z+t*(e=E*f+t*m),z=E*j+t*l,[[i,r,P,N,d,f=E*N+t*j,j=E*d+t*v,t=E*f+t*z],[j,t,v,z,e,l,m,C]]},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||Ye.isStraight(e)||!(r=Xe.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=Ye.subdivide(e,f),l.push(d[0]),1<r&&(f=(i[1]-f)/(1-f),d=Ye.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],m=e[t+4];return e=e[t+6],t=0,f<i&&e<i&&v<i&&m<i||i<f&&i<e&&i<v&&i<m?t:Xe.solveCubic(e-f-(e=3*(v-f))-(v=3*(m-v)-e),v,e,f-i,r,l,d)},getTimeOf:function(e,t){var i=new $(e[0],e[1]),r=new $(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=Ye.solveCubic(e,f,l[f],d,0,1),m=0;m<v;m++){var C=d[m];if(t.isClose(Ye.getPoint(e,C),1e-7))return C}return t.isClose(i,1e-7)?0:t.isClose(r,1e-7)?1:null},getNearestTime:function(e,t){if(Ye.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:Ye.getTimeOf(e,new $(i+f*l,r+f*d))}var v=1/0,m=0;function C(N){if(0<=N&&N<=1){var z=t.getDistance(Ye.getPoint(e,N),!0);return z<v?(v=z,m=N,1):void 0}}for(var E=0;E<=100;E++)C(E/100);for(var P=.005;1e-8<P;)C(m-P)||C(m+P)||(P/=2);return m},getPart:function(e,t,i){var r,l=i<t;return l&&(r=t,t=i,i=r),0<t&&(e=Ye.subdivide(e,t)[1]),i<1&&(e=Ye.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],m=e[6];return l=3*l-2*i-m,d=3*d-2*r-(e=e[7]),i=3*f-2*m-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++)Ye._addBounds(e[l],e[l+2],e[l+4],e[l+6],l,0,t,i,r);return new De(t[0],t[1],i[0]-t[0],i[1]-t[1])},_addBounds:function(e,t,i,r,l,d,f,v,m){function C(K,U){var Z=K-U;U=K+U,Z<f[l]&&(f[l]=Z),U>v[l]&&(v[l]=U)}var E=f[l]+(d/=2),P=v[l]-d;if(e<E||t<E||i<E||r<E||P<e||P<t||P<i||P<r)if(t<e!=t<r&&i<e!=i<r)C(e,0),C(r,0);else{var N=Xe.solveQuadratic(3*(t-i)-e+r,2*(e+i)-4*t,t-e,m);C(r,0);for(var z=0;z<N;z++){var j=m[z],G=1-j;1e-8<=j&&j<=1-1e-8&&C(G*G*G*e+3*G*G*j*t+3*G*j*j*i+j*j*j*r,d)}}}}},k.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()}},{}),k.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 gt(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 $(l,d),new $(i[2]-l,i[3]-d),new $(i[4]-f,i[5]-v),new $(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 Dt(this,e):null},getTimeAt:function(e,t){return Ye.getTimeAt(this.getValues(),e,t)},getParameterAt:"#getTimeAt",getTimesWithTangent:function(){var e=$.read(arguments);return e.isZero()?[]:Ye.getTimesWithTangent(this.getValues(),e)},getOffsetAtTime:function(e){return this.getPartLength(0,e)},getLocationOf:function(){return this.getLocationAtTime(this.getTimeOf($.read(arguments)))},getOffsetOf:function(){var e=this.getLocationOf.apply(this,arguments);return e?e.getOffset():null},getTimeOf:function(){return Ye.getTimeOf(this.getValues(),$.read(arguments))},getParameterOf:"#getTimeOf",getNearestLocation:function(){var e=$.read(arguments),t=this.getValues(),i=Ye.getNearestTime(t,e);return t=Ye.getPoint(t,i),new Dt(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 k.each(e,function(t){this[t+"At"]=function(i,r){var l=this.getValues();return Ye[t](l,r?i:Ye.getTimeAt(l,i))},this[t+"AtTime"]=function(i){return Ye[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],m=r[4],C=r[5],E=r[6],P=(r=r[7],9*(f-m)+3*(E-l)),N=6*(l+m)-12*f,z=3*(f-l),j=9*(v-C)+3*(r-d),G=6*(d+C)-12*v,K=3*(v-d);return function(U){var Z=(P*U+N)*U+z;return U=(j*U+G)*U+K,Math.sqrt(Z*Z+U*U)}}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],m=r[1],C=r[2],E=r[3],P=r[4],N=r[5],z=r[6],j=r[7];(he=Xe.isZero)(C-v)&&he(E-m)&&(C=v,E=m),he(P-z)&&he(N-j)&&(P=z,N=j);var G,K,U=3*(C-v),Z=3*(P-C)-U,te=z-v-U-Z,oe=3*(E-m),he=j-m-oe-(r=3*(N-E)-oe);return d===0?(G=l===0?v:l===1?z:((te*l+Z)*l+U)*l+v,K=l===0?m:l===1?j:((he*l+r)*l+oe)*l+m):(K=l<1e-8?(G=U,oe):1-1e-8<l?(G=3*(z-P),3*(j-N)):(G=(3*te*l+2*Z)*l+U,(3*he*l+2*r)*l+oe),f&&(G===0&&K===0&&(l<1e-8||1-1e-8<l)&&(G=P-C,K=N-E),(E=Math.sqrt(G*G+K*K))&&(G/=E,K/=E)),d===3&&(P=6*te*l+2*Z,N=6*he*l+2*r,G=(r=Math.pow(G*G+K*K,1.5))!==0?(G*N-K*P)/r:0,K=0)),d===2?new $(K,-G):new $(G,K)}return{statics:{classify:function(r){var l=r[0],d=r[1],f=r[2],v=r[3],m=r[4],C=r[5],E=r[6],P=(r=f*(d-(P=r[7]))+v*(E-l)+l*P-d*E,E=(v=(f=3*(m*(v-d)+C*(l-f)+f*d-v*l))-r)-r+(l*(P-C)+d*(m-E)+E*C-P*m),(C=Math.sqrt(E*E+v*v+f*f))!==0?1/C:0);function N(z,j,G){var K=j!==O,U=K&&0<j&&j<1,Z=K&&0<G&&G<1;return!K||(U||Z)&&(z!=="loop"||U&&Z)||(U=Z=!(z="arch")),{type:z,roots:U||Z?U&&Z?j<G?[j,G]:[G,j]:[U?j:G]:null}}return C="serpentine",v*=P,f*=P,(m=Xe.isZero)(E*=P)?m(v)?N(m(f)?"line":"quadratic"):N(C,f/(3*v)):m(f=3*v*v-4*E*f)?N("cusp",v/(2*E)):N(0<f?C:"loop",(v+(m=0<f?Math.sqrt(f/3):Math.sqrt(-f)))/(E*=2),(v-m)/E)},getLength:function(r,l,d,f){if(l===O&&(l=0),d===O&&(d=1),Ye.isStraight(r)){var v=r;d<1&&(v=Ye.subdivide(v,d)[0],l/=d);var m=(v=0<l?Ye.subdivide(v,l)[1]:v)[6]-v[0];return v=v[7]-v[1],Math.sqrt(m*m+v*v)}return Xe.integrate(f||e(r),l,d,t(l,d))},getTimeAt:function(r,l,d){if(d===O&&(d=l<0?1:0),l===0)return d;var f=Math.abs,v=0<l,m=v?d:0,C=v?1:d,E=e(r),P=Ye.getLength(r,m,C,E);if(r=f(l)-P,f(r)<1e-12)return v?C:m;if(1e-12<r)return null;var N=0;return Xe.findRoot(function(z){return N+=Xe.integrate(E,d,z,t(d,z)),d=z,N-l},E,d+l/P,m,C,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],m=r[4],C=r[5],E=3*f-l-3*m+r[6];return m=3*l-6*f+3*m,f=-3*l+3*f,r=3*v-d-3*C+r[7],C=3*d-6*v+3*C,d=-3*d+3*v,v=[],Xe.solveCubic(9*(E*E+r*r),9*(E*m+C*r),2*(m*m+C*C)+3*(f*E+d*r),f*m+C*d,v,1e-8,1-1e-8),v.sort()}}}},new function(){function e(m,C,E,P,N,z,j){var G=!j&&E.getPrevious()===N,K=!j&&E!==N&&E.getNext()===N;P!==null&&(G?1e-8:0)<=P&&P<=(K?1-1e-8:1)&&z!==null&&(K?1e-8:0)<=z&&z<=(G?1-1e-8:1)&&(P=new Dt(E,P,null,j),j=new Dt(N,z,null,j),(P._intersection=j)._intersection=P,C&&!C(P)||Dt.insert(m,P,!0))}function t(m,C,E,P,N,z,j,G,K,U,Z,te,oe){if(4096<=++K||40<=++G)return K;var he,ce,Ce,Te,Ae,Fe,xe=C[0],ae=C[1],fe=C[6],Ve=C[7],Pe=gt.getSignedDistance,Ze=Pe(xe,ae,fe,Ve,C[2],C[3]),nt=Pe(xe,ae,fe,Ve,C[4],C[5]),ct=(Ce=0<Ze*nt?.75:4/9)*Math.min(0,Ze,nt),ft=Ce*Math.max(0,Ze,nt),F=Pe(xe,ae,fe,Ve,m[0],m[1]),s=Pe(xe,ae,fe,Ve,m[2],m[3]);return fe=function(c,p,b,A){var R=[0,c],D=[1/3,p],H=[2/3,b],J=[1,A];return J=(p-=(2*c+A)/3)*(c=b-(c+2*A)/3)<0?[[R,D,J],[R,H,J]]:[2<=(A=p/c)?[R,D,J]:A<=.5?[R,H,J]:[R,D,H,J],[R,J]],(p||c)<0?J.reverse():J}(F,s,Ce=Pe(xe,ae,fe,Ve,m[4],m[5]),ae=Pe(xe,ae,fe,Ve,m[6],m[7])),Ve=fe[0],fe=fe[1],Ze===0&&nt===0&&F===0&&s===0&&Ce===0&&ae===0||(he=i(Ve,fe,ct,ft))==null||(ce=i(Ve.reverse(),fe.reverse(),ct,ft))==null||(ft=U+(Z-U)*he,Z=U+(Z-U)*ce,Math.max(oe-te,Z-ft)<1e-9?(Te=(ft+Z)/2,Fe=(te+oe)/2,e(N,z,j?P:E,j?Fe:Te,j?E:P,j?Te:Fe)):(m=Ye.getPart(m,he,ce),U=oe-te,K=.8<ce-he?U<Z-ft?(K=t(C,(Ae=Ye.subdivide(m,.5))[0],P,E,N,z,!j,G,K,te,oe,ft,Te=(ft+Z)/2),t(C,Ae[1],P,E,N,z,!j,G,K,te,oe,Te,Z)):(K=t((Ae=Ye.subdivide(C,.5))[0],m,P,E,N,z,!j,G,K,te,Fe=(te+oe)/2,ft,Z),t(Ae[1],m,P,E,N,z,!j,G,K,Fe,oe,ft,Z)):U==0||1e-9<=U?t(C,m,P,E,N,z,!j,G,K,te,oe,ft,Z):t(m,C,E,P,N,z,j,G,K,ft,Z,te,oe))),K}function i(m,C,E,P){return m[0][1]<E?r(m,!0,E):C[0][1]>P?r(C,!1,P):m[0][0]}function r(m,C,E){for(var P=m[0][0],N=m[0][1],z=1,j=m.length;z<j;z++){var G=m[z][0],K=m[z][1];if(C?E<=K:K<=E)return K===E?G:P+(E-N)*(G-P)/(K-N);P=G,N=K}return null}function l(m,C,E,P,N){var z=Xe.isZero;if(z(P)&&z(N))return(z=Ye.getTimeOf(m,new $(C,E)))===null?[]:[z];P=Math.atan2(-N,P);for(var j=Math.sin(P),G=Math.cos(P),K=[],U=(P=[],0);U<8;U+=2){var Z=m[U]-C,te=m[U+1]-E;K.push(Z*G-te*j,Z*j+te*G)}return Ye.solveCubic(K,1,0,P,0,1),P}function d(m,C,E,P,N,z){var j=1e-12,G=Math.min;if((ce=Math.max)(m[0],m[2],m[4],m[6])+j>G(C[0],C[2],C[4],C[6])&&G(m[0],m[2],m[4],m[6])-j<ce(C[0],C[2],C[4],C[6])&&ce(m[1],m[3],m[5],m[7])+j>G(C[1],C[3],C[5],C[7])&&G(m[1],m[3],m[5],m[7])-j<ce(C[1],C[3],C[5],C[7])){var K=v(m,C);if(K)for(var U=0;U<2;U++){var Z=K[U];e(N,z,E,Z[0],P,Z[1],!0)}else{var te=Ye.isStraight(m),oe=Ye.isStraight(C),he=te&&oe,ce=(G=te&&!oe,N.length);if((he?function(xe,ae,fe,Ve,Pe,Ze){var nt=gt.intersect(xe[0],xe[1],xe[6],xe[7],ae[0],ae[1],ae[6],ae[7]);nt&&e(Pe,Ze,fe,Ye.getTimeOf(xe,nt),Ve,Ye.getTimeOf(ae,nt))}:te||oe?function(xe,ae,fe,Ve,Pe,Ze,nt){for(var ct=ae[0],ft=ae[1],F=l(xe,ct,ft,ae[6]-ct,ae[7]-ft),s=0,c=F.length;s<c;s++){var p=F[s],b=Ye.getPoint(xe,p);(b=Ye.getTimeOf(ae,b))!==null&&e(Pe,Ze,nt?Ve:fe,nt?b:p,nt?fe:Ve,nt?p:b)}}:t)(G?C:m,G?m:C,G?P:E,G?E:P,N,z,G,0,0,0,1,0,1),!he||N.length===ce)for(U=0;U<4;U++){var Ce=U>>1,Te=1&U,Ae=6*Te,Fe=new $(m[Fe=6*Ce],m[1+Fe]);Ae=new $(C[Ae],C[1+Ae]),Fe.isClose(Ae,j)&&e(N,z,E,Ce,P,Te)}}}return N}function f(m,C,E,P){return(m=Ye.classify(m)).type==="loop"&&e(E,P,C,(m=m.roots)[0],C,m[1]),E}function v(m,C){function E(fe){var Ve=fe[6]-fe[0];return Ve*Ve+(fe=fe[7]-fe[1])*fe}var P,N=Math.abs,z=gt.getDistance,j=1e-7,G=Ye.isStraight(m),K=Ye.isStraight(C),U=G&&K,Z=(P=E(m)<E(C))?C:m,te=P?m:C,oe=Z[0],he=Z[1],ce=Z[6]-oe;if(z(oe,he,ce,P=Z[7]-he,te[0],te[1],!0)<j&&z(oe,he,ce,P,te[6],te[7],!0)<j)!U&&z(oe,he,ce,P,Z[2],Z[3],!0)<j&&z(oe,he,ce,P,Z[4],Z[5],!0)<j&&z(oe,he,ce,P,te[2],te[3],!0)<j&&z(oe,he,ce,P,te[4],te[5],!0)<j&&(G=K=U=!0);else if(U)return null;if(G^K)return null;for(var Ce=[m,C],Te=[],Ae=0;Ae<4&&Te.length<2;Ae++){var Fe=1&Ae,xe=1^Fe,ae=Ae>>1;if((xe=Ye.getTimeOf(Ce[Fe],new $(Ce[xe][ae?6:0],Ce[xe][ae?7:1])))!=null&&(ae=Fe?[ae,xe]:[xe,ae],(!Te.length||1e-8<N(ae[0]-Te[0][0])&&1e-8<N(ae[1]-Te[0][1]))&&Te.push(ae)),2<Ae&&!Te.length)break}return Te.length!==2?Te=null:U||(m=Ye.getPart(m,Te[0][0],Te[1][0]),(N((C=Ye.getPart(C,Te[0][1],Te[1][1]))[2]-m[2])>j||N(C[3]-m[3])>j||N(C[4]-m[4])>j||N(C[5]-m[5])>j)&&(Te=null)),Te}return{getIntersections:function(m){var C=this.getValues(),E=m&&m!==this&&m.getValues();return E?d(C,E,this,m,[]):f(C,this,[])},statics:{getOverlaps:v,getIntersections:function(m,C,E,P,N,z){for(var j=!C,G=m.length,K=(C=j?m:C).length,U=new Array(G),Z=j?U:new Array(K),te=[],oe=0;oe<G;oe++)U[oe]=m[oe].getValues(P);if(!j)for(oe=0;oe<K;oe++)Z[oe]=C[oe].getValues(N);for(var he=lt.findCurveBoundsCollisions(U,Z,1e-7),ce=0;ce<G;ce++){var Ce=m[ce],Te=U[ce];j&&f(Te,Ce,te,E);var Ae=he[ce];if(Ae)for(var Fe=0;Fe<Ae.length;Fe++){if(z&&te.length)return te;var xe,ae=Ae[Fe];(!j||ce<ae)&&(xe=C[ae],d(Te,Z[ae],Ce,xe,te,E))}}return te},getCurveLineIntersections:l,getTimesWithTangent:function(m,C){var E,P=m[0],N=m[1],z=m[2],j=m[3],G=m[4],K=m[5],U=m[6],Z=m[7];return C=(m=C.normalize()).x,U=3*U-9*G+9*z-3*P,Z=3*Z-9*K+9*j-3*N,G=6*G-12*z+6*P,K=6*K-12*j+6*N,z=3*z-3*P,P=3*j-3*N,j=2*U*(m=m.y)-2*Z*C,N=[],Math.abs(j)<Xe.CURVETIME_EPSILON?(j=U*K-Z*G)==0||0<=(E=-(U*P-Z*z)/j)&&E<=1&&N.push(E):(E=G*m-K*C,0<=(P=(G*G-4*U*z)*m*m+(-2*G*K+4*Z*z+4*U*P)*C*m+(K*K-4*Z*P)*C*C)&&j!=0&&(P=(-E+(C=Math.sqrt(P)))/j,0<=(j=-(E+C)/j)&&j<=1&&N.push(j),0<=P&&P<=1&&N.push(P))),N}}}}),Dt=k.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 Dt&&(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=Qe.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(!(C=this._intersection))return!1;var e=this.getTime(),t=C.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,m=C.getCurve(),C=m&&t<i?m.getPrevious():m;if(r<e&&(f=f.getNext()),r<t&&(m=m.getNext()),!(v&&f&&C&&m))return!1;var E=[];function P(z,j){var G=z.getValues(),K=(z=(K=Ye.classify(G).roots||Ye.getPeaks(G)).length,Ye.getLength(G,j&&z?K[z-1]:0,!j&&z?K[0]:1));E.push(z?K:K/32)}function N(z,j,G){return j<G?j<z&&z<G:j<z||z<G}return l||(P(v,!0),P(f,!1)),d||(P(C,!0),P(m,!1)),i=this.getPoint(),r=Math.min.apply(Math,E),f=l?f.getTangentAtTime(e):f.getPointAt(r).subtract(i),v=l?f.negate():v.getPointAt(-r).subtract(i),m=d?m.getTangentAtTime(t):m.getPointAt(r).subtract(i),i=d?m.negate():C.getPointAt(-r).subtract(i),v=v.getAngle(),f=f.getAngle(),i=i.getAngle(),m=m.getAngle(),!!(l?N(v,i,m)^N(f,i,m)&&N(v,m,i)^N(f,m,i):N(i,v,f)^N(m,v,f)&&N(i,f,v)^N(m,f,v))},hasOverlap:function(){return!!this._overlap}},k.each(Ye._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(z,j){for(var G=z+j;-1<=G&&G<=l;G+=j){var K=t[(G%l+l)%l];if(!i.getPoint().isClose(K.getPoint(),1e-7))break;if(i.equals(K))return K}return null}for(;d<=f;){var m,C=d+f>>>1,E=t[C];if(r&&(m=i.equals(E)?E:v(C,-1)||v(C,1)))return i._overlap&&(m._overlap=m._intersection._overlap=!0),m;var P=i.getPath(),N=E.getPath();(P!==N?P._id-N._id:i.getIndex()+i.getTime()-(E.getIndex()+E.getTime()))<0?f=C-1:d=1+C}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}}}}),oi=dt.extend({_class:"PathItem",_selectBounds:!1,_canScaleStroke:!0,beans:!0,initialize:function(){},statics:{create:function(e){var t,i,r;return k.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?qt: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 $,f=new $;function v(te,oe){return te=+P[te],l&&(te+=d[oe]),te}function m(te){return new $(v(te,"x"),v(te+1,"y"))}this.clear();for(var C=0,E=r&&r.length;C<E;C++){var P,N=r[C],z=N[0],j=z.toLowerCase(),G=(P=N.match(/[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g))&&P.length;switch(l=z===j,t!=="z"||/[mz]/.test(j)||this.moveTo(d),j){case"m":case"l":for(var K=j==="m",U=0;U<G;U+=2)this[K?"moveTo":"lineTo"](d=m(U)),K&&(f=d,K=!1);i=d;break;case"h":case"v":var Z=j==="h"?"x":"y";for(d=d.clone(),U=0;U<G;U++)d[Z]=v(U,Z),this.lineTo(d);i=d;break;case"c":for(U=0;U<G;U+=6)this.cubicCurveTo(m(U),i=m(U+2),d=m(U+4));break;case"s":for(U=0;U<G;U+=4)this.cubicCurveTo(/[cs]/.test(t)?d.multiply(2).subtract(i):d,i=m(U),d=m(U+2)),t=j;break;case"q":for(U=0;U<G;U+=4)this.quadraticCurveTo(i=m(U),d=m(U+2));break;case"t":for(U=0;U<G;U+=2)this.quadraticCurveTo(i=/[qt]/.test(t)?d.multiply(2).subtract(i):d,d=m(U)),t=j;break;case"a":for(U=0;U<G;U+=7)this.arcTo(d=m(U+5),new $e(+P[U],+P[U+1]),+P[U+2],+P[U+4],+P[U+3]);break;case"z":this.closePath(1e-12),d=f}t=j}},_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)?Ye.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=$.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 m=f.length;if(t<m)for(var C=r?Ke:St,E=t;E<m;E++)this.add(new C);else m<t&&this[r?"removeSegments":"removeChildren"](m,t);for(E=0;E<m;E++)v[E].interpolate(d[E],f[E],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=lt.findItemBoundsCollisions(i,r,Xe.GEOMETRIC_EPSILON),m=l-1;0<=m&&t;m--){var C=i[m],E=(t=!1,v[m]);if(E)for(var P=E.length-1;0<=P&&!t;P--)C.compare(r[E[P]])&&(d[E[P]]||(d[E[P]]=!0,f++),t=!0)}t=t&&f===e}return t}}),St=oi.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!==O||e.x===O&&e.point===O?null:t)&&0<t.length?this.setSegments(t):(this._curves=O,this._segmentSelection=0,t||typeof e!="string"||(this.setPathData(e),e=null)),this._initialize(!t&&e)},_equals:function(e){return this._closed===e._closed&&k.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=O,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=O)},getStyle:function(){var e=this._parent;return(e instanceof qt?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=O,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 Ye(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 Ye(this,this._segments[t-1],this._segments[0]))),this._changed(41))}},{beans:!0,getPathData:function(e,t){var i,r,l,d,f,v,m,C,E=this._segments,P=E.length,N=new Qe(t),z=new Array(6),j=!0,G=[];function K(Z,te){Z._transformCoordinates(e,z),i=z[0],r=z[1],j?(G.push("M"+N.pair(i,r)),j=!1):(f=z[2],v=z[3],f===i&&v===r&&m===l&&C===d?te||(Z=r-d,G.push((te=i-l)==0?"v"+N.number(Z):Z==0?"h"+N.number(te):"l"+N.pair(te,Z))):G.push("c"+N.pair(m-l,C-d)+" "+N.pair(f-l,v-d)+" "+N.pair(i-l,r-d))),l=i,d=r,m=z[4],C=z[5]}if(!P)return"";for(var U=0;U<P;U++)K(E[U]);return this._closed&&0<P&&(K(E[0],!0),G.push("z")),G.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=(E=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(E)k.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 m=this._countCurves(),C=0<t&&t+l-1===m?t-1:t,E=C,P=Math.min(C+l,m);for(e._curves&&(r.splice.apply(r,[C,0].concat(e._curves)),E+=e._curves.length),d=E;d<P;d++)r.splice(d,0,new Ye(this,null,null));this._adjustCurves(C,P)}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=k.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 m=0;m<v;m++){var C=f[m];C._selection&&this._updateSelection(C,C._selection,0),C._index=C._path=null}m=e;for(var E=r.length;m<E;m++)r[m]._index=m;if(l){for(e=0<e&&t===d+(this._closed?1:0)?e-1:e,m=(l=l.splice(e,v)).length-1;0<=m;m--)l[m]._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+=Ye.getArea(Ye.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===O?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 di(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 $t(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(ct,ft){var F=ct&&ct.index;if(F!=null){var s=ct.path;if(s&&s!==t)throw new Error(ct._class+" "+F+" of "+s+" is not part of "+t);ft&&ct instanceof Ye&&F++}else F=typeof ct=="number"?ct:ft;return Math.min(F<0&&d?F%l:F<0?F+l:F,l-1)}var v=d&&i.from===O&&i.to===O,m=f(i.from,0),C=f(i.to,l-1);if(C<m&&(d?m-=l:(P=m,m=C,C=P)),/^(?:asymmetric|continuous)$/.test(e)){var E=e==="asymmetric",P=Math.min,N=(e=C-m+1)-1,z=e=v?P(e,4):1,j=[];if(d||(z=P(1,m),e=P(1,l-C-1)),!((N+=z+e)<=1)){for(var G=0,K=m-z;G<=N;G++,K++)j[G]=r[(K<0?K+l:K)%l]._point;var U=N-1,Z=[ae=j[0]._x+2*j[1]._x],te=[fe=j[0]._y+2*j[1]._y],oe=[xe=2],he=[],ce=[];for(G=1;G<N;G++)var Ce=G<U,Te=Ce?4:E?3:8,Ae=Ce?2:E?0:1,Fe=(Ce||E?1:2)/xe,xe=oe[G]=(Ce?4:E?2:7)-Fe,ae=Z[G]=Te*j[G]._x+Ae*j[G+1]._x-Fe*ae,fe=te[G]=Te*j[G]._y+Ae*j[G+1]._y-Fe*fe;for(he[U]=Z[U]/oe[U],ce[U]=te[U]/oe[U],G=N-2;0<=G;G--)he[G]=(Z[G]-he[G+1])/oe[G],ce[G]=(te[G]-ce[G+1])/oe[G];he[N]=(3*j[N]._x-he[U])/2,ce[N]=(3*j[N]._y-ce[U])/2,G=z;var Ve=N-e;for(K=m;G<=Ve;G++,K++){var Pe=r[K<0?K+l:K],Ze=Pe._point,nt=he[G]-Ze._x;Ze=ce[G]-Ze._y,(v||G<Ve)&&Pe.setHandleOut(nt,Ze),(v||z<G)&&Pe.setHandleIn(-nt,-Ze)}}}else for(G=m;G<=C;G++)r[G<0?G+l:G].smooth(i,!v&&G===m,!v&&G===C)},toShape:function(e){if(!this._closed)return null;var t,i,r,l,d,f,v=this._segments;function m(z,j){var G=v[z],K=G.getNext();return j=(z=v[j]).getNext(),G._handleOut.isZero()&&K._handleIn.isZero()&&z._handleOut.isZero()&&j._handleIn.isZero()&&K._point.subtract(G._point).isCollinear(j._point.subtract(z._point))}function C(z){var j=v[z],G=j.getNext(),K=j._handleOut,U=G._handleIn,Z=.5522847498307936;if(K.isOrthogonal(U))return z=j._point,j=G._point,(G=new gt(z,K,!0).intersect(new gt(j,U,!0),!0))&&Xe.isZero(K.getLength()/G.subtract(z).getLength()-Z)&&Xe.isZero(U.getLength()/G.subtract(j).getLength()-Z)}function E(z,j){return v[z]._point.getDistance(v[j]._point)}if(!this.hasHandles()&&v.length===4&&m(0,2)&&m(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=Wt.Rectangle,i=new $e(E(0,3),E(0,1)),r=v[1]._point.add(v[2]._point).divide(2)):v.length===8&&C(0)&&C(2)&&C(4)&&C(6)&&m(1,5)&&m(3,7)?(t=Wt.Rectangle,N=(i=new $e(E(1,6),E(0,3))).subtract(new $e(E(0,7),E(1,2))).divide(2),r=v[3]._point.add(v[4]._point).divide(2)):v.length===4&&C(0)&&C(1)&&C(2)&&C(3)&&(N=Xe.isZero(E(0,2)-E(1,3))?(t=Wt.Circle,E(0,2)/2):(t=Wt.Ellipse,new $e(E(2,0)/2,E(3,1)/2)),r=v[1]._point),t){var P=this.getPosition(!0),N=new t({center:P,size:i,radius:N,insert:!1});return N.copyAttributes(this,!0),N._matrix.prepend(this._matrix),N.rotate(r.subtract(P).getAngle()+90),e!==O&&!e||N.insertAbove(this),N}return null},toPath:"#clone",compare:function e(t){if(!t||t instanceof qt)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,m=i[0].getValues(),C=[],E=0,P=0,N=0;N<d;N++){var z=r[N].getValues();if(C.push(z),K=Ye.getOverlaps(m,z)){f=!N&&0<K[0][0]?d-1:N,v=K[0][1];break}}var j,G=Math.abs;for(z=C[f];m&&z;){var K=Ye.getOverlaps(m,z);if(K&&G(K[0][0]-P)<1e-8){(P=K[1][0])===1&&(m=++E<l?i[E].getValues():null,P=0);var U=K[0][1];if(G(U-v)<1e-8){if(j=j||[f,U],(v=K[1][1])===1&&(z=C[f=++f>=d?0:f]||r[f].getValues(),v=0),!m)return j[0]===f&&j[1]===v;continue}}break}return!1},_hitTestSelf:function(e,t,i,r){var l,d,f,v,m,C,E=this,P=this.getStyle(),N=this._segments,z=N.length,j=this._closed,G=t._tolerancePadding,K=G,U=t.stroke&&P.hasStroke(),Z=t.fill&&P.hasFill(),te=t.curves,oe=U?P.getStrokeWidth()/2:Z&&0<t.tolerance||te?0:null;function he(ae,fe){return e.subtract(ae).divide(fe).length<=1}function ce(ae,fe,Ve){if(!t.selected||fe.isSelected()){var Pe=ae._point;if(he(fe=fe!==Pe?fe.add(Pe):fe,K))return new ri(Ve,E,{segment:ae,point:fe})}}function Ce(ae,fe){return(fe||t.segments)&&ce(ae,ae._point,"segment")||!fe&&t.handles&&(ce(ae,ae._handleIn,"handle-in")||ce(ae,ae._handleOut,"handle-out"))}function Te(ae){v.add(ae)}function Ae(ae){var fe=j||0<ae._index&&ae._index<z-1;return(fe?l:d)==="round"?he(ae._point,K):(v=new St({internal:!0,closed:!0}),fe?ae.isSmooth()||St._addBevelJoin(ae,l,oe,f,null,r,Te,!0):d==="square"&&St._addSquareCap(ae,d,oe,null,r,Te,!0),!v.isEmpty()&&(v.contains(e)||(ae=v.getNearestLocation(e))&&he(ae.getPoint(),G)))}if(oe!==null&&(0<oe?(l=P.getStrokeJoin(),d=P.getStrokeCap(),f=P.getMiterLimit(),K=K.add(St._getStrokePadding(oe,r))):l=d="round"),!t.ends||t.segments||j){if(t.segments||t.handles){for(var Fe=0;Fe<z;Fe++)if(m=Ce(N[Fe]))return m}}else if(m=Ce(N[0],!0)||Ce(N[z-1],!0))return m;if(oe!==null&&((C=this.getNearestLocation(e))&&((P=C.getTime())===0||P===1&&1<z?Ae(C.getSegment())||(C=null):he(C.getPoint(),K)||(C=null)),!C&&l==="miter"&&1<z))for(Fe=0;Fe<z;Fe++){var xe=N[Fe];if(e.getDistance(xe._point)<=f*oe&&Ae(xe)){C=xe.getLocation();break}}return!C&&Z&&this._contains(e)||C&&!U&&!te?new ri("fill",this):C?new ri(U?"stroke":"curve",this,{location:C,point:C.getPoint()}):null}},k.each(Ye._evaluateMethods,function(e){this[e+"At"]=function(t){return(t=this.getLocationAt(t))&&t[e]()}},{beans:!1,getLocationOf:function(){for(var e=$.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 Dt(t[t.length-1],1)}else if(e&&e.getPath&&e.getPath()===this)return e;return null},getOffsetsWithTangent:function(){var e=$.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),m=0,C=v.length;m<C;m++){var E=i+f.getOffsetAtTime(v[m]);t.indexOf(E)<0&&t.push(E)}i+=f.length}return t}}),new function(){function e(t,i,r){var l,d,f,v,m,C,E,P,N=i._segments,z=N.length,j=new Array(6),G=!0;function K(Z){var te,oe;d=r?(Z._transformCoordinates(r,j),l=j[0],j[1]):(te=Z._point,l=te._x,te._y),G?(t.moveTo(l,d),G=!1):(C=r?(m=j[2],j[3]):(oe=Z._handleIn,m=l+oe._x,d+oe._y),m===l&&C===d&&E===f&&P===v?t.lineTo(l,d):t.bezierCurveTo(E,P,m,C,l,d)),f=l,v=d,P=r?(E=j[4],j[5]):(oe=Z._handleOut,E=f+oe._x,v+oe._y)}for(var U=0;U<z;U++)K(N[U]);i._closed&&0<z&&K(N[0])}return{_draw:function(t,i,r,l){var d=i.dontStart,f=i.dontFinish||i.clip,v=this.getStyle(),m=v.hasFill(),C=v.hasStroke(),E=v.getDashArray(),P=!Ut.support.nativeDash&&C&&E&&E.length;function N(Z){return E[(Z%P+P)%P]}if(d||t.beginPath(),(m||C&&!P||f)&&(e(t,this,l),this._closed&&t.closePath()),!f&&(m||C)&&(this._setStyles(t,i,r),m&&(t.fill(v.getFillRule()),t.shadowColor="rgba(0,0,0,0)"),C)){if(P){d||t.beginPath();for(var z,j=new di(this,.25,32,!1,l),G=j.length,K=-v.getDashOffset(),U=0;0<K;)K-=N(U--)+N(U--);for(;K<G;)z=K+N(U++),(0<K||0<z)&&j.drawPart(t,Math.max(K,0),Math.max(z,0)),K=z+N(U++)}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,m,C=f/2,E=f-2,P=C-1,N=new Array(6),z=0,j=l.length;z<j;z++){var G=l[z],K=G._selection;G._transformCoordinates(d,N),v=N[0],m=N[1],2&K&&U(2),4&K&&U(4),r.fillRect(v-C,m-C,f,f),0<E&&!(1&K)&&(K=r.fillStyle,r.fillStyle="#ffffff",r.fillRect(v-P,m-P,E,E),r.fillStyle=K)}function U(Z){var te=N[Z];Z=N[Z+1],v==te&&m==Z||(r.beginPath(),r.moveTo(v,m),r.lineTo(te,Z),r.stroke(),r.beginPath(),r.arc(te,Z,C,0,2*Math.PI,!0),r.fill())}}(t,this._segments,i,Ut.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($.read(arguments))])},moveBy:function(){throw new Error("moveBy() is unsupported on Path items.")},lineTo:function(){this._add([new Ke($.read(arguments))])},cubicCurveTo:function(){var t=arguments,i=$.read(t),r=$.read(t),l=$.read(t);(t=e(this)).setHandleOut(i.subtract(t._point)),this._add([new Ke(l,r.subtract(l))])},quadraticCurveTo:function(){var t=arguments,i=$.read(t),r=$.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=$.read(t),r=$.read(t),l=k.pick(k.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=$.read(i),m=k.peek(i);if(typeof(z=k.pick(m,!0))=="boolean")var C=(G=f.add(v).divide(2)).add(G.subtract(f).rotate(z?-90:90));else if(k.remain(i)<=2)C=v,v=$.read(i);else if(!f.equals(v)){var E=$e.read(i);if((P=Xe.isZero)(E.width)||P(E.height))return this.lineTo(v);var P,N=k.read(i),z=!!k.read(i),j=!!k.read(i),G=f.add(v).divide(2),K=(fe=f.subtract(G).rotate(-N)).x,U=fe.y,Z=(he=r(E.width))*he;if(1<(E=l((P=K*K)/Z+(i=U*U)/(m=(ce=r(E.height))*ce)))&&(Z=(he*=E)*he,m=(ce*=E)*ce),(E=r(E=(Z*m-Z*i-m*P)/(Z*i+m*P))<1e-12?0:E)<0)throw new Error("Cannot create an arc with the given arguments");te=new $(he*U/ce,-ce*K/he).multiply((j===z?-1:1)*l(E)).rotate(N).add(G),N=(oe=(t=new _t().translate(te).rotate(N).scale(he,ce))._inverseTransform(f)).getDirectedAngle(t._inverseTransform(v)),!z&&0<N?N-=360:z&&N<0&&(N+=360)}if(C){var te,oe,he=new gt(f.add(C).divide(2),C.subtract(f).rotate(90),!0),ce=new gt(C.add(v).divide(2),v.subtract(C).rotate(90),!0);if(C=(z=new gt(f,v)).getSide(C),!(te=he.intersect(ce,!0))){if(!C)return this.lineTo(v);throw new Error("Cannot create an arc with the given arguments")}N=(oe=f.subtract(te)).getDirectedAngle(v.subtract(te)),(z=z.getSide(te,!0))===0?N=C*r(N):C===z&&(N+=N<0?360:-360)}if(N){for(var Ce=360<=(r=r(N))?4:Math.ceil((r-1e-5)/90),Te=N/Ce,Ae=(N=Te*Math.PI/360,4/3*Math.sin(N)/(1+Math.cos(N))),Fe=[],xe=0;xe<=Ce;xe++){var ae,fe=v,Ve=null;xe<Ce&&(Ve=oe.rotate(90).multiply(Ae),t?(fe=t._transformPoint(oe),Ve=t._transformPoint(oe.add(Ve)).subtract(fe)):fe=te.add(oe)),xe?(ae=oe.rotate(-90).multiply(Ae),t&&(ae=t._transformPoint(oe.add(ae)).subtract(fe)),Fe.push(new Ke(fe,ae,Ve))):d.setHandleOut(Ve),oe=oe.rotate(Te)}this._add(Fe)}},lineBy:function(){var t=$.read(arguments),i=e(this)._point;this.lineTo(i.add(t))},curveBy:function(){var t=arguments,i=$.read(t),r=$.read(t),l=k.read(t);t=e(this)._point,this.curveTo(t.add(i),t.add(r),l)},cubicCurveBy:function(){var t=arguments,i=$.read(t),r=$.read(t),l=$.read(t);t=e(this)._point,this.cubicCurveTo(t.add(i),t.add(r),t.add(l))},quadraticCurveBy:function(){var t=arguments,i=$.read(t),r=$.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($.read(t)),l=k.pick(k.peek(t),!0);typeof l=="boolean"?this.arcTo(r,l):this.arcTo(r,i.add($.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 De;var v=new Array(6),m=f._transformCoordinates(r,new Array(6)),C=m.slice(0,2),E=C.slice(),P=new Array(2);function N(G){G._transformCoordinates(r,v);for(var K=0;K<2;K++)Ye._addBounds(m[K],m[K+4],v[K+2],v[K],K,d?d[K]:0,C,E,P);G=m,m=v,v=G}for(var z=1,j=e.length;z<j;z++)N(e[z]);return t&&N(f),new De(C[0],C[1],E[0]-C[0],E[1]-C[1])},getStrokeBounds:function(e,t,i,r,l){var d=i.getStyle(),f=d.hasStroke(),v=d.getStrokeWidth(),m=f&&i._getStrokeMatrix(r,l),C=f&&St._getStrokePadding(v,m),E=St.getBounds(e,t,i,r,l,C);if(!f)return E;var P=v/2,N=d.getStrokeJoin(),z=(v=d.getStrokeCap(),d.getMiterLimit()),j=new De(new $e(C));function G(he){E=E.include(he)}function K(he){E=E.unite(j.setCenter(he._point.transform(r)))}function U(he,ce){ce==="round"||he.isSmooth()?K(he):St._addBevelJoin(he,ce,P,z,r,m,G)}function Z(he,ce){ce==="round"?K(he):St._addSquareCap(he,ce,P,r,m,G)}var te=e.length-(t?0:1);if(0<te){for(var oe=1;oe<te;oe++)U(e[oe],N);t?U(e[0],N):(Z(e[0],v),Z(e[e.length-1],v))}return E},_getStrokePadding:function(e,t){if(!t)return[e,e];var i=new $(e,0).transform(t),r=new $(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=(m=e.getCurve()).getPrevious(),l=m.getPoint1().transform(l),e=e.getNormalAtTime(1).multiply(i).transform(d);var m=m.getNormalAtTime(0).multiply(i).transform(d);((d=e.getDirectedAngle(m))<0||180<=d)&&(e=e.negate(),m=m.negate()),v&&f(l),f(l.add(e)),t!=="miter"||(e=new gt(l.add(e),new $(-e.y,e.x),!0).intersect(new gt(l.add(m),new $(-m.y,m.x),!0),!0))&&l.getDistance(e)<=r*i&&f(e),f(l.add(m))},_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,m=i.getStyle();l.stroke&&m.hasStroke()&&(v=i._getStrokeMatrix(r,l),l=i=m.getStrokeWidth()/2,m.getStrokeJoin()==="miter"&&(l=i*m.getMiterLimit()),m.getStrokeCap()==="square"&&(l=Math.max(l,i*Math.SQRT2)),d=St._getStrokePadding(i,v),f=St._getStrokePadding(l,v));for(var C=new Array(6),E=1/0,P=-E,N=E,z=P,j=0,G=e.length;j<G;j++){e[j]._transformCoordinates(r,C);for(var K=0;K<6;K+=2){var U,Z=(U=K?d:f)?U[0]:0,te=U?U[1]:0,oe=C[K],he=C[K+1];(U=oe-Z)<E&&(E=U),P<(oe+=Z)&&(P=oe),(Z=he-te)<N&&(N=Z),z<(te=he+te)&&(z=te)}}return new De(E,N,P-E,z-N)}}});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=k.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),m=0;m<4;m++){var C=t[m];v[m]=new Ke(C._point.multiply(d).add(l),C._handleIn.multiply(d),C._handleOut.multiply(d))}return i(v,!0,f)}return{Line:function(){var l=arguments;return i([new Ke($.readNamed(l,"from")),new Ke($.readNamed(l,"to"))],!1,l)},Circle:function(){var l=arguments,d=$.readNamed(l,"center"),f=k.readNamed(l,"radius");return r(d,new $e(f),l)},Rectangle:function(){var l,d,f=arguments,v=De.readNamed(f,"rectangle"),m=$e.readNamed(f,"radius",0,{readNull:!0}),C=v.getBottomLeft(!0),E=v.getTopLeft(!0),P=v.getTopRight(!0),N=v.getBottomRight(!0);return i(!m||m.isZero()?[new Ke(C),new Ke(E),new Ke(P),new Ke(N)]:(l=(m=$e.min(m,v.getSize(!0).divide(2))).width,d=m.height,v=l*e,m=d*e,[new Ke(C.add(l,0),null,[-v,0]),new Ke(C.subtract(0,d),[0,m]),new Ke(E.add(0,d),null,[0,-m]),new Ke(E.add(l,0),[-v,0],null),new Ke(P.subtract(l,0),null,[v,0]),new Ke(P.add(0,d),[0,-m],null),new Ke(N.subtract(0,d),null,[0,m]),new Ke(N.subtract(l,0),[v,0])]),!0,f)},RoundRectangle:"#Rectangle",Ellipse:function(){var l=arguments,d=Wt._readEllipse(l);return r(d.center,d.radius,l)},Oval:"#Ellipse",Arc:function(){var l=arguments,d=$.readNamed(l,"from"),f=$.readNamed(l,"through"),v=$.readNamed(l,"to"),m=k.getNamed(l);return(l=new St(m&&m.insert==0&&dt.NO_INSERT)).moveTo(d),l.arcTo(f,v),l.set(m)},RegularPolygon:function(){for(var l=arguments,d=$.readNamed(l,"center"),f=k.readNamed(l,"sides"),v=k.readNamed(l,"radius"),m=360/f,C=f%3==0,E=new $(0,C?-v:v),P=C?-1:.5,N=new Array(f),z=0;z<f;z++)N[z]=new Ke(d.add(E.rotate((z+P)*m)));return i(N,!0,l)},Star:function(){for(var l=arguments,d=$.readNamed(l,"center"),f=2*k.readNamed(l,"points"),v=k.readNamed(l,"radius1"),m=k.readNamed(l,"radius2"),C=360/f,E=new $(0,-1),P=new Array(f),N=0;N<f;N++)P[N]=new Ke(d.add(E.rotate(C*N).multiply(N%2?m:v)));return i(P,!0,l)}}}});var qt=oi.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=k.slice(r)),Array.isArray(f)?r[d]=new St({segments:f,insert:!1}):f instanceof qt&&(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++)k.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:k.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 k.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=$.read(arguments);this.moveTo(t?i.add(t._point):i)},closePath:function(t){e(this,!0).closePath(t)}})},k.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}},{}));oi.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(U){return U._children||[U]}function d(U,Z){var te=U.clone(!1).reduce({simplify:!0}).transform(null,!0,!0);if(Z){for(var oe=l(te),he=0,ce=oe.length;he<ce;he++)(U=oe[he])._closed||U.isEmpty()||(U.closePath(1e-12),U.getFirstSegment().setHandleIn(0,0),U.getLastSegment().setHandleOut(0,0));te=te.resolveCrossings().reorient(te.getFillRule()==="nonzero",!0)}return te}function f(U,Z,te,oe,he){var ce=new qt(dt.NO_INSERT);return ce.addChildren(U,!0),ce=ce.reduce({simplify:Z}),he&&he.insert==0||ce.insertAbove(oe&&te.isSibling(oe)&&te.getIndex()<oe.getIndex()?oe:te),ce.copyAttributes(te,!0),ce}function v(U){return U.hasOverlap()||U.isCrossing()}function m(U,Z,te,oe){if(oe&&(oe.trace==0||oe.stroke)&&/^(subtract|intersect)$/.test(te))return C(U,Z,te);var he=d(U,!0),ce=Z&&U!==Z&&d(Z,!0),Ce=r[te];Ce[te]=!0,ce&&(Ce.subtract||Ce.exclude)^ce.isClockwise()^he.isClockwise()&&ce.reverse();var Te,Ae=z(Dt.expand(he.getIntersections(ce,v))),Fe=l(he),xe=(te=ce&&l(ce),[]),ae=[];function fe(b){for(var A=0,R=b.length;A<R;A++){var D=b[A];k.push(xe,D._segments),k.push(ae,D.getCurves()),D._overlapsOnly=!0}}function Ve(b){for(var A=[],R=0,D=b&&b.length;R<D;R++)A.push(ae[b[R]]);return A}if(Ae.length){fe(Fe),te&&fe(te);for(var Pe=new Array(ae.length),Ze=0,nt=ae.length;Ze<nt;Ze++)Pe[Ze]=ae[Ze].getValues();var ct=lt.findCurveBoundsCollisions(Pe,Pe,0,!0),ft={};for(Ze=0;Ze<ae.length;Ze++){var F=ae[Ze],s=F._path._id;(ft[s]=ft[s]||{})[F.getIndex()]={hor:Ve(ct[Ze].hor),ver:Ve(ct[Ze].ver)}}for(Ze=0,nt=Ae.length;Ze<nt;Ze++)G(Ae[Ze]._segment,he,ce,ft,Ce);for(Ze=0,nt=xe.length;Ze<nt;Ze++){var c=xe[Ze],p=c._intersection;c._winding||G(c,he,ce,ft,Ce),p&&p._overlap||(c._path._overlapsOnly=!1)}Te=K(xe,Ce)}else Te=N(te?Fe.concat(te):Fe.slice(),function(b){return!!Ce[b]});return f(Te,!0,U,Z,oe)}function C(U,Z,te){var oe=d(U),he=d(Z),ce=oe.getIntersections(he,v),Ce=te==="subtract",Te=te==="divide",Ae={},Fe=[];function xe(Ve){return!Ae[Ve._id]&&(Te||he.contains(Ve.getPointAt(Ve.getLength()/2))^Ce)&&(Fe.unshift(Ve),Ae[Ve._id]=!0)}for(var ae=ce.length-1;0<=ae;ae--){var fe=ce[ae].split();fe&&(xe(fe)&&fe.getFirstSegment().setHandleIn(0,0),oe.getLastSegment().setHandleOut(0,0))}return xe(oe),f(Fe,!1,U,Z)}function E(U,Z){for(var te=U;te;){if(te===Z)return;te=te._previous}for(;U._next&&U._next!==Z;)U=U._next;if(!U._next){for(;Z._previous;)Z=Z._previous;(U._next=Z)._previous=U}}function P(U){for(var Z=U.length-1;0<=Z;Z--)U[Z].clearHandles()}function N(U,Z,te){var oe=U&&U.length;if(oe){var he=k.each(U,function(ft,F){this[ft._id]={container:null,winding:ft.isClockwise()?1:-1,index:F}},{}),ce=U.slice().sort(function(ft,F){return i(F.getArea())-i(ft.getArea())}),Ce=ce[0],Te=lt.findItemBoundsCollisions(ce,null,Xe.GEOMETRIC_EPSILON);te==null&&(te=Ce.isClockwise());for(var Ae=0;Ae<oe;Ae++){var Fe,xe=ce[Ae],ae=he[xe._id],fe=0,Ve=Te[Ae];if(Ve){for(var Pe=null,Ze=Ve.length-1;0<=Ze;Ze--)if(Ve[Ze]<Ae){Pe=Pe||xe.getInteriorPoint();var nt=ce[Ve[Ze]];if(nt.contains(Pe)){var ct=he[nt._id];fe=ct.winding,ae.winding+=fe,ae.container=ct.exclude?ct.container:nt;break}}}Z(ae.winding)===Z(fe)?(ae.exclude=!0,U[ae.index]=null):(Fe=ae.container,xe.setClockwise(Fe?!Fe.isClockwise():te))}}return U}function z(U,Z,te){var oe,he,ce,Ce=Z&&[],Te=!1,Ae=te||[],Fe=te&&{};function xe(p){return p._path._id+"."+p._segment1._index}for(var ae=(te&&te.length)-1;0<=ae;ae--)(fe=te[ae])._path&&(Fe[xe(fe)]=!0);for(ae=U.length-1;0<=ae;ae--){var fe,Ve=(s=U[ae])._time,Pe=Ve,Ze=Z&&!Z(s);if((fe=s._curve)&&(fe!==he?(Te=!fe.hasHandles()||Fe&&Fe[xe(fe)],oe=[],ce=null,he=fe):1e-8<=ce&&(Ve/=ce)),Ze)oe&&oe.push(s);else{if(Z&&Ce.unshift(s),ce=Pe,Ve<1e-8)nt=fe._segment1;else if(.99999999<Ve)nt=fe._segment2;else{Pe=fe.divideAtTime(Ve,!0),Te&&Ae.push(fe,Pe);for(var nt=Pe._segment1,ct=oe.length-1;0<=ct;ct--){var ft=oe[ct];ft._time=(ft._time-Ve)/(1-Ve)}}s._setSegment(nt);var F=nt._intersection,s=s._intersection;if(F){E(F,s);for(var c=F;c;)E(c._intersection,F),c=c._next}else nt._intersection=s}}return te||P(Ae),Ce||U}function j(U,Z,te,oe,he){var ce,Ce=Array.isArray(Z)?Z:Z[te?"hor":"ver"],Te=te?1:0,Ae=1^Te,Fe=[U.x,U.y],xe=Fe[Te],ae=Fe[Ae],fe=1e-6,Ve=xe-1e-9,Pe=xe+1e-9,Ze=0,nt=0,ct=0,ft=0,F=!1,s=!1,c=1,p=[];function b(se){var re=se[Ae+0],we=se[Ae+2],ge=se[Ae+4],ne=se[Ae+6];if(ae<=t(re,we,ge,ne)&&ae>=e(re,we,ge,ne)){re=se[Te+0],we=se[Te+2],ge=se[Te+4],ne=se[Te+6];for(var ue,de=Ve>t(re,we,ge,ne)||Pe<e(re,we,ge,ne)?[se]:Ye.getMonoCurves(se,te),Be=0,Le=de.length;Be<Le;Be++)if(ue=function(Se){var Ge=Se[Ae+0],Ue=Se[Ae+6];if(!(ae<e(Ge,Ue)||ae>t(Ge,Ue))){var We=Se[Te+0],ze=Se[Te+2],it=Se[Te+4],st=Se[Te+6];if(Ge!==Ue){var at=ae===Ge?0:ae!==Ue&&!(Ve>t(We,ze,it,st)||Pe<e(We,ze,it,st))&&0<Ye.solveCubic(Se,Ae,ae,p,0,1)?p[0]:1,rt=at===0?We:at===1?st:Ye.getPoint(Se,at)[te?"y":"x"];return ze=Ue<Ge?1:-1,it=X[Ae]>X[Ae+6]?1:-1,Ue=X[Te+6],ae!==Ge?(rt<Ve?ct+=ze:Pe<rt?ft+=ze:F=!0,xe-fe<rt&&rt<xe+fe&&(c/=2)):(ze!=it?We<Ve?ct+=ze:Pe<We&&(ft+=ze):We!=Ue&&(Ue<Pe&&Pe<rt?(ft+=ze,F=!0):Ve<Ue&&rt<Ve&&(ct+=ze,F=!0)),c/=4),X=Se,!he&&Ve<rt&&rt<Pe&&Ye.getTangent(Se,at)[te?"x":"y"]===0&&j(U,Z,!te,oe,!0)}(We<Pe&&Ve<st||st<Pe&&Ve<We)&&(F=!0)}}(de[Be]))return ue}}for(var A=0,R=Ce.length;A<R;A++){var D=Ce[A],H=D._path,J=D.getValues();if(!(A&&Ce[A-1]._path===H||(X=null,H._closed||(ce=Ye.getValues(H.getLastCurve().getSegment2(),D.getSegment1(),null,!oe))[Ae]!==ce[Ae+6]&&(X=ce),X)))for(var X=J,Y=H.getLastCurve();Y&&Y!==D;){var me=Y.getValues();if(me[Ae]!==me[Ae+6]){X=me;break}Y=Y.getPrevious()}if(J=b(J))return J;if(A+1===R||Ce[A+1]._path!==H){if(ce&&(J=b(ce)))return J;Ze+=ct=!F||ct||ft?ct:ft=H.isClockwise(oe)^te?1:-1,nt+=ft,ct=ft=0,F=F&&!(s=!0),ce=null}}return Ze=i(Ze),nt=i(nt),{winding:t(Ze,nt),windingL:Ze,windingR:nt,quality:c,onPath:s}}function G(U,Z,te,oe,he){var ce=[],Ce=U,Te=0;do;while((Ze=U.getCurve())&&(ae=Ze.getLength(),ce.push({segment:U,curve:Ze,length:ae}),Te+=ae),(U=U.getNext())&&!U._intersection&&U!==Ce);for(var Ae=[.5,.25,.75],Fe={winding:0,quality:-1},xe=0;xe<Ae.length&&Fe.quality<.5;xe++)for(var ae=Te*Ae[xe],fe=0,Ve=ce.length;fe<Ve;fe++){var Pe=(s=ce[fe]).length;if(ae<=Pe){var Ze,nt=(Ze=s.curve)._path,ct=(c=nt._parent)instanceof qt?c:nt,ft=Xe.clamp(Ze.getTimeAt(ae),.001,.999),F=Ze.getPointAtTime(ft),s=i(Ze.getTangentAtTime(ft).y)<Math.SQRT1_2,c=null;if(he.subtract&&te&&(ft=(ct===Z?te:Z)._getWinding(F,s,!0),ct===Z&&ft.winding||ct===te&&!ft.winding)){if(ft.quality<1)continue;c={winding:0,quality:1}}(c=c||j(F,oe[nt._id][Ze.getIndex()],s,!0)).quality>Fe.quality&&(Fe=c);break}ae-=Pe}for(fe=ce.length-1;0<=fe;fe--)ce[fe].segment._winding=Fe}function K(U,Z){var te,oe=[];function he(D){return!(!D||D._visited||Z&&(!Z[(D=D._winding||{}).winding]||Z.unite&&D.winding===2&&D.windingL&&D.windingR))}function ce(D){if(D){for(var H=0,J=te.length;H<J;H++)if(D===te[H])return!0}return!1}function Ce(D){for(var H=D._segments,J=0,X=H.length;J<X;J++)H[J]._visited=!0}U.sort(function(D,H){var J=D._intersection,X=H._intersection,Y=!(!J||!J._overlap),me=!(!X||!X._overlap),se=D._path,re=H._path;return Y^me?Y?1:-1:!J^!X?J?1:-1:se!==re?se._id-re._id:D._index-H._index});for(var Te=0,Ae=U.length;Te<Ae;Te++){var Fe,xe,ae,fe,Ve,Pe=U[Te],Ze=he(Pe),nt=null,ct=!1,ft=!0,F=[];for(Ze&&Pe._path._overlapsOnly&&(fe=Pe._path,Ve=Pe._intersection._segment._path,fe.compare(Ve)&&(fe.getArea()&&oe.push(fe.clone(!1)),Ce(fe),Ce(Ve),Ze=!1));Ze;){var s=!nt,c=function(D,H){var J=D._intersection,X=J,Y=[];function me(se,re){for(;se&&se!==re;){var we,ge=se._segment,ne=ge&&ge._path;ne&&(ne=(we=ge.getNext()||ne.getFirstSegment())._intersection,ge!==D&&(ce(ge)||ce(we)||we&&he(ge)&&(he(we)||ne&&he(ne._segment)))&&Y.push(ge),H&&te.push(ge)),se=se._next}}if(H&&(te=[D]),J){for(me(J);J&&J._previous;)J=J._previous;me(J,X)}return Y}(Pe,s),p=c.shift(),b=!(ct=!s&&(ce(Pe)||ce(p)))&&p;if(s&&(nt=new St(dt.NO_INSERT),Fe=null),ct){(Pe.isFirst()||Pe.isLast())&&(ft=Pe._path._closed),Pe._visited=!0;break}if(b&&Fe&&(F.push(Fe),Fe=null),Fe||(b&&c.push(Pe),Fe={start:nt._segments.length,crossings:c,visited:xe=[],handleIn:ae}),!he(Pe=b?p:Pe)){nt.removeSegments(Fe.start);for(var A=0,R=xe.length;A<R;A++)xe[A]._visited=!1;for(xe.length=0;(Pe=Fe&&Fe.crossings.shift())&&Pe._path||(Pe=null,(Fe=F.pop())&&(xe=Fe.visited,ae=Fe.handleIn)),Fe&&!he(Pe););if(!Pe)break}p=Pe.getNext(),nt.add(new Ke(Pe._point,ae,p&&Pe._handleOut)),Pe._visited=!0,xe.push(Pe),Pe=p||Pe._path.getFirstSegment(),ae=p&&p._handleIn}ct&&(ft&&(nt.getFirstSegment().setHandleIn(ae),nt.setClosed(ft)),nt.getArea()!==0&&oe.push(nt))}return oe}return{_getWinding:function(U,Z,te){return j(U,this.getCurves(),Z,te)},unite:function(U,Z){return m(this,U,"unite",Z)},intersect:function(U,Z){return m(this,U,"intersect",Z)},subtract:function(U,Z){return m(this,U,"subtract",Z)},exclude:function(U,Z){return m(this,U,"exclude",Z)},divide:function(U,Z){return Z&&(Z.trace==0||Z.stroke)?C(this,U,"divide"):f([this.subtract(U,Z),this.intersect(U,Z)],!0,this,U,Z)},resolveCrossings:function(){var U=this._children,Z=U||[this];function te(Pe,Ze){return(Pe=Pe&&Pe._intersection)&&Pe._overlap&&Pe._path===Ze}var oe,he=!1,ce=!1,Ce=this.getIntersections(null,function(Pe){return Pe.hasOverlap()?he=!0:Pe.isCrossing()&&(ce=!0)}),Te=he&&ce&&[];if(Ce=Dt.expand(Ce),he)for(var Ae=z(Ce,function(Pe){return Pe.hasOverlap()},Te),Fe=Ae.length-1;0<=Fe;Fe--){var xe=(Ve=Ae[Fe])._path,ae=Ve._segment,fe=ae.getPrevious(),Ve=ae.getNext();te(fe,xe)&&te(Ve,xe)&&(ae.remove(),fe._handleOut._set(0,0),Ve._handleIn._set(0,0),fe===ae||fe.getCurve().hasLength()||(Ve._handleIn.set(fe._handleIn),fe.remove()))}return ce&&(z(Ce,he&&function(Pe){var Ze=Pe.getCurve(),nt=Pe.getSegment(),ct=(Pe=(ct=Pe._intersection)._curve,ct._segment);if(Ze&&Pe&&Ze._path&&Pe._path)return!0;nt&&(nt._intersection=null),ct&&(ct._intersection=null)},Te),Te&&P(Te),Z=K(k.each(Z,function(Pe){k.push(this,Pe._segments)},[]))),1<(Te=Z.length)&&U?(Z!==U&&this.setChildren(Z),oe=this):Te!==1||U||(Z[0]!==this&&this.setSegments(Z[0].removeSegments()),oe=this),oe||((oe=new qt(dt.NO_INSERT)).addChildren(Z),(oe=oe.reduce()).copyAttributes(this),this.replaceWith(oe)),oe},reorient:function(U,Z){var te=this._children;return te&&te.length?this.setChildren(N(this.removeChildren(),function(oe){return!!(U?oe:1&oe)},Z)):Z!==O&&this.setClockwise(Z),this},getInteriorPoint:function(){var U=this.getBounds().getCenter(!0);if(!this.contains(U)){for(var Z=this.getCurves(),te=U.y,oe=[],he=[],ce=0,Ce=Z.length;ce<Ce;ce++){var Te=Z[ce].getValues(),Ae=Te[1],Fe=Te[3],xe=Te[5],ae=Te[7];if(te>=e(Ae,Fe,xe,ae)&&te<=t(Ae,Fe,xe,ae))for(var fe=Ye.getMonoCurves(Te),Ve=0,Pe=fe.length;Ve<Pe;Ve++){var Ze=fe[Ve],nt=Ze[1],ct=Ze[7];nt!==ct&&(nt<=te&&te<=ct||ct<=te&&te<=nt)&&(Ze=te===nt?Ze[0]:te===ct?Ze[6]:Ye.solveCubic(Ze,1,te,he,0,1)===1?Ye.getPoint(Ze,he[0]).x:(Ze[0]+Ze[6])/2,oe.push(Ze))}}1<oe.length&&(oe.sort(function(ft,F){return ft-F}),U.x=(oe[0]+oe[1])/2)}return U}}});var di=k.extend({_class:"PathFlattener",initialize:function(e,t,i,r,l){var d,f=[],v=[],m=0,C=1/(i||32),E=e._segments,P=E[0];function N(G,K){K=Ye.getValues(G,K,l),f.push(K),function U(Z,te,oe,he){var ce,Ce;!(C<he-oe)||r&&Ye.isStraight(Z)||Ye.isFlatEnough(Z,t||.25)?(ce=Z[6]-Z[0],Ce=Z[7]-Z[1],0<(Ce=Math.sqrt(ce*ce+Ce*Ce))&&(m+=Ce,v.push({offset:m,curve:Z,index:te,time:he}))):(Ce=Ye.subdivide(Z,.5),Z=(oe+he)/2,U(Ce[0],te,oe,Z),U(Ce[1],te,Z,he))}(K,G._index,0,1)}for(var z=1,j=E.length;z<j;z++)N(P,d=E[z]),P=d;e._closed&&N(d||P,E[0]),this.curves=f,this.parts=v,this.length=m,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=Ye.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))}}},k.each(Ye._evaluateMethods,function(e){this[e+"At"]=function(t){return t=this._get(t),Ye[e](this.curves[t.index],t.time)}},{})),$t=k.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,m=this.chordLengthParameterize(i,r),C=Math.max(t,t*t),E=!0,P=0;P<=4;P++){var N=this.generateBezier(i,r,m,l,d),z=this.findMaxError(i,r,N,m);if(z.error<t&&E)return void this.addCurve(e,N);if(v=z.index,z.error>=C)break;E=this.reparameterize(i,r,m,N),C=z.error}var j=f[v-1].subtract(f[v+1]);this.fitCubic(e,t,i,v,l,j),this.fitCubic(e,t,v,r,j.negate(),d)}else{var G=f[i];j=f[r],f=G.getDistance(j)/3,this.addCurve(e,[G,G.add(l.normalize(f)),j.add(d.normalize(f)),j])}},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],m=f[t],C=[[0,0],[0,0]],E=[0,0],P=0,N=t-e+1;P<N;P++){var z=(K=1-(Z=i[P]))*K*K,j=(U=3*Z*K)*K,G=U*Z,K=Z*Z*Z,U=r.normalize(j),Z=l.normalize(G);K=f[e+P].subtract(v.multiply(z+j)).subtract(m.multiply(G+K)),C[0][0]+=U.dot(U),C[0][1]+=U.dot(Z),C[1][0]=C[0][1],C[1][1]+=Z.dot(Z),E[0]+=U.dot(K),E[1]+=Z.dot(K)}var te,oe;1e-12<d(t=C[0][0]*C[1][1]-C[1][0]*C[0][1])?(oe=C[0][0]*E[1]-C[1][0]*E[0],te=(E[0]*C[1][1]-E[1]*C[0][1])/t,oe/=t):(t=C[0][0]+C[0][1],Ce=C[1][0]+C[1][1],te=oe=1e-12<d(t)?E[0]/t:1e-12<d(Ce)?E[1]/Ce:0);var he,ce,Ce=1e-12*(d=m.getDistance(v));return te<Ce||oe<Ce?te=oe=d/3:(Ce=m.subtract(v),he=r.normalize(te),ce=l.normalize(oe),he.dot(Ce)-ce.dot(Ce)>d*d&&(te=oe=d/3,he=ce=null)),[v,v.add(he||r.normalize(te)),m.add(ce||l.normalize(oe)),m]},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),m=this.evaluate(1,l,i);return t=f.subtract(t),m=v.dot(v)+t.dot(m),Xe.isMachineZero(m)?i:i-t.dot(v)/m},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}}}),ti=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&&k.isPlainObject(e)&&e.x===O&&e.y===O;this._initialize(t&&e,!t&&$.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"}),jt=ti.extend({_class:"PointText",initialize:function(){ti.apply(this,arguments)},getPoint:function(){var e=this._matrix.getTranslation();return new At(e.x,e.y,this,"setPoint")},setPoint:function(){var e=$.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 m=0,C=r.length;m<C;m++){e.shadowColor=v;var E=r[m];l&&(e.fillText(E,0,0),e.shadowColor="rgba(0,0,0,0)"),d&&e.strokeText(E,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 De(f,r?-.75*d:0,i,r*d),e?e._transformBounds(d,d):d}}),It=k.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,m){var C=Math.max(f,v,m),E=C-Math.min(f,v,m);return[E==0?0:60*(C==f?(v-m)/E+(v<m?6:0):C==v?(m-f)/E+2:(f-v)/E+4),C===0?0:E/C,C]},"hsb-rgb":function(f,v,m){f=(f/60%6+6)%6;var C=Math.floor(f);return[(f=[m,m*(1-v),m*(1-v*(f-=C)),m*(1-v*(1-f))])[(C=l[C])[0]],f[C[1]],f[C[2]]]},"rgb-hsl":function(f,v,m){var C=Math.max(f,v,m),E=Math.min(f,v,m),P=C-E,N=P==0,z=(C+E)/2;return[N?0:60*(C==f?(v-m)/P+(v<m?6:0):C==v?(m-f)/P+2:(f-v)/P+4),N?0:z<.5?P/(C+E):P/(2-C-E),z]},"hsl-rgb":function(f,v,m){if(v===0)return[m,m,m];for(var C=[(f=(f/360%1+1)%1)+1/3,f,f-1/3],E=m<.5?m*(1+v):m+v-m*v,P=2*m-E,N=[],z=0;z<3;z++){var j=C[z];j<0&&(j+=1),1<j&&--j,N[z]=6*j<1?P+6*(E-P)*j:2*j<1?E:3*j<2?P+(E-P)*(2/3-j)*6:P}return N},"rgb-gray":function(f,v,m){return[.2989*f+.587*v+.114*m]},"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 k.each(t,function(f,v){i[v]=[],k.each(f,function(m,C){var E=k.capitalize(m),P=/^(hue|saturation)$/.test(m),N=i[v][C]=v==="gradient"?m==="gradient"?function(z){var j=this._components[0];return j!==(z=I.read(Array.isArray(z)?z:arguments,0,{readNull:!0}))&&(j&&j._removeOwner(this),z&&z._addOwner(this)),z}:function(){return $.read(arguments,0,{readNull:m==="highlight",clone:!0})}:function(z){return z==null||isNaN(z)?0:+z};this["get"+E]=function(){return(this._type===v||P&&/^hs[bl]$/.test(this._type)?this._components:this._convert(v))[C]},this["set"+E]=function(z){this._type===v||P&&/^hs[bl]$/.test(this._type)||(this._components=this._convert(v),this._properties=t[v],this._type=v),this._components[C]=N.call(this,z),this._changed()}},this)},{_class:"Color",_readIndex:!0,initialize:function f(v){var m,C,E,P=arguments,N=this.__read,z=0,j=(v=Array.isArray(v)?(P=v)[0]:v)!=null&&typeof v;if(j==="string"&&v in t&&(G=v,v=P[1],Array.isArray(v)?(m=v,U=P[2]):(N&&(z=1),P=k.slice(P,1),j=typeof v)),!m){if(C=j==="number"?P:j==="object"&&v.length!=null?v:null){var G=G||(3<=C.length?"rgb":"gray"),K=t[G].length,U=C[K];N&&(z+=C===arguments?K+(U!=null?1:0):1),C.length>K&&(C=k.slice(C,0,K))}else if(j==="string")K=function(Ce){var Te=Ce.match(/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})?$/i)||Ce.match(/^#([\da-f])([\da-f])([\da-f])([\da-f])?$/i),Ae="rgb";if(Te)for(var Fe=Te[4]?4:3,xe=new Array(Fe),ae=0;ae<Fe;ae++){var fe=Te[ae+1];xe[ae]=parseInt(fe.length==1?fe+fe:fe,16)/255}else if(Te=Ce.match(/^(rgb|hsl)a?\((.*)\)$/)){Ae=Te[1],xe=Te[2].trim().split(/[,\s]+/g);for(var Ve=Ae==="hsl",Pe=(ae=0,Math.min(xe.length,4));ae<Pe;ae++){var Ze,nt=xe[ae];fe=parseFloat(nt),Ve?ae===0?(Ze=nt.match(/([a-z]*)$/)[1],fe*={turn:360,rad:180/Math.PI,grad:.9}[Ze]||1):ae<3&&(fe/=100):ae<3&&(fe/=/%$/.test(nt)?100:255),xe[ae]=fe}}else{var ct,ft=r[Ce];xe=(ft=ft||(V?(e||((e=Re.getContext(1,1,{willReadFrequently:!0})).globalCompositeOperation="copy"),e.fillStyle="rgba(0,0,0,0)",e.fillStyle=Ce,e.fillRect(0,0,1,1),ct=e.getImageData(0,0,1,1).data,r[Ce]=[ct[0]/255,ct[1]/255,ct[2]/255]):[0,0,0])).slice()}return[Ae,xe]}(v),G=K[0],(m=K[1]).length===4&&(U=m[3],m.length--);else if(j==="object")if(v.constructor===f){if(G=v._type,m=v._components.slice(),U=v._alpha,G==="gradient")for(var Z=1,te=m.length;Z<te;Z++){var oe=m[Z];oe&&(m[Z]=oe.clone())}}else if(v.constructor===I)G="gradient",C=P;else{var he=t[G="hue"in v?"lightness"in v?"hsl":"hsb":"gradient"in v||"stops"in v||"radial"in v?"gradient":"gray"in v?"gray":"rgb"],ce=i[G];for(this._components=m=[],Z=0,te=he.length;Z<te;Z++)(E=v[he[Z]])==null&&!Z&&G==="gradient"&&"stops"in v&&(E={stops:v.stops,radial:v.radial}),(E=ce[Z].call(this,E))!=null&&(m[Z]=E);U=v.alpha}N&&G&&(z=1)}if(this._type=G||"rgb",!m)for(this._components=m=[],Z=0,te=(ce=i[this._type]).length;Z<te;Z++)(E=ce[Z].call(this,C&&C[Z]))!=null&&(m[Z]=E);return this._components=m,this._properties=t[this._type],this._alpha=U,N&&(this.__read=z),this},set:"#initialize",_serialize:function(f,v){var m=this.getComponents();return k.serialize(/^(gray|rgb)$/.test(this._type)?m:[this._type].concat(m),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 It(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=k.isPlainValue(f,!0)?It.read(arguments):f;return v===this||v&&this._class===v._class&&this._type===v._type&&this.getAlpha()===v.getAlpha()&&k.equals(this._components,v._components)||!1},toString:function(){for(var f=this._properties,v=[],m=this._type==="gradient",C=Qe.instance,E=0,P=f.length;E<P;E++){var N=this._components[E];N!=null&&v.push(f[E]+": "+(m?N:C.number(N)))}return this._alpha!=null&&v.push("alpha: "+C.number(this._alpha)),"{ "+v.join(", ")+" }"},toCSS:function(f){var v=this._convert("rgb"),m=f||this._alpha==null?1:this._alpha;function C(E){return Math.round(255*(E<0?0:1<E?1:E))}return v=[C(v[0]),C(v[1]),C(v[2])],m<1&&v.push(m<0?0:m),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 m,C=(z=this._components)[0],E=C._stops,P=z[1],N=z[2],z=z[3];(v=v&&v.inverted())&&(P=v._transformPoint(P),N=v._transformPoint(N),z=z&&v._transformPoint(z)),m=C._radial?(v=N.getDistance(P),!z||(C=z.subtract(P)).getLength()>v&&(z=P.add(C.normalize(v-.1))),f.createRadialGradient((z=z||P).x,z.y,0,P.x,P.y,v)):f.createLinearGradient(P.x,P.y,N.x,N.y);for(var j=0,G=E.length;j<G;j++){var K=E[j],U=K._offset;m.addColorStop(U??j/(G-1),K._color.toCanvasStyle())}return this._canvasStyle=m},transform:function(f){if(this._type==="gradient"){for(var v=this._components,m=1,C=v.length;m<C;m++){var E=v[m];f._transformPoint(E,E,!0)}this._changed()}},statics:{_types:t,random:function(){var f=Math.random;return new It(f(),f(),f())},_setOwner:function(f,v,m){return f&&!(f=f._owner&&v&&f._owner!==v?f.clone():f)._owner^!v&&(f._owner=v||null,f._setter=m||null),f}}})},new function(){return k.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=It.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 It(r,d,this._alpha!=null?e(this._alpha,i.getAlpha()):null)}},{})}),I=k.extend({_class:"Gradient",initialize:function(e,t){this._id=bt.get(),e&&k.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 k.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=O))},clone:function(){for(var e=[],t=0,i=this._stops.length;t<i;t++)e[t]=this._stops[t].clone();return new I(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=O;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=k.extend({_class:"GradientStop",initialize:function(e,t){var i=e,r=t;typeof e=="object"&&t===O&&(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 k.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(){It._setOwner(this._color,null),this._color=It._setOwner(It.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}}),pe=k.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 $,selectedColor:null},t=k.set({},e,{fontFamily:"sans-serif",fontWeight:"normal",fontSize:12,leading:null,justification:"left"}),i=k.set({},t,{fillColor:new It}),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,m){this._values={},this._owner=v,this._project=v&&v._project||m||Ut.project,this._defaults=!v||v instanceof Nt?t:v instanceof ti?i:e,f&&this.set(f)}};return k.each(t,function(f,v){var m=/Color$/.test(v),C=v==="shadowOffset",E=k.capitalize(v),P=r[v],N="set"+E,z="get"+E;d[N]=function(j){var G,K=this._owner,U=K&&K._children,Z=U&&0<U.length&&!(K instanceof qt);if(Z)for(var te=0,oe=U.length;te<oe;te++)U[te]._style[N](j);v!=="selectedColor"&&Z||!(v in this._defaults)||(G=this._values[v])!==j&&(m&&(G&&(It._setOwner(G,null),G._canvasStyle=null),j&&j.constructor===It&&(j=It._setOwner(j,K,Z&&N))),this._values[v]=j,K&&K._changed(P||129))},d[z]=function(j){var G,K=this._owner,U=K&&K._children,Z=U&&0<U.length&&!(K instanceof qt);if(Z&&!j)for(var te=0,oe=U.length;te<oe;te++){var he=U[te]._style[z]();if(te){if(!k.equals(G,he))return O}else G=he}else v in this._defaults&&((G=this._values[v])===O?(G=this._defaults[v])&&G.clone&&(G=G.clone()):!(j=m?It:C?$:null)||G&&G.constructor===j||(this._values[v]=G=j.read([G],0,{readNull:!0,clone:!0})));return G&&m?It._setOwner(G,K,Z&&N):G},l[z]=function(j){return this._style[z](j)},l[N]=function(j){this._style[N](j)}}),k.each({Font:"FontFamily",WindingRule:"FillRule"},function(f,v){var m="get"+v;v="set"+v,d[m]=l[m]="#get"+f,d[v]=l[v]="#set"+f}),dt.inject(l),d},{set:function(e){var t,i=e instanceof pe,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,m=r._defaults;for(d in f){var C=f[d],E=v[d];if(!(l&&d in v||k.equals(C,E===O?m[d]:E)))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}}),Ie=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 m;if((m=(m=d[v])?m+f:i)in t){if(!r)return t[m];t[m]=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 De(v,t,r.width,r.height)},getViewportBounds:function(t){t=(i=t.ownerDocument).defaultView;var i=i.documentElement;return new De(0,0,t.innerWidth||i.clientWidth,t.innerHeight||i.clientHeight)},getOffset:function(t,i){return Ie.getBounds(t,i).getPoint()},getSize:function(t){return Ie.getBounds(t,!0).getSize()},isInvisible:function(t){return Ie.getSize(t).equals(new $e(0,0))},isInView:function(t){return!Ie.isInvisible(t)&&Ie.getViewportBounds(t).intersects(Ie.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)}}},je={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 $(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 je.getPoint(e).subtract(Ie.getOffset(t||je.getTarget(e)))}};je.requestAnimationFrame=new function(){var e,t=Ie.getPrefixed(V,"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 et,ke,vt,Rt,Q,ye,qe,T=k.extend(ee,{_class:"View",initialize:function e(t,i){function r(E){return i[E]||parseInt(i.getAttribute(E),10)}function l(){var E=Ie.getSize(i);return E.isNaN()||E.isZero()?new $e(r("width"),r("height")):E}var d,f,v,m,C;V&&i?(this._id=i.getAttribute("id"),this._id==null&&i.setAttribute("id",this._id="paper-view-"+e._id++),je.add(i,this._viewEvents),Ie.setPrefixed(i.style,{userDrag:C="none",userSelect:C,touchCallout:C,contentZooming:C,tapHighlightColor:"rgba(0,0,0,0)"}),_e.hasAttribute(i,"resize")&&je.add(V,(f=this)._windowEvents={resize:function(){f.setViewSize(l())}}),d=l(),_e.hasAttribute(i,"stats")&&typeof Stats<"u"&&(this._stats=new Stats,m=(v=this._stats.domElement).style,C=Ie.getOffset(i),m.position="absolute",m.left=C.x+"px",m.top=C.y+"px",W.body.appendChild(v))):(d=new $e(i),i=null),this._project=t,this._scope=t._scope,this._element=i,this._pixelRatio||(this._pixelRatio=V&&V.devicePixelRatio||1),this._setElementSize(d.width,d.height),this._viewSize=d,e._views.push(this),((e._viewsById[this._id]=this)._matrix=new _t)._owner=this,e._focused||(e._focused=this),this._frameItems={},this._frameItemCount=0,this._itemEvents={native:{},virtual:{}},this._autoUpdate=!Ut.agent.node,this._needsUpdate=!1},remove:function(){if(!this._project)return!1;T._focused===this&&(T._focused=null),T._views.splice(T._views.indexOf(this),1),delete T._viewsById[this._id];var e=this._project;return e._view===this&&(e._view=null),je.remove(this._element,this._viewEvents),je.remove(V,this._windowEvents),this._element=this._project=null,this.off("frame"),this._animate=!1,this._frameItems={},!0},_events:k.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,je.requestAnimationFrame(function(){var t;e._requested=!1,e._animate&&(e.requestUpdate(),t=e._element,Ie.getPrefixed(W,"hidden")&&_e.getAttribute(t,"keepalive")!=="true"||!Ie.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(){Ut=this._scope;var e=Date.now()/1e3,t=this._last?e-this._last:0;this._last=e,this.emit("frame",new k({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 k(e,{time:t.time+=e.delta,count:t.count++}))},_changed:function(){this._project._changed(4097),this._bounds=this._decomposed=O},getElement:function(){return this._element},getPixelRatio:function(){return this._pixelRatio},getResolution:function(){return 72*this._pixelRatio},getViewSize:function(){var e=this._viewSize;return new Tt(e.width,e.height,this,"setViewSize")},setViewSize:function(){var e=$e.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 De(new $,this._viewSize))),this._bounds},getSize:function(){return this.getBounds().getSize()},isVisible:function(){return Ie.isInView(this._element)},isInserted:function(){return Ie.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(Ie.getStyles(r).fontSize),i.removeChild(r)):t=parseFloat(t),t},getTextWidth:function(e,t){return 0}},k.each(["rotate","scale","shear","skew"],function(e){var t=e==="rotate";this[e]=function(){var i=arguments,r=(t?k:$).read(i);return i=$.read(i,0,{readNull:!0}),this.transform(new _t()[e](r,i||this.getCenter(!0)))}},{_decompose:function(){return this._decomposed||(this._decomposed=this._matrix.decompose())},translate:function(){var e=new _t;return this.transform(e.translate.apply(e,arguments))},getCenter:function(){return this.getBounds().getCenter()},setCenter:function(){var e=$.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 _t().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 At(e.x,e.y,this,"setScaling")},setScaling:function(){var e=this.getScaling(),t=$.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($.read(arguments).negate())}}),{projectToView:function(){return this._matrix._transformPoint($.read(arguments))},viewToProject:function(){return this._matrix._inverseTransform($.read(arguments))},getEventPoint:function(e){return this.viewToProject(je.getOffset(e,this._element))}},{statics:{_views:[],_viewsById:{},_id:0,create:function(e,t){return W&&typeof t=="string"&&(t=W.getElementById(t)),new(V?x:T)(e,t)}}},new function(){if(V){var e,t,i,r,l,d=!1,f=!1;(m=V.navigator).pointerEnabled||m.msPointerEnabled?(i="pointerdown MSPointerDown",r="pointermove MSPointerMove",l="pointerup pointercancel MSPointerUp MSPointerCancel"):(i="touchstart",r="touchmove",l="touchend touchcancel","ontouchstart"in V&&m.userAgent.match(/mobile|tablet|ip(ad|hone|od)|android|silk/i)||(i+=" mousedown",r+=" mousemove",l+=" mouseup"));var v={},m={mouseout:function(xe){var ae,fe,Ve,Pe=T._focused,Ze=je.getRelatedTarget(xe);!Pe||Ze&&Ze.nodeName!=="HTML"||(fe=(ae=je.getOffset(xe,Pe._element)).x,Ze=(Ve=Math.abs)(fe),ae.x=Ve(Ve=Ze-(1<<25))<Ze?Ve*(fe<0?-1:1):fe,Te(Pe,xe,Pe.viewToProject(ae)))},scroll:Ce};v[i]=function(xe){var ae=T._focused=ce(xe);d||(d=!0,ae._handleMouseEvent("mousedown",xe))},m[r]=function(xe){var ae,fe=T._focused;f||((ae=ce(xe))?fe!==ae&&(fe&&Te(fe,xe),e=e||fe,fe=T._focused=t=ae):t&&t===fe&&(e&&!e.isInserted()&&(e=null),fe=T._focused=e,e=null,Ce())),fe&&Te(fe,xe)},m[i]=function(){f=!0},m[l]=function(xe){var ae=T._focused;ae&&d&&ae._handleMouseEvent("mouseup",xe),f=d=!1},je.add(W,m),je.add(V,{load:Ce});var C,E,P,N,z,j,G,K,U=!1,Z=!1,te={doubleclick:"click",mousedrag:"mousemove"},oe=!1,he={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(xe,ae,fe){var Ve=this._itemEvents,Pe=Ve.native[xe],Ze=xe==="mousemove",nt=this._scope.tool,ct=this;function ft(A){return Ve.virtual[A]||ct.responds(A)||nt&&nt.responds(A)}Ze&&d&&ft("mousedrag")&&(xe="mousedrag"),fe=fe||this.getEventPoint(ae);var F,s=this.getBounds().contains(fe),c=(F=Pe&&s&&ct._project.hitTest(fe,{tolerance:0,fill:!0,stroke:!0}))&&F.item||null,p=!1;if((F={})[xe.substr(5)]=!0,Pe&&c!==N&&(N&&Ae(N,null,"mouseleave",ae,fe),c&&Ae(c,null,"mouseenter",ae,fe),N=c),oe^s&&(Ae(this,null,s?"mouseenter":"mouseleave",ae,fe),p=!0),!s&&!F.drag||fe.equals(E)||(Fe(this,c,Ze?xe:"mousemove",ae,fe,E),p=!0),oe=s,F.down&&s||F.up&&C){if(Fe(this,c,xe,ae,fe,C),F.down){if(K=c===j&&Date.now()-G<300,P=j=c,!Z&&c){for(var b=c;b&&!b.responds("mousedrag");)b=b._parent;b&&(z=c)}C=fe}else F.up&&(Z||c!==P||(G=Date.now(),Fe(this,c,K?"doubleclick":"click",ae,fe,C),K=!1),P=z=null);p=!(oe=!1)}E=fe,p&&nt&&(U=nt._handleMouseEvent(xe,ae,fe,F)||U),ae.cancelable!==!1&&(U&&!F.move||F.down&&ft("mouseup"))&&ae.preventDefault()},_handleKeyEvent:function(xe,ae,fe,Ve){var Pe,Ze=this._scope,nt=Ze.tool;function ct(ft){ft.responds(xe)&&(Ut=Ze,ft.emit(xe,Pe=Pe||new L(xe,ae,fe,Ve)))}this.isVisible()&&(ct(this),nt&&nt.responds(xe)&&ct(nt))},_countItemEvent:function(xe,ae){var fe,Ve=(Pe=this._itemEvents).native,Pe=Pe.virtual;for(fe in he)Ve[fe]=(Ve[fe]||0)+(he[fe][xe]||0)*ae;Pe[xe]=(Pe[xe]||0)+ae},statics:{updateFocus:Ce,_resetState:function(){d=f=U=oe=!1,e=t=C=E=P=N=z=j=G=K=null}}}}function ce(xe){return(xe=je.getTarget(xe)).getAttribute&&T._viewsById[xe.getAttribute("id")]}function Ce(){var xe=T._focused;if(!xe||!xe.isVisible()){for(var ae=0,fe=T._views.length;ae<fe;ae++)if((xe=T._views[ae]).isVisible()){T._focused=t=xe;break}}}function Te(xe,ae,fe){xe._handleMouseEvent("mousemove",ae,fe)}function Ae(xe,ae,fe,Ve,Pe,Ze,nt){for(var ct,ft=!1;xe&&xe!==nt&&!function F(s,c){if(s.responds(c)){if(ct=ct||new ve(c,Ve,Pe,ae||s,Ze?Pe.subtract(Ze):null),s.emit(c,ct)&&(U=!0,ct.prevented&&(Z=!0),ct.stopped))return ft=!0}else if(c=te[c])return F(s,c)}(xe,fe);)xe=xe._parent;return ft}function Fe(xe,ae,fe,Ve,Pe,Ze){return xe._project.removeOn(fe),Z=U=!1,z&&Ae(z,null,fe,Ve,Pe,Ze)||ae&&ae!==z&&!ae.isDescendant(z)&&Ae(ae,null,fe==="mousedrag"?"mousemove":fe,Ve,Pe,Ze,z)||Ae(xe,z||ae||xe,fe,Ve,Pe,Ze)}}),x=T.extend({_class:"CanvasView",initialize:function(e,t){if(!(t instanceof V.HTMLCanvasElement)){var i=$e.read(arguments,1);if(i.isZero())throw new Error("Cannot create CanvasView with the provided argument: "+k.slice(arguments,1));t=Re.getCanvas(i)}var r=this._context=t.getContext("2d");r.save(),this._pixelRatio=1,/^off|false$/.test(_e.getAttribute(t,"hidpi"))||(i=V.devicePixelRatio||1,r=Ie.getPrefixed(r,"backingStorePixelRatio")||1,this._pixelRatio=i/r),T.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,_e.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=Ut.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)}}),M=k.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 ie.modifiers}}),L=M.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()+" }"}}),ie=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 k({shift:!1,control:!1,alt:!1,meta:!1,capsLock:!1,space:!1}).inject({option:{get:function(){return this.alt}},command:{get:function(){var C=Ut&&Ut.agent;return C&&C.mac?this.meta:this.control}}});function v(C){var E=C.key||C.keyIdentifier;return E=/^U\+/.test(E)?String.fromCharCode(parseInt(E.substr(2),16)):/^Arrow[A-Z]/.test(E)?E.substr(5):E==="Unidentified"||E===O?String.fromCharCode(C.keyCode):E,i[E]||(1<E.length?k.hyphenate(E):E.toLowerCase())}function m(C,E,P,N){var z,j=T._focused;if((l[E]=C)?d[E]=P:delete d[E],1<E.length&&(z=k.camelize(E))in f){f[z]=C;var G=Ut&&Ut.agent;if(z==="meta"&&G&&G.mac)if(C)e={};else{for(var K in e)K in d&&m(!1,K,e[K],N);e=null}}else C&&e&&(e[E]=P);j&&j._handleKeyEvent(C?"keydown":"keyup",N,E,P)}return je.add(W,{keydown:function(C){var E=v(C),P=Ut&&Ut.agent;1<E.length||P&&P.chrome&&(C.altKey||P.mac&&C.metaKey||!P.mac&&C.ctrlKey)?m(!0,E,r[E]||(1<E.length?"":E),C):t=E},keypress:function(C){var E,P;t&&(E=v(C),P=32<=(P=C.charCode)?String.fromCharCode(P):1<E.length?"":E,m(!0,E=E!==t?P.toLowerCase():E,P,C),t=null)},keyup:function(C){var E=v(C);E in d&&m(!1,E,d[E],C)}}),je.add(V,{blur:function(C){for(var E in d)m(!1,E,d[E],C)}}),{modifiers:f,isDown:function(C){return!!l[C]}}},ve=M.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()+" }"}}),Ne=M.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()+" }"}}),Me=(be.extend({_class:"Tool",_list:"tools",_reference:"tool",_events:["onMouseDown","onMouseUp","onMouseDrag","onMouseMove","onActivate","onDeactivate","onEditOptions","onKeyDown","onKeyUp"],initialize:function(e){be.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){Ut=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,m=!1,C=this;function E(N,z){var j=i,G=l?C._point:C._downPoint||j;if(l){if(0<=C._moveCount&&j.equals(G))return;if(G&&(N!=null||z!=null)){var K=j.subtract(G),U=K.getLength();if(U<(N||0))return;z&&(j=G.add(K.normalize(Math.min(U,z))))}C._moveCount++}return C._point=j,C._lastPoint=G||j,r.down&&(C._moveCount=-1,C._downPoint=j,C._downCount++),1}function P(){d&&(m=C.emit(e,new Ne(C,e,t))||m)}if(r.down)E(),P();else if(r.up)E(null,v),P();else if(d)for(;E(f,v);)P();return m}}),k.extend(ee,{_class:"Tween",statics:{easings:new k({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 m=function(C){return typeof C=="function"?C(t,e):C};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=m(this._from[d]),v=m(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 k({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],m=this._getProperty(v);e?(d=this._resolveValue(m,e[f]),this._setProperty(v,d),d=(d=this._getProperty(v))&&d.clone?d.clone():d,this._setProperty(v,m)):d=m&&m.clone?m.clone():m,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 Ut.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)}})),Re=k.exports.CanvasProvider={canvases:[],getCanvas:function(e,t,i){if(!V)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))}},He=new function(){var e,t,i,r,l,d,f,v,m,C,E,P=Math.min,N=Math.max,z=Math.abs;function j(he,ce,Ce){return .2989*he+.587*ce+.114*Ce}function G(he,ce,Ce,Te){var Ae,Fe=Te-j(he,ce,Ce);Te=j(m=he+Fe,C=ce+Fe,E=Ce+Fe),Ce=P(m,C,E),Fe=N(m,C,E),Ce<0&&(m=Te+(m-Te)*Te/(Ae=Te-Ce),C=Te+(C-Te)*Te/Ae,E=Te+(E-Te)*Te/Ae),255<Fe&&(m=Te+(m-Te)*(Ae=255-Te)/(Fe-=Te),C=Te+(C-Te)*Ae/Fe,E=Te+(E-Te)*Ae/Fe)}function K(he,ce,Ce){return N(he,ce,Ce)-P(he,ce,Ce)}function U(he,ce,Ce,Te){var Ae=[he,ce,Ce],Fe=N(he,ce,Ce);Ce=P(he,ce,Ce),ce=P(Ce=Ce===he?0:Ce===ce?1:2,Fe=Fe===he?0:Fe===ce?1:2)===0?N(Ce,Fe)===1?2:1:0,Ae[Fe]>Ae[Ce]?(Ae[ce]=(Ae[ce]-Ae[Ce])*Te/(Ae[Fe]-Ae[Ce]),Ae[Fe]=Te):Ae[ce]=Ae[Fe]=0,Ae[Ce]=0,m=Ae[0],C=Ae[1],E=Ae[2]}var Z={multiply:function(){m=l*e/255,C=d*t/255,E=f*i/255},screen:function(){m=l+e-l*e/255,C=d+t-d*t/255,E=f+i-f*i/255},overlay:function(){m=l<128?2*l*e/255:255-2*(255-l)*(255-e)/255,C=d<128?2*d*t/255:255-2*(255-d)*(255-t)/255,E=f<128?2*f*i/255:255-2*(255-f)*(255-i)/255},"soft-light":function(){var he=e*l/255;m=he+l*(255-(255-l)*(255-e)/255-he)/255,C=(he=t*d/255)+d*(255-(255-d)*(255-t)/255-he)/255,E=(he=i*f/255)+f*(255-(255-f)*(255-i)/255-he)/255},"hard-light":function(){m=e<128?2*e*l/255:255-2*(255-e)*(255-l)/255,C=t<128?2*t*d/255:255-2*(255-t)*(255-d)/255,E=i<128?2*i*f/255:255-2*(255-i)*(255-f)/255},"color-dodge":function(){m=l===0?0:e===255?255:P(255,255*l/(255-e)),C=d===0?0:t===255?255:P(255,255*d/(255-t)),E=f===0?0:i===255?255:P(255,255*f/(255-i))},"color-burn":function(){m=l===255?255:e===0?0:N(0,255-255*(255-l)/e),C=d===255?255:t===0?0:N(0,255-255*(255-d)/t),E=f===255?255:i===0?0:N(0,255-255*(255-f)/i)},darken:function(){m=l<e?l:e,C=d<t?d:t,E=f<i?f:i},lighten:function(){m=e<l?l:e,C=t<d?d:t,E=i<f?f:i},difference:function(){(m=l-e)<0&&(m=-m),(C=d-t)<0&&(C=-C),(E=f-i)<0&&(E=-E)},exclusion:function(){m=l+e*(255-l-l)/255,C=d+t*(255-d-d)/255,E=f+i*(255-f-f)/255},hue:function(){U(e,t,i,K(l,d,f)),G(m,C,E,j(l,d,f))},saturation:function(){U(l,d,f,K(e,t,i)),G(m,C,E,j(l,d,f))},luminosity:function(){G(l,d,f,j(e,t,i))},color:function(){G(e,t,i,j(l,d,f))},add:function(){m=P(l+e,255),C=P(d+t,255),E=P(f+i,255)},subtract:function(){m=N(l-e,0),C=N(d-t,0),E=N(f-i,0)},average:function(){m=(l+e)/2,C=(d+t)/2,E=(f+i)/2},negation:function(){m=255-z(255-e-l),C=255-z(255-t-d),E=255-z(255-i-f)}},te=this.nativeModes=k.each(["source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","lighter","darker","copy","xor"],function(he){this[he]=!0},{}),oe=Re.getContext(1,1,{willReadFrequently:!0});oe&&(k.each(Z,function(he,ce){var Ce=ce==="darken",Te=!1;oe.save();try{oe.fillStyle=Ce?"#300":"#a00",oe.fillRect(0,0,1,1),oe.globalCompositeOperation=ce,oe.globalCompositeOperation===ce&&(oe.fillStyle=Ce?"#a00":"#300",oe.fillRect(0,0,1,1),Te=oe.getImageData(0,0,1,1).data[0]!==Ce?170:51)}catch{}oe.restore(),te[ce]=Te}),Re.release(oe)),this.process=function(he,ce,Ce,Te,Ae){var Fe=ce.canvas,xe=he==="normal";if(xe||te[he])Ce.save(),Ce.setTransform(1,0,0,1,0,0),Ce.globalAlpha=Te,xe||(Ce.globalCompositeOperation=he),Ce.drawImage(Fe,Ae.x,Ae.y),Ce.restore();else{var ae=Z[he];if(ae){for(var fe=(he=Ce.getImageData(Ae.x,Ae.y,Fe.width,Fe.height)).data,Ve=ce.getImageData(0,0,Fe.width,Fe.height).data,Pe=0,Ze=fe.length;Pe<Ze;Pe+=4){e=Ve[Pe],l=fe[Pe],t=Ve[Pe+1],d=fe[Pe+1],i=Ve[Pe+2],f=fe[Pe+2],r=Ve[Pe+3],v=fe[Pe+3],ae();var nt=r*Te/255,ct=1-nt;fe[Pe]=nt*m+ct*l,fe[Pe+1]=nt*C+ct*d,fe[Pe+2]=nt*E+ct*f,fe[Pe+3]=r*Te+ct*v}Ce.putImageData(he,Ae.x,Ae.y)}}}},ht=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 m in f){var C=f[m],E=r[m];typeof C=="number"&&v&&(C=v.number(C)),E?d.setAttributeNS(E,m,C):d.setAttribute(m,C)}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}},Et=k.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 oi||e instanceof Wt||e instanceof ti)}],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=k.capitalize(t),r=e[2];this[t]={type:e[1],property:t,attribute:e[0],toSVG:r,fromSVG:r&&k.each(r,function(l,d){this[l]=d},{}),exportFilter:e[3],get:"get"+i,set:"set"+i}},{});function kt(e,t,i){var r,l,d=new k,f=e.getTranslation();return t&&(e.isInvertible()?(r=(e=e._shiftless())._inverseTransform(f),f=null):r=new $,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("+et.point(f)+")"),i&&t.push("rotate("+et.number(i)+")"),Xe.isZero(r.x-1)&&Xe.isZero(r.y-1)||t.push("scale("+et.point(r)+")"),l.x&&t.push("skewX("+et.number(l.x)+")"),l.y&&t.push("skewY("+et.number(l.y)+")"),d.transform=t.join(" ")):d.transform="matrix("+e.getValues().join(",")+")"),d}function Zt(e,t){for(var i=kt(e._matrix),r=e._children,l=ht.create("g",i,et),d=0,f=r.length;d<f;d++){var v,m=r[d],C=Ot(m,t);C&&(m.isClipMask()?((v=ht.create("clipPath")).appendChild(C),pi(m,v,"clip"),ht.set(l,{"clip-path":"url(#"+v.id+")"})):l.appendChild(C))}return l}function si(e){var t,i=e._type,r=e._radius,l=kt(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)),ht.create(i,l,et)}function hi(e,t){return ke=ke||{ids:{},svgs:{}},e&&ke.svgs[t+"-"+(e._id||e.__id||(e.__id=bt.get("svg")))]}function pi(e,t,i){ke||hi();var r=ke.ids[i]=(ke.ids[i]||0)+1;t.id=i+"-"+r,ke.svgs[i+"-"+(e._id||e.__id)]=t}function ci(e,t){var i=e,r=null;if(ke){for(var l in i=e.nodeName.toLowerCase()==="svg"&&e,ke.svgs)r||(i||(i=ht.create("svg")).appendChild(e),r=i.insertBefore(ht.create("defs"),i.firstChild)),r.appendChild(ke.svgs[l]);ke=null}return t.asString?new B.XMLSerializer().serializeToString(i):i}function Ot(e,t,i){var r=vt[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 m={},C=!v&&d.getParent(),E=[];return d._name!=null&&(m.id=d._name),k.each(Et,function(P){var N=P.get,z=P.type,j=d[N]();(P.exportFilter?!P.exportFilter(d,j):C&&k.equals(C[N](),j))||(z!=="color"||j==null||(N=j.getAlpha())<1&&(m[P.attribute+"-opacity"]=N),z==="style"?E.push(P.attribute+": "+j):m[P.attribute]=j==null?"none":z==="color"?j.gradient?function(G){if(!(ce=hi(G,"color"))){var K,U,Z=G.getGradient(),te=Z._radial,oe=G.getOrigin(),he=G.getDestination();te?(K={cx:oe.x,cy:oe.y,r:oe.getDistance(he)},(U=G.getHighlight())&&(K.fx=U.x,K.fy=U.y)):K={x1:oe.x,y1:oe.y,x2:he.x,y2:he.y},K.gradientUnits="userSpaceOnUse";for(var ce=ht.create((te?"radial":"linear")+"Gradient",K,et),Ce=Z._stops,Te=0,Ae=Ce.length;Te<Ae;Te++){var Fe,xe=(Fe=Ce[Te])._color,ae=xe.getAlpha();K={offset:(Fe=Fe._offset)==null?Te/(Ae-1):Fe},xe&&(K["stop-color"]=xe.toCSS(!0)),ae<1&&(K["stop-opacity"]=ae),ce.appendChild(ht.create("stop",K,et))}pi(G,ce,"color")}return"url(#"+ce.id+")"}(j):j.toCSS(!0):z==="array"?j.join(","):z==="lookup"?P.toSVG[j]:j)}),E.length&&(m.style=E.join(";")),m.opacity===1&&delete m.opacity,d._visible||(m.visibility="hidden"),ht.set(f,m,et)}(e,l,i)}function fi(e){return et=new Qe((e=e||{}).precision),e}function xt(e,t,i,r,l,d){return i=(d=ht.get(e,t)||d)==null?r?null:i?"":0:i?d:parseFloat(d),/%\s*$/.test(d)?i/100*(l?1:Rt[/x|^width/.test(t)?"width":"height"]):i}function ai(e,t,i,r,l,d,f){return t=xt(e,t||"x",!1,r,l,d),i=xt(e,i||"y",!1,r,l,f),!r||t!=null&&i!=null?new $(t,i):null}function yi(e,t,i,r,l){return t=xt(e,t||"width",!1,r,l),i=xt(e,i||"height",!1,r,l),!r||t!=null&&i!=null?new $e(t,i):null}function Pi(e,t,i){return e==="none"?null:t==="number"?parseFloat(e):t==="array"?e?e.split(/[\s,]+/g).map(parseFloat):[]:t==="color"?Hi(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 Nt,m=v._project,C=(t=m._currentStyle,[]);if(d||f||(v=Mi(v,e,r),m._currentStyle=v._style.clone()),r)for(var E=e.querySelectorAll("defs"),P=0,N=E.length;P<N;P++)Li(E[P],i,!1);for(P=0,N=l.length;P<N;P++){var z,j=l[P];j.nodeType!==1||/^defs$/i.test(j.nodeName)||!(z=Li(j,i,!1))||z instanceof yt||C.push(z)}return v.addChildren(C),d&&(v=Mi(v.reduce(),e,r)),m._currentStyle=t,(d||f)&&(v.remove(),v=null),v}function Fi(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 $(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",P=(xt(e,"href",!0)||"").substring(1))(i=Q[P].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(Mi(new q,v))}i=new I(l,t)}var m,C,E,P=xt(e,"gradientUnits",!0)!=="userSpaceOnUse";return t?(C=(m=ai(e,"cx","cy",!1,P,"50%","50%")).add(xt(e,"r",!1,!1,P,"50%"),0),E=ai(e,"fx","fy",!0,P)):(m=ai(e,"x1","y1",!1,P,"0%","0%"),C=ai(e,"x2","y2",!1,P,"100%","0%")),Mi(new It(i,m,C,E),e)._scaleToBounds=P,null}function Ri(e,t,i,r){if(e.transform){for(var l=(r.getAttribute(i)||"").split(/\)\s*/g),d=new _t,f=0,v=l.length;f<v&&(C=l[f]);f++){for(var m=C.split(/\(\s*/),C=m[0],E=m[1].split(/[\s,]+/g),P=0,N=E.length;P<N;P++)E[P]=parseFloat(E[P]);switch(C){case"matrix":d.append(new _t(E[0],E[1],E[2],E[3],E[4],E[5]));break;case"rotate":d.rotate(E[0],E[1]||0,E[2]||0);break;case"translate":d.translate(E[0],E[1]||0);break;case"scale":d.scale(E);break;case"skewX":d.skew(E[0],0);break;case"skewY":d.skew(0,E[0])}}e.transform(d)}}function Bi(e,t,i){(i=e[i=i==="fill-opacity"?"getFillColor":"getStrokeColor"]&&e[i]())&&i.setAlpha(parseFloat(t))}function Ni(e,t,i){var r;return!(r=(r=e.attributes[t])&&r.value)&&e.style&&(t=k.camelize(t),(r=e.style[t])||i.node[t]===i.parent[t]||(r=i.node[t])),r?r==="none"?null:r:O}function Mi(e,t,i){var r=t.parentNode,l={node:Ie.getStyles(t)||{},parent:!i&&!/^defs$/i.test(r.tagName)&&Ie.getStyles(r)||{}};return k.each(qe,function(d,f){var v=Ni(t,f,l);e=v!==O&&d(e,v,f,t,l)||e}),e}function Hi(e){return(e=(e=(e=e&&e.match(/\((?:["'#]*)([^"')]+)/))&&e[1])&&Q[V?e.replace(V.location.href.split("#")[0]+"#",""):e])&&e._scaleToBounds&&((e=e.clone())._scaleToBounds=!0),e}function Li(e,t,i){var r,l,d,f=(N=e.nodeName.toLowerCase())!=="#document",v=W.body;i&&f&&(Rt=Ut.getView().getSize(),Rt=yi(e,null,null,!0)||Rt,r=ht.create("svg",{style:"stroke-width: 1px; stroke-miterlimit: 10"}),l=e.parentNode,d=e.nextSibling,r.appendChild(e),v.appendChild(r));var m=Ut.settings,C=m.applyMatrix,E=m.insertItems;m.applyMatrix=!1,m.insertItems=!1;var P=ye[N],N=P&&P(e,N,t,i)||null;return m.insertItems=E,m.applyMatrix=C,N&&(!f||N instanceof Nt||(N=Mi(N,e,i)),m=t.onImport,f=f&&e.getAttribute("data-paper-data"),m&&(N=m(e,N,t)||N),t.expandShapes&&N instanceof Wt&&(N.remove(),N=N.toPath()),f&&(N._data=JSON.parse(f))),r&&(v.removeChild(r),l&&(d?l.insertBefore(e,d):l.appendChild(e))),i&&(Q={},N&&k.pick(t.applyMatrix,C)&&N.matrix.apply(!0,!0)),N}function Ui(e,t,i){if(!e)return null;t=typeof t=="function"?{onLoad:t}:t||{};var r=Ut,l=null;function d(C){try{var E=typeof C=="object"?C:new B.DOMParser().parseFromString(C.trim(),"image/svg+xml");if(!E.nodeName)throw E=null,new Error("Unsupported SVG source: "+e);Ut=r,l=Li(E,t,!0),t&&t.insert===!1||i._insertItem(O,l);var P=t.onLoad;P&&P(l,C)}catch(N){f(N)}}function f(C,E){var P=t.onError;if(!P)throw new Error(C);P(C,E)}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 m=W.getElementById(e);m?d(m):function(C){var E=new B.XMLHttpRequest;E.open((C.method||"get").toUpperCase(),C.url,k.pick(C.async,!0)),C.mimeType&&E.overrideMimeType(C.mimeType),E.onload=function(){var P=E.status;P===0||P===200?C.onLoad&&C.onLoad.call(E,E.responseText):E.onerror()},E.onerror=function(){var P=E.status,N='Could not load "'+C.url+'" (Status: '+P+")";if(!C.onError)throw new Error(N);C.onError(N,P)},E.send(null)}({url:e,async:!0,onLoad:d,onError:f})}return l}vt={Group:Zt,Layer:Zt,Raster:function(e,t){var i=kt(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(),ht.create("image",i,et)},Path:function(e,t){var i=t.matchShapes;if(i){var r=e.toShape(!1);if(r)return si(r)}var l=e._segments,d=l.length,f=kt(e._matrix);if(i&&2<=d&&!e.hasHandles())if(2<d){for(var v=e._closed?"polygon":"polyline",m=[],C=0;C<d;C++)m.push(et.point(l[C]._point));f.points=m.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 ht.create(v,f,et)},Shape:si,CompoundPath:function(e,t){var i=kt(e._matrix);return(t=e.getPathData(null,t.precision))&&(i.d=t),ht.create("path",i,et)},SymbolItem:function(e,t){var i=kt(e._matrix,!0),r=e._definition,l=hi(r,"symbol"),d=r._item;return e=d.getStrokeBounds(),l||((l=ht.create("symbol",{viewBox:et.rectangle(e)})).appendChild(Ot(d,t)),pi(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",ht.create("use",i,et)},PointText:function(e){var t=ht.create("text",kt(e._matrix,!0),et);return t.textContent=e._content,t}},dt.inject({exportSVG:function(e){return ci(Ot(this,e=fi(e),!0),e)}}),Ft.inject({exportSVG:function(e){e=fi(e);var t=this._children,i=this.getView(),r=k.pick(e.bounds,"view"),l=(l=e.matrix||r==="view"&&i._matrix)&&_t.read([l]);i=r==="view"?new De([0,0],i.getViewSize()):r==="content"?dt._getBounds(t,l,{stroke:!0}).rect:De.read([r],0,{readNull:!0}),r={version:"1.1",xmlns:ht.svg,"xmlns:xlink":ht.xlink},i&&(r.width=i.width,r.height=i.height,(i.x||i.x===0||i.y||i.y===0)&&(r.viewBox=et.rectangle(i)));var d=r=ht.create("svg",r,et);l&&!l.isIdentity()&&(d=r.appendChild(ht.create("g",kt(l),et)));for(var f=0,v=t.length;f<v;f++)d.appendChild(Ot(t[f],e,!0));return ci(r,e)}}),Q={},ye={"#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 Li(v,i,r)}},g:xi,svg:xi,clippath:xi,polygon:Fi,polyline:Fi,path:function(e){return oi.create(e.getAttribute("d"))},lineargradient:Ii,radialgradient:Ii,image:function(e){var t=new ni(xt(e,"href",!0));return t.on("load",function(){var i=yi(e);this.setSize(i),i=ai(e).add(i.divide(2)),this._matrix.append(new _t().translate(i))}),t},symbol:function(e,t,i,r){return new yt(xi(e,t,i,r),!0)},defs:xi,use:function(e){var t=(xt(e,"href",!0)||"").substring(1);return t=Q[t],e=ai(e),t?t instanceof yt?t.place(e):t.clone().translate(e):null},circle:function(e){return new Wt.Circle(ai(e,"cx","cy"),xt(e,"r"))},ellipse:function(e){return new Wt.Ellipse({center:ai(e,"cx","cy"),radius:yi(e,"rx","ry")})},rect:function(e){return new Wt.Rectangle(new De(ai(e),yi(e)),yi(e,"rx","ry"))},line:function(e){return new St.Line(ai(e,"x1","y1"),ai(e,"x2","y2"))},text:function(e){var t=new jt(ai(e).add(ai(e,"dx","dy")));return t.setContent(e.textContent.trim()||""),t},switch:xi},qe=k.set(k.each(Et,function(e){this[e.attribute]=function(t,i){t[e.set]&&(t[e.set](Pi(i,e.type,e.fromSVG)),e.type!=="color"||(i=t[e.get]())&&i._scaleToBounds&&(t=t.getBounds(),i.transform(new _t().translate(t.getPoint()).scale(t.getSize()))))}},{}),{id:function(e,t){(Q[t]=e).setName&&e.setName(t)},"clip-path":function(e,t){if(t=Hi(t)){if((t=t.clone()).setClipMask(!0),!(e instanceof Nt))return new Nt(t,e);e.insertChild(0,t)}},gradientTransform:Ri,transform:Ri,"fill-opacity":Bi,"stroke-opacity":Bi,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 De(Pi(t,"array"));t=yi(r,null,null,!0),e instanceof Nt?(f=t?t.divide(v.getSize()):1,d=new _t().scale(f).translate(v.getPoint().negate()),f=e):e instanceof yt&&(t&&v.setSize(t),f=e._item),f&&(Ni(r,"overflow",l)!=="visible"&&((v=new Wt.Rectangle(v)).setClipMask(!0),f.addChild(v)),d&&f.transform(d))}}),dt.inject({importSVG:function(e,t){return Ui(e,t,this)}}),Ft.inject({importSVG:function(e,t){return this.activate(),Ui(e,t,this)}});var Ut=new(_e.inject(k.exports,{Base:k,Numerical:Xe,Key:ie,DomEvent:je,DomElement:Ie,document:W,window:V,Symbol:yt,PlacedSymbol:zt}));return Ut.agent.node&&w(999)(Ut),(S=typeof(_=Ut)=="function"?_.call(a,w,a,y):_)!==void 0&&(y.exports=S),Ut}).call(this,typeof self=="object"?self:null)},72:y=>{var a=[];function w(B){for(var O=-1,V=0;V<a.length;V++)if(a[V].identifier===B){O=V;break}return O}function _(B,O){for(var V={},W=[],k=0;k<B.length;k++){var ee=B[k],_e=O.base?ee[0]+O.base:ee[0],be=V[_e]||0,lt="".concat(_e," ").concat(be);V[_e]=be+1;var Qe=w(lt),Xe={css:ee[1],media:ee[2],sourceMap:ee[3],supports:ee[4],layer:ee[5]};if(Qe!==-1)a[Qe].references++,a[Qe].updater(Xe);else{var bt=S(Xe,O);O.byIndex=k,a.splice(k,0,{identifier:lt,updater:bt,references:1})}W.push(lt)}return W}function S(B,O){var V=O.domAPI(O);return V.update(B),function(W){if(W){if(W.css===B.css&&W.media===B.media&&W.sourceMap===B.sourceMap&&W.supports===B.supports&&W.layer===B.layer)return;V.update(B=W)}else V.remove()}}y.exports=function(B,O){var V=_(B=B||[],O=O||{});return function(W){W=W||[];for(var k=0;k<V.length;k++){var ee=w(V[k]);a[ee].references--}for(var _e=_(W,O),be=0;be<V.length;be++){var lt=w(V[be]);a[lt].references===0&&(a[lt].updater(),a.splice(lt,1))}V=_e}}},659:y=>{var a={};y.exports=function(w,_){var S=function(B){if(a[B]===void 0){var O=document.querySelector(B);if(window.HTMLIFrameElement&&O instanceof window.HTMLIFrameElement)try{O=O.contentDocument.head}catch{O=null}a[B]=O}return a[B]}(w);if(!S)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");S.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 S=w.nc;S&&_.setAttribute("nonce",S)}},825:y=>{y.exports=function(a){if(typeof document>"u")return{update:function(){},remove:function(){}};var w=a.insertStyleElement(a);return{update:function(_){(function(S,B,O){var V="";O.supports&&(V+="@supports (".concat(O.supports,") {")),O.media&&(V+="@media ".concat(O.media," {"));var W=O.layer!==void 0;W&&(V+="@layer".concat(O.layer.length>0?" ".concat(O.layer):""," {")),V+=O.css,W&&(V+="}"),O.media&&(V+="}"),O.supports&&(V+="}");var k=O.sourceMap;k&&typeof btoa<"u"&&(V+=`
|
|
1522
|
-
/*# sourceMappingURL=data:application/json;base64,`.concat(btoa(unescape(encodeURIComponent(JSON.stringify(k))))," */")),B.styleTagTransform(V,S,B.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 g={};return(()=>{h.r(g),h.d(g,{AnnotationToolbar:()=>fi,AnnotationToolkit:()=>Te,AnnotationUITool:()=>Tt,BrushTool:()=>je,DefaultTool:()=>dt,EllipseTool:()=>Me,FeatureCollectionUI:()=>Ii,FeatureUI:()=>yi,FileDialog:()=>Ni,LayerUI:()=>Ri,LinestringTool:()=>Et,OSDPaperjsAnnotation:()=>ft,PaperOffset:()=>Ie,PaperOverlay:()=>z,PointTextTool:()=>L,PointTool:()=>T,PolygonTool:()=>He,RasterTool:()=>ci,RectangleTool:()=>ve,RotationControlOverlay:()=>Ae,ScreenshotOverlay:()=>nt,SelectTool:()=>Zt,StyleTool:()=>Vt,ToolBase:()=>At,TransformTool:()=>hi,WandTool:()=>ei});let y=h(906),a=h(292);var w=h(72),_=h.n(w),S=h(825),B=h.n(S),O=h(659),V=h.n(O),W=h(56),k=h.n(W),ee=h(540),_e=h.n(ee),be=h(113),lt=h.n(be),Qe=h(676),Xe={};Xe.styleTagTransform=lt(),Xe.setAttributes=k(),Xe.insert=V().bind(null,"head"),Xe.domAPI=B(),Xe.insertStyleElement=_e(),_()(Qe.A,Xe),Qe.A&&Qe.A.locals&&Qe.A.locals;var bt=h(946),$={};$.styleTagTransform=lt(),$.setAttributes=k(),$.insert=V().bind(null,"head"),$.domAPI=B(),$.insertStyleElement=_e(),_()(bt.A,$),bt.A&&bt.A.locals&&bt.A.locals;class At{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 $e{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,A=c.y,R=p.x-b,D=p.y-A;if(R!==0||D!==0){var H=((s.x-b)*R+(s.y-A)*D)/(R*R+D*D);H>1?(b=p.x,A=p.y):H>0&&(b+=R*H,A+=D*H)}return(R=s.x-b)*R+(D=s.y-A)*D}simplifyRadialDist(s,c){for(var p,b=s[0],A=[b],R=1,D=s.length;R<D;R++)p=s[R],this.getSqDist(p,b)>c&&(A.push(p),b=p);return b!==p&&A.push(p),A}simplifyDPStep(s,c,p,b,A){for(var R,D=b,H=c+1;H<p;H++){var J=this.getSqSegDist(s[H],s[c],s[p]);J>D&&(R=H,D=J)}D>b&&(R-c>1&&this.simplifyDPStep(s,c,R,b,A),A.push(s[R]),p-R>1&&this.simplifyDPStep(s,R,p,b,A))}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 Tt extends At{constructor(s){super(s),this._active=!1,this._items=[],this._item=null,this.simplifier=new $e,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(A=>A!==c),b=Math.max(...p.map(A=>{const R=window.getComputedStyle(A)["z-index"];return R==="auto"?0:parseInt(R)}));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 A=c.clone();let R=[];(A.children||[A]).forEach(H=>{let J=H.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);H.segments=X,(H.segments.length<3||Math.abs(H.area)<b*b)&&R.push(H)}),R.forEach(H=>H.remove());let D=A.unite(A,{insert:!1}).reduce().toCompoundPath();if(A._children?(A.removeChildren(),A.addChildren(D.children)):A.setSegments(D.children[0].segments),!c.isBoundingElement){let H=c.parent.children.filter(J=>J.isBoundingElement);A.applyBounds(H)}D.remove(),c._children?(c.removeChildren(),c.addChildren(A.children)):c.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(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 De{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 Mt={"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 _t{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(Mt));for(const b of c)s.querySelectorAll(`.${b}`).forEach(A=>{const R=this.makeFaIcon(b);A.classList.remove(b,...p),A.appendChild(R)})}_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[A,R]of Object.entries(Mt))b+=R.replace("<svg",`<symbol id="${A}"`).replace("/svg>","/symbol>");p.innerHTML=b}}function gt(F,s=!0){const c=document.createElement("template");let p;return Mt[F]?(c.innerHTML=Mt[F],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 Ft(F,s,c=["fa","fa-solid"]){s||(s=Object.keys(Mt));for(const p of s)F.querySelectorAll(`.${p}`).forEach(b=>{const A=gt(p);b.classList.remove(p,...c),b.appendChild(A)})}class dt extends Tt{constructor(s){super(s),this.setToolbarControl(new Nt(this))}onDeactivate(){}onActivate(){this.resetCanvasZIndex()}}class Nt extends De{constructor(s){super(s);const c=gt("fa-hand");this.button.configure(c,"Image Navigation Tool")}isEnabledForMode(s){return!0}}class Vt extends Tt{constructor(s){super(s);let c=this,p=this.tool;this._ignoreNextSelectionChange=!1,this._targetItems=[],this.setToolbarControl(new Wt(this)),this.colorpicker=new ni(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),A=b.x,R=b.y,D=c.bounds.width*this.project.getZoom(),H=c.bounds.height*this.project.getZoom(),J=this.project.paperScope.view.pixelRatio;const X=document.createElement("canvas");canvas.setAttribute("width",D*J),canvas.setAttribute("height",H*J),X.getContext("2d").drawImage(this.project.overlay.viewer.drawer.canvas,A*J,R*J,D*J,H*J,0,0,D*J,H*J);let Y=X.toDataURL(),me=new a.Raster({source:Y,position:c.bounds.center});return me.scale(1/(J*this.project.getZoom())),p.addChild(me),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 Wt extends De{constructor(s){super(s);let c=this;const p=gt("fa-palette");this.button.configure(p,"Style Tool"),this.dropdown.innerHTML=this.uiHTML(),Ft(this.dropdown),this._hierarchy=[],this.dropdown.querySelectorAll('[data-action="pick-color"]').forEach(b=>{b.addEventListener("click",function(){let A=this.getAttribute("data-type"),R=c.dropdown.querySelector(`input[type="color"][data-type="${A}"]`);var D;c.dropdown.querySelectorAll('[data-action="pick-color"]').forEach(H=>H.classList.remove("active")),(D=R).offsetWidth||D.offsetHeight||D.getClientRects().length?c.dropdown.querySelectorAll(".colorpicker-row").forEach(H=>H.classList.add("hidden")):(c.dropdown.querySelectorAll(".colorpicker-row").forEach(H=>H.classList.add("hidden")),R.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");c.tool.applyColor(this.value,A),A=="fill"&&c.setFillButtonColor(new a.Color(this.value)),A=="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 A=this.getAttribute("data-type"),R=this.getAttribute("data-property");c.tool.applyOpacity(this.value,R),A=="fill"&&c.setFillButtonOpacity(this.value),A=="stroke"&&c.setStrokeButtonOpacity(this.value)})),this.dropdown.querySelectorAll('[data-action="from-image"]').forEach(b=>b.addEventListener("click",function(){c.tool.pickColor().then(A=>{this.parentElement.querySelectorAll('input[type="color"]').forEach(R=>{R.value=A.toCSS(!0),R.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");c.fromAverage(A)})),this.dropdown.querySelectorAll(".style-item").forEach(b=>b.addEventListener("click",function(){let A=c.tool.targetItems,R=A.every(H=>H.selected),D=A.filter(H=>H.isGeoJSONFeature);D.length>0&&(c.tool._ignoreNextSelectionChange=!0,D.forEach(H=>R?H.deselect():H.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 R=c.tool.targetItems,D=new Set(R.map(H=>H.hierarchy.filter(J=>J.isGeoJSONFeatureCollection&&J!==H)).flat());D.size==0?R.indexOf(c.tool.defaultTarget)>-1?(c._hierarchy=[c.tool.defaultTarget],c._hierarchy.index=0):(c._hierarchy=[R,c.tool.defaultTarget],c._hierarchy.index=1):D.size==1?(c._hierarchy=[c.tool.targetItems,D.values().next().value,c.tool.defaultTarget],c._hierarchy.index=1):(c._hierarchy=[c.tool.targetItems,c.tool.defaultTarget],c._hierarchy.index=1)}let A=c._hierarchy;c.tool.activateForItem(c._hierarchy[c._hierarchy.index]),c._hierarchy=A}))}fromAverage(s){let c=this,p=this.tool.targetItems.map(b=>zt(b).then(A=>{c.tool.applyColor(A,s,b)}));Promise.all(p).then(()=>c.updateDisplay())}isEnabledForMode(s){return!0}uiHTML(){return`
|
|
1521
|
+
`)}},292:function(y,a,w){var _,T;(function(k,M){var V=(k=k||w(965)).window,W=k.document,O=new function(){function e(E,N,z){var j;return E&&((j=d(E,"length"))&&typeof j.value=="number"?v:function(G,K){for(var U in this)this.hasOwnProperty(U)&&G.call(K,this[U],U,this)}).call(E,N,z=z||E),z}var t=/^(statics|enumerable|beans|preserve)$/,i=[],r=i.slice,l=Object.create,d=Object.getOwnPropertyDescriptor,f=Object.defineProperty,v=i.forEach||function(E,N){for(var z=0,j=this.length;z<j;z++)E.call(N,this[z],z,this)},m=Object.assign||function(E){for(var N=1,z=arguments.length;N<z;N++){var j,G=arguments[N];for(j in G)G.hasOwnProperty(j)&&(E[j]=G[j])}return E};function x(E,N,z,j,G){var K={};function U(ce,ue){var Ce,Se=typeof(ue=typeof(ue=ue||(ue=d(N,ce))&&(ue.get?ue:ue.value))=="string"&&ue[0]==="#"&&E[ue.substring(1)]||ue)=="function",Te=ue,Fe=G||Se&&!ue.base?ue&&ue.get?ce in E:E[ce]:null;G&&Fe||(Se&&Fe&&(ue.base=Fe),Se&&j!==!1&&(Ce=ce.match(/^([gs]et|is)(([A-Z])(.*))$/))&&(K[Ce[3].toLowerCase()+Ce[4]]=Ce[2]),Te&&!Se&&Te.get&&typeof Te.get=="function"&&S.isPlainObject(Te)||(Te={value:Te,writable:!0}),(d(E,ce)||{configurable:!0}).configurable&&(Te.configurable=!0,Te.enumerable=z??!Ce),f(E,ce,Te))}if(N){for(var Z in N)N.hasOwnProperty(Z)&&!t.test(Z)&&U(Z);for(var Z in K){var ie=K[Z],oe=E["set"+ie];!(ie=E["get"+ie]||oe&&E["is"+ie])||j!==!0&&ie.length!==0||U(Z,{get:ie,set:oe})}}return E}function S(){for(var E=0,N=arguments.length;E<N;E++){var z=arguments[E];z&&m(this,z)}return this}return x(S,{inject:function(E){var N,z,j;E&&(N=E.statics===!0?E:E.statics,z=E.beans,j=E.preserve,N!==E&&x(this.prototype,E,E.enumerable,z,j),x(this,N,null,z,j));for(var G=1,K=arguments.length;G<K;G++)this.inject(arguments[G]);return this},extend:function(){for(var E,N,z,j=this,G=0,K=arguments.length;G<K&&(!E||!N);G++)z=arguments[G],E=E||z.initialize,N=N||z.prototype;return N=(E=E||function(){j.apply(this,arguments)}).prototype=N||l(this.prototype),f(N,"constructor",{value:E,writable:!0,configurable:!0}),x(E,this),arguments.length&&this.inject.apply(E,arguments),E.base=j,E}}).inject({enumerable:!1,initialize:S,set:S,inject:function(){for(var E=0,N=arguments.length;E<N;E++){var z=arguments[E];z&&x(this,z,z.enumerable,z.beans,z.preserve)}return this},extend:function(){var E=l(this);return E.inject.apply(E,arguments)},each:function(E,N){return e(this,E,N)},clone:function(){return new this.constructor(this)},statics:{set:m,each:e,create:l,define:f,describe:d,clone:function(E){return m(new E.constructor,E)},isPlainObject:function(E){return(E=E!=null&&E.constructor)&&(E===Object||E===S||E.name==="Object")},pick:function(E,N){return E!==M?E:N},slice:function(E,N,z){return r.call(E,N,z)}}})};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"?$e.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=M),t.__read=M),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),m=v!==M;return m&&((f=e.__filtered)||(d=this.getSource(e),(f=e.__filtered=O.create(d)).__unfiltered=d),f[t]=M),this.read(m?[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))!==M&&(t[d]=f),l=!0)}),l},getSource:function(e){var t,i=e.__source;return i===M&&(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(S){var E;i&&S in i||l&&S in l||(E=t[S])!==M&&(e[S]=E)}if(r){for(var f,v={},m=0,x=r.length;m<x;m++)(f=r[m])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 $e(t.precision),r={length:0,definitions:{},references:{},add:function(E,N){var z="#"+E._id,j=this.references[z];return j||(this.length++,N=N.call(E),(E=E._class)&&N[0]!==E&&N.unshift(E),this.definitions[z]=N,j=this.references[z]=[z]),j}}),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,m=e.length;v<m;v++)d[v]=O.serialize(e[v],t,i,r)}else if(O.isPlainObject(e)){d={};var x=Object.keys(e);for(v=0,m=x.length;v<m;v++){var S=x[v];d[S]=O.serialize(e[S],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 m=e[0],x=m==="dictionary";if(e.length==1&&/^#/.test(m))return i.dictionary[m];d=[];for(var S,E=(m=O.exports[m])?1:0,N=e.length;E<N;E++)d.push(O.deserialize(e[E],t,i,x,v));m&&(S=d,d=t?t(m,S,f||l):new m(S))}else if(O.isPlainObject(e))for(var z in d={},r&&(i.dictionary=d),e)d[z]=O.deserialize(e[z],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 Vt||(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===M;(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),m=(f=0,v.length);f<m;f++)v[f]._index=M;for(f=i+l,m=e.length;f<m;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 te={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,m=(d=O.capitalize(v),v.substring(2).toLowerCase());i[m]=f?{}:l,v="_"+v,t["get"+d]=function(){return this[v]},t["set"+d]=function(x){var S=this[v];S&&this.off(m,S),x&&this.on(m,x),this[v]=x}}),t._eventTypes=i),e.base.apply(this,arguments)}}},_e=O.extend({_class:"PaperScope",initialize:function e(){(Ut=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=Ae.getContext(1,1)||{},l.support={nativeDash:"setLineDash"in i||"mozDash"in i,nativeBlendModes:qe.nativeModes},Ae.release(i)),this.agent||(t=k.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,m,x){r.chrome||(v=f==="opera"?m:/^(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(Ut=this).project=new Ft(e),this},createCanvas:function(e,t){return Ae.getCanvas(e,t)},activate:function(){Ut=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 _e._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")}}}),be=O.extend(te,{initialize:function(e){this._scope=Ut,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 m=d[v].getBounds();f[v]=[m.left,m.top,m.right,m.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 N=Math.min,z=Math.max,j=new Array(E.length),G=0;G<E.length;G++){var K=E[G];j[G]=[N(K[0],K[2],K[4],K[6]),N(K[1],K[3],K[5],K[7]),z(K[0],K[2],K[4],K[6]),z(K[1],K[3],K[5],K[7])]}return j}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),m=[],x=0,S=f.length;x<S;x++)m[x]={hor:f[x],ver:v[x]};return m}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,m=f.length;function x(rt,ct,ft){for(var F=0,s=rt.length;F<s;){var c=s+F>>>1;f[rt[c]][ct]<ft?F=1+c:s=c}return F-1}for(var S=r?1:0,E=2+S,N=r?0:1,z=2+N,j=new Array(m),G=0;G<m;G++)j[G]=G;j.sort(function(rt,ct){return f[rt][S]-f[ct][S]});var K=[],U=new Array(v);for(G=0;G<m;G++){var Z=j[G],ie=f[Z],oe=d?Z:Z-v,ce=Z<v,ue=d||!ce,Ce=ce?[]:null;if(K.length){var Se=x(K,E,ie[S]-i)+1;if(K.splice(0,Se),d&&l){Ce=Ce.concat(K);for(var Te=0;Te<K.length;Te++)U[le=K[Te]].push(oe)}else{var Fe=ie[z],xe=ie[N];for(Te=0;Te<K.length;Te++){var le=K[Te],ge=f[le],Ge=le<v,Ie=d||v<=le;(l||(ce&&Ie||ue&&Ge)&&Fe>=ge[N]-i&&xe<=ge[z]+i)&&(ce&&Ie&&Ce.push(d?le:le-v),ue&&Ge&&U[le].push(oe))}}}ce&&(e===t&&Ce.push(Z),U[Z]=Ce),K.length?(ie=x(K,E,ie[E]),K.splice(ie+1,0,Z)):K.push(Z)}for(G=0;G<U.length;G++){var Ze=U[G];Ze&&Ze.sort(function(rt,ct){return rt-ct})}return U}},$e=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)}});$e.instance=new $e;var Xe=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(E){return Math.log(E)*Math.LOG2E},f=1e-12,v=112e-18;function m(E,N,z){return E<N?N:z<E?z:E}function x(E,N,z){function j(ie){var oe;return[oe=ie-(oe=134217729*ie)+oe,ie-oe]}var G,K,U=N*N-E*z,Z=N*N+E*z;return 3*i(U)<Z&&(G=j(E),K=j(N),Z=j(z),U=(N*=N)-(z*=E)+(K[0]*K[0]-N+2*K[0]*K[1]+K[1]*K[1]-(G[0]*Z[0]-z+G[0]*Z[1]+G[1]*Z[0]+G[1]*Z[1]))),U}function S(){var E=Math.max.apply(Math,arguments);return E&&(E<1e-8||1e8<E)?l(2,-Math.round(d(E))):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(E){return-f<=E&&E<=f},isMachineZero:function(E){return-v<=E&&E<=v},clamp:m,integrate:function(E,N,z,j){for(var G=e[j-2],K=t[j-2],U=.5*(z-N),Z=U+N,ie=0,oe=j+1>>1,ce=1&j?K[ie++]*E(Z):0;ie<oe;){var ue=U*G[ie];ce+=K[ie++]*(E(Z+ue)+E(Z-ue))}return U*ce},findRoot:function(E,N,z,j,G,K,U){for(var Z=0;Z<K;Z++){var ie=E(z),oe=ie/N(z),ce=z-oe;if(i(oe)<U){z=ce;break}z=0<ie?(G=z,ce<=j?.5*(j+G):ce):(j=z,G<=ce?.5*(j+G):ce)}return m(z,j,G)},solveQuadratic:function(E,N,z,j,G,K){var U,Z=1/0;if(i(E)<f){if(i(N)<f)return i(z)<f?-1:0;U=-z/N}else{var ie,oe=x(E,N*=-.5,z);oe&&i(oe)<v&&(ie=S(i(E),i(N),i(z)))&&(oe=x(E*=ie,N*=ie,z*=ie)),-v<=oe&&(ce=oe<0?0:r(oe),Z=(ue=N+(N<0?-ce:ce))===0?-(U=z/E):(U=ue/E,z/ue))}var ce=0,ue=(E=G==null,z=G-f,K+f);return isFinite(U)&&(E||z<U&&U<ue)&&(j[ce++]=E?U:m(U,G,K)),Z!==U&&isFinite(Z)&&(E||z<Z&&Z<ue)&&(j[ce++]=E?Z:m(Z,G,K)),ce},solveCubic:function(E,N,z,j,G,K,U){var Z,ie,oe,ce,ue,Ce=S(i(E),i(N),i(z),i(j));function Se(ge){ge=E*(Z=ge),ce=(ge+(ie=ge+N))*Z+(oe=ie*Z+z),ue=oe*Z+j}if(Ce&&(E*=Ce,N*=Ce,z*=Ce,j*=Ce),i(E)<f)E=N,ie=z,oe=j,Z=1/0;else if(i(j)<f)ie=N,oe=z,Z=0;else{Se(-N/E/3);var Te=l(i(xe=ue/E),1/3),Fe=xe<0?-1:1,xe=0<(xe=-ce/E)?1.324717957244746*Math.max(Te,r(xe)):Te,le=Z-Fe*xe;if(le!==Z){for(;Se(le),Fe*Z<Fe*(le=ce===0?Z:Z-ue/ce/(1+v)););i(E)*Z*Z>i(j/Z)&&(ie=((oe=-j/Z)-z)/Z)}}return Te=Xe.solveQuadratic(E,ie,oe,G,K,U),xe=K==null,isFinite(Z)&&(Te===0||0<Te&&Z!==G[0]&&Z!==G[1])&&(xe||K-f<Z&&Z<U+f)&&(G[Te++]=xe?Z:m(Z,K,U)),Te}}},bt={_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++}},$=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 $(this.x,this.y)},toString:function(){var e=$e.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(),Xe.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=$.read(arguments),t=this.getLength()*e.getLength();return Xe.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=$.read(arguments);return 180*Math.atan2(this.cross(e),this.dot(e))/Math.PI},getDistance:function(){var e=arguments,t=(i=$.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===M&&(e=1),e=(t=this.getLength())!==0?e/t:0;var t=new $(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 $(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=$.read(arguments);return new $(this.x+e.x,this.y+e.y)},subtract:function(){var e=$.read(arguments);return new $(this.x-e.x,this.y-e.y)},multiply:function(){var e=$.read(arguments);return new $(this.x*e.x,this.y*e.y)},divide:function(){var e=$.read(arguments);return new $(this.x/e.x,this.y/e.y)},modulo:function(){var e=$.read(arguments);return new $(this.x%e.x,this.y%e.y)},negate:function(){return new $(-this.x,-this.y)},isInside:function(){return Me.read(arguments).contains(this)},isClose:function(){var e=arguments,t=$.read(e);return e=O.read(e),this.getDistance(t)<=e},isCollinear:function(){var e=$.read(arguments);return $.isCollinear(this.x,this.y,e.x,e.y)},isColinear:"#isCollinear",isOrthogonal:function(){var e=$.read(arguments);return $.isOrthogonal(this.x,this.y,e.x,e.y)},isZero:function(){var e=Xe.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=$.read(arguments);return this.x*e.x+this.y*e.y},cross:function(){var e=$.read(arguments);return this.x*e.y-this.y*e.x},project:function(){var e=$.read(arguments),t=e.isZero()?0:this.dot(e)/e.dot(e);return new $(e.x*t,e.y*t)},statics:{min:function(){var e=arguments,t=$.read(e);return e=$.read(e),new $(Math.min(t.x,e.x),Math.min(t.y,e.y))},max:function(){var e=arguments,t=$.read(e);return e=$.read(e),new $(Math.max(t.x,e.x),Math.max(t.y,e.y))},random:function(){return new $(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 $(t(this.x),t(this.y))}},{})),Tt=$.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}}),et=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 et(this.width,this.height)},toString:function(){var e=$e.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=et.read(arguments);return new et(this.width+e.width,this.height+e.height)},subtract:function(){var e=et.read(arguments);return new et(this.width-e.width,this.height-e.height)},multiply:function(){var e=et.read(arguments);return new et(this.width*e.width,this.height*e.height)},divide:function(){var e=et.read(arguments);return new et(this.width/e.width,this.height/e.height)},modulo:function(){var e=et.read(arguments);return new et(this.width%e.width,this.height%e.height)},negate:function(){return new et(-this.width,-this.height)},isZero:function(){var e=Xe.isZero;return e(this.width)&&e(this.height)},isNaN:function(){return isNaN(this.width)||isNaN(this.height)},statics:{min:function(e,t){return new et(Math.min(e.width,t.width),Math.min(e.height,t.height))},max:function(e,t){return new et(Math.max(e.width,t.width),Math.max(e.height,t.height))},random:function(){return new et(Math.random(),Math.random())}}},O.each(["round","ceil","floor","abs"],function(e){var t=Math[e];this[e]=function(){return new et(t(this.width),t(this.height))}},{})),St=et.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)}}),Me=O.extend({_class:"Rectangle",_readIndex:!0,beans:!0,initialize:function(e,t,i,r){var l,d,f,v,m,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!==M||e.width!==M?(this._set(e.x||0,e.y||0,e.width||0,e.height||0),l=1):e.from===M&&e.to===M&&(this._set(0,0,0,0),O.readSupported(S,this)&&(l=1))),l===M&&(f=$.readNamed(S,"from"),d=O.peek(S),E=f.x,f=f.y,d&&d.x!==M||O.hasNamed(S,"to")?(v=(x=$.readNamed(S,"to")).x-E,m=x.y-f,v<0&&(E=x.x,v=-v),m<0&&(f=x.y,m=-m)):(v=(x=et.read(S)).width,m=x.height),this._set(E,f,v,m),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 Me(this.x,this.y,this.width,this.height)},equals:function(e){var t=O.isPlainValue(e)?Me.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=$e.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?$:Tt)(this.x,this.y,this,"setPoint")},setPoint:function(){var e=$.read(arguments);this.x=e.x,this.y=e.y},getSize:function(e){return new(e?et:St)(this.width,this.height,this,"setSize")},_fw:1,_fh:1,setSize:function(){var e=et.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?$:Tt)(this.getCenterX(),this.getCenterY(),this,"setCenter")},setCenter:function(){var e=$.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!==M||(Array.isArray(e)?e:arguments).length===4?this._containsRectangle(Me.read(arguments)):this._containsPoint($.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=Me.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=Me.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 Me(t,i,r-t,e-i)},unite:function(){var e=Me.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 Me(t,i,r-t,e-i)},include:function(){var e=$.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 Me(t,i,r-t,e-i)},expand:function(){var e=(t=et.read(arguments)).width,t=t.height;return new Me(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===M?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,m="set"+i;this["get"+i]=function(x){return new(x?$:Tt)(this[l](),this[d](),this,m)},this[m]=function(){var x=$.read(arguments);this[f](x.x),this[v](x.y)}},{beans:!0})),Mt=Me.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=Me.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)}}))}),_t=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 _t(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=$e.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=$.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=$.read(e);return(e=$.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=(m=$.read(arguments,1)).x,i=m.y,r=Math.cos(e),l=Math.sin(e),d=t-t*r+i*l,f=i-t*l-i*r,v=this._a,m=this._b;return t=this._c,i=this._d,this._a=r*v+l*t,this._b=r*m+l*i,this._c=-l*v+r*t,this._d=-l*m+r*i,this._tx+=d*v+f*t,this._ty+=d*m+f*i,this._changed(),this},shear:function(){var e=arguments,t=$.read(e),i=$.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=$.read(e),i=$.read(e,0,{readNull:!0});return e=Math.PI/180,e=new $(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,m,x,S;return e&&(i=this._a,r=this._b,l=this._c,d=this._d,f=e._a,v=e._c,m=e._b,x=e._d,S=e._tx,e=e._ty,this._a=f*i+m*l,this._c=v*i+x*l,this._b=f*r+m*d,this._d=v*r+x*d,this._tx+=S*i+e*l,this._ty+=S*r+e*d,t||this._changed()),this},prepend:function(e,t){var i,r,l,d,f,v,m,x,S,E,N;return e&&(i=this._a,r=this._b,l=this._c,d=this._d,f=this._tx,v=this._ty,m=e._a,x=e._c,S=e._b,E=e._d,N=e._tx,e=e._ty,this._a=m*i+x*r,this._c=m*l+x*d,this._b=S*i+E*r,this._d=S*l+E*d,this._tx=m*f+x*v+N,this._ty=S*f+E*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 _t(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($.read(arguments)):this._transformCoordinates(e,t,i)},_transformPoint:function(e,t,i){var r=e.x;return e=e.y,(t=t||new $)._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],m=1&f;v<l[m]?l[m]=v:v>d[m]&&(d[m]=v)}return(t=t||new Me)._set(l[0],l[1],d[0]-l[0],d[1]-l[1],i)},inverseTransform:function(){return this._inverseTransform($.read(arguments))},_inverseTransform:function(e,t,i){var r=this._a,l=this._b,d=this._c,f=this._d,v=this._tx,m=this._ty,x=r*f-l*d,S=null;return x&&!isNaN(x)&&isFinite(v)&&isFinite(m)&&(m=e.x-this._tx,e=e.y-this._ty,S=(t=t||new $)._set((m*f-e*d)/x,(e*r-m*l)/x,i)),S},decompose:function(){var e,t,i,r,l=this._a,d=this._b,f=this._c,v=this._d,m=l*v-d*f,x=Math.sqrt,S=Math.atan2,E=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,m/e],[S(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=[m/r,r],[0,S(l*f+d*v,r*r)]):i=[t=0,0],{translation:this.getTranslation(),rotation:t*E,scaling:new $(i),skewing:new $(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 $(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()}},{})),gt=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 $(this._px,this._py)},getVector:function(){return new $(this._vx,this._vy)},getLength:function(){return this.getVector().getLength()},intersect:function(e,t){return gt.intersect(this._px,this._py,this._vx,this._vy,e._px,e._py,e._vx,e._vy,!0,t)},getSide:function(e,t){return gt.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 gt.getSignedDistance(this._px,this._py,this._vx,this._vy,e.x,e.y,!0)},isCollinear:function(e){return $.isCollinear(this._vx,this._vy,e._vx,e._vy)},isOrthogonal:function(e){return $.isOrthogonal(this._vx,this._vy,e._vx,e._vy)},statics:{intersect:function(e,t,i,r,l,d,f,v,m,x){if(m||(i-=e,r-=t,f-=l,v-=d),m=i*v-r*f,!Xe.isMachineZero(m)&&(v=(f*(d=t-d)-v*(l=e-l))/m,m=(i*d-r*l)/m,x||-1e-12<v&&v<1+1e-12&&-1e-12<m&&m<1+1e-12))return new $(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&&Xe.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(gt.getSignedDistance(e,t,i,r,l,d,f))}}}),Ft=be.extend({_class:"Project",_list:"projects",_reference:"project",_compactSerialize:!0,initialize:function(e){be.call(this,!0),this._children=[],this._namedChildren={},this._activeLayer=null,this._currentStyle=new fe(null,null,this),this._view=I.create(this,e||Ae.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 Vt({project:this,insert:!0})},getSymbolDefinitions:function(){var e=[],t={};return this.getItems({class:zt,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(M,e)},insertLayer:function(e,t){return t instanceof Vt?(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(M,new Vt(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 $(0,0),pixelRatio:i,viewMatrix:t.isIdentity()?null:t,matrices:[new _t],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,m=this._selectionItems,x=this._scope.settings.handleSize,S=this._updateVersion;for(v in m)m[v]._drawSelection(e,t,x,m,S);e.restore()}}}),dt=O.extend(te,{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 _t,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 _t,d=i&&e.project||Ut.project,f=Ut.settings;return this._id=r?null:bt.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(M,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 Nt||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=M),16&e&&(this._globalMatrix=M),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||M,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?$:Tt)((e=this._position||(this._position=this._getPositionFromBounds())).x,e.y,this,"setPosition")},setPosition:function(){this.translate($.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 Tt(e.x,e.y,this,"setPivot"):null},setPivot:function(){this._pivot=$.read(arguments,0,{clone:!0,readNull:!0}),this._position=M}},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 _t,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 Mt(r.x,r.y,r.width,r.height,this,"setBounds")},setBounds:function(){var e=Me.read(arguments),t=this.getBounds(),i=this._matrix,r=new _t,l=e.getCenter();r.translate(l),e.width==t.width&&e.height==t.height||(i.isInvertible()||(i.set(i._backup||new _t().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 Me},_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=M;for(var i=0,r=t.list,l=r.length;i<l;i++){var d=r[i];d!==e&&(d._bounds=d._position=M,d._boundsCache&&dt._clearBoundsCache(d))}}},_getBounds:function(e,t,i){var r=x=1/0,l=S=-x,d=!1;i=i||{};for(var f=0,v=e.length;f<v;f++){var m,x,S,E=e[f];E._visible&&!E.isEmpty(!0)&&(E=(m=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),m.nonscaling&&(d=!0))}return{rect:isFinite(x)?new Me(x,r,S-x,l-r):new Me,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 Tt(e?e.x:1,e?e.y:1,this,"setScaling")},setScaling:function(){var e,t,i,r,l=this.getScaling(),d=$.read(arguments,0,{clone:!0,readNull:!0});l&&d&&!l.equals(d)&&(e=this.getRotation(),t=this._decomposed,i=new _t,(r=Xe.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 Vt)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:M,e===M||e===!0);e=O.pick(e?e.deep:M,!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 ri(dt.NO_INSERT),l=this.getStrokeBounds(),d=(f||this.getView().getResolution())/72,f=(e=l.getTopLeft().floor(),t=l.getBottomRight().ceil(),new et(t.subtract(e)));return l=f.multiply(d),r.setSize(l,!0),l.isZero()||(t=r.getContext(!0),l=new _t().scale(d).translate(e.negate()),t.save(),l.applyToContext(t),this.draw(t,new O({matrices:[l]})),t.restore()),r._matrix.set(new _t().translate(e.add(f.divide(2))).scale(1/d)),i!==M&&!i||r.insertAbove(this),r},contains:function(){var e=this._matrix;return e.isInvertible()&&!!this._contains(e._inverseTransform($.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 Me.read(arguments).contains(this.getBounds())},_asPathItem:function(){return new Et.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($.read(r),si.getOptions(r))}function t(){var r=arguments,l=$.read(r),d=si.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 m=v.length-1;0<=m;m--){var x;if((x=(x=v[m])!==f&&x._hitTest(r,l,d))&&!l.all)return x}return null}return Ft.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 et(Et._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,m,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 N(U){return(U=U&&S&&!S(U)?null:U)&&t.all&&t.all.push(U),U}function z(U,Z){var ie=Z?v["get"+Z]():E.getPosition();if(e.subtract(ie).divide(f).length<=1)return new si(U,E,{name:Z?O.hyphenate(Z):U,point:ie})}var j=t.position;if(i=t.center,d=t.bounds,x&&this._parent&&(j||i||d)){if((i||d)&&(v=this.getInternalBounds()),!(m=j&&z("position")||i&&z("center","Center"))&&d)for(var G=["TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],K=0;K<8&&!m;K++)m=z("bounds",G[K]);m=N(m)}return(m=m||this._hitTestChildren(e,t,l)||x&&N(this._hitTestSelf(e,t,l,this.getStrokeScaling()?null:l._shiftless().invert()))||null)&&m.point&&(m.point=r.transform(m.point)),m},_hitTestSelf:function(e,t){if(t.fill&&this.hasFill()&&this._contains(e))return new si("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 m=d[v];if(v=f[v],O.isPlainObject(m)&&O.isPlainObject(v)){if(!l(m,v))return!1}else if(!O.equals(m,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,m;l||(v=(f=typeof i=="object"&&i)&&f.overlapping,m=f&&f.inside,x=(U=v||m)&&Me.read([U]),l={items:[],recursive:f&&f.recursive!==!1,inside:!!m,overlapping:!!v,rect:x,path:v&&new Et.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 _t);for(var N=0,z=S&&S.length;N<z;N++){var j=S[N],G=r&&r.appended(j._matrix),K=!0;if(x){var U=j.getBounds(G);if(!x.intersects(U))continue;x.contains(U)||l.overlapping&&(U.contains(x)||l.path.intersects(j,G))||(K=!1)}if(K&&j.matches(i)&&(E.push(j),d)||(l.recursive!==!1&&e(j,i,G,l,d),d&&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(M,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,m=(l=0,t.length);l<m;l++){var x,S=(x=t[l])._name;x._parent=this,x._setProject(f,!0),S&&x.setName(S),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(M,this):null},appendTop:"#addChild",appendBottom:function(e){return this.insertChild(0,e)},moveAbove:"#insertAbove",moveBelow:"#insertBelow",addTo:function(e){return e._insertItem(M,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:$).read(i);return i=$.read(i,0,{readNull:!0}),this.transform(new _t()[e](r,i||this.getPosition(!0)))}},{translate:function(){var e=new _t;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 m=this._bounds;if(d=this._position,(f||v)&&this._changed(25),(i=f&&m&&e.decompose())&&i.skewing.isZero()&&i.rotation%90==0){for(var x in m){var S=m[x];S.nonscaling?delete m[x]:!v&&S.internal||(S=S.rect,e._transformBounds(S,S))}(i=(this._bounds=m)[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($.read(arguments))},localToGlobal:function(){return this.getGlobalMatrix(!0)._transformPoint($.read(arguments))},parentToLocal:function(){return this._matrix._inverseTransform($.read(arguments))},localToParent:function(){return this._matrix._transformPoint($.read(arguments))},fitBounds:function(e,t){e=Me.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 Me(new $,new et(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),Ut.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 _t().scale(t,t))).transform(new $(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((j=r[r.length-1].appended(d)).isInvertible()){l=l?l.appended(j):j,r.push(j),t.updateMatrix&&(this._globalMatrix=j);var f,v,m,x=this._blendMode,S=Xe.clamp(this._opacity,0,1),E=x==="normal",N=qe.nativeModes[x],z=E&&S===1||t.dontStart||t.clip||(N||E&&S<1)&&this._canComposite(),j=t.pixelRatio||1;if(!z){var G=this.getStrokeBounds(l);if(!G.width||!G.height)return void r.pop();m=t.offset,v=t.offset=G.getTopLeft().floor(),f=e,e=Ae.getContext(G.getSize().ceil().add(1).multiply(j)),j!==1&&e.scale(j,j)}e.save(),E=i?i.appended(d):this._canScaleStroke&&!this.getStrokeScaling(!0)&&l,G=!z&&t.clipItem,i=!E||G,z?(e.globalAlpha=S,N&&(e.globalCompositeOperation=x)):i&&e.translate(-v.x,-v.y),i&&(z?d:l).applyToContext(e),G&&t.clipItem.draw(e,t.extend({clip:!0})),E&&(e.setTransform(j,0,0,j,0,0),(G=t.offset)&&e.translate(-G.x,-G.y)),this._draw(e,t,l,E),e.restore(),r.pop(),t.clip&&!t.dontFinish&&e.clip(this.getFillRule()),z||(qe.process(x,e,f,S,v.subtract(m).multiply(j)),Ae.release(e),t.offset=m)}}},_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 m=this.getSelectedColor(!0)||(m=this.getLayer())&&m.getSelectedColor(!0),x=(t=t.appended(this.getGlobalMatrix(!0)),i/2);if(e.strokeStyle=e.fillStyle=m?m.toCanvasStyle(e):"#009dec",d&&this._drawSelected(e,t,r),v){r=this.getPosition(!0);var S=(r=(v=this._parent)?v.localToGlobal(r):r).x,E=r.y;e.beginPath(),e.arc(S,E,x,0,2*Math.PI,!0),e.stroke();for(var N=[[0,-1],[1,0],[0,1],[-1,0]],z=x,j=i+1,G=0;G<4;G++){var K=(U=N[G])[0],U=U[1];e.moveTo(S+K*z,E+U*z),e.lineTo(S+K*j,E+U*j),e.stroke()}}if(f){var Z=t._transformCorners(this.getInternalBounds());for(e.beginPath(),G=0;G<8;G++)e[G?"lineTo":"moveTo"](Z[G],Z[++G]);for(e.closePath(),e.stroke(),G=0;G<8;G++)e.fillRect(Z[G]-x,Z[++G]-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 De(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)}}),Nt=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=M)},_getClipItem:function(){if((e=this._clipItem)===M){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)}}}),Vt=Nt.extend({_class:"Layer",initialize:function(){Nt.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(){}}),Wt=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 St(e.width,e.height,this,"setSize")},setSize:function(){var e,t,i,r=et.read(arguments);this._size?this._size.equals(r)||(e=this._type,t=r.width,i=r.height,e==="rectangle"?this._radius.set(et.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 St(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=et.read(arguments),this._radius){if(this._radius.equals(e))return;this._radius.set(e),t==="rectangle"?(i=et.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 Et[O.capitalize(this._type)]({center:new $,size:this._size,radius:this._radius,insert:!1});return t.copyAttributes(this),Ut.settings.applyMatrix&&t.setApplyMatrix(!0),e!==M&&!e||t.insertAbove(this),t},toShape:"#clone",_asPathItem:function(){return this.toPath(!1)},_draw:function(e,t,i,r){var l,d,f,v,m,x=this._style,S=x.hasFill(),E=x.hasStroke(),N=t.dontFinish||t.clip,z=!r;(S||E||N)&&(f=this._type,v=this._radius,m=f==="circle",t.dontStart||e.beginPath(),z&&m?e.arc(0,0,v,0,2*Math.PI,!0):(l=m?v:v.width,d=m?v:v.height,v=(m=this._size).width,m=m.height,z&&f==="rectangle"&&l===0&&d===0?e.rect(-v/2,-m/2,v,m):(m=[-(z=v/2),-(f=m/2)+d,-z,(m=d*(v=.44771525016920644))-f,(v*=l)-z,-f,-z+l,-f,z-l,-f,z-v,-f,z,m-f,z,-f+d,z,f-d,z,f-m,z-v,f,z-l,f,-z+l,f,v-z,f,-z,f-m,-z,f-d],r&&r.transform(m,m,32),e.moveTo(m[0],m[1]),e.bezierCurveTo(m[2],m[3],m[4],m[5],m[6],m[7]),z!==l&&e.lineTo(m[8],m[9]),e.bezierCurveTo(m[10],m[11],m[12],m[13],m[14],m[15]),f!==d&&e.lineTo(m[16],m[17]),e.bezierCurveTo(m[18],m[19],m[20],m[21],m[22],m[23]),z!==l&&e.lineTo(m[24],m[25]),e.bezierCurveTo(m[26],m[27],m[28],m[29],m[30],m[31]))),e.closePath()),N||!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 Me(this._size).setCenter(0,0),r=this._style;return r=t.stroke&&r.hasStroke()&&r.getStrokeWidth(),e&&(i=e._transformBounds(i)),r?i.expand(Et._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 m=new $(1<v&&v<4?-1:1,2<v?-1:1),x=m.multiply(f),S=x.subtract(m.multiply(d));if(new Me(l?x.add(m.multiply(l)):x,S).contains(r))return{point:S,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,m,x,S=!1,E=this._style,N=l.stroke&&E.hasStroke(),z=l.fill&&E.hasFill();return(N||z)&&(m=this._type,v=this._radius,x=N?E.getStrokeWidth()/2:0,z=l._tolerancePadding.add(Et._getStrokePadding(x,!E.getStrokeScaling()&&f)),S=m==="rectangle"?(E=e(this,r,x=z.multiply(2)))?t(r.subtract(E.point),v,z,E.quadrant):(E=(m=new Me(this._size).setCenter(0,0)).expand(x),x=m.expand(x.negate()),E._containsPoint(r)&&!x._containsPoint(r)):t(r,v,z)),S?new si(N?"stroke":"fill",this):i.base.apply(this,arguments)}}},{statics:new function(){function e(t,i,r,l,d){var f=O.create(Wt.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=$.readNamed(t,"center"),r=O.readNamed(t,"radius");return e("circle",i,new et(2*r),r,t)},Rectangle:function(){var t=arguments,i=Me.readNamed(t,"rectangle"),r=et.min(et.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=Wt._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=$.readNamed(t,"center"),et.readNamed(t,"radius")):(i=(r=Me.readNamed(t,"rectangle")).getCenter(!0),r.getSize(!0).divide(2)),{center:i,radius:r}}}}}),ri=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!==M&&$.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=et.read(arguments)).isZero()||(i=Ae.getCanvas(r)))),i?this.setImage(i):this.setSource(e)),this._size||(this._size=new et,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=Ae.getCanvas(e._size)).getContext("2d").drawImage(i,0,0),this._setImage(t)),this._crossOrigin=e._crossOrigin},getSize:function(){var e=this._size;return new St(e?e.width:0,e?e.height:0,this,"setSize")},setSize:function(e,t){var i,r=et.read(arguments);r.equals(this._size)?t&&this.clear():0<r.width&&0<r.height?(i=!t&&this.getElement(),this._setImage(Ae.getCanvas(r)),i&&this.getContext(!0).drawImage(i,0,0,r.width,r.height)):(this._canvas&&Ae.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 $(0,0).transform(e),i=new $(1,0).transform(e).subtract(t);return t=new $(0,1).transform(e).subtract(t),new et(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)&&(Ut=l._scope,t.emit(d,new B(r)))}this._setImage(e),this._loaded?setTimeout(i,0):e&&He.add(e,{load:function(r){t._setImage(e),i(r)},error:i})},_setImage:function(e){this._canvas&&Ae.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 et(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=Ae.getContext(this._size);try{this._image&&e.drawImage(this._image,0,0),this._canvas=e.canvas}catch{Ae.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 k.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=Me.read(arguments),t=Ae.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=Me.read(arguments),t=new ri(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=$.read(arguments,1);this.getContext(!0).drawImage(e,t.x,t.y)},getAverageColor:function(e){if(e?e instanceof ii?l=(r=e).getBounds():typeof e=="object"&&("width"in e?l=new Me(e):"x"in e&&(l=new Me(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=ri._sampleContext)?e.clearRect(0,0,33,33):e=ri._sampleContext=Ae.getContext(new et(32)),e.save(),(l=new _t().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,m=0,x=d.length;m<x;m+=4){var S=d[m+3];v+=S,S/=255,f[0]+=d[m]*S,f[1]+=d[m+1]*S,f[2]+=d[m+2]*S}for(m=0;m<3;m++)f[m]/=v;return v?xt.read(f):null},getPixel:function(){var e=$.read(arguments);return e=this.getContext().getImageData(e.x,e.y,1,1).data,new xt("rgb",[e[0]/255,e[1]/255,e[2]/255],e[3]/255)},setPixel:function(){var e,t=arguments,i=$.read(t),r=(e=xt.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=et.read(arguments);return this.getContext().createImageData(e.width,e.height)},getImageData:function(){var e=Me.read(arguments);return e.isEmpty()&&(e=new Me(this._size)),this.getContext().getImageData(e.x,e.y,e.width,e.height)},putImageData:function(e){var t=$.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 Me(this._size).setCenter(0,0);return e?e._transformBounds(i):i},_hitTestSelf:function(e){if(this._contains(e)){var t=this;return new si("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=Xe.clamp(this._opacity,0,1),this._setStyles(e,t,i),t=this._smoothing,Re.setPrefixed(e,(i=t==="off")?"imageSmoothingEnabled":"imageSmoothingQuality",!i&&t),e.drawImage(r,-this._size.width/2,-this._size.height/2))},_canComposite:function(){return!0}}),zt=dt.extend({_class:"SymbolItem",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!0},_serializeFields:{symbol:null},initialize:function(e,t){this._initialize(e,t!==M&&$.read(arguments,1))||this.setDefinition(e instanceof yt?e:new yt(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)}}),yt=O.extend({_class:"SymbolDefinition",initialize:function(e,t){this._id=bt.get(),this.project=Ut.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 $),(e._symbol=this)._changed(9)},getDefinition:"#getItem",setDefinition:"#setItem",place:function(e){return new zt(this,e)},clone:function(){return new yt(this._item.clone(!1))},equals:function(e){return e===this||e&&this._item.equals(e._item)||!1}}),si=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:Ut.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,m,x,S=arguments.length;0<S&&(e==null||typeof e=="object"?x=S===1&&e&&"point"in e?(f=e.point,v=e.handleIn,m=e.handleOut,e.selection):(f=e,v=t,m=i,r):(f=[e,t],v=i!==M?[i,r]:null,m=l!==M?[l,d]:null)),new ti(f,this,"_point"),new ti(v,this,"_handleIn"),new ti(m,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($.read(arguments))},getHandleIn:function(){return this._handleIn},setHandleIn:function(){this._handleIn.set($.read(arguments))},getHandleOut:function(){return this._handleOut},setHandleOut:function(){this._handleOut.set($.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!==M?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 Dt(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(),m=(f||this)._point,x=this._point,S=(v||this)._point,E=m.getDistance(x);if(e=x.getDistance(S),l&&l!=="catmull-rom"){if(l!=="geometric")throw new Error("Smoothing method '"+l+"' not supported.");f&&v&&(r=m.subtract(S),l=(j=d===M?.4:d)*E/(E+e),t||this.setHandleIn(r.multiply(l)),i||this.setHandleOut(r.multiply(l-j)))}else{var N,z,j=d===M?.5:d;E=(d=Math.pow(E,j))*d,j=(e=Math.pow(e,j))*e,!t&&f&&(N=2*j+3*e*d+E,this.setHandleIn((z=3*e*(e+d))!=0?new $((j*m._x+N*x._x-E*S._x)/z-x._x,(j*m._y+N*x._y-E*S._y)/z-x._y):new $)),!i&&v&&(N=2*E+3*d*e+j,this.setHandleOut((z=3*d*(d+e))!=0?new $((E*S._x+N*x._x-j*m._x)/z-x._x,(E*S._y+N*x._y-j*m._y)/z-x._y):new $))}},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,m=2;return t[0]=f,t[1]=v,l&&(t[m++]=l._x+f,t[m++]=l._y+v),d&&(t[m++]=d._x+f,t[m++]=d._y+v),e&&(e._transformCoordinates(t,t,m/2),f=t[0],v=t[1],i?(r._x=f,r._y=v,m=2,l&&(l._x=t[m++]-f,l._y=t[m++]-v),d&&(d._x=t[m++]-f,d._y=t[m++]-v)):(l||(t[m++]=f,t[m++]=v),d||(t[m++]=f,t[m++]=v))),t}}),ti=$.extend({initialize:function(e,t,i){var r,l,d;e?(r=e[0])!==M?l=e[1]:((r=(d=e).x)===M&&(r=(d=$.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=Xe.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}}),Ye=O.extend({_class:"Curve",beans:!0,initialize:function(e,t,i,r,l,d,f,v){var m,x,S,E,N,z,j=arguments.length;j===3?(this._path=e,m=t,x=i):j?j===1?"segment1"in e?(m=new Ke(e.segment1),x=new Ke(e.segment2)):"point1"in e?(S=e.point1,N=e.handle1,z=e.handle2,E=e.point2):Array.isArray(e)&&(S=[e[0],e[1]],E=[e[6],e[7]],N=[e[2]-e[0],e[3]-e[1]],z=[e[4]-e[6],e[5]-e[7]]):j===2?(m=new Ke(e),x=new Ke(t)):j===4?(S=e,N=t,z=i,E=r):j===8&&(S=[e,t],E=[f,v],N=[i-e,r-t],z=[l-f,d-v]):(m=new Ke,x=new Ke),this._segment1=m||new Ke(S,null,N),this._segment2=x||new Ke(E,z,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=M},clone:function(){return new Ye(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 Ye.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($.read(arguments))},getPoint2:function(){return this._segment2._point},setPoint2:function(){this._segment2._point.set($.read(arguments))},getHandle1:function(){return this._segment1._handleOut},setHandle1:function(){this._segment1._handleOut.set($.read(arguments))},getHandle2:function(){return this._segment2._handleIn},setHandle2:function(){this._segment2._handleIn.set($.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 Ye.getValues(this._segment1,this._segment2,e)},getPoints:function(){for(var e=this.getValues(),t=[],i=0;i<8;i+=2)t.push(new $(e[i],e[i+1]));return t}},{getLength:function(){return this._length==null&&(this._length=Ye.getLength(this.getValues(),0,1)),this._length},getArea:function(){return Ye.getArea(this.getValues())},getLine:function(){return new gt(this._segment1._point,this._segment2._point)},getPart:function(e,t){return new Ye(Ye.getPart(this.getValues(),e,t))},getPartLength:function(e,t){return Ye.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,m=null;return 1e-8<=e&&e<=1-1e-8&&(i=(v=Ye.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 $(v,t),l&&new $(i[4]-v,i[5]-t),l&&new $(r[2]-v,r[3]-t)),m=e?(e.insert(d._index+1,t),this.getNext()):(this._segment2=t,this._changed(),new Ye(t,f))),m},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===M?.5:t?e:this.getTimeAt(e))},split:function(e,t){return this.splitAtTime(e===M?.5:t?e:this.getTimeAt(e))},reversed:function(){return new Ye(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],m=e[6],x=e[7],S=1-(t=t===M?.5:t),E=S*i+t*l,N=S*r+t*d,z=S*l+t*f,j=S*d+t*v;return l=S*v+t*x,d=S*E+t*z,v=S*z+t*(e=S*f+t*m),z=S*j+t*l,[[i,r,E,N,d,f=S*N+t*j,j=S*d+t*v,t=S*f+t*z],[j,t,v,z,e,l,m,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||Ye.isStraight(e)||!(r=Xe.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=Ye.subdivide(e,f),l.push(d[0]),1<r&&(f=(i[1]-f)/(1-f),d=Ye.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],m=e[t+4];return e=e[t+6],t=0,f<i&&e<i&&v<i&&m<i||i<f&&i<e&&i<v&&i<m?t:Xe.solveCubic(e-f-(e=3*(v-f))-(v=3*(m-v)-e),v,e,f-i,r,l,d)},getTimeOf:function(e,t){var i=new $(e[0],e[1]),r=new $(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=Ye.solveCubic(e,f,l[f],d,0,1),m=0;m<v;m++){var x=d[m];if(t.isClose(Ye.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(Ye.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:Ye.getTimeOf(e,new $(i+f*l,r+f*d))}var v=1/0,m=0;function x(N){if(0<=N&&N<=1){var z=t.getDistance(Ye.getPoint(e,N),!0);return z<v?(v=z,m=N,1):void 0}}for(var S=0;S<=100;S++)x(S/100);for(var E=.005;1e-8<E;)x(m-E)||x(m+E)||(E/=2);return m},getPart:function(e,t,i){var r,l=i<t;return l&&(r=t,t=i,i=r),0<t&&(e=Ye.subdivide(e,t)[1]),i<1&&(e=Ye.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],m=e[6];return l=3*l-2*i-m,d=3*d-2*r-(e=e[7]),i=3*f-2*m-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++)Ye._addBounds(e[l],e[l+2],e[l+4],e[l+6],l,0,t,i,r);return new Me(t[0],t[1],i[0]-t[0],i[1]-t[1])},_addBounds:function(e,t,i,r,l,d,f,v,m){function x(K,U){var Z=K-U;U=K+U,Z<f[l]&&(f[l]=Z),U>v[l]&&(v[l]=U)}var S=f[l]+(d/=2),E=v[l]-d;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 N=Xe.solveQuadratic(3*(t-i)-e+r,2*(e+i)-4*t,t-e,m);x(r,0);for(var z=0;z<N;z++){var j=m[z],G=1-j;1e-8<=j&&j<=1-1e-8&&x(G*G*G*e+3*G*G*j*t+3*G*j*j*i+j*j*j*r,d)}}}}},O.each(["getBounds","getStrokeBounds","getHandleBounds"],function(e){this[e]=function(){return this._bounds||(this._bounds={}),(this._bounds[e]||(this._bounds[e]=Et[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 gt(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 $(l,d),new $(i[2]-l,i[3]-d),new $(i[4]-f,i[5]-v),new $(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 Dt(this,e):null},getTimeAt:function(e,t){return Ye.getTimeAt(this.getValues(),e,t)},getParameterAt:"#getTimeAt",getTimesWithTangent:function(){var e=$.read(arguments);return e.isZero()?[]:Ye.getTimesWithTangent(this.getValues(),e)},getOffsetAtTime:function(e){return this.getPartLength(0,e)},getLocationOf:function(){return this.getLocationAtTime(this.getTimeOf($.read(arguments)))},getOffsetOf:function(){var e=this.getLocationOf.apply(this,arguments);return e?e.getOffset():null},getTimeOf:function(){return Ye.getTimeOf(this.getValues(),$.read(arguments))},getParameterOf:"#getTimeOf",getNearestLocation:function(){var e=$.read(arguments),t=this.getValues(),i=Ye.getNearestTime(t,e);return t=Ye.getPoint(t,i),new Dt(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 Ye[t](l,r?i:Ye.getTimeAt(l,i))},this[t+"AtTime"]=function(i){return Ye[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],m=r[4],x=r[5],S=r[6],E=(r=r[7],9*(f-m)+3*(S-l)),N=6*(l+m)-12*f,z=3*(f-l),j=9*(v-x)+3*(r-d),G=6*(d+x)-12*v,K=3*(v-d);return function(U){var Z=(E*U+N)*U+z;return U=(j*U+G)*U+K,Math.sqrt(Z*Z+U*U)}}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],m=r[1],x=r[2],S=r[3],E=r[4],N=r[5],z=r[6],j=r[7];(ce=Xe.isZero)(x-v)&&ce(S-m)&&(x=v,S=m),ce(E-z)&&ce(N-j)&&(E=z,N=j);var G,K,U=3*(x-v),Z=3*(E-x)-U,ie=z-v-U-Z,oe=3*(S-m),ce=j-m-oe-(r=3*(N-S)-oe);return d===0?(G=l===0?v:l===1?z:((ie*l+Z)*l+U)*l+v,K=l===0?m:l===1?j:((ce*l+r)*l+oe)*l+m):(K=l<1e-8?(G=U,oe):1-1e-8<l?(G=3*(z-E),3*(j-N)):(G=(3*ie*l+2*Z)*l+U,(3*ce*l+2*r)*l+oe),f&&(G===0&&K===0&&(l<1e-8||1-1e-8<l)&&(G=E-x,K=N-S),(S=Math.sqrt(G*G+K*K))&&(G/=S,K/=S)),d===3&&(E=6*ie*l+2*Z,N=6*ce*l+2*r,G=(r=Math.pow(G*G+K*K,1.5))!==0?(G*N-K*E)/r:0,K=0)),d===2?new $(K,-G):new $(G,K)}return{statics:{classify:function(r){var l=r[0],d=r[1],f=r[2],v=r[3],m=r[4],x=r[5],S=r[6],E=(r=f*(d-(E=r[7]))+v*(S-l)+l*E-d*S,S=(v=(f=3*(m*(v-d)+x*(l-f)+f*d-v*l))-r)-r+(l*(E-x)+d*(m-S)+S*x-E*m),(x=Math.sqrt(S*S+v*v+f*f))!==0?1/x:0);function N(z,j,G){var K=j!==M,U=K&&0<j&&j<1,Z=K&&0<G&&G<1;return!K||(U||Z)&&(z!=="loop"||U&&Z)||(U=Z=!(z="arch")),{type:z,roots:U||Z?U&&Z?j<G?[j,G]:[G,j]:[U?j:G]:null}}return x="serpentine",v*=E,f*=E,(m=Xe.isZero)(S*=E)?m(v)?N(m(f)?"line":"quadratic"):N(x,f/(3*v)):m(f=3*v*v-4*S*f)?N("cusp",v/(2*S)):N(0<f?x:"loop",(v+(m=0<f?Math.sqrt(f/3):Math.sqrt(-f)))/(S*=2),(v-m)/S)},getLength:function(r,l,d,f){if(l===M&&(l=0),d===M&&(d=1),Ye.isStraight(r)){var v=r;d<1&&(v=Ye.subdivide(v,d)[0],l/=d);var m=(v=0<l?Ye.subdivide(v,l)[1]:v)[6]-v[0];return v=v[7]-v[1],Math.sqrt(m*m+v*v)}return Xe.integrate(f||e(r),l,d,t(l,d))},getTimeAt:function(r,l,d){if(d===M&&(d=l<0?1:0),l===0)return d;var f=Math.abs,v=0<l,m=v?d:0,x=v?1:d,S=e(r),E=Ye.getLength(r,m,x,S);if(r=f(l)-E,f(r)<1e-12)return v?x:m;if(1e-12<r)return null;var N=0;return Xe.findRoot(function(z){return N+=Xe.integrate(S,d,z,t(d,z)),d=z,N-l},S,d+l/E,m,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],m=r[4],x=r[5],S=3*f-l-3*m+r[6];return m=3*l-6*f+3*m,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=[],Xe.solveCubic(9*(S*S+r*r),9*(S*m+x*r),2*(m*m+x*x)+3*(f*S+d*r),f*m+x*d,v,1e-8,1-1e-8),v.sort()}}}},new function(){function e(m,x,S,E,N,z,j){var G=!j&&S.getPrevious()===N,K=!j&&S!==N&&S.getNext()===N;E!==null&&(G?1e-8:0)<=E&&E<=(K?1-1e-8:1)&&z!==null&&(K?1e-8:0)<=z&&z<=(G?1-1e-8:1)&&(E=new Dt(S,E,null,j),j=new Dt(N,z,null,j),(E._intersection=j)._intersection=E,x&&!x(E)||Dt.insert(m,E,!0))}function t(m,x,S,E,N,z,j,G,K,U,Z,ie,oe){if(4096<=++K||40<=++G)return K;var ce,ue,Ce,Se,Te,Fe,xe=x[0],le=x[1],ge=x[6],Ge=x[7],Ie=gt.getSignedDistance,Ze=Ie(xe,le,ge,Ge,x[2],x[3]),rt=Ie(xe,le,ge,Ge,x[4],x[5]),ct=(Ce=0<Ze*rt?.75:4/9)*Math.min(0,Ze,rt),ft=Ce*Math.max(0,Ze,rt),F=Ie(xe,le,ge,Ge,m[0],m[1]),s=Ie(xe,le,ge,Ge,m[2],m[3]);return ge=function(c,p,b,A){var R=[0,c],D=[1/3,p],H=[2/3,b],J=[1,A];return J=(p-=(2*c+A)/3)*(c=b-(c+2*A)/3)<0?[[R,D,J],[R,H,J]]:[2<=(A=p/c)?[R,D,J]:A<=.5?[R,H,J]:[R,D,H,J],[R,J]],(p||c)<0?J.reverse():J}(F,s,Ce=Ie(xe,le,ge,Ge,m[4],m[5]),le=Ie(xe,le,ge,Ge,m[6],m[7])),Ge=ge[0],ge=ge[1],Ze===0&&rt===0&&F===0&&s===0&&Ce===0&&le===0||(ce=i(Ge,ge,ct,ft))==null||(ue=i(Ge.reverse(),ge.reverse(),ct,ft))==null||(ft=U+(Z-U)*ce,Z=U+(Z-U)*ue,Math.max(oe-ie,Z-ft)<1e-9?(Se=(ft+Z)/2,Fe=(ie+oe)/2,e(N,z,j?E:S,j?Fe:Se,j?S:E,j?Se:Fe)):(m=Ye.getPart(m,ce,ue),U=oe-ie,K=.8<ue-ce?U<Z-ft?(K=t(x,(Te=Ye.subdivide(m,.5))[0],E,S,N,z,!j,G,K,ie,oe,ft,Se=(ft+Z)/2),t(x,Te[1],E,S,N,z,!j,G,K,ie,oe,Se,Z)):(K=t((Te=Ye.subdivide(x,.5))[0],m,E,S,N,z,!j,G,K,ie,Fe=(ie+oe)/2,ft,Z),t(Te[1],m,E,S,N,z,!j,G,K,Fe,oe,ft,Z)):U==0||1e-9<=U?t(x,m,E,S,N,z,!j,G,K,ie,oe,ft,Z):t(m,x,S,E,N,z,j,G,K,ft,Z,ie,oe))),K}function i(m,x,S,E){return m[0][1]<S?r(m,!0,S):x[0][1]>E?r(x,!1,E):m[0][0]}function r(m,x,S){for(var E=m[0][0],N=m[0][1],z=1,j=m.length;z<j;z++){var G=m[z][0],K=m[z][1];if(x?S<=K:K<=S)return K===S?G:E+(S-N)*(G-E)/(K-N);E=G,N=K}return null}function l(m,x,S,E,N){var z=Xe.isZero;if(z(E)&&z(N))return(z=Ye.getTimeOf(m,new $(x,S)))===null?[]:[z];E=Math.atan2(-N,E);for(var j=Math.sin(E),G=Math.cos(E),K=[],U=(E=[],0);U<8;U+=2){var Z=m[U]-x,ie=m[U+1]-S;K.push(Z*G-ie*j,Z*j+ie*G)}return Ye.solveCubic(K,1,0,E,0,1),E}function d(m,x,S,E,N,z){var j=1e-12,G=Math.min;if((ue=Math.max)(m[0],m[2],m[4],m[6])+j>G(x[0],x[2],x[4],x[6])&&G(m[0],m[2],m[4],m[6])-j<ue(x[0],x[2],x[4],x[6])&&ue(m[1],m[3],m[5],m[7])+j>G(x[1],x[3],x[5],x[7])&&G(m[1],m[3],m[5],m[7])-j<ue(x[1],x[3],x[5],x[7])){var K=v(m,x);if(K)for(var U=0;U<2;U++){var Z=K[U];e(N,z,S,Z[0],E,Z[1],!0)}else{var ie=Ye.isStraight(m),oe=Ye.isStraight(x),ce=ie&&oe,ue=(G=ie&&!oe,N.length);if((ce?function(xe,le,ge,Ge,Ie,Ze){var rt=gt.intersect(xe[0],xe[1],xe[6],xe[7],le[0],le[1],le[6],le[7]);rt&&e(Ie,Ze,ge,Ye.getTimeOf(xe,rt),Ge,Ye.getTimeOf(le,rt))}:ie||oe?function(xe,le,ge,Ge,Ie,Ze,rt){for(var ct=le[0],ft=le[1],F=l(xe,ct,ft,le[6]-ct,le[7]-ft),s=0,c=F.length;s<c;s++){var p=F[s],b=Ye.getPoint(xe,p);(b=Ye.getTimeOf(le,b))!==null&&e(Ie,Ze,rt?Ge:ge,rt?b:p,rt?ge:Ge,rt?p:b)}}:t)(G?x:m,G?m:x,G?E:S,G?S:E,N,z,G,0,0,0,1,0,1),!ce||N.length===ue)for(U=0;U<4;U++){var Ce=U>>1,Se=1&U,Te=6*Se,Fe=new $(m[Fe=6*Ce],m[1+Fe]);Te=new $(x[Te],x[1+Te]),Fe.isClose(Te,j)&&e(N,z,S,Ce,E,Se)}}}return N}function f(m,x,S,E){return(m=Ye.classify(m)).type==="loop"&&e(S,E,x,(m=m.roots)[0],x,m[1]),S}function v(m,x){function S(ge){var Ge=ge[6]-ge[0];return Ge*Ge+(ge=ge[7]-ge[1])*ge}var E,N=Math.abs,z=gt.getDistance,j=1e-7,G=Ye.isStraight(m),K=Ye.isStraight(x),U=G&&K,Z=(E=S(m)<S(x))?x:m,ie=E?m:x,oe=Z[0],ce=Z[1],ue=Z[6]-oe;if(z(oe,ce,ue,E=Z[7]-ce,ie[0],ie[1],!0)<j&&z(oe,ce,ue,E,ie[6],ie[7],!0)<j)!U&&z(oe,ce,ue,E,Z[2],Z[3],!0)<j&&z(oe,ce,ue,E,Z[4],Z[5],!0)<j&&z(oe,ce,ue,E,ie[2],ie[3],!0)<j&&z(oe,ce,ue,E,ie[4],ie[5],!0)<j&&(G=K=U=!0);else if(U)return null;if(G^K)return null;for(var Ce=[m,x],Se=[],Te=0;Te<4&&Se.length<2;Te++){var Fe=1&Te,xe=1^Fe,le=Te>>1;if((xe=Ye.getTimeOf(Ce[Fe],new $(Ce[xe][le?6:0],Ce[xe][le?7:1])))!=null&&(le=Fe?[le,xe]:[xe,le],(!Se.length||1e-8<N(le[0]-Se[0][0])&&1e-8<N(le[1]-Se[0][1]))&&Se.push(le)),2<Te&&!Se.length)break}return Se.length!==2?Se=null:U||(m=Ye.getPart(m,Se[0][0],Se[1][0]),(N((x=Ye.getPart(x,Se[0][1],Se[1][1]))[2]-m[2])>j||N(x[3]-m[3])>j||N(x[4]-m[4])>j||N(x[5]-m[5])>j)&&(Se=null)),Se}return{getIntersections:function(m){var x=this.getValues(),S=m&&m!==this&&m.getValues();return S?d(x,S,this,m,[]):f(x,this,[])},statics:{getOverlaps:v,getIntersections:function(m,x,S,E,N,z){for(var j=!x,G=m.length,K=(x=j?m:x).length,U=new Array(G),Z=j?U:new Array(K),ie=[],oe=0;oe<G;oe++)U[oe]=m[oe].getValues(E);if(!j)for(oe=0;oe<K;oe++)Z[oe]=x[oe].getValues(N);for(var ce=ht.findCurveBoundsCollisions(U,Z,1e-7),ue=0;ue<G;ue++){var Ce=m[ue],Se=U[ue];j&&f(Se,Ce,ie,S);var Te=ce[ue];if(Te)for(var Fe=0;Fe<Te.length;Fe++){if(z&&ie.length)return ie;var xe,le=Te[Fe];(!j||ue<le)&&(xe=x[le],d(Se,Z[le],Ce,xe,ie,S))}}return ie},getCurveLineIntersections:l,getTimesWithTangent:function(m,x){var S,E=m[0],N=m[1],z=m[2],j=m[3],G=m[4],K=m[5],U=m[6],Z=m[7];return x=(m=x.normalize()).x,U=3*U-9*G+9*z-3*E,Z=3*Z-9*K+9*j-3*N,G=6*G-12*z+6*E,K=6*K-12*j+6*N,z=3*z-3*E,E=3*j-3*N,j=2*U*(m=m.y)-2*Z*x,N=[],Math.abs(j)<Xe.CURVETIME_EPSILON?(j=U*K-Z*G)==0||0<=(S=-(U*E-Z*z)/j)&&S<=1&&N.push(S):(S=G*m-K*x,0<=(E=(G*G-4*U*z)*m*m+(-2*G*K+4*Z*z+4*U*E)*x*m+(K*K-4*Z*E)*x*x)&&j!=0&&(E=(-S+(x=Math.sqrt(E)))/j,0<=(j=-(S+x)/j)&&j<=1&&N.push(j),0<=E&&E<=1&&N.push(E))),N}}}}),Dt=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 Dt&&(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=$e.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,m=x.getCurve(),x=m&&t<i?m.getPrevious():m;if(r<e&&(f=f.getNext()),r<t&&(m=m.getNext()),!(v&&f&&x&&m))return!1;var S=[];function E(z,j){var G=z.getValues(),K=(z=(K=Ye.classify(G).roots||Ye.getPeaks(G)).length,Ye.getLength(G,j&&z?K[z-1]:0,!j&&z?K[0]:1));S.push(z?K:K/32)}function N(z,j,G){return j<G?j<z&&z<G:j<z||z<G}return l||(E(v,!0),E(f,!1)),d||(E(x,!0),E(m,!1)),i=this.getPoint(),r=Math.min.apply(Math,S),f=l?f.getTangentAtTime(e):f.getPointAt(r).subtract(i),v=l?f.negate():v.getPointAt(-r).subtract(i),m=d?m.getTangentAtTime(t):m.getPointAt(r).subtract(i),i=d?m.negate():x.getPointAt(-r).subtract(i),v=v.getAngle(),f=f.getAngle(),i=i.getAngle(),m=m.getAngle(),!!(l?N(v,i,m)^N(f,i,m)&&N(v,m,i)^N(f,m,i):N(i,v,f)^N(m,v,f)&&N(i,f,v)^N(m,f,v))},hasOverlap:function(){return!!this._overlap}},O.each(Ye._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(z,j){for(var G=z+j;-1<=G&&G<=l;G+=j){var K=t[(G%l+l)%l];if(!i.getPoint().isClose(K.getPoint(),1e-7))break;if(i.equals(K))return K}return null}for(;d<=f;){var m,x=d+f>>>1,S=t[x];if(r&&(m=i.equals(S)?S:v(x,-1)||v(x,1)))return i._overlap&&(m._overlap=m._intersection._overlap=!0),m;var E=i.getPath(),N=S.getPath();(E!==N?E._id-N._id:i.getIndex()+i.getTime()-(S.getIndex()+S.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}}}}),ii=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:Et)(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 $,f=new $;function v(ie,oe){return ie=+E[ie],l&&(ie+=d[oe]),ie}function m(ie){return new $(v(ie,"x"),v(ie+1,"y"))}this.clear();for(var x=0,S=r&&r.length;x<S;x++){var E,N=r[x],z=N[0],j=z.toLowerCase(),G=(E=N.match(/[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g))&&E.length;switch(l=z===j,t!=="z"||/[mz]/.test(j)||this.moveTo(d),j){case"m":case"l":for(var K=j==="m",U=0;U<G;U+=2)this[K?"moveTo":"lineTo"](d=m(U)),K&&(f=d,K=!1);i=d;break;case"h":case"v":var Z=j==="h"?"x":"y";for(d=d.clone(),U=0;U<G;U++)d[Z]=v(U,Z),this.lineTo(d);i=d;break;case"c":for(U=0;U<G;U+=6)this.cubicCurveTo(m(U),i=m(U+2),d=m(U+4));break;case"s":for(U=0;U<G;U+=4)this.cubicCurveTo(/[cs]/.test(t)?d.multiply(2).subtract(i):d,i=m(U),d=m(U+2)),t=j;break;case"q":for(U=0;U<G;U+=4)this.quadraticCurveTo(i=m(U),d=m(U+2));break;case"t":for(U=0;U<G;U+=2)this.quadraticCurveTo(i=/[qt]/.test(t)?d.multiply(2).subtract(i):d,d=m(U)),t=j;break;case"a":for(U=0;U<G;U+=7)this.arcTo(d=m(U+5),new et(+E[U],+E[U+1]),+E[U+2],+E[U+4],+E[U+3]);break;case"z":this.closePath(1e-12),d=f}t=j}},_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)?Ye.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=$.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 m=f.length;if(t<m)for(var x=r?Ke:Et,S=t;S<m;S++)this.add(new x);else m<t&&this[r?"removeSegments":"removeChildren"](m,t);for(S=0;S<m;S++)v[S].interpolate(d[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,d=(e=r.length,[]),f=0;t=!0;for(var v=ht.findItemBoundsCollisions(i,r,Xe.GEOMETRIC_EPSILON),m=l-1;0<=m&&t;m--){var x=i[m],S=(t=!1,v[m]);if(S)for(var E=S.length-1;0<=E&&!t;E--)x.compare(r[S[E]])&&(d[S[E]]||(d[S[E]]=!0,f++),t=!0)}t=t&&f===e}return t}}),Et=ii.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!==M||e.x===M&&e.point===M?null:t)&&0<t.length?this.setSegments(t):(this._curves=M,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=M,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=M)},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=M,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 Ye(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 Ye(this,this._segments[t-1],this._segments[0]))),this._changed(41))}},{beans:!0,getPathData:function(e,t){var i,r,l,d,f,v,m,x,S=this._segments,E=S.length,N=new $e(t),z=new Array(6),j=!0,G=[];function K(Z,ie){Z._transformCoordinates(e,z),i=z[0],r=z[1],j?(G.push("M"+N.pair(i,r)),j=!1):(f=z[2],v=z[3],f===i&&v===r&&m===l&&x===d?ie||(Z=r-d,G.push((ie=i-l)==0?"v"+N.number(Z):Z==0?"h"+N.number(ie):"l"+N.pair(ie,Z))):G.push("c"+N.pair(m-l,x-d)+" "+N.pair(f-l,v-d)+" "+N.pair(i-l,r-d))),l=i,d=r,m=z[4],x=z[5]}if(!E)return"";for(var U=0;U<E;U++)K(S[U]);return this._closed&&0<E&&(K(S[0],!0),G.push("z")),G.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=(S=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(S)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 m=this._countCurves(),x=0<t&&t+l-1===m?t-1:t,S=x,E=Math.min(x+l,m);for(e._curves&&(r.splice.apply(r,[x,0].concat(e._curves)),S+=e._curves.length),d=S;d<E;d++)r.splice(d,0,new Ye(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,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 m=0;m<v;m++){var x=f[m];x._selection&&this._updateSelection(x,x._selection,0),x._index=x._path=null}m=e;for(var S=r.length;m<S;m++)r[m]._index=m;if(l){for(e=0<e&&t===d+(this._closed?1:0)?e-1:e,m=(l=l.splice(e,v)).length-1;0<=m;m--)l[m]._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+=Ye.getArea(Ye.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 Et(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===M?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 hi(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 Yt(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(ct,ft){var F=ct&&ct.index;if(F!=null){var s=ct.path;if(s&&s!==t)throw new Error(ct._class+" "+F+" of "+s+" is not part of "+t);ft&&ct instanceof Ye&&F++}else F=typeof ct=="number"?ct:ft;return Math.min(F<0&&d?F%l:F<0?F+l:F,l-1)}var v=d&&i.from===M&&i.to===M,m=f(i.from,0),x=f(i.to,l-1);if(x<m&&(d?m-=l:(E=m,m=x,x=E)),/^(?:asymmetric|continuous)$/.test(e)){var S=e==="asymmetric",E=Math.min,N=(e=x-m+1)-1,z=e=v?E(e,4):1,j=[];if(d||(z=E(1,m),e=E(1,l-x-1)),!((N+=z+e)<=1)){for(var G=0,K=m-z;G<=N;G++,K++)j[G]=r[(K<0?K+l:K)%l]._point;var U=N-1,Z=[le=j[0]._x+2*j[1]._x],ie=[ge=j[0]._y+2*j[1]._y],oe=[xe=2],ce=[],ue=[];for(G=1;G<N;G++)var Ce=G<U,Se=Ce?4:S?3:8,Te=Ce?2:S?0:1,Fe=(Ce||S?1:2)/xe,xe=oe[G]=(Ce?4:S?2:7)-Fe,le=Z[G]=Se*j[G]._x+Te*j[G+1]._x-Fe*le,ge=ie[G]=Se*j[G]._y+Te*j[G+1]._y-Fe*ge;for(ce[U]=Z[U]/oe[U],ue[U]=ie[U]/oe[U],G=N-2;0<=G;G--)ce[G]=(Z[G]-ce[G+1])/oe[G],ue[G]=(ie[G]-ue[G+1])/oe[G];ce[N]=(3*j[N]._x-ce[U])/2,ue[N]=(3*j[N]._y-ue[U])/2,G=z;var Ge=N-e;for(K=m;G<=Ge;G++,K++){var Ie=r[K<0?K+l:K],Ze=Ie._point,rt=ce[G]-Ze._x;Ze=ue[G]-Ze._y,(v||G<Ge)&&Ie.setHandleOut(rt,Ze),(v||z<G)&&Ie.setHandleIn(-rt,-Ze)}}}else for(G=m;G<=x;G++)r[G<0?G+l:G].smooth(i,!v&&G===m,!v&&G===x)},toShape:function(e){if(!this._closed)return null;var t,i,r,l,d,f,v=this._segments;function m(z,j){var G=v[z],K=G.getNext();return j=(z=v[j]).getNext(),G._handleOut.isZero()&&K._handleIn.isZero()&&z._handleOut.isZero()&&j._handleIn.isZero()&&K._point.subtract(G._point).isCollinear(j._point.subtract(z._point))}function x(z){var j=v[z],G=j.getNext(),K=j._handleOut,U=G._handleIn,Z=.5522847498307936;if(K.isOrthogonal(U))return z=j._point,j=G._point,(G=new gt(z,K,!0).intersect(new gt(j,U,!0),!0))&&Xe.isZero(K.getLength()/G.subtract(z).getLength()-Z)&&Xe.isZero(U.getLength()/G.subtract(j).getLength()-Z)}function S(z,j){return v[z]._point.getDistance(v[j]._point)}if(!this.hasHandles()&&v.length===4&&m(0,2)&&m(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=Wt.Rectangle,i=new et(S(0,3),S(0,1)),r=v[1]._point.add(v[2]._point).divide(2)):v.length===8&&x(0)&&x(2)&&x(4)&&x(6)&&m(1,5)&&m(3,7)?(t=Wt.Rectangle,N=(i=new et(S(1,6),S(0,3))).subtract(new et(S(0,7),S(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)&&(N=Xe.isZero(S(0,2)-S(1,3))?(t=Wt.Circle,S(0,2)/2):(t=Wt.Ellipse,new et(S(2,0)/2,S(3,1)/2)),r=v[1]._point),t){var E=this.getPosition(!0),N=new t({center:E,size:i,radius:N,insert:!1});return N.copyAttributes(this,!0),N._matrix.prepend(this._matrix),N.rotate(r.subtract(E).getAngle()+90),e!==M&&!e||N.insertAbove(this),N}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,m=i[0].getValues(),x=[],S=0,E=0,N=0;N<d;N++){var z=r[N].getValues();if(x.push(z),K=Ye.getOverlaps(m,z)){f=!N&&0<K[0][0]?d-1:N,v=K[0][1];break}}var j,G=Math.abs;for(z=x[f];m&&z;){var K=Ye.getOverlaps(m,z);if(K&&G(K[0][0]-E)<1e-8){(E=K[1][0])===1&&(m=++S<l?i[S].getValues():null,E=0);var U=K[0][1];if(G(U-v)<1e-8){if(j=j||[f,U],(v=K[1][1])===1&&(z=x[f=++f>=d?0:f]||r[f].getValues(),v=0),!m)return j[0]===f&&j[1]===v;continue}}break}return!1},_hitTestSelf:function(e,t,i,r){var l,d,f,v,m,x,S=this,E=this.getStyle(),N=this._segments,z=N.length,j=this._closed,G=t._tolerancePadding,K=G,U=t.stroke&&E.hasStroke(),Z=t.fill&&E.hasFill(),ie=t.curves,oe=U?E.getStrokeWidth()/2:Z&&0<t.tolerance||ie?0:null;function ce(le,ge){return e.subtract(le).divide(ge).length<=1}function ue(le,ge,Ge){if(!t.selected||ge.isSelected()){var Ie=le._point;if(ce(ge=ge!==Ie?ge.add(Ie):ge,K))return new si(Ge,S,{segment:le,point:ge})}}function Ce(le,ge){return(ge||t.segments)&&ue(le,le._point,"segment")||!ge&&t.handles&&(ue(le,le._handleIn,"handle-in")||ue(le,le._handleOut,"handle-out"))}function Se(le){v.add(le)}function Te(le){var ge=j||0<le._index&&le._index<z-1;return(ge?l:d)==="round"?ce(le._point,K):(v=new Et({internal:!0,closed:!0}),ge?le.isSmooth()||Et._addBevelJoin(le,l,oe,f,null,r,Se,!0):d==="square"&&Et._addSquareCap(le,d,oe,null,r,Se,!0),!v.isEmpty()&&(v.contains(e)||(le=v.getNearestLocation(e))&&ce(le.getPoint(),G)))}if(oe!==null&&(0<oe?(l=E.getStrokeJoin(),d=E.getStrokeCap(),f=E.getMiterLimit(),K=K.add(Et._getStrokePadding(oe,r))):l=d="round"),!t.ends||t.segments||j){if(t.segments||t.handles){for(var Fe=0;Fe<z;Fe++)if(m=Ce(N[Fe]))return m}}else if(m=Ce(N[0],!0)||Ce(N[z-1],!0))return m;if(oe!==null&&((x=this.getNearestLocation(e))&&((E=x.getTime())===0||E===1&&1<z?Te(x.getSegment())||(x=null):ce(x.getPoint(),K)||(x=null)),!x&&l==="miter"&&1<z))for(Fe=0;Fe<z;Fe++){var xe=N[Fe];if(e.getDistance(xe._point)<=f*oe&&Te(xe)){x=xe.getLocation();break}}return!x&&Z&&this._contains(e)||x&&!U&&!ie?new si("fill",this):x?new si(U?"stroke":"curve",this,{location:x,point:x.getPoint()}):null}},O.each(Ye._evaluateMethods,function(e){this[e+"At"]=function(t){return(t=this.getLocationAt(t))&&t[e]()}},{beans:!1,getLocationOf:function(){for(var e=$.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 Dt(t[t.length-1],1)}else if(e&&e.getPath&&e.getPath()===this)return e;return null},getOffsetsWithTangent:function(){var e=$.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),m=0,x=v.length;m<x;m++){var S=i+f.getOffsetAtTime(v[m]);t.indexOf(S)<0&&t.push(S)}i+=f.length}return t}}),new function(){function e(t,i,r){var l,d,f,v,m,x,S,E,N=i._segments,z=N.length,j=new Array(6),G=!0;function K(Z){var ie,oe;d=r?(Z._transformCoordinates(r,j),l=j[0],j[1]):(ie=Z._point,l=ie._x,ie._y),G?(t.moveTo(l,d),G=!1):(x=r?(m=j[2],j[3]):(oe=Z._handleIn,m=l+oe._x,d+oe._y),m===l&&x===d&&S===f&&E===v?t.lineTo(l,d):t.bezierCurveTo(S,E,m,x,l,d)),f=l,v=d,E=r?(S=j[4],j[5]):(oe=Z._handleOut,S=f+oe._x,v+oe._y)}for(var U=0;U<z;U++)K(N[U]);i._closed&&0<z&&K(N[0])}return{_draw:function(t,i,r,l){var d=i.dontStart,f=i.dontFinish||i.clip,v=this.getStyle(),m=v.hasFill(),x=v.hasStroke(),S=v.getDashArray(),E=!Ut.support.nativeDash&&x&&S&&S.length;function N(Z){return S[(Z%E+E)%E]}if(d||t.beginPath(),(m||x&&!E||f)&&(e(t,this,l),this._closed&&t.closePath()),!f&&(m||x)&&(this._setStyles(t,i,r),m&&(t.fill(v.getFillRule()),t.shadowColor="rgba(0,0,0,0)"),x)){if(E){d||t.beginPath();for(var z,j=new hi(this,.25,32,!1,l),G=j.length,K=-v.getDashOffset(),U=0;0<K;)K-=N(U--)+N(U--);for(;K<G;)z=K+N(U++),(0<K||0<z)&&j.drawPart(t,Math.max(K,0),Math.max(z,0)),K=z+N(U++)}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,m,x=f/2,S=f-2,E=x-1,N=new Array(6),z=0,j=l.length;z<j;z++){var G=l[z],K=G._selection;G._transformCoordinates(d,N),v=N[0],m=N[1],2&K&&U(2),4&K&&U(4),r.fillRect(v-x,m-x,f,f),0<S&&!(1&K)&&(K=r.fillStyle,r.fillStyle="#ffffff",r.fillRect(v-E,m-E,S,S),r.fillStyle=K)}function U(Z){var ie=N[Z];Z=N[Z+1],v==ie&&m==Z||(r.beginPath(),r.moveTo(v,m),r.lineTo(ie,Z),r.stroke(),r.beginPath(),r.arc(ie,Z,x,0,2*Math.PI,!0),r.fill())}}(t,this._segments,i,Ut.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($.read(arguments))])},moveBy:function(){throw new Error("moveBy() is unsupported on Path items.")},lineTo:function(){this._add([new Ke($.read(arguments))])},cubicCurveTo:function(){var t=arguments,i=$.read(t),r=$.read(t),l=$.read(t);(t=e(this)).setHandleOut(i.subtract(t._point)),this._add([new Ke(l,r.subtract(l))])},quadraticCurveTo:function(){var t=arguments,i=$.read(t),r=$.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=$.read(t),r=$.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=$.read(i),m=O.peek(i);if(typeof(z=O.pick(m,!0))=="boolean")var x=(G=f.add(v).divide(2)).add(G.subtract(f).rotate(z?-90:90));else if(O.remain(i)<=2)x=v,v=$.read(i);else if(!f.equals(v)){var S=et.read(i);if((E=Xe.isZero)(S.width)||E(S.height))return this.lineTo(v);var E,N=O.read(i),z=!!O.read(i),j=!!O.read(i),G=f.add(v).divide(2),K=(ge=f.subtract(G).rotate(-N)).x,U=ge.y,Z=(ce=r(S.width))*ce;if(1<(S=l((E=K*K)/Z+(i=U*U)/(m=(ue=r(S.height))*ue)))&&(Z=(ce*=S)*ce,m=(ue*=S)*ue),(S=r(S=(Z*m-Z*i-m*E)/(Z*i+m*E))<1e-12?0:S)<0)throw new Error("Cannot create an arc with the given arguments");ie=new $(ce*U/ue,-ue*K/ce).multiply((j===z?-1:1)*l(S)).rotate(N).add(G),N=(oe=(t=new _t().translate(ie).rotate(N).scale(ce,ue))._inverseTransform(f)).getDirectedAngle(t._inverseTransform(v)),!z&&0<N?N-=360:z&&N<0&&(N+=360)}if(x){var ie,oe,ce=new gt(f.add(x).divide(2),x.subtract(f).rotate(90),!0),ue=new gt(x.add(v).divide(2),v.subtract(x).rotate(90),!0);if(x=(z=new gt(f,v)).getSide(x),!(ie=ce.intersect(ue,!0))){if(!x)return this.lineTo(v);throw new Error("Cannot create an arc with the given arguments")}N=(oe=f.subtract(ie)).getDirectedAngle(v.subtract(ie)),(z=z.getSide(ie,!0))===0?N=x*r(N):x===z&&(N+=N<0?360:-360)}if(N){for(var Ce=360<=(r=r(N))?4:Math.ceil((r-1e-5)/90),Se=N/Ce,Te=(N=Se*Math.PI/360,4/3*Math.sin(N)/(1+Math.cos(N))),Fe=[],xe=0;xe<=Ce;xe++){var le,ge=v,Ge=null;xe<Ce&&(Ge=oe.rotate(90).multiply(Te),t?(ge=t._transformPoint(oe),Ge=t._transformPoint(oe.add(Ge)).subtract(ge)):ge=ie.add(oe)),xe?(le=oe.rotate(-90).multiply(Te),t&&(le=t._transformPoint(oe.add(le)).subtract(ge)),Fe.push(new Ke(ge,le,Ge))):d.setHandleOut(Ge),oe=oe.rotate(Se)}this._add(Fe)}},lineBy:function(){var t=$.read(arguments),i=e(this)._point;this.lineTo(i.add(t))},curveBy:function(){var t=arguments,i=$.read(t),r=$.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=$.read(t),r=$.read(t),l=$.read(t);t=e(this)._point,this.cubicCurveTo(t.add(i),t.add(r),t.add(l))},quadraticCurveBy:function(){var t=arguments,i=$.read(t),r=$.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($.read(t)),l=O.pick(O.peek(t),!0);typeof l=="boolean"?this.arcTo(r,l):this.arcTo(r,i.add($.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 Et[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 Me;var v=new Array(6),m=f._transformCoordinates(r,new Array(6)),x=m.slice(0,2),S=x.slice(),E=new Array(2);function N(G){G._transformCoordinates(r,v);for(var K=0;K<2;K++)Ye._addBounds(m[K],m[K+4],v[K+2],v[K],K,d?d[K]:0,x,S,E);G=m,m=v,v=G}for(var z=1,j=e.length;z<j;z++)N(e[z]);return t&&N(f),new Me(x[0],x[1],S[0]-x[0],S[1]-x[1])},getStrokeBounds:function(e,t,i,r,l){var d=i.getStyle(),f=d.hasStroke(),v=d.getStrokeWidth(),m=f&&i._getStrokeMatrix(r,l),x=f&&Et._getStrokePadding(v,m),S=Et.getBounds(e,t,i,r,l,x);if(!f)return S;var E=v/2,N=d.getStrokeJoin(),z=(v=d.getStrokeCap(),d.getMiterLimit()),j=new Me(new et(x));function G(ce){S=S.include(ce)}function K(ce){S=S.unite(j.setCenter(ce._point.transform(r)))}function U(ce,ue){ue==="round"||ce.isSmooth()?K(ce):Et._addBevelJoin(ce,ue,E,z,r,m,G)}function Z(ce,ue){ue==="round"?K(ce):Et._addSquareCap(ce,ue,E,r,m,G)}var ie=e.length-(t?0:1);if(0<ie){for(var oe=1;oe<ie;oe++)U(e[oe],N);t?U(e[0],N):(Z(e[0],v),Z(e[e.length-1],v))}return S},_getStrokePadding:function(e,t){if(!t)return[e,e];var i=new $(e,0).transform(t),r=new $(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=(m=e.getCurve()).getPrevious(),l=m.getPoint1().transform(l),e=e.getNormalAtTime(1).multiply(i).transform(d);var m=m.getNormalAtTime(0).multiply(i).transform(d);((d=e.getDirectedAngle(m))<0||180<=d)&&(e=e.negate(),m=m.negate()),v&&f(l),f(l.add(e)),t!=="miter"||(e=new gt(l.add(e),new $(-e.y,e.x),!0).intersect(new gt(l.add(m),new $(-m.y,m.x),!0),!0))&&l.getDistance(e)<=r*i&&f(e),f(l.add(m))},_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,m=i.getStyle();l.stroke&&m.hasStroke()&&(v=i._getStrokeMatrix(r,l),l=i=m.getStrokeWidth()/2,m.getStrokeJoin()==="miter"&&(l=i*m.getMiterLimit()),m.getStrokeCap()==="square"&&(l=Math.max(l,i*Math.SQRT2)),d=Et._getStrokePadding(i,v),f=Et._getStrokePadding(l,v));for(var x=new Array(6),S=1/0,E=-S,N=S,z=E,j=0,G=e.length;j<G;j++){e[j]._transformCoordinates(r,x);for(var K=0;K<6;K+=2){var U,Z=(U=K?d:f)?U[0]:0,ie=U?U[1]:0,oe=x[K],ce=x[K+1];(U=oe-Z)<S&&(S=U),E<(oe+=Z)&&(E=oe),(Z=ce-ie)<N&&(N=Z),z<(ie=ce+ie)&&(z=ie)}}return new Me(S,N,E-S,z-N)}}});Et.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 Et(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),m=0;m<4;m++){var x=t[m];v[m]=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($.readNamed(l,"from")),new Ke($.readNamed(l,"to"))],!1,l)},Circle:function(){var l=arguments,d=$.readNamed(l,"center"),f=O.readNamed(l,"radius");return r(d,new et(f),l)},Rectangle:function(){var l,d,f=arguments,v=Me.readNamed(f,"rectangle"),m=et.readNamed(f,"radius",0,{readNull:!0}),x=v.getBottomLeft(!0),S=v.getTopLeft(!0),E=v.getTopRight(!0),N=v.getBottomRight(!0);return i(!m||m.isZero()?[new Ke(x),new Ke(S),new Ke(E),new Ke(N)]:(l=(m=et.min(m,v.getSize(!0).divide(2))).width,d=m.height,v=l*e,m=d*e,[new Ke(x.add(l,0),null,[-v,0]),new Ke(x.subtract(0,d),[0,m]),new Ke(S.add(0,d),null,[0,-m]),new Ke(S.add(l,0),[-v,0],null),new Ke(E.subtract(l,0),null,[v,0]),new Ke(E.add(0,d),[0,-m],null),new Ke(N.subtract(0,d),null,[0,m]),new Ke(N.subtract(l,0),[v,0])]),!0,f)},RoundRectangle:"#Rectangle",Ellipse:function(){var l=arguments,d=Wt._readEllipse(l);return r(d.center,d.radius,l)},Oval:"#Ellipse",Arc:function(){var l=arguments,d=$.readNamed(l,"from"),f=$.readNamed(l,"through"),v=$.readNamed(l,"to"),m=O.getNamed(l);return(l=new Et(m&&m.insert==0&&dt.NO_INSERT)).moveTo(d),l.arcTo(f,v),l.set(m)},RegularPolygon:function(){for(var l=arguments,d=$.readNamed(l,"center"),f=O.readNamed(l,"sides"),v=O.readNamed(l,"radius"),m=360/f,x=f%3==0,S=new $(0,x?-v:v),E=x?-1:.5,N=new Array(f),z=0;z<f;z++)N[z]=new Ke(d.add(S.rotate((z+E)*m)));return i(N,!0,l)},Star:function(){for(var l=arguments,d=$.readNamed(l,"center"),f=2*O.readNamed(l,"points"),v=O.readNamed(l,"radius1"),m=O.readNamed(l,"radius2"),x=360/f,S=new $(0,-1),E=new Array(f),N=0;N<f;N++)E[N]=new Ke(d.add(S.rotate(x*N).multiply(N%2?m:v)));return i(E,!0,l)}}}});var Kt=ii.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 Et||(r=O.slice(r)),Array.isArray(f)?r[d]=new Et({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 Et(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===Et||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 Et(dt.NO_INSERT);i!==t&&this.addChild(i),i.moveTo.apply(i,arguments)},moveBy:function(){var t=(i=e(this,!0))&&i.getLastSegment(),i=$.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}},{}));ii.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(U){return U._children||[U]}function d(U,Z){var ie=U.clone(!1).reduce({simplify:!0}).transform(null,!0,!0);if(Z){for(var oe=l(ie),ce=0,ue=oe.length;ce<ue;ce++)(U=oe[ce])._closed||U.isEmpty()||(U.closePath(1e-12),U.getFirstSegment().setHandleIn(0,0),U.getLastSegment().setHandleOut(0,0));ie=ie.resolveCrossings().reorient(ie.getFillRule()==="nonzero",!0)}return ie}function f(U,Z,ie,oe,ce){var ue=new Kt(dt.NO_INSERT);return ue.addChildren(U,!0),ue=ue.reduce({simplify:Z}),ce&&ce.insert==0||ue.insertAbove(oe&&ie.isSibling(oe)&&ie.getIndex()<oe.getIndex()?oe:ie),ue.copyAttributes(ie,!0),ue}function v(U){return U.hasOverlap()||U.isCrossing()}function m(U,Z,ie,oe){if(oe&&(oe.trace==0||oe.stroke)&&/^(subtract|intersect)$/.test(ie))return x(U,Z,ie);var ce=d(U,!0),ue=Z&&U!==Z&&d(Z,!0),Ce=r[ie];Ce[ie]=!0,ue&&(Ce.subtract||Ce.exclude)^ue.isClockwise()^ce.isClockwise()&&ue.reverse();var Se,Te=z(Dt.expand(ce.getIntersections(ue,v))),Fe=l(ce),xe=(ie=ue&&l(ue),[]),le=[];function ge(b){for(var A=0,R=b.length;A<R;A++){var D=b[A];O.push(xe,D._segments),O.push(le,D.getCurves()),D._overlapsOnly=!0}}function Ge(b){for(var A=[],R=0,D=b&&b.length;R<D;R++)A.push(le[b[R]]);return A}if(Te.length){ge(Fe),ie&&ge(ie);for(var Ie=new Array(le.length),Ze=0,rt=le.length;Ze<rt;Ze++)Ie[Ze]=le[Ze].getValues();var ct=ht.findCurveBoundsCollisions(Ie,Ie,0,!0),ft={};for(Ze=0;Ze<le.length;Ze++){var F=le[Ze],s=F._path._id;(ft[s]=ft[s]||{})[F.getIndex()]={hor:Ge(ct[Ze].hor),ver:Ge(ct[Ze].ver)}}for(Ze=0,rt=Te.length;Ze<rt;Ze++)G(Te[Ze]._segment,ce,ue,ft,Ce);for(Ze=0,rt=xe.length;Ze<rt;Ze++){var c=xe[Ze],p=c._intersection;c._winding||G(c,ce,ue,ft,Ce),p&&p._overlap||(c._path._overlapsOnly=!1)}Se=K(xe,Ce)}else Se=N(ie?Fe.concat(ie):Fe.slice(),function(b){return!!Ce[b]});return f(Se,!0,U,Z,oe)}function x(U,Z,ie){var oe=d(U),ce=d(Z),ue=oe.getIntersections(ce,v),Ce=ie==="subtract",Se=ie==="divide",Te={},Fe=[];function xe(Ge){return!Te[Ge._id]&&(Se||ce.contains(Ge.getPointAt(Ge.getLength()/2))^Ce)&&(Fe.unshift(Ge),Te[Ge._id]=!0)}for(var le=ue.length-1;0<=le;le--){var ge=ue[le].split();ge&&(xe(ge)&&ge.getFirstSegment().setHandleIn(0,0),oe.getLastSegment().setHandleOut(0,0))}return xe(oe),f(Fe,!1,U,Z)}function S(U,Z){for(var ie=U;ie;){if(ie===Z)return;ie=ie._previous}for(;U._next&&U._next!==Z;)U=U._next;if(!U._next){for(;Z._previous;)Z=Z._previous;(U._next=Z)._previous=U}}function E(U){for(var Z=U.length-1;0<=Z;Z--)U[Z].clearHandles()}function N(U,Z,ie){var oe=U&&U.length;if(oe){var ce=O.each(U,function(ft,F){this[ft._id]={container:null,winding:ft.isClockwise()?1:-1,index:F}},{}),ue=U.slice().sort(function(ft,F){return i(F.getArea())-i(ft.getArea())}),Ce=ue[0],Se=ht.findItemBoundsCollisions(ue,null,Xe.GEOMETRIC_EPSILON);ie==null&&(ie=Ce.isClockwise());for(var Te=0;Te<oe;Te++){var Fe,xe=ue[Te],le=ce[xe._id],ge=0,Ge=Se[Te];if(Ge){for(var Ie=null,Ze=Ge.length-1;0<=Ze;Ze--)if(Ge[Ze]<Te){Ie=Ie||xe.getInteriorPoint();var rt=ue[Ge[Ze]];if(rt.contains(Ie)){var ct=ce[rt._id];ge=ct.winding,le.winding+=ge,le.container=ct.exclude?ct.container:rt;break}}}Z(le.winding)===Z(ge)?(le.exclude=!0,U[le.index]=null):(Fe=le.container,xe.setClockwise(Fe?!Fe.isClockwise():ie))}}return U}function z(U,Z,ie){var oe,ce,ue,Ce=Z&&[],Se=!1,Te=ie||[],Fe=ie&&{};function xe(p){return p._path._id+"."+p._segment1._index}for(var le=(ie&&ie.length)-1;0<=le;le--)(ge=ie[le])._path&&(Fe[xe(ge)]=!0);for(le=U.length-1;0<=le;le--){var ge,Ge=(s=U[le])._time,Ie=Ge,Ze=Z&&!Z(s);if((ge=s._curve)&&(ge!==ce?(Se=!ge.hasHandles()||Fe&&Fe[xe(ge)],oe=[],ue=null,ce=ge):1e-8<=ue&&(Ge/=ue)),Ze)oe&&oe.push(s);else{if(Z&&Ce.unshift(s),ue=Ie,Ge<1e-8)rt=ge._segment1;else if(.99999999<Ge)rt=ge._segment2;else{Ie=ge.divideAtTime(Ge,!0),Se&&Te.push(ge,Ie);for(var rt=Ie._segment1,ct=oe.length-1;0<=ct;ct--){var ft=oe[ct];ft._time=(ft._time-Ge)/(1-Ge)}}s._setSegment(rt);var F=rt._intersection,s=s._intersection;if(F){S(F,s);for(var c=F;c;)S(c._intersection,F),c=c._next}else rt._intersection=s}}return ie||E(Te),Ce||U}function j(U,Z,ie,oe,ce){var ue,Ce=Array.isArray(Z)?Z:Z[ie?"hor":"ver"],Se=ie?1:0,Te=1^Se,Fe=[U.x,U.y],xe=Fe[Se],le=Fe[Te],ge=1e-6,Ge=xe-1e-9,Ie=xe+1e-9,Ze=0,rt=0,ct=0,ft=0,F=!1,s=!1,c=1,p=[];function b(se){var re=se[Te+0],we=se[Te+2],me=se[Te+4],ne=se[Te+6];if(le<=t(re,we,me,ne)&&le>=e(re,we,me,ne)){re=se[Se+0],we=se[Se+2],me=se[Se+4],ne=se[Se+6];for(var de,pe=Ge>t(re,we,me,ne)||Ie<e(re,we,me,ne)?[se]:Ye.getMonoCurves(se,ie),Be=0,Le=pe.length;Be<Le;Be++)if(de=function(Ee){var Ue=Ee[Te+0],je=Ee[Te+6];if(!(le<e(Ue,je)||le>t(Ue,je))){var Ve=Ee[Se+0],Ne=Ee[Se+2],nt=Ee[Se+4],ot=Ee[Se+6];if(Ue!==je){var lt=le===Ue?0:le!==je&&!(Ge>t(Ve,Ne,nt,ot)||Ie<e(Ve,Ne,nt,ot))&&0<Ye.solveCubic(Ee,Te,le,p,0,1)?p[0]:1,st=lt===0?Ve:lt===1?ot:Ye.getPoint(Ee,lt)[ie?"y":"x"];return Ne=je<Ue?1:-1,nt=X[Te]>X[Te+6]?1:-1,je=X[Se+6],le!==Ue?(st<Ge?ct+=Ne:Ie<st?ft+=Ne:F=!0,xe-ge<st&&st<xe+ge&&(c/=2)):(Ne!=nt?Ve<Ge?ct+=Ne:Ie<Ve&&(ft+=Ne):Ve!=je&&(je<Ie&&Ie<st?(ft+=Ne,F=!0):Ge<je&&st<Ge&&(ct+=Ne,F=!0)),c/=4),X=Ee,!ce&&Ge<st&&st<Ie&&Ye.getTangent(Ee,lt)[ie?"x":"y"]===0&&j(U,Z,!ie,oe,!0)}(Ve<Ie&&Ge<ot||ot<Ie&&Ge<Ve)&&(F=!0)}}(pe[Be]))return de}}for(var A=0,R=Ce.length;A<R;A++){var D=Ce[A],H=D._path,J=D.getValues();if(!(A&&Ce[A-1]._path===H||(X=null,H._closed||(ue=Ye.getValues(H.getLastCurve().getSegment2(),D.getSegment1(),null,!oe))[Te]!==ue[Te+6]&&(X=ue),X)))for(var X=J,Y=H.getLastCurve();Y&&Y!==D;){var ve=Y.getValues();if(ve[Te]!==ve[Te+6]){X=ve;break}Y=Y.getPrevious()}if(J=b(J))return J;if(A+1===R||Ce[A+1]._path!==H){if(ue&&(J=b(ue)))return J;Ze+=ct=!F||ct||ft?ct:ft=H.isClockwise(oe)^ie?1:-1,rt+=ft,ct=ft=0,F=F&&!(s=!0),ue=null}}return Ze=i(Ze),rt=i(rt),{winding:t(Ze,rt),windingL:Ze,windingR:rt,quality:c,onPath:s}}function G(U,Z,ie,oe,ce){var ue=[],Ce=U,Se=0;do;while((Ze=U.getCurve())&&(le=Ze.getLength(),ue.push({segment:U,curve:Ze,length:le}),Se+=le),(U=U.getNext())&&!U._intersection&&U!==Ce);for(var Te=[.5,.25,.75],Fe={winding:0,quality:-1},xe=0;xe<Te.length&&Fe.quality<.5;xe++)for(var le=Se*Te[xe],ge=0,Ge=ue.length;ge<Ge;ge++){var Ie=(s=ue[ge]).length;if(le<=Ie){var Ze,rt=(Ze=s.curve)._path,ct=(c=rt._parent)instanceof Kt?c:rt,ft=Xe.clamp(Ze.getTimeAt(le),.001,.999),F=Ze.getPointAtTime(ft),s=i(Ze.getTangentAtTime(ft).y)<Math.SQRT1_2,c=null;if(ce.subtract&&ie&&(ft=(ct===Z?ie:Z)._getWinding(F,s,!0),ct===Z&&ft.winding||ct===ie&&!ft.winding)){if(ft.quality<1)continue;c={winding:0,quality:1}}(c=c||j(F,oe[rt._id][Ze.getIndex()],s,!0)).quality>Fe.quality&&(Fe=c);break}le-=Ie}for(ge=ue.length-1;0<=ge;ge--)ue[ge].segment._winding=Fe}function K(U,Z){var ie,oe=[];function ce(D){return!(!D||D._visited||Z&&(!Z[(D=D._winding||{}).winding]||Z.unite&&D.winding===2&&D.windingL&&D.windingR))}function ue(D){if(D){for(var H=0,J=ie.length;H<J;H++)if(D===ie[H])return!0}return!1}function Ce(D){for(var H=D._segments,J=0,X=H.length;J<X;J++)H[J]._visited=!0}U.sort(function(D,H){var J=D._intersection,X=H._intersection,Y=!(!J||!J._overlap),ve=!(!X||!X._overlap),se=D._path,re=H._path;return Y^ve?Y?1:-1:!J^!X?J?1:-1:se!==re?se._id-re._id:D._index-H._index});for(var Se=0,Te=U.length;Se<Te;Se++){var Fe,xe,le,ge,Ge,Ie=U[Se],Ze=ce(Ie),rt=null,ct=!1,ft=!0,F=[];for(Ze&&Ie._path._overlapsOnly&&(ge=Ie._path,Ge=Ie._intersection._segment._path,ge.compare(Ge)&&(ge.getArea()&&oe.push(ge.clone(!1)),Ce(ge),Ce(Ge),Ze=!1));Ze;){var s=!rt,c=function(D,H){var J=D._intersection,X=J,Y=[];function ve(se,re){for(;se&&se!==re;){var we,me=se._segment,ne=me&&me._path;ne&&(ne=(we=me.getNext()||ne.getFirstSegment())._intersection,me!==D&&(ue(me)||ue(we)||we&&ce(me)&&(ce(we)||ne&&ce(ne._segment)))&&Y.push(me),H&&ie.push(me)),se=se._next}}if(H&&(ie=[D]),J){for(ve(J);J&&J._previous;)J=J._previous;ve(J,X)}return Y}(Ie,s),p=c.shift(),b=!(ct=!s&&(ue(Ie)||ue(p)))&&p;if(s&&(rt=new Et(dt.NO_INSERT),Fe=null),ct){(Ie.isFirst()||Ie.isLast())&&(ft=Ie._path._closed),Ie._visited=!0;break}if(b&&Fe&&(F.push(Fe),Fe=null),Fe||(b&&c.push(Ie),Fe={start:rt._segments.length,crossings:c,visited:xe=[],handleIn:le}),!ce(Ie=b?p:Ie)){rt.removeSegments(Fe.start);for(var A=0,R=xe.length;A<R;A++)xe[A]._visited=!1;for(xe.length=0;(Ie=Fe&&Fe.crossings.shift())&&Ie._path||(Ie=null,(Fe=F.pop())&&(xe=Fe.visited,le=Fe.handleIn)),Fe&&!ce(Ie););if(!Ie)break}p=Ie.getNext(),rt.add(new Ke(Ie._point,le,p&&Ie._handleOut)),Ie._visited=!0,xe.push(Ie),Ie=p||Ie._path.getFirstSegment(),le=p&&p._handleIn}ct&&(ft&&(rt.getFirstSegment().setHandleIn(le),rt.setClosed(ft)),rt.getArea()!==0&&oe.push(rt))}return oe}return{_getWinding:function(U,Z,ie){return j(U,this.getCurves(),Z,ie)},unite:function(U,Z){return m(this,U,"unite",Z)},intersect:function(U,Z){return m(this,U,"intersect",Z)},subtract:function(U,Z){return m(this,U,"subtract",Z)},exclude:function(U,Z){return m(this,U,"exclude",Z)},divide:function(U,Z){return Z&&(Z.trace==0||Z.stroke)?x(this,U,"divide"):f([this.subtract(U,Z),this.intersect(U,Z)],!0,this,U,Z)},resolveCrossings:function(){var U=this._children,Z=U||[this];function ie(Ie,Ze){return(Ie=Ie&&Ie._intersection)&&Ie._overlap&&Ie._path===Ze}var oe,ce=!1,ue=!1,Ce=this.getIntersections(null,function(Ie){return Ie.hasOverlap()?ce=!0:Ie.isCrossing()&&(ue=!0)}),Se=ce&&ue&&[];if(Ce=Dt.expand(Ce),ce)for(var Te=z(Ce,function(Ie){return Ie.hasOverlap()},Se),Fe=Te.length-1;0<=Fe;Fe--){var xe=(Ge=Te[Fe])._path,le=Ge._segment,ge=le.getPrevious(),Ge=le.getNext();ie(ge,xe)&&ie(Ge,xe)&&(le.remove(),ge._handleOut._set(0,0),Ge._handleIn._set(0,0),ge===le||ge.getCurve().hasLength()||(Ge._handleIn.set(ge._handleIn),ge.remove()))}return ue&&(z(Ce,ce&&function(Ie){var Ze=Ie.getCurve(),rt=Ie.getSegment(),ct=(Ie=(ct=Ie._intersection)._curve,ct._segment);if(Ze&&Ie&&Ze._path&&Ie._path)return!0;rt&&(rt._intersection=null),ct&&(ct._intersection=null)},Se),Se&&E(Se),Z=K(O.each(Z,function(Ie){O.push(this,Ie._segments)},[]))),1<(Se=Z.length)&&U?(Z!==U&&this.setChildren(Z),oe=this):Se!==1||U||(Z[0]!==this&&this.setSegments(Z[0].removeSegments()),oe=this),oe||((oe=new Kt(dt.NO_INSERT)).addChildren(Z),(oe=oe.reduce()).copyAttributes(this),this.replaceWith(oe)),oe},reorient:function(U,Z){var ie=this._children;return ie&&ie.length?this.setChildren(N(this.removeChildren(),function(oe){return!!(U?oe:1&oe)},Z)):Z!==M&&this.setClockwise(Z),this},getInteriorPoint:function(){var U=this.getBounds().getCenter(!0);if(!this.contains(U)){for(var Z=this.getCurves(),ie=U.y,oe=[],ce=[],ue=0,Ce=Z.length;ue<Ce;ue++){var Se=Z[ue].getValues(),Te=Se[1],Fe=Se[3],xe=Se[5],le=Se[7];if(ie>=e(Te,Fe,xe,le)&&ie<=t(Te,Fe,xe,le))for(var ge=Ye.getMonoCurves(Se),Ge=0,Ie=ge.length;Ge<Ie;Ge++){var Ze=ge[Ge],rt=Ze[1],ct=Ze[7];rt!==ct&&(rt<=ie&&ie<=ct||ct<=ie&&ie<=rt)&&(Ze=ie===rt?Ze[0]:ie===ct?Ze[6]:Ye.solveCubic(Ze,1,ie,ce,0,1)===1?Ye.getPoint(Ze,ce[0]).x:(Ze[0]+Ze[6])/2,oe.push(Ze))}}1<oe.length&&(oe.sort(function(ft,F){return ft-F}),U.x=(oe[0]+oe[1])/2)}return U}}});var hi=O.extend({_class:"PathFlattener",initialize:function(e,t,i,r,l){var d,f=[],v=[],m=0,x=1/(i||32),S=e._segments,E=S[0];function N(G,K){K=Ye.getValues(G,K,l),f.push(K),function U(Z,ie,oe,ce){var ue,Ce;!(x<ce-oe)||r&&Ye.isStraight(Z)||Ye.isFlatEnough(Z,t||.25)?(ue=Z[6]-Z[0],Ce=Z[7]-Z[1],0<(Ce=Math.sqrt(ue*ue+Ce*Ce))&&(m+=Ce,v.push({offset:m,curve:Z,index:ie,time:ce}))):(Ce=Ye.subdivide(Z,.5),Z=(oe+ce)/2,U(Ce[0],ie,oe,Z),U(Ce[1],ie,Z,ce))}(K,G._index,0,1)}for(var z=1,j=S.length;z<j;z++)N(E,d=S[z]),E=d;e._closed&&N(d||E,S[0]),this.curves=f,this.parts=v,this.length=m,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=Ye.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(Ye._evaluateMethods,function(e){this[e+"At"]=function(t){return t=this._get(t),Ye[e](this.curves[t.index],t.time)}},{})),Yt=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,m=this.chordLengthParameterize(i,r),x=Math.max(t,t*t),S=!0,E=0;E<=4;E++){var N=this.generateBezier(i,r,m,l,d),z=this.findMaxError(i,r,N,m);if(z.error<t&&S)return void this.addCurve(e,N);if(v=z.index,z.error>=x)break;S=this.reparameterize(i,r,m,N),x=z.error}var j=f[v-1].subtract(f[v+1]);this.fitCubic(e,t,i,v,l,j),this.fitCubic(e,t,v,r,j.negate(),d)}else{var G=f[i];j=f[r],f=G.getDistance(j)/3,this.addCurve(e,[G,G.add(l.normalize(f)),j.add(d.normalize(f)),j])}},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],m=f[t],x=[[0,0],[0,0]],S=[0,0],E=0,N=t-e+1;E<N;E++){var z=(K=1-(Z=i[E]))*K*K,j=(U=3*Z*K)*K,G=U*Z,K=Z*Z*Z,U=r.normalize(j),Z=l.normalize(G);K=f[e+E].subtract(v.multiply(z+j)).subtract(m.multiply(G+K)),x[0][0]+=U.dot(U),x[0][1]+=U.dot(Z),x[1][0]=x[0][1],x[1][1]+=Z.dot(Z),S[0]+=U.dot(K),S[1]+=Z.dot(K)}var ie,oe;1e-12<d(t=x[0][0]*x[1][1]-x[1][0]*x[0][1])?(oe=x[0][0]*S[1]-x[1][0]*S[0],ie=(S[0]*x[1][1]-S[1]*x[0][1])/t,oe/=t):(t=x[0][0]+x[0][1],Ce=x[1][0]+x[1][1],ie=oe=1e-12<d(t)?S[0]/t:1e-12<d(Ce)?S[1]/Ce:0);var ce,ue,Ce=1e-12*(d=m.getDistance(v));return ie<Ce||oe<Ce?ie=oe=d/3:(Ce=m.subtract(v),ce=r.normalize(ie),ue=l.normalize(oe),ce.dot(Ce)-ue.dot(Ce)>d*d&&(ie=oe=d/3,ce=ue=null)),[v,v.add(ce||r.normalize(ie)),m.add(ue||l.normalize(oe)),m]},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),m=this.evaluate(1,l,i);return t=f.subtract(t),m=v.dot(v)+t.dot(m),Xe.isMachineZero(m)?i:i-t.dot(v)/m},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}}}),qt=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===M&&e.y===M;this._initialize(t&&e,!t&&$.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"}),Zt=qt.extend({_class:"PointText",initialize:function(){qt.apply(this,arguments)},getPoint:function(){var e=this._matrix.getTranslation();return new Tt(e.x,e.y,this,"setPoint")},setPoint:function(){var e=$.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 m=0,x=r.length;m<x;m++){e.shadowColor=v;var S=r[m];l&&(e.fillText(S,0,0),e.shadowColor="rgba(0,0,0,0)"),d&&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(),d=i.getLeading(),f=(i=this.getView().getTextWidth(i.getFontStyle(),f),0);return l!=="left"&&(f-=i/(l==="center"?2:1)),d=new Me(f,r?-.75*d:0,i,r*d),e?e._transformBounds(d,d):d}}),xt=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,m){var x=Math.max(f,v,m),S=x-Math.min(f,v,m);return[S==0?0:60*(x==f?(v-m)/S+(v<m?6:0):x==v?(m-f)/S+2:(f-v)/S+4),x===0?0:S/x,x]},"hsb-rgb":function(f,v,m){f=(f/60%6+6)%6;var x=Math.floor(f);return[(f=[m,m*(1-v),m*(1-v*(f-=x)),m*(1-v*(1-f))])[(x=l[x])[0]],f[x[1]],f[x[2]]]},"rgb-hsl":function(f,v,m){var x=Math.max(f,v,m),S=Math.min(f,v,m),E=x-S,N=E==0,z=(x+S)/2;return[N?0:60*(x==f?(v-m)/E+(v<m?6:0):x==v?(m-f)/E+2:(f-v)/E+4),N?0:z<.5?E/(x+S):E/(2-x-S),z]},"hsl-rgb":function(f,v,m){if(v===0)return[m,m,m];for(var x=[(f=(f/360%1+1)%1)+1/3,f,f-1/3],S=m<.5?m*(1+v):m+v-m*v,E=2*m-S,N=[],z=0;z<3;z++){var j=x[z];j<0&&(j+=1),1<j&&--j,N[z]=6*j<1?E+6*(S-E)*j:2*j<1?S:3*j<2?E+(S-E)*(2/3-j)*6:E}return N},"rgb-gray":function(f,v,m){return[.2989*f+.587*v+.114*m]},"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(m,x){var S=O.capitalize(m),E=/^(hue|saturation)$/.test(m),N=i[v][x]=v==="gradient"?m==="gradient"?function(z){var j=this._components[0];return j!==(z=P.read(Array.isArray(z)?z:arguments,0,{readNull:!0}))&&(j&&j._removeOwner(this),z&&z._addOwner(this)),z}:function(){return $.read(arguments,0,{readNull:m==="highlight",clone:!0})}:function(z){return z==null||isNaN(z)?0:+z};this["get"+S]=function(){return(this._type===v||E&&/^hs[bl]$/.test(this._type)?this._components:this._convert(v))[x]},this["set"+S]=function(z){this._type===v||E&&/^hs[bl]$/.test(this._type)||(this._components=this._convert(v),this._properties=t[v],this._type=v),this._components[x]=N.call(this,z),this._changed()}},this)},{_class:"Color",_readIndex:!0,initialize:function f(v){var m,x,S,E=arguments,N=this.__read,z=0,j=(v=Array.isArray(v)?(E=v)[0]:v)!=null&&typeof v;if(j==="string"&&v in t&&(G=v,v=E[1],Array.isArray(v)?(m=v,U=E[2]):(N&&(z=1),E=O.slice(E,1),j=typeof v)),!m){if(x=j==="number"?E:j==="object"&&v.length!=null?v:null){var G=G||(3<=x.length?"rgb":"gray"),K=t[G].length,U=x[K];N&&(z+=x===arguments?K+(U!=null?1:0):1),x.length>K&&(x=O.slice(x,0,K))}else if(j==="string")K=function(Ce){var Se=Ce.match(/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})?$/i)||Ce.match(/^#([\da-f])([\da-f])([\da-f])([\da-f])?$/i),Te="rgb";if(Se)for(var Fe=Se[4]?4:3,xe=new Array(Fe),le=0;le<Fe;le++){var ge=Se[le+1];xe[le]=parseInt(ge.length==1?ge+ge:ge,16)/255}else if(Se=Ce.match(/^(rgb|hsl)a?\((.*)\)$/)){Te=Se[1],xe=Se[2].trim().split(/[,\s]+/g);for(var Ge=Te==="hsl",Ie=(le=0,Math.min(xe.length,4));le<Ie;le++){var Ze,rt=xe[le];ge=parseFloat(rt),Ge?le===0?(Ze=rt.match(/([a-z]*)$/)[1],ge*={turn:360,rad:180/Math.PI,grad:.9}[Ze]||1):le<3&&(ge/=100):le<3&&(ge/=/%$/.test(rt)?100:255),xe[le]=ge}}else{var ct,ft=r[Ce];xe=(ft=ft||(V?(e||((e=Ae.getContext(1,1,{willReadFrequently:!0})).globalCompositeOperation="copy"),e.fillStyle="rgba(0,0,0,0)",e.fillStyle=Ce,e.fillRect(0,0,1,1),ct=e.getImageData(0,0,1,1).data,r[Ce]=[ct[0]/255,ct[1]/255,ct[2]/255]):[0,0,0])).slice()}return[Te,xe]}(v),G=K[0],(m=K[1]).length===4&&(U=m[3],m.length--);else if(j==="object")if(v.constructor===f){if(G=v._type,m=v._components.slice(),U=v._alpha,G==="gradient")for(var Z=1,ie=m.length;Z<ie;Z++){var oe=m[Z];oe&&(m[Z]=oe.clone())}}else if(v.constructor===P)G="gradient",x=E;else{var ce=t[G="hue"in v?"lightness"in v?"hsl":"hsb":"gradient"in v||"stops"in v||"radial"in v?"gradient":"gray"in v?"gray":"rgb"],ue=i[G];for(this._components=m=[],Z=0,ie=ce.length;Z<ie;Z++)(S=v[ce[Z]])==null&&!Z&&G==="gradient"&&"stops"in v&&(S={stops:v.stops,radial:v.radial}),(S=ue[Z].call(this,S))!=null&&(m[Z]=S);U=v.alpha}N&&G&&(z=1)}if(this._type=G||"rgb",!m)for(this._components=m=[],Z=0,ie=(ue=i[this._type]).length;Z<ie;Z++)(S=ue[Z].call(this,x&&x[Z]))!=null&&(m[Z]=S);return this._components=m,this._properties=t[this._type],this._alpha=U,N&&(this.__read=z),this},set:"#initialize",_serialize:function(f,v){var m=this.getComponents();return O.serialize(/^(gray|rgb)$/.test(this._type)?m:[this._type].concat(m),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 xt(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)?xt.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=[],m=this._type==="gradient",x=$e.instance,S=0,E=f.length;S<E;S++){var N=this._components[S];N!=null&&v.push(f[S]+": "+(m?N:x.number(N)))}return this._alpha!=null&&v.push("alpha: "+x.number(this._alpha)),"{ "+v.join(", ")+" }"},toCSS:function(f){var v=this._convert("rgb"),m=f||this._alpha==null?1:this._alpha;function x(S){return Math.round(255*(S<0?0:1<S?1:S))}return v=[x(v[0]),x(v[1]),x(v[2])],m<1&&v.push(m<0?0:m),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 m,x=(z=this._components)[0],S=x._stops,E=z[1],N=z[2],z=z[3];(v=v&&v.inverted())&&(E=v._transformPoint(E),N=v._transformPoint(N),z=z&&v._transformPoint(z)),m=x._radial?(v=N.getDistance(E),!z||(x=z.subtract(E)).getLength()>v&&(z=E.add(x.normalize(v-.1))),f.createRadialGradient((z=z||E).x,z.y,0,E.x,E.y,v)):f.createLinearGradient(E.x,E.y,N.x,N.y);for(var j=0,G=S.length;j<G;j++){var K=S[j],U=K._offset;m.addColorStop(U??j/(G-1),K._color.toCanvasStyle())}return this._canvasStyle=m},transform:function(f){if(this._type==="gradient"){for(var v=this._components,m=1,x=v.length;m<x;m++){var S=v[m];f._transformPoint(S,S,!0)}this._changed()}},statics:{_types:t,random:function(){var f=Math.random;return new xt(f(),f(),f())},_setOwner:function(f,v,m){return f&&!(f=f._owner&&v&&f._owner!==v?f.clone():f)._owner^!v&&(f._owner=v||null,f._setter=m||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=xt.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 xt(r,d,this._alpha!=null?e(this._alpha,i.getAlpha()):null)}},{})}),P=O.extend({_class:"Gradient",initialize:function(e,t){this._id=bt.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=M))},clone:function(){for(var e=[],t=0,i=this._stops.length;t<i;t++)e[t]=this._stops[t].clone();return new P(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=M;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===M&&(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(){xt._setOwner(this._color,null),this._color=xt._setOwner(xt.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 $,selectedColor:null},t=O.set({},e,{fontFamily:"sans-serif",fontWeight:"normal",fontSize:12,leading:null,justification:"left"}),i=O.set({},t,{fillColor:new xt}),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,m){this._values={},this._owner=v,this._project=v&&v._project||m||Ut.project,this._defaults=!v||v instanceof Nt?t:v instanceof qt?i:e,f&&this.set(f)}};return O.each(t,function(f,v){var m=/Color$/.test(v),x=v==="shadowOffset",S=O.capitalize(v),E=r[v],N="set"+S,z="get"+S;d[N]=function(j){var G,K=this._owner,U=K&&K._children,Z=U&&0<U.length&&!(K instanceof Kt);if(Z)for(var ie=0,oe=U.length;ie<oe;ie++)U[ie]._style[N](j);v!=="selectedColor"&&Z||!(v in this._defaults)||(G=this._values[v])!==j&&(m&&(G&&(xt._setOwner(G,null),G._canvasStyle=null),j&&j.constructor===xt&&(j=xt._setOwner(j,K,Z&&N))),this._values[v]=j,K&&K._changed(E||129))},d[z]=function(j){var G,K=this._owner,U=K&&K._children,Z=U&&0<U.length&&!(K instanceof Kt);if(Z&&!j)for(var ie=0,oe=U.length;ie<oe;ie++){var ce=U[ie]._style[z]();if(ie){if(!O.equals(G,ce))return M}else G=ce}else v in this._defaults&&((G=this._values[v])===M?(G=this._defaults[v])&&G.clone&&(G=G.clone()):!(j=m?xt:x?$:null)||G&&G.constructor===j||(this._values[v]=G=j.read([G],0,{readNull:!0,clone:!0})));return G&&m?xt._setOwner(G,K,Z&&N):G},l[z]=function(j){return this._style[z](j)},l[N]=function(j){this._style[N](j)}}),O.each({Font:"FontFamily",WindingRule:"FillRule"},function(f,v){var m="get"+v;v="set"+v,d[m]=l[m]="#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,m=r._defaults;for(d in f){var x=f[d],S=v[d];if(!(l&&d in v||O.equals(x,S===M?m[d]: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}}),Re=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 m;if((m=(m=d[v])?m+f:i)in t){if(!r)return t[m];t[m]=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 Me(v,t,r.width,r.height)},getViewportBounds:function(t){t=(i=t.ownerDocument).defaultView;var i=i.documentElement;return new Me(0,0,t.innerWidth||i.clientWidth,t.innerHeight||i.clientHeight)},getOffset:function(t,i){return Re.getBounds(t,i).getPoint()},getSize:function(t){return Re.getBounds(t,!0).getSize()},isInvisible:function(t){return Re.getSize(t).equals(new et(0,0))},isInView:function(t){return!Re.isInvisible(t)&&Re.getViewportBounds(t).intersects(Re.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)}}},He={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 $(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 He.getPoint(e).subtract(Re.getOffset(t||He.getTarget(e)))}};He.requestAnimationFrame=new function(){var e,t=Re.getPrefixed(V,"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 Qe,ke,vt,Rt,Q,ye,We,I=O.extend(te,{_class:"View",initialize:function e(t,i){function r(S){return i[S]||parseInt(i.getAttribute(S),10)}function l(){var S=Re.getSize(i);return S.isNaN()||S.isZero()?new et(r("width"),r("height")):S}var d,f,v,m,x;V&&i?(this._id=i.getAttribute("id"),this._id==null&&i.setAttribute("id",this._id="paper-view-"+e._id++),He.add(i,this._viewEvents),Re.setPrefixed(i.style,{userDrag:x="none",userSelect:x,touchCallout:x,contentZooming:x,tapHighlightColor:"rgba(0,0,0,0)"}),_e.hasAttribute(i,"resize")&&He.add(V,(f=this)._windowEvents={resize:function(){f.setViewSize(l())}}),d=l(),_e.hasAttribute(i,"stats")&&typeof Stats<"u"&&(this._stats=new Stats,m=(v=this._stats.domElement).style,x=Re.getOffset(i),m.position="absolute",m.left=x.x+"px",m.top=x.y+"px",W.body.appendChild(v))):(d=new et(i),i=null),this._project=t,this._scope=t._scope,this._element=i,this._pixelRatio||(this._pixelRatio=V&&V.devicePixelRatio||1),this._setElementSize(d.width,d.height),this._viewSize=d,e._views.push(this),((e._viewsById[this._id]=this)._matrix=new _t)._owner=this,e._focused||(e._focused=this),this._frameItems={},this._frameItemCount=0,this._itemEvents={native:{},virtual:{}},this._autoUpdate=!Ut.agent.node,this._needsUpdate=!1},remove:function(){if(!this._project)return!1;I._focused===this&&(I._focused=null),I._views.splice(I._views.indexOf(this),1),delete I._viewsById[this._id];var e=this._project;return e._view===this&&(e._view=null),He.remove(this._element,this._viewEvents),He.remove(V,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,He.requestAnimationFrame(function(){var t;e._requested=!1,e._animate&&(e.requestUpdate(),t=e._element,Re.getPrefixed(W,"hidden")&&_e.getAttribute(t,"keepalive")!=="true"||!Re.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(){Ut=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=M},getElement:function(){return this._element},getPixelRatio:function(){return this._pixelRatio},getResolution:function(){return 72*this._pixelRatio},getViewSize:function(){var e=this._viewSize;return new St(e.width,e.height,this,"setViewSize")},setViewSize:function(){var e=et.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 Me(new $,this._viewSize))),this._bounds},getSize:function(){return this.getBounds().getSize()},isVisible:function(){return Re.isInView(this._element)},isInserted:function(){return Re.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(Re.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:$).read(i);return i=$.read(i,0,{readNull:!0}),this.transform(new _t()[e](r,i||this.getCenter(!0)))}},{_decompose:function(){return this._decomposed||(this._decomposed=this._matrix.decompose())},translate:function(){var e=new _t;return this.transform(e.translate.apply(e,arguments))},getCenter:function(){return this.getBounds().getCenter()},setCenter:function(){var e=$.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 _t().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 Tt(e.x,e.y,this,"setScaling")},setScaling:function(){var e=this.getScaling(),t=$.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($.read(arguments).negate())}}),{projectToView:function(){return this._matrix._transformPoint($.read(arguments))},viewToProject:function(){return this._matrix._inverseTransform($.read(arguments))},getEventPoint:function(e){return this.viewToProject(He.getOffset(e,this._element))}},{statics:{_views:[],_viewsById:{},_id:0,create:function(e,t){return W&&typeof t=="string"&&(t=W.getElementById(t)),new(V?C:I)(e,t)}}},new function(){if(V){var e,t,i,r,l,d=!1,f=!1;(m=V.navigator).pointerEnabled||m.msPointerEnabled?(i="pointerdown MSPointerDown",r="pointermove MSPointerMove",l="pointerup pointercancel MSPointerUp MSPointerCancel"):(i="touchstart",r="touchmove",l="touchend touchcancel","ontouchstart"in V&&m.userAgent.match(/mobile|tablet|ip(ad|hone|od)|android|silk/i)||(i+=" mousedown",r+=" mousemove",l+=" mouseup"));var v={},m={mouseout:function(xe){var le,ge,Ge,Ie=I._focused,Ze=He.getRelatedTarget(xe);!Ie||Ze&&Ze.nodeName!=="HTML"||(ge=(le=He.getOffset(xe,Ie._element)).x,Ze=(Ge=Math.abs)(ge),le.x=Ge(Ge=Ze-(1<<25))<Ze?Ge*(ge<0?-1:1):ge,Se(Ie,xe,Ie.viewToProject(le)))},scroll:Ce};v[i]=function(xe){var le=I._focused=ue(xe);d||(d=!0,le._handleMouseEvent("mousedown",xe))},m[r]=function(xe){var le,ge=I._focused;f||((le=ue(xe))?ge!==le&&(ge&&Se(ge,xe),e=e||ge,ge=I._focused=t=le):t&&t===ge&&(e&&!e.isInserted()&&(e=null),ge=I._focused=e,e=null,Ce())),ge&&Se(ge,xe)},m[i]=function(){f=!0},m[l]=function(xe){var le=I._focused;le&&d&&le._handleMouseEvent("mouseup",xe),f=d=!1},He.add(W,m),He.add(V,{load:Ce});var x,S,E,N,z,j,G,K,U=!1,Z=!1,ie={doubleclick:"click",mousedrag:"mousemove"},oe=!1,ce={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(xe,le,ge){var Ge=this._itemEvents,Ie=Ge.native[xe],Ze=xe==="mousemove",rt=this._scope.tool,ct=this;function ft(A){return Ge.virtual[A]||ct.responds(A)||rt&&rt.responds(A)}Ze&&d&&ft("mousedrag")&&(xe="mousedrag"),ge=ge||this.getEventPoint(le);var F,s=this.getBounds().contains(ge),c=(F=Ie&&s&&ct._project.hitTest(ge,{tolerance:0,fill:!0,stroke:!0}))&&F.item||null,p=!1;if((F={})[xe.substr(5)]=!0,Ie&&c!==N&&(N&&Te(N,null,"mouseleave",le,ge),c&&Te(c,null,"mouseenter",le,ge),N=c),oe^s&&(Te(this,null,s?"mouseenter":"mouseleave",le,ge),p=!0),!s&&!F.drag||ge.equals(S)||(Fe(this,c,Ze?xe:"mousemove",le,ge,S),p=!0),oe=s,F.down&&s||F.up&&x){if(Fe(this,c,xe,le,ge,x),F.down){if(K=c===j&&Date.now()-G<300,E=j=c,!Z&&c){for(var b=c;b&&!b.responds("mousedrag");)b=b._parent;b&&(z=c)}x=ge}else F.up&&(Z||c!==E||(G=Date.now(),Fe(this,c,K?"doubleclick":"click",le,ge,x),K=!1),E=z=null);p=!(oe=!1)}S=ge,p&&rt&&(U=rt._handleMouseEvent(xe,le,ge,F)||U),le.cancelable!==!1&&(U&&!F.move||F.down&&ft("mouseup"))&&le.preventDefault()},_handleKeyEvent:function(xe,le,ge,Ge){var Ie,Ze=this._scope,rt=Ze.tool;function ct(ft){ft.responds(xe)&&(Ut=Ze,ft.emit(xe,Ie=Ie||new L(xe,le,ge,Ge)))}this.isVisible()&&(ct(this),rt&&rt.responds(xe)&&ct(rt))},_countItemEvent:function(xe,le){var ge,Ge=(Ie=this._itemEvents).native,Ie=Ie.virtual;for(ge in ce)Ge[ge]=(Ge[ge]||0)+(ce[ge][xe]||0)*le;Ie[xe]=(Ie[xe]||0)+le},statics:{updateFocus:Ce,_resetState:function(){d=f=U=oe=!1,e=t=x=S=E=N=z=j=G=K=null}}}}function ue(xe){return(xe=He.getTarget(xe)).getAttribute&&I._viewsById[xe.getAttribute("id")]}function Ce(){var xe=I._focused;if(!xe||!xe.isVisible()){for(var le=0,ge=I._views.length;le<ge;le++)if((xe=I._views[le]).isVisible()){I._focused=t=xe;break}}}function Se(xe,le,ge){xe._handleMouseEvent("mousemove",le,ge)}function Te(xe,le,ge,Ge,Ie,Ze,rt){for(var ct,ft=!1;xe&&xe!==rt&&!function F(s,c){if(s.responds(c)){if(ct=ct||new ae(c,Ge,Ie,le||s,Ze?Ie.subtract(Ze):null),s.emit(c,ct)&&(U=!0,ct.prevented&&(Z=!0),ct.stopped))return ft=!0}else if(c=ie[c])return F(s,c)}(xe,ge);)xe=xe._parent;return ft}function Fe(xe,le,ge,Ge,Ie,Ze){return xe._project.removeOn(ge),Z=U=!1,z&&Te(z,null,ge,Ge,Ie,Ze)||le&&le!==z&&!le.isDescendant(z)&&Te(le,null,ge==="mousedrag"?"mousemove":ge,Ge,Ie,Ze,z)||Te(xe,z||le||xe,ge,Ge,Ie,Ze)}}),C=I.extend({_class:"CanvasView",initialize:function(e,t){if(!(t instanceof V.HTMLCanvasElement)){var i=et.read(arguments,1);if(i.isZero())throw new Error("Cannot create CanvasView with the provided argument: "+O.slice(arguments,1));t=Ae.getCanvas(i)}var r=this._context=t.getContext("2d");r.save(),this._pixelRatio=1,/^off|false$/.test(_e.getAttribute(t,"hidpi"))||(i=V.devicePixelRatio||1,r=Re.getPrefixed(r,"backingStorePixelRatio")||1,this._pixelRatio=i/r),I.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,_e.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=Ut.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)}}),B=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 ee.modifiers}}),L=B.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()+" }"}}),ee=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=Ut&&Ut.agent;return x&&x.mac?this.meta:this.control}}});function v(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===M?String.fromCharCode(x.keyCode):S,i[S]||(1<S.length?O.hyphenate(S):S.toLowerCase())}function m(x,S,E,N){var z,j=I._focused;if((l[S]=x)?d[S]=E:delete d[S],1<S.length&&(z=O.camelize(S))in f){f[z]=x;var G=Ut&&Ut.agent;if(z==="meta"&&G&&G.mac)if(x)e={};else{for(var K in e)K in d&&m(!1,K,e[K],N);e=null}}else x&&e&&(e[S]=E);j&&j._handleKeyEvent(x?"keydown":"keyup",N,S,E)}return He.add(W,{keydown:function(x){var S=v(x),E=Ut&&Ut.agent;1<S.length||E&&E.chrome&&(x.altKey||E.mac&&x.metaKey||!E.mac&&x.ctrlKey)?m(!0,S,r[S]||(1<S.length?"":S),x):t=S},keypress:function(x){var S,E;t&&(S=v(x),E=32<=(E=x.charCode)?String.fromCharCode(E):1<S.length?"":S,m(!0,S=S!==t?E.toLowerCase():S,E,x),t=null)},keyup:function(x){var S=v(x);S in d&&m(!1,S,d[S],x)}}),He.add(V,{blur:function(x){for(var S in d)m(!1,S,d[S],x)}}),{modifiers:f,isDown:function(x){return!!l[x]}}},ae=B.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()+" }"}}),ze=B.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()+" }"}}),De=(be.extend({_class:"Tool",_list:"tools",_reference:"tool",_events:["onMouseDown","onMouseUp","onMouseDrag","onMouseMove","onActivate","onDeactivate","onEditOptions","onKeyDown","onKeyUp"],initialize:function(e){be.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){Ut=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,m=!1,x=this;function S(N,z){var j=i,G=l?x._point:x._downPoint||j;if(l){if(0<=x._moveCount&&j.equals(G))return;if(G&&(N!=null||z!=null)){var K=j.subtract(G),U=K.getLength();if(U<(N||0))return;z&&(j=G.add(K.normalize(Math.min(U,z))))}x._moveCount++}return x._point=j,x._lastPoint=G||j,r.down&&(x._moveCount=-1,x._downPoint=j,x._downCount++),1}function E(){d&&(m=x.emit(e,new ze(x,e,t))||m)}if(r.down)S(),E();else if(r.up)S(null,v),E();else if(d)for(;S(f,v);)E();return m}}),O.extend(te,{_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 m=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=m(this._from[d]),v=m(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],m=this._getProperty(v);e?(d=this._resolveValue(m,e[f]),this._setProperty(v,d),d=(d=this._getProperty(v))&&d.clone?d.clone():d,this._setProperty(v,m)):d=m&&m.clone?m.clone():m,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 Ut.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)}})),Ae=O.exports.CanvasProvider={canvases:[],getCanvas:function(e,t,i){if(!V)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))}},qe=new function(){var e,t,i,r,l,d,f,v,m,x,S,E=Math.min,N=Math.max,z=Math.abs;function j(ce,ue,Ce){return .2989*ce+.587*ue+.114*Ce}function G(ce,ue,Ce,Se){var Te,Fe=Se-j(ce,ue,Ce);Se=j(m=ce+Fe,x=ue+Fe,S=Ce+Fe),Ce=E(m,x,S),Fe=N(m,x,S),Ce<0&&(m=Se+(m-Se)*Se/(Te=Se-Ce),x=Se+(x-Se)*Se/Te,S=Se+(S-Se)*Se/Te),255<Fe&&(m=Se+(m-Se)*(Te=255-Se)/(Fe-=Se),x=Se+(x-Se)*Te/Fe,S=Se+(S-Se)*Te/Fe)}function K(ce,ue,Ce){return N(ce,ue,Ce)-E(ce,ue,Ce)}function U(ce,ue,Ce,Se){var Te=[ce,ue,Ce],Fe=N(ce,ue,Ce);Ce=E(ce,ue,Ce),ue=E(Ce=Ce===ce?0:Ce===ue?1:2,Fe=Fe===ce?0:Fe===ue?1:2)===0?N(Ce,Fe)===1?2:1:0,Te[Fe]>Te[Ce]?(Te[ue]=(Te[ue]-Te[Ce])*Se/(Te[Fe]-Te[Ce]),Te[Fe]=Se):Te[ue]=Te[Fe]=0,Te[Ce]=0,m=Te[0],x=Te[1],S=Te[2]}var Z={multiply:function(){m=l*e/255,x=d*t/255,S=f*i/255},screen:function(){m=l+e-l*e/255,x=d+t-d*t/255,S=f+i-f*i/255},overlay:function(){m=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,S=f<128?2*f*i/255:255-2*(255-f)*(255-i)/255},"soft-light":function(){var ce=e*l/255;m=ce+l*(255-(255-l)*(255-e)/255-ce)/255,x=(ce=t*d/255)+d*(255-(255-d)*(255-t)/255-ce)/255,S=(ce=i*f/255)+f*(255-(255-f)*(255-i)/255-ce)/255},"hard-light":function(){m=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,S=i<128?2*i*f/255:255-2*(255-i)*(255-f)/255},"color-dodge":function(){m=l===0?0:e===255?255:E(255,255*l/(255-e)),x=d===0?0:t===255?255:E(255,255*d/(255-t)),S=f===0?0:i===255?255:E(255,255*f/(255-i))},"color-burn":function(){m=l===255?255:e===0?0:N(0,255-255*(255-l)/e),x=d===255?255:t===0?0:N(0,255-255*(255-d)/t),S=f===255?255:i===0?0:N(0,255-255*(255-f)/i)},darken:function(){m=l<e?l:e,x=d<t?d:t,S=f<i?f:i},lighten:function(){m=e<l?l:e,x=t<d?d:t,S=i<f?f:i},difference:function(){(m=l-e)<0&&(m=-m),(x=d-t)<0&&(x=-x),(S=f-i)<0&&(S=-S)},exclusion:function(){m=l+e*(255-l-l)/255,x=d+t*(255-d-d)/255,S=f+i*(255-f-f)/255},hue:function(){U(e,t,i,K(l,d,f)),G(m,x,S,j(l,d,f))},saturation:function(){U(l,d,f,K(e,t,i)),G(m,x,S,j(l,d,f))},luminosity:function(){G(l,d,f,j(e,t,i))},color:function(){G(e,t,i,j(l,d,f))},add:function(){m=E(l+e,255),x=E(d+t,255),S=E(f+i,255)},subtract:function(){m=N(l-e,0),x=N(d-t,0),S=N(f-i,0)},average:function(){m=(l+e)/2,x=(d+t)/2,S=(f+i)/2},negation:function(){m=255-z(255-e-l),x=255-z(255-t-d),S=255-z(255-i-f)}},ie=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(ce){this[ce]=!0},{}),oe=Ae.getContext(1,1,{willReadFrequently:!0});oe&&(O.each(Z,function(ce,ue){var Ce=ue==="darken",Se=!1;oe.save();try{oe.fillStyle=Ce?"#300":"#a00",oe.fillRect(0,0,1,1),oe.globalCompositeOperation=ue,oe.globalCompositeOperation===ue&&(oe.fillStyle=Ce?"#a00":"#300",oe.fillRect(0,0,1,1),Se=oe.getImageData(0,0,1,1).data[0]!==Ce?170:51)}catch{}oe.restore(),ie[ue]=Se}),Ae.release(oe)),this.process=function(ce,ue,Ce,Se,Te){var Fe=ue.canvas,xe=ce==="normal";if(xe||ie[ce])Ce.save(),Ce.setTransform(1,0,0,1,0,0),Ce.globalAlpha=Se,xe||(Ce.globalCompositeOperation=ce),Ce.drawImage(Fe,Te.x,Te.y),Ce.restore();else{var le=Z[ce];if(le){for(var ge=(ce=Ce.getImageData(Te.x,Te.y,Fe.width,Fe.height)).data,Ge=ue.getImageData(0,0,Fe.width,Fe.height).data,Ie=0,Ze=ge.length;Ie<Ze;Ie+=4){e=Ge[Ie],l=ge[Ie],t=Ge[Ie+1],d=ge[Ie+1],i=Ge[Ie+2],f=ge[Ie+2],r=Ge[Ie+3],v=ge[Ie+3],le();var rt=r*Se/255,ct=1-rt;ge[Ie]=rt*m+ct*l,ge[Ie+1]=rt*x+ct*d,ge[Ie+2]=rt*S+ct*f,ge[Ie+3]=r*Se+ct*v}Ce.putImageData(ce,Te.x,Te.y)}}}},it=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 m in f){var x=f[m],S=r[m];typeof x=="number"&&v&&(x=v.number(x)),S?d.setAttributeNS(S,m,x):d.setAttribute(m,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}},Pt=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 ii||e instanceof Wt||e instanceof qt)}],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 Bt(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 $,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("+Qe.point(f)+")"),i&&t.push("rotate("+Qe.number(i)+")"),Xe.isZero(r.x-1)&&Xe.isZero(r.y-1)||t.push("scale("+Qe.point(r)+")"),l.x&&t.push("skewX("+Qe.number(l.x)+")"),l.y&&t.push("skewY("+Qe.number(l.y)+")"),d.transform=t.join(" ")):d.transform="matrix("+e.getValues().join(",")+")"),d}function Ht(e,t){for(var i=Bt(e._matrix),r=e._children,l=it.create("g",i,Qe),d=0,f=r.length;d<f;d++){var v,m=r[d],x=Ot(m,t);x&&(m.isClipMask()?((v=it.create("clipPath")).appendChild(x),pi(m,v,"clip"),it.set(l,{"clip-path":"url(#"+v.id+")"})):l.appendChild(x))}return l}function oi(e){var t,i=e._type,r=e._radius,l=Bt(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)),it.create(i,l,Qe)}function ci(e,t){return ke=ke||{ids:{},svgs:{}},e&&ke.svgs[t+"-"+(e._id||e.__id||(e.__id=bt.get("svg")))]}function pi(e,t,i){ke||ci();var r=ke.ids[i]=(ke.ids[i]||0)+1;t.id=i+"-"+r,ke.svgs[i+"-"+(e._id||e.__id)]=t}function ui(e,t){var i=e,r=null;if(ke){for(var l in i=e.nodeName.toLowerCase()==="svg"&&e,ke.svgs)r||(i||(i=it.create("svg")).appendChild(e),r=i.insertBefore(it.create("defs"),i.firstChild)),r.appendChild(ke.svgs[l]);ke=null}return t.asString?new k.XMLSerializer().serializeToString(i):i}function Ot(e,t,i){var r=vt[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 m={},x=!v&&d.getParent(),S=[];return d._name!=null&&(m.id=d._name),O.each(Pt,function(E){var N=E.get,z=E.type,j=d[N]();(E.exportFilter?!E.exportFilter(d,j):x&&O.equals(x[N](),j))||(z!=="color"||j==null||(N=j.getAlpha())<1&&(m[E.attribute+"-opacity"]=N),z==="style"?S.push(E.attribute+": "+j):m[E.attribute]=j==null?"none":z==="color"?j.gradient?function(G){if(!(ue=ci(G,"color"))){var K,U,Z=G.getGradient(),ie=Z._radial,oe=G.getOrigin(),ce=G.getDestination();ie?(K={cx:oe.x,cy:oe.y,r:oe.getDistance(ce)},(U=G.getHighlight())&&(K.fx=U.x,K.fy=U.y)):K={x1:oe.x,y1:oe.y,x2:ce.x,y2:ce.y},K.gradientUnits="userSpaceOnUse";for(var ue=it.create((ie?"radial":"linear")+"Gradient",K,Qe),Ce=Z._stops,Se=0,Te=Ce.length;Se<Te;Se++){var Fe,xe=(Fe=Ce[Se])._color,le=xe.getAlpha();K={offset:(Fe=Fe._offset)==null?Se/(Te-1):Fe},xe&&(K["stop-color"]=xe.toCSS(!0)),le<1&&(K["stop-opacity"]=le),ue.appendChild(it.create("stop",K,Qe))}pi(G,ue,"color")}return"url(#"+ue.id+")"}(j):j.toCSS(!0):z==="array"?j.join(","):z==="lookup"?E.toSVG[j]:j)}),S.length&&(m.style=S.join(";")),m.opacity===1&&delete m.opacity,d._visible||(m.visibility="hidden"),it.set(f,m,Qe)}(e,l,i)}function fi(e){return Qe=new $e((e=e||{}).precision),e}function Ct(e,t,i,r,l,d){return i=(d=it.get(e,t)||d)==null?r?null:i?"":0:i?d:parseFloat(d),/%\s*$/.test(d)?i/100*(l?1:Rt[/x|^width/.test(t)?"width":"height"]):i}function ai(e,t,i,r,l,d,f){return t=Ct(e,t||"x",!1,r,l,d),i=Ct(e,i||"y",!1,r,l,f),!r||t!=null&&i!=null?new $(t,i):null}function yi(e,t,i,r,l){return t=Ct(e,t||"width",!1,r,l),i=Ct(e,i||"height",!1,r,l),!r||t!=null&&i!=null?new et(t,i):null}function Pi(e,t,i){return e==="none"?null:t==="number"?parseFloat(e):t==="array"?e?e.split(/[\s,]+/g).map(parseFloat):[]:t==="color"?Hi(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 Nt,m=v._project,x=(t=m._currentStyle,[]);if(d||f||(v=Mi(v,e,r),m._currentStyle=v._style.clone()),r)for(var S=e.querySelectorAll("defs"),E=0,N=S.length;E<N;E++)Li(S[E],i,!1);for(E=0,N=l.length;E<N;E++){var z,j=l[E];j.nodeType!==1||/^defs$/i.test(j.nodeName)||!(z=Li(j,i,!1))||z instanceof yt||x.push(z)}return v.addChildren(x),d&&(v=Mi(v.reduce(),e,r)),m._currentStyle=t,(d||f)&&(v.remove(),v=null),v}function Fi(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 $(parseFloat(i[l]),parseFloat(i[l+1])));return e=new Et(r),t==="polygon"&&e.closePath(),e}function Ii(e,t){var i;if(t=t==="radialgradient",E=(Ct(e,"href",!0)||"").substring(1))(i=Q[E].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(Mi(new q,v))}i=new P(l,t)}var m,x,S,E=Ct(e,"gradientUnits",!0)!=="userSpaceOnUse";return t?(x=(m=ai(e,"cx","cy",!1,E,"50%","50%")).add(Ct(e,"r",!1,!1,E,"50%"),0),S=ai(e,"fx","fy",!0,E)):(m=ai(e,"x1","y1",!1,E,"0%","0%"),x=ai(e,"x2","y2",!1,E,"100%","0%")),Mi(new xt(i,m,x,S),e)._scaleToBounds=E,null}function Ri(e,t,i,r){if(e.transform){for(var l=(r.getAttribute(i)||"").split(/\)\s*/g),d=new _t,f=0,v=l.length;f<v&&(x=l[f]);f++){for(var m=x.split(/\(\s*/),x=m[0],S=m[1].split(/[\s,]+/g),E=0,N=S.length;E<N;E++)S[E]=parseFloat(S[E]);switch(x){case"matrix":d.append(new _t(S[0],S[1],S[2],S[3],S[4],S[5]));break;case"rotate":d.rotate(S[0],S[1]||0,S[2]||0);break;case"translate":d.translate(S[0],S[1]||0);break;case"scale":d.scale(S);break;case"skewX":d.skew(S[0],0);break;case"skewY":d.skew(0,S[0])}}e.transform(d)}}function Bi(e,t,i){(i=e[i=i==="fill-opacity"?"getFillColor":"getStrokeColor"]&&e[i]())&&i.setAlpha(parseFloat(t))}function Ni(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:M}function Mi(e,t,i){var r=t.parentNode,l={node:Re.getStyles(t)||{},parent:!i&&!/^defs$/i.test(r.tagName)&&Re.getStyles(r)||{}};return O.each(We,function(d,f){var v=Ni(t,f,l);e=v!==M&&d(e,v,f,t,l)||e}),e}function Hi(e){return(e=(e=(e=e&&e.match(/\((?:["'#]*)([^"')]+)/))&&e[1])&&Q[V?e.replace(V.location.href.split("#")[0]+"#",""):e])&&e._scaleToBounds&&((e=e.clone())._scaleToBounds=!0),e}function Li(e,t,i){var r,l,d,f=(N=e.nodeName.toLowerCase())!=="#document",v=W.body;i&&f&&(Rt=Ut.getView().getSize(),Rt=yi(e,null,null,!0)||Rt,r=it.create("svg",{style:"stroke-width: 1px; stroke-miterlimit: 10"}),l=e.parentNode,d=e.nextSibling,r.appendChild(e),v.appendChild(r));var m=Ut.settings,x=m.applyMatrix,S=m.insertItems;m.applyMatrix=!1,m.insertItems=!1;var E=ye[N],N=E&&E(e,N,t,i)||null;return m.insertItems=S,m.applyMatrix=x,N&&(!f||N instanceof Nt||(N=Mi(N,e,i)),m=t.onImport,f=f&&e.getAttribute("data-paper-data"),m&&(N=m(e,N,t)||N),t.expandShapes&&N instanceof Wt&&(N.remove(),N=N.toPath()),f&&(N._data=JSON.parse(f))),r&&(v.removeChild(r),l&&(d?l.insertBefore(e,d):l.appendChild(e))),i&&(Q={},N&&O.pick(t.applyMatrix,x)&&N.matrix.apply(!0,!0)),N}function Ui(e,t,i){if(!e)return null;t=typeof t=="function"?{onLoad:t}:t||{};var r=Ut,l=null;function d(x){try{var S=typeof x=="object"?x:new k.DOMParser().parseFromString(x.trim(),"image/svg+xml");if(!S.nodeName)throw S=null,new Error("Unsupported SVG source: "+e);Ut=r,l=Li(S,t,!0),t&&t.insert===!1||i._insertItem(M,l);var E=t.onLoad;E&&E(l,x)}catch(N){f(N)}}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 v=new FileReader;return v.onload=function(){d(v.result)},v.onerror=function(){f(v.error)},v.readAsText(e)}d(e)}else{var m=W.getElementById(e);m?d(m):function(x){var S=new k.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,N='Could not load "'+x.url+'" (Status: '+E+")";if(!x.onError)throw new Error(N);x.onError(N,E)},S.send(null)}({url:e,async:!0,onLoad:d,onError:f})}return l}vt={Group:Ht,Layer:Ht,Raster:function(e,t){var i=Bt(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(),it.create("image",i,Qe)},Path:function(e,t){var i=t.matchShapes;if(i){var r=e.toShape(!1);if(r)return oi(r)}var l=e._segments,d=l.length,f=Bt(e._matrix);if(i&&2<=d&&!e.hasHandles())if(2<d){for(var v=e._closed?"polygon":"polyline",m=[],x=0;x<d;x++)m.push(Qe.point(l[x]._point));f.points=m.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 it.create(v,f,Qe)},Shape:oi,CompoundPath:function(e,t){var i=Bt(e._matrix);return(t=e.getPathData(null,t.precision))&&(i.d=t),it.create("path",i,Qe)},SymbolItem:function(e,t){var i=Bt(e._matrix,!0),r=e._definition,l=ci(r,"symbol"),d=r._item;return e=d.getStrokeBounds(),l||((l=it.create("symbol",{viewBox:Qe.rectangle(e)})).appendChild(Ot(d,t)),pi(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",it.create("use",i,Qe)},PointText:function(e){var t=it.create("text",Bt(e._matrix,!0),Qe);return t.textContent=e._content,t}},dt.inject({exportSVG:function(e){return ui(Ot(this,e=fi(e),!0),e)}}),Ft.inject({exportSVG:function(e){e=fi(e);var t=this._children,i=this.getView(),r=O.pick(e.bounds,"view"),l=(l=e.matrix||r==="view"&&i._matrix)&&_t.read([l]);i=r==="view"?new Me([0,0],i.getViewSize()):r==="content"?dt._getBounds(t,l,{stroke:!0}).rect:Me.read([r],0,{readNull:!0}),r={version:"1.1",xmlns:it.svg,"xmlns:xlink":it.xlink},i&&(r.width=i.width,r.height=i.height,(i.x||i.x===0||i.y||i.y===0)&&(r.viewBox=Qe.rectangle(i)));var d=r=it.create("svg",r,Qe);l&&!l.isIdentity()&&(d=r.appendChild(it.create("g",Bt(l),Qe)));for(var f=0,v=t.length;f<v;f++)d.appendChild(Ot(t[f],e,!0));return ui(r,e)}}),Q={},ye={"#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 Li(v,i,r)}},g:xi,svg:xi,clippath:xi,polygon:Fi,polyline:Fi,path:function(e){return ii.create(e.getAttribute("d"))},lineargradient:Ii,radialgradient:Ii,image:function(e){var t=new ri(Ct(e,"href",!0));return t.on("load",function(){var i=yi(e);this.setSize(i),i=ai(e).add(i.divide(2)),this._matrix.append(new _t().translate(i))}),t},symbol:function(e,t,i,r){return new yt(xi(e,t,i,r),!0)},defs:xi,use:function(e){var t=(Ct(e,"href",!0)||"").substring(1);return t=Q[t],e=ai(e),t?t instanceof yt?t.place(e):t.clone().translate(e):null},circle:function(e){return new Wt.Circle(ai(e,"cx","cy"),Ct(e,"r"))},ellipse:function(e){return new Wt.Ellipse({center:ai(e,"cx","cy"),radius:yi(e,"rx","ry")})},rect:function(e){return new Wt.Rectangle(new Me(ai(e),yi(e)),yi(e,"rx","ry"))},line:function(e){return new Et.Line(ai(e,"x1","y1"),ai(e,"x2","y2"))},text:function(e){var t=new Zt(ai(e).add(ai(e,"dx","dy")));return t.setContent(e.textContent.trim()||""),t},switch:xi},We=O.set(O.each(Pt,function(e){this[e.attribute]=function(t,i){t[e.set]&&(t[e.set](Pi(i,e.type,e.fromSVG)),e.type!=="color"||(i=t[e.get]())&&i._scaleToBounds&&(t=t.getBounds(),i.transform(new _t().translate(t.getPoint()).scale(t.getSize()))))}},{}),{id:function(e,t){(Q[t]=e).setName&&e.setName(t)},"clip-path":function(e,t){if(t=Hi(t)){if((t=t.clone()).setClipMask(!0),!(e instanceof Nt))return new Nt(t,e);e.insertChild(0,t)}},gradientTransform:Ri,transform:Ri,"fill-opacity":Bi,"stroke-opacity":Bi,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 Me(Pi(t,"array"));t=yi(r,null,null,!0),e instanceof Nt?(f=t?t.divide(v.getSize()):1,d=new _t().scale(f).translate(v.getPoint().negate()),f=e):e instanceof yt&&(t&&v.setSize(t),f=e._item),f&&(Ni(r,"overflow",l)!=="visible"&&((v=new Wt.Rectangle(v)).setClipMask(!0),f.addChild(v)),d&&f.transform(d))}}),dt.inject({importSVG:function(e,t){return Ui(e,t,this)}}),Ft.inject({importSVG:function(e,t){return this.activate(),Ui(e,t,this)}});var Ut=new(_e.inject(O.exports,{Base:O,Numerical:Xe,Key:ee,DomEvent:He,DomElement:Re,document:W,window:V,Symbol:yt,PlacedSymbol:zt}));return Ut.agent.node&&w(999)(Ut),(T=typeof(_=Ut)=="function"?_.call(a,w,a,y):_)!==void 0&&(y.exports=T),Ut}).call(this,typeof self=="object"?self:null)},72:y=>{var a=[];function w(k){for(var M=-1,V=0;V<a.length;V++)if(a[V].identifier===k){M=V;break}return M}function _(k,M){for(var V={},W=[],O=0;O<k.length;O++){var te=k[O],_e=M.base?te[0]+M.base:te[0],be=V[_e]||0,ht="".concat(_e," ").concat(be);V[_e]=be+1;var $e=w(ht),Xe={css:te[1],media:te[2],sourceMap:te[3],supports:te[4],layer:te[5]};if($e!==-1)a[$e].references++,a[$e].updater(Xe);else{var bt=T(Xe,M);M.byIndex=O,a.splice(O,0,{identifier:ht,updater:bt,references:1})}W.push(ht)}return W}function T(k,M){var V=M.domAPI(M);return V.update(k),function(W){if(W){if(W.css===k.css&&W.media===k.media&&W.sourceMap===k.sourceMap&&W.supports===k.supports&&W.layer===k.layer)return;V.update(k=W)}else V.remove()}}y.exports=function(k,M){var V=_(k=k||[],M=M||{});return function(W){W=W||[];for(var O=0;O<V.length;O++){var te=w(V[O]);a[te].references--}for(var _e=_(W,M),be=0;be<V.length;be++){var ht=w(V[be]);a[ht].references===0&&(a[ht].updater(),a.splice(ht,1))}V=_e}}},659:y=>{var a={};y.exports=function(w,_){var T=function(k){if(a[k]===void 0){var M=document.querySelector(k);if(window.HTMLIFrameElement&&M instanceof window.HTMLIFrameElement)try{M=M.contentDocument.head}catch{M=null}a[k]=M}return a[k]}(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,k,M){var V="";M.supports&&(V+="@supports (".concat(M.supports,") {")),M.media&&(V+="@media ".concat(M.media," {"));var W=M.layer!==void 0;W&&(V+="@layer".concat(M.layer.length>0?" ".concat(M.layer):""," {")),V+=M.css,W&&(V+="}"),M.media&&(V+="}"),M.supports&&(V+="}");var O=M.sourceMap;O&&typeof btoa<"u"&&(V+=`
|
|
1522
|
+
/*# sourceMappingURL=data:application/json;base64,`.concat(btoa(unescape(encodeURIComponent(JSON.stringify(O))))," */")),k.styleTagTransform(V,T,k.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 g={};return(()=>{h.r(g),h.d(g,{AnnotationToolbar:()=>fi,AnnotationToolkit:()=>Se,AnnotationUITool:()=>St,BrushTool:()=>He,DefaultTool:()=>dt,EllipseTool:()=>De,FeatureCollectionUI:()=>Ii,FeatureUI:()=>yi,FileDialog:()=>Ni,LayerUI:()=>Ri,LinestringTool:()=>Pt,OSDPaperjsAnnotation:()=>ft,PaperOffset:()=>Re,PaperOverlay:()=>z,PointTextTool:()=>L,PointTool:()=>I,PolygonTool:()=>qe,RasterTool:()=>ui,RectangleTool:()=>ae,RotationControlOverlay:()=>Te,ScreenshotOverlay:()=>rt,SelectTool:()=>Ht,StyleTool:()=>Vt,ToolBase:()=>Tt,TransformTool:()=>ci,WandTool:()=>ti});let y=h(906),a=h(292);var w=h(72),_=h.n(w),T=h(825),k=h.n(T),M=h(659),V=h.n(M),W=h(56),O=h.n(W),te=h(540),_e=h.n(te),be=h(113),ht=h.n(be),$e=h(676),Xe={};Xe.styleTagTransform=ht(),Xe.setAttributes=O(),Xe.insert=V().bind(null,"head"),Xe.domAPI=k(),Xe.insertStyleElement=_e(),_()($e.A,Xe),$e.A&&$e.A.locals&&$e.A.locals;var bt=h(946),$={};$.styleTagTransform=ht(),$.setAttributes=O(),$.insert=V().bind(null,"head"),$.domAPI=k(),$.insertStyleElement=_e(),_()(bt.A,$),bt.A&&bt.A.locals&&bt.A.locals;class Tt{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 et{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,A=c.y,R=p.x-b,D=p.y-A;if(R!==0||D!==0){var H=((s.x-b)*R+(s.y-A)*D)/(R*R+D*D);H>1?(b=p.x,A=p.y):H>0&&(b+=R*H,A+=D*H)}return(R=s.x-b)*R+(D=s.y-A)*D}simplifyRadialDist(s,c){for(var p,b=s[0],A=[b],R=1,D=s.length;R<D;R++)p=s[R],this.getSqDist(p,b)>c&&(A.push(p),b=p);return b!==p&&A.push(p),A}simplifyDPStep(s,c,p,b,A){for(var R,D=b,H=c+1;H<p;H++){var J=this.getSqSegDist(s[H],s[c],s[p]);J>D&&(R=H,D=J)}D>b&&(R-c>1&&this.simplifyDPStep(s,c,R,b,A),A.push(s[R]),p-R>1&&this.simplifyDPStep(s,R,p,b,A))}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 St extends Tt{constructor(s){super(s),this._active=!1,this._items=[],this._item=null,this.simplifier=new et,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(A=>A!==c),b=Math.max(...p.map(A=>{const R=window.getComputedStyle(A)["z-index"];return R==="auto"?0:parseInt(R)}));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 A=c.clone();let R=[];(A.children||[A]).forEach(H=>{let J=H.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);H.segments=X,(H.segments.length<3||Math.abs(H.area)<b*b)&&R.push(H)}),R.forEach(H=>H.remove());let D=A.unite(A,{insert:!1}).reduce().toCompoundPath();if(A._children?(A.removeChildren(),A.addChildren(D.children)):A.setSegments(D.children[0].segments),!c.isBoundingElement){let H=c.parent.children.filter(J=>J.isBoundingElement);A.applyBounds(H)}D.remove(),c._children?(c.removeChildren(),c.addChildren(A.children)):c.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(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 Me{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 Mt={"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 _t{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(Mt));for(const b of c)s.querySelectorAll(`.${b}`).forEach(A=>{const R=this.makeFaIcon(b);A.classList.remove(b,...p),A.appendChild(R)})}_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[A,R]of Object.entries(Mt))b+=R.replace("<svg",`<symbol id="${A}"`).replace("/svg>","/symbol>");p.innerHTML=b}}function gt(F,s=!0){const c=document.createElement("template");let p;return Mt[F]?(c.innerHTML=Mt[F],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 Ft(F,s,c=["fa","fa-solid"]){s||(s=Object.keys(Mt));for(const p of s)F.querySelectorAll(`.${p}`).forEach(b=>{const A=gt(p);b.classList.remove(p,...c),b.appendChild(A)})}class dt extends St{constructor(s){super(s),this.setToolbarControl(new Nt(this))}onDeactivate(){}onActivate(){this.resetCanvasZIndex()}}class Nt extends Me{constructor(s){super(s);const c=gt("fa-hand");this.button.configure(c,"Image Navigation Tool")}isEnabledForMode(s){return!0}}class Vt extends St{constructor(s){super(s);let c=this,p=this.tool;this._ignoreNextSelectionChange=!1,this._targetItems=[],this.setToolbarControl(new Wt(this)),this.colorpicker=new ri(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),A=b.x,R=b.y,D=c.bounds.width*this.project.getZoom(),H=c.bounds.height*this.project.getZoom(),J=this.project.paperScope.view.pixelRatio;const X=document.createElement("canvas");canvas.setAttribute("width",D*J),canvas.setAttribute("height",H*J),X.getContext("2d").drawImage(this.project.overlay.viewer.drawer.canvas,A*J,R*J,D*J,H*J,0,0,D*J,H*J);let Y=X.toDataURL(),ve=new a.Raster({source:Y,position:c.bounds.center});return ve.scale(1/(J*this.project.getZoom())),p.addChild(ve),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 Wt extends Me{constructor(s){super(s);let c=this;const p=gt("fa-palette");this.button.configure(p,"Style Tool"),this.dropdown.innerHTML=this.uiHTML(),Ft(this.dropdown),this._hierarchy=[],this.dropdown.querySelectorAll('[data-action="pick-color"]').forEach(b=>{b.addEventListener("click",function(){let A=this.getAttribute("data-type"),R=c.dropdown.querySelector(`input[type="color"][data-type="${A}"]`);var D;c.dropdown.querySelectorAll('[data-action="pick-color"]').forEach(H=>H.classList.remove("active")),(D=R).offsetWidth||D.offsetHeight||D.getClientRects().length?c.dropdown.querySelectorAll(".colorpicker-row").forEach(H=>H.classList.add("hidden")):(c.dropdown.querySelectorAll(".colorpicker-row").forEach(H=>H.classList.add("hidden")),R.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");c.tool.applyColor(this.value,A),A=="fill"&&c.setFillButtonColor(new a.Color(this.value)),A=="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 A=this.getAttribute("data-type"),R=this.getAttribute("data-property");c.tool.applyOpacity(this.value,R),A=="fill"&&c.setFillButtonOpacity(this.value),A=="stroke"&&c.setStrokeButtonOpacity(this.value)})),this.dropdown.querySelectorAll('[data-action="from-image"]').forEach(b=>b.addEventListener("click",function(){c.tool.pickColor().then(A=>{this.parentElement.querySelectorAll('input[type="color"]').forEach(R=>{R.value=A.toCSS(!0),R.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");c.fromAverage(A)})),this.dropdown.querySelectorAll(".style-item").forEach(b=>b.addEventListener("click",function(){let A=c.tool.targetItems,R=A.every(H=>H.selected),D=A.filter(H=>H.isGeoJSONFeature);D.length>0&&(c.tool._ignoreNextSelectionChange=!0,D.forEach(H=>R?H.deselect():H.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 R=c.tool.targetItems,D=new Set(R.map(H=>H.hierarchy.filter(J=>J.isGeoJSONFeatureCollection&&J!==H)).flat());D.size==0?R.indexOf(c.tool.defaultTarget)>-1?(c._hierarchy=[c.tool.defaultTarget],c._hierarchy.index=0):(c._hierarchy=[R,c.tool.defaultTarget],c._hierarchy.index=1):D.size==1?(c._hierarchy=[c.tool.targetItems,D.values().next().value,c.tool.defaultTarget],c._hierarchy.index=1):(c._hierarchy=[c.tool.targetItems,c.tool.defaultTarget],c._hierarchy.index=1)}let A=c._hierarchy;c.tool.activateForItem(c._hierarchy[c._hierarchy.index]),c._hierarchy=A}))}fromAverage(s){let c=this,p=this.tool.targetItems.map(b=>zt(b).then(A=>{c.tool.applyColor(A,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,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(D=>D.fillColor);c.length==1||new Set(c.map(D=>D.toCSS())).size==1?this.setFillButtonColor(c[0]):this.setFillButtonColor();let p=s.map(D=>D.strokeColor);p.length==1||new Set(p.map(D=>D.toCSS())).size==1?this.setStrokeButtonColor(p[0]):this.setStrokeButtonColor();let b=s.map(D=>D.fillOpacity);b.length==1||new Set(b).size==1?this.setFillButtonOpacity(b[0]):this.setFillButtonOpacity(1);let A=s.map(D=>D.strokeOpacity);A.length==1||new Set(A).size==1?this.setStrokeButtonOpacity(A[0]):this.setStrokeButtonOpacity(1);let R=s.map(D=>D.rescale?D.rescale.strokeWidth:D.strokeWidth);R.length==1||new Set(R).size==1?this.dropdown.querySelectorAll('input[type="number"]').forEach(D=>D.value=R[0]):this.dropdown.querySelectorAll('input[type="number"]').forEach(D=>D.value="")}setFillButtonColor(s=new a.Color("white")){s||(s=new a.Color("white"));let c=s.toCSS(!0),p=yt(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=yt(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 ni(F,s,c){let p=new a.Group({visible:!1,applyMatrix:!1});function b(){const we=p.view.getFlipped()?p.view.getRotation():180-p.view.getRotation();p.rotate(-we),p.scale(-1,1),p.rotate(we)}this.element=p,c.addChild(p),p.view.on("rotate",we=>p.rotate(-we.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 R=A.getContext("2d",{willReadFrequently:!0}),D=F,H=-(s-1)/2,J=H+s;for(var X=H;X<J;X++)for(var Y=H;Y<J;Y++){let we=new a.Shape.Rectangle({point:[Y*D,X*D],size:[D,D],strokeWidth:.5,strokeColor:"white",fillColor:"white",rescale:{position:[Y*D,X*D],size:[D,D],strokeWidth:.5}});p.addChild(we),Y==0&&X==0&&(p.centerCell=we)}Y=0,X=0;let me=new a.Shape.Rectangle({point:[Y*D,X*D],size:[D,D],strokeWidth:1,strokeColor:"black",fillColor:null,rescale:{position:[Y*D,X*D],size:[D,D],strokeWidth:1}});p.addChild(me),Y=0,X=0;let se=F*(s+2),re=new a.Shape.Rectangle({point:[Y*D,X*D],size:[se,se],strokeWidth:1,strokeColor:"black",fillColor:null,rescale:{position:[Y*D,X*D],size:[se,se],strokeWidth:1}});return p.addChild(re),p.borderElement=re,re.sendToBack(),p.applyRescale=function(){p.children.forEach(we=>we.applyRescale())},p.view.getFlipped()&&b(),this.updatePosition=function(we){p.position=we;let ge=p.project.overlay.paperToCanvasCoordinates(we.x,we.y),ne=Math.round(ge.x)-Math.floor(p.numColumns/2),ue=Math.round(ge.y)-Math.floor(p.numRows/2),de=p.numColumns,Be=p.numRows,Le=p.view.pixelRatio,Se=p.project.overlay.getImageData(ne*Le,ue*Le,de*Le,Be*Le);R.clearRect(0,0,de,Be),window.createImageBitmap(Se).then(Ge=>{R.drawImage(Ge,0,0,p.numColumns,p.numRows);let Ue,We,ze=R.getImageData(0,0,de,Be);for(Ue=0,We=1;Ue<ze.data.length;Ue+=4,We+=1)p.children[We].fillColor.red=ze.data[Ue]/255,p.children[We].fillColor.green=ze.data[Ue+1]/255,p.children[We].fillColor.blue=ze.data[Ue+2]/255;p.borderElement.fillColor=p.centerCell.fillColor,this.selectedColor=p.centerCell.fillColor})},this}async function zt(F){let s=(F.project&&F.project.overlay||F.overlay).getViewportRaster();return new Promise(function(c,p){s.onLoad=function(){const b=F.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."),c(A)}})}function yt(F){return F=F.replace("#",""),(299*parseInt(F.substr(0,2),16)+587*parseInt(F.substr(2,2),16)+114*parseInt(F.substr(4,2),16))/1e3>=140?"black":"white"}class ri{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 A=0;A<b;A++)for(var R=0;R<p;R++){var D=A*p+R;this.data[D]=c[D]?c[D]:this.adjacentIndices(D).some(function(H){return c[H]})?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 A=this.data.length;return[p,p+1,p+2,c-1,c+1,b,b+1,b+2].filter(function(R){return R>=0&&R<A})}}}const Ke=new class{constructor(){this._map=new WeakMap}set(F,s,c){if(this._map.has(F)||this._map.set(F,new Map),typeof s=="object"){const p=s,b=this._map.get(F);for(const[A,R]of Object.entries(p))b.set(A,R)}else this._map.get(F).set(s,c)}get(F,s){if(this._map.has(F))return s===void 0?Object.fromEntries(this._map.get(F)):this._map.get(F).get(s);this._map.set(F,new Map)}remove(F,s){if(this._map.has(F)){var c=this._map.get(F).delete(s);return this._map.get(F).size===0&&this._map.delete(F),c}}};class ei extends Tt{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 ni(10,7,c.project.toolLayer),this.colorPicker.element.applyRescale(),this.MagicWand={floodFill:function(A,R,D,H,J,X){return X?function(Y,me,se,re,we){var ge,ne,ue,de,Be,Le,Se,Ge,Ue,We,ze=Y.data,it=Y.width,st=Y.height,at=Y.bytes,rt=-1,mt=it+1,pt=-1,ot=st+1,Je=se*it+me,wt=new Uint8Array(it*st),Ct=new Uint8Array(we||it*st);if(Ct[Je]===1)return null;var ut=[ze[Je*=at],ze[Je+1],ze[Je+2],ze[Je+3]],Bt=[{y:se,left:me-1,right:me+1,dir:1}];do{for(We=!1,ne=(de=Bt.shift()).left+1;ne<de.right;ne++)if(Je=((Se=de.y*it)+ne)*at,Ct[Se+ne]!==1&&(We=!0,wt[Se+ne]=1,Ct[Se+ne]=1,!((ge=ze[Je]-ut[0])>re||ge<-re||(ge=ze[Je+1]-ut[1])>re||ge<-re||(ge=ze[Je+2]-ut[2])>re||ge<-re||ze[Je+3]===0))){for(Le=ne-1;Le>-1&&(Je=(Ge=Se+Le)*at,Ct[Ge]!==1)&&(wt[Ge]=1,Ct[Ge]=1,Le--,!((ge=ze[Je]-ut[0])>re||ge<-re))&&!((ge=ze[Je+1]-ut[1])>re||ge<-re)&&!((ge=ze[Je+2]-ut[2])>re||ge<-re)&&ze[Je+3]!==0;);for(Be=ne+1;Be<it&&(Je=(Ue=Se+Be)*at,Ct[Ue]!==1)&&(wt[Ue]=1,Ct[Ue]=1,Be++,!((ge=ze[Je]-ut[0])>re||ge<-re))&&!((ge=ze[Je+1]-ut[1])>re||ge<-re)&&!((ge=ze[Je+2]-ut[2])>re||ge<-re)&&ze[Je+3]!==0;);Le<mt&&(mt=Le+1),Be>rt&&(rt=Be-1),(ue=de.y-de.dir)>=0&&ue<st&&(Le<de.left&&Bt.push({y:ue,left:Le,right:de.left,dir:-de.dir}),de.right<Be&&Bt.push({y:ue,left:de.right,right:Be,dir:-de.dir})),(ue=de.y+de.dir)>=0&&ue<st&&Le<Be&&Bt.push({y:ue,left:Le,right:Be,dir:de.dir})}We&&(de.y<ot&&(ot=de.y),de.y>pt&&(pt=de.y))}while(Bt.length>0);return{data:wt,width:Y.width,height:Y.height,bounds:{minX:mt,minY:ot,maxX:rt,maxY:pt},sampleColor:ut}}(A,R,D,H,J):function(Y,me,se,re,we){var ge,ne,ue,de,Be,Le,Se,Ge,Ue,We,ze=Y.data,it=Y.width,st=Y.height,at=Y.bytes,rt=-1,mt=it+1,pt=-1,ot=st+1,Je=se*it+me,wt=new Uint8Array(it*st),Ct=new Uint8Array(we||it*st);if(Ct[Je]===1)return null;var ut=[ze[Je*=at],ze[Je+1],ze[Je+2],ze[Je+3]],Bt=[{y:se,left:me-1,right:me+1,dir:1}];do{for(We=!1,ne=(de=Bt.shift()).left+1;ne<de.right;ne++)if(Je=((Se=de.y*it)+ne)*at,Ct[Se+ne]!==1&&!((ge=ze[Je]-ut[0])>re||ge<-re||(ge=ze[Je+1]-ut[1])>re||ge<-re||(ge=ze[Je+2]-ut[2])>re||ge<-re||ze[Je+3]===0)){for(We=!0,wt[Se+ne]=1,Ct[Se+ne]=1,Le=ne-1;Le>-1&&(Je=(Ge=Se+Le)*at,Ct[Ge]!==1)&&!((ge=ze[Je]-ut[0])>re||ge<-re)&&!((ge=ze[Je+1]-ut[1])>re||ge<-re)&&!((ge=ze[Je+2]-ut[2])>re||ge<-re)&&ze[Je+3]!==0;)wt[Ge]=1,Ct[Ge]=1,Le--;for(Be=ne+1;Be<it&&(Je=(Ue=Se+Be)*at,Ct[Ue]!==1)&&!((ge=ze[Je]-ut[0])>re||ge<-re)&&!((ge=ze[Je+1]-ut[1])>re||ge<-re)&&!((ge=ze[Je+2]-ut[2])>re||ge<-re)&&ze[Je+3]!==0;)wt[Ue]=1,Ct[Ue]=1,Be++;Le<mt&&(mt=Le+1),Be>rt&&(rt=Be-1),(ue=de.y-de.dir)>=0&&ue<st&&(Le<de.left&&Bt.push({y:ue,left:Le,right:de.left,dir:-de.dir}),de.right<Be&&Bt.push({y:ue,left:de.right,right:Be,dir:-de.dir})),(ue=de.y+de.dir)>=0&&ue<st&&Le<Be&&Bt.push({y:ue,left:Le,right:Be,dir:de.dir})}We&&(de.y<ot&&(ot=de.y),de.y>pt&&(pt=de.y))}while(Bt.length>0);return{data:wt,width:Y.width,height:Y.height,bounds:{minX:mt,minY:ot,maxX:rt,maxY:pt},sampleColor:ut}}(A,R,D,H,J)},thresholdMask:function(A,R,D,H,J={}){let X,Y,me=A.data,se=A.width,re=A.height,we=A.bytes,ge=D*se+R,ne=new Uint8Array(J.append?J.append:se*re),ue=new Uint8Array(J.ignore?J.ignore:se*re);if(ue[ge]===1)return null;ge*=we;var de=[me[ge],me[ge+1],me[ge+2],me[ge+3]];for(ge=0,Y=0;ge<me.length;ge+=4,Y+=1)ue[Y]||ne[Y]||me[ge+3]!==0&&(X=me[ge]-de[0],X>H||X<-H||(X=me[ge+1]-de[1],X>H||X<-H||(X=me[ge+2]-de[2],X>H||X<-H||(ne[Y]=1))));return{data:ne,width:A.width,height:A.height,bounds:{minX:0,minY:0,maxX:se,maxY:re},sampleColor:de}},gaussBlur:function(A,R){var D,H,J,X,Y,me,se,re=2*R+1,we=R*R,ge=new Float32Array(re),ne=0,ue=A.width,de=A.height,Be=A.data,Le=A.bounds.minX,Se=A.bounds.maxX,Ge=A.bounds.minY,Ue=A.bounds.maxY;for(D=0;D<R;D++){var We=(R-D)*(R-D),ze=Math.exp(-We/(2*we))/(2*Math.PI*we);ge[R+D]=ge[R-D]=ze,ne+=2*ze}for(D=0;D<re;D++)ge[D]/=ne;var it=new Uint8Array(ue*de),st=R+ue,at=R+de;for(Y=Ge;Y<Ue+1;Y++)for(X=Le;X<Se+1;X++){for(me=0,se=st-X<re?st-X:re,J=(H=Y*ue+X)-R,D=R-X>0?R-X:0;D<se;D++)me+=Be[J+D]*ge[D];for(se=at-Y<re?at-Y:re,J=H-R*ue,D=R-Y>0?R-Y:0;D<se;D++)me+=Be[J+D*ue]*ge[D];it[H]=me>.5?1:0}return{data:it,width:ue,height:de,bounds:{minX:Le,minY:Ge,maxX:Se,maxY:Ue}}},gaussBlurOnlyBorder:function(A,R,D){var H,J,X,Y,me,se,re,we,ge,ne,ue=function(Je,wt,Ct){var ut,Bt,Yt,Lt,Pt,Kt,Jt,Xt=Je.width,ii=Je.height,Qt=Je.data,Gt=new Uint8Array(Qt),wi=Je.bounds.minX,mi=Je.bounds.maxX,bi=Je.bounds.minY,Ht=Je.bounds.maxY,gi=Xt*ii,li=new Uint8Array(gi),ui=[],Ci=Math.max(wi,1),Ai=Math.min(mi,Xt-2),Ti=Math.max(bi,1),Ei=Math.min(Ht,ii-2);if(Ct&&Ct.length>0)for(Pt=0;Pt<gi;Pt++)Ct[Pt]===1&&(Gt[Pt]=1);for(Lt=Ti;Lt<Ei+1;Lt++)for(ut=Ci;ut<Ai+1;ut++)Qt[Pt=Lt*Xt+ut]!==0&&(Kt=Pt+Xt,Jt=Pt-Xt,Gt[Pt+1]!==0&&Gt[Pt-1]!==0&&Gt[Kt]!==0&&Gt[Kt+1]!==0&&Gt[Kt-1]!==0&&Gt[Jt]!==0&&Gt[Jt+1]!==0&&Gt[Jt-1]!==0||ui.push(Pt));if(wi==0)for(Lt=bi;Lt<Ht+1;Lt++)Qt[Lt*Xt]===1&&ui.push(Lt*Xt);if(mi==Xt-1)for(Lt=bi;Lt<Ht+1;Lt++)Qt[Lt*Xt+mi]===1&&ui.push(Lt*Xt+mi);if(bi==0)for(ut=wi;ut<mi+1;ut++)Qt[ut]===1&&ui.push(ut);if(Ht==ii-1)for(ut=wi;ut<mi+1;ut++)Qt[Ht*Xt+ut]===1&&ui.push(Ht*Xt+ut);var vi,_i=[],Di=wt+Xt,Si=wt+ii,zi=2*wt+1;for(gi=ui.length,Yt=0;Yt<gi;Yt++){for(li[Pt=ui[Yt]]=1,_i.push(Pt),Lt=(Pt-(ut=Pt%Xt))/Xt,vi=Di-ut<zi?Di-ut:zi,Kt=Pt-wt,Bt=wt-ut>0?wt-ut:0;Bt<vi;Bt++)li[Jt=Kt+Bt]===0&&(li[Jt]=1,_i.push(Jt));for(vi=Si-Lt<zi?Si-Lt:zi,Kt=Pt-wt*Xt,Bt=wt-Lt>0?wt-Lt:0;Bt<vi;Bt++)li[Jt=Kt+Bt*Xt]===0&&(li[Jt]=1,_i.push(Jt))}return _i}(A,R,D),de=2*R+1,Be=2*R*R,Le=new Float32Array(de),Se=0,Ge=A.width,Ue=A.height,We=A.data,ze=A.bounds.minX,it=A.bounds.maxX,st=A.bounds.minY,at=A.bounds.maxY,rt=ue.length;for(X=0;X<R;X++)J=(R-X)*(R-X),H=Math.exp(-J/Be)/Math.PI,Le[R+X]=Le[R-X]=H,Se+=2*H;for(X=0;X<de;X++)Le[X]/=Se;var mt=new Uint8Array(We),pt=R+Ge,ot=R+Ue;for(X=0;X<rt;X++){for(ge=0,we=((me=ue[X])-(re=me%Ge))/Ge,ne=pt-re<de?pt-re:de,se=me-R,Y=R-re>0?R-re:0;Y<ne;Y++)ge+=We[se+Y]*Le[Y];if(ge>.5)mt[me]=1,re<ze&&(ze=re),re>it&&(it=re),we<st&&(st=we),we>at&&(at=we);else{for(ne=ot-we<de?ot-we:de,se=me-R*Ge,Y=R-we>0?R-we:0;Y<ne;Y++)ge+=We[se+Y*Ge]*Le[Y];ge>.5?(mt[me]=1,re<ze&&(ze=re),re>it&&(it=re),we<st&&(st=we),we>at&&(at=we)):mt[me]=0}}return{data:mt,width:Ge,height:Ue,bounds:{minX:ze,minY:st,maxX:it,maxY:at}}},createBorderMask:function(A){var R,D,H,J,X,Y=A.width,me=A.height,se=A.data,re=A.bounds.minX,we=A.bounds.maxX,ge=A.bounds.minY,ne=A.bounds.maxY,ue=we-re+1,de=ne-ge+1,Be=new Uint8Array(ue*de),Le=Math.max(re,1),Se=Math.min(we,Y-2),Ge=Math.max(ge,1),Ue=Math.min(ne,me-2);for(D=Ge;D<Ue+1;D++)for(R=Le;R<Se+1;R++)se[H=D*Y+R]!==0&&(J=H+Y,X=H-Y,se[H+1]!==0&&se[H-1]!==0&&se[J]!==0&&se[J+1]!==0&&se[J-1]!==0&&se[X]!==0&&se[X+1]!==0&&se[X-1]!==0||(Be[(D-ge)*ue+(R-re)]=1));if(re==0)for(D=ge;D<ne+1;D++)se[D*Y]===1&&(Be[(D-ge)*ue]=1);if(we==Y-1)for(D=ge;D<ne+1;D++)se[D*Y+we]===1&&(Be[(D-ge)*ue+(we-re)]=1);if(ge==0)for(R=re;R<we+1;R++)se[R]===1&&(Be[R-re]=1);if(ne==me-1)for(R=re;R<we+1;R++)se[ne*Y+R]===1&&(Be[(ne-ge)*ue+(R-re)]=1);return{data:Be,width:ue,height:de,offset:{x:re,y:ge}}},getBorderIndices:function(A){var R,D,H,J,X,Y=A.width,me=A.height,se=A.data,re=[],we=Y-1,ge=me-1;for(D=1;D<ge;D++)for(R=1;R<we;R++)se[H=D*Y+R]!==0&&(J=H+Y,X=H-Y,se[H+1]!==0&&se[H-1]!==0&&se[J]!==0&&se[J+1]!==0&&se[J-1]!==0&&se[X]!==0&&se[X+1]!==0&&se[X-1]!==0||re.push(H));for(D=0;D<me;D++)se[D*Y]===1&&re.push(D*Y);for(R=0;R<Y;R++)se[R]===1&&re.push(R);for(H=Y-1,D=0;D<me;D++)se[D*Y+H]===1&&re.push(D*Y+H);for(H=(me-1)*Y,R=0;R<Y;R++)se[H+R]===1&&re.push(H+R);return re},traceContours:function(A){var R,D,H,J,X,Y,me,se,re,we,ge,ne,ue,de,Be,Le=function(pt){var ot,Je,wt=pt.width,Ct=pt.data,ut=pt.bounds.minX,Bt=pt.bounds.maxX,Yt=pt.bounds.minY,Lt=pt.bounds.maxY,Pt=Bt-ut+3,Kt=Lt-Yt+3,Jt=new Uint8Array(Pt*Kt);for(Je=Yt;Je<Lt+1;Je++)for(ot=ut;ot<Bt+1;ot++)Ct[Je*wt+ot]===1&&(Jt[(Je-Yt+1)*Pt+(ot-ut+1)]=1);return{data:Jt,width:Pt,height:Kt,offset:{x:ut-1,y:Yt-1}}}(A),Se=[],Ge=0,Ue=Le.width,We=2*Ue,ze=Le.height,it=Le.data,st=Le.offset.x,at=Le.offset.y,rt=new Uint8Array(it),mt=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]];for(J=1;J<ze-1;J++)for(H=1;H<Ue-1;H++)if(it[X=J*Ue+H]===1){for(R=-Ue;R<We;R+=We)if(it[X+R]===0&&rt[X+R]===0){for(Ge++,me=[],re=(se=R===Ue)?2:6,ne=ue=we={x:H,y:J},ge=null;;){for(rt[ne.y*Ue+ne.x]=Ge,D=0;D<8;D++){if(Be=mt[re=(re+1)%8],it[Y=(de={x:ne.x+Be[0],y:ne.y+Be[1]}).y*Ue+de.x]===1){rt[Y]=Ge;break}rt[Y]=-1,de=null}if(de===null)break;if(ne=de,ge){if(ue.x===we.x&&ue.y===we.y&&ne.x===ge.x&&ne.y===ge.y)break}else ge=de;me.push({x:ue.x+st,y:ue.y+at}),ue=ne,re=(re+4)%8}de!=null&&(me.push({x:we.x+st,y:we.y+at}),Se.push({inner:se,label:Ge,points:me}))}}return Se},simplifyContours:function(A,R,D){var H,J,X,Y,me,se,re,we,ge,ne,ue,de,Be,Le,Se,Ge,Ue,We,ze,it,st,at=A.length,rt=[];for(J=0;J<at;J++)if(me=(Y=A[J]).points,(se=Y.points.length)<D){for(re=[],X=0;X<se;X++)re.push({x:me[X].x,y:me[X].y});rt.push({inner:Y.inner,label:Y.label,points:re,initialCount:se})}else{we=[0,se-1],ge=[{first:0,last:se-1}];do if(!((ne=ge.shift()).last<=ne.first+1)){for(ue=-1,de=ne.first,H=ne.first+1;H<ne.last;H++)ze=me[H],it=me[ne.first],st=me[ne.last],Ue=ze.x-it.x,We=ze.y-it.y,Le=Math.sqrt(Ue*Ue+We*We),Ue=ze.x-st.x,We=ze.y-st.y,Se=Math.sqrt(Ue*Ue+We*We),Ue=it.x-st.x,We=it.y-st.y,Ge=Math.sqrt(Ue*Ue+We*We),(Be=Le>=Math.sqrt(Se*Se+Ge*Ge)?Se:Se>=Math.sqrt(Le*Le+Ge*Ge)?Le:Math.abs((We*ze.x-Ue*ze.y+it.x*st.y-st.x*it.y)/Ge))>ue&&(de=H,ue=Be);ue>R&&(we.push(de),ge.push({first:ne.first,last:de}),ge.push({first:de,last:ne.last}))}while(ge.length>0);for(re=[],se=we.length,we.sort(function(mt,pt){return mt-pt}),X=0;X<se;X++)re.push({x:me[we[X]].x,y:me[we[X]].y});rt.push({inner:Y.inner,label:Y.label,points:re,initialCount:Y.points.length})}return rt}},this.setToolbarControl(new Ye(this)),this.toolbarControl.setThreshold(this.threshold);let b=function(){c.getImageData()};this.onSelectionChanged=b,this.extensions.onActivate=function(){let A=c.item||c.itemToCreate;c.itemLayer=A?A.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(A){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(),A&&c.finish(),c.project.toolLayer.sendToBack()},p.extensions.onKeyUp=function(A){A.key=="a"&&c.applyChanges(),A.key=="e"&&c.toolbarControl.cycleReduceMode(),A.key=="r"&&c.toolbarControl.cycleReplaceMode(),A.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=Dt(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=Dt(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:A=>A.isBoundingElement}):[];p.length>0&&(c.children=p.map(A=>A.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,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 R=this.itemLayer?this.itemLayer.getItems({match:X=>X.isBoundingElement}):[];if(A.fillColor=R.length==0?s.colors.pixelAllowed:s.colors.pixelNotAllowed,R.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 D=s.project.paperScope.project.getItems({match:X=>X.isGeoJSONFeatureCollection}),H=D.map(X=>X.visible);D.forEach(X=>X.visible=!1),s.project.toolLayer.addChild(p),s.tool.view.update();let J=s.tool.view.getImageData();p.remove(),D.forEach((X,Y)=>X.visible=H[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()?zt(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 A=this.imageData.binaryMask,R=this.imageData.wandMask,D=this.imageData.dragStartMask,H=this.imageData.colorMask.data,J=c.data;if(this.replaceMode&&!this.reduceMode)for(let X=0,Y=0;X<H.length;X+=this.imageData.bytes,Y+=1)A[Y]=H[X+1]>0||H[X]==0&&J[Y],R[Y]=J[Y];else if(this.replaceMode&&this.reduceMode)for(let X=0,Y=0;X<H.length;X+=this.imageData.bytes,Y+=1)A[Y]=H[X+1]>0&&!(H[X]==0&&J[Y]),R[Y]=J[Y];else if(this.replaceMode||this.reduceMode){if(!this.replaceMode&&this.reduceMode)for(let X=0,Y=0;X<H.length;X+=this.imageData.bytes,Y+=1)A[Y]=D[Y]&&!(H[X]==0&&J[Y]),R[Y]=R[Y]||J[Y]}else for(let X=0,Y=0;X<H.length;X+=this.imageData.bytes,Y+=1)A[Y]=D[Y]||H[X]==0&&J[Y],R[Y]=R[Y]||J[Y];this.rasterPreview(this.imageData.binaryMask,this.imageData.sampleColor||c.sampleColor)}rasterPreview(s,c){let p,b=this,A={0:this.colors.nullColor,1:this.colors.defaultColor};c&&(A[1]=new a.Color(c[0],c[1],c[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 R=this.preview.createImageData(this.preview.size);for(var D=0,H=0;D<R.data.length;D+=4,H+=1)p=A[s[H]],R.data[D]=p.red,R.data[D+1]=p.blue,R.data[D+2]=p.green,R.data[D+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(R,new a.Point(0,0)),J()}}class Ye extends De{constructor(s){super(s);let c=gt("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 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 R=document.createElement("div");R.classList.add("toggles"),p.appendChild(R);let D=this.cycleReplaceModeButton=document.createElement("span");D.classList.add("option-toggle"),R.appendChild(D),Ke.set(D,{prefix:"On click:",actions:[{replace:"Start new mask"},{append:"Add to current"}],onclick:function(me){s.setReplaceMode(me=="replace")}});let H=this.cycleFloodModeButton=document.createElement("span");H.classList.add("option-toggle"),R.appendChild(H),Ke.set(H,{prefix:"Fill rule:",actions:[{flood:"Contiguous"},{everywhere:"Anywhere"}],onclick:function(me){s.setFloodMode(me=="flood")}});let J=this.cycleReduceModeButton=document.createElement("span");J.classList.add("option-toggle"),R.appendChild(J),Ke.set(J,{prefix:"Use to:",actions:[{expand:"Expand selection"},{reduce:"Reduce selection"}],onclick:function(me){s.setReduceMode(me=="reduce")}}),[D,H,J].forEach(me=>{let se=Ke.get(me),re=document.createElement("span");re.classList.add("label","prefix"),re.innerHTML=se.prefix,me.appendChild(re),se.actions.forEach((we,ge)=>{let ne=Object.values(we)[0],ue=Object.keys(we)[0],de=document.createElement("span");de.classList.add("option"),de.innerHTML=ne,me.appendChild(de),Ke.set(de,{key:ue,index:ge}),we.htmlElement=de,we.key=ue,ge==0&&de.classList.add("selected")}),me.addEventListener("click",function(){var Le;let we=Ke.get(this),ge=we.actions,ne=this.querySelector(".option.selected"),ue=(Le=Ke.get(ne))==null?void 0:Le.index,de=ue===void 0?0:(ue+1)%ge.length;this.querySelectorAll(".option").forEach(Se=>Se.classList.remove("selected"));let Be=ge[de];Be.htmlElement.classList.add("selected"),we.onclick(Be.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 Dt(F,s,c){let p=new a.CompoundPath({children:[],fillRule:"evenodd",insert:!1});if(s){s=new ri(s).addBorder(),s.bounds={minX:0,minY:0,maxX:s.width,maxY:s.height};let A=F.traceContours(s);p.children=A.map(function(R){let D=R.points.map(J=>new a.Point(J)),H=new a.Path(D,{insert:!1});return H.closed=!0,H}).filter(function(R){if(Math.abs(R.area)>=50)return!0;R.remove()})}return p}function oi(F,s,c,p){var b=F.curve===s,A=s.getNormalAtTime(b?0:1).multiply(p),R=F.point.add(A),D=new a.Segment(R),H=b?"handleOut":"handleIn";return D[H]=F[H].add(c.subtract(A).divide(2)),D}function St(F,s){var c=new a.Curve(F.segment1.handleOut.add(F.segment1.point),new a.Point(0,0),new a.Point(0,0),F.segment2.handleIn.add(F.segment2.point)).getNormalAtTime(.5).multiply(s),p=oi(F.segment1,F,c,s),b=oi(F.segment2,F,c,s),A=new a.Curve(p,b);if(A.getIntersections(A).length===0){var R=Math.min(Math.abs(s)/10,1),D=A.getPointAtTime(.5).getDistance(F.getPointAtTime(.5));if(Math.abs(D-Math.abs(s))>R){var H=F.divideAtTime(.5);if(H!=null)return St(F,s).concat(St(H,s))}}return[p,b]}function qt(F,s){return F.x*s.y-F.y*s.x}function di(F,s,c,p,b,A){var R,D,H,J,X,Y,me,se,re,we,ge,ne,ue,de,Be=new a.Curve(F[0],F[1]),Le=new a.Curve(s[0],s[1]),Se=Be.getIntersections(Le),Ge=F[1].point.getDistance(s[0].point);if(c.isSmooth())s[0].handleOut=s[0].handleOut.project(c.handleOut),s[0].handleIn=F[1].handleIn.project(c.handleIn),s[0].point=F[1].point.add(s[0].point).divide(2),F.pop();else if(Se.length===0)if(Ge>.1*Math.abs(b))switch(p){case"miter":var Ue=(me=Be.point2,se=Be.point2.add(Be.getTangentAtTime(1)),re=Le.point1,we=Le.point1.add(Le.getTangentAtTime(0)),ge=me.subtract(se),ne=re.subtract(we),ue=qt(me,se),de=qt(re,we),new a.Point(ue*ne.x-ge.x*de,ue*ne.y-ge.y*de).divide(qt(ge,ne)));Math.max(Ue.getDistance(Be.point2),Ue.getDistance(Le.point1))<Math.abs(b)*A&&F.push(new a.Segment(Ue));break;case"round":var We=(R=F[1],D=s[0],H=c.point,J=b,X=R.point.subtract(H).add(D.point.subtract(H)).normalize(Math.abs(J)).add(H),Y=new a.Path.Arc({from:R.point,to:D.point,through:X,insert:!1}),R.handleOut=Y.firstSegment.handleOut,D.handleIn=Y.lastSegment.handleIn,Y.segments.length===3?Y.segments[1]:null);We&&F.push(We)}else s[0].handleIn=F[1].handleIn,F.pop();else{var ze=Be.divideAt(Se[0]);if(ze){Ue=ze.segment1;var it=Le.divideAt(Le.getIntersections(Be)[0]);Ue.handleOut=it?it.segment1.handleOut:s[0].handleOut,F.pop(),s[0]=Ue}else s[0].handleIn=F[1].handleIn,F.pop()}}function $t(F){return F.children.length===1&&(F=F.children[0]).remove(),F}function ti(F,s){if(s===void 0&&(s=.01),F.closed){var c=Math.abs(F.area*s);if(F.clockwise||F.reverse(),(F=F.unite(F,{insert:!1}))instanceof a.CompoundPath&&(F.children.filter(function(p){return Math.abs(p.area)<c}).forEach(function(p){return p.remove()}),F.children.length===1))return $t(F)}return F}function jt(F,s){var c=(F.segments[0].location.offset+F.segments[Math.max(1,Math.floor(F.segments.length/2))].location.offset)/3;return s.getNearestLocation(F.getPointAt(c)).offset<s.getNearestLocation(F.getPointAt(2*c)).offset}function It(F,s,c,p){var b,A;b=function(Y,me){var se=Y.clone({insert:!1});return se.reduce({}),Y.clockwise||(se.reverse(),me=-me),[se,me]}(F,s),A=b[0],s=b[1];for(var R=A.curves.slice().map(function(Y){return St(Y,s)}).flat(),D=[],H=0;H<R.length;H+=2)D.push(R.slice(H,H+2));var J=function(Y,me,se,re,we){var ge=se.segments;if(Y.length==0)return se.segments;for(var ne=Y[0].slice(),ue=0;ue<Y.length-1;++ue)di(Y[ue],Y[ue+1],ge[ue+1],me,re,we);return se.closed&&(di(Y[Y.length-1],ne,ge[0],me,re,we),Y[0][0]=ne[0]),Y}(D,c,A,s,p).flat(),X=function(Y){if(Y.closed){var me=Y.unite(Y,{insert:!1});if(me instanceof a.CompoundPath)return me.children.filter(function(se){return!(se.segments.length>1&&jt(se,Y))}).forEach(function(se){return se.remove()}),$t(me)}return Y}(new a.Path({segments:J,insert:!1,closed:F.closed}));return X.reduce({}),A.closed&&(A.clockwise&&s<0||!A.clockwise&&s>0)&&function(Y,me){var se=function(re){return re instanceof a.CompoundPath?re.children.map(function(we){return we.segments}).flat():re.segments}(Y).slice();se.forEach(function(re){me.contains(re.point)||re.remove()})}(X,F),A.clockwise!==F.clockwise&&X.reverse(),ti(X)}function I(F,s,c){var p=F.point.add(s.point).divide(2),b=s.point.subtract(F.point).rotate(-90,new a.Point(0,0)).normalize(c),A=p.add(b);return new a.Path.Arc({from:F.point,to:s.point,through:A,insert:!1}).segments}function q(F,s,c,p,b){var A=It(F,s=F.clockwise?s:-s,c,b),R=It(F,-s,c,b);if(F.closed)return A.subtract(R,{insert:!1});var D=R,H=new Array;R instanceof a.CompoundPath&&((H=R.children.filter(function(se){return se.closed})).forEach(function(se){return se.remove()}),D=R.children[0]),D.reverse();var J=function(se,re,we,ge){if(se instanceof a.CompoundPath){var ne=se.children.map(function(Ge){return{c:Ge,a:Math.abs(Ge.area)}});se=(ne=ne.sort(function(Ge,Ue){return Ue.a-Ge.a}))[0].c}var ue=se.segments.slice(),de=re.segments.slice();if(ge==="round"){var Be=I(de[de.length-1],ue[0],we),Le=I(ue[ue.length-1],de[0],we),Se=new a.Path({segments:Be.concat(ue,Le,de),closed:!0,insert:!1});return Se.reduce({}),Se}return new a.Path({segments:ue.concat(de),closed:!0,insert:!1})}(A,D,s,p);if(H.length>0)for(var X=0,Y=H;X<Y.length;X++){var me=Y[X];J=J.subtract(me,{insert:!1})}return J}function pe(F){return F.closed?F.unite(F,{insert:!1}):F}a===void 0&&console.error("paper-offset.mjs requires paper.js to have been loaded");var Ie=function(){function F(){}return F.offset=function(s,c,p){var b=function(A,R,D,H){var J=pe(A),X=J;if(J instanceof a.Path)X=It(J,R,D,H);else{var Y=J.children.map(function(me){if(me.segments.length>1){jt(me,A)||me.reverse();var se=It(me,R,D,H);return(se=ti(se)).clockwise!==me.clockwise&&se.reverse(),se instanceof a.CompoundPath?(se.applyMatrix=!0,se.children):se}return null}).flat().filter(function(me){return!!me});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},F.offsetStroke=function(s,c,p){var b=function(A,R,D,H,J){var X=pe(A),Y=X;return(Y=X instanceof a.Path?q(X,R,D,H,J):X.children.flatMap(function(me){return q(me,R,D,H,J)}).reduce(function(me,se){return me.unite(se,{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},F}();class je extends Tt{constructor(s){super(s);let c=this;this.setToolbarControl(new et(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=Ie.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=Ie.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 A=this.item.parent.children.filter(R=>R.isBoundingElement);s.applyBounds(A)}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 A=b.children.filter(R=>R.area>0||Math.abs(R.area)>10);this.item.removeChildren(),this.item.addChildren(A),b.remove()}s.remove()}}class et extends De{constructor(s){super(s);const c=gt("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 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 ke{constructor(s){var c;if(vt.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,A=c._props;Te.registerFeature(p),p.onTransform=b.onTransform,c.setStyle(A),p.fillOpacity=p.fillColor?p.fillColor.alpha:1,p.displayName=A.label||c.getLabel(),p.annotationItem=c,p.replaceWith=ye,"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 vt=["Point","LineString","Polygon","MultiPoint","MultiLineString","MultiPolygon","GeometryCollection",null],Rt=[];class Q{constructor(){}static register(s){if(s.supportsGeoJSONType===ke.supportsGeoJSONType)throw console.error("Static accessor supportsGeoJSONType must be implemented"),"Static accessor supportsGeoJSONType must be implemented";Rt.includes(s)||Rt.push(s)}static getConstructor(s){var b,A,R;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=(R=(A=s.geometry)==null?void 0:A.properties)==null?void 0:R.subtype;return Rt.filter(D=>D.supportsGeoJSONType(c,p)).slice(-1)[0]}static itemFromGeoJSON(s){var p;vt.includes(s.type)&&(s={type:"Feature",geometry:s,properties:{}});let c=Q.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 Q.itemFromGeoJSON(c)}}function ye(F){F.isGeoJSONFeature||console.warn("An item with isGeoJSONFeature==false was used to replace an item."),F._callbacks=this._callbacks;let s=y.extend(!0,this.rescale,F.rescale);return F.style=this.style,F.rescale=s,this.emit("item-replaced",{item:F}),F.project.emit("item-replaced",{item:F}),a.Item.prototype.replaceWith.call(this,F),F.selected=this.selected,F.updateFillOpacity(),F.applyRescale(),F.project.view.update(),F}class qe extends ke{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 A=new a.Path.Line(new a.Point(0,0),new a.Point(0,-6));p.addChild(A);let R=new a.Path.Circle(new a.Point(0,-9),3);p.addChild(R),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(D){p.scale(1/(p.scaleFactor*D)),p.scaleFactor=1/D},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),A=b.rotate(-c).multiply(p.scaling).rotate(c).subtract(b);this.translate(A);break}}}}class T extends Tt{constructor(s){super(s);let c=new qe({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 x(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 x extends De{constructor(s){super(s);const c=gt("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 M extends ke{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 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 R(){const H=p.view.getFlipped()?p.view.getRotation():180-p.view.getRotation();p.rotate(-H),p.scale(-1,1),p.rotate(H)}p.addChild(A),this.refreshTextOffset(),A.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(H){p.scale(1/(p.scaleFactor*H)),p.scaleFactor=1/H,A.strokeWidth=0},p.view.getFlipped()&&R();const D=p.view.getFlipped()?180-p.view.getRotation():-p.view.getRotation();p.rotate(D),p.view.on("rotate",H=>{const J=-H.rotatedBy;p.rotate(J)}),p.view.on("flip",()=>{R()}),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),A=b.rotate(-c).multiply(p.scaling).rotate(c).subtract(b);this.translate(A);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,A=s?180-this.textitem.view.getRotation():this.textitem.view.getRotation(),R=new a.Point(p,b).divide(this.textitem.view.getZoom()).rotate(-A);this.textitem.position=this.circle.bounds.center.add(R)}}class L extends Tt{constructor(c){super(c);ki(this,"onMouseDrag",function(c){this.dragging&&this.item&&(this.item.position=this.item.position.add(c.delta))});this.dragging=!1;let p=new M({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 ie(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 ie extends De{constructor(s){super(s);let c=this;const p=gt("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 ve extends Tt{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"}),A=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),R=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),D=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,R,D]),this.project.toolLayer.addChild(p),this.h1=b,this.h2=A,this.v1=R,this.v2=D,this.crosshairTool=p,this.mode=null,this.creating=null,this.setToolbarControl(new Ne(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(H){H&&(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)),A=c.view.viewToProject(new a.Point(c.view.viewSize.width,p.y)),R=c.view.viewToProject(new a.Point(p.x,0)),D=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=A,this.h2.segments[1].point=A,this.v1.segments[0].point=R,this.v2.segments[0].point=R,this.v1.segments[1].point=D,this.v2.segments[1].point=D}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,A=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 H=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,me)=>Y.dot(H)-me.dot(H))[0],X=H.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 H=s.point.subtract(this.refPoint),J=this.ctrlPoint.subtract(this.refPoint),X=H.project(J);p=this.refPoint.add(X)}else p=s.point}this.setCursorPosition(this.targetLayer.matrix.transform(p));let R=new a.Rectangle(c.rotate(-b,A),p.rotate(-b,A)),D=[R.topLeft,R.topRight,R.bottomRight,R.bottomLeft].map(H=>H.rotate(b,A));this.rectangle.set({segments:D})}onMouseUp(){this.mode="modifying",this.crosshairTool.visible=!1,this.creating=null,this.toolbarControl.updateInstructions("Point:Rectangle")}}class Ne extends De{constructor(s){super(s);const c=gt("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 Me extends Tt{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 Re(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 D=s.point.subtract(s.downPoint),H=[[1,1],[1,-1],[-1,-1],[-1,1]].map(X=>new a.Point(X[0],X[1]).rotate(b)).sort((X,Y)=>X.dot(D)-Y.dot(D))[0],J=D.project(H);c=s.downPoint.add(J)}else c=s.point;let A=new a.Rectangle(s.downPoint.rotate(-b,p),c.rotate(-b,p)),R=new a.Path.Ellipse(A);R.rotate(b,p),this.item.children[0].set({segments:R.segments}),R.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),R=b.project(A),D=A.angle;if(s.modifiers.command||s.modifiers.control){let H=R.length/A.length,J=R.divide(2),X=this.points.opposite.add(J),Y=J.length,me=Math.abs(this.points.p1.subtract(this.points.opposite).multiply(H).cross(R.normalize())),se=new a.Path.Ellipse({center:X,radius:[Y,me]}).rotate(D);this.item.children[0].set({segments:se.segments}),se.remove()}else{let H=R.divide(2),J=this.points.opposite.add(H),X=H.length,Y=Math.abs(this.points.p1.subtract(this.points.opposite).cross(R.normalize())),me=new a.Path.Ellipse({center:J,radius:[X,Y]}).rotate(D);this.item.children[0].set({segments:me.segments}),me.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)),A=this.tool.view.viewToProject(new a.Point(c.x,0)),R=this.tool.view.viewToProject(new a.Point(c.x,this.tool.view.viewSize.height)),D=this.h1,H=this.h2,J=this.v1,X=this.v2;D.segments[0].point=p,H.segments[0].point=p,D.segments[1].point=b,H.segments[1].point=b,J.segments[0].point=A,X.segments[0].point=A,J.segments[1].point=R,X.segments[1].point=R}}class Re extends De{constructor(s){super(s);const c=gt("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 He extends Tt{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 ht(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 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 R=A.location.index+1;A.item.insert(R,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 ht extends De{constructor(s){super(s);const c=gt("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 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 D=this.classList.toggle("active");s.setEraseMode(D)});const R=document.createElement("span");p.appendChild(R),this.undoButton=document.createElement("button"),R.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"),R.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 Et extends He{constructor(s){super(s);let c=this,p=this.tool;this.setToolbarControl(new kt(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=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 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,He.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 kt extends De{constructor(s){super(s),this.linestringTool=s;const c=gt("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 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 Zt extends Tt{constructor(s){super(s);let c=this;this.ps=this.project.paperScope,this.setToolbarControl(new si(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=A=>c.onMouseMove(A)},this.extensions.onDeactivate=function(A){c.project.overlay.removeClass("selectable-layer"),c.tool.onMouseMove=null},this.tool.extensions.onKeyUp=function(A){A.key=="escape"&&c.project.paperScope.findSelectedItems().forEach(R=>R.deselect())},this.tool.onMouseUp=function(A){if(p.visible=!1,b.visible=!1,A.downPoint.subtract(A.point).length==0){let R=c.hitTestPoint(A);R&&c._isItemSelectable(R.item)&&R.item.toggle(A.modifiers.control||A.modifiers.meta)}else{let R=c.hitTestArea(A);A.modifiers.control||A.modifiers.meta||c.project.paperScope.findSelectedItems().forEach(D=>D.deselect()),R.forEach(D=>D.select(!0))}},this.tool.onMouseDrag=function(A){p.visible=!0,b.visible=!0;let R=new a.Rectangle(A.downPoint,A.point);p.set({segments:[R.topLeft,R.topRight,R.bottomRight,R.bottomLeft]}),b.set({segments:[R.topLeft,R.topRight,R.bottomRight,R.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:A=>A.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 si extends De{constructor(s){super(s),this.dropdown.classList.add("select-dropdown");const c=gt("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 hi extends Tt{constructor(s){super(s);let c=this;this.ps=this.project.paperScope,this._mode="transform",this._moving=[],this._active=!1,this.setToolbarControl(new pi(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,A)=>{let R=new a.Shape.Rectangle(new a.Point(0,0),new a.Size(p/s,p/s));return R.set({rescale:{size:D=>new a.Size(p/D,p/D)},fillColor:"red",strokeColor:"black"}),c._transformTool.addChild(R),R.anchor=A[0],R.opposite=A[1],R.onMouseDown=function(D){D.stopPropagation()},R.onMouseDrag=function(D){let H=c.targetLayer.getRotation(),J=(c.targetLayer.tiledImage.getFlip(),this.parent.rotation),X=D.delta.rotate(-J),Y=this.parent.corners[this.opposite].position;(c._alwaysRescaleUniformly||D.modifiers.command||D.modifiers.control)&&(X=X.project(this.position.subtract(Y)));let me=this.position,se=this.position.add(X),re=new a.Rectangle(Y,me).size,we=new a.Rectangle(Y,se).size.divide(re),ge=Y.transform(this.parent.matrix),ne=this.parent.matrix.inverseTransform(this.parent.corners[this.opposite].refPos);ne=c.targetMatrix.inverseTransform(ne);let ue=this.parent.matrix.transform(this.parent.boundingRect.position);c.targetMatrix.inverseTransform(ue),this.parent.transforming.forEach(de=>{let Be=new a.Matrix;Be.rotate(-H,ne).scale(we.width,we.height,ne).rotate(H,ne),de.matrix.append(Be),de.onTransform&&de.onTransform("scale",ge,J,Be)}),this.parent.boundingRect.scale(we.width,we.height,Y),this.parent.setBounds(!0)},b[A[0]]=R,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),R=b.point.subtract(b.delta).subtract(A),D=b.point.subtract(A).angle-R.angle;this.parent.rotate(D,A),this.parent.transforming.forEach(H=>{let J=c.targetMatrix.inverseTransform(A);H.layer.tiledImage.getFlip()&&(D=-D),H.rotate(D,J),H.onTransform&&H.onTransform("rotate",D,J)}),Object.values(this.parent.corners).forEach(H=>{H.refPos=H.refPos.rotate(D,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(R=>{R.refPos=R.refPos.add(b.original.delta)}),this._transformTool.transforming.forEach(R=>{R.translate(A),R.onTransform&&R.onTransform("translate",A)})},this._transformTool.setBounds=function(b=!1){if(!b){let R=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}),D=new a.Point(R.minX,R.minY),H=new a.Point(R.maxX,R.maxY),J=new a.Rectangle(D,H);this.matrix.reset(),this.boundingRect.set({position:J.center,size:J.size})}let A=this.boundingRect;this.boundingDisplay.set({position:A.position,size:A.bounds.size}),Object.values(this.corners).forEach(R=>{R.position=A.bounds[R.anchor],b||(R.refPos=R.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 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 pi extends De{constructor(s){super(s),this.dropdown.classList.add("transform-dropdown");const c=gt("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 ci extends Tt{constructor(s){super(s),this.setToolbarControl(new Ot(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),A=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()),R=this.getSubRaster(A);R.transform(this.layer.matrix.inverted()),R.selectedColor=null;let D={type:"Feature",geometry:{type:"GeometryCollection",properties:{subtype:"Raster",raster:{data:R}},geometries:[c]},properties:{}};c.replaceWith(a.Item.fromGeoJSON(D)),s.refreshItems(),this.remove()}}}}class Ot extends De{constructor(s){super(s);const c=gt("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 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 fi{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:Zt,transform:hi,style:Vt,rectangle:ve,ellipse:Me,point:T,text:L,polygon:He,brush:je,wand:ei,linestring:Et,raster:ci},this.tools={};let b=c||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 At))return void console.warn(`${A} must inherit from class ToolBase`);let R=A instanceof At?A:this.toolConstructors[A],D=this.tools[A]=new R(this.paperScope),H=D.getToolbarControl();H&&this.addToolbarControl(H),D.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||{},A=b.type;b.subtype&&(A+=":"+b.subtype);let R=A===null?"new":A;this.currentMode=R}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 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 xt{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"):gt("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 ai(F){const s=document.createElement("template");return s.innerHTML=F,s.content.children.length===1?s.content.children[0]:s.content.children}class yi{constructor(s,c){this.paperItem=s;let p=this._element=ai(`
|
|
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(D=>D.fillColor);c.length==1||new Set(c.map(D=>D.toCSS())).size==1?this.setFillButtonColor(c[0]):this.setFillButtonColor();let p=s.map(D=>D.strokeColor);p.length==1||new Set(p.map(D=>D.toCSS())).size==1?this.setStrokeButtonColor(p[0]):this.setStrokeButtonColor();let b=s.map(D=>D.fillOpacity);b.length==1||new Set(b).size==1?this.setFillButtonOpacity(b[0]):this.setFillButtonOpacity(1);let A=s.map(D=>D.strokeOpacity);A.length==1||new Set(A).size==1?this.setStrokeButtonOpacity(A[0]):this.setStrokeButtonOpacity(1);let R=s.map(D=>D.rescale?D.rescale.strokeWidth:D.strokeWidth);R.length==1||new Set(R).size==1?this.dropdown.querySelectorAll('input[type="number"]').forEach(D=>D.value=R[0]):this.dropdown.querySelectorAll('input[type="number"]').forEach(D=>D.value="")}setFillButtonColor(s=new a.Color("white")){s||(s=new a.Color("white"));let c=s.toCSS(!0),p=yt(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=yt(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 ri(F,s,c){let p=new a.Group({visible:!1,applyMatrix:!1});function b(){const we=p.view.getFlipped()?p.view.getRotation():180-p.view.getRotation();p.rotate(-we),p.scale(-1,1),p.rotate(we)}this.element=p,c.addChild(p),p.view.on("rotate",we=>p.rotate(-we.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 R=A.getContext("2d",{willReadFrequently:!0}),D=F,H=-(s-1)/2,J=H+s;for(var X=H;X<J;X++)for(var Y=H;Y<J;Y++){let we=new a.Shape.Rectangle({point:[Y*D,X*D],size:[D,D],strokeWidth:.5,strokeColor:"white",fillColor:"white",rescale:{position:[Y*D,X*D],size:[D,D],strokeWidth:.5}});p.addChild(we),Y==0&&X==0&&(p.centerCell=we)}Y=0,X=0;let ve=new a.Shape.Rectangle({point:[Y*D,X*D],size:[D,D],strokeWidth:1,strokeColor:"black",fillColor:null,rescale:{position:[Y*D,X*D],size:[D,D],strokeWidth:1}});p.addChild(ve),Y=0,X=0;let se=F*(s+2),re=new a.Shape.Rectangle({point:[Y*D,X*D],size:[se,se],strokeWidth:1,strokeColor:"black",fillColor:null,rescale:{position:[Y*D,X*D],size:[se,se],strokeWidth:1}});return p.addChild(re),p.borderElement=re,re.sendToBack(),p.applyRescale=function(){p.children.forEach(we=>we.applyRescale())},p.view.getFlipped()&&b(),this.updatePosition=function(we){p.position=we;let me=p.project.overlay.paperToCanvasCoordinates(we.x,we.y),ne=Math.round(me.x)-Math.floor(p.numColumns/2),de=Math.round(me.y)-Math.floor(p.numRows/2),pe=p.numColumns,Be=p.numRows,Le=p.view.pixelRatio,Ee=p.project.overlay.getImageData(ne*Le,de*Le,pe*Le,Be*Le);R.clearRect(0,0,pe,Be),window.createImageBitmap(Ee).then(Ue=>{R.drawImage(Ue,0,0,p.numColumns,p.numRows);let je,Ve,Ne=R.getImageData(0,0,pe,Be);for(je=0,Ve=1;je<Ne.data.length;je+=4,Ve+=1)p.children[Ve].fillColor.red=Ne.data[je]/255,p.children[Ve].fillColor.green=Ne.data[je+1]/255,p.children[Ve].fillColor.blue=Ne.data[je+2]/255;p.borderElement.fillColor=p.centerCell.fillColor,this.selectedColor=p.centerCell.fillColor})},this}async function zt(F){let s=(F.project&&F.project.overlay||F.overlay).getViewportRaster();return new Promise(function(c,p){s.onLoad=function(){const b=F.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."),c(A)}})}function yt(F){return F=F.replace("#",""),(299*parseInt(F.substr(0,2),16)+587*parseInt(F.substr(2,2),16)+114*parseInt(F.substr(4,2),16))/1e3>=140?"black":"white"}class si{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 A=0;A<b;A++)for(var R=0;R<p;R++){var D=A*p+R;this.data[D]=c[D]?c[D]:this.adjacentIndices(D).some(function(H){return c[H]})?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 A=this.data.length;return[p,p+1,p+2,c-1,c+1,b,b+1,b+2].filter(function(R){return R>=0&&R<A})}}}const Ke=new class{constructor(){this._map=new WeakMap}set(F,s,c){if(this._map.has(F)||this._map.set(F,new Map),typeof s=="object"){const p=s,b=this._map.get(F);for(const[A,R]of Object.entries(p))b.set(A,R)}else this._map.get(F).set(s,c)}get(F,s){if(this._map.has(F))return s===void 0?Object.fromEntries(this._map.get(F)):this._map.get(F).get(s);this._map.set(F,new Map)}remove(F,s){if(this._map.has(F)){var c=this._map.get(F).delete(s);return this._map.get(F).size===0&&this._map.delete(F),c}}};class ti extends St{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 ri(10,7,c.project.toolLayer),this.colorPicker.element.applyRescale(),this.MagicWand={floodFill:function(A,R,D,H,J,X){return X?function(Y,ve,se,re,we){var me,ne,de,pe,Be,Le,Ee,Ue,je,Ve,Ne=Y.data,nt=Y.width,ot=Y.height,lt=Y.bytes,st=-1,mt=nt+1,pt=-1,at=ot+1,Je=se*nt+ve,wt=new Uint8Array(nt*ot),At=new Uint8Array(we||nt*ot);if(At[Je]===1)return null;var ut=[Ne[Je*=lt],Ne[Je+1],Ne[Je+2],Ne[Je+3]],kt=[{y:se,left:ve-1,right:ve+1,dir:1}];do{for(Ve=!1,ne=(pe=kt.shift()).left+1;ne<pe.right;ne++)if(Je=((Ee=pe.y*nt)+ne)*lt,At[Ee+ne]!==1&&(Ve=!0,wt[Ee+ne]=1,At[Ee+ne]=1,!((me=Ne[Je]-ut[0])>re||me<-re||(me=Ne[Je+1]-ut[1])>re||me<-re||(me=Ne[Je+2]-ut[2])>re||me<-re||Ne[Je+3]===0))){for(Le=ne-1;Le>-1&&(Je=(Ue=Ee+Le)*lt,At[Ue]!==1)&&(wt[Ue]=1,At[Ue]=1,Le--,!((me=Ne[Je]-ut[0])>re||me<-re))&&!((me=Ne[Je+1]-ut[1])>re||me<-re)&&!((me=Ne[Je+2]-ut[2])>re||me<-re)&&Ne[Je+3]!==0;);for(Be=ne+1;Be<nt&&(Je=(je=Ee+Be)*lt,At[je]!==1)&&(wt[je]=1,At[je]=1,Be++,!((me=Ne[Je]-ut[0])>re||me<-re))&&!((me=Ne[Je+1]-ut[1])>re||me<-re)&&!((me=Ne[Je+2]-ut[2])>re||me<-re)&&Ne[Je+3]!==0;);Le<mt&&(mt=Le+1),Be>st&&(st=Be-1),(de=pe.y-pe.dir)>=0&&de<ot&&(Le<pe.left&&kt.push({y:de,left:Le,right:pe.left,dir:-pe.dir}),pe.right<Be&&kt.push({y:de,left:pe.right,right:Be,dir:-pe.dir})),(de=pe.y+pe.dir)>=0&&de<ot&&Le<Be&&kt.push({y:de,left:Le,right:Be,dir:pe.dir})}Ve&&(pe.y<at&&(at=pe.y),pe.y>pt&&(pt=pe.y))}while(kt.length>0);return{data:wt,width:Y.width,height:Y.height,bounds:{minX:mt,minY:at,maxX:st,maxY:pt},sampleColor:ut}}(A,R,D,H,J):function(Y,ve,se,re,we){var me,ne,de,pe,Be,Le,Ee,Ue,je,Ve,Ne=Y.data,nt=Y.width,ot=Y.height,lt=Y.bytes,st=-1,mt=nt+1,pt=-1,at=ot+1,Je=se*nt+ve,wt=new Uint8Array(nt*ot),At=new Uint8Array(we||nt*ot);if(At[Je]===1)return null;var ut=[Ne[Je*=lt],Ne[Je+1],Ne[Je+2],Ne[Je+3]],kt=[{y:se,left:ve-1,right:ve+1,dir:1}];do{for(Ve=!1,ne=(pe=kt.shift()).left+1;ne<pe.right;ne++)if(Je=((Ee=pe.y*nt)+ne)*lt,At[Ee+ne]!==1&&!((me=Ne[Je]-ut[0])>re||me<-re||(me=Ne[Je+1]-ut[1])>re||me<-re||(me=Ne[Je+2]-ut[2])>re||me<-re||Ne[Je+3]===0)){for(Ve=!0,wt[Ee+ne]=1,At[Ee+ne]=1,Le=ne-1;Le>-1&&(Je=(Ue=Ee+Le)*lt,At[Ue]!==1)&&!((me=Ne[Je]-ut[0])>re||me<-re)&&!((me=Ne[Je+1]-ut[1])>re||me<-re)&&!((me=Ne[Je+2]-ut[2])>re||me<-re)&&Ne[Je+3]!==0;)wt[Ue]=1,At[Ue]=1,Le--;for(Be=ne+1;Be<nt&&(Je=(je=Ee+Be)*lt,At[je]!==1)&&!((me=Ne[Je]-ut[0])>re||me<-re)&&!((me=Ne[Je+1]-ut[1])>re||me<-re)&&!((me=Ne[Je+2]-ut[2])>re||me<-re)&&Ne[Je+3]!==0;)wt[je]=1,At[je]=1,Be++;Le<mt&&(mt=Le+1),Be>st&&(st=Be-1),(de=pe.y-pe.dir)>=0&&de<ot&&(Le<pe.left&&kt.push({y:de,left:Le,right:pe.left,dir:-pe.dir}),pe.right<Be&&kt.push({y:de,left:pe.right,right:Be,dir:-pe.dir})),(de=pe.y+pe.dir)>=0&&de<ot&&Le<Be&&kt.push({y:de,left:Le,right:Be,dir:pe.dir})}Ve&&(pe.y<at&&(at=pe.y),pe.y>pt&&(pt=pe.y))}while(kt.length>0);return{data:wt,width:Y.width,height:Y.height,bounds:{minX:mt,minY:at,maxX:st,maxY:pt},sampleColor:ut}}(A,R,D,H,J)},thresholdMask:function(A,R,D,H,J={}){let X,Y,ve=A.data,se=A.width,re=A.height,we=A.bytes,me=D*se+R,ne=new Uint8Array(J.append?J.append:se*re),de=new Uint8Array(J.ignore?J.ignore:se*re);if(de[me]===1)return null;me*=we;var pe=[ve[me],ve[me+1],ve[me+2],ve[me+3]];for(me=0,Y=0;me<ve.length;me+=4,Y+=1)de[Y]||ne[Y]||ve[me+3]!==0&&(X=ve[me]-pe[0],X>H||X<-H||(X=ve[me+1]-pe[1],X>H||X<-H||(X=ve[me+2]-pe[2],X>H||X<-H||(ne[Y]=1))));return{data:ne,width:A.width,height:A.height,bounds:{minX:0,minY:0,maxX:se,maxY:re},sampleColor:pe}},gaussBlur:function(A,R){var D,H,J,X,Y,ve,se,re=2*R+1,we=R*R,me=new Float32Array(re),ne=0,de=A.width,pe=A.height,Be=A.data,Le=A.bounds.minX,Ee=A.bounds.maxX,Ue=A.bounds.minY,je=A.bounds.maxY;for(D=0;D<R;D++){var Ve=(R-D)*(R-D),Ne=Math.exp(-Ve/(2*we))/(2*Math.PI*we);me[R+D]=me[R-D]=Ne,ne+=2*Ne}for(D=0;D<re;D++)me[D]/=ne;var nt=new Uint8Array(de*pe),ot=R+de,lt=R+pe;for(Y=Ue;Y<je+1;Y++)for(X=Le;X<Ee+1;X++){for(ve=0,se=ot-X<re?ot-X:re,J=(H=Y*de+X)-R,D=R-X>0?R-X:0;D<se;D++)ve+=Be[J+D]*me[D];for(se=lt-Y<re?lt-Y:re,J=H-R*de,D=R-Y>0?R-Y:0;D<se;D++)ve+=Be[J+D*de]*me[D];nt[H]=ve>.5?1:0}return{data:nt,width:de,height:pe,bounds:{minX:Le,minY:Ue,maxX:Ee,maxY:je}}},gaussBlurOnlyBorder:function(A,R,D){var H,J,X,Y,ve,se,re,we,me,ne,de=function(Je,wt,At){var ut,kt,Jt,Lt,It,$t,Xt,Qt=Je.width,ni=Je.height,ei=Je.data,Gt=new Uint8Array(ei),wi=Je.bounds.minX,mi=Je.bounds.maxX,bi=Je.bounds.minY,jt=Je.bounds.maxY,gi=Qt*ni,li=new Uint8Array(gi),di=[],Ci=Math.max(wi,1),Ai=Math.min(mi,Qt-2),Ti=Math.max(bi,1),Ei=Math.min(jt,ni-2);if(At&&At.length>0)for(It=0;It<gi;It++)At[It]===1&&(Gt[It]=1);for(Lt=Ti;Lt<Ei+1;Lt++)for(ut=Ci;ut<Ai+1;ut++)ei[It=Lt*Qt+ut]!==0&&($t=It+Qt,Xt=It-Qt,Gt[It+1]!==0&&Gt[It-1]!==0&&Gt[$t]!==0&&Gt[$t+1]!==0&&Gt[$t-1]!==0&&Gt[Xt]!==0&&Gt[Xt+1]!==0&&Gt[Xt-1]!==0||di.push(It));if(wi==0)for(Lt=bi;Lt<jt+1;Lt++)ei[Lt*Qt]===1&&di.push(Lt*Qt);if(mi==Qt-1)for(Lt=bi;Lt<jt+1;Lt++)ei[Lt*Qt+mi]===1&&di.push(Lt*Qt+mi);if(bi==0)for(ut=wi;ut<mi+1;ut++)ei[ut]===1&&di.push(ut);if(jt==ni-1)for(ut=wi;ut<mi+1;ut++)ei[jt*Qt+ut]===1&&di.push(jt*Qt+ut);var vi,_i=[],Di=wt+Qt,Si=wt+ni,zi=2*wt+1;for(gi=di.length,Jt=0;Jt<gi;Jt++){for(li[It=di[Jt]]=1,_i.push(It),Lt=(It-(ut=It%Qt))/Qt,vi=Di-ut<zi?Di-ut:zi,$t=It-wt,kt=wt-ut>0?wt-ut:0;kt<vi;kt++)li[Xt=$t+kt]===0&&(li[Xt]=1,_i.push(Xt));for(vi=Si-Lt<zi?Si-Lt:zi,$t=It-wt*Qt,kt=wt-Lt>0?wt-Lt:0;kt<vi;kt++)li[Xt=$t+kt*Qt]===0&&(li[Xt]=1,_i.push(Xt))}return _i}(A,R,D),pe=2*R+1,Be=2*R*R,Le=new Float32Array(pe),Ee=0,Ue=A.width,je=A.height,Ve=A.data,Ne=A.bounds.minX,nt=A.bounds.maxX,ot=A.bounds.minY,lt=A.bounds.maxY,st=de.length;for(X=0;X<R;X++)J=(R-X)*(R-X),H=Math.exp(-J/Be)/Math.PI,Le[R+X]=Le[R-X]=H,Ee+=2*H;for(X=0;X<pe;X++)Le[X]/=Ee;var mt=new Uint8Array(Ve),pt=R+Ue,at=R+je;for(X=0;X<st;X++){for(me=0,we=((ve=de[X])-(re=ve%Ue))/Ue,ne=pt-re<pe?pt-re:pe,se=ve-R,Y=R-re>0?R-re:0;Y<ne;Y++)me+=Ve[se+Y]*Le[Y];if(me>.5)mt[ve]=1,re<Ne&&(Ne=re),re>nt&&(nt=re),we<ot&&(ot=we),we>lt&&(lt=we);else{for(ne=at-we<pe?at-we:pe,se=ve-R*Ue,Y=R-we>0?R-we:0;Y<ne;Y++)me+=Ve[se+Y*Ue]*Le[Y];me>.5?(mt[ve]=1,re<Ne&&(Ne=re),re>nt&&(nt=re),we<ot&&(ot=we),we>lt&&(lt=we)):mt[ve]=0}}return{data:mt,width:Ue,height:je,bounds:{minX:Ne,minY:ot,maxX:nt,maxY:lt}}},createBorderMask:function(A){var R,D,H,J,X,Y=A.width,ve=A.height,se=A.data,re=A.bounds.minX,we=A.bounds.maxX,me=A.bounds.minY,ne=A.bounds.maxY,de=we-re+1,pe=ne-me+1,Be=new Uint8Array(de*pe),Le=Math.max(re,1),Ee=Math.min(we,Y-2),Ue=Math.max(me,1),je=Math.min(ne,ve-2);for(D=Ue;D<je+1;D++)for(R=Le;R<Ee+1;R++)se[H=D*Y+R]!==0&&(J=H+Y,X=H-Y,se[H+1]!==0&&se[H-1]!==0&&se[J]!==0&&se[J+1]!==0&&se[J-1]!==0&&se[X]!==0&&se[X+1]!==0&&se[X-1]!==0||(Be[(D-me)*de+(R-re)]=1));if(re==0)for(D=me;D<ne+1;D++)se[D*Y]===1&&(Be[(D-me)*de]=1);if(we==Y-1)for(D=me;D<ne+1;D++)se[D*Y+we]===1&&(Be[(D-me)*de+(we-re)]=1);if(me==0)for(R=re;R<we+1;R++)se[R]===1&&(Be[R-re]=1);if(ne==ve-1)for(R=re;R<we+1;R++)se[ne*Y+R]===1&&(Be[(ne-me)*de+(R-re)]=1);return{data:Be,width:de,height:pe,offset:{x:re,y:me}}},getBorderIndices:function(A){var R,D,H,J,X,Y=A.width,ve=A.height,se=A.data,re=[],we=Y-1,me=ve-1;for(D=1;D<me;D++)for(R=1;R<we;R++)se[H=D*Y+R]!==0&&(J=H+Y,X=H-Y,se[H+1]!==0&&se[H-1]!==0&&se[J]!==0&&se[J+1]!==0&&se[J-1]!==0&&se[X]!==0&&se[X+1]!==0&&se[X-1]!==0||re.push(H));for(D=0;D<ve;D++)se[D*Y]===1&&re.push(D*Y);for(R=0;R<Y;R++)se[R]===1&&re.push(R);for(H=Y-1,D=0;D<ve;D++)se[D*Y+H]===1&&re.push(D*Y+H);for(H=(ve-1)*Y,R=0;R<Y;R++)se[H+R]===1&&re.push(H+R);return re},traceContours:function(A){var R,D,H,J,X,Y,ve,se,re,we,me,ne,de,pe,Be,Le=function(pt){var at,Je,wt=pt.width,At=pt.data,ut=pt.bounds.minX,kt=pt.bounds.maxX,Jt=pt.bounds.minY,Lt=pt.bounds.maxY,It=kt-ut+3,$t=Lt-Jt+3,Xt=new Uint8Array(It*$t);for(Je=Jt;Je<Lt+1;Je++)for(at=ut;at<kt+1;at++)At[Je*wt+at]===1&&(Xt[(Je-Jt+1)*It+(at-ut+1)]=1);return{data:Xt,width:It,height:$t,offset:{x:ut-1,y:Jt-1}}}(A),Ee=[],Ue=0,je=Le.width,Ve=2*je,Ne=Le.height,nt=Le.data,ot=Le.offset.x,lt=Le.offset.y,st=new Uint8Array(nt),mt=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]];for(J=1;J<Ne-1;J++)for(H=1;H<je-1;H++)if(nt[X=J*je+H]===1){for(R=-je;R<Ve;R+=Ve)if(nt[X+R]===0&&st[X+R]===0){for(Ue++,ve=[],re=(se=R===je)?2:6,ne=de=we={x:H,y:J},me=null;;){for(st[ne.y*je+ne.x]=Ue,D=0;D<8;D++){if(Be=mt[re=(re+1)%8],nt[Y=(pe={x:ne.x+Be[0],y:ne.y+Be[1]}).y*je+pe.x]===1){st[Y]=Ue;break}st[Y]=-1,pe=null}if(pe===null)break;if(ne=pe,me){if(de.x===we.x&&de.y===we.y&&ne.x===me.x&&ne.y===me.y)break}else me=pe;ve.push({x:de.x+ot,y:de.y+lt}),de=ne,re=(re+4)%8}pe!=null&&(ve.push({x:we.x+ot,y:we.y+lt}),Ee.push({inner:se,label:Ue,points:ve}))}}return Ee},simplifyContours:function(A,R,D){var H,J,X,Y,ve,se,re,we,me,ne,de,pe,Be,Le,Ee,Ue,je,Ve,Ne,nt,ot,lt=A.length,st=[];for(J=0;J<lt;J++)if(ve=(Y=A[J]).points,(se=Y.points.length)<D){for(re=[],X=0;X<se;X++)re.push({x:ve[X].x,y:ve[X].y});st.push({inner:Y.inner,label:Y.label,points:re,initialCount:se})}else{we=[0,se-1],me=[{first:0,last:se-1}];do if(!((ne=me.shift()).last<=ne.first+1)){for(de=-1,pe=ne.first,H=ne.first+1;H<ne.last;H++)Ne=ve[H],nt=ve[ne.first],ot=ve[ne.last],je=Ne.x-nt.x,Ve=Ne.y-nt.y,Le=Math.sqrt(je*je+Ve*Ve),je=Ne.x-ot.x,Ve=Ne.y-ot.y,Ee=Math.sqrt(je*je+Ve*Ve),je=nt.x-ot.x,Ve=nt.y-ot.y,Ue=Math.sqrt(je*je+Ve*Ve),(Be=Le>=Math.sqrt(Ee*Ee+Ue*Ue)?Ee:Ee>=Math.sqrt(Le*Le+Ue*Ue)?Le:Math.abs((Ve*Ne.x-je*Ne.y+nt.x*ot.y-ot.x*nt.y)/Ue))>de&&(pe=H,de=Be);de>R&&(we.push(pe),me.push({first:ne.first,last:pe}),me.push({first:pe,last:ne.last}))}while(me.length>0);for(re=[],se=we.length,we.sort(function(mt,pt){return mt-pt}),X=0;X<se;X++)re.push({x:ve[we[X]].x,y:ve[we[X]].y});st.push({inner:Y.inner,label:Y.label,points:re,initialCount:Y.points.length})}return st}},this.setToolbarControl(new Ye(this)),this.toolbarControl.setThreshold(this.threshold);let b=function(){c.getImageData()};this.onSelectionChanged=b,this.extensions.onActivate=function(){let A=c.item||c.itemToCreate;c.itemLayer=A?A.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(A){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(),A&&c.finish(),c.project.toolLayer.sendToBack()},p.extensions.onKeyUp=function(A){A.key=="a"&&c.applyChanges(),A.key=="e"&&c.toolbarControl.cycleReduceMode(),A.key=="r"&&c.toolbarControl.cycleReplaceMode(),A.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=Dt(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=Dt(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:A=>A.isBoundingElement}):[];p.length>0&&(c.children=p.map(A=>A.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,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 R=this.itemLayer?this.itemLayer.getItems({match:X=>X.isBoundingElement}):[];if(A.fillColor=R.length==0?s.colors.pixelAllowed:s.colors.pixelNotAllowed,R.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 D=s.project.paperScope.project.getItems({match:X=>X.isGeoJSONFeatureCollection}),H=D.map(X=>X.visible);D.forEach(X=>X.visible=!1),s.project.toolLayer.addChild(p),s.tool.view.update();let J=s.tool.view.getImageData();p.remove(),D.forEach((X,Y)=>X.visible=H[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()?zt(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 A=this.imageData.binaryMask,R=this.imageData.wandMask,D=this.imageData.dragStartMask,H=this.imageData.colorMask.data,J=c.data;if(this.replaceMode&&!this.reduceMode)for(let X=0,Y=0;X<H.length;X+=this.imageData.bytes,Y+=1)A[Y]=H[X+1]>0||H[X]==0&&J[Y],R[Y]=J[Y];else if(this.replaceMode&&this.reduceMode)for(let X=0,Y=0;X<H.length;X+=this.imageData.bytes,Y+=1)A[Y]=H[X+1]>0&&!(H[X]==0&&J[Y]),R[Y]=J[Y];else if(this.replaceMode||this.reduceMode){if(!this.replaceMode&&this.reduceMode)for(let X=0,Y=0;X<H.length;X+=this.imageData.bytes,Y+=1)A[Y]=D[Y]&&!(H[X]==0&&J[Y]),R[Y]=R[Y]||J[Y]}else for(let X=0,Y=0;X<H.length;X+=this.imageData.bytes,Y+=1)A[Y]=D[Y]||H[X]==0&&J[Y],R[Y]=R[Y]||J[Y];this.rasterPreview(this.imageData.binaryMask,this.imageData.sampleColor||c.sampleColor)}rasterPreview(s,c){let p,b=this,A={0:this.colors.nullColor,1:this.colors.defaultColor};c&&(A[1]=new a.Color(c[0],c[1],c[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 R=this.preview.createImageData(this.preview.size);for(var D=0,H=0;D<R.data.length;D+=4,H+=1)p=A[s[H]],R.data[D]=p.red,R.data[D+1]=p.blue,R.data[D+2]=p.green,R.data[D+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(R,new a.Point(0,0)),J()}}class Ye extends Me{constructor(s){super(s);let c=gt("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 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 R=document.createElement("div");R.classList.add("toggles"),p.appendChild(R);let D=this.cycleReplaceModeButton=document.createElement("span");D.classList.add("option-toggle"),R.appendChild(D),Ke.set(D,{prefix:"On click:",actions:[{replace:"Start new mask"},{append:"Add to current"}],onclick:function(ve){s.setReplaceMode(ve=="replace")}});let H=this.cycleFloodModeButton=document.createElement("span");H.classList.add("option-toggle"),R.appendChild(H),Ke.set(H,{prefix:"Fill rule:",actions:[{flood:"Contiguous"},{everywhere:"Anywhere"}],onclick:function(ve){s.setFloodMode(ve=="flood")}});let J=this.cycleReduceModeButton=document.createElement("span");J.classList.add("option-toggle"),R.appendChild(J),Ke.set(J,{prefix:"Use to:",actions:[{expand:"Expand selection"},{reduce:"Reduce selection"}],onclick:function(ve){s.setReduceMode(ve=="reduce")}}),[D,H,J].forEach(ve=>{let se=Ke.get(ve),re=document.createElement("span");re.classList.add("label","prefix"),re.innerHTML=se.prefix,ve.appendChild(re),se.actions.forEach((we,me)=>{let ne=Object.values(we)[0],de=Object.keys(we)[0],pe=document.createElement("span");pe.classList.add("option"),pe.innerHTML=ne,ve.appendChild(pe),Ke.set(pe,{key:de,index:me}),we.htmlElement=pe,we.key=de,me==0&&pe.classList.add("selected")}),ve.addEventListener("click",function(){var Le;let we=Ke.get(this),me=we.actions,ne=this.querySelector(".option.selected"),de=(Le=Ke.get(ne))==null?void 0:Le.index,pe=de===void 0?0:(de+1)%me.length;this.querySelectorAll(".option").forEach(Ee=>Ee.classList.remove("selected"));let Be=me[pe];Be.htmlElement.classList.add("selected"),we.onclick(Be.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 Dt(F,s,c){let p=new a.CompoundPath({children:[],fillRule:"evenodd",insert:!1});if(s){s=new si(s).addBorder(),s.bounds={minX:0,minY:0,maxX:s.width,maxY:s.height};let A=F.traceContours(s);p.children=A.map(function(R){let D=R.points.map(J=>new a.Point(J)),H=new a.Path(D,{insert:!1});return H.closed=!0,H}).filter(function(R){if(Math.abs(R.area)>=50)return!0;R.remove()})}return p}function ii(F,s,c,p){var b=F.curve===s,A=s.getNormalAtTime(b?0:1).multiply(p),R=F.point.add(A),D=new a.Segment(R),H=b?"handleOut":"handleIn";return D[H]=F[H].add(c.subtract(A).divide(2)),D}function Et(F,s){var c=new a.Curve(F.segment1.handleOut.add(F.segment1.point),new a.Point(0,0),new a.Point(0,0),F.segment2.handleIn.add(F.segment2.point)).getNormalAtTime(.5).multiply(s),p=ii(F.segment1,F,c,s),b=ii(F.segment2,F,c,s),A=new a.Curve(p,b);if(A.getIntersections(A).length===0){var R=Math.min(Math.abs(s)/10,1),D=A.getPointAtTime(.5).getDistance(F.getPointAtTime(.5));if(Math.abs(D-Math.abs(s))>R){var H=F.divideAtTime(.5);if(H!=null)return Et(F,s).concat(Et(H,s))}}return[p,b]}function Kt(F,s){return F.x*s.y-F.y*s.x}function hi(F,s,c,p,b,A){var R,D,H,J,X,Y,ve,se,re,we,me,ne,de,pe,Be=new a.Curve(F[0],F[1]),Le=new a.Curve(s[0],s[1]),Ee=Be.getIntersections(Le),Ue=F[1].point.getDistance(s[0].point);if(c.isSmooth())s[0].handleOut=s[0].handleOut.project(c.handleOut),s[0].handleIn=F[1].handleIn.project(c.handleIn),s[0].point=F[1].point.add(s[0].point).divide(2),F.pop();else if(Ee.length===0)if(Ue>.1*Math.abs(b))switch(p){case"miter":var je=(ve=Be.point2,se=Be.point2.add(Be.getTangentAtTime(1)),re=Le.point1,we=Le.point1.add(Le.getTangentAtTime(0)),me=ve.subtract(se),ne=re.subtract(we),de=Kt(ve,se),pe=Kt(re,we),new a.Point(de*ne.x-me.x*pe,de*ne.y-me.y*pe).divide(Kt(me,ne)));Math.max(je.getDistance(Be.point2),je.getDistance(Le.point1))<Math.abs(b)*A&&F.push(new a.Segment(je));break;case"round":var Ve=(R=F[1],D=s[0],H=c.point,J=b,X=R.point.subtract(H).add(D.point.subtract(H)).normalize(Math.abs(J)).add(H),Y=new a.Path.Arc({from:R.point,to:D.point,through:X,insert:!1}),R.handleOut=Y.firstSegment.handleOut,D.handleIn=Y.lastSegment.handleIn,Y.segments.length===3?Y.segments[1]:null);Ve&&F.push(Ve)}else s[0].handleIn=F[1].handleIn,F.pop();else{var Ne=Be.divideAt(Ee[0]);if(Ne){je=Ne.segment1;var nt=Le.divideAt(Le.getIntersections(Be)[0]);je.handleOut=nt?nt.segment1.handleOut:s[0].handleOut,F.pop(),s[0]=je}else s[0].handleIn=F[1].handleIn,F.pop()}}function Yt(F){return F.children.length===1&&(F=F.children[0]).remove(),F}function qt(F,s){if(s===void 0&&(s=.01),F.closed){var c=Math.abs(F.area*s);if(F.clockwise||F.reverse(),(F=F.unite(F,{insert:!1}))instanceof a.CompoundPath&&(F.children.filter(function(p){return Math.abs(p.area)<c}).forEach(function(p){return p.remove()}),F.children.length===1))return Yt(F)}return F}function Zt(F,s){var c=(F.segments[0].location.offset+F.segments[Math.max(1,Math.floor(F.segments.length/2))].location.offset)/3;return s.getNearestLocation(F.getPointAt(c)).offset<s.getNearestLocation(F.getPointAt(2*c)).offset}function xt(F,s,c,p){var b,A;b=function(Y,ve){var se=Y.clone({insert:!1});return se.reduce({}),Y.clockwise||(se.reverse(),ve=-ve),[se,ve]}(F,s),A=b[0],s=b[1];for(var R=A.curves.slice().map(function(Y){return Et(Y,s)}).flat(),D=[],H=0;H<R.length;H+=2)D.push(R.slice(H,H+2));var J=function(Y,ve,se,re,we){var me=se.segments;if(Y.length==0)return se.segments;for(var ne=Y[0].slice(),de=0;de<Y.length-1;++de)hi(Y[de],Y[de+1],me[de+1],ve,re,we);return se.closed&&(hi(Y[Y.length-1],ne,me[0],ve,re,we),Y[0][0]=ne[0]),Y}(D,c,A,s,p).flat(),X=function(Y){if(Y.closed){var ve=Y.unite(Y,{insert:!1});if(ve instanceof a.CompoundPath)return ve.children.filter(function(se){return!(se.segments.length>1&&Zt(se,Y))}).forEach(function(se){return se.remove()}),Yt(ve)}return Y}(new a.Path({segments:J,insert:!1,closed:F.closed}));return X.reduce({}),A.closed&&(A.clockwise&&s<0||!A.clockwise&&s>0)&&function(Y,ve){var se=function(re){return re instanceof a.CompoundPath?re.children.map(function(we){return we.segments}).flat():re.segments}(Y).slice();se.forEach(function(re){ve.contains(re.point)||re.remove()})}(X,F),A.clockwise!==F.clockwise&&X.reverse(),qt(X)}function P(F,s,c){var p=F.point.add(s.point).divide(2),b=s.point.subtract(F.point).rotate(-90,new a.Point(0,0)).normalize(c),A=p.add(b);return new a.Path.Arc({from:F.point,to:s.point,through:A,insert:!1}).segments}function q(F,s,c,p,b){var A=xt(F,s=F.clockwise?s:-s,c,b),R=xt(F,-s,c,b);if(F.closed)return A.subtract(R,{insert:!1});var D=R,H=new Array;R instanceof a.CompoundPath&&((H=R.children.filter(function(se){return se.closed})).forEach(function(se){return se.remove()}),D=R.children[0]),D.reverse();var J=function(se,re,we,me){if(se instanceof a.CompoundPath){var ne=se.children.map(function(Ue){return{c:Ue,a:Math.abs(Ue.area)}});se=(ne=ne.sort(function(Ue,je){return je.a-Ue.a}))[0].c}var de=se.segments.slice(),pe=re.segments.slice();if(me==="round"){var Be=P(pe[pe.length-1],de[0],we),Le=P(de[de.length-1],pe[0],we),Ee=new a.Path({segments:Be.concat(de,Le,pe),closed:!0,insert:!1});return Ee.reduce({}),Ee}return new a.Path({segments:de.concat(pe),closed:!0,insert:!1})}(A,D,s,p);if(H.length>0)for(var X=0,Y=H;X<Y.length;X++){var ve=Y[X];J=J.subtract(ve,{insert:!1})}return J}function fe(F){return F.closed?F.unite(F,{insert:!1}):F}a===void 0&&console.error("paper-offset.mjs requires paper.js to have been loaded");var Re=function(){function F(){}return F.offset=function(s,c,p){var b=function(A,R,D,H){var J=fe(A),X=J;if(J instanceof a.Path)X=xt(J,R,D,H);else{var Y=J.children.map(function(ve){if(ve.segments.length>1){Zt(ve,A)||ve.reverse();var se=xt(ve,R,D,H);return(se=qt(se)).clockwise!==ve.clockwise&&se.reverse(),se instanceof a.CompoundPath?(se.applyMatrix=!0,se.children):se}return null}).flat().filter(function(ve){return!!ve});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},F.offsetStroke=function(s,c,p){var b=function(A,R,D,H,J){var X=fe(A),Y=X;return(Y=X instanceof a.Path?q(X,R,D,H,J):X.children.flatMap(function(ve){return q(ve,R,D,H,J)}).reduce(function(ve,se){return ve.unite(se,{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},F}();class He extends St{constructor(s){super(s);let c=this;this.setToolbarControl(new Qe(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=Re.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=Re.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 A=this.item.parent.children.filter(R=>R.isBoundingElement);s.applyBounds(A)}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 A=b.children.filter(R=>R.area>0||Math.abs(R.area)>10);this.item.removeChildren(),this.item.addChildren(A),b.remove()}s.remove()}}class Qe extends Me{constructor(s){super(s);const c=gt("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 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 ke{constructor(s){var c;if(vt.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,A=c._props;Se.registerFeature(p),p.onTransform=b.onTransform,c.setStyle(A),p.fillOpacity=p.fillColor?p.fillColor.alpha:1,p.displayName=A.label||c.getLabel(),p.annotationItem=c,p.replaceWith=ye,"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 vt=["Point","LineString","Polygon","MultiPoint","MultiLineString","MultiPolygon","GeometryCollection",null],Rt=[];class Q{constructor(){}static register(s){if(s.supportsGeoJSONType===ke.supportsGeoJSONType)throw console.error("Static accessor supportsGeoJSONType must be implemented"),"Static accessor supportsGeoJSONType must be implemented";Rt.includes(s)||Rt.push(s)}static getConstructor(s){var b,A,R;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=(R=(A=s.geometry)==null?void 0:A.properties)==null?void 0:R.subtype;return Rt.filter(D=>D.supportsGeoJSONType(c,p)).slice(-1)[0]}static itemFromGeoJSON(s){var p;vt.includes(s.type)&&(s={type:"Feature",geometry:s,properties:{}});let c=Q.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 Q.itemFromGeoJSON(c)}}function ye(F){F.isGeoJSONFeature||console.warn("An item with isGeoJSONFeature==false was used to replace an item."),F._callbacks=this._callbacks;let s=y.extend(!0,this.rescale,F.rescale);return F.style=this.style,F.rescale=s,this.emit("item-replaced",{item:F}),F.project.emit("item-replaced",{item:F}),a.Item.prototype.replaceWith.call(this,F),F.selected=this.selected,F.updateFillOpacity(),F.applyRescale(),F.project.view.update(),F}class We extends ke{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 A=new a.Path.Line(new a.Point(0,0),new a.Point(0,-6));p.addChild(A);let R=new a.Path.Circle(new a.Point(0,-9),3);p.addChild(R),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(D){p.scale(1/(p.scaleFactor*D)),p.scaleFactor=1/D},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),A=b.rotate(-c).multiply(p.scaling).rotate(c).subtract(b);this.translate(A);break}}}}class I extends St{constructor(s){super(s);let c=new We({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 C(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 C extends Me{constructor(s){super(s);const c=gt("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 B extends ke{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 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 R(){const H=p.view.getFlipped()?p.view.getRotation():180-p.view.getRotation();p.rotate(-H),p.scale(-1,1),p.rotate(H)}p.addChild(A),this.refreshTextOffset(),A.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(H){p.scale(1/(p.scaleFactor*H)),p.scaleFactor=1/H,A.strokeWidth=0},p.view.getFlipped()&&R();const D=p.view.getFlipped()?180-p.view.getRotation():-p.view.getRotation();p.rotate(D),p.view.on("rotate",H=>{const J=-H.rotatedBy;p.rotate(J)}),p.view.on("flip",()=>{R()}),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),A=b.rotate(-c).multiply(p.scaling).rotate(c).subtract(b);this.translate(A);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,A=s?180-this.textitem.view.getRotation():this.textitem.view.getRotation(),R=new a.Point(p,b).divide(this.textitem.view.getZoom()).rotate(-A);this.textitem.position=this.circle.bounds.center.add(R)}}class L extends St{constructor(c){super(c);ki(this,"onMouseDrag",function(c){this.dragging&&this.item&&(this.item.position=this.item.position.add(c.delta))});this.dragging=!1;let p=new B({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 ee(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 ee extends Me{constructor(s){super(s);let c=this;const p=gt("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 ae extends St{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"}),A=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),R=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),D=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,R,D]),this.project.toolLayer.addChild(p),this.h1=b,this.h2=A,this.v1=R,this.v2=D,this.crosshairTool=p,this.mode=null,this.creating=null,this.setToolbarControl(new ze(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(H){H&&(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)),A=c.view.viewToProject(new a.Point(c.view.viewSize.width,p.y)),R=c.view.viewToProject(new a.Point(p.x,0)),D=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=A,this.h2.segments[1].point=A,this.v1.segments[0].point=R,this.v2.segments[0].point=R,this.v1.segments[1].point=D,this.v2.segments[1].point=D}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,A=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 H=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,ve)=>Y.dot(H)-ve.dot(H))[0],X=H.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 H=s.point.subtract(this.refPoint),J=this.ctrlPoint.subtract(this.refPoint),X=H.project(J);p=this.refPoint.add(X)}else p=s.point}this.setCursorPosition(this.targetLayer.matrix.transform(p));let R=new a.Rectangle(c.rotate(-b,A),p.rotate(-b,A)),D=[R.topLeft,R.topRight,R.bottomRight,R.bottomLeft].map(H=>H.rotate(b,A));this.rectangle.set({segments:D})}onMouseUp(){this.mode="modifying",this.crosshairTool.visible=!1,this.creating=null,this.toolbarControl.updateInstructions("Point:Rectangle")}}class ze extends Me{constructor(s){super(s);const c=gt("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 De extends St{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 Ae(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 D=s.point.subtract(s.downPoint),H=[[1,1],[1,-1],[-1,-1],[-1,1]].map(X=>new a.Point(X[0],X[1]).rotate(b)).sort((X,Y)=>X.dot(D)-Y.dot(D))[0],J=D.project(H);c=s.downPoint.add(J)}else c=s.point;let A=new a.Rectangle(s.downPoint.rotate(-b,p),c.rotate(-b,p)),R=new a.Path.Ellipse(A);R.rotate(b,p),this.item.children[0].set({segments:R.segments}),R.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),R=b.project(A),D=A.angle;if(s.modifiers.command||s.modifiers.control){let H=R.length/A.length,J=R.divide(2),X=this.points.opposite.add(J),Y=J.length,ve=Math.abs(this.points.p1.subtract(this.points.opposite).multiply(H).cross(R.normalize())),se=new a.Path.Ellipse({center:X,radius:[Y,ve]}).rotate(D);this.item.children[0].set({segments:se.segments}),se.remove()}else{let H=R.divide(2),J=this.points.opposite.add(H),X=H.length,Y=Math.abs(this.points.p1.subtract(this.points.opposite).cross(R.normalize())),ve=new a.Path.Ellipse({center:J,radius:[X,Y]}).rotate(D);this.item.children[0].set({segments:ve.segments}),ve.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)),A=this.tool.view.viewToProject(new a.Point(c.x,0)),R=this.tool.view.viewToProject(new a.Point(c.x,this.tool.view.viewSize.height)),D=this.h1,H=this.h2,J=this.v1,X=this.v2;D.segments[0].point=p,H.segments[0].point=p,D.segments[1].point=b,H.segments[1].point=b,J.segments[0].point=A,X.segments[0].point=A,J.segments[1].point=R,X.segments[1].point=R}}class Ae extends Me{constructor(s){super(s);const c=gt("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 qe extends St{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 it(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 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 R=A.location.index+1;A.item.insert(R,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 it extends Me{constructor(s){super(s);const c=gt("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 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 D=this.classList.toggle("active");s.setEraseMode(D)});const R=document.createElement("span");p.appendChild(R),this.undoButton=document.createElement("button"),R.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"),R.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 Pt extends qe{constructor(s){super(s);let c=this,p=this.tool;this.setToolbarControl(new Bt(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=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 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,qe.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 Bt extends Me{constructor(s){super(s),this.linestringTool=s;const c=gt("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 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 Ht extends St{constructor(s){super(s);let c=this;this.ps=this.project.paperScope,this.setToolbarControl(new oi(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=A=>c.onMouseMove(A)},this.extensions.onDeactivate=function(A){c.project.overlay.removeClass("selectable-layer"),c.tool.onMouseMove=null},this.tool.extensions.onKeyUp=function(A){A.key=="escape"&&c.project.paperScope.findSelectedItems().forEach(R=>R.deselect())},this.tool.onMouseUp=function(A){if(p.visible=!1,b.visible=!1,A.downPoint.subtract(A.point).length==0){let R=c.hitTestPoint(A);R&&c._isItemSelectable(R.item)&&R.item.toggle(A.modifiers.control||A.modifiers.meta)}else{let R=c.hitTestArea(A);A.modifiers.control||A.modifiers.meta||c.project.paperScope.findSelectedItems().forEach(D=>D.deselect()),R.forEach(D=>D.select(!0))}},this.tool.onMouseDrag=function(A){p.visible=!0,b.visible=!0;let R=new a.Rectangle(A.downPoint,A.point);p.set({segments:[R.topLeft,R.topRight,R.bottomRight,R.bottomLeft]}),b.set({segments:[R.topLeft,R.topRight,R.bottomRight,R.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:A=>A.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 oi extends Me{constructor(s){super(s),this.dropdown.classList.add("select-dropdown");const c=gt("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 ci extends St{constructor(s){super(s);let c=this;this.ps=this.project.paperScope,this._mode="transform",this._moving=[],this._active=!1,this.setToolbarControl(new pi(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,A)=>{let R=new a.Shape.Rectangle(new a.Point(0,0),new a.Size(p/s,p/s));return R.set({rescale:{size:D=>new a.Size(p/D,p/D)},fillColor:"red",strokeColor:"black"}),c._transformTool.addChild(R),R.anchor=A[0],R.opposite=A[1],R.onMouseDown=function(D){D.stopPropagation()},R.onMouseDrag=function(D){let H=c.targetLayer.getRotation(),J=(c.targetLayer.tiledImage.getFlip(),this.parent.rotation),X=D.delta.rotate(-J),Y=this.parent.corners[this.opposite].position;(c._alwaysRescaleUniformly||D.modifiers.command||D.modifiers.control)&&(X=X.project(this.position.subtract(Y)));let ve=this.position,se=this.position.add(X),re=new a.Rectangle(Y,ve).size,we=new a.Rectangle(Y,se).size.divide(re),me=Y.transform(this.parent.matrix),ne=this.parent.matrix.inverseTransform(this.parent.corners[this.opposite].refPos);ne=c.targetMatrix.inverseTransform(ne);let de=this.parent.matrix.transform(this.parent.boundingRect.position);c.targetMatrix.inverseTransform(de),this.parent.transforming.forEach(pe=>{let Be=new a.Matrix;Be.rotate(-H,ne).scale(we.width,we.height,ne).rotate(H,ne),pe.matrix.append(Be),pe.onTransform&&pe.onTransform("scale",me,J,Be)}),this.parent.boundingRect.scale(we.width,we.height,Y),this.parent.setBounds(!0)},b[A[0]]=R,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),R=b.point.subtract(b.delta).subtract(A),D=b.point.subtract(A).angle-R.angle;this.parent.rotate(D,A),this.parent.transforming.forEach(H=>{let J=c.targetMatrix.inverseTransform(A);H.layer.tiledImage.getFlip()&&(D=-D),H.rotate(D,J),H.onTransform&&H.onTransform("rotate",D,J)}),Object.values(this.parent.corners).forEach(H=>{H.refPos=H.refPos.rotate(D,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(R=>{R.refPos=R.refPos.add(b.original.delta)}),this._transformTool.transforming.forEach(R=>{R.translate(A),R.onTransform&&R.onTransform("translate",A)})},this._transformTool.setBounds=function(b=!1){if(!b){let R=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}),D=new a.Point(R.minX,R.minY),H=new a.Point(R.maxX,R.maxY),J=new a.Rectangle(D,H);this.matrix.reset(),this.boundingRect.set({position:J.center,size:J.size})}let A=this.boundingRect;this.boundingDisplay.set({position:A.position,size:A.bounds.size}),Object.values(this.corners).forEach(R=>{R.position=A.bounds[R.anchor],b||(R.refPos=R.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 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 pi extends Me{constructor(s){super(s),this.dropdown.classList.add("transform-dropdown");const c=gt("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 ui extends St{constructor(s){super(s),this.setToolbarControl(new Ot(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),A=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()),R=this.getSubRaster(A);R.transform(this.layer.matrix.inverted()),R.selectedColor=null;let D={type:"Feature",geometry:{type:"GeometryCollection",properties:{subtype:"Raster",raster:{data:R}},geometries:[c]},properties:{}};c.replaceWith(a.Item.fromGeoJSON(D)),s.refreshItems(),this.remove()}}}}class Ot extends Me{constructor(s){super(s);const c=gt("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 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 fi{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:Ht,transform:ci,style:Vt,rectangle:ae,ellipse:De,point:I,text:L,polygon:qe,brush:He,wand:ti,linestring:Pt,raster:ui},this.tools={};let b=c||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 Tt))return void console.warn(`${A} must inherit from class ToolBase`);let R=A instanceof Tt?A:this.toolConstructors[A],D=this.tools[A]=new R(this.paperScope),H=D.getToolbarControl();H&&this.addToolbarControl(H),D.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||{},A=b.type;b.subtype&&(A+=":"+b.subtype);let R=A===null?"new":A;this.currentMode=R}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 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 Ct{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"):gt("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 ai(F){const s=document.createElement("template");return s.innerHTML=F,s.content.children.length===1?s.content.children[0]:s.content.children}class yi{constructor(s,c){this.paperItem=s;let p=this._element=ai(`
|
|
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
|
-
`);c.iconFactory?c.iconFactory.convertFaIcons(p):Ft(p),this.paperItem.FeatureUI=this,this._editableName=new
|
|
1553
|
+
`);c.iconFactory?c.iconFactory.convertFaIcons(p):Ft(p),this.paperItem.FeatureUI=this,this._editableName=new Ct,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 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,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),A=1.5,R=c.imageToViewportCoordinates(p.center.x-p.width/A,p.center.y-p.height/A),D=c.imageToViewportCoordinates(2*p.width/A,2*p.height/A),H=new y.Rect(R.x,R.y,D.x,D.y),J=c.getBounds();H.width>J.width||H.height>J.height?c.fitBounds(H,s):c.panTo(b,s)}}class Pi{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 ke{constructor(s){super({type:"Feature",geometry:null}),this.paperItem=new a.Path,this.paperItem.style=new a.Style(s),this.paperItem.initializeGeoJSONFeature=Fi}static supportsGeoJSONType(s,c=null){return s.toLowerCase()===null&&c===null}getGeoJSONType(){return{type:null}}getCoordinates(){return[]}getProperties(){return this.paperItem.style}}function Fi(F,s){let c={geometry:{type:F,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=ai(`
|
|
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
|
-
`),c.iconFactory?c.iconFactory.convertFaIcons(this.element):Ft(this.element),this._editableName=new
|
|
1572
|
+
`),c.iconFactory?c.iconFactory.convertFaIcons(this.element):Ft(this.element),this._editableName=new Ct({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 Pi({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,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},A=new xi(b);return this.group.addChild(A.paperItem),A.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 Ri 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",R=>this._onFeatureCollectionAdded(R)),this.element=function(){let R=ai(`
|
|
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>`),D="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(H){let J=16*Math.random()|0;return(H=="x"?J:3&J|8).toString(16)});return R.dataset.uiId=D,R}(),this.iconFactory=new _t(this.element.querySelector(".icon-factory-container")),this.iconFactory.convertFaIcons(this.element),this.element.querySelector(".new-feature-collection").addEventListener("click",R=>{R.stopPropagation(),R.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 R=this.element.querySelectorAll(".annotation-ui-feature-collections .feature-collection.annotation-hidden");R.length>0?R.forEach(D=>{D.querySelectorAll('[data-action="show"]').forEach(H=>H.dispatchEvent(new Event("click",{bubbles:!0})))}):this.element.querySelectorAll('.annotation-ui-feature-collections .feature-collection:not(.hidden) [data-action="hide"]').forEach(D=>D.dispatchEvent(new Event("click",{bubbles:!0})))}),this._dragAndDrop=new Pi({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(R=>{Ke.get(R,"featureCollection").group.bringToFront()})}}),this.element.addEventListener("selected",function(R){R.target.matches(".feature")&&(R.stopPropagation(),this.classList.add("selected"),this.scrollIntoView({block:"nearest"}))}),this.element.addEventListener("deselected",function(R){R.target.matches(".feature")&&(R.stopPropagation(),this.classList.remove("selected"))}),this.element.addEventListener("click",function(R){R.target.matches(".toggle-list")&&(this.closest(".features").classList.toggle("collapsed"),R.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(R){let D=Array.from(p.element.querySelectorAll(".feature-collection")).reduce(function(H,J){return J.classList.contains("selected")?H.selected.push(J):J.matches(":hover,.svg-hovered")?H.hover.push(J):H.other.push(J),H},{selected:[],hover:[],other:[]});D.selected.length>0?(D.selected.forEach(function(H){let J=1*R,X=Ke.get(H,"featureCollection");X&&X.ui.setOpacity(J)}),D.hover.concat(D.other).forEach(function(H){let J=.25*R,X=Ke.get(H,"featureCollection");X&&X.ui.setOpacity(J)})):D.hover.length>0?(D.hover.forEach(function(H){let J=1*R,X=Ke.get(H,"featureCollection");X&&X.ui.setOpacity(J)}),D.other.forEach(function(H){let J=.25*R,X=Ke.get(H,"featureCollection");X&&X.ui.setOpacity(J)})):D.other.forEach(function(H){let J=1*R,X=Ke.get(H,"featureCollection");X&&X.ui.setOpacity(J)})})(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 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 Bi{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 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 R=document.createElement("div");A.appendChild(R),R.style.padding="0.3em 0.6em",R.style.backgroundColor="rgb(233, 233, 233)",R.style.borderColor="rgb(220, 220, 220)",R.style.borderRadius="2px",R.style.display="flex";const D=document.createElement("label");R.appendChild(D),D.innerText=c,D.style.fontWeight="bold",D.style.flexGrow=1;const H=document.createElement("button");H.innerText="x",H.style.marginLeft="1em",R.appendChild(H),H.addEventListener("click",()=>this.hide());const J=document.createElement("div");A.appendChild(J),J.innerHTML=s,b.addEventListener("click",()=>this.hide()),this.element=p,this.container=J,this.background=b,this.foreground=A,this.topbar=R,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 Ni{constructor(s,c){let p=this;function b(H){var X;let J=((X=s.viewer.world.getItemAt(0))==null?void 0:X.source.name)||"";return J.length>0&&(J+=H),J}function A(){var H,J;(H=p.element.querySelector(".featurecollection-list"))==null||H.replaceChildren(),(J=p.element.querySelector(".finalize"))==null||J.replaceChildren()}function R(H){let J=p.element.querySelector(".featurecollection-list");return J.replaceChildren(),H.forEach(X=>{let Y=X.label||X.displayName;const
|
|
1591
|
+
</div>`),D="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(H){let J=16*Math.random()|0;return(H=="x"?J:3&J|8).toString(16)});return R.dataset.uiId=D,R}(),this.iconFactory=new _t(this.element.querySelector(".icon-factory-container")),this.iconFactory.convertFaIcons(this.element),this.element.querySelector(".new-feature-collection").addEventListener("click",R=>{R.stopPropagation(),R.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 R=this.element.querySelectorAll(".annotation-ui-feature-collections .feature-collection.annotation-hidden");R.length>0?R.forEach(D=>{D.querySelectorAll('[data-action="show"]').forEach(H=>H.dispatchEvent(new Event("click",{bubbles:!0})))}):this.element.querySelectorAll('.annotation-ui-feature-collections .feature-collection:not(.hidden) [data-action="hide"]').forEach(D=>D.dispatchEvent(new Event("click",{bubbles:!0})))}),this._dragAndDrop=new Pi({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(R=>{Ke.get(R,"featureCollection").group.bringToFront()})}}),this.element.addEventListener("selected",function(R){R.target.matches(".feature")&&(R.stopPropagation(),this.classList.add("selected"),this.scrollIntoView({block:"nearest"}))}),this.element.addEventListener("deselected",function(R){R.target.matches(".feature")&&(R.stopPropagation(),this.classList.remove("selected"))}),this.element.addEventListener("click",function(R){R.target.matches(".toggle-list")&&(this.closest(".features").classList.toggle("collapsed"),R.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(R){let D=Array.from(p.element.querySelectorAll(".feature-collection")).reduce(function(H,J){return J.classList.contains("selected")?H.selected.push(J):J.matches(":hover,.svg-hovered")?H.hover.push(J):H.other.push(J),H},{selected:[],hover:[],other:[]});D.selected.length>0?(D.selected.forEach(function(H){let J=1*R,X=Ke.get(H,"featureCollection");X&&X.ui.setOpacity(J)}),D.hover.concat(D.other).forEach(function(H){let J=.25*R,X=Ke.get(H,"featureCollection");X&&X.ui.setOpacity(J)})):D.hover.length>0?(D.hover.forEach(function(H){let J=1*R,X=Ke.get(H,"featureCollection");X&&X.ui.setOpacity(J)}),D.other.forEach(function(H){let J=.25*R,X=Ke.get(H,"featureCollection");X&&X.ui.setOpacity(J)})):D.other.forEach(function(H){let J=1*R,X=Ke.get(H,"featureCollection");X&&X.ui.setOpacity(J)})})(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 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 Bi{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 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 R=document.createElement("div");A.appendChild(R),R.style.padding="0.3em 0.6em",R.style.backgroundColor="rgb(233, 233, 233)",R.style.borderColor="rgb(220, 220, 220)",R.style.borderRadius="2px",R.style.display="flex";const D=document.createElement("label");R.appendChild(D),D.innerText=c,D.style.fontWeight="bold",D.style.flexGrow=1;const H=document.createElement("button");H.innerText="x",H.style.marginLeft="1em",R.appendChild(H),H.addEventListener("click",()=>this.hide());const J=document.createElement("div");A.appendChild(J),J.innerHTML=s,b.addEventListener("click",()=>this.hide()),this.element=p,this.container=J,this.background=b,this.foreground=A,this.topbar=R,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 Ni{constructor(s,c){let p=this;function b(H){var X;let J=((X=s.viewer.world.getItemAt(0))==null?void 0:X.source.name)||"";return J.length>0&&(J+=H),J}function A(){var H,J;(H=p.element.querySelector(".featurecollection-list"))==null||H.replaceChildren(),(J=p.element.querySelector(".finalize"))==null||J.replaceChildren()}function R(H){let J=p.element.querySelector(".featurecollection-list");return J.replaceChildren(),H.forEach(X=>{let Y=X.label||X.displayName;const ve=document.createElement("div");J.appendChild(ve);const se=document.createElement("input");ve.appendChild(se),se.setAttribute("type","checkbox"),se.setAttribute("checked","true"),Ke.set(se,"fc",X);const re=document.createElement("label");re.innerText=Y,ve.appendChild(re)}),J}function D(H,J,X,Y){function ve(me,ne,de){me&&(Object.keys(localStorage).includes(ne)?de.classList.add("key-exists"):de.classList.remove("key-exists"))}const se=p.element.querySelector(".finalize"),re=document.createElement("button");let we;if(re.innerText=H,se.appendChild(re),J){const me=document.createElement("div"),ne=document.createElement("div");me.appendChild(ne),se.appendChild(me),ne.innerText=J,we=new Ct,we.setText(X),me.appendChild(we.element),Y&&me.classList.add("localstorage-key-test"),we.onChanged=de=>{re.setAttribute("data-label",de),ve(Y,de,me)},ve(Y,X,me)}return se.appendChild(re),re.setAttribute("data-label",X),re}this.dialog=new Bi({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 H=document.createElement("input");H.type="file",H.accept="text/geojson,.geojson,text/json,.json",H.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 me=Array.from(new Set(Y.map(we=>we.type)));if(me.length==0&&p.element.find(".featurecollection-list").text("Bad file - no Features or FeatureCollections were found"),me.length>1)return void alert("Bad file - valid geoJSON consists of an array of objects with single type (FeatureCollection or Feature)");me[0]=="Feature"&&(Y=[{type:"FeatureCollection",features:Y,properties:{label:J.name}}]),R(Y);const se=document.createElement("button");p.element.querySelector(".finalize").appendChild(se),se.innerText="Replace existing layers",se.addEventListener("click",()=>s.addFeatureCollections(Y,!0));const re=document.createElement("button");p.element.querySelector(".finalize").appendChild(re),re.innerText="Add new layers",re.addEventListener("click",()=>s.addFeatureCollections(Y,!1))},X.readAsText(J)}),H.click()}),this.element.querySelector('button[data-action="geojson-save"]').addEventListener("click",function(){A();let H=R(s.toGeoJSON());D("Create file","Choose file name:",b("-")+"FeatureCollections.json").addEventListener("click",function(){var we;(we=this.parentElement.querySelector(".download-link"))==null||we.remove();let J=Array.from(H.querySelectorAll("input:checked")).map(ge=>Ke.get(ge,"fc")),X=JSON.stringify(J),Y=new Blob([X],{type:"text/json"}),me=this.getAttribute("data-label");const se=document.createElement("div");se.classList.add("download-link"),this.parentElement.insertBefore(se,this.nextSibling);const re=document.createElement("a");re.href=window.URL.createObjectURL(Y),re.download=me,re.target="_blank",re.innerText="Download file",se.appendChild(re)})}),this.element.querySelector('button[data-action="svg-export"]').addEventListener("click",function(){A();let H=R(s.getFeatureCollectionGroups());D("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(H.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(ge){Y.project.activeLayer.addChildren(ge.layer.clone({insert:!1,deep:!0}).children)});let me=new Blob([Y.project.exportSVG({asString:!0,bounds:"content"})],{type:"text/svg"}),se=this.getAttribute("data-label");const re=document.createElement("div");re.classList.add("download-link"),this.parentElement.insertBefore(re,this.nextSibling);const we=document.createElement("a");we.href=window.URL.createObjectURL(me),we.download=se,we.target="_blank",we.innerText="Download file",re.appendChild(we)}})}),this.element.querySelector('button[data-action="png-export"]').addEventListener("click",function(){A();let H=R(s.getFeatureCollectionGroups());D("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(H.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(we){Y.project.activeLayer.addChildren(we.layer.clone({insert:!1,deep:!0}).children)});let me=this.getAttribute("data-label");const se=document.createElement("div");se.classList.add("download-link"),this.parentElement.insertBefore(se,this.nextSibling);const re=document.createElement("a");re.href=Y.project.activeLayer.rasterize({insert:!1}).toDataURL(),re.download=me,re.target="_blank",re.innerText="Download file",se.appendChild(re)}})}),this.element.querySelector('button[data-action="ls-store"]').addEventListener("click",function(){A();let H=R(s.toGeoJSON());D("Save data","Local storage key:",b(),!0).addEventListener("click",function(){let J=Array.from(H.querySelectorAll("input:checked")).map(function(me){return Ke.get(me,"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(){A();let H=[],J=b(),X=Object.keys(window.localStorage),Y=p.element.querySelector(".featurecollection-list");Y.innerText="";const me=document.createElement("div");me.classList.add("localstorage-key-list"),Y.appendChild(me),X.sort((se,re)=>se.localeCompare(re)).forEach(se=>{const re=document.createElement("div");re.classList.add("localstorage-key"),re.style.order=se==J?0:1,re.innerText=se,me.appendChild(re)}),me.querySelectorAll(".localstorage-key").forEach(se=>se.addEventListener("click",function(){let re=window.localStorage.getItem(this.textContent);if(!re)return void alert(`No data found in local storage for key=${this.textContent}`);try{H=JSON.parse(re)}catch{return void alert("Bad data - JSON could not be parsed")}R(H);const we=document.createElement("button");we.innerText="Replace existing layers",we.addEventListener("click",()=>s.addFeatureCollections(H,!0)),p.element.querySelector(".finalize").appendChild(we);const ge=document.createElement("button");ge.innerText="Add new layers",ge.addEventListener("click",()=>s.addFeatureCollections(H,!1)),p.element.querySelector(".finalize").appendChild(ge)}))})}show(){this.dialog.show()}hide(){this.dialog.hide()}toggle(){this.dialog.toggle()}}class Mi{constructor(s,c){var b,A,R,D;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 fi(s.overlay.paperScope,c.tools)),this._fileDialog=new Ni(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 Ri(s,c.addFileButton)),this._addToViewer(),c.autoOpen?((b=this._layerUI)==null||b.show(),(A=this._toolbar)==null||A.show()):((R=this._layerUI)==null||R.hide(),(D=this._toolbar)==null||D.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"),A=document.createElement("div"),R=document.createElement("div"),D=document.createElement("div");Object.entries({"annotation-ui-grid":s,top:c,bottom:p,center:b,left:A,right:R,"resize-right":D}).forEach(([re,we])=>we.classList.add(re)),[b,R,A,c,p].forEach(re=>s.appendChild(re)),b.appendChild(this._viewer.container),R.appendChild(D),R.appendChild(this.element),c.appendChild(this._toolbar.element);const J=this.element,X=document.querySelector("body");let Y;function me(re){if(D.classList.contains("resizing")){if(re.movementX){const we=J.getBoundingClientRect();J.style.width=we.right-re.x-Y+"px"}re.preventDefault()}}function se(re){document.removeEventListener("mousemove",me),document.removeEventListener("mouseleave",se),document.removeEventListener("mouseup",se),X.classList.remove(".annotation-ui-noselect"),D.classList.remove("resizing")}D.addEventListener("mousedown",function(re){this.classList.add("resizing"),X.classList.add(".annotation-ui-noselect"),document.addEventListener("mousemove",me),document.addEventListener("mouseleave",se),document.addEventListener("mouseup",se),Y=J.getBoundingClientRect().left-re.x})}}function Hi(){this._computedFillOpacity=this.hierarchy.filter(F=>"fillOpacity"in F&&(F._multiplyOpacity||F==this)).reduce((F,s)=>F*s.fillOpacity,1),this.fillColor&&(this.fillColor.alpha=this._computedFillOpacity)}a.View.prototype.getZoom=function(){var F=this._decompose().scaling;return(Math.abs(F.x)+Math.abs(F.y))/2},a.CanvasView.prototype._setElementSize.base=function(F,s){var c=this._element;F=Math.round(F),s=Math.round(s),c&&(c.width!==F&&(c.width=F),c.height!==s&&(c.height=s))},a.View.prototype.setRotation=function(F,s){let c=F-(this._rotation||0);this.rotate(c,s),this._rotation=y.positiveModulo(F,360),this.emit("rotate",{rotatedBy:c,currentRotation:this._rotation,center:s})},a.View.prototype.setFlipped=function(F,s){F!==this.getFlipped()&&(this.rotate(-s),this.scale(-1,1),this.rotate(s),this.emit("flip",{flipped:F}))},a.View.prototype.getFlipped=function(F){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(F=>F.descendants).flat():[]).concat(this.isGeoJSONFeature?[this]:[])}}),Object.defineProperty(a.Item.prototype,"fillOpacity",{set:function(F){(this.style||this.defaultStyle).fillOpacity=F,this.descendants.forEach(s=>s.updateFillOpacity())},get:function(){return(this.style||this.defaultStyle).fillOpacity}}),Object.defineProperty(a.Item.prototype,"strokeOpacity",{set:function(F){(this.style||this.defaultStyle).strokeOpacity=F,this.descendants.forEach(s=>s.updateStrokeOpacity())},get:function(){return(this.style||this.defaultStyle).strokeOpacity}}),Object.defineProperty(a.Item.prototype,"rescale",{set:function(F){this._style.rescale=F},get:function(){return this._style.rescale}}),Object.defineProperty(a.Item.prototype,"stroke",{get:function(){return this._stroke},set:function(F){this._stroke=F,this.strokeWidth=F/(this.view.getZoom()*this.hierarchy.filter(s=>s.tiledImage)[0].scaling.x)}}),Object.defineProperty(a.Style.prototype,"fillOpacity",{set:function(F){this._fillOpacity=this._values.fillOpacity=F},get:function(){return this._fillOpacity===void 0?1:this._fillOpacity}}),Object.defineProperty(a.Style.prototype,"strokeOpacity",{set:function(F){this._strokeOpacity=this._values.strokeOpacity=F},get:function(){return this._strokeOpacity===void 0?1:this._strokeOpacity}}),Object.defineProperty(a.Style.prototype,"rescale",{set:function(F){this._rescale=this._values.rescale=F},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(F){(this.style||this.defaultStyle).fillOpacity=F,this.descendants.forEach(s=>s.updateFillOpacity())},get:function(){return(this.style||this.defaultStyle).fillOpacity}}),Object.defineProperty(a.View.prototype,"fillOpacity",{set:function(F){this._fillOpacity=F,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(F){(this.style||this.defaultStyle).strokeOpacity=F,this.descendants.forEach(s=>s.updateStrokeOpacity())},get:function(){return(this.style||this.defaultStyle).strokeOpacity}}),a.Item.prototype.updateFillOpacity=Hi,a.Item.prototype.updateStrokeOpacity=function(){this.strokeColor&&(this.strokeColor.alpha=this.hierarchy.filter(F=>"strokeOpacity"in F&&(F._multiplyOpacity||F==this)).reduce((F,s)=>F*s.strokeOpacity,1))},a.Project.prototype.updateFillOpacity=Hi,a.View.prototype._multiplyOpacity=!0,a.Style.prototype.set=function(F){var s=F instanceof a.Style,c=s?F._values:F;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 F=this,s=F.rescale;if(s){let c=F.view.scaling.x*F.layer.scaling.x;Object.keys(s).forEach(function(p){typeof s[p]=="function"?F[p]=s[p](c):Array.isArray(s[p])?F[p]=s[p].map(function(b){return b/c}):F[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 Li={findItemBoundsCollisions:function(F,s,c){function p(R){for(var D=new Array(R.length),H=0;H<R.length;H++){var J=R[H].getBounds();D[H]=[J.left,J.top,J.right,J.bottom]}return D}var b=p(F),A=s&&s!==F?p(s):b;return this.findBoundsCollisions(b,A,c||0)},findCurveBoundsCollisions:function(F,s,c,p){function b(me){for(var se=Math.min,re=Math.max,we=new Array(me.length),ge=0;ge<me.length;ge++){var ne=me[ge];we[ge]=[se(ne[0],ne[2],ne[4],ne[6]),se(ne[1],ne[3],ne[5],ne[7]),re(ne[0],ne[2],ne[4],ne[6]),re(ne[1],ne[3],ne[5],ne[7])]}return we}var A=b(F),R=s&&s!==F?b(s):A;if(p){for(var D=this.findBoundsCollisions(A,R,c||0,!1,!0),H=this.findBoundsCollisions(A,R,c||0,!0,!0),J=[],X=0,Y=D.length;X<Y;X++)J[X]={hor:D[X],ver:H[X]};return J}return this.findBoundsCollisions(A,R,c||0)},findBoundsCollisions:function(F,s,c,p,b){var A=!s||F===s,R=A?F:F.concat(s),D=F.length,H=R.length;function J(Je,wt,Ct){for(var ut=0,Bt=Je.length;ut<Bt;){var Yt=Bt+ut>>>1;R[Je[Yt]][wt]<Ct?ut=Yt+1:Bt=Yt}return ut-1}for(var X=p?1:0,Y=X+2,me=p?0:1,se=me+2,re=new Array(H),we=0;we<H;we++)re[we]=we;re.sort(function(Je,wt){return R[Je][X]-R[wt][X]});var ge=[],ne=new Array(D);for(we=0;we<H;we++){var ue=re[we],de=R[ue],Be=A?ue:ue-D,Le=ue<D,Se=A||!Le,Ge=Le?[]:null;if(ge.length){var Ue=J(ge,Y,de[X]-c)+1;if(ge.splice(0,Ue),A&&b){Ge=Ge.concat(ge);for(var We=0;We<ge.length;We++)ne[st=ge[We]].push(Be)}else{var ze=de[se],it=de[me];for(We=0;We<ge.length;We++){var st=ge[We],at=R[st],rt=st<D,mt=A||st>=D;(b||(Le&&mt||Se&&rt)&&ze>=at[me]-c&&it<=at[se]+c)&&(Le&&mt&&Ge.push(A?st:st-D),Se&&rt&&ne[st].push(Be))}}}if(Le&&(F===s&&Ge.push(ue),ne[ue]=Ge),ge.length){var pt=J(ge,Y,de[Y]);ge.splice(pt+1,0,ue)}else ge.push(ue)}for(we=0;we<ne.length;we++){var ot=ne[we];ot&&ot.sort(function(Je,wt){return Je-wt})}return ne}};const Ui=a.PathItem,Ut=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 F=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(ne){return ne._children||[ne]}function A(ne,ue){var de=ne.clone(!1).reduce({simplify:!0}).transform(null,!0,!0);if(ue){for(var Be=b(de),Le=0,Se=Be.length;Le<Se;Le++)(ne=Be[Le])._closed||ne.isEmpty()||(ne.closePath(f.EPSILON),ne.getFirstSegment().setHandleIn(0,0),ne.getLastSegment().setHandleOut(0,0));de=de.resolveCrossings().reorient(de.getFillRule()==="nonzero",!0)}return de}function R(ne,ue,de,Be,Le){var Se=new e(i.NO_INSERT);return Se.addChildren(ne,!0),Se=Se.reduce({simplify:ue}),Le&&Le.insert==0||Se.insertAbove(Be&&de.isSibling(Be)&&de.getIndex()<Be.getIndex()?Be:de),Se.copyAttributes(de,!0),Se}function D(ne){return ne.hasOverlap()||ne.isCrossing()}function H(ne,ue,de,Be){if(Be&&(Be.trace==0||Be.stroke)&&/^(subtract|intersect)$/.test(de))return J(ne,ue,de);var Le=A(ne,!0),Se=ue&&ne!==ue&&A(ue,!0),Ge=p[de];Ge[de]=!0,Se&&(Ge.subtract||Ge.exclude)^Se.isClockwise()^Le.isClockwise()&&Se.reverse();var Ue,We=se(d.expand(Le.getIntersections(Se,D))),ze=b(Le),it=Se&&b(Se),st=[],at=[];function rt(Pt){for(var Kt=0,Jt=Pt.length;Kt<Jt;Kt++){var Xt=Pt[Kt];t.push(st,Xt._segments),t.push(at,Xt.getCurves()),Xt._overlapsOnly=!0}}function mt(Pt){for(var Kt=[],Jt=0,Xt=Pt&&Pt.length;Jt<Xt;Jt++)Kt.push(at[Pt[Jt]]);return Kt}if(We.length){rt(ze),it&&rt(it);for(let Pt=We.length-1;Pt>-1;Pt--)st[Pt].curve.length<1e-7&&(st[Pt].remove(),st.splice(Pt,1),at.splice(Pt,1));for(var pt=new Array(at.length),ot=0,Je=at.length;ot<Je;ot++)pt[ot]=at[ot].getValues();var wt=Li.findCurveBoundsCollisions(pt,pt,0,!0),Ct={};for(ot=0;ot<at.length;ot++){var ut=at[ot],Bt=ut._path._id;(Ct[Bt]=Ct[Bt]||{})[ut.getIndex()]={hor:mt(wt[ot].hor),ver:mt(wt[ot].ver)}}for(ot=0,Je=We.length;ot<Je;ot++)we(We[ot]._segment,Le,Se,Ct,Ge);for(ot=0,Je=st.length;ot<Je;ot++){var Yt=st[ot],Lt=Yt._intersection;Yt._winding||we(Yt,Le,Se,Ct,Ge),Lt&&Lt._overlap||(Yt._path._overlapsOnly=!1)}Ue=ge(st,Ge)}else Ue=me(it?ze.concat(it):ze.slice(),function(Pt){return!!Ge[Pt]});return R(Ue,!0,ne,ue,Be)}function J(ne,ue,de){var Be=A(ne),Le=A(ue),Se=Be.getIntersections(Le,D),Ge=de==="subtract",Ue=de==="divide",We={},ze=[];function it(rt){if(!We[rt._id]&&(Ue||Le.contains(rt.getPointAt(rt.getLength()/2))^Ge))return ze.unshift(rt),We[rt._id]=!0}for(var st=Se.length-1;st>=0;st--){var at=Se[st].split();at&&(it(at)&&at.getFirstSegment().setHandleIn(0,0),Be.getLastSegment().setHandleOut(0,0))}return it(Be),R(ze,!1,ne,ue)}function X(ne,ue){for(var de=ne;de;){if(de===ue)return;de=de._previous}for(;ne._next&&ne._next!==ue;)ne=ne._next;if(!ne._next){for(;ue._previous;)ue=ue._previous;ne._next=ue,ue._previous=ne}}function Y(ne){for(var ue=ne.length-1;ue>=0;ue--)ne[ue].clearHandles()}function me(ne,ue,de){var Be=ne&&ne.length;if(Be){var Le=t.each(ne,function(wt,Ct){this[wt._id]={container:null,winding:wt.isClockwise()?1:-1,index:Ct}},{}),Se=ne.slice().sort(function(wt,Ct){return c(Ct.getArea())-c(wt.getArea())}),Ge=Se[0],Ue=Li.findItemBoundsCollisions(Se,null,f.GEOMETRIC_EPSILON);de==null&&(de=Ge.isClockwise());for(var We=0;We<Be;We++){var ze=Se[We],it=Le[ze._id],st=0,at=Ue[We];if(at){for(var rt=null,mt=at.length-1;mt>=0;mt--)if(at[mt]<We){rt=rt||ze.getInteriorPoint();var pt=Se[at[mt]];if(pt.contains(rt)){var ot=Le[pt._id];st=ot.winding,it.winding+=st,it.container=ot.exclude?ot.container:pt;break}}}if(ue(it.winding)===ue(st))it.exclude=!0,ne[it.index]=null;else{var Je=it.container;ze.setClockwise(Je?!Je.isClockwise():de)}}}return ne}function se(ne,ue,de){var Be,Le,Se,Ge=ue&&[],Ue=f.CURVETIME_EPSILON,We=1-Ue,ze=!1,it=de||[],st=de&&{};function at(Jt){return Jt._path._id+"."+Jt._segment1._index}for(var rt=(de&&de.length)-1;rt>=0;rt--)(mt=de[rt])._path&&(st[at(mt)]=!0);for(rt=ne.length-1;rt>=0;rt--){var mt,pt,ot=ne[rt],Je=ot._time,wt=Je,Ct=ue&&!ue(ot);if((mt=ot._curve)&&(mt!==Le?(ze=!mt.hasHandles()||st&&st[at(mt)],Be=[],Se=null,Le=mt):Se>=Ue&&(Je/=Se)),Ct)Be&&Be.push(ot);else{if(ue&&Ge.unshift(ot),Se=wt,Je<Ue)pt=mt._segment1;else if(Je>We)pt=mt._segment2;else{var ut=mt.divideAtTime(Je,!0);ze&&it.push(mt,ut),pt=ut._segment1;for(var Bt=Be.length-1;Bt>=0;Bt--){var Yt=Be[Bt];Yt._time=(Yt._time-Je)/(1-Je)}}ot._setSegment(pt);var Lt=pt._intersection,Pt=ot._intersection;if(Lt){X(Lt,Pt);for(var Kt=Lt;Kt;)X(Kt._intersection,Lt),Kt=Kt._next}else pt._intersection=Pt}}return de||Y(it),Ge||ne}function re(ne,ue,de,Be,Le){var Se,Ge,Ue=Array.isArray(ue)?ue:ue[de?"hor":"ver"],We=de?1:0,ze=1^We,it=[ne.x,ne.y],st=it[We],at=it[ze],rt=1e-6,mt=st-1e-9,pt=st+1e-9,ot=0,Je=0,wt=0,Ct=0,ut=!1,Bt=!1,Yt=1,Lt=[];function Pt(Ht){var gi=Ht[ze+0],li=Ht[ze+6];if(!(at<F(gi,li)||at>s(gi,li))){var ui=Ht[We+0],Ci=Ht[We+2],Ai=Ht[We+4],Ti=Ht[We+6];if(gi!==li){var Ei=at===gi?0:at===li||mt>s(ui,Ci,Ai,Ti)||pt<F(ui,Ci,Ai,Ti)?1:l.solveCubic(Ht,ze,at,Lt,0,1)>0?Lt[0]:1,vi=Ei===0?ui:Ei===1?Ti:l.getPoint(Ht,Ei)[de?"y":"x"],_i=gi>li?1:-1,Di=Se[ze]>Se[ze+6]?1:-1,Si=Se[We+6];return at!==gi?(vi<mt?wt+=_i:vi>pt?Ct+=_i:ut=!0,vi>st-rt&&vi<st+rt&&(Yt/=2)):(_i!==Di?ui<mt?wt+=_i:ui>pt&&(Ct+=_i):ui!=Si&&(Si<pt&&vi>pt?(Ct+=_i,ut=!0):Si>mt&&vi<mt&&(wt+=_i,ut=!0)),Yt/=4),Se=Ht,!Le&&vi>mt&&vi<pt&&l.getTangent(Ht,Ei)[de?"x":"y"]===0&&re(ne,ue,!de,Be,!0)}(ui<pt&&Ti>mt||Ti<pt&&ui>mt)&&(ut=!0)}}function Kt(Ht){var gi=Ht[ze+0],li=Ht[ze+2],ui=Ht[ze+4],Ci=Ht[ze+6];if(at<=s(gi,li,ui,Ci)&&at>=F(gi,li,ui,Ci)){for(var Ai,Ti=Ht[We+0],Ei=Ht[We+2],vi=Ht[We+4],_i=Ht[We+6],Di=mt>s(Ti,Ei,vi,_i)||pt<F(Ti,Ei,vi,_i)?[Ht]:l.getMonoCurves(Ht,de),Si=0,zi=Di.length;Si<zi;Si++)if(Ai=Pt(Di[Si]))return Ai}}for(var Jt=0,Xt=Ue.length;Jt<Xt;Jt++){var ii,Qt=Ue[Jt],Gt=Qt._path,wi=Qt.getValues();if(!(Jt&&Ue[Jt-1]._path===Gt||(Se=null,Gt._closed||(Ge=l.getValues(Gt.getLastCurve().getSegment2(),Qt.getSegment1(),null,!Be))[ze]!==Ge[ze+6]&&(Se=Ge),Se))){Se=wi;for(var mi=Gt.getLastCurve();mi&&mi!==Qt;){var bi=mi.getValues();if(bi[ze]!==bi[ze+6]){Se=bi;break}mi=mi.getPrevious()}}if(ii=Kt(wi))return ii;if(Jt+1===Xt||Ue[Jt+1]._path!==Gt){if(Ge&&(ii=Kt(Ge)))return ii;!ut||wt||Ct||(wt=Ct=Gt.isClockwise(Be)^de?1:-1),ot+=wt,Je+=Ct,wt=Ct=0,ut&&(Bt=!0,ut=!1),Ge=null}}return ot=c(ot),Je=c(Je),{winding:s(ot,Je),windingL:ot,windingR:Je,quality:Yt,onPath:Bt}}function we(ne,ue,de,Be,Le){var Se=[],Ge=ne,Ue=0;do{if(ot=ne.getCurve()){var We=ot.getLength();Se.push({segment:ne,curve:ot,length:We}),Ue+=We}ne=ne.getNext()}while(ne&&!ne._intersection&&ne!==Ge);for(var ze=[.5,.25,.75],it={winding:0,quality:-1},st=0;st<ze.length&&it.quality<.5;st++){We=Ue*ze[st];for(var at=0,rt=Se.length;at<rt;at++){var mt=Se[at],pt=mt.length;if(We<=pt){var ot,Je=(ot=mt.curve)._path,wt=Je._parent,Ct=wt instanceof e?wt:Je,ut=f.clamp(ot.getTimeAt(We),.001,.999),Bt=ot.getPointAtTime(ut),Yt=c(ot.getTangentAtTime(ut).y)<Math.SQRT1_2,Lt=null;if(Le.subtract&&de){var Pt=(Ct===ue?de:ue)._getWinding(Bt,Yt,!0);if(Ct===ue&&Pt.winding||Ct===de&&!Pt.winding){if(Pt.quality<1)continue;Lt={winding:0,quality:1}}}(Lt=Lt||re(Bt,Be[Je._id][ot.getIndex()],Yt,!0)).quality>it.quality&&(it=Lt);break}We-=pt}}for(at=Se.length-1;at>=0;at--)Se[at].segment._winding=it}function ge(ne,ue){var de,Be=[];function Le(ii){var Qt;return!(!ii||ii._visited||ue&&(!ue[(Qt=ii._winding||{}).winding]||ue.unite&&Qt.winding===2&&Qt.windingL&&Qt.windingR))}function Se(ii){if(ii){for(var Qt=0,Gt=de.length;Qt<Gt;Qt++)if(ii===de[Qt])return!0}return!1}function Ge(ii){for(var Qt=ii._segments,Gt=0,wi=Qt.length;Gt<wi;Gt++)Qt[Gt]._visited=!0}function Ue(ii,Qt){var Gt=ii._intersection,wi=Gt,mi=[];function bi(Ht,gi){for(;Ht&&Ht!==gi;){var li=Ht._segment,ui=li&&li._path;if(ui){var Ci=li.getNext()||ui.getFirstSegment(),Ai=Ci._intersection;li!==ii&&(Se(li)||Se(Ci)||Ci&&Le(li)&&(Le(Ci)||Ai&&Le(Ai._segment)))&&mi.push(li),Qt&&de.push(li)}Ht=Ht._next}}if(Qt&&(de=[ii]),Gt){for(bi(Gt);Gt&&Gt._previous;)Gt=Gt._previous;bi(Gt,wi)}return mi}ne.sort(function(ii,Qt){var Gt=ii._intersection,wi=Qt._intersection,mi=!(!Gt||!Gt._overlap),bi=!(!wi||!wi._overlap),Ht=ii._path,gi=Qt._path;return mi^bi?mi?1:-1:!Gt^!wi?Gt?1:-1:Ht!==gi?Ht._id-gi._id:ii._index-Qt._index});for(var We=0,ze=ne.length;We<ze;We++){var it,st,at,rt=ne[We],mt=Le(rt),pt=null,ot=!1,Je=!0,wt=[];if(mt&&rt._path._overlapsOnly){var Ct=rt._path,ut=rt._intersection._segment._path;Ct.compare(ut)&&(Ct.getArea()&&Be.push(Ct.clone(!1)),Ge(Ct),Ge(ut),mt=!1)}for(;mt;){var Bt=!pt,Yt=Ue(rt,Bt),Lt=Yt.shift(),Pt=!(ot=!Bt&&(Se(rt)||Se(Lt)))&≪if(Bt&&(pt=new Ut(i.NO_INSERT),it=null),ot){(rt.isFirst()||rt.isLast())&&(Je=rt._path._closed),rt._visited=!0;break}if(Pt&&it&&(wt.push(it),it=null),it||(Pt&&Yt.push(rt),it={start:pt._segments.length,crossings:Yt,visited:st=[],handleIn:at}),Pt&&(rt=Lt),!Le(rt)){pt.removeSegments(it.start);for(var Kt=0,Jt=st.length;Kt<Jt;Kt++)st[Kt]._visited=!1;st.length=0;do(rt=it&&it.crossings.shift())&&rt._path||(rt=null,(it=wt.pop())&&(st=it.visited,at=it.handleIn));while(it&&!Le(rt));if(!rt)break}var Xt=rt.getNext();pt.add(new r(rt._point,at,Xt&&rt._handleOut)),rt._visited=!0,st.push(rt),rt=Xt||rt._path.getFirstSegment(),at=Xt&&Xt._handleIn}ot&&(Je&&(pt.getFirstSegment().setHandleIn(at),pt.setClosed(Je)),pt.getArea()!==0&&Be.push(pt))}return Be}return{_getWinding:function(ne,ue,de){return re(ne,this.getCurves(),ue,de)},unite:function(ne,ue){return H(this,ne,"unite",ue)},intersect:function(ne,ue){return H(this,ne,"intersect",ue)},subtract:function(ne,ue){return H(this,ne,"subtract",ue)},exclude:function(ne,ue){return H(this,ne,"exclude",ue)},divide:function(ne,ue){return ue&&(ue.trace==0||ue.stroke)?J(this,ne,"divide"):R([this.subtract(ne,ue),this.intersect(ne,ue)],!0,this,ne,ue)},resolveCrossings:function(){var ne=this._children,ue=ne||[this];function de(ot,Je){var wt=ot&&ot._intersection;return wt&&wt._overlap&&wt._path===Je}var Be=!1,Le=!1,Se=this.getIntersections(null,function(ot){return ot.hasOverlap()&&(Be=!0)||ot.isCrossing()&&(Le=!0)}),Ge=Be&&Le&&[];if(Se=d.expand(Se),Be)for(var Ue=se(Se,function(ot){return ot.hasOverlap()},Ge),We=Ue.length-1;We>=0;We--){var ze=Ue[We],it=ze._path,st=ze._segment,at=st.getPrevious(),rt=st.getNext();de(at,it)&&de(rt,it)&&(st.remove(),at._handleOut._set(0,0),rt._handleIn._set(0,0),at===st||at.getCurve().hasLength()||(rt._handleIn.set(at._handleIn),at.remove()))}Le&&(se(Se,Be&&function(ot){var Je=ot.getCurve(),wt=ot.getSegment(),Ct=ot._intersection,ut=Ct._curve,Bt=Ct._segment;if(Je&&ut&&Je._path&&ut._path)return!0;wt&&(wt._intersection=null),Bt&&(Bt._intersection=null)},Ge),Ge&&Y(Ge),ue=ge(t.each(ue,function(ot){t.push(this,ot._segments)},[])));var mt,pt=ue.length;return pt>1&&ne?(ue!==ne&&this.setChildren(ue),mt=this):pt!==1||ne||(ue[0]!==this&&this.setSegments(ue[0].removeSegments()),mt=this),mt||((mt=new e(i.NO_INSERT)).addChildren(ue),(mt=mt.reduce()).copyAttributes(this),this.replaceWith(mt)),mt},reorient:function(ne,ue){var de=this._children;return de&&de.length?this.setChildren(me(this.removeChildren(),function(Be){return!!(ne?Be:1&Be)},ue)):ue!==void 0&&this.setClockwise(ue),this},getInteriorPoint:function(){var ne=this.getBounds().getCenter(!0);if(!this.contains(ne)){for(var ue=this.getCurves(),de=ne.y,Be=[],Le=[],Se=0,Ge=ue.length;Se<Ge;Se++){var Ue=ue[Se].getValues(),We=Ue[1],ze=Ue[3],it=Ue[5],st=Ue[7];if(de>=F(We,ze,it,st)&&de<=s(We,ze,it,st))for(var at=l.getMonoCurves(Ue),rt=0,mt=at.length;rt<mt;rt++){var pt=at[rt],ot=pt[1],Je=pt[7];if(ot!==Je&&(de>=ot&&de<=Je||de>=Je&&de<=ot)){var wt=de===ot?pt[0]:de===Je?pt[6]:l.solveCubic(pt,1,de,Le,0,1)===1?l.getPoint(pt,Le[0]).x:(pt[0]+pt[6])/2;Be.push(wt)}}}Be.length>1&&(Be.sort(function(Ct,ut){return Ct-ut}),ne.x=(Be[0]+Be[1])/2)}return ne}}});const v=["unite","intersect","subtract","exclude","divide"];for(const F of v){const s=a.PathItem.prototype[F];a.PathItem.prototype[F]=function(){const c=arguments[0],p=this.getBounds(),b=c.getBounds(),A=Math.min(p.x,b.x),R=Math.max(p.x+p.width,b.x+b.width),D=Math.min(p.y,b.y),H=Math.max(p.y+p.height,b.y+b.height);if(A>-1e3&&R<1e3&&D>-1e3&&H<1e3)return s.apply(this,arguments);const J=R-A,X=H-D,Y=Math.pow(2,Math.ceil(Math.log2(J/2e3))),me=Math.pow(2,Math.ceil(Math.log2(X/2e3))),se=Math.max(Y,me),re=new a.Point((A+R)/2,(D+H)/2),we=new a.Point(-Math.round(re.x),-Math.round(re.y));se>1&&(this.scale(1/se,re),c!==this&&c.scale(1/se,re)),this.translate(we),c!==this&&c.translate(we);const ge=s.apply(this,arguments);return this.translate(we.multiply(-1)),ge.translate(we.multiply(-1)),c!==this&&c.translate(we.multiply(-1)),se>1&&(this.scale(se,re),ge.scale(se,re),c!==this&&c.scale(se,re)),ge}}function m(){return{get:function(){let F=this._paperLayerMap.size;return F===1?this._paperLayerMap.values().next().value:F===0?null:this._paperLayerMap.get(a)||null}}}function C(){return{get:function(){return this.__paperLayerMap||(this.__paperLayerMap=new Map),this.__paperLayerMap}}}function E(F){return function(s,c){let p=new a.Layer({applyMatrix:!1});return c.project.addLayer(p),s._paperLayerMap.set(c,p),p}(this,F.paperScope)}function P(F){this.paperLayer?(this.paperLayer.addChild(F),F.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 N;a.Curve.getTimeOf=function(F,s){var c=new a.Point(F[0],F[1]),p=new a.Point(F[6],F[7]),b=1e-7,A=s.isClose(c,b)?0:s.isClose(p,b)?1:null;if(A===null)for(var R=[s.x,s.y],D=[],H=0;H<2;H++)for(var J=a.Curve.solveCubic(F,H,R[H],D,0,1),X=0;X<J;X++){var Y=D[X];if(s.isClose(a.Curve.getPoint(F,Y),b))return Y}return A},Object.defineProperty(y.Viewer.prototype,"paperLayer",m()),Object.defineProperty(y.TiledImage.prototype,"paperLayer",m()),Object.defineProperty(y.Viewport.prototype,"paperLayer",m()),Object.defineProperty(y.TiledImage.prototype,"_paperLayerMap",C()),Object.defineProperty(y.Viewer.prototype,"_paperLayerMap",C()),Object.defineProperty(y.Viewport.prototype,"_paperLayerMap",C()),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=E,y.Viewport.prototype._setupPaper=function(F){let s=E.call(this,F);s.viewport=this,s.matrix.scale(F.scaleFactor),F.addHandler("update-scale",function(){s.matrix.reset(),s.matrix.scale(F.scaleFactor)})},y.TiledImage.prototype._setupPaper=function(F){let s=this,c=E.call(this,F);function p(){let b=s.getRotation(),A=s.getBoundsNoRotate(),R=s.getFlip(),D=new a.Point((A.x+A.width/2)*F.scaleFactor,(A.y+A.height/2)*F.scaleFactor),H=new a.Matrix;R&&H.scale(-1,1,D),H.rotate(b,D),H.translate({x:A.x*F.scaleFactor,y:A.y*F.scaleFactor}),H.scale(A.width*F.scaleFactor/s.source.width),c.matrix.set(H)}c.tiledImage=this,this.addHandler("bounds-change",p),F.addHandler("update-scale",p),p()},y.Viewer.prototype.addPaperItem=P,y.Viewport.prototype.addPaperItem=P,y.TiledImage.prototype.addPaperItem=P,y.Viewer.prototype.createPaperOverlay=function(){return new z(this,...arguments)},(N=y)!==void 0&&a!==void 0?N.Viewer.prototype.PaperOverlays?console.warn("Cannot redefine Viewer.prototype.PaperOverlays"):Object.defineProperty(N.Viewer.prototype,"PaperOverlays",{get:function(){return this._PaperOverlays||(this._PaperOverlays=[])}}):console.error("[paper-overlay.mjs] requires OpenSeadragon and paper.js");class z 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=j();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 R=this.viewer.world.getItemAt(A);this._setupTiledImage(R)}this.onAddItem=(A=>function(R){let D=R.item;A._setupTiledImage(D)})(this),this.onRemoveItem=(A=>function(R){let D=R.item;A._removeTiledImage(D)})(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(R){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(R){A.paperScope.view.setFlipped(R.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=gt(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(),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 R=new a.Raster(A);R.position=p,R.rotate(b);let D=c.viewSize.width/c.getZoom()/this.viewer.drawer.canvas.width;if(R.scale(D),c.getFlipped()){const H=c.getRotation();R.rotate(-H),R.scale(-1,1),R.rotate(H)}return R}_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),A=this._getPivot();this.paperScope.view.setRotation(b,A);const R=this.paperScope.view.getZoom();Math.abs(R-c)>1e-7&&this.paperScope.view.emit("zoom-changed",{zoom:R}),this.paperScope.view.update()}_getPivot(){if(this._pivot)return this._pivot.multiply(this.scaleFactor)}_getCenter(){return this.viewer.viewport.getCenter(!0)}}let j=function(){let F=1;return function(){return F++}}();class G extends ke{constructor(s){var A;let c;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.`),c=s.geometry.type.toLowerCase()==="multipolygon"?s.geometry.coordinates.flat():s.geometry.coordinates;let p=c.map(function(R){let D=R.map(function(H){return new a.Point(H[0],H[1])});return new a.Path(D)}),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(A=>[A.point.x,A.point.y])].concat(c.filter(A=>b.contains(A.segments[0].point)).map(A=>A.segments.map(R=>[R.point.x,R.point.y]))));return p.forEach(b=>{b.forEach(A=>{let R=A[0],D=A.slice(-1)[0];R[0]===D[0]&&R[1]===D[1]||A.push([R[0],R[1]])})}),p.length===1&&(p=p[0]),p}getProperties(){}}class K extends ke{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 U extends ke{constructor(s){super(s),s.geometry.type!=="MultiLineString"&&error('Bad geoJSON object: type !=="MultiLineString"');let c=s.geometry.coordinates.map(function(b,A){let R=b.map(function(D){return new a.Point(D[0],D[1])});return new a.Path(R).strokeWidth=s.geometry.properties.strokeWidths[A],new a.Path(R)}),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 ke{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 A=new a.Group([c]);if(A.updateFillOpacity=function(){a.Group.prototype.updateFillOpacity.call(this),c.opacity=this.opacity*this._computedFillOpacity,A.clipped&&(A.children[0].fillColor=null)},b.length>0){let R=new a.Group;A.insertChild(0,R),A.clipped=!0,b.forEach(D=>{let H=D instanceof a.Item?a.Item.fromAnnotationItem(D):a.Item.fromGeoJSON(D);delete H.isGeoJSONFeature,H._annotationItem=H.annotationItem,delete H.annotationItem,setTimeout(()=>H.strokeColor=(D.properties||D).strokeColor),H.strokeWidth=(D.properties||D).strokeWidth,H.rescale=(D.properties||D).rescale,R.addChild(H)})}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,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(A=>{let R=A._annotationItem.toGeoJSONFeature(),D=R.geometry;return D.properties||(D.properties={}),D.properties.strokeColor=R.properties.strokeColor,D.properties.strokeWidth=R.properties.strokeWidth,D.properties.rescale=R.properties.rescale,D})}}}class te extends ke{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,A=p[1]||0,R=s.geometry.properties,D=R.width||0,H=R.height||0,J=R.angle||0,X=[[b-D/2,A-H/2],[b+D/2,A-H/2],[b+D/2,A+H/2],[b-D/2,A+H/2]].map(function(me){return new a.Point(me[0],me[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((A,R)=>{let D=A.point.transform(this.matrix),H=b[(R+1)%4],J=H.point.transform(this.matrix).subtract(D).divide(2),X=D.add(J);return X.normal=J.rotate(-90).normalize(),X.segments=[A,H],X}).forEach(A=>{let R=A.subtract(s),D=R.rotate(-c).multiply(p.scaling).rotate(c).subtract(R).project(A.normal);A.segments.forEach(H=>{let J=H.point.transform(this.matrix).add(D);H.point=this.matrix.inverseTransform(J)})});break}}}}class oe extends ke{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,A=p[1]||0,R=s.geometry.properties,D=R.majorRadius||0,H=R.minorRadius||0,J=R.angle||0,X=new a.Path.Ellipse({center:new a.Point(b,A),radius:new a.Size(D,H)});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(D=>D.point),b=p[2].subtract(p[0]),A=p[3].subtract(p[1]);b.length>A.length?(s=b,c=A):(s=A,c=b);let R=s.angle;return{majorRadius:s.length/2,minorRadius:c.length/2,angle:R}}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 A=p[0].location.curve==p[0].curve?p[0].location.time:1,R=b.subtract(c),D=p[1].curve.getLocationAtTime(A).point.subtract(c),H=new a.Path.Ellipse({center:c,radius:[D.length,R.length]}).rotate(D.angle);this.children[0].set({segments:H.segments});break}}}}const he=function(F,s=0){let c=3735928559^s,p=1103547991^s;for(let b,A=0;A<F.length;A++)b=F.charCodeAt(A),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(F){Array.isArray(F)?(this._displayName=new String(F[0]),this._displayName.source=F[1]):this._displayName=F,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(F=>F.isGeoJSONFeatureCollection)[0]}}),Object.defineProperty(a.TextItem.prototype,"content",function(){let F=a.TextItem.prototype._setContent||Object.getOwnPropertyDescriptor(a.TextItem.prototype,"content").set;return a.TextItem.prototype._setContent=F,{get:function(){return this._content},set:function(s){F.call(this,s),this.emit("content-changed")}}}()),Object.defineProperty(a.Project.prototype,"descendants",{get:function(){return this.layers?this.getItems({match:F=>F.isGeoJSONFeatureCollection}).map(F=>F.descendants).flat():[this]}});let ce,Ce=a.Item.prototype.remove;a.Item.prototype.remove=function(){const F=this.getItems({match:s=>s.isGeoJSONFeatureCollection});(this.isGeoJSONFeature||this.isGeoJSONFeatureCollection)&&this.project.emit("item-removed",{item:this}),F.forEach(s=>this.project.emit("item-removed",{item:s})),Ce.call(this),(this.isGeoJSONFeature||this.isGeoJSONFeatureCollection)&&this.emit("removed",{item:this}),F.forEach(s=>s.emit("removed",{item:s}))},a.Group.prototype.insertChildren=function(){let F=a.Group.prototype.insertChildren.original||a.Group.prototype.insertChildren;function s(){let c=F.apply(this,arguments),p=arguments[0],b=Array.from(arguments[1]);return b&&b.forEach((A,R)=>{if(A.isGeoJSONFeature){let D=p!==void 0?p+1:-1;this.emit("child-added",{item:A,index:D})}}),c}return s.original=F,s}(),a.Color.prototype.toJSON=a.Color.prototype.toCSS,a.Style.prototype.toJSON=function(){let F={};return Object.keys(this._values).forEach(s=>{F[s]=this[s]}),F},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 F=new a.CompoundPath({children:[this],fillRule:"evenodd"});return F.selected=this.selected,this.selected=!1,F}return this},a.PathItem.prototype.applyBounds=function(F){if(F.length==0)return;let s;if(F.length==1)s=F[0].intersect(this,{insert:!1});else if(F.length>1){let c=new a.CompoundPath(F.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(F){F||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(F){F?(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(F){this.selected?this.deselect(F):this.select(F)},a.PaperScope.prototype.findSelectedNewItem=function(){return this.project.getItems({selected:!0,match:function(F){return F.isGeoJSONFeature&&F.initializeGeoJSONFeature}})[0]},a.PaperScope.prototype.findSelectedItems=function(){return this.project.getItems({selected:!0,match:function(F){return F.isGeoJSONFeature}})},a.PaperScope.prototype.findSelectedItem=function(){return this.findSelectedItems()[0]},a.PaperScope.prototype.scaleByCurrentZoom=function(F){return F/this.view.getZoom()},a.PaperScope.prototype.getActiveTool=function(){return this.tool?this.tool._toolObject:null};class Te 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 z&&(this.overlay=this.options.overlay):this.overlay=new z(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),Q.register(G),Q.register(xi),Q.register(K),Q.register(U),Q.register(Z),Q.register(qe),Q.register(M),Q.register(te),Q.register(oe),a.Item.fromGeoJSON=Q.itemFromGeoJSON,a.Item.fromAnnotationItem=Q.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=he(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=he(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 Mi(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(A=>A.remove()),Array.isArray(s)||(s=[s]),s.forEach(A=>{if(A.type=="FeatureCollection"){let R=this._createFeatureCollectionGroup({label:A.label,parent:b}),D=A.properties||{};R.data.userdata=Object.assign({},D.userdata),R.defaultStyle.set(D.defaultStyle),A.features.forEach(H=>{let J=a.Item.fromGeoJSON(H);R.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 R=this.viewer.world.getItemCount();R==1?p=this.viewer.world.getItemAt(0).paperLayer:R==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(R-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=c!==null?c:`Annotation Group ${A}`,b.defaultStyle=new a.Style(this.paperScope.project.defaultStyle),b}_addFeatureCollectionGroupToLayer(s,c){c.addChild(s),Te.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 Ae{constructor(s){var A;let c=this.overlay=new z(s,{overlayType:"viewer"}),p=this.tool=new Fe(this.overlay.paperScope,this);this.dummyTool=new this.overlay.paperScope.Tool,this.dummyTool.activate(),this._mouseNavEnabledAtActivation=!0,(A=c.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 Fe extends At{constructor(s,c){super(s);let p=s.view.bounds,b=new xe(s.view.bounds.center,function(R,D){if(!D){let H=new y.Point(b.item.position.x,b.item.position.y);D=A.viewport.pointFromPixel(H)}A.viewport.rotateTo(R,D,!0)},function(){c.deactivate()});s.view.on("flip",()=>{b.closeButton.scale(-1,1,b.item.bounds.center)});let A=s.overlay.viewer;A.addHandler("rotate",R=>b.setCurrentRotation(R.degrees)),s.view.on("resize",function(R){let D=b.item.position,H=D.x/p.width,J=D.y/p.height;p=s.view.bounds,b.item.position=new a.Point(H*p.width,J*p.height)}),b.item.visible=!1,this.project.toolLayer.addChild(b.item),this.tool.onMouseDown=function(R){},this.tool.onMouseDrag=function(R){},this.tool.onMouseMove=function(R){b.setLineOrientation(R.point)},this.tool.onMouseUp=function(){},this.tool.extensions.onKeyDown=function(R){R.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(R){R&&(b.item.visible=!1),b.item.opacity=.3}}}function xe(F,s,c){let p=2*F.x,b=2*F.y,A=Math.min(p/5,b/5,30),R=.3*A,D=new a.Point(0,-1).angle,H=new a.Group({insert:!1}),J=new a.Path.Circle({center:new a.Point(0,0),radius:A});J.fillColor=new a.Color(0,0,0,.01),J.strokeColor="black",J.strokeWidth=2,[0,90,180,270].map(Se=>{let Ge=new a.Path.Line(new a.Point(0,R),new a.Point(0,A));Ge.rotate(Se,new a.Point(0,0)),Ge.fillColor=null,Ge.strokeColor="black",Ge.strokeWidth=2,H.addChild(Ge)});let X=[0,90,180,270].map(Se=>{let Ge=new a.Path.Rectangle(new a.Point(-R,0),new a.Size(2*R,-1*(A+1.5*R))),Ue=Ge.subtract(J,{insert:!1});return Ge.remove(),Ue.rotate(Se,new a.Point(0,0)),Ue.fillColor=new a.Color(100,100,100,.5),Ue.strokeColor="black",Ue._angle=Se,H.addChild(Ue),Ue});H.addChild(J);let Y=new a.Path.Circle({center:new a.Point(0,-A),radius:R/1.5});Y.set({fillColor:"yellow",strokeColor:"black",applyMatrix:!1}),H.addChild(Y);let me=new a.Group({applyMatrix:!1}),se=new a.Group({applyMatrix:!1}),re=new a.Color(.3,.3,.3,.8),we=new a.Path.Line(new a.Point(0,-R),new a.Point(0,-Math.max(p,b)));we.strokeColor=re,we.strokeWidth=1,we.applyMatrix=!1,me.addChild(we),me.addChild(se);let ge=new a.Path.RegularPolygon(new a.Point(1.2*-R,0),3,.8*R);ge.rotate(-94);let ne=new a.Path.RegularPolygon(new a.Point(1.2*R,0),3,.8*R);ne.rotate(94);let ue=new a.Path.Arc(new a.Point(1.2*-R,0),new a.Point(0,-R/4),new a.Point(1.2*R,0)),de=ue.clone();se.addChildren([de,ue,ge,ne]),se.fillColor="yellow",ue.strokeWidth=R/2,de.strokeWidth=ue.strokeWidth+2,de.strokeColor=re,ge.strokeColor=re,ne.strokeColor=re,ue.strokeColor="yellow",ue.fillColor=null,H.addChild(me);let Be=new a.Group({insert:!1});Be.addChild(new a.Path.Circle({radius:R})),Be.addChild(new a.Path.Line(new a.Point(-R/2,-R/2),new a.Point(R/2,R/2))),Be.addChild(new a.Path.Line(new a.Point(R/2,-R/2),new a.Point(-R/2,R/2))),Be.set({fillColor:"red",strokeColor:"black",opacity:.7}),Be.position=new a.Point(1.5*A,1.5*-A),H.addChild(Be),H.pivot=J.bounds.center,H.position=F;let Le={};return Le.item=H,Le.circle=J,Le.cardinalControls=X,Le.rotationLineControl=me,Le.closeButton=Be,Le.setCurrentRotation=Se=>{Y.rotate(Se-Y.rotation,J.bounds.center)},Le.setLineOrientation=(Se,Ge=!1)=>{let Ue=Se.subtract(J.bounds.center),We=Ue.angle-D,ze=Ue.length;me.rotate(We-me.rotation,J.bounds.center),me.visible=Ge||ze>A+1.5*R,se.position=new a.Point(0,-ze),we.segments[1].point=new a.Point(0,-ze)},X.forEach(Se=>{Se.onClick=function(){s(Se._angle)}}),Y.onMouseDrag=function(Se){let Ge=Se.point.subtract(J.bounds.center).angle;s(Ge-D)},se.onMouseDown=function(Se){se._angleOffset=Y.rotation-Se.point.subtract(J.bounds.center).angle},se.onMouseDrag=function(Se){let Ge,Ue=this.project.hitTestAll(Se.point).filter(We=>X.includes(We.item));Ue.length>0&&(Se.point=Ue[0].item.bounds.center),Ge=Se.point.subtract(J.bounds.center).angle+se._angleOffset,s(Ge),Le.setLineOrientation(Se.point,!0)},J.onMouseDrag=function(Se){Le.item.position=Le.item.position.add(Se.delta)},Be.onClick=function(){c()},Le}const ae=112,fe=72,Ve=89,Pe=115;function Ze(F,s,c,p){if(c==="image/jpeg")return F[13]=1,F[14]=s>>8,F[15]=255&s,F[16]=s>>8,F[17]=255&s,F;if(c==="image/png"){const b=new Uint8Array(13);s*=39.3701,b[0]=ae,b[1]=fe,b[2]=Ve,b[3]=Pe,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(D){let H=-1;ce||(ce=function(){const J=new Int32Array(256);for(let X=0;X<256;X++){let Y=X;for(let me=0;me<8;me++)Y=1&Y?3988292384^Y>>>1:Y>>>1;J[X]=Y}return J}());for(let J=0;J<D.length;J++)H=ce[255&(H^D[J])]^H>>>8;return~H}(b),R=new Uint8Array(4);R[0]=A>>>24,R[1]=A>>>16,R[2]=A>>>8,R[3]=255&A;{const D=new Uint8Array(4);D[0]=0,D[1]=0,D[2]=0,D[3]=9;const H=new Uint8Array(54);return H.set(F,0),H.set(D,33),H.set(b,37),H.set(R,50),H}}}class nt{constructor(s,c){var R;this.viewer=s;let p=this.overlay=new z(s,{overlayType:"viewer"}),b=this.tool=new ct(this.overlay.paperScope,this);this.dummyTool=new this.overlay.paperScope.Tool,this.dummyTool.activate(),this._mouseNavEnabledAtActivation=!0,(R=p.addViewerButton({faIconClass:"fa-camera",tooltip:"Take Screenshot",onClick:()=>{b.active?this.deactivate():this.activate()}}).element.querySelector("svg.icon"))==null||R.style.setProperty("width","1em"),this._makeDialog(c),this.tool.addEventListener("region-selected",D=>this._setupScreenshotDialog(D))}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">
|
|
1613
|
+
</div>`,title:""}),this.element=this.dialog.container,this.element.querySelector('button[data-action="geojson-load"]').addEventListener("click",function(){A();const H=document.createElement("input");H.type="file",H.accept="text/geojson,.geojson,text/json,.json",H.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 ve=Array.from(new Set(Y.map(we=>we.type)));if(ve.length==0&&p.element.find(".featurecollection-list").text("Bad file - no Features or FeatureCollections were found"),ve.length>1)return void alert("Bad file - valid geoJSON consists of an array of objects with single type (FeatureCollection or Feature)");ve[0]=="Feature"&&(Y=[{type:"FeatureCollection",features:Y,properties:{label:J.name}}]),R(Y);const se=document.createElement("button");p.element.querySelector(".finalize").appendChild(se),se.innerText="Replace existing layers",se.addEventListener("click",()=>s.addFeatureCollections(Y,!0));const re=document.createElement("button");p.element.querySelector(".finalize").appendChild(re),re.innerText="Add new layers",re.addEventListener("click",()=>s.addFeatureCollections(Y,!1))},X.readAsText(J)}),H.click()}),this.element.querySelector('button[data-action="geojson-save"]').addEventListener("click",function(){A();let H=R(s.toGeoJSON());D("Create file","Choose file name:",b("-")+"FeatureCollections.json").addEventListener("click",function(){var we;(we=this.parentElement.querySelector(".download-link"))==null||we.remove();let J=Array.from(H.querySelectorAll("input:checked")).map(me=>Ke.get(me,"fc")),X=JSON.stringify(J),Y=new Blob([X],{type:"text/json"}),ve=this.getAttribute("data-label");const se=document.createElement("div");se.classList.add("download-link"),this.parentElement.insertBefore(se,this.nextSibling);const re=document.createElement("a");re.href=window.URL.createObjectURL(Y),re.download=ve,re.target="_blank",re.innerText="Download file",se.appendChild(re)})}),this.element.querySelector('button[data-action="svg-export"]').addEventListener("click",function(){A();let H=R(s.getFeatureCollectionGroups());D("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(H.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(me){Y.project.activeLayer.addChildren(me.layer.clone({insert:!1,deep:!0}).children)});let ve=new Blob([Y.project.exportSVG({asString:!0,bounds:"content"})],{type:"text/svg"}),se=this.getAttribute("data-label");const re=document.createElement("div");re.classList.add("download-link"),this.parentElement.insertBefore(re,this.nextSibling);const we=document.createElement("a");we.href=window.URL.createObjectURL(ve),we.download=se,we.target="_blank",we.innerText="Download file",re.appendChild(we)}})}),this.element.querySelector('button[data-action="png-export"]').addEventListener("click",function(){A();let H=R(s.getFeatureCollectionGroups());D("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(H.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(we){Y.project.activeLayer.addChildren(we.layer.clone({insert:!1,deep:!0}).children)});let ve=this.getAttribute("data-label");const se=document.createElement("div");se.classList.add("download-link"),this.parentElement.insertBefore(se,this.nextSibling);const re=document.createElement("a");re.href=Y.project.activeLayer.rasterize({insert:!1}).toDataURL(),re.download=ve,re.target="_blank",re.innerText="Download file",se.appendChild(re)}})}),this.element.querySelector('button[data-action="ls-store"]').addEventListener("click",function(){A();let H=R(s.toGeoJSON());D("Save data","Local storage key:",b(),!0).addEventListener("click",function(){let J=Array.from(H.querySelectorAll("input:checked")).map(function(ve){return Ke.get(ve,"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(){A();let H=[],J=b(),X=Object.keys(window.localStorage),Y=p.element.querySelector(".featurecollection-list");Y.innerText="";const ve=document.createElement("div");ve.classList.add("localstorage-key-list"),Y.appendChild(ve),X.sort((se,re)=>se.localeCompare(re)).forEach(se=>{const re=document.createElement("div");re.classList.add("localstorage-key"),re.style.order=se==J?0:1,re.innerText=se,ve.appendChild(re)}),ve.querySelectorAll(".localstorage-key").forEach(se=>se.addEventListener("click",function(){let re=window.localStorage.getItem(this.textContent);if(!re)return void alert(`No data found in local storage for key=${this.textContent}`);try{H=JSON.parse(re)}catch{return void alert("Bad data - JSON could not be parsed")}R(H);const we=document.createElement("button");we.innerText="Replace existing layers",we.addEventListener("click",()=>s.addFeatureCollections(H,!0)),p.element.querySelector(".finalize").appendChild(we);const me=document.createElement("button");me.innerText="Add new layers",me.addEventListener("click",()=>s.addFeatureCollections(H,!1)),p.element.querySelector(".finalize").appendChild(me)}))})}show(){this.dialog.show()}hide(){this.dialog.hide()}toggle(){this.dialog.toggle()}}class Mi{constructor(s,c){var b,A,R,D;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 fi(s.overlay.paperScope,c.tools)),this._fileDialog=new Ni(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 Ri(s,c.addFileButton)),this._addToViewer(),c.autoOpen?((b=this._layerUI)==null||b.show(),(A=this._toolbar)==null||A.show()):((R=this._layerUI)==null||R.hide(),(D=this._toolbar)==null||D.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"),A=document.createElement("div"),R=document.createElement("div"),D=document.createElement("div");Object.entries({"annotation-ui-grid":s,top:c,bottom:p,center:b,left:A,right:R,"resize-right":D}).forEach(([re,we])=>we.classList.add(re)),[b,R,A,c,p].forEach(re=>s.appendChild(re)),b.appendChild(this._viewer.container),R.appendChild(D),R.appendChild(this.element),c.appendChild(this._toolbar.element);const J=this.element,X=document.querySelector("body");let Y;function ve(re){if(D.classList.contains("resizing")){if(re.movementX){const we=J.getBoundingClientRect();J.style.width=we.right-re.x-Y+"px"}re.preventDefault()}}function se(re){document.removeEventListener("mousemove",ve),document.removeEventListener("mouseleave",se),document.removeEventListener("mouseup",se),X.classList.remove(".annotation-ui-noselect"),D.classList.remove("resizing")}D.addEventListener("mousedown",function(re){this.classList.add("resizing"),X.classList.add(".annotation-ui-noselect"),document.addEventListener("mousemove",ve),document.addEventListener("mouseleave",se),document.addEventListener("mouseup",se),Y=J.getBoundingClientRect().left-re.x})}}function Hi(){this._computedFillOpacity=this.hierarchy.filter(F=>"fillOpacity"in F&&(F._multiplyOpacity||F==this)).reduce((F,s)=>F*s.fillOpacity,1),this.fillColor&&(this.fillColor.alpha=this._computedFillOpacity)}a.View.prototype.getZoom=function(){var F=this._decompose().scaling;return(Math.abs(F.x)+Math.abs(F.y))/2},a.CanvasView.prototype._setElementSize.base=function(F,s){var c=this._element;F=Math.round(F),s=Math.round(s),c&&(c.width!==F&&(c.width=F),c.height!==s&&(c.height=s))},a.View.prototype.setRotation=function(F,s){let c=F-(this._rotation||0);this.rotate(c,s),this._rotation=y.positiveModulo(F,360),this.emit("rotate",{rotatedBy:c,currentRotation:this._rotation,center:s})},a.View.prototype.setFlipped=function(F,s){F!==this.getFlipped()&&(this.rotate(-s),this.scale(-1,1),this.rotate(s),this.emit("flip",{flipped:F}))},a.View.prototype.getFlipped=function(F){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(F=>F.descendants).flat():[]).concat(this.isGeoJSONFeature?[this]:[])}}),Object.defineProperty(a.Item.prototype,"fillOpacity",{set:function(F){(this.style||this.defaultStyle).fillOpacity=F,this.descendants.forEach(s=>s.updateFillOpacity())},get:function(){return(this.style||this.defaultStyle).fillOpacity}}),Object.defineProperty(a.Item.prototype,"strokeOpacity",{set:function(F){(this.style||this.defaultStyle).strokeOpacity=F,this.descendants.forEach(s=>s.updateStrokeOpacity())},get:function(){return(this.style||this.defaultStyle).strokeOpacity}}),Object.defineProperty(a.Item.prototype,"rescale",{set:function(F){this._style.rescale=F},get:function(){return this._style.rescale}}),Object.defineProperty(a.Item.prototype,"stroke",{get:function(){return this._stroke},set:function(F){this._stroke=F,this.strokeWidth=F/(this.view.getZoom()*this.hierarchy.filter(s=>s.tiledImage)[0].scaling.x)}}),Object.defineProperty(a.Style.prototype,"fillOpacity",{set:function(F){this._fillOpacity=this._values.fillOpacity=F},get:function(){return this._fillOpacity===void 0?1:this._fillOpacity}}),Object.defineProperty(a.Style.prototype,"strokeOpacity",{set:function(F){this._strokeOpacity=this._values.strokeOpacity=F},get:function(){return this._strokeOpacity===void 0?1:this._strokeOpacity}}),Object.defineProperty(a.Style.prototype,"rescale",{set:function(F){this._rescale=this._values.rescale=F},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(F){(this.style||this.defaultStyle).fillOpacity=F,this.descendants.forEach(s=>s.updateFillOpacity())},get:function(){return(this.style||this.defaultStyle).fillOpacity}}),Object.defineProperty(a.View.prototype,"fillOpacity",{set:function(F){this._fillOpacity=F,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(F){(this.style||this.defaultStyle).strokeOpacity=F,this.descendants.forEach(s=>s.updateStrokeOpacity())},get:function(){return(this.style||this.defaultStyle).strokeOpacity}}),a.Item.prototype.updateFillOpacity=Hi,a.Item.prototype.updateStrokeOpacity=function(){this.strokeColor&&(this.strokeColor.alpha=this.hierarchy.filter(F=>"strokeOpacity"in F&&(F._multiplyOpacity||F==this)).reduce((F,s)=>F*s.strokeOpacity,1))},a.Project.prototype.updateFillOpacity=Hi,a.View.prototype._multiplyOpacity=!0,a.Style.prototype.set=function(F){var s=F instanceof a.Style,c=s?F._values:F;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 F=this,s=F.rescale;if(s){let c=F.view.scaling.x*F.layer.scaling.x;Object.keys(s).forEach(function(p){typeof s[p]=="function"?F[p]=s[p](c):Array.isArray(s[p])?F[p]=s[p].map(function(b){return b/c}):F[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 Li={findItemBoundsCollisions:function(F,s,c){function p(R){for(var D=new Array(R.length),H=0;H<R.length;H++){var J=R[H].getBounds();D[H]=[J.left,J.top,J.right,J.bottom]}return D}var b=p(F),A=s&&s!==F?p(s):b;return this.findBoundsCollisions(b,A,c||0)},findCurveBoundsCollisions:function(F,s,c,p){function b(ve){for(var se=Math.min,re=Math.max,we=new Array(ve.length),me=0;me<ve.length;me++){var ne=ve[me];we[me]=[se(ne[0],ne[2],ne[4],ne[6]),se(ne[1],ne[3],ne[5],ne[7]),re(ne[0],ne[2],ne[4],ne[6]),re(ne[1],ne[3],ne[5],ne[7])]}return we}var A=b(F),R=s&&s!==F?b(s):A;if(p){for(var D=this.findBoundsCollisions(A,R,c||0,!1,!0),H=this.findBoundsCollisions(A,R,c||0,!0,!0),J=[],X=0,Y=D.length;X<Y;X++)J[X]={hor:D[X],ver:H[X]};return J}return this.findBoundsCollisions(A,R,c||0)},findBoundsCollisions:function(F,s,c,p,b){var A=!s||F===s,R=A?F:F.concat(s),D=F.length,H=R.length;function J(Je,wt,At){for(var ut=0,kt=Je.length;ut<kt;){var Jt=kt+ut>>>1;R[Je[Jt]][wt]<At?ut=Jt+1:kt=Jt}return ut-1}for(var X=p?1:0,Y=X+2,ve=p?0:1,se=ve+2,re=new Array(H),we=0;we<H;we++)re[we]=we;re.sort(function(Je,wt){return R[Je][X]-R[wt][X]});var me=[],ne=new Array(D);for(we=0;we<H;we++){var de=re[we],pe=R[de],Be=A?de:de-D,Le=de<D,Ee=A||!Le,Ue=Le?[]:null;if(me.length){var je=J(me,Y,pe[X]-c)+1;if(me.splice(0,je),A&&b){Ue=Ue.concat(me);for(var Ve=0;Ve<me.length;Ve++)ne[ot=me[Ve]].push(Be)}else{var Ne=pe[se],nt=pe[ve];for(Ve=0;Ve<me.length;Ve++){var ot=me[Ve],lt=R[ot],st=ot<D,mt=A||ot>=D;(b||(Le&&mt||Ee&&st)&&Ne>=lt[ve]-c&&nt<=lt[se]+c)&&(Le&&mt&&Ue.push(A?ot:ot-D),Ee&&st&&ne[ot].push(Be))}}}if(Le&&(F===s&&Ue.push(de),ne[de]=Ue),me.length){var pt=J(me,Y,pe[Y]);me.splice(pt+1,0,de)}else me.push(de)}for(we=0;we<ne.length;we++){var at=ne[we];at&&at.sort(function(Je,wt){return Je-wt})}return ne}};const Ui=a.PathItem,Ut=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 F=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(ne){return ne._children||[ne]}function A(ne,de){var pe=ne.clone(!1).reduce({simplify:!0}).transform(null,!0,!0);if(de){for(var Be=b(pe),Le=0,Ee=Be.length;Le<Ee;Le++)(ne=Be[Le])._closed||ne.isEmpty()||(ne.closePath(f.EPSILON),ne.getFirstSegment().setHandleIn(0,0),ne.getLastSegment().setHandleOut(0,0));pe=pe.resolveCrossings().reorient(pe.getFillRule()==="nonzero",!0)}return pe}function R(ne,de,pe,Be,Le){var Ee=new e(i.NO_INSERT);return Ee.addChildren(ne,!0),Ee=Ee.reduce({simplify:de}),Le&&Le.insert==0||Ee.insertAbove(Be&&pe.isSibling(Be)&&pe.getIndex()<Be.getIndex()?Be:pe),Ee.copyAttributes(pe,!0),Ee}function D(ne){return ne.hasOverlap()||ne.isCrossing()}function H(ne,de,pe,Be){if(Be&&(Be.trace==0||Be.stroke)&&/^(subtract|intersect)$/.test(pe))return J(ne,de,pe);var Le=A(ne,!0),Ee=de&&ne!==de&&A(de,!0),Ue=p[pe];Ue[pe]=!0,Ee&&(Ue.subtract||Ue.exclude)^Ee.isClockwise()^Le.isClockwise()&&Ee.reverse();var je,Ve=se(d.expand(Le.getIntersections(Ee,D))),Ne=b(Le),nt=Ee&&b(Ee),ot=[],lt=[];function st(It){for(var $t=0,Xt=It.length;$t<Xt;$t++){var Qt=It[$t];t.push(ot,Qt._segments),t.push(lt,Qt.getCurves()),Qt._overlapsOnly=!0}}function mt(It){for(var $t=[],Xt=0,Qt=It&&It.length;Xt<Qt;Xt++)$t.push(lt[It[Xt]]);return $t}if(Ve.length){st(Ne),nt&&st(nt);for(let It=Ve.length-1;It>-1;It--)ot[It].curve.length<1e-7&&(ot[It].remove(),ot.splice(It,1),lt.splice(It,1));for(var pt=new Array(lt.length),at=0,Je=lt.length;at<Je;at++)pt[at]=lt[at].getValues();var wt=Li.findCurveBoundsCollisions(pt,pt,0,!0),At={};for(at=0;at<lt.length;at++){var ut=lt[at],kt=ut._path._id;(At[kt]=At[kt]||{})[ut.getIndex()]={hor:mt(wt[at].hor),ver:mt(wt[at].ver)}}for(at=0,Je=Ve.length;at<Je;at++)we(Ve[at]._segment,Le,Ee,At,Ue);for(at=0,Je=ot.length;at<Je;at++){var Jt=ot[at],Lt=Jt._intersection;Jt._winding||we(Jt,Le,Ee,At,Ue),Lt&&Lt._overlap||(Jt._path._overlapsOnly=!1)}je=me(ot,Ue)}else je=ve(nt?Ne.concat(nt):Ne.slice(),function(It){return!!Ue[It]});return R(je,!0,ne,de,Be)}function J(ne,de,pe){var Be=A(ne),Le=A(de),Ee=Be.getIntersections(Le,D),Ue=pe==="subtract",je=pe==="divide",Ve={},Ne=[];function nt(st){if(!Ve[st._id]&&(je||Le.contains(st.getPointAt(st.getLength()/2))^Ue))return Ne.unshift(st),Ve[st._id]=!0}for(var ot=Ee.length-1;ot>=0;ot--){var lt=Ee[ot].split();lt&&(nt(lt)&<.getFirstSegment().setHandleIn(0,0),Be.getLastSegment().setHandleOut(0,0))}return nt(Be),R(Ne,!1,ne,de)}function X(ne,de){for(var pe=ne;pe;){if(pe===de)return;pe=pe._previous}for(;ne._next&&ne._next!==de;)ne=ne._next;if(!ne._next){for(;de._previous;)de=de._previous;ne._next=de,de._previous=ne}}function Y(ne){for(var de=ne.length-1;de>=0;de--)ne[de].clearHandles()}function ve(ne,de,pe){var Be=ne&&ne.length;if(Be){var Le=t.each(ne,function(wt,At){this[wt._id]={container:null,winding:wt.isClockwise()?1:-1,index:At}},{}),Ee=ne.slice().sort(function(wt,At){return c(At.getArea())-c(wt.getArea())}),Ue=Ee[0],je=Li.findItemBoundsCollisions(Ee,null,f.GEOMETRIC_EPSILON);pe==null&&(pe=Ue.isClockwise());for(var Ve=0;Ve<Be;Ve++){var Ne=Ee[Ve],nt=Le[Ne._id],ot=0,lt=je[Ve];if(lt){for(var st=null,mt=lt.length-1;mt>=0;mt--)if(lt[mt]<Ve){st=st||Ne.getInteriorPoint();var pt=Ee[lt[mt]];if(pt.contains(st)){var at=Le[pt._id];ot=at.winding,nt.winding+=ot,nt.container=at.exclude?at.container:pt;break}}}if(de(nt.winding)===de(ot))nt.exclude=!0,ne[nt.index]=null;else{var Je=nt.container;Ne.setClockwise(Je?!Je.isClockwise():pe)}}}return ne}function se(ne,de,pe){var Be,Le,Ee,Ue=de&&[],je=f.CURVETIME_EPSILON,Ve=1-je,Ne=!1,nt=pe||[],ot=pe&&{};function lt(Xt){return Xt._path._id+"."+Xt._segment1._index}for(var st=(pe&&pe.length)-1;st>=0;st--)(mt=pe[st])._path&&(ot[lt(mt)]=!0);for(st=ne.length-1;st>=0;st--){var mt,pt,at=ne[st],Je=at._time,wt=Je,At=de&&!de(at);if((mt=at._curve)&&(mt!==Le?(Ne=!mt.hasHandles()||ot&&ot[lt(mt)],Be=[],Ee=null,Le=mt):Ee>=je&&(Je/=Ee)),At)Be&&Be.push(at);else{if(de&&Ue.unshift(at),Ee=wt,Je<je)pt=mt._segment1;else if(Je>Ve)pt=mt._segment2;else{var ut=mt.divideAtTime(Je,!0);Ne&&nt.push(mt,ut),pt=ut._segment1;for(var kt=Be.length-1;kt>=0;kt--){var Jt=Be[kt];Jt._time=(Jt._time-Je)/(1-Je)}}at._setSegment(pt);var Lt=pt._intersection,It=at._intersection;if(Lt){X(Lt,It);for(var $t=Lt;$t;)X($t._intersection,Lt),$t=$t._next}else pt._intersection=It}}return pe||Y(nt),Ue||ne}function re(ne,de,pe,Be,Le){var Ee,Ue,je=Array.isArray(de)?de:de[pe?"hor":"ver"],Ve=pe?1:0,Ne=1^Ve,nt=[ne.x,ne.y],ot=nt[Ve],lt=nt[Ne],st=1e-6,mt=ot-1e-9,pt=ot+1e-9,at=0,Je=0,wt=0,At=0,ut=!1,kt=!1,Jt=1,Lt=[];function It(jt){var gi=jt[Ne+0],li=jt[Ne+6];if(!(lt<F(gi,li)||lt>s(gi,li))){var di=jt[Ve+0],Ci=jt[Ve+2],Ai=jt[Ve+4],Ti=jt[Ve+6];if(gi!==li){var Ei=lt===gi?0:lt===li||mt>s(di,Ci,Ai,Ti)||pt<F(di,Ci,Ai,Ti)?1:l.solveCubic(jt,Ne,lt,Lt,0,1)>0?Lt[0]:1,vi=Ei===0?di:Ei===1?Ti:l.getPoint(jt,Ei)[pe?"y":"x"],_i=gi>li?1:-1,Di=Ee[Ne]>Ee[Ne+6]?1:-1,Si=Ee[Ve+6];return lt!==gi?(vi<mt?wt+=_i:vi>pt?At+=_i:ut=!0,vi>ot-st&&vi<ot+st&&(Jt/=2)):(_i!==Di?di<mt?wt+=_i:di>pt&&(At+=_i):di!=Si&&(Si<pt&&vi>pt?(At+=_i,ut=!0):Si>mt&&vi<mt&&(wt+=_i,ut=!0)),Jt/=4),Ee=jt,!Le&&vi>mt&&vi<pt&&l.getTangent(jt,Ei)[pe?"x":"y"]===0&&re(ne,de,!pe,Be,!0)}(di<pt&&Ti>mt||Ti<pt&&di>mt)&&(ut=!0)}}function $t(jt){var gi=jt[Ne+0],li=jt[Ne+2],di=jt[Ne+4],Ci=jt[Ne+6];if(lt<=s(gi,li,di,Ci)&<>=F(gi,li,di,Ci)){for(var Ai,Ti=jt[Ve+0],Ei=jt[Ve+2],vi=jt[Ve+4],_i=jt[Ve+6],Di=mt>s(Ti,Ei,vi,_i)||pt<F(Ti,Ei,vi,_i)?[jt]:l.getMonoCurves(jt,pe),Si=0,zi=Di.length;Si<zi;Si++)if(Ai=It(Di[Si]))return Ai}}for(var Xt=0,Qt=je.length;Xt<Qt;Xt++){var ni,ei=je[Xt],Gt=ei._path,wi=ei.getValues();if(!(Xt&&je[Xt-1]._path===Gt||(Ee=null,Gt._closed||(Ue=l.getValues(Gt.getLastCurve().getSegment2(),ei.getSegment1(),null,!Be))[Ne]!==Ue[Ne+6]&&(Ee=Ue),Ee))){Ee=wi;for(var mi=Gt.getLastCurve();mi&&mi!==ei;){var bi=mi.getValues();if(bi[Ne]!==bi[Ne+6]){Ee=bi;break}mi=mi.getPrevious()}}if(ni=$t(wi))return ni;if(Xt+1===Qt||je[Xt+1]._path!==Gt){if(Ue&&(ni=$t(Ue)))return ni;!ut||wt||At||(wt=At=Gt.isClockwise(Be)^pe?1:-1),at+=wt,Je+=At,wt=At=0,ut&&(kt=!0,ut=!1),Ue=null}}return at=c(at),Je=c(Je),{winding:s(at,Je),windingL:at,windingR:Je,quality:Jt,onPath:kt}}function we(ne,de,pe,Be,Le){var Ee=[],Ue=ne,je=0;do{if(at=ne.getCurve()){var Ve=at.getLength();Ee.push({segment:ne,curve:at,length:Ve}),je+=Ve}ne=ne.getNext()}while(ne&&!ne._intersection&&ne!==Ue);for(var Ne=[.5,.25,.75],nt={winding:0,quality:-1},ot=0;ot<Ne.length&&nt.quality<.5;ot++){Ve=je*Ne[ot];for(var lt=0,st=Ee.length;lt<st;lt++){var mt=Ee[lt],pt=mt.length;if(Ve<=pt){var at,Je=(at=mt.curve)._path,wt=Je._parent,At=wt instanceof e?wt:Je,ut=f.clamp(at.getTimeAt(Ve),.001,.999),kt=at.getPointAtTime(ut),Jt=c(at.getTangentAtTime(ut).y)<Math.SQRT1_2,Lt=null;if(Le.subtract&&pe){var It=(At===de?pe:de)._getWinding(kt,Jt,!0);if(At===de&&It.winding||At===pe&&!It.winding){if(It.quality<1)continue;Lt={winding:0,quality:1}}}(Lt=Lt||re(kt,Be[Je._id][at.getIndex()],Jt,!0)).quality>nt.quality&&(nt=Lt);break}Ve-=pt}}for(lt=Ee.length-1;lt>=0;lt--)Ee[lt].segment._winding=nt}function me(ne,de){var pe,Be=[];function Le(ni){var ei;return!(!ni||ni._visited||de&&(!de[(ei=ni._winding||{}).winding]||de.unite&&ei.winding===2&&ei.windingL&&ei.windingR))}function Ee(ni){if(ni){for(var ei=0,Gt=pe.length;ei<Gt;ei++)if(ni===pe[ei])return!0}return!1}function Ue(ni){for(var ei=ni._segments,Gt=0,wi=ei.length;Gt<wi;Gt++)ei[Gt]._visited=!0}function je(ni,ei){var Gt=ni._intersection,wi=Gt,mi=[];function bi(jt,gi){for(;jt&&jt!==gi;){var li=jt._segment,di=li&&li._path;if(di){var Ci=li.getNext()||di.getFirstSegment(),Ai=Ci._intersection;li!==ni&&(Ee(li)||Ee(Ci)||Ci&&Le(li)&&(Le(Ci)||Ai&&Le(Ai._segment)))&&mi.push(li),ei&&pe.push(li)}jt=jt._next}}if(ei&&(pe=[ni]),Gt){for(bi(Gt);Gt&&Gt._previous;)Gt=Gt._previous;bi(Gt,wi)}return mi}ne.sort(function(ni,ei){var Gt=ni._intersection,wi=ei._intersection,mi=!(!Gt||!Gt._overlap),bi=!(!wi||!wi._overlap),jt=ni._path,gi=ei._path;return mi^bi?mi?1:-1:!Gt^!wi?Gt?1:-1:jt!==gi?jt._id-gi._id:ni._index-ei._index});for(var Ve=0,Ne=ne.length;Ve<Ne;Ve++){var nt,ot,lt,st=ne[Ve],mt=Le(st),pt=null,at=!1,Je=!0,wt=[];if(mt&&st._path._overlapsOnly){var At=st._path,ut=st._intersection._segment._path;At.compare(ut)&&(At.getArea()&&Be.push(At.clone(!1)),Ue(At),Ue(ut),mt=!1)}for(;mt;){var kt=!pt,Jt=je(st,kt),Lt=Jt.shift(),It=!(at=!kt&&(Ee(st)||Ee(Lt)))&≪if(kt&&(pt=new Ut(i.NO_INSERT),nt=null),at){(st.isFirst()||st.isLast())&&(Je=st._path._closed),st._visited=!0;break}if(It&&nt&&(wt.push(nt),nt=null),nt||(It&&Jt.push(st),nt={start:pt._segments.length,crossings:Jt,visited:ot=[],handleIn:lt}),It&&(st=Lt),!Le(st)){pt.removeSegments(nt.start);for(var $t=0,Xt=ot.length;$t<Xt;$t++)ot[$t]._visited=!1;ot.length=0;do(st=nt&&nt.crossings.shift())&&st._path||(st=null,(nt=wt.pop())&&(ot=nt.visited,lt=nt.handleIn));while(nt&&!Le(st));if(!st)break}var Qt=st.getNext();pt.add(new r(st._point,lt,Qt&&st._handleOut)),st._visited=!0,ot.push(st),st=Qt||st._path.getFirstSegment(),lt=Qt&&Qt._handleIn}at&&(Je&&(pt.getFirstSegment().setHandleIn(lt),pt.setClosed(Je)),pt.getArea()!==0&&Be.push(pt))}return Be}return{_getWinding:function(ne,de,pe){return re(ne,this.getCurves(),de,pe)},unite:function(ne,de){return H(this,ne,"unite",de)},intersect:function(ne,de){return H(this,ne,"intersect",de)},subtract:function(ne,de){return H(this,ne,"subtract",de)},exclude:function(ne,de){return H(this,ne,"exclude",de)},divide:function(ne,de){return de&&(de.trace==0||de.stroke)?J(this,ne,"divide"):R([this.subtract(ne,de),this.intersect(ne,de)],!0,this,ne,de)},resolveCrossings:function(){var ne=this._children,de=ne||[this];function pe(at,Je){var wt=at&&at._intersection;return wt&&wt._overlap&&wt._path===Je}var Be=!1,Le=!1,Ee=this.getIntersections(null,function(at){return at.hasOverlap()&&(Be=!0)||at.isCrossing()&&(Le=!0)}),Ue=Be&&Le&&[];if(Ee=d.expand(Ee),Be)for(var je=se(Ee,function(at){return at.hasOverlap()},Ue),Ve=je.length-1;Ve>=0;Ve--){var Ne=je[Ve],nt=Ne._path,ot=Ne._segment,lt=ot.getPrevious(),st=ot.getNext();pe(lt,nt)&&pe(st,nt)&&(ot.remove(),lt._handleOut._set(0,0),st._handleIn._set(0,0),lt===ot||lt.getCurve().hasLength()||(st._handleIn.set(lt._handleIn),lt.remove()))}Le&&(se(Ee,Be&&function(at){var Je=at.getCurve(),wt=at.getSegment(),At=at._intersection,ut=At._curve,kt=At._segment;if(Je&&ut&&Je._path&&ut._path)return!0;wt&&(wt._intersection=null),kt&&(kt._intersection=null)},Ue),Ue&&Y(Ue),de=me(t.each(de,function(at){t.push(this,at._segments)},[])));var mt,pt=de.length;return pt>1&&ne?(de!==ne&&this.setChildren(de),mt=this):pt!==1||ne||(de[0]!==this&&this.setSegments(de[0].removeSegments()),mt=this),mt||((mt=new e(i.NO_INSERT)).addChildren(de),(mt=mt.reduce()).copyAttributes(this),this.replaceWith(mt)),mt},reorient:function(ne,de){var pe=this._children;return pe&&pe.length?this.setChildren(ve(this.removeChildren(),function(Be){return!!(ne?Be:1&Be)},de)):de!==void 0&&this.setClockwise(de),this},getInteriorPoint:function(){var ne=this.getBounds().getCenter(!0);if(!this.contains(ne)){for(var de=this.getCurves(),pe=ne.y,Be=[],Le=[],Ee=0,Ue=de.length;Ee<Ue;Ee++){var je=de[Ee].getValues(),Ve=je[1],Ne=je[3],nt=je[5],ot=je[7];if(pe>=F(Ve,Ne,nt,ot)&&pe<=s(Ve,Ne,nt,ot))for(var lt=l.getMonoCurves(je),st=0,mt=lt.length;st<mt;st++){var pt=lt[st],at=pt[1],Je=pt[7];if(at!==Je&&(pe>=at&&pe<=Je||pe>=Je&&pe<=at)){var wt=pe===at?pt[0]:pe===Je?pt[6]:l.solveCubic(pt,1,pe,Le,0,1)===1?l.getPoint(pt,Le[0]).x:(pt[0]+pt[6])/2;Be.push(wt)}}}Be.length>1&&(Be.sort(function(At,ut){return At-ut}),ne.x=(Be[0]+Be[1])/2)}return ne}}});const v=["unite","intersect","subtract","exclude","divide"];for(const F of v){const s=a.PathItem.prototype[F];a.PathItem.prototype[F]=function(){const c=arguments[0],p=this.getBounds(),b=c.getBounds(),A=Math.min(p.x,b.x),R=Math.max(p.x+p.width,b.x+b.width),D=Math.min(p.y,b.y),H=Math.max(p.y+p.height,b.y+b.height);if(A>-1e3&&R<1e3&&D>-1e3&&H<1e3)return s.apply(this,arguments);const J=R-A,X=H-D,Y=Math.pow(2,Math.ceil(Math.log2(J/2e3))),ve=Math.pow(2,Math.ceil(Math.log2(X/2e3))),se=Math.max(Y,ve),re=new a.Point((A+R)/2,(D+H)/2),we=new a.Point(-Math.round(re.x),-Math.round(re.y));se>1&&(this.scale(1/se,re),c!==this&&c.scale(1/se,re)),this.translate(we),c!==this&&c.translate(we);const me=s.apply(this,arguments);return this.translate(we.multiply(-1)),me.translate(we.multiply(-1)),c!==this&&c.translate(we.multiply(-1)),se>1&&(this.scale(se,re),me.scale(se,re),c!==this&&c.scale(se,re)),me}}function m(){return{get:function(){let F=this._paperLayerMap.size;return F===1?this._paperLayerMap.values().next().value:F===0?null:this._paperLayerMap.get(a)||null}}}function x(){return{get:function(){return this.__paperLayerMap||(this.__paperLayerMap=new Map),this.__paperLayerMap}}}function S(F){return function(s,c){let p=new a.Layer({applyMatrix:!1});return c.project.addLayer(p),s._paperLayerMap.set(c,p),p}(this,F.paperScope)}function E(F){this.paperLayer?(this.paperLayer.addChild(F),F.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 N;a.Curve.getTimeOf=function(F,s){var c=new a.Point(F[0],F[1]),p=new a.Point(F[6],F[7]),b=1e-7,A=s.isClose(c,b)?0:s.isClose(p,b)?1:null;if(A===null)for(var R=[s.x,s.y],D=[],H=0;H<2;H++)for(var J=a.Curve.solveCubic(F,H,R[H],D,0,1),X=0;X<J;X++){var Y=D[X];if(s.isClose(a.Curve.getPoint(F,Y),b))return Y}return A},Object.defineProperty(y.Viewer.prototype,"paperLayer",m()),Object.defineProperty(y.TiledImage.prototype,"paperLayer",m()),Object.defineProperty(y.Viewport.prototype,"paperLayer",m()),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(F){let s=S.call(this,F);s.viewport=this,s.matrix.scale(F.scaleFactor),F.addHandler("update-scale",function(){s.matrix.reset(),s.matrix.scale(F.scaleFactor)})},y.TiledImage.prototype._setupPaper=function(F){let s=this,c=S.call(this,F);function p(){let b=s.getRotation(),A=s.getBoundsNoRotate(),R=s.getFlip(),D=new a.Point((A.x+A.width/2)*F.scaleFactor,(A.y+A.height/2)*F.scaleFactor),H=new a.Matrix;R&&H.scale(-1,1,D),H.rotate(b,D),H.translate({x:A.x*F.scaleFactor,y:A.y*F.scaleFactor}),H.scale(A.width*F.scaleFactor/s.source.width),c.matrix.set(H)}c.tiledImage=this,this.addHandler("bounds-change",p),F.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 z(this,...arguments)},(N=y)!==void 0&&a!==void 0?N.Viewer.prototype.PaperOverlays?console.warn("Cannot redefine Viewer.prototype.PaperOverlays"):Object.defineProperty(N.Viewer.prototype,"PaperOverlays",{get:function(){return this._PaperOverlays||(this._PaperOverlays=[])}}):console.error("[paper-overlay.mjs] requires OpenSeadragon and paper.js");class z 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=j();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 R=this.viewer.world.getItemAt(A);this._setupTiledImage(R)}this.onAddItem=(A=>function(R){let D=R.item;A._setupTiledImage(D)})(this),this.onRemoveItem=(A=>function(R){let D=R.item;A._removeTiledImage(D)})(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(R){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(R){A.paperScope.view.setFlipped(R.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=gt(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(),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 R=new a.Raster(A);R.position=p,R.rotate(b);let D=c.viewSize.width/c.getZoom()/this.viewer.drawer.canvas.width;if(R.scale(D),c.getFlipped()){const H=c.getRotation();R.rotate(-H),R.scale(-1,1),R.rotate(H)}return R}_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),A=this._getPivot();this.paperScope.view.setRotation(b,A);const R=this.paperScope.view.getZoom();Math.abs(R-c)>1e-7&&this.paperScope.view.emit("zoom-changed",{zoom:R}),this.paperScope.view.update()}_getPivot(){if(this._pivot)return this._pivot.multiply(this.scaleFactor)}_getCenter(){return this.viewer.viewport.getCenter(!0)}}let j=function(){let F=1;return function(){return F++}}();class G extends ke{constructor(s){var A;let c;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.`),c=s.geometry.type.toLowerCase()==="multipolygon"?s.geometry.coordinates.flat():s.geometry.coordinates;let p=c.map(function(R){let D=R.map(function(H){return new a.Point(H[0],H[1])});return new a.Path(D)}),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(A=>[A.point.x,A.point.y])].concat(c.filter(A=>b.contains(A.segments[0].point)).map(A=>A.segments.map(R=>[R.point.x,R.point.y]))));return p.forEach(b=>{b.forEach(A=>{let R=A[0],D=A.slice(-1)[0];R[0]===D[0]&&R[1]===D[1]||A.push([R[0],R[1]])})}),p.length===1&&(p=p[0]),p}getProperties(){}}class K extends ke{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 U extends ke{constructor(s){super(s),s.geometry.type!=="MultiLineString"&&error('Bad geoJSON object: type !=="MultiLineString"');let c=s.geometry.coordinates.map(function(b,A){let R=b.map(function(D){return new a.Point(D[0],D[1])});return new a.Path(R).strokeWidth=s.geometry.properties.strokeWidths[A],new a.Path(R)}),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 ke{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 A=new a.Group([c]);if(A.updateFillOpacity=function(){a.Group.prototype.updateFillOpacity.call(this),c.opacity=this.opacity*this._computedFillOpacity,A.clipped&&(A.children[0].fillColor=null)},b.length>0){let R=new a.Group;A.insertChild(0,R),A.clipped=!0,b.forEach(D=>{let H=D instanceof a.Item?a.Item.fromAnnotationItem(D):a.Item.fromGeoJSON(D);delete H.isGeoJSONFeature,H._annotationItem=H.annotationItem,delete H.annotationItem,setTimeout(()=>H.strokeColor=(D.properties||D).strokeColor),H.strokeWidth=(D.properties||D).strokeWidth,H.rescale=(D.properties||D).rescale,R.addChild(H)})}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,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(A=>{let R=A._annotationItem.toGeoJSONFeature(),D=R.geometry;return D.properties||(D.properties={}),D.properties.strokeColor=R.properties.strokeColor,D.properties.strokeWidth=R.properties.strokeWidth,D.properties.rescale=R.properties.rescale,D})}}}class ie extends ke{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,A=p[1]||0,R=s.geometry.properties,D=R.width||0,H=R.height||0,J=R.angle||0,X=[[b-D/2,A-H/2],[b+D/2,A-H/2],[b+D/2,A+H/2],[b-D/2,A+H/2]].map(function(ve){return new a.Point(ve[0],ve[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((A,R)=>{let D=A.point.transform(this.matrix),H=b[(R+1)%4],J=H.point.transform(this.matrix).subtract(D).divide(2),X=D.add(J);return X.normal=J.rotate(-90).normalize(),X.segments=[A,H],X}).forEach(A=>{let R=A.subtract(s),D=R.rotate(-c).multiply(p.scaling).rotate(c).subtract(R).project(A.normal);A.segments.forEach(H=>{let J=H.point.transform(this.matrix).add(D);H.point=this.matrix.inverseTransform(J)})});break}}}}class oe extends ke{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,A=p[1]||0,R=s.geometry.properties,D=R.majorRadius||0,H=R.minorRadius||0,J=R.angle||0,X=new a.Path.Ellipse({center:new a.Point(b,A),radius:new a.Size(D,H)});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(D=>D.point),b=p[2].subtract(p[0]),A=p[3].subtract(p[1]);b.length>A.length?(s=b,c=A):(s=A,c=b);let R=s.angle;return{majorRadius:s.length/2,minorRadius:c.length/2,angle:R}}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 A=p[0].location.curve==p[0].curve?p[0].location.time:1,R=b.subtract(c),D=p[1].curve.getLocationAtTime(A).point.subtract(c),H=new a.Path.Ellipse({center:c,radius:[D.length,R.length]}).rotate(D.angle);this.children[0].set({segments:H.segments});break}}}}const ce=function(F,s=0){let c=3735928559^s,p=1103547991^s;for(let b,A=0;A<F.length;A++)b=F.charCodeAt(A),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(F){Array.isArray(F)?(this._displayName=new String(F[0]),this._displayName.source=F[1]):this._displayName=F,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(F=>F.isGeoJSONFeatureCollection)[0]}}),Object.defineProperty(a.TextItem.prototype,"content",function(){let F=a.TextItem.prototype._setContent||Object.getOwnPropertyDescriptor(a.TextItem.prototype,"content").set;return a.TextItem.prototype._setContent=F,{get:function(){return this._content},set:function(s){F.call(this,s),this.emit("content-changed")}}}()),Object.defineProperty(a.Project.prototype,"descendants",{get:function(){return this.layers?this.getItems({match:F=>F.isGeoJSONFeatureCollection}).map(F=>F.descendants).flat():[this]}});let ue,Ce=a.Item.prototype.remove;a.Item.prototype.remove=function(){const F=this.getItems({match:s=>s.isGeoJSONFeatureCollection});(this.isGeoJSONFeature||this.isGeoJSONFeatureCollection)&&this.project.emit("item-removed",{item:this}),F.forEach(s=>this.project.emit("item-removed",{item:s})),Ce.call(this),(this.isGeoJSONFeature||this.isGeoJSONFeatureCollection)&&this.emit("removed",{item:this}),F.forEach(s=>s.emit("removed",{item:s}))},a.Group.prototype.insertChildren=function(){let F=a.Group.prototype.insertChildren.original||a.Group.prototype.insertChildren;function s(){let c=F.apply(this,arguments),p=arguments[0],b=Array.from(arguments[1]);return b&&b.forEach((A,R)=>{if(A.isGeoJSONFeature){let D=p!==void 0?p+1:-1;this.emit("child-added",{item:A,index:D})}}),c}return s.original=F,s}(),a.Color.prototype.toJSON=a.Color.prototype.toCSS,a.Style.prototype.toJSON=function(){let F={};return Object.keys(this._values).forEach(s=>{F[s]=this[s]}),F},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 F=new a.CompoundPath({children:[this],fillRule:"evenodd"});return F.selected=this.selected,this.selected=!1,F}return this},a.PathItem.prototype.applyBounds=function(F){if(F.length==0)return;let s;if(F.length==1)s=F[0].intersect(this,{insert:!1});else if(F.length>1){let c=new a.CompoundPath(F.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(F){F||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(F){F?(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(F){this.selected?this.deselect(F):this.select(F)},a.PaperScope.prototype.findSelectedNewItem=function(){return this.project.getItems({selected:!0,match:function(F){return F.isGeoJSONFeature&&F.initializeGeoJSONFeature}})[0]},a.PaperScope.prototype.findSelectedItems=function(){return this.project.getItems({selected:!0,match:function(F){return F.isGeoJSONFeature}})},a.PaperScope.prototype.findSelectedItem=function(){return this.findSelectedItems()[0]},a.PaperScope.prototype.scaleByCurrentZoom=function(F){return F/this.view.getZoom()},a.PaperScope.prototype.getActiveTool=function(){return this.tool?this.tool._toolObject:null};class Se 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 z&&(this.overlay=this.options.overlay):this.overlay=new z(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),Q.register(G),Q.register(xi),Q.register(K),Q.register(U),Q.register(Z),Q.register(We),Q.register(B),Q.register(ie),Q.register(oe),a.Item.fromGeoJSON=Q.itemFromGeoJSON,a.Item.fromAnnotationItem=Q.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=ce(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=ce(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 Mi(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(A=>A.remove()),Array.isArray(s)||(s=[s]),s.forEach(A=>{if(A.type=="FeatureCollection"){let R=this._createFeatureCollectionGroup({label:A.label,parent:b}),D=A.properties||{};R.data.userdata=Object.assign({},D.userdata),R.defaultStyle.set(D.defaultStyle),A.features.forEach(H=>{let J=a.Item.fromGeoJSON(H);R.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 R=this.viewer.world.getItemCount();R==1?p=this.viewer.world.getItemAt(0).paperLayer:R==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(R-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=c!==null?c:`Annotation Group ${A}`,b.defaultStyle=new a.Style(this.paperScope.project.defaultStyle),b}_addFeatureCollectionGroupToLayer(s,c){c.addChild(s),Se.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 A;let c=this.overlay=new z(s,{overlayType:"viewer"}),p=this.tool=new Fe(this.overlay.paperScope,this);this.dummyTool=new this.overlay.paperScope.Tool,this.dummyTool.activate(),this._mouseNavEnabledAtActivation=!0,(A=c.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 Fe extends Tt{constructor(s,c){super(s);let p=s.view.bounds,b=new xe(s.view.bounds.center,function(R,D){if(!D){let H=new y.Point(b.item.position.x,b.item.position.y);D=A.viewport.pointFromPixel(H)}A.viewport.rotateTo(R,D,!0)},function(){c.deactivate()});s.view.on("flip",()=>{b.closeButton.scale(-1,1,b.item.bounds.center)});let A=s.overlay.viewer;A.addHandler("rotate",R=>b.setCurrentRotation(R.degrees)),s.view.on("resize",function(R){let D=b.item.position,H=D.x/p.width,J=D.y/p.height;p=s.view.bounds,b.item.position=new a.Point(H*p.width,J*p.height)}),b.item.visible=!1,this.project.toolLayer.addChild(b.item),this.tool.onMouseDown=function(R){},this.tool.onMouseDrag=function(R){},this.tool.onMouseMove=function(R){b.setLineOrientation(R.point)},this.tool.onMouseUp=function(){},this.tool.extensions.onKeyDown=function(R){R.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(R){R&&(b.item.visible=!1),b.item.opacity=.3}}}function xe(F,s,c){let p=2*F.x,b=2*F.y,A=Math.min(p/5,b/5,30),R=.3*A,D=new a.Point(0,-1).angle,H=new a.Group({insert:!1}),J=new a.Path.Circle({center:new a.Point(0,0),radius:A});J.fillColor=new a.Color(0,0,0,.01),J.strokeColor="black",J.strokeWidth=2,[0,90,180,270].map(Ee=>{let Ue=new a.Path.Line(new a.Point(0,R),new a.Point(0,A));Ue.rotate(Ee,new a.Point(0,0)),Ue.fillColor=null,Ue.strokeColor="black",Ue.strokeWidth=2,H.addChild(Ue)});let X=[0,90,180,270].map(Ee=>{let Ue=new a.Path.Rectangle(new a.Point(-R,0),new a.Size(2*R,-1*(A+1.5*R))),je=Ue.subtract(J,{insert:!1});return Ue.remove(),je.rotate(Ee,new a.Point(0,0)),je.fillColor=new a.Color(100,100,100,.5),je.strokeColor="black",je._angle=Ee,H.addChild(je),je});H.addChild(J);let Y=new a.Path.Circle({center:new a.Point(0,-A),radius:R/1.5});Y.set({fillColor:"yellow",strokeColor:"black",applyMatrix:!1}),H.addChild(Y);let ve=new a.Group({applyMatrix:!1}),se=new a.Group({applyMatrix:!1}),re=new a.Color(.3,.3,.3,.8),we=new a.Path.Line(new a.Point(0,-R),new a.Point(0,-Math.max(p,b)));we.strokeColor=re,we.strokeWidth=1,we.applyMatrix=!1,ve.addChild(we),ve.addChild(se);let me=new a.Path.RegularPolygon(new a.Point(1.2*-R,0),3,.8*R);me.rotate(-94);let ne=new a.Path.RegularPolygon(new a.Point(1.2*R,0),3,.8*R);ne.rotate(94);let de=new a.Path.Arc(new a.Point(1.2*-R,0),new a.Point(0,-R/4),new a.Point(1.2*R,0)),pe=de.clone();se.addChildren([pe,de,me,ne]),se.fillColor="yellow",de.strokeWidth=R/2,pe.strokeWidth=de.strokeWidth+2,pe.strokeColor=re,me.strokeColor=re,ne.strokeColor=re,de.strokeColor="yellow",de.fillColor=null,H.addChild(ve);let Be=new a.Group({insert:!1});Be.addChild(new a.Path.Circle({radius:R})),Be.addChild(new a.Path.Line(new a.Point(-R/2,-R/2),new a.Point(R/2,R/2))),Be.addChild(new a.Path.Line(new a.Point(R/2,-R/2),new a.Point(-R/2,R/2))),Be.set({fillColor:"red",strokeColor:"black",opacity:.7}),Be.position=new a.Point(1.5*A,1.5*-A),H.addChild(Be),H.pivot=J.bounds.center,H.position=F;let Le={};return Le.item=H,Le.circle=J,Le.cardinalControls=X,Le.rotationLineControl=ve,Le.closeButton=Be,Le.setCurrentRotation=Ee=>{Y.rotate(Ee-Y.rotation,J.bounds.center)},Le.setLineOrientation=(Ee,Ue=!1)=>{let je=Ee.subtract(J.bounds.center),Ve=je.angle-D,Ne=je.length;ve.rotate(Ve-ve.rotation,J.bounds.center),ve.visible=Ue||Ne>A+1.5*R,se.position=new a.Point(0,-Ne),we.segments[1].point=new a.Point(0,-Ne)},X.forEach(Ee=>{Ee.onClick=function(){s(Ee._angle)}}),Y.onMouseDrag=function(Ee){let Ue=Ee.point.subtract(J.bounds.center).angle;s(Ue-D)},se.onMouseDown=function(Ee){se._angleOffset=Y.rotation-Ee.point.subtract(J.bounds.center).angle},se.onMouseDrag=function(Ee){let Ue,je=this.project.hitTestAll(Ee.point).filter(Ve=>X.includes(Ve.item));je.length>0&&(Ee.point=je[0].item.bounds.center),Ue=Ee.point.subtract(J.bounds.center).angle+se._angleOffset,s(Ue),Le.setLineOrientation(Ee.point,!0)},J.onMouseDrag=function(Ee){Le.item.position=Le.item.position.add(Ee.delta)},Be.onClick=function(){c()},Le}const le=112,ge=72,Ge=89,Ie=115;function Ze(F,s,c,p){if(c==="image/jpeg")return F[13]=1,F[14]=s>>8,F[15]=255&s,F[16]=s>>8,F[17]=255&s,F;if(c==="image/png"){const b=new Uint8Array(13);s*=39.3701,b[0]=le,b[1]=ge,b[2]=Ge,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 A=function(D){let H=-1;ue||(ue=function(){const J=new Int32Array(256);for(let X=0;X<256;X++){let Y=X;for(let ve=0;ve<8;ve++)Y=1&Y?3988292384^Y>>>1:Y>>>1;J[X]=Y}return J}());for(let J=0;J<D.length;J++)H=ue[255&(H^D[J])]^H>>>8;return~H}(b),R=new Uint8Array(4);R[0]=A>>>24,R[1]=A>>>16,R[2]=A>>>8,R[3]=255&A;{const D=new Uint8Array(4);D[0]=0,D[1]=0,D[2]=0,D[3]=9;const H=new Uint8Array(54);return H.set(F,0),H.set(D,33),H.set(b,37),H.set(R,50),H}}}class rt{constructor(s,c){var R;this.viewer=s;let p=this.overlay=new z(s,{overlayType:"viewer"}),b=this.tool=new ct(this.overlay.paperScope,this);this.dummyTool=new this.overlay.paperScope.Tool,this.dummyTool.activate(),this._mouseNavEnabledAtActivation=!0,(R=p.addViewerButton({faIconClass:"fa-camera",tooltip:"Take Screenshot",onClick:()=>{b.active?this.deactivate():this.activate()}}).element.querySelector("svg.icon"))==null||R.style.setProperty("width","1em"),this._makeDialog(c),this.tool.addEventListener("region-selected",D=>this._setupScreenshotDialog(D))}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"/>
|
|
@@ -1705,5 +1705,5 @@ input[type=range] {
|
|
|
1705
1705
|
.scalebar-opts.hidden{
|
|
1706
1706
|
visibility:hidden;
|
|
1707
1707
|
}
|
|
1708
|
-
</style>`));const p=ai(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 A=p.querySelector(".select-size"),R=A.options[A.selectedIndex],D=JSON.parse(R.getAttribute("data-dims"));this.dialog.querySelector(".screenshot-results").classList.add("pending"),this._createScreenshot(D).then(H=>{const J=this.dialog.querySelector(".screenshot-results");J.classList.remove("pending"),J.classList.add("created"),this.dialog.querySelector(".screenshot-link").href=this.blobURL}).catch(H=>{alert("There was a problem creating the screenshot. "+H)})})),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 R=p.querySelector(".scalebar-opts");this._includeScalebar?R.classList.remove("hidden"):R.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),A=c.viewportToImageRectangle(b);const R=Math.max(A.width,A.height)/Math.max(p.width,p.height);let D={width:p.width*R,height:p.height*R},H=!1;if(this._mpp=null,this.dialog.querySelector(".include-scalebar").disabled=!0,this.viewer.world.getItemCount()===1){let re=this.viewer.world.getItemAt(0).source.mpp;re&&(this.dialog.querySelector(".region-width-mm").textContent=""+(re.x/1e3*D.width).toFixed(3),this.dialog.querySelector(".region-height-mm").textContent=""+(re.y/1e3*D.height).toFixed(3),H=!0,this.dialog.querySelector(".include-scalebar").disabled=!1,this._mpp=re)}H||this.dialog.querySelectorAll(".region-width-mm, .region-height-mm").forEach(re=>re.textContent="??");let J=this.dialog.querySelector(".select-size");J.textContent="";let X=D.width,Y=D.height;for(;X>s.width&&Y>s.height;){let re={w:Math.round(X),h:Math.round(Y),imageBounds:A,scaleFactor:X/D.width},we=document.createElement("option");J.appendChild(we),we.textContent=`${Math.round(X)} x ${Math.round(Y)}`,we.setAttribute("data-dims",JSON.stringify(re)),(X>23767||Y>23767||X*Y>268435456)&&we.setAttribute("disabled",!0),X/=2,Y/=2}let me={w:s.width,h:s.height,imageBounds:A,scaleFactor:s.width/D.width},se=document.createElement("option");J.appendChild(se),se.textContent=`${Math.round(X)} x ${Math.round(Y)}`,se.setAttribute("data-dims",JSON.stringify(me)),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,A=new y.Rect(b.x,b.y,b.width,b.height,b.degrees),R=s.scaleFactor;return new Promise((D,H)=>{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()],me=this.viewer.world.getItemAt(this.viewer.currentPage()),se=y({element:X,tileSources:[Y],crossOriginPolicy:this.viewer.crossOriginPolicy,prefixUrl:this.viewer.prefixUrl,immediateRender:!0});se.viewport.setRotation(this.viewer.viewport.getRotation(!0),!0),se.addHandler("tile-drawn",re=>{let we=re.tiledImage.coverage,ge=Object.keys(we),ne=ge[ge.length-1];if(re.tile.level==ne){let ue=we[ne],de=Object.values(ue).map(Be=>Object.values(Be)).flat();this._setProgress(de.filter(Be=>Be).length,de.length)}}),se.addHandler("open",()=>{se.world.getItemAt(0).setRotation(me.getRotation(!0),!0),se.world.getItemAt(0).addOnceHandler("fully-loaded-change",we=>{if(this._includeScalebar&&this._mpp){let ge=Math.round(1e3*this._scalebarWidth/this._mpp.x*R),ne=Math.round(this._scalebarHeight),ue=se.drawer.canvas,de=ue.getContext("2d"),Be=ue.width,Le=ue.height;de.fillRect(Be-ne,Le-ne,-ge,-ne)}se.drawer.canvas.toBlob(async ge=>{J!=1&&(ge=await function(ue,de){const Be=ue.slice(0,33);return new Promise((Le,Se)=>{const Ge=new FileReader;Ge.onload=()=>{const Ue=new Uint8Array(Ge.result),We=ue.slice(33),ze=Ze(Ue,de,ue.type);Le(new Blob([ze,We],{type:ue.type}))},Ge.readAsArrayBuffer(Be)})}(ge,96*J)),this.blobURL&&URL.revokeObjectURL(this.blobURL),this.blobURL=URL.createObjectURL(ge),D(this.blobURL);let ne=se.element;se.destroy(),ne.remove()})});let re=se.viewport.imageToViewportRectangle(A);se.viewport.fitBounds(re)})}catch(J){H(J)}})}}class ct extends At{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"}),A=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),R=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),D=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,R,D]),this.project.toolLayer.addChild(this.crosshairTool),this.crosshairTool.visible=!1,this._aspectHeight=1,this._aspectWidth=1,this._aspectLocked=!1,this.tool.onMouseDown=H=>{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=H=>{this.compoundPath.removeChildren(1);let J=this.getPoint(H);this.compoundPath.addChild(new a.Path.Rectangle(H.downPoint,J))},this.tool.onMouseMove=H=>{this.crosshairTool.visible=!0,function(J,X){let Y=J.view.projectToView(X),me=J.view.viewToProject(new a.Point(0,Y.y)),se=J.view.viewToProject(new a.Point(J.view.viewSize.width,Y.y)),re=J.view.viewToProject(new a.Point(Y.x,0)),we=J.view.viewToProject(new a.Point(Y.x,J.view.viewSize.height));b.segments[0].point=me,A.segments[0].point=me,b.segments[1].point=se,A.segments[1].point=se,R.segments[0].point=re,D.segments[0].point=re,R.segments[1].point=we,D.segments[1].point=we}(p.tool,H.point)},this.tool.onMouseUp=H=>{let J=this.getPoint(H);this.broadcast("region-selected",new a.Rectangle(H.downPoint,J))},this.tool.extensions.onKeyDown=function(H){H.key=="escape"&&c.deactivate()},this.extensions.onActivate=()=>{this.crosshairTool.visible=!0,this.compoundPath.visible=!1},this.extensions.onDeactivate=H=>{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 ft={AnnotationToolkit:Te,AnnotationToolbar:fi,FeatureCollectionUI:Ii,FeatureUI:yi,FileDialog:Ni,LayerUI:Ri,PaperOffset:Ie,PaperOverlay:z,RotationControlOverlay:Ae,ScreenshotOverlay:nt,AnnotationUITool:Tt,ToolBase:At,BrushTool:je,DefaultTool:dt,EllipseTool:Me,LinestringTool:Et,PointTool:T,PointTextTool:L,PolygonTool:He,RasterTool:ci,RectangleTool:ve,SelectTool:Zt,StyleTool:Vt,TransformTool:hi,WandTool:ei}})(),g})())})(Qi);var Yi=Qi.exports;class cn{constructor(le){ki(this,"cache");ki(this,"hits",0);ki(this,"misses",0);ki(this,"maxSize");this.cache=new Map,this.maxSize=le==null?void 0:le.maxSize}normalizeId(le){return String(le)}isExpired(le){const n=this.cache.get(le);return n?n.expiresAt&&n.expiresAt<Date.now()?(this.cache.delete(le),!0):!1:!0}evictIfNeeded(){if(this.maxSize&&this.cache.size>=this.maxSize){const le=this.cache.keys().next().value;le&&this.cache.delete(le)}}async get(le,n){const o=this.normalizeId(le);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(le,n,o){const u=this.normalizeId(le),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(le,n){const o=this.normalizeId(le);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(le){const n=this.normalizeId(le);this.cache.delete(n)}async clear(){this.cache.clear(),this.hits=0,this.misses=0}async getStats(){const le=this.hits+this.misses,n=le>0?this.hits/le: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(){ki(this,"db",null);ki(this,"initPromise",null)}async init(){if(!this.db)return this.initPromise?this.initPromise:(this.initPromise=new Promise((le,n)=>{const o=indexedDB.open(un,dn);o.onerror=()=>{n(new Error(`Failed to open IndexedDB: ${o.error}`))},o.onsuccess=()=>{this.db=o.result,le()},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(le="readonly"){if(await this.init(),!this.db)throw new Error("IndexedDB not initialized");return this.db.transaction([Gi],le).objectStore(Gi)}async get(le,n){await this.init();const o=String(le),u=await this.getStore();return new Promise((h,g)=>{const y=u.get(o);y.onerror=()=>{g(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(le).catch(console.error),h(void 0);return}if(n!==void 0&&a.versionHash!==n){this.delete(le).catch(console.error),h(void 0);return}h(a.data)}})}async set(le,n,o){await this.init();const u=String(le),h=await this.getStore("readwrite"),g={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(g);w.onerror=()=>{a(new Error(`Failed to set cache entry: ${w.error}`))},w.onsuccess=()=>{y()}})}async has(le,n){await this.init();const o=String(le),u=await this.getStore();return new Promise((h,g)=>{const y=u.get(o);y.onerror=()=>{g(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(le).catch(console.error),h(!1);return}if(n!==void 0&&a.versionHash!==n){h(!1);return}h(!0)}})}async delete(le){await this.init();const n=String(le),o=await this.getStore("readwrite");return new Promise((u,h)=>{const g=o.delete(n);g.onerror=()=>{h(new Error(`Failed to delete cache entry: ${g.error}`))},g.onsuccess=()=>{u()}})}async clear(){await this.init();const le=await this.getStore("readwrite");return new Promise((n,o)=>{const u=le.clear();u.onerror=()=>{o(new Error(`Failed to clear cache: ${u.error}`))},u.onsuccess=()=>{n()}})}async getStats(){await this.init();const le=await this.getStore();return new Promise((n,o)=>{const u=le.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 Oe=await navigator.storage.estimate(),le=Oe.quota||0,n=Oe.usage||0,o=le-n,u=le>0?n/le*100:0;let h=!1;return"persisted"in navigator.storage&&"persist"in navigator.storage&&(h=await navigator.storage.persisted()),{quota:le,usage:n,available:o,usagePercent:u,persistent:h}}catch(Oe){return console.error("Failed to check IndexedDB quota:",Oe),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 Oe=await navigator.storage.persist();return Oe?console.log("Persistent storage granted - data will not be cleared automatically"):console.warn("Persistent storage not granted - data may be cleared during browser cleanup"),Oe}catch(Oe){return console.error("Failed to request persistent storage:",Oe),!1}}function Vi(Oe){if(Oe===0)return"0 Bytes";const le=1024,n=["Bytes","KB","MB","GB","TB"],o=Math.floor(Math.log(Oe)/Math.log(le));return Math.round(Oe/Math.pow(le,o)*100)/100+" "+n[o]}async function fn(){const Oe=await $i();if(!Oe){console.log("Quota information not available");return}console.log("=== IndexedDB Quota Information ==="),console.log(`Quota: ${Vi(Oe.quota)}`),console.log(`Usage: ${Vi(Oe.usage)} (${Oe.usagePercent.toFixed(1)}%)`),console.log(`Available: ${Vi(Oe.available)}`),console.log(`Persistent storage: ${Oe.persistent?"Granted":"Not granted"}`),Oe.usagePercent>80&&console.warn("⚠️ Storage usage is above 80% - consider requesting persistent storage")}function gn(Oe){const le={};if(Oe._id!==void 0&&(le._id=Oe._id),Oe._version!==void 0&&(le._version=Oe._version),Oe._modelType!==void 0&&(le._modelType=Oe._modelType),Oe.updated!==void 0&&(le.updated=Oe.updated),Oe.modified!==void 0&&(le.modified=Oe.modified),Oe._accessLevel!==void 0&&(le._accessLevel=Oe._accessLevel),Oe.annotation&&typeof Oe.annotation=="object"){const u=Oe.annotation;u.name!==void 0&&(le.name=u.name)}const n=JSON.stringify(le,Object.keys(le).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 Oi(Oe,le){const n=Math.max(0,Math.min(1,le));if(Oe.startsWith("rgba(")){const o=Oe.match(/(\d+(?:\.\d+)?)/g);if(o&&o.length>=3){const u=o[0],h=o[1],g=o[2];return`rgba(${u}, ${h}, ${g}, ${n})`}}else if(Oe.startsWith("rgb(")){const o=Oe.match(/(\d+(?:\.\d+)?)/g);if(o&&o.length>=3){const u=o[0],h=o[1],g=o[2];return`rgba(${u}, ${h}, ${g}, ${n})`}}else if(Oe.startsWith("#")){const o=Oe.replace("#","");let u,h,g;return o.length===3?(u=parseInt(o[0]+o[0],16),h=parseInt(o[1]+o[1],16),g=parseInt(o[2]+o[2],16)):(u=parseInt(o.substring(0,2),16),h=parseInt(o.substring(2,4),16),g=parseInt(o.substring(4,6),16)),`rgba(${u}, ${h}, ${g}, ${n})`}return Oe}const ji={documentProperties:[{key:"id",label:"ID",formatter:Oe=>String(Oe)},{key:"elementCount",label:"Elements",formatter:Oe=>String(Oe)},{key:"totalPoints",label:"Points/Vertices",formatter:Oe=>String(Oe)},{key:"types",label:"Types",formatter:Oe=>Array.isArray(Oe)&&Oe.length>0?Oe.join(", "):"N/A",show:!0},{key:"filteredCount",label:"Filtered",formatter:(Oe,le)=>le.filteredCount!==void 0&&le.filteredCount>0?`${le.filteredCount} element(s) (${le.filteredPoints||0} points) skipped`:"None",show:!0}],showFetchedSection:!0,showProvidedSection:!0,showTotalSection:!0,headerText:"Annotation Information"},en=tt.forwardRef(({imageInfo:Oe,annotations:le=[],annotationIds:n=[],apiBaseUrl:o,onViewerReady:u,onAnnotationClick:h,defaultAnnotationColor:g="#ff0000",strokeWidth:y=2,osdOptions:a={},className:w="",height:_="600px",width:S="100%",showAnnotationInfo:B=!1,annotationInfoConfig:O,maxPointsPerAnnotation:V=1e4,maxTotalPoints:W=1e5,fetchFn:k,apiHeaders:ee,showAnnotationControls:_e=!1,defaultAnnotationOpacity:be=1,annotationOpacities:lt,visibleAnnotations:Qe,onAnnotationReady:Xe,annotationCache:bt,disableCache:$=!1,disableVisibilityCheck:At=!1,annotationHeaders:$e},Tt)=>{var vt,Rt;const De=tt.useRef(null),[Mt,_t]=tt.useState(null),[gt,Ft]=tt.useState(null),[dt,Nt]=tt.useState(null),[Vt,Wt]=tt.useState([]),[ni,zt]=tt.useState([]),yt=tt.useRef(null),ri=tt.useRef(""),[Ke,ei]=tt.useState(be),Ye=tt.useMemo(()=>$||bt===null?null:bt||new qi,[bt,$]),Dt=tt.useRef(!0);tt.useEffect(()=>(Dt.current=!0,()=>{Dt.current=!1}),[]);const[oi,St]=tt.useState(!At);tt.useEffect(()=>{if(At){St(!0);return}if(!De.current)return;const Q=new IntersectionObserver(ye=>{ye.forEach(qe=>{qe.isIntersecting&&qe.intersectionRatio>.1?St(!0):St(!1)})},{threshold:.1,rootMargin:"50px"});return Q.observe(De.current),()=>{De.current&&Q.unobserve(De.current)}},[At]),tt.useEffect(()=>{const Q=x=>{if(!x)return!1;const M=x instanceof Error?x.message:String(x);if(M&&typeof M=="string"){const L=M.toLowerCase();if(L.includes("_transformbounds")||L.includes("transformbounds")||L.includes("cannot read properties of null")||L.includes("reading '_transformbounds'")||L.includes('reading "_transformbounds"'))return!0}if(x instanceof Error&&x.stack){const L=x.stack.toLowerCase();if(L.includes("_transformbounds")||L.includes("transformbounds")||L.includes("getbounds"))return!0}if(x instanceof ErrorEvent){const L=x.filename||"";if(L.includes("osd-paperjs-annotation")||L.includes("annotation.js")){const ie=x.message||String(x);if(ie.includes("null")||ie.includes("_transformBounds"))return!0}}return!1},ye=x=>{const M=x instanceof ErrorEvent&&x.error||x;return Q(M)?(x instanceof ErrorEvent&&(x.preventDefault(),x.stopPropagation()),!0):!1},qe=x=>{const M=x.reason;return Q(M)?(x.preventDefault(),x.stopPropagation(),!0):!1};window.addEventListener("error",ye,!0),window.addEventListener("unhandledrejection",qe,!0);const T=window.onerror;return window.onerror=(x,M,L,ie,ve)=>Q(ve)||Q(x)?!0:T?T(x,M,L,ie,ve):!1,()=>{window.removeEventListener("error",ye,!0),window.removeEventListener("unhandledrejection",qe,!0),window.onerror=T}},[]);const qt=tt.useCallback(Q=>{if(!Q||!Q.view)return!1;const ye=Q.view;return!(ye._transformBounds===null||ye._transformBounds===void 0||typeof Q.view.draw!="function")},[]),di=tt.useCallback(Q=>{if(Dt.current){if(!qt(Q)){console.warn("Paper.js not fully initialized, skipping draw operation");return}try{Q.view&&typeof Q.view.draw=="function"&&Q.view.draw()}catch(ye){ye instanceof Error&&ye.message.includes("_transformBounds")?console.warn("Paper.js draw operation skipped (component likely unmounting or hidden)"):console.error("Error drawing Paper.js view:",ye)}}},[qt]),$t=tt.useMemo(()=>Vt.map(Q=>`${Q.id}:${Q.left}:${Q.top}:${Q.width}:${Q.height}`).join("|"),[Vt]),ti=tt.useRef(`osd-viewer-${Math.random().toString(36).substr(2,9)}`),jt=tt.useRef(!1),It=tt.useRef(""),I=tt.useRef(u);tt.useEffect(()=>{I.current=u},[u]);const q=tt.useRef(h);tt.useEffect(()=>{q.current=h},[h]);const pe=tt.useMemo(()=>Oe.dziUrl||`${Oe.imageId}-${Oe.baseUrl}`,[Oe.dziUrl,Oe.imageId,Oe.baseUrl]),Ie=tt.useMemo(()=>{var Q;return Array.isArray(le)?JSON.stringify(le.map(ye=>({id:ye.id,left:ye.left,top:ye.top,width:ye.width,height:ye.height}))):le&&typeof le=="object"&&"type"in le&&le.type==="FeatureCollection"?JSON.stringify(((Q=le.features)==null?void 0:Q.map(ye=>({id:ye.id})))||[]):"[]"},[le]),je=tt.useMemo(()=>!Array.isArray(le)&&le&&typeof le=="object"&&"type"in le&&le.type==="FeatureCollection"?le.features.map(Q=>{var ye,qe,T,x;if(Q.geometry.type==="Polygon"){const M=Q.geometry.coordinates[0];if(M.length>=4){const[L,ie]=M[0],[ve,,,Ne]=M[2],Me=ve-L,Re=Ne-ie;return{id:Q.id||((ye=Q.properties)==null?void 0:ye.id),left:L,top:ie,width:Me,height:Re,color:((qe=Q.properties)==null?void 0:qe.color)||g,group:(T=Q.properties)==null?void 0:T.group,label:(x=Q.properties)==null?void 0:x.label,...Q.properties}}}return null}).filter(Q=>Q!==null):Array.isArray(le)?[...le]:[],[Ie,g]);tt.useEffect(()=>{if(!De.current||!oi&&!jt.current||jt.current)return;let Q=null,ye=null,qe=null;const T=setTimeout(()=>{var x,M,L;if(!(!Dt.current||!De.current)&&oi)try{jt.current=!0,It.current=pe,De.current.id=ti.current;const ie={id:ti.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(Q=hn(ie),ye=Q.createPaperOverlay(),Dt.current&&Ft(ye),qe=new Yi.AnnotationToolkit(Q,{overlay:ye}),qe&&typeof((M=(x=qe.overlay)==null?void 0:x.paperScope)==null?void 0:M.view)<"u"){const ve=qe.overlay.paperScope;if(ve&&ve.view){const Ne=ve.view,Me=He=>{try{return He!=null&&typeof He._transformBounds<"u"&&He._transformBounds!==null}catch{return!1}},Re=new Proxy(Ne,{get:(He,ht)=>{var Et;if(ht==="getBounds"||ht==="_transformBounds")return function(...kt){var Zt,si;try{return!He||!Me(He)?ht==="getBounds"?{x:0,y:0,width:0,height:0}:null:ht==="getBounds"?((Zt=Ne.getBounds)==null?void 0:Zt.apply(He,kt))||{x:0,y:0,width:0,height:0}:He[ht]}catch(hi){if(hi instanceof Error){const pi=((si=hi.message)==null?void 0:si.toLowerCase())||"";if(pi.includes("_transformbounds")||pi.includes("transformbounds")||pi.includes("cannot read properties of null"))return ht==="getBounds"?{x:0,y:0,width:0,height:0}:null}throw hi}};try{const kt=He[ht];return ht==="_transformBounds"&&kt==null?()=>({x:0,y:0,width:0,height:0}):kt}catch(kt){if(kt instanceof Error){const Zt=((Et=kt.message)==null?void 0:Et.toLowerCase())||"";if(Zt.includes("_transformbounds")||Zt.includes("null"))return ht==="_transformBounds"?()=>({x:0,y:0,width:0,height:0}):null}throw kt}}});try{ve.view=Re}catch{}}}if(Dt.current&&Nt(qe),!Q)return;if(Q.addHandler("open-failed",ve=>{console.warn("OpenSeadragon: Open failed",ve)}),Q.addHandler("open",ve=>{!Dt.current||!Q||(console.log("OpenSeadragon: Image opened",ve),_t(Q),I.current&&I.current(Q))}),Q.world.addHandler("add-item",ve=>{if(!Dt.current)return;const Ne=ve;console.log("Tiled image added:",Ne.item),yt.current=Ne.item}),Oe.dziUrl)Q.open(Oe.dziUrl);else{if(!Oe.imageId||!Oe.width||!Oe.height||!Oe.tileWidth||!Oe.levels||!Oe.baseUrl){console.error("SlideViewer: If dziUrl is not provided, all manual fields (imageId, width, height, tileWidth, levels, baseUrl) are required");return}const ve={width:Oe.width,height:Oe.height,tileSize:Oe.tileWidth,minLevel:0,maxLevel:Oe.levels-1,getTileUrl:(Ne,Me,Re)=>`${Oe.baseUrl}/wsi/files/tile/${Oe.imageId}/${Ne}/${Me}/${Re}`};Q&&Q.addTiledImage({tileSource:ve,success:()=>{!Dt.current||!Q||(_t(Q),I.current&&I.current(Q))}})}}catch(ie){if(console.error("Error initializing SlideViewer:",ie),jt.current=!1,ie instanceof Error&&((L=ie.message)!=null&&L.toLowerCase().includes("_transformbounds")))return}},100);return()=>{clearTimeout(T);const x=pe!==It.current;if(!Dt.current||x){if(x&&(It.current=pe),qe)try{qe.destroy()}catch(L){console.warn("Error destroying annotation toolkit:",L)}if(ye)try{ye.destroy()}catch(L){console.warn("Error destroying paper overlay:",L)}if(Q)try{if(typeof Q.isDestroyed=="boolean"&&Q.isDestroyed)return;Q.destroy()}catch(L){console.warn("Error destroying OpenSeadragon viewer:",L)}Dt.current||(jt.current=!1)}}},[pe,a]),tt.useEffect(()=>{if(!Dt.current)return;if(!n||n.length===0||!o){Wt(ye=>ye.length===0?ye:[]),zt(ye=>ye.length===0?ye:[]);return}(async()=>{try{console.log(`Fetching ${n.length} annotation(s) from DSA API...`);const ye=k||fetch,qe=n.map(async Me=>{var si,hi,pi,ci,Ot,fi;const Re=$e?$e instanceof Map?$e.get(Me):$e[String(Me)]:void 0,He=Re?gn(Re):void 0;if(Ye){try{const xt=await Ye.get(Me,He);if(xt!=null){if(xt&&typeof xt=="object"&&(xt.elements||((si=xt.annotation)==null?void 0:si.elements)||((hi=xt.annotation)==null?void 0:hi.elements)===null||Array.isArray((pi=xt.annotation)==null?void 0:pi.elements)))return console.log(`Cache hit for annotation ${Me}${He?` (version hash: ${He})`:""}`,{hasElements:!!(xt!=null&&xt.elements)||!!((ci=xt==null?void 0:xt.annotation)!=null&&ci.elements),elementCount:Array.isArray(xt==null?void 0:xt.elements)?xt.elements.length:Array.isArray((Ot=xt==null?void 0:xt.annotation)==null?void 0:Ot.elements)?xt.annotation.elements.length:0}),xt;console.warn(`Invalid cached data format for annotation ${Me}, clearing cache and fetching fresh...`,{type:typeof xt,keys:xt&&typeof xt=="object"?Object.keys(xt):"N/A",hasElements:!!(xt!=null&&xt.elements)||!!((fi=xt==null?void 0:xt.annotation)!=null&&fi.elements)}),await Ye.delete(Me).catch(yi=>console.warn("Failed to delete invalid cache entry:",yi))}}catch(xt){console.warn(`Error reading from cache for annotation ${Me}, fetching from API:`,xt)}console.log(He?`Cache miss or version mismatch for annotation ${Me} (current version hash: ${He}), fetching from API...`:`Cache miss for annotation ${Me}, fetching from API...`)}const ht=`${o}/annotation/${Me}`;console.log(`Fetching annotation ${Me} from: ${ht}`);const Et={};ee&&(Et.headers=ee);const kt=await ye(ht,Et);if(!kt.ok)return console.warn(`Failed to fetch annotation ${Me}:`,kt.statusText,kt.status),null;const Zt=await kt.json();return console.log(`Successfully fetched annotation ${Me}:`,Zt),Ye&&Zt&&await Ye.set(Me,Zt,{versionHash:He}),Zt}),T=await Promise.all(qe);if(!Dt.current){console.log("Component unmounted during annotation fetch, skipping state update");return}const x=[];let M=0,L=0;const ie=T.filter(Me=>Me!=null).map((Me,Re)=>{var pi;const He=String(n[Re]),ht=new Set,Et=[];let kt=0,Zt=0,si=0,hi=[];if(Me&&typeof Me=="object"){const ci=Me;ci.elements&&Array.isArray(ci.elements)?hi=ci.elements:(pi=ci.annotation)!=null&&pi.elements&&(hi=ci.annotation.elements)}for(const ci of hi)if(ci&&typeof ci=="object"){const Ot=ci;if(Ot.type&&ht.add(Ot.type),Ot.type==="rectangle"&&Ot.x!==void 0&&Ot.y!==void 0&&Ot.width!==void 0&&Ot.height!==void 0)4>V?(Zt++,si+=4,console.warn(`Skipping rectangle annotation ${Ot.group||Et.length} in document ${He}: has 4 points (exceeds limit of ${V})`)):(kt+=4,Et.push({id:Ot.group||Et.length,left:Ot.x,top:Ot.y,width:Ot.width,height:Ot.height,color:Ot.lineColor||g,group:Ot.group,label:Ot.label,annotationType:"rectangle",element:Ot,documentId:He}));else if(Ot.type==="polyline"&&Ot.points&&Ot.points.length>=2){const fi=Ot.points.length;if(fi>V)Zt++,si+=fi,console.warn(`Skipping polyline annotation ${Ot.group||Et.length} in document ${He}: has ${fi} points (exceeds limit of ${V})`);else{kt+=fi;const xt=Ot.points.map(Bi=>Bi[0]),ai=Ot.points.map(Bi=>Bi[1]),yi=Math.min(...xt),Pi=Math.min(...ai),xi=Math.max(...xt),Fi=Math.max(...ai),Ii=xi-yi,Ri=Fi-Pi;Et.push({id:Ot.group||Et.length,left:yi,top:Pi,width:Ii,height:Ri,color:Ot.lineColor||g,group:Ot.group,label:Ot.label,annotationType:"polyline",points:Ot.points,closed:Ot.closed,fillColor:Ot.fillColor,element:Ot,documentId:He})}}}return x.push({id:He,elementCount:Et.length,totalPoints:kt,types:Array.from(ht),filteredCount:Zt>0?Zt:void 0,filteredPoints:si>0?si:void 0}),M+=Zt,L+=si,Et}).flat();let ve=ie;const Ne=ie.reduce((Me,Re)=>Re.annotationType==="polyline"&&Re.points?Me+Re.points.length:Me+4,0);if(Ne>W){console.warn(`Total points (${Ne}) exceeds limit (${W}). Filtering annotations starting from largest ones...`);const Me=ie.map(He=>({annotation:He,pointCount:He.annotationType==="polyline"&&He.points?He.points.length:4}));Me.sort((He,ht)=>ht.pointCount-He.pointCount);let Re=0;ve=[];for(const{annotation:He,pointCount:ht}of Me)Re+ht<=W?(ve.push(He),Re+=ht):console.warn(`Skipping annotation ${He.id}: adding ${ht} points would exceed total limit (${Re+ht} > ${W})`);console.warn(`Filtered annotations: ${ie.length} → ${ve.length} (${ie.length-ve.length} skipped)`)}if(M>0&&console.warn(`Annotation document(s) ${n.join(", ")}: ${M} annotation(s) filtered due to per-annotation point limits (${L} total points skipped)`),console.log(`Parsed ${ve.length} annotation feature(s) from ${n.length} annotation document(s)`),!Dt.current){console.log("Component unmounted after annotation parsing, skipping state update");return}Wt(ve),zt(x)}catch(ye){console.error("Error fetching annotations:",ye),Dt.current&&Wt([])}})()},[n?JSON.stringify(n):"",o||"",g,V,W]),tt.useEffect(()=>{if(!Mt||!gt||!dt)return;const Q=gt.paperScope;if(!Q||!Q.project)return;const ye=yt.current;if(!ye||typeof ye.addPaperItem!="function")return;const qe=[...je,...Vt],T=`${Ie}:${$t}`;if(ri.current===T)return;if(ri.current=T,console.log(`Rendering ${qe.length} total annotation(s)`),qe.length===0){try{const L=dt.getFeatures();if(L&&Array.isArray(L))for(const ie of L)try{ie.remove()}catch(ve){console.warn("Error removing feature:",ve)}}catch(L){console.warn("Could not clear existing features:",L)}return}console.log(`About to render ${qe.length} annotations, tiledImage:`,ye);try{if(ye.paperItems&&Array.isArray(ye.paperItems)&&ye.paperItems.length>0){const L=[...ye.paperItems].reverse();for(const ie of L)try{ie&&typeof ie.remove=="function"&&ie.remove()}catch{}}try{const L=dt.getFeatures();if(L&&Array.isArray(L)&&L.length>0){const ie=L.filter(ve=>ve!=null&&typeof ve.remove=="function");for(const ve of ie)try{ve.remove()}catch{}}}catch{}}catch(L){console.warn("Error clearing existing annotations:",L)}const x=lt instanceof Map?new Map(Array.from(lt.entries()).map(([L,ie])=>[String(L),ie])):lt?new Map(Object.entries(lt).map(([L,ie])=>[String(L),ie])):null,M=new Set;for(const L of qe)try{const ie=L.documentId,ve=ie!==void 0?String(ie):void 0;console.log(`SlideViewer: Processing annotation feature id=${L.id}, documentId=${ie}, lookupId=${ve}`);let Ne=Ke;if(x&&ve!==void 0){const Re=x.get(ve);Re!==void 0&&(Ne=Re)}if(console.log(`SlideViewer: Annotation opacity=${Ne}, will ${Ne<=0?"skip":"render"}`),Ne<=0){console.log("SlideViewer: Skipping annotation with opacity 0 (hidden)");continue}let Me;if(L.annotationType==="polyline"&&L.points&&Array.isArray(L.points)){const Re=new Q.Path,He=L.color||g;Re.strokeColor=Oi(He,Ne),Re.strokeWidth=y;const ht=L.fillColor||"rgba(0, 0, 0, 0)";Re.fillColor=Oi(ht,Ne),L.points.forEach((Et,kt)=>{kt===0?Re.moveTo(Et[0],Et[1]):Re.lineTo(Et[0],Et[1])}),L.closed&&Re.closePath(),Me=Re}else{const Re=new Q.Rectangle(L.left,L.top,L.width,L.height),He=new Q.Path.Rectangle(Re),ht=L.color||g;He.strokeColor=Oi(ht,Ne),He.strokeWidth=y,He.fillColor=Oi("rgba(0, 0, 0, 0)",Ne),Me=He}if(Me.data={annotation:L},Me.annotationId=L.id,q.current&&(Me.onClick=Re=>{var He;(He=q.current)==null||He.call(q,L)}),Me.style={rescale:{strokeWidth:y}},ye.addPaperItem(Me),Me&&typeof Me=="object")try{Yi.AnnotationToolkit.registerFeature(Me)}catch(Re){console.warn("Failed to register feature with toolkit:",Re)}ve!==void 0?(M.add(ve),console.log(`SlideViewer: Added documentId '${ve}' to renderedDocumentIds. Set now has:`,Array.from(M))):console.warn(`SlideViewer: Cannot track document ID - lookupId is undefined for annotation id=${L.id}`)}catch(ie){console.error(`Error rendering annotation ${L.id}:`,ie,L)}di(Q),console.log(`Finished rendering ${qe.length} annotations`),console.log(`SlideViewer: onAnnotationReady is ${Xe?"defined":"undefined"}, renderedDocumentIds has ${M.size} items:`,Array.from(M)),Xe&&M.size>0?setTimeout(()=>{console.log(`SlideViewer: setTimeout fired, calling onAnnotationReady for ${M.size} document(s)`),M.forEach(L=>{try{console.log(`SlideViewer: Calling onAnnotationReady('${L}')`),Xe(L)}catch(ie){console.error(`Error calling onAnnotationReady for ${L}:`,ie)}})},100):console.warn(`SlideViewer: Not calling onAnnotationReady - callback is ${Xe?"":"not "}defined, renderedDocumentIds has ${M.size} items`)},[Mt,gt,dt,Ie,$t,y,Ke,lt,Qe,Xe]),tt.useEffect(()=>{var ye;if(!Mt||!gt||!dt)return;const Q=gt.paperScope;if(!(!Q||!Q.project))try{const qe=dt.getFeatures();if(qe&&Array.isArray(qe)){const T=lt instanceof Map?lt:lt?new Map(Object.entries(lt).map(([M,L])=>[String(M),L])):null;let x=!1;for(const M of qe)try{if(M&&typeof M=="object"){const L=M,ie=(ye=L.data)==null?void 0:ye.annotation;if(!ie)continue;const ve=ie.documentId,Ne=ve!==void 0?String(ve):void 0;if(Ne===void 0)continue;let Me=Ke;if(T&&Ne!==void 0){const Et=T.get(Ne);Et!==void 0&&(Me=Et)}if(Me<=0){try{const Et=ie.color||g,kt=ie.fillColor||"rgba(0, 0, 0, 0)";L.strokeColor&&(L.strokeColor=Oi(Et,0),x=!0),L.fillColor&&(L.fillColor=Oi(kt,0),x=!0)}catch{try{L.remove&&(L.remove(),x=!0)}catch(kt){console.warn("Could not hide annotation:",kt)}}continue}let Re=Ke;if(T&&Ne!==void 0&&T.has(Ne)){const Et=T.get(Ne);Et!==void 0&&(Re=Et)}const He=ie.color||g,ht=ie.fillColor||"rgba(0, 0, 0, 0)";L.strokeColor&&(L.strokeColor=Oi(He,Re),x=!0),L.fillColor&&(L.fillColor=Oi(ht,Re),x=!0)}}catch(L){console.warn("Error updating annotation opacity:",L)}x&&di(Q)}}catch(qe){console.warn("Could not update annotation opacity:",qe)}},[Ke,lt,Qe,Mt,gt,dt,be,g,di]);const et=tt.useMemo(()=>({documentProperties:(O==null?void 0:O.documentProperties)??ji.documentProperties??[],showFetchedSection:(O==null?void 0:O.showFetchedSection)??ji.showFetchedSection??!0,showProvidedSection:(O==null?void 0:O.showProvidedSection)??ji.showProvidedSection??!0,showTotalSection:(O==null?void 0:O.showTotalSection)??ji.showTotalSection??!0,headerText:(O==null?void 0:O.headerText)??ji.headerText??"Annotation Information"}),[O]),ke={width:typeof S=="number"?`${S}px`:S,height:typeof _=="number"?`${_}px`:_};return Ee.jsxs("div",{ref:Tt,className:`bdsa-slide-viewer ${w}`,style:ke,children:[Ee.jsx("div",{ref:De,className:"bdsa-slide-viewer__container"}),(B||_e)&&Ee.jsxs("div",{className:"bdsa-slide-viewer__sidebar",children:[_e&&Ee.jsxs("div",{className:"bdsa-slide-viewer__controls",children:[Ee.jsx("div",{className:"bdsa-slide-viewer__controls-header",children:Ee.jsx("strong",{children:"Annotation Controls"})}),Ee.jsxs("div",{className:"bdsa-slide-viewer__controls-section",children:[Ee.jsxs("div",{className:"bdsa-slide-viewer__controls-label",children:["Opacity: ",Math.round(Ke*100),"%"]}),Ee.jsx("input",{type:"range",min:"0",max:"1",step:"0.01",value:Ke,onChange:Q=>ei(parseFloat(Q.target.value)),className:"bdsa-slide-viewer__opacity-slider"})]})]}),B&&(Array.isArray(le)&&le.length>0||!Array.isArray(le)&&le&&"type"in le&&le.type==="FeatureCollection"&&((vt=le.features)==null?void 0:vt.length)>0||ni.length>0||Vt.length>0)&&Ee.jsxs("div",{className:"bdsa-slide-viewer__annotation-info",children:[Ee.jsx("div",{className:"bdsa-slide-viewer__annotation-info-header",children:Ee.jsx("strong",{children:et.headerText})}),et.showFetchedSection&&ni.length>0&&Ee.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[Ee.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Fetched from DSA API:"}),ni.map(Q=>Ee.jsx("div",{className:"bdsa-slide-viewer__annotation-info-item",children:et.documentProperties.filter(ye=>ye.show!==!1).map(ye=>{const qe=Q[ye.key],T=ye.formatter?ye.formatter(qe,{...Q,totalPoints:Q.totalPoints??0}):String(qe??"N/A");return Ee.jsxs("div",{children:[ye.label,": ",T]},ye.key)})},Q.id))]}),et.showProvidedSection&&(Array.isArray(le)&&le.length>0||!Array.isArray(le)&&le&&le.type==="FeatureCollection")&&Ee.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[Ee.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Provided Annotations:"}),Ee.jsx("div",{className:"bdsa-slide-viewer__annotation-info-item",children:Array.isArray(le)?Ee.jsxs("div",{children:["Count: ",le.length]}):Ee.jsxs("div",{children:["GeoJSON FeatureCollection with ",((Rt=le.features)==null?void 0:Rt.length)||0," features"]})})]}),et.showTotalSection&&Ee.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[Ee.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Total Rendered:"}),Ee.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-item",children:[Vt.length+(Array.isArray(le)?le.length:0)," annotation(s)"]})]})]})]})]})});en.displayName="SlideViewer";const tn=tt.forwardRef(({imageId:Oe,apiBaseUrl:le,limit:n=50,fetchFn:o,apiHeaders:u,onAnnotationsLoaded:h,onError:g,showDebugPanel:y=!1,onAnnotationLoadChange:a,onAnnotationVisibilityChange:w,onAnnotationOpacityChange:_,onAnnotationReady:S,slideViewerOnAnnotationReady:B,onLoadedAnnotationIdsChange:O,onAnnotationLoad:V,onAnnotationHide:W,onAnnotationStateChange:k,onAnnotationOpacitiesChange:ee,onAnnotationHeadersChange:_e,loadedAnnotations:be,visibleAnnotations:lt,annotationOpacities:Qe,annotationCache:Xe,disableCache:bt=!1,showDefaultUI:$=!0,className:At="",children:$e},Tt)=>{const[De,Mt]=tt.useState([]),[_t,gt]=tt.useState(!1),[Ft,dt]=tt.useState(null),[Nt,Vt]=tt.useState(null),[Wt,ni]=tt.useState(new Set),[zt,yt]=tt.useState(new Map),[ri,Ke]=tt.useState(new Map),ei=tt.useRef(new Map),[Ye,Dt]=tt.useState(null),[oi,St]=tt.useState(new Set),qt=tt.useRef(new Set),[di,$t]=tt.useState(new Set),ti=tt.useMemo(()=>bt||Xe===null?null:Xe||new qi,[Xe,bt]),jt=be??Wt,It=lt??zt,I=Qe??ri,q=tt.useMemo(()=>Array.from(jt).sort(),[jt]);tt.useEffect(()=>{O&&O(q)},[q,O]);const pe=tt.useCallback(()=>{const T=Array.from(jt).sort(),x=new Map(I),M=new Map(It);k&&k({loadedAnnotationIds:T,opacities:x,visibility:M}),ee&&ee(x),O&&O(T)},[jt,I,It,k,ee,O]),Ie=tt.useMemo(()=>Array.from(I.entries()).sort(([T],[x])=>T.localeCompare(x)),[I]),je=tt.useMemo(()=>Array.from(It.entries()).sort(([T],[x])=>T.localeCompare(x)),[It]);tt.useEffect(()=>{pe()},[pe,q,Ie,je]);const et=tt.useCallback(T=>{const x=String(T);qt.current.has(x)||(qt.current.add(x),St(M=>{const L=new Set(M);return L.delete(x),L}),ti&&ti.has(x).then(M=>{M&&$t(L=>new Set(L).add(x))}).catch(()=>{}),S==null||S(x),B==null||B(x))},[S,B,ti]),ke=et,vt=tt.useCallback(T=>{const x=String(T);jt.has(x)?(be||ni(L=>{const ie=new Set(L);return ie.delete(x),ie}),lt||yt(L=>{const ie=new Map(L);return ie.delete(x),ie}),Qe||Ke(L=>{const ie=new Map(L);return ie.delete(x),ie}),a==null||a(x,!1),W==null||W(x),St(L=>{const ie=new Set(L);return ie.delete(x),ie}),qt.current.delete(x),setTimeout(()=>pe(),0)):(console.log(`AnnotationManager: Starting to load annotation ${x}`),St(L=>{const ie=new Set(L).add(x);return console.log(`AnnotationManager: Added ${x} to loading set. Now loading:`,Array.from(ie)),ie}),be||ni(L=>new Set(L).add(x)),lt||yt(L=>new Map(L).set(x,!0)),Qe||Ke(L=>new Map(L).set(x,1)),a==null||a(x,!0),V==null||V(x),setTimeout(()=>pe(),0))},[be,lt,Qe,jt,a,V,W,pe]),Rt=tt.useCallback(T=>{const x=I.get(T)??1;if(x>0){ei.current.set(T,x);const L=0;Qe||Ke(ie=>new Map(ie).set(T,L)),_==null||_(T,L),lt||yt(ie=>new Map(ie).set(T,!1)),w==null||w(T,!1)}else{const L=ei.current.get(T)??1;ei.current.delete(T),Qe||Ke(ie=>new Map(ie).set(T,L)),_==null||_(T,L),lt||yt(ie=>new Map(ie).set(T,!0)),w==null||w(T,!0)}setTimeout(()=>pe(),0)},[Qe,lt,I,_,w,pe]),Q=tt.useCallback((T,x)=>{Qe||Ke(M=>new Map(M).set(T,x)),_==null||_(T,x),setTimeout(()=>pe(),0)},[Qe,_,pe]);tt.useEffect(()=>{if(!Oe||!le){Mt([]),gt(!1),dt(null),Vt(null);return}(async()=>{gt(!0),dt(null),Vt(null);try{const x=new URLSearchParams({itemId:Oe,limit:String(n),offset:"0",sort:"lowerName",sortdir:"1"}),M=`${le}/annotation?${x.toString()}`,L=o||fetch,ie={};u&&(ie.headers=u),console.log(`AnnotationManager: Fetching annotations from: ${M}`);const ve=await L(M,ie);if(!ve.ok)throw new Error(`Failed to fetch annotations: ${ve.status} ${ve.statusText}`);const Ne=await ve.json();console.log("AnnotationManager: API response:",Ne),y&&Vt(JSON.stringify(Ne,null,2));let Me=[];if(Array.isArray(Ne)?(Me=Ne,console.log(`AnnotationManager: Parsed ${Me.length} annotation(s) from array response`)):Ne&&Array.isArray(Ne.data)?(Me=Ne.data,console.log(`AnnotationManager: Parsed ${Me.length} annotation(s) from paginated response`)):Ne&&typeof Ne=="object"?(Me=[Ne],console.log("AnnotationManager: Parsed 1 annotation from single object response")):console.warn("AnnotationManager: Unexpected response format:",typeof Ne,Ne),Mt(Me),console.log(`AnnotationManager: Fetched ${Me.length} annotation(s) from API`),Me.length>0&&console.log("AnnotationManager: Annotation IDs:",Me.map(Re=>Re._id)),_e&&Me.length>0){const Re=new Map;Me.forEach(He=>{Re.set(String(He._id),He)}),_e(Re)}ti&&Me.length>0?(async()=>{const He=new Set;for(const ht of Me){const Et=String(ht._id);try{await ti.has(Et)&&He.add(Et)}catch{}}$t(He)})():$t(new Set),h&&h(Me)}catch(x){const M=x instanceof Error?x:new Error(String(x));dt(M),Vt(null),g&&g(M)}finally{gt(!1)}})()},[Oe,le,n,o,u,h,g,y,_e]),tt.useEffect(()=>{if(_e&&De.length>0){const T=new Map;De.forEach(x=>{T.set(String(x._id),x)}),_e(T)}},[De,_e]);const ye=tt.useMemo(()=>({annotations:De,loading:_t,error:Ft,annotationIds:De.map(T=>T._id),loadedAnnotations:jt,visibleAnnotations:It,annotationOpacities:I,toggleLoad:vt,toggleVisibility:Rt,setOpacity:Q,handleAnnotationReady:et,onAnnotationReady:ke,loadingAnnotations:oi}),[De,_t,Ft,jt,It,I,vt,Rt,Q,et,ke,oi]),qe=()=>{if(_t)return Ee.jsx("div",{className:"bdsa-annotation-manager__list",children:Ee.jsx("div",{className:"bdsa-annotation-manager__empty-state",children:Ee.jsx("p",{children:"Loading annotations..."})})});if(Ft)return Ee.jsx("div",{className:"bdsa-annotation-manager__list",children:Ee.jsx("div",{className:"bdsa-annotation-manager__empty-state",style:{color:"#dc3545"},children:Ee.jsxs("p",{children:["Error: ",Ft.message]})})});if(De.length===0)return Ee.jsx("div",{className:"bdsa-annotation-manager__list",children:Ee.jsx("div",{className:"bdsa-annotation-manager__empty-state",children:Ee.jsx("p",{children:"No annotations found"})})});const T=Array.from(jt).length;return Ee.jsxs("div",{className:"bdsa-annotation-manager__list",children:[Ee.jsxs("div",{className:"bdsa-annotation-manager__list-header",children:[Ee.jsxs("h3",{children:["Annotations (",De.length," total)"]}),Ee.jsxs("p",{children:[T," loaded in viewer"]})]}),De.map(x=>{var Re;const M=String(x._id),L=jt.has(M),ie=oi.has(M),ve=I.get(M)??1,Ne=di.has(M),Me=Ye===M;return Ee.jsxs("div",{className:`bdsa-annotation-manager__annotation-card ${L?"bdsa-annotation-manager__annotation-card--loaded":""} ${Me?"bdsa-annotation-manager__annotation-card--selected":""}`,onClick:()=>Dt(x._id),children:[Ee.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-header",children:[Ee.jsx("h4",{className:"bdsa-annotation-manager__annotation-card-title",children:((Re=x.annotation)==null?void 0:Re.name)||x._id}),Ee.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-meta",children:[x.public===!1&&Ee.jsx("span",{className:"bdsa-annotation-manager__annotation-card-badge bdsa-annotation-manager__annotation-card-badge--private",children:"Private"}),x.public===!0&&Ee.jsx("span",{className:"bdsa-annotation-manager__annotation-card-badge bdsa-annotation-manager__annotation-card-badge--public",children:"Public"}),Ne&&Ee.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-cache-indicator-group",children:[Ee.jsx("span",{className:"bdsa-annotation-manager__annotation-card-cache-indicator",title:"Cached locally - will load quickly",children:Ee.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[Ee.jsx("rect",{x:"2",y:"3",width:"20",height:"18",rx:"2"}),Ee.jsx("path",{d:"M7 3h10M7 21h10M9 9h6M9 15h6"})]})}),ti&&typeof ti.delete=="function"&&Ee.jsx("button",{className:"bdsa-annotation-manager__annotation-card-cache-bypass",onClick:async He=>{He.stopPropagation();const ht=String(x._id);try{await ti.delete(ht),$t(Et=>{const kt=new Set(Et);return kt.delete(ht),kt}),jt.has(ht)&&(vt(ht),setTimeout(()=>vt(ht),100))}catch(Et){console.warn("Failed to clear cache for annotation:",Et)}},title:"Clear cache and refresh this annotation",children:Ee.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[Ee.jsx("path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"}),Ee.jsx("path",{d:"M21 3v5h-5"}),Ee.jsx("path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"}),Ee.jsx("path",{d:"M3 21v-5h5"})]})})]}),Ee.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:He=>{He.stopPropagation(),vt(String(x._id))},title:L?"Unload annotation":"Load annotation",children:L?Ee.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:Ee.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})}):Ee.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[Ee.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),Ee.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})})]})]}),Ee.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-details",children:[x._elementCount!==void 0&&Ee.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-detail",children:[Ee.jsx("strong",{children:"Elements:"})," ",x._elementCount]}),x._detailsCount!==void 0&&Ee.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-detail",children:[Ee.jsx("strong",{children:"Points:"})," ",x._detailsCount.toLocaleString()]})]}),Ee.jsx("div",{className:"bdsa-annotation-manager__annotation-card-controls",children:ie?Ee.jsxs("div",{className:"bdsa-annotation-manager__loading-indicator",children:[Ee.jsx("div",{className:"bdsa-annotation-manager__spinner"}),Ee.jsx("span",{children:"Loading..."})]}):L?Ee.jsxs(Ee.Fragment,{children:[Ee.jsx("button",{className:"bdsa-annotation-manager__annotation-card-button bdsa-annotation-manager__annotation-card-button--visibility",onClick:He=>{He.stopPropagation(),Rt(x._id)},title:ve>0?"Hide annotation":"Show annotation",children:Ee.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:ve>0?Ee.jsxs(Ee.Fragment,{children:[Ee.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),Ee.jsx("circle",{cx:"12",cy:"12",r:"3"})]}):Ee.jsxs(Ee.Fragment,{children:[Ee.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"}),Ee.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]})})}),Ee.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-opacity",onClick:He=>He.stopPropagation(),children:[Ee.jsxs("label",{className:"bdsa-annotation-manager__annotation-card-opacity-label",children:["Opacity: ",Math.round(ve*100),"%"]}),Ee.jsx("input",{type:"range",min:"0",max:"1",step:"0.01",value:ve,onChange:He=>Q(x._id,parseFloat(He.target.value)),onClick:He=>He.stopPropagation(),onMouseDown:He=>He.stopPropagation(),className:"bdsa-annotation-manager__annotation-card-opacity-slider"})]})]}):null})]},x._id)})]})};return Ee.jsxs("div",{ref:Tt,className:`bdsa-annotation-manager ${At}`,children:[$?Ee.jsxs(Ee.Fragment,{children:[qe(),$e&&typeof $e=="function"?$e(ye):$e]}):$e&&typeof $e=="function"?$e(ye):$e,y&&Nt&&Ee.jsxs("div",{className:"bdsa-annotation-manager__debug-panel",children:[Ee.jsx("div",{className:"bdsa-annotation-manager__debug-panel-header",children:Ee.jsx("strong",{children:"Raw API Response (Debug)"})}),Ee.jsx("pre",{className:"bdsa-annotation-manager__debug-panel-content",children:Nt})]})]})});tn.displayName="AnnotationManager";const nn=tt.forwardRef(({apiBaseUrl:Oe,fetchFn:le,apiHeaders:n,onResourceSelect:o,onSelectionChange:u,showCollections:h=!0,rootId:g,rootType:y,startCollectionId:a,startFolderId:w,parentFolderId:_,foldersPerPage:S=50,className:B="",renderCollection:O,renderFolder:V,showItems:W=!0,itemsPerPage:k=50,onItemSelect:ee,renderItem:_e},be)=>{const[lt,Qe]=tt.useState([]),[Xe,bt]=tt.useState(null),[$,At]=tt.useState(null),[$e,Tt]=tt.useState({}),[De,Mt]=tt.useState({}),[_t,gt]=tt.useState({}),[Ft,dt]=tt.useState({}),[Nt,Vt]=tt.useState(new Set),[Wt,ni]=tt.useState(new Set),[zt,yt]=tt.useState(null),[ri,Ke]=tt.useState(!1),[ei,Ye]=tt.useState({}),[Dt,oi]=tt.useState({}),[St,qt]=tt.useState(null),di=tt.useRef(null),$t=tt.useCallback(()=>{const Q={};return n&&(Q.headers=n),Q},[n]),ti=tt.useCallback(async()=>{if(!Oe){qt(new Error("API base URL is required"));return}Ke(!0),qt(null);try{const Q=`${Oe}/collection`,ye=le||fetch,qe=$t(),T=await ye(Q,qe);if(!T.ok)throw new Error(`Failed to fetch collections: ${T.status} ${T.statusText}`);const x=await T.json(),M=Array.isArray(x)?x:x.items||[];Qe(M),a&&M.some(L=>L._id===a)&&(Vt(new Set([a])),await jt(M.find(L=>L._id===a)))}catch(Q){const ye=Q instanceof Error?Q:new Error("Unknown error loading collections");qt(ye),console.error("Error loading collections:",ye)}finally{Ke(!1)}},[Oe,le,$t,a]),jt=tt.useCallback(async(Q,ye=!1)=>{if(!Oe||!(Q!=null&&Q._id))return;let qe=!1,T=0;if(gt(x=>{const M=x[Q._id];return M!=null&&M.loaded&&!ye&&(qe=!0),ye&&M&&(T=M.offset),x}),!qe){Ye(x=>({...x,[Q._id]:!0}));try{const x=new URLSearchParams({parentType:"collection",parentId:Q._id});S>0&&(x.append("limit",String(S)),x.append("offset",String(T)));const M=`${Oe}/folder?${x.toString()}`,L=le||fetch,ie=$t(),ve=await L(M,ie);if(!ve.ok){console.warn(`Failed to fetch folders for collection ${Q._id}:`,ve.statusText);return}const Ne=await ve.json();let Me=[],Re=!1;Array.isArray(Ne)?(Me=Ne,Re=S>0&&Ne.length===S):(Me=Ne.items||[],Re=S>0&&Ne.total>T+Me.length),Tt(He=>({...He,[Q._id]:ye?[...He[Q._id]||[],...Me]:Me})),gt(He=>({...He,[Q._id]:{offset:S>0?T+Me.length:0,hasMore:S>0?Re:!1,loaded:!0}})),!ye&&w&&Me.some(He=>He._id===w)&&(ni(He=>new Set(He).add(w)),await It(Me.find(He=>He._id===w),!0))}catch(x){console.error(`Error loading folders for collection ${Q._id}:`,x)}finally{Ye(x=>({...x,[Q._id]:!1}))}}},[Oe,le,$t,w,S]),It=tt.useCallback(async(Q,ye=!1)=>{if(!Oe||!(Q!=null&&Q._id))return;let qe=!1,T=0;if(gt(x=>{const M=x[Q._id];return M!=null&&M.loaded&&!ye&&(qe=!0),ye&&M&&(T=M.offset),x}),!qe){Ye(x=>({...x,[Q._id]:!0}));try{const x=new URLSearchParams({parentType:"folder",parentId:Q._id});S>0&&(x.append("limit",String(S)),x.append("offset",String(T)));const M=`${Oe}/folder?${x.toString()}`,L=le||fetch,ie=$t(),ve=await L(M,ie);if(!ve.ok){console.warn(`Failed to fetch subfolders for folder ${Q._id}:`,ve.statusText);return}const Ne=await ve.json();let Me=[],Re=!1;Array.isArray(Ne)?(Me=Ne,Re=S>0&&Ne.length===S):(Me=Ne.items||[],Re=S>0&&Ne.total>T+Me.length),Tt(He=>({...He,[Q._id]:ye?[...He[Q._id]||[],...Me]:Me})),gt(He=>({...He,[Q._id]:{offset:S>0?T+Me.length:0,hasMore:S>0?Re:!1,loaded:!0}}))}catch(x){console.error(`Error loading subfolders for folder ${Q._id}:`,x)}finally{Ye(x=>({...x,[Q._id]:!1}))}}},[Oe,le,$t,S]),I=tt.useCallback(async(Q,ye,qe=!1)=>{if(!Oe||!W)return;ye&&console.log(`[FolderBrowser] Checking folder ${Q} (${ye.name}):`,{parentType:ye.parentType,parentId:ye.parentId,hasItems:!0}),ye?ye.parentType==="collection"?console.log(`[FolderBrowser] Root folder ${Q} (${ye.name}) - attempting item fetch (typically empty, but checking anyway)`):ye.parentType==="folder"?console.log(`[FolderBrowser] Subfolder ${Q} (${ye.name}) - fetching items`):console.log(`[FolderBrowser] Folder ${Q} (${ye.name}) - parentType unknown (${ye.parentType}), attempting fetch`):console.log(`[FolderBrowser] Folder object not provided for ${Q} - attempting item fetch`);const T=qe&&Ft[Q]?Ft[Q].offset:0;oi(x=>({...x,[Q]:!0}));try{const x=new URLSearchParams;x.append("folderId",Q),k>0&&(x.append("limit",String(k)),x.append("offset",String(T)));const M=`${Oe}/item?${x.toString()}`;console.log(`[FolderBrowser] Fetching items from: ${M}`);const L=le||fetch,ie=$t(),ve=await L(M,ie);if(!ve.ok){console.warn(`[FolderBrowser] Failed to fetch items for folder ${Q}:`,ve.status,ve.statusText);return}const Ne=await ve.json();console.log("[FolderBrowser] Received response:",Ne);let Me=[],Re=!1;Array.isArray(Ne)?(Me=Ne,Re=k>0&&Ne.length===k):(Me=Ne.items||[],Re=k>0&&Ne.total>T+Me.length),console.log(`[FolderBrowser] Parsed ${Me.length} items for folder ${Q}`),Mt(He=>({...He,[Q]:qe?[...He[Q]||[],...Me]:Me})),k>0&&dt(He=>({...He,[Q]:{offset:T+Me.length,hasMore:Re}}))}catch(x){console.error(`[FolderBrowser] Error loading items for folder ${Q}:`,x)}finally{oi(x=>({...x,[Q]:!1}))}},[Oe,le,$t,W,k,Ft]),q=tt.useCallback(async()=>{if(!(!Oe||!g||!y)){Ke(!0),qt(null);try{let Q=y==="collection"?`${Oe}/collection/${g}`:`${Oe}/folder/${g}`;const ye=le||fetch,qe=$t();let T=await ye(Q,qe),x=null;if(T.ok)x=await T.json();else if(console.warn(`Direct fetch failed for ${y} ${g}, trying list endpoint...`),y==="collection"){const M=`${Oe}/collection`;if(T=await ye(M,qe),!T.ok)throw new Error(`Failed to fetch collections: ${T.status} ${T.statusText}`);const L=await T.json();if(x=(Array.isArray(L)?L:L.items||[]).find(ve=>ve._id===g)||null,!x)throw new Error(`Collection with ID ${g} not found`)}else{try{const M=`${Oe}/folder`;if(T=await ye(M,qe),T.ok){const L=await T.json();x=(Array.isArray(L)?L:L.items||[]).find(ve=>ve._id===g)||null}}catch{console.warn("Could not list folders directly, will need to search through collections")}if(!x){const M=`${Oe}/collection`,L=await ye(M,qe);if(!L.ok)throw new Error(`Failed to fetch collections for folder search: ${L.status}`);const ie=await L.json(),ve=Array.isArray(ie)?ie:ie.items||[];for(const Ne of ve){const Me=`${Oe}/folder?parentType=collection&parentId=${Ne._id}`,Re=await ye(Me,qe);if(Re.ok){const He=await Re.json(),ht=Array.isArray(He)?He:He.items||[],Et=ht.find(Zt=>Zt._id===g);if(Et){x=Et;break}const kt=async Zt=>{const si=`${Oe}/folder?parentType=folder&parentId=${Zt._id}`,hi=await ye(si,qe);if(hi.ok){const pi=await hi.json(),ci=Array.isArray(pi)?pi:pi.items||[],Ot=ci.find(fi=>fi._id===g);if(Ot)return Ot;for(const fi of ci){const xt=await kt(fi);if(xt)return xt}}return null};for(const Zt of ht){const si=await kt(Zt);if(si){x=si;break}}if(x)break}}if(!x)throw new Error(`Folder with ID ${g} not found in any collection`)}}if(!x)throw new Error(`${y} with ID ${g} not found`);if(y==="collection"){const M=x;bt(M),Vt(new Set([g])),await jt(M)}else{const M=x;At(M),ni(new Set([g])),await It(M)}}catch(Q){const ye=Q instanceof Error?Q:new Error(`Unknown error loading ${y}`);qt(ye),console.error(`Error loading root ${y}:`,ye)}finally{Ke(!1)}}},[Oe,g,y,le,$t,jt,It]),pe=tt.useCallback(async Q=>{if(Nt.has(Q._id))Vt(qe=>{const T=new Set(qe);return T.delete(Q._id),T});else{const qe=di.current;let T=null,x=0;if(qe){let M=qe.parentElement;for(;M&&M!==document.body;){const L=window.getComputedStyle(M),ie=L.overflowY||L.overflow;if(ie==="auto"||ie==="scroll"){T=M,x=M.scrollTop;break}if(M.scrollHeight>M.clientHeight&&M.clientHeight>0){T=M,x=M.scrollTop;break}M=M.parentElement}}if(Vt(M=>new Set(M).add(Q._id)),await jt(Q,!1),T){const M=x;requestAnimationFrame(()=>{requestAnimationFrame(()=>{T&&T.scrollTop!==void 0&&(T.scrollTop=M)})})}}},[Nt,jt]),Ie=tt.useCallback(async Q=>{if(Wt.has(Q._id))ni(qe=>{const T=new Set(qe);return T.delete(Q._id),T});else{const qe=di.current;let T=null,x=0;if(qe){let M=qe.parentElement;for(;M&&M!==document.body;){const L=window.getComputedStyle(M),ie=L.overflowY||L.overflow;if(ie==="auto"||ie==="scroll"){T=M,x=M.scrollTop;break}if(M.scrollHeight>M.clientHeight&&M.clientHeight>0){T=M,x=M.scrollTop;break}M=M.parentElement}}if(ni(M=>new Set(M).add(Q._id)),await It(Q,!1),W?(console.log(`[FolderBrowser] Toggling folder ${Q._id} (${Q.name}) - showItems=${W}, calling loadItemsForFolder`),await I(Q._id,Q,!1)):console.log(`[FolderBrowser] Toggling folder ${Q._id} (${Q.name}) - showItems is FALSE, skipping item load`),T){const M=x;requestAnimationFrame(()=>{requestAnimationFrame(()=>{T&&T.scrollTop!==void 0&&(T.scrollTop=M)})})}}},[Wt,It,W,I]),je=tt.useCallback((Q,ye)=>{const qe={...Q,type:ye};yt(qe),o==null||o(qe),u==null||u(qe)},[o,u]),et=tt.useCallback(Q=>{const ye={...Q,type:"item"};yt(ye),ee==null||ee(Q),u==null||u(ye)},[ee,u]);tt.useEffect(()=>{g&&y&&Oe?q():h&&Oe?ti():h&&!Oe&&(qt(new Error("API base URL is required")),Ke(!1))},[g,y,h,Oe,ti,q]);const ke=tt.useCallback((Q,ye)=>{const qe=(zt==null?void 0:zt._id)===Q._id&&(zt==null?void 0:zt.type)==="item";return _e?_e(Q,ye):Ee.jsx("div",{className:"bdsa-folder-browser__item",style:{marginLeft:`${ye*20}px`},children:Ee.jsxs("div",{className:`bdsa-folder-browser__folder-header ${qe?"selected":""}`,onClick:()=>et(Q),onDoubleClick:()=>et(Q),children:[Ee.jsx("span",{className:"bdsa-folder-browser__folder-icon",children:"📄"}),Ee.jsx("span",{className:"bdsa-folder-browser__folder-name",children:Q.name}),Ee.jsx("span",{className:"bdsa-folder-browser__folder-type",children:"Item"})]})},Q._id)},[zt,_e,et]),vt=tt.useCallback((Q,ye=0)=>{var L,ie;const qe=Wt.has(Q._id),T=$e[Q._id]||[],x=W?De[Q._id]||[]:[],M=(zt==null?void 0:zt._id)===Q._id&&(zt==null?void 0:zt.type)==="folder";return V?V(Q,ye,qe,()=>Ie(Q)):Ee.jsxs("div",{className:"bdsa-folder-browser__folder",style:{marginLeft:`${ye*20}px`},children:[Ee.jsxs("div",{className:`bdsa-folder-browser__folder-header ${M?"selected":""}`,onClick:()=>Ie(Q),onDoubleClick:()=>je(Q,"folder"),children:[Ee.jsx("span",{className:`bdsa-folder-browser__folder-icon ${qe?"expanded":""}`,children:qe?"📂":"📁"}),Ee.jsx("span",{className:"bdsa-folder-browser__folder-name",children:Q.name}),Ee.jsx("span",{className:"bdsa-folder-browser__folder-type",children:"Folder"})]}),qe&&Ee.jsxs("div",{className:"bdsa-folder-browser__folder-contents",children:[T.map(ve=>vt(ve,ye+1)),W&&x.map(ve=>ke(ve,ye+1)),W&&Dt[Q._id]&&Ee.jsx("div",{className:"bdsa-folder-browser__loading",style:{marginLeft:`${(ye+1)*20}px`},children:Ee.jsx("span",{children:"Loading items..."})}),S>0&&((L=_t[Q._id])==null?void 0:L.hasMore)&&!ei[Q._id]&&Ee.jsx("div",{className:"bdsa-folder-browser__load-more",style:{marginLeft:`${(ye+1)*20}px`},children:Ee.jsx("button",{className:"bdsa-folder-browser__load-more-btn",onClick:()=>It(Q,!0),disabled:ei[Q._id],children:ei[Q._id]?"Loading...":"Load More Folders"})}),W&&k>0&&((ie=Ft[Q._id])==null?void 0:ie.hasMore)&&Ee.jsx("div",{className:"bdsa-folder-browser__load-more",style:{marginLeft:`${(ye+1)*20}px`},children:Ee.jsx("button",{className:"bdsa-folder-browser__load-more-btn",onClick:()=>I(Q._id,Q,!0),disabled:Dt[Q._id],children:Dt[Q._id]?"Loading...":"Load More Items"})})]})]},Q._id)},[Wt,$e,De,W,zt,V,Ie,je,S,_t,ei,It,k,Ft,Dt,I,ke]),Rt=tt.useCallback(Q=>{var x;const ye=Nt.has(Q._id),qe=$e[Q._id]||[],T=(zt==null?void 0:zt._id)===Q._id&&(zt==null?void 0:zt.type)==="collection";return O?O(Q,ye,()=>pe(Q)):Ee.jsxs("div",{className:"bdsa-folder-browser__collection",children:[Ee.jsxs("div",{className:`bdsa-folder-browser__folder-header ${T?"selected":""}`,onClick:()=>pe(Q),onDoubleClick:()=>je(Q,"collection"),children:[Ee.jsx("span",{className:`bdsa-folder-browser__folder-icon ${ye?"expanded":""}`,children:ye?"📂":"📁"}),Ee.jsx("span",{className:"bdsa-folder-browser__folder-name",children:Q.name}),Ee.jsx("span",{className:"bdsa-folder-browser__folder-type",children:"Collection"})]}),ye&&Ee.jsxs("div",{className:"bdsa-folder-browser__folder-contents",children:[qe.map(M=>vt(M,1)),S>0&&((x=_t[Q._id])==null?void 0:x.hasMore)&&!ei[Q._id]&&Ee.jsx("div",{className:"bdsa-folder-browser__load-more",children:Ee.jsx("button",{className:"bdsa-folder-browser__load-more-btn",onClick:()=>jt(Q,!0),disabled:ei[Q._id],children:ei[Q._id]?"Loading...":"Load More Folders"})})]})]},Q._id)},[Nt,$e,zt,O,pe,je,S,_t,ei,jt,vt]);return Ee.jsxs("div",{ref:Q=>{typeof be=="function"?be(Q):be&&"current"in be&&(be.current=Q),di.current=Q},className:`bdsa-folder-browser ${B}`,children:[ri&&Ee.jsx("div",{className:"bdsa-folder-browser__loading",children:Ee.jsx("span",{children:g&&y?`Loading ${y}...`:"Loading collections..."})}),St&&Ee.jsxs("div",{className:"bdsa-folder-browser__error",children:[Ee.jsx("span",{children:St.message}),Ee.jsx("button",{onClick:()=>{g&&y?q():ti()},children:"Retry"})]}),!ri&&!St&&Ee.jsxs(Ee.Fragment,{children:[g&&y==="collection"&&Xe&&Ee.jsx("div",{className:"bdsa-folder-browser__collections",children:Rt(Xe)}),g&&y==="folder"&&$&&Ee.jsx("div",{className:"bdsa-folder-browser__collections",children:vt($,0)}),!g&&h&&Ee.jsx("div",{className:"bdsa-folder-browser__collections",children:lt.length===0?Ee.jsx("div",{className:"bdsa-folder-browser__empty",children:Ee.jsx("span",{children:"No collections found"})}):lt.map(Q=>Rt(Q))})]})]})});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;
|
|
1708
|
+
</style>`));const p=ai(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 A=p.querySelector(".select-size"),R=A.options[A.selectedIndex],D=JSON.parse(R.getAttribute("data-dims"));this.dialog.querySelector(".screenshot-results").classList.add("pending"),this._createScreenshot(D).then(H=>{const J=this.dialog.querySelector(".screenshot-results");J.classList.remove("pending"),J.classList.add("created"),this.dialog.querySelector(".screenshot-link").href=this.blobURL}).catch(H=>{alert("There was a problem creating the screenshot. "+H)})})),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 R=p.querySelector(".scalebar-opts");this._includeScalebar?R.classList.remove("hidden"):R.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),A=c.viewportToImageRectangle(b);const R=Math.max(A.width,A.height)/Math.max(p.width,p.height);let D={width:p.width*R,height:p.height*R},H=!1;if(this._mpp=null,this.dialog.querySelector(".include-scalebar").disabled=!0,this.viewer.world.getItemCount()===1){let re=this.viewer.world.getItemAt(0).source.mpp;re&&(this.dialog.querySelector(".region-width-mm").textContent=""+(re.x/1e3*D.width).toFixed(3),this.dialog.querySelector(".region-height-mm").textContent=""+(re.y/1e3*D.height).toFixed(3),H=!0,this.dialog.querySelector(".include-scalebar").disabled=!1,this._mpp=re)}H||this.dialog.querySelectorAll(".region-width-mm, .region-height-mm").forEach(re=>re.textContent="??");let J=this.dialog.querySelector(".select-size");J.textContent="";let X=D.width,Y=D.height;for(;X>s.width&&Y>s.height;){let re={w:Math.round(X),h:Math.round(Y),imageBounds:A,scaleFactor:X/D.width},we=document.createElement("option");J.appendChild(we),we.textContent=`${Math.round(X)} x ${Math.round(Y)}`,we.setAttribute("data-dims",JSON.stringify(re)),(X>23767||Y>23767||X*Y>268435456)&&we.setAttribute("disabled",!0),X/=2,Y/=2}let ve={w:s.width,h:s.height,imageBounds:A,scaleFactor:s.width/D.width},se=document.createElement("option");J.appendChild(se),se.textContent=`${Math.round(X)} x ${Math.round(Y)}`,se.setAttribute("data-dims",JSON.stringify(ve)),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,A=new y.Rect(b.x,b.y,b.width,b.height,b.degrees),R=s.scaleFactor;return new Promise((D,H)=>{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()],ve=this.viewer.world.getItemAt(this.viewer.currentPage()),se=y({element:X,tileSources:[Y],crossOriginPolicy:this.viewer.crossOriginPolicy,prefixUrl:this.viewer.prefixUrl,immediateRender:!0});se.viewport.setRotation(this.viewer.viewport.getRotation(!0),!0),se.addHandler("tile-drawn",re=>{let we=re.tiledImage.coverage,me=Object.keys(we),ne=me[me.length-1];if(re.tile.level==ne){let de=we[ne],pe=Object.values(de).map(Be=>Object.values(Be)).flat();this._setProgress(pe.filter(Be=>Be).length,pe.length)}}),se.addHandler("open",()=>{se.world.getItemAt(0).setRotation(ve.getRotation(!0),!0),se.world.getItemAt(0).addOnceHandler("fully-loaded-change",we=>{if(this._includeScalebar&&this._mpp){let me=Math.round(1e3*this._scalebarWidth/this._mpp.x*R),ne=Math.round(this._scalebarHeight),de=se.drawer.canvas,pe=de.getContext("2d"),Be=de.width,Le=de.height;pe.fillRect(Be-ne,Le-ne,-me,-ne)}se.drawer.canvas.toBlob(async me=>{J!=1&&(me=await function(de,pe){const Be=de.slice(0,33);return new Promise((Le,Ee)=>{const Ue=new FileReader;Ue.onload=()=>{const je=new Uint8Array(Ue.result),Ve=de.slice(33),Ne=Ze(je,pe,de.type);Le(new Blob([Ne,Ve],{type:de.type}))},Ue.readAsArrayBuffer(Be)})}(me,96*J)),this.blobURL&&URL.revokeObjectURL(this.blobURL),this.blobURL=URL.createObjectURL(me),D(this.blobURL);let ne=se.element;se.destroy(),ne.remove()})});let re=se.viewport.imageToViewportRectangle(A);se.viewport.fitBounds(re)})}catch(J){H(J)}})}}class ct extends Tt{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"}),A=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"white",dashArray:[6,6]}),R=new a.Path({segments:[new a.Point(0,0),new a.Point(0,0)],strokeScaling:!1,strokeWidth:1,strokeColor:"black"}),D=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,R,D]),this.project.toolLayer.addChild(this.crosshairTool),this.crosshairTool.visible=!1,this._aspectHeight=1,this._aspectWidth=1,this._aspectLocked=!1,this.tool.onMouseDown=H=>{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=H=>{this.compoundPath.removeChildren(1);let J=this.getPoint(H);this.compoundPath.addChild(new a.Path.Rectangle(H.downPoint,J))},this.tool.onMouseMove=H=>{this.crosshairTool.visible=!0,function(J,X){let Y=J.view.projectToView(X),ve=J.view.viewToProject(new a.Point(0,Y.y)),se=J.view.viewToProject(new a.Point(J.view.viewSize.width,Y.y)),re=J.view.viewToProject(new a.Point(Y.x,0)),we=J.view.viewToProject(new a.Point(Y.x,J.view.viewSize.height));b.segments[0].point=ve,A.segments[0].point=ve,b.segments[1].point=se,A.segments[1].point=se,R.segments[0].point=re,D.segments[0].point=re,R.segments[1].point=we,D.segments[1].point=we}(p.tool,H.point)},this.tool.onMouseUp=H=>{let J=this.getPoint(H);this.broadcast("region-selected",new a.Rectangle(H.downPoint,J))},this.tool.extensions.onKeyDown=function(H){H.key=="escape"&&c.deactivate()},this.extensions.onActivate=()=>{this.crosshairTool.visible=!0,this.compoundPath.visible=!1},this.extensions.onDeactivate=H=>{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 ft={AnnotationToolkit:Se,AnnotationToolbar:fi,FeatureCollectionUI:Ii,FeatureUI:yi,FileDialog:Ni,LayerUI:Ri,PaperOffset:Re,PaperOverlay:z,RotationControlOverlay:Te,ScreenshotOverlay:rt,AnnotationUITool:St,ToolBase:Tt,BrushTool:He,DefaultTool:dt,EllipseTool:De,LinestringTool:Pt,PointTool:I,PointTextTool:L,PolygonTool:qe,RasterTool:ui,RectangleTool:ae,SelectTool:Ht,StyleTool:Vt,TransformTool:ci,WandTool:ti}})(),g})())})(Qi);var Yi=Qi.exports;class cn{constructor(he){ki(this,"cache");ki(this,"hits",0);ki(this,"misses",0);ki(this,"maxSize");this.cache=new Map,this.maxSize=he==null?void 0:he.maxSize}normalizeId(he){return String(he)}isExpired(he){const n=this.cache.get(he);return n?n.expiresAt&&n.expiresAt<Date.now()?(this.cache.delete(he),!0):!1:!0}evictIfNeeded(){if(this.maxSize&&this.cache.size>=this.maxSize){const he=this.cache.keys().next().value;he&&this.cache.delete(he)}}async get(he,n){const o=this.normalizeId(he);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(he,n,o){const u=this.normalizeId(he),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(he,n){const o=this.normalizeId(he);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(he){const n=this.normalizeId(he);this.cache.delete(n)}async clear(){this.cache.clear(),this.hits=0,this.misses=0}async getStats(){const he=this.hits+this.misses,n=he>0?this.hits/he: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(){ki(this,"db",null);ki(this,"initPromise",null)}async init(){if(!this.db)return this.initPromise?this.initPromise:(this.initPromise=new Promise((he,n)=>{const o=indexedDB.open(un,dn);o.onerror=()=>{n(new Error(`Failed to open IndexedDB: ${o.error}`))},o.onsuccess=()=>{this.db=o.result,he()},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(he="readonly"){if(await this.init(),!this.db)throw new Error("IndexedDB not initialized");return this.db.transaction([Gi],he).objectStore(Gi)}async get(he,n){await this.init();const o=String(he),u=await this.getStore();return new Promise((h,g)=>{const y=u.get(o);y.onerror=()=>{g(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(he).catch(console.error),h(void 0);return}if(n!==void 0&&a.versionHash!==n){this.delete(he).catch(console.error),h(void 0);return}h(a.data)}})}async set(he,n,o){await this.init();const u=String(he),h=await this.getStore("readwrite"),g={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(g);w.onerror=()=>{a(new Error(`Failed to set cache entry: ${w.error}`))},w.onsuccess=()=>{y()}})}async has(he,n){await this.init();const o=String(he),u=await this.getStore();return new Promise((h,g)=>{const y=u.get(o);y.onerror=()=>{g(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(he).catch(console.error),h(!1);return}if(n!==void 0&&a.versionHash!==n){h(!1);return}h(!0)}})}async delete(he){await this.init();const n=String(he),o=await this.getStore("readwrite");return new Promise((u,h)=>{const g=o.delete(n);g.onerror=()=>{h(new Error(`Failed to delete cache entry: ${g.error}`))},g.onsuccess=()=>{u()}})}async clear(){await this.init();const he=await this.getStore("readwrite");return new Promise((n,o)=>{const u=he.clear();u.onerror=()=>{o(new Error(`Failed to clear cache: ${u.error}`))},u.onsuccess=()=>{n()}})}async getStats(){await this.init();const he=await this.getStore();return new Promise((n,o)=>{const u=he.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 Oe=await navigator.storage.estimate(),he=Oe.quota||0,n=Oe.usage||0,o=he-n,u=he>0?n/he*100:0;let h=!1;return"persisted"in navigator.storage&&"persist"in navigator.storage&&(h=await navigator.storage.persisted()),{quota:he,usage:n,available:o,usagePercent:u,persistent:h}}catch(Oe){return console.error("Failed to check IndexedDB quota:",Oe),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 Oe=await navigator.storage.persist();return Oe?console.log("Persistent storage granted - data will not be cleared automatically"):console.warn("Persistent storage not granted - data may be cleared during browser cleanup"),Oe}catch(Oe){return console.error("Failed to request persistent storage:",Oe),!1}}function Vi(Oe){if(Oe===0)return"0 Bytes";const he=1024,n=["Bytes","KB","MB","GB","TB"],o=Math.floor(Math.log(Oe)/Math.log(he));return Math.round(Oe/Math.pow(he,o)*100)/100+" "+n[o]}async function fn(){const Oe=await $i();if(!Oe){console.log("Quota information not available");return}console.log("=== IndexedDB Quota Information ==="),console.log(`Quota: ${Vi(Oe.quota)}`),console.log(`Usage: ${Vi(Oe.usage)} (${Oe.usagePercent.toFixed(1)}%)`),console.log(`Available: ${Vi(Oe.available)}`),console.log(`Persistent storage: ${Oe.persistent?"Granted":"Not granted"}`),Oe.usagePercent>80&&console.warn("⚠️ Storage usage is above 80% - consider requesting persistent storage")}function gn(Oe){const he={};if(Oe._id!==void 0&&(he._id=Oe._id),Oe._version!==void 0&&(he._version=Oe._version),Oe._modelType!==void 0&&(he._modelType=Oe._modelType),Oe.updated!==void 0&&(he.updated=Oe.updated),Oe.modified!==void 0&&(he.modified=Oe.modified),Oe._accessLevel!==void 0&&(he._accessLevel=Oe._accessLevel),Oe.annotation&&typeof Oe.annotation=="object"){const u=Oe.annotation;u.name!==void 0&&(he.name=u.name)}const n=JSON.stringify(he,Object.keys(he).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 Oi(Oe,he){const n=Math.max(0,Math.min(1,he));if(Oe.startsWith("rgba(")){const o=Oe.match(/(\d+(?:\.\d+)?)/g);if(o&&o.length>=3){const u=o[0],h=o[1],g=o[2];return`rgba(${u}, ${h}, ${g}, ${n})`}}else if(Oe.startsWith("rgb(")){const o=Oe.match(/(\d+(?:\.\d+)?)/g);if(o&&o.length>=3){const u=o[0],h=o[1],g=o[2];return`rgba(${u}, ${h}, ${g}, ${n})`}}else if(Oe.startsWith("#")){const o=Oe.replace("#","");let u,h,g;return o.length===3?(u=parseInt(o[0]+o[0],16),h=parseInt(o[1]+o[1],16),g=parseInt(o[2]+o[2],16)):(u=parseInt(o.substring(0,2),16),h=parseInt(o.substring(2,4),16),g=parseInt(o.substring(4,6),16)),`rgba(${u}, ${h}, ${g}, ${n})`}return Oe}const ji={documentProperties:[{key:"id",label:"ID",formatter:Oe=>String(Oe)},{key:"elementCount",label:"Elements",formatter:Oe=>String(Oe)},{key:"totalPoints",label:"Points/Vertices",formatter:Oe=>String(Oe)},{key:"types",label:"Types",formatter:Oe=>Array.isArray(Oe)&&Oe.length>0?Oe.join(", "):"N/A",show:!0},{key:"filteredCount",label:"Filtered",formatter:(Oe,he)=>he.filteredCount!==void 0&&he.filteredCount>0?`${he.filteredCount} element(s) (${he.filteredPoints||0} points) skipped`:"None",show:!0}],showFetchedSection:!0,showProvidedSection:!0,showTotalSection:!0,headerText:"Annotation Information"},en=tt.forwardRef(({imageInfo:Oe,annotations:he=[],annotationIds:n=[],apiBaseUrl:o,onViewerReady:u,onAnnotationClick:h,defaultAnnotationColor:g="#ff0000",strokeWidth:y=2,osdOptions:a={},className:w="",height:_="600px",width:T="100%",showAnnotationInfo:k=!1,annotationInfoConfig:M,maxPointsPerAnnotation:V=1e4,maxTotalPoints:W=1e5,fetchFn:O,apiHeaders:te,showAnnotationControls:_e=!1,defaultAnnotationOpacity:be=1,annotationOpacities:ht,visibleAnnotations:$e,onAnnotationReady:Xe,annotationCache:bt,disableCache:$=!1,disableVisibilityCheck:Tt=!1,annotationHeaders:et},St)=>{var vt,Rt;const Me=tt.useRef(null),[Mt,_t]=tt.useState(null),[gt,Ft]=tt.useState(null),[dt,Nt]=tt.useState(null),[Vt,Wt]=tt.useState([]),[ri,zt]=tt.useState([]),yt=tt.useRef(null),si=tt.useRef(""),[Ke,ti]=tt.useState(be),Ye=tt.useMemo(()=>$||bt===null?null:bt||new qi,[bt,$]),Dt=tt.useRef(!0);tt.useEffect(()=>(Dt.current=!0,()=>{Dt.current=!1}),[]);const[ii,Et]=tt.useState(!Tt);tt.useEffect(()=>{if(Tt){Et(!0);return}if(!Me.current)return;const Q=new IntersectionObserver(ye=>{ye.forEach(We=>{We.isIntersecting&&We.intersectionRatio>.1?Et(!0):Et(!1)})},{threshold:.1,rootMargin:"50px"});return Q.observe(Me.current),()=>{Me.current&&Q.unobserve(Me.current)}},[Tt]),tt.useEffect(()=>{const Q=C=>{if(!C)return!1;const B=C instanceof Error?C.message:String(C);if(B&&typeof B=="string"){const L=B.toLowerCase();if(L.includes("_transformbounds")||L.includes("transformbounds")||L.includes("cannot read properties of null")||L.includes("reading '_transformbounds'")||L.includes('reading "_transformbounds"'))return!0}if(C instanceof Error&&C.stack){const L=C.stack.toLowerCase();if(L.includes("_transformbounds")||L.includes("transformbounds")||L.includes("getbounds"))return!0}if(C instanceof ErrorEvent){const L=C.filename||"";if(L.includes("osd-paperjs-annotation")||L.includes("annotation.js")){const ee=C.message||String(C);if(ee.includes("null")||ee.includes("_transformBounds"))return!0}}return!1},ye=C=>{const B=C instanceof ErrorEvent&&C.error||C;return Q(B)?(C instanceof ErrorEvent&&(C.preventDefault(),C.stopPropagation()),!0):!1},We=C=>{const B=C.reason;return Q(B)?(C.preventDefault(),C.stopPropagation(),!0):!1};window.addEventListener("error",ye,!0),window.addEventListener("unhandledrejection",We,!0);const I=window.onerror;return window.onerror=(C,B,L,ee,ae)=>Q(ae)||Q(C)?!0:I?I(C,B,L,ee,ae):!1,()=>{window.removeEventListener("error",ye,!0),window.removeEventListener("unhandledrejection",We,!0),window.onerror=I}},[]);const Kt=tt.useCallback(Q=>{if(!Q||!Q.view)return!1;const ye=Q.view;return!(ye._transformBounds===null||ye._transformBounds===void 0||typeof Q.view.draw!="function")},[]),hi=tt.useCallback(Q=>{if(Dt.current){if(!Kt(Q)){console.warn("Paper.js not fully initialized, skipping draw operation");return}try{Q.view&&typeof Q.view.draw=="function"&&Q.view.draw()}catch(ye){ye instanceof Error&&ye.message.includes("_transformBounds")?console.warn("Paper.js draw operation skipped (component likely unmounting or hidden)"):console.error("Error drawing Paper.js view:",ye)}}},[Kt]),Yt=tt.useMemo(()=>Vt.map(Q=>`${Q.id}:${Q.left}:${Q.top}:${Q.width}:${Q.height}`).join("|"),[Vt]),qt=tt.useRef(`osd-viewer-${Math.random().toString(36).substr(2,9)}`),Zt=tt.useRef(!1),xt=tt.useRef(""),P=tt.useRef(u);tt.useEffect(()=>{P.current=u},[u]);const q=tt.useRef(h);tt.useEffect(()=>{q.current=h},[h]);const fe=tt.useMemo(()=>Oe.dziUrl||`${Oe.imageId}-${Oe.baseUrl}`,[Oe.dziUrl,Oe.imageId,Oe.baseUrl]),Re=tt.useMemo(()=>{var Q;return Array.isArray(he)?JSON.stringify(he.map(ye=>({id:ye.id,left:ye.left,top:ye.top,width:ye.width,height:ye.height}))):he&&typeof he=="object"&&"type"in he&&he.type==="FeatureCollection"?JSON.stringify(((Q=he.features)==null?void 0:Q.map(ye=>({id:ye.id})))||[]):"[]"},[he]),He=tt.useMemo(()=>!Array.isArray(he)&&he&&typeof he=="object"&&"type"in he&&he.type==="FeatureCollection"?he.features.map(Q=>{var ye,We,I,C;if(Q.geometry.type==="Polygon"){const B=Q.geometry.coordinates[0];if(B.length>=4){const[L,ee]=B[0],[ae,,,ze]=B[2],De=ae-L,Ae=ze-ee;return{id:Q.id||((ye=Q.properties)==null?void 0:ye.id),left:L,top:ee,width:De,height:Ae,color:((We=Q.properties)==null?void 0:We.color)||g,group:(I=Q.properties)==null?void 0:I.group,label:(C=Q.properties)==null?void 0:C.label,...Q.properties}}}return null}).filter(Q=>Q!==null):Array.isArray(he)?[...he]:[],[Re,g]);tt.useEffect(()=>{if(!Me.current||!ii&&!Zt.current||Zt.current)return;let Q=null,ye=null,We=null;const I=setTimeout(()=>{var C,B,L;if(!(!Dt.current||!Me.current)&&ii)try{Zt.current=!0,xt.current=fe,Me.current.id=qt.current;const ee={id:qt.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(Q=hn(ee),ye=Q.createPaperOverlay(),Dt.current&&Ft(ye),We=new Yi.AnnotationToolkit(Q,{overlay:ye}),We&&typeof((B=(C=We.overlay)==null?void 0:C.paperScope)==null?void 0:B.view)<"u"){const ae=We.overlay.paperScope;if(ae&&ae.view){const ze=ae.view,De=qe=>{try{return qe!=null&&typeof qe._transformBounds<"u"&&qe._transformBounds!==null}catch{return!1}},Ae=new Proxy(ze,{get:(qe,it)=>{var Pt;if(it==="getBounds"||it==="_transformBounds")return function(...Bt){var Ht,oi;try{return!qe||!De(qe)?it==="getBounds"?{x:0,y:0,width:0,height:0}:null:it==="getBounds"?((Ht=ze.getBounds)==null?void 0:Ht.apply(qe,Bt))||{x:0,y:0,width:0,height:0}:qe[it]}catch(ci){if(ci instanceof Error){const pi=((oi=ci.message)==null?void 0:oi.toLowerCase())||"";if(pi.includes("_transformbounds")||pi.includes("transformbounds")||pi.includes("cannot read properties of null"))return it==="getBounds"?{x:0,y:0,width:0,height:0}:null}throw ci}};try{const Bt=qe[it];return it==="_transformBounds"&&Bt==null?()=>({x:0,y:0,width:0,height:0}):Bt}catch(Bt){if(Bt instanceof Error){const Ht=((Pt=Bt.message)==null?void 0:Pt.toLowerCase())||"";if(Ht.includes("_transformbounds")||Ht.includes("null"))return it==="_transformBounds"?()=>({x:0,y:0,width:0,height:0}):null}throw Bt}}});try{ae.view=Ae}catch{}}}if(Dt.current&&Nt(We),!Q)return;if(Q.addHandler("open-failed",ae=>{console.warn("OpenSeadragon: Open failed",ae)}),Q.addHandler("open",ae=>{!Dt.current||!Q||(console.log("OpenSeadragon: Image opened",ae),_t(Q),P.current&&P.current(Q))}),Q.world.addHandler("add-item",ae=>{if(!Dt.current)return;const ze=ae;console.log("Tiled image added:",ze.item),yt.current=ze.item}),Oe.dziUrl)Q.open(Oe.dziUrl);else{if(!Oe.imageId||!Oe.width||!Oe.height||!Oe.tileWidth||!Oe.levels||!Oe.baseUrl){console.error("SlideViewer: If dziUrl is not provided, all manual fields (imageId, width, height, tileWidth, levels, baseUrl) are required");return}const ae={width:Oe.width,height:Oe.height,tileSize:Oe.tileWidth,minLevel:0,maxLevel:Oe.levels-1,getTileUrl:(ze,De,Ae)=>`${Oe.baseUrl}/wsi/files/tile/${Oe.imageId}/${ze}/${De}/${Ae}`};Q&&Q.addTiledImage({tileSource:ae,success:()=>{!Dt.current||!Q||(_t(Q),P.current&&P.current(Q))}})}}catch(ee){if(console.error("Error initializing SlideViewer:",ee),Zt.current=!1,ee instanceof Error&&((L=ee.message)!=null&&L.toLowerCase().includes("_transformbounds")))return}},100);return()=>{clearTimeout(I);const C=fe!==xt.current;if(!Dt.current||C){if(C&&(xt.current=fe),We)try{We.destroy()}catch(L){console.warn("Error destroying annotation toolkit:",L)}if(ye)try{ye.destroy()}catch(L){console.warn("Error destroying paper overlay:",L)}if(Q)try{if(typeof Q.isDestroyed=="boolean"&&Q.isDestroyed)return;Q.destroy()}catch(L){console.warn("Error destroying OpenSeadragon viewer:",L)}Dt.current||(Zt.current=!1)}}},[fe,a]),tt.useEffect(()=>{if(!Dt.current)return;if(!n||n.length===0||!o){Wt(ye=>ye.length===0?ye:[]),zt(ye=>ye.length===0?ye:[]);return}(async()=>{try{console.log(`Fetching ${n.length} annotation(s) from DSA API...`);const ye=O||fetch,We=n.map(async De=>{var oi,ci,pi,ui,Ot,fi;const Ae=et?et instanceof Map?et.get(De):et[String(De)]:void 0,qe=Ae?gn(Ae):void 0;if(Ye){try{const Ct=await Ye.get(De,qe);if(Ct!=null){if(Ct&&typeof Ct=="object"&&(Ct.elements||((oi=Ct.annotation)==null?void 0:oi.elements)||((ci=Ct.annotation)==null?void 0:ci.elements)===null||Array.isArray((pi=Ct.annotation)==null?void 0:pi.elements)))return console.log(`Cache hit for annotation ${De}${qe?` (version hash: ${qe})`:""}`,{hasElements:!!(Ct!=null&&Ct.elements)||!!((ui=Ct==null?void 0:Ct.annotation)!=null&&ui.elements),elementCount:Array.isArray(Ct==null?void 0:Ct.elements)?Ct.elements.length:Array.isArray((Ot=Ct==null?void 0:Ct.annotation)==null?void 0:Ot.elements)?Ct.annotation.elements.length:0}),Ct;console.warn(`Invalid cached data format for annotation ${De}, clearing cache and fetching fresh...`,{type:typeof Ct,keys:Ct&&typeof Ct=="object"?Object.keys(Ct):"N/A",hasElements:!!(Ct!=null&&Ct.elements)||!!((fi=Ct==null?void 0:Ct.annotation)!=null&&fi.elements)}),await Ye.delete(De).catch(yi=>console.warn("Failed to delete invalid cache entry:",yi))}}catch(Ct){console.warn(`Error reading from cache for annotation ${De}, fetching from API:`,Ct)}console.log(qe?`Cache miss or version mismatch for annotation ${De} (current version hash: ${qe}), fetching from API...`:`Cache miss for annotation ${De}, fetching from API...`)}const it=`${o}/annotation/${De}`;console.log(`Fetching annotation ${De} from: ${it}`);const Pt={};te&&(Pt.headers=te);const Bt=await ye(it,Pt);if(!Bt.ok)return console.warn(`Failed to fetch annotation ${De}:`,Bt.statusText,Bt.status),null;const Ht=await Bt.json();return console.log(`Successfully fetched annotation ${De}:`,Ht),Ye&&Ht&&await Ye.set(De,Ht,{versionHash:qe}),Ht}),I=await Promise.all(We);if(!Dt.current){console.log("Component unmounted during annotation fetch, skipping state update");return}const C=[];let B=0,L=0;const ee=I.filter(De=>De!=null).map((De,Ae)=>{var pi;const qe=String(n[Ae]),it=new Set,Pt=[];let Bt=0,Ht=0,oi=0,ci=[];if(De&&typeof De=="object"){const ui=De;ui.elements&&Array.isArray(ui.elements)?ci=ui.elements:(pi=ui.annotation)!=null&&pi.elements&&(ci=ui.annotation.elements)}for(const ui of ci)if(ui&&typeof ui=="object"){const Ot=ui;if(Ot.type&&it.add(Ot.type),Ot.type==="rectangle"&&Ot.x!==void 0&&Ot.y!==void 0&&Ot.width!==void 0&&Ot.height!==void 0)4>V?(Ht++,oi+=4,console.warn(`Skipping rectangle annotation ${Ot.group||Pt.length} in document ${qe}: has 4 points (exceeds limit of ${V})`)):(Bt+=4,Pt.push({id:Ot.group||Pt.length,left:Ot.x,top:Ot.y,width:Ot.width,height:Ot.height,color:Ot.lineColor||g,group:Ot.group,label:Ot.label,annotationType:"rectangle",element:Ot,documentId:qe}));else if(Ot.type==="polyline"&&Ot.points&&Ot.points.length>=2){const fi=Ot.points.length;if(fi>V)Ht++,oi+=fi,console.warn(`Skipping polyline annotation ${Ot.group||Pt.length} in document ${qe}: has ${fi} points (exceeds limit of ${V})`);else{Bt+=fi;const Ct=Ot.points.map(Bi=>Bi[0]),ai=Ot.points.map(Bi=>Bi[1]),yi=Math.min(...Ct),Pi=Math.min(...ai),xi=Math.max(...Ct),Fi=Math.max(...ai),Ii=xi-yi,Ri=Fi-Pi;Pt.push({id:Ot.group||Pt.length,left:yi,top:Pi,width:Ii,height:Ri,color:Ot.lineColor||g,group:Ot.group,label:Ot.label,annotationType:"polyline",points:Ot.points,closed:Ot.closed,fillColor:Ot.fillColor,element:Ot,documentId:qe})}}}return C.push({id:qe,elementCount:Pt.length,totalPoints:Bt,types:Array.from(it),filteredCount:Ht>0?Ht:void 0,filteredPoints:oi>0?oi:void 0}),B+=Ht,L+=oi,Pt}).flat();let ae=ee;const ze=ee.reduce((De,Ae)=>Ae.annotationType==="polyline"&&Ae.points?De+Ae.points.length:De+4,0);if(ze>W){console.warn(`Total points (${ze}) exceeds limit (${W}). Filtering annotations starting from largest ones...`);const De=ee.map(qe=>({annotation:qe,pointCount:qe.annotationType==="polyline"&&qe.points?qe.points.length:4}));De.sort((qe,it)=>it.pointCount-qe.pointCount);let Ae=0;ae=[];for(const{annotation:qe,pointCount:it}of De)Ae+it<=W?(ae.push(qe),Ae+=it):console.warn(`Skipping annotation ${qe.id}: adding ${it} points would exceed total limit (${Ae+it} > ${W})`);console.warn(`Filtered annotations: ${ee.length} → ${ae.length} (${ee.length-ae.length} skipped)`)}if(B>0&&console.warn(`Annotation document(s) ${n.join(", ")}: ${B} annotation(s) filtered due to per-annotation point limits (${L} total points skipped)`),console.log(`Parsed ${ae.length} annotation feature(s) from ${n.length} annotation document(s)`),!Dt.current){console.log("Component unmounted after annotation parsing, skipping state update");return}Wt(ae),zt(C)}catch(ye){console.error("Error fetching annotations:",ye),Dt.current&&Wt([])}})()},[n?JSON.stringify(n):"",o||"",g,V,W]),tt.useEffect(()=>{if(!Mt||!gt||!dt)return;const Q=gt.paperScope;if(!Q||!Q.project)return;const ye=yt.current;if(!ye||typeof ye.addPaperItem!="function")return;const We=[...He,...Vt],I=`${Re}:${Yt}`;if(si.current===I)return;if(si.current=I,console.log(`Rendering ${We.length} total annotation(s)`),We.length===0){try{const L=dt.getFeatures();if(L&&Array.isArray(L))for(const ee of L)try{ee.remove()}catch(ae){console.warn("Error removing feature:",ae)}}catch(L){console.warn("Could not clear existing features:",L)}return}console.log(`About to render ${We.length} annotations, tiledImage:`,ye);try{if(ye.paperItems&&Array.isArray(ye.paperItems)&&ye.paperItems.length>0){const L=[...ye.paperItems].reverse();for(const ee of L)try{ee&&typeof ee.remove=="function"&&ee.remove()}catch{}}try{const L=dt.getFeatures();if(L&&Array.isArray(L)&&L.length>0){const ee=L.filter(ae=>ae!=null&&typeof ae.remove=="function");for(const ae of ee)try{ae.remove()}catch{}}}catch{}}catch(L){console.warn("Error clearing existing annotations:",L)}const C=ht instanceof Map?new Map(Array.from(ht.entries()).map(([L,ee])=>[String(L),ee])):ht?new Map(Object.entries(ht).map(([L,ee])=>[String(L),ee])):null,B=new Set;for(const L of We)try{const ee=L.documentId,ae=ee!==void 0?String(ee):void 0;console.log(`SlideViewer: Processing annotation feature id=${L.id}, documentId=${ee}, lookupId=${ae}`);let ze=Ke;if(C&&ae!==void 0){const Ae=C.get(ae);Ae!==void 0&&(ze=Ae)}if(console.log(`SlideViewer: Annotation opacity=${ze}, will ${ze<=0?"skip":"render"}`),ze<=0){console.log("SlideViewer: Skipping annotation with opacity 0 (hidden)");continue}let De;if(L.annotationType==="polyline"&&L.points&&Array.isArray(L.points)){const Ae=new Q.Path,qe=L.color||g;Ae.strokeColor=Oi(qe,ze),Ae.strokeWidth=y;const it=L.fillColor||"rgba(0, 0, 0, 0)";Ae.fillColor=Oi(it,ze),L.points.forEach((Pt,Bt)=>{Bt===0?Ae.moveTo(Pt[0],Pt[1]):Ae.lineTo(Pt[0],Pt[1])}),L.closed&&Ae.closePath(),De=Ae}else{const Ae=new Q.Rectangle(L.left,L.top,L.width,L.height),qe=new Q.Path.Rectangle(Ae),it=L.color||g;qe.strokeColor=Oi(it,ze),qe.strokeWidth=y,qe.fillColor=Oi("rgba(0, 0, 0, 0)",ze),De=qe}if(De.data={annotation:L},De.annotationId=L.id,q.current&&(De.onClick=Ae=>{var qe;(qe=q.current)==null||qe.call(q,L)}),De.style={rescale:{strokeWidth:y}},ye.addPaperItem(De),De&&typeof De=="object")try{Yi.AnnotationToolkit.registerFeature(De)}catch(Ae){console.warn("Failed to register feature with toolkit:",Ae)}ae!==void 0?(B.add(ae),console.log(`SlideViewer: Added documentId '${ae}' to renderedDocumentIds. Set now has:`,Array.from(B))):console.warn(`SlideViewer: Cannot track document ID - lookupId is undefined for annotation id=${L.id}`)}catch(ee){console.error(`Error rendering annotation ${L.id}:`,ee,L)}hi(Q),console.log(`Finished rendering ${We.length} annotations`),console.log(`SlideViewer: onAnnotationReady is ${Xe?"defined":"undefined"}, renderedDocumentIds has ${B.size} items:`,Array.from(B)),Xe&&B.size>0?setTimeout(()=>{console.log(`SlideViewer: setTimeout fired, calling onAnnotationReady for ${B.size} document(s)`),B.forEach(L=>{try{console.log(`SlideViewer: Calling onAnnotationReady('${L}')`),Xe(L)}catch(ee){console.error(`Error calling onAnnotationReady for ${L}:`,ee)}})},100):console.warn(`SlideViewer: Not calling onAnnotationReady - callback is ${Xe?"":"not "}defined, renderedDocumentIds has ${B.size} items`)},[Mt,gt,dt,Re,Yt,y,Ke,ht,$e,Xe]),tt.useEffect(()=>{var ye;if(!Mt||!gt||!dt)return;const Q=gt.paperScope;if(!(!Q||!Q.project))try{const We=dt.getFeatures();if(We&&Array.isArray(We)){const I=ht instanceof Map?ht:ht?new Map(Object.entries(ht).map(([B,L])=>[String(B),L])):null;let C=!1;for(const B of We)try{if(B&&typeof B=="object"){const L=B,ee=(ye=L.data)==null?void 0:ye.annotation;if(!ee)continue;const ae=ee.documentId,ze=ae!==void 0?String(ae):void 0;if(ze===void 0)continue;let De=Ke;if(I&&ze!==void 0){const Pt=I.get(ze);Pt!==void 0&&(De=Pt)}if(De<=0){try{const Pt=ee.color||g,Bt=ee.fillColor||"rgba(0, 0, 0, 0)";L.strokeColor&&(L.strokeColor=Oi(Pt,0),C=!0),L.fillColor&&(L.fillColor=Oi(Bt,0),C=!0)}catch{try{L.remove&&(L.remove(),C=!0)}catch(Bt){console.warn("Could not hide annotation:",Bt)}}continue}let Ae=Ke;if(I&&ze!==void 0&&I.has(ze)){const Pt=I.get(ze);Pt!==void 0&&(Ae=Pt)}const qe=ee.color||g,it=ee.fillColor||"rgba(0, 0, 0, 0)";L.strokeColor&&(L.strokeColor=Oi(qe,Ae),C=!0),L.fillColor&&(L.fillColor=Oi(it,Ae),C=!0)}}catch(L){console.warn("Error updating annotation opacity:",L)}C&&hi(Q)}}catch(We){console.warn("Could not update annotation opacity:",We)}},[Ke,ht,$e,Mt,gt,dt,be,g,hi]);const Qe=tt.useMemo(()=>({documentProperties:(M==null?void 0:M.documentProperties)??ji.documentProperties??[],showFetchedSection:(M==null?void 0:M.showFetchedSection)??ji.showFetchedSection??!0,showProvidedSection:(M==null?void 0:M.showProvidedSection)??ji.showProvidedSection??!0,showTotalSection:(M==null?void 0:M.showTotalSection)??ji.showTotalSection??!0,headerText:(M==null?void 0:M.headerText)??ji.headerText??"Annotation Information"}),[M]),ke={width:typeof T=="number"?`${T}px`:T,height:typeof _=="number"?`${_}px`:_};return Pe.jsxs("div",{ref:St,className:`bdsa-slide-viewer ${w}`,style:ke,children:[Pe.jsx("div",{ref:Me,className:"bdsa-slide-viewer__container"}),(k||_e)&&Pe.jsxs("div",{className:"bdsa-slide-viewer__sidebar",children:[_e&&Pe.jsxs("div",{className:"bdsa-slide-viewer__controls",children:[Pe.jsx("div",{className:"bdsa-slide-viewer__controls-header",children:Pe.jsx("strong",{children:"Annotation Controls"})}),Pe.jsxs("div",{className:"bdsa-slide-viewer__controls-section",children:[Pe.jsxs("div",{className:"bdsa-slide-viewer__controls-label",children:["Opacity: ",Math.round(Ke*100),"%"]}),Pe.jsx("input",{type:"range",min:"0",max:"1",step:"0.01",value:Ke,onChange:Q=>ti(parseFloat(Q.target.value)),className:"bdsa-slide-viewer__opacity-slider"})]})]}),k&&(Array.isArray(he)&&he.length>0||!Array.isArray(he)&&he&&"type"in he&&he.type==="FeatureCollection"&&((vt=he.features)==null?void 0:vt.length)>0||ri.length>0||Vt.length>0)&&Pe.jsxs("div",{className:"bdsa-slide-viewer__annotation-info",children:[Pe.jsx("div",{className:"bdsa-slide-viewer__annotation-info-header",children:Pe.jsx("strong",{children:Qe.headerText})}),Qe.showFetchedSection&&ri.length>0&&Pe.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[Pe.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Fetched from DSA API:"}),ri.map(Q=>Pe.jsx("div",{className:"bdsa-slide-viewer__annotation-info-item",children:Qe.documentProperties.filter(ye=>ye.show!==!1).map(ye=>{const We=Q[ye.key],I=ye.formatter?ye.formatter(We,{...Q,totalPoints:Q.totalPoints??0}):String(We??"N/A");return Pe.jsxs("div",{children:[ye.label,": ",I]},ye.key)})},Q.id))]}),Qe.showProvidedSection&&(Array.isArray(he)&&he.length>0||!Array.isArray(he)&&he&&he.type==="FeatureCollection")&&Pe.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[Pe.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Provided Annotations:"}),Pe.jsx("div",{className:"bdsa-slide-viewer__annotation-info-item",children:Array.isArray(he)?Pe.jsxs("div",{children:["Count: ",he.length]}):Pe.jsxs("div",{children:["GeoJSON FeatureCollection with ",((Rt=he.features)==null?void 0:Rt.length)||0," features"]})})]}),Qe.showTotalSection&&Pe.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-section",children:[Pe.jsx("div",{className:"bdsa-slide-viewer__annotation-info-title",children:"Total Rendered:"}),Pe.jsxs("div",{className:"bdsa-slide-viewer__annotation-info-item",children:[Vt.length+(Array.isArray(he)?he.length:0)," annotation(s)"]})]})]})]})]})});en.displayName="SlideViewer";const tn=tt.forwardRef(({imageId:Oe,apiBaseUrl:he,limit:n=50,fetchFn:o,apiHeaders:u,onAnnotationsLoaded:h,onError:g,showDebugPanel:y=!1,onAnnotationLoadChange:a,onAnnotationVisibilityChange:w,onAnnotationOpacityChange:_,onAnnotationReady:T,slideViewerOnAnnotationReady:k,onLoadedAnnotationIdsChange:M,onAnnotationLoad:V,onAnnotationHide:W,onAnnotationStateChange:O,onAnnotationOpacitiesChange:te,onAnnotationHeadersChange:_e,loadedAnnotations:be,visibleAnnotations:ht,annotationOpacities:$e,annotationCache:Xe,disableCache:bt=!1,showDefaultUI:$=!0,className:Tt="",children:et},St)=>{const[Me,Mt]=tt.useState([]),[_t,gt]=tt.useState(!1),[Ft,dt]=tt.useState(null),[Nt,Vt]=tt.useState(null),[Wt,ri]=tt.useState(new Set),[zt,yt]=tt.useState(new Map),[si,Ke]=tt.useState(new Map),ti=tt.useRef(new Map),[Ye,Dt]=tt.useState(null),[ii,Et]=tt.useState(new Set),[Kt,hi]=tt.useState(new Set),Yt=tt.useMemo(()=>bt||Xe===null?null:Xe||new qi,[Xe,bt]),qt=be??Wt,Zt=ht??zt,xt=$e??si,P=tt.useMemo(()=>Array.from(qt).sort(),[qt]);tt.useEffect(()=>{M&&M(P)},[P,M]);const q=tt.useRef(null),fe=tt.useCallback(()=>{const C=Array.from(qt).sort(),B=new Map(xt),L=new Map(Zt);if(O){const ee=q.current;O({loadedAnnotationIds:C,opacities:B,visibility:L,onAnnotationReady:ee||void 0})}te&&te(B),M&&M(C)},[qt,xt,Zt,O,te,M]),Re=tt.useMemo(()=>Array.from(xt.entries()).sort(([C],[B])=>C.localeCompare(B)),[xt]),He=tt.useMemo(()=>Array.from(Zt.entries()).sort(([C],[B])=>C.localeCompare(B)),[Zt]);tt.useEffect(()=>{fe()},[fe,P,Re,He]);const Qe=tt.useCallback(C=>{const B=String(C);console.log(`[AM] handleAnnotationReadyInternal called for ${B}`),Et(L=>{const ee=L.has(B),ae=new Set(L);return ae.delete(B),console.log(`[AM] Cleared loading for ${B}. Was loading: ${ee}. Still loading:`,Array.from(ae)),ae}),Yt&&Yt.has(B).then(L=>{L&&hi(ee=>new Set(ee).add(B))}).catch(()=>{}),T==null||T(B),k==null||k(B)},[T,k,Yt]);q.current=Qe,tt.useEffect(()=>{q.current=Qe,fe()},[Qe,fe]);const ke=Qe,vt=tt.useCallback(C=>{const B=String(C),L=qt.has(B);console.log(`[AM] toggleLoad for ${B}. Currently loaded: ${L}`),L?(be||ri(ee=>{const ae=new Set(ee);return ae.delete(B),ae}),ht||yt(ee=>{const ae=new Map(ee);return ae.delete(B),ae}),$e||Ke(ee=>{const ae=new Map(ee);return ae.delete(B),ae}),a==null||a(B,!1),W==null||W(B),Et(ee=>{const ae=new Set(ee);return ae.delete(B),ae})):(console.log(`[AM] Adding ${B} to loading state`),Et(ee=>new Set(ee).add(B)),be||(console.log(`[AM] toggleLoad: Adding ${B} to internalLoadedAnnotations`),ri(ee=>{const ae=new Set(ee).add(B);return console.log("[AM] internalLoadedAnnotations now:",Array.from(ae)),ae})),ht||yt(ee=>new Map(ee).set(B,!0)),$e||Ke(ee=>new Map(ee).set(B,1)),a==null||a(B,!0),V==null||V(B))},[be,ht,$e,qt,a,V,W,fe]),Rt=tt.useCallback(C=>{const B=xt.get(C)??1;if(B>0){ti.current.set(C,B);const ee=0;$e||Ke(ae=>new Map(ae).set(C,ee)),_==null||_(C,ee),ht||yt(ae=>new Map(ae).set(C,!1)),w==null||w(C,!1)}else{const ee=ti.current.get(C)??1;ti.current.delete(C),$e||Ke(ae=>new Map(ae).set(C,ee)),_==null||_(C,ee),ht||yt(ae=>new Map(ae).set(C,!0)),w==null||w(C,!0)}},[$e,ht,xt,_,w,fe]),Q=tt.useCallback((C,B)=>{$e||Ke(L=>new Map(L).set(C,B)),_==null||_(C,B)},[$e,_,fe]);tt.useEffect(()=>{if(!Oe||!he){Mt([]),gt(!1),dt(null),Vt(null);return}(async()=>{gt(!0),dt(null),Vt(null);try{const B=new URLSearchParams({itemId:Oe,limit:String(n),offset:"0",sort:"lowerName",sortdir:"1"}),L=`${he}/annotation?${B.toString()}`,ee=o||fetch,ae={};u&&(ae.headers=u),console.log(`AnnotationManager: Fetching annotations from: ${L}`);const ze=await ee(L,ae);if(!ze.ok)throw new Error(`Failed to fetch annotations: ${ze.status} ${ze.statusText}`);const De=await ze.json();console.log("AnnotationManager: API response:",De),y&&Vt(JSON.stringify(De,null,2));let Ae=[];if(Array.isArray(De)?(Ae=De,console.log(`AnnotationManager: Parsed ${Ae.length} annotation(s) from array response`)):De&&Array.isArray(De.data)?(Ae=De.data,console.log(`AnnotationManager: Parsed ${Ae.length} annotation(s) from paginated response`)):De&&typeof De=="object"?(Ae=[De],console.log("AnnotationManager: Parsed 1 annotation from single object response")):console.warn("AnnotationManager: Unexpected response format:",typeof De,De),Mt(Ae),console.log(`AnnotationManager: Fetched ${Ae.length} annotation(s) from API`),Ae.length>0&&console.log("AnnotationManager: Annotation IDs:",Ae.map(qe=>qe._id)),_e&&Ae.length>0){const qe=new Map;Ae.forEach(it=>{qe.set(String(it._id),it)}),_e(qe)}Yt&&Ae.length>0?(async()=>{const it=new Set;for(const Pt of Ae){const Bt=String(Pt._id);try{await Yt.has(Bt)&&it.add(Bt)}catch{}}hi(it)})():hi(new Set),h&&h(Ae)}catch(B){const L=B instanceof Error?B:new Error(String(B));dt(L),Vt(null),g&&g(L)}finally{gt(!1)}})()},[Oe,he,n,o,u,h,g,y,_e]),tt.useEffect(()=>{if(_e&&Me.length>0){const C=new Map;Me.forEach(B=>{C.set(String(B._id),B)}),_e(C)}},[Me,_e]);const ye=tt.useMemo(()=>({annotations:Me,loading:_t,error:Ft,annotationIds:Me.map(C=>C._id),loadedAnnotations:qt,visibleAnnotations:Zt,annotationOpacities:xt,toggleLoad:vt,toggleVisibility:Rt,setOpacity:Q,handleAnnotationReady:Qe,onAnnotationReady:ke,loadingAnnotations:ii}),[Me,_t,Ft,qt,Zt,xt,vt,Rt,Q,Qe,ke,ii]),We=tt.useRef(null);tt.useImperativeHandle(St,()=>({getAnnotations:()=>Me,getAnnotation:C=>Me.find(B=>String(B._id)===C),getLoadedAnnotationIds:()=>Array.from(qt),isAnnotationLoaded:C=>qt.has(C),isAnnotationVisible:C=>(xt.get(C)??1)>0,getAnnotationOpacity:C=>xt.get(C)??1,isAnnotationLoading:C=>ii.has(C),getVisibleAnnotationIds:()=>Array.from(qt).filter(C=>(xt.get(C)??1)>0),getAnnotationState:()=>({loadedAnnotationIds:Array.from(qt),opacities:new Map(xt),visibility:new Map(Zt),loadingAnnotationIds:Array.from(ii)})}),[Me,qt,Zt,xt,ii]);const I=()=>{if(_t)return Pe.jsx("div",{className:"bdsa-annotation-manager__list",children:Pe.jsx("div",{className:"bdsa-annotation-manager__empty-state",children:Pe.jsx("p",{children:"Loading annotations..."})})});if(Ft)return Pe.jsx("div",{className:"bdsa-annotation-manager__list",children:Pe.jsx("div",{className:"bdsa-annotation-manager__empty-state",style:{color:"#dc3545"},children:Pe.jsxs("p",{children:["Error: ",Ft.message]})})});if(Me.length===0)return Pe.jsx("div",{className:"bdsa-annotation-manager__list",children:Pe.jsx("div",{className:"bdsa-annotation-manager__empty-state",children:Pe.jsx("p",{children:"No annotations found"})})});const C=Array.from(qt).length;return Pe.jsxs("div",{className:"bdsa-annotation-manager__list",children:[Pe.jsxs("div",{className:"bdsa-annotation-manager__list-header",children:[Pe.jsxs("h3",{children:["Annotations (",Me.length," total)"]}),Pe.jsxs("p",{children:[C," loaded in viewer"]})]}),Me.map(B=>{var qe;const L=String(B._id),ee=qt.has(L),ae=ii.has(L),ze=xt.get(L)??1,De=Kt.has(L),Ae=Ye===L;return Pe.jsxs("div",{className:`bdsa-annotation-manager__annotation-card ${ee?"bdsa-annotation-manager__annotation-card--loaded":""} ${Ae?"bdsa-annotation-manager__annotation-card--selected":""}`,onClick:()=>Dt(B._id),children:[Pe.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-header",children:[Pe.jsx("h4",{className:"bdsa-annotation-manager__annotation-card-title",children:((qe=B.annotation)==null?void 0:qe.name)||B._id}),Pe.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-meta",children:[B.public===!1&&Pe.jsx("span",{className:"bdsa-annotation-manager__annotation-card-badge bdsa-annotation-manager__annotation-card-badge--private",children:"Private"}),B.public===!0&&Pe.jsx("span",{className:"bdsa-annotation-manager__annotation-card-badge bdsa-annotation-manager__annotation-card-badge--public",children:"Public"}),De&&Pe.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-cache-indicator-group",children:[Pe.jsx("span",{className:"bdsa-annotation-manager__annotation-card-cache-indicator",title:"Cached locally - will load quickly",children:Pe.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[Pe.jsx("rect",{x:"2",y:"3",width:"20",height:"18",rx:"2"}),Pe.jsx("path",{d:"M7 3h10M7 21h10M9 9h6M9 15h6"})]})}),Yt&&typeof Yt.delete=="function"&&Pe.jsx("button",{className:"bdsa-annotation-manager__annotation-card-cache-bypass",onClick:async it=>{it.stopPropagation();const Pt=String(B._id);try{await Yt.delete(Pt),hi(Bt=>{const Ht=new Set(Bt);return Ht.delete(Pt),Ht}),qt.has(Pt)&&(vt(Pt),setTimeout(()=>vt(Pt),100))}catch(Bt){console.warn("Failed to clear cache for annotation:",Bt)}},title:"Clear cache and refresh this annotation",children:Pe.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[Pe.jsx("path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"}),Pe.jsx("path",{d:"M21 3v5h-5"}),Pe.jsx("path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"}),Pe.jsx("path",{d:"M3 21v-5h5"})]})})]}),Pe.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:it=>{it.stopPropagation(),vt(String(B._id))},title:ee?"Unload annotation":"Load annotation",children:ee?Pe.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:Pe.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})}):Pe.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[Pe.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),Pe.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})})]})]}),Pe.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-details",children:[B._elementCount!==void 0&&Pe.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-detail",children:[Pe.jsx("strong",{children:"Elements:"})," ",B._elementCount]}),B._detailsCount!==void 0&&Pe.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-detail",children:[Pe.jsx("strong",{children:"Points:"})," ",B._detailsCount.toLocaleString()]})]}),Pe.jsx("div",{className:"bdsa-annotation-manager__annotation-card-controls",children:ae?Pe.jsxs("div",{className:"bdsa-annotation-manager__loading-indicator",children:[Pe.jsx("div",{className:"bdsa-annotation-manager__spinner"}),Pe.jsx("span",{children:"Loading..."})]}):ee?Pe.jsxs(Pe.Fragment,{children:[Pe.jsx("button",{className:"bdsa-annotation-manager__annotation-card-button bdsa-annotation-manager__annotation-card-button--visibility",onClick:it=>{it.stopPropagation(),Rt(B._id)},title:ze>0?"Hide annotation":"Show annotation",children:Pe.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:ze>0?Pe.jsxs(Pe.Fragment,{children:[Pe.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),Pe.jsx("circle",{cx:"12",cy:"12",r:"3"})]}):Pe.jsxs(Pe.Fragment,{children:[Pe.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"}),Pe.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]})})}),Pe.jsxs("div",{className:"bdsa-annotation-manager__annotation-card-opacity",onClick:it=>it.stopPropagation(),children:[Pe.jsxs("label",{className:"bdsa-annotation-manager__annotation-card-opacity-label",children:["Opacity: ",Math.round(ze*100),"%"]}),Pe.jsx("input",{type:"range",min:"0",max:"1",step:"0.01",value:ze,onChange:it=>Q(B._id,parseFloat(it.target.value)),onClick:it=>it.stopPropagation(),onMouseDown:it=>it.stopPropagation(),className:"bdsa-annotation-manager__annotation-card-opacity-slider"})]})]}):null})]},B._id)})]})};return Pe.jsxs("div",{ref:We,className:`bdsa-annotation-manager ${Tt}`,children:[$?Pe.jsxs(Pe.Fragment,{children:[I(),et&&typeof et=="function"?et(ye):et]}):et&&typeof et=="function"?et(ye):et,y&&Nt&&Pe.jsxs("div",{className:"bdsa-annotation-manager__debug-panel",children:[Pe.jsx("div",{className:"bdsa-annotation-manager__debug-panel-header",children:Pe.jsx("strong",{children:"Raw API Response (Debug)"})}),Pe.jsx("pre",{className:"bdsa-annotation-manager__debug-panel-content",children:Nt})]})]})});tn.displayName="AnnotationManager";const nn=tt.forwardRef(({apiBaseUrl:Oe,fetchFn:he,apiHeaders:n,onResourceSelect:o,onSelectionChange:u,showCollections:h=!0,rootId:g,rootType:y,startCollectionId:a,startFolderId:w,parentFolderId:_,foldersPerPage:T=50,className:k="",renderCollection:M,renderFolder:V,showItems:W=!0,itemsPerPage:O=50,onItemSelect:te,renderItem:_e},be)=>{const[ht,$e]=tt.useState([]),[Xe,bt]=tt.useState(null),[$,Tt]=tt.useState(null),[et,St]=tt.useState({}),[Me,Mt]=tt.useState({}),[_t,gt]=tt.useState({}),[Ft,dt]=tt.useState({}),[Nt,Vt]=tt.useState(new Set),[Wt,ri]=tt.useState(new Set),[zt,yt]=tt.useState(null),[si,Ke]=tt.useState(!1),[ti,Ye]=tt.useState({}),[Dt,ii]=tt.useState({}),[Et,Kt]=tt.useState(null),hi=tt.useRef(null),Yt=tt.useCallback(()=>{const Q={};return n&&(Q.headers=n),Q},[n]),qt=tt.useCallback(async()=>{if(!Oe){Kt(new Error("API base URL is required"));return}Ke(!0),Kt(null);try{const Q=`${Oe}/collection`,ye=he||fetch,We=Yt(),I=await ye(Q,We);if(!I.ok)throw new Error(`Failed to fetch collections: ${I.status} ${I.statusText}`);const C=await I.json(),B=Array.isArray(C)?C:C.items||[];$e(B),a&&B.some(L=>L._id===a)&&(Vt(new Set([a])),await Zt(B.find(L=>L._id===a)))}catch(Q){const ye=Q instanceof Error?Q:new Error("Unknown error loading collections");Kt(ye),console.error("Error loading collections:",ye)}finally{Ke(!1)}},[Oe,he,Yt,a]),Zt=tt.useCallback(async(Q,ye=!1)=>{if(!Oe||!(Q!=null&&Q._id))return;let We=!1,I=0;if(gt(C=>{const B=C[Q._id];return B!=null&&B.loaded&&!ye&&(We=!0),ye&&B&&(I=B.offset),C}),!We){Ye(C=>({...C,[Q._id]:!0}));try{const C=new URLSearchParams({parentType:"collection",parentId:Q._id});T>0&&(C.append("limit",String(T)),C.append("offset",String(I)));const B=`${Oe}/folder?${C.toString()}`,L=he||fetch,ee=Yt(),ae=await L(B,ee);if(!ae.ok){console.warn(`Failed to fetch folders for collection ${Q._id}:`,ae.statusText);return}const ze=await ae.json();let De=[],Ae=!1;Array.isArray(ze)?(De=ze,Ae=T>0&&ze.length===T):(De=ze.items||[],Ae=T>0&&ze.total>I+De.length),St(qe=>({...qe,[Q._id]:ye?[...qe[Q._id]||[],...De]:De})),gt(qe=>({...qe,[Q._id]:{offset:T>0?I+De.length:0,hasMore:T>0?Ae:!1,loaded:!0}})),!ye&&w&&De.some(qe=>qe._id===w)&&(ri(qe=>new Set(qe).add(w)),await xt(De.find(qe=>qe._id===w),!0))}catch(C){console.error(`Error loading folders for collection ${Q._id}:`,C)}finally{Ye(C=>({...C,[Q._id]:!1}))}}},[Oe,he,Yt,w,T]),xt=tt.useCallback(async(Q,ye=!1)=>{if(!Oe||!(Q!=null&&Q._id))return;let We=!1,I=0;if(gt(C=>{const B=C[Q._id];return B!=null&&B.loaded&&!ye&&(We=!0),ye&&B&&(I=B.offset),C}),!We){Ye(C=>({...C,[Q._id]:!0}));try{const C=new URLSearchParams({parentType:"folder",parentId:Q._id});T>0&&(C.append("limit",String(T)),C.append("offset",String(I)));const B=`${Oe}/folder?${C.toString()}`,L=he||fetch,ee=Yt(),ae=await L(B,ee);if(!ae.ok){console.warn(`Failed to fetch subfolders for folder ${Q._id}:`,ae.statusText);return}const ze=await ae.json();let De=[],Ae=!1;Array.isArray(ze)?(De=ze,Ae=T>0&&ze.length===T):(De=ze.items||[],Ae=T>0&&ze.total>I+De.length),St(qe=>({...qe,[Q._id]:ye?[...qe[Q._id]||[],...De]:De})),gt(qe=>({...qe,[Q._id]:{offset:T>0?I+De.length:0,hasMore:T>0?Ae:!1,loaded:!0}}))}catch(C){console.error(`Error loading subfolders for folder ${Q._id}:`,C)}finally{Ye(C=>({...C,[Q._id]:!1}))}}},[Oe,he,Yt,T]),P=tt.useCallback(async(Q,ye,We=!1)=>{if(!Oe||!W)return;ye&&console.log(`[FolderBrowser] Checking folder ${Q} (${ye.name}):`,{parentType:ye.parentType,parentId:ye.parentId,hasItems:!0}),ye?ye.parentType==="collection"?console.log(`[FolderBrowser] Root folder ${Q} (${ye.name}) - attempting item fetch (typically empty, but checking anyway)`):ye.parentType==="folder"?console.log(`[FolderBrowser] Subfolder ${Q} (${ye.name}) - fetching items`):console.log(`[FolderBrowser] Folder ${Q} (${ye.name}) - parentType unknown (${ye.parentType}), attempting fetch`):console.log(`[FolderBrowser] Folder object not provided for ${Q} - attempting item fetch`);const I=We&&Ft[Q]?Ft[Q].offset:0;ii(C=>({...C,[Q]:!0}));try{const C=new URLSearchParams;C.append("folderId",Q),O>0&&(C.append("limit",String(O)),C.append("offset",String(I)));const B=`${Oe}/item?${C.toString()}`;console.log(`[FolderBrowser] Fetching items from: ${B}`);const L=he||fetch,ee=Yt(),ae=await L(B,ee);if(!ae.ok){console.warn(`[FolderBrowser] Failed to fetch items for folder ${Q}:`,ae.status,ae.statusText);return}const ze=await ae.json();console.log("[FolderBrowser] Received response:",ze);let De=[],Ae=!1;Array.isArray(ze)?(De=ze,Ae=O>0&&ze.length===O):(De=ze.items||[],Ae=O>0&&ze.total>I+De.length),console.log(`[FolderBrowser] Parsed ${De.length} items for folder ${Q}`),Mt(qe=>({...qe,[Q]:We?[...qe[Q]||[],...De]:De})),O>0&&dt(qe=>({...qe,[Q]:{offset:I+De.length,hasMore:Ae}}))}catch(C){console.error(`[FolderBrowser] Error loading items for folder ${Q}:`,C)}finally{ii(C=>({...C,[Q]:!1}))}},[Oe,he,Yt,W,O,Ft]),q=tt.useCallback(async()=>{if(!(!Oe||!g||!y)){Ke(!0),Kt(null);try{let Q=y==="collection"?`${Oe}/collection/${g}`:`${Oe}/folder/${g}`;const ye=he||fetch,We=Yt();let I=await ye(Q,We),C=null;if(I.ok)C=await I.json();else if(console.warn(`Direct fetch failed for ${y} ${g}, trying list endpoint...`),y==="collection"){const B=`${Oe}/collection`;if(I=await ye(B,We),!I.ok)throw new Error(`Failed to fetch collections: ${I.status} ${I.statusText}`);const L=await I.json();if(C=(Array.isArray(L)?L:L.items||[]).find(ae=>ae._id===g)||null,!C)throw new Error(`Collection with ID ${g} not found`)}else{try{const B=`${Oe}/folder`;if(I=await ye(B,We),I.ok){const L=await I.json();C=(Array.isArray(L)?L:L.items||[]).find(ae=>ae._id===g)||null}}catch{console.warn("Could not list folders directly, will need to search through collections")}if(!C){const B=`${Oe}/collection`,L=await ye(B,We);if(!L.ok)throw new Error(`Failed to fetch collections for folder search: ${L.status}`);const ee=await L.json(),ae=Array.isArray(ee)?ee:ee.items||[];for(const ze of ae){const De=`${Oe}/folder?parentType=collection&parentId=${ze._id}`,Ae=await ye(De,We);if(Ae.ok){const qe=await Ae.json(),it=Array.isArray(qe)?qe:qe.items||[],Pt=it.find(Ht=>Ht._id===g);if(Pt){C=Pt;break}const Bt=async Ht=>{const oi=`${Oe}/folder?parentType=folder&parentId=${Ht._id}`,ci=await ye(oi,We);if(ci.ok){const pi=await ci.json(),ui=Array.isArray(pi)?pi:pi.items||[],Ot=ui.find(fi=>fi._id===g);if(Ot)return Ot;for(const fi of ui){const Ct=await Bt(fi);if(Ct)return Ct}}return null};for(const Ht of it){const oi=await Bt(Ht);if(oi){C=oi;break}}if(C)break}}if(!C)throw new Error(`Folder with ID ${g} not found in any collection`)}}if(!C)throw new Error(`${y} with ID ${g} not found`);if(y==="collection"){const B=C;bt(B),Vt(new Set([g])),await Zt(B)}else{const B=C;Tt(B),ri(new Set([g])),await xt(B)}}catch(Q){const ye=Q instanceof Error?Q:new Error(`Unknown error loading ${y}`);Kt(ye),console.error(`Error loading root ${y}:`,ye)}finally{Ke(!1)}}},[Oe,g,y,he,Yt,Zt,xt]),fe=tt.useCallback(async Q=>{if(Nt.has(Q._id))Vt(We=>{const I=new Set(We);return I.delete(Q._id),I});else{const We=hi.current;let I=null,C=0;if(We){let B=We.parentElement;for(;B&&B!==document.body;){const L=window.getComputedStyle(B),ee=L.overflowY||L.overflow;if(ee==="auto"||ee==="scroll"){I=B,C=B.scrollTop;break}if(B.scrollHeight>B.clientHeight&&B.clientHeight>0){I=B,C=B.scrollTop;break}B=B.parentElement}}if(Vt(B=>new Set(B).add(Q._id)),await Zt(Q,!1),I){const B=C;requestAnimationFrame(()=>{requestAnimationFrame(()=>{I&&I.scrollTop!==void 0&&(I.scrollTop=B)})})}}},[Nt,Zt]),Re=tt.useCallback(async Q=>{if(Wt.has(Q._id))ri(We=>{const I=new Set(We);return I.delete(Q._id),I});else{const We=hi.current;let I=null,C=0;if(We){let B=We.parentElement;for(;B&&B!==document.body;){const L=window.getComputedStyle(B),ee=L.overflowY||L.overflow;if(ee==="auto"||ee==="scroll"){I=B,C=B.scrollTop;break}if(B.scrollHeight>B.clientHeight&&B.clientHeight>0){I=B,C=B.scrollTop;break}B=B.parentElement}}if(ri(B=>new Set(B).add(Q._id)),await xt(Q,!1),W?(console.log(`[FolderBrowser] Toggling folder ${Q._id} (${Q.name}) - showItems=${W}, calling loadItemsForFolder`),await P(Q._id,Q,!1)):console.log(`[FolderBrowser] Toggling folder ${Q._id} (${Q.name}) - showItems is FALSE, skipping item load`),I){const B=C;requestAnimationFrame(()=>{requestAnimationFrame(()=>{I&&I.scrollTop!==void 0&&(I.scrollTop=B)})})}}},[Wt,xt,W,P]),He=tt.useCallback((Q,ye)=>{const We={...Q,type:ye};yt(We),o==null||o(We),u==null||u(We)},[o,u]),Qe=tt.useCallback(Q=>{const ye={...Q,type:"item"};yt(ye),te==null||te(Q),u==null||u(ye)},[te,u]);tt.useEffect(()=>{g&&y&&Oe?q():h&&Oe?qt():h&&!Oe&&(Kt(new Error("API base URL is required")),Ke(!1))},[g,y,h,Oe,qt,q]);const ke=tt.useCallback((Q,ye)=>{const We=(zt==null?void 0:zt._id)===Q._id&&(zt==null?void 0:zt.type)==="item";return _e?_e(Q,ye):Pe.jsx("div",{className:"bdsa-folder-browser__item",style:{marginLeft:`${ye*20}px`},children:Pe.jsxs("div",{className:`bdsa-folder-browser__folder-header ${We?"selected":""}`,onClick:()=>Qe(Q),onDoubleClick:()=>Qe(Q),children:[Pe.jsx("span",{className:"bdsa-folder-browser__folder-icon",children:"📄"}),Pe.jsx("span",{className:"bdsa-folder-browser__folder-name",children:Q.name}),Pe.jsx("span",{className:"bdsa-folder-browser__folder-type",children:"Item"})]})},Q._id)},[zt,_e,Qe]),vt=tt.useCallback((Q,ye=0)=>{var L,ee;const We=Wt.has(Q._id),I=et[Q._id]||[],C=W?Me[Q._id]||[]:[],B=(zt==null?void 0:zt._id)===Q._id&&(zt==null?void 0:zt.type)==="folder";return V?V(Q,ye,We,()=>Re(Q)):Pe.jsxs("div",{className:"bdsa-folder-browser__folder",style:{marginLeft:`${ye*20}px`},children:[Pe.jsxs("div",{className:`bdsa-folder-browser__folder-header ${B?"selected":""}`,onClick:()=>Re(Q),onDoubleClick:()=>He(Q,"folder"),children:[Pe.jsx("span",{className:`bdsa-folder-browser__folder-icon ${We?"expanded":""}`,children:We?"📂":"📁"}),Pe.jsx("span",{className:"bdsa-folder-browser__folder-name",children:Q.name}),Pe.jsx("span",{className:"bdsa-folder-browser__folder-type",children:"Folder"})]}),We&&Pe.jsxs("div",{className:"bdsa-folder-browser__folder-contents",children:[I.map(ae=>vt(ae,ye+1)),W&&C.map(ae=>ke(ae,ye+1)),W&&Dt[Q._id]&&Pe.jsx("div",{className:"bdsa-folder-browser__loading",style:{marginLeft:`${(ye+1)*20}px`},children:Pe.jsx("span",{children:"Loading items..."})}),T>0&&((L=_t[Q._id])==null?void 0:L.hasMore)&&!ti[Q._id]&&Pe.jsx("div",{className:"bdsa-folder-browser__load-more",style:{marginLeft:`${(ye+1)*20}px`},children:Pe.jsx("button",{className:"bdsa-folder-browser__load-more-btn",onClick:()=>xt(Q,!0),disabled:ti[Q._id],children:ti[Q._id]?"Loading...":"Load More Folders"})}),W&&O>0&&((ee=Ft[Q._id])==null?void 0:ee.hasMore)&&Pe.jsx("div",{className:"bdsa-folder-browser__load-more",style:{marginLeft:`${(ye+1)*20}px`},children:Pe.jsx("button",{className:"bdsa-folder-browser__load-more-btn",onClick:()=>P(Q._id,Q,!0),disabled:Dt[Q._id],children:Dt[Q._id]?"Loading...":"Load More Items"})})]})]},Q._id)},[Wt,et,Me,W,zt,V,Re,He,T,_t,ti,xt,O,Ft,Dt,P,ke]),Rt=tt.useCallback(Q=>{var C;const ye=Nt.has(Q._id),We=et[Q._id]||[],I=(zt==null?void 0:zt._id)===Q._id&&(zt==null?void 0:zt.type)==="collection";return M?M(Q,ye,()=>fe(Q)):Pe.jsxs("div",{className:"bdsa-folder-browser__collection",children:[Pe.jsxs("div",{className:`bdsa-folder-browser__folder-header ${I?"selected":""}`,onClick:()=>fe(Q),onDoubleClick:()=>He(Q,"collection"),children:[Pe.jsx("span",{className:`bdsa-folder-browser__folder-icon ${ye?"expanded":""}`,children:ye?"📂":"📁"}),Pe.jsx("span",{className:"bdsa-folder-browser__folder-name",children:Q.name}),Pe.jsx("span",{className:"bdsa-folder-browser__folder-type",children:"Collection"})]}),ye&&Pe.jsxs("div",{className:"bdsa-folder-browser__folder-contents",children:[We.map(B=>vt(B,1)),T>0&&((C=_t[Q._id])==null?void 0:C.hasMore)&&!ti[Q._id]&&Pe.jsx("div",{className:"bdsa-folder-browser__load-more",children:Pe.jsx("button",{className:"bdsa-folder-browser__load-more-btn",onClick:()=>Zt(Q,!0),disabled:ti[Q._id],children:ti[Q._id]?"Loading...":"Load More Folders"})})]})]},Q._id)},[Nt,et,zt,M,fe,He,T,_t,ti,Zt,vt]);return Pe.jsxs("div",{ref:Q=>{typeof be=="function"?be(Q):be&&"current"in be&&(be.current=Q),hi.current=Q},className:`bdsa-folder-browser ${k}`,children:[si&&Pe.jsx("div",{className:"bdsa-folder-browser__loading",children:Pe.jsx("span",{children:g&&y?`Loading ${y}...`:"Loading collections..."})}),Et&&Pe.jsxs("div",{className:"bdsa-folder-browser__error",children:[Pe.jsx("span",{children:Et.message}),Pe.jsx("button",{onClick:()=>{g&&y?q():qt()},children:"Retry"})]}),!si&&!Et&&Pe.jsxs(Pe.Fragment,{children:[g&&y==="collection"&&Xe&&Pe.jsx("div",{className:"bdsa-folder-browser__collections",children:Rt(Xe)}),g&&y==="folder"&&$&&Pe.jsx("div",{className:"bdsa-folder-browser__collections",children:vt($,0)}),!g&&h&&Pe.jsx("div",{className:"bdsa-folder-browser__collections",children:ht.length===0?Pe.jsx("div",{className:"bdsa-folder-browser__empty",children:Pe.jsx("span",{children:"No collections found"})}):ht.map(Q=>Rt(Q))})]})]})});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
|