@giro3d/piero 1.0.0-beta.2 → 1.0.0-beta.4

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.
Files changed (43) hide show
  1. package/dist/Components.cjs.js +3 -2
  2. package/dist/Components.cjs.js.map +1 -1
  3. package/dist/Components.es.js +3193 -1778
  4. package/dist/Components.es.js.map +1 -1
  5. package/dist/assets/piero.css +2 -2
  6. package/dist/index.cjs.js +7 -7
  7. package/dist/index.cjs.js.map +1 -1
  8. package/dist/index.es.js +3192 -4319
  9. package/dist/index.es.js.map +1 -1
  10. package/dist/modules.cjs.js +1 -2
  11. package/dist/modules.cjs.js.map +1 -1
  12. package/dist/modules.es.js +981 -965
  13. package/dist/modules.es.js.map +1 -1
  14. package/dist/src/api/SearchApi.d.ts +34 -0
  15. package/dist/src/api/ViewApi.d.ts +2 -0
  16. package/dist/src/api/WidgetApi.d.ts +17 -0
  17. package/dist/src/api/index.d.ts +2 -1
  18. package/dist/src/components/CoordinateInput.vue.d.ts +31 -0
  19. package/dist/src/components/SearchOverlay.vue.d.ts +4 -5
  20. package/dist/src/context.d.ts +10 -0
  21. package/dist/src/events.d.ts +7 -1
  22. package/dist/src/modules/OpenLayersMinimap.d.ts +7 -0
  23. package/dist/src/modules/PostProcessEntities.d.ts +16 -0
  24. package/dist/src/modules/crossSectionAnalysis/CrossSection.vue.d.ts +1 -1
  25. package/dist/src/modules/crossSectionAnalysis/CrossSectionHelper.d.ts +4 -0
  26. package/dist/src/modules/crossSectionAnalysis/CrossSectionManager.d.ts +7 -0
  27. package/dist/src/modules/crossSectionAnalysis/store.d.ts +22 -2
  28. package/dist/src/modules/geocoding/CoordinatesSearch.d.ts +7 -0
  29. package/dist/src/modules/geocoding/FrenchBanGeocoder.d.ts +10 -0
  30. package/dist/src/modules/index.d.ts +5 -1
  31. package/dist/src/modules/minimap/OpenLayersMinimapComponent.vue.d.ts +8 -0
  32. package/dist/src/services/CameraController.d.ts +3 -3
  33. package/dist/src/services/Giro3DManager.d.ts +2 -0
  34. package/dist/src/services/SceneCursorManager.d.ts +19 -0
  35. package/dist/src/stores/giro3d.d.ts +1 -7
  36. package/dist/src/stores/search.d.ts +12 -0
  37. package/dist/src/stores/widgets.d.ts +12 -0
  38. package/dist/src/utils/Types.d.ts +1 -0
  39. package/package.json +2 -2
  40. package/dist/src/components/MinimapView.vue.d.ts +0 -4
  41. package/dist/src/providers/BanProvider.d.ts +0 -11
  42. package/dist/src/providers/Geocoding.d.ts +0 -7
  43. package/dist/src/services/MinimapController.d.ts +0 -19
package/dist/index.cjs.js CHANGED
@@ -1,17 +1,17 @@
1
- "use strict";var Pa=Object.defineProperty;var Ta=(e,t,i)=>t in e?Pa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var p=(e,t,i)=>Ta(e,typeof t!="symbol"?t+"":t,i);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const kt=require("pinia"),o=require("vue"),A=require("./Components.cjs.js"),Qe=require("@giro3d/giro3d/core/geographic/Extent"),Da=require("@giro3d/giro3d/entities/FeatureCollection"),Wt=require("ol/format"),Ba=require("ol/loadingstrategy.js"),Va=require("ol/source/Vector"),Ra=require("ol/tilegrid.js"),Fa=require("@giro3d/giro3d/sources/COPCSource"),Ua=require("@giro3d/giro3d/sources/LASSource"),za=require("@giro3d/giro3d/core/OperationCounter"),ja=require("@giro3d/giro3d/entities/PointCloud"),Ga=require("@giro3d/giro3d/sources/PointCloudSource"),Ti=require("@loaders.gl/core"),Ha=require("@loaders.gl/csv"),Za=require("@giro3d/giro3d/entities/Tiles3D"),Wa=require("@giro3d/giro3d/renderer/PointCloudMaterial"),qa=require("@loaders.gl/geopackage"),qi=require("@giro3d/giro3d/core/FeatureTypes"),Di=require("@giro3d/giro3d/entities/Entity3D"),Ya=require("ol/format/GeoJSON"),Ja=require("ol/format/GPX"),Xa=require("ol/format/KML"),at=require("@giro3d/giro3d/core/geographic/Coordinates"),Ka=require("@giro3d/giro3d/renderer/geometries/GeometryConverter"),Bi=require("@giro3d/giro3d/core/Instance"),Qa=require("@loaders.gl/shapefile"),$a=require("@giro3d/giro3d/utils/ColorUtils"),rt=require("@giro3d/giro3d/entities/Shape"),tn=require("@giro3d/giro3d/core/picking/PickPointsAt"),Ts=require("@giro3d/giro3d/core/picking/PickTilesAt"),je=require("@giro3d/giro3d/entities/Map"),$t=require("@giro3d/giro3d/core/layer/ColorLayer"),fe=require("@giro3d/giro3d/core/layer/ElevationLayer"),en=require("@giro3d/giro3d/core/layer/Interpretation"),Ge=require("@giro3d/giro3d/core/layer/MaskLayer"),Yi=require("@giro3d/giro3d/formats/BilFormat"),sn=require("@giro3d/giro3d/formats/GeoTIFFFormat"),an=require("@giro3d/giro3d/formats/MapboxTerrainFormat"),nn=require("@giro3d/giro3d/sources/GeoTIFFSource"),Ft=require("@giro3d/giro3d/sources/TiledImageSource"),de=require("@giro3d/giro3d/sources/VectorSource"),Ji=require("@giro3d/giro3d/sources/VectorTileSource"),Ht=require("ol/source"),on=require("ol/source/WMTS"),q=require("ol/style");require("@giro3d/giro3d/utils/HttpConfiguration");const Nt=require("@giro3d/giro3d/interactions/DrawTool"),rn=require("@giro3d/giro3d/gui/Panel"),ln=require("@giro3d/giro3d/entities/AxisGrid"),hn=require("ol/Feature"),cn=require("ol/geom/Polygon");require("@giro3d/giro3d/utils/Fetcher");require("@giro3d/giro3d/core/ColorMap");require("chroma-js");const gn=require("@giro3d/giro3d/core/geographic/Extent.js"),un=require("@giro3d/giro3d/entities/Map.js"),dn=require("@giro3d/giro3d/sources/TiledImageSource.js"),An=require("ol/source/OSM"),mn=require("bootstrap");require("@giro3d/giro3d/gui/Inspector");const Cn=require("@tarekraafat/autocomplete.js");function fn(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const i in e)if(i!=="default"){const s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:()=>e[i]})}}return t.default=e,Object.freeze(t)}const In=fn(mn);class pn{constructor(t){this.store=t}registerTool(t){this.store.registerTool(t)}}class vn{constructor(t){p(this,"_store");this._store=t}clearBookmarks(){this._store.clear()}getBookmarks(){return this._store.getBookmarks()}setBookmarks(t){this._store.clear();for(const i of t)this._store.add(i)}}let oi=null;function Ds(){return oi||(oi=[{enabled:!0,icon:"bi-database",key:"datasets",title:"Datasets"},{enabled:!0,icon:"bi-vector-pen",key:"annotations",title:"Annotations"},{enabled:A.hasExperimentalFeature("measurements"),icon:"bi-rulers",key:"measures",title:"Measurements"},{enabled:!0,icon:"bi-graph-up",key:"analysis",title:"Analysis"},{enabled:!0,icon:"bi-bookmarks",key:"bookmarks",title:"Bookmarks"},{enabled:!0,icon:"bi-info-circle",key:"about",title:"About Piero"}]),oi}const De=new Map,Bs={colorLayer:"fg-landcover-map",elevationLayer:"fg-contour-map",featureCollection:"bi-buildings",maskLayer:"fg-hex-map",pointcloud:"fg-multipoint",tiledIfc:"bi-building",vector:"fg-polygon-pt"},Vs={colorLayer:"Color Layer",elevationLayer:"Elevation layer",featureCollection:"Feature Collection",maskLayer:"Mask Layer",pointcloud:"Point Cloud",tiledIfc:"IFC",vector:"Vector"};class yn extends Da{constructor(t){const i=t.featureProjection;let s;switch(t.source){case"bdtopo":s="BDTOPO_V3:batiment";break;default:return t.source}const a=new Va({format:new Wt.GeoJSON,strategy:Ba.tile(Ra.createXYZ({tileSize:512})),url:function(d){return`${`https://data.geopf.fr/wfs/ows?SERVICE=WFS&VERSION=2.0.0&request=GetFeature&typename=BDTOPO_V3:batiment&outputFormat=application/json&SRSNAME=${i}&startIndex=0&bbox=`}${d.join(",")},${i}`}}),n=t.extent??new Qe("EPSG:2154",-111629.52,127502884e-2,597603379e-2,723016164e-2),r=t.extrusionOffset??(c=>{const u=-c.getProperties().hauteur;return Number.isNaN(u)?0:u}),l=t.style??(c=>{const d=c.getProperties();let g="#FFFFFF";switch(d.usage_1){case"Agricole":g="#96ff0d";break;case"Commercial et services":g="#d8ffd4";break;case"Industriel":g="#f0bb41";break;case"Religieux":g="#41b5f0";break;case"Résidentiel":g="#cec8be";break;case"Sportif":g="#ff0d45";break}return{fill:{color:new A.Color(g),shading:!0},stroke:{color:"black",lineWidth:void 0}}}),h={extent:n,extrusionOffset:r,maxLevel:t.maxLevel??11,minLevel:t.minLevel??11,source:a,style:l};super(h),this.name=t.source,A.fillObject3DUserData(this,{filename:s})}}const bn=e=>{const t=e.dataset.config,i=new yn({...t,featureProjection:e.instance.referenceCrs});return Promise.resolve(i)};class Mn extends Ga.PointCloudSourceBase{constructor(i){super();p(this,"dataProjection");p(this,"isCSVPointCloudSource",!0);p(this,"type","CSVPointCloudSource");p(this,"url");p(this,"_localVolume",null);p(this,"_metadata",null);p(this,"_opCounter",new za);p(this,"_origin",null);p(this,"_points",null);p(this,"_root",null);p(this,"_zArray",null);this.url=i.url,this.dataProjection=i.dataProjection}get loading(){return this._opCounter.loading}get progress(){return this._opCounter.progress}dispose(){}getHierarchy(){if(this._root==null)throw new Error("not initialized");return Promise.resolve(this._root)}getMemoryUsage(i){this._points!=null&&i.objects.set(this.id,{cpuMemory:this._points.byteLength,gpuMemory:this._points.byteLength})}getMetadata(){if(this._metadata==null)throw new Error("not initialized");return Promise.resolve(this._metadata)}getNodeData(i){if(this._points==null||this._origin==null||this._zArray==null||this._metadata==null||this._localVolume==null)throw new Error("not initialized");let s;return i.attribute!=null&&i.attribute.name==="Z"&&(s=new A.Float32BufferAttribute(this._zArray,1)),Promise.resolve({attribute:s,localBoundingBox:this._localVolume,origin:this._origin,pointCount:this._points.length/3,position:i.position?new A.Float32BufferAttribute(this._points,3,!1):void 0})}async initializeOnce(){this._opCounter.increment();const i=await Ti.load(this.url,Ha.CSVLoader,{csv:{shape:"array-row-table"},fetch:A.Fetcher.fetch}),s=new Float32Array(i.data.length*3),a=new Float32Array(i.data.length),n=new A.Box3().makeEmpty(),r=new A.Box3().makeEmpty(),l=new A.Vector3,h=new A.Vector3(i.data[0][0],i.data[0][1],i.data[0][2]);for(let g=0;g<i.data.length;g+=1){const u=i.data[g][0],f=i.data[g][1],m=i.data[g][2],C=u-h.x,v=f-h.y,I=m-h.z;n.expandByPoint(l.set(u,f,m)),r.expandByPoint(l.set(C,v,I)),s[g*3+0]=C,s[g*3+1]=v,s[g*3+2]=I,a[g]=m}this._points=s,this._zArray=a,this._origin=h,this._localVolume=r;const c=s.length/3,d={center:n.getCenter(new A.Vector3),depth:0,geometricError:0,hasData:!0,id:"root",pointCount:c,sourceId:this.id,volume:n};return this._root=d,this._metadata={attributes:[{dimension:1,interpretation:"unknown",max:n.max.z,min:n.min.z,name:"Z",size:4,type:"float"}],crs:this.dataProjection!=null?{name:this.dataProjection}:void 0,pointCount:c,volume:n},this._opCounter.decrement(),this}}class wn extends ja{constructor(i){super(i);p(this,"isPointCloudEntity",!0);const s=A.getConfig();if(this.colorMap=A.getColorMap(s.pointcloud),"url"in i.source){const a=A.Fetcher.getContext(i.source.url);A.fillObject3DUserData(this,{filename:a.filename})}}async initialize(i){await super.initialize(i),this.setActiveAttribute("Z")}}const En=e=>{const{dataset:t}=e,i=t.config;let s;switch(i.source.type){case"copc":s=new Fa({url:typeof i.source.url=="string"?A.getPublicFolderUrl(i.source.url):async(n,r)=>{const c=await i.source.url.slice(n,r).arrayBuffer();return new Uint8Array(c)}});break;case"csv":s=new Mn({...i.source});break;case"las":s=new Ua({url:typeof i.source.url=="string"?A.getPublicFolderUrl(i.source.url):async()=>{const n=await A.Fetcher.fetchArrayBuffer(i.source.url);return new Uint8Array(n.slice(0))}});break;default:return i.source}const a=new wn({source:s});return Promise.resolve(a)};class Rs extends Za{constructor(t,i){super({...t,...i}),A.fillObject3DUserData(this,{filename:t.url})}}const _n=e=>{const t=e.dataset.config,i=new Rs({...t.source,url:A.getPublicFolderUrl(t.source.url)});return Promise.resolve(i)};class On extends Rs{constructor(t){const i=A.getConfig();super(t,{colorMap:A.getColorMap(i.pointcloud),pointCloudMode:Wa.MODE.ELEVATION}),this.name=`pointcloud-${t.name}`}}const xn=e=>{const{dataset:t}=e,i=t.config,s=new On({...i.source,name:i.name,url:A.getPublicFolderUrl(i.source.url)});return Promise.resolve(s)},ri=new at("EPSG:4326",0,0,0);async function kn(e,t){const s=[];for(let n=0;n<e.length;n+=200){const r=e.slice(n,n+200),l=t.slice(n,n+200);s.push(Sn(r,l))}return(await Promise.all(s)).flat()}async function Sn(e,t){return(await A.Fetcher.fetchJson(`https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json?lon=${e.join("|")}&lat=${t.join("|")}&zonly=true&resource=ign_rge_alti_wld&delimiter=|&indent=false`)).elevations}const Fs={async alticode(e){const t=[],i=[];e.forEach(a=>{a.as("EPSG:4326",ri),t.push(ri.longitude),i.push(ri.latitude)}),(await kn(t,i)).forEach((a,n)=>{e[n]._values[2]=a})}},Xi=e=>Fs.alticode(e),Nn=e=>{const t=e.getEntities(s=>s.isMap).at(0);if(t==null)throw new Error("No map attached to the instance");return async s=>(s.forEach(a=>{const n=t.getElevation({coordinates:a}).samples.sort((r,l)=>r.resolution-l.resolution).at(0);n!=null&&(a._values[2]=n.elevation)}),Promise.resolve())},Ln=(e,t=0)=>async s=>{let a=s.filter(n=>n._values[2]===t);for(const n of e)if(await n(a),a=a.filter(r=>r._values[2]===t),a.length===0)break},Us=(e,t,i=0)=>t?Ln([Nn(e),Xi],i):Xi;function Pn(e){e("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),e("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),e("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"),e.WGS84=e["EPSG:4326"],e["EPSG:3785"]=e["EPSG:3857"],e.GOOGLE=e["EPSG:3857"],e["EPSG:900913"]=e["EPSG:3857"],e["EPSG:102113"]=e["EPSG:3857"]}var Bt=1,Vt=2,Kt=3,Tn=4,Ei=5,Ki=6378137,Dn=6356752314e-3,Qi=.0066943799901413165,Ie=484813681109536e-20,w=Math.PI/2,Bn=.16666666666666666,Vn=.04722222222222222,Rn=.022156084656084655,O=1e-10,J=.017453292519943295,pt=57.29577951308232,R=Math.PI/4,pe=Math.PI*2,Z=3.14159265359,nt={};nt.greenwich=0;nt.lisbon=-9.131906111111;nt.paris=2.337229166667;nt.bogota=-74.080916666667;nt.madrid=-3.687938888889;nt.rome=12.452333333333;nt.bern=7.439583333333;nt.jakarta=106.807719444444;nt.ferro=-17.666666666667;nt.brussels=4.367975;nt.stockholm=18.058277777778;nt.athens=23.7163375;nt.oslo=10.722916666667;const Fn={ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937}};var $i=/[\s_\-\/\(\)]/g;function Ot(e,t){if(e[t])return e[t];for(var i=Object.keys(e),s=t.toLowerCase().replace($i,""),a=-1,n,r;++a<i.length;)if(n=i[a],r=n.toLowerCase().replace($i,""),r===s)return e[n]}function _i(e){var t={},i=e.split("+").map(function(l){return l.trim()}).filter(function(l){return l}).reduce(function(l,h){var c=h.split("=");return c.push(!0),l[c[0].toLowerCase()]=c[1],l},{}),s,a,n,r={proj:"projName",datum:"datumCode",rf:function(l){t.rf=parseFloat(l)},lat_0:function(l){t.lat0=l*J},lat_1:function(l){t.lat1=l*J},lat_2:function(l){t.lat2=l*J},lat_ts:function(l){t.lat_ts=l*J},lon_0:function(l){t.long0=l*J},lon_1:function(l){t.long1=l*J},lon_2:function(l){t.long2=l*J},alpha:function(l){t.alpha=parseFloat(l)*J},gamma:function(l){t.rectified_grid_angle=parseFloat(l)},lonc:function(l){t.longc=l*J},x_0:function(l){t.x0=parseFloat(l)},y_0:function(l){t.y0=parseFloat(l)},k_0:function(l){t.k0=parseFloat(l)},k:function(l){t.k0=parseFloat(l)},a:function(l){t.a=parseFloat(l)},b:function(l){t.b=parseFloat(l)},r_a:function(){t.R_A=!0},zone:function(l){t.zone=parseInt(l,10)},south:function(){t.utmSouth=!0},towgs84:function(l){t.datum_params=l.split(",").map(function(h){return parseFloat(h)})},to_meter:function(l){t.to_meter=parseFloat(l)},units:function(l){t.units=l;var h=Ot(Fn,l);h&&(t.to_meter=h.to_meter)},from_greenwich:function(l){t.from_greenwich=l*J},pm:function(l){var h=Ot(nt,l);t.from_greenwich=(h||parseFloat(l))*J},nadgrids:function(l){l==="@null"?t.datumCode="none":t.nadgrids=l},axis:function(l){var h="ewnsud";l.length===3&&h.indexOf(l.substr(0,1))!==-1&&h.indexOf(l.substr(1,1))!==-1&&h.indexOf(l.substr(2,1))!==-1&&(t.axis=l)},approx:function(){t.approx=!0}};for(s in i)a=i[s],s in r?(n=r[s],typeof n=="function"?n(a):t[n]=a):t[s]=a;return typeof t.datumCode=="string"&&t.datumCode!=="WGS84"&&(t.datumCode=t.datumCode.toLowerCase()),t}class zs{static getId(t){const i=t.find(s=>Array.isArray(s)&&s[0]==="ID");return i&&i.length>=3?{authority:i[1],code:parseInt(i[2],10)}:null}static convertUnit(t,i="unit"){if(!t||t.length<3)return{type:i,name:"unknown",conversion_factor:null};const s=t[1],a=parseFloat(t[2])||null,n=t.find(l=>Array.isArray(l)&&l[0]==="ID"),r=n?{authority:n[1],code:parseInt(n[2],10)}:null;return{type:i,name:s,conversion_factor:a,id:r}}static convertAxis(t){const i=t[1]||"Unknown";let s;const a=i.match(/^\((.)\)$/);if(a){const c=a[1].toUpperCase();if(c==="E")s="east";else if(c==="N")s="north";else if(c==="U")s="up";else throw new Error(`Unknown axis abbreviation: ${c}`)}else s=t[2]?t[2].toLowerCase():"unknown";const n=t.find(c=>Array.isArray(c)&&c[0]==="ORDER"),r=n?parseInt(n[1],10):null,l=t.find(c=>Array.isArray(c)&&(c[0]==="LENGTHUNIT"||c[0]==="ANGLEUNIT"||c[0]==="SCALEUNIT")),h=this.convertUnit(l);return{name:i,direction:s,unit:h,order:r}}static extractAxes(t){return t.filter(i=>Array.isArray(i)&&i[0]==="AXIS").map(i=>this.convertAxis(i)).sort((i,s)=>(i.order||0)-(s.order||0))}static convert(t,i={}){switch(t[0]){case"PROJCRS":i.type="ProjectedCRS",i.name=t[1],i.base_crs=t.find(u=>Array.isArray(u)&&u[0]==="BASEGEOGCRS")?this.convert(t.find(u=>Array.isArray(u)&&u[0]==="BASEGEOGCRS")):null,i.conversion=t.find(u=>Array.isArray(u)&&u[0]==="CONVERSION")?this.convert(t.find(u=>Array.isArray(u)&&u[0]==="CONVERSION")):null;const s=t.find(u=>Array.isArray(u)&&u[0]==="CS");s&&(i.coordinate_system={type:s[1],axis:this.extractAxes(t)});const a=t.find(u=>Array.isArray(u)&&u[0]==="LENGTHUNIT");if(a){const u=this.convertUnit(a);i.coordinate_system.unit=u}i.id=this.getId(t);break;case"BASEGEOGCRS":case"GEOGCRS":i.type="GeographicCRS",i.name=t[1];const n=t.find(u=>Array.isArray(u)&&(u[0]==="DATUM"||u[0]==="ENSEMBLE"));if(n){const u=this.convert(n);n[0]==="ENSEMBLE"?i.datum_ensemble=u:i.datum=u;const f=t.find(m=>Array.isArray(m)&&m[0]==="PRIMEM");f&&f[1]!=="Greenwich"&&(u.prime_meridian={name:f[1],longitude:parseFloat(f[2])})}i.coordinate_system={type:"ellipsoidal",axis:this.extractAxes(t)},i.id=this.getId(t);break;case"DATUM":i.type="GeodeticReferenceFrame",i.name=t[1],i.ellipsoid=t.find(u=>Array.isArray(u)&&u[0]==="ELLIPSOID")?this.convert(t.find(u=>Array.isArray(u)&&u[0]==="ELLIPSOID")):null;break;case"ENSEMBLE":i.type="DatumEnsemble",i.name=t[1],i.members=t.filter(u=>Array.isArray(u)&&u[0]==="MEMBER").map(u=>({type:"DatumEnsembleMember",name:u[1],id:this.getId(u)}));const r=t.find(u=>Array.isArray(u)&&u[0]==="ENSEMBLEACCURACY");r&&(i.accuracy=parseFloat(r[1]));const l=t.find(u=>Array.isArray(u)&&u[0]==="ELLIPSOID");l&&(i.ellipsoid=this.convert(l)),i.id=this.getId(t);break;case"ELLIPSOID":i.type="Ellipsoid",i.name=t[1],i.semi_major_axis=parseFloat(t[2]),i.inverse_flattening=parseFloat(t[3]),t.find(u=>Array.isArray(u)&&u[0]==="LENGTHUNIT")&&this.convert(t.find(u=>Array.isArray(u)&&u[0]==="LENGTHUNIT"),i);break;case"CONVERSION":i.type="Conversion",i.name=t[1],i.method=t.find(u=>Array.isArray(u)&&u[0]==="METHOD")?this.convert(t.find(u=>Array.isArray(u)&&u[0]==="METHOD")):null,i.parameters=t.filter(u=>Array.isArray(u)&&u[0]==="PARAMETER").map(u=>this.convert(u));break;case"METHOD":i.type="Method",i.name=t[1],i.id=this.getId(t);break;case"PARAMETER":i.type="Parameter",i.name=t[1],i.value=parseFloat(t[2]),i.unit=this.convertUnit(t.find(u=>Array.isArray(u)&&(u[0]==="LENGTHUNIT"||u[0]==="ANGLEUNIT"||u[0]==="SCALEUNIT"))),i.id=this.getId(t);break;case"BOUNDCRS":i.type="BoundCRS";const h=t.find(u=>Array.isArray(u)&&u[0]==="SOURCECRS");if(h){const u=h.find(f=>Array.isArray(f));i.source_crs=u?this.convert(u):null}const c=t.find(u=>Array.isArray(u)&&u[0]==="TARGETCRS");if(c){const u=c.find(f=>Array.isArray(f));i.target_crs=u?this.convert(u):null}const d=t.find(u=>Array.isArray(u)&&u[0]==="ABRIDGEDTRANSFORMATION");d?i.transformation=this.convert(d):i.transformation=null;break;case"ABRIDGEDTRANSFORMATION":if(i.type="Transformation",i.name=t[1],i.method=t.find(u=>Array.isArray(u)&&u[0]==="METHOD")?this.convert(t.find(u=>Array.isArray(u)&&u[0]==="METHOD")):null,i.parameters=t.filter(u=>Array.isArray(u)&&(u[0]==="PARAMETER"||u[0]==="PARAMETERFILE")).map(u=>{if(u[0]==="PARAMETER")return this.convert(u);if(u[0]==="PARAMETERFILE")return{name:u[1],value:u[2],id:{authority:"EPSG",code:8656}}}),i.parameters.length===7){const u=i.parameters[6];u.name==="Scale difference"&&(u.value=Math.round((u.value-1)*1e12)/1e6)}i.id=this.getId(t);break;case"AXIS":i.coordinate_system||(i.coordinate_system={type:"unspecified",axis:[]}),i.coordinate_system.axis.push(this.convertAxis(t));break;case"LENGTHUNIT":const g=this.convertUnit(t,"LinearUnit");i.coordinate_system&&i.coordinate_system.axis&&i.coordinate_system.axis.forEach(u=>{u.unit||(u.unit=g)}),g.conversion_factor&&g.conversion_factor!==1&&i.semi_major_axis&&(i.semi_major_axis={value:i.semi_major_axis,unit:g});break;default:i.keyword=t[0];break}return i}}class Un extends zs{static convert(t,i={}){return super.convert(t,i),i.coordinate_system&&i.coordinate_system.subtype==="Cartesian"&&delete i.coordinate_system,i.usage&&delete i.usage,i}}class zn extends zs{static convert(t,i={}){super.convert(t,i);const s=t.find(n=>Array.isArray(n)&&n[0]==="CS");s&&(i.coordinate_system={subtype:s[1],axis:this.extractAxes(t)});const a=t.find(n=>Array.isArray(n)&&n[0]==="USAGE");if(a){const n=a.find(h=>Array.isArray(h)&&h[0]==="SCOPE"),r=a.find(h=>Array.isArray(h)&&h[0]==="AREA"),l=a.find(h=>Array.isArray(h)&&h[0]==="BBOX");i.usage={},n&&(i.usage.scope=n[1]),r&&(i.usage.area=r[1]),l&&(i.usage.bbox=l.slice(1))}return i}}function jn(e){return e.find(t=>Array.isArray(t)&&t[0]==="USAGE")?"2019":(e.find(t=>Array.isArray(t)&&t[0]==="CS")||e[0]==="BOUNDCRS"||e[0]==="PROJCRS"||e[0]==="GEOGCRS","2015")}function Gn(e){return(jn(e)==="2019"?zn:Un).convert(e)}function Hn(e){const t=e.toUpperCase();return t.includes("PROJCRS")||t.includes("GEOGCRS")||t.includes("BOUNDCRS")||t.includes("VERTCRS")||t.includes("LENGTHUNIT")||t.includes("ANGLEUNIT")||t.includes("SCALEUNIT")?"WKT2":(t.includes("PROJCS")||t.includes("GEOGCS")||t.includes("LOCAL_CS")||t.includes("VERT_CS")||t.includes("UNIT"),"WKT1")}var ve=1,js=2,Gs=3,He=4,Hs=5,Vi=-1,Zn=/\s/,Wn=/[A-Za-z]/,qn=/[A-Za-z84_]/,$e=/[,\]]/,Zs=/[\d\.E\-\+]/;function Mt(e){if(typeof e!="string")throw new Error("not a string");this.text=e.trim(),this.level=0,this.place=0,this.root=null,this.stack=[],this.currentObject=null,this.state=ve}Mt.prototype.readCharicter=function(){var e=this.text[this.place++];if(this.state!==He)for(;Zn.test(e);){if(this.place>=this.text.length)return;e=this.text[this.place++]}switch(this.state){case ve:return this.neutral(e);case js:return this.keyword(e);case He:return this.quoted(e);case Hs:return this.afterquote(e);case Gs:return this.number(e);case Vi:return}};Mt.prototype.afterquote=function(e){if(e==='"'){this.word+='"',this.state=He;return}if($e.test(e)){this.word=this.word.trim(),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in afterquote yet, index '+this.place)};Mt.prototype.afterItem=function(e){if(e===","){this.word!==null&&this.currentObject.push(this.word),this.word=null,this.state=ve;return}if(e==="]"){this.level--,this.word!==null&&(this.currentObject.push(this.word),this.word=null),this.state=ve,this.currentObject=this.stack.pop(),this.currentObject||(this.state=Vi);return}};Mt.prototype.number=function(e){if(Zs.test(e)){this.word+=e;return}if($e.test(e)){this.word=parseFloat(this.word),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in number yet, index '+this.place)};Mt.prototype.quoted=function(e){if(e==='"'){this.state=Hs;return}this.word+=e};Mt.prototype.keyword=function(e){if(qn.test(e)){this.word+=e;return}if(e==="["){var t=[];t.push(this.word),this.level++,this.root===null?this.root=t:this.currentObject.push(t),this.stack.push(this.currentObject),this.currentObject=t,this.state=ve;return}if($e.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in keyword yet, index '+this.place)};Mt.prototype.neutral=function(e){if(Wn.test(e)){this.word=e,this.state=js;return}if(e==='"'){this.word="",this.state=He;return}if(Zs.test(e)){this.word=e,this.state=Gs;return}if($e.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in neutral yet, index '+this.place)};Mt.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(this.state===Vi)return this.root;throw new Error('unable to parse string "'+this.text+'". State is '+this.state)};function Yn(e){var t=new Mt(e);return t.output()}function li(e,t,i){Array.isArray(t)&&(i.unshift(t),t=null);var s=t?{}:e,a=i.reduce(function(n,r){return qt(r,n),n},s);t&&(e[t]=a)}function qt(e,t){if(!Array.isArray(e)){t[e]=!0;return}var i=e.shift();if(i==="PARAMETER"&&(i=e.shift()),e.length===1){if(Array.isArray(e[0])){t[i]={},qt(e[0],t[i]);return}t[i]=e[0];return}if(!e.length){t[i]=!0;return}if(i==="TOWGS84"){t[i]=e;return}if(i==="AXIS"){i in t||(t[i]=[]),t[i].push(e);return}Array.isArray(i)||(t[i]={});var s;switch(i){case"UNIT":case"PRIMEM":case"VERT_DATUM":t[i]={name:e[0].toLowerCase(),convert:e[1]},e.length===3&&qt(e[2],t[i]);return;case"SPHEROID":case"ELLIPSOID":t[i]={name:e[0],a:e[1],rf:e[2]},e.length===4&&qt(e[3],t[i]);return;case"EDATUM":case"ENGINEERINGDATUM":case"LOCAL_DATUM":case"DATUM":case"VERT_CS":case"VERTCRS":case"VERTICALCRS":e[0]=["name",e[0]],li(t,i,e);return;case"COMPD_CS":case"COMPOUNDCRS":case"FITTED_CS":case"PROJECTEDCRS":case"PROJCRS":case"GEOGCS":case"GEOCCS":case"PROJCS":case"LOCAL_CS":case"GEODCRS":case"GEODETICCRS":case"GEODETICDATUM":case"ENGCRS":case"ENGINEERINGCRS":e[0]=["name",e[0]],li(t,i,e),t[i].type=i;return;default:for(s=-1;++s<e.length;)if(!Array.isArray(e[s]))return qt(e,t[i]);return li(t,i,e)}}var Jn=.017453292519943295;function At(e){return e*Jn}function Ws(e){const t=(e.projName||"").toLowerCase().replace(/_/g," ");!e.long0&&e.longc&&(t==="albers conic equal area"||t==="lambert azimuthal equal area")&&(e.long0=e.longc),!e.lat_ts&&e.lat1&&(t==="stereographic south pole"||t==="polar stereographic (variant b)")?(e.lat0=At(e.lat1>0?90:-90),e.lat_ts=e.lat1,delete e.lat1):!e.lat_ts&&e.lat0&&(t==="polar stereographic"||t==="polar stereographic (variant a)")&&(e.lat_ts=e.lat0,e.lat0=At(e.lat0>0?90:-90),delete e.lat1)}function ts(e){let t={units:null,to_meter:void 0};return typeof e=="string"?(t.units=e.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.units==="meter"&&(t.to_meter=1)):e&&e.name&&(t.units=e.name.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.to_meter=e.conversion_factor),t}function es(e){return typeof e=="object"?e.value*e.unit.conversion_factor:e}function is(e,t){e.ellipsoid.radius?(t.a=e.ellipsoid.radius,t.rf=0):(t.a=es(e.ellipsoid.semi_major_axis),e.ellipsoid.inverse_flattening!==void 0?t.rf=e.ellipsoid.inverse_flattening:e.ellipsoid.semi_major_axis!==void 0&&e.ellipsoid.semi_minor_axis!==void 0&&(t.rf=t.a/(t.a-es(e.ellipsoid.semi_minor_axis))))}function Ze(e,t={}){return!e||typeof e!="object"?e:e.type==="BoundCRS"?(Ze(e.source_crs,t),e.transformation&&(e.transformation.method&&e.transformation.method.name==="NTv2"?t.nadgrids=e.transformation.parameters[0].value:t.datum_params=e.transformation.parameters.map(i=>i.value)),t):(Object.keys(e).forEach(i=>{const s=e[i];if(s!==null)switch(i){case"name":if(t.srsCode)break;t.name=s,t.srsCode=s;break;case"type":s==="GeographicCRS"?t.projName="longlat":s==="ProjectedCRS"&&e.conversion&&e.conversion.method&&(t.projName=e.conversion.method.name);break;case"datum":case"datum_ensemble":s.ellipsoid&&(t.ellps=s.ellipsoid.name,is(s,t)),s.prime_meridian&&(t.from_greenwich=s.prime_meridian.longitude*Math.PI/180);break;case"ellipsoid":t.ellps=s.name,is(s,t);break;case"prime_meridian":t.long0=(s.longitude||0)*Math.PI/180;break;case"coordinate_system":if(s.axis){if(t.axis=s.axis.map(a=>{const n=a.direction;if(n==="east")return"e";if(n==="north")return"n";if(n==="west")return"w";if(n==="south")return"s";throw new Error(`Unknown axis direction: ${n}`)}).join("")+"u",s.unit){const{units:a,to_meter:n}=ts(s.unit);t.units=a,t.to_meter=n}else if(s.axis[0]&&s.axis[0].unit){const{units:a,to_meter:n}=ts(s.axis[0].unit);t.units=a,t.to_meter=n}}break;case"id":s.authority&&s.code&&(t.title=s.authority+":"+s.code);break;case"conversion":s.method&&s.method.name&&(t.projName=s.method.name),s.parameters&&s.parameters.forEach(a=>{const n=a.name.toLowerCase().replace(/\s+/g,"_"),r=a.value;a.unit&&a.unit.conversion_factor?t[n]=r*a.unit.conversion_factor:a.unit==="degree"?t[n]=r*Math.PI/180:t[n]=r});break;case"unit":s.name&&(t.units=s.name.toLowerCase(),t.units==="metre"&&(t.units="meter")),s.conversion_factor&&(t.to_meter=s.conversion_factor);break;case"base_crs":Ze(s,t),t.datumCode=s.id?s.id.authority+"_"+s.id.code:s.name;break}}),t.latitude_of_false_origin!==void 0&&(t.lat0=t.latitude_of_false_origin),t.longitude_of_false_origin!==void 0&&(t.long0=t.longitude_of_false_origin),t.latitude_of_standard_parallel!==void 0&&(t.lat0=t.latitude_of_standard_parallel,t.lat1=t.latitude_of_standard_parallel),t.latitude_of_1st_standard_parallel!==void 0&&(t.lat1=t.latitude_of_1st_standard_parallel),t.latitude_of_2nd_standard_parallel!==void 0&&(t.lat2=t.latitude_of_2nd_standard_parallel),t.latitude_of_projection_centre!==void 0&&(t.lat0=t.latitude_of_projection_centre),t.longitude_of_projection_centre!==void 0&&(t.longc=t.longitude_of_projection_centre),t.easting_at_false_origin!==void 0&&(t.x0=t.easting_at_false_origin),t.northing_at_false_origin!==void 0&&(t.y0=t.northing_at_false_origin),t.latitude_of_natural_origin!==void 0&&(t.lat0=t.latitude_of_natural_origin),t.longitude_of_natural_origin!==void 0&&(t.long0=t.longitude_of_natural_origin),t.longitude_of_origin!==void 0&&(t.long0=t.longitude_of_origin),t.false_easting!==void 0&&(t.x0=t.false_easting),t.easting_at_projection_centre&&(t.x0=t.easting_at_projection_centre),t.false_northing!==void 0&&(t.y0=t.false_northing),t.northing_at_projection_centre&&(t.y0=t.northing_at_projection_centre),t.standard_parallel_1!==void 0&&(t.lat1=t.standard_parallel_1),t.standard_parallel_2!==void 0&&(t.lat2=t.standard_parallel_2),t.scale_factor_at_natural_origin!==void 0&&(t.k0=t.scale_factor_at_natural_origin),t.scale_factor_at_projection_centre!==void 0&&(t.k0=t.scale_factor_at_projection_centre),t.scale_factor_on_pseudo_standard_parallel!==void 0&&(t.k0=t.scale_factor_on_pseudo_standard_parallel),t.azimuth!==void 0&&(t.alpha=t.azimuth),t.azimuth_at_projection_centre!==void 0&&(t.alpha=t.azimuth_at_projection_centre),t.angle_from_rectified_to_skew_grid&&(t.rectified_grid_angle=t.angle_from_rectified_to_skew_grid),Ws(t),t)}var Xn=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function Kn(e,t){var i=t[0],s=t[1];!(i in e)&&s in e&&(e[i]=e[s],t.length===3&&(e[i]=t[2](e[i])))}function qs(e){for(var t=Object.keys(e),i=0,s=t.length;i<s;++i){var a=t[i];Xn.indexOf(a)!==-1&&Qn(e[a]),typeof e[a]=="object"&&qs(e[a])}}function Qn(e){if(e.AUTHORITY){var t=Object.keys(e.AUTHORITY)[0];t&&t in e.AUTHORITY&&(e.title=t+":"+e.AUTHORITY[t])}if(e.type==="GEOGCS"?e.projName="longlat":e.type==="LOCAL_CS"?(e.projName="identity",e.local=!0):typeof e.PROJECTION=="object"?e.projName=Object.keys(e.PROJECTION)[0]:e.projName=e.PROJECTION,e.AXIS){for(var i="",s=0,a=e.AXIS.length;s<a;++s){var n=[e.AXIS[s][0].toLowerCase(),e.AXIS[s][1].toLowerCase()];n[0].indexOf("north")!==-1||(n[0]==="y"||n[0]==="lat")&&n[1]==="north"?i+="n":n[0].indexOf("south")!==-1||(n[0]==="y"||n[0]==="lat")&&n[1]==="south"?i+="s":n[0].indexOf("east")!==-1||(n[0]==="x"||n[0]==="lon")&&n[1]==="east"?i+="e":(n[0].indexOf("west")!==-1||(n[0]==="x"||n[0]==="lon")&&n[1]==="west")&&(i+="w")}i.length===2&&(i+="u"),i.length===3&&(e.axis=i)}e.UNIT&&(e.units=e.UNIT.name.toLowerCase(),e.units==="metre"&&(e.units="meter"),e.UNIT.convert&&(e.type==="GEOGCS"?e.DATUM&&e.DATUM.SPHEROID&&(e.to_meter=e.UNIT.convert*e.DATUM.SPHEROID.a):e.to_meter=e.UNIT.convert));var r=e.GEOGCS;e.type==="GEOGCS"&&(r=e),r&&(r.DATUM?e.datumCode=r.DATUM.name.toLowerCase():e.datumCode=r.name.toLowerCase(),e.datumCode.slice(0,2)==="d_"&&(e.datumCode=e.datumCode.slice(2)),e.datumCode==="new_zealand_1949"&&(e.datumCode="nzgd49"),(e.datumCode==="wgs_1984"||e.datumCode==="world_geodetic_system_1984")&&(e.PROJECTION==="Mercator_Auxiliary_Sphere"&&(e.sphere=!0),e.datumCode="wgs84"),e.datumCode==="belge_1972"&&(e.datumCode="rnb72"),r.DATUM&&r.DATUM.SPHEROID&&(e.ellps=r.DATUM.SPHEROID.name.replace("_19","").replace(/[Cc]larke\_18/,"clrk"),e.ellps.toLowerCase().slice(0,13)==="international"&&(e.ellps="intl"),e.a=r.DATUM.SPHEROID.a,e.rf=parseFloat(r.DATUM.SPHEROID.rf,10)),r.DATUM&&r.DATUM.TOWGS84&&(e.datum_params=r.DATUM.TOWGS84),~e.datumCode.indexOf("osgb_1936")&&(e.datumCode="osgb36"),~e.datumCode.indexOf("osni_1952")&&(e.datumCode="osni52"),(~e.datumCode.indexOf("tm65")||~e.datumCode.indexOf("geodetic_datum_of_1965"))&&(e.datumCode="ire65"),e.datumCode==="ch1903+"&&(e.datumCode="ch1903"),~e.datumCode.indexOf("israel")&&(e.datumCode="isr93")),e.b&&!isFinite(e.b)&&(e.b=e.a),e.rectified_grid_angle&&(e.rectified_grid_angle=At(e.rectified_grid_angle));function l(d){var g=e.to_meter||1;return d*g}var h=function(d){return Kn(e,d)},c=[["standard_parallel_1","Standard_Parallel_1"],["standard_parallel_1","Latitude of 1st standard parallel"],["standard_parallel_2","Standard_Parallel_2"],["standard_parallel_2","Latitude of 2nd standard parallel"],["false_easting","False_Easting"],["false_easting","False easting"],["false-easting","Easting at false origin"],["false_northing","False_Northing"],["false_northing","False northing"],["false_northing","Northing at false origin"],["central_meridian","Central_Meridian"],["central_meridian","Longitude of natural origin"],["central_meridian","Longitude of false origin"],["latitude_of_origin","Latitude_Of_Origin"],["latitude_of_origin","Central_Parallel"],["latitude_of_origin","Latitude of natural origin"],["latitude_of_origin","Latitude of false origin"],["scale_factor","Scale_Factor"],["k0","scale_factor"],["latitude_of_center","Latitude_Of_Center"],["latitude_of_center","Latitude_of_center"],["lat0","latitude_of_center",At],["longitude_of_center","Longitude_Of_Center"],["longitude_of_center","Longitude_of_center"],["longc","longitude_of_center",At],["x0","false_easting",l],["y0","false_northing",l],["long0","central_meridian",At],["lat0","latitude_of_origin",At],["lat0","standard_parallel_1",At],["lat1","standard_parallel_1",At],["lat2","standard_parallel_2",At],["azimuth","Azimuth"],["alpha","azimuth",At],["srsCode","name"]];c.forEach(h),Ws(e)}function Ys(e){if(typeof e=="object")return Ze(e);const t=Hn(e);var i=Yn(e);if(t==="WKT2"){const n=Gn(i);return Ze(n)}var s=i[0],a={};return qt(i,a),qs(a),a[s]}function $(e){var t=this;if(arguments.length===2){var i=arguments[1];typeof i=="string"?i.charAt(0)==="+"?$[e]=_i(arguments[1]):$[e]=Ys(arguments[1]):$[e]=i}else if(arguments.length===1){if(Array.isArray(e))return e.map(function(s){Array.isArray(s)?$.apply(t,s):$(s)});if(typeof e=="string"){if(e in $)return $[e]}else"EPSG"in e?$["EPSG:"+e.EPSG]=e:"ESRI"in e?$["ESRI:"+e.ESRI]=e:"IAU2000"in e?$["IAU2000:"+e.IAU2000]=e:console.log(e);return}}Pn($);function $n(e){return typeof e=="string"}function to(e){return e in $}var eo=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function io(e){return eo.some(function(t){return e.indexOf(t)>-1})}var so=["3857","900913","3785","102113"];function ao(e){var t=Ot(e,"authority");if(t){var i=Ot(t,"epsg");return i&&so.indexOf(i)>-1}}function no(e){var t=Ot(e,"extension");if(t)return Ot(t,"proj4")}function oo(e){return e[0]==="+"}function ro(e){if($n(e)){if(to(e))return $[e];if(io(e)){var t=Ys(e);if(ao(t))return $["EPSG:3857"];var i=no(t);return i?_i(i):t}if(oo(e))return _i(e)}else return e}function ss(e,t){e=e||{};var i,s;if(!t)return e;for(s in t)i=t[s],i!==void 0&&(e[s]=i);return e}function yt(e,t,i){var s=e*t;return i/Math.sqrt(1-s*s)}function Me(e){return e<0?-1:1}function k(e){return Math.abs(e)<=Z?e:e-Me(e)*pe}function Ct(e,t,i){var s=e*i,a=.5*e;return s=Math.pow((1-s)/(1+s),a),Math.tan(.5*(w-t))/s}function ye(e,t){for(var i=.5*e,s,a,n=w-2*Math.atan(t),r=0;r<=15;r++)if(s=e*Math.sin(n),a=w-2*Math.atan(t*Math.pow((1-s)/(1+s),i))-n,n+=a,Math.abs(a)<=1e-10)return n;return-9999}function lo(){var e=this.b/this.a;this.es=1-e*e,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=yt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)}function ho(e){var t=e.x,i=e.y;if(i*pt>90&&i*pt<-90&&t*pt>180&&t*pt<-180)return null;var s,a;if(Math.abs(Math.abs(i)-w)<=O)return null;if(this.sphere)s=this.x0+this.a*this.k0*k(t-this.long0),a=this.y0+this.a*this.k0*Math.log(Math.tan(R+.5*i));else{var n=Math.sin(i),r=Ct(this.e,i,n);s=this.x0+this.a*this.k0*k(t-this.long0),a=this.y0-this.a*this.k0*Math.log(r)}return e.x=s,e.y=a,e}function co(e){var t=e.x-this.x0,i=e.y-this.y0,s,a;if(this.sphere)a=w-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var n=Math.exp(-i/(this.a*this.k0));if(a=ye(this.e,n),a===-9999)return null}return s=k(this.long0+t/(this.a*this.k0)),e.x=s,e.y=a,e}var go=["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"];const uo={init:lo,forward:ho,inverse:co,names:go};function Ao(){}function as(e){return e}var mo=["longlat","identity"];const Co={init:Ao,forward:as,inverse:as,names:mo};var fo=[uo,Co],Be={},We=[];function Js(e,t){var i=We.length;return e.names?(We[i]=e,e.names.forEach(function(s){Be[s.toLowerCase()]=i}),this):(console.log(t),!0)}function Io(e){if(!e)return!1;var t=e.toLowerCase();if(typeof Be[t]<"u"&&We[Be[t]])return We[Be[t]]}function po(){fo.forEach(Js)}const vo={start:po,add:Js,get:Io};var L={};L.MERIT={a:6378137,rf:298.257,ellipseName:"MERIT 1983"};L.SGS85={a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"};L.GRS80={a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"};L.IAU76={a:6378140,rf:298.257,ellipseName:"IAU 1976"};L.airy={a:6377563396e-3,b:635625691e-2,ellipseName:"Airy 1830"};L.APL4={a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"};L.NWL9D={a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"};L.mod_airy={a:6377340189e-3,b:6356034446e-3,ellipseName:"Modified Airy"};L.andrae={a:637710443e-2,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"};L.aust_SA={a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"};L.GRS67={a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"};L.bessel={a:6377397155e-3,rf:299.1528128,ellipseName:"Bessel 1841"};L.bess_nam={a:6377483865e-3,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"};L.clrk66={a:63782064e-1,b:63565838e-1,ellipseName:"Clarke 1866"};L.clrk80={a:6378249145e-3,rf:293.4663,ellipseName:"Clarke 1880 mod."};L.clrk80ign={a:63782492e-1,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"};L.clrk58={a:6378293645208759e-9,rf:294.2606763692654,ellipseName:"Clarke 1858"};L.CPM={a:63757387e-1,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"};L.delmbr={a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"};L.engelis={a:637813605e-2,rf:298.2566,ellipseName:"Engelis 1985"};L.evrst30={a:6377276345e-3,rf:300.8017,ellipseName:"Everest 1830"};L.evrst48={a:6377304063e-3,rf:300.8017,ellipseName:"Everest 1948"};L.evrst56={a:6377301243e-3,rf:300.8017,ellipseName:"Everest 1956"};L.evrst69={a:6377295664e-3,rf:300.8017,ellipseName:"Everest 1969"};L.evrstSS={a:6377298556e-3,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"};L.fschr60={a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"};L.fschr60m={a:6378155,rf:298.3,ellipseName:"Fischer 1960"};L.fschr68={a:6378150,rf:298.3,ellipseName:"Fischer 1968"};L.helmert={a:6378200,rf:298.3,ellipseName:"Helmert 1906"};L.hough={a:6378270,rf:297,ellipseName:"Hough"};L.intl={a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"};L.kaula={a:6378163,rf:298.24,ellipseName:"Kaula 1961"};L.lerch={a:6378139,rf:298.257,ellipseName:"Lerch 1979"};L.mprts={a:6397300,rf:191,ellipseName:"Maupertius 1738"};L.new_intl={a:63781575e-1,b:63567722e-1,ellipseName:"New International 1967"};L.plessis={a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"};L.krass={a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"};L.SEasia={a:6378155,b:63567733205e-4,ellipseName:"Southeast Asia"};L.walbeck={a:6376896,b:63558348467e-4,ellipseName:"Walbeck"};L.WGS60={a:6378165,rf:298.3,ellipseName:"WGS 60"};L.WGS66={a:6378145,rf:298.25,ellipseName:"WGS 66"};L.WGS7={a:6378135,rf:298.26,ellipseName:"WGS 72"};var yo=L.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};L.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};function bo(e,t,i,s){var a=e*e,n=t*t,r=(a-n)/a,l=0;s?(e*=1-r*(Bn+r*(Vn+r*Rn)),a=e*e,r=0):l=Math.sqrt(r);var h=(a-n)/n;return{es:r,e:l,ep2:h}}function Mo(e,t,i,s,a){if(!e){var n=Ot(L,s);n||(n=yo),e=n.a,t=n.b,i=n.rf}return i&&!t&&(t=(1-1/i)*e),(i===0||Math.abs(e-t)<O)&&(a=!0,t=e),{a:e,b:t,rf:i,sphere:a}}var Y={};Y.wgs84={towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"};Y.ch1903={towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"};Y.ggrs87={towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"};Y.nad83={towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"};Y.nad27={nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"};Y.potsdam={towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"};Y.carthage={towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"};Y.hermannskogel={towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"};Y.osni52={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"};Y.ire65={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"};Y.rassadiran={towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"};Y.nzgd49={towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"};Y.osgb36={towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"};Y.s_jtsk={towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"};Y.beduaram={towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"};Y.gunung_segara={towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"};Y.rnb72={towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"};function wo(e,t,i,s,a,n,r){var l={};return e===void 0||e==="none"?l.datum_type=Ei:l.datum_type=Tn,t&&(l.datum_params=t.map(parseFloat),(l.datum_params[0]!==0||l.datum_params[1]!==0||l.datum_params[2]!==0)&&(l.datum_type=Bt),l.datum_params.length>3&&(l.datum_params[3]!==0||l.datum_params[4]!==0||l.datum_params[5]!==0||l.datum_params[6]!==0)&&(l.datum_type=Vt,l.datum_params[3]*=Ie,l.datum_params[4]*=Ie,l.datum_params[5]*=Ie,l.datum_params[6]=l.datum_params[6]/1e6+1)),r&&(l.datum_type=Kt,l.grids=r),l.a=i,l.b=s,l.es=a,l.ep2=n,l}var Xs={};function Eo(e,t){var i=new DataView(t),s=xo(i),a=ko(i,s);a.nSubgrids>1&&console.log("Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored");var n=So(i,a,s),r={header:a,subgrids:n};return Xs[e]=r,r}function _o(e){if(e===void 0)return null;var t=e.split(",");return t.map(Oo)}function Oo(e){if(e.length===0)return null;var t=e[0]==="@";return t&&(e=e.slice(1)),e==="null"?{name:"null",mandatory:!t,grid:null,isNull:!0}:{name:e,mandatory:!t,grid:Xs[e]||null,isNull:!1}}function Yt(e){return e/3600*Math.PI/180}function xo(e){var t=e.getInt32(8,!1);return t===11?!1:(t=e.getInt32(8,!0),t!==11&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian"),!0)}function ko(e,t){return{nFields:e.getInt32(8,t),nSubgridFields:e.getInt32(24,t),nSubgrids:e.getInt32(40,t),shiftType:Oi(e,56,64).trim(),fromSemiMajorAxis:e.getFloat64(120,t),fromSemiMinorAxis:e.getFloat64(136,t),toSemiMajorAxis:e.getFloat64(152,t),toSemiMinorAxis:e.getFloat64(168,t)}}function Oi(e,t,i){return String.fromCharCode.apply(null,new Uint8Array(e.buffer.slice(t,i)))}function So(e,t,i){for(var s=176,a=[],n=0;n<t.nSubgrids;n++){var r=Lo(e,s,i),l=Po(e,s,r,i),h=Math.round(1+(r.upperLongitude-r.lowerLongitude)/r.longitudeInterval),c=Math.round(1+(r.upperLatitude-r.lowerLatitude)/r.latitudeInterval);a.push({ll:[Yt(r.lowerLongitude),Yt(r.lowerLatitude)],del:[Yt(r.longitudeInterval),Yt(r.latitudeInterval)],lim:[h,c],count:r.gridNodeCount,cvs:No(l)})}return a}function No(e){return e.map(function(t){return[Yt(t.longitudeShift),Yt(t.latitudeShift)]})}function Lo(e,t,i){return{name:Oi(e,t+8,t+16).trim(),parent:Oi(e,t+24,t+24+8).trim(),lowerLatitude:e.getFloat64(t+72,i),upperLatitude:e.getFloat64(t+88,i),lowerLongitude:e.getFloat64(t+104,i),upperLongitude:e.getFloat64(t+120,i),latitudeInterval:e.getFloat64(t+136,i),longitudeInterval:e.getFloat64(t+152,i),gridNodeCount:e.getInt32(t+168,i)}}function Po(e,t,i,s){for(var a=t+176,n=16,r=[],l=0;l<i.gridNodeCount;l++){var h={latitudeShift:e.getFloat32(a+l*n,s),longitudeShift:e.getFloat32(a+l*n+4,s),latitudeAccuracy:e.getFloat32(a+l*n+8,s),longitudeAccuracy:e.getFloat32(a+l*n+12,s)};r.push(h)}return r}function vt(e,t){if(!(this instanceof vt))return new vt(e);t=t||function(c){if(c)throw c};var i=ro(e);if(typeof i!="object"){t(e);return}var s=vt.projections.get(i.projName);if(!s){t(e);return}if(i.datumCode&&i.datumCode!=="none"){var a=Ot(Y,i.datumCode);a&&(i.datum_params=i.datum_params||(a.towgs84?a.towgs84.split(","):null),i.ellps=a.ellipse,i.datumName=a.datumName?a.datumName:i.datumCode)}i.k0=i.k0||1,i.axis=i.axis||"enu",i.ellps=i.ellps||"wgs84",i.lat1=i.lat1||i.lat0;var n=Mo(i.a,i.b,i.rf,i.ellps,i.sphere),r=bo(n.a,n.b,n.rf,i.R_A),l=_o(i.nadgrids),h=i.datum||wo(i.datumCode,i.datum_params,n.a,n.b,r.es,r.ep2,l);ss(this,i),ss(this,s),this.a=n.a,this.b=n.b,this.rf=n.rf,this.sphere=n.sphere,this.es=r.es,this.e=r.e,this.ep2=r.ep2,this.datum=h,this.init(),t(null,this)}vt.projections=vo;vt.projections.start();function To(e,t){return e.datum_type!==t.datum_type||e.a!==t.a||Math.abs(e.es-t.es)>5e-11?!1:e.datum_type===Bt?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]:e.datum_type===Vt?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]&&e.datum_params[3]===t.datum_params[3]&&e.datum_params[4]===t.datum_params[4]&&e.datum_params[5]===t.datum_params[5]&&e.datum_params[6]===t.datum_params[6]:!0}function Ks(e,t,i){var s=e.x,a=e.y,n=e.z?e.z:0,r,l,h,c;if(a<-w&&a>-1.001*w)a=-w;else if(a>w&&a<1.001*w)a=w;else{if(a<-w)return{x:-1/0,y:-1/0,z:e.z};if(a>w)return{x:1/0,y:1/0,z:e.z}}return s>Math.PI&&(s-=2*Math.PI),l=Math.sin(a),c=Math.cos(a),h=l*l,r=i/Math.sqrt(1-t*h),{x:(r+n)*c*Math.cos(s),y:(r+n)*c*Math.sin(s),z:(r*(1-t)+n)*l}}function Qs(e,t,i,s){var a=1e-12,n=a*a,r=30,l,h,c,d,g,u,f,m,C,v,I,b,M,_=e.x,x=e.y,E=e.z?e.z:0,S,D,W;if(l=Math.sqrt(_*_+x*x),h=Math.sqrt(_*_+x*x+E*E),l/i<a){if(S=0,h/i<a)return D=w,W=-s,{x:e.x,y:e.y,z:e.z}}else S=Math.atan2(x,_);c=E/h,d=l/h,g=1/Math.sqrt(1-t*(2-t)*d*d),m=d*(1-t)*g,C=c*g,M=0;do M++,f=i/Math.sqrt(1-t*C*C),W=l*m+E*C-f*(1-t*C*C),u=t*f/(f+W),g=1/Math.sqrt(1-u*(2-u)*d*d),v=d*(1-u)*g,I=c*g,b=I*m-v*C,m=v,C=I;while(b*b>n&&M<r);return D=Math.atan(I/Math.abs(v)),{x:S,y:D,z:W}}function Do(e,t,i){if(t===Bt)return{x:e.x+i[0],y:e.y+i[1],z:e.z+i[2]};if(t===Vt){var s=i[0],a=i[1],n=i[2],r=i[3],l=i[4],h=i[5],c=i[6];return{x:c*(e.x-h*e.y+l*e.z)+s,y:c*(h*e.x+e.y-r*e.z)+a,z:c*(-l*e.x+r*e.y+e.z)+n}}}function Bo(e,t,i){if(t===Bt)return{x:e.x-i[0],y:e.y-i[1],z:e.z-i[2]};if(t===Vt){var s=i[0],a=i[1],n=i[2],r=i[3],l=i[4],h=i[5],c=i[6],d=(e.x-s)/c,g=(e.y-a)/c,u=(e.z-n)/c;return{x:d+h*g-l*u,y:-h*d+g+r*u,z:l*d-r*g+u}}}function xe(e){return e===Bt||e===Vt}function Vo(e,t,i){if(To(e,t)||e.datum_type===Ei||t.datum_type===Ei)return i;var s=e.a,a=e.es;if(e.datum_type===Kt){var n=ns(e,!1,i);if(n!==0)return;s=Ki,a=Qi}var r=t.a,l=t.b,h=t.es;if(t.datum_type===Kt&&(r=Ki,l=Dn,h=Qi),a===h&&s===r&&!xe(e.datum_type)&&!xe(t.datum_type))return i;if(i=Ks(i,a,s),xe(e.datum_type)&&(i=Do(i,e.datum_type,e.datum_params)),xe(t.datum_type)&&(i=Bo(i,t.datum_type,t.datum_params)),i=Qs(i,h,r,l),t.datum_type===Kt){var c=ns(t,!0,i);if(c!==0)return}return i}function ns(e,t,i){if(e.grids===null||e.grids.length===0)return console.log("Grid shift grids not found"),-1;for(var s={x:-i.x,y:i.y},a={x:Number.NaN,y:Number.NaN},n=[],r=0;r<e.grids.length;r++){var l=e.grids[r];if(n.push(l.name),l.isNull){a=s;break}if(l.mandatory,l.grid===null){if(l.mandatory)return console.log("Unable to find mandatory grid '"+l.name+"'"),-1;continue}var h=l.grid.subgrids[0],c=(Math.abs(h.del[1])+Math.abs(h.del[0]))/1e4,d=h.ll[0]-c,g=h.ll[1]-c,u=h.ll[0]+(h.lim[0]-1)*h.del[0]+c,f=h.ll[1]+(h.lim[1]-1)*h.del[1]+c;if(!(g>s.y||d>s.x||f<s.y||u<s.x)&&(a=Ro(s,t,h),!isNaN(a.x)))break}return isNaN(a.x)?(console.log("Failed to find a grid shift table for location '"+-s.x*pt+" "+s.y*pt+" tried: '"+n+"'"),-1):(i.x=-a.x,i.y=a.y,0)}function Ro(e,t,i){var s={x:Number.NaN,y:Number.NaN};if(isNaN(e.x))return s;var a={x:e.x,y:e.y};a.x-=i.ll[0],a.y-=i.ll[1],a.x=k(a.x-Math.PI)+Math.PI;var n=os(a,i);if(t){if(isNaN(n.x))return s;n.x=a.x-n.x,n.y=a.y-n.y;var r=9,l=1e-12,h,c;do{if(c=os(n,i),isNaN(c.x)){console.log("Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.");break}h={x:a.x-(c.x+n.x),y:a.y-(c.y+n.y)},n.x+=h.x,n.y+=h.y}while(r--&&Math.abs(h.x)>l&&Math.abs(h.y)>l);if(r<0)return console.log("Inverse grid shift iterator failed to converge."),s;s.x=k(n.x+i.ll[0]),s.y=n.y+i.ll[1]}else isNaN(n.x)||(s.x=e.x+n.x,s.y=e.y+n.y);return s}function os(e,t){var i={x:e.x/t.del[0],y:e.y/t.del[1]},s={x:Math.floor(i.x),y:Math.floor(i.y)},a={x:i.x-1*s.x,y:i.y-1*s.y},n={x:Number.NaN,y:Number.NaN},r;if(s.x<0||s.x>=t.lim[0]||s.y<0||s.y>=t.lim[1])return n;r=s.y*t.lim[0]+s.x;var l={x:t.cvs[r][0],y:t.cvs[r][1]};r++;var h={x:t.cvs[r][0],y:t.cvs[r][1]};r+=t.lim[0];var c={x:t.cvs[r][0],y:t.cvs[r][1]};r--;var d={x:t.cvs[r][0],y:t.cvs[r][1]},g=a.x*a.y,u=a.x*(1-a.y),f=(1-a.x)*(1-a.y),m=(1-a.x)*a.y;return n.x=f*l.x+u*h.x+m*d.x+g*c.x,n.y=f*l.y+u*h.y+m*d.y+g*c.y,n}function rs(e,t,i){var s=i.x,a=i.y,n=i.z||0,r,l,h,c={};for(h=0;h<3;h++)if(!(t&&h===2&&i.z===void 0))switch(h===0?(r=s,"ew".indexOf(e.axis[h])!==-1?l="x":l="y"):h===1?(r=a,"ns".indexOf(e.axis[h])!==-1?l="y":l="x"):(r=n,l="z"),e.axis[h]){case"e":c[l]=r;break;case"w":c[l]=-r;break;case"n":c[l]=r;break;case"s":c[l]=-r;break;case"u":i[l]!==void 0&&(c.z=r);break;case"d":i[l]!==void 0&&(c.z=-r);break;default:return null}return c}function $s(e){var t={x:e[0],y:e[1]};return e.length>2&&(t.z=e[2]),e.length>3&&(t.m=e[3]),t}function Fo(e){ls(e.x),ls(e.y)}function ls(e){if(typeof Number.isFinite=="function"){if(Number.isFinite(e))return;throw new TypeError("coordinates must be finite numbers")}if(typeof e!="number"||e!==e||!isFinite(e))throw new TypeError("coordinates must be finite numbers")}function Uo(e,t){return(e.datum.datum_type===Bt||e.datum.datum_type===Vt||e.datum.datum_type===Kt)&&t.datumCode!=="WGS84"||(t.datum.datum_type===Bt||t.datum.datum_type===Vt||t.datum.datum_type===Kt)&&e.datumCode!=="WGS84"}function qe(e,t,i,s){var a;Array.isArray(i)?i=$s(i):i={x:i.x,y:i.y,z:i.z,m:i.m};var n=i.z!==void 0;if(Fo(i),e.datum&&t.datum&&Uo(e,t)&&(a=new vt("WGS84"),i=qe(e,a,i,s),e=a),s&&e.axis!=="enu"&&(i=rs(e,!1,i)),e.projName==="longlat")i={x:i.x*J,y:i.y*J,z:i.z||0};else if(e.to_meter&&(i={x:i.x*e.to_meter,y:i.y*e.to_meter,z:i.z||0}),i=e.inverse(i),!i)return;if(e.from_greenwich&&(i.x+=e.from_greenwich),i=Vo(e.datum,t.datum,i),!!i)return t.from_greenwich&&(i={x:i.x-t.from_greenwich,y:i.y,z:i.z||0}),t.projName==="longlat"?i={x:i.x*pt,y:i.y*pt,z:i.z||0}:(i=t.forward(i),t.to_meter&&(i={x:i.x/t.to_meter,y:i.y/t.to_meter,z:i.z||0})),s&&t.axis!=="enu"?rs(t,!0,i):(n||delete i.z,i)}var hs=vt("WGS84");function hi(e,t,i,s){var a,n,r;return Array.isArray(i)?(a=qe(e,t,i,s)||{x:NaN,y:NaN},i.length>2?typeof e.name<"u"&&e.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"?typeof a.z=="number"?[a.x,a.y,a.z].concat(i.splice(3)):[a.x,a.y,i[2]].concat(i.splice(3)):[a.x,a.y].concat(i.splice(2)):[a.x,a.y]):(n=qe(e,t,i,s),r=Object.keys(i),r.length===2||r.forEach(function(l){if(typeof e.name<"u"&&e.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"){if(l==="x"||l==="y"||l==="z")return}else if(l==="x"||l==="y")return;n[l]=i[l]}),n)}function cs(e){return e instanceof vt?e:e.oProj?e.oProj:vt(e)}function lt(e,t,i){e=cs(e);var s=!1,a;return typeof t>"u"?(t=e,e=hs,s=!0):(typeof t.x<"u"||Array.isArray(t))&&(i=t,t=e,e=hs,s=!0),t=cs(t),i?hi(e,t,i):(a={forward:function(n,r){return hi(e,t,n,r)},inverse:function(n,r){return hi(t,e,n,r)}},s&&(a.oProj=t),a)}var gs=6,ta="AJSAJS",ea="AFAFAF",Jt=65,st=73,ct=79,Ae=86,me=90;const zo={forward:ia,inverse:jo,toPoint:sa};function ia(e,t){return t=t||5,Zo(Go({lat:e[1],lon:e[0]}),t)}function jo(e){var t=Ri(na(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat,t.lon,t.lat]:[t.left,t.bottom,t.right,t.top]}function sa(e){var t=Ri(na(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat]:[(t.left+t.right)/2,(t.top+t.bottom)/2]}function ci(e){return e*(Math.PI/180)}function us(e){return 180*(e/Math.PI)}function Go(e){var t=e.lat,i=e.lon,s=6378137,a=.00669438,n=.9996,r,l,h,c,d,g,u,f=ci(t),m=ci(i),C,v;v=Math.floor((i+180)/6)+1,i===180&&(v=60),t>=56&&t<64&&i>=3&&i<12&&(v=32),t>=72&&t<84&&(i>=0&&i<9?v=31:i>=9&&i<21?v=33:i>=21&&i<33?v=35:i>=33&&i<42&&(v=37)),r=(v-1)*6-180+3,C=ci(r),l=a/(1-a),h=s/Math.sqrt(1-a*Math.sin(f)*Math.sin(f)),c=Math.tan(f)*Math.tan(f),d=l*Math.cos(f)*Math.cos(f),g=Math.cos(f)*(m-C),u=s*((1-a/4-3*a*a/64-5*a*a*a/256)*f-(3*a/8+3*a*a/32+45*a*a*a/1024)*Math.sin(2*f)+(15*a*a/256+45*a*a*a/1024)*Math.sin(4*f)-35*a*a*a/3072*Math.sin(6*f));var I=n*h*(g+(1-c+d)*g*g*g/6+(5-18*c+c*c+72*d-58*l)*g*g*g*g*g/120)+5e5,b=n*(u+h*Math.tan(f)*(g*g/2+(5-c+9*d+4*d*d)*g*g*g*g/24+(61-58*c+c*c+600*d-330*l)*g*g*g*g*g*g/720));return t<0&&(b+=1e7),{northing:Math.round(b),easting:Math.round(I),zoneNumber:v,zoneLetter:Ho(t)}}function Ri(e){var t=e.northing,i=e.easting,s=e.zoneLetter,a=e.zoneNumber;if(a<0||a>60)return null;var n=.9996,r=6378137,l=.00669438,h,c=(1-Math.sqrt(1-l))/(1+Math.sqrt(1-l)),d,g,u,f,m,C,v,I,b,M=i-5e5,_=t;s<"N"&&(_-=1e7),v=(a-1)*6-180+3,h=l/(1-l),C=_/n,I=C/(r*(1-l/4-3*l*l/64-5*l*l*l/256)),b=I+(3*c/2-27*c*c*c/32)*Math.sin(2*I)+(21*c*c/16-55*c*c*c*c/32)*Math.sin(4*I)+151*c*c*c/96*Math.sin(6*I),d=r/Math.sqrt(1-l*Math.sin(b)*Math.sin(b)),g=Math.tan(b)*Math.tan(b),u=h*Math.cos(b)*Math.cos(b),f=r*(1-l)/Math.pow(1-l*Math.sin(b)*Math.sin(b),1.5),m=M/(d*n);var x=b-d*Math.tan(b)/f*(m*m/2-(5+3*g+10*u-4*u*u-9*h)*m*m*m*m/24+(61+90*g+298*u+45*g*g-252*h-3*u*u)*m*m*m*m*m*m/720);x=us(x);var E=(m-(1+2*g+u)*m*m*m/6+(5-2*u+28*g-3*u*u+8*h+24*g*g)*m*m*m*m*m/120)/Math.cos(b);E=v+us(E);var S;if(e.accuracy){var D=Ri({northing:e.northing+e.accuracy,easting:e.easting+e.accuracy,zoneLetter:e.zoneLetter,zoneNumber:e.zoneNumber});S={top:D.lat,right:D.lon,bottom:x,left:E}}else S={lat:x,lon:E};return S}function Ho(e){var t="Z";return 84>=e&&e>=72?t="X":72>e&&e>=64?t="W":64>e&&e>=56?t="V":56>e&&e>=48?t="U":48>e&&e>=40?t="T":40>e&&e>=32?t="S":32>e&&e>=24?t="R":24>e&&e>=16?t="Q":16>e&&e>=8?t="P":8>e&&e>=0?t="N":0>e&&e>=-8?t="M":-8>e&&e>=-16?t="L":-16>e&&e>=-24?t="K":-24>e&&e>=-32?t="J":-32>e&&e>=-40?t="H":-40>e&&e>=-48?t="G":-48>e&&e>=-56?t="F":-56>e&&e>=-64?t="E":-64>e&&e>=-72?t="D":-72>e&&e>=-80&&(t="C"),t}function Zo(e,t){var i="00000"+e.easting,s="00000"+e.northing;return e.zoneNumber+e.zoneLetter+Wo(e.easting,e.northing,e.zoneNumber)+i.substr(i.length-5,t)+s.substr(s.length-5,t)}function Wo(e,t,i){var s=aa(i),a=Math.floor(e/1e5),n=Math.floor(t/1e5)%20;return qo(a,n,s)}function aa(e){var t=e%gs;return t===0&&(t=gs),t}function qo(e,t,i){var s=i-1,a=ta.charCodeAt(s),n=ea.charCodeAt(s),r=a+e-1,l=n+t,h=!1;r>me&&(r=r-me+Jt-1,h=!0),(r===st||a<st&&r>st||(r>st||a<st)&&h)&&r++,(r===ct||a<ct&&r>ct||(r>ct||a<ct)&&h)&&(r++,r===st&&r++),r>me&&(r=r-me+Jt-1),l>Ae?(l=l-Ae+Jt-1,h=!0):h=!1,(l===st||n<st&&l>st||(l>st||n<st)&&h)&&l++,(l===ct||n<ct&&l>ct||(l>ct||n<ct)&&h)&&(l++,l===st&&l++),l>Ae&&(l=l-Ae+Jt-1);var c=String.fromCharCode(r)+String.fromCharCode(l);return c}function na(e){if(e&&e.length===0)throw"MGRSPoint coverting from nothing";for(var t=e.length,i=null,s="",a,n=0;!/[A-Z]/.test(a=e.charAt(n));){if(n>=2)throw"MGRSPoint bad conversion from: "+e;s+=a,n++}var r=parseInt(s,10);if(n===0||n+3>t)throw"MGRSPoint bad conversion from: "+e;var l=e.charAt(n++);if(l<="A"||l==="B"||l==="Y"||l>="Z"||l==="I"||l==="O")throw"MGRSPoint zone letter "+l+" not handled: "+e;i=e.substring(n,n+=2);for(var h=aa(r),c=Yo(i.charAt(0),h),d=Jo(i.charAt(1),h);d<Xo(l);)d+=2e6;var g=t-n;if(g%2!==0)throw`MGRSPoint has to have an even number
1
+ "use strict";var ra=Object.defineProperty;var la=(e,t,i)=>t in e?ra(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var y=(e,t,i)=>la(e,typeof t!="symbol"?t+"":t,i);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const wt=require("pinia"),n=require("vue"),A=require("./Components.cjs.js"),gi=require("@giro3d/giro3d/core/geographic/Extent"),ha=require("@giro3d/giro3d/entities/FeatureCollection"),ca=require("ol/format"),ga=require("ol/loadingstrategy.js"),da=require("ol/source/Vector"),ua=require("ol/tilegrid.js"),Aa=require("@giro3d/giro3d/sources/COPCSource"),Ca=require("@giro3d/giro3d/sources/LASSource"),ma=require("@giro3d/giro3d/core/OperationCounter"),fa=require("@giro3d/giro3d/entities/PointCloud"),Ia=require("@giro3d/giro3d/sources/PointCloudSource"),di=require("@loaders.gl/core"),pa=require("@loaders.gl/csv"),va=require("@giro3d/giro3d/entities/Tiles3D"),ya=require("@giro3d/giro3d/renderer/PointCloudMaterial"),ba=require("@loaders.gl/geopackage"),Ei=require("@giro3d/giro3d/core/FeatureTypes"),ui=require("@giro3d/giro3d/entities/Entity3D"),Ma=require("ol/format/GeoJSON"),Ea=require("ol/format/GPX"),wa=require("ol/format/KML"),ce=require("@giro3d/giro3d/core/geographic/Coordinates"),Oa=require("@giro3d/giro3d/renderer/geometries/GeometryConverter"),cs=require("@giro3d/giro3d/core/Instance"),xa=require("@loaders.gl/shapefile"),_a=require("@giro3d/giro3d/utils/ColorUtils"),ft=require("@giro3d/giro3d/entities/Shape");require("@giro3d/giro3d/utils/HttpConfiguration");const ka=require("@giro3d/giro3d/core/picking/PickTilesAt"),Ot=require("@giro3d/giro3d/interactions/DrawTool"),Sa=require("@giro3d/giro3d/gui/Panel"),wi=require("@giro3d/giro3d/core/layer/MaskLayer"),Na=require("@giro3d/giro3d/entities/AxisGrid"),Oi=require("@giro3d/giro3d/entities/Map"),Pa=require("@giro3d/giro3d/sources/VectorSource"),Ta=require("ol/Feature"),La=require("ol/geom/Polygon"),xi=require("ol/style");require("@giro3d/giro3d/utils/Fetcher");const Da=require("bootstrap");require("@giro3d/giro3d/gui/Inspector");const Ba=require("@trevoreyre/autocomplete-vue");function Va(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const i in e)if(i!=="default"){const s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:()=>e[i]})}}return t.default=e,Object.freeze(t)}const Ra=Va(Da);class Ua{constructor(t){this.store=t}registerTool(t){this.store.registerTool(t)}}class Fa{constructor(t){y(this,"_store");this._store=t}clearBookmarks(){this._store.clear()}getBookmarks(){return this._store.getBookmarks()}setBookmarks(t){this._store.clear();for(const i of t)this._store.add(i)}}let ze=null;function gs(){return ze||(ze=[{enabled:!0,icon:"bi-database",key:"datasets",title:"Datasets"},{enabled:!0,icon:"bi-vector-pen",key:"annotations",title:"Annotations"},{enabled:A.hasExperimentalFeature("measurements"),icon:"bi-rulers",key:"measures",title:"Measurements"},{enabled:!0,icon:"bi-graph-up",key:"analysis",title:"Analysis"},{enabled:!0,icon:"bi-bookmarks",key:"bookmarks",title:"Bookmarks"},{enabled:!0,icon:"bi-info-circle",key:"about",title:"About Piero"}]),ze}const be=new Map,ds={colorLayer:"fg-landcover-map",elevationLayer:"fg-contour-map",featureCollection:"bi-buildings",maskLayer:"fg-hex-map",pointcloud:"fg-multipoint",tiledIfc:"bi-building",vector:"fg-polygon-pt"},us={colorLayer:"Color Layer",elevationLayer:"Elevation layer",featureCollection:"Feature Collection",maskLayer:"Mask Layer",pointcloud:"Point Cloud",tiledIfc:"IFC",vector:"Vector"};class za extends ha{constructor(t){const i=t.featureProjection;let s;switch(t.source){case"bdtopo":s="BDTOPO_V3:batiment";break;default:return t.source}const a=new da({format:new ca.GeoJSON,strategy:ga.tile(ua.createXYZ({tileSize:512})),url:function(u){return`${`https://data.geopf.fr/wfs/ows?SERVICE=WFS&VERSION=2.0.0&request=GetFeature&typename=BDTOPO_V3:batiment&outputFormat=application/json&SRSNAME=${i}&startIndex=0&bbox=`}${u.join(",")},${i}`}}),o=t.extent??new gi("EPSG:2154",-111629.52,127502884e-2,597603379e-2,723016164e-2),l=t.extrusionOffset??(c=>{const d=-c.getProperties().hauteur;return Number.isNaN(d)?0:d}),r=t.style??(c=>{const u=c.getProperties();let g="#FFFFFF";switch(u.usage_1){case"Agricole":g="#96ff0d";break;case"Commercial et services":g="#d8ffd4";break;case"Industriel":g="#f0bb41";break;case"Religieux":g="#41b5f0";break;case"Résidentiel":g="#cec8be";break;case"Sportif":g="#ff0d45";break}return{fill:{color:new A.Color(g),shading:!0},stroke:{color:"black",lineWidth:void 0}}}),h={extent:o,extrusionOffset:l,maxLevel:t.maxLevel??11,minLevel:t.minLevel??11,source:a,style:r};super(h),this.name=t.source,A.fillObject3DUserData(this,{filename:s})}}const ja=e=>{const t=e.dataset.config,i=new za({...t,featureProjection:e.instance.referenceCrs});return Promise.resolve(i)};class Ga extends Ia.PointCloudSourceBase{constructor(i){super();y(this,"dataProjection");y(this,"isCSVPointCloudSource",!0);y(this,"type","CSVPointCloudSource");y(this,"url");y(this,"_localVolume",null);y(this,"_metadata",null);y(this,"_opCounter",new ma);y(this,"_origin",null);y(this,"_points",null);y(this,"_root",null);y(this,"_zArray",null);this.url=i.url,this.dataProjection=i.dataProjection}get loading(){return this._opCounter.loading}get progress(){return this._opCounter.progress}dispose(){}getHierarchy(){if(this._root==null)throw new Error("not initialized");return Promise.resolve(this._root)}getMemoryUsage(i){this._points!=null&&i.objects.set(this.id,{cpuMemory:this._points.byteLength,gpuMemory:this._points.byteLength})}getMetadata(){if(this._metadata==null)throw new Error("not initialized");return Promise.resolve(this._metadata)}getNodeData(i){if(this._points==null||this._origin==null||this._zArray==null||this._metadata==null||this._localVolume==null)throw new Error("not initialized");let s;return i.attribute!=null&&i.attribute.name==="Z"&&(s=new A.Float32BufferAttribute(this._zArray,1)),Promise.resolve({attribute:s,localBoundingBox:this._localVolume,origin:this._origin,pointCount:this._points.length/3,position:i.position?new A.Float32BufferAttribute(this._points,3,!1):void 0})}async initializeOnce(){this._opCounter.increment();const i=await di.load(this.url,pa.CSVLoader,{csv:{shape:"array-row-table"},fetch:A.Fetcher.fetch}),s=new Float32Array(i.data.length*3),a=new Float32Array(i.data.length),o=new A.Box3().makeEmpty(),l=new A.Box3().makeEmpty(),r=new A.Vector3,h=new A.Vector3(i.data[0][0],i.data[0][1],i.data[0][2]);for(let g=0;g<i.data.length;g+=1){const d=i.data[g][0],C=i.data[g][1],f=i.data[g][2],m=d-h.x,v=C-h.y,I=f-h.z;o.expandByPoint(r.set(d,C,f)),l.expandByPoint(r.set(m,v,I)),s[g*3+0]=m,s[g*3+1]=v,s[g*3+2]=I,a[g]=f}this._points=s,this._zArray=a,this._origin=h,this._localVolume=l;const c=s.length/3,u={center:o.getCenter(new A.Vector3),depth:0,geometricError:0,hasData:!0,id:"root",pointCount:c,sourceId:this.id,volume:o};return this._root=u,this._metadata={attributes:[{dimension:1,interpretation:"unknown",max:o.max.z,min:o.min.z,name:"Z",size:4,type:"float"}],crs:this.dataProjection!=null?{name:this.dataProjection}:void 0,pointCount:c,volume:o},this._opCounter.decrement(),this}}class Ha extends fa{constructor(i){super(i);y(this,"isPointCloudEntity",!0);const s=A.getConfig();if(this.colorMap=A.getColorMap(s.pointcloud),"url"in i.source){const a=A.Fetcher.getContext(i.source.url);A.fillObject3DUserData(this,{filename:a.filename})}}async initialize(i){await super.initialize(i),this.setActiveAttribute("Z")}}const Za=e=>{const{dataset:t}=e,i=t.config;let s;switch(i.source.type){case"copc":s=new Aa({url:typeof i.source.url=="string"?A.getPublicFolderUrl(i.source.url):async(o,l)=>{const c=await i.source.url.slice(o,l).arrayBuffer();return new Uint8Array(c)}});break;case"csv":s=new Ga({...i.source});break;case"las":s=new Ca({url:typeof i.source.url=="string"?A.getPublicFolderUrl(i.source.url):async()=>{const o=await A.Fetcher.fetchArrayBuffer(i.source.url);return new Uint8Array(o.slice(0))}});break;default:return i.source}const a=new Ha({source:s});return Promise.resolve(a)};class As extends va{constructor(t,i){super({...t,...i}),A.fillObject3DUserData(this,{filename:t.url})}}const Wa=e=>{const t=e.dataset.config,i=new As({...t.source,url:A.getPublicFolderUrl(t.source.url)});return Promise.resolve(i)};class qa extends As{constructor(t){const i=A.getConfig();super(t,{colorMap:A.getColorMap(i.pointcloud),pointCloudMode:ya.MODE.ELEVATION}),this.name=`pointcloud-${t.name}`}}const Ya=e=>{const{dataset:t}=e,i=t.config,s=new qa({...i.source,name:i.name,url:A.getPublicFolderUrl(i.source.url)});return Promise.resolve(s)},je=new ce("EPSG:4326",0,0,0);async function Ja(e,t){const s=[];for(let o=0;o<e.length;o+=200){const l=e.slice(o,o+200),r=t.slice(o,o+200);s.push(Xa(l,r))}return(await Promise.all(s)).flat()}async function Xa(e,t){return(await A.Fetcher.fetchJson(`https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json?lon=${e.join("|")}&lat=${t.join("|")}&zonly=true&resource=ign_rge_alti_wld&delimiter=|&indent=false`)).elevations}const Ka={async alticode(e){const t=[],i=[];e.forEach(a=>{a.as("EPSG:4326",je),t.push(je.longitude),i.push(je.latitude)}),(await Ja(t,i)).forEach((a,o)=>{e[o]._values[2]=a})}},_i=e=>Ka.alticode(e),Qa=e=>{const t=e.getEntities(s=>s.isMap).at(0);if(t==null)throw new Error("No map attached to the instance");return async s=>(s.forEach(a=>{const o=t.getElevation({coordinates:a}).samples.sort((l,r)=>l.resolution-r.resolution).at(0);o!=null&&(a._values[2]=o.elevation)}),Promise.resolve())},$a=(e,t=0)=>async s=>{let a=s.filter(o=>o._values[2]===t);for(const o of e)if(await o(a),a=a.filter(l=>l._values[2]===t),a.length===0)break},Cs=(e,t,i=0)=>t?$a([Qa(e),_i],i):_i;function tn(e){e("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),e("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),e("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"),e.WGS84=e["EPSG:4326"],e["EPSG:3785"]=e["EPSG:3857"],e.GOOGLE=e["EPSG:3857"],e["EPSG:900913"]=e["EPSG:3857"],e["EPSG:102113"]=e["EPSG:3857"]}var St=1,Nt=2,jt=3,en=4,oi=5,ki=6378137,sn=6356752314e-3,Si=.0066943799901413165,oe=484813681109536e-20,E=Math.PI/2,an=.16666666666666666,nn=.04722222222222222,on=.022156084656084655,x=1e-10,q=.017453292519943295,At=57.29577951308232,F=Math.PI/4,re=Math.PI*2,Z=3.14159265359,it={};it.greenwich=0;it.lisbon=-9.131906111111;it.paris=2.337229166667;it.bogota=-74.080916666667;it.madrid=-3.687938888889;it.rome=12.452333333333;it.bern=7.439583333333;it.jakarta=106.807719444444;it.ferro=-17.666666666667;it.brussels=4.367975;it.stockholm=18.058277777778;it.athens=23.7163375;it.oslo=10.722916666667;const rn={ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937}};var Ni=/[\s_\-\/\(\)]/g;function Mt(e,t){if(e[t])return e[t];for(var i=Object.keys(e),s=t.toLowerCase().replace(Ni,""),a=-1,o,l;++a<i.length;)if(o=i[a],l=o.toLowerCase().replace(Ni,""),l===s)return e[o]}function ri(e){var t={},i=e.split("+").map(function(r){return r.trim()}).filter(function(r){return r}).reduce(function(r,h){var c=h.split("=");return c.push(!0),r[c[0].toLowerCase()]=c[1],r},{}),s,a,o,l={proj:"projName",datum:"datumCode",rf:function(r){t.rf=parseFloat(r)},lat_0:function(r){t.lat0=r*q},lat_1:function(r){t.lat1=r*q},lat_2:function(r){t.lat2=r*q},lat_ts:function(r){t.lat_ts=r*q},lon_0:function(r){t.long0=r*q},lon_1:function(r){t.long1=r*q},lon_2:function(r){t.long2=r*q},alpha:function(r){t.alpha=parseFloat(r)*q},gamma:function(r){t.rectified_grid_angle=parseFloat(r)},lonc:function(r){t.longc=r*q},x_0:function(r){t.x0=parseFloat(r)},y_0:function(r){t.y0=parseFloat(r)},k_0:function(r){t.k0=parseFloat(r)},k:function(r){t.k0=parseFloat(r)},a:function(r){t.a=parseFloat(r)},b:function(r){t.b=parseFloat(r)},r_a:function(){t.R_A=!0},zone:function(r){t.zone=parseInt(r,10)},south:function(){t.utmSouth=!0},towgs84:function(r){t.datum_params=r.split(",").map(function(h){return parseFloat(h)})},to_meter:function(r){t.to_meter=parseFloat(r)},units:function(r){t.units=r;var h=Mt(rn,r);h&&(t.to_meter=h.to_meter)},from_greenwich:function(r){t.from_greenwich=r*q},pm:function(r){var h=Mt(it,r);t.from_greenwich=(h||parseFloat(r))*q},nadgrids:function(r){r==="@null"?t.datumCode="none":t.nadgrids=r},axis:function(r){var h="ewnsud";r.length===3&&h.indexOf(r.substr(0,1))!==-1&&h.indexOf(r.substr(1,1))!==-1&&h.indexOf(r.substr(2,1))!==-1&&(t.axis=r)},approx:function(){t.approx=!0}};for(s in i)a=i[s],s in l?(o=l[s],typeof o=="function"?o(a):t[o]=a):t[s]=a;return typeof t.datumCode=="string"&&t.datumCode!=="WGS84"&&(t.datumCode=t.datumCode.toLowerCase()),t}class ms{static getId(t){const i=t.find(s=>Array.isArray(s)&&s[0]==="ID");return i&&i.length>=3?{authority:i[1],code:parseInt(i[2],10)}:null}static convertUnit(t,i="unit"){if(!t||t.length<3)return{type:i,name:"unknown",conversion_factor:null};const s=t[1],a=parseFloat(t[2])||null,o=t.find(r=>Array.isArray(r)&&r[0]==="ID"),l=o?{authority:o[1],code:parseInt(o[2],10)}:null;return{type:i,name:s,conversion_factor:a,id:l}}static convertAxis(t){const i=t[1]||"Unknown";let s;const a=i.match(/^\((.)\)$/);if(a){const c=a[1].toUpperCase();if(c==="E")s="east";else if(c==="N")s="north";else if(c==="U")s="up";else throw new Error(`Unknown axis abbreviation: ${c}`)}else s=t[2]?t[2].toLowerCase():"unknown";const o=t.find(c=>Array.isArray(c)&&c[0]==="ORDER"),l=o?parseInt(o[1],10):null,r=t.find(c=>Array.isArray(c)&&(c[0]==="LENGTHUNIT"||c[0]==="ANGLEUNIT"||c[0]==="SCALEUNIT")),h=this.convertUnit(r);return{name:i,direction:s,unit:h,order:l}}static extractAxes(t){return t.filter(i=>Array.isArray(i)&&i[0]==="AXIS").map(i=>this.convertAxis(i)).sort((i,s)=>(i.order||0)-(s.order||0))}static convert(t,i={}){switch(t[0]){case"PROJCRS":i.type="ProjectedCRS",i.name=t[1],i.base_crs=t.find(d=>Array.isArray(d)&&d[0]==="BASEGEOGCRS")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="BASEGEOGCRS")):null,i.conversion=t.find(d=>Array.isArray(d)&&d[0]==="CONVERSION")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="CONVERSION")):null;const s=t.find(d=>Array.isArray(d)&&d[0]==="CS");s&&(i.coordinate_system={type:s[1],axis:this.extractAxes(t)});const a=t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT");if(a){const d=this.convertUnit(a);i.coordinate_system.unit=d}i.id=this.getId(t);break;case"BASEGEOGCRS":case"GEOGCRS":i.type="GeographicCRS",i.name=t[1];const o=t.find(d=>Array.isArray(d)&&(d[0]==="DATUM"||d[0]==="ENSEMBLE"));if(o){const d=this.convert(o);o[0]==="ENSEMBLE"?i.datum_ensemble=d:i.datum=d;const C=t.find(f=>Array.isArray(f)&&f[0]==="PRIMEM");C&&C[1]!=="Greenwich"&&(d.prime_meridian={name:C[1],longitude:parseFloat(C[2])})}i.coordinate_system={type:"ellipsoidal",axis:this.extractAxes(t)},i.id=this.getId(t);break;case"DATUM":i.type="GeodeticReferenceFrame",i.name=t[1],i.ellipsoid=t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID")):null;break;case"ENSEMBLE":i.type="DatumEnsemble",i.name=t[1],i.members=t.filter(d=>Array.isArray(d)&&d[0]==="MEMBER").map(d=>({type:"DatumEnsembleMember",name:d[1],id:this.getId(d)}));const l=t.find(d=>Array.isArray(d)&&d[0]==="ENSEMBLEACCURACY");l&&(i.accuracy=parseFloat(l[1]));const r=t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID");r&&(i.ellipsoid=this.convert(r)),i.id=this.getId(t);break;case"ELLIPSOID":i.type="Ellipsoid",i.name=t[1],i.semi_major_axis=parseFloat(t[2]),i.inverse_flattening=parseFloat(t[3]),t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT")&&this.convert(t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT"),i);break;case"CONVERSION":i.type="Conversion",i.name=t[1],i.method=t.find(d=>Array.isArray(d)&&d[0]==="METHOD")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="METHOD")):null,i.parameters=t.filter(d=>Array.isArray(d)&&d[0]==="PARAMETER").map(d=>this.convert(d));break;case"METHOD":i.type="Method",i.name=t[1],i.id=this.getId(t);break;case"PARAMETER":i.type="Parameter",i.name=t[1],i.value=parseFloat(t[2]),i.unit=this.convertUnit(t.find(d=>Array.isArray(d)&&(d[0]==="LENGTHUNIT"||d[0]==="ANGLEUNIT"||d[0]==="SCALEUNIT"))),i.id=this.getId(t);break;case"BOUNDCRS":i.type="BoundCRS";const h=t.find(d=>Array.isArray(d)&&d[0]==="SOURCECRS");if(h){const d=h.find(C=>Array.isArray(C));i.source_crs=d?this.convert(d):null}const c=t.find(d=>Array.isArray(d)&&d[0]==="TARGETCRS");if(c){const d=c.find(C=>Array.isArray(C));i.target_crs=d?this.convert(d):null}const u=t.find(d=>Array.isArray(d)&&d[0]==="ABRIDGEDTRANSFORMATION");u?i.transformation=this.convert(u):i.transformation=null;break;case"ABRIDGEDTRANSFORMATION":if(i.type="Transformation",i.name=t[1],i.method=t.find(d=>Array.isArray(d)&&d[0]==="METHOD")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="METHOD")):null,i.parameters=t.filter(d=>Array.isArray(d)&&(d[0]==="PARAMETER"||d[0]==="PARAMETERFILE")).map(d=>{if(d[0]==="PARAMETER")return this.convert(d);if(d[0]==="PARAMETERFILE")return{name:d[1],value:d[2],id:{authority:"EPSG",code:8656}}}),i.parameters.length===7){const d=i.parameters[6];d.name==="Scale difference"&&(d.value=Math.round((d.value-1)*1e12)/1e6)}i.id=this.getId(t);break;case"AXIS":i.coordinate_system||(i.coordinate_system={type:"unspecified",axis:[]}),i.coordinate_system.axis.push(this.convertAxis(t));break;case"LENGTHUNIT":const g=this.convertUnit(t,"LinearUnit");i.coordinate_system&&i.coordinate_system.axis&&i.coordinate_system.axis.forEach(d=>{d.unit||(d.unit=g)}),g.conversion_factor&&g.conversion_factor!==1&&i.semi_major_axis&&(i.semi_major_axis={value:i.semi_major_axis,unit:g});break;default:i.keyword=t[0];break}return i}}class ln extends ms{static convert(t,i={}){return super.convert(t,i),i.coordinate_system&&i.coordinate_system.subtype==="Cartesian"&&delete i.coordinate_system,i.usage&&delete i.usage,i}}class hn extends ms{static convert(t,i={}){super.convert(t,i);const s=t.find(o=>Array.isArray(o)&&o[0]==="CS");s&&(i.coordinate_system={subtype:s[1],axis:this.extractAxes(t)});const a=t.find(o=>Array.isArray(o)&&o[0]==="USAGE");if(a){const o=a.find(h=>Array.isArray(h)&&h[0]==="SCOPE"),l=a.find(h=>Array.isArray(h)&&h[0]==="AREA"),r=a.find(h=>Array.isArray(h)&&h[0]==="BBOX");i.usage={},o&&(i.usage.scope=o[1]),l&&(i.usage.area=l[1]),r&&(i.usage.bbox=r.slice(1))}return i}}function cn(e){return e.find(t=>Array.isArray(t)&&t[0]==="USAGE")?"2019":(e.find(t=>Array.isArray(t)&&t[0]==="CS")||e[0]==="BOUNDCRS"||e[0]==="PROJCRS"||e[0]==="GEOGCRS","2015")}function gn(e){return(cn(e)==="2019"?hn:ln).convert(e)}function dn(e){const t=e.toUpperCase();return t.includes("PROJCRS")||t.includes("GEOGCRS")||t.includes("BOUNDCRS")||t.includes("VERTCRS")||t.includes("LENGTHUNIT")||t.includes("ANGLEUNIT")||t.includes("SCALEUNIT")?"WKT2":(t.includes("PROJCS")||t.includes("GEOGCS")||t.includes("LOCAL_CS")||t.includes("VERT_CS")||t.includes("UNIT"),"WKT1")}var le=1,fs=2,Is=3,xe=4,ps=5,Ai=-1,un=/\s/,An=/[A-Za-z]/,Cn=/[A-Za-z84_]/,Le=/[,\]]/,vs=/[\d\.E\-\+]/;function pt(e){if(typeof e!="string")throw new Error("not a string");this.text=e.trim(),this.level=0,this.place=0,this.root=null,this.stack=[],this.currentObject=null,this.state=le}pt.prototype.readCharicter=function(){var e=this.text[this.place++];if(this.state!==xe)for(;un.test(e);){if(this.place>=this.text.length)return;e=this.text[this.place++]}switch(this.state){case le:return this.neutral(e);case fs:return this.keyword(e);case xe:return this.quoted(e);case ps:return this.afterquote(e);case Is:return this.number(e);case Ai:return}};pt.prototype.afterquote=function(e){if(e==='"'){this.word+='"',this.state=xe;return}if(Le.test(e)){this.word=this.word.trim(),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in afterquote yet, index '+this.place)};pt.prototype.afterItem=function(e){if(e===","){this.word!==null&&this.currentObject.push(this.word),this.word=null,this.state=le;return}if(e==="]"){this.level--,this.word!==null&&(this.currentObject.push(this.word),this.word=null),this.state=le,this.currentObject=this.stack.pop(),this.currentObject||(this.state=Ai);return}};pt.prototype.number=function(e){if(vs.test(e)){this.word+=e;return}if(Le.test(e)){this.word=parseFloat(this.word),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in number yet, index '+this.place)};pt.prototype.quoted=function(e){if(e==='"'){this.state=ps;return}this.word+=e};pt.prototype.keyword=function(e){if(Cn.test(e)){this.word+=e;return}if(e==="["){var t=[];t.push(this.word),this.level++,this.root===null?this.root=t:this.currentObject.push(t),this.stack.push(this.currentObject),this.currentObject=t,this.state=le;return}if(Le.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in keyword yet, index '+this.place)};pt.prototype.neutral=function(e){if(An.test(e)){this.word=e,this.state=fs;return}if(e==='"'){this.word="",this.state=xe;return}if(vs.test(e)){this.word=e,this.state=Is;return}if(Le.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in neutral yet, index '+this.place)};pt.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(this.state===Ai)return this.root;throw new Error('unable to parse string "'+this.text+'". State is '+this.state)};function mn(e){var t=new pt(e);return t.output()}function Ge(e,t,i){Array.isArray(t)&&(i.unshift(t),t=null);var s=t?{}:e,a=i.reduce(function(o,l){return Rt(l,o),o},s);t&&(e[t]=a)}function Rt(e,t){if(!Array.isArray(e)){t[e]=!0;return}var i=e.shift();if(i==="PARAMETER"&&(i=e.shift()),e.length===1){if(Array.isArray(e[0])){t[i]={},Rt(e[0],t[i]);return}t[i]=e[0];return}if(!e.length){t[i]=!0;return}if(i==="TOWGS84"){t[i]=e;return}if(i==="AXIS"){i in t||(t[i]=[]),t[i].push(e);return}Array.isArray(i)||(t[i]={});var s;switch(i){case"UNIT":case"PRIMEM":case"VERT_DATUM":t[i]={name:e[0].toLowerCase(),convert:e[1]},e.length===3&&Rt(e[2],t[i]);return;case"SPHEROID":case"ELLIPSOID":t[i]={name:e[0],a:e[1],rf:e[2]},e.length===4&&Rt(e[3],t[i]);return;case"EDATUM":case"ENGINEERINGDATUM":case"LOCAL_DATUM":case"DATUM":case"VERT_CS":case"VERTCRS":case"VERTICALCRS":e[0]=["name",e[0]],Ge(t,i,e);return;case"COMPD_CS":case"COMPOUNDCRS":case"FITTED_CS":case"PROJECTEDCRS":case"PROJCRS":case"GEOGCS":case"GEOCCS":case"PROJCS":case"LOCAL_CS":case"GEODCRS":case"GEODETICCRS":case"GEODETICDATUM":case"ENGCRS":case"ENGINEERINGCRS":e[0]=["name",e[0]],Ge(t,i,e),t[i].type=i;return;default:for(s=-1;++s<e.length;)if(!Array.isArray(e[s]))return Rt(e,t[i]);return Ge(t,i,e)}}var fn=.017453292519943295;function ht(e){return e*fn}function ys(e){const t=(e.projName||"").toLowerCase().replace(/_/g," ");!e.long0&&e.longc&&(t==="albers conic equal area"||t==="lambert azimuthal equal area")&&(e.long0=e.longc),!e.lat_ts&&e.lat1&&(t==="stereographic south pole"||t==="polar stereographic (variant b)")?(e.lat0=ht(e.lat1>0?90:-90),e.lat_ts=e.lat1,delete e.lat1):!e.lat_ts&&e.lat0&&(t==="polar stereographic"||t==="polar stereographic (variant a)")&&(e.lat_ts=e.lat0,e.lat0=ht(e.lat0>0?90:-90),delete e.lat1)}function Pi(e){let t={units:null,to_meter:void 0};return typeof e=="string"?(t.units=e.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.units==="meter"&&(t.to_meter=1)):e&&e.name&&(t.units=e.name.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.to_meter=e.conversion_factor),t}function Ti(e){return typeof e=="object"?e.value*e.unit.conversion_factor:e}function Li(e,t){e.ellipsoid.radius?(t.a=e.ellipsoid.radius,t.rf=0):(t.a=Ti(e.ellipsoid.semi_major_axis),e.ellipsoid.inverse_flattening!==void 0?t.rf=e.ellipsoid.inverse_flattening:e.ellipsoid.semi_major_axis!==void 0&&e.ellipsoid.semi_minor_axis!==void 0&&(t.rf=t.a/(t.a-Ti(e.ellipsoid.semi_minor_axis))))}function _e(e,t={}){return!e||typeof e!="object"?e:e.type==="BoundCRS"?(_e(e.source_crs,t),e.transformation&&(e.transformation.method&&e.transformation.method.name==="NTv2"?t.nadgrids=e.transformation.parameters[0].value:t.datum_params=e.transformation.parameters.map(i=>i.value)),t):(Object.keys(e).forEach(i=>{const s=e[i];if(s!==null)switch(i){case"name":if(t.srsCode)break;t.name=s,t.srsCode=s;break;case"type":s==="GeographicCRS"?t.projName="longlat":s==="ProjectedCRS"&&e.conversion&&e.conversion.method&&(t.projName=e.conversion.method.name);break;case"datum":case"datum_ensemble":s.ellipsoid&&(t.ellps=s.ellipsoid.name,Li(s,t)),s.prime_meridian&&(t.from_greenwich=s.prime_meridian.longitude*Math.PI/180);break;case"ellipsoid":t.ellps=s.name,Li(s,t);break;case"prime_meridian":t.long0=(s.longitude||0)*Math.PI/180;break;case"coordinate_system":if(s.axis){if(t.axis=s.axis.map(a=>{const o=a.direction;if(o==="east")return"e";if(o==="north")return"n";if(o==="west")return"w";if(o==="south")return"s";throw new Error(`Unknown axis direction: ${o}`)}).join("")+"u",s.unit){const{units:a,to_meter:o}=Pi(s.unit);t.units=a,t.to_meter=o}else if(s.axis[0]&&s.axis[0].unit){const{units:a,to_meter:o}=Pi(s.axis[0].unit);t.units=a,t.to_meter=o}}break;case"id":s.authority&&s.code&&(t.title=s.authority+":"+s.code);break;case"conversion":s.method&&s.method.name&&(t.projName=s.method.name),s.parameters&&s.parameters.forEach(a=>{const o=a.name.toLowerCase().replace(/\s+/g,"_"),l=a.value;a.unit&&a.unit.conversion_factor?t[o]=l*a.unit.conversion_factor:a.unit==="degree"?t[o]=l*Math.PI/180:t[o]=l});break;case"unit":s.name&&(t.units=s.name.toLowerCase(),t.units==="metre"&&(t.units="meter")),s.conversion_factor&&(t.to_meter=s.conversion_factor);break;case"base_crs":_e(s,t),t.datumCode=s.id?s.id.authority+"_"+s.id.code:s.name;break}}),t.latitude_of_false_origin!==void 0&&(t.lat0=t.latitude_of_false_origin),t.longitude_of_false_origin!==void 0&&(t.long0=t.longitude_of_false_origin),t.latitude_of_standard_parallel!==void 0&&(t.lat0=t.latitude_of_standard_parallel,t.lat1=t.latitude_of_standard_parallel),t.latitude_of_1st_standard_parallel!==void 0&&(t.lat1=t.latitude_of_1st_standard_parallel),t.latitude_of_2nd_standard_parallel!==void 0&&(t.lat2=t.latitude_of_2nd_standard_parallel),t.latitude_of_projection_centre!==void 0&&(t.lat0=t.latitude_of_projection_centre),t.longitude_of_projection_centre!==void 0&&(t.longc=t.longitude_of_projection_centre),t.easting_at_false_origin!==void 0&&(t.x0=t.easting_at_false_origin),t.northing_at_false_origin!==void 0&&(t.y0=t.northing_at_false_origin),t.latitude_of_natural_origin!==void 0&&(t.lat0=t.latitude_of_natural_origin),t.longitude_of_natural_origin!==void 0&&(t.long0=t.longitude_of_natural_origin),t.longitude_of_origin!==void 0&&(t.long0=t.longitude_of_origin),t.false_easting!==void 0&&(t.x0=t.false_easting),t.easting_at_projection_centre&&(t.x0=t.easting_at_projection_centre),t.false_northing!==void 0&&(t.y0=t.false_northing),t.northing_at_projection_centre&&(t.y0=t.northing_at_projection_centre),t.standard_parallel_1!==void 0&&(t.lat1=t.standard_parallel_1),t.standard_parallel_2!==void 0&&(t.lat2=t.standard_parallel_2),t.scale_factor_at_natural_origin!==void 0&&(t.k0=t.scale_factor_at_natural_origin),t.scale_factor_at_projection_centre!==void 0&&(t.k0=t.scale_factor_at_projection_centre),t.scale_factor_on_pseudo_standard_parallel!==void 0&&(t.k0=t.scale_factor_on_pseudo_standard_parallel),t.azimuth!==void 0&&(t.alpha=t.azimuth),t.azimuth_at_projection_centre!==void 0&&(t.alpha=t.azimuth_at_projection_centre),t.angle_from_rectified_to_skew_grid&&(t.rectified_grid_angle=t.angle_from_rectified_to_skew_grid),ys(t),t)}var In=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function pn(e,t){var i=t[0],s=t[1];!(i in e)&&s in e&&(e[i]=e[s],t.length===3&&(e[i]=t[2](e[i])))}function bs(e){for(var t=Object.keys(e),i=0,s=t.length;i<s;++i){var a=t[i];In.indexOf(a)!==-1&&vn(e[a]),typeof e[a]=="object"&&bs(e[a])}}function vn(e){if(e.AUTHORITY){var t=Object.keys(e.AUTHORITY)[0];t&&t in e.AUTHORITY&&(e.title=t+":"+e.AUTHORITY[t])}if(e.type==="GEOGCS"?e.projName="longlat":e.type==="LOCAL_CS"?(e.projName="identity",e.local=!0):typeof e.PROJECTION=="object"?e.projName=Object.keys(e.PROJECTION)[0]:e.projName=e.PROJECTION,e.AXIS){for(var i="",s=0,a=e.AXIS.length;s<a;++s){var o=[e.AXIS[s][0].toLowerCase(),e.AXIS[s][1].toLowerCase()];o[0].indexOf("north")!==-1||(o[0]==="y"||o[0]==="lat")&&o[1]==="north"?i+="n":o[0].indexOf("south")!==-1||(o[0]==="y"||o[0]==="lat")&&o[1]==="south"?i+="s":o[0].indexOf("east")!==-1||(o[0]==="x"||o[0]==="lon")&&o[1]==="east"?i+="e":(o[0].indexOf("west")!==-1||(o[0]==="x"||o[0]==="lon")&&o[1]==="west")&&(i+="w")}i.length===2&&(i+="u"),i.length===3&&(e.axis=i)}e.UNIT&&(e.units=e.UNIT.name.toLowerCase(),e.units==="metre"&&(e.units="meter"),e.UNIT.convert&&(e.type==="GEOGCS"?e.DATUM&&e.DATUM.SPHEROID&&(e.to_meter=e.UNIT.convert*e.DATUM.SPHEROID.a):e.to_meter=e.UNIT.convert));var l=e.GEOGCS;e.type==="GEOGCS"&&(l=e),l&&(l.DATUM?e.datumCode=l.DATUM.name.toLowerCase():e.datumCode=l.name.toLowerCase(),e.datumCode.slice(0,2)==="d_"&&(e.datumCode=e.datumCode.slice(2)),e.datumCode==="new_zealand_1949"&&(e.datumCode="nzgd49"),(e.datumCode==="wgs_1984"||e.datumCode==="world_geodetic_system_1984")&&(e.PROJECTION==="Mercator_Auxiliary_Sphere"&&(e.sphere=!0),e.datumCode="wgs84"),e.datumCode==="belge_1972"&&(e.datumCode="rnb72"),l.DATUM&&l.DATUM.SPHEROID&&(e.ellps=l.DATUM.SPHEROID.name.replace("_19","").replace(/[Cc]larke\_18/,"clrk"),e.ellps.toLowerCase().slice(0,13)==="international"&&(e.ellps="intl"),e.a=l.DATUM.SPHEROID.a,e.rf=parseFloat(l.DATUM.SPHEROID.rf,10)),l.DATUM&&l.DATUM.TOWGS84&&(e.datum_params=l.DATUM.TOWGS84),~e.datumCode.indexOf("osgb_1936")&&(e.datumCode="osgb36"),~e.datumCode.indexOf("osni_1952")&&(e.datumCode="osni52"),(~e.datumCode.indexOf("tm65")||~e.datumCode.indexOf("geodetic_datum_of_1965"))&&(e.datumCode="ire65"),e.datumCode==="ch1903+"&&(e.datumCode="ch1903"),~e.datumCode.indexOf("israel")&&(e.datumCode="isr93")),e.b&&!isFinite(e.b)&&(e.b=e.a),e.rectified_grid_angle&&(e.rectified_grid_angle=ht(e.rectified_grid_angle));function r(u){var g=e.to_meter||1;return u*g}var h=function(u){return pn(e,u)},c=[["standard_parallel_1","Standard_Parallel_1"],["standard_parallel_1","Latitude of 1st standard parallel"],["standard_parallel_2","Standard_Parallel_2"],["standard_parallel_2","Latitude of 2nd standard parallel"],["false_easting","False_Easting"],["false_easting","False easting"],["false-easting","Easting at false origin"],["false_northing","False_Northing"],["false_northing","False northing"],["false_northing","Northing at false origin"],["central_meridian","Central_Meridian"],["central_meridian","Longitude of natural origin"],["central_meridian","Longitude of false origin"],["latitude_of_origin","Latitude_Of_Origin"],["latitude_of_origin","Central_Parallel"],["latitude_of_origin","Latitude of natural origin"],["latitude_of_origin","Latitude of false origin"],["scale_factor","Scale_Factor"],["k0","scale_factor"],["latitude_of_center","Latitude_Of_Center"],["latitude_of_center","Latitude_of_center"],["lat0","latitude_of_center",ht],["longitude_of_center","Longitude_Of_Center"],["longitude_of_center","Longitude_of_center"],["longc","longitude_of_center",ht],["x0","false_easting",r],["y0","false_northing",r],["long0","central_meridian",ht],["lat0","latitude_of_origin",ht],["lat0","standard_parallel_1",ht],["lat1","standard_parallel_1",ht],["lat2","standard_parallel_2",ht],["azimuth","Azimuth"],["alpha","azimuth",ht],["srsCode","name"]];c.forEach(h),ys(e)}function Ms(e){if(typeof e=="object")return _e(e);const t=dn(e);var i=mn(e);if(t==="WKT2"){const o=gn(i);return _e(o)}var s=i[0],a={};return Rt(i,a),bs(a),a[s]}function Q(e){var t=this;if(arguments.length===2){var i=arguments[1];typeof i=="string"?i.charAt(0)==="+"?Q[e]=ri(arguments[1]):Q[e]=Ms(arguments[1]):Q[e]=i}else if(arguments.length===1){if(Array.isArray(e))return e.map(function(s){Array.isArray(s)?Q.apply(t,s):Q(s)});if(typeof e=="string"){if(e in Q)return Q[e]}else"EPSG"in e?Q["EPSG:"+e.EPSG]=e:"ESRI"in e?Q["ESRI:"+e.ESRI]=e:"IAU2000"in e?Q["IAU2000:"+e.IAU2000]=e:console.log(e);return}}tn(Q);function yn(e){return typeof e=="string"}function bn(e){return e in Q}var Mn=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function En(e){return Mn.some(function(t){return e.indexOf(t)>-1})}var wn=["3857","900913","3785","102113"];function On(e){var t=Mt(e,"authority");if(t){var i=Mt(t,"epsg");return i&&wn.indexOf(i)>-1}}function xn(e){var t=Mt(e,"extension");if(t)return Mt(t,"proj4")}function _n(e){return e[0]==="+"}function kn(e){if(yn(e)){if(bn(e))return Q[e];if(En(e)){var t=Ms(e);if(On(t))return Q["EPSG:3857"];var i=xn(t);return i?ri(i):t}if(_n(e))return ri(e)}else return e}function Di(e,t){e=e||{};var i,s;if(!t)return e;for(s in t)i=t[s],i!==void 0&&(e[s]=i);return e}function mt(e,t,i){var s=e*t;return i/Math.sqrt(1-s*s)}function ge(e){return e<0?-1:1}function k(e){return Math.abs(e)<=Z?e:e-ge(e)*re}function gt(e,t,i){var s=e*i,a=.5*e;return s=Math.pow((1-s)/(1+s),a),Math.tan(.5*(E-t))/s}function he(e,t){for(var i=.5*e,s,a,o=E-2*Math.atan(t),l=0;l<=15;l++)if(s=e*Math.sin(o),a=E-2*Math.atan(t*Math.pow((1-s)/(1+s),i))-o,o+=a,Math.abs(a)<=1e-10)return o;return-9999}function Sn(){var e=this.b/this.a;this.es=1-e*e,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=mt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)}function Nn(e){var t=e.x,i=e.y;if(i*At>90&&i*At<-90&&t*At>180&&t*At<-180)return null;var s,a;if(Math.abs(Math.abs(i)-E)<=x)return null;if(this.sphere)s=this.x0+this.a*this.k0*k(t-this.long0),a=this.y0+this.a*this.k0*Math.log(Math.tan(F+.5*i));else{var o=Math.sin(i),l=gt(this.e,i,o);s=this.x0+this.a*this.k0*k(t-this.long0),a=this.y0-this.a*this.k0*Math.log(l)}return e.x=s,e.y=a,e}function Pn(e){var t=e.x-this.x0,i=e.y-this.y0,s,a;if(this.sphere)a=E-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var o=Math.exp(-i/(this.a*this.k0));if(a=he(this.e,o),a===-9999)return null}return s=k(this.long0+t/(this.a*this.k0)),e.x=s,e.y=a,e}var Tn=["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"];const Ln={init:Sn,forward:Nn,inverse:Pn,names:Tn};function Dn(){}function Bi(e){return e}var Bn=["longlat","identity"];const Vn={init:Dn,forward:Bi,inverse:Bi,names:Bn};var Rn=[Ln,Vn],Me={},ke=[];function Es(e,t){var i=ke.length;return e.names?(ke[i]=e,e.names.forEach(function(s){Me[s.toLowerCase()]=i}),this):(console.log(t),!0)}function Un(e){if(!e)return!1;var t=e.toLowerCase();if(typeof Me[t]<"u"&&ke[Me[t]])return ke[Me[t]]}function Fn(){Rn.forEach(Es)}const zn={start:Fn,add:Es,get:Un};var P={};P.MERIT={a:6378137,rf:298.257,ellipseName:"MERIT 1983"};P.SGS85={a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"};P.GRS80={a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"};P.IAU76={a:6378140,rf:298.257,ellipseName:"IAU 1976"};P.airy={a:6377563396e-3,b:635625691e-2,ellipseName:"Airy 1830"};P.APL4={a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"};P.NWL9D={a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"};P.mod_airy={a:6377340189e-3,b:6356034446e-3,ellipseName:"Modified Airy"};P.andrae={a:637710443e-2,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"};P.aust_SA={a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"};P.GRS67={a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"};P.bessel={a:6377397155e-3,rf:299.1528128,ellipseName:"Bessel 1841"};P.bess_nam={a:6377483865e-3,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"};P.clrk66={a:63782064e-1,b:63565838e-1,ellipseName:"Clarke 1866"};P.clrk80={a:6378249145e-3,rf:293.4663,ellipseName:"Clarke 1880 mod."};P.clrk80ign={a:63782492e-1,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"};P.clrk58={a:6378293645208759e-9,rf:294.2606763692654,ellipseName:"Clarke 1858"};P.CPM={a:63757387e-1,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"};P.delmbr={a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"};P.engelis={a:637813605e-2,rf:298.2566,ellipseName:"Engelis 1985"};P.evrst30={a:6377276345e-3,rf:300.8017,ellipseName:"Everest 1830"};P.evrst48={a:6377304063e-3,rf:300.8017,ellipseName:"Everest 1948"};P.evrst56={a:6377301243e-3,rf:300.8017,ellipseName:"Everest 1956"};P.evrst69={a:6377295664e-3,rf:300.8017,ellipseName:"Everest 1969"};P.evrstSS={a:6377298556e-3,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"};P.fschr60={a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"};P.fschr60m={a:6378155,rf:298.3,ellipseName:"Fischer 1960"};P.fschr68={a:6378150,rf:298.3,ellipseName:"Fischer 1968"};P.helmert={a:6378200,rf:298.3,ellipseName:"Helmert 1906"};P.hough={a:6378270,rf:297,ellipseName:"Hough"};P.intl={a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"};P.kaula={a:6378163,rf:298.24,ellipseName:"Kaula 1961"};P.lerch={a:6378139,rf:298.257,ellipseName:"Lerch 1979"};P.mprts={a:6397300,rf:191,ellipseName:"Maupertius 1738"};P.new_intl={a:63781575e-1,b:63567722e-1,ellipseName:"New International 1967"};P.plessis={a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"};P.krass={a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"};P.SEasia={a:6378155,b:63567733205e-4,ellipseName:"Southeast Asia"};P.walbeck={a:6376896,b:63558348467e-4,ellipseName:"Walbeck"};P.WGS60={a:6378165,rf:298.3,ellipseName:"WGS 60"};P.WGS66={a:6378145,rf:298.25,ellipseName:"WGS 66"};P.WGS7={a:6378135,rf:298.26,ellipseName:"WGS 72"};var jn=P.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};P.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};function Gn(e,t,i,s){var a=e*e,o=t*t,l=(a-o)/a,r=0;s?(e*=1-l*(an+l*(nn+l*on)),a=e*e,l=0):r=Math.sqrt(l);var h=(a-o)/o;return{es:l,e:r,ep2:h}}function Hn(e,t,i,s,a){if(!e){var o=Mt(P,s);o||(o=jn),e=o.a,t=o.b,i=o.rf}return i&&!t&&(t=(1-1/i)*e),(i===0||Math.abs(e-t)<x)&&(a=!0,t=e),{a:e,b:t,rf:i,sphere:a}}var W={};W.wgs84={towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"};W.ch1903={towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"};W.ggrs87={towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"};W.nad83={towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"};W.nad27={nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"};W.potsdam={towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"};W.carthage={towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"};W.hermannskogel={towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"};W.osni52={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"};W.ire65={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"};W.rassadiran={towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"};W.nzgd49={towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"};W.osgb36={towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"};W.s_jtsk={towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"};W.beduaram={towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"};W.gunung_segara={towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"};W.rnb72={towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"};function Zn(e,t,i,s,a,o,l){var r={};return e===void 0||e==="none"?r.datum_type=oi:r.datum_type=en,t&&(r.datum_params=t.map(parseFloat),(r.datum_params[0]!==0||r.datum_params[1]!==0||r.datum_params[2]!==0)&&(r.datum_type=St),r.datum_params.length>3&&(r.datum_params[3]!==0||r.datum_params[4]!==0||r.datum_params[5]!==0||r.datum_params[6]!==0)&&(r.datum_type=Nt,r.datum_params[3]*=oe,r.datum_params[4]*=oe,r.datum_params[5]*=oe,r.datum_params[6]=r.datum_params[6]/1e6+1)),l&&(r.datum_type=jt,r.grids=l),r.a=i,r.b=s,r.es=a,r.ep2=o,r}var ws={};function Wn(e,t){var i=new DataView(t),s=Jn(i),a=Xn(i,s);a.nSubgrids>1&&console.log("Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored");var o=Kn(i,a,s),l={header:a,subgrids:o};return ws[e]=l,l}function qn(e){if(e===void 0)return null;var t=e.split(",");return t.map(Yn)}function Yn(e){if(e.length===0)return null;var t=e[0]==="@";return t&&(e=e.slice(1)),e==="null"?{name:"null",mandatory:!t,grid:null,isNull:!0}:{name:e,mandatory:!t,grid:ws[e]||null,isNull:!1}}function Ut(e){return e/3600*Math.PI/180}function Jn(e){var t=e.getInt32(8,!1);return t===11?!1:(t=e.getInt32(8,!0),t!==11&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian"),!0)}function Xn(e,t){return{nFields:e.getInt32(8,t),nSubgridFields:e.getInt32(24,t),nSubgrids:e.getInt32(40,t),shiftType:li(e,56,64).trim(),fromSemiMajorAxis:e.getFloat64(120,t),fromSemiMinorAxis:e.getFloat64(136,t),toSemiMajorAxis:e.getFloat64(152,t),toSemiMinorAxis:e.getFloat64(168,t)}}function li(e,t,i){return String.fromCharCode.apply(null,new Uint8Array(e.buffer.slice(t,i)))}function Kn(e,t,i){for(var s=176,a=[],o=0;o<t.nSubgrids;o++){var l=$n(e,s,i),r=to(e,s,l,i),h=Math.round(1+(l.upperLongitude-l.lowerLongitude)/l.longitudeInterval),c=Math.round(1+(l.upperLatitude-l.lowerLatitude)/l.latitudeInterval);a.push({ll:[Ut(l.lowerLongitude),Ut(l.lowerLatitude)],del:[Ut(l.longitudeInterval),Ut(l.latitudeInterval)],lim:[h,c],count:l.gridNodeCount,cvs:Qn(r)})}return a}function Qn(e){return e.map(function(t){return[Ut(t.longitudeShift),Ut(t.latitudeShift)]})}function $n(e,t,i){return{name:li(e,t+8,t+16).trim(),parent:li(e,t+24,t+24+8).trim(),lowerLatitude:e.getFloat64(t+72,i),upperLatitude:e.getFloat64(t+88,i),lowerLongitude:e.getFloat64(t+104,i),upperLongitude:e.getFloat64(t+120,i),latitudeInterval:e.getFloat64(t+136,i),longitudeInterval:e.getFloat64(t+152,i),gridNodeCount:e.getInt32(t+168,i)}}function to(e,t,i,s){for(var a=t+176,o=16,l=[],r=0;r<i.gridNodeCount;r++){var h={latitudeShift:e.getFloat32(a+r*o,s),longitudeShift:e.getFloat32(a+r*o+4,s),latitudeAccuracy:e.getFloat32(a+r*o+8,s),longitudeAccuracy:e.getFloat32(a+r*o+12,s)};l.push(h)}return l}function Ct(e,t){if(!(this instanceof Ct))return new Ct(e);t=t||function(c){if(c)throw c};var i=kn(e);if(typeof i!="object"){t(e);return}var s=Ct.projections.get(i.projName);if(!s){t(e);return}if(i.datumCode&&i.datumCode!=="none"){var a=Mt(W,i.datumCode);a&&(i.datum_params=i.datum_params||(a.towgs84?a.towgs84.split(","):null),i.ellps=a.ellipse,i.datumName=a.datumName?a.datumName:i.datumCode)}i.k0=i.k0||1,i.axis=i.axis||"enu",i.ellps=i.ellps||"wgs84",i.lat1=i.lat1||i.lat0;var o=Hn(i.a,i.b,i.rf,i.ellps,i.sphere),l=Gn(o.a,o.b,o.rf,i.R_A),r=qn(i.nadgrids),h=i.datum||Zn(i.datumCode,i.datum_params,o.a,o.b,l.es,l.ep2,r);Di(this,i),Di(this,s),this.a=o.a,this.b=o.b,this.rf=o.rf,this.sphere=o.sphere,this.es=l.es,this.e=l.e,this.ep2=l.ep2,this.datum=h,this.init(),t(null,this)}Ct.projections=zn;Ct.projections.start();function eo(e,t){return e.datum_type!==t.datum_type||e.a!==t.a||Math.abs(e.es-t.es)>5e-11?!1:e.datum_type===St?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]:e.datum_type===Nt?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]&&e.datum_params[3]===t.datum_params[3]&&e.datum_params[4]===t.datum_params[4]&&e.datum_params[5]===t.datum_params[5]&&e.datum_params[6]===t.datum_params[6]:!0}function Os(e,t,i){var s=e.x,a=e.y,o=e.z?e.z:0,l,r,h,c;if(a<-E&&a>-1.001*E)a=-E;else if(a>E&&a<1.001*E)a=E;else{if(a<-E)return{x:-1/0,y:-1/0,z:e.z};if(a>E)return{x:1/0,y:1/0,z:e.z}}return s>Math.PI&&(s-=2*Math.PI),r=Math.sin(a),c=Math.cos(a),h=r*r,l=i/Math.sqrt(1-t*h),{x:(l+o)*c*Math.cos(s),y:(l+o)*c*Math.sin(s),z:(l*(1-t)+o)*r}}function xs(e,t,i,s){var a=1e-12,o=a*a,l=30,r,h,c,u,g,d,C,f,m,v,I,b,M,O=e.x,_=e.y,w=e.z?e.z:0,S,D,T;if(r=Math.sqrt(O*O+_*_),h=Math.sqrt(O*O+_*_+w*w),r/i<a){if(S=0,h/i<a)return D=E,T=-s,{x:e.x,y:e.y,z:e.z}}else S=Math.atan2(_,O);c=w/h,u=r/h,g=1/Math.sqrt(1-t*(2-t)*u*u),f=u*(1-t)*g,m=c*g,M=0;do M++,C=i/Math.sqrt(1-t*m*m),T=r*f+w*m-C*(1-t*m*m),d=t*C/(C+T),g=1/Math.sqrt(1-d*(2-d)*u*u),v=u*(1-d)*g,I=c*g,b=I*f-v*m,f=v,m=I;while(b*b>o&&M<l);return D=Math.atan(I/Math.abs(v)),{x:S,y:D,z:T}}function io(e,t,i){if(t===St)return{x:e.x+i[0],y:e.y+i[1],z:e.z+i[2]};if(t===Nt){var s=i[0],a=i[1],o=i[2],l=i[3],r=i[4],h=i[5],c=i[6];return{x:c*(e.x-h*e.y+r*e.z)+s,y:c*(h*e.x+e.y-l*e.z)+a,z:c*(-r*e.x+l*e.y+e.z)+o}}}function so(e,t,i){if(t===St)return{x:e.x-i[0],y:e.y-i[1],z:e.z-i[2]};if(t===Nt){var s=i[0],a=i[1],o=i[2],l=i[3],r=i[4],h=i[5],c=i[6],u=(e.x-s)/c,g=(e.y-a)/c,d=(e.z-o)/c;return{x:u+h*g-r*d,y:-h*u+g+l*d,z:r*u-l*g+d}}}function me(e){return e===St||e===Nt}function ao(e,t,i){if(eo(e,t)||e.datum_type===oi||t.datum_type===oi)return i;var s=e.a,a=e.es;if(e.datum_type===jt){var o=Vi(e,!1,i);if(o!==0)return;s=ki,a=Si}var l=t.a,r=t.b,h=t.es;if(t.datum_type===jt&&(l=ki,r=sn,h=Si),a===h&&s===l&&!me(e.datum_type)&&!me(t.datum_type))return i;if(i=Os(i,a,s),me(e.datum_type)&&(i=io(i,e.datum_type,e.datum_params)),me(t.datum_type)&&(i=so(i,t.datum_type,t.datum_params)),i=xs(i,h,l,r),t.datum_type===jt){var c=Vi(t,!0,i);if(c!==0)return}return i}function Vi(e,t,i){if(e.grids===null||e.grids.length===0)return console.log("Grid shift grids not found"),-1;for(var s={x:-i.x,y:i.y},a={x:Number.NaN,y:Number.NaN},o=[],l=0;l<e.grids.length;l++){var r=e.grids[l];if(o.push(r.name),r.isNull){a=s;break}if(r.mandatory,r.grid===null){if(r.mandatory)return console.log("Unable to find mandatory grid '"+r.name+"'"),-1;continue}var h=r.grid.subgrids[0],c=(Math.abs(h.del[1])+Math.abs(h.del[0]))/1e4,u=h.ll[0]-c,g=h.ll[1]-c,d=h.ll[0]+(h.lim[0]-1)*h.del[0]+c,C=h.ll[1]+(h.lim[1]-1)*h.del[1]+c;if(!(g>s.y||u>s.x||C<s.y||d<s.x)&&(a=no(s,t,h),!isNaN(a.x)))break}return isNaN(a.x)?(console.log("Failed to find a grid shift table for location '"+-s.x*At+" "+s.y*At+" tried: '"+o+"'"),-1):(i.x=-a.x,i.y=a.y,0)}function no(e,t,i){var s={x:Number.NaN,y:Number.NaN};if(isNaN(e.x))return s;var a={x:e.x,y:e.y};a.x-=i.ll[0],a.y-=i.ll[1],a.x=k(a.x-Math.PI)+Math.PI;var o=Ri(a,i);if(t){if(isNaN(o.x))return s;o.x=a.x-o.x,o.y=a.y-o.y;var l=9,r=1e-12,h,c;do{if(c=Ri(o,i),isNaN(c.x)){console.log("Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.");break}h={x:a.x-(c.x+o.x),y:a.y-(c.y+o.y)},o.x+=h.x,o.y+=h.y}while(l--&&Math.abs(h.x)>r&&Math.abs(h.y)>r);if(l<0)return console.log("Inverse grid shift iterator failed to converge."),s;s.x=k(o.x+i.ll[0]),s.y=o.y+i.ll[1]}else isNaN(o.x)||(s.x=e.x+o.x,s.y=e.y+o.y);return s}function Ri(e,t){var i={x:e.x/t.del[0],y:e.y/t.del[1]},s={x:Math.floor(i.x),y:Math.floor(i.y)},a={x:i.x-1*s.x,y:i.y-1*s.y},o={x:Number.NaN,y:Number.NaN},l;if(s.x<0||s.x>=t.lim[0]||s.y<0||s.y>=t.lim[1])return o;l=s.y*t.lim[0]+s.x;var r={x:t.cvs[l][0],y:t.cvs[l][1]};l++;var h={x:t.cvs[l][0],y:t.cvs[l][1]};l+=t.lim[0];var c={x:t.cvs[l][0],y:t.cvs[l][1]};l--;var u={x:t.cvs[l][0],y:t.cvs[l][1]},g=a.x*a.y,d=a.x*(1-a.y),C=(1-a.x)*(1-a.y),f=(1-a.x)*a.y;return o.x=C*r.x+d*h.x+f*u.x+g*c.x,o.y=C*r.y+d*h.y+f*u.y+g*c.y,o}function Ui(e,t,i){var s=i.x,a=i.y,o=i.z||0,l,r,h,c={};for(h=0;h<3;h++)if(!(t&&h===2&&i.z===void 0))switch(h===0?(l=s,"ew".indexOf(e.axis[h])!==-1?r="x":r="y"):h===1?(l=a,"ns".indexOf(e.axis[h])!==-1?r="y":r="x"):(l=o,r="z"),e.axis[h]){case"e":c[r]=l;break;case"w":c[r]=-l;break;case"n":c[r]=l;break;case"s":c[r]=-l;break;case"u":i[r]!==void 0&&(c.z=l);break;case"d":i[r]!==void 0&&(c.z=-l);break;default:return null}return c}function _s(e){var t={x:e[0],y:e[1]};return e.length>2&&(t.z=e[2]),e.length>3&&(t.m=e[3]),t}function oo(e){Fi(e.x),Fi(e.y)}function Fi(e){if(typeof Number.isFinite=="function"){if(Number.isFinite(e))return;throw new TypeError("coordinates must be finite numbers")}if(typeof e!="number"||e!==e||!isFinite(e))throw new TypeError("coordinates must be finite numbers")}function ro(e,t){return(e.datum.datum_type===St||e.datum.datum_type===Nt||e.datum.datum_type===jt)&&t.datumCode!=="WGS84"||(t.datum.datum_type===St||t.datum.datum_type===Nt||t.datum.datum_type===jt)&&e.datumCode!=="WGS84"}function Se(e,t,i,s){var a;Array.isArray(i)?i=_s(i):i={x:i.x,y:i.y,z:i.z,m:i.m};var o=i.z!==void 0;if(oo(i),e.datum&&t.datum&&ro(e,t)&&(a=new Ct("WGS84"),i=Se(e,a,i,s),e=a),s&&e.axis!=="enu"&&(i=Ui(e,!1,i)),e.projName==="longlat")i={x:i.x*q,y:i.y*q,z:i.z||0};else if(e.to_meter&&(i={x:i.x*e.to_meter,y:i.y*e.to_meter,z:i.z||0}),i=e.inverse(i),!i)return;if(e.from_greenwich&&(i.x+=e.from_greenwich),i=ao(e.datum,t.datum,i),!!i)return t.from_greenwich&&(i={x:i.x-t.from_greenwich,y:i.y,z:i.z||0}),t.projName==="longlat"?i={x:i.x*At,y:i.y*At,z:i.z||0}:(i=t.forward(i),t.to_meter&&(i={x:i.x/t.to_meter,y:i.y/t.to_meter,z:i.z||0})),s&&t.axis!=="enu"?Ui(t,!0,i):(o||delete i.z,i)}var zi=Ct("WGS84");function He(e,t,i,s){var a,o,l;return Array.isArray(i)?(a=Se(e,t,i,s)||{x:NaN,y:NaN},i.length>2?typeof e.name<"u"&&e.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"?typeof a.z=="number"?[a.x,a.y,a.z].concat(i.splice(3)):[a.x,a.y,i[2]].concat(i.splice(3)):[a.x,a.y].concat(i.splice(2)):[a.x,a.y]):(o=Se(e,t,i,s),l=Object.keys(i),l.length===2||l.forEach(function(r){if(typeof e.name<"u"&&e.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"){if(r==="x"||r==="y"||r==="z")return}else if(r==="x"||r==="y")return;o[r]=i[r]}),o)}function ji(e){return e instanceof Ct?e:e.oProj?e.oProj:Ct(e)}function at(e,t,i){e=ji(e);var s=!1,a;return typeof t>"u"?(t=e,e=zi,s=!0):(typeof t.x<"u"||Array.isArray(t))&&(i=t,t=e,e=zi,s=!0),t=ji(t),i?He(e,t,i):(a={forward:function(o,l){return He(e,t,o,l)},inverse:function(o,l){return He(t,e,o,l)}},s&&(a.oProj=t),a)}var Gi=6,ks="AJSAJS",Ss="AFAFAF",Ft=65,et=73,ot=79,se=86,ae=90;const lo={forward:Ns,inverse:ho,toPoint:Ps};function Ns(e,t){return t=t||5,uo(co({lat:e[1],lon:e[0]}),t)}function ho(e){var t=Ci(Ls(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat,t.lon,t.lat]:[t.left,t.bottom,t.right,t.top]}function Ps(e){var t=Ci(Ls(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat]:[(t.left+t.right)/2,(t.top+t.bottom)/2]}function Ze(e){return e*(Math.PI/180)}function Hi(e){return 180*(e/Math.PI)}function co(e){var t=e.lat,i=e.lon,s=6378137,a=.00669438,o=.9996,l,r,h,c,u,g,d,C=Ze(t),f=Ze(i),m,v;v=Math.floor((i+180)/6)+1,i===180&&(v=60),t>=56&&t<64&&i>=3&&i<12&&(v=32),t>=72&&t<84&&(i>=0&&i<9?v=31:i>=9&&i<21?v=33:i>=21&&i<33?v=35:i>=33&&i<42&&(v=37)),l=(v-1)*6-180+3,m=Ze(l),r=a/(1-a),h=s/Math.sqrt(1-a*Math.sin(C)*Math.sin(C)),c=Math.tan(C)*Math.tan(C),u=r*Math.cos(C)*Math.cos(C),g=Math.cos(C)*(f-m),d=s*((1-a/4-3*a*a/64-5*a*a*a/256)*C-(3*a/8+3*a*a/32+45*a*a*a/1024)*Math.sin(2*C)+(15*a*a/256+45*a*a*a/1024)*Math.sin(4*C)-35*a*a*a/3072*Math.sin(6*C));var I=o*h*(g+(1-c+u)*g*g*g/6+(5-18*c+c*c+72*u-58*r)*g*g*g*g*g/120)+5e5,b=o*(d+h*Math.tan(C)*(g*g/2+(5-c+9*u+4*u*u)*g*g*g*g/24+(61-58*c+c*c+600*u-330*r)*g*g*g*g*g*g/720));return t<0&&(b+=1e7),{northing:Math.round(b),easting:Math.round(I),zoneNumber:v,zoneLetter:go(t)}}function Ci(e){var t=e.northing,i=e.easting,s=e.zoneLetter,a=e.zoneNumber;if(a<0||a>60)return null;var o=.9996,l=6378137,r=.00669438,h,c=(1-Math.sqrt(1-r))/(1+Math.sqrt(1-r)),u,g,d,C,f,m,v,I,b,M=i-5e5,O=t;s<"N"&&(O-=1e7),v=(a-1)*6-180+3,h=r/(1-r),m=O/o,I=m/(l*(1-r/4-3*r*r/64-5*r*r*r/256)),b=I+(3*c/2-27*c*c*c/32)*Math.sin(2*I)+(21*c*c/16-55*c*c*c*c/32)*Math.sin(4*I)+151*c*c*c/96*Math.sin(6*I),u=l/Math.sqrt(1-r*Math.sin(b)*Math.sin(b)),g=Math.tan(b)*Math.tan(b),d=h*Math.cos(b)*Math.cos(b),C=l*(1-r)/Math.pow(1-r*Math.sin(b)*Math.sin(b),1.5),f=M/(u*o);var _=b-u*Math.tan(b)/C*(f*f/2-(5+3*g+10*d-4*d*d-9*h)*f*f*f*f/24+(61+90*g+298*d+45*g*g-252*h-3*d*d)*f*f*f*f*f*f/720);_=Hi(_);var w=(f-(1+2*g+d)*f*f*f/6+(5-2*d+28*g-3*d*d+8*h+24*g*g)*f*f*f*f*f/120)/Math.cos(b);w=v+Hi(w);var S;if(e.accuracy){var D=Ci({northing:e.northing+e.accuracy,easting:e.easting+e.accuracy,zoneLetter:e.zoneLetter,zoneNumber:e.zoneNumber});S={top:D.lat,right:D.lon,bottom:_,left:w}}else S={lat:_,lon:w};return S}function go(e){var t="Z";return 84>=e&&e>=72?t="X":72>e&&e>=64?t="W":64>e&&e>=56?t="V":56>e&&e>=48?t="U":48>e&&e>=40?t="T":40>e&&e>=32?t="S":32>e&&e>=24?t="R":24>e&&e>=16?t="Q":16>e&&e>=8?t="P":8>e&&e>=0?t="N":0>e&&e>=-8?t="M":-8>e&&e>=-16?t="L":-16>e&&e>=-24?t="K":-24>e&&e>=-32?t="J":-32>e&&e>=-40?t="H":-40>e&&e>=-48?t="G":-48>e&&e>=-56?t="F":-56>e&&e>=-64?t="E":-64>e&&e>=-72?t="D":-72>e&&e>=-80&&(t="C"),t}function uo(e,t){var i="00000"+e.easting,s="00000"+e.northing;return e.zoneNumber+e.zoneLetter+Ao(e.easting,e.northing,e.zoneNumber)+i.substr(i.length-5,t)+s.substr(s.length-5,t)}function Ao(e,t,i){var s=Ts(i),a=Math.floor(e/1e5),o=Math.floor(t/1e5)%20;return Co(a,o,s)}function Ts(e){var t=e%Gi;return t===0&&(t=Gi),t}function Co(e,t,i){var s=i-1,a=ks.charCodeAt(s),o=Ss.charCodeAt(s),l=a+e-1,r=o+t,h=!1;l>ae&&(l=l-ae+Ft-1,h=!0),(l===et||a<et&&l>et||(l>et||a<et)&&h)&&l++,(l===ot||a<ot&&l>ot||(l>ot||a<ot)&&h)&&(l++,l===et&&l++),l>ae&&(l=l-ae+Ft-1),r>se?(r=r-se+Ft-1,h=!0):h=!1,(r===et||o<et&&r>et||(r>et||o<et)&&h)&&r++,(r===ot||o<ot&&r>ot||(r>ot||o<ot)&&h)&&(r++,r===et&&r++),r>se&&(r=r-se+Ft-1);var c=String.fromCharCode(l)+String.fromCharCode(r);return c}function Ls(e){if(e&&e.length===0)throw"MGRSPoint coverting from nothing";for(var t=e.length,i=null,s="",a,o=0;!/[A-Z]/.test(a=e.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+e;s+=a,o++}var l=parseInt(s,10);if(o===0||o+3>t)throw"MGRSPoint bad conversion from: "+e;var r=e.charAt(o++);if(r<="A"||r==="B"||r==="Y"||r>="Z"||r==="I"||r==="O")throw"MGRSPoint zone letter "+r+" not handled: "+e;i=e.substring(o,o+=2);for(var h=Ts(l),c=mo(i.charAt(0),h),u=fo(i.charAt(1),h);u<Io(r);)u+=2e6;var g=t-o;if(g%2!==0)throw`MGRSPoint has to have an even number
2
2
  of digits after the zone letter and two 100km letters - front
3
3
  half for easting meters, second half for
4
- northing meters`+e;var u=g/2,f=0,m=0,C,v,I,b,M;return u>0&&(C=1e5/Math.pow(10,u),v=e.substring(n,n+u),f=parseFloat(v)*C,I=e.substring(n+u),m=parseFloat(I)*C),b=f+c,M=m+d,{easting:b,northing:M,zoneLetter:l,zoneNumber:r,accuracy:C}}function Yo(e,t){for(var i=ta.charCodeAt(t-1),s=1e5,a=!1;i!==e.charCodeAt(0);){if(i++,i===st&&i++,i===ct&&i++,i>me){if(a)throw"Bad character: "+e;i=Jt,a=!0}s+=1e5}return s}function Jo(e,t){if(e>"V")throw"MGRSPoint given invalid Northing "+e;for(var i=ea.charCodeAt(t-1),s=0,a=!1;i!==e.charCodeAt(0);){if(i++,i===st&&i++,i===ct&&i++,i>Ae){if(a)throw"Bad character: "+e;i=Jt,a=!0}s+=1e5}return s}function Xo(e){var t;switch(e){case"C":t=11e5;break;case"D":t=2e6;break;case"E":t=28e5;break;case"F":t=37e5;break;case"G":t=46e5;break;case"H":t=55e5;break;case"J":t=64e5;break;case"K":t=73e5;break;case"L":t=82e5;break;case"M":t=91e5;break;case"N":t=0;break;case"P":t=8e5;break;case"Q":t=17e5;break;case"R":t=26e5;break;case"S":t=35e5;break;case"T":t=44e5;break;case"U":t=53e5;break;case"V":t=62e5;break;case"W":t=7e6;break;case"X":t=79e5;break;default:t=-1}if(t>=0)return t;throw"Invalid zone letter: "+e}function te(e,t,i){if(!(this instanceof te))return new te(e,t,i);if(Array.isArray(e))this.x=e[0],this.y=e[1],this.z=e[2]||0;else if(typeof e=="object")this.x=e.x,this.y=e.y,this.z=e.z||0;else if(typeof e=="string"&&typeof t>"u"){var s=e.split(",");this.x=parseFloat(s[0],10),this.y=parseFloat(s[1],10),this.z=parseFloat(s[2],10)||0}else this.x=e,this.y=t,this.z=i||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}te.fromMGRS=function(e){return new te(sa(e))};te.prototype.toMGRS=function(e){return ia([this.x,this.y],e)};var Ko=1,Qo=.25,ds=.046875,As=.01953125,ms=.01068115234375,$o=.75,tr=.46875,er=.013020833333333334,ir=.007120768229166667,sr=.3645833333333333,ar=.005696614583333333,nr=.3076171875;function oa(e){var t=[];t[0]=Ko-e*(Qo+e*(ds+e*(As+e*ms))),t[1]=e*($o-e*(ds+e*(As+e*ms)));var i=e*e;return t[2]=i*(tr-e*(er+e*ir)),i*=e,t[3]=i*(sr-e*ar),t[4]=i*e*nr,t}function ti(e,t,i,s){return i*=t,t*=t,s[0]*e-i*(s[1]+t*(s[2]+t*(s[3]+t*s[4])))}var or=20;function ra(e,t,i){for(var s=1/(1-t),a=e,n=or;n;--n){var r=Math.sin(a),l=1-t*r*r;if(l=(ti(a,r,Math.cos(a),i)-e)*(l*Math.sqrt(l))*s,a-=l,Math.abs(l)<O)return a}return a}function rr(){this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.es&&(this.en=oa(this.es),this.ml0=ti(this.lat0,Math.sin(this.lat0),Math.cos(this.lat0),this.en))}function lr(e){var t=e.x,i=e.y,s=k(t-this.long0),a,n,r,l=Math.sin(i),h=Math.cos(i);if(this.es){var d=h*s,g=Math.pow(d,2),u=this.ep2*Math.pow(h,2),f=Math.pow(u,2),m=Math.abs(h)>O?Math.tan(i):0,C=Math.pow(m,2),v=Math.pow(C,2);a=1-this.es*Math.pow(l,2),d=d/Math.sqrt(a);var I=ti(i,l,h,this.en);n=this.a*(this.k0*d*(1+g/6*(1-C+u+g/20*(5-18*C+v+14*u-58*C*u+g/42*(61+179*v-v*C-479*C)))))+this.x0,r=this.a*(this.k0*(I-this.ml0+l*s*d/2*(1+g/12*(5-C+9*u+4*f+g/30*(61+v-58*C+270*u-330*C*u+g/56*(1385+543*v-v*C-3111*C))))))+this.y0}else{var c=h*Math.sin(s);if(Math.abs(Math.abs(c)-1)<O)return 93;if(n=.5*this.a*this.k0*Math.log((1+c)/(1-c))+this.x0,r=h*Math.cos(s)/Math.sqrt(1-Math.pow(c,2)),c=Math.abs(r),c>=1){if(c-1>O)return 93;r=0}else r=Math.acos(r);i<0&&(r=-r),r=this.a*this.k0*(r-this.lat0)+this.y0}return e.x=n,e.y=r,e}function hr(e){var t,i,s,a,n=(e.x-this.x0)*(1/this.a),r=(e.y-this.y0)*(1/this.a);if(this.es)if(t=this.ml0+r/this.k0,i=ra(t,this.es,this.en),Math.abs(i)<w){var g=Math.sin(i),u=Math.cos(i),f=Math.abs(u)>O?Math.tan(i):0,m=this.ep2*Math.pow(u,2),C=Math.pow(m,2),v=Math.pow(f,2),I=Math.pow(v,2);t=1-this.es*Math.pow(g,2);var b=n*Math.sqrt(t)/this.k0,M=Math.pow(b,2);t=t*f,s=i-t*M/(1-this.es)*.5*(1-M/12*(5+3*v-9*m*v+m-4*C-M/30*(61+90*v-252*m*v+45*I+46*m-M/56*(1385+3633*v+4095*I+1574*I*v)))),a=k(this.long0+b*(1-M/6*(1+2*v+m-M/20*(5+28*v+24*I+8*m*v+6*m-M/42*(61+662*v+1320*I+720*I*v))))/u)}else s=w*Me(r),a=0;else{var l=Math.exp(n/this.k0),h=.5*(l-1/l),c=this.lat0+r/this.k0,d=Math.cos(c);t=Math.sqrt((1-Math.pow(d,2))/(1+Math.pow(h,2))),s=Math.asin(t),r<0&&(s=-s),h===0&&d===0?a=0:a=k(Math.atan2(h,d)+this.long0)}return e.x=a,e.y=s,e}var cr=["Fast_Transverse_Mercator","Fast Transverse Mercator"];const Ve={init:rr,forward:lr,inverse:hr,names:cr};function la(e){var t=Math.exp(e);return t=(t-1/t)/2,t}function mt(e,t){e=Math.abs(e),t=Math.abs(t);var i=Math.max(e,t),s=Math.min(e,t)/(i||1);return i*Math.sqrt(1+Math.pow(s,2))}function gr(e){var t=1+e,i=t-1;return i===0?e:e*Math.log(t)/i}function ur(e){var t=Math.abs(e);return t=gr(t*(1+t/(mt(1,t)+1))),e<0?-t:t}function Fi(e,t){for(var i=2*Math.cos(2*t),s=e.length-1,a=e[s],n=0,r;--s>=0;)r=-n+i*a+e[s],n=a,a=r;return t+r*Math.sin(2*t)}function dr(e,t){for(var i=2*Math.cos(t),s=e.length-1,a=e[s],n=0,r;--s>=0;)r=-n+i*a+e[s],n=a,a=r;return Math.sin(t)*r}function Ar(e){var t=Math.exp(e);return t=(t+1/t)/2,t}function ha(e,t,i){for(var s=Math.sin(t),a=Math.cos(t),n=la(i),r=Ar(i),l=2*a*r,h=-2*s*n,c=e.length-1,d=e[c],g=0,u=0,f=0,m,C;--c>=0;)m=u,C=g,u=d,g=f,d=-m+l*u-h*g+e[c],f=-C+h*u+l*g;return l=s*r,h=a*n,[l*d-h*f,l*f+h*d]}function mr(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(Ve.init.apply(this),this.forward=Ve.forward,this.inverse=Ve.inverse),this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var e=this.es/(1+Math.sqrt(1-this.es)),t=e/(2-e),i=t;this.cgb[0]=t*(2+t*(-2/3+t*(-2+t*(116/45+t*(26/45+t*(-2854/675)))))),this.cbg[0]=t*(-2+t*(2/3+t*(4/3+t*(-82/45+t*(32/45+t*(4642/4725)))))),i=i*t,this.cgb[1]=i*(7/3+t*(-8/5+t*(-227/45+t*(2704/315+t*(2323/945))))),this.cbg[1]=i*(5/3+t*(-16/15+t*(-13/9+t*(904/315+t*(-1522/945))))),i=i*t,this.cgb[2]=i*(56/15+t*(-136/35+t*(-1262/105+t*(73814/2835)))),this.cbg[2]=i*(-26/15+t*(34/21+t*(8/5+t*(-12686/2835)))),i=i*t,this.cgb[3]=i*(4279/630+t*(-332/35+t*(-399572/14175))),this.cbg[3]=i*(1237/630+t*(-12/5+t*(-24832/14175))),i=i*t,this.cgb[4]=i*(4174/315+t*(-144838/6237)),this.cbg[4]=i*(-734/315+t*(109598/31185)),i=i*t,this.cgb[5]=i*(601676/22275),this.cbg[5]=i*(444337/155925),i=Math.pow(t,2),this.Qn=this.k0/(1+t)*(1+i*(1/4+i*(1/64+i/256))),this.utg[0]=t*(-.5+t*(2/3+t*(-37/96+t*(1/360+t*(81/512+t*(-96199/604800)))))),this.gtu[0]=t*(.5+t*(-2/3+t*(5/16+t*(41/180+t*(-127/288+t*(7891/37800)))))),this.utg[1]=i*(-1/48+t*(-1/15+t*(437/1440+t*(-46/105+t*(1118711/3870720))))),this.gtu[1]=i*(13/48+t*(-3/5+t*(557/1440+t*(281/630+t*(-1983433/1935360))))),i=i*t,this.utg[2]=i*(-17/480+t*(37/840+t*(209/4480+t*(-5569/90720)))),this.gtu[2]=i*(61/240+t*(-103/140+t*(15061/26880+t*(167603/181440)))),i=i*t,this.utg[3]=i*(-4397/161280+t*(11/504+t*(830251/7257600))),this.gtu[3]=i*(49561/161280+t*(-179/168+t*(6601661/7257600))),i=i*t,this.utg[4]=i*(-4583/161280+t*(108847/3991680)),this.gtu[4]=i*(34729/80640+t*(-3418889/1995840)),i=i*t,this.utg[5]=i*(-20648693/638668800),this.gtu[5]=i*(212378941/319334400);var s=Fi(this.cbg,this.lat0);this.Zb=-this.Qn*(s+dr(this.gtu,2*s))}function Cr(e){var t=k(e.x-this.long0),i=e.y;i=Fi(this.cbg,i);var s=Math.sin(i),a=Math.cos(i),n=Math.sin(t),r=Math.cos(t);i=Math.atan2(s,r*a),t=Math.atan2(n*a,mt(s,a*r)),t=ur(Math.tan(t));var l=ha(this.gtu,2*i,2*t);i=i+l[0],t=t+l[1];var h,c;return Math.abs(t)<=2.623395162778?(h=this.a*(this.Qn*t)+this.x0,c=this.a*(this.Qn*i+this.Zb)+this.y0):(h=1/0,c=1/0),e.x=h,e.y=c,e}function fr(e){var t=(e.x-this.x0)*(1/this.a),i=(e.y-this.y0)*(1/this.a);i=(i-this.Zb)/this.Qn,t=t/this.Qn;var s,a;if(Math.abs(t)<=2.623395162778){var n=ha(this.utg,2*i,2*t);i=i+n[0],t=t+n[1],t=Math.atan(la(t));var r=Math.sin(i),l=Math.cos(i),h=Math.sin(t),c=Math.cos(t);i=Math.atan2(r*c,mt(h,c*l)),t=Math.atan2(h,c*l),s=k(t+this.long0),a=Fi(this.cgb,i)}else s=1/0,a=1/0;return e.x=s,e.y=a,e}var Ir=["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","tmerc"];const Re={init:mr,forward:Cr,inverse:fr,names:Ir};function pr(e,t){if(e===void 0){if(e=Math.floor((k(t)+Math.PI)*30/Math.PI)+1,e<0)return 0;if(e>60)return 60}return e}var vr="etmerc";function yr(){var e=pr(this.zone,this.long0);if(e===void 0)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(e)-183)*J,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Re.init.apply(this),this.forward=Re.forward,this.inverse=Re.inverse}var br=["Universal Transverse Mercator System","utm"];const Mr={init:yr,names:br,dependsOn:vr};function Ui(e,t){return Math.pow((1-e)/(1+e),t)}var wr=20;function Er(){var e=Math.sin(this.lat0),t=Math.cos(this.lat0);t*=t,this.rc=Math.sqrt(1-this.es)/(1-this.es*e*e),this.C=Math.sqrt(1+this.es*t*t/(1-this.es)),this.phic0=Math.asin(e/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+R)/(Math.pow(Math.tan(.5*this.lat0+R),this.C)*Ui(this.e*e,this.ratexp))}function _r(e){var t=e.x,i=e.y;return e.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*i+R),this.C)*Ui(this.e*Math.sin(i),this.ratexp))-w,e.x=this.C*t,e}function Or(e){for(var t=1e-14,i=e.x/this.C,s=e.y,a=Math.pow(Math.tan(.5*s+R)/this.K,1/this.C),n=wr;n>0&&(s=2*Math.atan(a*Ui(this.e*Math.sin(e.y),-.5*this.e))-w,!(Math.abs(s-e.y)<t));--n)e.y=s;return n?(e.x=i,e.y=s,e):null}const zi={init:Er,forward:_r,inverse:Or};function xr(){zi.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))}function kr(e){var t,i,s,a;return e.x=k(e.x-this.long0),zi.forward.apply(this,[e]),t=Math.sin(e.y),i=Math.cos(e.y),s=Math.cos(e.x),a=this.k0*this.R2/(1+this.sinc0*t+this.cosc0*i*s),e.x=a*i*Math.sin(e.x),e.y=a*(this.cosc0*t-this.sinc0*i*s),e.x=this.a*e.x+this.x0,e.y=this.a*e.y+this.y0,e}function Sr(e){var t,i,s,a,n;if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,n=Math.sqrt(e.x*e.x+e.y*e.y)){var r=2*Math.atan2(n,this.R2);t=Math.sin(r),i=Math.cos(r),a=Math.asin(i*this.sinc0+e.y*t*this.cosc0/n),s=Math.atan2(e.x*t,n*this.cosc0*i-e.y*this.sinc0*t)}else a=this.phic0,s=0;return e.x=s,e.y=a,zi.inverse.apply(this,[e]),e.x=k(e.x+this.long0),e}var Nr=["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"];const Lr={init:xr,forward:kr,inverse:Sr,names:Nr};function Pr(e,t,i){return t*=i,Math.tan(.5*(w+e))*Math.pow((1-t)/(1+t),.5*i)}function Tr(){this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=O&&(this.k0=.5*(1+Me(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=O&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=O&&(this.k0=.5*this.cons*yt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/Ct(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=yt(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-w,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))}function Dr(e){var t=e.x,i=e.y,s=Math.sin(i),a=Math.cos(i),n,r,l,h,c,d,g=k(t-this.long0);return Math.abs(Math.abs(t-this.long0)-Math.PI)<=O&&Math.abs(i+this.lat0)<=O?(e.x=NaN,e.y=NaN,e):this.sphere?(n=2*this.k0/(1+this.sinlat0*s+this.coslat0*a*Math.cos(g)),e.x=this.a*n*a*Math.sin(g)+this.x0,e.y=this.a*n*(this.coslat0*s-this.sinlat0*a*Math.cos(g))+this.y0,e):(r=2*Math.atan(this.ssfn_(i,s,this.e))-w,h=Math.cos(r),l=Math.sin(r),Math.abs(this.coslat0)<=O?(c=Ct(this.e,i*this.con,this.con*s),d=2*this.a*this.k0*c/this.cons,e.x=this.x0+d*Math.sin(t-this.long0),e.y=this.y0-this.con*d*Math.cos(t-this.long0),e):(Math.abs(this.sinlat0)<O?(n=2*this.a*this.k0/(1+h*Math.cos(g)),e.y=n*l):(n=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*l+this.cosX0*h*Math.cos(g))),e.y=n*(this.cosX0*l-this.sinX0*h*Math.cos(g))+this.y0),e.x=n*h*Math.sin(g)+this.x0,e))}function Br(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,n,r=Math.sqrt(e.x*e.x+e.y*e.y);if(this.sphere){var l=2*Math.atan(r/(2*this.a*this.k0));return t=this.long0,i=this.lat0,r<=O?(e.x=t,e.y=i,e):(i=Math.asin(Math.cos(l)*this.sinlat0+e.y*Math.sin(l)*this.coslat0/r),Math.abs(this.coslat0)<O?this.lat0>0?t=k(this.long0+Math.atan2(e.x,-1*e.y)):t=k(this.long0+Math.atan2(e.x,e.y)):t=k(this.long0+Math.atan2(e.x*Math.sin(l),r*this.coslat0*Math.cos(l)-e.y*this.sinlat0*Math.sin(l))),e.x=t,e.y=i,e)}else if(Math.abs(this.coslat0)<=O){if(r<=O)return i=this.lat0,t=this.long0,e.x=t,e.y=i,e;e.x*=this.con,e.y*=this.con,s=r*this.cons/(2*this.a*this.k0),i=this.con*ye(this.e,s),t=this.con*k(this.con*this.long0+Math.atan2(e.x,-1*e.y))}else a=2*Math.atan(r*this.cosX0/(2*this.a*this.k0*this.ms1)),t=this.long0,r<=O?n=this.X0:(n=Math.asin(Math.cos(a)*this.sinX0+e.y*Math.sin(a)*this.cosX0/r),t=k(this.long0+Math.atan2(e.x*Math.sin(a),r*this.cosX0*Math.cos(a)-e.y*this.sinX0*Math.sin(a)))),i=-1*ye(this.e,Math.tan(.5*(w+n)));return e.x=t,e.y=i,e}var Vr=["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"];const Rr={init:Tr,forward:Dr,inverse:Br,names:Vr,ssfn_:Pr};function Fr(){var e=this.lat0;this.lambda0=this.long0;var t=Math.sin(e),i=this.a,s=this.rf,a=1/s,n=2*a-Math.pow(a,2),r=this.e=Math.sqrt(n);this.R=this.k0*i*Math.sqrt(1-n)/(1-n*Math.pow(t,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(e),4)),this.b0=Math.asin(t/this.alpha);var l=Math.log(Math.tan(Math.PI/4+this.b0/2)),h=Math.log(Math.tan(Math.PI/4+e/2)),c=Math.log((1+r*t)/(1-r*t));this.K=l-this.alpha*h+this.alpha*r/2*c}function Ur(e){var t=Math.log(Math.tan(Math.PI/4-e.y/2)),i=this.e/2*Math.log((1+this.e*Math.sin(e.y))/(1-this.e*Math.sin(e.y))),s=-this.alpha*(t+i)+this.K,a=2*(Math.atan(Math.exp(s))-Math.PI/4),n=this.alpha*(e.x-this.lambda0),r=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(a)+Math.cos(this.b0)*Math.cos(n))),l=Math.asin(Math.cos(this.b0)*Math.sin(a)-Math.sin(this.b0)*Math.cos(a)*Math.cos(n));return e.y=this.R/2*Math.log((1+Math.sin(l))/(1-Math.sin(l)))+this.y0,e.x=this.R*r+this.x0,e}function zr(e){for(var t=e.x-this.x0,i=e.y-this.y0,s=t/this.R,a=2*(Math.atan(Math.exp(i/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(a)+Math.sin(this.b0)*Math.cos(a)*Math.cos(s)),r=Math.atan(Math.sin(s)/(Math.cos(this.b0)*Math.cos(s)-Math.sin(this.b0)*Math.tan(a))),l=this.lambda0+r/this.alpha,h=0,c=n,d=-1e3,g=0;Math.abs(c-d)>1e-7;){if(++g>20)return;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(c))/2)),d=c,c=2*Math.atan(Math.exp(h))-Math.PI/2}return e.x=l,e.y=c,e}var jr=["somerc"];const Gr={init:Fr,forward:Ur,inverse:zr,names:jr};var Zt=1e-7;function Hr(e){var t=["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"],i=typeof e.PROJECTION=="object"?Object.keys(e.PROJECTION)[0]:e.PROJECTION;return"no_uoff"in e||"no_off"in e||t.indexOf(i)!==-1}function Zr(){var e,t,i,s,a,n,r,l,h,c,d=0,g,u=0,f=0,m=0,C=0,v=0,I=0;this.no_off=Hr(this),this.no_rot="no_rot"in this;var b=!1;"alpha"in this&&(b=!0);var M=!1;if("rectified_grid_angle"in this&&(M=!0),b&&(I=this.alpha),M&&(d=this.rectified_grid_angle*J),b||M)u=this.longc;else if(f=this.long1,C=this.lat1,m=this.long2,v=this.lat2,Math.abs(C-v)<=Zt||(e=Math.abs(C))<=Zt||Math.abs(e-w)<=Zt||Math.abs(Math.abs(this.lat0)-w)<=Zt||Math.abs(Math.abs(v)-w)<=Zt)throw new Error;var _=1-this.es;t=Math.sqrt(_),Math.abs(this.lat0)>O?(l=Math.sin(this.lat0),i=Math.cos(this.lat0),e=1-this.es*l*l,this.B=i*i,this.B=Math.sqrt(1+this.es*this.B*this.B/_),this.A=this.B*this.k0*t/e,s=this.B*t/(i*Math.sqrt(e)),a=s*s-1,a<=0?a=0:(a=Math.sqrt(a),this.lat0<0&&(a=-a)),this.E=a+=s,this.E*=Math.pow(Ct(this.e,this.lat0,l),this.B)):(this.B=1/t,this.A=this.k0,this.E=s=a=1),b||M?(b?(g=Math.asin(Math.sin(I)/s),M||(d=I)):(g=d,I=Math.asin(s*Math.sin(g))),this.lam0=u-Math.asin(.5*(a-1/a)*Math.tan(g))/this.B):(n=Math.pow(Ct(this.e,C,Math.sin(C)),this.B),r=Math.pow(Ct(this.e,v,Math.sin(v)),this.B),a=this.E/n,h=(r-n)/(r+n),c=this.E*this.E,c=(c-r*n)/(c+r*n),e=f-m,e<-Math.pi?m-=pe:e>Math.pi&&(m+=pe),this.lam0=k(.5*(f+m)-Math.atan(c*Math.tan(.5*this.B*(f-m))/h)/this.B),g=Math.atan(2*Math.sin(this.B*k(f-this.lam0))/(a-1/a)),d=I=Math.asin(s*Math.sin(g))),this.singam=Math.sin(g),this.cosgam=Math.cos(g),this.sinrot=Math.sin(d),this.cosrot=Math.cos(d),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A*this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(s*s-1)/Math.cos(I))),this.lat0<0&&(this.u_0=-this.u_0)),a=.5*g,this.v_pole_n=this.ArB*Math.log(Math.tan(R-a)),this.v_pole_s=this.ArB*Math.log(Math.tan(R+a))}function Wr(e){var t={},i,s,a,n,r,l,h,c;if(e.x=e.x-this.lam0,Math.abs(Math.abs(e.y)-w)>O){if(r=this.E/Math.pow(Ct(this.e,e.y,Math.sin(e.y)),this.B),l=1/r,i=.5*(r-l),s=.5*(r+l),n=Math.sin(this.B*e.x),a=(i*this.singam-n*this.cosgam)/s,Math.abs(Math.abs(a)-1)<O)throw new Error;c=.5*this.ArB*Math.log((1-a)/(1+a)),l=Math.cos(this.B*e.x),Math.abs(l)<Zt?h=this.A*e.x:h=this.ArB*Math.atan2(i*this.cosgam+n*this.singam,l)}else c=e.y>0?this.v_pole_n:this.v_pole_s,h=this.ArB*e.y;return this.no_rot?(t.x=h,t.y=c):(h-=this.u_0,t.x=c*this.cosrot+h*this.sinrot,t.y=h*this.cosrot-c*this.sinrot),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t}function qr(e){var t,i,s,a,n,r,l,h={};if(e.x=(e.x-this.x0)*(1/this.a),e.y=(e.y-this.y0)*(1/this.a),this.no_rot?(i=e.y,t=e.x):(i=e.x*this.cosrot-e.y*this.sinrot,t=e.y*this.cosrot+e.x*this.sinrot+this.u_0),s=Math.exp(-this.BrA*i),a=.5*(s-1/s),n=.5*(s+1/s),r=Math.sin(this.BrA*t),l=(r*this.cosgam+a*this.singam)/n,Math.abs(Math.abs(l)-1)<O)h.x=0,h.y=l<0?-w:w;else{if(h.y=this.E/Math.sqrt((1+l)/(1-l)),h.y=ye(this.e,Math.pow(h.y,1/this.B)),h.y===1/0)throw new Error;h.x=-this.rB*Math.atan2(a*this.cosgam-r*this.singam,Math.cos(this.BrA*t))}return h.x+=this.lam0,h}var Yr=["Hotine_Oblique_Mercator","Hotine Oblique Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin","Hotine_Oblique_Mercator_Two_Point_Natural_Origin","Hotine_Oblique_Mercator_Azimuth_Center","Oblique_Mercator","omerc"];const Jr={init:Zr,forward:Wr,inverse:qr,names:Yr};function Xr(){if(this.lat2||(this.lat2=this.lat1),this.k0||(this.k0=1),this.x0=this.x0||0,this.y0=this.y0||0,!(Math.abs(this.lat1+this.lat2)<O)){var e=this.b/this.a;this.e=Math.sqrt(1-e*e);var t=Math.sin(this.lat1),i=Math.cos(this.lat1),s=yt(this.e,t,i),a=Ct(this.e,this.lat1,t),n=Math.sin(this.lat2),r=Math.cos(this.lat2),l=yt(this.e,n,r),h=Ct(this.e,this.lat2,n),c=Ct(this.e,this.lat0,Math.sin(this.lat0));Math.abs(this.lat1-this.lat2)>O?this.ns=Math.log(s/l)/Math.log(a/h):this.ns=t,isNaN(this.ns)&&(this.ns=t),this.f0=s/(this.ns*Math.pow(a,this.ns)),this.rh=this.a*this.f0*Math.pow(c,this.ns),this.title||(this.title="Lambert Conformal Conic")}}function Kr(e){var t=e.x,i=e.y;Math.abs(2*Math.abs(i)-Math.PI)<=O&&(i=Me(i)*(w-2*O));var s=Math.abs(Math.abs(i)-w),a,n;if(s>O)a=Ct(this.e,i,Math.sin(i)),n=this.a*this.f0*Math.pow(a,this.ns);else{if(s=i*this.ns,s<=0)return null;n=0}var r=this.ns*k(t-this.long0);return e.x=this.k0*(n*Math.sin(r))+this.x0,e.y=this.k0*(this.rh-n*Math.cos(r))+this.y0,e}function Qr(e){var t,i,s,a,n,r=(e.x-this.x0)/this.k0,l=this.rh-(e.y-this.y0)/this.k0;this.ns>0?(t=Math.sqrt(r*r+l*l),i=1):(t=-Math.sqrt(r*r+l*l),i=-1);var h=0;if(t!==0&&(h=Math.atan2(i*r,i*l)),t!==0||this.ns>0){if(i=1/this.ns,s=Math.pow(t/(this.a*this.f0),i),a=ye(this.e,s),a===-9999)return null}else a=-w;return n=k(h/this.ns+this.long0),e.x=n,e.y=a,e}var $r=["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"];const tl={init:Xr,forward:Kr,inverse:Qr,names:$r};function el(){this.a=6377397155e-3,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.7417649320975901-.308341501185665),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq}function il(e){var t,i,s,a,n,r,l,h=e.x,c=e.y,d=k(h-this.long0);return t=Math.pow((1+this.e*Math.sin(c))/(1-this.e*Math.sin(c)),this.alfa*this.e/2),i=2*(Math.atan(this.k*Math.pow(Math.tan(c/2+this.s45),this.alfa)/t)-this.s45),s=-d*this.alfa,a=Math.asin(Math.cos(this.ad)*Math.sin(i)+Math.sin(this.ad)*Math.cos(i)*Math.cos(s)),n=Math.asin(Math.cos(i)*Math.sin(s)/Math.cos(a)),r=this.n*n,l=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(a/2+this.s45),this.n),e.y=l*Math.cos(r)/1,e.x=l*Math.sin(r)/1,this.czech||(e.y*=-1,e.x*=-1),e}function sl(e){var t,i,s,a,n,r,l,h,c=e.x;e.x=e.y,e.y=c,this.czech||(e.y*=-1,e.x*=-1),r=Math.sqrt(e.x*e.x+e.y*e.y),n=Math.atan2(e.y,e.x),a=n/Math.sin(this.s0),s=2*(Math.atan(Math.pow(this.ro0/r,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),t=Math.asin(Math.cos(this.ad)*Math.sin(s)-Math.sin(this.ad)*Math.cos(s)*Math.cos(a)),i=Math.asin(Math.cos(s)*Math.sin(a)/Math.cos(t)),e.x=this.long0-i/this.alfa,l=t,h=0;var d=0;do e.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(t/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.e/2))-this.s45),Math.abs(l-e.y)<1e-10&&(h=1),l=e.y,d+=1;while(h===0&&d<15);return d>=15?null:e}var al=["Krovak","krovak"];const nl={init:el,forward:il,inverse:sl,names:al};function tt(e,t,i,s,a){return e*a-t*Math.sin(2*a)+i*Math.sin(4*a)-s*Math.sin(6*a)}function we(e){return 1-.25*e*(1+e/16*(3+1.25*e))}function Ee(e){return .375*e*(1+.25*e*(1+.46875*e))}function _e(e){return .05859375*e*e*(1+.75*e)}function Oe(e){return e*e*e*(35/3072)}function ee(e,t,i){var s=t*i;return e/Math.sqrt(1-s*s)}function se(e){return Math.abs(e)<w?e:e-Me(e)*Math.PI}function Ye(e,t,i,s,a){var n,r;n=e/t;for(var l=0;l<15;l++)if(r=(e-(t*n-i*Math.sin(2*n)+s*Math.sin(4*n)-a*Math.sin(6*n)))/(t-2*i*Math.cos(2*n)+4*s*Math.cos(4*n)-6*a*Math.cos(6*n)),n+=r,Math.abs(r)<=1e-10)return n;return NaN}function ol(){this.sphere||(this.e0=we(this.es),this.e1=Ee(this.es),this.e2=_e(this.es),this.e3=Oe(this.es),this.ml0=this.a*tt(this.e0,this.e1,this.e2,this.e3,this.lat0))}function rl(e){var t,i,s=e.x,a=e.y;if(s=k(s-this.long0),this.sphere)t=this.a*Math.asin(Math.cos(a)*Math.sin(s)),i=this.a*(Math.atan2(Math.tan(a),Math.cos(s))-this.lat0);else{var n=Math.sin(a),r=Math.cos(a),l=ee(this.a,this.e,n),h=Math.tan(a)*Math.tan(a),c=s*Math.cos(a),d=c*c,g=this.es*r*r/(1-this.es),u=this.a*tt(this.e0,this.e1,this.e2,this.e3,a);t=l*c*(1-d*h*(1/6-(8-h+8*g)*d/120)),i=u-this.ml0+l*n/r*d*(.5+(5-h+6*g)*d/24)}return e.x=t+this.x0,e.y=i+this.y0,e}function ll(e){e.x-=this.x0,e.y-=this.y0;var t=e.x/this.a,i=e.y/this.a,s,a;if(this.sphere){var n=i+this.lat0;s=Math.asin(Math.sin(n)*Math.cos(t)),a=Math.atan2(Math.tan(t),Math.cos(n))}else{var r=this.ml0/this.a+i,l=Ye(r,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(l)-w)<=O)return e.x=this.long0,e.y=w,i<0&&(e.y*=-1),e;var h=ee(this.a,this.e,Math.sin(l)),c=h*h*h/this.a/this.a*(1-this.es),d=Math.pow(Math.tan(l),2),g=t*this.a/h,u=g*g;s=l-h*Math.tan(l)/c*g*g*(.5-(1+3*d)*g*g/24),a=g*(1-u*(d/3+(1+3*d)*d*u/15))/Math.cos(l)}return e.x=k(a+this.long0),e.y=se(s),e}var hl=["Cassini","Cassini_Soldner","cass"];const cl={init:ol,forward:rl,inverse:ll,names:hl};function _t(e,t){var i;return e>1e-7?(i=e*t,(1-e*e)*(t/(1-i*i)-.5/e*Math.log((1-i)/(1+i)))):2*t}var gl=1,ul=2,dl=3,Al=4;function ml(){var e=Math.abs(this.lat0);if(Math.abs(e-w)<O?this.mode=this.lat0<0?this.S_POLE:this.N_POLE:Math.abs(e)<O?this.mode=this.EQUIT:this.mode=this.OBLIQ,this.es>0){var t;switch(this.qp=_t(this.e,1),this.mmf=.5/(1-this.es),this.apa=wl(this.es),this.mode){case this.N_POLE:this.dd=1;break;case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=_t(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd;break}}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))}function Cl(e){var t,i,s,a,n,r,l,h,c,d,g=e.x,u=e.y;if(g=k(g-this.long0),this.sphere){if(n=Math.sin(u),d=Math.cos(u),s=Math.cos(g),this.mode===this.OBLIQ||this.mode===this.EQUIT){if(i=this.mode===this.EQUIT?1+d*s:1+this.sinph0*n+this.cosph0*d*s,i<=O)return null;i=Math.sqrt(2/i),t=i*d*Math.sin(g),i*=this.mode===this.EQUIT?n:this.cosph0*n-this.sinph0*d*s}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(s=-s),Math.abs(u+this.lat0)<O)return null;i=R-u*.5,i=2*(this.mode===this.S_POLE?Math.cos(i):Math.sin(i)),t=i*Math.sin(g),i*=s}}else{switch(l=0,h=0,c=0,s=Math.cos(g),a=Math.sin(g),n=Math.sin(u),r=_t(this.e,n),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(l=r/this.qp,h=Math.sqrt(1-l*l)),this.mode){case this.OBLIQ:c=1+this.sinb1*l+this.cosb1*h*s;break;case this.EQUIT:c=1+h*s;break;case this.N_POLE:c=w+u,r=this.qp-r;break;case this.S_POLE:c=u-w,r=this.qp+r;break}if(Math.abs(c)<O)return null;switch(this.mode){case this.OBLIQ:case this.EQUIT:c=Math.sqrt(2/c),this.mode===this.OBLIQ?i=this.ymf*c*(this.cosb1*l-this.sinb1*h*s):i=(c=Math.sqrt(2/(1+h*s)))*l*this.ymf,t=this.xmf*c*h*a;break;case this.N_POLE:case this.S_POLE:r>=0?(t=(c=Math.sqrt(r))*a,i=s*(this.mode===this.S_POLE?c:-c)):t=i=0;break}}return e.x=this.a*t+this.x0,e.y=this.a*i+this.y0,e}function fl(e){e.x-=this.x0,e.y-=this.y0;var t=e.x/this.a,i=e.y/this.a,s,a,n,r,l,h,c;if(this.sphere){var d=0,g,u=0;if(g=Math.sqrt(t*t+i*i),a=g*.5,a>1)return null;switch(a=2*Math.asin(a),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(u=Math.sin(a),d=Math.cos(a)),this.mode){case this.EQUIT:a=Math.abs(g)<=O?0:Math.asin(i*u/g),t*=u,i=d*g;break;case this.OBLIQ:a=Math.abs(g)<=O?this.lat0:Math.asin(d*this.sinph0+i*u*this.cosph0/g),t*=u*this.cosph0,i=(d-Math.sin(a)*this.sinph0)*g;break;case this.N_POLE:i=-i,a=w-a;break;case this.S_POLE:a-=w;break}s=i===0&&(this.mode===this.EQUIT||this.mode===this.OBLIQ)?0:Math.atan2(t,i)}else{if(c=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(t/=this.dd,i*=this.dd,h=Math.sqrt(t*t+i*i),h<O)return e.x=this.long0,e.y=this.lat0,e;r=2*Math.asin(.5*h/this.rq),n=Math.cos(r),t*=r=Math.sin(r),this.mode===this.OBLIQ?(c=n*this.sinb1+i*r*this.cosb1/h,l=this.qp*c,i=h*this.cosb1*n-i*this.sinb1*r):(c=i*r/h,l=this.qp*c,i=h*n)}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(i=-i),l=t*t+i*i,!l)return e.x=this.long0,e.y=this.lat0,e;c=1-l/this.qp,this.mode===this.S_POLE&&(c=-c)}s=Math.atan2(t,i),a=El(Math.asin(c),this.apa)}return e.x=k(this.long0+s),e.y=a,e}var Il=.3333333333333333,pl=.17222222222222222,vl=.10257936507936508,yl=.06388888888888888,bl=.0664021164021164,Ml=.016415012942191543;function wl(e){var t,i=[];return i[0]=e*Il,t=e*e,i[0]+=t*pl,i[1]=t*yl,t*=e,i[0]+=t*vl,i[1]+=t*bl,i[2]=t*Ml,i}function El(e,t){var i=e+e;return e+t[0]*Math.sin(i)+t[1]*Math.sin(i+i)+t[2]*Math.sin(i+i+i)}var _l=["Lambert Azimuthal Equal Area","Lambert_Azimuthal_Equal_Area","laea"];const Ol={init:ml,forward:Cl,inverse:fl,names:_l,S_POLE:gl,N_POLE:ul,EQUIT:dl,OBLIQ:Al};function xt(e){return Math.abs(e)>1&&(e=e>1?1:-1),Math.asin(e)}function xl(){Math.abs(this.lat1+this.lat2)<O||(this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e3=Math.sqrt(this.es),this.sin_po=Math.sin(this.lat1),this.cos_po=Math.cos(this.lat1),this.t1=this.sin_po,this.con=this.sin_po,this.ms1=yt(this.e3,this.sin_po,this.cos_po),this.qs1=_t(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat2),this.cos_po=Math.cos(this.lat2),this.t2=this.sin_po,this.ms2=yt(this.e3,this.sin_po,this.cos_po),this.qs2=_t(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat0),this.cos_po=Math.cos(this.lat0),this.t3=this.sin_po,this.qs0=_t(this.e3,this.sin_po),Math.abs(this.lat1-this.lat2)>O?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)}function kl(e){var t=e.x,i=e.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var s=_t(this.e3,this.sin_phi),a=this.a*Math.sqrt(this.c-this.ns0*s)/this.ns0,n=this.ns0*k(t-this.long0),r=a*Math.sin(n)+this.x0,l=this.rh-a*Math.cos(n)+this.y0;return e.x=r,e.y=l,e}function Sl(e){var t,i,s,a,n,r;return e.x-=this.x0,e.y=this.rh-e.y+this.y0,this.ns0>=0?(t=Math.sqrt(e.x*e.x+e.y*e.y),s=1):(t=-Math.sqrt(e.x*e.x+e.y*e.y),s=-1),a=0,t!==0&&(a=Math.atan2(s*e.x,s*e.y)),s=t*this.ns0/this.a,this.sphere?r=Math.asin((this.c-s*s)/(2*this.ns0)):(i=(this.c-s*s)/this.ns0,r=this.phi1z(this.e3,i)),n=k(a/this.ns0+this.long0),e.x=n,e.y=r,e}function Nl(e,t){var i,s,a,n,r,l=xt(.5*t);if(e<O)return l;for(var h=e*e,c=1;c<=25;c++)if(i=Math.sin(l),s=Math.cos(l),a=e*i,n=1-a*a,r=.5*n*n/s*(t/(1-h)-i/n+.5/e*Math.log((1-a)/(1+a))),l=l+r,Math.abs(r)<=1e-7)return l;return null}var Ll=["Albers_Conic_Equal_Area","Albers","aea"];const Pl={init:xl,forward:kl,inverse:Sl,names:Ll,phi1z:Nl};function Tl(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1}function Dl(e){var t,i,s,a,n,r,l,h,c=e.x,d=e.y;return s=k(c-this.long0),t=Math.sin(d),i=Math.cos(d),a=Math.cos(s),r=this.sin_p14*t+this.cos_p14*i*a,n=1,r>0||Math.abs(r)<=O?(l=this.x0+this.a*n*i*Math.sin(s)/r,h=this.y0+this.a*n*(this.cos_p14*t-this.sin_p14*i*a)/r):(l=this.x0+this.infinity_dist*i*Math.sin(s),h=this.y0+this.infinity_dist*(this.cos_p14*t-this.sin_p14*i*a)),e.x=l,e.y=h,e}function Bl(e){var t,i,s,a,n,r;return e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,(t=Math.sqrt(e.x*e.x+e.y*e.y))?(a=Math.atan2(t,this.rc),i=Math.sin(a),s=Math.cos(a),r=xt(s*this.sin_p14+e.y*i*this.cos_p14/t),n=Math.atan2(e.x*i,t*this.cos_p14*s-e.y*this.sin_p14*i),n=k(this.long0+n)):(r=this.phic0,n=0),e.x=n,e.y=r,e}var Vl=["gnom"];const Rl={init:Tl,forward:Dl,inverse:Bl,names:Vl};function Fl(e,t){var i=1-(1-e*e)/(2*e)*Math.log((1-e)/(1+e));if(Math.abs(Math.abs(t)-i)<1e-6)return t<0?-1*w:w;for(var s=Math.asin(.5*t),a,n,r,l,h=0;h<30;h++)if(n=Math.sin(s),r=Math.cos(s),l=e*n,a=Math.pow(1-l*l,2)/(2*r)*(t/(1-e*e)-n/(1-l*l)+.5/e*Math.log((1-l)/(1+l))),s+=a,Math.abs(a)<=1e-10)return s;return NaN}function Ul(){this.sphere||(this.k0=yt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))}function zl(e){var t=e.x,i=e.y,s,a,n=k(t-this.long0);if(this.sphere)s=this.x0+this.a*n*Math.cos(this.lat_ts),a=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var r=_t(this.e,Math.sin(i));s=this.x0+this.a*this.k0*n,a=this.y0+this.a*r*.5/this.k0}return e.x=s,e.y=a,e}function jl(e){e.x-=this.x0,e.y-=this.y0;var t,i;return this.sphere?(t=k(this.long0+e.x/this.a/Math.cos(this.lat_ts)),i=Math.asin(e.y/this.a*Math.cos(this.lat_ts))):(i=Fl(this.e,2*e.y*this.k0/this.a),t=k(this.long0+e.x/(this.a*this.k0))),e.x=t,e.y=i,e}var Gl=["cea"];const Hl={init:Ul,forward:zl,inverse:jl,names:Gl};function Zl(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)}function Wl(e){var t=e.x,i=e.y,s=k(t-this.long0),a=se(i-this.lat0);return e.x=this.x0+this.a*s*this.rc,e.y=this.y0+this.a*a,e}function ql(e){var t=e.x,i=e.y;return e.x=k(this.long0+(t-this.x0)/(this.a*this.rc)),e.y=se(this.lat0+(i-this.y0)/this.a),e}var Yl=["Equirectangular","Equidistant_Cylindrical","eqc"];const Jl={init:Zl,forward:Wl,inverse:ql,names:Yl};var Cs=20;function Xl(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=we(this.es),this.e1=Ee(this.es),this.e2=_e(this.es),this.e3=Oe(this.es),this.ml0=this.a*tt(this.e0,this.e1,this.e2,this.e3,this.lat0)}function Kl(e){var t=e.x,i=e.y,s,a,n,r=k(t-this.long0);if(n=r*Math.sin(i),this.sphere)Math.abs(i)<=O?(s=this.a*r,a=-1*this.a*this.lat0):(s=this.a*Math.sin(n)/Math.tan(i),a=this.a*(se(i-this.lat0)+(1-Math.cos(n))/Math.tan(i)));else if(Math.abs(i)<=O)s=this.a*r,a=-1*this.ml0;else{var l=ee(this.a,this.e,Math.sin(i))/Math.tan(i);s=l*Math.sin(n),a=this.a*tt(this.e0,this.e1,this.e2,this.e3,i)-this.ml0+l*(1-Math.cos(n))}return e.x=s+this.x0,e.y=a+this.y0,e}function Ql(e){var t,i,s,a,n,r,l,h,c;if(s=e.x-this.x0,a=e.y-this.y0,this.sphere)if(Math.abs(a+this.a*this.lat0)<=O)t=k(s/this.a+this.long0),i=0;else{r=this.lat0+a/this.a,l=s*s/this.a/this.a+r*r,h=r;var d;for(n=Cs;n;--n)if(d=Math.tan(h),c=-1*(r*(h*d+1)-h-.5*(h*h+l)*d)/((h-r)/d-1),h+=c,Math.abs(c)<=O){i=h;break}t=k(this.long0+Math.asin(s*Math.tan(h)/this.a)/Math.sin(i))}else if(Math.abs(a+this.ml0)<=O)i=0,t=k(this.long0+s/this.a);else{r=(this.ml0+a)/this.a,l=s*s/this.a/this.a+r*r,h=r;var g,u,f,m,C;for(n=Cs;n;--n)if(C=this.e*Math.sin(h),g=Math.sqrt(1-C*C)*Math.tan(h),u=this.a*tt(this.e0,this.e1,this.e2,this.e3,h),f=this.e0-2*this.e1*Math.cos(2*h)+4*this.e2*Math.cos(4*h)-6*this.e3*Math.cos(6*h),m=u/this.a,c=(r*(g*m+1)-m-.5*g*(m*m+l))/(this.es*Math.sin(2*h)*(m*m+l-2*r*m)/(4*g)+(r-m)*(g*f-2/Math.sin(2*h))-f),h-=c,Math.abs(c)<=O){i=h;break}g=Math.sqrt(1-this.es*Math.pow(Math.sin(i),2))*Math.tan(i),t=k(this.long0+Math.asin(s*g/this.a)/Math.sin(i))}return e.x=t,e.y=i,e}var $l=["Polyconic","poly"];const th={init:Xl,forward:Kl,inverse:Ql,names:$l};function eh(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013}function ih(e){var t,i=e.x,s=e.y,a=s-this.lat0,n=i-this.long0,r=a/Ie*1e-5,l=n,h=1,c=0;for(t=1;t<=10;t++)h=h*r,c=c+this.A[t]*h;var d=c,g=l,u=1,f=0,m,C,v=0,I=0;for(t=1;t<=6;t++)m=u*d-f*g,C=f*d+u*g,u=m,f=C,v=v+this.B_re[t]*u-this.B_im[t]*f,I=I+this.B_im[t]*u+this.B_re[t]*f;return e.x=I*this.a+this.x0,e.y=v*this.a+this.y0,e}function sh(e){var t,i=e.x,s=e.y,a=i-this.x0,n=s-this.y0,r=n/this.a,l=a/this.a,h=1,c=0,d,g,u=0,f=0;for(t=1;t<=6;t++)d=h*r-c*l,g=c*r+h*l,h=d,c=g,u=u+this.C_re[t]*h-this.C_im[t]*c,f=f+this.C_im[t]*h+this.C_re[t]*c;for(var m=0;m<this.iterations;m++){var C=u,v=f,I,b,M=r,_=l;for(t=2;t<=6;t++)I=C*u-v*f,b=v*u+C*f,C=I,v=b,M=M+(t-1)*(this.B_re[t]*C-this.B_im[t]*v),_=_+(t-1)*(this.B_im[t]*C+this.B_re[t]*v);C=1,v=0;var x=this.B_re[1],E=this.B_im[1];for(t=2;t<=6;t++)I=C*u-v*f,b=v*u+C*f,C=I,v=b,x=x+t*(this.B_re[t]*C-this.B_im[t]*v),E=E+t*(this.B_im[t]*C+this.B_re[t]*v);var S=x*x+E*E;u=(M*x+_*E)/S,f=(_*x-M*E)/S}var D=u,W=f,et=1,P=0;for(t=1;t<=9;t++)et=et*D,P=P+this.D[t]*et;var U=this.lat0+P*Ie*1e5,z=this.long0+W;return e.x=z,e.y=U,e}var ah=["New_Zealand_Map_Grid","nzmg"];const nh={init:eh,forward:ih,inverse:sh,names:ah};function oh(){}function rh(e){var t=e.x,i=e.y,s=k(t-this.long0),a=this.x0+this.a*s,n=this.y0+this.a*Math.log(Math.tan(Math.PI/4+i/2.5))*1.25;return e.x=a,e.y=n,e}function lh(e){e.x-=this.x0,e.y-=this.y0;var t=k(this.long0+e.x/this.a),i=2.5*(Math.atan(Math.exp(.8*e.y/this.a))-Math.PI/4);return e.x=t,e.y=i,e}var hh=["Miller_Cylindrical","mill"];const ch={init:oh,forward:rh,inverse:lh,names:hh};var gh=20;function uh(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=oa(this.es)}function dh(e){var t,i,s=e.x,a=e.y;if(s=k(s-this.long0),this.sphere){if(!this.m)a=this.n!==1?Math.asin(this.n*Math.sin(a)):a;else for(var n=this.n*Math.sin(a),r=gh;r;--r){var l=(this.m*a+Math.sin(a)-n)/(this.m+Math.cos(a));if(a-=l,Math.abs(l)<O)break}t=this.a*this.C_x*s*(this.m+Math.cos(a)),i=this.a*this.C_y*a}else{var h=Math.sin(a),c=Math.cos(a);i=this.a*ti(a,h,c,this.en),t=this.a*s*c/Math.sqrt(1-this.es*h*h)}return e.x=t,e.y=i,e}function Ah(e){var t,i,s,a;return e.x-=this.x0,s=e.x/this.a,e.y-=this.y0,t=e.y/this.a,this.sphere?(t/=this.C_y,s=s/(this.C_x*(this.m+Math.cos(t))),this.m?t=xt((this.m*t+Math.sin(t))/this.n):this.n!==1&&(t=xt(Math.sin(t)/this.n)),s=k(s+this.long0),t=se(t)):(t=ra(e.y/this.a,this.es,this.en),a=Math.abs(t),a<w?(a=Math.sin(t),i=this.long0+e.x*Math.sqrt(1-this.es*a*a)/(this.a*Math.cos(t)),s=k(i)):a-O<w&&(s=this.long0)),e.x=s,e.y=t,e}var mh=["Sinusoidal","sinu"];const Ch={init:uh,forward:dh,inverse:Ah,names:mh};function fh(){}function Ih(e){for(var t=e.x,i=e.y,s=k(t-this.long0),a=i,n=Math.PI*Math.sin(i);;){var r=-(a+Math.sin(a)-n)/(1+Math.cos(a));if(a+=r,Math.abs(r)<O)break}a/=2,Math.PI/2-Math.abs(i)<O&&(s=0);var l=.900316316158*this.a*s*Math.cos(a)+this.x0,h=1.4142135623731*this.a*Math.sin(a)+this.y0;return e.x=l,e.y=h,e}function ph(e){var t,i;e.x-=this.x0,e.y-=this.y0,i=e.y/(1.4142135623731*this.a),Math.abs(i)>.999999999999&&(i=.999999999999),t=Math.asin(i);var s=k(this.long0+e.x/(.900316316158*this.a*Math.cos(t)));s<-Math.PI&&(s=-Math.PI),s>Math.PI&&(s=Math.PI),i=(2*t+Math.sin(2*t))/Math.PI,Math.abs(i)>1&&(i=1);var a=Math.asin(i);return e.x=s,e.y=a,e}var vh=["Mollweide","moll"];const yh={init:fh,forward:Ih,inverse:ph,names:vh};function bh(){Math.abs(this.lat1+this.lat2)<O||(this.lat2=this.lat2||this.lat1,this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=we(this.es),this.e1=Ee(this.es),this.e2=_e(this.es),this.e3=Oe(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=yt(this.e,this.sinphi,this.cosphi),this.ml1=tt(this.e0,this.e1,this.e2,this.e3,this.lat1),Math.abs(this.lat1-this.lat2)<O?this.ns=this.sinphi:(this.sinphi=Math.sin(this.lat2),this.cosphi=Math.cos(this.lat2),this.ms2=yt(this.e,this.sinphi,this.cosphi),this.ml2=tt(this.e0,this.e1,this.e2,this.e3,this.lat2),this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1)),this.g=this.ml1+this.ms1/this.ns,this.ml0=tt(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0))}function Mh(e){var t=e.x,i=e.y,s;if(this.sphere)s=this.a*(this.g-i);else{var a=tt(this.e0,this.e1,this.e2,this.e3,i);s=this.a*(this.g-a)}var n=this.ns*k(t-this.long0),r=this.x0+s*Math.sin(n),l=this.y0+this.rh-s*Math.cos(n);return e.x=r,e.y=l,e}function wh(e){e.x-=this.x0,e.y=this.rh-e.y+this.y0;var t,i,s,a;this.ns>=0?(i=Math.sqrt(e.x*e.x+e.y*e.y),t=1):(i=-Math.sqrt(e.x*e.x+e.y*e.y),t=-1);var n=0;if(i!==0&&(n=Math.atan2(t*e.x,t*e.y)),this.sphere)return a=k(this.long0+n/this.ns),s=se(this.g-i/this.a),e.x=a,e.y=s,e;var r=this.g-i/this.a;return s=Ye(r,this.e0,this.e1,this.e2,this.e3),a=k(this.long0+n/this.ns),e.x=a,e.y=s,e}var Eh=["Equidistant_Conic","eqdc"];const _h={init:bh,forward:Mh,inverse:wh,names:Eh};function Oh(){this.R=this.a}function xh(e){var t=e.x,i=e.y,s=k(t-this.long0),a,n;Math.abs(i)<=O&&(a=this.x0+this.R*s,n=this.y0);var r=xt(2*Math.abs(i/Math.PI));(Math.abs(s)<=O||Math.abs(Math.abs(i)-w)<=O)&&(a=this.x0,i>=0?n=this.y0+Math.PI*this.R*Math.tan(.5*r):n=this.y0+Math.PI*this.R*-Math.tan(.5*r));var l=.5*Math.abs(Math.PI/s-s/Math.PI),h=l*l,c=Math.sin(r),d=Math.cos(r),g=d/(c+d-1),u=g*g,f=g*(2/c-1),m=f*f,C=Math.PI*this.R*(l*(g-m)+Math.sqrt(h*(g-m)*(g-m)-(m+h)*(u-m)))/(m+h);s<0&&(C=-C),a=this.x0+C;var v=h+g;return C=Math.PI*this.R*(f*v-l*Math.sqrt((m+h)*(h+1)-v*v))/(m+h),i>=0?n=this.y0+C:n=this.y0-C,e.x=a,e.y=n,e}function kh(e){var t,i,s,a,n,r,l,h,c,d,g,u,f;return e.x-=this.x0,e.y-=this.y0,g=Math.PI*this.R,s=e.x/g,a=e.y/g,n=s*s+a*a,r=-Math.abs(a)*(1+n),l=r-2*a*a+s*s,h=-2*r+1+2*a*a+n*n,f=a*a/h+(2*l*l*l/h/h/h-9*r*l/h/h)/27,c=(r-l*l/3/h)/h,d=2*Math.sqrt(-c/3),g=3*f/c/d,Math.abs(g)>1&&(g>=0?g=1:g=-1),u=Math.acos(g)/3,e.y>=0?i=(-d*Math.cos(u+Math.PI/3)-l/3/h)*Math.PI:i=-(-d*Math.cos(u+Math.PI/3)-l/3/h)*Math.PI,Math.abs(s)<O?t=this.long0:t=k(this.long0+Math.PI*(n-1+Math.sqrt(1+2*(s*s-a*a)+n*n))/2/s),e.x=t,e.y=i,e}var Sh=["Van_der_Grinten_I","VanDerGrinten","vandg"];const Nh={init:Oh,forward:xh,inverse:kh,names:Sh};function Lh(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)}function Ph(e){var t=e.x,i=e.y,s=Math.sin(e.y),a=Math.cos(e.y),n=k(t-this.long0),r,l,h,c,d,g,u,f,m,C,v,I,b,M,_,x,E,S,D,W,et,P,U;return this.sphere?Math.abs(this.sin_p12-1)<=O?(e.x=this.x0+this.a*(w-i)*Math.sin(n),e.y=this.y0-this.a*(w-i)*Math.cos(n),e):Math.abs(this.sin_p12+1)<=O?(e.x=this.x0+this.a*(w+i)*Math.sin(n),e.y=this.y0+this.a*(w+i)*Math.cos(n),e):(S=this.sin_p12*s+this.cos_p12*a*Math.cos(n),x=Math.acos(S),E=x?x/Math.sin(x):1,e.x=this.x0+this.a*E*a*Math.sin(n),e.y=this.y0+this.a*E*(this.cos_p12*s-this.sin_p12*a*Math.cos(n)),e):(r=we(this.es),l=Ee(this.es),h=_e(this.es),c=Oe(this.es),Math.abs(this.sin_p12-1)<=O?(d=this.a*tt(r,l,h,c,w),g=this.a*tt(r,l,h,c,i),e.x=this.x0+(d-g)*Math.sin(n),e.y=this.y0-(d-g)*Math.cos(n),e):Math.abs(this.sin_p12+1)<=O?(d=this.a*tt(r,l,h,c,w),g=this.a*tt(r,l,h,c,i),e.x=this.x0+(d+g)*Math.sin(n),e.y=this.y0+(d+g)*Math.cos(n),e):(u=s/a,f=ee(this.a,this.e,this.sin_p12),m=ee(this.a,this.e,s),C=Math.atan((1-this.es)*u+this.es*f*this.sin_p12/(m*a)),v=Math.atan2(Math.sin(n),this.cos_p12*Math.tan(C)-this.sin_p12*Math.cos(n)),v===0?D=Math.asin(this.cos_p12*Math.sin(C)-this.sin_p12*Math.cos(C)):Math.abs(Math.abs(v)-Math.PI)<=O?D=-Math.asin(this.cos_p12*Math.sin(C)-this.sin_p12*Math.cos(C)):D=Math.asin(Math.sin(n)*Math.cos(C)/Math.sin(v)),I=this.e*this.sin_p12/Math.sqrt(1-this.es),b=this.e*this.cos_p12*Math.cos(v)/Math.sqrt(1-this.es),M=I*b,_=b*b,W=D*D,et=W*D,P=et*D,U=P*D,x=f*D*(1-W*_*(1-_)/6+et/8*M*(1-2*_)+P/120*(_*(4-7*_)-3*I*I*(1-7*_))-U/48*M),e.x=this.x0+x*Math.sin(v),e.y=this.y0+x*Math.cos(v),e))}function Th(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,n,r,l,h,c,d,g,u,f,m,C,v,I,b,M,_,x,E,S,D;return this.sphere?(t=Math.sqrt(e.x*e.x+e.y*e.y),t>2*w*this.a?void 0:(i=t/this.a,s=Math.sin(i),a=Math.cos(i),n=this.long0,Math.abs(t)<=O?r=this.lat0:(r=xt(a*this.sin_p12+e.y*s*this.cos_p12/t),l=Math.abs(this.lat0)-w,Math.abs(l)<=O?this.lat0>=0?n=k(this.long0+Math.atan2(e.x,-e.y)):n=k(this.long0-Math.atan2(-e.x,e.y)):n=k(this.long0+Math.atan2(e.x*s,t*this.cos_p12*a-e.y*this.sin_p12*s))),e.x=n,e.y=r,e)):(h=we(this.es),c=Ee(this.es),d=_e(this.es),g=Oe(this.es),Math.abs(this.sin_p12-1)<=O?(u=this.a*tt(h,c,d,g,w),t=Math.sqrt(e.x*e.x+e.y*e.y),f=u-t,r=Ye(f/this.a,h,c,d,g),n=k(this.long0+Math.atan2(e.x,-1*e.y)),e.x=n,e.y=r,e):Math.abs(this.sin_p12+1)<=O?(u=this.a*tt(h,c,d,g,w),t=Math.sqrt(e.x*e.x+e.y*e.y),f=t-u,r=Ye(f/this.a,h,c,d,g),n=k(this.long0+Math.atan2(e.x,e.y)),e.x=n,e.y=r,e):(t=Math.sqrt(e.x*e.x+e.y*e.y),v=Math.atan2(e.x,e.y),m=ee(this.a,this.e,this.sin_p12),I=Math.cos(v),b=this.e*this.cos_p12*I,M=-b*b/(1-this.es),_=3*this.es*(1-M)*this.sin_p12*this.cos_p12*I/(1-this.es),x=t/m,E=x-M*(1+M)*Math.pow(x,3)/6-_*(1+3*M)*Math.pow(x,4)/24,S=1-M*E*E/2-x*E*E*E/6,C=Math.asin(this.sin_p12*Math.cos(E)+this.cos_p12*Math.sin(E)*I),n=k(this.long0+Math.asin(Math.sin(v)*Math.sin(E)/Math.cos(C))),D=Math.sin(C),r=Math.atan2((D-this.es*S*this.sin_p12)*Math.tan(C),D*(1-this.es)),e.x=n,e.y=r,e))}var Dh=["Azimuthal_Equidistant","aeqd"];const Bh={init:Lh,forward:Ph,inverse:Th,names:Dh};function Vh(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)}function Rh(e){var t,i,s,a,n,r,l,h,c=e.x,d=e.y;return s=k(c-this.long0),t=Math.sin(d),i=Math.cos(d),a=Math.cos(s),r=this.sin_p14*t+this.cos_p14*i*a,n=1,(r>0||Math.abs(r)<=O)&&(l=this.a*n*i*Math.sin(s),h=this.y0+this.a*n*(this.cos_p14*t-this.sin_p14*i*a)),e.x=l,e.y=h,e}function Fh(e){var t,i,s,a,n,r,l;return e.x-=this.x0,e.y-=this.y0,t=Math.sqrt(e.x*e.x+e.y*e.y),i=xt(t/this.a),s=Math.sin(i),a=Math.cos(i),r=this.long0,Math.abs(t)<=O?(l=this.lat0,e.x=r,e.y=l,e):(l=xt(a*this.sin_p14+e.y*s*this.cos_p14/t),n=Math.abs(this.lat0)-w,Math.abs(n)<=O?(this.lat0>=0?r=k(this.long0+Math.atan2(e.x,-e.y)):r=k(this.long0-Math.atan2(-e.x,e.y)),e.x=r,e.y=l,e):(r=k(this.long0+Math.atan2(e.x*s,t*this.cos_p14*a-e.y*this.sin_p14*s)),e.x=r,e.y=l,e))}var Uh=["ortho"];const zh={init:Vh,forward:Rh,inverse:Fh,names:Uh};var H={FRONT:1,RIGHT:2,BACK:3,LEFT:4,TOP:5,BOTTOM:6},F={AREA_0:1,AREA_1:2,AREA_2:3,AREA_3:4};function jh(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=w-R/2?this.face=H.TOP:this.lat0<=-(w-R/2)?this.face=H.BOTTOM:Math.abs(this.long0)<=R?this.face=H.FRONT:Math.abs(this.long0)<=w+R?this.face=this.long0>0?H.RIGHT:H.LEFT:this.face=H.BACK,this.es!==0&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)}function Gh(e){var t={x:0,y:0},i,s,a,n,r,l,h={value:0};if(e.x-=this.long0,this.es!==0?i=Math.atan(this.one_minus_f_squared*Math.tan(e.y)):i=e.y,s=e.x,this.face===H.TOP)n=w-i,s>=R&&s<=w+R?(h.value=F.AREA_0,a=s-w):s>w+R||s<=-(w+R)?(h.value=F.AREA_1,a=s>0?s-Z:s+Z):s>-(w+R)&&s<=-R?(h.value=F.AREA_2,a=s+w):(h.value=F.AREA_3,a=s);else if(this.face===H.BOTTOM)n=w+i,s>=R&&s<=w+R?(h.value=F.AREA_0,a=-s+w):s<R&&s>=-R?(h.value=F.AREA_1,a=-s):s<-R&&s>=-(w+R)?(h.value=F.AREA_2,a=-s-w):(h.value=F.AREA_3,a=s>0?-s+Z:-s-Z);else{var c,d,g,u,f,m,C;this.face===H.RIGHT?s=Qt(s,+w):this.face===H.BACK?s=Qt(s,+Z):this.face===H.LEFT&&(s=Qt(s,-w)),u=Math.sin(i),f=Math.cos(i),m=Math.sin(s),C=Math.cos(s),c=f*C,d=f*m,g=u,this.face===H.FRONT?(n=Math.acos(c),a=ke(n,g,d,h)):this.face===H.RIGHT?(n=Math.acos(d),a=ke(n,g,-c,h)):this.face===H.BACK?(n=Math.acos(-c),a=ke(n,g,-d,h)):this.face===H.LEFT?(n=Math.acos(-d),a=ke(n,g,c,h)):(n=a=0,h.value=F.AREA_0)}return l=Math.atan(12/Z*(a+Math.acos(Math.sin(a)*Math.cos(R))-w)),r=Math.sqrt((1-Math.cos(n))/(Math.cos(l)*Math.cos(l))/(1-Math.cos(Math.atan(1/Math.cos(a))))),h.value===F.AREA_1?l+=w:h.value===F.AREA_2?l+=Z:h.value===F.AREA_3&&(l+=1.5*Z),t.x=r*Math.cos(l),t.y=r*Math.sin(l),t.x=t.x*this.a+this.x0,t.y=t.y*this.a+this.y0,e.x=t.x,e.y=t.y,e}function Hh(e){var t={lam:0,phi:0},i,s,a,n,r,l,h,c,d,g={value:0};if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,s=Math.atan(Math.sqrt(e.x*e.x+e.y*e.y)),i=Math.atan2(e.y,e.x),e.x>=0&&e.x>=Math.abs(e.y)?g.value=F.AREA_0:e.y>=0&&e.y>=Math.abs(e.x)?(g.value=F.AREA_1,i-=w):e.x<0&&-e.x>=Math.abs(e.y)?(g.value=F.AREA_2,i=i<0?i+Z:i-Z):(g.value=F.AREA_3,i+=w),d=Z/12*Math.tan(i),r=Math.sin(d)/(Math.cos(d)-1/Math.sqrt(2)),l=Math.atan(r),a=Math.cos(i),n=Math.tan(s),h=1-a*a*n*n*(1-Math.cos(Math.atan(1/Math.cos(l)))),h<-1?h=-1:h>1&&(h=1),this.face===H.TOP)c=Math.acos(h),t.phi=w-c,g.value===F.AREA_0?t.lam=l+w:g.value===F.AREA_1?t.lam=l<0?l+Z:l-Z:g.value===F.AREA_2?t.lam=l-w:t.lam=l;else if(this.face===H.BOTTOM)c=Math.acos(h),t.phi=c-w,g.value===F.AREA_0?t.lam=-l+w:g.value===F.AREA_1?t.lam=-l:g.value===F.AREA_2?t.lam=-l-w:t.lam=l<0?-l-Z:-l+Z;else{var u,f,m;u=h,d=u*u,d>=1?m=0:m=Math.sqrt(1-d)*Math.sin(l),d+=m*m,d>=1?f=0:f=Math.sqrt(1-d),g.value===F.AREA_1?(d=f,f=-m,m=d):g.value===F.AREA_2?(f=-f,m=-m):g.value===F.AREA_3&&(d=f,f=m,m=-d),this.face===H.RIGHT?(d=u,u=-f,f=d):this.face===H.BACK?(u=-u,f=-f):this.face===H.LEFT&&(d=u,u=f,f=-d),t.phi=Math.acos(-m)-w,t.lam=Math.atan2(f,u),this.face===H.RIGHT?t.lam=Qt(t.lam,-w):this.face===H.BACK?t.lam=Qt(t.lam,-Z):this.face===H.LEFT&&(t.lam=Qt(t.lam,+w))}if(this.es!==0){var C,v,I;C=t.phi<0?1:0,v=Math.tan(t.phi),I=this.b/Math.sqrt(v*v+this.one_minus_f_squared),t.phi=Math.atan(Math.sqrt(this.a*this.a-I*I)/(this.one_minus_f*I)),C&&(t.phi=-t.phi)}return t.lam+=this.long0,e.x=t.lam,e.y=t.phi,e}function ke(e,t,i,s){var a;return e<O?(s.value=F.AREA_0,a=0):(a=Math.atan2(t,i),Math.abs(a)<=R?s.value=F.AREA_0:a>R&&a<=w+R?(s.value=F.AREA_1,a-=w):a>w+R||a<=-(w+R)?(s.value=F.AREA_2,a=a>=0?a-Z:a+Z):(s.value=F.AREA_3,a+=w)),a}function Qt(e,t){var i=e+t;return i<-Z?i+=pe:i>+Z&&(i-=pe),i}var Zh=["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"];const Wh={init:jh,forward:Gh,inverse:Hh,names:Zh};var xi=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-986701e-12],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,18736e-12],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,934959e-12],[.7986,-.00755338,-500009e-10,935324e-12],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],Ce=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-126793e-14,422642e-15],[.124,.0124,507171e-14,-160604e-14],[.186,.0123999,-190189e-13,600152e-14],[.248,.0124002,710039e-13,-224e-10],[.31,.0123992,-264997e-12,835986e-13],[.372,.0124029,988983e-12,-311994e-12],[.434,.0123893,-369093e-11,-435621e-12],[.4958,.0123198,-102252e-10,-345523e-12],[.5571,.0121916,-154081e-10,-582288e-12],[.6176,.0119938,-241424e-10,-525327e-12],[.6769,.011713,-320223e-10,-516405e-12],[.7346,.0113541,-397684e-10,-609052e-12],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-140374e-14],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],ca=.8487,ga=1.3523,ua=pt/5,qh=1/ua,Xt=18,Je=function(e,t){return e[0]+t*(e[1]+t*(e[2]+t*e[3]))},Yh=function(e,t){return e[1]+t*(2*e[2]+t*3*e[3])};function Jh(e,t,i,s){for(var a=t;s;--s){var n=e(a);if(a-=n,Math.abs(n)<i)break}return a}function Xh(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"}function Kh(e){var t=k(e.x-this.long0),i=Math.abs(e.y),s=Math.floor(i*ua);s<0?s=0:s>=Xt&&(s=Xt-1),i=pt*(i-qh*s);var a={x:Je(xi[s],i)*t,y:Je(Ce[s],i)};return e.y<0&&(a.y=-a.y),a.x=a.x*this.a*ca+this.x0,a.y=a.y*this.a*ga+this.y0,a}function Qh(e){var t={x:(e.x-this.x0)/(this.a*ca),y:Math.abs(e.y-this.y0)/(this.a*ga)};if(t.y>=1)t.x/=xi[Xt][0],t.y=e.y<0?-w:w;else{var i=Math.floor(t.y*Xt);for(i<0?i=0:i>=Xt&&(i=Xt-1);;)if(Ce[i][0]>t.y)--i;else if(Ce[i+1][0]<=t.y)++i;else break;var s=Ce[i],a=5*(t.y-s[0])/(Ce[i+1][0]-s[0]);a=Jh(function(n){return(Je(s,n)-t.y)/Yh(s,n)},a,O,100),t.x/=Je(xi[i],a),t.y=(5*i+a)*J,e.y<0&&(t.y=-t.y)}return t.x=k(t.x+this.long0),t}var $h=["Robinson","robin"];const tc={init:Xh,forward:Kh,inverse:Qh,names:$h};function ec(){this.name="geocent"}function ic(e){var t=Ks(e,this.es,this.a);return t}function sc(e){var t=Qs(e,this.es,this.a,this.b);return t}var ac=["Geocentric","geocentric","geocent","Geocent"];const nc={init:ec,forward:ic,inverse:sc,names:ac};var K={N_POLE:0,S_POLE:1,EQUIT:2,OBLIQ:3},oe={h:{def:1e5,num:!0},azi:{def:0,num:!0,degrees:!0},tilt:{def:0,num:!0,degrees:!0},long0:{def:0,num:!0},lat0:{def:0,num:!0}};function oc(){if(Object.keys(oe).forEach((function(i){if(typeof this[i]>"u")this[i]=oe[i].def;else{if(oe[i].num&&isNaN(this[i]))throw new Error("Invalid parameter value, must be numeric "+i+" = "+this[i]);oe[i].num&&(this[i]=parseFloat(this[i]))}oe[i].degrees&&(this[i]=this[i]*J)}).bind(this)),Math.abs(Math.abs(this.lat0)-w)<O?this.mode=this.lat0<0?K.S_POLE:K.N_POLE:Math.abs(this.lat0)<O?this.mode=K.EQUIT:(this.mode=K.OBLIQ,this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0)),this.pn1=this.h/this.a,this.pn1<=0||this.pn1>1e10)throw new Error("Invalid height");this.p=1+this.pn1,this.rp=1/this.p,this.h1=1/this.pn1,this.pfact=(this.p+1)*this.h1,this.es=0;var e=this.tilt,t=this.azi;this.cg=Math.cos(t),this.sg=Math.sin(t),this.cw=Math.cos(e),this.sw=Math.sin(e)}function rc(e){e.x-=this.long0;var t=Math.sin(e.y),i=Math.cos(e.y),s=Math.cos(e.x),a,n;switch(this.mode){case K.OBLIQ:n=this.sinph0*t+this.cosph0*i*s;break;case K.EQUIT:n=i*s;break;case K.S_POLE:n=-t;break;case K.N_POLE:n=t;break}switch(n=this.pn1/(this.p-n),a=n*i*Math.sin(e.x),this.mode){case K.OBLIQ:n*=this.cosph0*t-this.sinph0*i*s;break;case K.EQUIT:n*=t;break;case K.N_POLE:n*=-(i*s);break;case K.S_POLE:n*=i*s;break}var r,l;return r=n*this.cg+a*this.sg,l=1/(r*this.sw*this.h1+this.cw),a=(a*this.cg-n*this.sg)*this.cw*l,n=r*l,e.x=a*this.a,e.y=n*this.a,e}function lc(e){e.x/=this.a,e.y/=this.a;var t={x:e.x,y:e.y},i,s,a;a=1/(this.pn1-e.y*this.sw),i=this.pn1*e.x*a,s=this.pn1*e.y*this.cw*a,e.x=i*this.cg+s*this.sg,e.y=s*this.cg-i*this.sg;var n=mt(e.x,e.y);if(Math.abs(n)<O)t.x=0,t.y=e.y;else{var r,l;switch(l=1-n*n*this.pfact,l=(this.p-Math.sqrt(l))/(this.pn1/n+n/this.pn1),r=Math.sqrt(1-l*l),this.mode){case K.OBLIQ:t.y=Math.asin(r*this.sinph0+e.y*l*this.cosph0/n),e.y=(r-this.sinph0*Math.sin(t.y))*n,e.x*=l*this.cosph0;break;case K.EQUIT:t.y=Math.asin(e.y*l/n),e.y=r*n,e.x*=l;break;case K.N_POLE:t.y=Math.asin(r),e.y=-e.y;break;case K.S_POLE:t.y=-Math.asin(r);break}t.x=Math.atan2(e.x,e.y)}return e.x=t.x+this.long0,e.y=t.y,e}var hc=["Tilted_Perspective","tpers"];const cc={init:oc,forward:rc,inverse:lc,names:hc};function gc(){if(this.flip_axis=this.sweep==="x"?1:0,this.h=Number(this.h),this.radius_g_1=this.h/this.a,this.radius_g_1<=0||this.radius_g_1>1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,this.es!==0){var e=1-this.es,t=1/e;this.radius_p=Math.sqrt(e),this.radius_p2=e,this.radius_p_inv2=t,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")}function uc(e){var t=e.x,i=e.y,s,a,n,r;if(t=t-this.long0,this.shape==="ellipse"){i=Math.atan(this.radius_p2*Math.tan(i));var l=this.radius_p/mt(this.radius_p*Math.cos(i),Math.sin(i));if(a=l*Math.cos(t)*Math.cos(i),n=l*Math.sin(t)*Math.cos(i),r=l*Math.sin(i),(this.radius_g-a)*a-n*n-r*r*this.radius_p_inv2<0)return e.x=Number.NaN,e.y=Number.NaN,e;s=this.radius_g-a,this.flip_axis?(e.x=this.radius_g_1*Math.atan(n/mt(r,s)),e.y=this.radius_g_1*Math.atan(r/s)):(e.x=this.radius_g_1*Math.atan(n/s),e.y=this.radius_g_1*Math.atan(r/mt(n,s)))}else this.shape==="sphere"&&(s=Math.cos(i),a=Math.cos(t)*s,n=Math.sin(t)*s,r=Math.sin(i),s=this.radius_g-a,this.flip_axis?(e.x=this.radius_g_1*Math.atan(n/mt(r,s)),e.y=this.radius_g_1*Math.atan(r/s)):(e.x=this.radius_g_1*Math.atan(n/s),e.y=this.radius_g_1*Math.atan(r/mt(n,s))));return e.x=e.x*this.a,e.y=e.y*this.a,e}function dc(e){var t=-1,i=0,s=0,a,n,r,l;if(e.x=e.x/this.a,e.y=e.y/this.a,this.shape==="ellipse"){this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),i=Math.tan(e.x/this.radius_g_1)*mt(1,s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*mt(1,i));var h=s/this.radius_p;if(a=i*i+h*h+t*t,n=2*this.radius_g*t,r=n*n-4*a*this.C,r<0)return e.x=Number.NaN,e.y=Number.NaN,e;l=(-n-Math.sqrt(r))/(2*a),t=this.radius_g+l*t,i*=l,s*=l,e.x=Math.atan2(i,t),e.y=Math.atan(s*Math.cos(e.x)/t),e.y=Math.atan(this.radius_p_inv2*Math.tan(e.y))}else if(this.shape==="sphere"){if(this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),i=Math.tan(e.x/this.radius_g_1)*Math.sqrt(1+s*s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*Math.sqrt(1+i*i)),a=i*i+s*s+t*t,n=2*this.radius_g*t,r=n*n-4*a*this.C,r<0)return e.x=Number.NaN,e.y=Number.NaN,e;l=(-n-Math.sqrt(r))/(2*a),t=this.radius_g+l*t,i*=l,s*=l,e.x=Math.atan2(i,t),e.y=Math.atan(s*Math.cos(e.x)/t)}return e.x=e.x+this.long0,e}var Ac=["Geostationary Satellite View","Geostationary_Satellite","geos"];const mc={init:gc,forward:uc,inverse:dc,names:Ac};function Cc(e){e.Proj.projections.add(Ve),e.Proj.projections.add(Re),e.Proj.projections.add(Mr),e.Proj.projections.add(Lr),e.Proj.projections.add(Rr),e.Proj.projections.add(Gr),e.Proj.projections.add(Jr),e.Proj.projections.add(tl),e.Proj.projections.add(nl),e.Proj.projections.add(cl),e.Proj.projections.add(Ol),e.Proj.projections.add(Pl),e.Proj.projections.add(Rl),e.Proj.projections.add(Hl),e.Proj.projections.add(Jl),e.Proj.projections.add(th),e.Proj.projections.add(nh),e.Proj.projections.add(ch),e.Proj.projections.add(Ch),e.Proj.projections.add(yh),e.Proj.projections.add(_h),e.Proj.projections.add(Nh),e.Proj.projections.add(Bh),e.Proj.projections.add(zh),e.Proj.projections.add(Wh),e.Proj.projections.add(tc),e.Proj.projections.add(nc),e.Proj.projections.add(cc),e.Proj.projections.add(mc)}lt.defaultDatum="WGS84";lt.Proj=vt;lt.WGS84=new lt.Proj("WGS84");lt.Point=te;lt.toPoint=$s;lt.defs=$;lt.nadgrid=Eo;lt.transform=qe;lt.mgrs=zo;lt.version="__VERSION__";Cc(lt);async function fc(e){let t=null;const i=[/EPSG:+(\d+)/,/http:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/,/https:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/];for(const s of i){const a=e.match(s);if(a!==null){t=a[1];break}}if(t!=null){const s=`EPSG:${t}`;if(lt.defs(s)===void 0){const a=await A.Fetcher.fetchText(`https://epsg.io/${t}.proj4`);Bi.registerCRS(s,a)}return s}throw new Error(`Could not find projection for ${e}`)}const ji={loadProjCrsIfNeeded:fc};async function Ic(e,t,i,s,a){const n=new A.Clock;n.start();const r=[],l=new Map;for(const h of e){const c=h.getGeometry(),d=c==null?void 0:c.getType();if(c==null||d==null)continue;const g=[],u=c.getFlatCoordinates(),f=c.getStride();if(!(f>=3&&u[2]!=null&&u[2]!==a)){for(let m=0;m<u.length;m+=f){const C=new at(t,u[m+0],u[m+1],f>=3?u[m+2]:a);g.push(C),r.push(C)}l.set(h.ol_uid,g)}}console.debug(`Fetching altitudes for ${r.length} coordinates from ${e.length} features...`),await i(r);for(const h of e){const c=l.get(h.ol_uid),d=h.getGeometry();if(!(d==null||c==null))switch(d.getType()){case"LineString":case"MultiPoint":{const g=d,u=g.getCoordinates();for(let f=0;f<u.length;f+=1)u[f][2]=c[f].values[2]+s;g.setCoordinates(u);break}case"MultiLineString":case"Polygon":{const g=d,u=g.getCoordinates();let f=0;for(let m=0;m<u.length;m+=1)for(let C=0;C<u[m].length;C+=1)u[m][C][2]=c[f].values[2]+s,f+=1;g.setCoordinates(u);break}case"MultiPolygon":{const g=d,u=g.getCoordinates();let f=0;for(let m=0;m<u.length;m+=1)for(let C=0;C<u[m].length;C+=1)for(let v=0;v<u[m][C].length;v+=1)u[m][C][v][2]=c[f].values[2]+s,f+=1;g.setCoordinates(u);break}case"Point":{const g=d,u=g.getCoordinates();u[2]=c[0].values[2]+s,g.setCoordinates(u);break}}}console.debug(`Fetched all missing altitudes in ${n.getElapsedTime()}s`),n.stop()}function pc(e,t,i){for(const s of e){const a=s.getGeometry();if(a==null)continue;const n=a.getStride(),r=a.getFlatCoordinates();if(!(n>=3&&r[2]!=null&&r[2]!==i))switch(a.getType()){case"LineString":case"MultiPoint":{const l=a,h=l.getCoordinates();for(let c=0;c<h.length;c+=1)h[c][2]=t;l.setCoordinates(h);break}case"MultiLineString":case"Polygon":{const l=a,h=l.getCoordinates();for(let c=0;c<h.length;c+=1)for(let d=0;d<h[c].length;d+=1)h[c][d][2]=t;l.setCoordinates(h);break}case"MultiPolygon":{const l=a,h=l.getCoordinates();for(let c=0;c<h.length;c+=1)for(let d=0;d<h[c].length;d+=1)for(let g=0;g<h[c][d].length;g+=1)h[c][d][g][2]=t;l.setCoordinates(h);break}case"Point":{const l=a,h=l.getCoordinates();h[2]=t,l.setCoordinates(h);break}}}}async function vc(e,t,i,s){const a=await ji.loadProjCrsIfNeeded(i??"EPSG:4326");return t.readFeatures(e,{dataProjection:a,featureProjection:s})}function yc(e,t,i,s){return da(t.readFeatures(e,{dataProjection:i,featureProjection:s}))}function bc(e,t){const i=new A.Group,s=new Ka,a=e.map(n=>{const r=n.getGeometry();if(r!=null){const l=r.getType();let h;switch(l){case"LineString":h=s.build(r);break;case"MultiLineString":h=s.build(r);break;case"MultiPoint":h=s.build(r);break;case"MultiPolygon":h=s.build(r,t);break;case"Point":h=s.build(r);break;case"Polygon":h=s.build(r,t);break;default:console.warn(`Unsupported type ${l}`),h=null}if(h)for(const[c,d]of Object.entries(n.getProperties()))c!=="geometry"&&(h.userData[c]=d);return h}});for(const n of a)n!=null&&i.add(n);return i}function da(e){return e.filter(t=>{var s;if("getType"in t)return!1;const i=(s=t.getGeometry())==null?void 0:s.getType();return!(i==null||!["LineString","MultiLineString","MultiPoint","MultiPolygon","Point","Polygon"].includes(i))})}const ie={fetchZCoordinates:Ic,fillZCoordinates:pc,readFeatures:vc,readSimpleFeatures:yc,toMeshes:bc,toSimpleFeatures:da},Mc=new Ya,wc=new Ja,Ec=new Xa,gt={dataProjection:"EPSG:4326",elevation:0,fetchElevation:!1,fetchElevationFast:!1,fetchElevationOffset:.1,noDataValue:0};class _c{constructor(t){p(this,"elevation");p(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await A.Fetcher.fetchJson(this.options.url),s=Sc(i);return await Hi(t,s,this.options)}}class Gi{constructor(t,i){p(this,"elevation");p(this,"format");p(this,"noDataValue");p(this,"options");this.format=t,this.options=i,this.elevation=i.elevation,this.noDataValue=i.noDataValue}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await A.Fetcher.fetchText(this.options.url);return await Nc(t,i,this.format,this.options)}}class Oc extends Gi{constructor(t){super(wc,t)}}class xc extends Gi{constructor(t){super(Ec,t)}}async function Hi(e,t,i){const s=await ji.loadProjCrsIfNeeded(i.dataProjection??gt.dataProjection),a=t.flatMap(l=>Mc.readFeatures(l,{dataProjection:s,featureProjection:i.featureProjection})),n=ie.toSimpleFeatures(a);if(i.fetchElevation??gt.fetchElevation){const l=i.fetchElevationFast??gt.fetchElevationFast,h=i.fetchElevationOffset??gt.fetchElevationOffset,c=i.noDataValue??gt.noDataValue;await ie.fetchZCoordinates(n,i.featureProjection,Us(e,l,c),h,c)}return n}function kc(e,t,i=gt.elevation,s=gt.noDataValue){const a=(Array.isArray(t==null?void 0:t.elevation)?t.elevation[0]:t==null?void 0:t.elevation)??i;return ie.fillZCoordinates(e,a,s),ie.toMeshes(e,t)}function Sc(e){switch(e.type){case"Feature":return[e];case"FeatureCollection":return e.features;case"GeometryCollection":return e.geometries.map(i=>({geometry:i,properties:{},type:"Feature"}));default:return[{geometry:e,properties:{},type:"Feature"}]}}async function Nc(e,t,i,s){const a=ie.readSimpleFeatures(t,i,s.dataProjection??gt.dataProjection,s.featureProjection);if(s.fetchElevation??gt.fetchElevation){const r=s.fetchElevationFast??gt.fetchElevationFast,l=s.fetchElevationOffset??gt.fetchElevationOffset,h=s.noDataValue??gt.noDataValue;await ie.fetchZCoordinates(a,s.featureProjection,Us(e,r,h),l,h)}return a}class Lc extends Di{constructor(i){super(new A.Group);p(this,"sources");this.sources=Array.isArray(i)?i:[i]}async preprocess(){for(const i of this.sources){const s=await i.load(this.instance),a=kc(s,{elevation:i.elevation,fill:{color:qi.DEFAULT_SURFACE_COLOR},stroke:{color:qi.DEFAULT_LINE_COLOR}},i.elevation,i.noDataValue);this.object3d.add(a),this.onObjectCreated(a);const n=i.context();A.fillObject3DUserData(a,{filename:n.filename})}this.notifyChange(this.object3d)}}async function Pc(e,t){const i=await Ti.load(e,qa.GeoPackageLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0}}),s=[];for(const[a,n]of Object.entries(i.tables))for(const r of n.table.features)r.properties||(r.properties={}),r.properties.table=a,s.push(r);return s}class Tc{constructor(t){p(this,"elevation");p(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await Pc(this.options.url,this.options.featureProjection);return await Hi(t,i,{...this.options,dataProjection:this.options.featureProjection})}}async function Dc(e,t){return(await Ti.load(e,Qa.ShapefileLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0},shapefile:{shape:"geojson-table"}})).features}class Bc{constructor(t){p(this,"elevation");p(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await Dc(this.options.url,this.options.featureProjection);return await Hi(t,i,{...this.options,dataProjection:this.options.featureProjection})}}class ki extends A.Object3D{constructor(t=document.createElement("div")){super(),this.isCSS2DObject=!0,this.element=t,this.element.style.position="absolute",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.center=new A.Vector2(.5,.5),this.addEventListener("removed",function(){this.traverse(function(i){i.element instanceof i.element.ownerDocument.defaultView.Element&&i.element.parentNode!==null&&i.element.remove()})})}copy(t,i){return super.copy(t,i),this.element=t.element.cloneNode(!0),this.center=t.center,this}}new A.Vector3;new A.Matrix4;new A.Matrix4;new A.Vector3;new A.Vector3;const Et="#377c5f",Vc="yellow",Rc="#ffd500",Fc="#73d1bd",Fe=5,Uc=new A.Vector2,Aa=new A.Color(Et),zc=new A.Color,gi=zc.copyLinearToSRGB(Aa),fs=`#${new A.Color($a.getContrastColor(Aa)).getHexString()}`,ui=12,jc="bold",di=[];class Gc extends Di{constructor(i,s){super(new A.Group);p(this,"sources");p(this,"_labels");p(this,"_styleCallback");p(this,"_textCallback");this.sources=Array.isArray(i)?i:[i],this._labels=[],this._textCallback=(s==null?void 0:s.text)||(()=>"P"),this._styleCallback=s==null?void 0:s.style}getBoundingBox(){const i=this._labels.map(a=>a.position);return new A.Box3().setFromPoints(i)}pick(i,s){const a=this.instance.canvasToNormalizedCoords(i,Uc),n=new A.Raycaster;n.setFromCamera(a,this.instance.view.camera);const r=this.pickLabels(n);return r?[{distance:r.position.distanceTo(n.ray.origin),entity:this,isLabelPickResult:!0,object:r,point:r.position}]:[]}updateOpacity(){const i=`${this.opacity*100}%`;this._labels.forEach(s=>s.element.style.opacity=i)}updateVisibility(){this.object3d.traverse(i=>{i.visible=this.visible})}async preprocess(){for(const i of this.sources){const s=await i.load(this.instance),a=new A.Group,n=i.elevation??0,r=h=>new A.Vector3(h[0],h[1],h[2]??n);for(const h of s){const c=h.getGeometry();if(c!=null){const d=c.getType(),g=[];switch(d){case"LineString":case"MultiPoint":g.push(...c.getCoordinates());break;case"MultiLineString":case"Polygon":g.push(...c.getCoordinates()[0]);break;case"MultiPolygon":g.push(...c.getCoordinates()[0][0]);break;case"Point":g.push(c.getCoordinates());break}if(g.length>0){const u=g.map(m=>this.createLabel(r(m),h)),f=new A.Group;u.forEach(m=>{f.add(m),this._labels.push(m)});for(const[m,C]of Object.entries(h.getProperties()))m!=="geometry"&&(f.userData[m]=C);a.add(f)}}}this.object3d.add(a),this.onObjectCreated(a);const l=i.context();A.fillObject3DUserData(a,{filename:l.filename})}this.notifyChange(this.object3d)}createLabel(i,s){const a=document.createElement("div"),n=document.createElement("span");this.updateStyle(n,s),n.innerText=this._textCallback(s,i);const r=document.createElement("div");a.appendChild(r),r.appendChild(n);const l=new ki(a);return l.position.copy(i),l.updateMatrix(),l.updateMatrixWorld(!0),a.addEventListener("mouseover",()=>l.userData.hover=!0),a.addEventListener("mouseleave",()=>l.userData.hover=!1),l}pickLabels(i){let s=null;return this._labels.forEach(a=>{s==null&&(di.length=0,this.raycastLabel(a,i,di),di.length>0&&(s=a))}),s}raycastLabel(i,s,a){i.userData.hover===!0&&a.push({distance:i.position.distanceTo(s.ray.origin),object:i,point:i.position})}updateStyle(i,s){i.style.backgroundColor=`rgb(${gi.r*255} ${gi.g*255} ${gi.b*255})`,i.style.borderWidth="1px",i.style.borderStyle="solid",i.style.borderColor=fs,i.style.borderRadius=`${A.MathUtils.clamp(ui-4,5,10)}px`,i.style.color=fs;const a=A.MathUtils.clamp(Math.round(ui/4),2,10);i.style.padding=`${a}px ${a}px ${a}px ${a}px`,i.style.fontSize=`${ui}px`,i.style.fontWeight=jc,i.style.pointerEvents="auto",this._styleCallback&&this._styleCallback(i,s)}}class Hc extends rt{constructor(i){super({color:Et,showLine:!0,showVertexLabels:!0,showVertices:!0,vertexRadius:Fe});p(this,"source");this.source=i}async preprocess(){const s=(await this.source.load(this.instance)).at(0),a=s==null?void 0:s.getGeometry();if(s!=null&&a!=null){const n=this.source.elevation??0,r=c=>new A.Vector3(c[0],c[1],c[2]??n);switch(a.getType()){case"LineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates().map(r));break;case"MultiLineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates()[0].map(r));break;case"MultiPoint":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates().map(r));break;case"MultiPolygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(a.getCoordinates()[0][0].map(r));break;case"Point":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints([r(a.getCoordinates())]);break;case"Polygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(a.getCoordinates()[0].map(r));break;default:throw new Error("could not import shape from given geometry: "+a.getType())}const h=this.source.context();A.fillObject3DUserData(this,{filename:h.filename});for(const[c,d]of Object.entries(s.getProperties()))c!=="geometry"&&(this.userData[c]=d)}this.notifyChange(this.object3d)}}const Zc=e=>{const{dataset:t,instance:i}=e,s=t.config,a=Array.isArray(s.source)?s.source:[s.source],n=[],r=s.rendering??"mesh";let l;for(const h of a){const c={dataProjection:h.dataProjection??t.get("dataProjection"),elevation:h.elevation??t.get("elevation"),featureProjection:i.referenceCrs,fetchElevation:h.fetchElevation??t.get("fetchElevation"),fetchElevationFast:h.fetchElevationFast??t.get("fetchElevationFast"),fetchElevationOffset:h.fetchElevationOffset??t.get("fetchElevationOffset"),noDataValue:h.noDataValue??t.get("noDataValue"),url:h.url};switch(h.type){case"geojson":n.push(new _c({...c}));break;case"geopackage":n.push(new Tc({...c}));break;case"gpx":n.push(new Oc({...c}));break;case"kml":n.push(new xc({...c}));break;case"ol":n.push(new Gi(h.format,{...c}));break;case"shapefile":n.push(new Bc({...c}));break;default:return h}}switch(r){case"label":l=new Gc(n,s);break;case"mesh":l=new Lc(n);break;case"shape":l=new Hc(n[0]);break;default:return r}return Promise.resolve(l)},Si={featureCollection:bn,flatPointcloud:En,pointcloud:xn,tiledIfc:_n,vector:Zc};async function Wc(e,t){const i={dataset:t,instance:e},s=Si[t.type];if(s==null)throw new Error(`no entity builder found for dataset type '${t.type}'`);const a=await s(i);return"dataset"in a.object3d.userData||(a.object3d.userData.dataset={}),a.object3d.userData.dataset.name=t.name,a}function qc(e,t){Si[e]!=null&&console.warn(`replacing entity builder for dataset type '${e}'`),Si[e]=t}const Yc={getEntity:Wc},Ai=e=>({name:e.filename,source:{type:"csv",url:e.file},type:"flatPointcloud",visible:!0}),Is=e=>({name:e.filename,source:{type:e.filename.endsWith(".copc.laz")?"copc":"las",url:e.file},type:"flatPointcloud",visible:!0}),Jc=e=>{let t;switch(e.extension){case"geojson":case"json":t="geojson";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${e.extension}' not supported`)}return{name:e.filename,source:{style:"default",type:t,url:e.file},type:"colorLayer",visible:!0}},Xc=e=>{let t;switch(e.extension){case"geojson":case"json":t="geojson";break;case"gpkg":t="geopackage";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${e.extension}' not supported`)}return{name:e.filename,rendering:e.configuration.importedVectorDatasetRendering,source:{fetchElevation:e.configuration.importedMeshDatasetFetchElevation??!0,fetchElevationFast:e.configuration.importedMeshDatasetFetchElevationFast??!1,type:t,url:e.file},type:"vector",visible:!0}},re=e=>e.configuration.importedVectorDatasetRendering==="overlay"?Jc(e):Xc(e),Xe={csv:Ai,dsv:Ai,"geo.json":re,geojson:re,gpkg:re,gpx:re,kml:re,las:Is,laz:Is,tsv:Ai};function Kc(e,t){if(typeof e=="string"){const s=A.getPublicFolderUrl(e),a=new URL(s),l=`${a.origin}${a.pathname}`.split("/").pop();if(l==null)throw new Error("Could not determine filename");const h=l.split(".").at(-1);if(h==null)throw new Error(`File has no extension: ${l}`);return{configuration:t,extension:h,file:e,filename:l}}if(e.name==null)throw new Error("Could not determine filename");const i=e.name.split(".").at(-1);if(i==null)throw new Error(`File has no extension: ${e.name}`);return{configuration:t,extension:i,file:e,filename:e.name}}async function Qc(e,t){const i=Kc(e,t),s=$c(i.filename);if(s==null)throw new Error(`File format ${i.extension} not supported`);const a=s(i);return Promise.resolve(new A.Dataset(a))}function $c(e){const t=Object.keys(Xe);for(const i of t)if(e.endsWith(i))return Xe[i];return null}function tg(e,t){Xe[e]!=null&&console.warn(`replacing loader for file extension '.${e}'`),Xe[e]=t}const eg={importFile:Qc},ma=[];class ig{constructor(){p(this,"_clearHighlight",null)}clear(){this._clearHighlight&&(this._clearHighlight(),this._clearHighlight=null)}dispose(){this.clear()}highlightFromPick(t){if(this.clear(),!!t.entity){rt.isShapePickResult(t)&&this.highlightShape(t);for(const i of ma){const s=i(t);s&&(this._clearHighlight=s)}}}highlightShape(t){const i=t.entity;if(i.userData.highlightable){const s=new A.Color(i.color);i.color=i.userData.highlightColor,i.instance.notifyChange(),this._clearHighlight=()=>{i.color=s,i.instance.notifyChange()}}}}const sg=new Intl.NumberFormat(void 0,{maximumFractionDigits:2,style:"unit",unit:"meter",unitDisplay:"short"}),ag=e=>`${sg.format(e.length)}`,Ke=class Ke extends rt{constructor(){super({color:Vc,lineLabelFormatter:ag,showLineLabel:!0});p(this,"isMeasure3D",!0);this.userData.highlightable=!0,this.userData.highlightColor=Rc,this.depthTest=!0}get from(){return this.points[0]}get length(){return this.getLength()}get to(){return this.points[1]}clone(){return new Ke().copy(this)}copy(i){return this.setPoints([i.from,i.to]),this}};p(Ke,"isMeasure3D",i=>A.isObject(i)&&i.isMeasure3D);let be=Ke;class ng{constructor(t,i,s,a){p(this,"attributes");p(this,"name");p(this,"parent");p(this,"point");this.name=t,this.parent=i,this.attributes=s,this.point=a.clone()}}class og{constructor(t,i,s){p(this,"_grid");p(this,"_instance");this._instance=t;const a=i.dimensions(),n=i.center();this._grid=new A.GridHelper(1,100),this._grid.name=s,this._grid.scale.set(a.x,1,a.y),this._grid.visible=!0,this._grid.position.set(n.x,n.y,-100),this._grid.rotateOnAxis(new A.Vector3(1,0,0),Math.PI/2);const r=this._grid.material;r.opacity=.5,r.transparent=!0,this._grid.updateMatrixWorld(),this._instance.add(this._grid)}get visible(){return this._grid.visible}set visible(t){this._grid.visible=t,this._instance.notifyChange(this._grid)}dispose(){this._instance.remove(this._grid),this._grid.geometry.dispose(),this._grid.material.dispose()}}async function rg(e,t,i,s){const a=new Wt.WMTSCapabilities,n=await A.Fetcher.fetchText(t),r=a.read(n),l=on.optionsFromCapabilities(r,{layer:e});if(l===null)throw new Error("Cannot resolve WMTS source from capabilities");return new Ht.WMTS(l)}async function lg(e,t){const i=await ei(t.config);switch(t.type){case"colorLayer":{const s=t.config;return new $t({...i,elevationRange:s.elevationRange,magFilter:s.magFilter,minFilter:s.minFilter})}case"elevationLayer":{const s=t.config;return new fe({...i,minmax:s.minmax})}case"maskLayer":{const s=t.config;return new Ge({...i,maskMode:s.maskMode})}default:return t.type}}function hg(e){if(e==null)return new q.Style;switch(e){case"LineString":case"MultiLineString":return new q.Style({stroke:new q.Stroke({color:"yellow",width:1})});case"MultiPoint":case"Point":return new q.Style({image:new q.Circle({fill:new q.Fill({color:"yellow"}),radius:3,stroke:new q.Stroke({color:"black"})})});case"MultiPolygon":case"Polygon":return new q.Style({fill:new q.Fill({color:"rgba(50, 50, 200, 0.4)"}),stroke:new q.Stroke({color:"black",width:1})});default:return console.warn(`Geometry ${e} not supported`),new q.Style}}function cg(e){if(e.imageFormat)switch(e.imageFormat){case"Bil":return new Yi;case"GeoTIFF":return new sn;case"MapboxTerrain":return new an;default:return e.imageFormat}switch(e.format){case"image/x-bil;bits=32":return new Yi;default:return}}function gg(e){return{colorSpace:e.colorSpace,flipY:e.flipY,is8bit:e.is8bit}}async function ug(e){const t=await ei(e);switch(e.type){case"color":{const i=e.options;return new $t({...t,elevationRange:i.elevationRange})}case"elevation":{const i=e.options;return new fe({...t,magFilter:i.magFilter,minFilter:i.minFilter,minmax:i.minmax??{max:5e3,min:0},noDataOptions:{replaceNoData:!1}})}case"mask":{const i=e.options;return new Ge({...t,maskMode:i.maskMode})}default:return e.type}}async function ei(e){const t=A.getConfig(),i=await Ca(e.source),s="options"in e?e.options:e,a=A.getExtent(s.extent),n=s.interpretation?new en(s.interpretation.mode,s.interpretation):void 0,r=s.colorMap??("type"in e&&e.type==="elevation"?t.basemap.colormap:void 0),l=r?A.getColorMap(r):void 0,h="resolution"in e.source?e.source.resolution:void 0;let c,d;return"type"in e&&e.type==="color"&&(c=e.options.minFilter,d=e.options.magFilter),{backgroundColor:s.backgroundColor,colorMap:l,extent:a,interpretation:n,magFilter:d,minFilter:c,name:e.name,noDataOptions:s.noDataOptions,preloadImages:s.preloadImages,resolutionFactor:h,showEmptyTextures:s.showEmptyTextures,showTileBorders:s.showTileBorders,source:i}}async function dg(e,t){const i=await ei(e),s=e.options;return new $t({extent:t,...i,elevationRange:s.elevationRange,magFilter:s.magFilter,minFilter:s.minFilter})}async function Ca(e){const t=gg(e);switch(e.type){case"bingmaps":return new Ft({...t,source:new Ht.BingMaps(e)});case"cog":return new nn({...t,crs:Ue(e,e.projection),url:A.getPublicFolderUrl(e.url)});case"geojson":return new de({...t,...await Se(e,new Wt.GeoJSON)});case"gpx":return new de({...t,...await Se(e,new Wt.GPX)});case"kml":return new de({...t,...await Se(e,new Wt.KML)});case"mvt":return new Ji({...t,...ps(e),format:new Wt.MVT});case"osm":return new Ft({...t,source:new Ht.OSM(e)});case"stadiamaps":return new Ft({...t,source:new Ht.StadiaMaps(e)});case"vector":return new de({...t,...await Se(e,e.format)});case"vector-tile":return new Ji({...t,...ps(e),format:e.format});case"wms":{const i=new Ht.TileWMS({crossOrigin:"anonymous",params:{FORMAT:e.format,LAYERS:Array.isArray(e.layer)?e.layer:[e.layer]},projection:Ue(e),url:e.url});return new Ft({...t,...mi(e,i)})}case"wmts":{const i=await rg(e.layer,e.url,e.format,Ue(e));return new Ft({...t,...mi(e,i)})}case"xyz":return new Ft({...t,...mi(e,new Ht.XYZ(e))});default:return e}}async function Ag(e){return e.url instanceof Blob?A.Fetcher.toDataURL(e.url):A.getPublicFolderUrl(e.url)}function Ue(e,t){return e.dataProjection??("projection"in e?e.projection:void 0)??t}function fa(e){if(typeof e=="string"){if(e==="default")return i=>{var s;return hg((s=i.getGeometry())==null?void 0:s.getType())};const t=A.getDynamicStyles();return t[e]==null?(console.warn(`Could not find style ${e} in configuration`),new q.Style({})):t[e]}return mg(e)}function mi(e,t){return{extent:A.getExtent(e.extent),format:cg(e),httpTimeout:e.httpTimeout,noDataValue:e.noDataValue??e.nodata,retries:e.retries,source:t}}async function Se(e,t){const i=await Ag(e);return{data:{format:t,url:i},dataProjection:Ue(e,"EPSG:4326"),style:fa(e.style)}}function ps(e){return{backgroundColor:e.backgroundColor,style:fa(e.style),url:A.getPublicFolderUrl(e.url)}}function mg(e){function t(a){if(a)return new q.Stroke({color:a.color,width:a.width})}function i(a){if(a)return new q.Fill({color:a.color})}function s(a){if(a)return new q.Circle({fill:i(a.fill),radius:a.radius,stroke:t(a.stroke)})}return new q.Style({fill:i(e.fill),image:s(e.point),stroke:t(e.stroke)})}const Ni={getDatasetLayer:lg,getLayer:ug,getLayerOptions:ei,getOverlay:dg,getSource:Ca};class Cg{constructor(t,i,s){p(this,"_instance");p(this,"_plane");this._instance=t;const a=i.dimensions(),n=i.center();this._plane=new A.Mesh(new A.PlaneGeometry(a.x,a.y,1,1),new A.MeshBasicMaterial({color:"black"})),this._plane.name=s,this._plane.position.set(n.x,n.y,-101),this._plane.updateMatrixWorld(),this._instance.add(this._plane)}get visible(){return this._plane.visible}set visible(t){this._plane.visible=t,this._instance.notifyChange(this._plane)}dispose(){this._instance.remove(this._plane),this._plane.geometry.dispose(),this._plane.material.dispose()}}const ae=kt.defineStore("giro3d",()=>{const e=o.shallowRef(null),t=o.shallowRef(null),i=o.shallowRef(null);function s(){return e.value}function a(C){e.value=C}function n(){return t.value}function r(C){t.value=C}function l(){return i.value}function h(C){i.value=C}function c(){const C=A.getConfig(),v=C.camera;return Array.isArray(v.position)?(console.warn("Configuration is using an array for camera.position, you should switch to an object; see https://gitlab.com/giro3d/piero/-/issues/24 for more information. This will be removed in release v24.7."),new at("EPSG:4326",v.position[0],v.position[1],v.altitude).as(C.default_crs)):("z"in v.position||console.warn("Configuration is using a 2D object for camera.position, you should switch to a 3D object; see https://gitlab.com/giro3d/piero/-/issues/38 for more information. This will be removed in release v24.7."),new at(v.position.crs??C.default_crs,v.position.x,v.position.y,"z"in v.position?v.position.z:v.altitude).as(C.default_crs))}function d(){const C=A.getConfig();return"lookAt"in C.camera&&C.camera.lookAt?new at(C.camera.lookAt.crs??C.default_crs,C.camera.lookAt.x,C.camera.lookAt.y,C.camera.lookAt.z).as(C.default_crs):u().center()}function g(){const C=A.getConfig();return{backgroundColor:C.basemap.backgroundColor??"white",backgroundOpacity:C.basemap.backgroundOpacity,colorimetry:C.basemap.colorimetry,contourLines:C.basemap.contourLines,elevationRange:C.basemap.elevationRange,graticule:C.basemap.graticule,lighting:C.basemap.lighting??{elevationLayersOnly:!0,enabled:!0},showOutline:C.basemap.showOutline,side:C.basemap.side??A.FrontSide,terrain:C.basemap.terrain}}function u(){const C=A.getConfig();if(C.basemap.extent)return A.getExtent(C.basemap.extent);console.warn("Configuration is using basemap.center/basemap.size, you should switch to extent. This will be removed in release v24.10.");const v=C.basemap.size,I=C.basemap.center;if(v==null||I==null)throw new Error("basemap.center and basemap.size need to be defined");let b;return Array.isArray(I)?(console.warn("Configuration is using an array for basemap.center, you should switch to an object; see https://gitlab.com/giro3d/piero/-/issues/24 for more information. This will be removed in release v24.7."),b=new at("EPSG:4326",I[0],I[1],0)):b=new at(I.crs??C.default_crs,I.x,I.y,0),b=b.as(C.default_crs),Qe.fromCenterAndSize(C.default_crs,{x:b.x,y:b.y},v[0],v[1])}function f(){return A.getConfig().default_crs}function m(){var C;(C=e.value)==null||C.notifyChange()}return{getCRS:f,getDefaultBasemapExtent:u,getDefaultBasemapOptions:g,getDefaultCameraLookAt:d,getDefaultCameraPosition:c,getInspector:l,getMainView:s,getMinimapView:n,notifyChange:m,setInspector:h,setMainView:a,setMinimapView:r}});class fg extends A.EventDispatcher{constructor(){super(...arguments);p(this,"canSetOpacity",!1);p(this,"name","Graticule");p(this,"uuid","graticule");p(this,"_enabled",!1);p(this,"_instance");p(this,"_map");p(this,"_visible",!1)}get displayed(){return this.enabled&&this.visible}get enabled(){return this._enabled}set enabled(i){this._enabled=i,this._updateVisible()}set instance(i){this._instance=i}set map(i){this._map=i}get visible(){return this._visible}set visible(i){this._visible=i,this._updateVisible()}_updateVisible(){this._map&&this._instance&&(this._map.graticule.enabled=this.displayed,this._instance.notifyChange(this._map))}}class Ia extends A.EventDispatcher{constructor(i){super();p(this,"name");p(this,"uuid");p(this,"_opacity",1);p(this,"_visible",!1);this.name=i,this.uuid=A.MathUtils.generateUUID()}get opacity(){return this._opacity}set opacity(i){this._opacity=i,this.dispatchEvent({type:"opacity"})}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}delete(){this.dispatchEvent({type:"delete"})}}class Ig extends Ia{constructor({name:i,source:s,type:a,...n}){super(i);p(this,"options");p(this,"source");p(this,"type");p(this,"_loading");this._loading=!1,this.type=a,this.source=s,this.options=n}get isLoading(){return this._loading}set isLoading(i){this._loading=i}}class pg extends Ia{constructor({name:i,source:s,...a}){super(i);p(this,"options");p(this,"source");p(this,"_loading");this._loading=!1,this.source=s,this.options=a}get isLoading(){return this._loading}set isLoading(i){this._loading=i}}function vg(){const e=A.getConfig(),t=[],i=e.basemap.layers;for(const s of i){const a=new Ig(s);a.visible=s.visible,t.push(a)}return t}function yg(){const e=A.getConfig();if("graticule"in e.basemap&&e.basemap.graticule!==void 0){const t=new fg;return typeof e.basemap.graticule=="boolean"?t.visible=e.basemap.graticule:t.visible=e.basemap.graticule.enabled??!0,o.shallowReactive(t)}}function bg(){const e=A.getConfig(),t=[];for(const i of e.overlays){let s;"source"in i?s=i:(console.warn(`Configuration for ${i.name} is deprecated. This will be removed in release v24.7.`),s={name:i.name,source:{...i},visible:i.visible});const a=new pg(s);a.visible=i.visible,t.push(a)}return t}const pa=kt.defineStore("layers",()=>{const e=o.shallowReactive(vg().map(m=>o.shallowReactive(m))),t=o.computed(()=>e.length),i=o.shallowReactive(bg().map(m=>o.shallowReactive(m))),s=o.computed(()=>i.length),a=yg();function n(){return e}function r(){return a}function l(m,C){m.visible=C}function h(m,C){m.opacity=C}function c(){return i}function d(m,C){m.visible=C}function g(m,C){m.opacity=C}function u(m){const C=i.indexOf(m);if(C>0){const v=i[C-1];i[C-1]=m,i[C]=v}}function f(m){const C=i.indexOf(m);if(C<i.length-1){const v=i[C+1];i[C+1]=m,i[C]=v}}return{basemapCount:t,getBasemaps:n,getGraticuleLayer:r,getOverlays:c,moveOverlayDown:f,moveOverlayUp:u,overlayCount:s,setBasemapOpacity:h,setBasemapVisibility:l,setOverlayOpacity:g,setOverlayVisibility:d}}),Mg=3e3,Li="grid",Pi="plane",wg=5e3;class Eg extends A.EventDispatcher{constructor(i){super();p(this,"_baseLayers");p(this,"_basemap");p(this,"_boundOnAfterCameraUpdate");p(this,"_cameraStore",A.useCameraStore());p(this,"_datasetLayers");p(this,"_giro3dStore",ae());p(this,"_grid");p(this,"_instance");p(this,"_layerStore",pa());p(this,"_overlays");p(this,"_plane");this._instance=i,this._baseLayers=new Map,this._overlays=new Map,this._datasetLayers=new Set;const s=this._giro3dStore.getDefaultBasemapExtent(),a=this._giro3dStore.getDefaultBasemapOptions();this._basemap=new je({extent:s,...a}),this._basemap.terrain.segments=32,this._basemap.name="basemaps",this._instance.add(this._basemap),this._grid=new og(this._instance,s,Li),this._plane=new Cg(this._instance,s,Pi),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);for(const r of this._layerStore.getOverlays())r.visible&&this.loadOverlay(r);for(const r of this._layerStore.getBasemaps())r.visible&&this.loadBasemap(r);const n=this._layerStore.getGraticuleLayer();n&&(n.instance=this._instance,n.map=this._basemap),this._layerStore.$onAction(({after:r,args:l,name:h})=>{r(()=>{switch(h){case"moveOverlayDown":case"moveOverlayUp":this.onOverlayReordered(l[0]);break;case"setBasemapOpacity":this.onLayerOpacityChanged(l[0],l[1]);break;case"setBasemapVisibility":this.onLayerVisibilityChanged(l[0],l[1]);break;case"setOverlayOpacity":this.onOverlayOpacityChanged(l[0],l[1]);break;case"setOverlayVisibility":this.onOverlayVisibilityChanged(l[0],l[1]);break}})})}get extent(){return this._basemap.extent}async addDatasetLayer(i){this._datasetLayers.add(i.id),await this._basemap.addLayer(i),this.updateLayerOrdering()}dispose(){this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._instance.remove(this._basemap),this._plane.dispose(),this._grid.dispose(),this._basemap.dispose({disposeLayers:!0})}notify(i){this._instance.notifyChange(i)}removeBasemapLayer(i){this._datasetLayers.delete(i.id),this._basemap.removeLayer(i,{disposeLayer:!0}),this._instance.notifyChange(this._basemap)}setMapOpacity(i){this._basemap.opacity=i,this._instance.notifyChange(this._basemap)}async getLayer(i,s=!0){const a=this._baseLayers.get(i.uuid);return!a&&s?this.loadBasemap(i):a}async getOverlay(i,s=!0){const a=this._overlays.get(i.uuid);return!a&&s?this.loadOverlay(i):a}async loadBasemap(i){const s=await Ni.getLayer(i);return this._baseLayers.set(i.uuid,s),await this._basemap.addLayer(s),this.updateLayerOrdering(),s.visible=i.visible,$t.isColorLayer(s)&&(s.opacity=i.opacity),fe.isElevationLayer(s)&&(s.addEventListener("visible-property-changed",()=>{this._basemap.visible=s.visible,this._instance.notifyChange(this._basemap)}),this._basemap.visible=s.visible),this._instance.notifyChange(this._basemap),s}async loadOverlay(i){const s=await Ni.getOverlay(i,this.extent);return this._overlays.set(i.uuid,s),await this._basemap.addLayer(s),this.updateLayerOrdering(),s.visible=i.visible,s.opacity=i.opacity,this._instance.notifyChange(this._basemap),s}onAfterCameraUpdate(){const i=this._cameraStore.getCamera3dPosition(),s=this._grid.visible,a=i.z<Mg;s!==a&&(this._grid.visible=a,this._plane.visible=a);const n=this._layerStore.getGraticuleLayer();if(n){const r=n.enabled,l=i.z<wg;r!==l&&(n.enabled=l)}}async onLayerOpacityChanged(i,s){const a=await this.getLayer(i);a&&$t.isColorLayer(a)&&(a.opacity=s,this.notify(a)),a&&fe.isElevationLayer(a)&&this.setMapOpacity(i.opacity)}async onLayerVisibilityChanged(i,s){i.type==="elevation"&&s&&[...this._baseLayers.keys()].forEach(r=>{if(r===i.uuid)return;const l=this._baseLayers.get(r);if(l&&fe.isElevationLayer(l)){this._baseLayers.delete(r),this.removeBasemapLayer(l);const h=this._layerStore.getBasemaps().find(c=>c.uuid===r);h&&this._layerStore.setBasemapVisibility(h,!1)}});const a=await this.getLayer(i,s);a&&(a.visible=s,s||(this._baseLayers.delete(i.uuid),this.removeBasemapLayer(a)),this.notify(a))}async onOverlayOpacityChanged(i,s){const a=await this.getOverlay(i);a&&(a.opacity=s,this.notify(a))}onOverlayReordered(i){i.visible&&this.updateLayerOrdering()}async onOverlayVisibilityChanged(i,s){const a=await this.getOverlay(i,s);a&&(a.visible=s,s||(this._overlays.delete(i.uuid),this.removeBasemapLayer(a)),this.notify(a))}updateLayerOrdering(){const i=[...this._layerStore.getBasemaps().map(s=>{var a;return(a=this._baseLayers.get(s.uuid))==null?void 0:a.id}).reverse(),...this._layerStore.getOverlays().map(s=>{var a;return(a=this._overlays.get(s.uuid))==null?void 0:a.id}).reverse(),...[...this._datasetLayers.values()].reverse()];this._basemap.sortColorLayers((s,a)=>{const n=i.indexOf(s.id),r=i.indexOf(a.id);return n>=0&&r>=0?n-r:0})}}const va=[];function _g(e,t){return rt.isShapePickResult(e)?-1:rt.isShapePickResult(t)?1:e.distance-t.distance}class vs{constructor(){p(this,"_moduleStore",A.useModuleStore())}getFeatureFromPickedObject(t){var d,g;const{entity:i,features:s,object:a}=t,n=(i==null?void 0:i.object3d)??a;let r=(g=(d=n.userData)==null?void 0:d.dataset)==null?void 0:g.name;const l=(i==null?void 0:i.id)??n.uuid,h=[],c=new Map;if(c.set("Dataset",h),i){if(Ts.isMapPickResult(t)){if(s==null||s.length===0)return null;const u=s.at(0);r=this.getNameFromOLFeature(u.feature)??r,this.getAttributesFromOLFeature(u.feature,c),h.push({key:"Layer",value:u.layer.name})}else if(tn.isPointsPickResult(t))this.getAttributesFromPointCloud(t,c);else if(!i.isFeatureCollection){if(rt.isShapePickResult(t)){const u=t.entity;if(be.isMeasure3D(u)){const f=u.userData.measure;r=(f==null?void 0:f.title)??r,this.getAttributesFromMeasure(t,c)}else{const f=u.userData.annotation;r=(f==null?void 0:f.title)??r,this.getAttributesFromAnnotation(t,c)}}}for(const u of va)u(t,c)}return i!=null&&i.userData&&this.getAttributesFromEntity(i,c),(a==null?void 0:a.userData)!=null&&this.getAttributesFromPickedObject3D(t,c),a!=null&&this.getDatasetAttributes(a,h),new ng(r,l,c,t.point)}getFirstFeatureAt(t,i,s=1,a){const n=this.getObjectsAt(t,i,s,a);if(n!=null&&n.length>0)return n;const r=this.getMapAt(t,i,s);return r?[r]:null}getGeometryAttributes(t,i){const s=new A.Box3,a=new A.Vector3,n=new A.Vector3;s.setFromObject(t),s.getCenter(n),s.getSize(a),i.push({key:"Center",value:[n.x.toFixed(2),n.y.toFixed(2),n.z.toFixed(2)]});const r="m";i.push({key:"Size",value:[`${a.x.toFixed(2)}${r}`,`${a.y.toFixed(2)}${r}`,`${a.z.toFixed(2)}${r}`]})}getMapAt(t,i,s=1){const a=t.getObjects(r=>r.isMap);return t.pickObjectsAt(i,{limit:1,pickFeatures:!0,radius:s,sortByDistance:!0,where:a}).at(0)??null}getMouseCoordinate(t,i){const s=t.getObjects(n=>n.isMap),a=t.pickObjectsAt(i,{limit:1,radius:0,where:s}).at(0);return(a==null?void 0:a.point)??null}getObjectsAt(t,i,s=1,a){let n=t.getObjects(l=>je.isMap(l)!==!0&&l.name!==Pi&&l.name!==Li);a&&(n=n.filter(a));const r=t.pickObjectsAt(i,{filter:l=>this.filterPick(t,l),pickFeatures:!0,radius:s,where:n});return r.sort(_g),r??null}hasFeature(t,i){const s=t.getObjects(n=>n.isMap!==!0&&n.name!==Pi&&n.name!==Li);return t.pickObjectsAt(i,{limit:1,radius:0,where:s}).at(0)!=null}pick(t,i){var a;const s=(a=this.getFirstFeatureAt(t,i))==null?void 0:a.at(0);if(s){const n=this.getFeatureFromPickedObject(s);if(n)return{feature:n,pickResult:s,point:s.point}}return null}filterPick(t,i){const s=this._moduleStore.getModule(A.moduleId);if(s!=null&&s.isClippingBoxEnabled()){const a=s.getClippingBox().containsPoint(i.point);if(s.isClippingBoxInverted()){if(a)return!1}else if(!a)return!1}return!(i.distance<t.view.camera.near||i.distance>t.view.camera.far)}getAttributesFromAnnotation(t,i){i.has("GeoJSON")||i.set("GeoJSON",[]);const s=i.get("GeoJSON"),a=t.entity,n=a.userData,{annotation:r,measurements:l,type:h}=n;if(r!=null)for(const[g,u]of Object.entries(r.properties))g==="geometry"||g==="geometryProperty"||g==="metadata"||g==="entity"||s.push({key:g,value:u});i.has("Measurement")||i.set("Measurement",[]);const c=i.get("Measurement");h==="MultiPoint"&&c.push({key:"Number of points",value:a.points.length});const d="m";l.area!=null&&c.push({key:"Area",value:`${l.area.toFixed(2)}${d}²`}),l.perimeter!=null&&c.push({key:h==="Polygon"?"Perimeter":"Length",value:`${l.perimeter.toFixed(2)}${d}`}),l.minmax!=null&&(c.push({key:"Min altitude",value:`${l.minmax[0].toFixed(2)}${d}`}),c.push({key:"Max altitude",value:`${l.minmax[1].toFixed(2)}${d}`}))}getAttributesFromEntity(t,i){i.has("Feature")||i.set("Feature",[]);const s=i.get("Feature");(t==null?void 0:t.userData)!=null&&this.getAttributesFromUserData(t.userData,s)}getAttributesFromMeasure(t,i){i.has("GeoJSON")||i.set("GeoJSON",[]);const s=i.get("GeoJSON"),a=t.entity;for(const[r,l]of Object.entries(a.userData.measure.properties))r==="geometry"||r==="geometryProperty"||r==="metadata"||r==="entity"||s.push({key:r,value:l});i.has("Measurement")||i.set("Measurement",[]);const n=i.get("Measurement");n.push({key:"From",value:a.from}),n.push({key:"To",value:a.to}),n.push({key:"Length",value:`${a.length.toFixed(2)}m`})}getAttributesFromObject3D(t,i){if((t==null?void 0:t.userData)!=null&&this.getAttributesFromUserData(t.userData,i),t!=null&&t.parent){if("isFeatureTile"in t.parent&&t.parent.isFeatureTile===!0)return;this.getAttributesFromObject3D(t.parent,i)}}getAttributesFromOLFeature(t,i){i.has("Feature")||i.set("Feature",[]);const s=i.get("Feature");t.getId()!==void 0&&s.push({key:"fid",value:t.getId()});for(const[a,n]of Object.entries(t.getProperties()))a==="geometry"||a==="geometryProperty"||s.push({key:a,value:n})}getAttributesFromPickedObject3D(t,i){i.has("Feature")||i.set("Feature",[]);const s=i.get("Feature");this.getAttributesFromObject3D(t.object,s)}getAttributesFromPointCloud(t,i){var s;(s=i.get("Dataset"))==null||s.push({key:"Tile",value:t.object.name})}getAttributesFromUserData(t,i){for(const[s,a]of Object.entries(t))if(!(s==="geometry"||s==="geometryProperty"||s==="metadata"||s==="entity"||s==="dataset"||s==="bbox"||s==="hover")){if(s==="feature"&&typeof a=="object"&&"ol_uid"in a){this.getAttributesFromUserData(a.getProperties(),i);continue}if(s==="properties"){this.getAttributesFromUserData(a,i);continue}if(typeof a!="object"){if(s==="id"){i.push({key:"fid",value:a});continue}i.push({key:s,value:a})}}}getDatasetAttributes(t,i){var s,a,n,r;((a=(s=t==null?void 0:t.userData)==null?void 0:s.dataset)==null?void 0:a.name)!=null&&i.push({key:"Dataset",value:t.userData.dataset.name}),((r=(n=t==null?void 0:t.userData)==null?void 0:n.dataset)==null?void 0:r.filename)!=null&&i.push({key:"File",value:t.userData.dataset.filename}),t.parent&&this.getDatasetAttributes(t.parent,i)}getNameFromOLFeature(t){return t.get("nom")??t.get("name")??t.getId()}}class Og{constructor(t){this.store=t}registerDatasetAction(t){this.store.registerCustomAction(t)}registerDatasetType(t,i){if(i.icon!=null&&(Bs[t]=i.icon),i.name!=null&&(Vs[t]=i.name),i.highlight&&ma.push(i.highlight),qc(t,i.entityBuilder),i.fileExtensions)if(i.loader==null)console.warn(`File extensions have been specified for dataset ${t}, but no loader function has been provided.`);else for(const s of i.fileExtensions)tg(s,i.loader);i.propertyView&&De.set(t,i.propertyView),i.attributeExtractor&&va.push(i.attributeExtractor)}}class xg{constructor(t){this.store=t}pushNotification(t){this.store.push(t)}}const Zi=kt.defineStore("annotations",()=>{const e=o.reactive([]),t=o.ref("normal"),i=o.computed(()=>e.length),s=o.ref(!1),a=o.ref(!0);function n(){return s.value}function r(){return a.value}function l(E){a.value=E}function h(E){s.value=E}function c(){return t.value}function d(E){t.value=E}function g(){return e}function u(E){e.splice(e.indexOf(E),1)}function f(){}function m(){}function C(){}function v(E){e.push(E)}function I(E){return e.some(S=>S.title===E)}function b(E){}function M(){}function _(E){}function x(E){}return{add:v,count:i,createLine:m,createPoint:f,createPolygon:C,edit:b,getAnnotationMode:c,getAnnotations:g,hasAnnotation:I,importAnnotationFile:_,importAnnotationsFiles:x,isUserDrawing:n,remove:u,setAnnotationMode:d,setIsUserDrawing:h,setShowLabels:l,showLabels:r,stopEdition:M}}),Rt=kt.defineStore("notifications",()=>{function e(t){}return{push:e}});class ya extends A.EventDispatcher{constructor(i,s,a={}){super();p(this,"properties");p(this,"title");p(this,"uuid");p(this,"_isEditing");p(this,"_object");p(this,"_visible");this.title=i,this._visible=!0,this._isEditing=!1,this._object=s,this.properties=a,this.uuid=A.MathUtils.generateUUID()}get isEditing(){return this._isEditing}set isEditing(i){this._isEditing=i,this.dispatchEvent({type:"isEditing"})}get object(){return this._object()}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}static toCollection(i){return{features:i.map(a=>a.toGeoJSON()),type:"FeatureCollection",id:`${A.Download.getBaseUrl()}#${A.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:A.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D annotations",updated:new Date().toISOString()}}}toGeoJSON(){const i=this.object.toGeoJSON({includeAltitudes:!0});return i.id=`${A.Download.getBaseUrl()}#${this.uuid}`,i.properties={...i.properties,title:this.title,updated:new Date().toISOString()},i}}class Q{constructor(t,i,s="info"){p(this,"level");p(this,"text");p(this,"title");this.title=t,this.text=i,this.level=s}static empty(){return new Q("","","info")}}function kg(e){let t=1/0,i=-1/0,s;Array.isArray(e)?s=e:s=e.points;for(let a=0;a<s.length;a+=1)t=Math.min(t,s[a].z),i=Math.max(i,s[a].z);return[t,i]}const Sg={getMinMaxAltitudes:kg};function Ng(e){return window.prompt("Annotation name",e)}const ba=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),ys=e=>{let t=e.area,i="m²";return t>1e6&&(t=t/1e6,i="km²"),`${ba.format(t)} ${i}`},Lg=new A.Vector3,Pg=new A.Vector3,bs=e=>t=>{const{camera:i}=e,{end:s,start:a}=t,n=Lg.copy(a).project(i),r=Pg.copy(s).project(i),l=Math.pow(100/e.width,2);if(n.distanceToSquared(r)<l)return null;let c=t.length;if(c==null||c<=0)return null;let d="m";return c>1e3&&(c=c/1e3,d="km"),`${ba.format(c)} ${d}`},Ci=e=>{const t=e.shape;return t.userData.annotation?t.userData.annotation.title:null};class Tg{constructor(t,i,s){p(this,"_boundExitEdition");p(this,"_boundOnEndDrag");p(this,"_boundOnKeyDown");p(this,"_boundOnStartDrag");p(this,"_boundUpdateLabels");p(this,"_drawTool");p(this,"_editedShape",null);p(this,"_editedShapePreviousPoints",null);p(this,"_instance");p(this,"_isEditing",!1);p(this,"_notificationStore",Rt());p(this,"_picker");p(this,"_shapes",new Map);p(this,"_store",Zi());this._instance=t,this._picker=s,this._drawTool=new Nt({instance:t}),this._boundOnEndDrag=()=>{i.enabled=!0},this._boundOnStartDrag=()=>{i.enabled=!1},this._boundUpdateLabels=this.updateLabels.bind(this),this._boundExitEdition=()=>{this._instance.domElement.removeEventListener("contextmenu",this._boundExitEdition),this.stopEdition(!1)},this._drawTool.addEventListener("start-drag",this._boundOnStartDrag),this._drawTool.addEventListener("end-drag",this._boundOnEndDrag),this._boundOnKeyDown=this.onKeyDown.bind(this),document.addEventListener("keydown",this._boundOnKeyDown),this._instance.addEventListener("after-camera-update",this._boundUpdateLabels),this._store.$onAction(({after:a,args:n,name:r})=>{a(()=>{switch(r){case"createLine":this.drawLine();break;case"createPoint":this.drawPoint();break;case"createPolygon":this.drawPolygon();break;case"edit":this.editAnnotation(n[0]);break;case"importAnnotationFile":this.importAnnotationFile(n[0]);break;case"importAnnotationsFiles":this.importAnnotationFiles(n[0]);break;case"remove":this.deleteAnnotation(n[0]);break;case"setShowLabels":this.udpateLabelVisibility(n[0]);break;case"stopEdition":this.stopEdition(!1);break}})})}dispose(){document.removeEventListener("keydown",this._boundOnKeyDown),this._drawTool.removeEventListener("start-drag",this._boundOnStartDrag),this._drawTool.removeEventListener("end-drag",this._boundOnEndDrag),this._instance.removeEventListener("after-camera-update",this._boundUpdateLabels),this._shapes.forEach(t=>this._instance.remove(t)),this._drawTool.dispose()}pushNewAnnotation(t,i,s={}){const a=new ya(t,()=>i,s);return i.userData.annotation=a,a.addEventListener("visible",()=>this.updateDrawing(a)),this._store.add(a),this._shapes.set(a.uuid,i),a}addShape(t,i,s){if(t&&!this._shapes.has(t.id)){const a=t.userData;a.type=i,a.highlightable=!0;let n=s;if(this._store.hasAnnotation(n)){for(let l=1;l<1e3&&(n=`${s} (${l})`,!!this._store.hasAnnotation(n));l+=1);this._store.hasAnnotation(n)&&(n="Achievement unlocked: 1000 annotations with default name")}const r=Ng(n);if(r!=null){this.computeMeasurements(t);const l=this.pushNewAnnotation(r,t);this._shapes.set(l.uuid,t)}else this._instance.remove(t)}}computeMeasurements(t){t.userData.measurements={minmax:Sg.getMinMaxAltitudes(t)},(t.userData.type==="Polygon"||t.userData.type==="LineString")&&(t.userData.measurements.perimeter=t.getLength()),t.userData.type==="Polygon"&&(t.userData.measurements.area=t.getArea())}deleteAnnotation(t){if(this._shapes.has(t.uuid)){const i=t.object;this._instance.remove(i),this._shapes.delete(t.uuid)}}draw(t,i,s,a){this._store.setIsUserDrawing(!0),this._drawTool[t]({...this.getCreationOptions(),...a}).then(n=>{this.addShape(n,i,s)}).finally(()=>this._store.setIsUserDrawing(!1))}drawLine(){this.draw("createLineString","LineString","New line annotation",{segmentLabelFormatter:bs(this._instance.view),showSegmentLabels:this._store.showLabels()})}drawPoint(){this.draw("createPoint","Point","New point annotation",{borderWidth:3,showVertexLabels:this._store.showLabels(),vertexLabelFormatter:Ci,vertexRadius:Fe})}drawPolygon(){this.draw("createPolygon","Polygon","New polygon annotation",{showSurfaceLabel:this._store.showLabels(),surfaceLabelFormatter:ys})}editAnnotation(t){const i=this._shapes.get(t.uuid);if(!i){console.warn(`no shape found for annotation ${t.uuid}`);return}this._editedShape=i,this._editedShapePreviousPoints=[...i.points],t.isEditing=!0,i.color=Fc,i.userData.highlightable=!1,this._instance.notifyChange(i),this._store.setIsUserDrawing(!0),this._instance.domElement.addEventListener("contextmenu",this._boundExitEdition),this._isEditing=!0,this._drawTool.enterEditMode({pick:this.pick.bind(this),shapesToEdit:[i]})}filterPickResults(t,i){return i?t:t.filter(s=>!rt.isShapePickResult(s))}getCreationOptions(){return{color:Et,pick:this.pick.bind(this)}}async importAnnotation(t,i){if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=A.MathUtils.generateUUID()),i.has(t.properties.title))return!1;const s=await this.importShapeFromGeoJSON(t);return this.pushNewAnnotation(t.properties.title,s,t.properties),!0}async importAnnotationFile(t){const i=new Set(this._store.getAnnotations().map(s=>s.title));try{const{nbImported:s,nbSkipped:a}=await this.importBlob(t,i);this._notificationStore.push(new Q("Annotations",`${s} annotations imported (${a} skipped)`,"success"))}catch{}}async importAnnotationFiles(t){const i=[];let s=0,a=0;const n=[],r=new Set(this._store.getAnnotations().map(l=>l.title));for(const l of t)i.push(this.importBlob(l,r).then(({nbImported:h,nbSkipped:c})=>{s+=h,a+=c}).catch(h=>{n.push(h.message)}));await Promise.allSettled(i),n.length>0?this._notificationStore.push(new Q("Annotations",`${s} annotations imported (${a} skipped); ${n.length} errors: ${n}`,"warning")):this._notificationStore.push(new Q("Annotations",`${s} annotations imported (${a} skipped)`,"success"))}async importBlob(t,i){const s=await t.text(),a=JSON.parse(s),n=a.type==="FeatureCollection"?a.features:[a];let r=0,l=0;for(const h of n)await this.importAnnotation(h,i)?r++:l++;return{nbImported:r,nbSkipped:l}}async importShapeFromGeoJSON(t){if(t.type!=="Feature")throw new Error("not a valid GeoJSON feature");const i="EPSG:4326",s=n=>{const r=new at(i,n[0],n[1],n[2]??0);return r.as(this._instance.referenceCrs,r).toVector3()};let a;switch(t.geometry.type){case"LineString":a=new rt({beforeRemovePoint:Nt.limitRemovePointHook(2),color:Et,segmentLabelFormatter:bs(this._instance.view),showLine:!0,showSegmentLabels:!0,showVertexLabels:!1,showVertices:!0}),a.setPoints(t.geometry.coordinates.map(s));break;case"MultiPoint":a=new rt({beforeRemovePoint:Nt.limitRemovePointHook(1),color:Et,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Ci,vertexRadius:Fe}),a.setPoints(t.geometry.coordinates.map(s));break;case"Point":a=new rt({beforeRemovePoint:Nt.inhibitHook,color:Et,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Ci,vertexRadius:Fe}),a.setPoints([s(t.geometry.coordinates)]);break;case"Polygon":a=new rt({afterRemovePoint:Nt.afterRemovePointOfRing,afterUpdatePoint:Nt.afterUpdatePointOfRing,beforeRemovePoint:Nt.limitRemovePointHook(4),color:Et,showLine:!0,showSurface:!0,showSurfaceLabel:!0,showVertexLabels:!1,showVertices:!0,surfaceLabelFormatter:ys}),a.setPoints(t.geometry.coordinates[0].map(s));break;default:throw new Error("could not import shape from given GeoJSON geometry: "+t.geometry.type)}return this.computeMeasurements(a),await this._instance.add(a),a}onKeyDown(t){t.code==="Escape"&&this.stopEdition(!0)}pick(t){let i;switch(this._store.getAnnotationMode()){case"mapOnly":i=this.pickMap(t);break;case"normal":i=this.pickDefault(t);break;case"objectsOnly":i=this.pickFeatures(t);break}return i}pickDefault(t){const i=this._instance.pickObjectsAt(t,{sortByDistance:!0});return this.filterPickResults(i,this._isEditing)}pickFeatures(t){const i=this._picker.getObjectsAt(this._instance,t,0)??[];return this.filterPickResults(i,this._isEditing)}pickMap(t){const i=this._instance.pickObjectsAt(t,{filter:s=>rt.isShapePickResult(s)||Ts.isMapPickResult(s),sortByDistance:!0});return this.filterPickResults(i,this._isEditing)}stopEdition(t){this._drawTool.exitEditMode(),this._isEditing=!1,this._store.setIsUserDrawing(!1),this._editedShape&&(t&&this._editedShapePreviousPoints&&(this._editedShape.setPoints(this._editedShapePreviousPoints),this._editedShapePreviousPoints=null),this._editedShape.userData.annotation!=null&&(this._editedShape.userData.annotation.isEditing=!1),this._editedShape.color=Et,this._editedShape.userData.highlightable=!0,this._editedShape=null)}udpateLabelVisibility(t){this._shapes.forEach(i=>{switch(i.userData.type){case"LineString":i.showSegmentLabels=t;break;case"MultiPoint":case"Point":i.showVertexLabels=t;break;case"Polygon":i.showSurfaceLabel=t;break}})}updateDrawing(t){t.object.visible=t.visible,t.object.traverse(i=>i.visible=t.visible),this._instance.notifyChange()}updateLabels(){this._shapes.forEach(t=>{t.visible&&t.rebuildLabels()})}}/*!
4
+ northing meters`+e;var d=g/2,C=0,f=0,m,v,I,b,M;return d>0&&(m=1e5/Math.pow(10,d),v=e.substring(o,o+d),C=parseFloat(v)*m,I=e.substring(o+d),f=parseFloat(I)*m),b=C+c,M=f+u,{easting:b,northing:M,zoneLetter:r,zoneNumber:l,accuracy:m}}function mo(e,t){for(var i=ks.charCodeAt(t-1),s=1e5,a=!1;i!==e.charCodeAt(0);){if(i++,i===et&&i++,i===ot&&i++,i>ae){if(a)throw"Bad character: "+e;i=Ft,a=!0}s+=1e5}return s}function fo(e,t){if(e>"V")throw"MGRSPoint given invalid Northing "+e;for(var i=Ss.charCodeAt(t-1),s=0,a=!1;i!==e.charCodeAt(0);){if(i++,i===et&&i++,i===ot&&i++,i>se){if(a)throw"Bad character: "+e;i=Ft,a=!0}s+=1e5}return s}function Io(e){var t;switch(e){case"C":t=11e5;break;case"D":t=2e6;break;case"E":t=28e5;break;case"F":t=37e5;break;case"G":t=46e5;break;case"H":t=55e5;break;case"J":t=64e5;break;case"K":t=73e5;break;case"L":t=82e5;break;case"M":t=91e5;break;case"N":t=0;break;case"P":t=8e5;break;case"Q":t=17e5;break;case"R":t=26e5;break;case"S":t=35e5;break;case"T":t=44e5;break;case"U":t=53e5;break;case"V":t=62e5;break;case"W":t=7e6;break;case"X":t=79e5;break;default:t=-1}if(t>=0)return t;throw"Invalid zone letter: "+e}function Ht(e,t,i){if(!(this instanceof Ht))return new Ht(e,t,i);if(Array.isArray(e))this.x=e[0],this.y=e[1],this.z=e[2]||0;else if(typeof e=="object")this.x=e.x,this.y=e.y,this.z=e.z||0;else if(typeof e=="string"&&typeof t>"u"){var s=e.split(",");this.x=parseFloat(s[0],10),this.y=parseFloat(s[1],10),this.z=parseFloat(s[2],10)||0}else this.x=e,this.y=t,this.z=i||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}Ht.fromMGRS=function(e){return new Ht(Ps(e))};Ht.prototype.toMGRS=function(e){return Ns([this.x,this.y],e)};var po=1,vo=.25,Zi=.046875,Wi=.01953125,qi=.01068115234375,yo=.75,bo=.46875,Mo=.013020833333333334,Eo=.007120768229166667,wo=.3645833333333333,Oo=.005696614583333333,xo=.3076171875;function Ds(e){var t=[];t[0]=po-e*(vo+e*(Zi+e*(Wi+e*qi))),t[1]=e*(yo-e*(Zi+e*(Wi+e*qi)));var i=e*e;return t[2]=i*(bo-e*(Mo+e*Eo)),i*=e,t[3]=i*(wo-e*Oo),t[4]=i*e*xo,t}function De(e,t,i,s){return i*=t,t*=t,s[0]*e-i*(s[1]+t*(s[2]+t*(s[3]+t*s[4])))}var _o=20;function Bs(e,t,i){for(var s=1/(1-t),a=e,o=_o;o;--o){var l=Math.sin(a),r=1-t*l*l;if(r=(De(a,l,Math.cos(a),i)-e)*(r*Math.sqrt(r))*s,a-=r,Math.abs(r)<x)return a}return a}function ko(){this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.es&&(this.en=Ds(this.es),this.ml0=De(this.lat0,Math.sin(this.lat0),Math.cos(this.lat0),this.en))}function So(e){var t=e.x,i=e.y,s=k(t-this.long0),a,o,l,r=Math.sin(i),h=Math.cos(i);if(this.es){var u=h*s,g=Math.pow(u,2),d=this.ep2*Math.pow(h,2),C=Math.pow(d,2),f=Math.abs(h)>x?Math.tan(i):0,m=Math.pow(f,2),v=Math.pow(m,2);a=1-this.es*Math.pow(r,2),u=u/Math.sqrt(a);var I=De(i,r,h,this.en);o=this.a*(this.k0*u*(1+g/6*(1-m+d+g/20*(5-18*m+v+14*d-58*m*d+g/42*(61+179*v-v*m-479*m)))))+this.x0,l=this.a*(this.k0*(I-this.ml0+r*s*u/2*(1+g/12*(5-m+9*d+4*C+g/30*(61+v-58*m+270*d-330*m*d+g/56*(1385+543*v-v*m-3111*m))))))+this.y0}else{var c=h*Math.sin(s);if(Math.abs(Math.abs(c)-1)<x)return 93;if(o=.5*this.a*this.k0*Math.log((1+c)/(1-c))+this.x0,l=h*Math.cos(s)/Math.sqrt(1-Math.pow(c,2)),c=Math.abs(l),c>=1){if(c-1>x)return 93;l=0}else l=Math.acos(l);i<0&&(l=-l),l=this.a*this.k0*(l-this.lat0)+this.y0}return e.x=o,e.y=l,e}function No(e){var t,i,s,a,o=(e.x-this.x0)*(1/this.a),l=(e.y-this.y0)*(1/this.a);if(this.es)if(t=this.ml0+l/this.k0,i=Bs(t,this.es,this.en),Math.abs(i)<E){var g=Math.sin(i),d=Math.cos(i),C=Math.abs(d)>x?Math.tan(i):0,f=this.ep2*Math.pow(d,2),m=Math.pow(f,2),v=Math.pow(C,2),I=Math.pow(v,2);t=1-this.es*Math.pow(g,2);var b=o*Math.sqrt(t)/this.k0,M=Math.pow(b,2);t=t*C,s=i-t*M/(1-this.es)*.5*(1-M/12*(5+3*v-9*f*v+f-4*m-M/30*(61+90*v-252*f*v+45*I+46*f-M/56*(1385+3633*v+4095*I+1574*I*v)))),a=k(this.long0+b*(1-M/6*(1+2*v+f-M/20*(5+28*v+24*I+8*f*v+6*f-M/42*(61+662*v+1320*I+720*I*v))))/d)}else s=E*ge(l),a=0;else{var r=Math.exp(o/this.k0),h=.5*(r-1/r),c=this.lat0+l/this.k0,u=Math.cos(c);t=Math.sqrt((1-Math.pow(u,2))/(1+Math.pow(h,2))),s=Math.asin(t),l<0&&(s=-s),h===0&&u===0?a=0:a=k(Math.atan2(h,u)+this.long0)}return e.x=a,e.y=s,e}var Po=["Fast_Transverse_Mercator","Fast Transverse Mercator"];const Ee={init:ko,forward:So,inverse:No,names:Po};function Vs(e){var t=Math.exp(e);return t=(t-1/t)/2,t}function ct(e,t){e=Math.abs(e),t=Math.abs(t);var i=Math.max(e,t),s=Math.min(e,t)/(i||1);return i*Math.sqrt(1+Math.pow(s,2))}function To(e){var t=1+e,i=t-1;return i===0?e:e*Math.log(t)/i}function Lo(e){var t=Math.abs(e);return t=To(t*(1+t/(ct(1,t)+1))),e<0?-t:t}function mi(e,t){for(var i=2*Math.cos(2*t),s=e.length-1,a=e[s],o=0,l;--s>=0;)l=-o+i*a+e[s],o=a,a=l;return t+l*Math.sin(2*t)}function Do(e,t){for(var i=2*Math.cos(t),s=e.length-1,a=e[s],o=0,l;--s>=0;)l=-o+i*a+e[s],o=a,a=l;return Math.sin(t)*l}function Bo(e){var t=Math.exp(e);return t=(t+1/t)/2,t}function Rs(e,t,i){for(var s=Math.sin(t),a=Math.cos(t),o=Vs(i),l=Bo(i),r=2*a*l,h=-2*s*o,c=e.length-1,u=e[c],g=0,d=0,C=0,f,m;--c>=0;)f=d,m=g,d=u,g=C,u=-f+r*d-h*g+e[c],C=-m+h*d+r*g;return r=s*l,h=a*o,[r*u-h*C,r*C+h*u]}function Vo(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(Ee.init.apply(this),this.forward=Ee.forward,this.inverse=Ee.inverse),this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var e=this.es/(1+Math.sqrt(1-this.es)),t=e/(2-e),i=t;this.cgb[0]=t*(2+t*(-2/3+t*(-2+t*(116/45+t*(26/45+t*(-2854/675)))))),this.cbg[0]=t*(-2+t*(2/3+t*(4/3+t*(-82/45+t*(32/45+t*(4642/4725)))))),i=i*t,this.cgb[1]=i*(7/3+t*(-8/5+t*(-227/45+t*(2704/315+t*(2323/945))))),this.cbg[1]=i*(5/3+t*(-16/15+t*(-13/9+t*(904/315+t*(-1522/945))))),i=i*t,this.cgb[2]=i*(56/15+t*(-136/35+t*(-1262/105+t*(73814/2835)))),this.cbg[2]=i*(-26/15+t*(34/21+t*(8/5+t*(-12686/2835)))),i=i*t,this.cgb[3]=i*(4279/630+t*(-332/35+t*(-399572/14175))),this.cbg[3]=i*(1237/630+t*(-12/5+t*(-24832/14175))),i=i*t,this.cgb[4]=i*(4174/315+t*(-144838/6237)),this.cbg[4]=i*(-734/315+t*(109598/31185)),i=i*t,this.cgb[5]=i*(601676/22275),this.cbg[5]=i*(444337/155925),i=Math.pow(t,2),this.Qn=this.k0/(1+t)*(1+i*(1/4+i*(1/64+i/256))),this.utg[0]=t*(-.5+t*(2/3+t*(-37/96+t*(1/360+t*(81/512+t*(-96199/604800)))))),this.gtu[0]=t*(.5+t*(-2/3+t*(5/16+t*(41/180+t*(-127/288+t*(7891/37800)))))),this.utg[1]=i*(-1/48+t*(-1/15+t*(437/1440+t*(-46/105+t*(1118711/3870720))))),this.gtu[1]=i*(13/48+t*(-3/5+t*(557/1440+t*(281/630+t*(-1983433/1935360))))),i=i*t,this.utg[2]=i*(-17/480+t*(37/840+t*(209/4480+t*(-5569/90720)))),this.gtu[2]=i*(61/240+t*(-103/140+t*(15061/26880+t*(167603/181440)))),i=i*t,this.utg[3]=i*(-4397/161280+t*(11/504+t*(830251/7257600))),this.gtu[3]=i*(49561/161280+t*(-179/168+t*(6601661/7257600))),i=i*t,this.utg[4]=i*(-4583/161280+t*(108847/3991680)),this.gtu[4]=i*(34729/80640+t*(-3418889/1995840)),i=i*t,this.utg[5]=i*(-20648693/638668800),this.gtu[5]=i*(212378941/319334400);var s=mi(this.cbg,this.lat0);this.Zb=-this.Qn*(s+Do(this.gtu,2*s))}function Ro(e){var t=k(e.x-this.long0),i=e.y;i=mi(this.cbg,i);var s=Math.sin(i),a=Math.cos(i),o=Math.sin(t),l=Math.cos(t);i=Math.atan2(s,l*a),t=Math.atan2(o*a,ct(s,a*l)),t=Lo(Math.tan(t));var r=Rs(this.gtu,2*i,2*t);i=i+r[0],t=t+r[1];var h,c;return Math.abs(t)<=2.623395162778?(h=this.a*(this.Qn*t)+this.x0,c=this.a*(this.Qn*i+this.Zb)+this.y0):(h=1/0,c=1/0),e.x=h,e.y=c,e}function Uo(e){var t=(e.x-this.x0)*(1/this.a),i=(e.y-this.y0)*(1/this.a);i=(i-this.Zb)/this.Qn,t=t/this.Qn;var s,a;if(Math.abs(t)<=2.623395162778){var o=Rs(this.utg,2*i,2*t);i=i+o[0],t=t+o[1],t=Math.atan(Vs(t));var l=Math.sin(i),r=Math.cos(i),h=Math.sin(t),c=Math.cos(t);i=Math.atan2(l*c,ct(h,c*r)),t=Math.atan2(h,c*r),s=k(t+this.long0),a=mi(this.cgb,i)}else s=1/0,a=1/0;return e.x=s,e.y=a,e}var Fo=["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","tmerc"];const we={init:Vo,forward:Ro,inverse:Uo,names:Fo};function zo(e,t){if(e===void 0){if(e=Math.floor((k(t)+Math.PI)*30/Math.PI)+1,e<0)return 0;if(e>60)return 60}return e}var jo="etmerc";function Go(){var e=zo(this.zone,this.long0);if(e===void 0)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(e)-183)*q,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,we.init.apply(this),this.forward=we.forward,this.inverse=we.inverse}var Ho=["Universal Transverse Mercator System","utm"];const Zo={init:Go,names:Ho,dependsOn:jo};function fi(e,t){return Math.pow((1-e)/(1+e),t)}var Wo=20;function qo(){var e=Math.sin(this.lat0),t=Math.cos(this.lat0);t*=t,this.rc=Math.sqrt(1-this.es)/(1-this.es*e*e),this.C=Math.sqrt(1+this.es*t*t/(1-this.es)),this.phic0=Math.asin(e/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+F)/(Math.pow(Math.tan(.5*this.lat0+F),this.C)*fi(this.e*e,this.ratexp))}function Yo(e){var t=e.x,i=e.y;return e.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*i+F),this.C)*fi(this.e*Math.sin(i),this.ratexp))-E,e.x=this.C*t,e}function Jo(e){for(var t=1e-14,i=e.x/this.C,s=e.y,a=Math.pow(Math.tan(.5*s+F)/this.K,1/this.C),o=Wo;o>0&&(s=2*Math.atan(a*fi(this.e*Math.sin(e.y),-.5*this.e))-E,!(Math.abs(s-e.y)<t));--o)e.y=s;return o?(e.x=i,e.y=s,e):null}const Ii={init:qo,forward:Yo,inverse:Jo};function Xo(){Ii.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))}function Ko(e){var t,i,s,a;return e.x=k(e.x-this.long0),Ii.forward.apply(this,[e]),t=Math.sin(e.y),i=Math.cos(e.y),s=Math.cos(e.x),a=this.k0*this.R2/(1+this.sinc0*t+this.cosc0*i*s),e.x=a*i*Math.sin(e.x),e.y=a*(this.cosc0*t-this.sinc0*i*s),e.x=this.a*e.x+this.x0,e.y=this.a*e.y+this.y0,e}function Qo(e){var t,i,s,a,o;if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,o=Math.sqrt(e.x*e.x+e.y*e.y)){var l=2*Math.atan2(o,this.R2);t=Math.sin(l),i=Math.cos(l),a=Math.asin(i*this.sinc0+e.y*t*this.cosc0/o),s=Math.atan2(e.x*t,o*this.cosc0*i-e.y*this.sinc0*t)}else a=this.phic0,s=0;return e.x=s,e.y=a,Ii.inverse.apply(this,[e]),e.x=k(e.x+this.long0),e}var $o=["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"];const tr={init:Xo,forward:Ko,inverse:Qo,names:$o};function er(e,t,i){return t*=i,Math.tan(.5*(E+e))*Math.pow((1-t)/(1+t),.5*i)}function ir(){this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=x&&(this.k0=.5*(1+ge(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=x&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=x&&(this.k0=.5*this.cons*mt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/gt(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=mt(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-E,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))}function sr(e){var t=e.x,i=e.y,s=Math.sin(i),a=Math.cos(i),o,l,r,h,c,u,g=k(t-this.long0);return Math.abs(Math.abs(t-this.long0)-Math.PI)<=x&&Math.abs(i+this.lat0)<=x?(e.x=NaN,e.y=NaN,e):this.sphere?(o=2*this.k0/(1+this.sinlat0*s+this.coslat0*a*Math.cos(g)),e.x=this.a*o*a*Math.sin(g)+this.x0,e.y=this.a*o*(this.coslat0*s-this.sinlat0*a*Math.cos(g))+this.y0,e):(l=2*Math.atan(this.ssfn_(i,s,this.e))-E,h=Math.cos(l),r=Math.sin(l),Math.abs(this.coslat0)<=x?(c=gt(this.e,i*this.con,this.con*s),u=2*this.a*this.k0*c/this.cons,e.x=this.x0+u*Math.sin(t-this.long0),e.y=this.y0-this.con*u*Math.cos(t-this.long0),e):(Math.abs(this.sinlat0)<x?(o=2*this.a*this.k0/(1+h*Math.cos(g)),e.y=o*r):(o=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*r+this.cosX0*h*Math.cos(g))),e.y=o*(this.cosX0*r-this.sinX0*h*Math.cos(g))+this.y0),e.x=o*h*Math.sin(g)+this.x0,e))}function ar(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,o,l=Math.sqrt(e.x*e.x+e.y*e.y);if(this.sphere){var r=2*Math.atan(l/(2*this.a*this.k0));return t=this.long0,i=this.lat0,l<=x?(e.x=t,e.y=i,e):(i=Math.asin(Math.cos(r)*this.sinlat0+e.y*Math.sin(r)*this.coslat0/l),Math.abs(this.coslat0)<x?this.lat0>0?t=k(this.long0+Math.atan2(e.x,-1*e.y)):t=k(this.long0+Math.atan2(e.x,e.y)):t=k(this.long0+Math.atan2(e.x*Math.sin(r),l*this.coslat0*Math.cos(r)-e.y*this.sinlat0*Math.sin(r))),e.x=t,e.y=i,e)}else if(Math.abs(this.coslat0)<=x){if(l<=x)return i=this.lat0,t=this.long0,e.x=t,e.y=i,e;e.x*=this.con,e.y*=this.con,s=l*this.cons/(2*this.a*this.k0),i=this.con*he(this.e,s),t=this.con*k(this.con*this.long0+Math.atan2(e.x,-1*e.y))}else a=2*Math.atan(l*this.cosX0/(2*this.a*this.k0*this.ms1)),t=this.long0,l<=x?o=this.X0:(o=Math.asin(Math.cos(a)*this.sinX0+e.y*Math.sin(a)*this.cosX0/l),t=k(this.long0+Math.atan2(e.x*Math.sin(a),l*this.cosX0*Math.cos(a)-e.y*this.sinX0*Math.sin(a)))),i=-1*he(this.e,Math.tan(.5*(E+o)));return e.x=t,e.y=i,e}var nr=["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"];const or={init:ir,forward:sr,inverse:ar,names:nr,ssfn_:er};function rr(){var e=this.lat0;this.lambda0=this.long0;var t=Math.sin(e),i=this.a,s=this.rf,a=1/s,o=2*a-Math.pow(a,2),l=this.e=Math.sqrt(o);this.R=this.k0*i*Math.sqrt(1-o)/(1-o*Math.pow(t,2)),this.alpha=Math.sqrt(1+o/(1-o)*Math.pow(Math.cos(e),4)),this.b0=Math.asin(t/this.alpha);var r=Math.log(Math.tan(Math.PI/4+this.b0/2)),h=Math.log(Math.tan(Math.PI/4+e/2)),c=Math.log((1+l*t)/(1-l*t));this.K=r-this.alpha*h+this.alpha*l/2*c}function lr(e){var t=Math.log(Math.tan(Math.PI/4-e.y/2)),i=this.e/2*Math.log((1+this.e*Math.sin(e.y))/(1-this.e*Math.sin(e.y))),s=-this.alpha*(t+i)+this.K,a=2*(Math.atan(Math.exp(s))-Math.PI/4),o=this.alpha*(e.x-this.lambda0),l=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(a)+Math.cos(this.b0)*Math.cos(o))),r=Math.asin(Math.cos(this.b0)*Math.sin(a)-Math.sin(this.b0)*Math.cos(a)*Math.cos(o));return e.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,e.x=this.R*l+this.x0,e}function hr(e){for(var t=e.x-this.x0,i=e.y-this.y0,s=t/this.R,a=2*(Math.atan(Math.exp(i/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(a)+Math.sin(this.b0)*Math.cos(a)*Math.cos(s)),l=Math.atan(Math.sin(s)/(Math.cos(this.b0)*Math.cos(s)-Math.sin(this.b0)*Math.tan(a))),r=this.lambda0+l/this.alpha,h=0,c=o,u=-1e3,g=0;Math.abs(c-u)>1e-7;){if(++g>20)return;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(c))/2)),u=c,c=2*Math.atan(Math.exp(h))-Math.PI/2}return e.x=r,e.y=c,e}var cr=["somerc"];const gr={init:rr,forward:lr,inverse:hr,names:cr};var Vt=1e-7;function dr(e){var t=["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"],i=typeof e.PROJECTION=="object"?Object.keys(e.PROJECTION)[0]:e.PROJECTION;return"no_uoff"in e||"no_off"in e||t.indexOf(i)!==-1}function ur(){var e,t,i,s,a,o,l,r,h,c,u=0,g,d=0,C=0,f=0,m=0,v=0,I=0;this.no_off=dr(this),this.no_rot="no_rot"in this;var b=!1;"alpha"in this&&(b=!0);var M=!1;if("rectified_grid_angle"in this&&(M=!0),b&&(I=this.alpha),M&&(u=this.rectified_grid_angle*q),b||M)d=this.longc;else if(C=this.long1,m=this.lat1,f=this.long2,v=this.lat2,Math.abs(m-v)<=Vt||(e=Math.abs(m))<=Vt||Math.abs(e-E)<=Vt||Math.abs(Math.abs(this.lat0)-E)<=Vt||Math.abs(Math.abs(v)-E)<=Vt)throw new Error;var O=1-this.es;t=Math.sqrt(O),Math.abs(this.lat0)>x?(r=Math.sin(this.lat0),i=Math.cos(this.lat0),e=1-this.es*r*r,this.B=i*i,this.B=Math.sqrt(1+this.es*this.B*this.B/O),this.A=this.B*this.k0*t/e,s=this.B*t/(i*Math.sqrt(e)),a=s*s-1,a<=0?a=0:(a=Math.sqrt(a),this.lat0<0&&(a=-a)),this.E=a+=s,this.E*=Math.pow(gt(this.e,this.lat0,r),this.B)):(this.B=1/t,this.A=this.k0,this.E=s=a=1),b||M?(b?(g=Math.asin(Math.sin(I)/s),M||(u=I)):(g=u,I=Math.asin(s*Math.sin(g))),this.lam0=d-Math.asin(.5*(a-1/a)*Math.tan(g))/this.B):(o=Math.pow(gt(this.e,m,Math.sin(m)),this.B),l=Math.pow(gt(this.e,v,Math.sin(v)),this.B),a=this.E/o,h=(l-o)/(l+o),c=this.E*this.E,c=(c-l*o)/(c+l*o),e=C-f,e<-Math.pi?f-=re:e>Math.pi&&(f+=re),this.lam0=k(.5*(C+f)-Math.atan(c*Math.tan(.5*this.B*(C-f))/h)/this.B),g=Math.atan(2*Math.sin(this.B*k(C-this.lam0))/(a-1/a)),u=I=Math.asin(s*Math.sin(g))),this.singam=Math.sin(g),this.cosgam=Math.cos(g),this.sinrot=Math.sin(u),this.cosrot=Math.cos(u),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A*this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(s*s-1)/Math.cos(I))),this.lat0<0&&(this.u_0=-this.u_0)),a=.5*g,this.v_pole_n=this.ArB*Math.log(Math.tan(F-a)),this.v_pole_s=this.ArB*Math.log(Math.tan(F+a))}function Ar(e){var t={},i,s,a,o,l,r,h,c;if(e.x=e.x-this.lam0,Math.abs(Math.abs(e.y)-E)>x){if(l=this.E/Math.pow(gt(this.e,e.y,Math.sin(e.y)),this.B),r=1/l,i=.5*(l-r),s=.5*(l+r),o=Math.sin(this.B*e.x),a=(i*this.singam-o*this.cosgam)/s,Math.abs(Math.abs(a)-1)<x)throw new Error;c=.5*this.ArB*Math.log((1-a)/(1+a)),r=Math.cos(this.B*e.x),Math.abs(r)<Vt?h=this.A*e.x:h=this.ArB*Math.atan2(i*this.cosgam+o*this.singam,r)}else c=e.y>0?this.v_pole_n:this.v_pole_s,h=this.ArB*e.y;return this.no_rot?(t.x=h,t.y=c):(h-=this.u_0,t.x=c*this.cosrot+h*this.sinrot,t.y=h*this.cosrot-c*this.sinrot),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t}function Cr(e){var t,i,s,a,o,l,r,h={};if(e.x=(e.x-this.x0)*(1/this.a),e.y=(e.y-this.y0)*(1/this.a),this.no_rot?(i=e.y,t=e.x):(i=e.x*this.cosrot-e.y*this.sinrot,t=e.y*this.cosrot+e.x*this.sinrot+this.u_0),s=Math.exp(-this.BrA*i),a=.5*(s-1/s),o=.5*(s+1/s),l=Math.sin(this.BrA*t),r=(l*this.cosgam+a*this.singam)/o,Math.abs(Math.abs(r)-1)<x)h.x=0,h.y=r<0?-E:E;else{if(h.y=this.E/Math.sqrt((1+r)/(1-r)),h.y=he(this.e,Math.pow(h.y,1/this.B)),h.y===1/0)throw new Error;h.x=-this.rB*Math.atan2(a*this.cosgam-l*this.singam,Math.cos(this.BrA*t))}return h.x+=this.lam0,h}var mr=["Hotine_Oblique_Mercator","Hotine Oblique Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin","Hotine_Oblique_Mercator_Two_Point_Natural_Origin","Hotine_Oblique_Mercator_Azimuth_Center","Oblique_Mercator","omerc"];const fr={init:ur,forward:Ar,inverse:Cr,names:mr};function Ir(){if(this.lat2||(this.lat2=this.lat1),this.k0||(this.k0=1),this.x0=this.x0||0,this.y0=this.y0||0,!(Math.abs(this.lat1+this.lat2)<x)){var e=this.b/this.a;this.e=Math.sqrt(1-e*e);var t=Math.sin(this.lat1),i=Math.cos(this.lat1),s=mt(this.e,t,i),a=gt(this.e,this.lat1,t),o=Math.sin(this.lat2),l=Math.cos(this.lat2),r=mt(this.e,o,l),h=gt(this.e,this.lat2,o),c=gt(this.e,this.lat0,Math.sin(this.lat0));Math.abs(this.lat1-this.lat2)>x?this.ns=Math.log(s/r)/Math.log(a/h):this.ns=t,isNaN(this.ns)&&(this.ns=t),this.f0=s/(this.ns*Math.pow(a,this.ns)),this.rh=this.a*this.f0*Math.pow(c,this.ns),this.title||(this.title="Lambert Conformal Conic")}}function pr(e){var t=e.x,i=e.y;Math.abs(2*Math.abs(i)-Math.PI)<=x&&(i=ge(i)*(E-2*x));var s=Math.abs(Math.abs(i)-E),a,o;if(s>x)a=gt(this.e,i,Math.sin(i)),o=this.a*this.f0*Math.pow(a,this.ns);else{if(s=i*this.ns,s<=0)return null;o=0}var l=this.ns*k(t-this.long0);return e.x=this.k0*(o*Math.sin(l))+this.x0,e.y=this.k0*(this.rh-o*Math.cos(l))+this.y0,e}function vr(e){var t,i,s,a,o,l=(e.x-this.x0)/this.k0,r=this.rh-(e.y-this.y0)/this.k0;this.ns>0?(t=Math.sqrt(l*l+r*r),i=1):(t=-Math.sqrt(l*l+r*r),i=-1);var h=0;if(t!==0&&(h=Math.atan2(i*l,i*r)),t!==0||this.ns>0){if(i=1/this.ns,s=Math.pow(t/(this.a*this.f0),i),a=he(this.e,s),a===-9999)return null}else a=-E;return o=k(h/this.ns+this.long0),e.x=o,e.y=a,e}var yr=["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"];const br={init:Ir,forward:pr,inverse:vr,names:yr};function Mr(){this.a=6377397155e-3,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.7417649320975901-.308341501185665),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq}function Er(e){var t,i,s,a,o,l,r,h=e.x,c=e.y,u=k(h-this.long0);return t=Math.pow((1+this.e*Math.sin(c))/(1-this.e*Math.sin(c)),this.alfa*this.e/2),i=2*(Math.atan(this.k*Math.pow(Math.tan(c/2+this.s45),this.alfa)/t)-this.s45),s=-u*this.alfa,a=Math.asin(Math.cos(this.ad)*Math.sin(i)+Math.sin(this.ad)*Math.cos(i)*Math.cos(s)),o=Math.asin(Math.cos(i)*Math.sin(s)/Math.cos(a)),l=this.n*o,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(a/2+this.s45),this.n),e.y=r*Math.cos(l)/1,e.x=r*Math.sin(l)/1,this.czech||(e.y*=-1,e.x*=-1),e}function wr(e){var t,i,s,a,o,l,r,h,c=e.x;e.x=e.y,e.y=c,this.czech||(e.y*=-1,e.x*=-1),l=Math.sqrt(e.x*e.x+e.y*e.y),o=Math.atan2(e.y,e.x),a=o/Math.sin(this.s0),s=2*(Math.atan(Math.pow(this.ro0/l,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),t=Math.asin(Math.cos(this.ad)*Math.sin(s)-Math.sin(this.ad)*Math.cos(s)*Math.cos(a)),i=Math.asin(Math.cos(s)*Math.sin(a)/Math.cos(t)),e.x=this.long0-i/this.alfa,r=t,h=0;var u=0;do e.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(t/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),Math.abs(r-e.y)<1e-10&&(h=1),r=e.y,u+=1;while(h===0&&u<15);return u>=15?null:e}var Or=["Krovak","krovak"];const xr={init:Mr,forward:Er,inverse:wr,names:Or};function $(e,t,i,s,a){return e*a-t*Math.sin(2*a)+i*Math.sin(4*a)-s*Math.sin(6*a)}function de(e){return 1-.25*e*(1+e/16*(3+1.25*e))}function ue(e){return .375*e*(1+.25*e*(1+.46875*e))}function Ae(e){return .05859375*e*e*(1+.75*e)}function Ce(e){return e*e*e*(35/3072)}function Zt(e,t,i){var s=t*i;return e/Math.sqrt(1-s*s)}function qt(e){return Math.abs(e)<E?e:e-ge(e)*Math.PI}function Ne(e,t,i,s,a){var o,l;o=e/t;for(var r=0;r<15;r++)if(l=(e-(t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-a*Math.sin(6*o)))/(t-2*i*Math.cos(2*o)+4*s*Math.cos(4*o)-6*a*Math.cos(6*o)),o+=l,Math.abs(l)<=1e-10)return o;return NaN}function _r(){this.sphere||(this.e0=de(this.es),this.e1=ue(this.es),this.e2=Ae(this.es),this.e3=Ce(this.es),this.ml0=this.a*$(this.e0,this.e1,this.e2,this.e3,this.lat0))}function kr(e){var t,i,s=e.x,a=e.y;if(s=k(s-this.long0),this.sphere)t=this.a*Math.asin(Math.cos(a)*Math.sin(s)),i=this.a*(Math.atan2(Math.tan(a),Math.cos(s))-this.lat0);else{var o=Math.sin(a),l=Math.cos(a),r=Zt(this.a,this.e,o),h=Math.tan(a)*Math.tan(a),c=s*Math.cos(a),u=c*c,g=this.es*l*l/(1-this.es),d=this.a*$(this.e0,this.e1,this.e2,this.e3,a);t=r*c*(1-u*h*(1/6-(8-h+8*g)*u/120)),i=d-this.ml0+r*o/l*u*(.5+(5-h+6*g)*u/24)}return e.x=t+this.x0,e.y=i+this.y0,e}function Sr(e){e.x-=this.x0,e.y-=this.y0;var t=e.x/this.a,i=e.y/this.a,s,a;if(this.sphere){var o=i+this.lat0;s=Math.asin(Math.sin(o)*Math.cos(t)),a=Math.atan2(Math.tan(t),Math.cos(o))}else{var l=this.ml0/this.a+i,r=Ne(l,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(r)-E)<=x)return e.x=this.long0,e.y=E,i<0&&(e.y*=-1),e;var h=Zt(this.a,this.e,Math.sin(r)),c=h*h*h/this.a/this.a*(1-this.es),u=Math.pow(Math.tan(r),2),g=t*this.a/h,d=g*g;s=r-h*Math.tan(r)/c*g*g*(.5-(1+3*u)*g*g/24),a=g*(1-d*(u/3+(1+3*u)*u*d/15))/Math.cos(r)}return e.x=k(a+this.long0),e.y=qt(s),e}var Nr=["Cassini","Cassini_Soldner","cass"];const Pr={init:_r,forward:kr,inverse:Sr,names:Nr};function yt(e,t){var i;return e>1e-7?(i=e*t,(1-e*e)*(t/(1-i*i)-.5/e*Math.log((1-i)/(1+i)))):2*t}var Tr=1,Lr=2,Dr=3,Br=4;function Vr(){var e=Math.abs(this.lat0);if(Math.abs(e-E)<x?this.mode=this.lat0<0?this.S_POLE:this.N_POLE:Math.abs(e)<x?this.mode=this.EQUIT:this.mode=this.OBLIQ,this.es>0){var t;switch(this.qp=yt(this.e,1),this.mmf=.5/(1-this.es),this.apa=Wr(this.es),this.mode){case this.N_POLE:this.dd=1;break;case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=yt(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd;break}}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))}function Rr(e){var t,i,s,a,o,l,r,h,c,u,g=e.x,d=e.y;if(g=k(g-this.long0),this.sphere){if(o=Math.sin(d),u=Math.cos(d),s=Math.cos(g),this.mode===this.OBLIQ||this.mode===this.EQUIT){if(i=this.mode===this.EQUIT?1+u*s:1+this.sinph0*o+this.cosph0*u*s,i<=x)return null;i=Math.sqrt(2/i),t=i*u*Math.sin(g),i*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*u*s}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(s=-s),Math.abs(d+this.lat0)<x)return null;i=F-d*.5,i=2*(this.mode===this.S_POLE?Math.cos(i):Math.sin(i)),t=i*Math.sin(g),i*=s}}else{switch(r=0,h=0,c=0,s=Math.cos(g),a=Math.sin(g),o=Math.sin(d),l=yt(this.e,o),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(r=l/this.qp,h=Math.sqrt(1-r*r)),this.mode){case this.OBLIQ:c=1+this.sinb1*r+this.cosb1*h*s;break;case this.EQUIT:c=1+h*s;break;case this.N_POLE:c=E+d,l=this.qp-l;break;case this.S_POLE:c=d-E,l=this.qp+l;break}if(Math.abs(c)<x)return null;switch(this.mode){case this.OBLIQ:case this.EQUIT:c=Math.sqrt(2/c),this.mode===this.OBLIQ?i=this.ymf*c*(this.cosb1*r-this.sinb1*h*s):i=(c=Math.sqrt(2/(1+h*s)))*r*this.ymf,t=this.xmf*c*h*a;break;case this.N_POLE:case this.S_POLE:l>=0?(t=(c=Math.sqrt(l))*a,i=s*(this.mode===this.S_POLE?c:-c)):t=i=0;break}}return e.x=this.a*t+this.x0,e.y=this.a*i+this.y0,e}function Ur(e){e.x-=this.x0,e.y-=this.y0;var t=e.x/this.a,i=e.y/this.a,s,a,o,l,r,h,c;if(this.sphere){var u=0,g,d=0;if(g=Math.sqrt(t*t+i*i),a=g*.5,a>1)return null;switch(a=2*Math.asin(a),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(d=Math.sin(a),u=Math.cos(a)),this.mode){case this.EQUIT:a=Math.abs(g)<=x?0:Math.asin(i*d/g),t*=d,i=u*g;break;case this.OBLIQ:a=Math.abs(g)<=x?this.lat0:Math.asin(u*this.sinph0+i*d*this.cosph0/g),t*=d*this.cosph0,i=(u-Math.sin(a)*this.sinph0)*g;break;case this.N_POLE:i=-i,a=E-a;break;case this.S_POLE:a-=E;break}s=i===0&&(this.mode===this.EQUIT||this.mode===this.OBLIQ)?0:Math.atan2(t,i)}else{if(c=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(t/=this.dd,i*=this.dd,h=Math.sqrt(t*t+i*i),h<x)return e.x=this.long0,e.y=this.lat0,e;l=2*Math.asin(.5*h/this.rq),o=Math.cos(l),t*=l=Math.sin(l),this.mode===this.OBLIQ?(c=o*this.sinb1+i*l*this.cosb1/h,r=this.qp*c,i=h*this.cosb1*o-i*this.sinb1*l):(c=i*l/h,r=this.qp*c,i=h*o)}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(i=-i),r=t*t+i*i,!r)return e.x=this.long0,e.y=this.lat0,e;c=1-r/this.qp,this.mode===this.S_POLE&&(c=-c)}s=Math.atan2(t,i),a=qr(Math.asin(c),this.apa)}return e.x=k(this.long0+s),e.y=a,e}var Fr=.3333333333333333,zr=.17222222222222222,jr=.10257936507936508,Gr=.06388888888888888,Hr=.0664021164021164,Zr=.016415012942191543;function Wr(e){var t,i=[];return i[0]=e*Fr,t=e*e,i[0]+=t*zr,i[1]=t*Gr,t*=e,i[0]+=t*jr,i[1]+=t*Hr,i[2]=t*Zr,i}function qr(e,t){var i=e+e;return e+t[0]*Math.sin(i)+t[1]*Math.sin(i+i)+t[2]*Math.sin(i+i+i)}var Yr=["Lambert Azimuthal Equal Area","Lambert_Azimuthal_Equal_Area","laea"];const Jr={init:Vr,forward:Rr,inverse:Ur,names:Yr,S_POLE:Tr,N_POLE:Lr,EQUIT:Dr,OBLIQ:Br};function Et(e){return Math.abs(e)>1&&(e=e>1?1:-1),Math.asin(e)}function Xr(){Math.abs(this.lat1+this.lat2)<x||(this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e3=Math.sqrt(this.es),this.sin_po=Math.sin(this.lat1),this.cos_po=Math.cos(this.lat1),this.t1=this.sin_po,this.con=this.sin_po,this.ms1=mt(this.e3,this.sin_po,this.cos_po),this.qs1=yt(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat2),this.cos_po=Math.cos(this.lat2),this.t2=this.sin_po,this.ms2=mt(this.e3,this.sin_po,this.cos_po),this.qs2=yt(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat0),this.cos_po=Math.cos(this.lat0),this.t3=this.sin_po,this.qs0=yt(this.e3,this.sin_po),Math.abs(this.lat1-this.lat2)>x?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)}function Kr(e){var t=e.x,i=e.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var s=yt(this.e3,this.sin_phi),a=this.a*Math.sqrt(this.c-this.ns0*s)/this.ns0,o=this.ns0*k(t-this.long0),l=a*Math.sin(o)+this.x0,r=this.rh-a*Math.cos(o)+this.y0;return e.x=l,e.y=r,e}function Qr(e){var t,i,s,a,o,l;return e.x-=this.x0,e.y=this.rh-e.y+this.y0,this.ns0>=0?(t=Math.sqrt(e.x*e.x+e.y*e.y),s=1):(t=-Math.sqrt(e.x*e.x+e.y*e.y),s=-1),a=0,t!==0&&(a=Math.atan2(s*e.x,s*e.y)),s=t*this.ns0/this.a,this.sphere?l=Math.asin((this.c-s*s)/(2*this.ns0)):(i=(this.c-s*s)/this.ns0,l=this.phi1z(this.e3,i)),o=k(a/this.ns0+this.long0),e.x=o,e.y=l,e}function $r(e,t){var i,s,a,o,l,r=Et(.5*t);if(e<x)return r;for(var h=e*e,c=1;c<=25;c++)if(i=Math.sin(r),s=Math.cos(r),a=e*i,o=1-a*a,l=.5*o*o/s*(t/(1-h)-i/o+.5/e*Math.log((1-a)/(1+a))),r=r+l,Math.abs(l)<=1e-7)return r;return null}var tl=["Albers_Conic_Equal_Area","Albers","aea"];const el={init:Xr,forward:Kr,inverse:Qr,names:tl,phi1z:$r};function il(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1}function sl(e){var t,i,s,a,o,l,r,h,c=e.x,u=e.y;return s=k(c-this.long0),t=Math.sin(u),i=Math.cos(u),a=Math.cos(s),l=this.sin_p14*t+this.cos_p14*i*a,o=1,l>0||Math.abs(l)<=x?(r=this.x0+this.a*o*i*Math.sin(s)/l,h=this.y0+this.a*o*(this.cos_p14*t-this.sin_p14*i*a)/l):(r=this.x0+this.infinity_dist*i*Math.sin(s),h=this.y0+this.infinity_dist*(this.cos_p14*t-this.sin_p14*i*a)),e.x=r,e.y=h,e}function al(e){var t,i,s,a,o,l;return e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,(t=Math.sqrt(e.x*e.x+e.y*e.y))?(a=Math.atan2(t,this.rc),i=Math.sin(a),s=Math.cos(a),l=Et(s*this.sin_p14+e.y*i*this.cos_p14/t),o=Math.atan2(e.x*i,t*this.cos_p14*s-e.y*this.sin_p14*i),o=k(this.long0+o)):(l=this.phic0,o=0),e.x=o,e.y=l,e}var nl=["gnom"];const ol={init:il,forward:sl,inverse:al,names:nl};function rl(e,t){var i=1-(1-e*e)/(2*e)*Math.log((1-e)/(1+e));if(Math.abs(Math.abs(t)-i)<1e-6)return t<0?-1*E:E;for(var s=Math.asin(.5*t),a,o,l,r,h=0;h<30;h++)if(o=Math.sin(s),l=Math.cos(s),r=e*o,a=Math.pow(1-r*r,2)/(2*l)*(t/(1-e*e)-o/(1-r*r)+.5/e*Math.log((1-r)/(1+r))),s+=a,Math.abs(a)<=1e-10)return s;return NaN}function ll(){this.sphere||(this.k0=mt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))}function hl(e){var t=e.x,i=e.y,s,a,o=k(t-this.long0);if(this.sphere)s=this.x0+this.a*o*Math.cos(this.lat_ts),a=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var l=yt(this.e,Math.sin(i));s=this.x0+this.a*this.k0*o,a=this.y0+this.a*l*.5/this.k0}return e.x=s,e.y=a,e}function cl(e){e.x-=this.x0,e.y-=this.y0;var t,i;return this.sphere?(t=k(this.long0+e.x/this.a/Math.cos(this.lat_ts)),i=Math.asin(e.y/this.a*Math.cos(this.lat_ts))):(i=rl(this.e,2*e.y*this.k0/this.a),t=k(this.long0+e.x/(this.a*this.k0))),e.x=t,e.y=i,e}var gl=["cea"];const dl={init:ll,forward:hl,inverse:cl,names:gl};function ul(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)}function Al(e){var t=e.x,i=e.y,s=k(t-this.long0),a=qt(i-this.lat0);return e.x=this.x0+this.a*s*this.rc,e.y=this.y0+this.a*a,e}function Cl(e){var t=e.x,i=e.y;return e.x=k(this.long0+(t-this.x0)/(this.a*this.rc)),e.y=qt(this.lat0+(i-this.y0)/this.a),e}var ml=["Equirectangular","Equidistant_Cylindrical","eqc"];const fl={init:ul,forward:Al,inverse:Cl,names:ml};var Yi=20;function Il(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=de(this.es),this.e1=ue(this.es),this.e2=Ae(this.es),this.e3=Ce(this.es),this.ml0=this.a*$(this.e0,this.e1,this.e2,this.e3,this.lat0)}function pl(e){var t=e.x,i=e.y,s,a,o,l=k(t-this.long0);if(o=l*Math.sin(i),this.sphere)Math.abs(i)<=x?(s=this.a*l,a=-1*this.a*this.lat0):(s=this.a*Math.sin(o)/Math.tan(i),a=this.a*(qt(i-this.lat0)+(1-Math.cos(o))/Math.tan(i)));else if(Math.abs(i)<=x)s=this.a*l,a=-1*this.ml0;else{var r=Zt(this.a,this.e,Math.sin(i))/Math.tan(i);s=r*Math.sin(o),a=this.a*$(this.e0,this.e1,this.e2,this.e3,i)-this.ml0+r*(1-Math.cos(o))}return e.x=s+this.x0,e.y=a+this.y0,e}function vl(e){var t,i,s,a,o,l,r,h,c;if(s=e.x-this.x0,a=e.y-this.y0,this.sphere)if(Math.abs(a+this.a*this.lat0)<=x)t=k(s/this.a+this.long0),i=0;else{l=this.lat0+a/this.a,r=s*s/this.a/this.a+l*l,h=l;var u;for(o=Yi;o;--o)if(u=Math.tan(h),c=-1*(l*(h*u+1)-h-.5*(h*h+r)*u)/((h-l)/u-1),h+=c,Math.abs(c)<=x){i=h;break}t=k(this.long0+Math.asin(s*Math.tan(h)/this.a)/Math.sin(i))}else if(Math.abs(a+this.ml0)<=x)i=0,t=k(this.long0+s/this.a);else{l=(this.ml0+a)/this.a,r=s*s/this.a/this.a+l*l,h=l;var g,d,C,f,m;for(o=Yi;o;--o)if(m=this.e*Math.sin(h),g=Math.sqrt(1-m*m)*Math.tan(h),d=this.a*$(this.e0,this.e1,this.e2,this.e3,h),C=this.e0-2*this.e1*Math.cos(2*h)+4*this.e2*Math.cos(4*h)-6*this.e3*Math.cos(6*h),f=d/this.a,c=(l*(g*f+1)-f-.5*g*(f*f+r))/(this.es*Math.sin(2*h)*(f*f+r-2*l*f)/(4*g)+(l-f)*(g*C-2/Math.sin(2*h))-C),h-=c,Math.abs(c)<=x){i=h;break}g=Math.sqrt(1-this.es*Math.pow(Math.sin(i),2))*Math.tan(i),t=k(this.long0+Math.asin(s*g/this.a)/Math.sin(i))}return e.x=t,e.y=i,e}var yl=["Polyconic","poly"];const bl={init:Il,forward:pl,inverse:vl,names:yl};function Ml(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013}function El(e){var t,i=e.x,s=e.y,a=s-this.lat0,o=i-this.long0,l=a/oe*1e-5,r=o,h=1,c=0;for(t=1;t<=10;t++)h=h*l,c=c+this.A[t]*h;var u=c,g=r,d=1,C=0,f,m,v=0,I=0;for(t=1;t<=6;t++)f=d*u-C*g,m=C*u+d*g,d=f,C=m,v=v+this.B_re[t]*d-this.B_im[t]*C,I=I+this.B_im[t]*d+this.B_re[t]*C;return e.x=I*this.a+this.x0,e.y=v*this.a+this.y0,e}function wl(e){var t,i=e.x,s=e.y,a=i-this.x0,o=s-this.y0,l=o/this.a,r=a/this.a,h=1,c=0,u,g,d=0,C=0;for(t=1;t<=6;t++)u=h*l-c*r,g=c*l+h*r,h=u,c=g,d=d+this.C_re[t]*h-this.C_im[t]*c,C=C+this.C_im[t]*h+this.C_re[t]*c;for(var f=0;f<this.iterations;f++){var m=d,v=C,I,b,M=l,O=r;for(t=2;t<=6;t++)I=m*d-v*C,b=v*d+m*C,m=I,v=b,M=M+(t-1)*(this.B_re[t]*m-this.B_im[t]*v),O=O+(t-1)*(this.B_im[t]*m+this.B_re[t]*v);m=1,v=0;var _=this.B_re[1],w=this.B_im[1];for(t=2;t<=6;t++)I=m*d-v*C,b=v*d+m*C,m=I,v=b,_=_+t*(this.B_re[t]*m-this.B_im[t]*v),w=w+t*(this.B_im[t]*m+this.B_re[t]*v);var S=_*_+w*w;d=(M*_+O*w)/S,C=(O*_-M*w)/S}var D=d,T=C,R=1,B=0;for(t=1;t<=9;t++)R=R*D,B=B+this.D[t]*R;var K=this.lat0+B*oe*1e5,Jt=this.long0+T;return e.x=Jt,e.y=K,e}var Ol=["New_Zealand_Map_Grid","nzmg"];const xl={init:Ml,forward:El,inverse:wl,names:Ol};function _l(){}function kl(e){var t=e.x,i=e.y,s=k(t-this.long0),a=this.x0+this.a*s,o=this.y0+this.a*Math.log(Math.tan(Math.PI/4+i/2.5))*1.25;return e.x=a,e.y=o,e}function Sl(e){e.x-=this.x0,e.y-=this.y0;var t=k(this.long0+e.x/this.a),i=2.5*(Math.atan(Math.exp(.8*e.y/this.a))-Math.PI/4);return e.x=t,e.y=i,e}var Nl=["Miller_Cylindrical","mill"];const Pl={init:_l,forward:kl,inverse:Sl,names:Nl};var Tl=20;function Ll(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Ds(this.es)}function Dl(e){var t,i,s=e.x,a=e.y;if(s=k(s-this.long0),this.sphere){if(!this.m)a=this.n!==1?Math.asin(this.n*Math.sin(a)):a;else for(var o=this.n*Math.sin(a),l=Tl;l;--l){var r=(this.m*a+Math.sin(a)-o)/(this.m+Math.cos(a));if(a-=r,Math.abs(r)<x)break}t=this.a*this.C_x*s*(this.m+Math.cos(a)),i=this.a*this.C_y*a}else{var h=Math.sin(a),c=Math.cos(a);i=this.a*De(a,h,c,this.en),t=this.a*s*c/Math.sqrt(1-this.es*h*h)}return e.x=t,e.y=i,e}function Bl(e){var t,i,s,a;return e.x-=this.x0,s=e.x/this.a,e.y-=this.y0,t=e.y/this.a,this.sphere?(t/=this.C_y,s=s/(this.C_x*(this.m+Math.cos(t))),this.m?t=Et((this.m*t+Math.sin(t))/this.n):this.n!==1&&(t=Et(Math.sin(t)/this.n)),s=k(s+this.long0),t=qt(t)):(t=Bs(e.y/this.a,this.es,this.en),a=Math.abs(t),a<E?(a=Math.sin(t),i=this.long0+e.x*Math.sqrt(1-this.es*a*a)/(this.a*Math.cos(t)),s=k(i)):a-x<E&&(s=this.long0)),e.x=s,e.y=t,e}var Vl=["Sinusoidal","sinu"];const Rl={init:Ll,forward:Dl,inverse:Bl,names:Vl};function Ul(){}function Fl(e){for(var t=e.x,i=e.y,s=k(t-this.long0),a=i,o=Math.PI*Math.sin(i);;){var l=-(a+Math.sin(a)-o)/(1+Math.cos(a));if(a+=l,Math.abs(l)<x)break}a/=2,Math.PI/2-Math.abs(i)<x&&(s=0);var r=.900316316158*this.a*s*Math.cos(a)+this.x0,h=1.4142135623731*this.a*Math.sin(a)+this.y0;return e.x=r,e.y=h,e}function zl(e){var t,i;e.x-=this.x0,e.y-=this.y0,i=e.y/(1.4142135623731*this.a),Math.abs(i)>.999999999999&&(i=.999999999999),t=Math.asin(i);var s=k(this.long0+e.x/(.900316316158*this.a*Math.cos(t)));s<-Math.PI&&(s=-Math.PI),s>Math.PI&&(s=Math.PI),i=(2*t+Math.sin(2*t))/Math.PI,Math.abs(i)>1&&(i=1);var a=Math.asin(i);return e.x=s,e.y=a,e}var jl=["Mollweide","moll"];const Gl={init:Ul,forward:Fl,inverse:zl,names:jl};function Hl(){Math.abs(this.lat1+this.lat2)<x||(this.lat2=this.lat2||this.lat1,this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=de(this.es),this.e1=ue(this.es),this.e2=Ae(this.es),this.e3=Ce(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=mt(this.e,this.sinphi,this.cosphi),this.ml1=$(this.e0,this.e1,this.e2,this.e3,this.lat1),Math.abs(this.lat1-this.lat2)<x?this.ns=this.sinphi:(this.sinphi=Math.sin(this.lat2),this.cosphi=Math.cos(this.lat2),this.ms2=mt(this.e,this.sinphi,this.cosphi),this.ml2=$(this.e0,this.e1,this.e2,this.e3,this.lat2),this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1)),this.g=this.ml1+this.ms1/this.ns,this.ml0=$(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0))}function Zl(e){var t=e.x,i=e.y,s;if(this.sphere)s=this.a*(this.g-i);else{var a=$(this.e0,this.e1,this.e2,this.e3,i);s=this.a*(this.g-a)}var o=this.ns*k(t-this.long0),l=this.x0+s*Math.sin(o),r=this.y0+this.rh-s*Math.cos(o);return e.x=l,e.y=r,e}function Wl(e){e.x-=this.x0,e.y=this.rh-e.y+this.y0;var t,i,s,a;this.ns>=0?(i=Math.sqrt(e.x*e.x+e.y*e.y),t=1):(i=-Math.sqrt(e.x*e.x+e.y*e.y),t=-1);var o=0;if(i!==0&&(o=Math.atan2(t*e.x,t*e.y)),this.sphere)return a=k(this.long0+o/this.ns),s=qt(this.g-i/this.a),e.x=a,e.y=s,e;var l=this.g-i/this.a;return s=Ne(l,this.e0,this.e1,this.e2,this.e3),a=k(this.long0+o/this.ns),e.x=a,e.y=s,e}var ql=["Equidistant_Conic","eqdc"];const Yl={init:Hl,forward:Zl,inverse:Wl,names:ql};function Jl(){this.R=this.a}function Xl(e){var t=e.x,i=e.y,s=k(t-this.long0),a,o;Math.abs(i)<=x&&(a=this.x0+this.R*s,o=this.y0);var l=Et(2*Math.abs(i/Math.PI));(Math.abs(s)<=x||Math.abs(Math.abs(i)-E)<=x)&&(a=this.x0,i>=0?o=this.y0+Math.PI*this.R*Math.tan(.5*l):o=this.y0+Math.PI*this.R*-Math.tan(.5*l));var r=.5*Math.abs(Math.PI/s-s/Math.PI),h=r*r,c=Math.sin(l),u=Math.cos(l),g=u/(c+u-1),d=g*g,C=g*(2/c-1),f=C*C,m=Math.PI*this.R*(r*(g-f)+Math.sqrt(h*(g-f)*(g-f)-(f+h)*(d-f)))/(f+h);s<0&&(m=-m),a=this.x0+m;var v=h+g;return m=Math.PI*this.R*(C*v-r*Math.sqrt((f+h)*(h+1)-v*v))/(f+h),i>=0?o=this.y0+m:o=this.y0-m,e.x=a,e.y=o,e}function Kl(e){var t,i,s,a,o,l,r,h,c,u,g,d,C;return e.x-=this.x0,e.y-=this.y0,g=Math.PI*this.R,s=e.x/g,a=e.y/g,o=s*s+a*a,l=-Math.abs(a)*(1+o),r=l-2*a*a+s*s,h=-2*l+1+2*a*a+o*o,C=a*a/h+(2*r*r*r/h/h/h-9*l*r/h/h)/27,c=(l-r*r/3/h)/h,u=2*Math.sqrt(-c/3),g=3*C/c/u,Math.abs(g)>1&&(g>=0?g=1:g=-1),d=Math.acos(g)/3,e.y>=0?i=(-u*Math.cos(d+Math.PI/3)-r/3/h)*Math.PI:i=-(-u*Math.cos(d+Math.PI/3)-r/3/h)*Math.PI,Math.abs(s)<x?t=this.long0:t=k(this.long0+Math.PI*(o-1+Math.sqrt(1+2*(s*s-a*a)+o*o))/2/s),e.x=t,e.y=i,e}var Ql=["Van_der_Grinten_I","VanDerGrinten","vandg"];const $l={init:Jl,forward:Xl,inverse:Kl,names:Ql};function th(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)}function eh(e){var t=e.x,i=e.y,s=Math.sin(e.y),a=Math.cos(e.y),o=k(t-this.long0),l,r,h,c,u,g,d,C,f,m,v,I,b,M,O,_,w,S,D,T,R,B,K;return this.sphere?Math.abs(this.sin_p12-1)<=x?(e.x=this.x0+this.a*(E-i)*Math.sin(o),e.y=this.y0-this.a*(E-i)*Math.cos(o),e):Math.abs(this.sin_p12+1)<=x?(e.x=this.x0+this.a*(E+i)*Math.sin(o),e.y=this.y0+this.a*(E+i)*Math.cos(o),e):(S=this.sin_p12*s+this.cos_p12*a*Math.cos(o),_=Math.acos(S),w=_?_/Math.sin(_):1,e.x=this.x0+this.a*w*a*Math.sin(o),e.y=this.y0+this.a*w*(this.cos_p12*s-this.sin_p12*a*Math.cos(o)),e):(l=de(this.es),r=ue(this.es),h=Ae(this.es),c=Ce(this.es),Math.abs(this.sin_p12-1)<=x?(u=this.a*$(l,r,h,c,E),g=this.a*$(l,r,h,c,i),e.x=this.x0+(u-g)*Math.sin(o),e.y=this.y0-(u-g)*Math.cos(o),e):Math.abs(this.sin_p12+1)<=x?(u=this.a*$(l,r,h,c,E),g=this.a*$(l,r,h,c,i),e.x=this.x0+(u+g)*Math.sin(o),e.y=this.y0+(u+g)*Math.cos(o),e):(d=s/a,C=Zt(this.a,this.e,this.sin_p12),f=Zt(this.a,this.e,s),m=Math.atan((1-this.es)*d+this.es*C*this.sin_p12/(f*a)),v=Math.atan2(Math.sin(o),this.cos_p12*Math.tan(m)-this.sin_p12*Math.cos(o)),v===0?D=Math.asin(this.cos_p12*Math.sin(m)-this.sin_p12*Math.cos(m)):Math.abs(Math.abs(v)-Math.PI)<=x?D=-Math.asin(this.cos_p12*Math.sin(m)-this.sin_p12*Math.cos(m)):D=Math.asin(Math.sin(o)*Math.cos(m)/Math.sin(v)),I=this.e*this.sin_p12/Math.sqrt(1-this.es),b=this.e*this.cos_p12*Math.cos(v)/Math.sqrt(1-this.es),M=I*b,O=b*b,T=D*D,R=T*D,B=R*D,K=B*D,_=C*D*(1-T*O*(1-O)/6+R/8*M*(1-2*O)+B/120*(O*(4-7*O)-3*I*I*(1-7*O))-K/48*M),e.x=this.x0+_*Math.sin(v),e.y=this.y0+_*Math.cos(v),e))}function ih(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,o,l,r,h,c,u,g,d,C,f,m,v,I,b,M,O,_,w,S,D;return this.sphere?(t=Math.sqrt(e.x*e.x+e.y*e.y),t>2*E*this.a?void 0:(i=t/this.a,s=Math.sin(i),a=Math.cos(i),o=this.long0,Math.abs(t)<=x?l=this.lat0:(l=Et(a*this.sin_p12+e.y*s*this.cos_p12/t),r=Math.abs(this.lat0)-E,Math.abs(r)<=x?this.lat0>=0?o=k(this.long0+Math.atan2(e.x,-e.y)):o=k(this.long0-Math.atan2(-e.x,e.y)):o=k(this.long0+Math.atan2(e.x*s,t*this.cos_p12*a-e.y*this.sin_p12*s))),e.x=o,e.y=l,e)):(h=de(this.es),c=ue(this.es),u=Ae(this.es),g=Ce(this.es),Math.abs(this.sin_p12-1)<=x?(d=this.a*$(h,c,u,g,E),t=Math.sqrt(e.x*e.x+e.y*e.y),C=d-t,l=Ne(C/this.a,h,c,u,g),o=k(this.long0+Math.atan2(e.x,-1*e.y)),e.x=o,e.y=l,e):Math.abs(this.sin_p12+1)<=x?(d=this.a*$(h,c,u,g,E),t=Math.sqrt(e.x*e.x+e.y*e.y),C=t-d,l=Ne(C/this.a,h,c,u,g),o=k(this.long0+Math.atan2(e.x,e.y)),e.x=o,e.y=l,e):(t=Math.sqrt(e.x*e.x+e.y*e.y),v=Math.atan2(e.x,e.y),f=Zt(this.a,this.e,this.sin_p12),I=Math.cos(v),b=this.e*this.cos_p12*I,M=-b*b/(1-this.es),O=3*this.es*(1-M)*this.sin_p12*this.cos_p12*I/(1-this.es),_=t/f,w=_-M*(1+M)*Math.pow(_,3)/6-O*(1+3*M)*Math.pow(_,4)/24,S=1-M*w*w/2-_*w*w*w/6,m=Math.asin(this.sin_p12*Math.cos(w)+this.cos_p12*Math.sin(w)*I),o=k(this.long0+Math.asin(Math.sin(v)*Math.sin(w)/Math.cos(m))),D=Math.sin(m),l=Math.atan2((D-this.es*S*this.sin_p12)*Math.tan(m),D*(1-this.es)),e.x=o,e.y=l,e))}var sh=["Azimuthal_Equidistant","aeqd"];const ah={init:th,forward:eh,inverse:ih,names:sh};function nh(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)}function oh(e){var t,i,s,a,o,l,r,h,c=e.x,u=e.y;return s=k(c-this.long0),t=Math.sin(u),i=Math.cos(u),a=Math.cos(s),l=this.sin_p14*t+this.cos_p14*i*a,o=1,(l>0||Math.abs(l)<=x)&&(r=this.a*o*i*Math.sin(s),h=this.y0+this.a*o*(this.cos_p14*t-this.sin_p14*i*a)),e.x=r,e.y=h,e}function rh(e){var t,i,s,a,o,l,r;return e.x-=this.x0,e.y-=this.y0,t=Math.sqrt(e.x*e.x+e.y*e.y),i=Et(t/this.a),s=Math.sin(i),a=Math.cos(i),l=this.long0,Math.abs(t)<=x?(r=this.lat0,e.x=l,e.y=r,e):(r=Et(a*this.sin_p14+e.y*s*this.cos_p14/t),o=Math.abs(this.lat0)-E,Math.abs(o)<=x?(this.lat0>=0?l=k(this.long0+Math.atan2(e.x,-e.y)):l=k(this.long0-Math.atan2(-e.x,e.y)),e.x=l,e.y=r,e):(l=k(this.long0+Math.atan2(e.x*s,t*this.cos_p14*a-e.y*this.sin_p14*s)),e.x=l,e.y=r,e))}var lh=["ortho"];const hh={init:nh,forward:oh,inverse:rh,names:lh};var H={FRONT:1,RIGHT:2,BACK:3,LEFT:4,TOP:5,BOTTOM:6},z={AREA_0:1,AREA_1:2,AREA_2:3,AREA_3:4};function ch(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=E-F/2?this.face=H.TOP:this.lat0<=-(E-F/2)?this.face=H.BOTTOM:Math.abs(this.long0)<=F?this.face=H.FRONT:Math.abs(this.long0)<=E+F?this.face=this.long0>0?H.RIGHT:H.LEFT:this.face=H.BACK,this.es!==0&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)}function gh(e){var t={x:0,y:0},i,s,a,o,l,r,h={value:0};if(e.x-=this.long0,this.es!==0?i=Math.atan(this.one_minus_f_squared*Math.tan(e.y)):i=e.y,s=e.x,this.face===H.TOP)o=E-i,s>=F&&s<=E+F?(h.value=z.AREA_0,a=s-E):s>E+F||s<=-(E+F)?(h.value=z.AREA_1,a=s>0?s-Z:s+Z):s>-(E+F)&&s<=-F?(h.value=z.AREA_2,a=s+E):(h.value=z.AREA_3,a=s);else if(this.face===H.BOTTOM)o=E+i,s>=F&&s<=E+F?(h.value=z.AREA_0,a=-s+E):s<F&&s>=-F?(h.value=z.AREA_1,a=-s):s<-F&&s>=-(E+F)?(h.value=z.AREA_2,a=-s-E):(h.value=z.AREA_3,a=s>0?-s+Z:-s-Z);else{var c,u,g,d,C,f,m;this.face===H.RIGHT?s=Gt(s,+E):this.face===H.BACK?s=Gt(s,+Z):this.face===H.LEFT&&(s=Gt(s,-E)),d=Math.sin(i),C=Math.cos(i),f=Math.sin(s),m=Math.cos(s),c=C*m,u=C*f,g=d,this.face===H.FRONT?(o=Math.acos(c),a=fe(o,g,u,h)):this.face===H.RIGHT?(o=Math.acos(u),a=fe(o,g,-c,h)):this.face===H.BACK?(o=Math.acos(-c),a=fe(o,g,-u,h)):this.face===H.LEFT?(o=Math.acos(-u),a=fe(o,g,c,h)):(o=a=0,h.value=z.AREA_0)}return r=Math.atan(12/Z*(a+Math.acos(Math.sin(a)*Math.cos(F))-E)),l=Math.sqrt((1-Math.cos(o))/(Math.cos(r)*Math.cos(r))/(1-Math.cos(Math.atan(1/Math.cos(a))))),h.value===z.AREA_1?r+=E:h.value===z.AREA_2?r+=Z:h.value===z.AREA_3&&(r+=1.5*Z),t.x=l*Math.cos(r),t.y=l*Math.sin(r),t.x=t.x*this.a+this.x0,t.y=t.y*this.a+this.y0,e.x=t.x,e.y=t.y,e}function dh(e){var t={lam:0,phi:0},i,s,a,o,l,r,h,c,u,g={value:0};if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,s=Math.atan(Math.sqrt(e.x*e.x+e.y*e.y)),i=Math.atan2(e.y,e.x),e.x>=0&&e.x>=Math.abs(e.y)?g.value=z.AREA_0:e.y>=0&&e.y>=Math.abs(e.x)?(g.value=z.AREA_1,i-=E):e.x<0&&-e.x>=Math.abs(e.y)?(g.value=z.AREA_2,i=i<0?i+Z:i-Z):(g.value=z.AREA_3,i+=E),u=Z/12*Math.tan(i),l=Math.sin(u)/(Math.cos(u)-1/Math.sqrt(2)),r=Math.atan(l),a=Math.cos(i),o=Math.tan(s),h=1-a*a*o*o*(1-Math.cos(Math.atan(1/Math.cos(r)))),h<-1?h=-1:h>1&&(h=1),this.face===H.TOP)c=Math.acos(h),t.phi=E-c,g.value===z.AREA_0?t.lam=r+E:g.value===z.AREA_1?t.lam=r<0?r+Z:r-Z:g.value===z.AREA_2?t.lam=r-E:t.lam=r;else if(this.face===H.BOTTOM)c=Math.acos(h),t.phi=c-E,g.value===z.AREA_0?t.lam=-r+E:g.value===z.AREA_1?t.lam=-r:g.value===z.AREA_2?t.lam=-r-E:t.lam=r<0?-r-Z:-r+Z;else{var d,C,f;d=h,u=d*d,u>=1?f=0:f=Math.sqrt(1-u)*Math.sin(r),u+=f*f,u>=1?C=0:C=Math.sqrt(1-u),g.value===z.AREA_1?(u=C,C=-f,f=u):g.value===z.AREA_2?(C=-C,f=-f):g.value===z.AREA_3&&(u=C,C=f,f=-u),this.face===H.RIGHT?(u=d,d=-C,C=u):this.face===H.BACK?(d=-d,C=-C):this.face===H.LEFT&&(u=d,d=C,C=-u),t.phi=Math.acos(-f)-E,t.lam=Math.atan2(C,d),this.face===H.RIGHT?t.lam=Gt(t.lam,-E):this.face===H.BACK?t.lam=Gt(t.lam,-Z):this.face===H.LEFT&&(t.lam=Gt(t.lam,+E))}if(this.es!==0){var m,v,I;m=t.phi<0?1:0,v=Math.tan(t.phi),I=this.b/Math.sqrt(v*v+this.one_minus_f_squared),t.phi=Math.atan(Math.sqrt(this.a*this.a-I*I)/(this.one_minus_f*I)),m&&(t.phi=-t.phi)}return t.lam+=this.long0,e.x=t.lam,e.y=t.phi,e}function fe(e,t,i,s){var a;return e<x?(s.value=z.AREA_0,a=0):(a=Math.atan2(t,i),Math.abs(a)<=F?s.value=z.AREA_0:a>F&&a<=E+F?(s.value=z.AREA_1,a-=E):a>E+F||a<=-(E+F)?(s.value=z.AREA_2,a=a>=0?a-Z:a+Z):(s.value=z.AREA_3,a+=E)),a}function Gt(e,t){var i=e+t;return i<-Z?i+=re:i>+Z&&(i-=re),i}var uh=["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"];const Ah={init:ch,forward:gh,inverse:dh,names:uh};var hi=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-986701e-12],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,18736e-12],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,934959e-12],[.7986,-.00755338,-500009e-10,935324e-12],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],ne=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-126793e-14,422642e-15],[.124,.0124,507171e-14,-160604e-14],[.186,.0123999,-190189e-13,600152e-14],[.248,.0124002,710039e-13,-224e-10],[.31,.0123992,-264997e-12,835986e-13],[.372,.0124029,988983e-12,-311994e-12],[.434,.0123893,-369093e-11,-435621e-12],[.4958,.0123198,-102252e-10,-345523e-12],[.5571,.0121916,-154081e-10,-582288e-12],[.6176,.0119938,-241424e-10,-525327e-12],[.6769,.011713,-320223e-10,-516405e-12],[.7346,.0113541,-397684e-10,-609052e-12],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-140374e-14],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],Us=.8487,Fs=1.3523,zs=At/5,Ch=1/zs,zt=18,Pe=function(e,t){return e[0]+t*(e[1]+t*(e[2]+t*e[3]))},mh=function(e,t){return e[1]+t*(2*e[2]+t*3*e[3])};function fh(e,t,i,s){for(var a=t;s;--s){var o=e(a);if(a-=o,Math.abs(o)<i)break}return a}function Ih(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"}function ph(e){var t=k(e.x-this.long0),i=Math.abs(e.y),s=Math.floor(i*zs);s<0?s=0:s>=zt&&(s=zt-1),i=At*(i-Ch*s);var a={x:Pe(hi[s],i)*t,y:Pe(ne[s],i)};return e.y<0&&(a.y=-a.y),a.x=a.x*this.a*Us+this.x0,a.y=a.y*this.a*Fs+this.y0,a}function vh(e){var t={x:(e.x-this.x0)/(this.a*Us),y:Math.abs(e.y-this.y0)/(this.a*Fs)};if(t.y>=1)t.x/=hi[zt][0],t.y=e.y<0?-E:E;else{var i=Math.floor(t.y*zt);for(i<0?i=0:i>=zt&&(i=zt-1);;)if(ne[i][0]>t.y)--i;else if(ne[i+1][0]<=t.y)++i;else break;var s=ne[i],a=5*(t.y-s[0])/(ne[i+1][0]-s[0]);a=fh(function(o){return(Pe(s,o)-t.y)/mh(s,o)},a,x,100),t.x/=Pe(hi[i],a),t.y=(5*i+a)*q,e.y<0&&(t.y=-t.y)}return t.x=k(t.x+this.long0),t}var yh=["Robinson","robin"];const bh={init:Ih,forward:ph,inverse:vh,names:yh};function Mh(){this.name="geocent"}function Eh(e){var t=Os(e,this.es,this.a);return t}function wh(e){var t=xs(e,this.es,this.a,this.b);return t}var Oh=["Geocentric","geocentric","geocent","Geocent"];const xh={init:Mh,forward:Eh,inverse:wh,names:Oh};var J={N_POLE:0,S_POLE:1,EQUIT:2,OBLIQ:3},Xt={h:{def:1e5,num:!0},azi:{def:0,num:!0,degrees:!0},tilt:{def:0,num:!0,degrees:!0},long0:{def:0,num:!0},lat0:{def:0,num:!0}};function _h(){if(Object.keys(Xt).forEach((function(i){if(typeof this[i]>"u")this[i]=Xt[i].def;else{if(Xt[i].num&&isNaN(this[i]))throw new Error("Invalid parameter value, must be numeric "+i+" = "+this[i]);Xt[i].num&&(this[i]=parseFloat(this[i]))}Xt[i].degrees&&(this[i]=this[i]*q)}).bind(this)),Math.abs(Math.abs(this.lat0)-E)<x?this.mode=this.lat0<0?J.S_POLE:J.N_POLE:Math.abs(this.lat0)<x?this.mode=J.EQUIT:(this.mode=J.OBLIQ,this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0)),this.pn1=this.h/this.a,this.pn1<=0||this.pn1>1e10)throw new Error("Invalid height");this.p=1+this.pn1,this.rp=1/this.p,this.h1=1/this.pn1,this.pfact=(this.p+1)*this.h1,this.es=0;var e=this.tilt,t=this.azi;this.cg=Math.cos(t),this.sg=Math.sin(t),this.cw=Math.cos(e),this.sw=Math.sin(e)}function kh(e){e.x-=this.long0;var t=Math.sin(e.y),i=Math.cos(e.y),s=Math.cos(e.x),a,o;switch(this.mode){case J.OBLIQ:o=this.sinph0*t+this.cosph0*i*s;break;case J.EQUIT:o=i*s;break;case J.S_POLE:o=-t;break;case J.N_POLE:o=t;break}switch(o=this.pn1/(this.p-o),a=o*i*Math.sin(e.x),this.mode){case J.OBLIQ:o*=this.cosph0*t-this.sinph0*i*s;break;case J.EQUIT:o*=t;break;case J.N_POLE:o*=-(i*s);break;case J.S_POLE:o*=i*s;break}var l,r;return l=o*this.cg+a*this.sg,r=1/(l*this.sw*this.h1+this.cw),a=(a*this.cg-o*this.sg)*this.cw*r,o=l*r,e.x=a*this.a,e.y=o*this.a,e}function Sh(e){e.x/=this.a,e.y/=this.a;var t={x:e.x,y:e.y},i,s,a;a=1/(this.pn1-e.y*this.sw),i=this.pn1*e.x*a,s=this.pn1*e.y*this.cw*a,e.x=i*this.cg+s*this.sg,e.y=s*this.cg-i*this.sg;var o=ct(e.x,e.y);if(Math.abs(o)<x)t.x=0,t.y=e.y;else{var l,r;switch(r=1-o*o*this.pfact,r=(this.p-Math.sqrt(r))/(this.pn1/o+o/this.pn1),l=Math.sqrt(1-r*r),this.mode){case J.OBLIQ:t.y=Math.asin(l*this.sinph0+e.y*r*this.cosph0/o),e.y=(l-this.sinph0*Math.sin(t.y))*o,e.x*=r*this.cosph0;break;case J.EQUIT:t.y=Math.asin(e.y*r/o),e.y=l*o,e.x*=r;break;case J.N_POLE:t.y=Math.asin(l),e.y=-e.y;break;case J.S_POLE:t.y=-Math.asin(l);break}t.x=Math.atan2(e.x,e.y)}return e.x=t.x+this.long0,e.y=t.y,e}var Nh=["Tilted_Perspective","tpers"];const Ph={init:_h,forward:kh,inverse:Sh,names:Nh};function Th(){if(this.flip_axis=this.sweep==="x"?1:0,this.h=Number(this.h),this.radius_g_1=this.h/this.a,this.radius_g_1<=0||this.radius_g_1>1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,this.es!==0){var e=1-this.es,t=1/e;this.radius_p=Math.sqrt(e),this.radius_p2=e,this.radius_p_inv2=t,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")}function Lh(e){var t=e.x,i=e.y,s,a,o,l;if(t=t-this.long0,this.shape==="ellipse"){i=Math.atan(this.radius_p2*Math.tan(i));var r=this.radius_p/ct(this.radius_p*Math.cos(i),Math.sin(i));if(a=r*Math.cos(t)*Math.cos(i),o=r*Math.sin(t)*Math.cos(i),l=r*Math.sin(i),(this.radius_g-a)*a-o*o-l*l*this.radius_p_inv2<0)return e.x=Number.NaN,e.y=Number.NaN,e;s=this.radius_g-a,this.flip_axis?(e.x=this.radius_g_1*Math.atan(o/ct(l,s)),e.y=this.radius_g_1*Math.atan(l/s)):(e.x=this.radius_g_1*Math.atan(o/s),e.y=this.radius_g_1*Math.atan(l/ct(o,s)))}else this.shape==="sphere"&&(s=Math.cos(i),a=Math.cos(t)*s,o=Math.sin(t)*s,l=Math.sin(i),s=this.radius_g-a,this.flip_axis?(e.x=this.radius_g_1*Math.atan(o/ct(l,s)),e.y=this.radius_g_1*Math.atan(l/s)):(e.x=this.radius_g_1*Math.atan(o/s),e.y=this.radius_g_1*Math.atan(l/ct(o,s))));return e.x=e.x*this.a,e.y=e.y*this.a,e}function Dh(e){var t=-1,i=0,s=0,a,o,l,r;if(e.x=e.x/this.a,e.y=e.y/this.a,this.shape==="ellipse"){this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),i=Math.tan(e.x/this.radius_g_1)*ct(1,s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*ct(1,i));var h=s/this.radius_p;if(a=i*i+h*h+t*t,o=2*this.radius_g*t,l=o*o-4*a*this.C,l<0)return e.x=Number.NaN,e.y=Number.NaN,e;r=(-o-Math.sqrt(l))/(2*a),t=this.radius_g+r*t,i*=r,s*=r,e.x=Math.atan2(i,t),e.y=Math.atan(s*Math.cos(e.x)/t),e.y=Math.atan(this.radius_p_inv2*Math.tan(e.y))}else if(this.shape==="sphere"){if(this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),i=Math.tan(e.x/this.radius_g_1)*Math.sqrt(1+s*s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*Math.sqrt(1+i*i)),a=i*i+s*s+t*t,o=2*this.radius_g*t,l=o*o-4*a*this.C,l<0)return e.x=Number.NaN,e.y=Number.NaN,e;r=(-o-Math.sqrt(l))/(2*a),t=this.radius_g+r*t,i*=r,s*=r,e.x=Math.atan2(i,t),e.y=Math.atan(s*Math.cos(e.x)/t)}return e.x=e.x+this.long0,e}var Bh=["Geostationary Satellite View","Geostationary_Satellite","geos"];const Vh={init:Th,forward:Lh,inverse:Dh,names:Bh};function Rh(e){e.Proj.projections.add(Ee),e.Proj.projections.add(we),e.Proj.projections.add(Zo),e.Proj.projections.add(tr),e.Proj.projections.add(or),e.Proj.projections.add(gr),e.Proj.projections.add(fr),e.Proj.projections.add(br),e.Proj.projections.add(xr),e.Proj.projections.add(Pr),e.Proj.projections.add(Jr),e.Proj.projections.add(el),e.Proj.projections.add(ol),e.Proj.projections.add(dl),e.Proj.projections.add(fl),e.Proj.projections.add(bl),e.Proj.projections.add(xl),e.Proj.projections.add(Pl),e.Proj.projections.add(Rl),e.Proj.projections.add(Gl),e.Proj.projections.add(Yl),e.Proj.projections.add($l),e.Proj.projections.add(ah),e.Proj.projections.add(hh),e.Proj.projections.add(Ah),e.Proj.projections.add(bh),e.Proj.projections.add(xh),e.Proj.projections.add(Ph),e.Proj.projections.add(Vh)}at.defaultDatum="WGS84";at.Proj=Ct;at.WGS84=new at.Proj("WGS84");at.Point=Ht;at.toPoint=_s;at.defs=Q;at.nadgrid=Wn;at.transform=Se;at.mgrs=lo;at.version="__VERSION__";Rh(at);async function Uh(e){let t=null;const i=[/EPSG:+(\d+)/,/http:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/,/https:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/];for(const s of i){const a=e.match(s);if(a!==null){t=a[1];break}}if(t!=null){const s=`EPSG:${t}`;if(at.defs(s)===void 0){const a=await A.Fetcher.fetchText(`https://epsg.io/${t}.proj4`);cs.registerCRS(s,a)}return s}throw new Error(`Could not find projection for ${e}`)}const pi={loadProjCrsIfNeeded:Uh};async function Fh(e,t,i,s,a){const o=new A.Clock;o.start();const l=[],r=new Map;for(const h of e){const c=h.getGeometry(),u=c==null?void 0:c.getType();if(c==null||u==null)continue;const g=[],d=c.getFlatCoordinates(),C=c.getStride();if(!(C>=3&&d[2]!=null&&d[2]!==a)){for(let f=0;f<d.length;f+=C){const m=new ce(t,d[f+0],d[f+1],C>=3?d[f+2]:a);g.push(m),l.push(m)}r.set(h.ol_uid,g)}}console.debug(`Fetching altitudes for ${l.length} coordinates from ${e.length} features...`),await i(l);for(const h of e){const c=r.get(h.ol_uid),u=h.getGeometry();if(!(u==null||c==null))switch(u.getType()){case"LineString":case"MultiPoint":{const g=u,d=g.getCoordinates();for(let C=0;C<d.length;C+=1)d[C][2]=c[C].values[2]+s;g.setCoordinates(d);break}case"MultiLineString":case"Polygon":{const g=u,d=g.getCoordinates();let C=0;for(let f=0;f<d.length;f+=1)for(let m=0;m<d[f].length;m+=1)d[f][m][2]=c[C].values[2]+s,C+=1;g.setCoordinates(d);break}case"MultiPolygon":{const g=u,d=g.getCoordinates();let C=0;for(let f=0;f<d.length;f+=1)for(let m=0;m<d[f].length;m+=1)for(let v=0;v<d[f][m].length;v+=1)d[f][m][v][2]=c[C].values[2]+s,C+=1;g.setCoordinates(d);break}case"Point":{const g=u,d=g.getCoordinates();d[2]=c[0].values[2]+s,g.setCoordinates(d);break}}}console.debug(`Fetched all missing altitudes in ${o.getElapsedTime()}s`),o.stop()}function zh(e,t,i){for(const s of e){const a=s.getGeometry();if(a==null)continue;const o=a.getStride(),l=a.getFlatCoordinates();if(!(o>=3&&l[2]!=null&&l[2]!==i))switch(a.getType()){case"LineString":case"MultiPoint":{const r=a,h=r.getCoordinates();for(let c=0;c<h.length;c+=1)h[c][2]=t;r.setCoordinates(h);break}case"MultiLineString":case"Polygon":{const r=a,h=r.getCoordinates();for(let c=0;c<h.length;c+=1)for(let u=0;u<h[c].length;u+=1)h[c][u][2]=t;r.setCoordinates(h);break}case"MultiPolygon":{const r=a,h=r.getCoordinates();for(let c=0;c<h.length;c+=1)for(let u=0;u<h[c].length;u+=1)for(let g=0;g<h[c][u].length;g+=1)h[c][u][g][2]=t;r.setCoordinates(h);break}case"Point":{const r=a,h=r.getCoordinates();h[2]=t,r.setCoordinates(h);break}}}}async function jh(e,t,i,s){const a=await pi.loadProjCrsIfNeeded(i??"EPSG:4326");return t.readFeatures(e,{dataProjection:a,featureProjection:s})}function Gh(e,t,i,s){return js(t.readFeatures(e,{dataProjection:i,featureProjection:s}))}function Hh(e,t){const i=new A.Group,s=new Oa,a=e.map(o=>{const l=o.getGeometry();if(l!=null){const r=l.getType();let h;switch(r){case"LineString":h=s.build(l);break;case"MultiLineString":h=s.build(l);break;case"MultiPoint":h=s.build(l);break;case"MultiPolygon":h=s.build(l,t);break;case"Point":h=s.build(l);break;case"Polygon":h=s.build(l,t);break;default:console.warn(`Unsupported type ${r}`),h=null}if(h)for(const[c,u]of Object.entries(o.getProperties()))c!=="geometry"&&(h.userData[c]=u);return h}});for(const o of a)o!=null&&i.add(o);return i}function js(e){return e.filter(t=>{var s;if("getType"in t)return!1;const i=(s=t.getGeometry())==null?void 0:s.getType();return!(i==null||!["LineString","MultiLineString","MultiPoint","MultiPolygon","Point","Polygon"].includes(i))})}const Wt={fetchZCoordinates:Fh,fillZCoordinates:zh,readFeatures:jh,readSimpleFeatures:Gh,toMeshes:Hh,toSimpleFeatures:js},Zh=new Ma,Wh=new Ea,qh=new wa,rt={dataProjection:"EPSG:4326",elevation:0,fetchElevation:!1,fetchElevationFast:!1,fetchElevationOffset:.1,noDataValue:0};class Yh{constructor(t){y(this,"elevation");y(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await A.Fetcher.fetchJson(this.options.url),s=Qh(i);return await yi(t,s,this.options)}}class vi{constructor(t,i){y(this,"elevation");y(this,"format");y(this,"noDataValue");y(this,"options");this.format=t,this.options=i,this.elevation=i.elevation,this.noDataValue=i.noDataValue}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await A.Fetcher.fetchText(this.options.url);return await $h(t,i,this.format,this.options)}}class Jh extends vi{constructor(t){super(Wh,t)}}class Xh extends vi{constructor(t){super(qh,t)}}async function yi(e,t,i){const s=await pi.loadProjCrsIfNeeded(i.dataProjection??rt.dataProjection),a=t.flatMap(r=>Zh.readFeatures(r,{dataProjection:s,featureProjection:i.featureProjection})),o=Wt.toSimpleFeatures(a);if(i.fetchElevation??rt.fetchElevation){const r=i.fetchElevationFast??rt.fetchElevationFast,h=i.fetchElevationOffset??rt.fetchElevationOffset,c=i.noDataValue??rt.noDataValue;await Wt.fetchZCoordinates(o,i.featureProjection,Cs(e,r,c),h,c)}return o}function Kh(e,t,i=rt.elevation,s=rt.noDataValue){const a=(Array.isArray(t==null?void 0:t.elevation)?t.elevation[0]:t==null?void 0:t.elevation)??i;return Wt.fillZCoordinates(e,a,s),Wt.toMeshes(e,t)}function Qh(e){switch(e.type){case"Feature":return[e];case"FeatureCollection":return e.features;case"GeometryCollection":return e.geometries.map(i=>({geometry:i,properties:{},type:"Feature"}));default:return[{geometry:e,properties:{},type:"Feature"}]}}async function $h(e,t,i,s){const a=Wt.readSimpleFeatures(t,i,s.dataProjection??rt.dataProjection,s.featureProjection);if(s.fetchElevation??rt.fetchElevation){const l=s.fetchElevationFast??rt.fetchElevationFast,r=s.fetchElevationOffset??rt.fetchElevationOffset,h=s.noDataValue??rt.noDataValue;await Wt.fetchZCoordinates(a,s.featureProjection,Cs(e,l,h),r,h)}return a}class tc extends ui{constructor(i){super(new A.Group);y(this,"sources");this.sources=Array.isArray(i)?i:[i]}async preprocess(){for(const i of this.sources){const s=await i.load(this.instance),a=Kh(s,{elevation:i.elevation,fill:{color:Ei.DEFAULT_SURFACE_COLOR},stroke:{color:Ei.DEFAULT_LINE_COLOR}},i.elevation,i.noDataValue);this.object3d.add(a),this.onObjectCreated(a);const o=i.context();A.fillObject3DUserData(a,{filename:o.filename})}this.notifyChange(this.object3d)}}async function ec(e,t){const i=await di.load(e,ba.GeoPackageLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0}}),s=[];for(const[a,o]of Object.entries(i.tables))for(const l of o.table.features)l.properties||(l.properties={}),l.properties.table=a,s.push(l);return s}class ic{constructor(t){y(this,"elevation");y(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await ec(this.options.url,this.options.featureProjection);return await yi(t,i,{...this.options,dataProjection:this.options.featureProjection})}}async function sc(e,t){return(await di.load(e,xa.ShapefileLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0},shapefile:{shape:"geojson-table"}})).features}class ac{constructor(t){y(this,"elevation");y(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await sc(this.options.url,this.options.featureProjection);return await yi(t,i,{...this.options,dataProjection:this.options.featureProjection})}}class Gs extends A.Object3D{constructor(t=document.createElement("div")){super(),this.isCSS2DObject=!0,this.element=t,this.element.style.position="absolute",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.center=new A.Vector2(.5,.5),this.addEventListener("removed",function(){this.traverse(function(i){i.element instanceof i.element.ownerDocument.defaultView.Element&&i.element.parentNode!==null&&i.element.remove()})})}copy(t,i){return super.copy(t,i),this.element=t.element.cloneNode(!0),this.center=t.center,this}}new A.Vector3;new A.Matrix4;new A.Matrix4;new A.Vector3;new A.Vector3;const nc=new A.Vector2,Hs=new A.Color(A.DEFAULT_SHAPE_COLOR),oc=new A.Color,We=oc.copyLinearToSRGB(Hs),Ji=`#${new A.Color(_a.getContrastColor(Hs)).getHexString()}`,qe=12,rc="bold",Ye=[];class lc extends ui{constructor(i,s){super(new A.Group);y(this,"sources");y(this,"_labels");y(this,"_styleCallback");y(this,"_textCallback");this.sources=Array.isArray(i)?i:[i],this._labels=[],this._textCallback=(s==null?void 0:s.text)||(()=>"P"),this._styleCallback=s==null?void 0:s.style}getBoundingBox(){const i=this._labels.map(a=>a.position);return new A.Box3().setFromPoints(i)}pick(i,s){const a=this.instance.canvasToNormalizedCoords(i,nc),o=new A.Raycaster;o.setFromCamera(a,this.instance.view.camera);const l=this.pickLabels(o);return l?[{distance:l.position.distanceTo(o.ray.origin),entity:this,isLabelPickResult:!0,object:l,point:l.position}]:[]}updateOpacity(){const i=`${this.opacity*100}%`;this._labels.forEach(s=>s.element.style.opacity=i)}updateVisibility(){this.object3d.traverse(i=>{i.visible=this.visible})}async preprocess(){for(const i of this.sources){const s=await i.load(this.instance),a=new A.Group,o=i.elevation??0,l=h=>new A.Vector3(h[0],h[1],h[2]??o);for(const h of s){const c=h.getGeometry();if(c!=null){const u=c.getType(),g=[];switch(u){case"LineString":case"MultiPoint":g.push(...c.getCoordinates());break;case"MultiLineString":case"Polygon":g.push(...c.getCoordinates()[0]);break;case"MultiPolygon":g.push(...c.getCoordinates()[0][0]);break;case"Point":g.push(c.getCoordinates());break}if(g.length>0){const d=g.map(f=>this.createLabel(l(f),h)),C=new A.Group;d.forEach(f=>{C.add(f),this._labels.push(f)});for(const[f,m]of Object.entries(h.getProperties()))f!=="geometry"&&(C.userData[f]=m);a.add(C)}}}this.object3d.add(a),this.onObjectCreated(a);const r=i.context();A.fillObject3DUserData(a,{filename:r.filename})}this.notifyChange(this.object3d)}createLabel(i,s){const a=document.createElement("div"),o=document.createElement("span");this.updateStyle(o,s),o.innerText=this._textCallback(s,i);const l=document.createElement("div");a.appendChild(l),l.appendChild(o);const r=new Gs(a);return r.position.copy(i),r.updateMatrix(),r.updateMatrixWorld(!0),a.addEventListener("mouseover",()=>r.userData.hover=!0),a.addEventListener("mouseleave",()=>r.userData.hover=!1),r}pickLabels(i){let s=null;return this._labels.forEach(a=>{s==null&&(Ye.length=0,this.raycastLabel(a,i,Ye),Ye.length>0&&(s=a))}),s}raycastLabel(i,s,a){i.userData.hover===!0&&a.push({distance:i.position.distanceTo(s.ray.origin),object:i,point:i.position})}updateStyle(i,s){i.style.backgroundColor=`rgb(${We.r*255} ${We.g*255} ${We.b*255})`,i.style.borderWidth="1px",i.style.borderStyle="solid",i.style.borderColor=Ji,i.style.borderRadius=`${A.MathUtils.clamp(qe-4,5,10)}px`,i.style.color=Ji;const a=A.MathUtils.clamp(Math.round(qe/4),2,10);i.style.padding=`${a}px ${a}px ${a}px ${a}px`,i.style.fontSize=`${qe}px`,i.style.fontWeight=rc,i.style.pointerEvents="auto",this._styleCallback&&this._styleCallback(i,s)}}class hc extends ft{constructor(i){super({color:A.DEFAULT_SHAPE_COLOR,showLine:!0,showVertexLabels:!0,showVertices:!0,vertexRadius:A.SHAPE_POINT_RADIUS});y(this,"source");this.source=i}async preprocess(){const s=(await this.source.load(this.instance)).at(0),a=s==null?void 0:s.getGeometry();if(s!=null&&a!=null){const o=this.source.elevation??0,l=c=>new A.Vector3(c[0],c[1],c[2]??o);switch(a.getType()){case"LineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates().map(l));break;case"MultiLineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates()[0].map(l));break;case"MultiPoint":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates().map(l));break;case"MultiPolygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(a.getCoordinates()[0][0].map(l));break;case"Point":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints([l(a.getCoordinates())]);break;case"Polygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(a.getCoordinates()[0].map(l));break;default:throw new Error("could not import shape from given geometry: "+a.getType())}const h=this.source.context();A.fillObject3DUserData(this,{filename:h.filename});for(const[c,u]of Object.entries(s.getProperties()))c!=="geometry"&&(this.userData[c]=u)}this.notifyChange(this.object3d)}}const cc=e=>{const{dataset:t,instance:i}=e,s=t.config,a=Array.isArray(s.source)?s.source:[s.source],o=[],l=s.rendering??"mesh";let r;for(const h of a){const c={dataProjection:h.dataProjection??t.get("dataProjection"),elevation:h.elevation??t.get("elevation"),featureProjection:i.referenceCrs,fetchElevation:h.fetchElevation??t.get("fetchElevation"),fetchElevationFast:h.fetchElevationFast??t.get("fetchElevationFast"),fetchElevationOffset:h.fetchElevationOffset??t.get("fetchElevationOffset"),noDataValue:h.noDataValue??t.get("noDataValue"),url:h.url};switch(h.type){case"geojson":o.push(new Yh({...c}));break;case"geopackage":o.push(new ic({...c}));break;case"gpx":o.push(new Jh({...c}));break;case"kml":o.push(new Xh({...c}));break;case"ol":o.push(new vi(h.format,{...c}));break;case"shapefile":o.push(new ac({...c}));break;default:return h}}switch(l){case"label":r=new lc(o,s);break;case"mesh":r=new tc(o);break;case"shape":r=new hc(o[0]);break;default:return l}return Promise.resolve(r)},ci={featureCollection:ja,flatPointcloud:Za,pointcloud:Ya,tiledIfc:Wa,vector:cc};async function gc(e,t){const i={dataset:t,instance:e},s=ci[t.type];if(s==null)throw new Error(`no entity builder found for dataset type '${t.type}'`);const a=await s(i);return"dataset"in a.object3d.userData||(a.object3d.userData.dataset={}),a.object3d.userData.dataset.name=t.name,a}function dc(e,t){ci[e]!=null&&console.warn(`replacing entity builder for dataset type '${e}'`),ci[e]=t}const uc={getEntity:gc},Je=e=>({name:e.filename,source:{type:"csv",url:e.file},type:"flatPointcloud",visible:!0}),Xi=e=>({name:e.filename,source:{type:e.filename.endsWith(".copc.laz")?"copc":"las",url:e.file},type:"flatPointcloud",visible:!0}),Ac=e=>{let t;switch(e.extension){case"geojson":case"json":t="geojson";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${e.extension}' not supported`)}return{name:e.filename,source:{style:"default",type:t,url:e.file},type:"colorLayer",visible:!0}},Cc=e=>{let t;switch(e.extension){case"geojson":case"json":t="geojson";break;case"gpkg":t="geopackage";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${e.extension}' not supported`)}return{name:e.filename,rendering:e.configuration.importedVectorDatasetRendering,source:{fetchElevation:e.configuration.importedMeshDatasetFetchElevation??!0,fetchElevationFast:e.configuration.importedMeshDatasetFetchElevationFast??!1,type:t,url:e.file},type:"vector",visible:!0}},Kt=e=>e.configuration.importedVectorDatasetRendering==="overlay"?Ac(e):Cc(e),Te={csv:Je,dsv:Je,"geo.json":Kt,geojson:Kt,gpkg:Kt,gpx:Kt,kml:Kt,las:Xi,laz:Xi,tsv:Je};function mc(e,t){if(typeof e=="string"){const s=A.getPublicFolderUrl(e),a=new URL(s),r=`${a.origin}${a.pathname}`.split("/").pop();if(r==null)throw new Error("Could not determine filename");const h=r.split(".").at(-1);if(h==null)throw new Error(`File has no extension: ${r}`);return{configuration:t,extension:h,file:e,filename:r}}if(e.name==null)throw new Error("Could not determine filename");const i=e.name.split(".").at(-1);if(i==null)throw new Error(`File has no extension: ${e.name}`);return{configuration:t,extension:i,file:e,filename:e.name}}async function fc(e,t){const i=mc(e,t),s=Ic(i.filename);if(s==null)throw new Error(`File format ${i.extension} not supported`);const a=s(i);return Promise.resolve(new A.Dataset(a))}function Ic(e){const t=Object.keys(Te);for(const i of t)if(e.endsWith(i))return Te[i];return null}function pc(e,t){Te[e]!=null&&console.warn(`replacing loader for file extension '.${e}'`),Te[e]=t}const vc={importFile:fc},Zs=[];class yc{constructor(){y(this,"_clearHighlight",null)}clear(){this._clearHighlight&&(this._clearHighlight(),this._clearHighlight=null)}dispose(){this.clear()}highlightFromPick(t){if(this.clear(),!!t.entity){ft.isShapePickResult(t)&&this.highlightShape(t);for(const i of Zs){const s=i(t);s&&(this._clearHighlight=s)}}}highlightShape(t){const i=t.entity;if(i.userData.highlightable){const s=new A.Color(i.color);i.color=i.userData.highlightColor,i.instance.notifyChange(),this._clearHighlight=()=>{i.color=s,i.instance.notifyChange()}}}}class bc{constructor(t){this.store=t}registerDatasetAction(t){this.store.registerCustomAction(t)}registerDatasetType(t,i){if(i.icon!=null&&(ds[t]=i.icon),i.name!=null&&(us[t]=i.name),i.highlight&&Zs.push(i.highlight),dc(t,i.entityBuilder),i.fileExtensions)if(i.loader==null)console.warn(`File extensions have been specified for dataset ${t}, but no loader function has been provided.`);else for(const s of i.fileExtensions)pc(s,i.loader);i.propertyView&&be.set(t,i.propertyView),i.attributeExtractor&&A.customAttributeExtractors.push(i.attributeExtractor)}}class Mc{constructor(t){this.store=t}pushNotification(t){this.store.push(t)}}class Ec{constructor(t){this.searchStore=t}registerProvider(t){this.searchStore.registerProvider(t)}}function wc(e){return e.coordinates instanceof ce}class Oc{constructor(t){this.store=t}addWidget(t){this.store.addWidget(t)}}const bt=new A.EventDispatcher,bi=wt.defineStore("annotations",()=>{const e=n.reactive([]),t=n.ref("normal"),i=n.computed(()=>e.length),s=n.ref(!1),a=n.ref(!0);function o(){return s.value}function l(){return a.value}function r(w){a.value=w}function h(w){s.value=w}function c(){return t.value}function u(w){t.value=w}function g(){return e}function d(w){e.splice(e.indexOf(w),1)}function C(){}function f(){}function m(){}function v(w){e.push(w)}function I(w){return e.some(S=>S.title===w)}function b(w){}function M(){}function O(w){}function _(w){}return{add:v,count:i,createLine:f,createPoint:C,createPolygon:m,edit:b,getAnnotationMode:c,getAnnotations:g,hasAnnotation:I,importAnnotationFile:O,importAnnotationsFiles:_,isUserDrawing:o,remove:d,setAnnotationMode:u,setIsUserDrawing:h,setShowLabels:r,showLabels:l,stopEdition:M}}),Pt=wt.defineStore("notifications",()=>{function e(t){}return{push:e}});class Ws extends A.EventDispatcher{constructor(i,s,a={}){super();y(this,"properties");y(this,"title");y(this,"uuid");y(this,"_isEditing");y(this,"_object");y(this,"_visible");this.title=i,this._visible=!0,this._isEditing=!1,this._object=s,this.properties=a,this.uuid=A.MathUtils.generateUUID()}get isEditing(){return this._isEditing}set isEditing(i){this._isEditing=i,this.dispatchEvent({type:"isEditing"})}get object(){return this._object()}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}static toCollection(i){return{features:i.map(a=>a.toGeoJSON()),type:"FeatureCollection",id:`${A.Download.getBaseUrl()}#${A.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:A.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D annotations",updated:new Date().toISOString()}}}toGeoJSON(){const i=this.object.toGeoJSON({includeAltitudes:!0});return i.id=`${A.Download.getBaseUrl()}#${this.uuid}`,i.properties={...i.properties,title:this.title,updated:new Date().toISOString()},i}}class X{constructor(t,i,s="info"){y(this,"level");y(this,"text");y(this,"title");this.title=t,this.text=i,this.level=s}static empty(){return new X("","","info")}}function xc(e){let t=1/0,i=-1/0,s;Array.isArray(e)?s=e:s=e.points;for(let a=0;a<s.length;a+=1)t=Math.min(t,s[a].z),i=Math.max(i,s[a].z);return[t,i]}const _c={getMinMaxAltitudes:xc};function kc(e){return window.prompt("Annotation name",e)}const qs=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),Ki=e=>{let t=e.area,i="m²";return t>1e6&&(t=t/1e6,i="km²"),`${qs.format(t)} ${i}`},Sc=new A.Vector3,Nc=new A.Vector3,Qi=e=>t=>{const{camera:i}=e,{end:s,start:a}=t,o=Sc.copy(a).project(i),l=Nc.copy(s).project(i),r=Math.pow(100/e.width,2);if(o.distanceToSquared(l)<r)return null;let c=t.length;if(c==null||c<=0)return null;let u="m";return c>1e3&&(c=c/1e3,u="km"),`${qs.format(c)} ${u}`},Xe=e=>{const t=e.shape;return t.userData.annotation?t.userData.annotation.title:null};class Pc{constructor(t,i,s){y(this,"_boundExitEdition");y(this,"_boundOnEndDrag");y(this,"_boundOnKeyDown");y(this,"_boundOnStartDrag");y(this,"_boundUpdateLabels");y(this,"_drawTool");y(this,"_editedShape",null);y(this,"_editedShapePreviousPoints",null);y(this,"_instance");y(this,"_isEditing",!1);y(this,"_notificationStore",Pt());y(this,"_picker");y(this,"_shapes",new Map);y(this,"_store",bi());this._instance=t,this._picker=s,this._drawTool=new Ot({instance:t}),this._boundOnEndDrag=()=>{i.enabled=!0},this._boundOnStartDrag=()=>{i.enabled=!1},this._boundUpdateLabels=this.updateLabels.bind(this),this._boundExitEdition=()=>{this._instance.domElement.removeEventListener("contextmenu",this._boundExitEdition),this.stopEdition(!1)},this._drawTool.addEventListener("start-drag",this._boundOnStartDrag),this._drawTool.addEventListener("end-drag",this._boundOnEndDrag),this._boundOnKeyDown=this.onKeyDown.bind(this),document.addEventListener("keydown",this._boundOnKeyDown),this._instance.addEventListener("after-camera-update",this._boundUpdateLabels),this._store.$onAction(({after:a,args:o,name:l})=>{a(()=>{switch(l){case"createLine":this.drawLine();break;case"createPoint":this.drawPoint();break;case"createPolygon":this.drawPolygon();break;case"edit":this.editAnnotation(o[0]);break;case"importAnnotationFile":this.importAnnotationFile(o[0]);break;case"importAnnotationsFiles":this.importAnnotationFiles(o[0]);break;case"remove":this.deleteAnnotation(o[0]);break;case"setShowLabels":this.udpateLabelVisibility(o[0]);break;case"stopEdition":this.stopEdition(!1);break}})})}dispose(){document.removeEventListener("keydown",this._boundOnKeyDown),this._drawTool.removeEventListener("start-drag",this._boundOnStartDrag),this._drawTool.removeEventListener("end-drag",this._boundOnEndDrag),this._instance.removeEventListener("after-camera-update",this._boundUpdateLabels),this._shapes.forEach(t=>this._instance.remove(t)),this._drawTool.dispose()}pushNewAnnotation(t,i,s={}){const a=new Ws(t,()=>i,s);return i.userData.annotation=a,a.addEventListener("visible",()=>this.updateDrawing(a)),this._store.add(a),this._shapes.set(a.uuid,i),a}addShape(t,i,s){if(t&&!this._shapes.has(t.id)){const a=t.userData;a.type=i,a.highlightable=!0;let o=s;if(this._store.hasAnnotation(o)){for(let r=1;r<1e3&&(o=`${s} (${r})`,!!this._store.hasAnnotation(o));r+=1);this._store.hasAnnotation(o)&&(o="Achievement unlocked: 1000 annotations with default name")}const l=kc(o);if(l!=null){this.computeMeasurements(t);const r=this.pushNewAnnotation(l,t);this._shapes.set(r.uuid,t)}else this._instance.remove(t)}}computeMeasurements(t){t.userData.measurements={minmax:_c.getMinMaxAltitudes(t)},(t.userData.type==="Polygon"||t.userData.type==="LineString")&&(t.userData.measurements.perimeter=t.getLength()),t.userData.type==="Polygon"&&(t.userData.measurements.area=t.getArea())}deleteAnnotation(t){if(this._shapes.has(t.uuid)){const i=t.object;this._instance.remove(i),this._shapes.delete(t.uuid)}}draw(t,i,s,a){this._store.setIsUserDrawing(!0),this._drawTool[t]({...this.getCreationOptions(),...a}).then(o=>{this.addShape(o,i,s)}).finally(()=>this._store.setIsUserDrawing(!1))}drawLine(){this.draw("createLineString","LineString","New line annotation",{segmentLabelFormatter:Qi(this._instance.view),showSegmentLabels:this._store.showLabels()})}drawPoint(){this.draw("createPoint","Point","New point annotation",{borderWidth:3,showVertexLabels:this._store.showLabels(),vertexLabelFormatter:Xe,vertexRadius:A.SHAPE_POINT_RADIUS})}drawPolygon(){this.draw("createPolygon","Polygon","New polygon annotation",{showSurfaceLabel:this._store.showLabels(),surfaceLabelFormatter:Ki})}editAnnotation(t){const i=this._shapes.get(t.uuid);if(!i){console.warn(`no shape found for annotation ${t.uuid}`);return}this._editedShape=i,this._editedShapePreviousPoints=[...i.points],t.isEditing=!0,i.color=A.EDIT_SHAPE_COLOR,i.userData.highlightable=!1,this._instance.notifyChange(i),this._store.setIsUserDrawing(!0),this._instance.domElement.addEventListener("contextmenu",this._boundExitEdition),this._isEditing=!0,this._drawTool.enterEditMode({pick:this.pick.bind(this),shapesToEdit:[i]})}filterPickResults(t,i){return i?t:t.filter(s=>!ft.isShapePickResult(s))}getCreationOptions(){return{color:A.DEFAULT_SHAPE_COLOR,pick:this.pick.bind(this)}}async importAnnotation(t,i){if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=A.MathUtils.generateUUID()),i.has(t.properties.title))return!1;const s=await this.importShapeFromGeoJSON(t);return this.pushNewAnnotation(t.properties.title,s,t.properties),!0}async importAnnotationFile(t){const i=new Set(this._store.getAnnotations().map(s=>s.title));try{const{nbImported:s,nbSkipped:a}=await this.importBlob(t,i);this._notificationStore.push(new X("Annotations",`${s} annotations imported (${a} skipped)`,"success"))}catch{}}async importAnnotationFiles(t){const i=[];let s=0,a=0;const o=[],l=new Set(this._store.getAnnotations().map(r=>r.title));for(const r of t)i.push(this.importBlob(r,l).then(({nbImported:h,nbSkipped:c})=>{s+=h,a+=c}).catch(h=>{o.push(h.message)}));await Promise.allSettled(i),o.length>0?this._notificationStore.push(new X("Annotations",`${s} annotations imported (${a} skipped); ${o.length} errors: ${o}`,"warning")):this._notificationStore.push(new X("Annotations",`${s} annotations imported (${a} skipped)`,"success"))}async importBlob(t,i){const s=await t.text(),a=JSON.parse(s),o=a.type==="FeatureCollection"?a.features:[a];let l=0,r=0;for(const h of o)await this.importAnnotation(h,i)?l++:r++;return{nbImported:l,nbSkipped:r}}async importShapeFromGeoJSON(t){if(t.type!=="Feature")throw new Error("not a valid GeoJSON feature");const i="EPSG:4326",s=o=>{const l=new ce(i,o[0],o[1],o[2]??0);return l.as(this._instance.referenceCrs,l).toVector3()};let a;switch(t.geometry.type){case"LineString":a=new ft({beforeRemovePoint:Ot.limitRemovePointHook(2),color:A.DEFAULT_SHAPE_COLOR,segmentLabelFormatter:Qi(this._instance.view),showLine:!0,showSegmentLabels:!0,showVertexLabels:!1,showVertices:!0}),a.setPoints(t.geometry.coordinates.map(s));break;case"MultiPoint":a=new ft({beforeRemovePoint:Ot.limitRemovePointHook(1),color:A.DEFAULT_SHAPE_COLOR,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Xe,vertexRadius:A.SHAPE_POINT_RADIUS}),a.setPoints(t.geometry.coordinates.map(s));break;case"Point":a=new ft({beforeRemovePoint:Ot.inhibitHook,color:A.DEFAULT_SHAPE_COLOR,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Xe,vertexRadius:A.SHAPE_POINT_RADIUS}),a.setPoints([s(t.geometry.coordinates)]);break;case"Polygon":a=new ft({afterRemovePoint:Ot.afterRemovePointOfRing,afterUpdatePoint:Ot.afterUpdatePointOfRing,beforeRemovePoint:Ot.limitRemovePointHook(4),color:A.DEFAULT_SHAPE_COLOR,showLine:!0,showSurface:!0,showSurfaceLabel:!0,showVertexLabels:!1,showVertices:!0,surfaceLabelFormatter:Ki}),a.setPoints(t.geometry.coordinates[0].map(s));break;default:throw new Error("could not import shape from given GeoJSON geometry: "+t.geometry.type)}return this.computeMeasurements(a),await this._instance.add(a),a}onKeyDown(t){t.code==="Escape"&&this.stopEdition(!0)}pick(t){let i;switch(this._store.getAnnotationMode()){case"mapOnly":i=this.pickMap(t);break;case"normal":i=this.pickDefault(t);break;case"objectsOnly":i=this.pickFeatures(t);break}return i}pickDefault(t){const i=this._instance.pickObjectsAt(t,{sortByDistance:!0});return this.filterPickResults(i,this._isEditing)}pickFeatures(t){const i=this._picker.getObjectsAt(this._instance,t,0)??[];return this.filterPickResults(i,this._isEditing)}pickMap(t){const i=this._instance.pickObjectsAt(t,{filter:s=>ft.isShapePickResult(s)||ka.isMapPickResult(s),sortByDistance:!0});return this.filterPickResults(i,this._isEditing)}stopEdition(t){this._drawTool.exitEditMode(),this._isEditing=!1,this._store.setIsUserDrawing(!1),this._editedShape&&(t&&this._editedShapePreviousPoints&&(this._editedShape.setPoints(this._editedShapePreviousPoints),this._editedShapePreviousPoints=null),this._editedShape.userData.annotation!=null&&(this._editedShape.userData.annotation.isEditing=!1),this._editedShape.color=A.DEFAULT_SHAPE_COLOR,this._editedShape.userData.highlightable=!0,this._editedShape=null)}udpateLabelVisibility(t){this._shapes.forEach(i=>{switch(i.userData.type){case"LineString":i.showSegmentLabels=t;break;case"MultiPoint":case"Point":i.showVertexLabels=t;break;case"Polygon":i.showSurfaceLabel=t;break}})}updateDrawing(t){t.object.visible=t.visible,t.object.traverse(i=>i.visible=t.visible),this._instance.notifyChange()}updateLabels(){this._shapes.forEach(t=>{t.visible&&t.rebuildLabels()})}}/*!
5
5
  * camera-controls
6
6
  * https://github.com/yomotsu/camera-controls
7
7
  * (c) 2017 @yomotsu
8
8
  * Released under the MIT License.
9
- */const G={LEFT:1,RIGHT:2,MIDDLE:4},y=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,SCREEN_PAN:4,OFFSET:8,DOLLY:16,ZOOM:32,TOUCH_ROTATE:64,TOUCH_TRUCK:128,TOUCH_SCREEN_PAN:256,TOUCH_OFFSET:512,TOUCH_DOLLY:1024,TOUCH_ZOOM:2048,TOUCH_DOLLY_TRUCK:4096,TOUCH_DOLLY_SCREEN_PAN:8192,TOUCH_DOLLY_OFFSET:16384,TOUCH_DOLLY_ROTATE:32768,TOUCH_ZOOM_TRUCK:65536,TOUCH_ZOOM_OFFSET:131072,TOUCH_ZOOM_SCREEN_PAN:262144,TOUCH_ZOOM_ROTATE:524288}),Ut={NONE:0,IN:1,OUT:-1};function Lt(e){return e.isPerspectiveCamera}function wt(e){return e.isOrthographicCamera}const zt=Math.PI*2,Ms=Math.PI/2,Ma=1e-5,le=Math.PI/180;function dt(e,t,i){return Math.max(t,Math.min(i,e))}function j(e,t=Ma){return Math.abs(e)<t}function V(e,t,i=Ma){return j(e-t,i)}function ws(e,t){return Math.round(e/t)*t}function he(e){return isFinite(e)?e:e<0?-Number.MAX_VALUE:Number.MAX_VALUE}function ce(e){return Math.abs(e)<Number.MAX_VALUE?e:e*(1/0)}function Ne(e,t,i,s,a=1/0,n){s=Math.max(1e-4,s);const r=2/s,l=r*n,h=1/(1+l+.48*l*l+.235*l*l*l);let c=e-t;const d=t,g=a*s;c=dt(c,-g,g),t=e-c;const u=(i.value+r*c)*n;i.value=(i.value-r*u)*h;let f=t+(c+u)*h;return d-e>0==f>d&&(f=d,i.value=(f-d)/n),f}function Es(e,t,i,s,a=1/0,n,r){s=Math.max(1e-4,s);const l=2/s,h=l*n,c=1/(1+h+.48*h*h+.235*h*h*h);let d=t.x,g=t.y,u=t.z,f=e.x-d,m=e.y-g,C=e.z-u;const v=d,I=g,b=u,M=a*s,_=M*M,x=f*f+m*m+C*C;if(x>_){const St=Math.sqrt(x);f=f/St*M,m=m/St*M,C=C/St*M}d=e.x-f,g=e.y-m,u=e.z-C;const E=(i.x+l*f)*n,S=(i.y+l*m)*n,D=(i.z+l*C)*n;i.x=(i.x-l*E)*c,i.y=(i.y-l*S)*c,i.z=(i.z-l*D)*c,r.x=d+(f+E)*c,r.y=g+(m+S)*c,r.z=u+(C+D)*c;const W=v-e.x,et=I-e.y,P=b-e.z,U=r.x-v,z=r.y-I,ut=r.z-b;return W*U+et*z+P*ut>0&&(r.x=v,r.y=I,r.z=b,i.x=(r.x-v)/n,i.y=(r.y-I)/n,i.z=(r.z-b)/n),r}function fi(e,t){t.set(0,0),e.forEach(i=>{t.x+=i.clientX,t.y+=i.clientY}),t.x/=e.length,t.y/=e.length}function Ii(e,t){return wt(e)?(console.warn(`${t} is not supported in OrthographicCamera`),!0):!1}class Dg{constructor(){this._listeners={}}addEventListener(t,i){const s=this._listeners;s[t]===void 0&&(s[t]=[]),s[t].indexOf(i)===-1&&s[t].push(i)}hasEventListener(t,i){const s=this._listeners;return s[t]!==void 0&&s[t].indexOf(i)!==-1}removeEventListener(t,i){const a=this._listeners[t];if(a!==void 0){const n=a.indexOf(i);n!==-1&&a.splice(n,1)}}removeAllEventListeners(t){if(!t){this._listeners={};return}Array.isArray(this._listeners[t])&&(this._listeners[t].length=0)}dispatchEvent(t){const s=this._listeners[t.type];if(s!==void 0){t.target=this;const a=s.slice(0);for(let n=0,r=a.length;n<r;n++)a[n].call(this,t)}}}var pi;const Bg="2.10.1",Le=1/8,Vg=/Mac/.test((pi=globalThis==null?void 0:globalThis.navigator)===null||pi===void 0?void 0:pi.platform);let N,_s,Pe,vi,it,T,B,jt,ge,ft,It,Pt,Os,xs,ht,ue,Gt,ks,yi,Ss,bi,Mi,Te;class ot extends Dg{static install(t){N=t.THREE,_s=Object.freeze(new N.Vector3(0,0,0)),Pe=Object.freeze(new N.Vector3(0,1,0)),vi=Object.freeze(new N.Vector3(0,0,1)),it=new N.Vector2,T=new N.Vector3,B=new N.Vector3,jt=new N.Vector3,ge=new N.Vector3,ft=new N.Vector3,It=new N.Vector3,Pt=new N.Vector3,Os=new N.Vector3,xs=new N.Vector3,ht=new N.Spherical,ue=new N.Spherical,Gt=new N.Box3,ks=new N.Box3,yi=new N.Sphere,Ss=new N.Quaternion,bi=new N.Quaternion,Mi=new N.Matrix4,Te=new N.Raycaster}static get ACTION(){return y}set verticalDragToForward(t){console.warn("camera-controls: `verticalDragToForward` was removed. Use `mouseButtons.left = CameraControls.ACTION.SCREEN_PAN` instead.")}constructor(t,i){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=y.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Ut.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new N.Vector3,this._focalOffsetVelocity=new N.Vector3,this._zoomVelocity={value:0},this._truckInternal=(I,b,M,_)=>{let x,E;if(Lt(this._camera)){const S=T.copy(this._camera.position).sub(this._target),D=this._camera.getEffectiveFOV()*le,W=S.length()*Math.tan(D*.5);x=this.truckSpeed*I*W/this._elementRect.height,E=this.truckSpeed*b*W/this._elementRect.height}else if(wt(this._camera)){const S=this._camera;x=this.truckSpeed*I*(S.right-S.left)/S.zoom/this._elementRect.width,E=this.truckSpeed*b*(S.top-S.bottom)/S.zoom/this._elementRect.height}else return;_?(M?this.setFocalOffset(this._focalOffsetEnd.x+x,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(x,0,!0),this.forward(-E,!0)):M?this.setFocalOffset(this._focalOffsetEnd.x+x,this._focalOffsetEnd.y+E,this._focalOffsetEnd.z,!0):this.truck(x,E,!0)},this._rotateInternal=(I,b)=>{const M=zt*this.azimuthRotateSpeed*I/this._elementRect.height,_=zt*this.polarRotateSpeed*b/this._elementRect.height;this.rotate(M,_,!0)},this._dollyInternal=(I,b,M)=>{const _=Math.pow(.95,-I*this.dollySpeed),x=this._sphericalEnd.radius,E=this._sphericalEnd.radius*_,S=dt(E,this.minDistance,this.maxDistance),D=S-E;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(E,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(D,!0),this._dollyToNoClamp(S,!0)):this._dollyToNoClamp(S,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?E:S)-x,this._dollyControlCoord.set(b,M)),this._lastDollyDirection=Math.sign(-I)},this._zoomInternal=(I,b,M)=>{const _=Math.pow(.95,I*this.dollySpeed),x=this._zoom,E=this._zoom*_;this.zoomTo(E,!0),this.dollyToCursor&&(this._changedZoom+=E-x,this._dollyControlCoord.set(b,M))},typeof N>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=t,this._yAxisUpSpace=new N.Quaternion().setFromUnitVectors(this._camera.up,Pe),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=y.NONE,this._target=new N.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new N.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new N.Spherical().setFromVector3(T.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new N.Vector3,new N.Vector3,new N.Vector3,new N.Vector3],this._updateNearPlaneCorners(),this._boundary=new N.Box3(new N.Vector3(-1/0,-1/0,-1/0),new N.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new N.Vector2,this.mouseButtons={left:y.ROTATE,middle:y.DOLLY,right:y.TRUCK,wheel:Lt(this._camera)?y.DOLLY:wt(this._camera)?y.ZOOM:y.NONE},this.touches={one:y.TOUCH_ROTATE,two:Lt(this._camera)?y.TOUCH_DOLLY_TRUCK:wt(this._camera)?y.TOUCH_ZOOM_TRUCK:y.NONE,three:y.TOUCH_TRUCK};const s=new N.Vector2,a=new N.Vector2,n=new N.Vector2,r=I=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const _=this._domElement.getBoundingClientRect(),x=I.clientX/_.width,E=I.clientY/_.height;if(x<this._interactiveArea.left||x>this._interactiveArea.right||E<this._interactiveArea.top||E>this._interactiveArea.bottom)return}const b=I.pointerType!=="mouse"?null:(I.buttons&G.LEFT)===G.LEFT?G.LEFT:(I.buttons&G.MIDDLE)===G.MIDDLE?G.MIDDLE:(I.buttons&G.RIGHT)===G.RIGHT?G.RIGHT:null;if(b!==null){const _=this._findPointerByMouseButton(b);_&&this._disposePointer(_)}if((I.buttons&G.LEFT)===G.LEFT&&this._lockedPointer)return;const M={pointerId:I.pointerId,clientX:I.clientX,clientY:I.clientY,deltaX:0,deltaY:0,mouseButton:b};this._activePointers.push(M),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.addEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),this._isDragging=!0,u(I)},l=I=>{I.cancelable&&I.preventDefault();const b=I.pointerId,M=this._lockedPointer||this._findPointerById(b);if(M){if(M.clientX=I.clientX,M.clientY=I.clientY,M.deltaX=I.movementX,M.deltaY=I.movementY,this._state=0,I.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(I.buttons&G.LEFT)===G.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(I.buttons&G.MIDDLE)===G.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(I.buttons&G.RIGHT)===G.RIGHT&&(this._state=this._state|this.mouseButtons.right);f()}},h=I=>{const b=this._findPointerById(I.pointerId);if(!(b&&b===this._lockedPointer)){if(b&&this._disposePointer(b),I.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=y.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=y.NONE;m()}};let c=-1;const d=I=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===y.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const E=this._domElement.getBoundingClientRect(),S=I.clientX/E.width,D=I.clientY/E.height;if(S<this._interactiveArea.left||S>this._interactiveArea.right||D<this._interactiveArea.top||D>this._interactiveArea.bottom)return}if(I.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===y.ROTATE||this.mouseButtons.wheel===y.TRUCK){const E=performance.now();c-E<1e3&&this._getClientRect(this._elementRect),c=E}const b=Vg?-1:-3,M=I.deltaMode===1||I.ctrlKey?I.deltaY/b:I.deltaY/(b*10),_=this.dollyToCursor?(I.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,x=this.dollyToCursor?(I.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case y.ROTATE:{this._rotateInternal(I.deltaX,I.deltaY),this._isUserControllingRotate=!0;break}case y.TRUCK:{this._truckInternal(I.deltaX,I.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case y.SCREEN_PAN:{this._truckInternal(I.deltaX,I.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case y.OFFSET:{this._truckInternal(I.deltaX,I.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case y.DOLLY:{this._dollyInternal(-M,_,x),this._isUserControllingDolly=!0;break}case y.ZOOM:{this._zoomInternal(-M,_,x),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},g=I=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===ot.ACTION.NONE){const b=I instanceof PointerEvent?I.pointerId:0,M=this._findPointerById(b);M&&this._disposePointer(M),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h);return}I.preventDefault()}},u=I=>{if(!this._enabled)return;if(fi(this._activePointers,it),this._getClientRect(this._elementRect),s.copy(it),a.copy(it),this._activePointers.length>=2){const M=it.x-this._activePointers[1].clientX,_=it.y-this._activePointers[1].clientY,x=Math.sqrt(M*M+_*_);n.set(0,x);const E=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,S=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;a.set(E,S)}if(this._state=0,!I)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in I&&I.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(I.buttons&G.LEFT)===G.LEFT&&(this._state=this._state|this.mouseButtons.left),(I.buttons&G.MIDDLE)===G.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(I.buttons&G.RIGHT)===G.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&y.ROTATE)===y.ROTATE||(this._state&y.TOUCH_ROTATE)===y.TOUCH_ROTATE||(this._state&y.TOUCH_DOLLY_ROTATE)===y.TOUCH_DOLLY_ROTATE||(this._state&y.TOUCH_ZOOM_ROTATE)===y.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&y.TRUCK)===y.TRUCK||(this._state&y.SCREEN_PAN)===y.SCREEN_PAN||(this._state&y.TOUCH_TRUCK)===y.TOUCH_TRUCK||(this._state&y.TOUCH_SCREEN_PAN)===y.TOUCH_SCREEN_PAN||(this._state&y.TOUCH_DOLLY_TRUCK)===y.TOUCH_DOLLY_TRUCK||(this._state&y.TOUCH_DOLLY_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN||(this._state&y.TOUCH_ZOOM_TRUCK)===y.TOUCH_ZOOM_TRUCK||(this._state&y.TOUCH_ZOOM_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&y.DOLLY)===y.DOLLY||(this._state&y.TOUCH_DOLLY)===y.TOUCH_DOLLY||(this._state&y.TOUCH_DOLLY_TRUCK)===y.TOUCH_DOLLY_TRUCK||(this._state&y.TOUCH_DOLLY_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN||(this._state&y.TOUCH_DOLLY_OFFSET)===y.TOUCH_DOLLY_OFFSET||(this._state&y.TOUCH_DOLLY_ROTATE)===y.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&y.ZOOM)===y.ZOOM||(this._state&y.TOUCH_ZOOM)===y.TOUCH_ZOOM||(this._state&y.TOUCH_ZOOM_TRUCK)===y.TOUCH_ZOOM_TRUCK||(this._state&y.TOUCH_ZOOM_SCREEN_PAN)===y.TOUCH_ZOOM_SCREEN_PAN||(this._state&y.TOUCH_ZOOM_OFFSET)===y.TOUCH_ZOOM_OFFSET||(this._state&y.TOUCH_ZOOM_ROTATE)===y.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&y.OFFSET)===y.OFFSET||(this._state&y.TOUCH_OFFSET)===y.TOUCH_OFFSET||(this._state&y.TOUCH_DOLLY_OFFSET)===y.TOUCH_DOLLY_OFFSET||(this._state&y.TOUCH_ZOOM_OFFSET)===y.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},f=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,fi(this._activePointers,it);const b=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,M=b?-b.deltaX:a.x-it.x,_=b?-b.deltaY:a.y-it.y;if(a.copy(it),((this._state&y.ROTATE)===y.ROTATE||(this._state&y.TOUCH_ROTATE)===y.TOUCH_ROTATE||(this._state&y.TOUCH_DOLLY_ROTATE)===y.TOUCH_DOLLY_ROTATE||(this._state&y.TOUCH_ZOOM_ROTATE)===y.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(M,_),this._isUserControllingRotate=!0),(this._state&y.DOLLY)===y.DOLLY||(this._state&y.ZOOM)===y.ZOOM){const x=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,E=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,S=this.dollyDragInverted?-1:1;(this._state&y.DOLLY)===y.DOLLY?(this._dollyInternal(S*_*Le,x,E),this._isUserControllingDolly=!0):(this._zoomInternal(S*_*Le,x,E),this._isUserControllingZoom=!0)}if((this._state&y.TOUCH_DOLLY)===y.TOUCH_DOLLY||(this._state&y.TOUCH_ZOOM)===y.TOUCH_ZOOM||(this._state&y.TOUCH_DOLLY_TRUCK)===y.TOUCH_DOLLY_TRUCK||(this._state&y.TOUCH_ZOOM_TRUCK)===y.TOUCH_ZOOM_TRUCK||(this._state&y.TOUCH_DOLLY_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN||(this._state&y.TOUCH_ZOOM_SCREEN_PAN)===y.TOUCH_ZOOM_SCREEN_PAN||(this._state&y.TOUCH_DOLLY_OFFSET)===y.TOUCH_DOLLY_OFFSET||(this._state&y.TOUCH_ZOOM_OFFSET)===y.TOUCH_ZOOM_OFFSET||(this._state&y.TOUCH_DOLLY_ROTATE)===y.TOUCH_DOLLY_ROTATE||(this._state&y.TOUCH_ZOOM_ROTATE)===y.TOUCH_ZOOM_ROTATE){const x=it.x-this._activePointers[1].clientX,E=it.y-this._activePointers[1].clientY,S=Math.sqrt(x*x+E*E),D=n.y-S;n.set(0,S);const W=this.dollyToCursor?(a.x-this._elementRect.x)/this._elementRect.width*2-1:0,et=this.dollyToCursor?(a.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&y.TOUCH_DOLLY)===y.TOUCH_DOLLY||(this._state&y.TOUCH_DOLLY_ROTATE)===y.TOUCH_DOLLY_ROTATE||(this._state&y.TOUCH_DOLLY_TRUCK)===y.TOUCH_DOLLY_TRUCK||(this._state&y.TOUCH_DOLLY_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN||(this._state&y.TOUCH_DOLLY_OFFSET)===y.TOUCH_DOLLY_OFFSET?(this._dollyInternal(D*Le,W,et),this._isUserControllingDolly=!0):(this._zoomInternal(D*Le,W,et),this._isUserControllingZoom=!0)}((this._state&y.TRUCK)===y.TRUCK||(this._state&y.TOUCH_TRUCK)===y.TOUCH_TRUCK||(this._state&y.TOUCH_DOLLY_TRUCK)===y.TOUCH_DOLLY_TRUCK||(this._state&y.TOUCH_ZOOM_TRUCK)===y.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(M,_,!1,!1),this._isUserControllingTruck=!0),((this._state&y.SCREEN_PAN)===y.SCREEN_PAN||(this._state&y.TOUCH_SCREEN_PAN)===y.TOUCH_SCREEN_PAN||(this._state&y.TOUCH_DOLLY_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN||(this._state&y.TOUCH_ZOOM_SCREEN_PAN)===y.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(M,_,!1,!0),this._isUserControllingTruck=!0),((this._state&y.OFFSET)===y.OFFSET||(this._state&y.TOUCH_OFFSET)===y.TOUCH_OFFSET||(this._state&y.TOUCH_DOLLY_OFFSET)===y.TOUCH_DOLLY_OFFSET||(this._state&y.TOUCH_ZOOM_OFFSET)===y.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(M,_,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},m=()=>{fi(this._activePointers,it),a.copy(it),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",C),this._domElement.ownerDocument.addEventListener("pointerlockerror",v),this._domElement.ownerDocument.addEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),u())},this.unlockPointer=()=>{var I,b,M;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(I=this._domElement)===null||I===void 0||I.ownerDocument.exitPointerLock(),(b=this._domElement)===null||b===void 0||b.ownerDocument.removeEventListener("pointerlockchange",C),(M=this._domElement)===null||M===void 0||M.ownerDocument.removeEventListener("pointerlockerror",v),this.cancel()};const C=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},v=()=>{this.unlockPointer()};this._addAllEventListeners=I=>{this._domElement=I,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",r),this._domElement.addEventListener("pointercancel",h),this._domElement.addEventListener("wheel",d,{passive:!1}),this._domElement.addEventListener("contextmenu",g)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",r),this._domElement.removeEventListener("pointercancel",h),this._domElement.removeEventListener("wheel",d,{passive:!1}),this._domElement.removeEventListener("contextmenu",g),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("pointerlockchange",C),this._domElement.ownerDocument.removeEventListener("pointerlockerror",v))},this.cancel=()=>{this._state!==y.NONE&&(this._state=y.NONE,this._activePointers.length=0,m())},i&&this.connect(i),this.update(0)}get camera(){return this._camera}set camera(t){this._camera=t,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(t){this._enabled=t,this._domElement&&(t?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(t){this._spherical.radius===t&&this._sphericalEnd.radius===t||(this._spherical.radius=t,this._sphericalEnd.radius=t,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(t){this._spherical.theta===t&&this._sphericalEnd.theta===t||(this._spherical.theta=t,this._sphericalEnd.theta=t,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(t){this._spherical.phi===t&&this._sphericalEnd.phi===t||(this._spherical.phi=t,this._sphericalEnd.phi=t,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(t){this._boundaryEnclosesCamera=t,this._needsUpdate=!0}set interactiveArea(t){this._interactiveArea.width=dt(t.width,0,1),this._interactiveArea.height=dt(t.height,0,1),this._interactiveArea.x=dt(t.x,0,1-this._interactiveArea.width),this._interactiveArea.y=dt(t.y,0,1-this._interactiveArea.height)}addEventListener(t,i){super.addEventListener(t,i)}removeEventListener(t,i){super.removeEventListener(t,i)}rotate(t,i,s=!1){return this.rotateTo(this._sphericalEnd.theta+t,this._sphericalEnd.phi+i,s)}rotateAzimuthTo(t,i=!1){return this.rotateTo(t,this._sphericalEnd.phi,i)}rotatePolarTo(t,i=!1){return this.rotateTo(this._sphericalEnd.theta,t,i)}rotateTo(t,i,s=!1){this._isUserControllingRotate=!1;const a=dt(t,this.minAzimuthAngle,this.maxAzimuthAngle),n=dt(i,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=a,this._sphericalEnd.phi=n,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,s||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const r=!s||V(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&V(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(r)}dolly(t,i=!1){return this.dollyTo(this._sphericalEnd.radius-t,i)}dollyTo(t,i=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Ut.NONE,this._changedDolly=0,this._dollyToNoClamp(dt(t,this.minDistance,this.maxDistance),i)}_dollyToNoClamp(t,i=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const r=this._collisionTest(),l=V(r,this._spherical.radius);if(!(s>t)&&l)return Promise.resolve();this._sphericalEnd.radius=Math.min(t,r)}else this._sphericalEnd.radius=t;this._needsUpdate=!0,i||(this._spherical.radius=this._sphericalEnd.radius);const n=!i||V(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(n)}dollyInFixed(t,i=!1){this._targetEnd.add(this._getCameraDirection(ge).multiplyScalar(t)),i||this._target.copy(this._targetEnd);const s=!i||V(this._target.x,this._targetEnd.x,this.restThreshold)&&V(this._target.y,this._targetEnd.y,this.restThreshold)&&V(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(s)}zoom(t,i=!1){return this.zoomTo(this._zoomEnd+t,i)}zoomTo(t,i=!1){this._isUserControllingZoom=!1,this._zoomEnd=dt(t,this.minZoom,this.maxZoom),this._needsUpdate=!0,i||(this._zoom=this._zoomEnd);const s=!i||V(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(s)}pan(t,i,s=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(t,i,s)}truck(t,i,s=!1){this._camera.updateMatrix(),ft.setFromMatrixColumn(this._camera.matrix,0),It.setFromMatrixColumn(this._camera.matrix,1),ft.multiplyScalar(t),It.multiplyScalar(-i);const a=T.copy(ft).add(It),n=B.copy(this._targetEnd).add(a);return this.moveTo(n.x,n.y,n.z,s)}forward(t,i=!1){T.setFromMatrixColumn(this._camera.matrix,0),T.crossVectors(this._camera.up,T),T.multiplyScalar(t);const s=B.copy(this._targetEnd).add(T);return this.moveTo(s.x,s.y,s.z,i)}elevate(t,i=!1){return T.copy(this._camera.up).multiplyScalar(t),this.moveTo(this._targetEnd.x+T.x,this._targetEnd.y+T.y,this._targetEnd.z+T.z,i)}moveTo(t,i,s,a=!1){this._isUserControllingTruck=!1;const n=T.set(t,i,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,n,this.boundaryFriction),this._needsUpdate=!0,a||this._target.copy(this._targetEnd);const r=!a||V(this._target.x,this._targetEnd.x,this.restThreshold)&&V(this._target.y,this._targetEnd.y,this.restThreshold)&&V(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}lookInDirectionOf(t,i,s,a=!1){const l=T.set(t,i,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(l.x,l.y,l.z,a)}fitToBox(t,i,{cover:s=!1,paddingLeft:a=0,paddingRight:n=0,paddingBottom:r=0,paddingTop:l=0}={}){const h=[],c=t.isBox3?Gt.copy(t):Gt.setFromObject(t);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const d=ws(this._sphericalEnd.theta,Ms),g=ws(this._sphericalEnd.phi,Ms);h.push(this.rotateTo(d,g,i));const u=T.setFromSpherical(this._sphericalEnd).normalize(),f=Ss.setFromUnitVectors(u,vi),m=V(Math.abs(u.y),1);m&&f.multiply(bi.setFromAxisAngle(Pe,d)),f.multiply(this._yAxisUpSpaceInverse);const C=ks.makeEmpty();B.copy(c.min).applyQuaternion(f),C.expandByPoint(B),B.copy(c.min).setX(c.max.x).applyQuaternion(f),C.expandByPoint(B),B.copy(c.min).setY(c.max.y).applyQuaternion(f),C.expandByPoint(B),B.copy(c.max).setZ(c.min.z).applyQuaternion(f),C.expandByPoint(B),B.copy(c.min).setZ(c.max.z).applyQuaternion(f),C.expandByPoint(B),B.copy(c.max).setY(c.min.y).applyQuaternion(f),C.expandByPoint(B),B.copy(c.max).setX(c.min.x).applyQuaternion(f),C.expandByPoint(B),B.copy(c.max).applyQuaternion(f),C.expandByPoint(B),C.min.x-=a,C.min.y-=r,C.max.x+=n,C.max.y+=l,f.setFromUnitVectors(vi,u),m&&f.premultiply(bi.invert()),f.premultiply(this._yAxisUpSpace);const v=C.getSize(T),I=C.getCenter(B).applyQuaternion(f);if(Lt(this._camera)){const b=this.getDistanceToFitBox(v.x,v.y,v.z,s);h.push(this.moveTo(I.x,I.y,I.z,i)),h.push(this.dollyTo(b,i)),h.push(this.setFocalOffset(0,0,0,i))}else if(wt(this._camera)){const b=this._camera,M=b.right-b.left,_=b.top-b.bottom,x=s?Math.max(M/v.x,_/v.y):Math.min(M/v.x,_/v.y);h.push(this.moveTo(I.x,I.y,I.z,i)),h.push(this.zoomTo(x,i)),h.push(this.setFocalOffset(0,0,0,i))}return Promise.all(h)}fitToSphere(t,i){const s=[],n="isObject3D"in t?ot.createBoundingSphere(t,yi):yi.copy(t);if(s.push(this.moveTo(n.center.x,n.center.y,n.center.z,i)),Lt(this._camera)){const r=this.getDistanceToFitSphere(n.radius);s.push(this.dollyTo(r,i))}else if(wt(this._camera)){const r=this._camera.right-this._camera.left,l=this._camera.top-this._camera.bottom,h=2*n.radius,c=Math.min(r/h,l/h);s.push(this.zoomTo(c,i))}return s.push(this.setFocalOffset(0,0,0,i)),Promise.all(s)}setLookAt(t,i,s,a,n,r,l=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Ut.NONE,this._changedDolly=0;const h=B.set(a,n,r),c=T.set(t,i,s);this._targetEnd.copy(h),this._sphericalEnd.setFromVector3(c.sub(h).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,l||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const d=!l||V(this._target.x,this._targetEnd.x,this.restThreshold)&&V(this._target.y,this._targetEnd.y,this.restThreshold)&&V(this._target.z,this._targetEnd.z,this.restThreshold)&&V(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&V(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&V(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(d)}lerpLookAt(t,i,s,a,n,r,l,h,c,d,g,u,f,m=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Ut.NONE,this._changedDolly=0;const C=T.set(a,n,r),v=B.set(t,i,s);ht.setFromVector3(v.sub(C).applyQuaternion(this._yAxisUpSpace));const I=jt.set(d,g,u),b=B.set(l,h,c);ue.setFromVector3(b.sub(I).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(C.lerp(I,f));const M=ue.theta-ht.theta,_=ue.phi-ht.phi,x=ue.radius-ht.radius;this._sphericalEnd.set(ht.radius+x*f,ht.phi+_*f,ht.theta+M*f),this.normalizeRotations(),this._needsUpdate=!0,m||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const E=!m||V(this._target.x,this._targetEnd.x,this.restThreshold)&&V(this._target.y,this._targetEnd.y,this.restThreshold)&&V(this._target.z,this._targetEnd.z,this.restThreshold)&&V(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&V(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&V(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(E)}setPosition(t,i,s,a=!1){return this.setLookAt(t,i,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,a)}setTarget(t,i,s,a=!1){const n=this.getPosition(T),r=this.setLookAt(n.x,n.y,n.z,t,i,s,a);return this._sphericalEnd.phi=dt(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),r}setFocalOffset(t,i,s,a=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(t,i,s),this._needsUpdate=!0,a||this._focalOffset.copy(this._focalOffsetEnd);const n=!a||V(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&V(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&V(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(n)}setOrbitPoint(t,i,s){this._camera.updateMatrixWorld(),ft.setFromMatrixColumn(this._camera.matrixWorldInverse,0),It.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Pt.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const a=T.set(t,i,s),n=a.distanceTo(this._camera.position),r=a.sub(this._camera.position);ft.multiplyScalar(r.x),It.multiplyScalar(r.y),Pt.multiplyScalar(r.z),T.copy(ft).add(It).add(Pt),T.z=T.z+n,this.dollyTo(n,!1),this.setFocalOffset(-T.x,T.y,-T.z,!1),this.moveTo(t,i,s,!1)}setBoundary(t){if(!t){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(t),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(t,i,s,a){if(t===null){this._viewport=null;return}this._viewport=this._viewport||new N.Vector4,typeof t=="number"?this._viewport.set(t,i,s,a):this._viewport.copy(t)}getDistanceToFitBox(t,i,s,a=!1){if(Ii(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const n=t/i,r=this._camera.getEffectiveFOV()*le,l=this._camera.aspect;return((a?n>l:n<l)?i:t/l)*.5/Math.tan(r*.5)+s*.5}getDistanceToFitSphere(t){if(Ii(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const i=this._camera.getEffectiveFOV()*le,s=Math.atan(Math.tan(i*.5)*this._camera.aspect)*2,a=1<this._camera.aspect?i:s;return t/Math.sin(a*.5)}getTarget(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).copy(i?this._targetEnd:this._target)}getPosition(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).setFromSpherical(i?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(i?this._targetEnd:this._target)}getSpherical(t,i=!0){return(t||new N.Spherical).copy(i?this._sphericalEnd:this._spherical)}getFocalOffset(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).copy(i?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%zt,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=zt),this._spherical.theta+=zt*Math.round((this._sphericalEnd.theta-this._spherical.theta)/zt)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(t=!1){if(!V(this._camera.up.x,this._cameraUp0.x)||!V(this._camera.up.y,this._cameraUp0.y)||!V(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(T);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}const i=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,t),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,t),this.zoomTo(this._zoom0,t)];return Promise.all(i)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,Pe),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const t=T.subVectors(this._target,this._camera.position).normalize(),i=B.crossVectors(t,this._camera.up);this._camera.up.crossVectors(i,t).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(T);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}update(t){const i=this._sphericalEnd.theta-this._spherical.theta,s=this._sphericalEnd.phi-this._spherical.phi,a=this._sphericalEnd.radius-this._spherical.radius,n=Os.subVectors(this._targetEnd,this._target),r=xs.subVectors(this._focalOffsetEnd,this._focalOffset),l=this._zoomEnd-this._zoom;if(j(i))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const g=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=Ne(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,g,1/0,t),this._needsUpdate=!0}if(j(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const g=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=Ne(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,g,1/0,t),this._needsUpdate=!0}if(j(a))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const g=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=Ne(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,g,this.maxSpeed,t),this._needsUpdate=!0}if(j(n.x)&&j(n.y)&&j(n.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const g=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Es(this._target,this._targetEnd,this._targetVelocity,g,this.maxSpeed,t,this._target),this._needsUpdate=!0}if(j(r.x)&&j(r.y)&&j(r.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const g=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;Es(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,g,this.maxSpeed,t,this._focalOffset),this._needsUpdate=!0}if(j(l))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const g=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=Ne(this._zoom,this._zoomEnd,this._zoomVelocity,g,1/0,t)}if(this.dollyToCursor){if(Lt(this._camera)&&this._changedDolly!==0){const g=this._spherical.radius-this._lastDistance,u=this._camera,f=this._getCameraDirection(ge),m=T.copy(f).cross(u.up).normalize();m.lengthSq()===0&&(m.x=1);const C=B.crossVectors(m,f),v=this._sphericalEnd.radius*Math.tan(u.getEffectiveFOV()*le*.5),b=(this._sphericalEnd.radius-g-this._sphericalEnd.radius)/this._sphericalEnd.radius,M=jt.copy(this._targetEnd).add(m.multiplyScalar(this._dollyControlCoord.x*v*u.aspect)).add(C.multiplyScalar(this._dollyControlCoord.y*v)),_=T.copy(this._targetEnd).lerp(M,b),x=this._lastDollyDirection===Ut.IN&&this._spherical.radius<=this.minDistance,E=this._lastDollyDirection===Ut.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(x||E)){this._sphericalEnd.radius-=g,this._spherical.radius-=g;const D=B.copy(f).multiplyScalar(-g);_.add(D)}this._boundary.clampPoint(_,_);const S=B.subVectors(_,this._targetEnd);this._targetEnd.copy(_),this._target.add(S),this._changedDolly-=g,j(this._changedDolly)&&(this._changedDolly=0)}else if(wt(this._camera)&&this._changedZoom!==0){const g=this._zoom-this._lastZoom,u=this._camera,f=T.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(u.near+u.far)/(u.near-u.far)).unproject(u),m=B.set(0,0,-1).applyQuaternion(u.quaternion),C=jt.copy(f).add(m.multiplyScalar(-f.dot(u.up))),I=-(this._zoom-g-this._zoom)/this._zoom,b=this._getCameraDirection(ge),M=this._targetEnd.dot(b),_=T.copy(this._targetEnd).lerp(C,I),x=_.dot(b),E=b.multiplyScalar(x-M);_.sub(E),this._boundary.clampPoint(_,_);const S=B.subVectors(_,this._targetEnd);this._targetEnd.copy(_),this._target.add(S),this._changedZoom-=g,j(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const h=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,h),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!j(this._focalOffset.x)||!j(this._focalOffset.y)||!j(this._focalOffset.z))&&(ft.setFromMatrixColumn(this._camera.matrix,0),It.setFromMatrixColumn(this._camera.matrix,1),Pt.setFromMatrixColumn(this._camera.matrix,2),ft.multiplyScalar(this._focalOffset.x),It.multiplyScalar(-this._focalOffset.y),Pt.multiplyScalar(this._focalOffset.z),T.copy(ft).add(It).add(Pt),this._camera.position.add(T),this._camera.updateMatrixWorld()),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),T.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const d=this._needsUpdate;return d&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):d?(this.dispatchEvent({type:"update"}),j(i,this.restThreshold)&&j(s,this.restThreshold)&&j(a,this.restThreshold)&&j(n.x,this.restThreshold)&&j(n.y,this.restThreshold)&&j(n.z,this.restThreshold)&&j(r.x,this.restThreshold)&&j(r.y,this.restThreshold)&&j(r.z,this.restThreshold)&&j(l,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!d&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=d,this._needsUpdate=!1,d}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:he(this.maxDistance),minZoom:this.minZoom,maxZoom:he(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:he(this.maxPolarAngle),minAzimuthAngle:he(this.minAzimuthAngle),maxAzimuthAngle:he(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,target:this._targetEnd.toArray(),position:T.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(t,i=!1){const s=JSON.parse(t);this.enabled=s.enabled,this.minDistance=s.minDistance,this.maxDistance=ce(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=ce(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=ce(s.maxPolarAngle),this.minAzimuthAngle=ce(s.minAzimuthAngle),this.maxAzimuthAngle=ce(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],i),ht.setFromVector3(T.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(ht.theta,ht.phi,i),this.dollyTo(ht.radius,i),this.zoomTo(s.zoom,i),this.setFocalOffset(s.focalOffset[0],s.focalOffset[1],s.focalOffset[2],i),this._needsUpdate=!0}connect(t){if(this._domElement){console.warn("camera-controls is already connected.");return}t.setAttribute("data-camera-controls-version",Bg),this._addAllEventListeners(t),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(t){return t.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(t){return this._getTargetDirection(t).negate()}_findPointerById(t){return this._activePointers.find(i=>i.pointerId===t)}_findPointerByMouseButton(t){return this._activePointers.find(i=>i.mouseButton===t)}_disposePointer(t){this._activePointers.splice(this._activePointers.indexOf(t),1)}_encloseToBoundary(t,i,s){const a=i.lengthSq();if(a===0)return t;const n=B.copy(i).add(t),l=this._boundary.clampPoint(n,jt).sub(n),h=l.lengthSq();if(h===0)return t.add(i);if(h===a)return t;if(s===0)return t.add(i).add(l);{const c=1+s*h/i.dot(l);return t.add(B.copy(i).multiplyScalar(c)).add(l.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(Lt(this._camera)){const t=this._camera,i=t.near,s=t.getEffectiveFOV()*le,a=Math.tan(s*.5)*i,n=a*t.aspect;this._nearPlaneCorners[0].set(-n,-a,0),this._nearPlaneCorners[1].set(n,-a,0),this._nearPlaneCorners[2].set(n,a,0),this._nearPlaneCorners[3].set(-n,a,0)}else if(wt(this._camera)){const t=this._camera,i=1/t.zoom,s=t.left*i,a=t.right*i,n=t.top*i,r=t.bottom*i;this._nearPlaneCorners[0].set(s,n,0),this._nearPlaneCorners[1].set(a,n,0),this._nearPlaneCorners[2].set(a,r,0),this._nearPlaneCorners[3].set(s,r,0)}}_collisionTest(){let t=1/0;if(!(this.colliderMeshes.length>=1)||Ii(this._camera,"_collisionTest"))return t;const s=this._getTargetDirection(ge);Mi.lookAt(_s,s,this._camera.up);for(let a=0;a<4;a++){const n=B.copy(this._nearPlaneCorners[a]);n.applyMatrix4(Mi);const r=jt.addVectors(this._target,n);Te.set(r,s),Te.far=this._spherical.radius+1;const l=Te.intersectObjects(this.colliderMeshes);l.length!==0&&l[0].distance<t&&(t=l[0].distance)}return t}_getClientRect(t){if(!this._domElement)return;const i=this._domElement.getBoundingClientRect();return t.x=i.left,t.y=i.top,this._viewport?(t.x+=this._viewport.x,t.y+=i.height-this._viewport.w-this._viewport.y,t.width=this._viewport.z,t.height=this._viewport.w):(t.width=i.width,t.height=i.height),t}_createOnRestPromise(t){return t?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(i=>{const s=()=>{this.removeEventListener("rest",s),i()};this.addEventListener("rest",s)}))}_addAllEventListeners(t){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(t){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(t){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(t,i=new N.Sphere){const s=i,a=s.center;Gt.makeEmpty(),t.traverseVisible(r=>{r.isMesh&&Gt.expandByObject(r)}),Gt.getCenter(a);let n=0;return t.traverseVisible(r=>{if(!r.isMesh)return;const l=r;if(!l.geometry)return;const h=l.geometry.clone();h.applyMatrix4(l.matrixWorld);const d=h.attributes.position;for(let g=0,u=d.count;g<u;g++)T.fromBufferAttribute(d,g),n=Math.max(n,a.distanceToSquared(T))}),s.radius=Math.sqrt(n),s}}class ii{constructor(t,i,s){p(this,"camera");p(this,"focalOffset");p(this,"target");this.camera=t,this.target=i,this.focalOffset=s}}class Rg extends rn{constructor(i,s,a){super(i,a,"Camera Controls");p(this,"camera");p(this,"_boundOnAfterCameraUpdate");p(this,"_cameraPosition");this.camera=s,this._cameraPosition=new ii(new A.Vector3,new A.Vector3,new A.Vector3),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this.instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);const n=this.gui.addFolder("Position");n.close(),this._controllers.push(n.add(this._cameraPosition.camera,"x")),this._controllers.push(n.add(this._cameraPosition.camera,"y")),this._controllers.push(n.add(this._cameraPosition.camera,"z"));const r=this.gui.addFolder("Target");r.close(),this._controllers.push(r.add(this._cameraPosition.target,"x")),this._controllers.push(r.add(this._cameraPosition.target,"y")),this._controllers.push(r.add(this._cameraPosition.target,"z"));const l=this.gui.addFolder("Focal offset");l.close(),this._controllers.push(l.add(this._cameraPosition.focalOffset,"x")),this._controllers.push(l.add(this._cameraPosition.focalOffset,"y")),this._controllers.push(l.add(this._cameraPosition.focalOffset,"z"))}dispose(){this.instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),super.dispose()}onAfterCameraUpdate(){this.camera.getCameraPosition(this._cameraPosition)}}ot.install({THREE:{Box3:A.Box3,MathUtils:A.MathUtils,Matrix4:A.Matrix4,Quaternion:A.Quaternion,Raycaster:A.Raycaster,Sphere:A.Sphere,Spherical:A.Spherical,Vector2:A.Vector2,Vector3:A.Vector3,Vector4:A.Vector4}});class Fg extends A.EventDispatcher{constructor(i,s){super();p(this,"_boundOnAfterCameraUpdate");p(this,"_boundOnBeforeCameraUpdate");p(this,"_boundOrbitControlsOnContextMenu");p(this,"_boundOrbitControlsOnKey");p(this,"_boundOrbitControlsOnMouseUp");p(this,"_boundOrbitControlsOnWheel");p(this,"_boundPositionOnMapOnClick");p(this,"_boundPositionOnMapOnContextMenu");p(this,"_boundPositionOnMapOnMouseMove");p(this,"_cameraControlsInspector");p(this,"_clock");p(this,"_giro3dStore",ae());p(this,"_instance");p(this,"_orbitControls");p(this,"_orbitHelper");p(this,"_picker");p(this,"_pickObjectsAt");p(this,"_positionOnMapHelper");p(this,"_store",A.useCameraStore());this._instance=i,this._picker=s,this._orbitControls=new ot(this._instance.view.camera,this._instance.domElement);const a=document.createElement("div");a.className="helper",a.id="orbit-helper";const n=document.createElement("i");n.className="bi bi-mouse2-fill text-dark shadow",a.append(n),this._orbitHelper=new ki(a),this._instance.add(this._orbitHelper);const r=document.createElement("div");r.className="helper",r.id="position-on-map-helper";const l=document.createElement("i");l.className="fg-position-man text-dark shadow",r.append(l),this._positionOnMapHelper=new ki(r),this._instance.add(this._positionOnMapHelper),this._cameraControlsInspector=null,this.initializeOrbitControls(),this._pickObjectsAt=c=>{var d;return((d=this._picker.getFirstFeatureAt(this._instance,c,1))==null?void 0:d.at(0))??null},this._clock=new A.Clock,this._boundOnBeforeCameraUpdate=this.onBeforeCameraUpdate.bind(this),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu=null,this._store.$onAction(({args:c,name:d})=>{switch(d){case"lookTopDownAt":this.lookTopDownAt(c[0]);break;case"setCameraPosition":this.setCamera(c[0]);break;case"setNavigationMode":this.setNavigationMode(c[0]);break}});const h=this._giro3dStore.getInspector();h!=null&&this.initializeInspector(h),this._giro3dStore.$onAction(({after:c,args:d,name:g})=>{c(()=>{switch(g){case"setInspector":this.initializeInspector(d[0]);break}})})}get enabled(){return this._orbitControls.enabled}set enabled(i){this._orbitControls.enabled=i}dispose(){this._instance.removeEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._disablePositionOnMap(),this.disposeOrbitControls(),this._instance.remove(this._positionOnMapHelper),this._instance.remove(this._orbitHelper)}executeInteraction(i){this._orbitControls.update(this._clock.getDelta());const s=i();return this._orbitControls.update(this._clock.getDelta()),this._orbitControls.dispatchEvent({type:"update"}),s}getCameraPosition(i){const s=this._orbitControls,a=i??new ii(new A.Vector3,new A.Vector3,new A.Vector3);return s.getPosition(a.camera),s.getTarget(a.target),s.getFocalOffset(a.focalOffset),a}goToBox(i,s=!0,a={paddingBottom:10,paddingLeft:10,paddingRight:10,paddingTop:10}){const n=this.getBox(i);return this.executeInteraction(()=>(this._orbitControls.setFocalOffset(0,0,0),this._orbitControls.fitToBox(n,s,a)))}async lookAt(i,s,a=!1){await this.executeInteraction(async()=>(this._orbitControls.setFocalOffset(0,0,0,!1),this._orbitControls.setLookAt(i.x,i.y,i.z,s.x,s.y,s.z,a))),this._orbitControls.setOrbitPoint(s.x,s.y,s.z)}lookTopDownAt(i,s=!0){const a=new A.Vector3,n=new A.Vector3,r=new A.Vector3(0,0,1),l=this.getBox(i);l.min.z=l.max.z,l.getCenter(a),l.getSize(n);const h=this._orbitControls.getDistanceToFitBox(n.x,n.y,0),c=r.multiplyScalar(h).add(a);return c.x+=n.x/10,c.y-=n.y/10,this.lookAt(c,a,s)}setCamera(i){this.executeInteraction(async()=>(this._orbitControls.setOrbitPoint(0,0,0),this._orbitControls.setLookAt(i.camera.x,i.camera.y,i.camera.z,i.target.x,i.target.y,i.target.z,!1),this._orbitControls.setFocalOffset(i.focalOffset.z,i.focalOffset.y,i.focalOffset.z,!1),this._orbitControls.update(0),Promise.resolve()))}setInitialPosition(i,s=4e3){const a=new at(i.crs,i.west,i.south,s).toVector3(),n=i.centerAsVector3();this.lookAt(a,n,!1)}getBox(i){let s=new A.Box3;if(i.isBox3)s=i.clone();else if(i.isEntity3D){const a=i,n=a.getBoundingBox();n&&!n.isEmpty()?s=n.clone():"extent"in a&&(s=a.extent.toBox3(0,200))}else if(i.isObject3D)s.setFromObject(i);else throw new Error("obj should be instanceof Box3, Object3D or Entity3D");if(s.isEmpty())throw new Error("Could not find bounding box of object");return s.min.z=Math.max(s.min.z,0),s.max.z=Math.min(s.max.z,2e3),s}_disablePositionOnMap(){(this._boundPositionOnMapOnClick||this._boundPositionOnMapOnMouseMove||this._boundPositionOnMapOnContextMenu)&&(this._boundPositionOnMapOnClick&&this._instance.domElement.removeEventListener("click",this._boundPositionOnMapOnClick),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove&&this._instance.domElement.removeEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu&&this._instance.domElement.removeEventListener("contextmenu",this._boundPositionOnMapOnContextMenu),this._boundPositionOnMapOnContextMenu=null,this._positionOnMapHelper.visible=!1,this._instance.domElement.style.cursor="auto",this._instance.notifyChange())}_enablePositionOnMap(){this._boundPositionOnMapOnClick=this.onPositionOnMapClick.bind(this),this._boundPositionOnMapOnMouseMove=this.onPositionOnMapMouseMove.bind(this),this._boundPositionOnMapOnContextMenu=this.onPositionOnMapContextMenu.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._instance.domElement.addEventListener("click",this._boundPositionOnMapOnClick),this._instance.domElement.addEventListener("contextmenu",this._boundPositionOnMapOnContextMenu)}disposeOrbitControls(){this._instance.domElement.removeEventListener("keydown",this._boundOrbitControlsOnKey),this._instance.domElement.removeEventListener("wheel",this._boundOrbitControlsOnWheel),this._instance.domElement.removeEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.removeEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._orbitControls.disconnect()}initializeInspector(i){this._cameraControlsInspector&&this._cameraControlsInspector.dispose(),i&&(this._cameraControlsInspector=new Rg(i.gui,this,this._instance),i.addPanel(this._cameraControlsInspector))}initializeOrbitControls(){this._orbitControls.infinityDolly=!0,this.setNavigationMode(this._store.getNavigationMode()),this._boundOrbitControlsOnContextMenu=this.orbitControlsOnContextMenu.bind(this),this._boundOrbitControlsOnMouseUp=this.orbitControlsOnMouseUp.bind(this),this._instance.domElement.addEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.addEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._boundOrbitControlsOnWheel=this.orbitControlsOnWheel.bind(this),this._instance.domElement.addEventListener("wheel",this._boundOrbitControlsOnWheel),this._orbitControls.addEventListener("update",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>{(this._orbitControls.active||this._orbitControls.currentAction!==0)&&(this.dispatchEvent({type:"interaction-start"}),this._store.setIsUserInteracting(!0))}),this._orbitControls.addEventListener("controlend",()=>setTimeout(()=>{this._store.setIsUserInteracting(!1),this.dispatchEvent({type:"interaction-end"})})),this._boundOrbitControlsOnKey=this.orbitControlsOnKey.bind(this),this._instance.domElement.addEventListener("keydown",this._boundOrbitControlsOnKey)}onAfterCameraUpdate(){this._store.setCurrentPosition(this.getCameraPosition(),this._instance.view.camera.position)}onBeforeCameraUpdate(){const i=this._clock.getDelta();this._orbitControls.update(i)&&this._instance.notifyChange(this._instance.view.camera)}onPositionOnMapClick(i){const s=this._picker.getMapAt(this._instance,i);if(s){this._disablePositionOnMap();const a=new A.Vector3;this._instance.view.camera.getWorldDirection(a),a.normalize().setLength(3);const n=s.point.clone();n.z+=1.7;const r=n.clone();r.add(a),r.z=n.z,this.lookAt(n,r,!0).finally(()=>this._store.setNavigationMode("first-person"))}}onPositionOnMapContextMenu(i){this._disablePositionOnMap(),this._store.setNavigationMode("orbit"),i.preventDefault()}onPositionOnMapMouseMove(i){const s=this._picker.getMapAt(this._instance,i);this._instance.domElement.style.cursor=s?"none":"auto",this._positionOnMapHelper.visible=s!=null,s&&(this._positionOnMapHelper.position.copy(s.point),this._positionOnMapHelper.updateMatrixWorld()),this._instance.notifyChange()}orbitControlsOnContextMenu(i){if(this._store.getNavigationMode()!=="orbit")return;const s=this._pickObjectsAt(i);s?(this._orbitHelper.visible=!0,this._orbitHelper.position.copy(s.point),this._orbitHelper.updateMatrixWorld(),this._orbitControls.setOrbitPoint(s.point.x,s.point.y,s.point.z)):(this._orbitHelper.visible=!0,this._orbitControls.getTarget(this._orbitHelper.position),this._orbitHelper.updateMatrixWorld())}orbitControlsOnKey(i){const s=this._store.getNavigationMode();if(s==="position-on-map"){i.code==="Escape"&&this._store.setNavigationMode("orbit");return}if(s!=="orbit"&&s!=="first-person")return;const a={ARROW_BOTTOM:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",KEY_DOWN:"KeyS",KEY_LEFT:"KeyA",KEY_RIGHT:"KeyD",KEY_UP:"KeyW"};let n=0,r=0,l=0,h=0,c=i.ctrlKey||i.metaKey||i.shiftKey?200:20;switch(s==="first-person"&&(c/=10),i.code){case a.ARROW_BOTTOM:s==="first-person"?r=-1:n=-1;break;case a.ARROW_LEFT:case a.KEY_LEFT:l=-1;break;case a.ARROW_RIGHT:case a.KEY_RIGHT:l=1;break;case a.ARROW_UP:s==="first-person"?r=1:n=1;break;case a.KEY_DOWN:h=1;break;case a.KEY_UP:h=-1;break}n&&this.executeInteraction(()=>this._orbitControls.forward(n*this._orbitControls.truckSpeed*c,!0)),r&&this.executeInteraction(()=>this._orbitControls.dollyInFixed(r*this._orbitControls.truckSpeed*c,!0)),l&&this.executeInteraction(()=>this._orbitControls.truck(l*this._orbitControls.truckSpeed*c,0,!0)),h&&this.executeInteraction(()=>this._orbitControls.truck(0,h*this._orbitControls.truckSpeed*c,!0))}orbitControlsOnMouseUp(){this._store.getNavigationMode()==="orbit"&&(this._orbitHelper.visible=!1,this._instance.notifyChange())}orbitControlsOnWheel(){this._orbitControls.dispatchEvent({type:"controlstart"}),setTimeout(()=>this._orbitControls.dispatchEvent({type:"controlend"}),0)}setNavigationMode(i){switch(this._disablePositionOnMap(),i){case"disabled":this._orbitControls.enabled=!1;break;case"first-person":{this._orbitControls.dollyToCursor=!1,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=2,this._orbitControls.dollySpeed=20,this._orbitControls.azimuthRotateSpeed=.3,this._orbitControls.polarRotateSpeed=.3,this._orbitControls.mouseButtons.left=ot.ACTION.ROTATE,this._orbitControls.mouseButtons.right=ot.ACTION.TRUCK,this._orbitControls.mouseButtons.wheel=ot.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=ot.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new A.Vector3,a=this._instance.view.camera.position.clone(),n=new A.Vector3;this._instance.view.camera.getWorldDirection(s),s.normalize().setLength(3),n.copy(a).add(s),this.lookAt(a,n,!1)}break;case"orbit":{this._orbitControls.dollyToCursor=!0,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=1/0,this._orbitControls.dollySpeed=1,this._orbitControls.azimuthRotateSpeed=1,this._orbitControls.polarRotateSpeed=1,this._orbitControls.mouseButtons.left=ot.ACTION.TRUCK,this._orbitControls.mouseButtons.right=ot.ACTION.ROTATE,this._orbitControls.mouseButtons.wheel=ot.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=ot.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new A.Vector3,a=this._instance.view.camera.position.clone();this._instance.view.camera.getWorldDirection(s);const n=new A.Raycaster;n.camera=this._instance.view.camera,n.set(a,s);const r=n.intersectObject(this._instance.scene).at(0);r&&this.lookAt(a,r.point,!1)}break;case"position-on-map":this._orbitControls.enabled=!1,this._enablePositionOnMap();break;default:return i}this._instance.domElement.focus()}}const Tt=new A.EventDispatcher,wa=e=>A.isObject(e)&&(e.type==="colorLayer"||e.type==="maskLayer"||e.type==="elevationLayer"),Ug=e=>A.isObject(e)&&!wa(e);class zg{constructor(t,i){p(this,"_axisGrids",new Map);p(this,"_entities",new Map);p(this,"_instance");p(this,"_layerManager");p(this,"_masks",new Map);p(this,"_notifications",Rt());p(this,"_overlays",new Map);p(this,"_store",A.useDatasetStore());this._instance=t,this._layerManager=i,this._store.$onAction(({after:s,args:a,name:n})=>{s(()=>{switch(n){case"importFromFile":this.importFromFile(a[0]);break;case"remove":this.deleteDataset(a[0]);break;case"setVisible":this.onVisibilityChanged(a[0],a[1]);break;case"toggleGrid":this.onToggleGrid(a[0]);break;case"toggleMask":this.onToggleMask(a[0]);break}})});for(const s of this._store.getDatasets())s.visible&&this.preloadDataset(s)}dispose(){}async createGrid(t){const i=this._store.getBoundingBox(t);if(i==null||i.isEmpty())return;const s=new ln({style:{color:new A.Color("orange"),fontSize:12,numberFormat:Intl.NumberFormat("fr")},ticks:{x:50,y:50,z:50},volume:{ceiling:i.max.z+10,extent:Qe.fromBox3(this._instance.referenceCrs,i).withMargin(20,20),floor:i.min.z-10}});s.name=`AxisGrid-${t.uuid}`,await this._instance.add(s),this._axisGrids.set(t.uuid,s)}async createMask(t){const i=this._store.getBoundingBox(t);if(i==null||i.isEmpty())return;i.expandByVector(new A.Vector3(-5,-5,0));const s=new hn({geometry:new cn([[[i.min.x,i.min.y],[i.min.x,i.max.y],[i.max.x,i.max.y],[i.max.x,i.min.y],[i.min.x,i.min.y]]]),name:"Mask polygon"}),a=new Ge({name:`mask-${t.uuid}`,source:new de({data:[s],style:new q.Style({fill:new q.Fill({color:"white"})})})});a.maskMode=Ge.MaskMode.Inverted;const n=this._instance.getObjects(r=>je.isMap(r));for(const r of n)await r.addLayer(a),this._instance.notifyChange(r);this._masks.set(t.uuid,a)}deleteDataset(t){this.deleteGrid(t),this.deleteMask(t);const i=this._entities.get(t.uuid);i&&(this._instance.remove(i),this._instance.notifyChange());const s=this._overlays.get(t.uuid);s&&this._layerManager.removeBasemapLayer(s),Tt.dispatchEvent({type:"dataset-removed",value:t})}deleteGrid(t){const i=this._axisGrids.get(t.uuid);i&&this._instance.remove(i),this._axisGrids.delete(t.uuid)}deleteMask(t){const i=this._masks.get(t.uuid);i&&this._instance.getObjects(a=>je.isMap(a)).forEach(a=>{a.removeLayer(i),this._instance.notifyChange(a)}),this._masks.delete(t.uuid)}async importFromFile(t){let i;const s=t instanceof File?t.name:t;try{this._notifications.push(new Q(s,"Importing file..."));const a=await eg.importFile(t,A.getConfig());i=this._store.add(a),this._notifications.push(new Q(i.name,"Import done, parsing data...","success"))}catch(a){console.error(a),this._notifications.push(new Q(s,a.message,"error"));return}try{i.isPreloading=!0,await this.preloadDataset(i),this._notifications.push(new Q(i.name,"Import successful.","success"))}catch{}Tt.dispatchEvent({type:"dataset-added",value:i})}onDatasetPreloaded(t,i){t.isPreloaded=!0,t.isPreloading=!1,t.onObjectPreloaded&&t.onObjectPreloaded(t,i),this._store.attachEntity(t,i)}onDatasetPreloadedAsLayer(t,i){t.isPreloaded=!0,t.isPreloading=!1,this._store.attachLayer(t,i)}async onToggleGrid(t){this._axisGrids.has(t.uuid)?this.deleteGrid(t):await this.createGrid(t)}async onToggleMask(t){this._masks.has(t.uuid)?this.deleteMask(t):await this.createMask(t)}async onVisibilityChanged(t,i){try{t.visible=i,!t.isPreloaded&&i&&await this.preloadDataset(t),await this.updateDataset(t),A.Datagroup.isGroup(t)&&t.children.forEach(s=>void this.onVisibilityChanged(s,i))}catch{t.visible=!1}Tt.dispatchEvent({type:"dataset-visibility-changed",value:t})}async preloadDataset(t){if(t.isPreloaded)return Promise.resolve(t);if(A.Datagroup.isGroup(t))return t.isPreloaded=!0,Promise.resolve(t);t.isPreloading=!0;try{if(wa(t)){const i=await Ni.getDatasetLayer(this._instance,t);i.visible=t.visible,this._overlays.set(t.uuid,i),await this._layerManager.addDatasetLayer(i),this.onDatasetPreloadedAsLayer(t,i)}else if(Ug(t)){const i=await Yc.getEntity(this._instance,t);i.visible=t.visible,this._entities.set(t.uuid,i),await this._instance.add(i),this.onDatasetPreloaded(t,i)}else throw new Error("Dataset is neither an overlay or 3d mesh")}catch(i){throw console.error("Could not load dataset",t,i),t.isPreloading=!1,this._notifications.push(new Q(t.name,`Could not load dataset : ${i.message}`,"error")),i}return t}async updateDataset(t){const i=this._entities.get(t.uuid);i&&(i.visible=t.visible,t.visible&&"isMaskingBasemap"in t.config&&t.config.isMaskingBasemap===!0?await this.createMask(t):!t.visible&&this._masks.has(t.uuid)&&this.deleteMask(t),this._instance.notifyChange(i));const s=this._overlays.get(t.uuid);s&&(s.visible=t.visible,this._layerManager.notify(s))}}class jg{constructor(t){p(this,"_hoverMeasurement");p(this,"_picker");p(this,"_raycaster");this._picker=t,this._raycaster=new A.Raycaster,this._hoverMeasurement=null}clean(){this._hoverMeasurement&&(this._hoverMeasurement.instance.remove(this._hoverMeasurement),this._hoverMeasurement=null)}dispose(){this.clean()}getLastMeasurement(){var t;return(t=this._hoverMeasurement)==null?void 0:t.clone()}measure(t,i){var a;const s=(a=this._picker.getFirstFeatureAt(t,i,0,n=>!rt.isShape(n)))==null?void 0:a.at(0);if(s&&s.normal){const n=s.normal.clone();n.transformDirection(s.object.matrixWorld),n.normalize(),this._raycaster.camera=t.view.camera,this._raycaster.set(s.point,n);const r=this._raycaster.intersectObject(t.scene,!0).filter(l=>l.distance>1e-5&&l.object.userData.parentEntity!==this._hoverMeasurement).at(0);r&&(this._hoverMeasurement||(this._hoverMeasurement=new be,t.add(this._hoverMeasurement)),this._hoverMeasurement.visible=!0,this._hoverMeasurement.setPoints([s.point,r.point]),t.notifyChange(this._hoverMeasurement))}}}const Wi=kt.defineStore("measurement",()=>{const e=o.reactive([]),t=o.ref("laser"),i=o.computed(()=>e.length),s=o.ref(!1);function a(){return s.value}function n(v){s.value=v}function r(){return t.value}function l(v){t.value=v}function h(){return e}function c(v){e.splice(e.indexOf(v),1)}function d(v){e.push(v)}function g(v){return e.some(I=>I.title===v)}function u(v){}function f(v){}function m(){}function C(){}return{add:d,count:i,end:C,getMeasurementMode:r,getMeasures:h,hasMeasure:g,importMeasureFile:u,importMeasureFiles:f,isUserMeasuring:a,remove:c,setIsUserMeasuring:n,setMeasurementMode:l,start:m}});class Ea extends A.EventDispatcher{constructor(i,s,a={}){super();p(this,"properties");p(this,"title");p(this,"uuid");p(this,"_object");p(this,"_visible");this.title=i,this._visible=!0,this._object=s,this.properties=a,this.uuid=A.MathUtils.generateUUID()}get object(){return this._object}set object(i){this._object=i}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}static toCollection(i){return{features:i.map(a=>a.toGeoJSON()),type:"FeatureCollection",id:`${A.Download.getBaseUrl()}#${A.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:A.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D measures",updated:new Date().toISOString()}}}toGeoJSON(){return{geometry:{coordinates:[this.object.from.toArray(),this.object.to.toArray()],type:"LineString"},id:`${A.Download.getBaseUrl()}#${this.uuid}`,properties:{...this.properties,title:this.title,updated:new Date().toISOString()},type:"Feature"}}}function Gg(e){return window.prompt("Measure name",e)}class Hg{constructor(t,i,s){p(this,"_boundMeasure");p(this,"_boundOnEscape");p(this,"_boundPause");p(this,"_boundRestart");p(this,"_boundSaveMeasure");p(this,"_camera");p(this,"_instance");p(this,"_measureTool");p(this,"_notificationStore",Rt());p(this,"_paused",!1);p(this,"_store",Wi());this._instance=t,this._measureTool=new jg(s),this._camera=i,this._boundPause=()=>{this._paused=!0},this._boundRestart=()=>{this._paused=!1},this._camera.addEventListener("interaction-start",this._boundPause),this._camera.addEventListener("interaction-end",this._boundRestart),this._boundOnEscape=this.onEscape.bind(this),document.addEventListener("keydown",this._boundOnEscape),this._store.$onAction(({after:a,args:n,name:r})=>{a(()=>{switch(r){case"end":this.stopMeasuring();break;case"importMeasureFile":this.importMeasureFile(n[0]);break;case"importMeasureFiles":this.importMeasureFiles(n[0]);break;case"remove":this.deleteMeasure(n[0]);break;case"start":this.startMeasuring();break}})}),this._boundMeasure=this.measure.bind(this),this._boundSaveMeasure=this.saveMeasure.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundMeasure),this._instance.domElement.addEventListener("click",this._boundSaveMeasure)}dispose(){this._instance.domElement.removeEventListener("mousemove",this._boundMeasure),this._instance.domElement.removeEventListener("click",this._boundSaveMeasure),this._camera.removeEventListener("interaction-start",this._boundPause),this._camera.removeEventListener("interaction-end",this._boundRestart),document.removeEventListener("keydown",this._boundOnEscape),this._measureTool.dispose()}startMeasuring(){this._store.setIsUserMeasuring(!0)}stopMeasuring(){this._store.setIsUserMeasuring(!1),this._measureTool.clean(),this._instance.notifyChange()}updateMeasure(t){t.object.visible=t.visible,t.object.traverse(i=>i.visible=t.visible),this._instance.notifyChange()}deleteMeasure(t){this._instance.remove(t.object),this._instance.notifyChange()}async importBlob(t,i){const s=await t.text(),a=JSON.parse(s),n=a.type==="FeatureCollection"?a.features:[a];let r=0,l=0;for(const h of n)await this.importMeasure(h,i)?r++:l++;return{nbImported:r,nbSkipped:l}}async importMeasure(t,i){var r;if(t.geometry.type!=="LineString")throw new Error(`Cannot import geometry type ${t.geometry.type}`);if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=A.MathUtils.generateUUID()),i.has(t.properties.title))return!1;const s=new A.Vector3(...t.geometry.coordinates[0]),a=new A.Vector3(...t.geometry.coordinates[1]),n=new be;return n.setPoints([s,a]),await this.pushNewMeasure((r=t.properties)==null?void 0:r.title,n,t.properties),!0}async importMeasureFile(t){const i=new Set(this._store.getMeasures().map(s=>s.title));try{const{nbImported:s,nbSkipped:a}=await this.importBlob(t,i);this._notificationStore.push(new Q("Measures",`${s} measures imported (${a} skipped)`,"success"))}catch{}}async importMeasureFiles(t){const i=[];let s=0,a=0;const n=[],r=new Set(this._store.getMeasures().map(l=>l.title));for(const l of t)i.push(this.importBlob(l,r).then(({nbImported:h,nbSkipped:c})=>{s+=h,a+=c}).catch(h=>{n.push(h.message)}));await Promise.allSettled(i),n.length>0?this._notificationStore.push(new Q("Measures",`${s} measures imported (${a} skipped); ${n.length} errors: ${n}`,"warning")):this._notificationStore.push(new Q("Measures",`${s} measures imported (${a} skipped)`,"success"))}measure(t){!this._paused&&this._store.isUserMeasuring()&&this._measureTool.measure(this._instance,t)}onEscape(t){t.code==="Escape"&&this._store.isUserMeasuring()&&this.stopMeasuring()}async pushNewMeasure(t,i,s={}){await this._instance.add(i);const a=new Ea(t,i,s);i.userData.measure=a,a.addEventListener("visible",()=>this.updateMeasure(a)),this._store.add(a),this._instance.notifyChange(i)}saveMeasure(){if(!this._paused&&this._store.isUserMeasuring()){const t=this._measureTool.getLastMeasurement();if(t&&!Number.isNaN(t.length)){let i="New measurement";if(this._store.hasMeasure(i)){for(let a=1;a<1e3&&(i=`New measurement (${a})`,!!this._store.hasMeasure(i));a+=1);this._store.hasMeasure(i)&&(i="Achieved unlocked: 1000 measurements with default name")}const s=Gg(i);s!=null&&this.pushNewMeasure(s,t)}}}}class Zg extends A.EventDispatcher{constructor(i){super();p(this,"ambientLight");p(this,"annotationManager");p(this,"camera");p(this,"datasetManager");p(this,"dirLight");p(this,"highlighter");p(this,"layerManager");p(this,"mainInstance");p(this,"measurementManager");p(this,"picker");p(this,"_boundOnFrameEnd");p(this,"_store",ae());this.mainInstance=i,this.picker=new vs,this.camera=new Fg(this.mainInstance,this.picker);const s=this._store.getDefaultCameraPosition(),a=this._store.getDefaultCameraLookAt();this.camera.lookAt(s.toVector3(),a.toVector3()),this.layerManager=new Eg(this.mainInstance),this.datasetManager=new zg(this.mainInstance,this.layerManager),this.annotationManager=new Tg(this.mainInstance,this.camera,this.picker),this.highlighter=new ig,this.picker=new vs,this.measurementManager=new Hg(this.mainInstance,this.camera,this.picker),this._boundOnFrameEnd=this.onFrameEnd.bind(this),this.mainInstance.addEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.renderingOptions.enableEDL=!0,this.mainInstance.renderingOptions.enableInpainting=!1,this.mainInstance.renderingOptions.enablePointCloudOcclusion=!1;const n=16777215;this.ambientLight=new A.AmbientLight(n,.6),this.mainInstance.scene.add(this.ambientLight),this.dirLight=new A.DirectionalLight(n,2),this.dirLight.position.set(a.x-1e4,a.y-1e4,1e4),this.dirLight.target.position.set(a.x,a.y,0),this.mainInstance.scene.add(this.dirLight),this.mainInstance.scene.add(this.dirLight.target),this.dirLight.updateMatrixWorld(),this.mainInstance.scene.updateMatrixWorld(),this.mainInstance.notifyChange()}dispose(){this.mainInstance.removeEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.scene.remove(this.dirLight.target),this.mainInstance.scene.remove(this.dirLight),this.mainInstance.scene.remove(this.ambientLight),this.measurementManager.dispose(),this.highlighter.dispose(),this.annotationManager.dispose(),this.layerManager.dispose(),this.camera.dispose()}getBoundingBox(){const i=new A.Box3,s=new A.Box3;return this.mainInstance.scene.traverse(a=>{s.setFromObject(a),i.union(s)}),i}getObjects3d(){const i=[];return this.mainInstance.scene.traverse(s=>{i.push(s)}),i}onFrameEnd(){const i=this.mainInstance.view.camera;i.near=2,this.dispatchEvent({type:"update"})}}class Wg{constructor(){p(this,"geometry");p(this,"object3D");this.geometry=new A.BufferGeometry,this.object3D=new A.LineSegments(this.geometry,new A.LineBasicMaterial({color:16711680})),this.object3D.position.set(0,0,1),this.object3D.updateMatrixWorld()}setCorners(t,i,s,a){this.geometry.setFromPoints([t,i,i,s,s,a,a,t])}}const qg=new gn("EPSG:3857",-20037508342789244e-9,20037508342789244e-9,-20037508342789244e-9,20037508342789244e-9);function Yg(e){const t=new $t({name:"osm",source:new dn({source:new An})});return t.visible=!0,e.addLayer(t)}class Jg{constructor(t){p(this,"_basemap");p(this,"_boundUpdateViewbox");p(this,"_mainInstance");p(this,"_minimapInstance");p(this,"_viewbox");this._mainInstance=null,this._minimapInstance=t,this._viewbox=new Wg,this._minimapInstance.scene.add(this._viewbox.object3D),this._viewbox.object3D.updateMatrixWorld(),this._minimapInstance.notifyChange(),this._basemap=new un({extent:qg}),this._basemap.name="minimap",this._minimapInstance.add(this._basemap),Yg(this._basemap);const i=new at("EPSG:4326",4.84,45.76).as(this._minimapInstance.referenceCrs),s=new A.Vector3(i.x,i.y,0),a=this._minimapInstance.view.camera;a.position.set(s.x,s.y,2e4),a.lookAt(s.x,s.y+1,0),this._minimapInstance.notifyChange(),this._boundUpdateViewbox=this.updateViewbox.bind(this)}dispose(){this._mainInstance&&this._mainInstance.removeEventListener("after-camera-update",this._boundUpdateViewbox),this._minimapInstance.remove(this._basemap),this._minimapInstance.scene.remove(this._viewbox.object3D),this._basemap.dispose(),this._viewbox.geometry.dispose(),this._viewbox.object3D.geometry.dispose(),this._viewbox.object3D.material.dispose()}getCorners(){const t=this._mainInstance,i=this._minimapInstance;if(t===null)throw new Error("Must call setMainInstance before getCorners");const s=t.engine.getWindowSize(),a=(c,d)=>{var f;const u=(f=t.pickObjectsAt(new A.Vector2(c,d),{limit:1,radius:0}).at(0))==null?void 0:f.point;if(u){const m=new at(t.referenceCrs,u.x,u.y,1).as(i.referenceCrs).toVector3();return m.z=1,m}},n=a(0,0),r=a(s.x-1,0),l=a(0,s.y-1),h=a(s.x-1,s.y-1);if(!(!n||!r||!l||!h))return{ll:l,lr:h,ul:n,ur:r}}setMainInstance(t){this._mainInstance&&this._mainInstance.removeEventListener("after-camera-update",this._boundUpdateViewbox),this._mainInstance=t,t&&t.addEventListener("after-camera-update",this._boundUpdateViewbox)}updateViewbox(){if(this._mainInstance===null)throw new Error("Must call setMainInstance before updateViewbox");const t=this._mainInstance.view.camera,i=this._minimapInstance.view.camera;this._viewbox.object3D.visible=!1;const s=t.position,a=new at(this._mainInstance.referenceCrs,s.x,s.y,0).as(this._minimapInstance.referenceCrs),{x:n,y:r}=a;i.position.set(n,r,i.position.z),i.lookAt(n,r+1,0),this._minimapInstance.notifyChange(this._basemap)}}class Xg{constructor(t){p(this,"_cameraController");p(this,"_instance");this._cameraController=t.camera,this._instance=t.instance}getBoundingBox(){const t=this._instance.getEntities(),i=new A.Box3().makeEmpty();for(const s of t)if(Di.isEntity3D(s)){const a=s.getBoundingBox();a!=null&&i.union(a)}return i}getCameraController(){return this._cameraController}getInstance(){return this._instance}}const Kg={class:"toast-container"},Qg=["v-if"],$g={class:"me-auto mx-2"},tu=["innerHTML"],eu=o.defineComponent({__name:"AlertToast",setup(e){const t=o.ref(null),i=o.ref(Q.empty());function s(l){i.value=l,In.Toast.getOrCreateInstance(t.value).show()}Rt().$onAction(({args:l,name:h})=>{switch(h){case"push":s(l[0]);break}});function n(){if(i.value==null)return"text-bg-success";switch(i.value.level){case"error":return"bi-exclamation-circle-fill";case"info":return"bi-check-circle-fill";case"success":return"bi-check-lg";case"warning":return"bi-exclamation-triangle-fill";default:return"text-bg-success"}}function r(){if(i.value==null)return"text-bg-success";switch(i.value.level){case"error":return"text-bg-danger";case"info":return"text-bg-secondary";case"success":return"text-bg-success";case"warning":return"text-bg-warning";default:return"text-bg-success"}}return(l,h)=>(o.openBlock(),o.createElementBlock("div",Kg,[o.createElementVNode("div",{ref_key:"alertToast",ref:t,class:"toast",role:"alert","aria-live":"assertive","aria-atomic":"true"},[o.createElementVNode("div",{class:o.normalizeClass(["toast-header",r()])},[o.createElementVNode("i",{"v-if":i.value.level==="info",class:o.normalizeClass(["bi",n()])},null,10,Qg),o.createElementVNode("strong",$g,o.toDisplayString(i.value.title),1),h[0]||(h[0]=o.createElementVNode("button",{type:"button",class:"btn-close","data-bs-dismiss":"toast","aria-label":"Close"},null,-1))],2),o.createElementVNode("div",{class:"toast-body",innerHTML:i.value.text},null,8,tu)],512)]))}}),iu=A._export_sfc(eu,[["__scopeId","data-v-002327a6"]]),su=o.defineComponent({__name:"ColorFragment",props:{color:{}},setup(e){o.useCssVars(s=>({"8f755d56":i}));const i=`#${e.color.getHexString()}`;return(s,a)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("span",{class:"color"},[o.createElementVNode("span",{class:"d-none"},o.toDisplayString(i))]),o.createTextVNode(" "+o.toDisplayString(i))],64))}}),au=A._export_sfc(su,[["__scopeId","data-v-535f5fef"]]),nu={class:"text-secondary"},ou=o.defineComponent({__name:"CoordinateFragment",props:{prefix:String,suffix:String,value:String},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",nu,[o.createElementVNode("span",null,[o.createElementVNode("b",null,o.toDisplayString(e.prefix),1),o.createTextVNode(" "+o.toDisplayString(e.value)+o.toDisplayString(e.suffix),1)])]))}}),bt=A._export_sfc(ou,[["__scopeId","data-v-ce90ec07"]]),ru=["href"],lu=["src","alt"],hu={controls:"",style:{"max-width":"200px"}},cu=["src","type"],gu=["href"],uu=["href"],du=["title","src"],Au=["href"],mu=["href"],Cu=o.defineComponent({__name:"LinkFragment",props:{href:{},title:{},type:{}},setup(e){const t=e;return(i,s)=>{var a,n;return(a=t.type)!=null&&a.startsWith("image/")?(o.openBlock(),o.createElementBlock("a",{key:0,href:t.href,target:"_blank"},[o.createElementVNode("img",{src:t.href,alt:t.title,style:{"max-width":"200px"}},null,8,lu)],8,ru)):(n=t.type)!=null&&n.startsWith("video/")?(o.openBlock(),o.createElementBlock(o.Fragment,{key:1},[o.createElementVNode("video",hu,[o.createElementVNode("source",{src:t.href,type:t.type},null,8,cu),s[0]||(s[0]=o.createTextVNode(" Download the ",-1)),o.createElementVNode("a",{href:t.href},"video",8,gu),s[1]||(s[1]=o.createTextVNode(".",-1))]),s[2]||(s[2]=o.createElementVNode("br",null,null,-1)),s[3]||(s[3]=o.createTextVNode(" Download the ",-1)),o.createElementVNode("a",{href:t.href,target:"_blank"},"video",8,uu),s[4]||(s[4]=o.createTextVNode(". ",-1))],64)):t.type==="application/pdf"?(o.openBlock(),o.createElementBlock(o.Fragment,{key:2},[o.createElementVNode("iframe",{title:t.title,width:"200",height:"300",src:t.href,frameborder:"1",sandbox:"allow-same-origin allow-scripts"},null,8,du),s[5]||(s[5]=o.createElementVNode("br",null,null,-1)),s[6]||(s[6]=o.createTextVNode(" Download the ",-1)),o.createElementVNode("a",{href:t.href,target:"_blank"},"file",8,Au),s[7]||(s[7]=o.createTextVNode(". ",-1))],64)):(o.openBlock(),o.createElementBlock("a",{key:3,href:t.href,target:"_blank"},o.toDisplayString(t.title),9,mu))}}}),fu=["title"],Iu={key:0,class:"text-secondary"},pu={key:1,class:"text-secondary"},vu={key:0},yu={key:3,class:"d-flex align-items-center justify-content-between"},bu={key:4,class:"text-secondary"},Mu=["title"],wu=o.defineComponent({__name:"AttributeItem",props:{attrName:{},attrValue:{}},setup(e){const t=e;let i;switch(t.attrName){case"IFCType":i=["badge","bg-secondary","text-light","text-truncate"];break;default:i=["text-truncate"]}return(s,a)=>{const n=o.resolveComponent("AttributeItem",!0);return o.openBlock(),o.createElementBlock("tr",null,[o.createElementVNode("th",{title:s.attrName,class:"align-top text-truncate"},o.toDisplayString(s.attrName),9,fu),o.createElementVNode("td",{class:o.normalizeClass(o.unref(i))},[t.attrValue===void 0?(o.openBlock(),o.createElementBlock("span",Iu,"undefined")):t.attrValue===null?(o.openBlock(),o.createElementBlock("span",pu,"null")):typeof t.attrValue=="object"?(o.openBlock(),o.createElementBlock(o.Fragment,{key:2},[Array.isArray(t.attrValue)?(o.openBlock(),o.createElementBlock("table",vu,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(t.attrValue,(r,l)=>(o.openBlock(),o.createBlock(n,{key:l,"attr-name":`[${l}]`,"attr-value":r},null,8,["attr-name","attr-value"]))),128))])):o.unref(A.isLink)(t.attrValue)?(o.openBlock(),o.createBlock(Cu,{key:1,href:t.attrValue.href,title:t.attrValue.title,type:t.attrValue.type},null,8,["href","title","type"])):o.unref(A.isColor)(t.attrValue)?(o.openBlock(),o.createBlock(au,{key:t.attrValue.getHexString(),color:t.attrValue},null,8,["color"])):o.unref(A.isVector3)(t.attrValue)?(o.openBlock(),o.createElementBlock("div",yu,[o.createVNode(bt,{value:t.attrValue.x.toFixed(0),prefix:"X:"},null,8,["value"]),o.createVNode(bt,{value:t.attrValue.y.toFixed(0),prefix:"Y:"},null,8,["value"]),o.createVNode(bt,{value:t.attrValue.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])):(o.openBlock(),o.createElementBlock("span",bu,"Object"))],64)):(o.openBlock(),o.createElementBlock("span",{key:3,title:t.attrValue},o.toDisplayString(t.attrValue),9,Mu))],2)])}}}),_a=A._export_sfc(wu,[["__scopeId","data-v-1c2e92b2"]]),Eu={key:0},_u={class:"badge bg-info-subtle text-dark mb-0"},Ou={class:"table table-striped table-sm w-100"},xu=o.defineComponent({__name:"AttributeGroup",props:{children:{},title:{}},setup(e){return(t,i)=>t.children.length>0?(o.openBlock(),o.createElementBlock("div",Eu,[o.createElementVNode("h6",_u,o.toDisplayString(t.title),1),o.createElementVNode("table",Ou,[o.createElementVNode("tbody",null,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(t.children,(s,a)=>(o.openBlock(),o.createBlock(_a,{key:a,"attr-name":s.key,"attr-value":s.value},null,8,["attr-name","attr-value"]))),128))])])])):o.createCommentVNode("",!0)}}),ku={class:"card"},Su={class:"card-header d-flex align-items-center justify-content-between"},Nu={class:"text-truncate mx-2"},Lu={class:"card-body content py-2 px-1"},Pu={class:"card-footer py-0"},Tu={class:"d-flex align-items-center column-gap-3"},Du=o.defineComponent({__name:"AttributePanel",props:{attributes:{},name:{},parent:{},point:{}},emits:["close"],setup(e){const t=e,i=o.ref(!1);function s(){const a=`${t.point.x};${t.point.y};${t.point.z}`;navigator.clipboard.writeText(a).then(()=>{i.value=!0,setTimeout(()=>i.value=!1,2e3)}).catch(n=>{console.log("failed",n)})}return(a,n)=>(o.openBlock(),o.createElementBlock("div",ku,[o.createElementVNode("div",Su,[n[1]||(n[1]=o.createElementVNode("i",{class:"bi bi-card-checklist"},null,-1)),o.createElementVNode("span",Nu,o.toDisplayString(a.name??a.parent),1),o.createElementVNode("button",{onClick:n[0]||(n[0]=r=>a.$emit("close")),type:"button",class:"btn-close","aria-label":"Close"})]),o.createElementVNode("div",Lu,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(a.attributes.entries(),(r,l)=>(o.openBlock(),o.createBlock(xu,{key:l,title:r[0],children:r[1]},null,8,["title","children"]))),128))]),o.createElementVNode("div",Pu,[o.createElementVNode("div",Tu,[o.createVNode(bt,{value:a.point.x.toFixed(0),prefix:"X:"},null,8,["value"]),o.createVNode(bt,{value:a.point.y.toFixed(0),prefix:"Y:"},null,8,["value"]),o.createVNode(bt,{value:a.point.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"]),o.createElementVNode("button",{onClick:s,type:"button",class:"btn btn-link"},[o.createElementVNode("i",{class:o.normalizeClass(["bi",i.value?["bi-clipboard-check","test-success"]:["bi-clipboard"]])},null,2)])])])]))}}),Bu=A._export_sfc(Du,[["__scopeId","data-v-b1912966"]]),Vu="data:image/png;base64,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",Ru={id:"loading-screen",class:"container"},Fu={xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",fill:"currentColor",class:"bi bi-geo-alt-fill pulse",viewBox:"0 0 16 16",style:{"vertical-align":"middle"}},Uu={class:"logo"},zu=["src"],ju=o.defineComponent({__name:"LoadingScreen",setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",Ru,[i[1]||(i[1]=o.createElementVNode("h1",null,"Loading...",-1)),o.createElementVNode("h2",null,[(o.openBlock(),o.createElementBlock("svg",Fu,[...i[0]||(i[0]=[o.createElementVNode("path",{d:"M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6"},null,-1)])]))]),o.createElementVNode("div",Uu,[o.createElementVNode("img",{src:o.unref(Vu)},null,8,zu)])]))}}),Gu=A._export_sfc(ju,[["__scopeId","data-v-712b955c"]]),Hu={class:"main"},Zu=o.defineComponent({__name:"MainView",setup(e){const t=o.ref(null),i=o.ref(null),s=o.shallowRef(null),a=ae();return o.onMounted(()=>{s.value=new Bi({backgroundColor:null,crs:a.getCRS(),target:t.value}),a.setMainView(s.value)}),o.onUnmounted(()=>{a.setMainView(null),s.value&&(s.value.view.setControls(null),s.value.dispose())}),(n,r)=>(o.openBlock(),o.createElementBlock("div",Hu,[o.createElementVNode("div",{ref_key:"mainView",ref:t,class:"main",id:"main-view"},null,512),o.createElementVNode("div",{ref_key:"inspectorView",ref:i,id:"inspector",class:"position-absolute top-0 start-0 mh-100 overflow-auto"},null,512)]))}}),Wu=A._export_sfc(Zu,[["__scopeId","data-v-0d10144c"]]),qu=o.defineComponent({__name:"MinimapView",setup(e){const t=o.ref(null),i=o.shallowRef(),s=ae();return o.onMounted(()=>{i.value=new Bi({backgroundColor:13421772,crs:"EPSG:3857",target:t.value}),i.value.scene.add(new A.DirectionalLight),s.setMinimapView(i.value)}),o.onUnmounted(()=>{var a;s.setMinimapView(null),(a=i.value)==null||a.dispose()}),(a,n)=>(o.openBlock(),o.createElementBlock("div",{ref_key:"target",ref:t,class:"main"},null,512))}}),Yu=A._export_sfc(qu,[["__scopeId","data-v-d78f1f47"]]),Ju={class:"card root"},Xu={class:"d-flex align-items-center"},Ku=["aria-pressed"],Qu=o.defineComponent({__name:"NavigationButtons",setup(e){const t=A.useCameraStore(),i=Rt(),s=o.ref(t.getNavigationModeRef());o.watch(s,n=>{t.setNavigationMode(n);let r,l;switch(n){case"disabled":{r="Disabled",l="Camera is disabled";break}case"first-person":{r="First person",l=`<i class="bi bi-hand-index-thumb"></i> Left-click to rotate; Right-click to pan<br>
9
+ */const G={LEFT:1,RIGHT:2,MIDDLE:4},p=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,SCREEN_PAN:4,OFFSET:8,DOLLY:16,ZOOM:32,TOUCH_ROTATE:64,TOUCH_TRUCK:128,TOUCH_SCREEN_PAN:256,TOUCH_OFFSET:512,TOUCH_DOLLY:1024,TOUCH_ZOOM:2048,TOUCH_DOLLY_TRUCK:4096,TOUCH_DOLLY_SCREEN_PAN:8192,TOUCH_DOLLY_OFFSET:16384,TOUCH_DOLLY_ROTATE:32768,TOUCH_ZOOM_TRUCK:65536,TOUCH_ZOOM_OFFSET:131072,TOUCH_ZOOM_SCREEN_PAN:262144,TOUCH_ZOOM_ROTATE:524288}),Tt={NONE:0,IN:1,OUT:-1};function xt(e){return e.isPerspectiveCamera}function vt(e){return e.isOrthographicCamera}const Lt=Math.PI*2,$i=Math.PI/2,Ys=1e-5,Qt=Math.PI/180;function lt(e,t,i){return Math.max(t,Math.min(i,e))}function j(e,t=Ys){return Math.abs(e)<t}function U(e,t,i=Ys){return j(e-t,i)}function ts(e,t){return Math.round(e/t)*t}function $t(e){return isFinite(e)?e:e<0?-Number.MAX_VALUE:Number.MAX_VALUE}function te(e){return Math.abs(e)<Number.MAX_VALUE?e:e*(1/0)}function Ie(e,t,i,s,a=1/0,o){s=Math.max(1e-4,s);const l=2/s,r=l*o,h=1/(1+r+.48*r*r+.235*r*r*r);let c=e-t;const u=t,g=a*s;c=lt(c,-g,g),t=e-c;const d=(i.value+l*c)*o;i.value=(i.value-l*d)*h;let C=t+(c+d)*h;return u-e>0==C>u&&(C=u,i.value=(C-u)/o),C}function es(e,t,i,s,a=1/0,o,l){s=Math.max(1e-4,s);const r=2/s,h=r*o,c=1/(1+h+.48*h*h+.235*h*h*h);let u=t.x,g=t.y,d=t.z,C=e.x-u,f=e.y-g,m=e.z-d;const v=u,I=g,b=d,M=a*s,O=M*M,_=C*C+f*f+m*m;if(_>O){const Fe=Math.sqrt(_);C=C/Fe*M,f=f/Fe*M,m=m/Fe*M}u=e.x-C,g=e.y-f,d=e.z-m;const w=(i.x+r*C)*o,S=(i.y+r*f)*o,D=(i.z+r*m)*o;i.x=(i.x-r*w)*c,i.y=(i.y-r*S)*c,i.z=(i.z-r*D)*c,l.x=u+(C+w)*c,l.y=g+(f+S)*c,l.z=d+(m+D)*c;const T=v-e.x,R=I-e.y,B=b-e.z,K=l.x-v,Jt=l.y-I,oa=l.z-b;return T*K+R*Jt+B*oa>0&&(l.x=v,l.y=I,l.z=b,i.x=(l.x-v)/o,i.y=(l.y-I)/o,i.z=(l.z-b)/o),l}function Ke(e,t){t.set(0,0),e.forEach(i=>{t.x+=i.clientX,t.y+=i.clientY}),t.x/=e.length,t.y/=e.length}function Qe(e,t){return vt(e)?(console.warn(`${t} is not supported in OrthographicCamera`),!0):!1}class Tc{constructor(){this._listeners={}}addEventListener(t,i){const s=this._listeners;s[t]===void 0&&(s[t]=[]),s[t].indexOf(i)===-1&&s[t].push(i)}hasEventListener(t,i){const s=this._listeners;return s[t]!==void 0&&s[t].indexOf(i)!==-1}removeEventListener(t,i){const a=this._listeners[t];if(a!==void 0){const o=a.indexOf(i);o!==-1&&a.splice(o,1)}}removeAllEventListeners(t){if(!t){this._listeners={};return}Array.isArray(this._listeners[t])&&(this._listeners[t].length=0)}dispatchEvent(t){const s=this._listeners[t.type];if(s!==void 0){t.target=this;const a=s.slice(0);for(let o=0,l=a.length;o<l;o++)a[o].call(this,t)}}}var $e;const Lc="2.10.1",pe=1/8,Dc=/Mac/.test(($e=globalThis==null?void 0:globalThis.navigator)===null||$e===void 0?void 0:$e.platform);let N,is,ve,ti,tt,L,V,Dt,ee,dt,ut,_t,ss,as,nt,ie,Bt,ns,ei,os,ii,si,ye;class st extends Tc{static install(t){N=t.THREE,is=Object.freeze(new N.Vector3(0,0,0)),ve=Object.freeze(new N.Vector3(0,1,0)),ti=Object.freeze(new N.Vector3(0,0,1)),tt=new N.Vector2,L=new N.Vector3,V=new N.Vector3,Dt=new N.Vector3,ee=new N.Vector3,dt=new N.Vector3,ut=new N.Vector3,_t=new N.Vector3,ss=new N.Vector3,as=new N.Vector3,nt=new N.Spherical,ie=new N.Spherical,Bt=new N.Box3,ns=new N.Box3,ei=new N.Sphere,os=new N.Quaternion,ii=new N.Quaternion,si=new N.Matrix4,ye=new N.Raycaster}static get ACTION(){return p}set verticalDragToForward(t){console.warn("camera-controls: `verticalDragToForward` was removed. Use `mouseButtons.left = CameraControls.ACTION.SCREEN_PAN` instead.")}constructor(t,i){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=p.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Tt.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new N.Vector3,this._focalOffsetVelocity=new N.Vector3,this._zoomVelocity={value:0},this._truckInternal=(I,b,M,O)=>{let _,w;if(xt(this._camera)){const S=L.copy(this._camera.position).sub(this._target),D=this._camera.getEffectiveFOV()*Qt,T=S.length()*Math.tan(D*.5);_=this.truckSpeed*I*T/this._elementRect.height,w=this.truckSpeed*b*T/this._elementRect.height}else if(vt(this._camera)){const S=this._camera;_=this.truckSpeed*I*(S.right-S.left)/S.zoom/this._elementRect.width,w=this.truckSpeed*b*(S.top-S.bottom)/S.zoom/this._elementRect.height}else return;O?(M?this.setFocalOffset(this._focalOffsetEnd.x+_,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(_,0,!0),this.forward(-w,!0)):M?this.setFocalOffset(this._focalOffsetEnd.x+_,this._focalOffsetEnd.y+w,this._focalOffsetEnd.z,!0):this.truck(_,w,!0)},this._rotateInternal=(I,b)=>{const M=Lt*this.azimuthRotateSpeed*I/this._elementRect.height,O=Lt*this.polarRotateSpeed*b/this._elementRect.height;this.rotate(M,O,!0)},this._dollyInternal=(I,b,M)=>{const O=Math.pow(.95,-I*this.dollySpeed),_=this._sphericalEnd.radius,w=this._sphericalEnd.radius*O,S=lt(w,this.minDistance,this.maxDistance),D=S-w;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(w,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(D,!0),this._dollyToNoClamp(S,!0)):this._dollyToNoClamp(S,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?w:S)-_,this._dollyControlCoord.set(b,M)),this._lastDollyDirection=Math.sign(-I)},this._zoomInternal=(I,b,M)=>{const O=Math.pow(.95,I*this.dollySpeed),_=this._zoom,w=this._zoom*O;this.zoomTo(w,!0),this.dollyToCursor&&(this._changedZoom+=w-_,this._dollyControlCoord.set(b,M))},typeof N>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=t,this._yAxisUpSpace=new N.Quaternion().setFromUnitVectors(this._camera.up,ve),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=p.NONE,this._target=new N.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new N.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new N.Spherical().setFromVector3(L.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new N.Vector3,new N.Vector3,new N.Vector3,new N.Vector3],this._updateNearPlaneCorners(),this._boundary=new N.Box3(new N.Vector3(-1/0,-1/0,-1/0),new N.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new N.Vector2,this.mouseButtons={left:p.ROTATE,middle:p.DOLLY,right:p.TRUCK,wheel:xt(this._camera)?p.DOLLY:vt(this._camera)?p.ZOOM:p.NONE},this.touches={one:p.TOUCH_ROTATE,two:xt(this._camera)?p.TOUCH_DOLLY_TRUCK:vt(this._camera)?p.TOUCH_ZOOM_TRUCK:p.NONE,three:p.TOUCH_TRUCK};const s=new N.Vector2,a=new N.Vector2,o=new N.Vector2,l=I=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const O=this._domElement.getBoundingClientRect(),_=I.clientX/O.width,w=I.clientY/O.height;if(_<this._interactiveArea.left||_>this._interactiveArea.right||w<this._interactiveArea.top||w>this._interactiveArea.bottom)return}const b=I.pointerType!=="mouse"?null:(I.buttons&G.LEFT)===G.LEFT?G.LEFT:(I.buttons&G.MIDDLE)===G.MIDDLE?G.MIDDLE:(I.buttons&G.RIGHT)===G.RIGHT?G.RIGHT:null;if(b!==null){const O=this._findPointerByMouseButton(b);O&&this._disposePointer(O)}if((I.buttons&G.LEFT)===G.LEFT&&this._lockedPointer)return;const M={pointerId:I.pointerId,clientX:I.clientX,clientY:I.clientY,deltaX:0,deltaY:0,mouseButton:b};this._activePointers.push(M),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.addEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),this._isDragging=!0,d(I)},r=I=>{I.cancelable&&I.preventDefault();const b=I.pointerId,M=this._lockedPointer||this._findPointerById(b);if(M){if(M.clientX=I.clientX,M.clientY=I.clientY,M.deltaX=I.movementX,M.deltaY=I.movementY,this._state=0,I.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(I.buttons&G.LEFT)===G.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(I.buttons&G.MIDDLE)===G.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(I.buttons&G.RIGHT)===G.RIGHT&&(this._state=this._state|this.mouseButtons.right);C()}},h=I=>{const b=this._findPointerById(I.pointerId);if(!(b&&b===this._lockedPointer)){if(b&&this._disposePointer(b),I.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=p.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=p.NONE;f()}};let c=-1;const u=I=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===p.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const w=this._domElement.getBoundingClientRect(),S=I.clientX/w.width,D=I.clientY/w.height;if(S<this._interactiveArea.left||S>this._interactiveArea.right||D<this._interactiveArea.top||D>this._interactiveArea.bottom)return}if(I.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===p.ROTATE||this.mouseButtons.wheel===p.TRUCK){const w=performance.now();c-w<1e3&&this._getClientRect(this._elementRect),c=w}const b=Dc?-1:-3,M=I.deltaMode===1||I.ctrlKey?I.deltaY/b:I.deltaY/(b*10),O=this.dollyToCursor?(I.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,_=this.dollyToCursor?(I.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case p.ROTATE:{this._rotateInternal(I.deltaX,I.deltaY),this._isUserControllingRotate=!0;break}case p.TRUCK:{this._truckInternal(I.deltaX,I.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case p.SCREEN_PAN:{this._truckInternal(I.deltaX,I.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case p.OFFSET:{this._truckInternal(I.deltaX,I.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case p.DOLLY:{this._dollyInternal(-M,O,_),this._isUserControllingDolly=!0;break}case p.ZOOM:{this._zoomInternal(-M,O,_),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},g=I=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===st.ACTION.NONE){const b=I instanceof PointerEvent?I.pointerId:0,M=this._findPointerById(b);M&&this._disposePointer(M),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h);return}I.preventDefault()}},d=I=>{if(!this._enabled)return;if(Ke(this._activePointers,tt),this._getClientRect(this._elementRect),s.copy(tt),a.copy(tt),this._activePointers.length>=2){const M=tt.x-this._activePointers[1].clientX,O=tt.y-this._activePointers[1].clientY,_=Math.sqrt(M*M+O*O);o.set(0,_);const w=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,S=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;a.set(w,S)}if(this._state=0,!I)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in I&&I.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(I.buttons&G.LEFT)===G.LEFT&&(this._state=this._state|this.mouseButtons.left),(I.buttons&G.MIDDLE)===G.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(I.buttons&G.RIGHT)===G.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&p.ROTATE)===p.ROTATE||(this._state&p.TOUCH_ROTATE)===p.TOUCH_ROTATE||(this._state&p.TOUCH_DOLLY_ROTATE)===p.TOUCH_DOLLY_ROTATE||(this._state&p.TOUCH_ZOOM_ROTATE)===p.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&p.TRUCK)===p.TRUCK||(this._state&p.SCREEN_PAN)===p.SCREEN_PAN||(this._state&p.TOUCH_TRUCK)===p.TOUCH_TRUCK||(this._state&p.TOUCH_SCREEN_PAN)===p.TOUCH_SCREEN_PAN||(this._state&p.TOUCH_DOLLY_TRUCK)===p.TOUCH_DOLLY_TRUCK||(this._state&p.TOUCH_DOLLY_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN||(this._state&p.TOUCH_ZOOM_TRUCK)===p.TOUCH_ZOOM_TRUCK||(this._state&p.TOUCH_ZOOM_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&p.DOLLY)===p.DOLLY||(this._state&p.TOUCH_DOLLY)===p.TOUCH_DOLLY||(this._state&p.TOUCH_DOLLY_TRUCK)===p.TOUCH_DOLLY_TRUCK||(this._state&p.TOUCH_DOLLY_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN||(this._state&p.TOUCH_DOLLY_OFFSET)===p.TOUCH_DOLLY_OFFSET||(this._state&p.TOUCH_DOLLY_ROTATE)===p.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&p.ZOOM)===p.ZOOM||(this._state&p.TOUCH_ZOOM)===p.TOUCH_ZOOM||(this._state&p.TOUCH_ZOOM_TRUCK)===p.TOUCH_ZOOM_TRUCK||(this._state&p.TOUCH_ZOOM_SCREEN_PAN)===p.TOUCH_ZOOM_SCREEN_PAN||(this._state&p.TOUCH_ZOOM_OFFSET)===p.TOUCH_ZOOM_OFFSET||(this._state&p.TOUCH_ZOOM_ROTATE)===p.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&p.OFFSET)===p.OFFSET||(this._state&p.TOUCH_OFFSET)===p.TOUCH_OFFSET||(this._state&p.TOUCH_DOLLY_OFFSET)===p.TOUCH_DOLLY_OFFSET||(this._state&p.TOUCH_ZOOM_OFFSET)===p.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},C=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,Ke(this._activePointers,tt);const b=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,M=b?-b.deltaX:a.x-tt.x,O=b?-b.deltaY:a.y-tt.y;if(a.copy(tt),((this._state&p.ROTATE)===p.ROTATE||(this._state&p.TOUCH_ROTATE)===p.TOUCH_ROTATE||(this._state&p.TOUCH_DOLLY_ROTATE)===p.TOUCH_DOLLY_ROTATE||(this._state&p.TOUCH_ZOOM_ROTATE)===p.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(M,O),this._isUserControllingRotate=!0),(this._state&p.DOLLY)===p.DOLLY||(this._state&p.ZOOM)===p.ZOOM){const _=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,w=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,S=this.dollyDragInverted?-1:1;(this._state&p.DOLLY)===p.DOLLY?(this._dollyInternal(S*O*pe,_,w),this._isUserControllingDolly=!0):(this._zoomInternal(S*O*pe,_,w),this._isUserControllingZoom=!0)}if((this._state&p.TOUCH_DOLLY)===p.TOUCH_DOLLY||(this._state&p.TOUCH_ZOOM)===p.TOUCH_ZOOM||(this._state&p.TOUCH_DOLLY_TRUCK)===p.TOUCH_DOLLY_TRUCK||(this._state&p.TOUCH_ZOOM_TRUCK)===p.TOUCH_ZOOM_TRUCK||(this._state&p.TOUCH_DOLLY_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN||(this._state&p.TOUCH_ZOOM_SCREEN_PAN)===p.TOUCH_ZOOM_SCREEN_PAN||(this._state&p.TOUCH_DOLLY_OFFSET)===p.TOUCH_DOLLY_OFFSET||(this._state&p.TOUCH_ZOOM_OFFSET)===p.TOUCH_ZOOM_OFFSET||(this._state&p.TOUCH_DOLLY_ROTATE)===p.TOUCH_DOLLY_ROTATE||(this._state&p.TOUCH_ZOOM_ROTATE)===p.TOUCH_ZOOM_ROTATE){const _=tt.x-this._activePointers[1].clientX,w=tt.y-this._activePointers[1].clientY,S=Math.sqrt(_*_+w*w),D=o.y-S;o.set(0,S);const T=this.dollyToCursor?(a.x-this._elementRect.x)/this._elementRect.width*2-1:0,R=this.dollyToCursor?(a.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&p.TOUCH_DOLLY)===p.TOUCH_DOLLY||(this._state&p.TOUCH_DOLLY_ROTATE)===p.TOUCH_DOLLY_ROTATE||(this._state&p.TOUCH_DOLLY_TRUCK)===p.TOUCH_DOLLY_TRUCK||(this._state&p.TOUCH_DOLLY_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN||(this._state&p.TOUCH_DOLLY_OFFSET)===p.TOUCH_DOLLY_OFFSET?(this._dollyInternal(D*pe,T,R),this._isUserControllingDolly=!0):(this._zoomInternal(D*pe,T,R),this._isUserControllingZoom=!0)}((this._state&p.TRUCK)===p.TRUCK||(this._state&p.TOUCH_TRUCK)===p.TOUCH_TRUCK||(this._state&p.TOUCH_DOLLY_TRUCK)===p.TOUCH_DOLLY_TRUCK||(this._state&p.TOUCH_ZOOM_TRUCK)===p.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(M,O,!1,!1),this._isUserControllingTruck=!0),((this._state&p.SCREEN_PAN)===p.SCREEN_PAN||(this._state&p.TOUCH_SCREEN_PAN)===p.TOUCH_SCREEN_PAN||(this._state&p.TOUCH_DOLLY_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN||(this._state&p.TOUCH_ZOOM_SCREEN_PAN)===p.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(M,O,!1,!0),this._isUserControllingTruck=!0),((this._state&p.OFFSET)===p.OFFSET||(this._state&p.TOUCH_OFFSET)===p.TOUCH_OFFSET||(this._state&p.TOUCH_DOLLY_OFFSET)===p.TOUCH_DOLLY_OFFSET||(this._state&p.TOUCH_ZOOM_OFFSET)===p.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(M,O,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},f=()=>{Ke(this._activePointers,tt),a.copy(tt),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",m),this._domElement.ownerDocument.addEventListener("pointerlockerror",v),this._domElement.ownerDocument.addEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),d())},this.unlockPointer=()=>{var I,b,M;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(I=this._domElement)===null||I===void 0||I.ownerDocument.exitPointerLock(),(b=this._domElement)===null||b===void 0||b.ownerDocument.removeEventListener("pointerlockchange",m),(M=this._domElement)===null||M===void 0||M.ownerDocument.removeEventListener("pointerlockerror",v),this.cancel()};const m=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},v=()=>{this.unlockPointer()};this._addAllEventListeners=I=>{this._domElement=I,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",l),this._domElement.addEventListener("pointercancel",h),this._domElement.addEventListener("wheel",u,{passive:!1}),this._domElement.addEventListener("contextmenu",g)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",l),this._domElement.removeEventListener("pointercancel",h),this._domElement.removeEventListener("wheel",u,{passive:!1}),this._domElement.removeEventListener("contextmenu",g),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("pointerlockchange",m),this._domElement.ownerDocument.removeEventListener("pointerlockerror",v))},this.cancel=()=>{this._state!==p.NONE&&(this._state=p.NONE,this._activePointers.length=0,f())},i&&this.connect(i),this.update(0)}get camera(){return this._camera}set camera(t){this._camera=t,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(t){this._enabled=t,this._domElement&&(t?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(t){this._spherical.radius===t&&this._sphericalEnd.radius===t||(this._spherical.radius=t,this._sphericalEnd.radius=t,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(t){this._spherical.theta===t&&this._sphericalEnd.theta===t||(this._spherical.theta=t,this._sphericalEnd.theta=t,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(t){this._spherical.phi===t&&this._sphericalEnd.phi===t||(this._spherical.phi=t,this._sphericalEnd.phi=t,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(t){this._boundaryEnclosesCamera=t,this._needsUpdate=!0}set interactiveArea(t){this._interactiveArea.width=lt(t.width,0,1),this._interactiveArea.height=lt(t.height,0,1),this._interactiveArea.x=lt(t.x,0,1-this._interactiveArea.width),this._interactiveArea.y=lt(t.y,0,1-this._interactiveArea.height)}addEventListener(t,i){super.addEventListener(t,i)}removeEventListener(t,i){super.removeEventListener(t,i)}rotate(t,i,s=!1){return this.rotateTo(this._sphericalEnd.theta+t,this._sphericalEnd.phi+i,s)}rotateAzimuthTo(t,i=!1){return this.rotateTo(t,this._sphericalEnd.phi,i)}rotatePolarTo(t,i=!1){return this.rotateTo(this._sphericalEnd.theta,t,i)}rotateTo(t,i,s=!1){this._isUserControllingRotate=!1;const a=lt(t,this.minAzimuthAngle,this.maxAzimuthAngle),o=lt(i,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=a,this._sphericalEnd.phi=o,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,s||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const l=!s||U(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&U(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(l)}dolly(t,i=!1){return this.dollyTo(this._sphericalEnd.radius-t,i)}dollyTo(t,i=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Tt.NONE,this._changedDolly=0,this._dollyToNoClamp(lt(t,this.minDistance,this.maxDistance),i)}_dollyToNoClamp(t,i=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const l=this._collisionTest(),r=U(l,this._spherical.radius);if(!(s>t)&&r)return Promise.resolve();this._sphericalEnd.radius=Math.min(t,l)}else this._sphericalEnd.radius=t;this._needsUpdate=!0,i||(this._spherical.radius=this._sphericalEnd.radius);const o=!i||U(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(o)}dollyInFixed(t,i=!1){this._targetEnd.add(this._getCameraDirection(ee).multiplyScalar(t)),i||this._target.copy(this._targetEnd);const s=!i||U(this._target.x,this._targetEnd.x,this.restThreshold)&&U(this._target.y,this._targetEnd.y,this.restThreshold)&&U(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(s)}zoom(t,i=!1){return this.zoomTo(this._zoomEnd+t,i)}zoomTo(t,i=!1){this._isUserControllingZoom=!1,this._zoomEnd=lt(t,this.minZoom,this.maxZoom),this._needsUpdate=!0,i||(this._zoom=this._zoomEnd);const s=!i||U(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(s)}pan(t,i,s=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(t,i,s)}truck(t,i,s=!1){this._camera.updateMatrix(),dt.setFromMatrixColumn(this._camera.matrix,0),ut.setFromMatrixColumn(this._camera.matrix,1),dt.multiplyScalar(t),ut.multiplyScalar(-i);const a=L.copy(dt).add(ut),o=V.copy(this._targetEnd).add(a);return this.moveTo(o.x,o.y,o.z,s)}forward(t,i=!1){L.setFromMatrixColumn(this._camera.matrix,0),L.crossVectors(this._camera.up,L),L.multiplyScalar(t);const s=V.copy(this._targetEnd).add(L);return this.moveTo(s.x,s.y,s.z,i)}elevate(t,i=!1){return L.copy(this._camera.up).multiplyScalar(t),this.moveTo(this._targetEnd.x+L.x,this._targetEnd.y+L.y,this._targetEnd.z+L.z,i)}moveTo(t,i,s,a=!1){this._isUserControllingTruck=!1;const o=L.set(t,i,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,o,this.boundaryFriction),this._needsUpdate=!0,a||this._target.copy(this._targetEnd);const l=!a||U(this._target.x,this._targetEnd.x,this.restThreshold)&&U(this._target.y,this._targetEnd.y,this.restThreshold)&&U(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(l)}lookInDirectionOf(t,i,s,a=!1){const r=L.set(t,i,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(r.x,r.y,r.z,a)}fitToBox(t,i,{cover:s=!1,paddingLeft:a=0,paddingRight:o=0,paddingBottom:l=0,paddingTop:r=0}={}){const h=[],c=t.isBox3?Bt.copy(t):Bt.setFromObject(t);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const u=ts(this._sphericalEnd.theta,$i),g=ts(this._sphericalEnd.phi,$i);h.push(this.rotateTo(u,g,i));const d=L.setFromSpherical(this._sphericalEnd).normalize(),C=os.setFromUnitVectors(d,ti),f=U(Math.abs(d.y),1);f&&C.multiply(ii.setFromAxisAngle(ve,u)),C.multiply(this._yAxisUpSpaceInverse);const m=ns.makeEmpty();V.copy(c.min).applyQuaternion(C),m.expandByPoint(V),V.copy(c.min).setX(c.max.x).applyQuaternion(C),m.expandByPoint(V),V.copy(c.min).setY(c.max.y).applyQuaternion(C),m.expandByPoint(V),V.copy(c.max).setZ(c.min.z).applyQuaternion(C),m.expandByPoint(V),V.copy(c.min).setZ(c.max.z).applyQuaternion(C),m.expandByPoint(V),V.copy(c.max).setY(c.min.y).applyQuaternion(C),m.expandByPoint(V),V.copy(c.max).setX(c.min.x).applyQuaternion(C),m.expandByPoint(V),V.copy(c.max).applyQuaternion(C),m.expandByPoint(V),m.min.x-=a,m.min.y-=l,m.max.x+=o,m.max.y+=r,C.setFromUnitVectors(ti,d),f&&C.premultiply(ii.invert()),C.premultiply(this._yAxisUpSpace);const v=m.getSize(L),I=m.getCenter(V).applyQuaternion(C);if(xt(this._camera)){const b=this.getDistanceToFitBox(v.x,v.y,v.z,s);h.push(this.moveTo(I.x,I.y,I.z,i)),h.push(this.dollyTo(b,i)),h.push(this.setFocalOffset(0,0,0,i))}else if(vt(this._camera)){const b=this._camera,M=b.right-b.left,O=b.top-b.bottom,_=s?Math.max(M/v.x,O/v.y):Math.min(M/v.x,O/v.y);h.push(this.moveTo(I.x,I.y,I.z,i)),h.push(this.zoomTo(_,i)),h.push(this.setFocalOffset(0,0,0,i))}return Promise.all(h)}fitToSphere(t,i){const s=[],o="isObject3D"in t?st.createBoundingSphere(t,ei):ei.copy(t);if(s.push(this.moveTo(o.center.x,o.center.y,o.center.z,i)),xt(this._camera)){const l=this.getDistanceToFitSphere(o.radius);s.push(this.dollyTo(l,i))}else if(vt(this._camera)){const l=this._camera.right-this._camera.left,r=this._camera.top-this._camera.bottom,h=2*o.radius,c=Math.min(l/h,r/h);s.push(this.zoomTo(c,i))}return s.push(this.setFocalOffset(0,0,0,i)),Promise.all(s)}setLookAt(t,i,s,a,o,l,r=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Tt.NONE,this._changedDolly=0;const h=V.set(a,o,l),c=L.set(t,i,s);this._targetEnd.copy(h),this._sphericalEnd.setFromVector3(c.sub(h).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,r||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const u=!r||U(this._target.x,this._targetEnd.x,this.restThreshold)&&U(this._target.y,this._targetEnd.y,this.restThreshold)&&U(this._target.z,this._targetEnd.z,this.restThreshold)&&U(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&U(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&U(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(u)}lerpLookAt(t,i,s,a,o,l,r,h,c,u,g,d,C,f=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Tt.NONE,this._changedDolly=0;const m=L.set(a,o,l),v=V.set(t,i,s);nt.setFromVector3(v.sub(m).applyQuaternion(this._yAxisUpSpace));const I=Dt.set(u,g,d),b=V.set(r,h,c);ie.setFromVector3(b.sub(I).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(m.lerp(I,C));const M=ie.theta-nt.theta,O=ie.phi-nt.phi,_=ie.radius-nt.radius;this._sphericalEnd.set(nt.radius+_*C,nt.phi+O*C,nt.theta+M*C),this.normalizeRotations(),this._needsUpdate=!0,f||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const w=!f||U(this._target.x,this._targetEnd.x,this.restThreshold)&&U(this._target.y,this._targetEnd.y,this.restThreshold)&&U(this._target.z,this._targetEnd.z,this.restThreshold)&&U(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&U(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&U(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(w)}setPosition(t,i,s,a=!1){return this.setLookAt(t,i,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,a)}setTarget(t,i,s,a=!1){const o=this.getPosition(L),l=this.setLookAt(o.x,o.y,o.z,t,i,s,a);return this._sphericalEnd.phi=lt(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),l}setFocalOffset(t,i,s,a=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(t,i,s),this._needsUpdate=!0,a||this._focalOffset.copy(this._focalOffsetEnd);const o=!a||U(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&U(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&U(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(o)}setOrbitPoint(t,i,s){this._camera.updateMatrixWorld(),dt.setFromMatrixColumn(this._camera.matrixWorldInverse,0),ut.setFromMatrixColumn(this._camera.matrixWorldInverse,1),_t.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const a=L.set(t,i,s),o=a.distanceTo(this._camera.position),l=a.sub(this._camera.position);dt.multiplyScalar(l.x),ut.multiplyScalar(l.y),_t.multiplyScalar(l.z),L.copy(dt).add(ut).add(_t),L.z=L.z+o,this.dollyTo(o,!1),this.setFocalOffset(-L.x,L.y,-L.z,!1),this.moveTo(t,i,s,!1)}setBoundary(t){if(!t){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(t),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(t,i,s,a){if(t===null){this._viewport=null;return}this._viewport=this._viewport||new N.Vector4,typeof t=="number"?this._viewport.set(t,i,s,a):this._viewport.copy(t)}getDistanceToFitBox(t,i,s,a=!1){if(Qe(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const o=t/i,l=this._camera.getEffectiveFOV()*Qt,r=this._camera.aspect;return((a?o>r:o<r)?i:t/r)*.5/Math.tan(l*.5)+s*.5}getDistanceToFitSphere(t){if(Qe(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const i=this._camera.getEffectiveFOV()*Qt,s=Math.atan(Math.tan(i*.5)*this._camera.aspect)*2,a=1<this._camera.aspect?i:s;return t/Math.sin(a*.5)}getTarget(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).copy(i?this._targetEnd:this._target)}getPosition(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).setFromSpherical(i?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(i?this._targetEnd:this._target)}getSpherical(t,i=!0){return(t||new N.Spherical).copy(i?this._sphericalEnd:this._spherical)}getFocalOffset(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).copy(i?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%Lt,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=Lt),this._spherical.theta+=Lt*Math.round((this._sphericalEnd.theta-this._spherical.theta)/Lt)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(t=!1){if(!U(this._camera.up.x,this._cameraUp0.x)||!U(this._camera.up.y,this._cameraUp0.y)||!U(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(L);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}const i=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,t),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,t),this.zoomTo(this._zoom0,t)];return Promise.all(i)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,ve),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const t=L.subVectors(this._target,this._camera.position).normalize(),i=V.crossVectors(t,this._camera.up);this._camera.up.crossVectors(i,t).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(L);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}update(t){const i=this._sphericalEnd.theta-this._spherical.theta,s=this._sphericalEnd.phi-this._spherical.phi,a=this._sphericalEnd.radius-this._spherical.radius,o=ss.subVectors(this._targetEnd,this._target),l=as.subVectors(this._focalOffsetEnd,this._focalOffset),r=this._zoomEnd-this._zoom;if(j(i))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const g=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=Ie(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,g,1/0,t),this._needsUpdate=!0}if(j(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const g=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=Ie(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,g,1/0,t),this._needsUpdate=!0}if(j(a))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const g=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=Ie(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,g,this.maxSpeed,t),this._needsUpdate=!0}if(j(o.x)&&j(o.y)&&j(o.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const g=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;es(this._target,this._targetEnd,this._targetVelocity,g,this.maxSpeed,t,this._target),this._needsUpdate=!0}if(j(l.x)&&j(l.y)&&j(l.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const g=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;es(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,g,this.maxSpeed,t,this._focalOffset),this._needsUpdate=!0}if(j(r))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const g=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=Ie(this._zoom,this._zoomEnd,this._zoomVelocity,g,1/0,t)}if(this.dollyToCursor){if(xt(this._camera)&&this._changedDolly!==0){const g=this._spherical.radius-this._lastDistance,d=this._camera,C=this._getCameraDirection(ee),f=L.copy(C).cross(d.up).normalize();f.lengthSq()===0&&(f.x=1);const m=V.crossVectors(f,C),v=this._sphericalEnd.radius*Math.tan(d.getEffectiveFOV()*Qt*.5),b=(this._sphericalEnd.radius-g-this._sphericalEnd.radius)/this._sphericalEnd.radius,M=Dt.copy(this._targetEnd).add(f.multiplyScalar(this._dollyControlCoord.x*v*d.aspect)).add(m.multiplyScalar(this._dollyControlCoord.y*v)),O=L.copy(this._targetEnd).lerp(M,b),_=this._lastDollyDirection===Tt.IN&&this._spherical.radius<=this.minDistance,w=this._lastDollyDirection===Tt.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(_||w)){this._sphericalEnd.radius-=g,this._spherical.radius-=g;const D=V.copy(C).multiplyScalar(-g);O.add(D)}this._boundary.clampPoint(O,O);const S=V.subVectors(O,this._targetEnd);this._targetEnd.copy(O),this._target.add(S),this._changedDolly-=g,j(this._changedDolly)&&(this._changedDolly=0)}else if(vt(this._camera)&&this._changedZoom!==0){const g=this._zoom-this._lastZoom,d=this._camera,C=L.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(d.near+d.far)/(d.near-d.far)).unproject(d),f=V.set(0,0,-1).applyQuaternion(d.quaternion),m=Dt.copy(C).add(f.multiplyScalar(-C.dot(d.up))),I=-(this._zoom-g-this._zoom)/this._zoom,b=this._getCameraDirection(ee),M=this._targetEnd.dot(b),O=L.copy(this._targetEnd).lerp(m,I),_=O.dot(b),w=b.multiplyScalar(_-M);O.sub(w),this._boundary.clampPoint(O,O);const S=V.subVectors(O,this._targetEnd);this._targetEnd.copy(O),this._target.add(S),this._changedZoom-=g,j(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const h=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,h),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!j(this._focalOffset.x)||!j(this._focalOffset.y)||!j(this._focalOffset.z))&&(dt.setFromMatrixColumn(this._camera.matrix,0),ut.setFromMatrixColumn(this._camera.matrix,1),_t.setFromMatrixColumn(this._camera.matrix,2),dt.multiplyScalar(this._focalOffset.x),ut.multiplyScalar(-this._focalOffset.y),_t.multiplyScalar(this._focalOffset.z),L.copy(dt).add(ut).add(_t),this._camera.position.add(L),this._camera.updateMatrixWorld()),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),L.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const u=this._needsUpdate;return u&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):u?(this.dispatchEvent({type:"update"}),j(i,this.restThreshold)&&j(s,this.restThreshold)&&j(a,this.restThreshold)&&j(o.x,this.restThreshold)&&j(o.y,this.restThreshold)&&j(o.z,this.restThreshold)&&j(l.x,this.restThreshold)&&j(l.y,this.restThreshold)&&j(l.z,this.restThreshold)&&j(r,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!u&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=u,this._needsUpdate=!1,u}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:$t(this.maxDistance),minZoom:this.minZoom,maxZoom:$t(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:$t(this.maxPolarAngle),minAzimuthAngle:$t(this.minAzimuthAngle),maxAzimuthAngle:$t(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,target:this._targetEnd.toArray(),position:L.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(t,i=!1){const s=JSON.parse(t);this.enabled=s.enabled,this.minDistance=s.minDistance,this.maxDistance=te(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=te(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=te(s.maxPolarAngle),this.minAzimuthAngle=te(s.minAzimuthAngle),this.maxAzimuthAngle=te(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],i),nt.setFromVector3(L.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(nt.theta,nt.phi,i),this.dollyTo(nt.radius,i),this.zoomTo(s.zoom,i),this.setFocalOffset(s.focalOffset[0],s.focalOffset[1],s.focalOffset[2],i),this._needsUpdate=!0}connect(t){if(this._domElement){console.warn("camera-controls is already connected.");return}t.setAttribute("data-camera-controls-version",Lc),this._addAllEventListeners(t),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(t){return t.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(t){return this._getTargetDirection(t).negate()}_findPointerById(t){return this._activePointers.find(i=>i.pointerId===t)}_findPointerByMouseButton(t){return this._activePointers.find(i=>i.mouseButton===t)}_disposePointer(t){this._activePointers.splice(this._activePointers.indexOf(t),1)}_encloseToBoundary(t,i,s){const a=i.lengthSq();if(a===0)return t;const o=V.copy(i).add(t),r=this._boundary.clampPoint(o,Dt).sub(o),h=r.lengthSq();if(h===0)return t.add(i);if(h===a)return t;if(s===0)return t.add(i).add(r);{const c=1+s*h/i.dot(r);return t.add(V.copy(i).multiplyScalar(c)).add(r.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(xt(this._camera)){const t=this._camera,i=t.near,s=t.getEffectiveFOV()*Qt,a=Math.tan(s*.5)*i,o=a*t.aspect;this._nearPlaneCorners[0].set(-o,-a,0),this._nearPlaneCorners[1].set(o,-a,0),this._nearPlaneCorners[2].set(o,a,0),this._nearPlaneCorners[3].set(-o,a,0)}else if(vt(this._camera)){const t=this._camera,i=1/t.zoom,s=t.left*i,a=t.right*i,o=t.top*i,l=t.bottom*i;this._nearPlaneCorners[0].set(s,o,0),this._nearPlaneCorners[1].set(a,o,0),this._nearPlaneCorners[2].set(a,l,0),this._nearPlaneCorners[3].set(s,l,0)}}_collisionTest(){let t=1/0;if(!(this.colliderMeshes.length>=1)||Qe(this._camera,"_collisionTest"))return t;const s=this._getTargetDirection(ee);si.lookAt(is,s,this._camera.up);for(let a=0;a<4;a++){const o=V.copy(this._nearPlaneCorners[a]);o.applyMatrix4(si);const l=Dt.addVectors(this._target,o);ye.set(l,s),ye.far=this._spherical.radius+1;const r=ye.intersectObjects(this.colliderMeshes);r.length!==0&&r[0].distance<t&&(t=r[0].distance)}return t}_getClientRect(t){if(!this._domElement)return;const i=this._domElement.getBoundingClientRect();return t.x=i.left,t.y=i.top,this._viewport?(t.x+=this._viewport.x,t.y+=i.height-this._viewport.w-this._viewport.y,t.width=this._viewport.z,t.height=this._viewport.w):(t.width=i.width,t.height=i.height),t}_createOnRestPromise(t){return t?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(i=>{const s=()=>{this.removeEventListener("rest",s),i()};this.addEventListener("rest",s)}))}_addAllEventListeners(t){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(t){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(t){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(t,i=new N.Sphere){const s=i,a=s.center;Bt.makeEmpty(),t.traverseVisible(l=>{l.isMesh&&Bt.expandByObject(l)}),Bt.getCenter(a);let o=0;return t.traverseVisible(l=>{if(!l.isMesh)return;const r=l;if(!r.geometry)return;const h=r.geometry.clone();h.applyMatrix4(r.matrixWorld);const u=h.attributes.position;for(let g=0,d=u.count;g<d;g++)L.fromBufferAttribute(u,g),o=Math.max(o,a.distanceToSquared(L))}),s.radius=Math.sqrt(o),s}}class Be{constructor(t,i,s){y(this,"camera");y(this,"focalOffset");y(this,"target");this.camera=t,this.target=i,this.focalOffset=s}}class Bc extends Sa{constructor(i,s,a){super(i,a,"Camera Controls");y(this,"camera");y(this,"_boundOnAfterCameraUpdate");y(this,"_cameraPosition");this.camera=s,this._cameraPosition=new Be(new A.Vector3,new A.Vector3,new A.Vector3),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this.instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);const o=this.gui.addFolder("Position");o.close(),this._controllers.push(o.add(this._cameraPosition.camera,"x")),this._controllers.push(o.add(this._cameraPosition.camera,"y")),this._controllers.push(o.add(this._cameraPosition.camera,"z"));const l=this.gui.addFolder("Target");l.close(),this._controllers.push(l.add(this._cameraPosition.target,"x")),this._controllers.push(l.add(this._cameraPosition.target,"y")),this._controllers.push(l.add(this._cameraPosition.target,"z"));const r=this.gui.addFolder("Focal offset");r.close(),this._controllers.push(r.add(this._cameraPosition.focalOffset,"x")),this._controllers.push(r.add(this._cameraPosition.focalOffset,"y")),this._controllers.push(r.add(this._cameraPosition.focalOffset,"z"))}dispose(){this.instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),super.dispose()}onAfterCameraUpdate(){this.camera.getCameraPosition(this._cameraPosition)}}st.install({THREE:{Box3:A.Box3,MathUtils:A.MathUtils,Matrix4:A.Matrix4,Quaternion:A.Quaternion,Raycaster:A.Raycaster,Sphere:A.Sphere,Spherical:A.Spherical,Vector2:A.Vector2,Vector3:A.Vector3,Vector4:A.Vector4}});const Vc=new A.Vector3;class Rc extends A.EventDispatcher{constructor(i,s,a){super();y(this,"_boundOnAfterCameraUpdate");y(this,"_boundOnBeforeCameraUpdate");y(this,"_boundOrbitControlsOnContextMenu");y(this,"_boundOrbitControlsOnKey");y(this,"_boundOrbitControlsOnMouseUp");y(this,"_boundOrbitControlsOnWheel");y(this,"_boundPositionOnMapOnClick");y(this,"_boundPositionOnMapOnContextMenu");y(this,"_boundPositionOnMapOnMouseMove");y(this,"_cameraControlsInspector");y(this,"_clock");y(this,"_cursorManager");y(this,"_giro3dStore",A.useGiro3dStore());y(this,"_instance");y(this,"_orbitControls");y(this,"_picker");y(this,"_pickObjectsAt");y(this,"_store",A.useCameraStore());this._instance=i,this._picker=s,this._cursorManager=a,this._orbitControls=new st(this._instance.view.camera,this._instance.domElement),this._cameraControlsInspector=null,this.initializeOrbitControls(),this._pickObjectsAt=l=>{var r;return((r=this._picker.getFirstFeatureAt(this._instance,l,1))==null?void 0:r.at(0))??null},this._clock=new A.Clock,this._boundOnBeforeCameraUpdate=this.onBeforeCameraUpdate.bind(this),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu=null,this._store.$onAction(({args:l,name:r})=>{switch(r){case"lookTopDownAt":this.lookTopDownAt(l[0]);break;case"setCameraPosition":this.setCamera(l[0]);break;case"setNavigationMode":this.setNavigationMode(l[0]);break}});const o=this._giro3dStore.getInspector();o!=null&&this.initializeInspector(o),this._giro3dStore.$onAction(({after:l,args:r,name:h})=>{l(()=>{switch(h){case"setInspector":this.initializeInspector(r[0]);break}})})}get enabled(){return this._orbitControls.enabled}set enabled(i){this._orbitControls.enabled=i}dispose(){this._instance.removeEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._disablePositionOnMap(),this.disposeOrbitControls()}executeInteraction(i){this._orbitControls.update(this._clock.getDelta());const s=i();return this._orbitControls.update(this._clock.getDelta()),this._orbitControls.dispatchEvent({type:"update"}),s}getCameraPosition(i){const s=this._orbitControls,a=i??new Be(new A.Vector3,new A.Vector3,new A.Vector3);return s.getPosition(a.camera),s.getTarget(a.target),s.getFocalOffset(a.focalOffset),a}goToBox(i,s=!0,a={paddingBottom:10,paddingLeft:10,paddingRight:10,paddingTop:10}){const o=this.getBox(i);return this.executeInteraction(()=>(this._orbitControls.setFocalOffset(0,0,0),this._orbitControls.fitToBox(o,s,a)))}async lookAt(i,s,a=!1){await this.executeInteraction(async()=>(this._orbitControls.setFocalOffset(0,0,0,!1),this._orbitControls.setLookAt(i.x,i.y,i.z,s.x,s.y,s.z,a))),this._orbitControls.setOrbitPoint(s.x,s.y,s.z)}lookTopDownAt(i,s=!0){const a=new A.Vector3,o=new A.Vector3,l=new A.Vector3(0,0,1),r=this.getBox(i);r.min.z=r.max.z,r.getCenter(a),r.getSize(o);const h=this._orbitControls.getDistanceToFitBox(o.x,o.y,0),c=l.multiplyScalar(h).add(a);return c.x+=o.x/10,c.y-=o.y/10,this.lookAt(c,a,s)}setCamera(i){this.executeInteraction(async()=>(this._orbitControls.setOrbitPoint(0,0,0),this._orbitControls.setLookAt(i.camera.x,i.camera.y,i.camera.z,i.target.x,i.target.y,i.target.z,!1),this._orbitControls.setFocalOffset(i.focalOffset.z,i.focalOffset.y,i.focalOffset.z,!1),this._orbitControls.update(0),Promise.resolve()))}setInitialPosition(i,s=4e3){const a=new ce(i.crs,i.west,i.south,s).toVector3(),o=i.centerAsVector3();this.lookAt(a,o,!1)}getBox(i){let s=new A.Box3;if(i.isBox3)s=i.clone();else if(i.isEntity3D){const a=i,o=a.getBoundingBox();o&&!o.isEmpty()?s=o.clone():"extent"in a&&(s=a.extent.toBox3(0,200))}else if(i.isObject3D)s.setFromObject(i);else throw new Error("obj should be instanceof Box3, Object3D or Entity3D");if(s.isEmpty())throw new Error("Could not find bounding box of object");return s.min.z=Math.max(s.min.z,0),s.max.z=Math.min(s.max.z,2e3),s}_disablePositionOnMap(){(this._boundPositionOnMapOnClick||this._boundPositionOnMapOnMouseMove||this._boundPositionOnMapOnContextMenu)&&(this._boundPositionOnMapOnClick&&this._instance.domElement.removeEventListener("click",this._boundPositionOnMapOnClick),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove&&this._instance.domElement.removeEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu&&this._instance.domElement.removeEventListener("contextmenu",this._boundPositionOnMapOnContextMenu),this._boundPositionOnMapOnContextMenu=null,this._cursorManager.setCursor(null),this._instance.notifyChange())}_enablePositionOnMap(){this._cursorManager.setCursor("street"),this._boundPositionOnMapOnClick=this.onPositionOnMapClick.bind(this),this._boundPositionOnMapOnMouseMove=this.onPositionOnMapMouseMove.bind(this),this._boundPositionOnMapOnContextMenu=this.onPositionOnMapContextMenu.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._instance.domElement.addEventListener("click",this._boundPositionOnMapOnClick),this._instance.domElement.addEventListener("contextmenu",this._boundPositionOnMapOnContextMenu)}disposeOrbitControls(){this._instance.domElement.removeEventListener("keydown",this._boundOrbitControlsOnKey),this._instance.domElement.removeEventListener("wheel",this._boundOrbitControlsOnWheel),this._instance.domElement.removeEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.removeEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._orbitControls.disconnect()}initializeInspector(i){this._cameraControlsInspector&&this._cameraControlsInspector.dispose(),i&&(this._cameraControlsInspector=new Bc(i.gui,this,this._instance),i.addPanel(this._cameraControlsInspector))}initializeOrbitControls(){this._orbitControls.infinityDolly=!0,this.setNavigationMode(this._store.getNavigationMode()),this._boundOrbitControlsOnContextMenu=this.orbitControlsOnContextMenu.bind(this),this._boundOrbitControlsOnMouseUp=this.orbitControlsOnMouseUp.bind(this),this._instance.domElement.addEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.addEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._boundOrbitControlsOnWheel=this.orbitControlsOnWheel.bind(this),this._instance.domElement.addEventListener("wheel",this._boundOrbitControlsOnWheel),this._orbitControls.addEventListener("update",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>{(this._orbitControls.active||this._orbitControls.currentAction!==0)&&(this.dispatchEvent({type:"interaction-start"}),this._store.setIsUserInteracting(!0))}),this._orbitControls.addEventListener("controlend",()=>setTimeout(()=>{this._store.setIsUserInteracting(!1),this.dispatchEvent({type:"interaction-end"})})),this._boundOrbitControlsOnKey=this.orbitControlsOnKey.bind(this),this._instance.domElement.addEventListener("keydown",this._boundOrbitControlsOnKey)}onAfterCameraUpdate(){this._store.setCurrentPosition(this.getCameraPosition(),this._instance.view.camera.position)}onBeforeCameraUpdate(){const i=this._clock.getDelta();this._orbitControls.update(i)&&this._instance.notifyChange(this._instance.view.camera)}onPositionOnMapClick(i){const s=this._picker.getMapAt(this._instance,i);if(s){this._disablePositionOnMap();const a=new A.Vector3;this._instance.view.camera.getWorldDirection(a),a.normalize().setLength(3);const o=s.point.clone();o.z+=1.7;const l=o.clone();l.add(a),l.z=o.z,this.lookAt(o,l,!0).finally(()=>this._store.setNavigationMode("first-person"))}}onPositionOnMapContextMenu(i){this._disablePositionOnMap(),this._store.setNavigationMode("orbit"),i.preventDefault()}onPositionOnMapMouseMove(i){const s=this._picker.getMapAt(this._instance,i);this._instance.domElement.style.cursor=s?"none":"auto",this._cursorManager.setCursor(s!=null?"street":null),s&&this._cursorManager.setCursorLocation(s.point),this._instance.notifyChange()}orbitControlsOnContextMenu(i){if(this._store.getNavigationMode()!=="orbit")return;this._cursorManager.setCursor("orbit");const s=this._pickObjectsAt(i);if(s)this._cursorManager.setCursorLocation(s.point),this._orbitControls.setOrbitPoint(s.point.x,s.point.y,s.point.z);else{const a=this._orbitControls.getTarget(Vc);this._cursorManager.setCursorLocation(a)}}orbitControlsOnKey(i){const s=this._store.getNavigationMode();if(s==="position-on-map"){i.code==="Escape"&&this._store.setNavigationMode("orbit");return}if(s!=="orbit"&&s!=="first-person")return;const a={ARROW_BOTTOM:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",KEY_DOWN:"KeyS",KEY_LEFT:"KeyA",KEY_RIGHT:"KeyD",KEY_UP:"KeyW"};let o=0,l=0,r=0,h=0,c=i.ctrlKey||i.metaKey||i.shiftKey?200:20;switch(s==="first-person"&&(c/=10),i.code){case a.ARROW_BOTTOM:s==="first-person"?l=-1:o=-1;break;case a.ARROW_LEFT:case a.KEY_LEFT:r=-1;break;case a.ARROW_RIGHT:case a.KEY_RIGHT:r=1;break;case a.ARROW_UP:s==="first-person"?l=1:o=1;break;case a.KEY_DOWN:h=1;break;case a.KEY_UP:h=-1;break}o&&this.executeInteraction(()=>this._orbitControls.forward(o*this._orbitControls.truckSpeed*c,!0)),l&&this.executeInteraction(()=>this._orbitControls.dollyInFixed(l*this._orbitControls.truckSpeed*c,!0)),r&&this.executeInteraction(()=>this._orbitControls.truck(r*this._orbitControls.truckSpeed*c,0,!0)),h&&this.executeInteraction(()=>this._orbitControls.truck(0,h*this._orbitControls.truckSpeed*c,!0))}orbitControlsOnMouseUp(){this._store.getNavigationMode()==="orbit"&&(this._cursorManager.setCursor(null),this._instance.notifyChange())}orbitControlsOnWheel(){this._orbitControls.dispatchEvent({type:"controlstart"}),setTimeout(()=>this._orbitControls.dispatchEvent({type:"controlend"}),0)}setNavigationMode(i){switch(this._disablePositionOnMap(),i){case"disabled":this._orbitControls.enabled=!1;break;case"first-person":{this._orbitControls.dollyToCursor=!1,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=2,this._orbitControls.dollySpeed=20,this._orbitControls.azimuthRotateSpeed=.3,this._orbitControls.polarRotateSpeed=.3,this._orbitControls.mouseButtons.left=st.ACTION.ROTATE,this._orbitControls.mouseButtons.right=st.ACTION.TRUCK,this._orbitControls.mouseButtons.wheel=st.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=st.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new A.Vector3,a=this._instance.view.camera.position.clone(),o=new A.Vector3;this._instance.view.camera.getWorldDirection(s),s.normalize().setLength(3),o.copy(a).add(s),this.lookAt(a,o,!1)}break;case"orbit":{this._orbitControls.dollyToCursor=!0,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=1/0,this._orbitControls.dollySpeed=1,this._orbitControls.azimuthRotateSpeed=1,this._orbitControls.polarRotateSpeed=1,this._orbitControls.mouseButtons.left=st.ACTION.TRUCK,this._orbitControls.mouseButtons.right=st.ACTION.ROTATE,this._orbitControls.mouseButtons.wheel=st.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=st.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new A.Vector3,a=this._instance.view.camera.position.clone();this._instance.view.camera.getWorldDirection(s);const o=new A.Raycaster;o.camera=this._instance.view.camera,o.set(a,s);const l=o.intersectObject(this._instance.scene).at(0);l&&this.lookAt(a,l.point,!1)}break;case"position-on-map":this._orbitControls.enabled=!1,this._enablePositionOnMap();break;default:return i}this._instance.domElement.focus()}}const Js=e=>A.isObject(e)&&(e.type==="colorLayer"||e.type==="maskLayer"||e.type==="elevationLayer"),Uc=e=>A.isObject(e)&&!Js(e);class Fc{constructor(t,i){y(this,"_axisGrids",new Map);y(this,"_entities",new Map);y(this,"_instance");y(this,"_layerManager");y(this,"_masks",new Map);y(this,"_notifications",Pt());y(this,"_overlays",new Map);y(this,"_store",A.useDatasetStore());this._instance=t,this._layerManager=i,this._store.$onAction(({after:s,args:a,name:o})=>{s(()=>{switch(o){case"importFromFile":this.importFromFile(a[0]);break;case"remove":this.deleteDataset(a[0]);break;case"setVisible":this.onVisibilityChanged(a[0],a[1]);break;case"toggleGrid":this.onToggleGrid(a[0]);break;case"toggleMask":this.onToggleMask(a[0]);break}})});for(const s of this._store.getDatasets())s.visible&&this.preloadDataset(s)}dispose(){}async createGrid(t){const i=this._store.getBoundingBox(t);if(i==null||i.isEmpty())return;const s=new Na({style:{color:new A.Color("orange"),fontSize:12,numberFormat:Intl.NumberFormat("fr")},ticks:{x:50,y:50,z:50},volume:{ceiling:i.max.z+10,extent:gi.fromBox3(this._instance.referenceCrs,i).withMargin(20,20),floor:i.min.z-10}});s.name=`AxisGrid-${t.uuid}`,await this._instance.add(s),this._axisGrids.set(t.uuid,s)}async createMask(t){const i=this._store.getBoundingBox(t);if(i==null||i.isEmpty())return;i.expandByVector(new A.Vector3(-5,-5,0));const s=new Ta({geometry:new La([[[i.min.x,i.min.y],[i.min.x,i.max.y],[i.max.x,i.max.y],[i.max.x,i.min.y],[i.min.x,i.min.y]]]),name:"Mask polygon"}),a=new wi({name:`mask-${t.uuid}`,source:new Pa({data:[s],style:new xi.Style({fill:new xi.Fill({color:"white"})})})});a.maskMode=wi.MaskMode.Inverted;const o=this._instance.getObjects(l=>Oi.isMap(l));for(const l of o)await l.addLayer(a),this._instance.notifyChange(l);this._masks.set(t.uuid,a)}deleteDataset(t){this.deleteGrid(t),this.deleteMask(t);const i=this._entities.get(t.uuid);i&&(this._instance.remove(i),this._instance.notifyChange());const s=this._overlays.get(t.uuid);s&&this._layerManager.removeBasemapLayer(s),bt.dispatchEvent({type:"dataset-removed",value:t})}deleteGrid(t){const i=this._axisGrids.get(t.uuid);i&&this._instance.remove(i),this._axisGrids.delete(t.uuid)}deleteMask(t){const i=this._masks.get(t.uuid);i&&this._instance.getObjects(a=>Oi.isMap(a)).forEach(a=>{a.removeLayer(i),this._instance.notifyChange(a)}),this._masks.delete(t.uuid)}async importFromFile(t){let i;const s=t instanceof File?t.name:t;try{this._notifications.push(new X(s,"Importing file..."));const a=await vc.importFile(t,A.getConfig());i=this._store.add(a),this._notifications.push(new X(i.name,"Import done, parsing data...","success"))}catch(a){console.error(a),this._notifications.push(new X(s,a.message,"error"));return}try{i.isPreloading=!0,await this.preloadDataset(i),this._notifications.push(new X(i.name,"Import successful.","success"))}catch{}bt.dispatchEvent({type:"dataset-added",value:i})}onDatasetPreloaded(t,i){t.isPreloaded=!0,t.isPreloading=!1,t.onObjectPreloaded&&t.onObjectPreloaded(t,i),this._store.attachEntity(t,i)}onDatasetPreloadedAsLayer(t,i){t.isPreloaded=!0,t.isPreloading=!1,this._store.attachLayer(t,i)}async onToggleGrid(t){this._axisGrids.has(t.uuid)?this.deleteGrid(t):await this.createGrid(t)}async onToggleMask(t){this._masks.has(t.uuid)?this.deleteMask(t):await this.createMask(t)}async onVisibilityChanged(t,i){try{t.visible=i,!t.isPreloaded&&i&&await this.preloadDataset(t),await this.updateDataset(t),A.Datagroup.isGroup(t)&&t.children.forEach(s=>void this.onVisibilityChanged(s,i))}catch{t.visible=!1}bt.dispatchEvent({type:"dataset-visibility-changed",value:t})}async preloadDataset(t){if(t.isPreloaded)return Promise.resolve(t);if(A.Datagroup.isGroup(t))return t.isPreloaded=!0,Promise.resolve(t);t.isPreloading=!0;try{if(Js(t)){const i=await A.LayerBuilder.getDatasetLayer(this._instance,t);i.visible=t.visible,this._overlays.set(t.uuid,i),await this._layerManager.addDatasetLayer(i),this.onDatasetPreloadedAsLayer(t,i)}else if(Uc(t)){const i=await uc.getEntity(this._instance,t);i.visible=t.visible,this._entities.set(t.uuid,i),await this._instance.add(i),this.onDatasetPreloaded(t,i)}else throw new Error("Dataset is neither an overlay or 3d mesh")}catch(i){throw console.error("Could not load dataset",t,i),t.isPreloading=!1,this._notifications.push(new X(t.name,`Could not load dataset : ${i.message}`,"error")),i}return t}async updateDataset(t){const i=this._entities.get(t.uuid);i&&(i.visible=t.visible,t.visible&&"isMaskingBasemap"in t.config&&t.config.isMaskingBasemap===!0?await this.createMask(t):!t.visible&&this._masks.has(t.uuid)&&this.deleteMask(t),this._instance.notifyChange(i));const s=this._overlays.get(t.uuid);s&&(s.visible=t.visible,this._layerManager.notify(s))}}class zc{constructor(t){y(this,"_hoverMeasurement");y(this,"_picker");y(this,"_raycaster");this._picker=t,this._raycaster=new A.Raycaster,this._hoverMeasurement=null}clean(){this._hoverMeasurement&&(this._hoverMeasurement.instance.remove(this._hoverMeasurement),this._hoverMeasurement=null)}dispose(){this.clean()}getLastMeasurement(){var t;return(t=this._hoverMeasurement)==null?void 0:t.clone()}measure(t,i){var a;const s=(a=this._picker.getFirstFeatureAt(t,i,0,o=>!ft.isShape(o)))==null?void 0:a.at(0);if(s&&s.normal){const o=s.normal.clone();o.transformDirection(s.object.matrixWorld),o.normalize(),this._raycaster.camera=t.view.camera,this._raycaster.set(s.point,o);const l=this._raycaster.intersectObject(t.scene,!0).filter(r=>r.distance>1e-5&&r.object.userData.parentEntity!==this._hoverMeasurement).at(0);l&&(this._hoverMeasurement||(this._hoverMeasurement=new A.Measure3D,t.add(this._hoverMeasurement)),this._hoverMeasurement.visible=!0,this._hoverMeasurement.setPoints([s.point,l.point]),t.notifyChange(this._hoverMeasurement))}}}const Mi=wt.defineStore("measurement",()=>{const e=n.reactive([]),t=n.ref("laser"),i=n.computed(()=>e.length),s=n.ref(!1);function a(){return s.value}function o(v){s.value=v}function l(){return t.value}function r(v){t.value=v}function h(){return e}function c(v){e.splice(e.indexOf(v),1)}function u(v){e.push(v)}function g(v){return e.some(I=>I.title===v)}function d(v){}function C(v){}function f(){}function m(){}return{add:u,count:i,end:m,getMeasurementMode:l,getMeasures:h,hasMeasure:g,importMeasureFile:d,importMeasureFiles:C,isUserMeasuring:a,remove:c,setIsUserMeasuring:o,setMeasurementMode:r,start:f}});class Xs extends A.EventDispatcher{constructor(i,s,a={}){super();y(this,"properties");y(this,"title");y(this,"uuid");y(this,"_object");y(this,"_visible");this.title=i,this._visible=!0,this._object=s,this.properties=a,this.uuid=A.MathUtils.generateUUID()}get object(){return this._object}set object(i){this._object=i}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}static toCollection(i){return{features:i.map(a=>a.toGeoJSON()),type:"FeatureCollection",id:`${A.Download.getBaseUrl()}#${A.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:A.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D measures",updated:new Date().toISOString()}}}toGeoJSON(){return{geometry:{coordinates:[this.object.from.toArray(),this.object.to.toArray()],type:"LineString"},id:`${A.Download.getBaseUrl()}#${this.uuid}`,properties:{...this.properties,title:this.title,updated:new Date().toISOString()},type:"Feature"}}}function jc(e){return window.prompt("Measure name",e)}class Gc{constructor(t,i,s){y(this,"_boundMeasure");y(this,"_boundOnEscape");y(this,"_boundPause");y(this,"_boundRestart");y(this,"_boundSaveMeasure");y(this,"_camera");y(this,"_instance");y(this,"_measureTool");y(this,"_notificationStore",Pt());y(this,"_paused",!1);y(this,"_store",Mi());this._instance=t,this._measureTool=new zc(s),this._camera=i,this._boundPause=()=>{this._paused=!0},this._boundRestart=()=>{this._paused=!1},this._camera.addEventListener("interaction-start",this._boundPause),this._camera.addEventListener("interaction-end",this._boundRestart),this._boundOnEscape=this.onEscape.bind(this),document.addEventListener("keydown",this._boundOnEscape),this._store.$onAction(({after:a,args:o,name:l})=>{a(()=>{switch(l){case"end":this.stopMeasuring();break;case"importMeasureFile":this.importMeasureFile(o[0]);break;case"importMeasureFiles":this.importMeasureFiles(o[0]);break;case"remove":this.deleteMeasure(o[0]);break;case"start":this.startMeasuring();break}})}),this._boundMeasure=this.measure.bind(this),this._boundSaveMeasure=this.saveMeasure.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundMeasure),this._instance.domElement.addEventListener("click",this._boundSaveMeasure)}dispose(){this._instance.domElement.removeEventListener("mousemove",this._boundMeasure),this._instance.domElement.removeEventListener("click",this._boundSaveMeasure),this._camera.removeEventListener("interaction-start",this._boundPause),this._camera.removeEventListener("interaction-end",this._boundRestart),document.removeEventListener("keydown",this._boundOnEscape),this._measureTool.dispose()}startMeasuring(){this._store.setIsUserMeasuring(!0)}stopMeasuring(){this._store.setIsUserMeasuring(!1),this._measureTool.clean(),this._instance.notifyChange()}updateMeasure(t){t.object.visible=t.visible,t.object.traverse(i=>i.visible=t.visible),this._instance.notifyChange()}deleteMeasure(t){this._instance.remove(t.object),this._instance.notifyChange()}async importBlob(t,i){const s=await t.text(),a=JSON.parse(s),o=a.type==="FeatureCollection"?a.features:[a];let l=0,r=0;for(const h of o)await this.importMeasure(h,i)?l++:r++;return{nbImported:l,nbSkipped:r}}async importMeasure(t,i){var l;if(t.geometry.type!=="LineString")throw new Error(`Cannot import geometry type ${t.geometry.type}`);if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=A.MathUtils.generateUUID()),i.has(t.properties.title))return!1;const s=new A.Vector3(...t.geometry.coordinates[0]),a=new A.Vector3(...t.geometry.coordinates[1]),o=new A.Measure3D;return o.setPoints([s,a]),await this.pushNewMeasure((l=t.properties)==null?void 0:l.title,o,t.properties),!0}async importMeasureFile(t){const i=new Set(this._store.getMeasures().map(s=>s.title));try{const{nbImported:s,nbSkipped:a}=await this.importBlob(t,i);this._notificationStore.push(new X("Measures",`${s} measures imported (${a} skipped)`,"success"))}catch{}}async importMeasureFiles(t){const i=[];let s=0,a=0;const o=[],l=new Set(this._store.getMeasures().map(r=>r.title));for(const r of t)i.push(this.importBlob(r,l).then(({nbImported:h,nbSkipped:c})=>{s+=h,a+=c}).catch(h=>{o.push(h.message)}));await Promise.allSettled(i),o.length>0?this._notificationStore.push(new X("Measures",`${s} measures imported (${a} skipped); ${o.length} errors: ${o}`,"warning")):this._notificationStore.push(new X("Measures",`${s} measures imported (${a} skipped)`,"success"))}measure(t){!this._paused&&this._store.isUserMeasuring()&&this._measureTool.measure(this._instance,t)}onEscape(t){t.code==="Escape"&&this._store.isUserMeasuring()&&this.stopMeasuring()}async pushNewMeasure(t,i,s={}){await this._instance.add(i);const a=new Xs(t,i,s);i.userData.measure=a,a.addEventListener("visible",()=>this.updateMeasure(a)),this._store.add(a),this._instance.notifyChange(i)}saveMeasure(){if(!this._paused&&this._store.isUserMeasuring()){const t=this._measureTool.getLastMeasurement();if(t&&!Number.isNaN(t.length)){let i="New measurement";if(this._store.hasMeasure(i)){for(let a=1;a<1e3&&(i=`New measurement (${a})`,!!this._store.hasMeasure(i));a+=1);this._store.hasMeasure(i)&&(i="Achieved unlocked: 1000 measurements with default name")}const s=jc(i);s!=null&&this.pushNewMeasure(s,t)}}}}function ai(e,t){const i=document.createElement("div");i.className="scene-cursor",i.id=t;const s=document.createElement("i");return s.className=`${e} text-dark shadow`,i.append(s),new Gs(i)}class Hc{constructor(t){y(this,"_currentCursor",null);y(this,"_instance");y(this,"_pickingCursors",{location:ai("fg-location","cursor-location"),orbit:ai("bi bi-mouse2-fill","cursor-orbit"),street:ai("fg-position-man","cursor-street")});this._instance=t}setCursor(t){if(t==null)this._instance.domElement.style.cursor="auto",this.detachCurrentCursor(),this._currentCursor=null;else{this._instance.domElement.style.cursor="none";const i=this._pickingCursors[t];i!==this._currentCursor&&(this.detachCurrentCursor(),this._currentCursor=i,this._instance.add(this._currentCursor).catch(console.error))}}setCursorLocation(t){this._currentCursor!=null&&(this._currentCursor.position.copy(t),this._currentCursor.updateMatrixWorld(!0),this._instance.notifyChange())}detachCurrentCursor(){var t,i;(i=(t=this._currentCursor)==null?void 0:t.parent)==null||i.remove(this._currentCursor)}}class Zc extends A.EventDispatcher{constructor(i){super();y(this,"ambientLight");y(this,"annotationManager");y(this,"camera");y(this,"datasetManager");y(this,"dirLight");y(this,"highlighter");y(this,"layerManager");y(this,"mainInstance");y(this,"measurementManager");y(this,"picker");y(this,"sceneCursorManager");y(this,"_boundOnFrameEnd");y(this,"_store",A.useGiro3dStore());this.mainInstance=i,this.picker=new A.Picker,this.sceneCursorManager=new Hc(i),this.camera=new Rc(this.mainInstance,this.picker,this.sceneCursorManager);const s=this._store.getDefaultCameraPosition(),a=this._store.getDefaultCameraLookAt();this.camera.lookAt(s.toVector3(),a.toVector3()),this.layerManager=new A.LayerManager(this.mainInstance),this.datasetManager=new Fc(this.mainInstance,this.layerManager),this.annotationManager=new Pc(this.mainInstance,this.camera,this.picker),this.highlighter=new yc,this.picker=new A.Picker,this.measurementManager=new Gc(this.mainInstance,this.camera,this.picker),this._boundOnFrameEnd=this.onFrameEnd.bind(this),this.mainInstance.addEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.renderingOptions.enableEDL=!0,this.mainInstance.renderingOptions.enableInpainting=!1,this.mainInstance.renderingOptions.enablePointCloudOcclusion=!1;const o=16777215;this.ambientLight=new A.AmbientLight(o,.6),this.mainInstance.scene.add(this.ambientLight),this.dirLight=new A.DirectionalLight(o,2),this.dirLight.position.set(a.x-1e4,a.y-1e4,1e4),this.dirLight.target.position.set(a.x,a.y,0),this.mainInstance.scene.add(this.dirLight),this.mainInstance.scene.add(this.dirLight.target),this.dirLight.updateMatrixWorld(),this.mainInstance.scene.updateMatrixWorld(),this.mainInstance.notifyChange()}dispose(){this.mainInstance.removeEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.scene.remove(this.dirLight.target),this.mainInstance.scene.remove(this.dirLight),this.mainInstance.scene.remove(this.ambientLight),this.measurementManager.dispose(),this.highlighter.dispose(),this.annotationManager.dispose(),this.layerManager.dispose(),this.camera.dispose()}getBoundingBox(){const i=new A.Box3,s=new A.Box3;return this.mainInstance.scene.traverse(a=>{s.setFromObject(a),i.union(s)}),i}getObjects3d(){const i=[];return this.mainInstance.scene.traverse(s=>{i.push(s)}),i}onFrameEnd(){const i=this.mainInstance.view.camera;i.near=2,this.dispatchEvent({type:"update"}),bt.dispatchEvent({type:"updated"})}}class Wc{constructor(t){y(this,"_cameraController");y(this,"_instance");y(this,"_sceneCursorManager");this._cameraController=t.camera,this._instance=t.instance,this._sceneCursorManager=t.sceneCursorManager}getBoundingBox(){const t=this._instance.getEntities(),i=new A.Box3().makeEmpty();for(const s of t)if(ui.isEntity3D(s)){const a=s.getBoundingBox();a!=null&&i.union(a)}return i}getCameraController(){return this._cameraController}getInstance(){return this._instance}getSceneCursorManager(){return this._sceneCursorManager}}const qc={class:"toast-container"},Yc=["v-if"],Jc={class:"me-auto mx-2"},Xc=["innerHTML"],Kc=n.defineComponent({__name:"AlertToast",setup(e){const t=n.ref(null),i=n.ref(X.empty());function s(r){i.value=r,Ra.Toast.getOrCreateInstance(t.value).show()}Pt().$onAction(({args:r,name:h})=>{switch(h){case"push":s(r[0]);break}});function o(){if(i.value==null)return"text-bg-success";switch(i.value.level){case"error":return"bi-exclamation-circle-fill";case"info":return"bi-check-circle-fill";case"success":return"bi-check-lg";case"warning":return"bi-exclamation-triangle-fill";default:return"text-bg-success"}}function l(){if(i.value==null)return"text-bg-success";switch(i.value.level){case"error":return"text-bg-danger";case"info":return"text-bg-secondary";case"success":return"text-bg-success";case"warning":return"text-bg-warning";default:return"text-bg-success"}}return(r,h)=>(n.openBlock(),n.createElementBlock("div",qc,[n.createElementVNode("div",{ref_key:"alertToast",ref:t,class:"toast",role:"alert","aria-live":"assertive","aria-atomic":"true"},[n.createElementVNode("div",{class:n.normalizeClass(["toast-header",l()])},[n.createElementVNode("i",{"v-if":i.value.level==="info",class:n.normalizeClass(["bi",o()])},null,10,Yc),n.createElementVNode("strong",Jc,n.toDisplayString(i.value.title),1),h[0]||(h[0]=n.createElementVNode("button",{type:"button",class:"btn-close","data-bs-dismiss":"toast","aria-label":"Close"},null,-1))],2),n.createElementVNode("div",{class:"toast-body",innerHTML:i.value.text},null,8,Xc)],512)]))}}),Qc=A._export_sfc(Kc,[["__scopeId","data-v-002327a6"]]),$c=n.defineComponent({__name:"ColorFragment",props:{color:{}},setup(e){n.useCssVars(s=>({"8f755d56":i}));const i=`#${e.color.getHexString()}`;return(s,a)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("span",{class:"color"},[n.createElementVNode("span",{class:"d-none"},n.toDisplayString(i))]),n.createTextVNode(" "+n.toDisplayString(i))],64))}}),tg=A._export_sfc($c,[["__scopeId","data-v-535f5fef"]]),eg={class:"text-secondary"},ig=n.defineComponent({__name:"CoordinateFragment",props:{prefix:String,suffix:String,value:String},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",eg,[n.createElementVNode("span",null,[n.createElementVNode("b",null,n.toDisplayString(e.prefix),1),n.createTextVNode(" "+n.toDisplayString(e.value)+n.toDisplayString(e.suffix),1)])]))}}),It=A._export_sfc(ig,[["__scopeId","data-v-ce90ec07"]]),sg=["href"],ag=["src","alt"],ng={controls:"",style:{"max-width":"200px"}},og=["src","type"],rg=["href"],lg=["href"],hg=["title","src"],cg=["href"],gg=["href"],dg=n.defineComponent({__name:"LinkFragment",props:{href:{},title:{},type:{}},setup(e){const t=e;return(i,s)=>{var a,o;return(a=t.type)!=null&&a.startsWith("image/")?(n.openBlock(),n.createElementBlock("a",{key:0,href:t.href,target:"_blank"},[n.createElementVNode("img",{src:t.href,alt:t.title,style:{"max-width":"200px"}},null,8,ag)],8,sg)):(o=t.type)!=null&&o.startsWith("video/")?(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createElementVNode("video",ng,[n.createElementVNode("source",{src:t.href,type:t.type},null,8,og),s[0]||(s[0]=n.createTextVNode(" Download the ",-1)),n.createElementVNode("a",{href:t.href},"video",8,rg),s[1]||(s[1]=n.createTextVNode(".",-1))]),s[2]||(s[2]=n.createElementVNode("br",null,null,-1)),s[3]||(s[3]=n.createTextVNode(" Download the ",-1)),n.createElementVNode("a",{href:t.href,target:"_blank"},"video",8,lg),s[4]||(s[4]=n.createTextVNode(". ",-1))],64)):t.type==="application/pdf"?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[n.createElementVNode("iframe",{title:t.title,width:"200",height:"300",src:t.href,frameborder:"1",sandbox:"allow-same-origin allow-scripts"},null,8,hg),s[5]||(s[5]=n.createElementVNode("br",null,null,-1)),s[6]||(s[6]=n.createTextVNode(" Download the ",-1)),n.createElementVNode("a",{href:t.href,target:"_blank"},"file",8,cg),s[7]||(s[7]=n.createTextVNode(". ",-1))],64)):(n.openBlock(),n.createElementBlock("a",{key:3,href:t.href,target:"_blank"},n.toDisplayString(t.title),9,gg))}}}),ug=["title"],Ag={key:0,class:"text-secondary"},Cg={key:1,class:"text-secondary"},mg={key:0},fg={key:3,class:"d-flex align-items-center justify-content-between"},Ig={key:4,class:"text-secondary"},pg=["title"],vg=n.defineComponent({__name:"AttributeItem",props:{attrName:{},attrValue:{}},setup(e){const t=e;let i;switch(t.attrName){case"IFCType":i=["badge","bg-secondary","text-light","text-truncate"];break;default:i=["text-truncate"]}return(s,a)=>{const o=n.resolveComponent("AttributeItem",!0);return n.openBlock(),n.createElementBlock("tr",null,[n.createElementVNode("th",{title:s.attrName,class:"align-top text-truncate"},n.toDisplayString(s.attrName),9,ug),n.createElementVNode("td",{class:n.normalizeClass(n.unref(i))},[t.attrValue===void 0?(n.openBlock(),n.createElementBlock("span",Ag,"undefined")):t.attrValue===null?(n.openBlock(),n.createElementBlock("span",Cg,"null")):typeof t.attrValue=="object"?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[Array.isArray(t.attrValue)?(n.openBlock(),n.createElementBlock("table",mg,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(t.attrValue,(l,r)=>(n.openBlock(),n.createBlock(o,{key:r,"attr-name":`[${r}]`,"attr-value":l},null,8,["attr-name","attr-value"]))),128))])):n.unref(A.isLink)(t.attrValue)?(n.openBlock(),n.createBlock(dg,{key:1,href:t.attrValue.href,title:t.attrValue.title,type:t.attrValue.type},null,8,["href","title","type"])):n.unref(A.isColor)(t.attrValue)?(n.openBlock(),n.createBlock(tg,{key:t.attrValue.getHexString(),color:t.attrValue},null,8,["color"])):n.unref(A.isVector3)(t.attrValue)?(n.openBlock(),n.createElementBlock("div",fg,[n.createVNode(It,{value:t.attrValue.x.toFixed(0),prefix:"X:"},null,8,["value"]),n.createVNode(It,{value:t.attrValue.y.toFixed(0),prefix:"Y:"},null,8,["value"]),n.createVNode(It,{value:t.attrValue.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])):(n.openBlock(),n.createElementBlock("span",Ig,"Object"))],64)):(n.openBlock(),n.createElementBlock("span",{key:3,title:t.attrValue},n.toDisplayString(t.attrValue),9,pg))],2)])}}}),Ks=A._export_sfc(vg,[["__scopeId","data-v-1c2e92b2"]]),yg={key:0},bg={class:"badge bg-info-subtle text-dark mb-0"},Mg={class:"table table-striped table-sm w-100"},Eg=n.defineComponent({__name:"AttributeGroup",props:{children:{},title:{}},setup(e){return(t,i)=>t.children.length>0?(n.openBlock(),n.createElementBlock("div",yg,[n.createElementVNode("h6",bg,n.toDisplayString(t.title),1),n.createElementVNode("table",Mg,[n.createElementVNode("tbody",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(t.children,(s,a)=>(n.openBlock(),n.createBlock(Ks,{key:a,"attr-name":s.key,"attr-value":s.value},null,8,["attr-name","attr-value"]))),128))])])])):n.createCommentVNode("",!0)}}),wg={class:"card"},Og={class:"card-header d-flex align-items-center justify-content-between"},xg={class:"text-truncate mx-2"},_g={class:"card-body content py-2 px-1"},kg={class:"card-footer py-0"},Sg={class:"d-flex align-items-center column-gap-3"},Ng=n.defineComponent({__name:"AttributePanel",props:{attributes:{},name:{},parent:{},point:{}},emits:["close"],setup(e){const t=e,i=n.ref(!1);function s(){const a=`${t.point.x};${t.point.y};${t.point.z}`;navigator.clipboard.writeText(a).then(()=>{i.value=!0,setTimeout(()=>i.value=!1,2e3)}).catch(o=>{console.log("failed",o)})}return(a,o)=>(n.openBlock(),n.createElementBlock("div",wg,[n.createElementVNode("div",Og,[o[1]||(o[1]=n.createElementVNode("i",{class:"bi bi-card-checklist"},null,-1)),n.createElementVNode("span",xg,n.toDisplayString(a.name??a.parent),1),n.createElementVNode("button",{onClick:o[0]||(o[0]=l=>a.$emit("close")),type:"button",class:"btn-close","aria-label":"Close"})]),n.createElementVNode("div",_g,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(a.attributes.entries(),(l,r)=>(n.openBlock(),n.createBlock(Eg,{key:r,title:l[0],children:l[1]},null,8,["title","children"]))),128))]),n.createElementVNode("div",kg,[n.createElementVNode("div",Sg,[n.createVNode(It,{value:a.point.x.toFixed(0),prefix:"X:"},null,8,["value"]),n.createVNode(It,{value:a.point.y.toFixed(0),prefix:"Y:"},null,8,["value"]),n.createVNode(It,{value:a.point.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"]),n.createElementVNode("button",{onClick:s,type:"button",class:"btn btn-link"},[n.createElementVNode("i",{class:n.normalizeClass(["bi",i.value?["bi-clipboard-check","test-success"]:["bi-clipboard"]])},null,2)])])])]))}}),Pg=A._export_sfc(Ng,[["__scopeId","data-v-b1912966"]]),Tg="data:image/png;base64,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",Lg={id:"loading-screen",class:"container"},Dg={xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",fill:"currentColor",class:"bi bi-geo-alt-fill pulse",viewBox:"0 0 16 16",style:{"vertical-align":"middle"}},Bg={class:"logo"},Vg=["src"],Rg=n.defineComponent({__name:"LoadingScreen",setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",Lg,[i[1]||(i[1]=n.createElementVNode("h1",null,"Loading...",-1)),n.createElementVNode("h2",null,[(n.openBlock(),n.createElementBlock("svg",Dg,[...i[0]||(i[0]=[n.createElementVNode("path",{d:"M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6"},null,-1)])]))]),n.createElementVNode("div",Bg,[n.createElementVNode("img",{src:n.unref(Tg)},null,8,Vg)])]))}}),Ug=A._export_sfc(Rg,[["__scopeId","data-v-712b955c"]]),Fg={class:"main"},zg=n.defineComponent({__name:"MainView",setup(e){const t=n.ref(null),i=n.ref(null),s=n.shallowRef(null),a=A.useGiro3dStore();return n.onMounted(()=>{s.value=new cs({backgroundColor:null,crs:a.getCRS(),target:t.value}),a.setMainView(s.value)}),n.onUnmounted(()=>{a.setMainView(null),s.value&&(s.value.view.setControls(null),s.value.dispose())}),(o,l)=>(n.openBlock(),n.createElementBlock("div",Fg,[n.createElementVNode("div",{ref_key:"mainView",ref:t,class:"main",id:"main-view"},null,512),n.createElementVNode("div",{ref_key:"inspectorView",ref:i,id:"inspector",class:"position-absolute top-0 start-0 mh-100 overflow-auto"},null,512)]))}}),jg=A._export_sfc(zg,[["__scopeId","data-v-0d10144c"]]),Gg={class:"card root"},Hg={class:"d-flex align-items-center"},Zg=["aria-pressed"],Wg=n.defineComponent({__name:"NavigationButtons",setup(e){const t=A.useCameraStore(),i=Pt(),s=n.ref(t.getNavigationModeRef());n.watch(s,o=>{t.setNavigationMode(o);let l,r;switch(o){case"disabled":{l="Disabled",r="Camera is disabled";break}case"first-person":{l="First person",r=`<i class="bi bi-hand-index-thumb"></i> Left-click to rotate; Right-click to pan<br>
10
10
  <i class="bi bi-mouse2"></i> Scroll to zoom<br>
11
11
  <i class="bi bi-keyboard"></i> Up/Down/Left/Right: move forward/backward/left/right<br>
12
- <i class="bi bi-keyboard"></i> W/D/A/S: move up/down/left/right`;break}case"orbit":{r="Free navigation",l=`<i class="bi bi-hand-index-thumb"></i> Left-click to pan; Right-click to orbit<br>
12
+ <i class="bi bi-keyboard"></i> W/D/A/S: move up/down/left/right`;break}case"orbit":{l="Free navigation",r=`<i class="bi bi-hand-index-thumb"></i> Left-click to pan; Right-click to orbit<br>
13
13
  <i class="bi bi-mouse2"></i> Scroll to zoom to cursor<br>
14
- <i class="bi bi-keyboard"></i> Up/Down/Left/Right: move forward/backward/left/right`;break}case"position-on-map":{r="Position on map",l=`<i class="bi bi-hand-index-thumb"></i> Left-click on the map to move to First Person view on the ground.<br>
15
- Cancel with right-click or Escape`;break}default:return n}i.push(new Q("Navigation",`Navigation mode set to <strong>${r}</strong>.<br>${l}`,"success"))});function a(){s.value!=="position-on-map"?s.value="position-on-map":s.value="orbit"}return(n,r)=>(o.openBlock(),o.createElementBlock("div",Ju,[o.createElementVNode("div",Xu,[r[2]||(r[2]=o.createElementVNode("i",{title:"Free navigation",class:"mx-2 bi bi-camera-reels-fill"},null,-1)),o.createVNode(A._sfc_main,{"model-value":s.value==="first-person","onUpdate:modelValue":r[0]||(r[0]=l=>s.value=l?"first-person":"orbit")},null,8,["model-value"]),r[3]||(r[3]=o.createElementVNode("i",{title:"First person view",class:"bi bi-universal-access"},null,-1)),r[4]||(r[4]=o.createElementVNode("div",{class:"vr mx-2"},null,-1)),o.createElementVNode("button",{class:o.normalizeClass(["btn btn-sm btn-outline-secondary",s.value==="position-on-map"?"active":null]),"aria-pressed":s.value==="position-on-map","data-bs-toggle":"button",title:"Position on map",onClick:a},[...r[1]||(r[1]=[o.createElementVNode("i",{class:"fg-position-man"},null,-1)])],10,Ku)])]))}}),$u=A._export_sfc(Qu,[["__scopeId","data-v-b890a4be"]]),td="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABXCAYAAAC+73jDAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio7gBw97HPKo1A06fo/gSEnUkzgftjkMaf9+3uk1IJxTLs2q10pA9uzSIYwm+sFM+eADsobiez6VFocEKUXUubU6I5/5OHBG7lDlYmRrFJZ7wXP428MoLtIxkUBsYeRhpDILHAZ9PouqW7s+YdnpDpsrDVqIDjv2aH7sc8PvbQX3qMiurARWtTmAjlWSdggHI4FGRsPQDczaYhJ8yL9/OpF+mhJaGNqk9l0AAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA5daVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjM5NTZmNTIxLWU2YjAtNGRiNi1hMTk2LWM3ZjkwZjE1YzYwZiIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMTVlNTExOS1lZDExLTRjY2YtOGEzYi1lN2QyZDJkZjBkNzUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4NjYzMjQ3ZS1mMmVjLTQwZmQtYjE3OC03NzFhNjEwMTRmYWMiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjM3MjAyNDAyIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjE3KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzoxNyswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFiYjlmOWJiLWYyYzAtNGM4Yi1iYjgxLTU1ODE4NjY0NmQ2YiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDMtMTlUMTQ6NDc6MjYrMDE6MDAiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTUwOTQ2YzYtODBkMy00MmI4LTgwOTUtZDcwYTE3MjNlNDM1IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6MTcrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+wSyPngAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAywAAAMsABKGRa2wAAAAd0SU1FB+kJFAsbEeAnRtoAACAASURBVHja7Z15mBXVnfc/p6ru0vf2vi/0ytqsoiIgKiogxp1EMkFnjJqocTIzmSWTmUzezCRxljca500m+6hjYsYlibtRcV/iBiqICMjaNND0vnfftarO+0dVX7qhl6ru24hwf8/TDw/Q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",ed="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACTCAYAAABszOBRAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBBEsMgCLz7ij5BBBWeYxo70x/0+QUhnSTTnXGzsmRF0/y8X+lhKECJaucmrWUFCUkZKjg7xmLItHhBWnhwrSfBMIqWTMee4wc46vAL8M9QVU9B/AxjuxpCkc+3oDgIbaKiYj8miiAsbkAEDL9WbsL9fIVt5ivYVzJiWbNYmHu3PXV9vb3qOVjKRMCsjMjeg7ZqwqFClLWgjaANpruyt4I/yL93OpC+DARZTFnCKNgAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM0N2M4ZTNiLTg2ZjUtNDM3NC04Mzg2LTBjMGQwNGE1YTQxNSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNDVjNDdmMC1mODVmLTQ3NzAtYjVlNy1hMmU0ZDFmNWUwNzkiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMDVhMDI1NS05NzY5LTRhZGQtYjQ3Yy1iOGU4MjlkZDdlNDciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjU4NjgwODMzIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjM4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzozOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmYwMzU4MmQ4LWUxMTgtNGY1Yi1hNDdiLTlkYjM4ZjIxNTk2ZiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI3OjM4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Ptv0Ik4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfpCRQLGyZYmuPVAAAgAElEQVR42u2dd3gc5bX/P2dmd1Use9eybIMNXorp/VJCCZAAAUy4kOQmJEAS4ELosPSA6WB6y8iEml9CAjcJhB4IJgQIhBAw3XSDgTFuuMhaWX135vz+eF/Z69VIVrMsGZ3nmcfyzpaZd77v6UX4GpLrerEwpASIqzISWA9YFxgNjAFKgCqgvOijCiwGmoA6+/dXwDxgrgj1QGtpqbQ0NZ2ufI1J1vYbjMU8NwhIqjIW2BHYBtgE2BiYACR7uR5tAAotyHzgE+BD4G3gAxGWqmaWDQFrsN+UeFWqTAS+CewFbAlsCDir+GjOcqJllis1AYuARgugLwuAVAUMs3+vZ7lcOVABjCjgds3Ax8C7wD+B/4jwhWqmcQhYg4K89YA9gUOBnboApAXAXGAm8J59+F8CNUBWhHrVTFM3OWOFKikgBYwFJlpQbwuMAzayYP0E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",id="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcQwCPvPFDdCAnnAOOlLug1u/HMKrdqqlmIIRg4hrL/vFj4DlHLIpUnVWiOQNSt1JBINfecU88475kNL93o4BUKJEdmuUr3/qKfTwEJHVi5GMrsw3QXN7i8PI3+Ix0SEZHEjdSMmE5IbdPtWrCrt+oVpjXeInTBom0lHrUymPe+5YXtLwTtMtHLiCGYWG4DHKYE7EgWjgMaEhpE3cGHySbCQtz0dCH8eW1rDzUi1YAAAAYNpQ0NQSUNDIHByb2ZpbGUAAHicfZE7SMNAHMa/pkp9VBzMIMUhQ3Wyi4p0rFUoQoVQK7TqYB59QZOGJMXFUXAtOPhYrDq4OOvq4CoIgg8Qd8FJ0UVK/F9SaBHjwXE/vrvv4+47gGtWFc3qSQCabpuZVFLI5VeF0Cv6wWMQEcQlxTLmRDEN3/F1jwBb72Isy//cn2NILVgKEBCIE4ph2sQbxLObtsF4n5hXypJKfE48adIFiR+ZLnv8xrjkMscyeTObmSfmiYVSF8tdrJRNjXiGOKpqOuVzOY9VxluMtWpdad+TvTBc0FeWmU5zDCksYgkiBMioo4IqbMRo1UmxkKH9pI8/4vpFcsnkqkAhxwJq0CC5frA/+N2tVZye8pLCSaD3xXE+xoHQLtBqOM73seO0ToDgM3Cld/y1JhD/JL3R0aJHwPA2cHHd0eQ94HIHGH0yJFNypSBNrlgE3s/om/LAyC0wsOb11t7H6QOQpa7SN8DBITBRoux1n3f3dff275l2fz/Q5HLMN5rr0QAADXppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NGVjMGMxNzUtNmE3NS00OGJlLTllZGYtOGNlNDQyM2ZmMmU0IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU1YmZlYWVjLWNhZDAtNGZlNi1iMGJkLTM2ODEyMWNmYWFmMSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjliODczYjYyLTY4ZDUtNDU3ZS1iNzVkLWFmN2Y3MGU5YTkzMyIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3NTgzNjc2NzMwNDY0MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjU6MDk6MjBUMTM6Mjc6NTIrMDI6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjUyKzAyOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OGJhNTc0MjgtZDMyOS00MzUzLWI2YjMtYzk1YjRmYzg1MzQ0IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6NTMrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+fJLSCgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJFAsbNdwkogsAACAASURBVHja7J13eBRV98c/syVt03shvRA6KbQkdGkCERAQEMuLxgoWFAs2FLF3BQuCgoqIiPTeew+EXkIICek92ZRt8/sj+QHJbpJNsiHhfTnPw6PMDHfn3rnfe/o5Anep2ch1/hQrwA/wBtwAZ8AesK36r7TqDzX+Xwdoqv5fW/X3AqAYyKv6kwmkAElZcQuVd1e7eUi4uwQmAYIP0B4IAYKr/j8UcL9ljZtjrcWqP1nAeeAMkAhcBM5kxS28evfr3AXI7QaDAxAGhAM9gRjAqer0b03rqaniOnuBw8BR4FhW3MK8u1/xLkBMLSZFAP2BYUBXwPwOXDsRUAGngLXAHuBIVtzC4rtf+S5AGgoKD6AvcD8wELADJP9l0xSBImAX8DewMytuYerdr38XILWBwhUYCjwERAFWphpbi0iFKFIO+Mkt8JRb4SyzwlIi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",sd="data:image/png;base64,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",ad="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAAtCAYAAADr0SSvAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBRDsMgCP3nFDuCgFo4jm1tshvs+EOhS9vsJT6QR54I9M/7gNcAYYZcFqlaazJkzUrNEkmONhlTnjyxnRre60B7CGQltsh+lRr9Zx1/Bh6aZeViJFsI613QHP7yMIqHeExElsQgoGHE5AKGQfNvpaqyXL+w9nSH+IFBx0Y6amV17XnPi21vL/YOE3VGTsbM4gPwOAW4WaLGVrBGtIaRizHOVvSF/NvTCfgCF5hawfSmwyAAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM4NjdiYjcyLWU1NWEtNGZkZS1hYTlmLTdiYzZhNTJhNGIzZSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0NWE1ZGEyYy01YjhmLTQ1ZTQtOGJkYy01N2Q0ZmJkZGQ1NWUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplN2YyOWQyZS1kMDg1LTQ4ZWYtODYyZS0wZDM1NTRjOGVlYWQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3Njk4OTQxNjMxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI4OjE4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyODoxOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZlNDAxNmZmLWZkZDItNDA4MS05YjU2LWY2ODYzYjk1Y2E1ZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI4OjE4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pl6bkfoAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfpCRQLHBI2b4GnAAAU8UlEQVR42u2deXwV1dnHv/feDCQkyCpQFtkXZS0KAi8UpSqgqCMuMB3FQa0bBV+LS1GLSNVirdoWS221dWy9jlIsA1YQRBZFVFbZ14Y1IEsgELKQIbnvH+eZZnLfBIkmrPf5fPKZ3Jk55zxz5jznWc7vOROKxWJfTJ21uu1T0dUa5zHdfFmDwvGj+uUBLUKhUF78dU23uwPTyij+IvB7YANwHOjkuZZ3JjyXptvNgU+BecBdnmsdJ0EnTUlA3VgsVmtztnded0Th8UKAGkCorLEGNAAOyoALUoYc1wOFQOwMerQbgFXAiIRwfDcBSVD5aKPnWjeVMlOHgL+KcBRpul0DuBpIB/KB64Fc4F3PtfZLGQ0YBHQQzfM1MMtzrSJNtxsDPYCVwIXAlcAe4D3PtXICbfYA+gobn3qutSjAUwPAA74Aemm6/bHnWkWl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";var nd={"@loaders.gl/core":{description:"The core API for working with loaders.gl loaders and writers",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/csv":{description:"Framework-independent loader for CSV and DSV table formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/geopackage":{description:"GeoPackage data loaders",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/las":{description:"Framework-independent loader for the LAS and LAZ formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/shapefile":{description:"Loader for the Shapefile Format",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@popperjs/core":{description:"Tooltip and Popover Positioning Engine",homepage:"https://github.com/popperjs/popper-core",license:"MIT"},"@tarekraafat/autocomplete.js":{description:"Simple autocomplete pure vanilla Javascript library.",homepage:"https://tarekraafat.github.io/autoComplete.js",license:"Apache-2.0"},bootstrap:{description:"The most popular front-end framework for developing responsive, mobile first projects on the web.",homepage:"https://getbootstrap.com/",license:"MIT"},"bootstrap-icons":{description:"Official open source SVG icon library for Bootstrap",homepage:"https://icons.getbootstrap.com/",license:"MIT"},"camera-controls":{homepage:"https://github.com/yomotsu/camera-controls",license:"MIT"},"chart.js":{description:"Simple HTML5 charts using the canvas element.",homepage:"https://www.chartjs.org",license:"MIT"},"chroma-js":{description:"JavaScript library for color conversions",homepage:"https://github.com/gka/chroma.js",license:"(BSD-3-Clause AND Apache-2.0)"},"d3-dsv":{description:"A parser and formatter for delimiter-separated values, such as CSV and TSV",homepage:"https://d3js.org/d3-dsv/",license:"BSD-3-Clause"},"font-gis":{description:"Icon font set for use with GIS and spatial analysis tools",homepage:"https://github.com/Viglino/font-gis",license:"Apache-2.0"},"openbim-components":{homepage:"https://ifcjs.github.io/components/",license:"MIT"},pinia:{description:"Intuitive, type safe and flexible Store for Vue",homepage:"https://github.com/vuejs/pinia#readme",license:"MIT"},proj4:{description:"Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.",homepage:"https://proj4js.github.io/proj4js/",license:"MIT"},"regenerator-runtime":{description:"Runtime for Regenerator-compiled generator and async functions.",homepage:"https://github.com/facebook/regenerator/tree/main/packages/runtime",license:"MIT"},"shepherd.js":{description:"Guide your users through a tour of your app.",homepage:"https://shepherdjs.dev",license:"MIT"},"web-ifc":{description:"ifc loading on the web",homepage:"https://ifcjs.github.io/web-ifc/docs/"}};const od={class:"list-group my-3"},rd={href:"https://oslandia.com",target:"_blank",class:"list-group-item"},ld={class:"d-flex w-100 justify-content-between"},hd=["src"],cd={href:"https://www.bpifrance.com/",target:"_blank",class:"list-group-item"},gd={class:"d-flex w-100 justify-content-between"},ud=["src"],dd={class:"list-group-item"},Ad={class:"d-flex w-100 justify-content-between"},md=["src"],Cd={class:"list-group-item"},fd={class:"d-flex w-100 justify-content-between"},Id={class:"text-end"},pd=["src"],vd=["src"],yd=["href"],bd={key:0,class:"blockquote fw-light"},Md=o.defineComponent({__name:"AboutPanel",setup(e){const t=nd,i=A.useModuleStore().getLoadedModules();return(s,a)=>(o.openBlock(),o.createElementBlock("div",null,[a[4]||(a[4]=o.createStaticVNode('<p data-v-4397f0a3><a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-4397f0a3>Piero</a> is a fully-configurable open-source web application for 3D visualization. It is powered by <a href="https://giro3d.org" target="_blank" data-v-4397f0a3>Giro3D</a>, a versatile framework to visualize geospatial data in the browser. </p><h5 class="mt-3" data-v-4397f0a3>Going further</h5><p data-v-4397f0a3> If you wish to run your own instance of Piero, or if you wish to contribute to this application, head up to <a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-4397f0a3>our GitLab project</a> for more info. </p><h5 data-v-4397f0a3>Contributors</h5><p data-v-4397f0a3><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/CONTRIBUTORS.md" data-v-4397f0a3>Brought to you by the Giro3D contributors.</a></p><h5 data-v-4397f0a3>Sponsors</h5>',6)),o.createElementVNode("div",od,[o.createElementVNode("a",rd,[o.createElementVNode("div",ld,[a[0]||(a[0]=o.createElementVNode("span",null,"Oslandia",-1)),o.createElementVNode("img",{src:o.unref(sd),class:"logo",alt:"Oslandia"},null,8,hd)])]),o.createElementVNode("a",cd,[o.createElementVNode("div",gd,[a[1]||(a[1]=o.createElementVNode("span",null,"BPI France",-1)),o.createElementVNode("img",{src:o.unref(td),class:"logo",alt:"BPI France"},null,8,ud)])]),o.createElementVNode("span",dd,[o.createElementVNode("div",Ad,[a[2]||(a[2]=o.createElementVNode("span",null,"Funded by the French government as part of France 2030",-1)),o.createElementVNode("img",{src:o.unref(ed),class:"logo",alt:"France 2030"},null,8,md)])]),o.createElementVNode("span",Cd,[o.createElementVNode("div",fd,[a[3]||(a[3]=o.createElementVNode("span",null,"Funded by the European Union - Next Generation EU as part of the France Relance plan",-1)),o.createElementVNode("div",Id,[o.createElementVNode("img",{src:o.unref(id),class:"logo",alt:"France Relance"},null,8,pd),o.createElementVNode("img",{src:o.unref(ad),class:"logo",alt:"European Union - Next Generation EU"},null,8,vd)])])])]),a[5]||(a[5]=o.createStaticVNode('<p data-v-4397f0a3> If you wish to sponsor Giro3D and Piero, you can contact us at <a href="mailto:infos+3d@oslandia.com" data-v-4397f0a3>infos+3d@oslandia.com</a>. </p><h5 data-v-4397f0a3>License</h5><p data-v-4397f0a3><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/LICENSE" data-v-4397f0a3>MIT License</a></p><h5 data-v-4397f0a3>Credits</h5><p data-v-4397f0a3>Data and services used from:</p><ul data-v-4397f0a3><li data-v-4397f0a3><a target="_blank" href="https://ign.fr/" data-v-4397f0a3>IGN</a> (Imagery, Elevation model, LIDAR data, Elevation API) </li><li data-v-4397f0a3><a target="_blank" href="https://www.grandlyon.com/" data-v-4397f0a3>Métropole Grand Lyon</a> (Imagery, Elevation model, overlay layers) </li><li data-v-4397f0a3><a target="_blank" href="https://www.openstreetmap.org" data-v-4397f0a3>OpenStreetMap</a> (Imagery) </li><li data-v-4397f0a3><a target="_blank" href="https://adresse.data.gouv.fr/" data-v-4397f0a3>adresse.data.gouv.fr</a> (Geocoding API) </li><li data-v-4397f0a3><a target="_blank" href="https://cadastre.data.gouv.fr" data-v-4397f0a3>Données cadastrales ouvertes</a> (Cadastre) </li><li data-v-4397f0a3><a target="_blank" href="https://oslandia.com" data-v-4397f0a3>Oslandia</a> (CityJSON reconstructions, overlay layers) </li><li data-v-4397f0a3><a target="_blank" href="https://bimdata.io/" data-v-4397f0a3>BIMData</a> (IFC model)</li></ul><p data-v-4397f0a3>Third-parties:</p>',7)),o.createElementVNode("ul",null,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(Object.entries(o.unref(t)),([n,r])=>(o.openBlock(),o.createElementBlock("li",{key:n},[o.createElementVNode("a",{target:"_blank",href:r.homepage},o.toDisplayString(n)+" ("+o.toDisplayString(r.license)+")",9,yd),r.description?(o.openBlock(),o.createElementBlock("blockquote",bd,o.toDisplayString(r.description),1)):o.createCommentVNode("",!0)]))),128))]),a[6]||(a[6]=o.createElementVNode("p",null,"Loaded modules:",-1)),o.createElementVNode("ul",null,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(i),n=>(o.openBlock(),o.createElementBlock("li",{key:n.name},[o.createElementVNode("code",null,o.toDisplayString(n.id),1)]))),128))]),a[7]||(a[7]=o.createElementVNode("hr",null,null,-1))]))}}),wd=A._export_sfc(Md,[["__scopeId","data-v-4397f0a3"]]),X=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function Ed(){const e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0,s=Math.random()*4294967295|0;return(X[e&255]+X[e>>8&255]+X[e>>16&255]+X[e>>24&255]+"-"+X[t&255]+X[t>>8&255]+"-"+X[t>>16&15|64]+X[t>>24&255]+"-"+X[i&63|128]+X[i>>8&255]+"-"+X[i>>16&255]+X[i>>24&255]+X[s&255]+X[s>>8&255]+X[s>>16&255]+X[s>>24&255]).toLowerCase()}const Oa=kt.defineStore("analysis",()=>{const e=o.ref([]);function t(s){const a={collapsible:!0,component:o.shallowRef(s.component),icon:s.icon,id:Ed(),name:s.name};e.value.push(a)}function i(){return e.value}return{getTools:i,registerTool:t}}),_d=["id"],Od={class:"accordion-header"},xd=["data-bs-target","aria-controls"],kd=["id"],Sd={class:"accordion-body"},Nd=o.defineComponent({__name:"ToolWrapper",props:{collapsible:{type:Boolean},icon:{},id:{},title:{}},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",{class:"accordion-item",id:t.id},[o.createElementVNode("h2",Od,[o.createElementVNode("button",{class:"accordion-button",type:"button","data-bs-toggle":"collapse","data-bs-target":`#${t.id}-collapse`,"aria-expanded":"false","aria-controls":`${t.id}-collapse`},[t.icon?(o.openBlock(),o.createElementBlock("i",{key:0,class:o.normalizeClass(["bi icon",t.icon])},null,2)):o.createCommentVNode("",!0),o.createTextVNode(" "+o.toDisplayString(t.title),1)],8,xd)]),o.createElementVNode("div",{id:`${t.id}-collapse`,class:"accordion-collapse collapse","data-bs-parent":"#accordionExample"},[o.createElementVNode("div",Sd,[o.renderSlot(t.$slots,"default",{},void 0,!0)])],8,kd)],8,_d))}}),Ld=A._export_sfc(Nd,[["__scopeId","data-v-acce0d55"]]),Pd={class:"accordion",id:"analysis-accordion"},Td={key:0,class:"warning"},Dd=o.defineComponent({__name:"AnalysisPanel",setup(e){const t=Oa();return(i,s)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",Pd,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getTools(),a=>(o.openBlock(),o.createBlock(Ld,{id:a.id,key:a.id,title:a.name,icon:a.icon,collapsible:a.collapsible},{default:o.withCtx(()=>[(o.openBlock(),o.createBlock(o.resolveDynamicComponent(a.component)))]),_:2},1032,["id","title","icon","collapsible"]))),128))]),o.unref(t).getTools().length===0?(o.openBlock(),o.createElementBlock("div",Td,"No analysis tool registered.")):o.createCommentVNode("",!0)],64))}}),Bd=A._export_sfc(Dd,[["__scopeId","data-v-48d1d631"]]),Vd={},Rd={class:"vstack gap-1 flex-grow-0 flew-shrink-0"};function Fd(e,t){return o.openBlock(),o.createElementBlock("fieldset",Rd,[t[0]||(t[0]=o.createElementVNode("hr",null,null,-1)),o.renderSlot(e.$slots,"default")])}const si=A._export_sfc(Vd,[["render",Fd]]),ai=o.defineComponent({__name:"ImportButton",props:{icon:{},text:{},title:{}},emits:["import"],setup(e,{emit:t}){const i=t,s=o.ref(!1),a=o.ref(null);function n(g){if(g){const u=[];for(const f of g)u.push(f);i("import",u)}}function r(g){const u=g.target.files;n(u)}function l(g){s.value=!0,g.preventDefault()}function h(g){s.value=!1,g.preventDefault()}function c(g){g.preventDefault(),g.dataTransfer&&(g.dataTransfer.dropEffect="copy")}function d(g){var f;s.value=!1;const u=(f=g.dataTransfer)==null?void 0:f.files;n(u),g.preventDefault()}return(g,u)=>(o.openBlock(),o.createElementBlock("div",{draggable:"true",onDragover:c,onDragenter:l,onDragleave:h,onDrop:d},[o.createVNode(A._sfc_main$1,{title:g.title,text:g.text,icon:g.icon??"bi-box-arrow-left",onClick:u[0]||(u[0]=f=>a.value.click()),class:o.normalizeClass(["w-100",s.value?"btn-primary":"btn-outline-secondary"])},null,8,["title","text","icon","class"]),o.createElementVNode("input",{ref_key:"hiddenInput",ref:a,class:"btn btn-outline-secondary d-none",type:"file",onInput:r,multiple:"true"},null,544)],32))}}),Ud={class:"border p-2"},zd={class:"float-none w-auto form-text mb-0 px-2"},jd={key:0,class:"form-text mt-0 mx-2"},Gd=["id","aria-label"],Hd=["value"],Zd={key:1,class:"form-text mt-0 mx-2"},xa=o.defineComponent({__name:"DropdownView",props:{current:{},descriptionPosition:{},items:{},label:{}},emits:["updated:current"],setup(e,{emit:t}){const i=e,s=t,a=o.ref(i.current);function n(l){const h=i.items[l];a.value=h,s("updated:current",h)}const r=A.MathUtils.generateUUID();return(l,h)=>(o.openBlock(),o.createElementBlock("fieldset",Ud,[o.createElementVNode("legend",zd,o.toDisplayString(l.label),1),l.descriptionPosition==="top"&&a.value!==null&&a.value.description?(o.openBlock(),o.createElementBlock("div",jd,o.toDisplayString(a.value.description),1)):o.createCommentVNode("",!0),o.createElementVNode("select",{id:o.unref(r),class:"form-select","aria-label":l.label,onInput:h[0]||(h[0]=c=>n(c.target.selectedIndex))},[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(l.items,(c,d)=>(o.openBlock(),o.createElementBlock("option",{key:d,value:d},o.toDisplayString(c.name),9,Hd))),128))],40,Gd),l.descriptionPosition!=="top"&&a.value!==null&&a.value.description?(o.openBlock(),o.createElementBlock("div",Zd,o.toDisplayString(a.value.description),1)):o.createCommentVNode("",!0)]))}}),Wd=o.defineComponent({__name:"VisibilityControl",props:{visible:{type:Boolean}},emits:["update:visible"],setup(e){return(t,i)=>(o.openBlock(),o.createBlock(A._sfc_main,{"model-value":t.visible,"onUpdate:modelValue":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["model-value"]))}}),ne=A._export_sfc(Wd,[["__scopeId","data-v-7c3ff3bf"]]),qd=o.defineComponent({__name:"EmptyIndicator",props:{text:String},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",null,o.toDisplayString(e.text),1))}}),ni=A._export_sfc(qd,[["__scopeId","data-v-a385fce5"]]),Yd={class:"list-group-item item"},Jd={class:"d-flex"},Xd=["title"],Kd={class:"icons"},Qd=["data-bs-target"],$d=["id"],tA={key:1,class:"table table-striped table-sm table-responsive-sm"},eA=o.defineComponent({__name:"AnnotationItem",props:{annotation:{},visible:{type:Boolean}},emits:["edit","stop-edit","delete","download","update:visible","zoom"],setup(e){const t=e,i=o.ref(t.annotation.isEditing),s=()=>{i.value=t.annotation.isEditing};return o.onMounted(()=>{t.annotation.addEventListener("isEditing",s)}),o.onUnmounted(()=>{t.annotation.removeEventListener("isEditing",s)}),(a,n)=>(o.openBlock(),o.createElementBlock("li",Yd,[o.createElementVNode("div",Jd,[o.createVNode(ne,{visible:a.visible,"onUpdate:visible":n[0]||(n[0]=r=>a.$emit("update:visible",r))},null,8,["visible"]),o.createElementVNode("a",{class:"title",title:a.annotation.title,href:"#",onClick:n[1]||(n[1]=r=>a.$emit("zoom"))},o.toDisplayString(a.annotation.title),9,Xd),o.createElementVNode("div",Kd,[o.createElementVNode("a",{href:"#",class:"icon",title:"Attribute table","data-bs-toggle":"collapse","data-bs-target":`#collapse-${a.annotation.uuid}`,"aria-expanded":"false","aria-controls":"`#collapse-${annotation.uuid}`"},[...n[5]||(n[5]=[o.createElementVNode("i",{class:"bi bi-card-list"},null,-1)])],8,Qd),o.createElementVNode("a",{href:"#",class:"icon",title:"Edit geometry (right-click to exit edition, or press Escape to cancel modifications)",onClick:n[2]||(n[2]=r=>i.value?a.$emit("stop-edit"):a.$emit("edit"))},[o.createElementVNode("i",{class:o.normalizeClass(`bi bi-pencil ${i.value?"text-primary":""}`)},null,2)]),o.createElementVNode("a",{href:"#",class:"icon",title:"Download...",onClick:n[3]||(n[3]=r=>a.$emit("download"))},[...n[6]||(n[6]=[o.createElementVNode("i",{class:"bi bi-download"},null,-1)])]),o.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:n[4]||(n[4]=r=>a.$emit("delete"))},[...n[7]||(n[7]=[o.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])]),o.createElementVNode("div",{class:"collapse m-2",id:`collapse-${a.annotation.uuid}`},[Object.entries(a.annotation.properties).length===0?(o.openBlock(),o.createBlock(ni,{key:0,text:"No properties"})):(o.openBlock(),o.createElementBlock("table",tA,[n[8]||(n[8]=o.createElementVNode("thead",null,[o.createElementVNode("tr",null,[o.createElementVNode("th",null,"Key"),o.createElementVNode("th",null,"Value")])],-1)),o.createElementVNode("tbody",null,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(Object.entries(a.annotation.properties),([r,l])=>(o.openBlock(),o.createBlock(_a,{key:r,"attr-name":r,"attr-value":l},null,8,["attr-name","attr-value"]))),128))])]))],8,$d)]))}}),iA=A._export_sfc(eA,[["__scopeId","data-v-364a81a5"]]),Ns=[{name:"Default",value:"normal"},{description:"Will only pick points from the map and not to any 3D object",name:"Map only",value:"mapOnly"},{description:"Will only pick points from 3D objects, and not from the map",name:"3D objects only",value:"objectsOnly"}],sA={class:"d-flex flex-column h-100"},aA={class:"list-group list-group-flush flex-fill overflow-auto"},nA=o.defineComponent({__name:"AnnotationPanel",setup(e){const t=Zi(),i=A.useCameraStore(),s=o.ref(t.getAnnotationMode());o.watch(s,c=>{t.setAnnotationMode(c)});function a(c){const d=c.toGeoJSON();A.Download.downloadAsJson(d,`annotation-${c.title}.json`)}function n(){const c=ya.toCollection(t.getAnnotations());A.Download.downloadAsJson(c,"annotations.json")}function r(c){i.lookTopDownAt(c.object)}function l(c){t.importAnnotationsFiles(c)}function h(c){s.value=c==null?void 0:c.value}return(c,d)=>(o.openBlock(),o.createElementBlock("div",sA,[o.unref(t).count===0?(o.openBlock(),o.createBlock(ni,{key:0,text:"No annotations"})):o.createCommentVNode("",!0),o.createElementVNode("ul",aA,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getAnnotations(),g=>(o.openBlock(),o.createBlock(iA,{key:g.title,annotation:g,visible:g.visible,"onUpdate:visible":()=>{g.visible=!g.visible,c.$forceUpdate()},onEdit:u=>o.unref(t).edit(g),onStopEdit:d[0]||(d[0]=u=>o.unref(t).stopEdition()),onDelete:u=>o.unref(t).remove(g),onDownload:u=>a(g),onZoom:u=>r(g)},null,8,["annotation","visible","onUpdate:visible","onEdit","onDelete","onDownload","onZoom"]))),128))]),o.createVNode(si,{disabled:o.unref(t).isUserDrawing(),id:"annotations-fieldset"},{default:o.withCtx(()=>[o.createVNode(A._sfc_main,{"model-value":o.unref(t).showLabels(),"onUpdate:modelValue":d[1]||(d[1]=g=>o.unref(t).setShowLabels(g)),title:"show labels"},{default:o.withCtx(()=>[...d[6]||(d[6]=[o.createTextVNode("Show annotation labels",-1)])]),_:1},8,["model-value"]),o.createVNode(xa,{label:"Picking mode","description-position":"top",current:o.unref(Ns)[0],items:o.unref(Ns),"onUpdated:current":d[2]||(d[2]=g=>h(g)),class:"mb-2"},null,8,["current","items"]),o.createVNode(A._sfc_main$1,{title:"Add point annotation",text:"New points",icon:"bi-pin",class:"btn-primary",onClick:d[3]||(d[3]=g=>o.unref(t).createPoint())}),o.createVNode(A._sfc_main$1,{title:"Add line annotation",text:"New line",icon:"bi-bezier2",class:"btn-primary",onClick:d[4]||(d[4]=g=>o.unref(t).createLine())}),o.createVNode(A._sfc_main$1,{title:"Add polygon annotation",text:"New polygon",icon:"bi-heptagon",class:"btn-primary",onClick:d[5]||(d[5]=g=>o.unref(t).createPolygon())}),o.createVNode(A._sfc_main$1,{title:"Export annotations to GeoJSON",text:"Export annotations",icon:"bi-box-arrow-right",class:"btn-outline-secondary",onClick:n}),o.createVNode(ai,{title:"Import annotation from GeoJSON",text:"Import annotations",onImport:l})]),_:1},8,["disabled"])]))}}),oA={key:0},rA={class:"modal-dialog"},lA={class:"modal-content"},hA={class:"modal-header"},cA={class:"modal-title fs-5",id:"exampleModalLabel"},gA={class:"modal-body"},uA={class:"modal-footer"},dA=o.defineComponent({__name:"ModalOverlay",props:{show:Boolean,title:String},setup(e){return(t,i)=>e.show?(o.openBlock(),o.createElementBlock("div",oA,[i[2]||(i[2]=o.createElementVNode("div",{class:"background"},null,-1)),o.createElementVNode("div",{class:o.normalizeClass(["modal","fade","d-block",e.show?"show":null]),id:"exampleModal",tabindex:"-1","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},[o.createElementVNode("div",rA,[o.createElementVNode("div",lA,[o.createElementVNode("div",hA,[o.createElementVNode("h1",cA,o.toDisplayString(e.title),1),o.createElementVNode("button",{type:"button",class:"btn-close",onClick:i[0]||(i[0]=s=>t.$emit("close")),"data-bs-dismiss":"modal","aria-label":"Close"})]),o.createElementVNode("div",gA,[o.renderSlot(t.$slots,"default",{},void 0,!0)]),o.createElementVNode("div",uA,[o.createElementVNode("button",{type:"button",onClick:i[1]||(i[1]=s=>t.$emit("close")),class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ")])])])],2)])):o.createCommentVNode("",!0)}}),AA=A._export_sfc(dA,[["__scopeId","data-v-1f7f2e97"]]),mA={class:"list-group-item item d-flex d-flex-end"},CA=o.defineComponent({__name:"BookmarkItem",props:["url","name"],emits:["delete","share","goto"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",mA,[o.createElementVNode("a",{class:"bookmark",href:"#",onClick:i[0]||(i[0]=s=>t.$emit("goto"))},o.toDisplayString(e.name),1),o.createElementVNode("a",{href:"#",class:"icon",title:"Share this bookmark",onClick:i[1]||(i[1]=s=>t.$emit("share"))},[...i[3]||(i[3]=[o.createElementVNode("i",{class:"bi bi-share"},null,-1)])]),o.createElementVNode("a",{href:"#",class:"icon",title:"Delete this bookmark",onClick:i[2]||(i[2]=s=>t.$emit("delete"))},[...i[4]||(i[4]=[o.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])]))}}),fA=A._export_sfc(CA,[["__scopeId","data-v-682112f6"]]),IA={class:"input-group mb-3"},pA={class:"form-control text-truncate"},vA={class:"input-group-text",id:"basic-addon2"},yA=o.defineComponent({__name:"ShareBookmarkModal",props:{url:{}},setup(e){function t(i){navigator.clipboard.writeText(i)}return(i,s)=>(o.openBlock(),o.createElementBlock("div",null,[s[2]||(s[2]=o.createElementVNode("p",null,"Use this link to share your bookmark",-1)),o.createElementVNode("div",IA,[o.createElementVNode("span",pA,o.toDisplayString(i.url),1),o.createElementVNode("span",vA,[o.createElementVNode("a",{title:"Copy to clipboard",href:"#",class:"text-secondary",onClick:s[0]||(s[0]=()=>t(i.url))},[...s[1]||(s[1]=[o.createElementVNode("i",{class:"bi bi-clipboard"},null,-1)])])])])]))}});class Dt extends A.EventDispatcher{constructor(i,s){super();p(this,"camera");p(this,"name");this.name=i,this.camera=s}static new(i,s){const n=new URL(s).searchParams.get("view");if(n===null)throw new Error("Could not deserialize bookmark");const r=JSON.parse(n),l=new A.Vector3(r.camera[0],r.camera[1],r.camera[2]),h=new A.Vector3(r.target[0],r.target[1],r.target[2]),c=new A.Vector3(r.focalOffset[0],r.focalOffset[1],r.focalOffset[2]),d=new ii(l,h,c);return new Dt(i,d)}delete(){this.dispatchEvent({type:"delete"})}getUrl(){const i=A.Download.getBaseUrl()+"?",s=this.camera,a={camera:[s.camera.x,s.camera.y,s.camera.z],focalOffset:[s.focalOffset.x,s.focalOffset.y,s.focalOffset.z],target:[s.target.x,s.target.y,s.target.z]},n=new URL(i),r=n.searchParams;return r.set("tour","none"),r.set("view",JSON.stringify(a)),n}goTo(){this.dispatchEvent({type:"goto"})}}function bA(){const e=A.getConfig(),t=[];for(const i of e.bookmarks){const s=i.position,a=i.target,n=i.focalOffset,r=i.title,l=new ii(new A.Vector3(s.x,s.y,s.z),new A.Vector3(a.x,a.y,a.z),new A.Vector3(n.x,n.y,n.z));t.push(new Dt(r,l))}return t}const ka=kt.defineStore("bookmarks",()=>{const e=o.ref(new Set(bA())),t=o.computed(()=>e.value.size);function i(r){e.value.add(r),Tt.dispatchEvent({type:"bookmark-added",value:r})}function s(r){e.value.delete(r),Tt.dispatchEvent({type:"bookmark-removed",value:r})}function a(){e.value.clear()}function n(){return[...e.value]}return{add:i,clear:a,count:t,getBookmarks:n,remove:s}}),MA={class:"d-flex flex-column h-100"},wA={class:"list-group list-group-flush flex-fill overflow-auto"},EA=o.defineComponent({__name:"BookmarkPanel",setup(e){const t=o.ref(!1),i=o.ref(null),s=o.ref(null),a=Rt(),n=ka(),r=A.useCameraStore();function l(){const m=window.prompt("Bookmark name","New bookmark");if(m!=null){const C=new Dt(m,r.getCameraPosition());n.add(C)}}function h(){const m=[];for(const C of n.getBookmarks())m.push({title:C.name,url:C.getUrl().toString()});A.Download.downloadAsJson(m,"bookmarks.json")}function c(m){r.setCameraPosition(m.camera)}function d(m){for(const C of m)g(C)}async function g(m){const C=await m.text(),v=JSON.parse(C),I=new Set(n.getBookmarks().map(_=>_.name));let b=0,M=0;v.forEach(_=>{I.has(_.title)?M++:(n.add(Dt.new(_.title,_.url)),b++)}),a.push(new Q("Bookmarks",`${b} bookmarks imported (${M} skipped)`,"success"))}function u(m){i.value=m.getUrl().toString(),s.value="Share bookmark",t.value=!0}function f(){const m=new Dt("temp",r.getCameraPosition());i.value=m.getUrl().toString(),s.value="Share current view",t.value=!0}return(m,C)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",MA,[o.unref(n).count===0?(o.openBlock(),o.createBlock(ni,{key:0,text:"No bookmarks"})):o.createCommentVNode("",!0),o.createElementVNode("ul",wA,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(n).getBookmarks(),v=>(o.openBlock(),o.createBlock(fA,{key:v.name,name:v.name,onShare:I=>u(v),onDelete:I=>o.unref(n).remove(v),onGoto:I=>c(v)},null,8,["name","onShare","onDelete","onGoto"]))),128))]),o.createVNode(si,null,{default:o.withCtx(()=>[o.createVNode(A._sfc_main$1,{text:"New bookmark",icon:"bi-plus-lg",title:"Create a new bookmark from the current view",class:"btn-primary",onClick:C[0]||(C[0]=()=>{l(),m.$forceUpdate()})}),o.createVNode(A._sfc_main$1,{text:"Share view",icon:"bi-share",title:"Share current view",class:"btn-outline-secondary",onClick:f}),o.createVNode(A._sfc_main$1,{title:"Export bookmarks to GeoJSON",class:"btn-outline-secondary",onClick:h,icon:"bi-box-arrow-right",text:"Export bookmarks"}),o.createVNode(ai,{title:"Import bookmarks from GeoJSON",text:"Import bookmarks",onImport:d})]),_:1})]),o.createVNode(AA,{show:t.value,title:s.value,onClose:C[1]||(C[1]=()=>t.value=!1)},{default:o.withCtx(()=>[o.createVNode(yA,{url:i.value},null,8,["url"])]),_:1},8,["show","title"])],64))}}),_A={},OA={class:"list-group list-group-flush border-start"};function xA(e,t){return o.openBlock(),o.createElementBlock("ul",OA,[o.renderSlot(e.$slots,"default")])}const ze=A._export_sfc(_A,[["render",xA],["__scopeId","data-v-461b97dc"]]),kA=["aria-expanded","aria-controls"],SA={key:0,class:"icon me-2"},NA={class:"flex-fill"},LA={key:1,class:"icon ms-2"},PA=["id"],wi=o.defineComponent({__name:"SectionCollapsible",props:{expanded:{type:Boolean},iconPosition:{},title:{}},emits:["update:expanded"],setup(e,{emit:t}){const i=e,s=t,a=A.MathUtils.generateUUID(),n=`#${a}`,r=o.ref(null);return o.onMounted(()=>{var l,h,c;i.expanded&&((l=r.value)==null||l.classList.add("show")),(h=r.value)==null||h.addEventListener("hidden.bs.collapse",()=>s("update:expanded",!1)),(c=r.value)==null||c.addEventListener("shown.bs.collapse",()=>s("update:expanded",!0))}),(l,h)=>(o.openBlock(),o.createElementBlock("div",null,[o.createElementVNode("h6",null,[o.createElementVNode("a",{class:"d-flex text-nowrap text-truncate overflow-hidden link-underline link-underline-opacity-0 link-underline-opacity-75-hover link-body-emphasis",href:n,"data-bs-toggle":"collapse",role:"button","aria-expanded":l.expanded,"aria-controls":o.unref(a)},[l.iconPosition==="left"?(o.openBlock(),o.createElementBlock("div",SA,[...h[0]||(h[0]=[o.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):o.createCommentVNode("",!0),o.createElementVNode("span",NA,o.toDisplayString(l.title),1),l.iconPosition!=="left"?(o.openBlock(),o.createElementBlock("div",LA,[...h[1]||(h[1]=[o.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):o.createCommentVNode("",!0)],8,kA)]),o.createElementVNode("div",{ref_key:"collapsible",ref:r,id:o.unref(a),class:"collapse"},[o.renderSlot(l.$slots,"default")],8,PA)]))}}),TA=o.defineComponent({__name:"ListLabel",props:{title:{}},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["d-inline-block flex-fill text-nowrap text-truncate overflow-hidden px-1",t.$attrs.class])},o.toDisplayString(t.title),3))}}),DA={class:"slider d-flex"},BA={key:0,title:"Transparent",class:"bi-x-diamond me-1"},VA={key:1,title:"Opacity",class:"bi-x-diamond-fill opacity-75 me-1"},RA=["value"],FA={key:2,title:"Opaque",class:"bi-x-diamond-fill ms-1"},UA=o.defineComponent({__name:"OpacitySlider",props:{opacity:{},size:{}},emits:["update:opacity"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",DA,[t.size!=="small"?(o.openBlock(),o.createElementBlock("i",BA)):o.createCommentVNode("",!0),t.size==="small"?(o.openBlock(),o.createElementBlock("i",VA)):o.createCommentVNode("",!0),o.createElementVNode("input",{title:"Opacity",type:"range",class:"form-range",min:"0",step:"0.01",max:"1",onInput:i[0]||(i[0]=s=>t.$emit("update:opacity",Number.parseFloat(s.target.value))),value:t.opacity},null,40,RA),t.size!=="small"?(o.openBlock(),o.createElementBlock("i",FA)):o.createCommentVNode("",!0)]))}}),Sa=A._export_sfc(UA,[["__scopeId","data-v-5b0604f2"]]),zA={class:"list-group-item"},jA={class:"d-flex"},GA=o.defineComponent({__name:"BasemapItem",props:{hasOpacitySlider:{type:Boolean},isLoading:{type:Boolean},name:{},opacity:{},type:{},visible:{type:Boolean}},emits:["update:opacity","update:visible"],setup(e){const t={color:"fg-landcover-map",elevation:"fg-profile",graticule:"fg-grid",mask:"bi-mask"},i={color:"Color layer",elevation:"Elevation layer",graticule:"Graticule",mask:"Mask layer"};return(s,a)=>(o.openBlock(),o.createElementBlock("li",zA,[o.createElementVNode("div",jA,[o.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:o.withCtx(()=>[o.createVNode(A._sfc_main$2,{icon:t[s.type],title:i[s.type]},null,8,["icon","title"])]),_:1}),o.createVNode(ne,{visible:s.visible,"onUpdate:visible":a[0]||(a[0]=n=>s.$emit("update:visible",n))},null,8,["visible"]),o.createVNode(TA,{title:s.name,class:o.normalizeClass(["label",s.visible?null:"disabled"])},null,8,["title","class"]),s.hasOpacitySlider?(o.openBlock(),o.createBlock(Sa,{key:0,class:o.normalizeClass(["opacity-slider",s.visible?null:"disabled"]),opacity:s.opacity,"onUpdate:opacity":a[1]||(a[1]=n=>s.$emit("update:opacity",n))},null,8,["class","opacity"])):o.createCommentVNode("",!0)])]))}}),Ls=A._export_sfc(GA,[["__scopeId","data-v-a7bbfe26"]]),HA={},ZA={class:"spinner-border spinner-border-sm text-secondary",role:"status"};function WA(e,t){return o.openBlock(),o.createElementBlock("div",ZA,[...t[0]||(t[0]=[o.createElementVNode("span",{class:"visually-hidden"},"Loading...",-1)])])}const Na=A._export_sfc(HA,[["render",WA]]),qA={class:"d-flex"},YA={key:0,class:"icon spinner d-inline-block"},JA={key:1,class:"list-group-item"},XA=o.defineComponent({__name:"DatagroupItem",props:{group:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){const t=e,i=o.reactive(t.group.leafs()),s=o.ref(!1),a=o.ref(!1),n=o.ref(t.group.visible);o.watch(i,h=>{s.value=h.some(c=>c.isPreloading),a.value=h.some(c=>c.isPreloaded),n.value=h.some(c=>c.visible)});const r=A.MathUtils.generateUUID(),l=`#${r}`;return(h,c)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",qA,[o.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:o.withCtx(()=>[...c[10]||(c[10]=[o.createElementVNode("i",{class:"bi bi-folder2",title:"Group"},null,-1)])]),_:1}),o.createVNode(ne,{visible:n.value,"onUpdate:visible":c[0]||(c[0]=d=>h.$emit("update:visible",h.group,d))},null,8,["visible"]),o.createVNode(A.IconList,{class:"me-1"},{default:o.withCtx(()=>[o.createVNode(A.IconListButton,{title:"Expand group",icon:"bi-chevron-down","data-bs-toggle":"collapse","data-bs-target":l,"aria-controls":o.unref(r),"aria-expanded":"false"},null,8,["aria-controls"])]),_:1}),o.createVNode(A._sfc_main$3,{class:"label",disabled:!n.value||!a.value,text:h.group.name,title:`Zoom to ${h.group.name}`,onClick:c[1]||(c[1]=d=>h.$emit("zoom",h.group))},null,8,["disabled","text","title"]),o.createVNode(A.IconList,{class:"ms-1"},{default:o.withCtx(()=>[s.value?(o.openBlock(),o.createElementBlock("div",YA,[o.createVNode(Na,{title:"Loading..."})])):o.createCommentVNode("",!0),a.value&&(h.group.config.canMaskBasemap||h.group.config.isMaskingBasemap)?(o.openBlock(),o.createBlock(A.IconListButton,{key:1,title:"Toggle basemap masking",icon:"bi-mask",onClick:c[2]||(c[2]=d=>h.$emit("update:toggle-mask",h.group))})):o.createCommentVNode("",!0),a.value?(o.openBlock(),o.createBlock(A.IconListButton,{key:2,title:"Clip to",icon:"bi-bounding-box",onClick:c[3]||(c[3]=d=>h.$emit("clipTo",h.group))})):o.createCommentVNode("",!0),a.value?(o.openBlock(),o.createBlock(A.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:c[4]||(c[4]=d=>h.$emit("update:toggle-grid",h.group))})):o.createCommentVNode("",!0)]),_:1})]),o.createVNode(ze,{id:o.unref(r),class:"collapse pb-3"},{default:o.withCtx(()=>[h.group.children.length>0?(o.openBlock(!0),o.createElementBlock(o.Fragment,{key:0},o.renderList(h.group.children,d=>(o.openBlock(),o.createBlock(La,{key:d.name,dataset:d,onZoom:c[5]||(c[5]=g=>h.$emit("zoom",g)),onClipTo:c[6]||(c[6]=g=>h.$emit("clipTo",g)),"onUpdate:toggleGrid":c[7]||(c[7]=g=>h.$emit("update:toggle-grid",g)),"onUpdate:toggleMask":c[8]||(c[8]=g=>h.$emit("update:toggle-mask",g)),"onUpdate:visible":c[9]||(c[9]=(g,u)=>h.$emit("update:visible",g,u))},null,8,["dataset"]))),128)):(o.openBlock(),o.createElementBlock("li",JA,"No dataset in this group"))]),_:1},8,["id"])],64))}}),KA=A._export_sfc(XA,[["__scopeId","data-v-7592eab8"]]),QA={class:"d-flex"},$A={key:0,class:"icon spinner d-inline-block"},tm=["id"],em=o.defineComponent({__name:"DatasetItem",props:{dataset:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){const t=A.useDatasetStore(),i=e,s=A.refAndWatch(i.dataset,"isPreloading"),a=A.refAndWatch(i.dataset,"isPreloaded"),n=A.refAndWatch(i.dataset,"visible");function r(){t.remove(i.dataset)}return(l,h)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",QA,[o.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:o.withCtx(()=>[o.createVNode(A._sfc_main$2,{icon:o.unref(Bs)[l.dataset.type]??"bi-file-earmark-x",title:o.unref(Vs)[l.dataset.type]??"Unknown"},null,8,["icon","title"])]),_:1}),o.createVNode(ne,{visible:o.unref(n),"onUpdate:visible":h[0]||(h[0]=c=>l.$emit("update:visible",l.dataset,c))},null,8,["visible"]),o.createVNode(A._sfc_main$3,{class:"label",disabled:!o.unref(n)||!o.unref(a),text:l.dataset.name,title:`Zoom to ${l.dataset.name}`,onClick:h[1]||(h[1]=c=>l.$emit("zoom",l.dataset))},null,8,["disabled","text","title"]),o.createVNode(A.IconList,{class:"ms-1"},{default:o.withCtx(()=>[o.unref(s)?(o.openBlock(),o.createElementBlock("div",$A,[o.createVNode(Na,{title:"Loading..."})])):o.createCommentVNode("",!0),o.unref(De).has(l.dataset.type)&&o.unref(a)?(o.openBlock(),o.createBlock(A.IconListButton,{key:1,title:"Show dataset properties",icon:"bi-card-list","data-bs-toggle":"collapse","data-bs-target":`#collapse-${l.dataset.uuid}`,"aria-controls":`collapse-${l.dataset.uuid}`,"aria-expanded":"false"},null,8,["data-bs-target","aria-controls"])):o.createCommentVNode("",!0),o.unref(a)&&("canMaskBasemap"in l.dataset.config&&l.dataset.config.canMaskBasemap||"isMaskingBasemap"in l.dataset.config&&l.dataset.config.isMaskingBasemap)?(o.openBlock(),o.createBlock(A.IconListButton,{key:2,title:"Toggle basemap masking",icon:"bi-mask",onClick:h[2]||(h[2]=c=>l.$emit("update:toggle-mask",l.dataset))})):o.createCommentVNode("",!0),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getCustomActions(l.dataset,{isVisible:o.unref(n),isPreloaded:o.unref(a)}),c=>(o.openBlock(),o.createBlock(A.IconListButton,{key:c.title,title:c.title,icon:c.icon,onClick:d=>c.action(l.dataset)},null,8,["title","icon","onClick"]))),128)),o.unref(a)?(o.openBlock(),o.createBlock(A.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:h[3]||(h[3]=c=>l.$emit("update:toggle-grid",l.dataset))})):o.createCommentVNode("",!0),o.createVNode(A.IconListButton,{title:"Delete this dataset",icon:"bi-trash",onClick:r})]),_:1})]),o.unref(De).has(l.dataset.type)?(o.openBlock(),o.createElementBlock("div",{key:0,class:"collapse m-2",id:`collapse-${l.dataset.uuid}`},[(o.openBlock(),o.createBlock(o.resolveDynamicComponent(o.unref(De).get(l.dataset.type)),{dataset:l.dataset},null,8,["dataset"]))],8,tm)):o.createCommentVNode("",!0)],64))}}),im=A._export_sfc(em,[["__scopeId","data-v-1aa9a2d7"]]),sm={class:"list-group-item"},La=o.defineComponent({__name:"DatasetOrGroupItem",props:{dataset:{}},emits:["zoom","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",sm,[o.unref(A.Datagroup).isGroup(t.dataset)?(o.openBlock(),o.createBlock(KA,{key:0,group:t.dataset,onZoom:i[0]||(i[0]=s=>t.$emit("zoom",s)),"onUpdate:toggleGrid":i[1]||(i[1]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":i[2]||(i[2]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":i[3]||(i[3]=(s,a)=>t.$emit("update:visible",s,a))},null,8,["group"])):(o.openBlock(),o.createBlock(im,{key:1,dataset:t.dataset,onZoom:i[4]||(i[4]=s=>t.$emit("zoom",s)),"onUpdate:toggleGrid":i[5]||(i[5]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":i[6]||(i[6]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":i[7]||(i[7]=(s,a)=>t.$emit("update:visible",s,a))},null,8,["dataset"]))]))}}),am={class:"list-group-item d-flex"},nm=o.defineComponent({__name:"OverlayItem",props:{name:{},opacity:{},visible:{type:Boolean}},emits:["update:visible","update:opacity","update:move-up","update:move-down","zoom"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",am,[o.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:o.withCtx(()=>[o.createVNode(A._sfc_main$2,{icon:"fg-contour-map",title:"Overlay"})]),_:1}),o.createVNode(ne,{visible:t.visible,"onUpdate:visible":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),o.createVNode(A._sfc_main$3,{class:"label",disabled:!t.visible,title:`Zoom to ${t.name}`,text:t.name,onClick:i[1]||(i[1]=s=>t.$emit("zoom"))},null,8,["disabled","title","text"]),o.createVNode(Sa,{class:o.normalizeClass(["opacity-slider",t.visible?null:"disabled"]),opacity:t.opacity,size:"small","onUpdate:opacity":i[2]||(i[2]=s=>t.$emit("update:opacity",s))},null,8,["class","opacity"]),o.createVNode(A.IconList,{class:"ms-1"},{default:o.withCtx(()=>[o.createVNode(A.IconListButton,{title:"Move up",icon:"bi-arrow-up",onClick:i[3]||(i[3]=s=>t.$emit("update:move-up"))}),o.createVNode(A.IconListButton,{title:"Move down",icon:"bi-arrow-down",onClick:i[4]||(i[4]=s=>t.$emit("update:move-down"))})]),_:1})]))}}),om=A._export_sfc(nm,[["__scopeId","data-v-8755c19f"]]),rm={class:"d-flex flex-column h-100"},lm={class:"flex-fill overflow-auto"},hm=o.defineComponent({__name:"DatasetPanel",setup(e){const t=A.useDatasetStore(),i=A.useCameraStore(),s=pa();function a(l){for(const h of l)t.importFromFile(h)}function n(){const l=document.getElementById("dataset-import-url");t.importFromFile(l.value)}function r(l){const h=t.getBoundingBox(l);h!=null&&h.isEmpty()||i.lookTopDownAt(h)}return(l,h)=>(o.openBlock(),o.createElementBlock("div",rm,[o.createElementVNode("div",lm,[o.createVNode(wi,{title:"Basemaps","icon-position":"left",id:"basemap-list",class:"border-bottom mb-3"},{default:o.withCtx(()=>[o.createVNode(ze,{id:"layers-list-group"},{default:o.withCtx(()=>[o.unref(s).getGraticuleLayer()!==void 0?(o.openBlock(),o.createBlock(Ls,{key:0,type:"graticule",opacity:1,name:o.unref(s).getGraticuleLayer().name,isLoading:!1,visible:o.unref(s).getGraticuleLayer().visible,hasOpacitySlider:!1,"onUpdate:visible":h[0]||(h[0]=c=>o.unref(s).getGraticuleLayer().visible=c)},null,8,["name","visible"])):o.createCommentVNode("",!0),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(s).getBasemaps(),c=>(o.openBlock(),o.createBlock(Ls,{key:c.name,type:c.type,opacity:c.opacity,name:c.name,isLoading:c.isLoading,visible:c.visible,hasOpacitySlider:c.type==="color"||c.type==="elevation","onUpdate:visible":d=>o.unref(s).setBasemapVisibility(c,d),"onUpdate:opacity":d=>o.unref(s).setBasemapOpacity(c,d)},null,8,["type","opacity","name","isLoading","visible","hasOpacitySlider","onUpdate:visible","onUpdate:opacity"]))),128))]),_:1})]),_:1}),o.unref(s).overlayCount>0?(o.openBlock(),o.createBlock(wi,{key:0,title:"Overlays","icon-position":"left",id:"overlay-list",class:"border-bottom mb-3"},{default:o.withCtx(()=>[o.createVNode(ze,null,{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(s).getOverlays(),c=>(o.openBlock(),o.createBlock(om,{key:c.name,opacity:c.opacity,name:c.name,visible:c.visible,"onUpdate:visible":d=>o.unref(s).setOverlayVisibility(c,d),"onUpdate:opacity":d=>o.unref(s).setOverlayOpacity(c,d),"onUpdate:moveUp":d=>o.unref(s).moveOverlayUp(c),"onUpdate:moveDown":d=>o.unref(s).moveOverlayDown(c)},null,8,["opacity","name","visible","onUpdate:visible","onUpdate:opacity","onUpdate:moveUp","onUpdate:moveDown"]))),128))]),_:1})]),_:1})):o.createCommentVNode("",!0),o.createVNode(wi,{title:"Datasets",expanded:!0,"icon-position":"left",id:"dataset-list"},{default:o.withCtx(()=>[o.createVNode(ze,null,{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getTree(),c=>(o.openBlock(),o.createBlock(La,{key:c.name,dataset:c,onUpdated:h[1]||(h[1]=d=>l.$forceUpdate()),onZoom:h[2]||(h[2]=d=>r(d)),"onUpdate:toggleGrid":h[3]||(h[3]=d=>o.unref(t).toggleGrid(d)),"onUpdate:toggleMask":h[4]||(h[4]=d=>o.unref(t).toggleMask(d)),"onUpdate:visible":h[5]||(h[5]=(d,g)=>o.unref(t).setVisible(d,g))},null,8,["dataset"]))),128))]),_:1})]),_:1})]),o.createVNode(si,null,{default:o.withCtx(()=>[o.createElementVNode("div",{class:"input-group mb-3"},[h[6]||(h[6]=o.createElementVNode("input",{type:"text",id:"dataset-import-url",class:"form-control",placeholder:"https://","aria-label":"URL to import","aria-describedby":"button-dataset-import-url"},null,-1)),o.createElementVNode("button",{onClick:n,class:"btn btn-outline-secondary",type:"button",id:"button-dataset-import-url"}," Import URL ")]),o.createVNode(ai,{title:"Import file",text:"Import file",onImport:a})]),_:1})]))}}),cm={class:"list-group-item item"},gm={class:"d-flex"},um=["title"],dm={class:"icons"},Am=o.defineComponent({__name:"MeasurementItem",props:{measure:{},visible:{type:Boolean}},emits:["delete","download","update:visible","zoom"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",cm,[o.createElementVNode("div",gm,[o.createVNode(ne,{visible:t.visible,"onUpdate:visible":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),o.createElementVNode("a",{class:"title",title:t.measure.title,href:"#",onClick:i[1]||(i[1]=s=>t.$emit("zoom"))},o.toDisplayString(t.measure.title)+" ("+o.toDisplayString(t.measure.object.length.toFixed(2))+"m)",9,um),o.createElementVNode("div",dm,[o.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:i[2]||(i[2]=s=>t.$emit("delete"))},[...i[3]||(i[3]=[o.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])])]))}}),mm=A._export_sfc(Am,[["__scopeId","data-v-bcecb7b2"]]),Ps=[{description:"Will automatically beam perpendicularly to the selected point until a geometry is hit",name:"Laser",value:"laser"}],Cm={class:"d-flex flex-column h-100"},fm={class:"list-group list-group-flush flex-fill overflow-auto"},Im=o.defineComponent({__name:"MeasurementPanel",setup(e){const t=Wi(),i=A.useCameraStore(),s=o.ref(t.getMeasurementMode());o.watch(s,c=>{t.setMeasurementMode(c)});function a(c){const d=c.toGeoJSON();A.Download.downloadAsJson(d,`measure-${c.title}.json`)}function n(){const c=Ea.toCollection(t.getMeasures());A.Download.downloadAsJson(c,"measures.json")}function r(c){i.lookTopDownAt(c.object)}function l(c){t.importMeasureFiles(c)}function h(c){s.value=c==null?void 0:c.value}return(c,d)=>(o.openBlock(),o.createElementBlock("div",Cm,[d[3]||(d[3]=o.createElementVNode("div",{class:"alert alert-warning py-2",role:"alert"},[o.createElementVNode("i",{class:"bi bi-cone-striped"}),o.createTextVNode(" This feature is experimental ")],-1)),o.unref(t).count===0?(o.openBlock(),o.createBlock(ni,{key:0,text:"No measurements"})):o.createCommentVNode("",!0),o.createElementVNode("ul",fm,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getMeasures(),g=>(o.openBlock(),o.createBlock(mm,{key:g.title,measure:g,visible:g.visible,"onUpdate:visible":()=>{g.visible=!g.visible,c.$forceUpdate()},onDelete:u=>o.unref(t).remove(g),onDownload:u=>a(g),onZoom:u=>r(g)},null,8,["measure","visible","onUpdate:visible","onDelete","onDownload","onZoom"]))),128))]),o.createVNode(si,{id:"measures-fieldset"},{default:o.withCtx(()=>[o.createVNode(xa,{label:"Mode","description-position":"top",current:o.unref(Ps)[0],items:o.unref(Ps),"onUpdated:current":d[0]||(d[0]=g=>h(g)),class:"mb-2"},null,8,["current","items"]),o.unref(t).isUserMeasuring()?(o.openBlock(),o.createBlock(A._sfc_main$1,{key:0,title:"Stop measuring",text:"Stop measuring",icon:"bi-stop-circle",class:"btn-primary",onClick:d[1]||(d[1]=g=>o.unref(t).end())})):(o.openBlock(),o.createBlock(A._sfc_main$1,{key:1,title:"Start measuring",text:"Start measuring",icon:"bi-rulers",class:"btn-primary",onClick:d[2]||(d[2]=g=>o.unref(t).start())})),o.createVNode(A._sfc_main$1,{title:"Export measures to GeoJSON",class:"btn-outline-secondary",onClick:n,icon:"bi-box-arrow-right",text:"Export measures"}),o.createVNode(ai,{title:"Import measures from GeoJSON",text:"Import measures",onImport:l})]),_:1})]))}}),pm={class:"panel",id:"panel-container"},vm={class:"title"},ym={key:0,class:"badge text-bg-primary rounded-pill float-end",title:"Version"},bm={class:"content"},Mm=o.defineComponent({__name:"PanelContainer",props:{selected:{}},setup(e){const t=Ds(),i=`packages-v1.0.0-beta.2
16
- `;return(s,a)=>{var n;return o.openBlock(),o.createElementBlock("div",pm,[o.createElementVNode("h5",vm,[o.createTextVNode(o.toDisplayString((n=o.unref(t).find(r=>r.key===s.selected))==null?void 0:n.title)+" ",1),s.selected==="about"?(o.openBlock(),o.createElementBlock("span",ym,"Version: "+o.toDisplayString(o.unref(i)),1)):o.createCommentVNode("",!0)]),o.createElementVNode("div",bm,[s.selected==="datasets"?(o.openBlock(),o.createBlock(hm,{key:0})):o.createCommentVNode("",!0),s.selected==="about"?(o.openBlock(),o.createBlock(wd,{key:1})):o.createCommentVNode("",!0),s.selected==="bookmarks"?(o.openBlock(),o.createBlock(EA,{key:2})):o.createCommentVNode("",!0),s.selected==="analysis"?(o.openBlock(),o.createBlock(Bd,{key:3})):o.createCommentVNode("",!0),s.selected==="annotations"?(o.openBlock(),o.createBlock(nA,{key:4})):o.createCommentVNode("",!0),s.selected==="measures"?(o.openBlock(),o.createBlock(Im,{key:5})):o.createCommentVNode("",!0)])])}}}),wm=A._export_sfc(Mm,[["__scopeId","data-v-381fd038"]]),Em=["aria-valuenow"],_m={methods:{tick(){this.$forceUpdate()}}},Om=o.defineComponent({..._m,__name:"ProgressBar",props:{progress:{required:!0,type:Number}},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",{class:"progress",role:"progressbar","aria-label":"Progress","aria-valuenow":e.progress*100,"aria-valuemin":"0","aria-valuemax":"100"},[e.progress!=1?(o.openBlock(),o.createElementBlock("div",{key:0,class:"progress-bar progress-bar-striped progress-bar-animated",style:o.normalizeStyle(`width: ${e.progress*100}%`)},null,4)):o.createCommentVNode("",!0)],8,Em))}}),xm={async geocode(e){const t=await A.Fetcher.fetchJson(`https://api-adresse.data.gouv.fr/search/?q=${e}`),i=t.features.map(s=>new at("EPSG:4326",s.geometry.coordinates[0],s.geometry.coordinates[1],0));return await Fs.alticode(i),i.forEach((s,a)=>{t.features[a].properties.crs="EPSG:2154",t.features[a].properties.z=s.altitude}),t.features.map(s=>s.properties)}},km={class:"main"},Sm={class:"input-group",id:"address-search"},Nm=o.defineComponent({__name:"SearchOverlay",emits:["update:poi"],setup(e,{emit:t}){const i=o.ref(null),s=t;return o.onMounted(()=>{new Cn({data:{keys:["label"],src:n=>xm.geocode(n)},debounce:300,placeHolder:"Search places...",resultItem:{highlight:!0},resultsList:{noResults:!0},selector:"#search-place-autocomplete",threshold:3,searchEngine:(n,r)=>r}),i.value.addEventListener("selection",n=>{const r=n.detail.selection.value;s("update:poi",r)})}),(a,n)=>(o.openBlock(),o.createElementBlock("div",km,[o.createElementVNode("div",Sm,[o.createElementVNode("input",{ref_key:"inputField",ref:i,id:"search-place-autocomplete",class:"rounded-pill form-control",type:"search",dir:"ltr",placeholder:"Search places...",spellcheck:"false",autocorrect:"off",autocomplete:"off",autocapitalize:"off",maxlength:"2048",tabindex:"1"},null,512)])]))}}),Lm=A._export_sfc(Nm,[["__scopeId","data-v-46d63936"]]),Pm={class:"d-flex column-gap-3"},Tm=o.defineComponent({__name:"StatusBar",props:{x:Number,y:Number,z:Number},setup(e){return(t,i)=>{var s,a,n;return o.openBlock(),o.createElementBlock("div",null,[o.createElementVNode("div",Pm,[i[0]||(i[0]=o.createElementVNode("i",{class:"bi text-secondary bi-cursor-fill"},null,-1)),o.createVNode(bt,{value:(s=e.x)==null?void 0:s.toFixed(0),prefix:"X:"},null,8,["value"]),o.createVNode(bt,{value:(a=e.y)==null?void 0:a.toFixed(0),prefix:"Y:"},null,8,["value"]),o.createVNode(bt,{value:(n=e.z)==null?void 0:n.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])])}}}),Dm=A._export_sfc(Tm,[["__scopeId","data-v-3d05468b"]]),Bm="data:image/png;base64,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",Vm={class:"nav-item"},Rm=["id","title"],Fm=o.defineComponent({__name:"ToolbarButton",props:["icon","tourkey","title","active"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",Vm,[o.createElementVNode("a",{id:`toolbar-${e.tourkey}`,class:o.normalizeClass(["nav-link",e.active?"active":null]),href:"#",title:e.title},[o.createElementVNode("i",{class:o.normalizeClass(["bi",e.icon])},null,2)],10,Rm)]))}}),Um={class:"toolbar"},zm={id:"menu",class:"nav nav-pills flex-column"},jm={class:"nav-item mt-2"},Gm={href:"https://giro3d.org",target:"_blank",title:"Piero, powered by Giro3D"},Hm=["src"],Zm=o.defineComponent({__name:"ToolBar",props:{active:{}},emits:["selected"],setup(e){const t=Ds();return(i,s)=>(o.openBlock(),o.createElementBlock("div",Um,[o.createElementVNode("ul",zm,[o.createElementVNode("li",jm,[o.createElementVNode("a",Gm,[o.createElementVNode("img",{src:o.unref(Bm),alt:"Piero, powered by Giro3D",class:"mb-3 w-100 p-1"},null,8,Hm)])]),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t),a=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[a.enabled?(o.openBlock(),o.createBlock(Fm,{active:i.active===a.key,key:a.key,tourkey:a.key,title:a.title,icon:a.icon,onClick:n=>i.$emit("selected",a.key)},null,8,["active","tourkey","title","icon","onClick"])):o.createCommentVNode("",!0)],64))),256))])]))}}),Wm=A._export_sfc(Zm,[["__scopeId","data-v-f84bccda"]]),qm=o.defineComponent({__name:"App",props:{getContext:{type:Function}},setup(e){const t=o.ref("datasets"),i=o.ref(1),s=o.ref(new A.Vector3(0,0,0)),a=new A.Vector2,n=o.ref(null),r=o.ref(null),l=o.ref(!1),h=o.ref(!0);let c=!1;const d=ae(),g=A.useCameraStore(),u=Zi(),f=Wi(),m=o.shallowRef(null),C=o.shallowRef(null),v=o.ref();o.onMounted(()=>{const P=d.getMainView(),U=d.getMinimapView();P&&M(P),U&&_(U),d.$onAction(({after:z,args:ut,name:St})=>{z(()=>{switch(St){case"setMainView":ut[0]===null?I():M(ut[0]);break;case"setMinimapView":ut[0]===null?b():_(ut[0]);break}})}),v.value=setInterval(()=>{c&&(W(a),et(a),c=!1)},50),setTimeout(()=>{h.value=!1},1e3),Tt.dispatchEvent({type:"ready"})}),o.onUnmounted(()=>{v.value!=null&&(clearInterval(v.value),v.value=void 0),b(),I()});function I(){var P;C.value&&C.value.setMainInstance(null),(P=m.value)==null||P.dispose(),m.value=null}function b(){var P;(P=C.value)==null||P.dispose()}function M(P){const U=d.getMainView();if(U===null)throw new Error("mainview is null");m.value=new Zg(U),m.value.addEventListener("update",()=>{m.value&&(i.value=m.value.mainInstance.progress,l.value=m.value.mainInstance.loading)}),e.getContext().view=new Xg({camera:m.value.camera,instance:m.value.mainInstance}),C.value&&C.value.setMainInstance(P)}function _(P){C.value=new Jg(P),m.value&&C.value.setMainInstance(m.value.mainInstance)}function x(P){m.value&&(m.value.mainInstance.eventToCanvasCoords(P,a),c=!0)}function E(P){if(!m.value)return;const U=m.value.mainInstance,z=new at(P.crs,P.x,P.y,P.z).as(U.referenceCrs),St=Qe.fromCenterAndSize(z.crs,z.toVector2(),1e3,1e3).toBox3(P.z,P.z+200);m.value.camera.lookTopDownAt(St,!1)}function S(P,U){if(m.value==null||m.value.mainInstance==null||g.getNavigationMode()==="position-on-map"||g.isUserInteracting()||u.isUserDrawing()||f.isUserMeasuring())return;const z=m.value.picker.pick(m.value.mainInstance,P);if((z==null?void 0:z.point)!=null){const ut=z.point;s.value.x=ut.x,s.value.y=ut.y,s.value.z=ut.z}(z==null?void 0:z.feature)!=null?(r.value=z.feature.name,n.value=z.feature):(r.value=null,n.value=null),(z==null?void 0:z.pickResult)!=null?m.value.highlighter.highlightFromPick(z.pickResult):m.value.highlighter.clear()}function D(P){P===t.value?t.value=null:t.value=P}function W(P){if(m.value!=null){const U=m.value.picker.getMouseCoordinate(m.value.mainInstance,P);U&&(s.value.x=U.x,s.value.y=U.y,s.value.z=U.z)}}function et(P){if(m.value){if(g.getNavigationMode()==="position-on-map"||u.isUserDrawing()||f.isUserMeasuring())return;const U=m.value.picker.hasFeature(m.value.mainInstance,P);m.value.mainInstance.domElement.style.cursor=U?"pointer":"auto"}}return(P,U)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[h.value?(o.openBlock(),o.createBlock(Gu,{key:0})):o.createCommentVNode("",!0),o.createVNode(Wu,{id:"main-view",onClick:U[0]||(U[0]=z=>S(z)),onMousemove:x,class:"mainview"}),n.value!=null?(o.openBlock(),o.createBlock(Bu,{key:1,onClose:U[1]||(U[1]=z=>n.value=null),attributes:n.value.attributes,name:n.value.name,parent:n.value.parent,point:n.value.point,class:"component attribute-panel"},null,8,["attributes","name","parent","point"])):o.createCommentVNode("",!0),o.createVNode(Dm,{class:"component statusbar",x:s.value.x,y:s.value.y,z:s.value.z},null,8,["x","y","z"]),o.createVNode(Wm,{id:"toolbar",active:t.value,class:"component toolbar",onSelected:U[2]||(U[2]=z=>D(z))},null,8,["active"]),o.createVNode(Yu,{class:"component minimap"}),t.value!=null?(o.openBlock(),o.createBlock(wm,{key:2,class:"component panel",selected:t.value},null,8,["selected"])):o.createCommentVNode("",!0),o.createVNode(Om,{progress:i.value,class:"loading-indicator"},null,8,["progress"]),o.createVNode(Lm,{id:"address-search",class:"search","onUpdate:poi":E}),o.createVNode($u,{class:"navigation-buttons"}),o.createVNode(iu)],64))}}),Ym=A._export_sfc(qm,[["__scopeId","data-v-876eb3a3"]]);async function Jm(e){let t;if(typeof e.configuration=="string"){console.info(`Loading remote configuration from: ${e.configuration}`);const i=await A.loadRemoteConfiguration(e.configuration);console.info("Remote configuration successfuly loaded."),t=i}else t=e.configuration;return t}async function Xm(e){const t=await Jm(e);await A.setConfiguration(t),console.info("Configuration loaded."),e.dynamicStyles&&A.setDynamicStyles(e.dynamicStyles),A.Download.setBaseUrl(e.baseUrl);const i=kt.createPinia();A.useModuleStore(i).setLoadedModules(e.modules??[]);const a=Oa(i),n={analysis:new pn(a),baseURL:new URL(A.Download.getBaseUrl()),bookmarks:new vn(ka(i)),configuration:t,datasets:new Og(A.useDatasetStore(i)),events:Tt,notifications:new xg(Rt(i))},r=n,l=[];if(e.modules)for(const c of e.modules){const d=Promise.resolve(c.initialize(r));l.push(d),console.info(`Module ${c.name} initialized.`)}await Promise.all(l);const h=o.createApp(Ym,{getContext:()=>n});h.use(i),h.mount(e.container)}exports.Fetcher=A.Fetcher;exports.fillObject3DUserData=A.fillObject3DUserData;exports.Bookmark=Dt;exports.Projections=ji;exports.createPieroApp=Xm;
14
+ <i class="bi bi-keyboard"></i> Up/Down/Left/Right: move forward/backward/left/right`;break}case"position-on-map":{l="Position on map",r=`<i class="bi bi-hand-index-thumb"></i> Left-click on the map to move to First Person view on the ground.<br>
15
+ Cancel with right-click or Escape`;break}default:return o}i.push(new X("Navigation",`Navigation mode set to <strong>${l}</strong>.<br>${r}`,"success"))});function a(){s.value!=="position-on-map"?s.value="position-on-map":s.value="orbit"}return(o,l)=>(n.openBlock(),n.createElementBlock("div",Gg,[n.createElementVNode("div",Hg,[l[2]||(l[2]=n.createElementVNode("i",{title:"Free navigation",class:"mx-2 bi bi-camera-reels-fill"},null,-1)),n.createVNode(A._sfc_main,{"model-value":s.value==="first-person","onUpdate:modelValue":l[0]||(l[0]=r=>s.value=r?"first-person":"orbit")},null,8,["model-value"]),l[3]||(l[3]=n.createElementVNode("i",{title:"First person view",class:"bi bi-universal-access"},null,-1)),l[4]||(l[4]=n.createElementVNode("div",{class:"vr mx-2"},null,-1)),n.createElementVNode("button",{class:n.normalizeClass(["btn btn-sm btn-outline-secondary",s.value==="position-on-map"?"active":null]),"aria-pressed":s.value==="position-on-map","data-bs-toggle":"button",title:"Position on map",onClick:a},[...l[1]||(l[1]=[n.createElementVNode("i",{class:"fg-position-man"},null,-1)])],10,Zg)])]))}}),qg=A._export_sfc(Wg,[["__scopeId","data-v-b890a4be"]]),Yg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABXCAYAAAC+73jDAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio7gBw97HPKo1A06fo/gSEnUkzgftjkMaf9+3uk1IJxTLs2q10pA9uzSIYwm+sFM+eADsobiez6VFocEKUXUubU6I5/5OHBG7lDlYmRrFJZ7wXP428MoLtIxkUBsYeRhpDILHAZ9PouqW7s+YdnpDpsrDVqIDjv2aH7sc8PvbQX3qMiurARWtTmAjlWSdggHI4FGRsPQDczaYhJ8yL9/OpF+mhJaGNqk9l0AAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA5daVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjM5NTZmNTIxLWU2YjAtNGRiNi1hMTk2LWM3ZjkwZjE1YzYwZiIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMTVlNTExOS1lZDExLTRjY2YtOGEzYi1lN2QyZDJkZjBkNzUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4NjYzMjQ3ZS1mMmVjLTQwZmQtYjE3OC03NzFhNjEwMTRmYWMiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjM3MjAyNDAyIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjE3KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzoxNyswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFiYjlmOWJiLWYyYzAtNGM4Yi1iYjgxLTU1ODE4NjY0NmQ2YiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDMtMTlUMTQ6NDc6MjYrMDE6MDAiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTUwOTQ2YzYtODBkMy00MmI4LTgwOTUtZDcwYTE3MjNlNDM1IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6MTcrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+wSyPngAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAywAAAMsABKGRa2wAAAAd0SU1FB+kJFAsbEeAnRtoAACAASURBVHja7Z15mBXVnfc/p6ru0vf2vi/0ytqsoiIgKiogxp1EMkFnjJqocTIzmSWTmUzezCRxljca500m+6hjYsYlibtRcV/iBiqICMjaNND0vnfftarO+0dVX7qhl6ru24hwf8/TDw/Q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",Jg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACTCAYAAABszOBRAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBBEsMgCLz7ij5BBBWeYxo70x/0+QUhnSTTnXGzsmRF0/y8X+lhKECJaucmrWUFCUkZKjg7xmLItHhBWnhwrSfBMIqWTMee4wc46vAL8M9QVU9B/AxjuxpCkc+3oDgIbaKiYj8miiAsbkAEDL9WbsL9fIVt5ivYVzJiWbNYmHu3PXV9vb3qOVjKRMCsjMjeg7ZqwqFClLWgjaANpruyt4I/yL93OpC+DARZTFnCKNgAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM0N2M4ZTNiLTg2ZjUtNDM3NC04Mzg2LTBjMGQwNGE1YTQxNSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNDVjNDdmMC1mODVmLTQ3NzAtYjVlNy1hMmU0ZDFmNWUwNzkiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMDVhMDI1NS05NzY5LTRhZGQtYjQ3Yy1iOGU4MjlkZDdlNDciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjU4NjgwODMzIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjM4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzozOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmYwMzU4MmQ4LWUxMTgtNGY1Yi1hNDdiLTlkYjM4ZjIxNTk2ZiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI3OjM4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Ptv0Ik4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfpCRQLGyZYmuPVAAAgAElEQVR42u2dd3gc5bX/P2dmd1Use9eybIMNXorp/VJCCZAAAUy4kOQmJEAS4ELosPSA6WB6y8iEml9CAjcJhB4IJgQIhBAw3XSDgTFuuMhaWX135vz+eF/Z69VIVrMsGZ3nmcfyzpaZd77v6UX4GpLrerEwpASIqzISWA9YFxgNjAFKgCqgvOijCiwGmoA6+/dXwDxgrgj1QGtpqbQ0NZ2ufI1J1vYbjMU8NwhIqjIW2BHYBtgE2BiYACR7uR5tAAotyHzgE+BD4G3gAxGWqmaWDQFrsN+UeFWqTAS+CewFbAlsCDir+GjOcqJllis1AYuARgugLwuAVAUMs3+vZ7lcOVABjCjgds3Ax8C7wD+B/4jwhWqmcQhYg4K89YA9gUOBnboApAXAXGAm8J59+F8CNUBWhHrVTFM3OWOFKikgBYwFJlpQbwuMAzayYP0E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",Xg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcQwCPvPFDdCAnnAOOlLug1u/HMKrdqqlmIIRg4hrL/vFj4DlHLIpUnVWiOQNSt1JBINfecU88475kNL93o4BUKJEdmuUr3/qKfTwEJHVi5GMrsw3QXN7i8PI3+Ix0SEZHEjdSMmE5IbdPtWrCrt+oVpjXeInTBom0lHrUymPe+5YXtLwTtMtHLiCGYWG4DHKYE7EgWjgMaEhpE3cGHySbCQtz0dCH8eW1rDzUi1YAAAAYNpQ0NQSUNDIHByb2ZpbGUAAHicfZE7SMNAHMa/pkp9VBzMIMUhQ3Wyi4p0rFUoQoVQK7TqYB59QZOGJMXFUXAtOPhYrDq4OOvq4CoIgg8Qd8FJ0UVK/F9SaBHjwXE/vrvv4+47gGtWFc3qSQCabpuZVFLI5VeF0Cv6wWMQEcQlxTLmRDEN3/F1jwBb72Isy//cn2NILVgKEBCIE4ph2sQbxLObtsF4n5hXypJKfE48adIFiR+ZLnv8xrjkMscyeTObmSfmiYVSF8tdrJRNjXiGOKpqOuVzOY9VxluMtWpdad+TvTBc0FeWmU5zDCksYgkiBMioo4IqbMRo1UmxkKH9pI8/4vpFcsnkqkAhxwJq0CC5frA/+N2tVZye8pLCSaD3xXE+xoHQLtBqOM73seO0ToDgM3Cld/y1JhD/JL3R0aJHwPA2cHHd0eQ94HIHGH0yJFNypSBNrlgE3s/om/LAyC0wsOb11t7H6QOQpa7SN8DBITBRoux1n3f3dff275l2fz/Q5HLMN5rr0QAADXppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NGVjMGMxNzUtNmE3NS00OGJlLTllZGYtOGNlNDQyM2ZmMmU0IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU1YmZlYWVjLWNhZDAtNGZlNi1iMGJkLTM2ODEyMWNmYWFmMSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjliODczYjYyLTY4ZDUtNDU3ZS1iNzVkLWFmN2Y3MGU5YTkzMyIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3NTgzNjc2NzMwNDY0MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjU6MDk6MjBUMTM6Mjc6NTIrMDI6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjUyKzAyOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OGJhNTc0MjgtZDMyOS00MzUzLWI2YjMtYzk1YjRmYzg1MzQ0IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6NTMrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+fJLSCgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJFAsbNdwkogsAACAASURBVHja7J13eBRV98c/syVt03shvRA6KbQkdGkCERAQEMuLxgoWFAs2FLF3BQuCgoqIiPTeew+EXkIICek92ZRt8/sj+QHJbpJNsiHhfTnPw6PMDHfn3rnfe/o5Anep2ch1/hQrwA/wBtwAZ8AesK36r7TqDzX+Xwdoqv5fW/X3AqAYyKv6kwmkAElZcQuVd1e7eUi4uwQmAYIP0B4IAYKr/j8UcL9ljZtjrcWqP1nAeeAMkAhcBM5kxS28evfr3AXI7QaDAxAGhAM9gRjAqer0b03rqaniOnuBw8BR4FhW3MK8u1/xLkBMLSZFAP2BYUBXwPwOXDsRUAGngLXAHuBIVtzC4rtf+S5AGgoKD6AvcD8wELADJP9l0xSBImAX8DewMytuYerdr38XILWBwhUYCjwERAFWphpbi0iFKFIO+Mkt8JRb4SyzwlIi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",Kg="data:image/png;base64,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",Qg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAAtCAYAAADr0SSvAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBRDsMgCP3nFDuCgFo4jm1tshvs+EOhS9vsJT6QR54I9M/7gNcAYYZcFqlaazJkzUrNEkmONhlTnjyxnRre60B7CGQltsh+lRr9Zx1/Bh6aZeViJFsI613QHP7yMIqHeExElsQgoGHE5AKGQfNvpaqyXL+w9nSH+IFBx0Y6amV17XnPi21vL/YOE3VGTsbM4gPwOAW4WaLGVrBGtIaRizHOVvSF/NvTCfgCF5hawfSmwyAAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM4NjdiYjcyLWU1NWEtNGZkZS1hYTlmLTdiYzZhNTJhNGIzZSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0NWE1ZGEyYy01YjhmLTQ1ZTQtOGJkYy01N2Q0ZmJkZGQ1NWUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplN2YyOWQyZS1kMDg1LTQ4ZWYtODYyZS0wZDM1NTRjOGVlYWQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3Njk4OTQxNjMxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI4OjE4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyODoxOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZlNDAxNmZmLWZkZDItNDA4MS05YjU2LWY2ODYzYjk1Y2E1ZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI4OjE4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pl6bkfoAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfpCRQLHBI2b4GnAAAU8UlEQVR42u2deXwV1dnHv/feDCQkyCpQFtkXZS0KAi8UpSqgqCMuMB3FQa0bBV+LS1GLSNVirdoWS221dWy9jlIsA1YQRBZFVFbZ14Y1IEsgELKQIbnvH+eZZnLfBIkmrPf5fPKZ3Jk55zxz5jznWc7vOROKxWJfTJ21uu1T0dUa5zHdfFmDwvGj+uUBLUKhUF78dU23uwPTyij+IvB7YANwHOjkuZZ3JjyXptvNgU+BecBdnmsdJ0EnTUlA3VgsVmtztnded0Th8UKAGkCorLEGNAAOyoALUoYc1wOFQOwMerQbgFXAiIRwfDcBSVD5aKPnWjeVMlOHgL+KcBRpul0DuBpIB/KB64Fc4F3PtfZLGQ0YBHQQzfM1MMtzrSJNtxsDPYCVwIXAlcAe4D3PtXICbfYA+gobn3qutSjAUwPAA74Aemm6/bHnWkWl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";var $g={"@loaders.gl/core":{description:"The core API for working with loaders.gl loaders and writers",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/csv":{description:"Framework-independent loader for CSV and DSV table formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/geopackage":{description:"GeoPackage data loaders",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/las":{description:"Framework-independent loader for the LAS and LAZ formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/shapefile":{description:"Loader for the Shapefile Format",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@popperjs/core":{description:"Tooltip and Popover Positioning Engine",homepage:"https://github.com/popperjs/popper-core",license:"MIT"},"@trevoreyre/autocomplete-vue":{description:"Simple autocomplete component in vanilla JS and Vue",license:"MIT"},bootstrap:{description:"The most popular front-end framework for developing responsive, mobile first projects on the web.",homepage:"https://getbootstrap.com/",license:"MIT"},"bootstrap-icons":{description:"Official open source SVG icon library for Bootstrap",homepage:"https://icons.getbootstrap.com/",license:"MIT"},"camera-controls":{homepage:"https://github.com/yomotsu/camera-controls",license:"MIT"},"chart.js":{description:"Simple HTML5 charts using the canvas element.",homepage:"https://www.chartjs.org",license:"MIT"},"chroma-js":{description:"JavaScript library for color conversions",homepage:"https://github.com/gka/chroma.js",license:"(BSD-3-Clause AND Apache-2.0)"},"d3-dsv":{description:"A parser and formatter for delimiter-separated values, such as CSV and TSV",homepage:"https://d3js.org/d3-dsv/",license:"BSD-3-Clause"},"font-gis":{description:"Icon font set for use with GIS and spatial analysis tools",homepage:"https://github.com/Viglino/font-gis",license:"Apache-2.0"},"openbim-components":{homepage:"https://ifcjs.github.io/components/",license:"MIT"},pinia:{description:"Intuitive, type safe and flexible Store for Vue",homepage:"https://github.com/vuejs/pinia#readme",license:"MIT"},proj4:{description:"Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.",homepage:"https://proj4js.github.io/proj4js/",license:"MIT"},"regenerator-runtime":{description:"Runtime for Regenerator-compiled generator and async functions.",homepage:"https://github.com/facebook/regenerator/tree/main/packages/runtime",license:"MIT"},"shepherd.js":{description:"Guide your users through a tour of your app.",homepage:"https://shepherdjs.dev",license:"MIT"},"web-ifc":{description:"ifc loading on the web",homepage:"https://ifcjs.github.io/web-ifc/docs/"}};const td={class:"list-group my-3"},ed={href:"https://oslandia.com",target:"_blank",class:"list-group-item"},id={class:"d-flex w-100 justify-content-between"},sd=["src"],ad={href:"https://www.bpifrance.com/",target:"_blank",class:"list-group-item"},nd={class:"d-flex w-100 justify-content-between"},od=["src"],rd={class:"list-group-item"},ld={class:"d-flex w-100 justify-content-between"},hd=["src"],cd={class:"list-group-item"},gd={class:"d-flex w-100 justify-content-between"},dd={class:"text-end"},ud=["src"],Ad=["src"],Cd=["href"],md={key:0,class:"blockquote fw-light"},fd=n.defineComponent({__name:"AboutPanel",setup(e){const t=$g,i=A.useModuleStore().getLoadedModules();return(s,a)=>(n.openBlock(),n.createElementBlock("div",null,[a[4]||(a[4]=n.createStaticVNode('<p data-v-4397f0a3><a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-4397f0a3>Piero</a> is a fully-configurable open-source web application for 3D visualization. It is powered by <a href="https://giro3d.org" target="_blank" data-v-4397f0a3>Giro3D</a>, a versatile framework to visualize geospatial data in the browser. </p><h5 class="mt-3" data-v-4397f0a3>Going further</h5><p data-v-4397f0a3> If you wish to run your own instance of Piero, or if you wish to contribute to this application, head up to <a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-4397f0a3>our GitLab project</a> for more info. </p><h5 data-v-4397f0a3>Contributors</h5><p data-v-4397f0a3><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/CONTRIBUTORS.md" data-v-4397f0a3>Brought to you by the Giro3D contributors.</a></p><h5 data-v-4397f0a3>Sponsors</h5>',6)),n.createElementVNode("div",td,[n.createElementVNode("a",ed,[n.createElementVNode("div",id,[a[0]||(a[0]=n.createElementVNode("span",null,"Oslandia",-1)),n.createElementVNode("img",{src:n.unref(Kg),class:"logo",alt:"Oslandia"},null,8,sd)])]),n.createElementVNode("a",ad,[n.createElementVNode("div",nd,[a[1]||(a[1]=n.createElementVNode("span",null,"BPI France",-1)),n.createElementVNode("img",{src:n.unref(Yg),class:"logo",alt:"BPI France"},null,8,od)])]),n.createElementVNode("span",rd,[n.createElementVNode("div",ld,[a[2]||(a[2]=n.createElementVNode("span",null,"Funded by the French government as part of France 2030",-1)),n.createElementVNode("img",{src:n.unref(Jg),class:"logo",alt:"France 2030"},null,8,hd)])]),n.createElementVNode("span",cd,[n.createElementVNode("div",gd,[a[3]||(a[3]=n.createElementVNode("span",null,"Funded by the European Union - Next Generation EU as part of the France Relance plan",-1)),n.createElementVNode("div",dd,[n.createElementVNode("img",{src:n.unref(Xg),class:"logo",alt:"France Relance"},null,8,ud),n.createElementVNode("img",{src:n.unref(Qg),class:"logo",alt:"European Union - Next Generation EU"},null,8,Ad)])])])]),a[5]||(a[5]=n.createStaticVNode('<p data-v-4397f0a3> If you wish to sponsor Giro3D and Piero, you can contact us at <a href="mailto:infos+3d@oslandia.com" data-v-4397f0a3>infos+3d@oslandia.com</a>. </p><h5 data-v-4397f0a3>License</h5><p data-v-4397f0a3><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/LICENSE" data-v-4397f0a3>MIT License</a></p><h5 data-v-4397f0a3>Credits</h5><p data-v-4397f0a3>Data and services used from:</p><ul data-v-4397f0a3><li data-v-4397f0a3><a target="_blank" href="https://ign.fr/" data-v-4397f0a3>IGN</a> (Imagery, Elevation model, LIDAR data, Elevation API) </li><li data-v-4397f0a3><a target="_blank" href="https://www.grandlyon.com/" data-v-4397f0a3>Métropole Grand Lyon</a> (Imagery, Elevation model, overlay layers) </li><li data-v-4397f0a3><a target="_blank" href="https://www.openstreetmap.org" data-v-4397f0a3>OpenStreetMap</a> (Imagery) </li><li data-v-4397f0a3><a target="_blank" href="https://adresse.data.gouv.fr/" data-v-4397f0a3>adresse.data.gouv.fr</a> (Geocoding API) </li><li data-v-4397f0a3><a target="_blank" href="https://cadastre.data.gouv.fr" data-v-4397f0a3>Données cadastrales ouvertes</a> (Cadastre) </li><li data-v-4397f0a3><a target="_blank" href="https://oslandia.com" data-v-4397f0a3>Oslandia</a> (CityJSON reconstructions, overlay layers) </li><li data-v-4397f0a3><a target="_blank" href="https://bimdata.io/" data-v-4397f0a3>BIMData</a> (IFC model)</li></ul><p data-v-4397f0a3>Third-parties:</p>',7)),n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(Object.entries(n.unref(t)),([o,l])=>(n.openBlock(),n.createElementBlock("li",{key:o},[n.createElementVNode("a",{target:"_blank",href:l.homepage},n.toDisplayString(o)+" ("+n.toDisplayString(l.license)+")",9,Cd),l.description?(n.openBlock(),n.createElementBlock("blockquote",md,n.toDisplayString(l.description),1)):n.createCommentVNode("",!0)]))),128))]),a[6]||(a[6]=n.createElementVNode("p",null,"Loaded modules:",-1)),n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(i),o=>(n.openBlock(),n.createElementBlock("li",{key:o.name},[n.createElementVNode("code",null,n.toDisplayString(o.id),1)]))),128))]),a[7]||(a[7]=n.createElementVNode("hr",null,null,-1))]))}}),Id=A._export_sfc(fd,[["__scopeId","data-v-4397f0a3"]]),Y=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function pd(){const e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0,s=Math.random()*4294967295|0;return(Y[e&255]+Y[e>>8&255]+Y[e>>16&255]+Y[e>>24&255]+"-"+Y[t&255]+Y[t>>8&255]+"-"+Y[t>>16&15|64]+Y[t>>24&255]+"-"+Y[i&63|128]+Y[i>>8&255]+"-"+Y[i>>16&255]+Y[i>>24&255]+Y[s&255]+Y[s>>8&255]+Y[s>>16&255]+Y[s>>24&255]).toLowerCase()}const Qs=wt.defineStore("analysis",()=>{const e=n.ref([]);function t(s){const a={collapsible:!0,component:n.shallowRef(s.component),icon:s.icon,id:pd(),name:s.name};e.value.push(a)}function i(){return e.value}return{getTools:i,registerTool:t}}),vd=["id"],yd={class:"accordion-header"},bd=["data-bs-target","aria-controls"],Md=["id"],Ed={class:"accordion-body"},wd=n.defineComponent({__name:"ToolWrapper",props:{collapsible:{type:Boolean},icon:{},id:{},title:{}},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",{class:"accordion-item",id:t.id},[n.createElementVNode("h2",yd,[n.createElementVNode("button",{class:"accordion-button",type:"button","data-bs-toggle":"collapse","data-bs-target":`#${t.id}-collapse`,"aria-expanded":"false","aria-controls":`${t.id}-collapse`},[t.icon?(n.openBlock(),n.createElementBlock("i",{key:0,class:n.normalizeClass(["bi icon",t.icon])},null,2)):n.createCommentVNode("",!0),n.createTextVNode(" "+n.toDisplayString(t.title),1)],8,bd)]),n.createElementVNode("div",{id:`${t.id}-collapse`,class:"accordion-collapse collapse","data-bs-parent":"#accordionExample"},[n.createElementVNode("div",Ed,[n.renderSlot(t.$slots,"default",{},void 0,!0)])],8,Md)],8,vd))}}),Od=A._export_sfc(wd,[["__scopeId","data-v-acce0d55"]]),xd={class:"accordion",id:"analysis-accordion"},_d={key:0,class:"warning"},kd=n.defineComponent({__name:"AnalysisPanel",setup(e){const t=Qs();return(i,s)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",xd,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getTools(),a=>(n.openBlock(),n.createBlock(Od,{id:a.id,key:a.id,title:a.name,icon:a.icon,collapsible:a.collapsible},{default:n.withCtx(()=>[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(a.component)))]),_:2},1032,["id","title","icon","collapsible"]))),128))]),n.unref(t).getTools().length===0?(n.openBlock(),n.createElementBlock("div",_d,"No analysis tool registered.")):n.createCommentVNode("",!0)],64))}}),Sd=A._export_sfc(kd,[["__scopeId","data-v-48d1d631"]]),Nd={},Pd={class:"vstack gap-1 flex-grow-0 flew-shrink-0"};function Td(e,t){return n.openBlock(),n.createElementBlock("fieldset",Pd,[t[0]||(t[0]=n.createElementVNode("hr",null,null,-1)),n.renderSlot(e.$slots,"default")])}const Ve=A._export_sfc(Nd,[["render",Td]]),Re=n.defineComponent({__name:"ImportButton",props:{icon:{},text:{},title:{}},emits:["import"],setup(e,{emit:t}){const i=t,s=n.ref(!1),a=n.ref(null);function o(g){if(g){const d=[];for(const C of g)d.push(C);i("import",d)}}function l(g){const d=g.target.files;o(d)}function r(g){s.value=!0,g.preventDefault()}function h(g){s.value=!1,g.preventDefault()}function c(g){g.preventDefault(),g.dataTransfer&&(g.dataTransfer.dropEffect="copy")}function u(g){var C;s.value=!1;const d=(C=g.dataTransfer)==null?void 0:C.files;o(d),g.preventDefault()}return(g,d)=>(n.openBlock(),n.createElementBlock("div",{draggable:"true",onDragover:c,onDragenter:r,onDragleave:h,onDrop:u},[n.createVNode(A._sfc_main$1,{title:g.title,text:g.text,icon:g.icon??"bi-box-arrow-left",onClick:d[0]||(d[0]=C=>a.value.click()),class:n.normalizeClass(["w-100",s.value?"btn-primary":"btn-outline-secondary"])},null,8,["title","text","icon","class"]),n.createElementVNode("input",{ref_key:"hiddenInput",ref:a,class:"btn btn-outline-secondary d-none",type:"file",onInput:l,multiple:"true"},null,544)],32))}}),Ld={class:"border p-2"},Dd={class:"float-none w-auto form-text mb-0 px-2"},Bd={key:0,class:"form-text mt-0 mx-2"},Vd=["id","aria-label"],Rd=["value"],Ud={key:1,class:"form-text mt-0 mx-2"},$s=n.defineComponent({__name:"DropdownView",props:{current:{},descriptionPosition:{},items:{},label:{}},emits:["updated:current"],setup(e,{emit:t}){const i=e,s=t,a=n.ref(i.current);function o(r){const h=i.items[r];a.value=h,s("updated:current",h)}const l=A.MathUtils.generateUUID();return(r,h)=>(n.openBlock(),n.createElementBlock("fieldset",Ld,[n.createElementVNode("legend",Dd,n.toDisplayString(r.label),1),r.descriptionPosition==="top"&&a.value!==null&&a.value.description?(n.openBlock(),n.createElementBlock("div",Bd,n.toDisplayString(a.value.description),1)):n.createCommentVNode("",!0),n.createElementVNode("select",{id:n.unref(l),class:"form-select","aria-label":r.label,onInput:h[0]||(h[0]=c=>o(c.target.selectedIndex))},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(r.items,(c,u)=>(n.openBlock(),n.createElementBlock("option",{key:u,value:u},n.toDisplayString(c.name),9,Rd))),128))],40,Vd),r.descriptionPosition!=="top"&&a.value!==null&&a.value.description?(n.openBlock(),n.createElementBlock("div",Ud,n.toDisplayString(a.value.description),1)):n.createCommentVNode("",!0)]))}}),Fd=n.defineComponent({__name:"VisibilityControl",props:{visible:{type:Boolean}},emits:["update:visible"],setup(e){return(t,i)=>(n.openBlock(),n.createBlock(A._sfc_main,{"model-value":t.visible,"onUpdate:modelValue":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["model-value"]))}}),Yt=A._export_sfc(Fd,[["__scopeId","data-v-7c3ff3bf"]]),zd=n.defineComponent({__name:"EmptyIndicator",props:{text:String},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",null,n.toDisplayString(e.text),1))}}),Ue=A._export_sfc(zd,[["__scopeId","data-v-a385fce5"]]),jd={class:"list-group-item item"},Gd={class:"d-flex"},Hd=["title"],Zd={class:"icons"},Wd=["data-bs-target"],qd=["id"],Yd={key:1,class:"table table-striped table-sm table-responsive-sm"},Jd=n.defineComponent({__name:"AnnotationItem",props:{annotation:{},visible:{type:Boolean}},emits:["edit","stop-edit","delete","download","update:visible","zoom"],setup(e){const t=e,i=n.ref(t.annotation.isEditing),s=()=>{i.value=t.annotation.isEditing};return n.onMounted(()=>{t.annotation.addEventListener("isEditing",s)}),n.onUnmounted(()=>{t.annotation.removeEventListener("isEditing",s)}),(a,o)=>(n.openBlock(),n.createElementBlock("li",jd,[n.createElementVNode("div",Gd,[n.createVNode(Yt,{visible:a.visible,"onUpdate:visible":o[0]||(o[0]=l=>a.$emit("update:visible",l))},null,8,["visible"]),n.createElementVNode("a",{class:"title",title:a.annotation.title,href:"#",onClick:o[1]||(o[1]=l=>a.$emit("zoom"))},n.toDisplayString(a.annotation.title),9,Hd),n.createElementVNode("div",Zd,[n.createElementVNode("a",{href:"#",class:"icon",title:"Attribute table","data-bs-toggle":"collapse","data-bs-target":`#collapse-${a.annotation.uuid}`,"aria-expanded":"false","aria-controls":"`#collapse-${annotation.uuid}`"},[...o[5]||(o[5]=[n.createElementVNode("i",{class:"bi bi-card-list"},null,-1)])],8,Wd),n.createElementVNode("a",{href:"#",class:"icon",title:"Edit geometry (right-click to exit edition, or press Escape to cancel modifications)",onClick:o[2]||(o[2]=l=>i.value?a.$emit("stop-edit"):a.$emit("edit"))},[n.createElementVNode("i",{class:n.normalizeClass(`bi bi-pencil ${i.value?"text-primary":""}`)},null,2)]),n.createElementVNode("a",{href:"#",class:"icon",title:"Download...",onClick:o[3]||(o[3]=l=>a.$emit("download"))},[...o[6]||(o[6]=[n.createElementVNode("i",{class:"bi bi-download"},null,-1)])]),n.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:o[4]||(o[4]=l=>a.$emit("delete"))},[...o[7]||(o[7]=[n.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])]),n.createElementVNode("div",{class:"collapse m-2",id:`collapse-${a.annotation.uuid}`},[Object.entries(a.annotation.properties).length===0?(n.openBlock(),n.createBlock(Ue,{key:0,text:"No properties"})):(n.openBlock(),n.createElementBlock("table",Yd,[o[8]||(o[8]=n.createElementVNode("thead",null,[n.createElementVNode("tr",null,[n.createElementVNode("th",null,"Key"),n.createElementVNode("th",null,"Value")])],-1)),n.createElementVNode("tbody",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(Object.entries(a.annotation.properties),([l,r])=>(n.openBlock(),n.createBlock(Ks,{key:l,"attr-name":l,"attr-value":r},null,8,["attr-name","attr-value"]))),128))])]))],8,qd)]))}}),Xd=A._export_sfc(Jd,[["__scopeId","data-v-364a81a5"]]),rs=[{name:"Default",value:"normal"},{description:"Will only pick points from the map and not to any 3D object",name:"Map only",value:"mapOnly"},{description:"Will only pick points from 3D objects, and not from the map",name:"3D objects only",value:"objectsOnly"}],Kd={class:"d-flex flex-column h-100"},Qd={class:"list-group list-group-flush flex-fill overflow-auto"},$d=n.defineComponent({__name:"AnnotationPanel",setup(e){const t=bi(),i=A.useCameraStore(),s=n.ref(t.getAnnotationMode());n.watch(s,c=>{t.setAnnotationMode(c)});function a(c){const u=c.toGeoJSON();A.Download.downloadAsJson(u,`annotation-${c.title}.json`)}function o(){const c=Ws.toCollection(t.getAnnotations());A.Download.downloadAsJson(c,"annotations.json")}function l(c){i.lookTopDownAt(c.object)}function r(c){t.importAnnotationsFiles(c)}function h(c){s.value=c==null?void 0:c.value}return(c,u)=>(n.openBlock(),n.createElementBlock("div",Kd,[n.unref(t).count===0?(n.openBlock(),n.createBlock(Ue,{key:0,text:"No annotations"})):n.createCommentVNode("",!0),n.createElementVNode("ul",Qd,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getAnnotations(),g=>(n.openBlock(),n.createBlock(Xd,{key:g.title,annotation:g,visible:g.visible,"onUpdate:visible":()=>{g.visible=!g.visible,c.$forceUpdate()},onEdit:d=>n.unref(t).edit(g),onStopEdit:u[0]||(u[0]=d=>n.unref(t).stopEdition()),onDelete:d=>n.unref(t).remove(g),onDownload:d=>a(g),onZoom:d=>l(g)},null,8,["annotation","visible","onUpdate:visible","onEdit","onDelete","onDownload","onZoom"]))),128))]),n.createVNode(Ve,{disabled:n.unref(t).isUserDrawing(),id:"annotations-fieldset"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main,{"model-value":n.unref(t).showLabels(),"onUpdate:modelValue":u[1]||(u[1]=g=>n.unref(t).setShowLabels(g)),title:"show labels"},{default:n.withCtx(()=>[...u[6]||(u[6]=[n.createTextVNode("Show annotation labels",-1)])]),_:1},8,["model-value"]),n.createVNode($s,{label:"Picking mode","description-position":"top",current:n.unref(rs)[0],items:n.unref(rs),"onUpdated:current":u[2]||(u[2]=g=>h(g)),class:"mb-2"},null,8,["current","items"]),n.createVNode(A._sfc_main$1,{title:"Add point annotation",text:"New points",icon:"bi-pin",class:"btn-primary",onClick:u[3]||(u[3]=g=>n.unref(t).createPoint())}),n.createVNode(A._sfc_main$1,{title:"Add line annotation",text:"New line",icon:"bi-bezier2",class:"btn-primary",onClick:u[4]||(u[4]=g=>n.unref(t).createLine())}),n.createVNode(A._sfc_main$1,{title:"Add polygon annotation",text:"New polygon",icon:"bi-heptagon",class:"btn-primary",onClick:u[5]||(u[5]=g=>n.unref(t).createPolygon())}),n.createVNode(A._sfc_main$1,{title:"Export annotations to GeoJSON",text:"Export annotations",icon:"bi-box-arrow-right",class:"btn-outline-secondary",onClick:o}),n.createVNode(Re,{title:"Import annotation from GeoJSON",text:"Import annotations",onImport:r})]),_:1},8,["disabled"])]))}}),tu={key:0},eu={class:"modal-dialog"},iu={class:"modal-content"},su={class:"modal-header"},au={class:"modal-title fs-5",id:"exampleModalLabel"},nu={class:"modal-body"},ou={class:"modal-footer"},ru=n.defineComponent({__name:"ModalOverlay",props:{show:Boolean,title:String},setup(e){return(t,i)=>e.show?(n.openBlock(),n.createElementBlock("div",tu,[i[2]||(i[2]=n.createElementVNode("div",{class:"background"},null,-1)),n.createElementVNode("div",{class:n.normalizeClass(["modal","fade","d-block",e.show?"show":null]),id:"exampleModal",tabindex:"-1","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},[n.createElementVNode("div",eu,[n.createElementVNode("div",iu,[n.createElementVNode("div",su,[n.createElementVNode("h1",au,n.toDisplayString(e.title),1),n.createElementVNode("button",{type:"button",class:"btn-close",onClick:i[0]||(i[0]=s=>t.$emit("close")),"data-bs-dismiss":"modal","aria-label":"Close"})]),n.createElementVNode("div",nu,[n.renderSlot(t.$slots,"default",{},void 0,!0)]),n.createElementVNode("div",ou,[n.createElementVNode("button",{type:"button",onClick:i[1]||(i[1]=s=>t.$emit("close")),class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ")])])])],2)])):n.createCommentVNode("",!0)}}),lu=A._export_sfc(ru,[["__scopeId","data-v-1f7f2e97"]]),hu={class:"list-group-item item d-flex d-flex-end"},cu=n.defineComponent({__name:"BookmarkItem",props:["url","name"],emits:["delete","share","goto"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",hu,[n.createElementVNode("a",{class:"bookmark",href:"#",onClick:i[0]||(i[0]=s=>t.$emit("goto"))},n.toDisplayString(e.name),1),n.createElementVNode("a",{href:"#",class:"icon",title:"Share this bookmark",onClick:i[1]||(i[1]=s=>t.$emit("share"))},[...i[3]||(i[3]=[n.createElementVNode("i",{class:"bi bi-share"},null,-1)])]),n.createElementVNode("a",{href:"#",class:"icon",title:"Delete this bookmark",onClick:i[2]||(i[2]=s=>t.$emit("delete"))},[...i[4]||(i[4]=[n.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])]))}}),gu=A._export_sfc(cu,[["__scopeId","data-v-682112f6"]]),du={class:"input-group mb-3"},uu={class:"form-control text-truncate"},Au={class:"input-group-text",id:"basic-addon2"},Cu=n.defineComponent({__name:"ShareBookmarkModal",props:{url:{}},setup(e){function t(i){navigator.clipboard.writeText(i)}return(i,s)=>(n.openBlock(),n.createElementBlock("div",null,[s[2]||(s[2]=n.createElementVNode("p",null,"Use this link to share your bookmark",-1)),n.createElementVNode("div",du,[n.createElementVNode("span",uu,n.toDisplayString(i.url),1),n.createElementVNode("span",Au,[n.createElementVNode("a",{title:"Copy to clipboard",href:"#",class:"text-secondary",onClick:s[0]||(s[0]=()=>t(i.url))},[...s[1]||(s[1]=[n.createElementVNode("i",{class:"bi bi-clipboard"},null,-1)])])])])]))}});class kt extends A.EventDispatcher{constructor(i,s){super();y(this,"camera");y(this,"name");this.name=i,this.camera=s}static new(i,s){const o=new URL(s).searchParams.get("view");if(o===null)throw new Error("Could not deserialize bookmark");const l=JSON.parse(o),r=new A.Vector3(l.camera[0],l.camera[1],l.camera[2]),h=new A.Vector3(l.target[0],l.target[1],l.target[2]),c=new A.Vector3(l.focalOffset[0],l.focalOffset[1],l.focalOffset[2]),u=new Be(r,h,c);return new kt(i,u)}delete(){this.dispatchEvent({type:"delete"})}getUrl(){const i=A.Download.getBaseUrl()+"?",s=this.camera,a={camera:[s.camera.x,s.camera.y,s.camera.z],focalOffset:[s.focalOffset.x,s.focalOffset.y,s.focalOffset.z],target:[s.target.x,s.target.y,s.target.z]},o=new URL(i),l=o.searchParams;return l.set("tour","none"),l.set("view",JSON.stringify(a)),o}goTo(){this.dispatchEvent({type:"goto"})}}function mu(){const e=A.getConfig(),t=[];for(const i of e.bookmarks){const s=i.position,a=i.target,o=i.focalOffset,l=i.title,r=new Be(new A.Vector3(s.x,s.y,s.z),new A.Vector3(a.x,a.y,a.z),new A.Vector3(o.x,o.y,o.z));t.push(new kt(l,r))}return t}const ta=wt.defineStore("bookmarks",()=>{const e=n.ref(new Set(mu())),t=n.computed(()=>e.value.size);function i(l){e.value.add(l),bt.dispatchEvent({type:"bookmark-added",value:l})}function s(l){e.value.delete(l),bt.dispatchEvent({type:"bookmark-removed",value:l})}function a(){e.value.clear()}function o(){return[...e.value]}return{add:i,clear:a,count:t,getBookmarks:o,remove:s}}),fu={class:"d-flex flex-column h-100"},Iu={class:"list-group list-group-flush flex-fill overflow-auto"},pu=n.defineComponent({__name:"BookmarkPanel",setup(e){const t=n.ref(!1),i=n.ref(null),s=n.ref(null),a=Pt(),o=ta(),l=A.useCameraStore();function r(){const f=window.prompt("Bookmark name","New bookmark");if(f!=null){const m=new kt(f,l.getCameraPosition());o.add(m)}}function h(){const f=[];for(const m of o.getBookmarks())f.push({title:m.name,url:m.getUrl().toString()});A.Download.downloadAsJson(f,"bookmarks.json")}function c(f){l.setCameraPosition(f.camera)}function u(f){for(const m of f)g(m)}async function g(f){const m=await f.text(),v=JSON.parse(m),I=new Set(o.getBookmarks().map(O=>O.name));let b=0,M=0;v.forEach(O=>{I.has(O.title)?M++:(o.add(kt.new(O.title,O.url)),b++)}),a.push(new X("Bookmarks",`${b} bookmarks imported (${M} skipped)`,"success"))}function d(f){i.value=f.getUrl().toString(),s.value="Share bookmark",t.value=!0}function C(){const f=new kt("temp",l.getCameraPosition());i.value=f.getUrl().toString(),s.value="Share current view",t.value=!0}return(f,m)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",fu,[n.unref(o).count===0?(n.openBlock(),n.createBlock(Ue,{key:0,text:"No bookmarks"})):n.createCommentVNode("",!0),n.createElementVNode("ul",Iu,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(o).getBookmarks(),v=>(n.openBlock(),n.createBlock(gu,{key:v.name,name:v.name,onShare:I=>d(v),onDelete:I=>n.unref(o).remove(v),onGoto:I=>c(v)},null,8,["name","onShare","onDelete","onGoto"]))),128))]),n.createVNode(Ve,null,{default:n.withCtx(()=>[n.createVNode(A._sfc_main$1,{text:"New bookmark",icon:"bi-plus-lg",title:"Create a new bookmark from the current view",class:"btn-primary",onClick:m[0]||(m[0]=()=>{r(),f.$forceUpdate()})}),n.createVNode(A._sfc_main$1,{text:"Share view",icon:"bi-share",title:"Share current view",class:"btn-outline-secondary",onClick:C}),n.createVNode(A._sfc_main$1,{title:"Export bookmarks to GeoJSON",class:"btn-outline-secondary",onClick:h,icon:"bi-box-arrow-right",text:"Export bookmarks"}),n.createVNode(Re,{title:"Import bookmarks from GeoJSON",text:"Import bookmarks",onImport:u})]),_:1})]),n.createVNode(lu,{show:t.value,title:s.value,onClose:m[1]||(m[1]=()=>t.value=!1)},{default:n.withCtx(()=>[n.createVNode(Cu,{url:i.value},null,8,["url"])]),_:1},8,["show","title"])],64))}}),vu={},yu={class:"list-group list-group-flush border-start"};function bu(e,t){return n.openBlock(),n.createElementBlock("ul",yu,[n.renderSlot(e.$slots,"default")])}const Oe=A._export_sfc(vu,[["render",bu],["__scopeId","data-v-461b97dc"]]),Mu=["aria-expanded","aria-controls"],Eu={key:0,class:"icon me-2"},wu={class:"flex-fill"},Ou={key:1,class:"icon ms-2"},xu=["id"],ni=n.defineComponent({__name:"SectionCollapsible",props:{expanded:{type:Boolean},iconPosition:{},title:{}},emits:["update:expanded"],setup(e,{emit:t}){const i=e,s=t,a=A.MathUtils.generateUUID(),o=`#${a}`,l=n.ref(null);return n.onMounted(()=>{var r,h,c;i.expanded&&((r=l.value)==null||r.classList.add("show")),(h=l.value)==null||h.addEventListener("hidden.bs.collapse",()=>s("update:expanded",!1)),(c=l.value)==null||c.addEventListener("shown.bs.collapse",()=>s("update:expanded",!0))}),(r,h)=>(n.openBlock(),n.createElementBlock("div",null,[n.createElementVNode("h6",null,[n.createElementVNode("a",{class:"d-flex text-nowrap text-truncate overflow-hidden link-underline link-underline-opacity-0 link-underline-opacity-75-hover link-body-emphasis",href:o,"data-bs-toggle":"collapse",role:"button","aria-expanded":r.expanded,"aria-controls":n.unref(a)},[r.iconPosition==="left"?(n.openBlock(),n.createElementBlock("div",Eu,[...h[0]||(h[0]=[n.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):n.createCommentVNode("",!0),n.createElementVNode("span",wu,n.toDisplayString(r.title),1),r.iconPosition!=="left"?(n.openBlock(),n.createElementBlock("div",Ou,[...h[1]||(h[1]=[n.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):n.createCommentVNode("",!0)],8,Mu)]),n.createElementVNode("div",{ref_key:"collapsible",ref:l,id:n.unref(a),class:"collapse"},[n.renderSlot(r.$slots,"default")],8,xu)]))}}),_u=n.defineComponent({__name:"ListLabel",props:{title:{}},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["d-inline-block flex-fill text-nowrap text-truncate overflow-hidden px-1",t.$attrs.class])},n.toDisplayString(t.title),3))}}),ku={class:"slider d-flex"},Su={key:0,title:"Transparent",class:"bi-x-diamond me-1"},Nu={key:1,title:"Opacity",class:"bi-x-diamond-fill opacity-75 me-1"},Pu=["value"],Tu={key:2,title:"Opaque",class:"bi-x-diamond-fill ms-1"},Lu=n.defineComponent({__name:"OpacitySlider",props:{opacity:{},size:{}},emits:["update:opacity"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",ku,[t.size!=="small"?(n.openBlock(),n.createElementBlock("i",Su)):n.createCommentVNode("",!0),t.size==="small"?(n.openBlock(),n.createElementBlock("i",Nu)):n.createCommentVNode("",!0),n.createElementVNode("input",{title:"Opacity",type:"range",class:"form-range",min:"0",step:"0.01",max:"1",onInput:i[0]||(i[0]=s=>t.$emit("update:opacity",Number.parseFloat(s.target.value))),value:t.opacity},null,40,Pu),t.size!=="small"?(n.openBlock(),n.createElementBlock("i",Tu)):n.createCommentVNode("",!0)]))}}),ea=A._export_sfc(Lu,[["__scopeId","data-v-5b0604f2"]]),Du={class:"list-group-item"},Bu={class:"d-flex"},Vu=n.defineComponent({__name:"BasemapItem",props:{hasOpacitySlider:{type:Boolean},isLoading:{type:Boolean},name:{},opacity:{},type:{},visible:{type:Boolean}},emits:["update:opacity","update:visible"],setup(e){const t={color:"fg-landcover-map",elevation:"fg-profile",graticule:"fg-grid",mask:"bi-mask"},i={color:"Color layer",elevation:"Elevation layer",graticule:"Graticule",mask:"Mask layer"};return(s,a)=>(n.openBlock(),n.createElementBlock("li",Du,[n.createElementVNode("div",Bu,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main$2,{icon:t[s.type],title:i[s.type]},null,8,["icon","title"])]),_:1}),n.createVNode(Yt,{visible:s.visible,"onUpdate:visible":a[0]||(a[0]=o=>s.$emit("update:visible",o))},null,8,["visible"]),n.createVNode(_u,{title:s.name,class:n.normalizeClass(["label",s.visible?null:"disabled"])},null,8,["title","class"]),s.hasOpacitySlider?(n.openBlock(),n.createBlock(ea,{key:0,class:n.normalizeClass(["opacity-slider",s.visible?null:"disabled"]),opacity:s.opacity,"onUpdate:opacity":a[1]||(a[1]=o=>s.$emit("update:opacity",o))},null,8,["class","opacity"])):n.createCommentVNode("",!0)])]))}}),ls=A._export_sfc(Vu,[["__scopeId","data-v-a7bbfe26"]]),Ru={},Uu={class:"spinner-border spinner-border-sm text-secondary",role:"status"};function Fu(e,t){return n.openBlock(),n.createElementBlock("div",Uu,[...t[0]||(t[0]=[n.createElementVNode("span",{class:"visually-hidden"},"Loading...",-1)])])}const ia=A._export_sfc(Ru,[["render",Fu]]),zu={class:"d-flex"},ju={key:0,class:"icon spinner d-inline-block"},Gu={key:1,class:"list-group-item"},Hu=n.defineComponent({__name:"DatagroupItem",props:{group:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){const t=e,i=n.reactive(t.group.leafs()),s=n.ref(!1),a=n.ref(!1),o=n.ref(t.group.visible);n.watch(i,h=>{s.value=h.some(c=>c.isPreloading),a.value=h.some(c=>c.isPreloaded),o.value=h.some(c=>c.visible)});const l=A.MathUtils.generateUUID(),r=`#${l}`;return(h,c)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",zu,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[...c[10]||(c[10]=[n.createElementVNode("i",{class:"bi bi-folder2",title:"Group"},null,-1)])]),_:1}),n.createVNode(Yt,{visible:o.value,"onUpdate:visible":c[0]||(c[0]=u=>h.$emit("update:visible",h.group,u))},null,8,["visible"]),n.createVNode(A.IconList,{class:"me-1"},{default:n.withCtx(()=>[n.createVNode(A.IconListButton,{title:"Expand group",icon:"bi-chevron-down","data-bs-toggle":"collapse","data-bs-target":r,"aria-controls":n.unref(l),"aria-expanded":"false"},null,8,["aria-controls"])]),_:1}),n.createVNode(A._sfc_main$3,{class:"label",disabled:!o.value||!a.value,text:h.group.name,title:`Zoom to ${h.group.name}`,onClick:c[1]||(c[1]=u=>h.$emit("zoom",h.group))},null,8,["disabled","text","title"]),n.createVNode(A.IconList,{class:"ms-1"},{default:n.withCtx(()=>[s.value?(n.openBlock(),n.createElementBlock("div",ju,[n.createVNode(ia,{title:"Loading..."})])):n.createCommentVNode("",!0),a.value&&(h.group.config.canMaskBasemap||h.group.config.isMaskingBasemap)?(n.openBlock(),n.createBlock(A.IconListButton,{key:1,title:"Toggle basemap masking",icon:"bi-mask",onClick:c[2]||(c[2]=u=>h.$emit("update:toggle-mask",h.group))})):n.createCommentVNode("",!0),a.value?(n.openBlock(),n.createBlock(A.IconListButton,{key:2,title:"Clip to",icon:"bi-bounding-box",onClick:c[3]||(c[3]=u=>h.$emit("clipTo",h.group))})):n.createCommentVNode("",!0),a.value?(n.openBlock(),n.createBlock(A.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:c[4]||(c[4]=u=>h.$emit("update:toggle-grid",h.group))})):n.createCommentVNode("",!0)]),_:1})]),n.createVNode(Oe,{id:n.unref(l),class:"collapse pb-3"},{default:n.withCtx(()=>[h.group.children.length>0?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(h.group.children,u=>(n.openBlock(),n.createBlock(sa,{key:u.name,dataset:u,onZoom:c[5]||(c[5]=g=>h.$emit("zoom",g)),onClipTo:c[6]||(c[6]=g=>h.$emit("clipTo",g)),"onUpdate:toggleGrid":c[7]||(c[7]=g=>h.$emit("update:toggle-grid",g)),"onUpdate:toggleMask":c[8]||(c[8]=g=>h.$emit("update:toggle-mask",g)),"onUpdate:visible":c[9]||(c[9]=(g,d)=>h.$emit("update:visible",g,d))},null,8,["dataset"]))),128)):(n.openBlock(),n.createElementBlock("li",Gu,"No dataset in this group"))]),_:1},8,["id"])],64))}}),Zu=A._export_sfc(Hu,[["__scopeId","data-v-7592eab8"]]),Wu={class:"d-flex"},qu={key:0,class:"icon spinner d-inline-block"},Yu=["id"],Ju=n.defineComponent({__name:"DatasetItem",props:{dataset:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){const t=A.useDatasetStore(),i=e,s=A.refAndWatch(i.dataset,"isPreloading"),a=A.refAndWatch(i.dataset,"isPreloaded"),o=A.refAndWatch(i.dataset,"visible");function l(){t.remove(i.dataset)}return(r,h)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",Wu,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main$2,{icon:n.unref(ds)[r.dataset.type]??"bi-file-earmark-x",title:n.unref(us)[r.dataset.type]??"Unknown"},null,8,["icon","title"])]),_:1}),n.createVNode(Yt,{visible:n.unref(o),"onUpdate:visible":h[0]||(h[0]=c=>r.$emit("update:visible",r.dataset,c))},null,8,["visible"]),n.createVNode(A._sfc_main$3,{class:"label",disabled:!n.unref(o)||!n.unref(a),text:r.dataset.name,title:`Zoom to ${r.dataset.name}`,onClick:h[1]||(h[1]=c=>r.$emit("zoom",r.dataset))},null,8,["disabled","text","title"]),n.createVNode(A.IconList,{class:"ms-1"},{default:n.withCtx(()=>[n.unref(s)?(n.openBlock(),n.createElementBlock("div",qu,[n.createVNode(ia,{title:"Loading..."})])):n.createCommentVNode("",!0),n.unref(be).has(r.dataset.type)&&n.unref(a)?(n.openBlock(),n.createBlock(A.IconListButton,{key:1,title:"Show dataset properties",icon:"bi-card-list","data-bs-toggle":"collapse","data-bs-target":`#collapse-${r.dataset.uuid}`,"aria-controls":`collapse-${r.dataset.uuid}`,"aria-expanded":"false"},null,8,["data-bs-target","aria-controls"])):n.createCommentVNode("",!0),n.unref(a)&&("canMaskBasemap"in r.dataset.config&&r.dataset.config.canMaskBasemap||"isMaskingBasemap"in r.dataset.config&&r.dataset.config.isMaskingBasemap)?(n.openBlock(),n.createBlock(A.IconListButton,{key:2,title:"Toggle basemap masking",icon:"bi-mask",onClick:h[2]||(h[2]=c=>r.$emit("update:toggle-mask",r.dataset))})):n.createCommentVNode("",!0),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getCustomActions(r.dataset,{isVisible:n.unref(o),isPreloaded:n.unref(a)}),c=>(n.openBlock(),n.createBlock(A.IconListButton,{key:c.title,title:c.title,icon:c.icon,onClick:u=>c.action(r.dataset)},null,8,["title","icon","onClick"]))),128)),n.unref(a)?(n.openBlock(),n.createBlock(A.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:h[3]||(h[3]=c=>r.$emit("update:toggle-grid",r.dataset))})):n.createCommentVNode("",!0),n.createVNode(A.IconListButton,{title:"Delete this dataset",icon:"bi-trash",onClick:l})]),_:1})]),n.unref(be).has(r.dataset.type)?(n.openBlock(),n.createElementBlock("div",{key:0,class:"collapse m-2",id:`collapse-${r.dataset.uuid}`},[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(n.unref(be).get(r.dataset.type)),{dataset:r.dataset},null,8,["dataset"]))],8,Yu)):n.createCommentVNode("",!0)],64))}}),Xu=A._export_sfc(Ju,[["__scopeId","data-v-1aa9a2d7"]]),Ku={class:"list-group-item"},sa=n.defineComponent({__name:"DatasetOrGroupItem",props:{dataset:{}},emits:["zoom","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",Ku,[n.unref(A.Datagroup).isGroup(t.dataset)?(n.openBlock(),n.createBlock(Zu,{key:0,group:t.dataset,onZoom:i[0]||(i[0]=s=>t.$emit("zoom",s)),"onUpdate:toggleGrid":i[1]||(i[1]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":i[2]||(i[2]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":i[3]||(i[3]=(s,a)=>t.$emit("update:visible",s,a))},null,8,["group"])):(n.openBlock(),n.createBlock(Xu,{key:1,dataset:t.dataset,onZoom:i[4]||(i[4]=s=>t.$emit("zoom",s)),"onUpdate:toggleGrid":i[5]||(i[5]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":i[6]||(i[6]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":i[7]||(i[7]=(s,a)=>t.$emit("update:visible",s,a))},null,8,["dataset"]))]))}}),Qu={class:"list-group-item d-flex"},$u=n.defineComponent({__name:"OverlayItem",props:{name:{},opacity:{},visible:{type:Boolean}},emits:["update:visible","update:opacity","update:move-up","update:move-down","zoom"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",Qu,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main$2,{icon:"fg-contour-map",title:"Overlay"})]),_:1}),n.createVNode(Yt,{visible:t.visible,"onUpdate:visible":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),n.createVNode(A._sfc_main$3,{class:"label",disabled:!t.visible,title:`Zoom to ${t.name}`,text:t.name,onClick:i[1]||(i[1]=s=>t.$emit("zoom"))},null,8,["disabled","title","text"]),n.createVNode(ea,{class:n.normalizeClass(["opacity-slider",t.visible?null:"disabled"]),opacity:t.opacity,size:"small","onUpdate:opacity":i[2]||(i[2]=s=>t.$emit("update:opacity",s))},null,8,["class","opacity"]),n.createVNode(A.IconList,{class:"ms-1"},{default:n.withCtx(()=>[n.createVNode(A.IconListButton,{title:"Move up",icon:"bi-arrow-up",onClick:i[3]||(i[3]=s=>t.$emit("update:move-up"))}),n.createVNode(A.IconListButton,{title:"Move down",icon:"bi-arrow-down",onClick:i[4]||(i[4]=s=>t.$emit("update:move-down"))})]),_:1})]))}}),tA=A._export_sfc($u,[["__scopeId","data-v-8755c19f"]]),eA={class:"d-flex flex-column h-100"},iA={class:"flex-fill overflow-auto"},sA=n.defineComponent({__name:"DatasetPanel",setup(e){const t=A.useDatasetStore(),i=A.useCameraStore(),s=A.useLayerStore();function a(r){for(const h of r)t.importFromFile(h)}function o(){const r=document.getElementById("dataset-import-url");t.importFromFile(r.value)}function l(r){const h=t.getBoundingBox(r);h!=null&&h.isEmpty()||i.lookTopDownAt(h)}return(r,h)=>(n.openBlock(),n.createElementBlock("div",eA,[n.createElementVNode("div",iA,[n.createVNode(ni,{title:"Basemaps","icon-position":"left",id:"basemap-list",class:"border-bottom mb-3"},{default:n.withCtx(()=>[n.createVNode(Oe,{id:"layers-list-group"},{default:n.withCtx(()=>[n.unref(s).getGraticuleLayer()!==void 0?(n.openBlock(),n.createBlock(ls,{key:0,type:"graticule",opacity:1,name:n.unref(s).getGraticuleLayer().name,isLoading:!1,visible:n.unref(s).getGraticuleLayer().visible,hasOpacitySlider:!1,"onUpdate:visible":h[0]||(h[0]=c=>n.unref(s).getGraticuleLayer().visible=c)},null,8,["name","visible"])):n.createCommentVNode("",!0),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(s).getBasemaps(),c=>(n.openBlock(),n.createBlock(ls,{key:c.name,type:c.type,opacity:c.opacity,name:c.name,isLoading:c.isLoading,visible:c.visible,hasOpacitySlider:c.type==="color"||c.type==="elevation","onUpdate:visible":u=>n.unref(s).setBasemapVisibility(c,u),"onUpdate:opacity":u=>n.unref(s).setBasemapOpacity(c,u)},null,8,["type","opacity","name","isLoading","visible","hasOpacitySlider","onUpdate:visible","onUpdate:opacity"]))),128))]),_:1})]),_:1}),n.unref(s).overlayCount>0?(n.openBlock(),n.createBlock(ni,{key:0,title:"Overlays","icon-position":"left",id:"overlay-list",class:"border-bottom mb-3"},{default:n.withCtx(()=>[n.createVNode(Oe,null,{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(s).getOverlays(),c=>(n.openBlock(),n.createBlock(tA,{key:c.name,opacity:c.opacity,name:c.name,visible:c.visible,"onUpdate:visible":u=>n.unref(s).setOverlayVisibility(c,u),"onUpdate:opacity":u=>n.unref(s).setOverlayOpacity(c,u),"onUpdate:moveUp":u=>n.unref(s).moveOverlayUp(c),"onUpdate:moveDown":u=>n.unref(s).moveOverlayDown(c)},null,8,["opacity","name","visible","onUpdate:visible","onUpdate:opacity","onUpdate:moveUp","onUpdate:moveDown"]))),128))]),_:1})]),_:1})):n.createCommentVNode("",!0),n.createVNode(ni,{title:"Datasets",expanded:!0,"icon-position":"left",id:"dataset-list"},{default:n.withCtx(()=>[n.createVNode(Oe,null,{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getTree(),c=>(n.openBlock(),n.createBlock(sa,{key:c.name,dataset:c,onUpdated:h[1]||(h[1]=u=>r.$forceUpdate()),onZoom:h[2]||(h[2]=u=>l(u)),"onUpdate:toggleGrid":h[3]||(h[3]=u=>n.unref(t).toggleGrid(u)),"onUpdate:toggleMask":h[4]||(h[4]=u=>n.unref(t).toggleMask(u)),"onUpdate:visible":h[5]||(h[5]=(u,g)=>n.unref(t).setVisible(u,g))},null,8,["dataset"]))),128))]),_:1})]),_:1})]),n.createVNode(Ve,null,{default:n.withCtx(()=>[n.createElementVNode("div",{class:"input-group mb-3"},[h[6]||(h[6]=n.createElementVNode("input",{type:"text",id:"dataset-import-url",class:"form-control",placeholder:"https://","aria-label":"URL to import","aria-describedby":"button-dataset-import-url"},null,-1)),n.createElementVNode("button",{onClick:o,class:"btn btn-outline-secondary",type:"button",id:"button-dataset-import-url"}," Import URL ")]),n.createVNode(Re,{title:"Import file",text:"Import file",onImport:a})]),_:1})]))}}),aA={class:"list-group-item item"},nA={class:"d-flex"},oA=["title"],rA={class:"icons"},lA=n.defineComponent({__name:"MeasurementItem",props:{measure:{},visible:{type:Boolean}},emits:["delete","download","update:visible","zoom"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",aA,[n.createElementVNode("div",nA,[n.createVNode(Yt,{visible:t.visible,"onUpdate:visible":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),n.createElementVNode("a",{class:"title",title:t.measure.title,href:"#",onClick:i[1]||(i[1]=s=>t.$emit("zoom"))},n.toDisplayString(t.measure.title)+" ("+n.toDisplayString(t.measure.object.length.toFixed(2))+"m)",9,oA),n.createElementVNode("div",rA,[n.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:i[2]||(i[2]=s=>t.$emit("delete"))},[...i[3]||(i[3]=[n.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])])]))}}),hA=A._export_sfc(lA,[["__scopeId","data-v-bcecb7b2"]]),hs=[{description:"Will automatically beam perpendicularly to the selected point until a geometry is hit",name:"Laser",value:"laser"}],cA={class:"d-flex flex-column h-100"},gA={class:"list-group list-group-flush flex-fill overflow-auto"},dA=n.defineComponent({__name:"MeasurementPanel",setup(e){const t=Mi(),i=A.useCameraStore(),s=n.ref(t.getMeasurementMode());n.watch(s,c=>{t.setMeasurementMode(c)});function a(c){const u=c.toGeoJSON();A.Download.downloadAsJson(u,`measure-${c.title}.json`)}function o(){const c=Xs.toCollection(t.getMeasures());A.Download.downloadAsJson(c,"measures.json")}function l(c){i.lookTopDownAt(c.object)}function r(c){t.importMeasureFiles(c)}function h(c){s.value=c==null?void 0:c.value}return(c,u)=>(n.openBlock(),n.createElementBlock("div",cA,[u[3]||(u[3]=n.createElementVNode("div",{class:"alert alert-warning py-2",role:"alert"},[n.createElementVNode("i",{class:"bi bi-cone-striped"}),n.createTextVNode(" This feature is experimental ")],-1)),n.unref(t).count===0?(n.openBlock(),n.createBlock(Ue,{key:0,text:"No measurements"})):n.createCommentVNode("",!0),n.createElementVNode("ul",gA,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getMeasures(),g=>(n.openBlock(),n.createBlock(hA,{key:g.title,measure:g,visible:g.visible,"onUpdate:visible":()=>{g.visible=!g.visible,c.$forceUpdate()},onDelete:d=>n.unref(t).remove(g),onDownload:d=>a(g),onZoom:d=>l(g)},null,8,["measure","visible","onUpdate:visible","onDelete","onDownload","onZoom"]))),128))]),n.createVNode(Ve,{id:"measures-fieldset"},{default:n.withCtx(()=>[n.createVNode($s,{label:"Mode","description-position":"top",current:n.unref(hs)[0],items:n.unref(hs),"onUpdated:current":u[0]||(u[0]=g=>h(g)),class:"mb-2"},null,8,["current","items"]),n.unref(t).isUserMeasuring()?(n.openBlock(),n.createBlock(A._sfc_main$1,{key:0,title:"Stop measuring",text:"Stop measuring",icon:"bi-stop-circle",class:"btn-primary",onClick:u[1]||(u[1]=g=>n.unref(t).end())})):(n.openBlock(),n.createBlock(A._sfc_main$1,{key:1,title:"Start measuring",text:"Start measuring",icon:"bi-rulers",class:"btn-primary",onClick:u[2]||(u[2]=g=>n.unref(t).start())})),n.createVNode(A._sfc_main$1,{title:"Export measures to GeoJSON",class:"btn-outline-secondary",onClick:o,icon:"bi-box-arrow-right",text:"Export measures"}),n.createVNode(Re,{title:"Import measures from GeoJSON",text:"Import measures",onImport:r})]),_:1})]))}}),uA={class:"panel",id:"panel-container"},AA={class:"title"},CA={key:0,class:"badge text-bg-primary rounded-pill float-end",title:"Version"},mA={class:"content"},fA=n.defineComponent({__name:"PanelContainer",props:{selected:{}},setup(e){const t=gs(),i=`packages-v1.0.0-beta.4
16
+ `;return(s,a)=>{var o;return n.openBlock(),n.createElementBlock("div",uA,[n.createElementVNode("h5",AA,[n.createTextVNode(n.toDisplayString((o=n.unref(t).find(l=>l.key===s.selected))==null?void 0:o.title)+" ",1),s.selected==="about"?(n.openBlock(),n.createElementBlock("span",CA,"Version: "+n.toDisplayString(n.unref(i)),1)):n.createCommentVNode("",!0)]),n.createElementVNode("div",mA,[s.selected==="datasets"?(n.openBlock(),n.createBlock(sA,{key:0})):n.createCommentVNode("",!0),s.selected==="about"?(n.openBlock(),n.createBlock(Id,{key:1})):n.createCommentVNode("",!0),s.selected==="bookmarks"?(n.openBlock(),n.createBlock(pu,{key:2})):n.createCommentVNode("",!0),s.selected==="analysis"?(n.openBlock(),n.createBlock(Sd,{key:3})):n.createCommentVNode("",!0),s.selected==="annotations"?(n.openBlock(),n.createBlock($d,{key:4})):n.createCommentVNode("",!0),s.selected==="measures"?(n.openBlock(),n.createBlock(dA,{key:5})):n.createCommentVNode("",!0)])])}}}),IA=A._export_sfc(fA,[["__scopeId","data-v-381fd038"]]),pA=["aria-valuenow"],vA={methods:{tick(){this.$forceUpdate()}}},yA=n.defineComponent({...vA,__name:"ProgressBar",props:{progress:{required:!0,type:Number}},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",{class:"progress",role:"progressbar","aria-label":"Progress","aria-valuenow":e.progress*100,"aria-valuemin":"0","aria-valuemax":"100"},[e.progress!=1?(n.openBlock(),n.createElementBlock("div",{key:0,class:"progress-bar progress-bar-striped progress-bar-animated",style:n.normalizeStyle(`width: ${e.progress*100}%`)},null,4)):n.createCommentVNode("",!0)],8,pA))}}),aa=wt.defineStore("search",()=>{const e=n.shallowRef([]);function t(s){e.value.includes(s)||e.value.push(s)}function i(){return[...e.value]}return{getProviders:i,registerProvider:t}}),bA={class:"main"},MA={class:"result-label"},EA={class:"result-type"},wA={class:"provider"},OA=["v-html"],xA=n.defineComponent({__name:"SearchOverlay",emits:["resultSelected"],setup(e,{emit:t}){const i=t,s=aa();function a(r){return r.label}async function o(r){if(r.length<3)return Promise.resolve([]);const c=s.getProviders().map(g=>g.search(r));return(await Promise.all(c)).flatMap(g=>g)}function l(r){i("resultSelected",r)}return(r,h)=>(n.openBlock(),n.createElementBlock("div",bA,[n.createVNode(n.unref(Ba),{debounceTime:500,search:o,getResultValue:a,onSubmit:l,id:"search-place-autocomplete",placeholder:"Search..."},{result:n.withCtx(({result:c,props:u})=>[n.createElementVNode("li",n.mergeProps(u,{class:"autocomplete-result result"}),[n.createElementVNode("div",MA,[n.createElementVNode("span",EA,[n.createVNode(A._sfc_main$2,{icon:"fg-poi",title:"Location"})]),n.createElementVNode("span",null,n.toDisplayString(c.label),1),n.createElementVNode("p",wA,n.toDisplayString(c.provider.name),1)]),n.createElementVNode("div",{class:"wiki-snippet","v-html":c.snippet},null,8,OA)],16)]),_:1})]))}}),_A=A._export_sfc(xA,[["__scopeId","data-v-de1fa405"]]),kA={class:"d-flex column-gap-3"},SA=n.defineComponent({__name:"StatusBar",props:{x:Number,y:Number,z:Number},setup(e){return(t,i)=>{var s,a,o;return n.openBlock(),n.createElementBlock("div",null,[n.createElementVNode("div",kA,[i[0]||(i[0]=n.createElementVNode("i",{class:"bi text-secondary bi-cursor-fill"},null,-1)),n.createVNode(It,{value:(s=e.x)==null?void 0:s.toFixed(0),prefix:"X:"},null,8,["value"]),n.createVNode(It,{value:(a=e.y)==null?void 0:a.toFixed(0),prefix:"Y:"},null,8,["value"]),n.createVNode(It,{value:(o=e.z)==null?void 0:o.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])])}}}),NA=A._export_sfc(SA,[["__scopeId","data-v-3d05468b"]]),PA="data:image/png;base64,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",TA={class:"nav-item"},LA=["id","title"],DA=n.defineComponent({__name:"ToolbarButton",props:["icon","tourkey","title","active"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",TA,[n.createElementVNode("a",{id:`toolbar-${e.tourkey}`,class:n.normalizeClass(["nav-link",e.active?"active":null]),href:"#",title:e.title},[n.createElementVNode("i",{class:n.normalizeClass(["bi",e.icon])},null,2)],10,LA)]))}}),BA={class:"toolbar"},VA={id:"menu",class:"nav nav-pills flex-column"},RA={class:"nav-item mt-2"},UA={href:"https://giro3d.org",target:"_blank",title:"Piero, powered by Giro3D"},FA=["src"],zA=n.defineComponent({__name:"ToolBar",props:{active:{}},emits:["selected"],setup(e){const t=gs();return(i,s)=>(n.openBlock(),n.createElementBlock("div",BA,[n.createElementVNode("ul",VA,[n.createElementVNode("li",RA,[n.createElementVNode("a",UA,[n.createElementVNode("img",{src:n.unref(PA),alt:"Piero, powered by Giro3D",class:"mb-3 w-100 p-1"},null,8,FA)])]),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t),a=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[a.enabled?(n.openBlock(),n.createBlock(DA,{active:i.active===a.key,key:a.key,tourkey:a.key,title:a.title,icon:a.icon,onClick:o=>i.$emit("selected",a.key)},null,8,["active","tourkey","title","icon","onClick"])):n.createCommentVNode("",!0)],64))),256))])]))}}),jA=A._export_sfc(zA,[["__scopeId","data-v-f84bccda"]]),na=wt.defineStore("widgets",()=>{const e=n.shallowRef([]);function t(s){e.value.push(s)}function i(){return[...e.value]}return{addWidget:t,getWidgets:i}}),GA=["id"],HA=n.defineComponent({__name:"App",props:{getContext:{type:Function}},setup(e){const t=n.ref("datasets"),i=n.ref(1),s=n.ref(new A.Vector3(0,0,0)),a=new A.Vector2,o=n.ref(null),l=n.ref(null),r=n.ref(!1),h=n.ref(!0);let c=!1;const u=A.useGiro3dStore(),g=A.useCameraStore(),d=bi(),C=Mi(),f=na(),m=n.shallowRef(null),v=n.ref();n.onMounted(()=>{u.getMainView()&&b(),u.$onAction(({after:R,args:B,name:K})=>{R(()=>{switch(K){case"setMainView":B[0]===null?I():b();break}})}),v.value=setInterval(()=>{c&&(S(a),D(a),c=!1)},50),setTimeout(()=>{h.value=!1},1e3),bt.dispatchEvent({type:"ready"})}),n.onUnmounted(()=>{v.value!=null&&(clearInterval(v.value),v.value=void 0),I()});function I(){var T;(T=m.value)==null||T.dispose(),m.value=null}function b(){const T=u.getMainView();if(T===null)throw new Error("mainview is null");m.value=new Zc(T),m.value.addEventListener("update",()=>{m.value&&(i.value=m.value.mainInstance.progress,r.value=m.value.mainInstance.loading)}),e.getContext().view=new Wc({camera:m.value.camera,instance:m.value.mainInstance,sceneCursorManager:m.value.sceneCursorManager})}function M(T){m.value&&(m.value.mainInstance.eventToCanvasCoords(T,a),c=!0)}function O(T){if(m.value&&wc(T)){const R=m.value.mainInstance,B=T.coordinates.as(R.referenceCrs),Jt=gi.fromCenterAndSize(B.crs,B.toVector2(),1e3,1e3).toBox3(B.z,B.z+200);m.value.camera.lookTopDownAt(Jt,!1)}}function _(T,R){if(m.value==null||m.value.mainInstance==null||g.getNavigationMode()==="position-on-map"||g.isUserInteracting()||d.isUserDrawing()||C.isUserMeasuring())return;const B=m.value.picker.pick(m.value.mainInstance,T);if((B==null?void 0:B.point)!=null){const K=B.point;s.value.x=K.x,s.value.y=K.y,s.value.z=K.z}(B==null?void 0:B.feature)!=null?(l.value=B.feature.name,o.value=B.feature):(l.value=null,o.value=null),(B==null?void 0:B.pickResult)!=null?m.value.highlighter.highlightFromPick(B.pickResult):m.value.highlighter.clear()}function w(T){T===t.value?t.value=null:t.value=T}function S(T){if(m.value!=null){const R=m.value.picker.getMouseCoordinate(m.value.mainInstance,T);R&&(s.value.x=R.x,s.value.y=R.y,s.value.z=R.z)}}function D(T){if(m.value){if(g.getNavigationMode()==="position-on-map"||g.getNavigationMode()==="orbit"||d.isUserDrawing()||C.isUserMeasuring())return;const R=m.value.picker.hasFeature(m.value.mainInstance,T);m.value.mainInstance.domElement.style.cursor=R?"pointer":"auto"}}return(T,R)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[h.value?(n.openBlock(),n.createBlock(Ug,{key:0})):n.createCommentVNode("",!0),n.createVNode(jg,{id:"main-view",onClick:R[0]||(R[0]=B=>_(B)),onMousemove:M,class:"mainview"}),o.value!=null?(n.openBlock(),n.createBlock(Pg,{key:1,onClose:R[1]||(R[1]=B=>o.value=null),attributes:o.value.attributes,name:o.value.name,parent:o.value.parent,point:o.value.point,class:"component attribute-panel"},null,8,["attributes","name","parent","point"])):n.createCommentVNode("",!0),n.createVNode(NA,{class:"component statusbar",x:s.value.x,y:s.value.y,z:s.value.z},null,8,["x","y","z"]),n.createVNode(jA,{id:"toolbar",active:t.value,class:"component toolbar",onSelected:R[2]||(R[2]=B=>w(B))},null,8,["active"]),t.value!=null?(n.openBlock(),n.createBlock(IA,{key:2,class:"component panel",selected:t.value},null,8,["selected"])):n.createCommentVNode("",!0),n.createVNode(yA,{progress:i.value,class:"loading-indicator"},null,8,["progress"]),n.createVNode(_A,{id:"address-search",class:"search",onResultSelected:O}),n.createVNode(qg,{class:"navigation-buttons"}),n.createVNode(Qc),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(f).getWidgets(),(B,K)=>(n.openBlock(),n.createElementBlock("div",{key:K,id:`widget-${B.id}`},[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(B.component),{context:T.getContext()},null,8,["context"]))],8,GA))),128))],64))}}),ZA=A._export_sfc(HA,[["__scopeId","data-v-bded1f25"]]);async function WA(e){let t;if(typeof e.configuration=="string"){console.info(`Loading remote configuration from: ${e.configuration}`);const i=await A.loadRemoteConfiguration(e.configuration);console.info("Remote configuration successfuly loaded."),t=i}else t=e.configuration;return t}async function qA(e){const t=await WA(e);await A.setConfiguration(t),console.info("Configuration loaded."),e.dynamicStyles&&A.setDynamicStyles(e.dynamicStyles),A.Download.setBaseUrl(e.baseUrl);const i=wt.createPinia();A.useModuleStore(i).setLoadedModules(e.modules??[]);const a=Qs(i),o={analysis:new Ua(a),baseURL:new URL(A.Download.getBaseUrl()),bookmarks:new Fa(ta(i)),configuration:t,datasets:new bc(A.useDatasetStore(i)),events:bt,notifications:new Mc(Pt(i)),search:new Ec(aa(i)),widgets:new Oc(na(i))},l=o,r=[];if(e.modules)for(const c of e.modules){const u=Promise.resolve(c.initialize(l));r.push(u),console.info(`Module ${c.name} initialized.`)}await Promise.all(r);const h=n.createApp(ZA,{getContext:()=>o});h.use(i),h.mount(e.container)}exports.Fetcher=A.Fetcher;exports.fillObject3DUserData=A.fillObject3DUserData;exports.Bookmark=kt;exports.Projections=pi;exports.createPieroApp=qA;
17
17
  //# sourceMappingURL=index.cjs.js.map