leaflet-city-mapper 0.0.5 → 0.0.7

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 (261) hide show
  1. package/README.md +10 -5
  2. package/dist/leaflet-city-mapper-src.js +6874 -6304
  3. package/dist/leaflet-city-mapper-src.js.map +4 -4
  4. package/dist/leaflet-city-mapper-worker-src.js +2766 -0
  5. package/dist/leaflet-city-mapper-worker-src.js.map +4 -4
  6. package/dist/leaflet-city-mapper-worker.js +1 -1
  7. package/dist/leaflet-city-mapper-worker.js.map +4 -4
  8. package/dist/leaflet-city-mapper.js +5 -3
  9. package/dist/leaflet-city-mapper.js.map +4 -4
  10. package/libs/leaflet-lens.js +15 -3
  11. package/libs/leaflet.js +1 -1
  12. package/package.json +1 -1
  13. package/src/camera/setBearing.js +5 -0
  14. package/src/camera/setPitch.js +5 -0
  15. package/src/cog/initCog.js +2 -2
  16. package/src/collision/collectIntersections.js +16 -0
  17. package/src/collision/collider.js +3 -2
  18. package/src/collision/countCrossings.js +15 -0
  19. package/src/collision/insideMesh.js +4 -24
  20. package/src/collision/insideWalker.js +2 -2
  21. package/src/collision/readTriangle.js +7 -4
  22. package/src/collision/setTrafficNormal.js +9 -0
  23. package/src/collision/trafficCollision.js +4 -9
  24. package/src/collision/vertexCount.js +3 -0
  25. package/src/controls/cameraControls.js +6 -0
  26. package/src/core/gridlayerGetTiledPixelBounds.js +37 -4
  27. package/src/core/markerSetPos.js +1 -1
  28. package/src/core/popupGetEvents.js +1 -1
  29. package/src/core/popupUpdatePosition.js +8 -8
  30. package/src/core/tooltipGetEvents.js +1 -1
  31. package/src/core/tooltipSetPosition.js +2 -2
  32. package/src/geometry/appendNativeTriangle.js +2 -2
  33. package/src/geometry/createModelGeometry.js +2 -9
  34. package/src/geometry/dashedSegment.js +10 -5
  35. package/src/geometry/disk.js +1 -1
  36. package/src/geometry/fillNativePolygon.js +20 -0
  37. package/src/geometry/lineJoin.js +2 -2
  38. package/src/geometry/markerQuadCorners.js +6 -0
  39. package/src/geometry/nativeGeometry.js +1 -1
  40. package/src/geometry/polygon.js +4 -10
  41. package/src/geometry/segment.js +4 -3
  42. package/src/globals/colorTexture.js +6 -0
  43. package/src/globals/depthTexture.js +1 -0
  44. package/src/globals/drawMeshEntry.js +1 -1
  45. package/src/globals/meshPipeline.js +1 -0
  46. package/src/globals/mvtTextDecoder.js +1 -0
  47. package/src/globals/nativeScalableStyleKeys.js +1 -0
  48. package/src/globals/scenePass.js +1 -0
  49. package/src/globals/vectorStyleNamedColors.js +8 -0
  50. package/src/globals/vectorTileEvents.js +1 -0
  51. package/src/globals/workerCogSource.js +1 -0
  52. package/src/gpu/mountRenderer.js +4 -11
  53. package/src/gpu/releaseRenderer.js +1 -0
  54. package/src/index.js +6 -12
  55. package/src/materials/createProgramUniforms.js +1 -0
  56. package/src/models/loadModel.js +6 -10
  57. package/src/models/loadModelResources.js +2 -8
  58. package/src/models/modelNode.js +3 -7
  59. package/src/models/prepareModel.js +19 -0
  60. package/src/models/prepareModelGeometry.js +25 -0
  61. package/src/models/prepareModelPrimitive.js +17 -0
  62. package/src/mvt/addMvtCrossings.js +17 -0
  63. package/src/mvt/appendMvtBandTriangles.js +31 -0
  64. package/src/mvt/appendMvtCoordinates.js +11 -0
  65. package/src/mvt/appendMvtPolygonTriangles.js +19 -0
  66. package/src/mvt/beginMvtPath.js +9 -0
  67. package/src/mvt/closeMvtPath.js +7 -0
  68. package/src/mvt/collectMvtEdges.js +19 -0
  69. package/src/mvt/createMvtReader.js +7 -0
  70. package/src/mvt/decodeVectorTile.js +32 -0
  71. package/src/mvt/expectMvtWire.js +3 -0
  72. package/src/mvt/finishMvtPath.js +5 -0
  73. package/src/mvt/finiteMvtCoordinate.js +7 -0
  74. package/src/mvt/groupMvtPolygons.js +25 -0
  75. package/src/mvt/isMvtFallbackError.js +6 -0
  76. package/src/mvt/mergeMvtActiveEdges.js +9 -0
  77. package/src/mvt/mvtEdgeX.js +4 -0
  78. package/src/mvt/mvtPathsVertices.js +8 -0
  79. package/src/mvt/mvtPolygonPaths.js +12 -0
  80. package/src/mvt/numericMvtValue.js +4 -0
  81. package/src/mvt/readMvtFeature.js +34 -0
  82. package/src/mvt/readMvtField.js +8 -0
  83. package/src/mvt/readMvtGeometry.js +29 -0
  84. package/src/mvt/readMvtInteger.js +12 -0
  85. package/src/mvt/readMvtKnownValue.js +21 -0
  86. package/src/mvt/readMvtLayer.js +31 -0
  87. package/src/mvt/readMvtMessage.js +10 -0
  88. package/src/mvt/readMvtNumber.js +9 -0
  89. package/src/mvt/readMvtNumbers.js +11 -0
  90. package/src/mvt/readMvtString.js +6 -0
  91. package/src/mvt/readMvtValue.js +19 -0
  92. package/src/mvt/skipMvtField.js +14 -0
  93. package/src/mvt/sortMvtActiveEdges.js +15 -0
  94. package/src/mvt/sortedMvtLevels.js +22 -0
  95. package/src/mvt/takeMvtBytes.js +8 -0
  96. package/src/mvt/tessellateVectorRings.js +19 -0
  97. package/src/mvt/triangulateVectorRings.js +19 -0
  98. package/src/native/beforeNativeRender.js +6 -0
  99. package/src/native/canScaleNativeStyle.js +17 -0
  100. package/src/native/createNativeMesh.js +31 -0
  101. package/src/native/disposeNativeLayer.js +1 -1
  102. package/src/native/getGridTerrainTile.js +34 -0
  103. package/src/native/gridTerrainElevation.js +30 -0
  104. package/src/native/loadGridTerrain.js +26 -0
  105. package/src/native/nativeLayer.js +2 -2
  106. package/src/native/nativeLayerMethod.js +5 -14
  107. package/src/native/nativeProgram.js +20 -0
  108. package/src/native/nativeVectorGeometry.js +23 -0
  109. package/src/native/orderNativeGridLayer.js +14 -0
  110. package/src/native/putNativeMesh.js +15 -21
  111. package/src/native/refreshNativeEvent.js +13 -2
  112. package/src/native/refreshNativeLayer.js +1 -0
  113. package/src/native/syncGridLayer.js +48 -3
  114. package/src/native/syncNativeStrokeAnchors.js +12 -0
  115. package/src/native/syncNativeStrokeZoom.js +29 -0
  116. package/src/native/syncVectorLayer.js +15 -13
  117. package/src/native/terrainGridMesh.js +34 -0
  118. package/src/native/updateNativeStrokeRadius.js +9 -0
  119. package/src/projections/displayContainerPoint.js +23 -3
  120. package/src/projections/groundBounds.js +2 -2
  121. package/src/projections/localPixel.js +7 -2
  122. package/src/projections/localPixelForGeometry.js +4 -2
  123. package/src/projections/projectCameraPoint.js +6 -5
  124. package/src/raster/setRasterOpacity.js +1 -1
  125. package/src/raster/setRasterZIndex.js +1 -1
  126. package/src/rendering/collectVisibleMesh.js +5 -2
  127. package/src/rendering/drawSceneMeshes.js +3 -1
  128. package/src/rendering/nativeStrokeExpansion.js +4 -0
  129. package/src/rendering/prepareMeshUniforms.js +2 -0
  130. package/src/rendering/resizeRenderer.js +9 -0
  131. package/src/scene/initializerFor.js +3 -5
  132. package/src/scene/layerInitialize.js +14 -12
  133. package/src/scene/resolveNextInitialization.js +1 -1
  134. package/src/shaders/materialShaders.js +1 -0
  135. package/src/shaders/materialVertexShader.js +7 -2
  136. package/src/shaders/nativeStrokeShader.js +6 -0
  137. package/src/sources/attachAreaMesh.js +5 -6
  138. package/src/sources/buildArea.js +7 -17
  139. package/src/sources/buildAreaFeature.js +5 -24
  140. package/src/sources/buildAreaFeatures.js +14 -0
  141. package/src/sources/initVectorTiles.js +15 -0
  142. package/src/sources/isVectorTileSource.js +4 -0
  143. package/src/sources/matchesAreaTile.js +7 -0
  144. package/src/sources/prepareAreaGeometryJob.js +2 -11
  145. package/src/sources/projectAreaPolygons.js +15 -0
  146. package/src/sources/readyVectorTiles.js +10 -0
  147. package/src/sources/sourceAreaContext.js +1 -6
  148. package/src/sunlight/createSun.js +0 -1
  149. package/src/terrain/initTerrain.js +7 -1
  150. package/src/terrain/loadTerrain.js +4 -1
  151. package/src/terrain/mapElevationOf.js +5 -1
  152. package/src/terrain/onTerrainAdd.js +11 -1
  153. package/src/terrain/onTerrainRemove.js +10 -1
  154. package/src/utils/yieldTask.js +5 -0
  155. package/src/vector-style/appendQuotedStyleCharacter.js +22 -0
  156. package/src/vector-style/arrayContainsRange.js +8 -0
  157. package/src/vector-style/evaluateBoolean.js +18 -0
  158. package/src/vector-style/evaluateCoalesceOrCase.js +21 -0
  159. package/src/vector-style/evaluateComparison.js +16 -0
  160. package/src/vector-style/evaluateIExpression.js +8 -0
  161. package/src/vector-style/evaluateInput.js +6 -0
  162. package/src/vector-style/evaluateInterpolate.js +27 -0
  163. package/src/vector-style/evaluateMatch.js +12 -0
  164. package/src/vector-style/evaluateMath.js +14 -0
  165. package/src/vector-style/evaluateMembership.js +18 -0
  166. package/src/vector-style/evaluateNegation.js +13 -0
  167. package/src/vector-style/evaluatePrimitive.js +9 -0
  168. package/src/vector-style/evaluateStep.js +11 -0
  169. package/src/vector-style/evaluateStyle.js +33 -0
  170. package/src/vector-style/evaluateToExpression.js +14 -0
  171. package/src/vector-style/fillVectorPaint.js +17 -0
  172. package/src/vector-style/lineVectorPaint.js +21 -0
  173. package/src/vector-style/parseFunctionalColor.js +14 -0
  174. package/src/vector-style/parseHexColor.js +13 -0
  175. package/src/vector-style/parseVectorStyle.js +13 -0
  176. package/src/vector-style/readPaintValue.js +6 -0
  177. package/src/vector-style/removeTrailingCommas.js +12 -0
  178. package/src/vector-style/scaleDashArray.js +13 -0
  179. package/src/vector-style/skipStyleComment.js +9 -0
  180. package/src/vector-style/stripStyleComments.js +21 -0
  181. package/src/vector-style/styleColor.js +11 -0
  182. package/src/vector-style/validateVectorLayers.js +10 -0
  183. package/src/vector-style/vectorPaint.js +8 -0
  184. package/src/vector-style/visibleStyle.js +7 -0
  185. package/src/vector-tiles/appendVectorBatch.js +22 -0
  186. package/src/vector-tiles/attachVectorTileBatch.js +17 -0
  187. package/src/vector-tiles/attachVectorTileBatches.js +15 -0
  188. package/src/vector-tiles/compareVectorLabelPriority.js +3 -0
  189. package/src/vector-tiles/compareVectorTileDistance.js +3 -0
  190. package/src/vector-tiles/configureVectorTileLayer.js +28 -0
  191. package/src/vector-tiles/forwardVectorTileError.js +5 -0
  192. package/src/vector-tiles/loadVectorSprite.js +5 -0
  193. package/src/vector-tiles/loadVectorTile.js +36 -0
  194. package/src/vector-tiles/onVectorTileAdd.js +39 -0
  195. package/src/vector-tiles/onVectorTileMessage.js +10 -0
  196. package/src/vector-tiles/onVectorTileRemove.js +20 -0
  197. package/src/vector-tiles/onVectorTileWorkerError.js +11 -0
  198. package/src/vector-tiles/paintVectorTileBatch.js +12 -0
  199. package/src/vector-tiles/prepareVectorLabel.js +43 -0
  200. package/src/vector-tiles/prepareVectorStyleLayer.js +30 -0
  201. package/src/vector-tiles/prepareVectorTile.js +16 -0
  202. package/src/vector-tiles/projectVectorPaths.js +15 -0
  203. package/src/vector-tiles/projectVectorPoint.js +6 -0
  204. package/src/vector-tiles/projectVectorTriangles.js +18 -0
  205. package/src/vector-tiles/pruneVectorTiles.js +11 -0
  206. package/src/vector-tiles/pumpVectorTiles.js +18 -0
  207. package/src/vector-tiles/readTileJSON.js +17 -0
  208. package/src/vector-tiles/readVectorStyle.js +17 -0
  209. package/src/vector-tiles/refreshVectorTiles.js +5 -0
  210. package/src/vector-tiles/reserveVectorLabelCells.js +6 -0
  211. package/src/vector-tiles/retireVectorTileGroup.js +13 -0
  212. package/src/vector-tiles/revokeVectorWorkerUrl.js +9 -0
  213. package/src/vector-tiles/rotateVectorLabel.js +12 -0
  214. package/src/vector-tiles/rotateVectorLabels.js +6 -0
  215. package/src/vector-tiles/simplifyVectorPath.js +21 -0
  216. package/src/vector-tiles/updateVectorLabelMarker.js +27 -0
  217. package/src/vector-tiles/updateVectorTileLabels.js +28 -0
  218. package/src/vector-tiles/updateVectorTilePaint.js +20 -0
  219. package/src/vector-tiles/updateVectorTiles.js +29 -0
  220. package/src/vector-tiles/validateVectorTileZooms.js +6 -0
  221. package/src/vector-tiles/vectorFeaturePaint.js +15 -0
  222. package/src/vector-tiles/vectorFeaturePaths.js +16 -0
  223. package/src/vector-tiles/vectorFeatureZoom.js +8 -0
  224. package/src/vector-tiles/vectorLabelAnchors.js +24 -0
  225. package/src/vector-tiles/vectorLabelCandidates.js +11 -0
  226. package/src/vector-tiles/vectorLabelCells.js +26 -0
  227. package/src/vector-tiles/vectorLabelIcon.js +30 -0
  228. package/src/vector-tiles/vectorLabelProperty.js +3 -0
  229. package/src/vector-tiles/vectorSpriteIcon.js +11 -0
  230. package/src/vector-tiles/vectorStraightRun.js +14 -0
  231. package/src/vector-tiles/vectorStyleDependencies.js +15 -0
  232. package/src/vector-tiles/vectorStyleValue.js +5 -0
  233. package/src/vector-tiles/vectorStyleZoom.js +6 -0
  234. package/src/vector-tiles/vectorTileAwaited.js +9 -0
  235. package/src/vector-tiles/vectorTileOverlaps.js +4 -0
  236. package/src/vector-tiles/vectorTilePaint.js +10 -0
  237. package/src/vector-tiles/vectorTileSettings.js +17 -0
  238. package/src/vector-tiles/vectorTilesIdle.js +3 -0
  239. package/src/vector-tiles/vectorTolerance.js +4 -0
  240. package/src/vector-tiles/wrapVectorLabel.js +11 -0
  241. package/src/walk/animateWalker.js +2 -13
  242. package/src/walk/updateWalkerFrame.js +19 -0
  243. package/src/weakmaps/nativeProgramsByRenderer.js +1 -0
  244. package/src/weakmaps/streamTerrainByLayer.js +1 -0
  245. package/src/weakmaps/streamTerrainByMap.js +1 -0
  246. package/src/weakmaps/vectorTileOptionsByLayer.js +1 -0
  247. package/src/weakmaps/vectorWorkerByLayer.js +1 -0
  248. package/src/weakmaps/workerMapByLayer.js +1 -0
  249. package/src/workers/acquireGeometryWorker.js +2 -5
  250. package/src/workers/buildAreaInWorker.js +3 -23
  251. package/src/workers/cogWorker.js +21 -0
  252. package/src/workers/createGeometryWorker.js +20 -0
  253. package/src/workers/geometryWorker.js +15 -0
  254. package/src/workers/getCogInWorker.js +7 -0
  255. package/src/workers/modelWorker.js +10 -0
  256. package/src/workers/openCogInWorker.js +14 -0
  257. package/src/workers/runSourceWorker.js +32 -0
  258. package/src/workers/settleGeometryWorker.js +1 -1
  259. package/src/workers/vectorTileWorker.js +10 -0
  260. package/src/geometry/buildExtrudedPolygon.js +0 -10
  261. package/src/sources/buildAreaPoint.js +0 -7
@@ -1,5 +1,7 @@
1
- (()=>{var d0=Object.defineProperty;var M=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var h0=(e,t)=>{for(var r in t)d0(e,r,{get:t[r],enumerable:!0})};var h,b=M(()=>{h=globalThis.L});var C,X=M(()=>{C=Math.PI/180});var He,qr=M(()=>{He=180/Math.PI});var en,$s=M(()=>{en=new WeakMap});function k(e){return en.get(e)??0}var H=M(()=>{$s()});var tn,Vs=M(()=>{tn=new WeakMap});function S(e){return tn.get(e)??0}var W=M(()=>{Vs()});var wo,Xn=M(()=>{wo=Object.freeze({})});var Ne,Jn=M(()=>{Ne=new WeakMap});function Qn(){let e=this.getSize().y,t=k(this)*C,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.abs(Math.cos(t))*o/(o+Math.sin(t)*r);i>0&&!Ne.get(this)&&(Ne.set(this,h.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),Ne.get(this).setAttribute("aria-hidden","true"),Ne.get(this).style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),Ne.get(this)&&(Ne.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",Ne.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,Ne.get(this).style.display=i>0?"":"none")}var hm=M(()=>{Jn();b();X();H()});function ze(e,t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!Number.isFinite(e.options.maxPitch)||e.options.maxPitch<0||e.options.maxPitch>180)throw new TypeError("maxPitch must be between 0 and 180 degrees");let o=k(e),i=S(e);return en.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),tn.set(e,(r%360+360)%360),e._loaded&&(Qn.call(e),i!==S(e)&&e.fire("rotate",{bearing:S(e)}),o!==k(e)&&e.fire("pitch",{pitch:k(e)})),e}var or=M(()=>{Vs();$s();H();W();hm()});var Ot,ea=M(()=>{Ot=new WeakMap});var Mo,ta=M(()=>{Mo=new WeakMap});var nr,ra=M(()=>{nr=new Map});var gt,oa=M(()=>{gt={value:null}});function bo(e){nr.delete(e),Ot.set(e,null),Mo.set(e,null),!nr.size&&gt.value!==null&&(cancelAnimationFrame(gt.value),gt.value=null)}var ia=M(()=>{ea();ta();ra();oa()});var Sr,aa=M(()=>{Sr=new WeakMap});var yi,gm=M(()=>{yi=new WeakMap});var ym,El=M(()=>{ym={value:void 0}});var xm,kl=M(()=>{xm={value:void 0}});var vm,_l=M(()=>{vm={value:void 0}});var wm,Il=M(()=>{wm={value:void 0}});var sa,zl=M(()=>{sa={value:void 0}});var yt,Lo=M(()=>{yt=new WeakMap});var Er,ma=M(()=>{Er=new Set});var xi,Mm=M(()=>{xi=Object.freeze({capture:!0,passive:!1})});function bm(){this._map.fire("cameratouchchange")}var Al=M(()=>{});var Bo,fa=M(()=>{Bo=Object.freeze([.8,.5])});var Ol,Dl=M(()=>{Ol=Object.freeze([.8,0])});var pa,Lm=M(()=>{pa=Object.freeze({preventScroll:!0})});var ca,Bm=M(()=>{ca=Object.freeze({animate:!0})});function Gl(e){gt.value=null;let t=[...nr];nr.clear();let r,o,i,n,a;for([o,i]of t)if(Mo.set(o,null),Ot.get(o)===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{ze(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&Ot.get(o)===i?la(o,i):Ot.get(o)===i&&Ot.set(o,null)}catch(s){r||=s}}if(r)throw r}var Rl=M(()=>{ea();ta();oa();ra();or();Tm()});function la(e,t){nr.set(e,t),gt.value===null&&(gt.value=requestAnimationFrame(Gl)),Mo.set(e,gt.value)}var Tm=M(()=>{ta();ra();oa();Rl()});function To(e,t,r,o=wo){if(bo(e),!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!o.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return ze(e,t,r);let i=o.duration??.3;if(!Number.isFinite(i)||i<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),a=k(e),s=S(e),m=((r-s)%360+540)%360-180,f={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:m};return Ot.set(e,f),la(e,f),e}var ua=M(()=>{ea();Xn();or();H();W();ia();Tm()});function Ul(e,t=ca){return To(e,0,0,t)}var Fl=M(()=>{Bm();ua()});function Dt(e,t,r){return To(e,k(e),t,r)}var vi=M(()=>{ua();H()});function Nl(e,t=ca){return Dt(e,0,t)}var jl=M(()=>{Bm();vi()});function Wl(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Ul(r):Nl(r),e.detail&&r.getContainer().focus(pa)}var Zl=M(()=>{Lm();Fl();jl()});function kr(e,t,r){return To(e,t,S(e),r)}var da=M(()=>{ua();W()});function $l(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")Dt(r,S(r)-o);else if(e.key==="ArrowRight")Dt(r,S(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)kr(r,k(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)kr(r,k(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var Vl=M(()=>{vi();W();da();H()});function ha(){let e=this._map,t=this.options.visualizePitch?k(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*C))))}) rotateX(${t}deg) rotate(${S(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(S(e))} degrees, pitch ${Math.round(k(e))} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!S(e)&&!t&&!this._container.contains(document.activeElement)?"none":""}var Pm=M(()=>{X();H();W()});var Ae,ar=M(()=>{Ae={value:new WeakMap}});var _r,ga=M(()=>{_r={value:new Set}});function ya(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var Cm=M(()=>{});function xa(e){let t=Ae.value.get(this);if(t.drag||!t.accept(e)||ya(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.(pa),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var Sm=M(()=>{ar();Lm();Cm()});function va(e){return bo(e),e}var Em=M(()=>{ia()});function wa(e){let t=Ae.value.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;va(t.map),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*He}else i*=e.clientY<t.drag.cy?1:-1;ze(t.map,k(t.map)-o*t.sensitivity[1],S(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var km=M(()=>{qr();ar();Em();or();H();W()});function Po(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Ma=M(()=>{});function sr(e){Po(Ae.value.get(this),e)}var _m=M(()=>{ar();Ma()});function ba(e){let t=Ae.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Im=M(()=>{ar()});function La(e){let t=Ae.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var zm=M(()=>{ar()});function Ba(){let e;for(e of _r.value)Po(e)}var Am=M(()=>{ga();Ma()});function Ta(e,t,r,o=Bo,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return Ae.value.set(t,n),_r.value.add(n),t.addEventListener("pointerdown",xa,!0),t.addEventListener("pointermove",wa),t.addEventListener("pointerup",sr),t.addEventListener("pointercancel",sr),t.addEventListener("lostpointercapture",sr),t.addEventListener("click",ba,!0),t.addEventListener("contextmenu",La),window.addEventListener("blur",Ba),n}var Om=M(()=>{fa();ar();ga();Sm();km();_m();Im();zm();Am()});function ql(e){return e.button===0}var Hl=M(()=>{});function Yl(){ha.call(this._rotateControl)}var Xl=M(()=>{Pm()});function Kl(e){let t=h.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=h.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=h.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=Wl,r.onkeydown=$l,this._refresh=ha,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=Ta(e,r,ql,this.options.visualizePitch?Bo:Ol),r.addEventListener("focusout",Yl),h.DomEvent.on(r,"dblclick contextmenu",h.DomEvent.stop),h.DomEvent.disableClickPropagation(t),h.DomEvent.disableScrollPropagation(t),t}var Jl=M(()=>{b();fa();Dl();Zl();Vl();Pm();Om();Hl();Xl()});function Ql(e){Po(e);let{element:t}=e;t.removeEventListener("pointerdown",xa,!0),t.removeEventListener("pointermove",wa),t.removeEventListener("pointerup",sr),t.removeEventListener("pointercancel",sr),t.removeEventListener("lostpointercapture",sr),t.removeEventListener("click",ba,!0),t.removeEventListener("contextmenu",La),Ae.value.delete(t),_r.value.delete(e),_r.value.size||window.removeEventListener("blur",Ba)}var eu=M(()=>{ar();ga();Ma();Sm();km();_m();Im();zm();Am()});function Pa(){Ql(this._dragState)}var Dm=M(()=>{eu()});function tu(e){e.off("rotate pitch",this._refresh,this),Pa.call(this)}var ru=M(()=>{Dm()});function ou(e){return new h.Control.Rotate(e)}var iu=M(()=>{b()});function nu(e){let t=this._cameraShiftRotate;!e.shiftKey||ya(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),Dt(t._map,S(t._map)+Math.sign(e.deltaY)*5))}var au=M(()=>{vi();W();Cm()});function su(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=nu,e.addEventListener("wheel",this._wheel,xi)}var mu=M(()=>{Mm();au()});function fu(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var pu=M(()=>{});function cu(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var lu=M(()=>{});function uu(){this._dragState=Ta(this._map,this._map.getContainer(),cu,Bo,!0)}var du=M(()=>{fa();Om();lu()});function hu(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&Dt(t._map,r-o)}var gu=M(()=>{vi()});function Gm(e,t){e.disable(),e._map.fire("error",{error:t})}var yu=M(()=>{});function xu([e,t]){let{handler:r,generation:o}=e.value;if(!(!r.enabled()||r._generation!==o)){if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")return Gm(r,t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied"));try{window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){Gm(r,i)}}}var vu=M(()=>{yu()});function wu(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:hu};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(xu)}var Mu=M(()=>{gu();vu()});function bu(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var Lu=M(()=>{});function Bu(e){e[0]?.target._containerResizeMap.invalidateSize()}var Tu=M(()=>{});function Pu(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Bu),this._observer.observe(e)}var Cu=M(()=>{Tu()});function Su(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var Eu=M(()=>{});var Co,Ca=M(()=>{Co=new WeakMap});var So,Sa=M(()=>{So=new WeakMap});function Ea(e){let t=yt.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!So.get(r).enabled()&&!Co.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;va(r);let a=o.getBoundingClientRect(),s=new h.Point((i.clientX+n.clientX)/2-a.left,(i.clientY+n.clientY)/2-a.top);t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:s,anchor:r.containerPointToLatLng(s),zoom:r.getZoom(),bearing:S(r),pitch:k(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new h.Point(s.x,s.y)},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var Rm=M(()=>{Ca();Sa();b();Lo();Em();W();H()});function ka(e){let t=yt.get(this),{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),m=o.getBoundingClientRect(),f=i.currentMiddle;f.x=(n.clientX+a.clientX)/2-m.left,f.y=(n.clientY+a.clientY)/2-m.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*He;ze(r,Co.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,So.get(r).enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let l=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),l,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var Um=M(()=>{Ca();Sa();qr();Lo();or()});function mr(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var wi=M(()=>{});function Eo(e){mr(yt.get(this),e)}var Fm=M(()=>{Lo();wi()});function _a(){let e=Sr.get(this),{map:t,container:r}=e,o=So.get(t).enabled()||Co.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(mr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var Nm=M(()=>{aa();Ca();Sa();wi()});function Ia(){let e;for(e of Er)mr(e)}var jm=M(()=>{ma();wi()});function ku(){let e=Sr.get(this);if(!e)return;let{container:t,map:r}=e;mr(e),t.removeEventListener("touchstart",Ea,!0),t.removeEventListener("touchmove",ka,!0),t.removeEventListener("touchend",Eo,!0),t.removeEventListener("touchcancel",Eo,!0),Er.delete(e),Er.size||window.removeEventListener("blur",Ia),r.off("cameratouchchange",_a,r),yi.get(r)?.remove(),yt.delete(t),Sr.delete(r)}var _u=M(()=>{aa();gm();ma();Lo();wi();Rm();Um();Fm();jm();Nm()});var Wm,Iu=M(()=>{Wm=new WeakMap});function Ir(e,t,r){let o=Wm.get(e);o||Wm.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var zu=M(()=>{Iu()});var Au={};h0(Au,{cameraControls:()=>g0});function g0(e){if(Ir(e,"trackContainerMutation",xm.value),!e.options.rotate)return;Ir(e,"shiftKeyRotate",wm.value),Ir(e,"pitchDrag",vm.value),Ir(e,"compassBearing",ym.value),Ir(e,"touchRotate",sa.value),Ir(e,"touchPitch",sa.value);let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};Sr.set(e,r),yt.set(t,r),Er.add(r),t.addEventListener("touchstart",Ea,xi),t.addEventListener("touchmove",ka,xi),t.addEventListener("touchend",Eo,!0),t.addEventListener("touchcancel",Eo,!0),window.addEventListener("blur",Ia),e.on("cameratouchchange",_a,e),e.options.rotateControl&&(yi.set(e,new h.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:wo)),yi.get(e).addTo(e)),e.once("unload",ku,e)}var Ou=M(()=>{aa();gm();b();El();kl();_l();Il();zl();Lo();ma();Mm();Xn();Al();Jl();ru();iu();mu();pu();du();Dm();Mu();Lu();Cu();Eu();Rm();Um();Fm();Nm();_u();jm();zu();ym.value=h.Handler.extend({addHooks:wu,removeHooks:bu});xm.value=h.Handler.extend({addHooks:Pu,removeHooks:Su});vm.value=h.Handler.extend({addHooks:uu,removeHooks:Pa});wm.value=h.Handler.extend({addHooks:su,removeHooks:fu});sa.value=h.Handler.extend({addHooks:bm,removeHooks:bm});h.Control.Rotate=h.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:Kl,onRemove:tu});h.control&&(h.control.rotate=ou)});b();var br={value:void 0};var ji={value:void 0};var Wi={value:void 0};b();var j={value:void 0};var Ve={value:void 0};var Zi={value:void 0};var $i={value:void 0};var Vi={value:void 0};var qi={value:void 0};var Hi={value:void 0};var Yi={value:void 0};var Xi={value:void 0};var xe=new WeakMap;var re=new WeakMap;var $r=new WeakMap;var qt=new WeakMap;b();b();var z=new WeakMap;var pt=new WeakMap;function oi(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)qe(r)}function ii(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)r.source.fire("error",{error:new Error("Unable to load native layer image")})}function Ki(e,t){let r=pt.get(e);r&&(r.delete(t),r.size||pt.delete(e))}function hf(e,t){let r=pt.get(e);r||pt.set(e,r=new Set),r.add(t)}var et=new WeakMap;var kt=new Set;var U=new WeakMap;var w=new WeakMap;var ee=new WeakMap;var _t=new WeakMap;var Ht=new WeakMap;var tt=new WeakMap;var Ji=[null];var Vr=new WeakMap;var ce=new WeakMap;var Re=new WeakMap;var gf={subtree:!0};var ke=new WeakMap;b();function Qi(e){let t;for(t of Object.values(e._layers))t instanceof h.Marker?t.update():(t instanceof h.Popup||t instanceof h.Tooltip)&&t._updatePosition()}function yf(e,t){let r=e._map,o=Re.get(e),i,n;for(n of ce.get(e).keys())if(n.effect.target===r._proxy){i=n;break}let a=i?.effect.getComputedTiming().progress??Math.min(1,(t-o.start)/250),s=r.getZoomScale(o.targetZoom,o.zoom),m=1+(s-1)*a,f=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);ke.set(r,{zoom:r.getScaleZoom(m,o.zoom),center:r.unproject(f.add(p.subtract(f).multiplyBy(s*a/m)),o.zoom)}),Qi(r)}function xf(e,t){let r=e._map,o,i,n;if(r._animatingZoom){ce.get(e)||ce.set(e,new Map);for(o of r.getContainer().getAnimations(gf))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||ce.get(e).has(o)||(i=o.currentTime||0,o.pause(),ce.get(e).set(o,{start:t,time:i}));for([o,{start:n,time:i}]of ce.get(e))o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);Re.get(e)&&yf(e,t)}}var Yt=new WeakMap;var ni={size:[null,null],format:"depth24plus",usage:null};async function vf(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function F(e,t){vf(e,t,w.get(e).device.queue.onSubmittedWorkDone())}function wf(e,t){(!Yt.get(e)||!Yt.get(e).equals(t))&&(w.get(e).width=t.x,w.get(e).height=t.y,w.get(e).canvas.width=Math.round(t.x*w.get(e).dpr),w.get(e).canvas.height=Math.round(t.y*w.get(e).dpr),w.get(e).canvas.style.width=`${t.x}px`,w.get(e).canvas.style.height=`${t.y}px`,w.get(e).depthTexture&&F(e,w.get(e).depthTexture),w.get(e).depthTexture=w.get(e).device.createTexture((ni.size[0]=w.get(e).canvas.width,ni.size[1]=w.get(e).canvas.height,ni.usage=GPUTextureUsage.RENDER_ATTACHMENT,ni)),Yt.set(e,t))}var Q=new WeakMap;var ne=new WeakMap;X();qr();var Mf=2*Math.atan(1/3)*He;var Xt=2*Math.PI*6378137;var ae=new WeakMap;var rt=new WeakMap;var ve=new WeakMap;var Ye=new WeakMap;var de=new WeakMap;b();function bf(e,t){let r=t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`);if(!r)return null;let o,i,n,a,s,m,f;for(o of r)if(!(e.x<o.min[0]||e.x>o.max[0]||e.y<o.min[1]||e.y>o.max[1])){for([i,n,a]of o.triangles)if(s=(n[1]-a[1])*(i[0]-a[0])+(a[0]-n[0])*(i[1]-a[1]),m=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,f=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,m>=0&&f>=0&&m+f<=1)return m*i[2]+f*n[2]+(1-m-f)*a[2]}return null}function ai(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function Lf(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,m=ai(t,i,n),f=ai(t,i+1,n),p=ai(t,i,n+1),c=ai(t,i+1,n+1);return!Number.isFinite(m)||!Number.isFinite(f)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(m)?m:Number.isFinite(f)?f:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(m*(1-a)+f*a)*(1-s)+(p*(1-a)+c*a)*s}function Kt(e,t){if(!e._map||!ve.get(e))return null;let r=t instanceof h.Point?t:e._map.project(t,de.get(e));return bf(r,rt.get(e))??Lf(r,Ye.get(e))}function ct(e,t){let r=ae.get(e);return r&&Kt(r,t)}var It=new WeakMap;H();W();var Bf=Math.PI/360;function Hr(e){e.x||=[0,0,0],e.y||=[0,0,0],e.z||=[0,0,0],e.viewTransform||=new DOMMatrix,e.projectionTransform||=new DOMMatrix,e.projectionViewTransform||=new DOMMatrix;let{position:t,target:r,up:o,x:i,y:n,z:a,viewMatrix:s,projectionMatrix:m,projectionViewMatrix:f}=e,p;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let c=Math.hypot(a[0],a[1],a[2])||1;a[0]/=c,a[1]/=c,a[2]/=c,i[0]=o[1]*a[2]-o[2]*a[1],i[1]=o[2]*a[0]-o[0]*a[2],i[2]=o[0]*a[1]-o[1]*a[0];let l=Math.hypot(i[0],i[1],i[2])||1;i[0]/=l,i[1]/=l,i[2]/=l,n[0]=a[1]*i[2]-a[2]*i[1],n[1]=a[2]*i[0]-a[0]*i[2],n[2]=a[0]*i[1]-a[1]*i[0];let u=e.viewTransform;u.m11=i[0],u.m12=i[1],u.m13=i[2],u.m14=0,u.m21=n[0],u.m22=n[1],u.m23=n[2],u.m24=0,u.m31=a[0],u.m32=a[1],u.m33=a[2],u.m34=0,u.m41=t[0],u.m42=t[1],u.m43=t[2],u.m44=1,u.invertSelf(),s[0]=u.m11,s[1]=u.m12,s[2]=u.m13,s[3]=u.m14,s[4]=u.m21,s[5]=u.m22,s[6]=u.m23,s[7]=u.m24,s[8]=u.m31,s[9]=u.m32,s[10]=u.m33,s[11]=u.m34,s[12]=u.m41,s[13]=u.m42,s[14]=u.m43,s[15]=u.m44;for(p of s)if(!Number.isFinite(p))throw new Error("Singular 3D transform");let d=1/Math.tan(e.fov*Bf),y=e.near,g=e.far;m[0]=d/e.aspect,m[1]=0,m[2]=0,m[3]=0,m[4]=0,m[5]=d,m[6]=0,m[7]=0,m[8]=0,m[9]=0,m[10]=g/(y-g),m[11]=-1,m[12]=0,m[13]=0,m[14]=g*y/(y-g),m[15]=0;let x=e.projectionTransform;x.m11=m[0],x.m12=m[1],x.m13=m[2],x.m14=m[3],x.m21=m[4],x.m22=m[5],x.m23=m[6],x.m24=m[7],x.m31=m[8],x.m32=m[9],x.m33=m[10],x.m34=m[11],x.m41=m[12],x.m42=m[13],x.m43=m[14],x.m44=m[15];let v=e.projectionViewTransform;v.m11=x.m11,v.m12=x.m12,v.m13=x.m13,v.m14=x.m14,v.m21=x.m21,v.m22=x.m22,v.m23=x.m23,v.m24=x.m24,v.m31=x.m31,v.m32=x.m32,v.m33=x.m33,v.m34=x.m34,v.m41=x.m41,v.m42=x.m42,v.m43=x.m43,v.m44=x.m44,v.multiplySelf(u),f[0]=v.m11,f[1]=v.m12,f[2]=v.m13,f[3]=v.m14,f[4]=v.m21,f[5]=v.m22,f[6]=v.m23,f[7]=v.m24,f[8]=v.m31,f[9]=v.m32,f[10]=v.m33,f[11]=v.m34,f[12]=v.m41,f[13]=v.m42,f[14]=v.m43,f[15]=v.m44}function Jt(e,t,r=!1){let o=ke.get(e);if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function Tf(e,t){let r=e._map,o=ke.get(r)?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(Xt*Math.cos(ne.get(e).lat*C)),n=Jt(r,j.value.layerPointToContainerPoint.call(r,r.project(ne.get(e)).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,m=It.get(r)?.control?._walk,f=(ct(r,r.getCenter())??0)+(m?.saved?m.state.height:0),p=(t.y/2-n.y)/i,c=k(r)*C,l=S(r)*C,u=Q.get(e);u.fov=Mf,u.aspect=t.x/t.y,u.near=Math.max(.1,a/1e4),u.far=Math.max(1e4,a*10),u.position[0]=s+Math.sin(l)*Math.sin(c)*a,u.position[1]=f+Math.cos(c)*a,u.position[2]=p+Math.cos(l)*Math.sin(c)*a,u.up[0]=-Math.sin(l)*Math.cos(c),u.up[1]=Math.sin(c),u.up[2]=-Math.cos(l)*Math.cos(c),u.target[0]=s,u.target[1]=f,u.target[2]=p,Hr(u)}var Lr=new WeakMap;function Pf(e,t){let r,o;if(e.matrix){let i=e._matrixState||=new Float64Array(16);for(r=0;r<16;r++)i[r]!==e.matrix[r]&&(t=!0),i[r]=e.matrix[r]}else{let i=e._transformState||=new Float64Array(9);for(r=0;r<9;r++)o=r<3?e.position[r]:r<6?e.rotation[r-3]:e.scale[r-6],i[r]!==o&&(t=!0),i[r]=o}return t}qr();function Cf(e){let t=e._localTransform||=new DOMMatrix;return t.m11=1,t.m12=0,t.m13=0,t.m14=0,t.m21=0,t.m22=1,t.m23=0,t.m24=0,t.m31=0,t.m32=0,t.m33=1,t.m34=0,t.m41=0,t.m42=0,t.m43=0,t.m44=1,t.translateSelf(e.position[0],e.position[1],e.position[2]),t.rotateAxisAngleSelf(0,1,0,e.rotation[1]*He),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*He),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*He),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function we(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n;if(i=Pf(e,i),!i){for(n of e.children)we(n);return}let a,s;e.matrix?a=e.matrix:a=Cf(e),s=e._worldTransform||=new DOMMatrix,a instanceof DOMMatrix?(s.m11=a.m11,s.m12=a.m12,s.m13=a.m13,s.m14=a.m14,s.m21=a.m21,s.m22=a.m22,s.m23=a.m23,s.m24=a.m24,s.m31=a.m31,s.m32=a.m32,s.m33=a.m33,s.m34=a.m34,s.m41=a.m41,s.m42=a.m42,s.m43=a.m43,s.m44=a.m44):(s.m11=a[0],s.m12=a[1],s.m13=a[2],s.m14=a[3],s.m21=a[4],s.m22=a[5],s.m23=a[6],s.m24=a[7],s.m31=a[8],s.m32=a[9],s.m33=a[10],s.m34=a[11],s.m41=a[12],s.m42=a[13],s.m43=a[14],s.m44=a[15]),t&&s.preMultiplySelf(t._worldTransform),e.worldMatrix[0]=s.m11,e.worldMatrix[1]=s.m12,e.worldMatrix[2]=s.m13,e.worldMatrix[3]=s.m14,e.worldMatrix[4]=s.m21,e.worldMatrix[5]=s.m22,e.worldMatrix[6]=s.m23,e.worldMatrix[7]=s.m24,e.worldMatrix[8]=s.m31,e.worldMatrix[9]=s.m32,e.worldMatrix[10]=s.m33,e.worldMatrix[11]=s.m34,e.worldMatrix[12]=s.m41,e.worldMatrix[13]=s.m42,e.worldMatrix[14]=s.m43,e.worldMatrix[15]=s.m44,e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(n of e.children)we(n)}function Be(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i,n,a,s;for(i=0;i<o.length;i+=3)n=o[i],a=o[i+1],s=o[i+2],t[0]=Math.min(t[0],n),r[0]=Math.max(r[0],n),t[1]=Math.min(t[1],a),r[1]=Math.max(r[1],a),t[2]=Math.min(t[2],s),r[2]=Math.max(r[2],s);let m=e.attributes.instanceOffset;if(m){let l,u,d,y;for(l=0;l<3;l++){for(d=1/0,y=-1/0,u=l;u<m.data.length;u+=m.size)d=Math.min(d,m.data[u]),y=Math.max(y,m.data[u]);t[l]=Math.fround(t[l]+d),r[l]=Math.fround(r[l]+y)}}let f=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],p=0;for(i=0;!m&&i<o.length;i+=3)n=o[i]-f[0],a=o[i+1]-f[1],s=o[i+2]-f[2],p=Math.max(p,n*n+a*a+s*s);let c=m?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:Math.sqrt(p);if(!m&&(p===1/0||p<Number.MIN_VALUE/Number.EPSILON))for(c=0,i=0;i<o.length;i+=3)c=Math.max(c,Math.hypot(o[i]-f[0],o[i+1]-f[1],o[i+2]-f[2]));e.bounds={min:t,max:r,center:f,radius:c}}function Sf(e,t,r,o,i){e.geometry.bounds||Be(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=e._cullingSphere;if(!s||s.bounds!==n||s.matrix!==a||s.version!==e._worldMatrixVersion||e._worldMatrixVersion===void 0){s||=e._cullingSphere={};let d=n.center;s.x=a[0]*d[0]+a[4]*d[1]+a[8]*d[2]+a[12],s.y=a[1]*d[0]+a[5]*d[1]+a[9]*d[2]+a[13],s.z=a[2]*d[0]+a[6]*d[1]+a[10]*d[2]+a[14],s.radius=n.radius*Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10])),s.bounds=n,s.matrix=a,s.version=e._worldMatrixVersion}let{x:m,y:f,z:p,radius:c}=s,l=t[2]*m+t[6]*f+t[10]*p+t[14],u=t[3]*m+t[7]*f+t[11]*p+t[15];e._sortDepth=l/u,e._visibleInFrame=r[0][0]*m+r[0][1]*f+r[0][2]*p+r[0][3]>=-c*o[0]&&r[1][0]*m+r[1][1]*f+r[1][2]*p+r[1][3]>=-c*o[1]&&r[2][0]*m+r[2][1]*f+r[2][2]*p+r[2][3]>=-c*o[2]&&r[3][0]*m+r[3][1]*f+r[3][2]*p+r[3][3]>=-c*o[3]&&r[4][0]*m+r[4][1]*f+r[4][2]*p+r[4][3]>=-c*o[4]&&r[5][0]*m+r[5][1]*f+r[5][2]*p+r[5][3]>=-c*o[5],e._visibleInFrame&&i.push(e)}function qs(e,t,r,o,i,n,a){if(!e.visible)return;e.geometry&&(t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),Sf(e,r,o,i,n));let s;for(s of e.children)qs(s,t,r,o,i,n,a)}function Ef(e,t,r){let i=Q.get(e).projectionViewMatrix,n=w.get(e),a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),m,f,p,c,l;for(m=0;m<6;m++){for(f=Math.floor(m/2),p=a[m],c=0;c<4;c++)l=c*4,p[c]=m===4?i[l+2]:m%2?i[l+3]-i[l+f]:i[l+3]+i[l+f];s[m]=Math.hypot(p[0],p[1],p[2])}let u=Lr.get(e);u||Lr.set(e,u=[]),u.length=0;let d=_t.get(e);d||_t.set(e,d=[]),d.length=0,r&&we(ee.get(e)),qs(ee.get(e),t,i,a,s,u,d)}var I=new WeakMap;var A=new WeakMap;var Y=new WeakMap;var si=new WeakMap;var se=new WeakMap;var Te=new WeakMap;b();var kf=[];X();var _f=[];var If={x:0,y:0};var zf={x:1,y:1};var Af={code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"};var Yr={layout:"auto",vertex:{module:null,entryPoint:"vertexMain"},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}};var Of={magFilter:"linear",minFilter:"linear"};function Df(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(Af);e.roofBlit={pipeline:t.createRenderPipeline((Yr.vertex.module=r,Yr.fragment.module=r,Yr)),sampler:t.createSampler(Of)},Yr.vertex.module=null,Yr.fragment.module=null}}var rn={size:null,usage:null};var on={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var nn={source:null};var an={texture:null};var sn=[null,null];function Gf(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((nn.source=t.image,nn),(an.texture=r.texture,an),(sn[0]=r.texture.width,sn[1]=r.texture.height,sn)),nn.source=null,an.texture=null,r.uploaded=r.image)}var ot={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var mn=[null];var fn={value:new Float32Array(64)};function Rf(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Uf(e,t,r,o,i,n,a){let s=w.get(e),m=s.device,f=e._map,p=Math.max(1,t.length)*64;fn.value.length<p&&(fn.value=new Float32Array(p));let c=fn.value,l=m.createBuffer((rn.size=c.byteLength,rn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,rn)),u=m.createCommandEncoder(),d=u.beginRenderPass((on.colorAttachments[0].view=Y.get(e).texture.texture.createView(),on));on.colorAttachments[0].view=null,d.setPipeline(s.roofBlit.pipeline),t.sort(Rf);let y,g,x,v,P,B,T,O;for([y,{tile:g,layer:x}]of t.entries())({coords:v}=g),P=g.texture,Gf(m,g),c[y*64]=x.options.opacity,B=256*f.getZoomScale(r,v.z),T=(v.x*B-o.x)*n/i.x,O=(v.y*B-o.y)*a/i.y,d.setViewport(T,O,Math.min(B*n/i.x,n-T),Math.min(B*a/i.y,a-O),0,1),d.setBindGroup(0,m.createBindGroup((ot.layout=s.roofBlit.pipeline.getBindGroupLayout(0),ot.entries[0].resource=P.texture.createView(),ot.entries[1].resource=s.roofBlit.sampler,ot.entries[2].resource.buffer=l,ot.entries[2].resource.offset=y*256,ot))),ot.layout=null,ot.entries[0].resource=null,ot.entries[1].resource=null,ot.entries[2].resource.buffer=null,d.draw(4);d.end(),m.queue.writeBuffer(l,0,c),m.queue.submit((mn[0]=u.finish(),mn)),mn[0]=null,l.destroy()}function Ff(e,t){let r=-1/0,o,i;for(o of e)for(i of A.get(o).values())i.done&&!i.request.signal.aborted&&i.image&&(i._roofEntry||={tile:i,layer:o},t.push(i._roofEntry),r=Math.max(r,i.coords.z));return r}var Nf={size:[null,null],format:"rgba8unorm",usage:null};var jf={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function Wf(e,t,r,o){let i=w.get(e),n=Nf;n.size[0]=r,n.size[1]=o,n.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,t.texture&&(t.texture.width!==r||t.texture.height!==o)&&(F(e,t.texture.texture),t.texture.texture=i.device.createTexture(n),t.texture.width=r,t.texture.height=o),t.texture||={device:i.device,texture:i.device.createTexture(n),sampler:i.device.createSampler(jf),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Zf(e,t,r,o){let i=e._map,n=w.get(e),a=_f;a.length=0;let s=Ff(t,a),m=1/0,f=1/0,p=-1/0,c=-1/0,l,u;a.length||(s=i.getZoom());for({tile:{coords:l}}of a)u=256*i.getZoomScale(s,l.z),m=Math.min(m,l.x*u),f=Math.min(f,l.y*u),p=Math.max(p,(l.x+1)*u),c=Math.max(c,(l.y+1)*u);let d=i.project(ne.get(e),s),y=If,g=zf;y.x=a.length?m:d.x,y.y=a.length?f:d.y,g.x=a.length?p-m:1,g.y=a.length?c-f:1;let x=Math.min(1,4096/Math.max(g.x,g.y)),v=Math.max(1,Math.ceil(g.x*x)),P=Math.max(1,Math.ceil(g.y*x)),B=i.options.crs.scale(s)/(Xt*Math.cos(ne.get(e).lat*C)),T={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:Y.get(e)?.texture};Y.set(e,T),T.signature=r,T.updatedAt=o,T.matrix[0]=B/g.x,T.matrix[10]=B/g.y,T.matrix[12]=(d.x-y.x)/g.x,T.matrix[14]=(d.y-y.y)/g.y,Wf(e,T,v,P),Df(n);try{Uf(e,a,s,y,g,v,P)}finally{a.length=0}}function $f(e,t,r){let o=kf;o.length=0;let i=!1,n;for(n of t)o.push(`${h.Util.stamp(n)}:${Te.get(n)||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!se.get(n);let a=o.join("|");o.length=0,(!Y.get(e)||Y.get(e).signature!==a&&(!i||r-Y.get(e).updatedAt>=50))&&Zf(e,t,a,r)}function Vf(e,t){let r=e._map,o=si.get(e);o||si.set(e,o=[]),o.length=0;let i=!1,n,a;for(n of U.get(e))if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(a of Object.values(r._layers))I.get(a)==="raster"&&A.get(a)&&a.options.opacity>0&&o.push(a);$f(e,o,t)}else Y.get(e)&&(F(e,Y.get(e).texture.texture),Y.set(e,null));return o}function qf(e,t){return e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id}function Hf(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||qf(e,t)}var R=new WeakMap;var Qt=new WeakMap;X();function Yf(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=Qt.get(r),s=o.project(ne.get(t),a),m=o.options.crs.scale(a)/(Xt*Math.cos(ne.get(t).lat*C)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,d,y,g,x,v,P,B;for(u=0;u<8;u++)d=u&1?i.max[0]:i.min[0],y=u&2?i.max[1]:i.min[1],g=u&4?i.max[2]:i.min[2],x=s.x+(n[0]*d+n[4]*y+n[8]*g+n[12])*m,v=s.y+(n[2]*d+n[6]*y+n[10]*g+n[14])*m,f=Math.min(f,x),p=Math.min(p,v),c=Math.max(c,x),l=Math.max(l,v);return R.get(r).maxLat!==void 0&&R.get(r).minLon!==void 0&&R.get(r).minLat!==void 0&&R.get(r).maxLon!==void 0&&(P=o.project([R.get(r).maxLat,R.get(r).minLon],a),B=o.project([R.get(r).minLat,R.get(r).maxLon],a),f=Math.max(f,P.x),p=Math.max(p,P.y),c=Math.min(c,B.x),l=Math.min(l,B.y),f>=c||p>=l)?null:[f,p,c,l]}function Xf(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,m,f,p,c,l,u,d;for([s,m,f,p]of e){if(c=Math.max(s,i),l=Math.max(m,n),u=Math.min(f,i+o),d=Math.min(p,n+o),c>=u||l>=d){a.push([s,m,f,p]);continue}m<l&&a.push([s,m,f,l]),d<p&&a.push([s,d,f,p]),s<c&&a.push([s,l,c,d]),u<f&&a.push([u,l,f,d])}return a}function Kf(e,t,r){let o=!1,i=!1,n,a,s,m;for(n of r){if(!R.get(n)){i=!0;continue}if(a=Yf(e,t,n),!!a){o=!0,s=[a];for(m of A.get(n).values())if(!(!m.done&&!m.error)&&(s=Xf(s,m,Qt.get(n)),!s.length))return!0}}return!o&&!i}function Jf(e,t,r,o){let i,n;if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){It.get(e._map)?.control?._walk?.saved&&(t._roofRevealed=!0,t.fadeStart=o-(t.fadeDuration||0)),t._roofCoverageSignature!==Y.get(e)?.signature&&(t._roofCoverageSignature=Y.get(e)?.signature,t._roofCovered=Kf(t,e,r)),n=!1;for(i of r)if(!R.get(i)||se.get(i)>0){n=!0;break}if(!t._roofRevealed&&!t._roofCovered&&n)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function Qf(e,t,r,o){let i=Lr.get(e),n=_t.get(e),a=w.get(e),s=!1,m,f;for(m of i)Jf(e,m,t,r)&&(m.fadeDuration&&(m.fadeStart??=m.tile?.loadedAt??r,f=Math.min(1,(r-m.fadeStart)/m.fadeDuration),m._appearance=f*f*(3-2*f),s||=f<1),o.push(m));i.length=0,o.sort(Hf);let p=1/0,c=-1/0;for(m of o)m.ground&&(p=Math.min(p,m.tile.coords.z),c=Math.max(c,m.tile.coords.z));a.groundOverlap=p!==c;let l=0;for(m of n)m.visible&&m._appearance!==0&&(n[l++]=m);return n.length=l,s}var pn={size:null,usage:null};function ep(e,t,r){let o=w.get(e);(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&F(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((pn.size=Math.max(64,t.length*4+r.length*2)*256,pn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,pn)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var L=new WeakMap;var Xe={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function cn(e){let t=w.get(e).sunlight;t.bindGroup=w.get(e).device.createBindGroup((Xe.layout=t.layout,Xe.entries[0].resource.buffer=t.buffer,Xe.entries[1].resource=t.texture.createView(),Xe.entries[2].resource=t.sampler,Xe.entries[3].resource.buffer=t.lights,Xe)),Xe.layout=null,Xe.entries[0].resource.buffer=null,Xe.entries[1].resource=null,Xe.entries[2].resource=null,Xe.entries[3].resource.buffer=null}function tp(e,t,r,o,i){let n,a;for(n=0,a=o[r]*4;n<8;n++)i[a+n]=e[t+n];o[r]+=2}function rp(e,t,r,o,i,n,a,s){let m=e[t+3],f=e[t]-r,p=e[t+2]-o,c,l,u;for(c=Math.floor((p-m)/i);c<=Math.floor((p+m)/i);c++)for(l=Math.floor((f-m)/i);l<=Math.floor((f+m)/i);l++)u=c*n+l,s?tp(e,t,u,a,s):a[u]++}function Hs(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)rp(s,m,t,r,o,i,n,a)}function op(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,m;if(r){let f=1/0,p=1/0,c=-1/0,l=-1/0;for(o of e)for(i=0;i<o.length;i+=8)f=Math.min(f,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),l=Math.max(l,o[i+2]+o[i+3]);let u=Math.ceil((c-f)/s)+1,d=Math.ceil((l-p)/s)+1,y=new Uint32Array(u*d),g=new Uint32Array(u*d);Hs(e,f,p,s,u,y);let x=0;for(n of y)x+=n;let v=(2+u*d+x*2)*4;if(v*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");m=new Float32Array(v),m[0]=f,m[1]=p,m[2]=s,m[3]=u,m[4]=d,m[5]=r;let P=2+u*d;for(a=0;a<y.length;a++)y[a]&&(m[(2+a)*4]=g[a]=P,m[(2+a)*4+1]=y[a],P+=y[a]*2);Hs(e,f,p,s,u,g,m)}else m=new Float32Array(8);return{data:m,count:r}}var ip=.03/(4*Math.PI);function np(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,m,f,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:m,flux:f}=e[o]),p=t[3]*i+t[7]*n+t[11]*a+t[15],r[o*8]=(t[0]*i+t[4]*n+t[8]*a+t[12])/p,r[o*8+1]=(t[1]*i+t[5]*n+t[9]*a+t[13])/p,r[o*8+2]=(t[2]*i+t[6]*n+t[10]*a+t[14])/p,r[o*8+3]=s,r[o*8+4]=m[0],r[o*8+5]=m[1],r[o*8+6]=m[2],r[o*8+7]=f*ip;return r}function Ys(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,m,f,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,m=n._worldLights,f=!!m,p=0;p<a.length&&f;p++)f=a[p]===m.matrix[p];(!f||m.lights!==s)&&(m=n._worldLights={lights:s,matrix:[...a],data:np(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===m}if(o)return t;let c=new Array(e.length),l=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],m=n._worldLights,c[i]=m.data,l[i]={mesh:n,cache:m};return{...op(c,r),meshes:l}}var it=[];function Xs(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||it)Xs(o,t,r)}function ap(e){let{device:t,sunlight:r}=w.get(e),o=[],i=[],n;for(n of U.get(e))!n.options.nightLight||!L.get(n).visible||Xs(L.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=Ys(o,r.staticLightGrid,a),m=Ys(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&m===r.dynamicLightGrid)return;let f=s.data.byteLength+m.data.byteLength;if(f>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<f&&(F(e,r.lights),r.lights=t.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),cn(e),p=!0),s.data[6]=s.data.length/4,p&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,m.data),r.lightCount=s.count+m.count,r.staticLightGrid=s,r.dynamicLightGrid=m}function sp(e,t,r,o){let i=w.get(e),n=Q.get(e),a=n.viewMatrix,s=o?.direction,m=s?s[0]:-300,f=s?s[1]:500,p=s?s[2]:300,c=a[0]*m+a[4]*f+a[8]*p,l=a[1]*m+a[5]*f+a[9]*p,u=a[2]*m+a[6]*f+a[10]*p,d=Math.hypot(c,l,u)||1,y=Math.hypot(a[4],a[5],a[6])||1;ep(e,t,r);let g=i.uniformData;g.set(n.viewMatrix,0),g.set(n.projectionMatrix,16),Y.get(e)?.matrix?g.set(Y.get(e).matrix,32):(g.fill(0,32,48),g[32]=g[37]=g[42]=g[47]=1),g[48]=c/d,g[49]=l/d,g[50]=u/d,g[51]=o&&o.altitude<=0?0:1,g[52]=a[4]/y,g[53]=a[5]/y,g[54]=a[6]/y;let x=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;g[55]=x*x*(3-2*x);let v=o?.tint;g[56]=v?v[0]:1,g[57]=v?v[1]:1,g[58]=v?v[2]:1,g[59]=0,x>0&&ap(e),i.uniformSlot=1}var Xr={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Ks=[null];var ge={layout:null,vertex:{module:null,entryPoint:"vertexMain",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:null,blend:null,writeMask:null}]},primitive:{topology:"triangle-list",cullMode:null,frontFace:null},depthStencil:{format:"depth24plus",depthWriteEnabled:null,depthCompare:null}};var mp={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function fp(e,t,r,o){let{program:i}=t,n=i.depthTest===!1||t.ground&&e.groundOverlap?"always":"less-equal",a=`${r}:${o}:${n}`,s=i.pipelineCache.get(a);return s||(s=e.device.createRenderPipeline((ge.layout=i.pipelineLayout,ge.vertex.module=i.vertex,ge.vertex.buffers=i.vertexBuffers,ge.fragment.module=i.fragment,ge.fragment.targets[0].format=e.format,ge.fragment.targets[0].blend=i.transparent?mp:void 0,ge.fragment.targets[0].writeMask=GPUColorWrite.ALL,ge.primitive.cullMode=r,ge.primitive.frontFace=o,ge.depthStencil.depthWriteEnabled=i.depthWrite,ge.depthStencil.depthCompare=n,ge)),ge.layout=null,ge.vertex.module=null,ge.vertex.buffers=null,ge.fragment.module=null,i.pipelineCache.set(a,s)),s}function pp(e,t,r){let o=e.uniformData,i=(t._nativeSource||t._rasterSource)?.options.cutout;if(i&&(!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.radius)||i.radius<0))throw new Error("cutout requires finite x, y and a non-negative radius in CSS pixels");o[r+36]=(i?.x??0)*e.dpr,o[r+37]=(i?.y??0)*e.dpr,o[r+38]=(i?.radius??0)*e.dpr,o[r+39]=i?.outside?1:0}function cp(e,t){let r=t.program.uniforms,o=e.uniformSlot++*256,i=e.uniformData,n=o/4;return i.set(t.worldMatrix,n),i.set(r.baseColor.value,n+16),i[n+19]=1,i[n+20]=r.metallic.value,i[n+21]=r.roughness.value,i[n+22]=r.opacity.value*(t.ground?t._appearance??1:1),i[n+23]=r.alphaCutoff.value,i.set(r.emissive.value,n+24),i[n+27]=r.occlusionStrength.value,i[n+28]=t.terrain?.[0]??0,i[n+29]=t.terrain?.[1]??0,i[n+30]=t.terrain?.[2]??0,i[n+31]=t.terrain?.[3]??0,i[n+32]=t.highlight?.[0]??0,i[n+33]=t.highlight?.[1]??0,i[n+34]=t.program.nightSparkle?i[55]:0,i[n+35]=t.ground?1:t._appearance??1,pp(e,t,n),o}var Br={source:null,flipY:null};var Kr={texture:null};var Jr=[null,null];function lp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Br.source=t.image,Br.flipY=!!t.flipY,Br),(Kr.texture=t.texture,Kr),(Jr[0]=t.image.width,Jr[1]=t.image.height,Jr)),Br.source=null,Kr.texture=null,t.uploaded=t.image)}var Qr={layout:null,entries:null};var up=[];var ln={binding:0,resource:{buffer:null,size:160}};var un={binding:1,resource:{buffer:null,size:240}};var dn={binding:2,resource:null};var mi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var fi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function dp(e,t,r){let{program:o}=t,i=up;i.length=0,ln.resource.buffer=e.uniformBuffer,un.resource.buffer=e.uniformBuffer,i.push(ln,un),o.terrain&&(dn.resource=o.terrain.texture.createView(),i.push(dn)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,m;for(a=0;a<r.length;a++)s=o.bindings[a],m=r[a],mi[a].binding=s.texture,mi[a].resource=m.texture.createView(),fi[a].binding=s.sampler,fi[a].resource=m.sampler,i.push(mi[a],fi[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((Qr.layout=o.bindGroupLayout,Qr.entries=i,Qr)),Qr.layout=null,Qr.entries=null,ln.resource.buffer=null,un.resource.buffer=null,dn.resource=null,a=0;a<r.length;a++)mi[a].resource=null,fi[a].resource=null;i.length=0}function hp(e,t){let{program:r}=t,{device:o}=e,i=t._textures||=[];i.length=0;let n,a,s;for(n of r.bindings){if(a=r.uniforms[n.name]?.value,!a)throw new Error(`Missing Layer3D texture: ${n.name}`);lp(o,a),i.push(a)}let m=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!m&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(m=!0);m&&dp(e,t,i)}function hn(e,t,r,o,i){let{geometry:n}=t,a=w.get(e),{device:s}=a,m=fp(a,t,o,i),f=cp(a,t);hp(a,t),r.setPipeline(m),r.setBindGroup(0,t.bindGroup,(Ks[0]=f,Ks)),r.setVertexBuffer(0,n.attributes.position.buffer),r.setVertexBuffer(1,n.attributes.normal.buffer),n.attributes.color&&r.setVertexBuffer(2,n.attributes.color.buffer),n.attributes.uv&&r.setVertexBuffer(3,n.attributes.uv.buffer);let p=n.attributes.instanceOffset;p&&r.setVertexBuffer(4,p.buffer);let c,l;for(c in n.attributes)l=n.attributes[c],l.needsUpdate&&(s.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1,(c==="position"||c==="instanceOffset")&&(n.bounds=null));let u=n.attributes.index;u?(r.setIndexBuffer(u.buffer,u.indexFormat),r.drawIndexed(n.drawRange.count,p?.count??1,n.drawRange.start,0,0)):r.draw(n.drawRange.count,p?.count??1,n.drawRange.start,0)}function gp(e,t,r){let o=w.get(e),i=t.beginRenderPass((Xr.colorAttachments[0].view=o.context.getCurrentTexture().createView(),Xr.depthStencilAttachment.view=o.depthTexture.createView(),Xr));Xr.colorAttachments[0].view=null,Xr.depthStencilAttachment.view=null,i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,m,f,p;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=Y.get(e)?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(m=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(m)||m===0)throw new Error("Singular 3D transform");n._frontFace=m<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}f=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(hn(e,n,i,"front",f),hn(e,n,i,"back",f)):hn(e,n,i,p.cullMode,f)}i.end()}var yp=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var xp=new Float32Array(20);function vp(e,t){let r=e.meshes.get(t),o=t.geometry.drawRange;if(!(r&&r.world===t._worldMatrixVersion&&r.geometry===t.geometry&&r.start===o.start&&r.count===o.count&&r.appearance===(t._appearance??1)))return!1;let i;for(i of Object.values(t.geometry.attributes))if(i.needsUpdate)return!1;return!0}function wp(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i){for(a of t)if(!vp(o,a)){i=!1;break}}return i}var Mp={min:[0,0,0],max:[0,0,0]};var bp={position:[0,0,0],target:[0,0,0],up:[0,0,-1],x:[0,0,0],y:[0,0,0],z:[0,0,0],fov:45,aspect:1,near:1,far:500,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};var Lp=[0,0,0];var Bp=[0,0,0];function Tp(e,t,r){let o=e._shadowBounds;if(!o||o.version!==e._worldMatrixVersion||o.bounds!==t){o||=e._shadowBounds={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},o.version=e._worldMatrixVersion,o.bounds=t,o.min.fill(1/0),o.max.fill(-1/0);let i,n,a,s,m,f,p;for(i=0;i<8;i++)for(n=i&1?t.max[0]:t.min[0],a=i&2?t.max[1]:t.min[1],s=i&4?t.max[2]:t.min[2],m=r[3]*n+r[7]*a+r[11]*s+r[15],f=0;f<3;f++)p=(r[f]*n+r[f+4]*a+r[f+8]*s+r[f+12])/m,o.min[f]=Math.min(o.min[f],p),o.max[f]=Math.max(o.max[f],p)}return o}function Pp(e,t={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}){let{min:r,max:o}=t;r.fill(1/0),o.fill(-1/0);let i,n,a,s,m;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&Be(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=Tp(i,n,a),m=0;m<3;m++)r[m]=Math.min(r[m],s.min[m]),o[m]=Math.max(o[m],s.max[m]);return r[1]=Math.min(0,r[1]),t}function Cp(e,t){let{min:r,max:o}=Pp(e,Mp),i=bp;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=Lp,a=Bp,s,m,f,p,c,l,u=Math.max(100,Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]));for(s=0;s<3;s++)i.target[s]=(r[s]+o[s])/2,i.position[s]=i.target[s]+t.direction[s]*u*2;i.far=u*5,Hr(i);let d=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(f=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],m=0;m<3;m++)l=d[m]*f+d[m+4]*p+d[m+8]*c+d[m+12],n[m]=Math.min(n[m],l-20),a[m]=Math.max(a[m],l+20);let y=2/(a[0]-n[0]),g=2/(a[1]-n[1]),x=-1/(a[2]-n[2]),v=new Float32Array(16);for(s=0;s<16;s+=4)v[s]=d[s]*y,v[s+1]=d[s+1]*g,v[s+2]=d[s+2]*x,v[s+3]=d[s+3];return v[12]-=(a[0]+n[0])/(a[0]-n[0]),v[13]-=(a[1]+n[1])/(a[1]-n[1]),v[14]+=a[2]/(a[2]-n[2]),v}var Js={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var Qs={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var eo={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var gn={code:null};var lt={layout:null,vertex:{module:null,entryPoint:"main",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}};var to={bindGroupLayouts:[null,null]};var ro=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var yn=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var Sp=[ro,yn];var Ep=[ro];function em(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((Js.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Js)),t.depthLayout=e.createBindGroupLayout((Qs.entries[0].visibility=GPUShaderStage.VERTEX,Qs)),t.depthBindGroup=e.createBindGroup((eo.layout=t.depthLayout,eo.entries[0].resource.buffer=t.buffer,eo)),eo.layout=null,eo.entries[0].resource.buffer=null);let i=e.createShaderModule((gn.code=` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,gn));gn.code=null;let n=r?Sp:Ep;t[o]=e.createRenderPipeline((lt.layout=e.createPipelineLayout((to.bindGroupLayouts[0]=t.meshLayout,to.bindGroupLayouts[1]=t.depthLayout,to)),lt.vertex.module=i,lt.vertex.buffers=n,lt.fragment.module=i,lt)),to.bindGroupLayouts[0]=null,to.bindGroupLayouts[1]=null,lt.layout=null,lt.vertex.module=null,lt.vertex.buffers=null,lt.fragment.module=null}}var xn={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var oo={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var tm=[null];function kp(e,t,r){let o=w.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass((xn.depthStencilAttachment.view=n.texture.createView(),xn));xn.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let m,f,p,c,l,u,d;for(m of r){f=m.geometry.attributes.instanceOffset,p=f?n.instancePipeline:n.pipeline,p!==s&&(s=p,a.setPipeline(s)),c=o.uniformSlot++*256,o.uniformData.set(m.worldMatrix,c/4),o.uniformData[c/4+35]=m._appearance??1,m._shadowBuffer!==o.uniformBuffer&&(m._shadowBuffer=o.uniformBuffer,m._shadowBindGroup=i.createBindGroup((oo.layout=n.meshLayout,oo.entries[0].resource.buffer=o.uniformBuffer,oo)),oo.layout=null,oo.entries[0].resource.buffer=null);for(l of Object.values(m.geometry.attributes))l.needsUpdate&&(i.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1);a.setBindGroup(0,m._shadowBindGroup,(tm[0]=c,tm)),a.setVertexBuffer(0,m.geometry.attributes.position.buffer),f&&a.setVertexBuffer(1,f.buffer),u=m.geometry.attributes.index,d=m.geometry.drawRange,u?(a.setIndexBuffer(u.buffer,u.indexFormat),a.drawIndexed(d.count,f?.count??1,d.start,0,0)):a.draw(d.count,f?.count??1,d.start,0)}a.end()}var pi={size:[null,null],format:"depth32float",usage:null};function vn(e,t){let r=w.get(e).device,o=w.get(e).sunlight;o.size!==t&&(o.texture&&F(e,o.texture),o.size=t,o.texture=r.createTexture((pi.size[0]=t,pi.size[1]=t,pi.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,pi)),cn(e))}function _p(e,t,r,o){let i=w.get(e),n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,yp),a.enabled=!1,a.cache=null;return}if(wp(a,r,o))return;let s=xp;a.enabled=!0,vn(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(Cp(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),em(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){em(n,a,!0);break}kp(e,t,r);let f=new Map,p;for(p of r)f.set(p,{world:p._worldMatrixVersion,geometry:p.geometry,start:p.geometry.drawRange.start,count:p.geometry.drawRange.count,appearance:p._appearance??1});a.cache={direction:[...o.direction],meshes:f}}function wn(e){let t=et.get(e);kt.delete(e),et.set(e,null),!kt.size&&t!=null&&cancelAnimationFrame(t)}var zt=new WeakMap;var ci=new WeakMap;var li=new WeakMap;var me=new WeakMap;var Mn=new WeakMap;function Z(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function io(e,t){Mn.get(e)?.abort();let r=A.get(e).get(t);r&&(Z(r,null),_(e),r.texture!==t.texture&&F(e,r.texture.texture),A.get(e).delete(t))}function no(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;A.get(e).get(r)===t&&(A.get(e).delete(r),Te.set(e,(Te.get(e)||0)+1),t.request.abort(),me.get(e)&&io(me.get(e),t),t.mesh&&Z(t.mesh,null),t.texture&&F(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),_(e))}function ao(e){let t=Ht.get(e),r=performance.now();if(ci.get(e)===Te.get(e)&&li.get(e)===t&&r<zt.get(e))return Number.isFinite(zt.get(e));ci.set(e,Te.get(e)),li.set(e,t),zt.set(e,1/0);let o=[],i,n,a,s,m,f;for(i of t)n=A.get(e).get(i),n?.done&&r-n.loadedAt<250&&zt.set(e,Math.min(zt.get(e),n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of A.get(e))if(!t.has(i)){s=!1;for(m of o)if(f=Math.min(m.z,n.coords.z),Math.floor(m.x/2**(m.z-f))===Math.floor(n.coords.x/2**(n.coords.z-f))&&Math.floor(m.y/2**(m.z-f))===Math.floor(n.coords.y/2**(n.coords.z-f))){s=!0;break}s||no(e,n)}return Number.isFinite(zt.get(e))}b();function so(e){return xe.get(e.source)===e&&e.map.hasLayer(e.source)}b();var bn=Object.freeze([1,1,1]);var Tr=new WeakMap;b();function Ln(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof h.GridLayer&&(t.opacity=o);let m=n?i._zIndex+(Tr.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var Ip=Object.freeze([0,2,1,1,2,3]);var rm=Object.freeze([0,0,1,0,0,1,1,1]);var zp=Object.freeze({minFilter:"linear",magFilter:"linear"});function _e(e,t){if(!t)return;Z(t,null),_(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function Op(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!so(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,qe(e)}catch(m){e.failed=!0,e.source.fire("error",{error:m})}finally{s?.close()}}function Dp(e,t,r,o,i,n,a){try{i.queue.copyExternalImageToTexture({source:o},{texture:r.texture},[n,a])}catch(s){throw r.texture.destroy(),e.textures.delete(t),s}r.uploaded=o}function Gp(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){if(a){let c=n.get(t);c&&_e(o,c),n.delete(t),F(o,a.texture),i.delete(t)}let m=r.naturalWidth||r.width,f=r.naturalHeight||r.height;if(!m||!f)return;let{device:p}=w.get(o);a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[m,f],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(zp)},i.set(t,a),r instanceof HTMLCanvasElement?(a.pending=!0,Op(e,t,a,r,p,m,f)):Dp(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}b();var mo=Object.freeze({});var Bn={size:null,usage:null};var ut={value:0};function Pe(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],highlightRange:[0,0],visible:!0}}var Tn={code:null};var Pn={code:null};var fo={bindGroupLayouts:[null,null]};var Rp=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";var Up=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var Fp=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Np=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var Cn={entries:null};var jp=[];var om={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var im={binding:1,visibility:null,buffer:{type:"uniform"}};var nm={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var Wp=[{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}}];var Zp=[{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}}];function $p(e,t){let r=jp;r.length=0,om.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,im.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(om,im),t.hasTerrain&&(nm.visibility=GPUShaderStage.VERTEX,r.push(nm));let o,i,n=0;for(o of t.bindings)i=Wp[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Zp[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((Cn.entries=r,Cn));return Cn.entries=null,a}function Vp(e){let t={baseColor:{value:e.color||[1,1,1]},metallic:{value:e.metallic??0},roughness:{value:e.roughness??.85},opacity:{value:e.opacity??1},alphaCutoff:{value:e.alphaCutoff??.5},occlusionStrength:{value:e.occlusionStrength??1},emissive:{value:e.emissive||[0,0,0]}};return e.baseTexture&&(t.baseTexture={value:e.baseTexture}),e.metalTexture&&(t.metalTexture={value:e.metalTexture}),e.emissiveTexture&&(t.emissiveTexture={value:e.emissiveTexture}),e.occlusionTexture&&(t.occlusionTexture={value:e.occlusionTexture}),(e.roofTexture||e.wallTexture)&&(t.roofTexture={value:null}),t}function po(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function qp(e){let t,r;for(t of["roofTexture","wallTexture"])if(r=e[t],r!==void 0&&typeof r!="boolean"&&(!Number.isFinite(r)||r<0||r>1))throw new Error(`${t} must be a boolean or a finite number between 0 and 1`)}function Hp(e){let t=Number(e.roofTexture??0);return` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${Number(e.wallTexture??0).toFixed(8)},${t.toFixed(8)},input.normal.y >= 0.5),((${!!e.roofTexture} && input.normal.y >= 0.5)||(${!!e.wallTexture} && abs(input.normal.y)< 0.5))&& !highlighted);`}function Yp(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"";return` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${o?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""} ${n?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${a};${o?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);let normal =(cross(m[1],m[2])* input.normal.x + cross(m[2],m[0])* input.normal.y + cross(m[0],m[1])* input.normal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${a};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${i?"output.uv = input.uv;":""} ${n?Hp(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Xp(e,t,r){return` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${t?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${r?" if(input.roof > 0.0 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a * input.roof);}":""}`}function Kp(e,t,r,o,i,n,a){return e.unlit?` let rasterTexel = ${r?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:`${Xp(e,r,a)} let mr = ${o?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${n?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${i?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}function Jp(e=mo,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);qp(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=Yp(e,t,r,m,f,s),c=[],l=po(c,"baseTexture",o),u=po(c,"metalTexture",i),d=po(c,"emissiveTexture",n),y=po(c,"occlusionTexture",a),g=po(c,"roofTexture",s),x=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${l}${u}${d}${y}${g} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${f?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{let cutoutDistance = distance(input.position.xy,u.cutout.xy);if(select((cutoutDistance < u.cutout.z),(cutoutDistance >= u.cutout.z),u.cutout.w > 0.0)){discard;}${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${Kp(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:x,bindings:c,textured:f,hasTerrain:m}}async function Qp(e,t){let r,o;try{let i=await Promise.all(t),n="",a=0;for(r of i)for(o of r.messages)o.type==="error"&&(n+=`${a++?`
2
- `:""}${o.message}`);a&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n}`)})}catch(i){e.fire("error",{error:i})}}function Ke(e,t=mo){let r=Jp(t,!!e.options.nightSparkle,t.terrain?Rp:""),o=w.get(e).device.createShaderModule((Tn.code=r.vertex,Tn));Tn.code=null;let i=w.get(e).device.createShaderModule((Pn.code=r.fragment,Pn));Pn.code=null,Qp(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[ro,Up,t.vertexColors?Fp:null,r.textured?Np:null];t.instanced&&n.push(yn);let a=$p(w.get(e).device,r),s=w.get(e).device.createPipelineLayout((fo.bindGroupLayouts[0]=a,fo.bindGroupLayouts[1]=w.get(e).sunlight.layout,fo));fo.bindGroupLayouts[0]=null,fo.bindGroupLayouts[1]=null;let m=Vp(t);return{device:w.get(e).device,vertex:o,fragment:i,bindings:r.bindings,vertexBuffers:n,bindGroupLayout:a,pipelineLayout:s,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:m,_layerMaterial:t}}function er(e,t,r=mo,o=0,i){let{device:n}=w.get(e),a={},s,m,f,p,c;for([s,m]of Object.entries(t))f=new Float32Array(m),p=s==="uv"?2:3,c=n.createBuffer((Bn.size=Math.max(4,f.byteLength),Bn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Bn)),n.queue.writeBuffer(c,0,f),a[s]={size:p,data:f,count:f.length/p,buffer:c};let l={...Pe(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||Ke(e,{vertexColors:!0,doubleSided:!0,...r}),id:ut.value++,renderOrder:0,extras:{}};return Z(l,L.get(e)),_(e),l}function Sn(e,t,r,o,i,n,a){let{backend:s,source:m,meshes:f}=e;if(!r.length)return;let p=f.get(t);if(!p||p.geometry.attributes.position.data.length!==r.length||p.program.uniforms.baseTexture?.value!==n){let c=[],l;for(l=0;l<r.length;l++)c.push(l%3===1?1:0);let u={position:r,normal:c};a&&(u.uv=a);let d={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND"};n&&(d.baseTexture=n),p&&_e(s,p),p=er(s,u,d,0,m instanceof h.GridLayer?e.rasterProgram:void 0),m instanceof h.GridLayer&&(e.rasterProgram||=p.program,p.texture=n),f.set(t,p)}else{let c=p.geometry.attributes.position;c.data.set(r),c.needsUpdate=!0,p.geometry.bounds=null}return Ln(e,p,o,i),p}function co(e,t,r,o,i){let n=Gp(e,t,r);if(!n)return;let a=Ip,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(rm[f*2],rm[f*2+1]);return Sn(e,t,s,bn,i,n,m)}var D=new WeakMap;X();function lo(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(D.get(o)),a=i.project(t),s=Math.cos(D.get(o).lat*C);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function En(e,t){let r=[],o,i;for(o=0;o<4;o++)i=o===0?t.getNorthWest():o===1?t.getNorthEast():o===2?t.getSouthWest():t.getSouthEast(),r.push(lo(e,i));return r}function tc(e){let{source:t,textures:r,meshes:o}=e,i,n,a,s,m,f,p;for(i in t._tiles)Object.hasOwn(t._tiles,i)&&(n=t._tiles[i],!(!n.loaded||n.el instanceof HTMLImageElement&&!n.el.naturalWidth)&&(a=(t.options.opacity??1)*(n._gpuOpacity??1),s=r.get(i),m=o.get(i),m&&s?.image===n.el&&s.url===(n.el.currentSrc||n.el.src)?(s.used=!0,Ln(e,m,bn,a)):([f,p]=t._tileCoordsToNwSe(n.coords),m=co(e,i,n.el,En(e,new h.LatLngBounds(f,p)),a)),m&&(m.renderOrder+=n.coords.z/100)))}function rc(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&co(e,"image",t._image,En(e,t.getBounds()),t.options.opacity??1)}var oc=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);b();X();W();function kn(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?S(e._map)*C:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new h.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function ui(e,t,r,o,i,n){return e.x=t.m11*r+t.m21*o+t.m31*i+t.m41*n,e.y=t.m12*r+t.m22*o+t.m32*i+t.m42*n,e.z=t.m13*r+t.m23*o+t.m33*i+t.m43*n,e.w=t.m14*r+t.m24*o+t.m34*i+t.m44*n,e}function ic(e,t,r){let o=e.source.options.icon.options,i=o[t==="shadow"?"shadowSize":"iconSize"],n=e.markerImageBounds||=[0,0,0,0];n[0]=i?i.x??i[0]:r.naturalWidth,n[1]=i?i.y??i[1]:r.naturalHeight;let a=t==="shadow"&&o.shadowAnchor||o.iconAnchor;return n[2]=a?a.x??a[0]:Math.floor(n[0]/2),n[3]=a?a.y??a[1]:Math.floor(n[1]/2),n}function nc(e,t,r){let{source:o,map:i,backend:n}=e,a=lo(e,o.getLatLng()),s=i.getSize(),m=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},f=m.root,p=m.camera,c=m.point,l=L.get(n).worldMatrix,u=Q.get(n).projectionViewMatrix,d,y;for(d=0;d<16;d++)y=oc[d],f[y]=l[d],p[y]=u[d];ui(c,f,a[0],a[1],a[2],1),ui(c,p,c.x,c.y,c.z,c.w);let g=c.x,x=c.y,v=c.z,P=c.w;p.invertSelf(),f.invertSelf();let[B,T,O,K]=ic(e,t,r),G=(g/P+1)*s.x/2,N=(1-x/P)*s.y/2,J=G-O,pe=N-K,ye=[],Qe,Le,ft,Ge,ri;for(d=0;d<4;d++)Qe=J+(d%2?B:0),Le=pe+(d<2?0:T),ft=kn(o,Qe-G,Le-N),Ge=G+ft.x,ri=N+ft.y,ui(c,p,Ge/s.x*2-1,1-ri/s.y*2,v/P,1),ui(c,f,c.x/c.w,c.y/c.w,c.z/c.w,1),ye.push([c.x,c.y,c.z]);return ye}function ac(e){let{source:t}=e,r,o,i,n;for(r=0;r<2;r++)o=r?"icon":"shadow",i=r?t._icon:t._shadow,!(!(i instanceof HTMLImageElement)||!i.complete||!i.naturalWidth)&&(n=co(e,o,i,nc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}var uo=[];b();b();function Ue(e,t,r,o,i){return t.push(...e(r),...e(o),...e(i))}b();var di=2*Math.PI;b();function am(e,t,r,o,i){return new h.Point(e.x+t*Math.cos(i*di/o),e.y+r*Math.sin(i*di/o))}function Pr(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)Ue(e,o,t,am(t,r,i,n,a),am(t,r,i,n,a+1))}function _n(e,t,r,o,i){let{options:n,width:a,stroke:s,point:m}=e,f=a/2,p=t.distanceTo(r);if(!p)return;let c=r.subtract(t).divideBy(p),l=new h.Point(-c.y*f,c.x*f);n.lineCap==="square"&&(o&&(t=t.subtract(c.multiplyBy(f))),i&&(r=r.add(c.multiplyBy(f)))),Ue(m,s,t.add(l),t.subtract(l),r.add(l)),Ue(m,s,r.add(l),t.subtract(l),r.subtract(l)),n.lineCap==="round"&&(o&&Pr(m,t,f,s),i&&Pr(m,r,f,s))}b();function sc(e,t,r,o,i){let{options:n,width:a,point:s,stroke:m}=e,f=t[r],p=a/2;if(n.lineJoin==="round"){Pr(s,f,p,m);return}let c=f.subtract(t[(r+t.length-1)%t.length]),l=Math.hypot(c.x,c.y);if(!l||!i)return;let u=c.divideBy(l),d=o.subtract(f).divideBy(i),y=u.x*d.y-u.y*d.x>0?-1:1,g=new h.Point(-u.y*y,u.x*y),x=new h.Point(-d.y*y,d.x*y),v=f.add(g.multiplyBy(p)),P=f.add(x.multiplyBy(p)),B=1+g.x*x.x+g.y*x.y,T=B>0?g.add(x).multiplyBy(p/B):null;Ue(s,m,v,f,P),n.lineJoin==="miter"&&T&&Math.hypot(T.x,T.y)<=p*4&&Ue(s,m,v,f.add(T),P)}function mc(e,t,r,o,i,n){let a=e.dash,s=0,m,f,p,c;for(;s<o;){for(m=((i+s)%n+n)%n,f=0;m>=a[f];)m-=a[f++];p=Math.min(o,s+a[f]-m),f%2===0&&(c=r.subtract(t).divideBy(o),_n(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),s=p}}function In(e,t,r){let{options:o,width:i,dash:n}=e;if(!o.stroke||i<=0||t.length<2)return;let a=Number(o.dashOffset)||0,s=0,m,f,p,c,l;for(m of n)s+=m;for(f=0;f<t.length-(r?0:1);f++)p=t[f],c=t[(f+1)%t.length],l=p.distanceTo(c),n.length?mc(e,p,c,l,a,s):(_n(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&sc(e,t,f,c,l)),a+=l}function fc(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function pc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||e[a].x<=e[s].x)?t[m]=e[a++]:t[m]=e[s++]}function cc(e){if(e.length<2)return e;let t=new Array(e.length),r=[],o,i,n,a,s;for(o of e)r.push({ring:o,x:fc(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)pc(m,f,n,i);a=m,m=f,f=a}for(s=0;s<e.length;s++)e[s]=m[s].ring;return e}function Me(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function nt(e,t){return e.x===t.x&&e.y===t.y}function lc(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],nt(o,i)||Math.abs(Me(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function zn(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function uc(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=lc(t.slice(o,o+=n.length)),zn(a)!==!!i&&a.reverse(),r.push(a);return r}function An(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function dc(e,t){let r;for(r=1;r<t.length;r++)if(An(e,t[r]))return!0;return!1}function hi(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function hc(e,t,r,o){if(nt(e,r)||nt(e,o)||nt(t,r)||nt(t,o))return!1;let i=Me(e,t,r),n=Me(e,t,o),a=Me(r,o,e),s=Me(r,o,t);return i*n<0&&a*s<0||i===0&&hi(e,t,r)||n===0&&hi(e,t,o)||a===0&&hi(r,o,e)||s===0&&hi(r,o,t)}function sm(e,t,r){let o;for(o=0;o<r.length;o++)if(hc(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function gc(e,t,r,o){if(sm(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(sm(e,t,o[i]))return!0;return!1}function yc(e,t,r,o){let i=-1,n=-1,a=1/0,s,m,f,p,c;for(s=0;s<t.length;s++)for(m=0;m<e.length;m++)f=t[s],p=e[m],c=(f.x-p.x)**2+(f.y-p.y)**2,!(c>=a)&&(o.x=(f.x+p.x)/2,o.y=(f.y+p.y)/2,!(!An(o,r[0])||dc(o,r))&&(gc(f,p,e,r)||(i=s,n=m,a=c)));if(i<0)throw new Error("Unable to connect polygon hole");return[...e.slice(0,n+1),...t.slice(i),...t.slice(0,i+1),e[n],...e.slice(n+1)]}function xc(e,t,r,o){let i;for(i of e)if(!nt(i,t)&&!nt(i,r)&&!nt(i,o)&&Me(t,r,i)>=0&&Me(r,o,i)>=0&&Me(o,t,i)>=0)return!0;return!1}function vc(e){let t=[],r,o,i,n,a,s;for(;e.length>3;){for(r=!1,o=0;o<e.length;o++)if(i=e[(o+e.length-1)%e.length],n=e[o],a=e[(o+1)%e.length],!(Me(i,n,a)<=1e-10)&&!xc(e,i,n,a)){t.push([i.index,n.index,a.index]),e.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Me(...e)>1e-10){let m=[];for(s of e)m.push(s.index);t.push(m)}return t}function mm(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function wc(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=mm(e[n]);let s=mm(e[0])-o;for(a of r)i+=Me(t[a[0]],t[a[1]],t[a[2]])/2;if(s<=0||Math.abs(i-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function ho(e,t=it){let r=[e,...t],o=r.flat(),i,n,a;for(i of o)if(!Number.isFinite(i.x)||!Number.isFinite(i.y))throw new Error("Invalid polygon coordinates");let s=[];for(n=0;n<o.length;n++)i=o[n],s.push({x:i.x-e[0].x,y:i.y-e[0].y,index:n});let m=uc(r,s),f=m[0].slice(),p=cc(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=yc(f,a,m,c);let l=vc(f);return wc(m,s,l),l}function fm(e,t,r){let{options:o,fill:i,point:n,map:a}=e,s=[],m,f,p,c;for(m of t){f=[];for(p of m)f.push(a.project(p));s.push(f)}if(r&&o.fill&&s[0]?.length>=3){let l=[];for(m of s)m.length>=3&&l.push(m);let u=l.flat();for(c of ho(l[0],l.slice(1)))Ue(n,i,u[c[0]],u[c[1]],u[c[2]])}for(m of s)In(e,m,r)}function pm(e,t,r){if(!t.length)return;let o;if(t[0]instanceof h.LatLng)fm(e,[t],r);else if(r&&t[0][0]instanceof h.LatLng)fm(e,t,r);else for(o of t)pm(e,o,r)}function Mc(e){let t=Array.isArray(e.dashArray)?e.dashArray:String(e.dashArray||"").trim().split(/[ ,]+/),r=[],o,i=!0;for(o of t)r.push(Number(o));for(o of r){if(!Number.isFinite(o)||o<0)throw new Error("Invalid Leaflet dashArray");o!==0&&(i=!1)}return i&&(r.length=0),r.length%2&&r.push(...r),r}b();b();function tr(e,t,r,o,i,n=0){let a=i*di/o;return new h.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}function bc(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:m}=t,f=r.project(e.getLatLng()),p=e.getRadius(),c=p,l,u;if(e instanceof h.Circle){e._project();let y=e._point.add(r.getPixelOrigin());f.x=y.x,f.y=y.y,p=e._radius,c=e._radiusY||p}a.fill&&Pr(o,f,p,i,c);let d=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let y=[];for(l=0;l<d;l++)y.push(tr(f,p,c,d,l));In(t,y,!0)}else if(a.stroke&&m>0)for(u=0;u<d;u++)Ue(o,n,tr(f,p,c,d,u,m/2),tr(f,p,c,d,u,-m/2),tr(f,p,c,d,u+1,m/2)),Ue(o,n,tr(f,p,c,d,u+1,m/2),tr(f,p,c,d,u,-m/2),tr(f,p,c,d,u+1,-m/2))}function Lc(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=Mc(n),m={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof h.CircleMarker)bc(e,m);else{let f=e instanceof h.Polygon;pm(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Bc(e,t){return lo(e,e.map.unproject(t))}function Tc(e){return Bc(uo[uo.length-1],e)}function On(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function Dn(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function Ie(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:On(Dn(0,e.h,e.l,n)),g:On(Dn(8,e.h,e.l,n)),b:On(Dn(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function Pc(e){let{source:t}=e;uo.push(e);let r;try{r=Lc(t,e.map,Tc)}finally{uo.pop()}let{fill:o,stroke:i}=r,n,a,s,m,f,p,c,l;for(n=0;n<2;n++)a=n?"stroke":"fill",s=n?i:o,m=n?t.options.color:t.options.fillColor||t.options.color,f=n?t.options.opacity:t.options.fillOpacity,s.length&&({r:p,g:c,b:l}=Ie(m),Sn(e,a,s,[p,c,l],f??1))}function Cc(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(_e(o,i),t.delete(a),n=r.get(a),n&&F(o,n.texture),r.delete(a));for([a,n]of r)n.used||(F(o,n.texture),r.delete(a))}function Gn(e){let{source:t,meshes:r,textures:o}=e;if(!so(e)||!w.get(e.backend)||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof h.GridLayer?tc(e):t instanceof h.ImageOverlay?rc(e):e.marker?ac(e):Pc(e),Cc(e)}function Sc(e){try{Gn(e)}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function rr(e){if(wn(e),z.get(e)!==e||!w.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;xf(e,r),wf(e,o),Tf(e,o),we(ee.get(e));let i=!1,n,a;for(n of U.get(e))a=Vr.get(n),a&&(Sc(a),i=!0);let s=tt.get(t);Ef(e,s,i);let m=_t.get(e),f=w.get(e),p=Vf(e,r),c=f.frameMeshes||=[];c.length=0;let l=Qf(e,p,r,c),u=f.device.createCommandEncoder();sp(e,c,m,s),_p(e,u,m,s),gp(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((Ji[0]=u.finish(),Ji)),Ji[0]=null;for(n of U.get(e))Ht.get(n)&&(l=ao(n)||l);(t._animatingZoom||l)&&_(e)}function Ec(){let e=[...kt];kt.clear();let t,r;for(r of e)if(et.set(r,null),!(z.get(r)!==r||!w.get(r)))try{rr(r)}catch(o){t||=o}if(t)throw t}function _(e){let t=z.get(e);if(!t)return e;if(t!==e)return _(t),e;if(et.get(e)!=null)return e;let r=kt.values().next().value;return kt.add(e),et.set(e,r?et.get(r):requestAnimationFrame(Ec)),e}b();function Rn(e){let{source:t}=e,r=t instanceof h.Marker&&t.options.icon instanceof h.DivIcon,o=r?null:t._icon,i=r?null:t._shadow,n,a;for(a of e.hidden)a===o||a===i||(a.classList.remove("leaflet-webgpu-target"),e.hidden.delete(a));for(n=0;n<2;n++)a=n?i:o,!(!a||e.hidden.has(a))&&(a.classList.add("leaflet-webgpu-target"),e.hidden.add(a))}function qe(e=this){e.dirty=!0,e.viewDirty=!0,e.failed=!1,Rn(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",oi),o.removeEventListener("error",ii),Ki(o,e),e.images.delete(o));for(r=0;r<3;r++)o=r===0?t._icon:r===1?t._shadow:t._image,!(!(o instanceof HTMLImageElement)||e.images.has(o))&&(e.images.add(o),hf(o,e),o.addEventListener("load",oi),o.addEventListener("error",ii));z.get(e.backend)&&_(e.backend)}function $(e,t,r){let o=xe.get(t),n=o.methods.get(e).original.apply(t,r),a,s;if((e==="bringToFront"||e==="bringToBack")&&t instanceof h.GridLayer){let m=e==="bringToFront"?-1/0:1/0;for(a of Object.values(o.map._layers))a===t||!(a instanceof h.GridLayer)||a.getPane()!==t.getPane()||(s=a.options.zIndex||0,m=e==="bringToFront"?Math.max(m,s):Math.min(m,s));let f=e==="bringToFront"?m+1:m-1;Number.isFinite(f)&&t.setZIndex(f)}return e==="bringToFront"&&(o.order=qt.get(o.map)+1,qt.set(o.map,o.order)),e==="bringToBack"&&(o.order=$r.get(o.map)-1,$r.set(o.map,o.order)),qe(o),n}function kc(...e){return $("setLatLng",this,e)}function _c(...e){return $("setLatLngs",this,e)}function Ic(...e){return $("addLatLng",this,e)}function zc(...e){return $("setRadius",this,e)}function Ac(...e){return $("setStyle",this,e)}function Oc(...e){return $("redraw",this,e)}function Dc(...e){return $("setIcon",this,e)}function Gc(...e){return $("setUrl",this,e)}function Rc(...e){return $("setBounds",this,e)}function Uc(...e){return $("setOpacity",this,e)}function Fc(...e){return $("setZIndex",this,e)}function Nc(...e){return $("setZIndexOffset",this,e)}function jc(...e){return $("bringToFront",this,e)}function Wc(...e){return $("bringToBack",this,e)}var cm={setLatLng:kc,setLatLngs:_c,addLatLng:Ic,setRadius:zc,setStyle:Ac,redraw:Oc,setIcon:Dc,setUrl:Gc,setBounds:Rc,setOpacity:Uc,setZIndex:Fc,setZIndexOffset:Nc,bringToFront:jc,bringToBack:Wc};b();var go=Object.freeze({});function Un(e=go){return new h.Layer(e)}b();var Cr=new WeakMap;var te=new WeakMap;var dt=new WeakMap;function Zc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[m]=e[a++]:t[m]=e[s++]}function $c(e){if(e.length<2)return e;let t=new Array(e.length),r=e,o=t,i,n,a,s;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)Zc(r,o,n,i);a=r,r=o,o=a}if(r!==e)for(s=0;s<e.length;s++)e[s]=r[s];return e}function Vc(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,m,f,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],m=e.origin[1],f=e.origin[2],p=n[3]*s+n[7]*m+n[11]*f+n[15],r[0]=(n[0]*s+n[4]*m+n[8]*f+n[12])/p,r[1]=(n[1]*s+n[5]*m+n[9]*f+n[13])/p,r[2]=(n[2]*s+n[6]*m+n[10]*f+n[14])/p,s=e.direction[0],m=e.direction[1],f=e.direction[2],o[0]=n[0]*s+n[4]*m+n[8]*f,o[1]=n[1]*s+n[5]*m+n[9]*f,o[2]=n[2]*s+n[6]*m+n[10]*f;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function qc(e,t,r){e.geometry.bounds||Be(e.geometry);let o=0,i=1/0,n,a,s;for(n=0;n<3;n++)if(Math.abs(r[n])<1e-12){if(t[n]<e.geometry.bounds.min[n]||t[n]>e.geometry.bounds.max[n]){i=-1/0;break}}else a=(e.geometry.bounds.min[n]-t[n])/r[n],s=(e.geometry.bounds.max[n]-t[n])/r[n],o=Math.max(o,Math.min(a,s)),i=Math.min(i,Math.max(a,s));return!(i<o)}function Fn(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=a?.count||n.count,f=s?t%m:t,p=s?Math.floor(t/m)*s.size:0,c=s?.data[p]??0,l=s?.data[p+1]??0,u=s?.data[p+2]??0,d=(a?a.data[f]:f)*n.size,y=(a?a.data[f+1]:f+1)*n.size,g=(a?a.data[f+2]:f+2)*n.size;r[0]=n.data[d],r[1]=n.data[d+1],r[2]=n.data[d+2],o[0]=n.data[y],o[1]=n.data[y+1],o[2]=n.data[y+2],i[0]=n.data[g],i[1]=n.data[g+1],i[2]=n.data[g+2],s&&(r[0]=Math.fround(r[0]+c),r[1]=Math.fround(r[1]+l),r[2]=Math.fround(r[2]+u),o[0]=Math.fround(o[0]+c),o[1]=Math.fround(o[1]+l),o[2]=Math.fround(o[2]+u),i[0]=Math.fround(i[0]+c),i[1]=Math.fround(i[1]+l),i[2]=Math.fround(i[2]+u))}function Hc(e,t,r,o,i){if(!e.program.nightLight)return!1;let{index:n,uv:{data:a}}=e.geometry.attributes,s=n?n.data[t]:t,m=n?n.data[t+1]:t+1,f=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[m*2]*r+a[f*2]*o,c=a[s*2+1]*(1-r-o)+a[m*2+1]*r+a[f*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Yc(e,t,r,o,i,n,a,s){let m=o[0]-r[0],f=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],l=i[1]-r[1],u=i[2]-r[2],d=a[1]*u-a[2]*l,y=a[2]*c-a[0]*u,g=a[0]*l-a[1]*c,x=m*d+f*y+p*g;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(x)<1e-9:x<1e-9)return 1/0;let v=n[0]-r[0],P=n[1]-r[1],B=n[2]-r[2],T=(v*d+P*y+B*g)/x;if(T<0||T>1)return 1/0;let O=P*p-B*f,K=B*m-v*p,G=v*f-P*m,N=(a[0]*O+a[1]*K+a[2]*G)/x;return N<0||T+N>1||Hc(e,t,T,N,s)?1/0:(c*O+l*K+u*G)/x}function Xc(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],m=o[2]*i+r[2],f=t.worldMatrix,p=f[3]*a+f[7]*s+f[11]*m+f[15],c=[(f[0]*a+f[4]*s+f[8]*m+f[12])/p,(f[1]*a+f[5]*s+f[9]*m+f[13])/p,(f[2]*a+f[6]*s+f[10]*m+f[14])/p];return{faceIndex:n,object:t,point:c,distance:Math.hypot(c[0]-e.origin[0],c[1]-e.origin[1],c[2]-e.origin[2])}}function Nn(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],m=[0,0,0],f,p,c,l,u,d,y,g,x;for(f of t)if(Vc(e,f,s,m),!!qc(f,s,m)){for({position:p,index:c,instanceOffset:l}=f.geometry.attributes,u=c?.count||p.count,d=1/0,y=void 0,g=0;g<u*(l?.count??1);g+=3)Fn(f,g,i,n,a),x=Yc(f,g,i,n,a,s,m,r),x>0&&x<d&&(d=x,y=g/3);y!==void 0&&o.push(Xc(e,f,s,m,d,y))}return $c(o)}function At(e,t,r){if(t(e,r))return;let o;for(o of e.children)At(o,t,r)}function jn(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Kc(e,t,r,o){let i=1,n=t.length-1,a;for(;i<n;)a=i+Math.floor((n-i)/2),t[a]<r?i=a+1:n=a;let s=e[i-1],m=e[i],f=t[i]-t[i-1]||1,p=(r-t[i-1])/f;return o||={},o.x=s[0]+(m[0]-s[0])*p,o.y=(s[2]??0)+((m[2]??0)-(s[2]??0))*p,o.z=s[1]+(m[1]-s[1])*p,o.dx=(m[0]-s[0])/f,o.dz=(m[1]-s[1])/f,o}function yo(e,t,r){let{points:o,lengths:i,length:n}=t.lane,a=t.distance+e.elapsed*t.speed;a-=n*Math.floor(a/n);let s=Kc(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function Jc(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o=e.position||={},i,n,a,s,m,f,p,c,l,u,d,y,g;for(i=0;i<e.trips.length;i++)for(n=e.trips[i],{x:a,y:s,z:m,dx:f,dz:p}=yo(e,n,o),c=0,l=i*e.stride;c<e.stride;c+=3,l+=3)u=e.template.position[c],d=e.template.position[c+2],y=e.template.normal[c],g=e.template.normal[c+2],t.data[l]=a-u*p-d*f,t.data[l+1]=s+e.template.position[c+1],t.data[l+2]=m+u*f-d*p,r.data[l]=-y*p-g*f,r.data[l+1]=e.template.normal[c+1],r.data[l+2]=y*f-g*p}function Qc(e){let t,r;for(t=1;t<=4;t++)for(r=1;r<=4;r++)if(!Number.isFinite(e[`m${t}${r}`]))throw new Error("Singular 3D transform")}function Wn(e,t,r=L.get(e).children,o=!0){if(!w.get(e))return[];let i=dt.get(e);i&&Jc(i);let n=e._map.getContainer().getBoundingClientRect();we(ee.get(e)),Hr(Q.get(e));let a=te.get(e).inverse,s=Q.get(e).projectionViewMatrix;a.m11=s[0],a.m12=s[1],a.m13=s[2],a.m14=s[3],a.m21=s[4],a.m22=s[5],a.m23=s[6],a.m24=s[7],a.m31=s[8],a.m32=s[9],a.m33=s[10],a.m34=s[11],a.m41=s[12],a.m42=s[13],a.m43=s[14],a.m44=s[15],a.invertSelf();let m=(t.clientX-n.left)/n.width*2-1,f=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*m+a.m21*f+a.m41,c=a.m12*m+a.m22*f+a.m42,l=a.m13*m+a.m23*f+a.m43,u=a.m14*m+a.m24*f+a.m44,d;Qc(a),te.get(e).origin[0]=Q.get(e).position[0],te.get(e).origin[1]=Q.get(e).position[1],te.get(e).origin[2]=Q.get(e).position[2],te.get(e).direction[0]=p/u-te.get(e).origin[0],te.get(e).direction[1]=c/u-te.get(e).origin[1],te.get(e).direction[2]=l/u-te.get(e).origin[2];let y=te.get(e).direction,g=Math.hypot(y[0],y[1],y[2])||1;te.get(e).direction[0]/=g,te.get(e).direction[1]/=g,te.get(e).direction[2]/=g;let x=te.get(e).meshes;x.length=0;for(d of r)o?At(d,jn,x):d.geometry&&d.visible&&d._appearance!==0&&x.push(d);return Nn(te.get(e),x,w.get(e).uniformData?.[55])}function el(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var ie=new WeakMap;var tl=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);b();function rl(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function ol(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof h.Marker||n.options.interactive===!1||!(n instanceof h.Path)&&!n.options.interactive)&&o.push(...Wn(a,t,i.meshes.values(),!1));return o.sort(rl),o[0]?.object._nativeSource||null}function Zn(e,t,r,o){t.hovered!==o&&(t.hovered&&t.fireDOMEvent.call(e,r,t.out,[t.hovered]),t.hovered=o,o&&t.fireDOMEvent.call(e,r,t.over,[o]),e.getContainer().style.cursor=o?"pointer":"")}function il(e,t,r,o){let i=r.target,n=i instanceof Element&&i.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");return n&&t.hovered&&(o===t.move||o===t.out)&&Zn(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function lm(e,t=e.type,r){let o=this,i=Cr.get(o),n=i.fireDOMEvent,a=ie.get(o);if(!w.get(a)||r||!tl.has(t))return n.call(this,e,t,r);if(il(o,i,e,t))return n.call(this,e,t,r);let s=ol(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&Zn(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function nl(e){let{map:t}=e,r=Cr.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=h.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=lm,r.restore=el,Cr.set(t,r),t._fireDOMEvent=lm}r.states.add(e),e._nativeEventContext=r}function xo(){qe(this)}function $n(){this.viewDirty=!0,z.get(this.backend)&&_(this.backend)}function al(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),Cr.delete(r))}function gi(){let e=this;if(e.disposed)return;e.disposed=!0;let{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",xo,e),r.off("zoomend",xo,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",$n,e),al(e);let m,f,p,c,l;for([m,f]of e.methods)f.own?Object.defineProperty(t,m,f.own):delete t[m];for(p of i.values())_e(o,p);i.clear();for(c of n.values())F(o,c.texture);n.clear();for(l of a)l.removeEventListener("load",oi),l.removeEventListener("error",ii),Ki(l,e);Vr.delete(o),o.remove()}function sl(){this.ready.resolve()}function ml({error:e}){this.ready.reject(e)}function fl({error:e}){this.source.fire("error",{error:e})}async function pl(e){let{source:t,map:r}=e,o=e.backend=Un({source:{type:"3d"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.images=new Set,qt.get(r)||qt.set(r,0),$r.get(r)||$r.set(r,0),e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=qt.get(r)+1,qt.set(r,e.order),e.marker=t instanceof h.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",xo,e),r.on("zoomend",xo,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",$n,e),nl(e);let n,a,s;for(n in cm)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=cm[n]);let m=e.ready=Promise.withResolvers();o.once("ready",sl,e),o.once("error",ml,e),o.on("error",fl,e),qe(e),o.addTo(r);try{await m.promise}catch(f){throw gi.call(e),f}if(!so(e))return t;Vr.set(o,e);try{Gn(e)}catch(f){throw gi.call(e),f}return _(e.backend),t}function cl(e){xe.get(e.source)===e&&xe.set(e.source,null),e.backend&&gi.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function ll(e){return xe.get(e.source)!==e?e.source:pl(e)}function Vn(e,t){e.fire("error",{error:t})}function qn(e,t){if(xe.get(e))return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r={source:e,map:t,hidden:new Set};xe.set(e,r),Rn(r),e.once("remove",cl.bind(null,r)),re.set(e,Promise.resolve().then(ll.bind(null,r))),re.get(e).catch(Vn.bind(null,e))}var Hn=[1,0,1,0];b();function fe(e){return new h.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}X();W();H();function Yn(e,t){let r=S(e)*C,o=k(e)*C;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function Fe(e,t,r=!1,o=!1){let i=e.getSize(),n=i.x/2,a=i.y/2,s=i.y*1.5,m=fe(t);if(!s)return m;let[f,p,c,l]=Yn(e,Hn),u=m.x-n,d=m.y-a;if(r){let v=i.y*e.options.pitchMaxDistance,P=c*s+l*d,B=P*c>0?d*s/P:-v;o&&(B=Math.max(-v,Math.min(v,B)));let T=u*(s-l*B)/s;return m.x=f*T+p*B+n,m.y=-p*T+f*B+a,m}let y=f*u-p*d,g=p*u+f*d,x=s/(s-l*g);return m.x=y*x+n,m.y=c*g*x+a,m}function ul(e){return Fe(this,Jt(this,j.value.layerPointToContainerPoint.call(this,e)))}function dl(e){return j.value.containerPointToLayerPoint.call(this,Jt(this,Fe(this,e,!0),!0))}function hl(){return j.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function gl(e,t){let r=this.getSize().divideBy(2),o=r.subtract(Fe(this,r.subtract(fe(e)),!0));return j.value.panBy.call(this,o,t)}b();H();W();function yl(e,t,r){if(!k(this)&&!S(this))return j.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof h.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),m=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(m),t,{zoom:r})}var ht=Object.freeze([0,0]);H();W();function xl(e,t={}){if(!k(this)&&!S(this))return j.value.panInside.call(this,e,t);let r=fe(t.paddingTopLeft||t.padding||ht),o=this.getSize().subtract(fe(t.paddingBottomRight||t.padding||ht)),i=this.latLngToContainerPoint(e),n=r;if(n.x=Math.max(r.x,Math.min(o.x,i.x)),n.y=Math.max(r.y,Math.min(o.y,i.y)),n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}b();H();W();b();function vo(e,t=ht){let r=fe(t).divideBy(2),o=e.getSize().subtract(r),i=new h.Bounds,n=r.x,a=r.y,s;for(s=0;s<4;s++)r.x=s%2?o.x:n,r.y=s<2?a:o.y,i.extend(Fe(e,r,!0,!0));return i}function vl(e,t,r){if(!r||!this._loaded||!k(this)&&!S(this))return j.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=vo(this),n=this.project(e,t),a=new h.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}H();W();function wl(e,t){if(!t||!k(this)&&!S(this))return j.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(Fe(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(Fe(this,r.subtract(n.subtract(i))))}H();W();b();Xn();function um(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function Kn(e,t,r=wo){t=t.getBounds?t.getBounds():t instanceof h.LatLngBounds?t:new h.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=fe(r.paddingTopLeft||r.padding||ht).subtract(i),s=i.subtract(fe(r.paddingBottomRight||r.padding||ht)),[m,f,p,c]=Yn(e,Hn);if(p<0){let u0=a.y;a.y=-s.y,s.y=-u0}let l=e.getSize().y*e.options.pitchMaxDistance,u=um(a.y,Math.abs(p),n,c,l),d=um(s.y,Math.abs(p),n,c,l),y=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),g=1/0,x=-1/0,v=a.x*c/n,P=s.x*c/n,B=P-v,T=1/0,O=-1/0,K=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],G,N,J,pe,ye;for(G=0;G<4;G++)N=K[G],J=e.project(N,o).subtract(y),pe=m*J.x-f*J.y,ye=f*J.x+m*J.y,g=Math.min(g,ye),x=Math.max(x,ye),T=Math.min(T,pe+v*ye),O=Math.max(O,pe+P*ye);let Qe=Math.min((d-u)/(x-g),(s.x-a.x-B*u)/(O-T-B*g)),Le=e.getScaleZoom(Qe,o),ft=e.options.zoomSnap;if(ft&&(Le=Math.floor(Math.round(Le/(ft/100))/100)*ft),Le=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,Le)),!Number.isFinite(Le))return{center:t.getCenter(),zoom:Le};let Ge=e.getZoomScale(Le,o),ri=x*Ge-d,uf=g*Ge-u,l0=Math.max(ri,B?(Ge*(O-T)-s.x+a.x)/B:ri),Zs=(Math.min(uf,l0)+uf)/2,df=(Ge*(T+O)-a.x-s.x-(v+P)*Zs)/2;return y.x+=(m*df+f*Zs)/Ge,y.y+=(-f*df+m*Zs)/Ge,{center:e.unproject(y,o),zoom:Le}}function Ml(e,t){return k(this)||S(this)?Kn(this,e,t):j.value._getBoundsCenterZoom.call(this,e,t)}b();H();W();function bl(e,t,r){if(!k(this)&&!S(this))return j.value.getBoundsZoom.call(this,e,t,r);if(!t)return Kn(this,e,{padding:fe(r||ht).divideBy(2)}).zoom;e=e instanceof h.LatLngBounds?e:new h.LatLngBounds(e);let o=vo(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function Ll(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(j.value.panBy.call(this,r,t),!0)}b();H();W();function Bl(){if(!k(this)&&!S(this))return j.value.getBounds.call(this);let e=vo(this),t=new h.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=j.value.containerPointToLayerPoint.call(this,Jt(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}var Tl=new WeakSet;var dm=new WeakMap;or();hm();function Pl(){this.options.maxBounds&&this._panInsideMaxBounds()}var ir=new WeakMap;Jn();ia();H();W();function na(){let e=this,t=ir.get(e);if(!k(e)&&!S(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(Fe(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function Cl(){bo(this),Ne.get(this)?.remove(),ir.get(this)&&(ir.get(this).off("predrag",na,this),ir.delete(this))}function Sl(){let e=this.dragging?._draggable;e&&(ir.set(this,e),e.on("predrag",na,this))}async function Du(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(Ou(),Au));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function at(){}function Gu(){if(Tl.add(this),!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}ze(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",Qn),this.on("rotate pitch",Pl,this),this.once("unload",Cl,this),this.whenReady(Sl,this),(this.options.rotate||this.options.trackContainerMutation)&&(dm.set(this,Du(this)),dm.get(this).catch(at))}b();function Ru(e){e instanceof h.DivIcon||(e.options.crossOrigin||=!0);let t=Ve.value.setIcon.call(this,e);return this._map&&!(e instanceof h.DivIcon)&&qn(this,this._map),t}function Uu(){let e=Ve.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}function ko(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function Fu(e){Ve.value._setPos.call(this,ko(this._map,e));let t,r,o,i,n,a;for(t=0;t<2;t++)r=t?this._shadow:this._icon,o=t?"shadowAnchor":"iconAnchor",r&&(i=kn(this,1,0),n=this.options.icon.options,a=n[o]||n.iconAnchor,r.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",r.style.transform+=` rotate(${Math.atan2(i.y,i.x)}rad) scale(${this.options.scale})`)}function xt(e=this){let t=xe.get(e);t?.backend&&!t.disposed&&qe(t)}function Nu(e){Ve.value._updateZIndex.call(this,e);let t=Tr.get(this)!==e;Tr.set(this,e),t&&xt(this)}var zr=new WeakMap;b();function ju(e){let t=this._marker._map,r=h.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);h.DomUtil.setPosition(this._marker._icon,o),zr.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}b();H();W();var Mi=new Map;var _o={value:null};function Wu(){_o.value=null;let e=[...Mi];Mi.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function Zu(e,t){Mi.set(e,t),_o.value===null&&(_o.value=requestAnimationFrame(Wu)),e._panRequest=_o.value}function $u(e){let t=this._marker,r=t._map;if(!k(r)&&!S(r))return zr.get(this)._cameraOriginalAdjustPan.call(this,e);let o=h.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=fe(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=o;if(s.x=(Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,s.y=(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a,!s.x&&!s.y)return;let m=r._getMapPanePos();r.panBy(s,{animate:!1});let f=m.subtract(r._getMapPanePos());this._draggable._newPos._add(f),this._draggable._startPos._add(f),h.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),Zu(this,e)}function Vu(){if(!this.dragging||zr.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;zr.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=ju,e._adjustPan=$u,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function qu(){let e=Ve.value._initInteraction.call(this);return Vu.call(this),e}function Hu(){let e=Zi.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}function Yu(){let e=$i.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}H();W();function Xu(){let e=this._map;if(!k(e)&&!S(e))return qi.value.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=fe(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(fe(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,m=t.bottom-r.top,f=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,m-i.y);if(!f&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=f,c.y-=p;let l=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(l)))}b();function Ku(){if(Vi.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=ko(this._map,e).subtract(e);this._zoomAnimated?h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}b();function Ju(e){Hi.value.call(this,e);let t=ko(this._map,e).subtract(e);h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t))}b();function Qu(){let e=Xi.value.call(this);return e.rotate=e.pitch=h.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}b();W();H();function ed(e){if(!S(this._map)&&!k(this._map))return Yi.value.call(this,e);let t=this._map.getBounds();return new h.Bounds(this._map.project(t.getNorthWest(),this._tileZoom),this._map.project(t.getSouthEast(),this._tileZoom))}j.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Map.prototype));h.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});h.Map.include({layerPointToContainerPoint:ul,containerPointToLayerPoint:dl,_getCenterLayerPoint:hl,panBy:gl,setZoomAround:yl,panInside:xl,_limitCenter:vl,_limitOffset:wl,_getBoundsCenterZoom:Ml,getBoundsZoom:bl,_tryAnimatedPan:Ll,getBounds:Bl});h.Map.addInitHook(Gu);Ve.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Marker.prototype));h.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});h.Marker.include({setIcon:Ru,getEvents:Uu,_setPos:Fu,_updateZIndex:Nu,_initInteraction:qu});Zi.value=h.Popup.prototype.getEvents;h.Popup.include({getEvents:Hu});$i.value=h.Tooltip.prototype.getEvents;h.Tooltip.include({getEvents:Yu});Vi.value=h.Popup.prototype._updatePosition;qi.value=h.Popup.prototype._adjustPan;h.Popup.include({_adjustPan:Xu,_updatePosition:Ku});Hi.value=h.Tooltip.prototype._setPosition;h.Tooltip.include({_setPosition:Ju});Yi.value=h.GridLayer.prototype._getTiledPixelBounds;Xi.value=h.GridLayer.prototype.getEvents;h.GridLayer.include({getEvents:Qu,_getTiledPixelBounds:ed});var le=new WeakMap;var V=new WeakMap;var fr=new WeakMap;var pr=new WeakMap;var q=new WeakMap;var je=new WeakMap;var Oe=new WeakMap;var cr=new WeakMap;var oe=new WeakMap;b();var za=new WeakMap;var bi=new WeakMap;var vt=new WeakSet;var Zm=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var $m=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var Vm=["minLon","minLat","maxLon","maxLat"];function Aa(e){let t=e.byteLength>=127?new DataView(e):null;if(!t||t.getUint32(0,!0)!==1767132496||t.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<Zm.length;o++)r[Zm[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<$m.length;o++)r[$m[o]]=t.getUint8(96+o);for(o=0;o<Vm.length;o++)r[Vm[o]]=t.getInt32(102+o*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}var Io=new WeakMap;async function zo(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(oe.get(e),{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(Io.get(e)&&n!==Io.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&Io.set(e,n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}function Ar(e){if(!vt.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return Ar(e.options.archive);let t=bi.get(e);return t||(t=zo(e,0,127).then(Aa),bi.set(e,t)),t}var st=new WeakMap;var wt=new WeakMap;X();function Oa(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of V.get(e).values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}b();b();function Da(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,m=new h.LatLng(r,t),f=i.project(m),p=ct(s,m),c=L.get(o);return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(c.position[1])?p-c.position[1]:0}}var Ao=[];function Ga(e){return e.ground||0}function Or(e,t,r,o,i,n,a,s,m,f,p){let{backend:c,positions:l,normals:u,colors:d,uvs:y}=e,g=o.x-t.x,x=i-r,v=t.y-o.y,P=n.x-t.x,B=a-r,T=t.y-n.y;if((x*T-v*B)*s+(v*P-g*T)*m+(g*B-x*P)*f<0){let O=o,K=i;o=n,i=a,n=O,a=K}l.push(t.x,r+Ga(t),-t.y,o.x,i+Ga(o),-o.y,n.x,a+Ga(n),-n.y),u.push(s,m,f,s,m,f,s,m,f),d.push(p.r,p.g,p.b,p.r,p.g,p.b,p.r,p.g,p.b),c.options.nightLight&&y.push(...t.uv,...o.uv,...n.uv)}function td(...e){Or(Ao[Ao.length-1],...e)}function Ra(e,t,r,o){Ao.push(e);try{t(r,o,td)}finally{Ao.pop()}}var Dr=[{x:Math.cos(0*Math.PI/3),y:Math.sin(0*Math.PI/3),nx:Math.cos(.5*Math.PI/3),nz:-Math.sin(.5*Math.PI/3)},{x:Math.cos(1*Math.PI/3),y:Math.sin(1*Math.PI/3),nx:Math.cos(1.5*Math.PI/3),nz:-Math.sin(1.5*Math.PI/3)},{x:Math.cos(2*Math.PI/3),y:Math.sin(2*Math.PI/3),nx:Math.cos(2.5*Math.PI/3),nz:-Math.sin(2.5*Math.PI/3)},{x:Math.cos(3*Math.PI/3),y:Math.sin(3*Math.PI/3),nx:Math.cos(3.5*Math.PI/3),nz:-Math.sin(3.5*Math.PI/3)},{x:Math.cos(4*Math.PI/3),y:Math.sin(4*Math.PI/3),nx:Math.cos(4.5*Math.PI/3),nz:-Math.sin(4.5*Math.PI/3)},{x:Math.cos(5*Math.PI/3),y:Math.sin(5*Math.PI/3),nx:Math.cos(5.5*Math.PI/3),nz:-Math.sin(5.5*Math.PI/3)}];function rd(e,t){let r=new Array(Dr.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Dr[o].x*t,y:e.y+Dr[o].y*t,ground:e.ground,uv:[3,3]};return r}function od(e,t,r){let o=Ie(5264986),i=t.poleRadius;if(!Number.isFinite(i)||i<=0)throw new Error("Invalid lamp pole radius");let n={...e,uv:[3,3]},a,s,m,f,p,c,l,u,d,y;for(y=0;y<2;y++)for(a=y?i*2.5:i,s=y?t.top-.25:0,m=y?t.top+.15:t.top,f=rd(e,a),p=0;p<6;p++)c=f[p],l=f[(p+1)%6],u=Dr[p].nx,d=Dr[p].nz,r(c,s,l,s,l,m,u,0,d,o),r(c,s,l,m,c,m,u,0,d,o),r(n,m,c,m,l,m,0,1,0,o),r(n,s,l,s,c,s,0,-1,0,o)}function id(e,t,r,o,i,n,a,s,m,f){typeof s!="number"?(e(r,a,o,a,i,a,...s,t),e(r,a,i,a,n,a,...s,t)):(e(r,a,o,a,i,a,s,m,f,t),e(r,a,i,a,n,a,s,m,f,t))}function Li(e,t,r,o){return{x:e.x+(o===2?0:t*.65),y:e.y+(o===1?0:o===2?t*.65:r*.65),ground:e.ground+(o===0?0:r*.65),uv:[t,r]}}function nd(e,t,r){if(!Number.isFinite(t.lightRadius)||t.lightRadius<=0)throw new Error("Invalid light radius");let o=Ie(t.color),i;for(i=0;i<3;i++)id(r,o,Li(e,-1,-1,i),Li(e,1,-1,i),Li(e,1,1,i),Li(e,-1,1,i),t.top,i===2?1:0,i===0?1:0,i===1?1:0)}var Ua=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var Oo=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function Bi(e,t){let r=new Array(Oo.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Oo[o].x*t,y:e.y+Oo[o].y*t,ground:e.ground};return r}function Fa(e,t,r,o,i,n,a){let s=Bi(e,r),m=Bi(e,i),f,p,c,l,u,d,y,g,x;for(f=0;f<8;f++)p=(f+1)%8,c=(r-i)/(n-o),l=Math.hypot(1,c),{nx:u,nz:d}=Oo[f],y=c/l,g=u/l,x=d/l,r&&t(s[f],o,s[p],o,m[p],n,g,y,x,a),i&&t(s[f],o,m[p],n,m[f],n,g,y,x,a)}function ad(e,t,r,o,i,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(r)||e<=0||t<e||r<=o||r>=i||n!=="round"&&n!=="cone")throw new Error("Invalid tree dimensions or crown shape")}function sd(e,t,r){let{top:o,bottom:i=0,trunkRadius:n,crownRadius:a,crownBottom:s,crownShape:m="round"}=t;ad(n,a,s,i,o,m);let f=Ie(t.trunkColor??7491898),p=Ie(t.color??5210683);Fa(e,r,n,i,n,s+(o-s)*.25,f);let c,l,u,d,y;if(m==="cone"){let g=Bi(e,a);for(c=0;c<8;c++)r(e,s,g[c],s,g[(c+1)%8],s,0,-1,0,p);Fa(e,r,a,s,0,o,p)}else for(c=1;c<Ua.length;c++)[l,u]=Ua[c-1],[d,y]=Ua[c],Fa(e,r,u*a,s+l*(o-s),y*a,s+d*(o-s),p)}function md(e,t,r,o,i){let{top:n}=r;if(e.backend.options.nightLight){if(!Number.isFinite(r.lightFlux)||r.lightFlux<=0)throw new Error("Invalid light flux");r.poleRadius>0&&!e.supports.has(i)&&(Ra(e,od,t,r),e.supports.add(i)),Ra(e,nd,t,r),e.lights.push({position:[t.x,t.ground+n,-t.y],radius:Math.hypot(n,r.lightRadius),color:[o.r,o.g,o.b],flux:r.lightFlux})}else Ra(e,sd,t,r)}function fd(e,t,r,o,i,n){let a=Da(e,r,o);md(e,a,i,n,t.properties?.cod_ouvrag||`${r},${o}`)}b();function Na(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],m=L.get(r),f,p,c,l,u,d;for(f=0;f<t.length-1;f++){if(p=t[f][0],c=t[f][1],!Number.isFinite(p)||!Number.isFinite(c))throw new Error("Invalid GeoJSON coordinates");l=new h.LatLng(c,p),u=o.project(l),d=ct(a,l),s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(d)&&Number.isFinite(m.position[1])?d-m.position[1]:0})}return s}function pd(e,t,r,o,i){let n=[],a,s,m,f,p,c,l,u,d,y,g;for(a of t)for(s of a)n.push(s);for([m,f,p]of ho(t[0],t.slice(1)))Or(e,n[m],r,n[f],r,n[p],r,0,1,0,i),o>0&&Or(e,n[m],o,n[f],o,n[p],o,0,-1,0,i);for(c=0;c<t.length;c++)for(a=t[c],l=zn(a)===(c===0)?-1:1,u=0;u<a.length;u++)m=a[u],f=a[(u+1)%a.length],d=Math.hypot(f.x-m.x,f.y-m.y),d&&(y=l*(f.y-m.y)/d,g=l*(f.x-m.x)/d,Or(e,m,o,f,o,f,r,y,0,g,i),Or(e,m,o,f,r,m,r,y,0,g,i))}function qm(e,t,r,o,i){if(!t.length)throw new Error("Empty GeoJSON polygon");let n=[],a;for(a of t)n.push(Na(e,a));pd(e,n,r,o,i)}function cd(e,t){let r=e?.geometry,o=r?.type==="Point";if(t&&!o)throw new Error("Night lights require Point geometry");if(r?.type!=="Polygon"&&r?.type!=="MultiPolygon"&&!o)throw new Error("Unsupported GeoJSON geometry");let i=o?r.coordinates:r.type==="Polygon"?r.coordinates[0]?.[0]:r.coordinates[0]?.[0]?.[0];if(!Number.isFinite(i?.[0])||!Number.isFinite(i?.[1]))throw new Error("Invalid GeoJSON coordinates");return i}function ld(e,t){let r=e.options.style(t);if(r===null)return null;if(!r||typeof r!="object")throw new Error("style must return an extrusion style or null");let{top:o,bottom:i=0}=r;if(!Number.isFinite(o)||!Number.isFinite(i)||i<0||o<=i)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");return r}function ud(e,t,r,o,i,n){let a=t.geometry,s=[],m=a.type==="Polygon"?[a.coordinates]:a.type==="MultiPolygon"?a.coordinates:[],f,p,c;for(f of m){if(!f.length)throw new Error("Empty GeoJSON polygon");c=[];for(p of f)c.push(Na(e,p));s.push(c)}let l=a.type==="Point"?Da(e,r,o):null,u=e.backend.options.nightLight,d=l?Ie(i.color??(u?void 0:5210683)):n,y=l&&!u?Ie(i.trunkColor??7491898):null;e.jobs.push({point:l,polygons:s,baseColor:{r:n.r,g:n.g,b:n.b},support:t.properties?.cod_ouvrag||`${r},${o}`,style:{top:i.top,bottom:i.bottom??0,color:{r:d.r,g:d.g,b:d.b},trunkColor:y?{r:y.r,g:y.g,b:y.b}:void 0,trunkRadius:i.trunkRadius,crownRadius:i.crownRadius,crownBottom:i.crownBottom,crownShape:i.crownShape,poleRadius:i.poleRadius,lightRadius:i.lightRadius,lightFlux:i.lightFlux}})}function dd(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=cd(t,r.options.nightLight),s=t.geometry,m=s.type==="Point",f=a[0],p=a[1];if(n){let P=i.project(new h.LatLng(p,f),n.z);if(Math.floor(P.x/256)!==n.x||Math.floor(P.y/256)!==n.y)return}let c=ld(r,t);if(c===null){e.skipped++;return}let{top:l,bottom:u=0,color:d=14267276}=c,y=Ie(d);if(e.jobs){ud(e,t,f,p,c,y),e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y});return}let g=e.positions.length/3;m&&fd(e,t,f,p,c,y);let x;if(s.type==="Polygon")qm(e,s.coordinates,l,u,y);else if(s.type==="MultiPolygon")for(x of s.coordinates)qm(e,x,l,u,y);let v=e.positions.length/3;e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y,faceStart:g/3,faceEnd:v/3,vertexStart:g,vertexEnd:v})}function hd(e){let{positions:t,normals:r,colors:o,featureFaces:i}=e;if(e.backend.options.nightLight||i.length<2)return e;let n=i[0].vertexEnd,a=n*3;if(!n||t.length!==a*i.length)return e;let s=Math.trunc(t[0]),m=Math.trunc(t[1]),f=Math.trunc(t[2]),p=new Float32Array(a),c,l,u,d;for(c=0;c<a;c++)p[c]=t[c]-(c%3===0?s:c%3===1?m:f);let y=new Float32Array(i.length*4);for(l=0;l<i.length;l++){if(u=i[l],d=l*a,u.vertexStart!==l*n||u.vertexEnd!==(l+1)*n)return e;for(y[l*4]=s+t[d]-t[0],y[l*4+1]=m+t[d+1]-t[1],y[l*4+2]=f+t[d+2]-t[2],y[l*4+3]=l*n,c=0;c<a;c++)if(Math.fround(p[c]+y[l*4+c%3])!==Math.fround(t[d+c])||Math.fround(r[c])!==Math.fround(r[d+c])||Math.fround(o[c])!==Math.fround(o[d+c]))return e}return{positions:p,normals:r.slice(0,a),colors:o.slice(0,a),instanceOffsets:y}}function gd(e){let{backend:t,area:r}=e;if(!e.positions.length){r.mesh=null,r.buildings=0,r.skipped=e.skipped,r.done=!0;return}let o=w.get(t).device,i=e.preparedGeometry||hd(e),n={position:{size:3,data:i.positions instanceof Float32Array?i.positions:new Float32Array(i.positions)},normal:{size:3,data:i.normals instanceof Float32Array?i.normals:new Float32Array(i.normals)},color:{size:3,data:i.colors instanceof Float32Array?i.colors:new Float32Array(i.colors)}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:e.uvs instanceof Float32Array?e.uvs:new Float32Array(e.uvs)});let a,s;for(a in n)s=n[a],s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let m={device:o,bounds:i.bounds,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...Pe(),device:o,geometry:m,program:Ke(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:t.options.roofTexture,wallTexture:t.options.wallTexture,nightLight:!!t.options.nightLight,alphaMode:t.options.nightLight?"BLEND":void 0,doubleSided:!!t.options.nightLight}),id:ut.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,Z(r.mesh,L.get(t)),_(t)}var yd=new TextDecoder;function xd(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s,m;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),m=t,t=r,r=m);return o}var vd={bytes:null,cursor:0};function Do(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function wd(e){let t=vd,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=Do(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,m;for(a=0;a<o;a++){if(n+=Do(t),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i[a]={tileId:n,runLength:0,length:0,offset:0}}for(s of i)s.runLength=Do(t);for(s of i)if(s.length=Do(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=Do(t),!m&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=m?m-1:i[a-1].offset+i[a-1].length}if(t.cursor!==r.length)throw new Error("Trailing PMTiles directory data");return i}finally{t.bytes=null,t.cursor=0}}async function Go(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);let r=new Blob([e]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function Md(e,t,r,o){return wd(await Go(await zo(e,t,r),o))}async function bd(e,t,r,o){let i=pr.get(e),n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,Md(e,t,r,o)));let a=i.get(n);try{return await a}catch(s){throw i.get(n)===a&&i.delete(n),s}}function Ld(e,t){let r=0,o=e.length-1,i;for(;r<=o;)i=r+o>>1,e[i].tileId<=t?r=i+1:o=i-1;return e[o]}async function Bd(e,t,r,o,i){if(o-r.tileId>=r.runLength)return;if(r.offset+r.length>t.tileDataLength)throw new Error("PMTiles tile outside data section");let n=await Go(await zo(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function Td(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,m=-1,f,p,c,l;for(f=0;f<4;f++){if(i===a||i===s||i===m)throw new Error("Cyclic PMTiles directory");if(f===0?a=i:f===1?s=i:f===2&&(m=i),p=await bd(e,i,n,t.internalCompression),o?.throwIfAborted(),c=Ld(p,r),!c)return;if(c.runLength)return l=await Bd(e,t,c,r,o),l;if(c.offset+c.length>t.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");i=t.leafDirectoryOffset+c.offset,n=c.length}throw new Error("PMTiles directory depth exceeds four levels")}async function Gr(e,t,r,o,i){if(!vt.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return Gr(e.options.archive,t,r,o,i);let n=xd(t,r,o);i?.throwIfAborted();let a=await Ar(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return Td(e,a,n,i)}async function Pd(e,t){if(q.get(e)){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=new URL(i,document.baseURI),a=await fetch(n,{signal:t.request.signal});if(!a.ok)throw new Error(`Unable to load GeoJSON: HTTP ${a.status}`);return a.json()}let r=await Gr(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(yd.decode(r.data)):{type:"FeatureCollection",features:[]}}X();function Cd(e,t,r){let o=r.options.crs,i=o.project(D.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(D.get(e).lat*C),positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set,skipped:0}}var Sd=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function Ed(e,t){if(t.type==="abort")e.reject(e.signal.reason);else if(t.type==="error")e.reject(new Error(`Geometry worker failed: ${t.message}`));else if(t.type==="messageerror")e.reject(new Error("Unable to receive geometry worker buffers"));else if(t.data.error){let r=new Error(t.data.error.message);r.name=t.data.error.name,e.reject(r)}else e.resolve(t.data)}function kd(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=Ed.bind(null,e),e.worker.addEventListener("message",e.onEvent),e.worker.addEventListener("error",e.onEvent),e.worker.addEventListener("messageerror",e.onEvent),e.signal.addEventListener("abort",e.onEvent,{once:!0}),e.signal.aborted){r(e.signal.reason);return}e.worker.postMessage(e.input)}var Hm=new WeakMap;function _d(e){e.closed=!0;let t;for(t of e.entries)t.closed=!0,t.worker.terminate(),t.task&&t.task.reject(new DOMException("Map removed","AbortError"));e.entries.clear(),e.idle.length=0}function Id(e,t){let r=e&&Hm.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},Hm.set(e,r),e.once("unload",_d.bind(null,r)));let o,i;if(r){if(r.closed)throw new DOMException("Map removed","AbortError");for(i=0;i<r.idle.length;i++)if(r.idle[i].url===t)return o=r.idle[i],r.idle.splice(i,1),o;o=r.idle.pop(),o&&(o.closed=!0,o.worker.terminate(),r.entries.delete(o))}return o={url:t,pool:r,worker:new Worker(t,{type:"module"})},r&&r.entries.add(o),o}async function zd(e,t){let r=Id(e.map||e.backend._map,e.backend.options.workerUrl||Sd),{worker:o,pool:i}=r,n={worker:o,signal:t,input:{jobs:e.jobs,nightLight:!!e.backend.options.nightLight}};r.task=n;let a=!1;try{let s=await new Promise(kd.bind(null,n)),m;for(m=0;m<s.ranges.length;m++)Object.assign(e.featureFaces[m],s.ranges[m]);e.positions=s.positions,e.uvs=s.uvs,e.lights=s.lights,e.preparedGeometry=s,a=!0}finally{o.removeEventListener("message",n.onEvent),o.removeEventListener("error",n.onEvent),o.removeEventListener("messageerror",n.onEvent),t.removeEventListener("abort",n.onEvent),r.task=null,a&&i&&!i.closed&&!t.aborted?i.idle.push(r):(r.closed||o.terminate(),i&&i.entries.delete(r)),e.jobs=null}}async function Ad(e,t,r){let o;try{if(await new Promise(requestAnimationFrame),await ke.get(r),t.request.signal.aborted)return;let i=await Pd(e,t);if(t.request.signal.aborted)return;if(i?.type!=="FeatureCollection"||!Array.isArray(i.features))throw new Error("Invalid GeoJSON response");if(q.get(e)&&typeof e.options.style!="function")throw new Error("style must be a function");let n=Cd(e,t,r);e.options.worker!==!1&&typeof Worker<"u"&&i.features.length>=64&&(n.jobs=[]);let a=performance.now()+4;for(o of i.features){if(t.request.signal.aborted)return;if(performance.now()>=a){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;a=performance.now()+4}dd(n,o)}if(n.jobs&&await zd(n,t.request.signal),t.request.signal.aborted)return;gd(n)}catch(i){t.request.signal.aborted||(t.error=i.message,e.fire("error",{error:i}))}finally{je.set(e,je.get(e)-1),Ti(e,r)}}function ja(e,t){return e.distance-t.distance}function Od(e,t){let r=[],o,i,n;for(o of e)for(i of V.get(o).values())i.started||i.request.signal.aborted||(n=i.coords&&t.project(t.getCenter(),i.coords.z).divideBy(256),r.push({layer:o,area:i,distance:n?Math.hypot(i.coords.x+.5-n.x,i.coords.y+.5-n.y)/2**i.coords.z:0}));return r.sort(ja),r}function Ti(e,t=e._map){let r=t&&ie.get(t);if(!r)return;let o=[],i,n,a;for(i of U.get(r))Number.isFinite(je.get(i))&&V.get(i)&&(oe.get(i)||q.get(i))&&o.push(i);let s=Od(o,t),m=0;for(i of o)m+=je.get(i);for({layer:a,area:n}of s){if(m>=4)break;je.get(a)>=2||(n.started=!0,je.set(a,je.get(a)+1),m++,Ad(a,n,t))}for(i of o)Oa(i)}var Je=new WeakMap;var be=new WeakMap;function Mt(e,t){t?.model&&(t=null),!(Je.get(e)?.mesh===t?.mesh&&Je.get(e)?.vertexStart===t?.vertexStart)&&(Je.get(e)&&(Je.get(e).mesh.highlight=null),Je.set(e,t),t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),_(e))}var Ce=new WeakMap;var lr=new WeakMap;var Se=new WeakMap;function bt(e,t,r){let o=Se.get(e);if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=Ce.get(e).getBoundingClientRect(),s=r.clientX-a.left,m=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${m+o.offsetHeight+16>a.height?m-o.offsetHeight-12:m+12}px`}else o.hidden=!0;let i=z.get(e),n;if(i){let a=!1;for(n of U.get(i))if(Se.get(n)&&!Se.get(n).hidden){a=!0;break}a?(lr.get(i)===void 0&&lr.set(i,Ce.get(e).style.cursor),Ce.get(e).style.cursor="pointer"):lr.get(i)!==void 0&&(Ce.get(e).style.cursor=lr.get(i),lr.delete(i))}}function Rr(e,t){t.request.abort();let r;if(t.mesh){Je.get(e)?.mesh===t.mesh&&(Mt(e,null),be.set(e,null),bt(e,null)),Z(t.mesh,null),_(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Dd(e,t){return e.distance-t.distance}function Ur(e){if(!e._map||!z.get(e))return;if(q.get(e)){V.get(e).has("geojson")||V.get(e).set("geojson",{request:new AbortController}),Ti(e);return}if(!R.get(e))return;let t=R.get(e).minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([R.get(e).maxLat,R.get(e).minLon],t).divideBy(256).floor(),s=e._map.project([R.get(e).minLat,R.get(e).maxLon],t).divideBy(256).floor(),m=new Map,f,p,c,l,u;for(f=Math.max(0,i.x-1,a.x);f<=Math.min(2**t-1,n.x+1,s.x);f++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)m.set(`${f}/${p}`,{z:t,x:f,y:p});for([c,l]of V.get(e))m.has(c)||(Rr(e,l),V.get(e).delete(c));let d=[];for([c,u]of m)u.distance=Math.hypot(u.x+.5-r.x,u.y+.5-r.y)/2**t,d.push(u);d.sort(Dd);for(u of d)c=`${u.x}/${u.y}`,V.get(e).has(c)||V.get(e).set(c,{coords:u,request:new AbortController});Ti(e)}function Ro(e){if(!L.get(e)||!D.get(e))return;wt.get(e)==null&&wt.set(e,L.get(e).position[1]);let t=ae.get(e._map),r=t&&Kt(t,D.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;L.get(e).position[1]=wt.get(e)+(r??0)+o}function Gd(e,t){e.attributes.index?.data instanceof Uint8Array&&(e.attributes.index.data=new Uint16Array(e.attributes.index.data));let r,o,i;for(r in e.attributes)o=e.attributes[r],o.size||=1,o.count=o.data.length/o.size,o.indexFormat=o.data instanceof Uint32Array?"uint32":"uint16",i=o.buffer,o.buffer=t.createBuffer({size:Math.max(4,o.data.byteLength),usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(o.buffer,0,o.data),i?.destroy();e.device=t,e.drawRange.count=e.attributes.index?.count||e.attributes.position.count}function Rd(e,t){let r,o;for(r in e)r!=="baseTexture"&&r!=="metalTexture"&&r!=="emissiveTexture"&&r!=="occlusionTexture"||(o=e[r],!(!o||o.device===t)&&(o.device=t,o.texture=t.createTexture({size:[o.image.width,o.image.height],format:o.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=t.createSampler(o.samplerOptions),o.uploaded=null))}function Ud(e,t){let r=z.get(t),o;if(e.geometry&&e.geometry.device!==w.get(r).device){let i=e.geometry,n=e.program._layerMaterial,a=w.get(r).device;Gd(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Rd(n,a),e.program.pipelineCache.clear(),e.program=Ke(t,n),e.device=a}e.texture&&e.texture.device!==w.get(r).device&&(o=e.texture,o.device=w.get(r).device,o.texture=w.get(r).device.createTexture({size:[e.texture.image.width,e.texture.image.height],format:e.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=w.get(r).device.createSampler(o.samplerOptions),o.uploaded=null)}var Uo=new WeakMap;function Fd(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function ur(e,t,r){throw Fd(r),st.get(t).reject(e),ie.delete(r),e}async function Nd(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){ur(o,e,t)}return r||ur(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function jd(e,t,r){try{return await e.requestDevice()}catch(o){ur(o,t,r)}}function Wd(e){let t=Uo.get(e.currentTarget),r=ie.get(t);if(w.get(r)?.device!==e.currentTarget||!U.get(r))return;let o;for(o of U.get(r))o.fire("error",{error:e.error})}function Zd([e,t]){let r=Uo.get(t),o=ie.get(r);if(!o||w.get(o)?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of U.get(o))n.fire("error",{error:i})}function $d(){return{position:[0,0,0],up:[0,1,0],target:[0,0,0],x:[0,0,0],y:[0,0,0],z:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],viewTransform:new DOMMatrix,projectionTransform:new DOMMatrix,projectionViewTransform:new DOMMatrix,fov:45,aspect:1,near:.1,far:1e4}}var Fo=new Float32Array(20);Fo[0]=Fo[5]=Fo[10]=Fo[15]=1;function Vd(e,t){let r=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),o=w.get(e).device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i=w.get(e).device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),n=w.get(e).device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});w.get(e).sunlight={layout:r,buffer:o,sampler:i,lights:n,size:0},w.get(e).device.queue.writeBuffer(o,0,Fo),vn(e,1);let a=document.createElement("canvas");a.width=1,a.height=1,w.get(e).roofFallbackTexture={device:t,texture:t.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:a,format:"rgba8unorm",srgb:!1,uploaded:null}}var Fr=new WeakMap;var Wa=[];function qd(){let e=Wa.shift();Fr.set(e,!1),!(z.get(e)!==e||!w.get(e))&&(e._map._animatingZoom?_(e):rr(e))}function Pi(){let e=this;Fr.get(e)||(Fr.set(e,!0),Wa.push(e),queueMicrotask(qd))}var No=new WeakMap;function Ci(){No.set(this,null)}var Za=[];function Hd(){let e=Za.shift();z.get(e)===e&&w.get(e)&&rr(e)}function Si(e){let t=this._map;e&&!Re.get(this)&&(Re.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),Za.push(this),queueMicrotask(Hd)}function Ei(){let e=this,t;if(ce.get(e))for(t of ce.get(e).keys())t.finish();ce.set(e,null),Re.set(e,null),ke.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),Qi(e._map),No.set(e,null),_(e)}function Yd(e,t,r){Yt.set(e,null),r.className="leaflet-3d",r.style.cssText="position:absolute;top:0;left:0;pointer-events:none",r.setAttribute("role","img"),r.setAttribute("aria-label",e.options.ariaLabel??"3D scene");let o=t.getPane("webgpuPane");o||(o=t.createPane("webgpuPane",t.getContainer()),o.style.zIndex=1,o.style.pointerEvents="none"),o.append(r),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Pi,e),t.on("zoomstart",Ci,e),t.on("zoomanim",Si,e),t.on("zoomend",Ei,e)}async function Xd(e,t){let r=document.createElement("canvas");navigator.gpu||ur(new Error("Layer3D requires WebGPU"),e,t);let o=await Nd(e,t),i=await jd(o,e,t);Uo.set(i,t),i.addEventListener("uncapturederror",Wd),Promise.all([i.lost,Promise.resolve(i)]).then(Zd);let n=r.getContext("webgpu");n||(i.destroy(),ur(new Error("Unable to create a WebGPU canvas context"),e,t));let a=navigator.gpu.getPreferredCanvasFormat();n.configure({device:i,format:a,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),z.set(e,e),U.set(e,new Set),ne.set(e,D.get(e)),ee.set(e,Pe()),Q.set(e,$d()),w.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),Vd(e,i),Yd(e,t,r)}async function jo(e,t){let r=ie.get(t);st.get(r)&&await st.get(r).promise,r||(r=e,st.set(e,Promise.withResolvers()),st.get(e).promise.catch(at),ie.set(t,r),await Xd(e,t),st.get(e).resolve(),st.delete(r),rr(r),ie.set(t,r));let o=t.options.crs.project(ne.get(r)),i=t.options.crs.project(D.get(e)),n=Math.cos(ne.get(r).lat*C);wt.get(e)==null&&wt.set(e,L.get(e).position[1]),L.get(e).position[0]=(i.x-o.x)*n,L.get(e).position[1]=wt.get(e),L.get(e).position[2]=-(i.y-o.y)*n,Ro(e),L.get(e).scale.fill(n/Math.cos(D.get(e).lat*C)),z.set(e,r),w.set(e,w.get(r)),ee.set(e,ee.get(r)),Q.set(e,Q.get(r)),U.get(r).add(e),Z(L.get(e),ee.get(r)),At(L.get(e),Ud,e),_(r),(R.get(e)&&I.get(e)!=="raster"||q.get(e))&&Ur(e)}var De=new WeakMap;var Kd=new TextDecoder;function Jd(e){if(!e)return!1;let t,r;for(t of e)for(r of t.primitives)if(r.targets||r.mode!==void 0&&r.mode!==4)return!0;return!1}function Qd(e){let t=new DataView(e),r=Kd,o,i,n,a,s;if(t.getUint32(0,!0)===1179937895){if(t.getUint32(4,!0)!==2||t.getUint32(8,!0)!==e.byteLength)throw new Error("Invalid GLB header");let m;for(i=12;i<e.byteLength;){if(i+8>e.byteLength)throw new Error("Truncated GLB chunk");if(n=t.getUint32(i,!0),a=t.getUint32(i+4,!0),i+=8,i+n>e.byteLength)throw new Error("Truncated GLB data");s=e.slice(i,i+n),a===1313821514&&(o=JSON.parse(r.decode(s))),a===5130562&&(m=s),i+=n}if(!o)throw new Error("Missing GLB JSON");m&&(o.buffers[0].binary=m)}else o=JSON.parse(r.decode(e));if(o.skins?.length||o.animations?.length||o.extensionsRequired?.length||Jd(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}X();b();function $a(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,v;for(o=0;o<(t?.length||e.length/3);o+=3)for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=e[n*3]-e[i*3],m=e[n*3+1]-e[i*3+1],f=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],l=e[a*3+2]-e[i*3+2],d=m*l-f*c,y=f*p-s*l,g=s*c-m*p,u=0;u<3;u++)x=u===0?i:u===1?n:a,r[x*3]+=d,r[x*3+1]+=y,r[x*3+2]+=g;for(o=0;o<r.length;o+=3)for(v=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=v;return r}function Ym(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)Ym(r,t)}function Wo(e,t){if(!De.get(e))return;let r=[];Ym(De.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,v,P,B,T,O;if(!ve.get(t)||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),Be(n));return}we(L.get(e));let K=e._map,G=K.options.crs,N=G.project(ne.get(z.get(e))),J=Math.cos(ne.get(z.get(e)).lat*C),pe=G.scale(de.get(t));for(o of r){for(n=o.geometry,m=n.attributes.position,n._terrainBasePositions||=m.data.slice(),f=n.attributes.normal,n._terrainBaseNormals||=f.data.slice(),m.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),l=0;l<m.data.length;l+=3)u=m.data[l],d=m.data[l+1],y=m.data[l+2],g=p[1]*u+p[5]*d+p[9]*y+p[13],x=Math.max(0,Math.min(1,1-(g-L.get(e).position[1])/8)),x&&(v=p[0]*u+p[4]*d+p[8]*y+p[12],P=p[2]*u+p[6]*d+p[10]*y+p[14],B=G.transformation.transform(new h.Point(N.x+v/J,N.y-P/J),pe),T=Kt(t,B),Number.isFinite(T)&&(O=(T-g)*x,m.data[l]+=c[4]*O,m.data[l+1]+=c[5]*O,m.data[l+2]+=c[6]*O));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set($a(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),Be(n)}_(e)}async function eh(e,t){if(e.binary)return;let r=await fetch(new URL(e.uri,t).href);if(!r.ok)throw new Error(`Unable to load model buffer: HTTP ${r.status}`);e.binary=await r.arrayBuffer()}var th={premultiplyAlpha:"none",colorSpaceConversion:"none"};async function rh(e,t,r){let o;if(r.bufferView!==void 0){let i=e.bufferViews[r.bufferView],n=e.buffers[i.buffer].binary;o=new Blob([n.slice(i.byteOffset||0,(i.byteOffset||0)+i.byteLength)],{type:r.mimeType})}else{let i=await fetch(new URL(r.uri,t).href);if(!i.ok)throw new Error(`Unable to load model texture: HTTP ${i.status}`);o=await i.blob()}return createImageBitmap(o,th)}async function oh(e,t,r){let o=[],i;for(i of t.buffers||it)o.push(eh(i,r));await Promise.all(o),await le.get(e).promise;let n=[],a;for(a of t.images||it)n.push(rh(t,r,a));let s=await Promise.all(n);return await ke.get(e._map),s}function ih(e){return{addressModeU:e?.wrapS===33071?"clamp-to-edge":e?.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e?.wrapT===33071?"clamp-to-edge":e?.wrapT===33648?"mirror-repeat":"repeat",magFilter:e?.magFilter===9728?"nearest":"linear",minFilter:e?.minFilter===9728||e?.minFilter===9984||e?.minFilter===9986?"nearest":"linear"}}function ki(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=w.get(o).device,m=`${t.index}:${r}`;if(!a.has(m)){let f=i.textures[t.index],p=i.samplers?.[f.sampler],c=n[f.source],l=r?"rgba8unorm-srgb":"rgba8unorm",u=ih(p);a.set(m,{device:s,texture:s.createTexture({size:[c.width,c.height],format:l,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(u),samplerOptions:u,format:l,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(m)}function nh(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness;return{color:o?.baseColorFactor?o.baseColorFactor.slice(0,3):[1,1,1],opacity:o?.baseColorFactor?.[3]??1,metallic:o?.metallicFactor??1,roughness:o?.roughnessFactor??1,baseTexture:ki(e,o?.baseColorTexture,!0),metalTexture:ki(e,o?.metallicRoughnessTexture),emissiveTexture:ki(e,t.emissiveTexture,!0),occlusionTexture:ki(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function ah(e,t,r){let o={backend:e,description:t,images:r,textures:new Map,materials:[],active:new Set,resources:[]},i;for(i of t.materials||it)o.materials.push(nh(o,i));return o}var sh=[0,0,0,1];var mh=[1,1,1];var fh=[0,0,0];function ph(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||sh,[n,a,s]=e.scale||mh;return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||fh,1]}var ch=[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]];var Va={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var lh={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function uh(e,t,r){return t===Int8Array?e.getInt8(r):t===Uint8Array?e.getUint8(r):t===Int16Array?e.getInt16(r,!0):t===Uint16Array?e.getUint16(r,!0):t===Uint32Array?e.getUint32(r,!0):e.getFloat32(r,!0)}function qa(e,t,r,o,i,n,a,s,m,f){let p=e.bufferViews[a],c=t.BYTES_PER_ELEMENT,l=e.buffers[p.buffer].binary;if(f||=r*c,!l||f<r*c||s<0||(p.byteOffset||0)+p.byteLength>l.byteLength||(m-1)*f+r*c+s>p.byteLength)throw new Error("glTF accessor outside buffer view");let u=new DataView(l),d,y,g,x;for(d=0;d<m;d++){if(x=n?n[d]:d,n&&x>=i)throw new Error("Invalid sparse glTF index");for(y=0;y<r;y++)g=(p.byteOffset||0)+s+d*f+y*c,o[x*r+y]=uh(u,t,g)}}function dh(e,t,r,o,i){let n=t.sparse,a=Va[n.indices.componentType];if(a!==Uint8Array&&a!==Uint16Array&&a!==Uint32Array)throw new Error("Invalid sparse glTF indices");let s=e.bufferViews[n.indices.bufferView],m=(s.byteOffset||0)+(n.indices.byteOffset||0);if(n.count>t.count||(n.indices.byteOffset||0)+n.count*a.BYTES_PER_ELEMENT>s.byteLength)throw new Error("Invalid sparse glTF indices");let f=new a(e.buffers[s.buffer].binary.slice(m,m+n.count*a.BYTES_PER_ELEMENT));qa(e,r,o,i,t.count,f,n.values.bufferView,n.values.byteOffset||0,n.count,0)}function hh(e,t,r,o){let i=new Float32Array(r.length),n;for(n=0;n<r.length;n++)i[n]=e.normalized?Math.max(-1,r[n]/(t===Int8Array?127:t===Int16Array?32767:t===Uint8Array?255:t===Uint32Array?4294967295:65535)):r[n];return{data:i,size:o,indices:r}}function Ha(e,t){let r=e.accessors[t],o=Va[r.componentType],i=lh[r.type];if(!o||!i||!Number.isInteger(r.count)||r.count<0)throw new Error("Invalid glTF accessor");let n=new o(r.count*i);return r.bufferView!==void 0&&qa(e,o,i,n,r.count,null,r.bufferView,r.byteOffset||0,r.count,e.bufferViews[r.bufferView].byteStride),r.sparse&&dh(e,r,o,i,n),r.componentType===5126?{data:n,size:i}:hh(r,o,n,i)}function gh(e,t){let r={},o,i;for([o,i]of ch)t.attributes[o]!==void 0&&(r[i]=Ha(e,t.attributes[o]));if(!r.position)throw new Error("glTF mesh has no positions");let n=r.position.data.length/3;if(r.position.size!==3||n<3)throw new Error("Invalid glTF vertex attributes");let a;for(a of Object.values(r))if(a.data.length/a.size!==n)throw new Error("Invalid glTF vertex attributes");return{attributes:r,vertexCount:n}}function yh(e,t,r,o){if(t.indices!==void 0){let i=Ha(e,t.indices);if(r.index={size:1,data:i.indices},!(i.indices instanceof Uint8Array||i.indices instanceof Uint16Array||i.indices instanceof Uint32Array)||i.size!==1||i.indices.length%3)throw new Error("Invalid glTF triangle indices");let n;for(n of i.indices)if(n>=o)throw new Error("Invalid glTF triangle indices")}else if(o%3)throw new Error("Incomplete glTF triangle")}function xh(e,t,r){let o;r.normal||(o=$a(r.position.data,r.index?.data),r.normal={size:3,data:o});let i=e.materials[t.material]||{color:[1,1,1],metallic:1};if((i.baseTexture||i.metalTexture||i.emissiveTexture||i.occlusionTexture)&&!r.uv)throw new Error("Textured model mesh requires UV coordinates");let n=Ke(e.backend,i);e.resources.push(n);let a=w.get(e.backend).device;r.index?.data instanceof Uint8Array&&(r.index.data=Uint16Array.from(r.index.data));let s,m;for([s,m]of Object.entries(r))m.size||=1,m.count=m.data.length/m.size,m.indexFormat=m.data instanceof Uint32Array?"uint32":"uint16",m.buffer=a.createBuffer({size:Math.max(4,m.data.byteLength),usage:s==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(m.buffer,0,m.data);let f={device:a,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(f),{device:a,geometry:f,program:n}}function Xm(e,t){let{backend:r,description:o,active:i}=e;if(i.has(t))throw new Error("Cyclic glTF nodes");let n=o.nodes[t];if(!n)throw new Error("Invalid glTF node");i.add(t);let a={...Pe(),name:n.name};a.matrix=ph(n);let s,m,f,p,c,l,u;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)m=gh(o,s),f=m.attributes,p=m.vertexCount,yh(o,s,f,p),c=xh(e,s,f),l={...Pe(),device:c.device,geometry:c.geometry,program:c.program,fadeDuration:250,id:ut.value++,renderOrder:0},l.name=o.meshes[n.mesh].name,l.extras=n.extras||{},Z(l,a);for(u of n.children||it)Z(Xm(e,u),a);return i.delete(t),a}function vh(e){let t,r;for(t of e.resources)if(t.attributes)for(r of Object.values(t.attributes))r.buffer.destroy();else t.pipelineCache.clear()}function wh(e,t){let r=[],o;try{for(o of t.nodes)r.push(Xm(e,o))}catch(i){throw vh(e),i}return r}function Mh(e){let t=De.get(e);if(e.options.rotation){let[r,o=r,i=r]=e.options.rotation;t.rotation[0]=r,t.rotation[1]=o,t.rotation[2]=i}if(e.options.scale){let[r,o=r,i=r]=e.options.scale;t.scale[0]=r,t.scale[1]=o,t.scale[2]=i}}async function bh(e){await le.get(e).promise;let t=new URL(Oe.get(e),document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`Unable to load model: HTTP ${r.status}`);let o=await r.arrayBuffer(),i=Qd(o),n=new URL(".",t).href,a=await oh(e,i,n),s=ah(e,i,a),m=i.scenes?.[i.scene||0];if(!m)throw new Error("Missing glTF scene");let f=wh(s,m),p={...Pe(),id:t,extras:i.extras||{}};if(!f.length)throw new Error("Expected a glTF model with a non-empty scene");let c;for(c of f)Z(c,p);De.set(e,p),Mh(e),Z(De.get(e),L.get(e)),Wo(e,ae.get(e._map))}async function Lh(e){try{return L.set(e,Pe()),te.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(oe.get(e)||q.get(e))&&(za.set(e,L.get(e)),oe.get(e)&&R.set(e,await Ar(e))),e._map&&(await jo(e,e._map),le.get(e).resolve()),Oe.get(e)&&await bh(e),z.get(e)&&_(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}b();b();function Bh(e,t,r){let o=e.closest("label");if(r.classList.contains("layer-count"))e.hasAttribute("aria-label")||e.setAttribute("aria-label",o.textContent.trim()),r.id=`leaflet-layer-count-${h.Util.stamp(t)}`,e.setAttribute("aria-describedby",r.id),o.append(r);else if(r.classList.contains("traffic-status")){let i=o.nextElementSibling;i?.classList.contains("traffic-status-group")||(i=h.DomUtil.create("div","traffic-status-group"),i.style.cssText="display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;",i.setAttribute("role","group"),i.setAttribute("aria-label","Traffic counts"),o.after(i)),i.append(r)}else o.after(r)}function Th(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===h.Util.stamp(t)||i instanceof h.LayerGroup&&i.hasLayer(t))return Bh(o,t,r),!0;return!1}function Ya(e){let t=Th(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var Xa=[];function Ph(){let e=Xa.shift();e?.map.hasLayer(e.layer)&&Ya(e)}function Ka(){Xa.push(this),queueMicrotask(Ph)}function Ch(){this.map.off("layeradd layerremove",Ka,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function Zo(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",Ka,o),e.once("remove",Ch,o),Ya(o)}function Sh(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${Oe.get(e)?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function Eh(e,t,r,o){let i=fr.get(e),n=Oe.get(e),a=De.get(e);n&&(t=a?1:0);let s=r||(n?!a:!R.get(e)&&!q.get(e)),m=t.toLocaleString("en-US"),f=o?"Error":`${m}${s?"\u2026":""}`,p=Sh(e,m,r,o);i.textContent!==f&&(i.textContent=f),i.title!==p&&(i.title=p),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function Km(e){let t=e.target,r=fr.get(t);if(!t._map)return;e.type==="add"&&Zo(t,r);let o=0,i=0,n=e.error,a;if(Number.isFinite(e.loaded))o=e.loaded,i=e.pending??0,n||=e.errors?.[0];else for(a of V.get(t).values())o+=a.buildings??0,!a.done&&!a.error&&i++,n||=a.error;Eh(t,o,i,n)}function Lt(e,t=go){cr.set(e,!0),h.Util.setOptions(e,{ariaLabel:"3D scene",...t}),I.set(e,"3d");let r=!q.get(e)&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(Oe.set(e,r?e.options.url:null),oe.set(e,e.options.url&&!r&&!q.get(e)?new URL(e.options.url,document.baseURI).href:null),pr.set(e,new Map),e.options.center&&D.set(e,new h.LatLng(e.options.center[0],e.options.center[1])),V.set(e,new Map),je.set(e,0),oe.get(e)||q.get(e)||r){let o=h.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",fr.set(e,o),e.on("add error",Km),e.on("ready progress",h.Util.throttle(Km,250,e))}le.set(e,Promise.withResolvers()),re.set(e,Promise.resolve().then(Lh.bind(null,e))),re.get(e).catch(at)}b();var kh=new Map;var _h=new Map;function Ih(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var _i=[null];var Gt=new WeakMap;var We=new WeakMap;var Rt=new WeakMap;X();var Ja={x:0,y:0};var Ee=new WeakMap;var ue=new WeakMap;var Bt=new WeakMap;var Ii={size:[null,null],format:"r32float",usage:null};var Qa={texture:null};var Jm={bytesPerRow:null};var es=[null,null];function zh(e,t,r,o){let i,n,a;for(i=0;i<256;i++)for(n=0;n<256;n++)a=t[i*256+n],!(!Number.isFinite(a)||a<=-1e3)&&(e.elevations[r+i*o*256+n]=a,e.low=Math.min(e.low,a),e.high=Math.max(e.high,a))}function Ah(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,n={elevations:new Float32Array(r*o*65536).fill(-1e9),low:1/0,high:-1/0},a,s,m,f,p,c;for([a,s]of e)m=a.split("/"),f=Number(m[0]),p=Number(m[1]),c=(p-t.min.y)*256*r*256+(f-t.min.x)*256,zh(n,s,c,r);return n}function Oh(e,t){let r=w.get(e).device;if(ue.get(e)?.device===r)return ue.get(e);let o=Gt.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=Ah(Ye.get(e),o);return Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,{texture:r.createTexture((Ii.size[0]=i*256,Ii.size[1]=n*256,Ii.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,Ii)),low:Number.isFinite(s)?s:We.get(e),high:Number.isFinite(m)?m:We.get(e)}),r.queue.writeTexture((Qa.texture=Ee.get(e).texture,Qa),a,(Jm.bytesPerRow=i*1024,Jm),(es[0]=i*256,es[1]=n*256,es)),Qa.texture=null,Bt.set(e,new Map),ue.set(e,Ke(e,{baseTexture:t,unlit:!0,terrain:Ee.get(e),alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided})),ue.get(e)}var ts={size:null,usage:null};function Dh(e){let t=(e+1)**2,r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t*2),n=new Uint16Array(e*e*6),a,s,m,f,p,c,l=0,u=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[l*3]=s/e,r[l*3+2]=a/e,o[l*3+1]=1,i[l*2]=s/e,i[l*2+1]=a/e,l++,a<e&&s<e&&(m=a*(e+1)+s,f=m+1,p=m+e+1,c=p+1,n[u++]=m,n[u++]=p,n[u++]=f,n[u++]=f,n[u++]=p,n[u++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function Gh(e,t){let r=w.get(e).device,o=Bt.get(e).get(t);if(!o){o=Dh(t);let i,n;for([i,n]of Object.entries(o))n.size||=1,n.count=n.data.length/n.size,n.indexFormat="uint16",n.buffer=r.createBuffer((ts.size=Math.max(4,n.data.byteLength),ts.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,ts)),r.queue.writeBuffer(n.buffer,0,n.data);Bt.get(e).set(t,o)}return o}function Rh(e,t,r,o){let i=We.get(e),n=Math.min(Ee.get(e).low,i)-i,a=Math.max(Ee.get(e).high,i)-i;return{device:w.get(e).device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,n,0],max:[1,a,1],center:[.5,(n+a)/2,.5],radius:Math.hypot(r,a-n,o)/2/Math.max(r,1,o)}}}async function Uh(e,t,r,o){if(!await Rt.get(e)||!e._map||ae.get(e._map)!==e||me.get(t)!==e||o.request.signal.aborted||!A.get(t).has(`${r.z}/${r.x}/${r.y}`)||A.get(e).has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-de.get(e)))),a=e._map,s=a.options.crs,m=s.project(D.get(e)),f=Math.cos(D.get(e).lat*C),p=s.scale(r.z),c=2**(de.get(e)-r.z),l=Ja;l.x=r.x*256,l.y=r.y*256;let u=s.transformation.untransform(l,p);l.x=(r.x+1)*256,l.y=(r.y+1)*256;let d=s.transformation.untransform(l,p),y=w.get(e).device,g=o.texture,x=Oh(e,g),v=Gh(e,n),P=We.get(e),B=(d.x-u.x)*f,T=-(d.y-u.y)*f,O=Rh(e,v,B,T),K={position:[(u.x-m.x)*f,0,-(u.y-m.y)*f],rotation:[0,0,0],scale:[B,1,T],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:y,geometry:O,program:x,texture:g,terrain:[r.x*256*c-Gt.get(e).min.x*256,r.y*256*c-Gt.get(e).min.y*256,256*c,P],tile:o,opacity:t.options.opacity??1,id:ut.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,Z(K,L.get(e)),_(e),A.get(e).set(o,K)}async function rs(e,t,r){if(me.get(e)&&r.done&&!r.request.signal.aborted&&A.get(e).get(`${t.z}/${t.x}/${t.y}`)===r)try{await Uh(me.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}var Tt=new WeakMap;X();var zi={size:[null,null],format:"rgba8unorm",usage:null};var Fh={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var os={size:null,usage:null};var Nh=[0,0,0,1,0,0,0,0,1,1,0,1];var jh=[0,1,0,0,1,0,0,1,0,0,1,0];var Wh=[0,0,1,0,0,1,1,1];var Zh=[0,2,1,1,2,3];function $h(e){let t={position:{size:3,data:new Float32Array(Nh)},normal:{size:3,data:new Float32Array(jh)},uv:{size:2,data:new Float32Array(Wh)},index:{data:new Uint16Array(Zh)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((os.size=o.data.byteLength,os.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,os)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Vh(e,t){let r=w.get(e).device,o={device:r,texture:r.createTexture((zi.size[0]=t.image.width,zi.size[1]=t.image.height,zi.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,zi)),sampler:r.createSampler(Fh),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Br,n=Kr,a=Jr;i.source=t.image,i.flipY=!1,n.texture=o.texture,a[0]=t.image.width,a[1]=t.image.height,r.queue.copyExternalImageToTexture(i,n,a),i.source=null,n.texture=null,o.uploaded=t.image,ue.get(e)||ue.set(e,Ke(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),Tt.get(e)||Tt.set(e,$h(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(D.get(e)),p=Math.cos(D.get(e).lat*C),c=m.scale(s.z),l=Ja;l.x=s.x*256,l.y=s.y*256;let u=m.transformation.untransform(l,c);l.x=(s.x+1)*256,l.y=(s.y+1)*256;let d=m.transformation.untransform(l,c),y=(d.x-u.x)*p,g=-(d.y-u.y)*p;t.texture=o,t.mesh={position:[(u.x-f.x)*p,0,-(u.y-f.y)*p],rotation:[0,0,0],scale:[y,1,g],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:Tt.get(e),program:ue.get(e),texture:o,opacity:e.options.opacity,id:ut.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},Z(t.mesh,L.get(e))}async function qh(e,t){try{await re.get(e);let r=await Gr(e.options.archive,t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted){r?.image?.close();return}if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{if(r.image)t.image=r.image;else{_i[0]=r.data;let o=new Blob(_i);_i[0]=null,t.image=await createImageBitmap(o)}}catch{throw _i[0]=null,new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}Vh(e,t),t.loadedAt=performance.now(),t.done=!0,Te.set(e,(Te.get(e)||0)+1),rs(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),_(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,Te.set(e,(Te.get(e)||0)+1),e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{se.set(e,se.get(e)-1),e._map&&(is(e),ao(e),se.get(e)||e.fire("load"),_(e))}}function Hh(e,t){t.started=!0;let r=se.get(e)===0;return se.set(e,se.get(e)+1),e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),qh(e,t)}function is(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of A.get(e).values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(Ih);for({tile:i}of o){if(se.get(e)>=4)break;Hh(e,i)}}function Yh(e,t){let r=A.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&no(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var dr=[0,0];var hr=[0,0];function Xh(e,t,r){let o=e.getBounds(),i=e.project(o.getNorthWest(),r).divideBy(256).floor(),n=e.project(o.getSouthEast(),r).divideBy(256).floor();dr[0]=t.maxLat,dr[1]=t.minLon,hr[0]=t.minLat,hr[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(dr,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(hr,r).divideBy(256).floor(),m=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,m.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,m.x+6),minY:Math.max(0,i.y,a?.y??0,m.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,m.y+6)}}function as(e){let t=e._map;if(!t||!z.get(e)||!R.get(e))return;let r=Math.max(R.get(e).minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));Qt.set(e,r);let o=Xh(t,R.get(e),r),i=kh;i.clear();let n,a,s,m,f;for(n=o.minX;n<=o.maxX;n++)for(a=o.minY;a<=o.maxY;a++)i.set(`${r}/${n}/${a}`,{z:r,x:n,y:a});Ht.set(e,new Set(i.keys()));let p=_h;p.clear();let c=Math.max(R.get(e).minZoom??0,r-2),l=2**(r-c);if(c<r)for([s,m]of i)A.get(e).get(s)?.done||(f={z:c,x:Math.floor(m.x/l),y:Math.floor(m.y/l)},p.set(`${f.z}/${f.x}/${f.y}`,f));let u=new Map(p);for([s,m]of i)u.set(s,m);i.clear(),p.clear(),Yh(e,u),is(e),ao(e)}function Kh(e){let t=as.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}async function Jh(e,t){let r=await Ar(t);return e.options.archive=t,R.set(e,r),e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function Qh(e,t){throw e.fire("error",{error:t}),t}function $o(e,t){if(!A.get(e)||me.get(e)===t)return;let r;for(r of A.get(e).values())me.get(e)&&io(me.get(e),r),r.mesh&&(r.mesh.visible=!0,Z(r.mesh,L.get(e)));if(me.set(e,t||null),t)for(r of A.get(e).values())r.done&&rs(e,r.coords,r)}async function eg(e,t,r){try{await r,le.get(e).resolve(),$o(e,ae.get(t))}catch(o){e.fire("error",{error:o})}}async function tg(e,t,r){try{await Promise.all([r,re.get(e)]),e._map===t&&t.hasLayer(e)&&as(e)}catch(o){e.fire("error",{error:o})}}function rg(e,t){D.get(e)||D.set(e,t.getCenter());let r=jo(e,t);eg(e,t,r),tg(e,t,r)}function og(e){let t,r;for(t of A.get(e).values())no(e,t);if(ue.get(e)?.pipelineCache.clear(),ue.set(e,null),Tt.get(e)){for(r of Object.values(Tt.get(e).attributes))F(e,r.buffer);Tt.set(e,null)}}var gr=new WeakMap;var Nr=new WeakMap;var Pt=new WeakMap;var jr=new WeakMap;var yr=new WeakMap;var xr=new WeakMap;var Vo=new WeakMap;var ss=new WeakMap;var qo=new WeakMap;var vr=new WeakMap;var wr=new WeakMap;var Ut=new WeakMap;var ms=new WeakMap;var fs={_3d:cr,_added:le,_areas:V,_bridgeMesh:Nr,_bridges:rt,_cameraZIndexOffset:Tr,_countStatus:fr,_cursor:lr,_dem:Ee,_directories:pr,_etag:Io,_fadeFrame:xr,_fadeVersion:Vo,_frame:et,_geojson:q,_header:bi,_inflight:je,_layers:U,_loadingTiles:se,_nativeGPU:xe,_pointerEvents:gr,_pruneAfter:zt,_pruneVersion:ci,_pruneWanted:li,_queued:Fr,_rasterGeometry:Tt,_rasterProgram:ue,_rasterTiles:A,_rasterVersion:Te,_rendererReady:st,_roofRaster:Y,_roofRasters:si,_sceneOrigin:ne,_shadowMeshes:_t,_shared:z,_size:Yt,_terrain3D:me,_terrainArchive:ss,_terrainBaseY:wt,_terrainBounds:Gt,_terrainController:qo,_terrainGrids:Bt,_terrainLoading:vr,_terrainOriginElevation:We,_terrainPromise:Rt,_terrainReady:ve,_terrainRequest:Mn,_terrainTiles:Ye,_terrainZoom:de,_tileZoom:Qt,_tooltip:Se,_type:Ut,_visibleMeshes:Lr,_wantedRasterTiles:Ht,_zoomLevel:No,_zoomTransitions:ce,_zoomView:Re,camera:Q,container:Ce,control:Pt,eventMap:jr,events:yr,group:za,header:R,highlightedFeature:Je,hoveredFeature:be,kind:I,location:D,model:De,modelUrl:Oe,raycaster:te,ready:re,renderer:w,root:L,scene:ee,terrainSource:wr,url:oe,walker:ms};b();var ig=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];function Ho(e){be.set(e,null),Mt(e,null),bt(e,null),e.fire("featurehover",{feature:null})}var ag=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function sg(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function mg(e,t){if(Y.get(e)&&F(e,Y.get(e).texture.texture),Y.set(e,null),ce.get(e)){let i;for(i of ce.get(e).keys())i.play()}ce.set(e,null),Re.set(e,null),ke.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=w.get(e);r.canvas.remove(),sg(r,e),ie.delete(t);let o;for(o of ag)fs[o].delete(e)}function Yo(e,t){le.set(e,Promise.withResolvers()),Ce.get(e)&&(Ho(e),h.DomEvent.off(Ce.get(e),gr.get(e),e),Ce.set(e,null));let r,o,i,n;for(r of V.get(e).values())Rr(e,r);V.get(e).clear(),Se.get(e)?.remove(),Se.set(e,null),(oe.get(e)||q.get(e))&&Oa(e,!1);let a=z.get(e);if(a){if(Z(L.get(e),null),U.get(a).delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",Pi,e),t.off("zoomstart",Ci,e),t.off("zoomanim",Si,e),t.off("zoomend",Ei,e),wn(e),U.get(e).size){let s=U.get(e).values().next().value;for(o of ig)n=fs[o],n.set(s,n.get(e)),n.delete(e);for(i of U.get(s))z.set(i,s);ie.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Pi,s),t.on("zoomstart",Ci,s),t.on("zoomanim",Si,s),t.on("zoomend",Ei,s),_(s)}else mg(e,t);else _(a);z.set(e,null),w.set(e,null),ee.set(e,null),Q.set(e,null)}}function fg(e,t){og(e),me.set(e,null),Yo(e,t)}b();function ps(e,t){I.set(e,"raster"),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},h.Util.setOptions(e,t),L.set(e,Pe()),V.set(e,new Map),A.set(e,new Map),se.set(e,0),le.set(e,Promise.withResolvers()),oe.set(e,new URL(t.url,document.baseURI).href),pr.set(e,new Map),re.set(e,Promise.resolve(e.options.archive||e).then(Jh.bind(null,e)).catch(Qh.bind(null,e)))}var pg=Object.freeze([]);function cg(e){I.get(e)==="raster"&&$o(e,null)}function lg(e,t){qo.get(e)?.abort(),vr.set(e,!1),ve.set(e,!1),t.eachLayer(cg);let r,o,i,n;for(r of A.get(e).keys())io(e,r);ae.get(t)===e&&ae.delete(t);for(o of Object.values(t._layers))Wo(o,null),Ro(o);t.fire("terrainchange"),Ye.get(e).clear(),We.set(e,0),Rt.set(e,null),ue.get(e)&&ue.get(e).pipelineCache.clear(),ue.set(e,null),Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,null);for(i of Bt.get(e)?.values()||pg)for(n of Object.values(i))F(e,n.buffer);Bt.set(e,null),rt.set(e,null),_e(e,Nr.get(e)),Nr.set(e,null),Yo(e,t)}async function ug(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await Gr(r,n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);Ye.get(t).set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function dg(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}b();function hg(e,t){let r=e._map;de.set(e,t.maxZoom),dr[0]=t.maxLat,dr[1]=t.minLon;let o=r.project(dr,de.get(e)).divideBy(256).floor();hr[0]=t.minLat,hr[1]=t.maxLon;let i=r.project(hr,de.get(e)).divideBy(256).floor();Gt.set(e,new h.Bounds(o,i));let n=[],a=r.project(r.getCenter(),de.get(e)).divideBy(256),s,m;for(s=o.x;s<=i.x;s++)for(m=o.y;m<=i.y;m++)n.push({z:de.get(e),x:s,y:m,distance:Math.hypot(s+.5-a.x,m+.5-a.y)});return n.sort(ja),n}X();b();function gg([e,t,r],o,i,n,a){let s=o.project(new h.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function yg(e,t){let r=[],o=0,i,n,a;for(i of e){for(n=[],a=0;a<i.length;a++)n.push({x:t[o+a][0],y:t[o+a][1]});r.push(n),o+=i.length}return r}function xg(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,m,f,p,c,l,u,d,y;for(m of r){f=[];for(p of m)f.push(t[p]);o.push(f)}for(c of t)i=Math.min(i,c[0]),n=Math.min(n,c[1]),a=Math.max(a,c[0]),s=Math.max(s,c[1]);let g={triangles:o,min:[i,n],max:[a,s]};for(l=Math.floor(g.min[0]/64);l<=Math.floor(g.max[0]/64);l++)for(u=Math.floor(g.min[1]/64);u<=Math.floor(g.max[1]/64);u++)d=`${l}/${u}`,y=rt.get(e).get(d),y||rt.get(e).set(d,y=[]),y.push(g)}function vg(e,t,r){let{position:o,normal:i,color:n}=e,a,s,m,f,p,c,l,u,d;for([a,s,m]of r)for(f=t[a],p=t[s],c=t[m],(p[2]-f[2])*(c[0]-f[0])-(p[0]-f[0])*(c[2]-f[2])<0&&(l=s,s=m,m=l),u=0;u<6;u++)l=u===0||u===3?a:u===1||u===5?s:m,d=t[l],o.push(d[0],d[1]-(u>=3?1.2:0),d[2]),i.push(0,u>=3?-1:1,0),n.push(.6,.58,.54)}function wg(e,t,r){let{position:o,normal:i,color:n}=e,a=Math.hypot(r[0]-t[0],r[2]-t[2])||1,s=(r[2]-t[2])/a,m=-(r[0]-t[0])/a,f,p;for(f=0;f<6;f++)p=f===0||f===3||f===5?t:r,o.push(p[0],p[1]-(f===2||f>=4?1.2:0),p[2]),i.push(s,0,m),n.push(.6,.58,.54)}function Mg(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)wg(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function bg(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:m}=e,f=[],p,c,l,u,d,y,g,x,v,P,B;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let T=[],O=[];for(p of f)for([l,u,d]of p)y=o.project([u,l],i),T.push([y.x,y.y,d]);for(p of f)for(g of p)O.push(gg(g,n,a,s,m));try{x=yg(f,T),[v,...P]=x,B=ho(v,P)}catch{return}xg(r,T,B),vg(e,O,B),Mg(e,O,f)}function Lg(e,t){let r=e._map,o=r.options.crs,i=de.get(e),n=o.project(D.get(e)),a=Math.cos(D.get(e).lat*C),s=L.get(e).position[1],m=[],f=[],p=[];rt.set(e,new Map);let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:m,normal:f,color:p},l,u,d;for({geometry:l}of t.features)if(!(l.type!=="Polygon"&&l.type!=="MultiPolygon"))for(u=l.coordinates,d=0;d<(l.type==="Polygon"?1:u.length);d++)bg(c,l.type==="Polygon"?u:u[d]);m.length&&Nr.set(e,er(e,{position:m,normal:f,color:p}))}function Bg(e,t,r){ve.set(e,!0),We.set(e,Kt(e,D.get(e))??0);let o;for(o of Object.values(t._layers))Ro(o),Wo(o,e);r&&Lg(e,r),t.fire("terrainchange"),_(e),e.fire("terrainready")}async function cs(e){if(vr.get(e)||!e._map)return;vr.set(e,!0),ve.set(e,!1);let t=new AbortController;qo.set(e,t);let r;try{if(!wr.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=Un({source:{type:e.options.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(wr.get(e))?"cog":"pmtiles",url:wr.get(e),archive:e.options.archive,asset:e.options.asset}});ss.set(e,o),await re.get(o);let i=R.get(o);if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=hg(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},m=[];for(r=0;r<Math.min(4,a.length);r++)m.push(ug(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(dg);return t.signal.aborted||e._map!==n?void 0:(Bg(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{vr.set(e,!1)}}b();function ls(e,t){let r=De.get(e);if(!L.get(e)||!Q.get(e))return null;let o,i,n,a,s,m,f;for(o of Wn(e,t,L.get(e).children,!!r)){if(r){for(i=o.object;i&&i!==r;)i=i.parent;if(i===r)return{id:r.id,properties:r.extras,model:r,mesh:o.object,point:o.point}}if(n=o.object.extras?.featureFaces,!!n)for(a=0,s=n.length-1;a<=s;)if(m=a+s>>1,f=n[m],o.faceIndex<f.faceStart)s=m-1;else if(o.faceIndex>=f.faceEnd)a=m+1;else return{...f,mesh:o.object,point:o.point}}return null}function Tg(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){be.get(e)&&Ho(e);return}be.set(e,ls(e,t)),Mt(e,be.get(e)),bt(e,be.get(e),t),e.fire("featurehover",{feature:be.get(e),originalEvent:t})}function Pg(e){Tg(this,e)}function Cg(e,t){let r=ls(e,t);be.set(e,r),Mt(e,r),bt(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Sg(e){Cg(this,e)}function Eg(){Ho(this)}async function kg(e,t){try{await jo(e,t),le.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function us(e,t){if(!D.get(e)){let r=t.getCenter();D.set(e,new h.LatLng(r.lat,r.lng))}(oe.get(e)||q.get(e)||e.options.tooltip||Oe.get(e))&&(Ce.set(e,t.getContainer()),gr.get(e)||gr.set(e,{mousemove:Pg,click:Sg,mouseleave:Eg}),e.options.tooltip&&(Se.set(e,h.DomUtil.create("div","leaflet-3d-tooltip",Ce.get(e))),Se.get(e).hidden=!0,Se.get(e).setAttribute("role","tooltip"),Se.get(e).setAttribute("aria-live","polite"),Se.get(e).style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),h.DomEvent.on(Ce.get(e),gr.get(e),e)),L.get(e)&&kg(e,t)}function _g(){cs(this.backend).then(this.resolve,this.reject)}function Ig(e){I.get(e)==="raster"&&$o(e,this)}function zg(e,t){if(ae.get(t)&&ae.get(t)!==e)throw new Error("Only one terrain layer can be active per map");if(ae.set(t,e),us(e,t),L.get(e))Rt.set(e,cs(e));else{let r=Promise.withResolvers();Rt.set(e,r.promise),e.once("ready",_g,{backend:e,...r})}t.eachLayer(Ig,e),t.fire("terrainchange")}function Ag(e,t){let r=t.url,o={...t};delete o.url,Lt(e,o),wr.set(e,r),Ye.set(e,new Map),A.set(e,new Map),ve.set(e,!1),I.set(e,"terrain")}b();var Xo=new WeakMap;var Ai=new WeakMap;var Oi=new WeakMap;b();Jn();X();H();W();function Og(e,t,r,o,i){let[n,a,s]=e,m=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return m>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/m,i.top=t.y/2-t.y*1.5*(-n*Math.sin(o)*Math.cos(r)+a*Math.sin(r)-s*Math.cos(o)*Math.cos(r))/m,i):null}function Qm(e,t,r,o,i,n,a){if(e.hidden=!0,!r||!t||t.altitude<=0)return;e.parentNode!==r&&r.append(e);let s=Og(t.direction,o,i,n,a);if(!s)return;let{left:m,top:f}=s;e.hidden=m<0||m>o.x||f<0||f>r.clientHeight||r.style.display==="none",e.style.left=`${m}px`,e.style.top=`${f}px`}function Ft({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=tt.get(e),a=Ne.get(e);n?e.getContainer().style.setProperty("--leaflet-sky-background",n.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let s=e.getSize(),m=k(e)*C,f=S(e)*C;Qm(r,n,a,s,m,f,i),Qm(o,n?.moon,a,s,m,f,i)}var Dg=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]];var ef=[0,0,0];function ds(e,t,r,o){o||=[],o.length=e.length;let i;for(i=0;i<e.length;i++)o[i]=e[i]+(t[i]-e[i])*r;return o}function tf(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function Gg(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Dg,r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${tf(ds(n[1],i[1],a,ef))}, ${tf(ds(n[2],i[2],a,ef))})`,tint:ds(n[3],i[3],a)}}function hs(e,t,r){let o=e instanceof Date?Date.prototype.getTime.call(e):typeof e=="string"?Date.parse(e):new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");return o}X();function gs(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*C-o,a=t*C,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),f=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/C+180+360)%360;return{altitude:s/C,azimuth:f,direction:[Math.sin(f*C)*Math.cos(s),Math.sin(s),-Math.cos(f*C)*Math.cos(s)]}}X();X();var Di=Math.sin(23.4397*C);X();var Gi=Math.cos(23.4397*C);function Rg(e,t,r){let o=hs(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*C,n=(218.316+13.176396*o+6.289*Math.sin(i))*C,a=5.128*Math.sin((93.272+13.22935*o)*C)*C,s=Math.cos(a)*Math.cos(n),m=Math.cos(a)*Math.sin(n)*Gi-Math.sin(a)*Di,f=Math.cos(a)*Math.sin(n)*Di+Math.sin(a)*Gi;return gs(o,t,r,Math.atan2(m,s),Math.asin(f))}X();function Ug(e,t,r){let i=hs(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*C,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*C,s=Math.asin(Math.sin(a)*Di),m=Math.atan2(Math.sin(a)*Gi,Math.cos(a));return gs(i,t,r,m,s)}function Wr(e){let t=ie.get(e);t&&_(t)}function Mr(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let m=r.getCenter(),f=Ug(t.time,m.lat,m.lng);tt.set(r,f),Object.assign(f,Gg(f.altitude)),f.moon=Rg(t.time,m.lat,m.lng),a.textContent=f.altitude<=0?"Night \xB7 no direct sunlight":f.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${f.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Ft(e),Wr(r)}catch(s){tt.delete(r),Ft(e),Wr(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function Fg(e){e.control.live=!0,Mr(e)}function Ng(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),tt.delete(r),Ft(e),Wr(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),Mr(e)}function jg(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=h.DomUtil.create("div","sunlight-sun"),o=h.DomUtil.create("div","sunlight-moon");r.style.cssText=t+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",o.style.cssText=t+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",r.setAttribute("role","img"),r.setAttribute("aria-label","Sun"),o.setAttribute("role","img"),o.setAttribute("aria-label","Moon");let i=h.DomUtil.create("div","sunlight-control");i.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let n=document.createElement("input");n.type="date",n.style.cssText="width:100%;box-sizing:border-box;",n.setAttribute("aria-label","Solar date (UTC)");let a=document.createElement("input");a.type="range",a.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",a.min="0",a.max="1439",a.step="1",a.setAttribute("aria-label","Time of day (UTC)");let s=document.createElement("output");s.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",s.setAttribute("aria-live","off");let m=document.createElement("button");m.type="button",m.textContent="Now";let f=document.createElement("div");f.className="sunlight-time",f.style.cssText="display:flex;justify-content:space-between;align-items:center;",f.append(s,m);let p=document.createElement("div");p.className="sunlight-status",p.style.marginTop="5px",p.setAttribute("role","status");let c=document.createElement("small");c.style.color="#555",c.textContent="Indicative \xB7 loaded geometry only. Streetlight illumination is estimated, not measured lux.",i.append(n,a,f,p,c);let l={control:null,map:e,originalSky:"",container:i,sunDisc:r,moonDisc:o,date:n,slider:a,output:s,status:p,projection:{left:0,top:0}};return l.update=Mr.bind(null,l),l.updateSky=Ft.bind(null,l),m.onclick=Fg.bind(null,l),n.onchange=a.oninput=Ng.bind(null,l),h.DomEvent.disableClickPropagation(i),h.DomEvent.disableScrollPropagation(i),l}function Wg(e){e.control.live&&Mr(e)}function Zg(e,t){let r=Oi.get(t);if(r?.control&&r.control!==e)throw e._map=null,e.layer._map===t&&t.removeLayer(e.layer),new Error("Only one Time control can be active per map");return r||(r=jg(t),Oi.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),Xo.set(t,e),Ai.set(e,r),r.update(),r.timer=setInterval(Wg,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}b();function $g(e){return Pt.get(this).addTo(e)}b();function Vg(){return h.Control.prototype.remove.call(Pt.get(this))}function qg(e){h.Util.setOptions(this,e),this.live=!0,this.layer=new h.Layer,Pt.set(this.layer,this),I.set(this.layer,"time")}function Hg(e){return Zg(this,e)}b();function rf(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),e.style.background=t?"":"#fff",e.style.padding=t?"2px 0 6px 20px":"8px",e.style.margin=t?"0":""}function Yg(e){h.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?Zo(this.layer,t,rf.bind(null,t)):rf(t,!1),this}b();function Xg(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):h.Control.prototype.remove.call(this)}function Kg(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Oi.get(t);clearInterval(r),Xo.delete(t),t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),tt.delete(t),Ft(e),o.remove(),i.remove(),Wr(t),n===e&&(n.control=null)}function Jg(){let e=Ai.get(this);e&&(Kg(e),Ai.delete(this))}h.Control.Time=h.Control.extend({options:{position:"bottomright"},initialize:qg,onAdd:Hg,onRemove:Jg,addTo:Yg,remove:Xg});b();var ys=Object.freeze({});var Nt=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];var jt=[.08,.07,.06];var mt=[.85,.64,.5];var Wt=[.16,.2,.32];function E(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}function Qg(e){let t=Nt[e%Nt.length];return[[E(-.045,.045,-.85,-.25),.02,.62,jt],[E(-.045,.045,.25,.85),.02,.62,jt],[E(-.06,.06,-.5,.5),.4,.65,t],[E(-.32,.32,-.58,-.5),.95,1.02,jt],[E(-.1,.1,.15,.4),.85,.92,jt],[E(-.18,.18,-.12,.28),1,1.5,t],[E(-.11,.11,-.22,0),1.5,1.72,mt],[E(-.13,.13,-.23,.01),1.72,1.8,t],[E(-.25,-.15,-.5,-.05),1,1.25,mt],[E(.15,.25,-.5,-.05),1,1.25,mt],[E(-.2,-.08,0,.32),.3,1,Wt],[E(.08,.2,-.25,.07),.3,1,Wt]]}var of=[.75,.2,.15];var xs={body:[[E(-.17,.17,-.1,.1),.82,.95,Wt],[E(-.19,.19,-.11,.11),.95,1.44,of],[E(-.05,.05,-.05,.05),1.44,1.5,mt],[E(-.1,.1,-.11,.1),1.5,1.72,mt],[E(-.105,.105,-.06,.115),1.58,1.77,jt],[E(-.105,.105,-.115,-.06),1.7,1.77,jt]],leg:[[E(-.07,.07,-.07,.07),-.82,0,Wt],[E(-.07,.07,-.17,.07),-.9,-.82,jt]],arm:[[E(-.05,.05,-.05,.05),-.55,0,of],[E(-.045,.045,-.045,.045),-.66,-.55,mt]]};function ey(e){let t=xs.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Nt[e%Nt.length]],t.push([E(-.16,-.02,-.07,.07),.08,.9,Wt],[E(.02,.16,-.07,.07),.08,.9,Wt],[E(-.3,-.2,-.05,.05),.76,1.42,mt],[E(.2,.3,-.05,.05),.76,1.42,mt]),t}function Ko(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}var Zr=[.12,.15,.18];var Ct=[.92,.93,.92];var Jo=[.05,.05,.05];var vs=[1.9,1.85,1.7];var ws=[1.7,.06,.05];function Qo(e,t,r){let o=e-t/2,i=e+t/2;return[[E(-1.25,1.25,o,i),.45,1.25,r],[E(-1.2,1.2,o+.15,i-.15),1.25,2.65,Zr],[E(-1.25,1.25,o,i),2.65,3.1,Ct],[E(-1.15,-.85,o+1,o+2),0,.7,Jo],[E(.85,1.15,i-2,i-1),0,.7,Jo],[E(-.9,.9,o-.03,o),.8,1.05,vs],[E(-.9,.9,i,i+.03),.8,1.05,ws]]}function ty(e,t){return Qo(0,12,Ko(t))}function ry(e,t){let r=Ko(t),o=[],i;for(i=0;i<5;i++)o.push(...Qo((i-2)*6.5,6,r));return o}function oy(e,t){let r=Ko(t),o=[],i;for(i=0;i<5;i++)o.push(...Qo((i-2)*15,14,r));return o}function Zt(e,t,r,o,...i){return[[E(e,t,r,o),...i],[E(-t,-e,r,o),...i]]}function iy(e){let t=Nt[e%Nt.length];return[...Zt(.7,.92,-1.68,-1.02,0,.64,Jo),...Zt(.7,.92,1.02,1.68,0,.64,Jo),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[E(-.84,.84,-.75,1.6),.82,1.38,Zr,E(-.7,.7,-.05,1.3)],[E(-.71,.71,-.06,1.31),1.38,1.46,t],...Zt(.38,.8,-2.3,-2.16,.56,.76,vs),[E(-.78,.78,2.16,2.3),.6,.76,ws]]}var nf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function ny(){let e=[],t;for(t=0;t<12;t++)e.push(...Zt(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function ay(){return[[nf,0,.8,[.1,.16,.26]],[nf,.8,1.4,Ct],[E(-5,5,-18,26),1.4,3.7,Zr,E(-4.6,4.6,-17.4,25.6)],...Zt(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[E(-4.8,4.8,-17.8,25.8),3.7,3.9,Ct],...ny(),...Zt(4.65,4.8,-13.6,25.8,3.9,4.8,Ct),[E(-4.8,4.8,25.65,25.8),3.9,4.8,Ct],[E(-2.2,2.2,-17.6,-14),3.9,4.7,Ct],[E(-2.2,2.2,-17.6,-14),4.7,5.5,Zr],[E(-2.5,2.5,-18,-13.6),5.5,5.7,Ct],[E(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[E(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[E(-.1,.1,-15.9,-15.7),5.7,6.6,Ct],[E(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var sy={bicycle:{side:.4,model:Qg},pedestrian:{side:.3,model:ey},bus:{side:1.5,model:ty},tram:{side:0,model:ry},metro:{side:0,model:oy},car:{side:1.8,model:iy,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:ay,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var my=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function Ri(e,t,r,o,i,n,a){let s=i[0]-o[0],m=i[1]-o[1],f=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],l=n[2]-o[2],u=m*l-f*c,d=f*p-s*l,y=s*c-m*p,g=Math.hypot(u,d,y),x,v;for(x=0;x<3;x++)v=x===0?o:x===1?i:n,e.push(...v),t.push(u/g,d/g,y/g),r.push(...a)}function ei(e){let t=[],r=[],o=[],i=[],n=[],a,s,m,f,p,c,l,u,d;for([a,s,m,f,p=a]of e){i.length=n.length=0;for([c,l]of a)i.push([c,s,l]);for([c,l]of p)n.push([c,m,l]);for(u=0;u<a.length;u++)d=(u+1)%a.length,Ri(t,r,o,i[u],i[d],n[d],f),Ri(t,r,o,i[u],n[d],n[u],f);for(u=1;u<a.length-1;u++)Ri(t,r,o,n[0],n[u],n[u+1],f),Ri(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function fy({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
1
+ (()=>{var ov=Object.defineProperty;var b=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var iv=(e,t)=>{for(var r in t)ov(e,r,{get:t[r],enumerable:!0})};var d,L=b(()=>{d=globalThis.L});var B,$=b(()=>{B=Math.PI/180});var et,po=b(()=>{et=180/Math.PI});var vn,om=b(()=>{vn=new WeakMap});function _(e){return vn.get(e)??0}var J=b(()=>{om()});var wn,im=b(()=>{wn=new WeakMap});function k(e){return wn.get(e)??0}var Z=b(()=>{im()});var Ro,ua=b(()=>{Ro=Object.freeze({})});var He,ha=b(()=>{He=new WeakMap});function ga(){let e=this.getSize().y,t=_(this)*B,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.abs(Math.cos(t))*o/(o+Math.sin(t)*r);i>0&&!He.get(this)&&(He.set(this,d.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),He.get(this).setAttribute("aria-hidden","true"),He.get(this).style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),He.get(this)&&(He.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",He.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,He.get(this).style.display=i>0?"":"none")}var _m=b(()=>{ha();L();$();J()});function Ne(e,t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!Number.isFinite(e.options.maxPitch)||e.options.maxPitch<0||e.options.maxPitch>180)throw new TypeError("maxPitch must be between 0 and 180 degrees");let o=_(e),i=k(e);return vn.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),wn.set(e,(r%360+360)%360),e._loaded&&(ga.call(e),i!==k(e)&&e.fire("rotate",{bearing:k(e)}),o!==_(e)&&e.fire("pitch",{pitch:_(e)})),e}var dr=b(()=>{im();om();J();Z();_m()});var $t,ya=b(()=>{$t=new WeakMap});var Oo,xa=b(()=>{Oo=new WeakMap});var gr,va=b(()=>{gr=new Map});var Mt,wa=b(()=>{Mt={value:null}});function Do(e){gr.delete(e),$t.set(e,null),Oo.set(e,null),!gr.size&&Mt.value!==null&&(cancelAnimationFrame(Mt.value),Mt.value=null)}var La=b(()=>{ya();xa();va();wa()});var $r,Ma=b(()=>{$r=new WeakMap});var Io,Em=b(()=>{Io=new WeakMap});var Ei,zm=b(()=>{Ei=new WeakMap});var yr,zi=b(()=>{yr=new WeakMap});var xr,Ai=b(()=>{xr=new WeakMap});var Am,ou=b(()=>{Am={value:void 0}});var Rm,iu=b(()=>{Rm={value:void 0}});var Om,nu=b(()=>{Om={value:void 0}});var Dm,au=b(()=>{Dm={value:void 0}});var Ba,su=b(()=>{Ba={value:void 0}});var Bt,Go=b(()=>{Bt=new WeakMap});var Vr,Ta=b(()=>{Vr=new Set});var Ri,Im=b(()=>{Ri=Object.freeze({capture:!0,passive:!1})});function Gm(){this._map.fire("cameratouchchange")}var mu=b(()=>{});var Uo,Pa=b(()=>{Uo=Object.freeze([.8,.5])});var fu,pu=b(()=>{fu=Object.freeze([.8,0])});var Sa,Um=b(()=>{Sa=Object.freeze({preventScroll:!0})});var ka,Nm=b(()=>{ka=Object.freeze({animate:!0})});function cu(e){Mt.value=null;let t=[...gr];gr.clear();let r,o,i,n,a;for([o,i]of t)if(Oo.set(o,null),$t.get(o)===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{Ne(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&$t.get(o)===i?Ca(o,i):$t.get(o)===i&&$t.set(o,null)}catch(s){r||=s}}if(r)throw r}var lu=b(()=>{ya();xa();wa();va();dr();Fm()});function Ca(e,t){gr.set(e,t),Mt.value===null&&(Mt.value=requestAnimationFrame(cu)),Oo.set(e,Mt.value)}var Fm=b(()=>{xa();va();wa();lu()});function No(e,t,r,o=Ro){if(Do(e),!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!o.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return Ne(e,t,r);let i=o.duration??.3;if(!Number.isFinite(i)||i<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),a=_(e),s=k(e),m=((r-s)%360+540)%360-180,f={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:m};return $t.set(e,f),Ca(e,f),e}var _a=b(()=>{ya();ua();dr();J();Z();La();Fm()});function uu(e,t=ka){return No(e,0,0,t)}var du=b(()=>{Nm();_a()});function lt(e,t,r){return No(e,_(e),t,r)}var Fo=b(()=>{_a();J()});function hu(e,t=ka){return lt(e,0,t)}var gu=b(()=>{Nm();Fo()});function yu(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?uu(r):hu(r),e.detail&&r.getContainer().focus(Sa)}var xu=b(()=>{Um();du();gu()});function Vt(e,t,r){return No(e,t,k(e),r)}var Oi=b(()=>{_a();Z()});function vu(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")lt(r,k(r)-o);else if(e.key==="ArrowRight")lt(r,k(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)Vt(r,_(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)Vt(r,_(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var wu=b(()=>{Fo();Z();Oi();J()});function Ea(){let e=this._map,t=this.options.visualizePitch?_(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*B))))}) rotateX(${t}deg) rotate(${k(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(k(e))} degrees, pitch ${Math.round(_(e))} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!k(e)&&!t&&!this._container.contains(document.activeElement)?"none":""}var Wm=b(()=>{$();J();Z()});var Fe,vr=b(()=>{Fe={value:new WeakMap}});var Zr,za=b(()=>{Zr={value:new Set}});function Aa(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var jm=b(()=>{});function Ra(e){let t=Fe.value.get(this);if(t.drag||!t.accept(e)||Aa(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.(Sa),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var $m=b(()=>{vr();Um();jm()});function Oa(e){return Do(e),e}var Vm=b(()=>{La()});function Da(e){let t=Fe.value.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;Oa(t.map),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*et}else i*=e.clientY<t.drag.cy?1:-1;Ne(t.map,_(t.map)-o*t.sensitivity[1],k(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var Zm=b(()=>{po();vr();Vm();dr();J();Z()});function Wo(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Ia=b(()=>{});function wr(e){Wo(Fe.value.get(this),e)}var qm=b(()=>{vr();Ia()});function Ga(e){let t=Fe.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Hm=b(()=>{vr()});function Ua(e){let t=Fe.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var Ym=b(()=>{vr()});function Na(){let e;for(e of Zr.value)Wo(e)}var Xm=b(()=>{za();Ia()});function Fa(e,t,r,o=Uo,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return Fe.value.set(t,n),Zr.value.add(n),t.addEventListener("pointerdown",Ra,!0),t.addEventListener("pointermove",Da),t.addEventListener("pointerup",wr),t.addEventListener("pointercancel",wr),t.addEventListener("lostpointercapture",wr),t.addEventListener("click",Ga,!0),t.addEventListener("contextmenu",Ua),window.addEventListener("blur",Na),n}var Jm=b(()=>{Pa();vr();za();$m();Zm();qm();Hm();Ym();Xm()});function Lu(e){return e.button===0}var bu=b(()=>{});function Mu(){Ea.call(this._rotateControl)}var Bu=b(()=>{Wm()});function Tu(e){let t=d.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=d.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=d.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=yu,r.onkeydown=vu,this._refresh=Ea,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=Fa(e,r,Lu,this.options.visualizePitch?Uo:fu),r.addEventListener("focusout",Mu),d.DomEvent.on(r,"dblclick contextmenu",d.DomEvent.stop),d.DomEvent.disableClickPropagation(t),d.DomEvent.disableScrollPropagation(t),t}var Pu=b(()=>{L();Pa();pu();xu();wu();Wm();Jm();bu();Bu()});function Su(e){Wo(e);let{element:t}=e;t.removeEventListener("pointerdown",Ra,!0),t.removeEventListener("pointermove",Da),t.removeEventListener("pointerup",wr),t.removeEventListener("pointercancel",wr),t.removeEventListener("lostpointercapture",wr),t.removeEventListener("click",Ga,!0),t.removeEventListener("contextmenu",Ua),Fe.value.delete(t),Zr.value.delete(e),Zr.value.size||window.removeEventListener("blur",Na)}var ku=b(()=>{vr();za();Ia();$m();Zm();qm();Hm();Ym();Xm()});function Wa(){Su(this._dragState)}var Km=b(()=>{ku()});function Cu(e){e.off("rotate pitch",this._refresh,this),Wa.call(this)}var _u=b(()=>{Km()});function Eu(e){return new d.Control.Rotate(e)}var zu=b(()=>{L()});function Au(e){let t=this._cameraShiftRotate;!e.shiftKey||Aa(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),lt(t._map,k(t._map)+Math.sign(e.deltaY)*5))}var Ru=b(()=>{Fo();Z();jm()});function Ou(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=Au,e.addEventListener("wheel",this._wheel,Ri)}var Du=b(()=>{Im();Ru()});function Iu(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var Gu=b(()=>{});function Uu(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var Nu=b(()=>{});function Fu(){this._dragState=Fa(this._map,this._map.getContainer(),Uu,Uo,!0)}var Wu=b(()=>{Pa();Jm();Nu()});function ju(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&lt(t._map,r-o)}var $u=b(()=>{Fo()});function Qm(e,t){e.disable(),e._map.fire("error",{error:t})}var Vu=b(()=>{});function Zu([e,t]){let{handler:r,generation:o}=e.value;if(!(!r.enabled()||r._generation!==o)){if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")return Qm(r,t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied"));try{window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){Qm(r,i)}}}var qu=b(()=>{Vu()});function Hu(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:ju};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(Zu)}var Yu=b(()=>{$u();qu()});function Xu(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var Ju=b(()=>{});function Ku(e){e[0]?.target._containerResizeMap.invalidateSize()}var Qu=b(()=>{});function ed(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Ku),this._observer.observe(e)}var td=b(()=>{Qu()});function rd(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var od=b(()=>{});function ja(e){let t=Bt.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!xr.get(r).enabled()&&!yr.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;Oa(r);let a=o.getBoundingClientRect(),s=new d.Point((i.clientX+n.clientX)/2-a.left,(i.clientY+n.clientY)/2-a.top);t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:s,anchor:r.containerPointToLatLng(s),zoom:r.getZoom(),bearing:k(r),pitch:_(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new d.Point(s.x,s.y)},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var ef=b(()=>{zi();Ai();L();Go();Vm();Z();J()});function $a(e){let t=Bt.get(this),{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),m=o.getBoundingClientRect(),f=i.currentMiddle;f.x=(n.clientX+a.clientX)/2-m.left,f.y=(n.clientY+a.clientY)/2-m.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*et;Ne(r,yr.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,xr.get(r).enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let l=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),l,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var tf=b(()=>{zi();Ai();po();Go();dr()});function Lr(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var Di=b(()=>{});function jo(e){Lr(Bt.get(this),e)}var rf=b(()=>{Go();Di()});function Ii(){let e=$r.get(this),{map:t,container:r}=e,o=xr.get(t).enabled()||yr.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(Lr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var of=b(()=>{Ma();zi();Ai();Di()});function Va(){let e;for(e of Vr)Lr(e)}var nf=b(()=>{Ta();Di()});function id(){let e=$r.get(this);if(!e)return;let{container:t,map:r}=e;Lr(e),t.removeEventListener("touchstart",ja,!0),t.removeEventListener("touchmove",$a,!0),t.removeEventListener("touchend",jo,!0),t.removeEventListener("touchcancel",jo,!0),Vr.delete(e),Vr.size||window.removeEventListener("blur",Va),r.off("cameratouchchange",Ii,r),Ei.get(r)?.remove(),Bt.delete(t),$r.delete(r)}var nd=b(()=>{Ma();zm();Ta();Go();Di();ef();tf();rf();nf();of()});function qr(e,t,r){let o=Io.get(e);o||Io.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var ad=b(()=>{Em()});var sd={};iv(sd,{cameraControls:()=>nv});function nv(e){if(qr(e,"trackContainerMutation",Rm.value),!e.options.rotate)return;qr(e,"shiftKeyRotate",Dm.value),qr(e,"pitchDrag",Om.value),qr(e,"compassBearing",Am.value),qr(e,"touchRotate",Ba.value),qr(e,"touchPitch",Ba.value),xr.set(e,Io.get(e).get("touchRotate")),yr.set(e,Io.get(e).get("touchPitch"));let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};$r.set(e,r),Bt.set(t,r),Vr.add(r),t.addEventListener("touchstart",ja,Ri),t.addEventListener("touchmove",$a,Ri),t.addEventListener("touchend",jo,!0),t.addEventListener("touchcancel",jo,!0),window.addEventListener("blur",Va),e.on("cameratouchchange",Ii,e),Ii.call(e),e.options.rotateControl&&(Ei.set(e,new d.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:Ro)),Ei.get(e).addTo(e)),e.once("unload",id,e)}var md=b(()=>{Ma();Em();zm();zi();Ai();L();ou();iu();nu();au();su();Go();Ta();Im();ua();mu();Pu();_u();zu();Du();Gu();Wu();Km();Yu();Ju();td();od();ef();tf();rf();of();nd();nf();ad();Am.value=d.Handler.extend({addHooks:Hu,removeHooks:Xu});Rm.value=d.Handler.extend({addHooks:ed,removeHooks:rd});Om.value=d.Handler.extend({addHooks:Fu,removeHooks:Wa});Dm.value=d.Handler.extend({addHooks:Ou,removeHooks:Iu});Ba.value=d.Handler.extend({addHooks:Gm,removeHooks:Gm});d.Control.Rotate=d.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:Tu,onRemove:Cu});d.control&&(d.control.rotate=Eu)});L();var Ir={value:void 0};var sn={value:void 0};var mn={value:void 0};L();var W={value:void 0};var Qe={value:void 0};var fn={value:void 0};var pn={value:void 0};var cn={value:void 0};var ln={value:void 0};var un={value:void 0};var dn={value:void 0};var hn={value:void 0};var ue=new WeakMap;var re=new WeakMap;var so=new WeakMap;var rr=new WeakMap;L();var O=new WeakMap;var yt=new WeakMap;function yi(e){let t=yt.get(e.currentTarget);if(!t)return;let r;for(r of t)De(r)}function xi(e){let t=yt.get(e.currentTarget);if(!t)return;let r;for(r of t)r.source.fire("error",{error:new Error("Unable to load native layer image")})}function gn(e,t){let r=yt.get(e);r&&(r.delete(t),r.size||yt.delete(e))}function Ef(e,t){let r=yt.get(e);r||yt.set(e,r=new Set),r.add(t)}var st=new WeakMap;var It=new Set;var F=new WeakMap;var v=new WeakMap;var oe=new WeakMap;var Gt=new WeakMap;var or=new WeakMap;var mt=new WeakMap;var yn=[null];var mo=new WeakMap;var de=new WeakMap;var Ze=new WeakMap;var zf={subtree:!0};var se=new WeakMap;L();function xn(e){let t;for(t of Object.values(e._layers))t instanceof d.Marker?t.update():(t instanceof d.Popup||t instanceof d.Tooltip)&&t._updatePosition()}function Af(e,t){let r=e._map,o=Ze.get(e),i,n;for(n of de.get(e).keys())if(n.effect.target===r._proxy){i=n;break}let a=i?.effect.getComputedTiming().progress??Math.min(1,(t-o.start)/250),s=r.getZoomScale(o.targetZoom,o.zoom),m=1+(s-1)*a,f=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);se.set(r,{zoom:r.getScaleZoom(m,o.zoom),center:r.unproject(f.add(p.subtract(f).multiplyBy(s*a/m)),o.zoom)}),xn(r)}function Rf(e,t){let r=e._map,o,i,n;if(r._animatingZoom){de.get(e)||de.set(e,new Map);for(o of r.getContainer().getAnimations(zf))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||de.get(e).has(o)||(i=o.currentTime||0,o.pause(),de.get(e).set(o,{start:t,time:i}));for([o,{start:n,time:i}]of de.get(e))o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);Ze.get(e)&&Af(e,t)}}var ir=new WeakMap;var vi={size:[null,null],format:"depth24plus",sampleCount:4,usage:null};var fo={size:[null,null],format:null,sampleCount:4,usage:null};async function Of(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function j(e,t){Of(e,t,v.get(e).device.queue.onSubmittedWorkDone())}function Df(e,t){(!ir.get(e)||!ir.get(e).equals(t))&&(v.get(e).width=t.x,v.get(e).height=t.y,v.get(e).canvas.width=Math.round(t.x*v.get(e).dpr),v.get(e).canvas.height=Math.round(t.y*v.get(e).dpr),v.get(e).canvas.style.width=`${t.x}px`,v.get(e).canvas.style.height=`${t.y}px`,v.get(e).depthTexture&&j(e,v.get(e).depthTexture),v.get(e).colorTexture?.destroy(),v.get(e).colorTexture=v.get(e).device.createTexture((fo.size[0]=v.get(e).canvas.width,fo.size[1]=v.get(e).canvas.height,fo.format=v.get(e).format,fo.usage=GPUTextureUsage.RENDER_ATTACHMENT,fo)),v.get(e).depthTexture=v.get(e).device.createTexture((vi.size[0]=v.get(e).canvas.width,vi.size[1]=v.get(e).canvas.height,vi.usage=GPUTextureUsage.RENDER_ATTACHMENT,vi)),ir.set(e,t))}var ee=new WeakMap;var ie=new WeakMap;$();po();var If=2*Math.atan(1/3)*et;var tt=2*Math.PI*6378137;var me=new WeakMap;var Me=new WeakMap;var ft=new WeakMap;var Be=new WeakMap;var rt=new WeakMap;var ge=new WeakMap;L();function Gf(e,t){let r=t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`);if(!r)return null;let o,i,n,a,s,m,f;for(o of r)if(!(e.x<o.min[0]||e.x>o.max[0]||e.y<o.min[1]||e.y>o.max[1])){for([i,n,a]of o.triangles)if(s=(n[1]-a[1])*(i[0]-a[0])+(a[0]-n[0])*(i[1]-a[1]),m=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,f=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,m>=0&&f>=0&&m+f<=1)return m*i[2]+f*n[2]+(1-m-f)*a[2]}return null}function wi(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function Gr(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,m=wi(t,i,n),f=wi(t,i+1,n),p=wi(t,i,n+1),c=wi(t,i+1,n+1);return!Number.isFinite(m)||!Number.isFinite(f)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(m)?m:Number.isFinite(f)?f:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(m*(1-a)+f*a)*(1-s)+(p*(1-a)+c*a)*s}function nr(e,t){if(!e._map||!Be.get(e))return null;let r=t instanceof d.Point?t:e._map.project(t,ge.get(e));return Gf(r,ft.get(e))??Gr(r,rt.get(e))}function Uf(e,t){let r=Math.max(0,Math.min(24,Math.round(e.map.getZoom()))),o=new Map,i,n,a,s,m,f,p,c,l,u,h,x,g;for(;r>=0;r--){i=e.map.project(t,r),n=2**r,a=Math.floor(i.x/256),s=Math.floor(i.y/256);for(h of Object.values(e.map._layers))if(x=ue.get(h),!(x?.disposed||x?.terrainStream!==e)&&(g=x.terrainRequests?.get(`${a}:${s}:${r}`),!(!g?.tiles||h._tiles[`${a}:${s}:${r}`]!==g.tile)&&(u=Gr(i,g.tiles),Number.isFinite(u))))return u;for(o.clear(),f=-1;f<=1;f++)for(m=-1;m<=1;m++)p=((a+m)%n+n)%n,c=Math.max(0,Math.min(n-1,s+f)),l=e.terrainCache.get(`${r}/${p}/${c}`),l?.data&&o.set(`${a+m}/${s+f}`,l.data);if(u=Gr(i,o),Number.isFinite(u))return u}return null}function ye(e,t){let r=me.get(e);if(r)return nr(r,t);let o=Me.get(e);return o&&Uf(o,t)}var Ut=new WeakMap;J();Z();var Nf=Math.PI/360;function co(e){e.x||=[0,0,0],e.y||=[0,0,0],e.z||=[0,0,0],e.viewTransform||=new DOMMatrix,e.projectionTransform||=new DOMMatrix,e.projectionViewTransform||=new DOMMatrix;let{position:t,target:r,up:o,x:i,y:n,z:a,viewMatrix:s,projectionMatrix:m,projectionViewMatrix:f}=e,p;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let c=Math.hypot(a[0],a[1],a[2])||1;a[0]/=c,a[1]/=c,a[2]/=c,i[0]=o[1]*a[2]-o[2]*a[1],i[1]=o[2]*a[0]-o[0]*a[2],i[2]=o[0]*a[1]-o[1]*a[0];let l=Math.hypot(i[0],i[1],i[2])||1;i[0]/=l,i[1]/=l,i[2]/=l,n[0]=a[1]*i[2]-a[2]*i[1],n[1]=a[2]*i[0]-a[0]*i[2],n[2]=a[0]*i[1]-a[1]*i[0];let u=e.viewTransform;u.m11=i[0],u.m12=i[1],u.m13=i[2],u.m14=0,u.m21=n[0],u.m22=n[1],u.m23=n[2],u.m24=0,u.m31=a[0],u.m32=a[1],u.m33=a[2],u.m34=0,u.m41=t[0],u.m42=t[1],u.m43=t[2],u.m44=1,u.invertSelf(),s[0]=u.m11,s[1]=u.m12,s[2]=u.m13,s[3]=u.m14,s[4]=u.m21,s[5]=u.m22,s[6]=u.m23,s[7]=u.m24,s[8]=u.m31,s[9]=u.m32,s[10]=u.m33,s[11]=u.m34,s[12]=u.m41,s[13]=u.m42,s[14]=u.m43,s[15]=u.m44;for(p of s)if(!Number.isFinite(p))throw new Error("Singular 3D transform");let h=1/Math.tan(e.fov*Nf),x=e.near,g=e.far;m[0]=h/e.aspect,m[1]=0,m[2]=0,m[3]=0,m[4]=0,m[5]=h,m[6]=0,m[7]=0,m[8]=0,m[9]=0,m[10]=g/(x-g),m[11]=-1,m[12]=0,m[13]=0,m[14]=g*x/(x-g),m[15]=0;let y=e.projectionTransform;y.m11=m[0],y.m12=m[1],y.m13=m[2],y.m14=m[3],y.m21=m[4],y.m22=m[5],y.m23=m[6],y.m24=m[7],y.m31=m[8],y.m32=m[9],y.m33=m[10],y.m34=m[11],y.m41=m[12],y.m42=m[13],y.m43=m[14],y.m44=m[15];let w=e.projectionViewTransform;w.m11=y.m11,w.m12=y.m12,w.m13=y.m13,w.m14=y.m14,w.m21=y.m21,w.m22=y.m22,w.m23=y.m23,w.m24=y.m24,w.m31=y.m31,w.m32=y.m32,w.m33=y.m33,w.m34=y.m34,w.m41=y.m41,w.m42=y.m42,w.m43=y.m43,w.m44=y.m44,w.multiplySelf(u),f[0]=w.m11,f[1]=w.m12,f[2]=w.m13,f[3]=w.m14,f[4]=w.m21,f[5]=w.m22,f[6]=w.m23,f[7]=w.m24,f[8]=w.m31,f[9]=w.m32,f[10]=w.m33,f[11]=w.m34,f[12]=w.m41,f[13]=w.m42,f[14]=w.m43,f[15]=w.m44}function ot(e,t,r=!1){let o=se.get(e);if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function Ff(e,t){let r=e._map,o=se.get(r)?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(tt*Math.cos(ie.get(e).lat*B)),n=ot(r,W.value.layerPointToContainerPoint.call(r,r.project(ie.get(e)).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,m=Ut.get(r)?.control?._walk,f=(ye(r,r.getCenter())??0)+(m?.saved?m.state.height:0),p=(t.y/2-n.y)/i,c=_(r)*B,l=k(r)*B,u=ee.get(e);u.fov=If,u.aspect=t.x/t.y,u.near=Math.max(.1,a/1e4),u.far=Math.max(1e4,a*10),u.position[0]=s+Math.sin(l)*Math.sin(c)*a,u.position[1]=f+Math.cos(c)*a,u.position[2]=p+Math.cos(l)*Math.sin(c)*a,u.up[0]=-Math.sin(l)*Math.cos(c),u.up[1]=Math.sin(c),u.up[2]=-Math.cos(l)*Math.cos(c),u.target[0]=s,u.target[1]=f,u.target[2]=p,co(u)}var Ur=new WeakMap;function Wf(e,t){let r,o;if(e.matrix){let i=e._matrixState||=new Float64Array(16);for(r=0;r<16;r++)i[r]!==e.matrix[r]&&(t=!0),i[r]=e.matrix[r]}else{let i=e._transformState||=new Float64Array(9);for(r=0;r<9;r++)o=r<3?e.position[r]:r<6?e.rotation[r-3]:e.scale[r-6],i[r]!==o&&(t=!0),i[r]=o}return t}po();function jf(e){let t=e._localTransform||=new DOMMatrix;return t.m11=1,t.m12=0,t.m13=0,t.m14=0,t.m21=0,t.m22=1,t.m23=0,t.m24=0,t.m31=0,t.m32=0,t.m33=1,t.m34=0,t.m41=0,t.m42=0,t.m43=0,t.m44=1,t.translateSelf(e.position[0],e.position[1],e.position[2]),t.rotateAxisAngleSelf(0,1,0,e.rotation[1]*et),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*et),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*et),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function Te(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n;if(i=Wf(e,i),!i){for(n of e.children)Te(n);return}let a,s;e.matrix?a=e.matrix:a=jf(e),s=e._worldTransform||=new DOMMatrix,a instanceof DOMMatrix?(s.m11=a.m11,s.m12=a.m12,s.m13=a.m13,s.m14=a.m14,s.m21=a.m21,s.m22=a.m22,s.m23=a.m23,s.m24=a.m24,s.m31=a.m31,s.m32=a.m32,s.m33=a.m33,s.m34=a.m34,s.m41=a.m41,s.m42=a.m42,s.m43=a.m43,s.m44=a.m44):(s.m11=a[0],s.m12=a[1],s.m13=a[2],s.m14=a[3],s.m21=a[4],s.m22=a[5],s.m23=a[6],s.m24=a[7],s.m31=a[8],s.m32=a[9],s.m33=a[10],s.m34=a[11],s.m41=a[12],s.m42=a[13],s.m43=a[14],s.m44=a[15]),t&&s.preMultiplySelf(t._worldTransform),e.worldMatrix[0]=s.m11,e.worldMatrix[1]=s.m12,e.worldMatrix[2]=s.m13,e.worldMatrix[3]=s.m14,e.worldMatrix[4]=s.m21,e.worldMatrix[5]=s.m22,e.worldMatrix[6]=s.m23,e.worldMatrix[7]=s.m24,e.worldMatrix[8]=s.m31,e.worldMatrix[9]=s.m32,e.worldMatrix[10]=s.m33,e.worldMatrix[11]=s.m34,e.worldMatrix[12]=s.m41,e.worldMatrix[13]=s.m42,e.worldMatrix[14]=s.m43,e.worldMatrix[15]=s.m44,e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(n of e.children)Te(n)}function Ce(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i,n,a,s;for(i=0;i<o.length;i+=3)n=o[i],a=o[i+1],s=o[i+2],t[0]=Math.min(t[0],n),r[0]=Math.max(r[0],n),t[1]=Math.min(t[1],a),r[1]=Math.max(r[1],a),t[2]=Math.min(t[2],s),r[2]=Math.max(r[2],s);let m=e.attributes.instanceOffset;if(m){let l,u,h,x;for(l=0;l<3;l++){for(h=1/0,x=-1/0,u=l;u<m.data.length;u+=m.size)h=Math.min(h,m.data[u]),x=Math.max(x,m.data[u]);t[l]=Math.fround(t[l]+h),r[l]=Math.fround(r[l]+x)}}let f=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],p=0;for(i=0;!m&&i<o.length;i+=3)n=o[i]-f[0],a=o[i+1]-f[1],s=o[i+2]-f[2],p=Math.max(p,n*n+a*a+s*s);let c=m?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:Math.sqrt(p);if(!m&&(p===1/0||p<Number.MIN_VALUE/Number.EPSILON))for(c=0,i=0;i<o.length;i+=3)c=Math.max(c,Math.hypot(o[i]-f[0],o[i+1]-f[1],o[i+2]-f[2]));e.bounds={min:t,max:r,center:f,radius:c}}function $f(e){let t=e.program?.uniforms?.strokeScale?.value??1;return Math.max(0,t-1)*(e.geometry.nativeStrokeRadius||0)}function Vf(e,t,r,o,i){e.geometry.bounds||Ce(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=e._cullingSphere;if(!s||s.bounds!==n||s.matrix!==a||s.version!==e._worldMatrixVersion||e._worldMatrixVersion===void 0){s||=e._cullingSphere={};let h=n.center;s.x=a[0]*h[0]+a[4]*h[1]+a[8]*h[2]+a[12],s.y=a[1]*h[0]+a[5]*h[1]+a[9]*h[2]+a[13],s.z=a[2]*h[0]+a[6]*h[1]+a[10]*h[2]+a[14],s.scale=Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10])),s.radius=n.radius*s.scale,s.bounds=n,s.matrix=a,s.version=e._worldMatrixVersion}let{x:m,y:f,z:p}=s,c=s.radius+$f(e)*s.scale,l=t[2]*m+t[6]*f+t[10]*p+t[14],u=t[3]*m+t[7]*f+t[11]*p+t[15];e._sortDepth=l/u,e._visibleInFrame=r[0][0]*m+r[0][1]*f+r[0][2]*p+r[0][3]>=-c*o[0]&&r[1][0]*m+r[1][1]*f+r[1][2]*p+r[1][3]>=-c*o[1]&&r[2][0]*m+r[2][1]*f+r[2][2]*p+r[2][3]>=-c*o[2]&&r[3][0]*m+r[3][1]*f+r[3][2]*p+r[3][3]>=-c*o[3]&&r[4][0]*m+r[4][1]*f+r[4][2]*p+r[4][3]>=-c*o[4]&&r[5][0]*m+r[5][1]*f+r[5][2]*p+r[5][3]>=-c*o[5],e._visibleInFrame&&i.push(e)}function nm(e,t,r,o,i,n,a){if(!e.visible)return;e.geometry&&(t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),Vf(e,r,o,i,n));let s;for(s of e.children)nm(s,t,r,o,i,n,a)}function Zf(e,t,r){let i=ee.get(e).projectionViewMatrix,n=v.get(e),a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),m,f,p,c,l;for(m=0;m<6;m++){for(f=Math.floor(m/2),p=a[m],c=0;c<4;c++)l=c*4,p[c]=m===4?i[l+2]:m%2?i[l+3]-i[l+f]:i[l+3]+i[l+f];s[m]=Math.hypot(p[0],p[1],p[2])}let u=Ur.get(e);u||Ur.set(e,u=[]),u.length=0;let h=Gt.get(e);h||Gt.set(e,h=[]),h.length=0,r&&Te(oe.get(e)),nm(oe.get(e),t,i,a,s,u,h)}var A=new WeakMap;var D=new WeakMap;var K=new WeakMap;var Li=new WeakMap;var fe=new WeakMap;var _e=new WeakMap;L();var qf=[];$();var Hf=[];var Yf={x:0,y:0};var Xf={x:1,y:1};var Jf={code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"};var lo={layout:"auto",vertex:{module:null,entryPoint:"vertexMain"},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}};var Kf={magFilter:"linear",minFilter:"linear"};function Qf(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(Jf);e.roofBlit={pipeline:t.createRenderPipeline((lo.vertex.module=r,lo.fragment.module=r,lo)),sampler:t.createSampler(Kf)},lo.vertex.module=null,lo.fragment.module=null}}var Ln={size:null,usage:null};var bn={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var Mn={source:null};var Bn={texture:null};var Tn=[null,null];function ep(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((Mn.source=t.image,Mn),(Bn.texture=r.texture,Bn),(Tn[0]=r.texture.width,Tn[1]=r.texture.height,Tn)),Mn.source=null,Bn.texture=null,r.uploaded=r.image)}var pt={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var Pn=[null];var Sn={value:new Float32Array(64)};function tp(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function rp(e,t,r,o,i,n,a){let s=v.get(e),m=s.device,f=e._map,p=Math.max(1,t.length)*64;Sn.value.length<p&&(Sn.value=new Float32Array(p));let c=Sn.value,l=m.createBuffer((Ln.size=c.byteLength,Ln.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,Ln)),u=m.createCommandEncoder(),h=u.beginRenderPass((bn.colorAttachments[0].view=K.get(e).texture.texture.createView(),bn));bn.colorAttachments[0].view=null,h.setPipeline(s.roofBlit.pipeline),t.sort(tp);let x,g,y,w,S,T,P,R;for([x,{tile:g,layer:y}]of t.entries())({coords:w}=g),S=g.texture,ep(m,g),c[x*64]=y.options.opacity,T=256*f.getZoomScale(r,w.z),P=(w.x*T-o.x)*n/i.x,R=(w.y*T-o.y)*a/i.y,h.setViewport(P,R,Math.min(T*n/i.x,n-P),Math.min(T*a/i.y,a-R),0,1),h.setBindGroup(0,m.createBindGroup((pt.layout=s.roofBlit.pipeline.getBindGroupLayout(0),pt.entries[0].resource=S.texture.createView(),pt.entries[1].resource=s.roofBlit.sampler,pt.entries[2].resource.buffer=l,pt.entries[2].resource.offset=x*256,pt))),pt.layout=null,pt.entries[0].resource=null,pt.entries[1].resource=null,pt.entries[2].resource.buffer=null,h.draw(4);h.end(),m.queue.writeBuffer(l,0,c),m.queue.submit((Pn[0]=u.finish(),Pn)),Pn[0]=null,l.destroy()}function op(e,t){let r=-1/0,o,i;for(o of e)for(i of D.get(o).values())i.done&&!i.request.signal.aborted&&i.image&&(i._roofEntry||={tile:i,layer:o},t.push(i._roofEntry),r=Math.max(r,i.coords.z));return r}var ip={size:[null,null],format:"rgba8unorm",usage:null};var np={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function ap(e,t,r,o){let i=v.get(e),n=ip;n.size[0]=r,n.size[1]=o,n.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,t.texture&&(t.texture.width!==r||t.texture.height!==o)&&(j(e,t.texture.texture),t.texture.texture=i.device.createTexture(n),t.texture.width=r,t.texture.height=o),t.texture||={device:i.device,texture:i.device.createTexture(n),sampler:i.device.createSampler(np),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function sp(e,t,r,o){let i=e._map,n=v.get(e),a=Hf;a.length=0;let s=op(t,a),m=1/0,f=1/0,p=-1/0,c=-1/0,l,u;a.length||(s=i.getZoom());for({tile:{coords:l}}of a)u=256*i.getZoomScale(s,l.z),m=Math.min(m,l.x*u),f=Math.min(f,l.y*u),p=Math.max(p,(l.x+1)*u),c=Math.max(c,(l.y+1)*u);let h=i.project(ie.get(e),s),x=Yf,g=Xf;x.x=a.length?m:h.x,x.y=a.length?f:h.y,g.x=a.length?p-m:1,g.y=a.length?c-f:1;let y=Math.min(1,4096/Math.max(g.x,g.y)),w=Math.max(1,Math.ceil(g.x*y)),S=Math.max(1,Math.ceil(g.y*y)),T=i.options.crs.scale(s)/(tt*Math.cos(ie.get(e).lat*B)),P={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:K.get(e)?.texture};K.set(e,P),P.signature=r,P.updatedAt=o,P.matrix[0]=T/g.x,P.matrix[10]=T/g.y,P.matrix[12]=(h.x-x.x)/g.x,P.matrix[14]=(h.y-x.y)/g.y,ap(e,P,w,S),Qf(n);try{rp(e,a,s,x,g,w,S)}finally{a.length=0}}function mp(e,t,r){let o=qf;o.length=0;let i=!1,n;for(n of t)o.push(`${d.Util.stamp(n)}:${_e.get(n)||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!fe.get(n);let a=o.join("|");o.length=0,(!K.get(e)||K.get(e).signature!==a&&(!i||r-K.get(e).updatedAt>=50))&&sp(e,t,a,r)}function fp(e,t){let r=e._map,o=Li.get(e);o||Li.set(e,o=[]),o.length=0;let i=!1,n,a;for(n of F.get(e))if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(a of Object.values(r._layers))A.get(a)==="raster"&&D.get(a)&&a.options.opacity>0&&o.push(a);mp(e,o,t)}else K.get(e)&&(j(e,K.get(e).texture.texture),K.set(e,null));return o}function pp(e,t){return e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id}function cp(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||pp(e,t)}var U=new WeakMap;var ar=new WeakMap;$();function lp(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=ar.get(r),s=o.project(ie.get(t),a),m=o.options.crs.scale(a)/(tt*Math.cos(ie.get(t).lat*B)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,h,x,g,y,w,S,T;for(u=0;u<8;u++)h=u&1?i.max[0]:i.min[0],x=u&2?i.max[1]:i.min[1],g=u&4?i.max[2]:i.min[2],y=s.x+(n[0]*h+n[4]*x+n[8]*g+n[12])*m,w=s.y+(n[2]*h+n[6]*x+n[10]*g+n[14])*m,f=Math.min(f,y),p=Math.min(p,w),c=Math.max(c,y),l=Math.max(l,w);return U.get(r).maxLat!==void 0&&U.get(r).minLon!==void 0&&U.get(r).minLat!==void 0&&U.get(r).maxLon!==void 0&&(S=o.project([U.get(r).maxLat,U.get(r).minLon],a),T=o.project([U.get(r).minLat,U.get(r).maxLon],a),f=Math.max(f,S.x),p=Math.max(p,S.y),c=Math.min(c,T.x),l=Math.min(l,T.y),f>=c||p>=l)?null:[f,p,c,l]}function up(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,m,f,p,c,l,u,h;for([s,m,f,p]of e){if(c=Math.max(s,i),l=Math.max(m,n),u=Math.min(f,i+o),h=Math.min(p,n+o),c>=u||l>=h){a.push([s,m,f,p]);continue}m<l&&a.push([s,m,f,l]),h<p&&a.push([s,h,f,p]),s<c&&a.push([s,l,c,h]),u<f&&a.push([u,l,f,h])}return a}function dp(e,t,r){let o=!1,i=!1,n,a,s,m;for(n of r){if(!U.get(n)){i=!0;continue}if(a=lp(e,t,n),!!a){o=!0,s=[a];for(m of D.get(n).values())if(!(!m.done&&!m.error)&&(s=up(s,m,ar.get(n)),!s.length))return!0}}return!o&&!i}function hp(e,t,r,o){let i,n;if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){Ut.get(e._map)?.control?._walk?.saved&&(t._roofRevealed=!0,t.fadeStart=o-(t.fadeDuration||0)),t._roofCoverageSignature!==K.get(e)?.signature&&(t._roofCoverageSignature=K.get(e)?.signature,t._roofCovered=dp(t,e,r)),n=!1;for(i of r)if(!U.get(i)||fe.get(i)>0){n=!0;break}if(!t._roofRevealed&&!t._roofCovered&&n)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function gp(e,t,r,o){let i=Ur.get(e),n=Gt.get(e),a=v.get(e),s=!1,m,f;for(m of i)hp(e,m,t,r)&&(m.fadeDuration&&(m.fadeStart??=m.tile?.loadedAt??r,f=Math.min(1,(r-m.fadeStart)/m.fadeDuration),m._appearance=f*f*(3-2*f),s||=f<1),o.push(m));i.length=0,o.sort(cp);let p=1/0,c=-1/0;for(m of o)m.ground&&(p=Math.min(p,m.tile.coords.z),c=Math.max(c,m.tile.coords.z));a.groundOverlap=p!==c;let l=0;for(m of n)m.visible&&m._appearance!==0&&(n[l++]=m);return n.length=l,s}var kn={size:null,usage:null};function yp(e,t,r){let o=v.get(e);(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&j(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((kn.size=Math.max(64,t.length*4+r.length*2)*256,kn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,kn)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var M=new WeakMap;var it={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function Cn(e){let t=v.get(e).sunlight;t.bindGroup=v.get(e).device.createBindGroup((it.layout=t.layout,it.entries[0].resource.buffer=t.buffer,it.entries[1].resource=t.texture.createView(),it.entries[2].resource=t.sampler,it.entries[3].resource.buffer=t.lights,it)),it.layout=null,it.entries[0].resource.buffer=null,it.entries[1].resource=null,it.entries[2].resource=null,it.entries[3].resource.buffer=null}function xp(e,t,r,o,i){let n,a;for(n=0,a=o[r]*4;n<8;n++)i[a+n]=e[t+n];o[r]+=2}function vp(e,t,r,o,i,n,a,s){let m=e[t+3],f=e[t]-r,p=e[t+2]-o,c,l,u;for(c=Math.floor((p-m)/i);c<=Math.floor((p+m)/i);c++)for(l=Math.floor((f-m)/i);l<=Math.floor((f+m)/i);l++)u=c*n+l,s?xp(e,t,u,a,s):a[u]++}function am(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)vp(s,m,t,r,o,i,n,a)}function wp(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,m;if(r){let f=1/0,p=1/0,c=-1/0,l=-1/0;for(o of e)for(i=0;i<o.length;i+=8)f=Math.min(f,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),l=Math.max(l,o[i+2]+o[i+3]);let u=Math.ceil((c-f)/s)+1,h=Math.ceil((l-p)/s)+1,x=new Uint32Array(u*h),g=new Uint32Array(u*h);am(e,f,p,s,u,x);let y=0;for(n of x)y+=n;let w=(2+u*h+y*2)*4;if(w*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");m=new Float32Array(w),m[0]=f,m[1]=p,m[2]=s,m[3]=u,m[4]=h,m[5]=r;let S=2+u*h;for(a=0;a<x.length;a++)x[a]&&(m[(2+a)*4]=g[a]=S,m[(2+a)*4+1]=x[a],S+=x[a]*2);am(e,f,p,s,u,g,m)}else m=new Float32Array(8);return{data:m,count:r}}var Lp=.03/(4*Math.PI);function bp(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,m,f,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:m,flux:f}=e[o]),p=t[3]*i+t[7]*n+t[11]*a+t[15],r[o*8]=(t[0]*i+t[4]*n+t[8]*a+t[12])/p,r[o*8+1]=(t[1]*i+t[5]*n+t[9]*a+t[13])/p,r[o*8+2]=(t[2]*i+t[6]*n+t[10]*a+t[14])/p,r[o*8+3]=s,r[o*8+4]=m[0],r[o*8+5]=m[1],r[o*8+6]=m[2],r[o*8+7]=f*Lp;return r}function sm(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,m,f,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,m=n._worldLights,f=!!m,p=0;p<a.length&&f;p++)f=a[p]===m.matrix[p];(!f||m.lights!==s)&&(m=n._worldLights={lights:s,matrix:[...a],data:bp(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===m}if(o)return t;let c=new Array(e.length),l=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],m=n._worldLights,c[i]=m.data,l[i]={mesh:n,cache:m};return{...wp(c,r),meshes:l}}var sr=[];function mm(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||sr)mm(o,t,r)}function Mp(e){let{device:t,sunlight:r}=v.get(e),o=[],i=[],n;for(n of F.get(e))!n.options.nightLight||!M.get(n).visible||mm(M.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=sm(o,r.staticLightGrid,a),m=sm(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&m===r.dynamicLightGrid)return;let f=s.data.byteLength+m.data.byteLength;if(f>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<f&&(j(e,r.lights),r.lights=t.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),Cn(e),p=!0),s.data[6]=s.data.length/4,p&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,m.data),r.lightCount=s.count+m.count,r.staticLightGrid=s,r.dynamicLightGrid=m}function Bp(e,t,r,o){let i=v.get(e),n=ee.get(e),a=n.viewMatrix,s=o?.direction,m=s?s[0]:-300,f=s?s[1]:500,p=s?s[2]:300,c=a[0]*m+a[4]*f+a[8]*p,l=a[1]*m+a[5]*f+a[9]*p,u=a[2]*m+a[6]*f+a[10]*p,h=Math.hypot(c,l,u)||1,x=Math.hypot(a[4],a[5],a[6])||1;yp(e,t,r);let g=i.uniformData;g.set(n.viewMatrix,0),g.set(n.projectionMatrix,16),K.get(e)?.matrix?g.set(K.get(e).matrix,32):(g.fill(0,32,48),g[32]=g[37]=g[42]=g[47]=1),g[48]=c/h,g[49]=l/h,g[50]=u/h,g[51]=o&&o.altitude<=0?0:1,g[52]=a[4]/x,g[53]=a[5]/x,g[54]=a[6]/x;let y=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;g[55]=y*y*(3-2*y);let w=o?.tint;g[56]=w?w[0]:1,g[57]=w?w[1]:1,g[58]=w?w[2]:1,g[59]=0,y>0&&Mp(e),i.uniformSlot=1}var mr={colorAttachments:[{view:null,resolveTarget:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var fm=[null];var ve={layout:null,vertex:{module:null,entryPoint:"vertexMain",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:null,blend:null,writeMask:null}]},primitive:{topology:"triangle-list",cullMode:null,frontFace:null},multisample:{count:4},depthStencil:{format:"depth24plus",depthWriteEnabled:null,depthCompare:null}};var Tp={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function Pp(e,t,r,o){let{program:i}=t,n=i.depthTest===!1||t.ground&&e.groundOverlap?"always":"less-equal",a=`${r}:${o}:${n}`,s=i.pipelineCache.get(a);return s||(s=e.device.createRenderPipeline((ve.layout=i.pipelineLayout,ve.vertex.module=i.vertex,ve.vertex.buffers=i.vertexBuffers,ve.fragment.module=i.fragment,ve.fragment.targets[0].format=e.format,ve.fragment.targets[0].blend=i.transparent?Tp:void 0,ve.fragment.targets[0].writeMask=GPUColorWrite.ALL,ve.primitive.cullMode=r,ve.primitive.frontFace=o,ve.depthStencil.depthWriteEnabled=i.depthWrite,ve.depthStencil.depthCompare=n,ve)),ve.layout=null,ve.vertex.module=null,ve.vertex.buffers=null,ve.fragment.module=null,i.pipelineCache.set(a,s)),s}function Sp(e,t,r){let o=e.uniformData,i=(t._nativeSource||t._rasterSource)?.options.cutout;if(i&&(!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.radius)||i.radius<0))throw new Error("cutout requires finite x, y and a non-negative radius in CSS pixels");o[r+36]=(i?.x??0)*e.dpr,o[r+37]=(i?.y??0)*e.dpr,o[r+38]=(i?.radius??0)*e.dpr,o[r+39]=i?.outside?1:0}function kp(e,t){let r=t.program.uniforms,o=e.uniformSlot++*256,i=e.uniformData,n=o/4;return i.set(t.worldMatrix,n),i.set(r.baseColor.value,n+16),i[n+19]=1,i[n+20]=r.metallic.value,i[n+21]=r.roughness.value,i[n+22]=r.opacity.value*(t.ground?t._appearance??1:1),i[n+23]=r.alphaCutoff.value,i.set(r.emissive.value,n+24),i[n+27]=r.occlusionStrength.value,i[n+28]=t.terrain?.[0]??0,i[n+29]=t.terrain?.[1]??0,i[n+30]=t.terrain?.[2]??0,i[n+31]=t.terrain?.[3]??0,i[n+32]=t.highlight?.[0]??0,i[n+33]=t.highlight?.[1]??0,i[n+34]=t.program.nightSparkle?i[55]:0,i[n+35]=t.ground?1:t._appearance??1,Sp(e,t,n),i[n+40]=r.strokeScale?.value??1,i[n+41]=i[n+42]=i[n+43]=0,o}var Nr={source:null,flipY:null};var uo={texture:null};var ho=[null,null];function Cp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Nr.source=t.image,Nr.flipY=!!t.flipY,Nr),(uo.texture=t.texture,uo),(ho[0]=t.image.width,ho[1]=t.image.height,ho)),Nr.source=null,uo.texture=null,t.uploaded=t.image)}var go={layout:null,entries:null};var _p=[];var _n={binding:0,resource:{buffer:null,size:176}};var En={binding:1,resource:{buffer:null,size:240}};var zn={binding:2,resource:null};var bi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var Mi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function Ep(e,t,r){let{program:o}=t,i=_p;i.length=0,_n.resource.buffer=e.uniformBuffer,En.resource.buffer=e.uniformBuffer,i.push(_n,En),o.terrain&&(zn.resource=o.terrain.texture.createView(),i.push(zn)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,m;for(a=0;a<r.length;a++)s=o.bindings[a],m=r[a],bi[a].binding=s.texture,bi[a].resource=m.texture.createView(),Mi[a].binding=s.sampler,Mi[a].resource=m.sampler,i.push(bi[a],Mi[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((go.layout=o.bindGroupLayout,go.entries=i,go)),go.layout=null,go.entries=null,_n.resource.buffer=null,En.resource.buffer=null,zn.resource=null,a=0;a<r.length;a++)bi[a].resource=null,Mi[a].resource=null;i.length=0}function zp(e,t){let{program:r}=t,{device:o}=e,i=t._textures||=[];i.length=0;let n,a,s;for(n of r.bindings){if(a=r.uniforms[n.name]?.value,!a)throw new Error(`Missing Layer3D texture: ${n.name}`);Cp(o,a),i.push(a)}let m=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!m&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(m=!0);m&&Ep(e,t,i)}function An(e,t,r,o,i){let{geometry:n}=t,a=v.get(e),{device:s}=a,m=Pp(a,t,o,i),f=kp(a,t);zp(a,t),r.setPipeline(m),r.setBindGroup(0,t.bindGroup,(fm[0]=f,fm)),r.setVertexBuffer(0,n.attributes.position.buffer),r.setVertexBuffer(1,n.attributes.normal.buffer),n.attributes.color&&r.setVertexBuffer(2,n.attributes.color.buffer),n.attributes.uv&&r.setVertexBuffer(3,n.attributes.uv.buffer);let p=n.attributes.instanceOffset;p&&r.setVertexBuffer(4,p.buffer);let c,l;for(c in n.attributes)l=n.attributes[c],l.needsUpdate&&(s.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1,(c==="position"||c==="instanceOffset")&&(n.bounds=null));let u=n.attributes.index;u?(r.setIndexBuffer(u.buffer,u.indexFormat),r.drawIndexed(n.drawRange.count,p?.count??1,n.drawRange.start,0,0)):r.draw(n.drawRange.count,p?.count??1,n.drawRange.start,0)}function Ap(e,t,r){let o=v.get(e),i=t.beginRenderPass((mr.colorAttachments[0].view=o.colorTexture.createView(),mr.colorAttachments[0].resolveTarget=o.context.getCurrentTexture().createView(),mr.depthStencilAttachment.view=o.depthTexture.createView(),mr));mr.colorAttachments[0].view=null,mr.colorAttachments[0].resolveTarget=null,mr.depthStencilAttachment.view=null,i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,m,f,p;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=K.get(e)?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(m=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(m)||m===0)throw new Error("Singular 3D transform");n._frontFace=m<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}f=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(An(e,n,i,"front",f),An(e,n,i,"back",f)):An(e,n,i,p.cullMode,f)}i.end()}var Rp=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var Op=new Float32Array(20);function Dp(e,t){let r=e.meshes.get(t),o=t.geometry.drawRange;if(!(r&&r.world===t._worldMatrixVersion&&r.geometry===t.geometry&&r.start===o.start&&r.count===o.count&&r.appearance===(t._appearance??1)))return!1;let i;for(i of Object.values(t.geometry.attributes))if(i.needsUpdate)return!1;return!0}function Ip(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i){for(a of t)if(!Dp(o,a)){i=!1;break}}return i}var Gp={min:[0,0,0],max:[0,0,0]};var Up={position:[0,0,0],target:[0,0,0],up:[0,0,-1],x:[0,0,0],y:[0,0,0],z:[0,0,0],fov:45,aspect:1,near:1,far:500,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};var Np=[0,0,0];var Fp=[0,0,0];function Wp(e,t,r){let o=e._shadowBounds;if(!o||o.version!==e._worldMatrixVersion||o.bounds!==t){o||=e._shadowBounds={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},o.version=e._worldMatrixVersion,o.bounds=t,o.min.fill(1/0),o.max.fill(-1/0);let i,n,a,s,m,f,p;for(i=0;i<8;i++)for(n=i&1?t.max[0]:t.min[0],a=i&2?t.max[1]:t.min[1],s=i&4?t.max[2]:t.min[2],m=r[3]*n+r[7]*a+r[11]*s+r[15],f=0;f<3;f++)p=(r[f]*n+r[f+4]*a+r[f+8]*s+r[f+12])/m,o.min[f]=Math.min(o.min[f],p),o.max[f]=Math.max(o.max[f],p)}return o}function jp(e,t={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}){let{min:r,max:o}=t;r.fill(1/0),o.fill(-1/0);let i,n,a,s,m;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&Ce(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=Wp(i,n,a),m=0;m<3;m++)r[m]=Math.min(r[m],s.min[m]),o[m]=Math.max(o[m],s.max[m]);return r[1]=Math.min(0,r[1]),t}function $p(e,t){let{min:r,max:o}=jp(e,Gp),i=Up;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=Np,a=Fp,s,m,f,p,c,l,u=Math.max(100,Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]));for(s=0;s<3;s++)i.target[s]=(r[s]+o[s])/2,i.position[s]=i.target[s]+t.direction[s]*u*2;i.far=u*5,co(i);let h=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(f=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],m=0;m<3;m++)l=h[m]*f+h[m+4]*p+h[m+8]*c+h[m+12],n[m]=Math.min(n[m],l-20),a[m]=Math.max(a[m],l+20);let x=2/(a[0]-n[0]),g=2/(a[1]-n[1]),y=-1/(a[2]-n[2]),w=new Float32Array(16);for(s=0;s<16;s+=4)w[s]=h[s]*x,w[s+1]=h[s+1]*g,w[s+2]=h[s+2]*y,w[s+3]=h[s+3];return w[12]-=(a[0]+n[0])/(a[0]-n[0]),w[13]-=(a[1]+n[1])/(a[1]-n[1]),w[14]+=a[2]/(a[2]-n[2]),w}var pm={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var cm={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var yo={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var Rn={code:null};var xt={layout:null,vertex:{module:null,entryPoint:"main",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}};var xo={bindGroupLayouts:[null,null]};var vo=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var On=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var Vp=[vo,On];var Zp=[vo];function lm(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((pm.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,pm)),t.depthLayout=e.createBindGroupLayout((cm.entries[0].visibility=GPUShaderStage.VERTEX,cm)),t.depthBindGroup=e.createBindGroup((yo.layout=t.depthLayout,yo.entries[0].resource.buffer=t.buffer,yo)),yo.layout=null,yo.entries[0].resource.buffer=null);let i=e.createShaderModule((Rn.code=` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,Rn));Rn.code=null;let n=r?Vp:Zp;t[o]=e.createRenderPipeline((xt.layout=e.createPipelineLayout((xo.bindGroupLayouts[0]=t.meshLayout,xo.bindGroupLayouts[1]=t.depthLayout,xo)),xt.vertex.module=i,xt.vertex.buffers=n,xt.fragment.module=i,xt)),xo.bindGroupLayouts[0]=null,xo.bindGroupLayouts[1]=null,xt.layout=null,xt.vertex.module=null,xt.vertex.buffers=null,xt.fragment.module=null}}var Dn={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var wo={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var um=[null];function qp(e,t,r){let o=v.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass((Dn.depthStencilAttachment.view=n.texture.createView(),Dn));Dn.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let m,f,p,c,l,u,h;for(m of r){f=m.geometry.attributes.instanceOffset,p=f?n.instancePipeline:n.pipeline,p!==s&&(s=p,a.setPipeline(s)),c=o.uniformSlot++*256,o.uniformData.set(m.worldMatrix,c/4),o.uniformData[c/4+35]=m._appearance??1,m._shadowBuffer!==o.uniformBuffer&&(m._shadowBuffer=o.uniformBuffer,m._shadowBindGroup=i.createBindGroup((wo.layout=n.meshLayout,wo.entries[0].resource.buffer=o.uniformBuffer,wo)),wo.layout=null,wo.entries[0].resource.buffer=null);for(l of Object.values(m.geometry.attributes))l.needsUpdate&&(i.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1);a.setBindGroup(0,m._shadowBindGroup,(um[0]=c,um)),a.setVertexBuffer(0,m.geometry.attributes.position.buffer),f&&a.setVertexBuffer(1,f.buffer),u=m.geometry.attributes.index,h=m.geometry.drawRange,u?(a.setIndexBuffer(u.buffer,u.indexFormat),a.drawIndexed(h.count,f?.count??1,h.start,0,0)):a.draw(h.count,f?.count??1,h.start,0)}a.end()}var Bi={size:[null,null],format:"depth32float",usage:null};function In(e,t){let r=v.get(e).device,o=v.get(e).sunlight;o.size!==t&&(o.texture&&j(e,o.texture),o.size=t,o.texture=r.createTexture((Bi.size[0]=t,Bi.size[1]=t,Bi.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,Bi)),Cn(e))}function Hp(e,t,r,o){let i=v.get(e),n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,Rp),a.enabled=!1,a.cache=null;return}if(Ip(a,r,o))return;let s=Op;a.enabled=!0,In(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set($p(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),lm(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){lm(n,a,!0);break}qp(e,t,r);let f=new Map,p;for(p of r)f.set(p,{world:p._worldMatrixVersion,geometry:p.geometry,start:p.geometry.drawRange.start,count:p.geometry.drawRange.count,appearance:p._appearance??1});a.cache={direction:[...o.direction],meshes:f}}function Gn(e){let t=st.get(e);It.delete(e),st.set(e,null),!It.size&&t!=null&&cancelAnimationFrame(t)}var Nt=new WeakMap;var Ti=new WeakMap;var Pi=new WeakMap;var pe=new WeakMap;var Un=new WeakMap;function q(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function Lo(e,t){Un.get(e)?.abort();let r=D.get(e).get(t);r&&(q(r,null),E(e),r.texture!==t.texture&&j(e,r.texture.texture),D.get(e).delete(t))}function bo(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;D.get(e).get(r)===t&&(D.get(e).delete(r),_e.set(e,(_e.get(e)||0)+1),t.request.abort(),pe.get(e)&&Lo(pe.get(e),t),t.mesh&&q(t.mesh,null),t.texture&&j(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),E(e))}function Mo(e){let t=or.get(e),r=performance.now();if(Ti.get(e)===_e.get(e)&&Pi.get(e)===t&&r<Nt.get(e))return Number.isFinite(Nt.get(e));Ti.set(e,_e.get(e)),Pi.set(e,t),Nt.set(e,1/0);let o=[],i,n,a,s,m,f;for(i of t)n=D.get(e).get(i),n?.done&&r-n.loadedAt<250&&Nt.set(e,Math.min(Nt.get(e),n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of D.get(e))if(!t.has(i)){s=!1;for(m of o)if(f=Math.min(m.z,n.coords.z),Math.floor(m.x/2**(m.z-f))===Math.floor(n.coords.x/2**(n.coords.z-f))&&Math.floor(m.y/2**(m.z-f))===Math.floor(n.coords.y/2**(n.coords.z-f))){s=!0;break}s||bo(e,n)}return Number.isFinite(Nt.get(e))}L();function Bo(e){return ue.get(e.source)===e&&e.map.hasLayer(e.source)}L();var fr=Object.freeze([1,1,1]);var Fr=new WeakMap;L();function Ft(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof d.GridLayer&&(t.opacity=o);let m=n?i._zIndex+(Fr.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var Yp=Object.freeze([0,2,1,1,2,3]);var dm=Object.freeze([0,0,1,0,0,1,1,1]);var Xp=Object.freeze({minFilter:"linear",magFilter:"linear"});function Ie(e,t){if(!t)return;q(t,null),E(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function Kp(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!Bo(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,De(e)}catch(m){e.failed=!0,e.source.fire("error",{error:m})}finally{s?.close()}}function Qp(e,t,r,o,i,n,a){try{i.queue.copyExternalImageToTexture({source:o},{texture:r.texture},[n,a])}catch(s){throw r.texture.destroy(),e.textures.delete(t),s}r.uploaded=o}function Nn(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){if(a){let c=n.get(t);c&&Ie(o,c),n.delete(t),j(o,a.texture),i.delete(t)}let m=r.naturalWidth||r.width,f=r.naturalHeight||r.height;if(!m||!f)return;let{device:p}=v.get(o);a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[m,f],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(Xp)},i.set(t,a),r instanceof HTMLCanvasElement?(a.pending=!0,Kp(e,t,a,r,p,m,f)):Qp(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}L();L();var To=Object.freeze({});var Fn={size:null,usage:null};var vt={value:0};function Ee(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],highlightRange:[0,0],visible:!0}}var Wn={code:null};var jn={code:null};var Po={bindGroupLayouts:[null,null]};var ec=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";var tc=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var rc=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var oc=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var $n={entries:null};var ic=[];var hm={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var gm={binding:1,visibility:null,buffer:{type:"uniform"}};var ym={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var nc=[{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}}];var ac=[{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}}];function sc(e,t){let r=ic;r.length=0,hm.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,gm.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(hm,gm),t.hasTerrain&&(ym.visibility=GPUShaderStage.VERTEX,r.push(ym));let o,i,n=0;for(o of t.bindings)i=nc[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=ac[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout(($n.entries=r,$n));return $n.entries=null,a}function Vn(e){let t={baseColor:{value:e.color||[1,1,1]},metallic:{value:e.metallic??0},roughness:{value:e.roughness??.85},opacity:{value:e.opacity??1},alphaCutoff:{value:e.alphaCutoff??.5},occlusionStrength:{value:e.occlusionStrength??1},emissive:{value:e.emissive||[0,0,0]}};return e.baseTexture&&(t.baseTexture={value:e.baseTexture}),e.metalTexture&&(t.metalTexture={value:e.metalTexture}),e.emissiveTexture&&(t.emissiveTexture={value:e.emissiveTexture}),e.occlusionTexture&&(t.occlusionTexture={value:e.occlusionTexture}),(e.roofTexture||e.wallTexture)&&(t.roofTexture={value:null}),e.nativeStroke&&(t.strokeScale={value:1}),t}function So(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function mc(e){let t,r;for(t of["roofTexture","wallTexture"])if(r=e[t],r!==void 0&&typeof r!="boolean"&&(!Number.isFinite(r)||r<0||r>1))throw new Error(`${t} must be a boolean or a finite number between 0 and 1`)}function fc(e){let t=Number(e.roofTexture??0);return` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${Number(e.wallTexture??0).toFixed(8)},${t.toFixed(8)},input.normal.y >= 0.5),((${!!e.roofTexture} && input.normal.y >= 0.5)||(${!!e.wallTexture} && abs(input.normal.y)< 0.5))&& !highlighted);`}function pc(e){return{position:e.nativeStroke?"position = input.normal + (input.position - input.normal) * u.nativeStroke.x;":"",normal:e.nativeStroke?"let sourceNormal = vec3<f32>(0.0, 1.0, 0.0);":"let sourceNormal = input.normal;"}}function cc(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"",s=pc(e);return` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,nativeStroke:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${o?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""} ${n?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${a};${s.position} ${o?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);${s.normal} let normal =(cross(m[1],m[2])* sourceNormal.x + cross(m[2],m[0])* sourceNormal.y + cross(m[0],m[1])* sourceNormal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${a};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${i?"output.uv = input.uv;":""} ${n?fc(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function lc(e,t,r){return` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${t?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${r?" if(input.roof > 0.0 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a * input.roof);}":""}`}function uc(e,t,r,o,i,n,a){return e.unlit?` let rasterTexel = ${r?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:`${lc(e,r,a)} let mr = ${o?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${n?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${i?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}function dc(e=To,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);mc(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=cc(e,t,r,m,f,s),c=[],l=So(c,"baseTexture",o),u=So(c,"metalTexture",i),h=So(c,"emissiveTexture",n),x=So(c,"occlusionTexture",a),g=So(c,"roofTexture",s),y=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,nativeStroke:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${l}${u}${h}${x}${g} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${f?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{let cutoutDistance = distance(input.position.xy,u.cutout.xy);if(select((cutoutDistance < u.cutout.z),(cutoutDistance >= u.cutout.z),u.cutout.w > 0.0)){discard;}${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${uc(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:y,bindings:c,textured:f,hasTerrain:m}}async function hc(e,t){let r,o;try{let i=await Promise.all(t),n="",a=0;for(r of i)for(o of r.messages)o.type==="error"&&(n+=`${a++?`
2
+ `:""}${o.message}`);a&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n}`)})}catch(i){e.fire("error",{error:i})}}function Ge(e,t=To){let r=dc(t,!!e.options.nightSparkle,t.terrain?ec:""),o=v.get(e).device.createShaderModule((Wn.code=r.vertex,Wn));Wn.code=null;let i=v.get(e).device.createShaderModule((jn.code=r.fragment,jn));jn.code=null,hc(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[vo,tc,t.vertexColors?rc:null,r.textured?oc:null];t.instanced&&n.push(On);let a=sc(v.get(e).device,r),s=v.get(e).device.createPipelineLayout((Po.bindGroupLayouts[0]=a,Po.bindGroupLayouts[1]=v.get(e).sunlight.layout,Po));Po.bindGroupLayouts[0]=null,Po.bindGroupLayouts[1]=null;let m=Vn(t);return{device:v.get(e).device,vertex:o,fragment:i,bindings:r.bindings,vertexBuffers:n,bindGroupLayout:a,pipelineLayout:s,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:m,_layerMaterial:t}}function pr(e,t,r=To,o=0,i){let{device:n}=v.get(e),a={},s,m,f,p,c;for([s,m]of Object.entries(t))f=new Float32Array(m),p=s==="uv"?2:3,c=n.createBuffer((Fn.size=Math.max(4,f.byteLength),Fn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Fn)),n.queue.writeBuffer(c,0,f),a[s]={size:p,data:f,count:f.length/p,buffer:c};let l={...Ee(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||Ge(e,{vertexColors:!0,doubleSided:!0,...r}),id:vt.value++,renderOrder:0,extras:{}};return q(l,M.get(e)),E(e),l}var xm=new WeakMap;function vm(e,t){let r=v.get(e),o=xm.get(r);o||(o=new Map,xm.set(r,o));let i=`${!!t.baseTexture}:${!!t.nativeStroke}:${!!t.depthWrite}`,n=o.get(i);return n||(n=Ge(e,{doubleSided:!0,...t}),o.set(i,n)),{...n,uniforms:Vn(t),_layerMaterial:t}}function yc(e,t,r,o,i,n,a,s,m){let{backend:f,source:p,meshes:c}=e,l=m?e.strokeAnchors:[],u,h=c.get(t);if(!m)for(u=0;u<r.length;u++)l.push(u%3===1?1:0);let x={position:r,normal:l};a&&(x.uv=a);let g={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND",depthWrite:s,nativeStroke:m};return n&&(g.baseTexture=n),h&&Ie(f,h),h=pr(f,x,g,0,p instanceof d.GridLayer?(s?e.terrainRasterProgram:e.rasterProgram)||vm(f,g):vm(f,g)),p instanceof d.GridLayer&&(s?e.terrainRasterProgram||=h.program:e.rasterProgram||=h.program,h.texture=n),c.set(t,h),h}function xc(e){let t=e.geometry.attributes,r=t.position.data,o=t.normal.data,i,n=0;for(i=0;i<r.length;i+=3)n=Math.max(n,Math.hypot(r[i]-o[i],r[i+1]-o[i+1],r[i+2]-o[i+2]));e.geometry.nativeStrokeRadius=n}function ko(e,t,r,o,i,n,a,s=!1){let{source:m,meshes:f}=e;if(!r.length)return;let p=t==="stroke"&&!!e.strokeCoordinates&&m.options.interactive===!1,c=f.get(t);if(!c||c.geometry.attributes.position.data.length!==r.length||m instanceof d.GridLayer&&c.program.depthWrite!==s||c.program.uniforms.baseTexture?.value!==n||!!c.program._layerMaterial.nativeStroke!==p)c=yc(e,t,r,o,i,n,a,s,p);else{let l=c.geometry.attributes.position;l.data.set(r),l.needsUpdate=!0,c.geometry.bounds=null,p&&(c.geometry.attributes.normal.data.set(e.strokeAnchors),c.geometry.attributes.normal.needsUpdate=!0)}return p&&xc(c),c.program.uniforms.strokeScale&&(c.program.uniforms.strokeScale.value=1),Ft(e,c,o,i),c}function Co(e,t,r,o,i){let n=Nn(e,t,r);if(!n)return;let a=Yp,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(dm[f*2],dm[f*2+1]);return ko(e,t,s,fr,i,n,m)}var I=new WeakMap;$();function Wt(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(I.get(o)),a=i.project(t),s=Math.cos(I.get(o).lat*B);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function Zn(e,t){let r=[],o,i;for(o=0;o<4;o++)i=o===0?t.getNorthWest():o===1?t.getNorthEast():o===2?t.getSouthWest():t.getSouthEast(),r.push(Wt(e,i));return r}async function vc(e,t,r,o){let i=2**t;r=(r%i+i)%i,o=Math.max(0,Math.min(i-1,o));let n=`${t}/${r}/${o}`,a=e.terrainCache.get(n);a?(e.terrainCache.delete(n),e.terrainCache.set(n,a)):(a={promise:e.layer.options.getTile(t,r,o,e.terrainController.signal)},e.terrainCache.set(n,a));try{if(a.data||(a.data=await a.promise),!(a.data instanceof Float32Array)||a.data.length!==65536)throw new Error(`Invalid elevation tile ${n}: expected 256x256 Float32Array`);if(!a.range){let s=1/0,m=-1/0,f;for(f of a.data)!Number.isFinite(f)||f<=-1e3||(s=Math.min(s,f),m=Math.max(m,f));a.range=[s,m]}}catch(s){throw e.terrainCache.get(n)===a&&e.terrainCache.delete(n),s}for(;e.terrainCache.size>256;)e.terrainCache.delete(e.terrainCache.keys().next().value);return a.data}async function wc(e,t,r,o){let{x:i,y:n,z:a}=r.coords,s=o.stream,m=[],f=new Map,p,c,l=0;try{for(c=-1;c<=1;c++)for(p=-1;p<=1;p++)m.push(vc(s,a,i+p,n+c));let u=await Promise.all(m);if(e.disposed||s.terrainController.signal.aborted||e.source._tiles[t]!==r||e.terrainRequests.get(t)!==o)return;for(c=-1;c<=1;c++)for(p=-1;p<=1;p++)f.set(`${i+p}/${n+c}`,u[l++]);o.tiles=f,De(e),e.map.fire("terrainchange"),e.source._update()}catch(u){!e.disposed&&!s.terrainController.signal.aborted&&e.source._tiles[t]===r&&(o.error=u,s.layer.fire("error",{error:u,coords:r.coords}))}}function Lc(e,t,r,o,i){let n=Nn(e,t,r.el);if(!n)return;let{x:a,y:s,z:m}=r.coords,f=32,p=Wt(e,e.map.unproject([a*256,s*256],m)),c=Wt(e,e.map.unproject([(a+1)*256,(s+1)*256],m)),l=[],u=[],h=[],x=M.get(e.backend).position[1],g,y,w,S,T,P,R,Q,N,G;for(g=0;g<=f;g++)for(y=0;y<=f;y++){if(w=y/f,S=g/f,T=Gr({x:(a+w)*256,y:(s+S)*256},o.tiles),!Number.isFinite(T))throw new Error(`Missing elevation sample in ${m}/${a}/${s}`);l.push([p[0]+(c[0]-p[0])*w,T-x,p[2]+(c[2]-p[2])*S,w,S])}for(g=0;g<f;g++)for(y=0;y<f;y++){P=g*(f+1)+y,R=P+1,Q=P+f+1,N=Q+1;for(G of[P,Q,R,R,Q,N])u.push(l[G][0],l[G][1],l[G][2]),h.push(l[G][3],l[G][4])}let V=ko(e,t,u,fr,i,n,h,!0);return V._terrainRequest=o,V}function bc(e){let{source:t,textures:r,meshes:o}=e,i=Me.get(e.map);e.terrainStream!==i&&(e.terrainStream=i,e.terrainRequests=i?new Map:null);let n,a,s,m,f,p,c,l,u=!1;if(e.terrainRequests)for(n of e.terrainRequests.keys())t._tiles[n]||e.terrainRequests.delete(n);for(n in t._tiles)if(Object.hasOwn(t._tiles,n)){if(a=t._tiles[n],!a.loaded||a.el instanceof HTMLImageElement&&!a.el.naturalWidth){i&&(u=!0);continue}if(s=(t.options.opacity??1)*(a._gpuOpacity??1),m=r.get(n),f=o.get(n),e.terrainRequests){if(l=e.terrainRequests.get(n),(!l||l.tile!==a)&&(l={tile:a,stream:i},e.terrainRequests.set(n,l),wc(e,n,a,l)),!l.tiles){u=!0,f&&m?.image===a.el&&(m.used=!0,Ft(e,f,fr,s));continue}f&&f._terrainRequest===l&&m?.image===a.el&&m.url===(a.el.currentSrc||a.el.src)?(m.used=!0,Ft(e,f,fr,s)):f=Lc(e,n,a,l,s)}else f&&!f._terrainRequest&&m?.image===a.el&&m.url===(a.el.currentSrc||a.el.src)?(m.used=!0,Ft(e,f,fr,s)):([p,c]=t._tileCoordsToNwSe(a.coords),f=Co(e,n,a.el,Zn(e,new d.LatLngBounds(p,c)),s));f&&(f.renderOrder+=a.coords.z/100)}if(i&&(u||!Object.keys(t._tiles).length))for([n,f]of o)t._tiles[n]||!f._terrainRequest||(m=r.get(n),m&&(m.used=!0,f._nativeUsed=!0))}function Mc(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&Co(e,"image",t._image,Zn(e,t.getBounds()),t.options.opacity??1)}var Bc=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);L();$();Z();function qn(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?k(e._map)*B:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new d.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function Si(e,t,r,o,i,n){return e.x=t.m11*r+t.m21*o+t.m31*i+t.m41*n,e.y=t.m12*r+t.m22*o+t.m32*i+t.m42*n,e.z=t.m13*r+t.m23*o+t.m33*i+t.m43*n,e.w=t.m14*r+t.m24*o+t.m34*i+t.m44*n,e}function Tc(e,t,r){let o=e.source.options.icon.options,i=o[t==="shadow"?"shadowSize":"iconSize"],n=e.markerImageBounds||=[0,0,0,0];n[0]=i?i.x??i[0]:r.naturalWidth,n[1]=i?i.y??i[1]:r.naturalHeight;let a=t==="shadow"&&o.shadowAnchor||o.iconAnchor;return n[2]=a?a.x??a[0]:Math.floor(n[0]/2),n[3]=a?a.y??a[1]:Math.floor(n[1]/2),n}function Pc(e,t,r){let{source:o,map:i,backend:n}=e,a=Wt(e,o.getLatLng());if(Me.get(i)){let gi=M.get(n),an=ye(i,o.getLatLng());Number.isFinite(an)&&(a[1]=(an-gi.position[1])/gi.scale[1])}let s=i.getSize(),m=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},f=m.root,p=m.camera,c=m.point,l=M.get(n).worldMatrix,u=ee.get(n).projectionViewMatrix,h,x;for(h=0;h<16;h++)x=Bc[h],f[x]=l[h],p[x]=u[h];Si(c,f,a[0],a[1],a[2],1),Si(c,p,c.x,c.y,c.z,c.w);let g=c.x,y=c.y,w=c.z,S=c.w;p.invertSelf(),f.invertSelf();let[T,P,R,Q]=Tc(e,t,r),N=(g/S+1)*s.x/2,G=(1-y/S)*s.y/2,V=N-R,le=G-Q,be=[],at,ke,gt,Ve,hi;for(h=0;h<4;h++)at=V+(h%2?T:0),ke=le+(h<2?0:P),gt=qn(o,at-N,ke-G),Ve=N+gt.x,hi=G+gt.y,Si(c,p,Ve/s.x*2-1,1-hi/s.y*2,w/S,1),Si(c,f,c.x/c.w,c.y/c.w,c.z/c.w,1),be.push([c.x,c.y,c.z]);return be}function Sc(e){let{source:t}=e,r,o,i,n;for(r=0;r<2;r++)o=r?"icon":"shadow",i=r?t._icon:t._shadow,!(!(i instanceof HTMLImageElement)||!i.complete||!i.naturalWidth)&&(n=Co(e,o,i,Pc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}function Hn(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function Yn(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function wt(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:Hn(Yn(0,e.h,e.l,n)),g:Hn(Yn(8,e.h,e.l,n)),b:Hn(Yn(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function kc(e){let{source:t,meshes:r,strokeCoordinates:o,strokeAnchors:i}=e,n=r.get("stroke"),a,s,m,f,p;if(n){let c=2**(e.strokeZoom-e.map.getZoom())*Number(t.options.weight)/e.strokeWeight,l=n.geometry.attributes.position;if(n.program.uniforms.strokeScale)n.program.uniforms.strokeScale.value=c;else{for(a=0;a<o.length;a++)l.data[a]=i[a]+(o[a]-i[a])*c;l.needsUpdate=!0,n.geometry.bounds=null}({r:s,g:m,b:f}=wt(t.options.color)),Ft(e,n,[s,m,f],t.options.opacity??1)}p=r.get("fill"),p&&({r:s,g:m,b:f}=wt(t.options.fillColor||t.options.color),Ft(e,p,[s,m,f],t.options.fillOpacity??1))}var _o=[];L();L();L();function Ue(e,t,r,o,i,n,a,s){return t.push(...e(r,n),...e(o,a),...e(i,s))}var ki=2*Math.PI;L();function wm(e,t,r,o,i){return new d.Point(e.x+t*Math.cos(i*ki/o),e.y+r*Math.sin(i*ki/o))}function Wr(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)Ue(e,o,t,wm(t,r,i,n,a),wm(t,r,i,n,a+1),t,t,t)}function Xn(e,t,r,o,i){let{options:n,width:a,stroke:s,point:m}=e,f=a/2,p=t,c=r,l=t.distanceTo(r);if(!l)return;let u=r.subtract(t).divideBy(l),h=new d.Point(-u.y*f,u.x*f);n.lineCap==="square"&&(o&&(t=t.subtract(u.multiplyBy(f))),i&&(r=r.add(u.multiplyBy(f)))),Ue(m,s,t.add(h),t.subtract(h),r.add(h),p,p,c),Ue(m,s,r.add(h),t.subtract(h),r.subtract(h),c,p,c),n.lineCap==="round"&&(o&&Wr(m,t,f,s),i&&Wr(m,r,f,s))}L();function Cc(e,t,r,o,i){let{options:n,width:a,point:s,stroke:m}=e,f=t[r],p=a/2;if(n.lineJoin==="round"){Wr(s,f,p,m);return}let c=f.subtract(t[(r+t.length-1)%t.length]),l=Math.hypot(c.x,c.y);if(!l||!i)return;let u=c.divideBy(l),h=o.subtract(f).divideBy(i),x=u.x*h.y-u.y*h.x>0?-1:1,g=new d.Point(-u.y*x,u.x*x),y=new d.Point(-h.y*x,h.x*x),w=f.add(g.multiplyBy(p)),S=f.add(y.multiplyBy(p)),T=1+g.x*y.x+g.y*y.y,P=T>0?g.add(y).multiplyBy(p/T):null;Ue(s,m,w,f,S,f,f,f),n.lineJoin==="miter"&&P&&Math.hypot(P.x,P.y)<=p*4&&Ue(s,m,w,f.add(P),S,f,f,f)}function _c(e,t,r,o,i,n){let a=e.dash,s=0,m=(i%n+n)%n,f=0,p,c,l=0;for(;f<a.length-1&&m>=a[f];)m-=a[f++];let u=Math.max(0,a[f]-m);for(;s<o;){if(p=Math.min(o,s+u),p>s&&f%2===0&&(c=r.subtract(t).divideBy(o),Xn(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),p<=s){if(++l>=a.length)throw new Error("Leaflet dashArray is too small for these coordinates")}else l=0;s=p,f=(f+1)%a.length,u=a[f]}}function Jn(e,t,r){let{options:o,width:i,dash:n}=e;if(!o.stroke||i<=0||t.length<2)return;let a=Number(o.dashOffset)||0,s=0,m,f,p,c,l;for(m of n)s+=m;for(f=0;f<t.length-(r?0:1);f++)p=t[f],c=t[(f+1)%t.length],l=p.distanceTo(c),n.length?_c(e,p,c,l,a,s):(Xn(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&Cc(e,t,f,c,l)),a+=l}function Ec(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function zc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||e[a].x<=e[s].x)?t[m]=e[a++]:t[m]=e[s++]}function Ac(e){if(e.length<2)return e;let t=new Array(e.length),r=[],o,i,n,a,s;for(o of e)r.push({ring:o,x:Ec(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)zc(m,f,n,i);a=m,m=f,f=a}for(s=0;s<e.length;s++)e[s]=m[s].ring;return e}function Pe(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function ct(e,t){return e.x===t.x&&e.y===t.y}function Rc(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],ct(o,i)||Math.abs(Pe(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function Oc(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function Dc(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=Rc(t.slice(o,o+=n.length)),Oc(a)!==!!i&&a.reverse(),r.push(a);return r}function Kn(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function Ic(e,t){let r;for(r=1;r<t.length;r++)if(Kn(e,t[r]))return!0;return!1}function Ci(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function Gc(e,t,r,o){if(ct(e,r)||ct(e,o)||ct(t,r)||ct(t,o))return!1;let i=Pe(e,t,r),n=Pe(e,t,o),a=Pe(r,o,e),s=Pe(r,o,t);return i*n<0&&a*s<0||i===0&&Ci(e,t,r)||n===0&&Ci(e,t,o)||a===0&&Ci(r,o,e)||s===0&&Ci(r,o,t)}function Lm(e,t,r){let o;for(o=0;o<r.length;o++)if(Gc(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function Uc(e,t,r,o){if(Lm(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(Lm(e,t,o[i]))return!0;return!1}function Nc(e,t,r,o){let i=-1,n=-1,a=1/0,s,m,f,p,c;for(s=0;s<t.length;s++)for(m=0;m<e.length;m++)f=t[s],p=e[m],c=(f.x-p.x)**2+(f.y-p.y)**2,!(c>=a)&&(o.x=(f.x+p.x)/2,o.y=(f.y+p.y)/2,!(!Kn(o,r[0])||Ic(o,r))&&(Uc(f,p,e,r)||(i=s,n=m,a=c)));if(i<0)throw new Error("Unable to connect polygon hole");return[...e.slice(0,n+1),...t.slice(i),...t.slice(0,i+1),e[n],...e.slice(n+1)]}function Fc(e,t,r,o){let i;for(i of e)if(!ct(i,t)&&!ct(i,r)&&!ct(i,o)&&Pe(t,r,i)>=0&&Pe(r,o,i)>=0&&Pe(o,t,i)>=0)return!0;return!1}function Wc(e){let t=[],r,o,i,n,a,s;for(;e.length>3;){for(r=!1,o=0;o<e.length;o++)if(i=e[(o+e.length-1)%e.length],n=e[o],a=e[(o+1)%e.length],!(Pe(i,n,a)<=1e-10)&&!Fc(e,i,n,a)){t.push([i.index,n.index,a.index]),e.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Pe(...e)>1e-10){let m=[];for(s of e)m.push(s.index);t.push(m)}return t}function bm(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function jc(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=bm(e[n]);let s=bm(e[0])-o;for(a of r)i+=Pe(t[a[0]],t[a[1]],t[a[2]])/2;if(s<=0||Math.abs(i-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function Qn(e,t=sr){let r=[e,...t],o=r.flat(),i,n,a;for(i of o)if(!Number.isFinite(i.x)||!Number.isFinite(i.y))throw new Error("Invalid polygon coordinates");let s=[];for(n=0;n<o.length;n++)i=o[n],s.push({x:i.x-e[0].x,y:i.y-e[0].y,index:n});let m=Dc(r,s),f=m[0].slice(),p=Ac(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=Nc(f,a,m,c);let l=Wc(f);return jc(m,s,l),l}function $c(e,t){let{options:r,fill:o,point:i}=e;if(r.triangulated){if(t.length!==1||t[0].length!==3)throw new Error("triangulated polygons require three vertices per polygon and no holes");Ue(i,o,t[0][0],t[0][1],t[0][2]);return}let n=[],a,s;for(a of t)a.length>=3&&n.push(a);let m=n.flat();for(s of Qn(n[0],n.slice(1)))Ue(i,o,m[s[0]],m[s[1]],m[s[2]])}function Mm(e,t,r){let{options:o,map:i}=e,n=[],a,s,m;for(a of t){s=[];for(m of a)s.push(i.project(m));n.push(s)}r&&o.fill&&n[0]?.length>=3&&$c(e,n);for(a of n)Jn(e,a,r)}function Bm(e,t,r){if(!t.length)return;let o;if(t[0]instanceof d.LatLng)Mm(e,[t],r);else if(r&&t[0][0]instanceof d.LatLng)Mm(e,t,r);else for(o of t)Bm(e,o,r)}function Vc(e){let t=Array.isArray(e.dashArray)?e.dashArray:String(e.dashArray||"").trim().split(/[ ,]+/),r=[],o,i=!0;for(o of t)r.push(Number(o));for(o of r){if(!Number.isFinite(o)||o<0)throw new Error("Invalid Leaflet dashArray");o!==0&&(i=!1)}return i&&(r.length=0),r.length%2&&r.push(...r),r}L();L();function cr(e,t,r,o,i,n=0){let a=i*ki/o;return new d.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}function Zc(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:m}=t,f=r.project(e.getLatLng()),p=e.getRadius(),c=p,l,u;if(e instanceof d.Circle){e._project();let x=e._point.add(r.getPixelOrigin());f.x=x.x,f.y=x.y,p=e._radius,c=e._radiusY||p}a.fill&&Wr(o,f,p,i,c);let h=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let x=[];for(l=0;l<h;l++)x.push(cr(f,p,c,h,l));Jn(t,x,!0)}else if(a.stroke&&m>0)for(u=0;u<h;u++)Ue(o,n,cr(f,p,c,h,u,m/2),cr(f,p,c,h,u,-m/2),cr(f,p,c,h,u+1,m/2)),Ue(o,n,cr(f,p,c,h,u+1,m/2),cr(f,p,c,h,u,-m/2),cr(f,p,c,h,u+1,-m/2))}function qc(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=Vc(n),m={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof d.CircleMarker)Zc(e,m);else{let f=e instanceof d.Polygon;Bm(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Tm(e,t){if(e.pixelProjection){let{transformation:r,scale:o,origin:i,metres:n}=e.pixelProjection,a=r.untransform(t,o);return[(a.x-i.x)*n,0,-(a.y-i.y)*n]}return Wt(e,e.map.unproject(t))}function Hc(e,t){let r=_o[_o.length-1];return t&&r.strokeAnchors&&r.strokeAnchors.push(...Tm(r,t)),Tm(r,e)}$();L();function Yc(e){let{source:t}=e;e.strokeCoordinates=null,e.strokeAnchors=t instanceof d.Polyline&&!t.options.dashArray?[]:null;let r=e.map.options.crs,o=I.get(e.backend);e.pixelProjection={transformation:r.transformation,scale:r.scale(e.map.getZoom()),origin:r.project(o),metres:Math.cos(o.lat*B)},_o.push(e);try{return qc(t,e.map,Hc)}finally{_o.pop()}}function Xc(e,t){let{source:r}=e;e.strokeAnchors?.length===t.length&&t.length?(r.options.interactive===!1?e.strokeCoordinates=t:(e.strokeCoordinates=new Float64Array(t),e.strokeAnchors=new Float64Array(e.strokeAnchors)),e.strokeZoom=e.map.getZoom(),e.strokeWeight=Number(r.options.weight)):e.strokeAnchors=null}function Jc(e){let{source:t}=e;if(e.zoomOnly){kc(e),e.zoomOnly=!1;return}let{fill:r,stroke:o}=Yc(e);Xc(e,o);let i,n,a,s,m,f,p,c,l;for(i=0;i<2;i++)n=i?"stroke":"fill",a=i?o:r,s=i?t.options.color:t.options.fillColor||t.options.color,m=i?t.options.opacity:t.options.fillOpacity,a.length&&({r:f,g:p,b:c}=wt(s),ko(e,n,a,[f,p,c],m??1),n==="stroke"&&t.options.interactive===!1&&e.strokeCoordinates&&(l=e.meshes.get(n).geometry.attributes,e.strokeCoordinates=l.position.data,e.strokeAnchors=l.normal.data))}function Kc(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(Ie(o,i),t.delete(a),n=r.get(a),n&&j(o,n.texture),r.delete(a));for([a,n]of r)n.used||(j(o,n.texture),r.delete(a))}function ea(e){let{source:t,meshes:r,textures:o}=e;if(!Bo(e)||!v.get(e.backend)||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof d.GridLayer?bc(e):t instanceof d.ImageOverlay?Mc(e):e.marker?Sc(e):Jc(e),Kc(e)}function Qc(e){try{ea(e);let t=e.meshes.get("stroke")?.program.uniforms.strokeScale;if(t){let r=se.get(e.map)?.zoom??e.map.getZoom();t.value=2**(e.strokeZoom-r)*Number(e.source.options.weight)/e.strokeWeight}}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function lr(e){if(Gn(e),O.get(e)!==e||!v.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;Rf(e,r),Df(e,o),Ff(e,o),Te(oe.get(e));let i=!1,n,a;for(n of F.get(e))a=mo.get(n),a&&(Qc(a),i=!0);let s=mt.get(t);Zf(e,s,i);let m=Gt.get(e),f=v.get(e),p=fp(e,r),c=f.frameMeshes||=[];c.length=0;let l=gp(e,p,r,c),u=f.device.createCommandEncoder();Bp(e,c,m,s),Hp(e,u,m,s),Ap(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((yn[0]=u.finish(),yn)),yn[0]=null;for(n of F.get(e))or.get(n)&&(l=Mo(n)||l);(t._animatingZoom||l)&&E(e)}function el(){let e=[...It];It.clear();let t,r;for(r of e)if(st.set(r,null),!(O.get(r)!==r||!v.get(r)))try{lr(r)}catch(o){t||=o}if(t)throw t}function E(e){let t=O.get(e);if(!t)return e;if(t!==e)return E(t),e;if(st.get(e)!=null)return e;let r=It.values().next().value;return It.add(e),st.set(e,r?st.get(r):requestAnimationFrame(el)),e}L();function ta(e){let{source:t}=e,r=t instanceof d.Marker&&t.options.icon instanceof d.DivIcon,o=r?null:t._icon,i=r?null:t._shadow,n,a;for(a of e.hidden)a===o||a===i||(a.classList.remove("leaflet-webgpu-target"),e.hidden.delete(a));for(n=0;n<2;n++)a=n?i:o,!(!a||e.hidden.has(a))&&(a.classList.add("leaflet-webgpu-target"),e.hidden.add(a))}function De(e=this){e.zoomOnly=!1,e.dirty=!0,e.viewDirty=!0,e.failed=!1,ta(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",yi),o.removeEventListener("error",xi),gn(o,e),e.images.delete(o));for(r=0;r<3;r++)o=r===0?t._icon:r===1?t._shadow:t._image,!(!(o instanceof HTMLImageElement)||e.images.has(o))&&(e.images.add(o),Ef(o,e),o.addEventListener("load",yi),o.addEventListener("error",xi));O.get(e.backend)&&E(e.backend)}L();var tl=new Set(["color","opacity","weight","fillColor","fillOpacity"]);function rl(e,t,r){let{source:o}=t;if(e!=="setStyle"||o.options.interactive!==!1||t.dirty&&!t.zoomOnly)return!1;let i=t.strokeCoordinates&&t.meshes.get("stroke")?.program.uniforms.strokeScale,n=o instanceof d.Polygon&&!o.options.stroke&&t.meshes.has("fill");if(!i&&!n)return!1;let a;if(r[0]){for(a of Object.keys(r[0]))if(!tl.has(a))return!1}return!0}L();function ol(e,t){let{source:r}=e;if(!(r instanceof d.GridLayer)||t!=="bringToFront"&&t!=="bringToBack")return;let o=t==="bringToFront"?-1/0:1/0,i,n;for(i of Object.values(e.map._layers))i===r||!(i instanceof d.GridLayer)||i.getPane()!==r.getPane()||(n=i.options.zIndex||0,o=t==="bringToFront"?Math.max(o,n):Math.min(o,n));let a=t==="bringToFront"?o+1:o-1;Number.isFinite(a)&&r.setZIndex(a)}function H(e,t,r){let o=ue.get(t),i=o.methods.get(e).original,n=rl(e,o,r),a=i.apply(t,r);return ol(o,e),e==="bringToFront"&&(o.order=rr.get(o.map)+1,rr.set(o.map,o.order)),e==="bringToBack"&&(o.order=so.get(o.map)-1,so.set(o.map,o.order)),De(o),n&&(!t.options.stroke||Number(t.options.weight)>0)&&(o.zoomOnly=!0),a}function il(...e){return H("setLatLng",this,e)}function nl(...e){return H("setLatLngs",this,e)}function al(...e){return H("addLatLng",this,e)}function sl(...e){return H("setRadius",this,e)}function ml(...e){return H("setStyle",this,e)}function fl(...e){return H("redraw",this,e)}function pl(...e){return H("setIcon",this,e)}function cl(...e){return H("setUrl",this,e)}function ll(...e){return H("setBounds",this,e)}function ul(...e){return H("setOpacity",this,e)}function dl(...e){return H("setZIndex",this,e)}function hl(...e){return H("setZIndexOffset",this,e)}function gl(...e){return H("bringToFront",this,e)}function yl(...e){return H("bringToBack",this,e)}var Pm={setLatLng:il,setLatLngs:nl,addLatLng:al,setRadius:sl,setStyle:ml,redraw:fl,setIcon:pl,setUrl:cl,setBounds:ll,setOpacity:ul,setZIndex:dl,setZIndexOffset:hl,bringToFront:gl,bringToBack:yl};L();var Eo=Object.freeze({});function ra(e=Eo){return new d.Layer(e)}L();var jr=new WeakMap;var ne=new WeakMap;var Lt=new WeakMap;function xl(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[m]=e[a++]:t[m]=e[s++]}function vl(e){if(e.length<2)return e;let t=new Array(e.length),r=e,o=t,i,n,a,s;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)xl(r,o,n,i);a=r,r=o,o=a}if(r!==e)for(s=0;s<e.length;s++)e[s]=r[s];return e}function wl(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,m,f,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],m=e.origin[1],f=e.origin[2],p=n[3]*s+n[7]*m+n[11]*f+n[15],r[0]=(n[0]*s+n[4]*m+n[8]*f+n[12])/p,r[1]=(n[1]*s+n[5]*m+n[9]*f+n[13])/p,r[2]=(n[2]*s+n[6]*m+n[10]*f+n[14])/p,s=e.direction[0],m=e.direction[1],f=e.direction[2],o[0]=n[0]*s+n[4]*m+n[8]*f,o[1]=n[1]*s+n[5]*m+n[9]*f,o[2]=n[2]*s+n[6]*m+n[10]*f;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function Ll(e,t,r){e.geometry.bounds||Ce(e.geometry);let o=0,i=1/0,n,a,s;for(n=0;n<3;n++)if(Math.abs(r[n])<1e-12){if(t[n]<e.geometry.bounds.min[n]||t[n]>e.geometry.bounds.max[n]){i=-1/0;break}}else a=(e.geometry.bounds.min[n]-t[n])/r[n],s=(e.geometry.bounds.max[n]-t[n])/r[n],o=Math.max(o,Math.min(a,s)),i=Math.min(i,Math.max(a,s));return!(i<o)}function oa(e,t){return t?.count??t?.data.length??e.count??e.data.length/(e.size??3)}function ia(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=n.size??3,f=oa(n,a),p=s?t%f:t,c=s?Math.floor(t/f)*s.size:0,l=s?.data[c]??0,u=s?.data[c+1]??0,h=s?.data[c+2]??0,x=(a?a.data[p]:p)*m,g=(a?a.data[p+1]:p+1)*m,y=(a?a.data[p+2]:p+2)*m;r[0]=n.data[x],r[1]=n.data[x+1],r[2]=n.data[x+2],o[0]=n.data[g],o[1]=n.data[g+1],o[2]=n.data[g+2],i[0]=n.data[y],i[1]=n.data[y+1],i[2]=n.data[y+2],s&&(r[0]=Math.fround(r[0]+l),r[1]=Math.fround(r[1]+u),r[2]=Math.fround(r[2]+h),o[0]=Math.fround(o[0]+l),o[1]=Math.fround(o[1]+u),o[2]=Math.fround(o[2]+h),i[0]=Math.fround(i[0]+l),i[1]=Math.fround(i[1]+u),i[2]=Math.fround(i[2]+h))}function bl(e,t,r,o,i){if(!e.program.nightLight)return!1;let{index:n,uv:{data:a}}=e.geometry.attributes,s=n?n.data[t]:t,m=n?n.data[t+1]:t+1,f=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[m*2]*r+a[f*2]*o,c=a[s*2+1]*(1-r-o)+a[m*2+1]*r+a[f*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Ml(e,t,r,o,i,n,a,s){let m=o[0]-r[0],f=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],l=i[1]-r[1],u=i[2]-r[2],h=a[1]*u-a[2]*l,x=a[2]*c-a[0]*u,g=a[0]*l-a[1]*c,y=m*h+f*x+p*g;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(y)<1e-9:y<1e-9)return 1/0;let w=n[0]-r[0],S=n[1]-r[1],T=n[2]-r[2],P=(w*h+S*x+T*g)/y;if(P<0||P>1)return 1/0;let R=S*p-T*f,Q=T*m-w*p,N=w*f-S*m,G=(a[0]*R+a[1]*Q+a[2]*N)/y;return G<0||P+G>1||bl(e,t,P,G,s)?1/0:(c*R+l*Q+u*N)/y}function Bl(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],m=o[2]*i+r[2],f=t.worldMatrix,p=f[3]*a+f[7]*s+f[11]*m+f[15],c=[(f[0]*a+f[4]*s+f[8]*m+f[12])/p,(f[1]*a+f[5]*s+f[9]*m+f[13])/p,(f[2]*a+f[6]*s+f[10]*m+f[14])/p];return{faceIndex:n,object:t,point:c,distance:Math.hypot(c[0]-e.origin[0],c[1]-e.origin[1],c[2]-e.origin[2])}}function na(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],m=[0,0,0],f,p,c,l,u,h,x,g,y;for(f of t)if(wl(e,f,s,m),!!Ll(f,s,m)){for({position:p,index:c,instanceOffset:l}=f.geometry.attributes,u=c?.count||p.count,h=1/0,x=void 0,g=0;g<u*(l?.count??1);g+=3)ia(f,g,i,n,a),y=Ml(f,g,i,n,a,s,m,r),y>0&&y<h&&(h=y,x=g/3);x!==void 0&&o.push(Bl(e,f,s,m,h,x))}return vl(o)}function jt(e,t,r){if(t(e,r))return;let o;for(o of e.children)jt(o,t,r)}function aa(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Tl(e,t,r,o){let i=1,n=t.length-1,a;for(;i<n;)a=i+Math.floor((n-i)/2),t[a]<r?i=a+1:n=a;let s=e[i-1],m=e[i],f=t[i]-t[i-1]||1,p=(r-t[i-1])/f;return o||={},o.x=s[0]+(m[0]-s[0])*p,o.y=(s[2]??0)+((m[2]??0)-(s[2]??0))*p,o.z=s[1]+(m[1]-s[1])*p,o.dx=(m[0]-s[0])/f,o.dz=(m[1]-s[1])/f,o}function zo(e,t,r){let{points:o,lengths:i,length:n}=t.lane,a=t.distance+e.elapsed*t.speed;a-=n*Math.floor(a/n);let s=Tl(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function Pl(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o=e.position||={},i,n,a,s,m,f,p,c,l,u,h,x,g;for(i=0;i<e.trips.length;i++)for(n=e.trips[i],{x:a,y:s,z:m,dx:f,dz:p}=zo(e,n,o),c=0,l=i*e.stride;c<e.stride;c+=3,l+=3)u=e.template.position[c],h=e.template.position[c+2],x=e.template.normal[c],g=e.template.normal[c+2],t.data[l]=a-u*p-h*f,t.data[l+1]=s+e.template.position[c+1],t.data[l+2]=m+u*f-h*p,r.data[l]=-x*p-g*f,r.data[l+1]=e.template.normal[c+1],r.data[l+2]=x*f-g*p}function Sl(e){let t,r;for(t=1;t<=4;t++)for(r=1;r<=4;r++)if(!Number.isFinite(e[`m${t}${r}`]))throw new Error("Singular 3D transform")}function sa(e,t,r=M.get(e).children,o=!0){if(!v.get(e))return[];let i=Lt.get(e);i&&Pl(i);let n=e._map.getContainer().getBoundingClientRect();Te(oe.get(e)),co(ee.get(e));let a=ne.get(e).inverse,s=ee.get(e).projectionViewMatrix;a.m11=s[0],a.m12=s[1],a.m13=s[2],a.m14=s[3],a.m21=s[4],a.m22=s[5],a.m23=s[6],a.m24=s[7],a.m31=s[8],a.m32=s[9],a.m33=s[10],a.m34=s[11],a.m41=s[12],a.m42=s[13],a.m43=s[14],a.m44=s[15],a.invertSelf();let m=(t.clientX-n.left)/n.width*2-1,f=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*m+a.m21*f+a.m41,c=a.m12*m+a.m22*f+a.m42,l=a.m13*m+a.m23*f+a.m43,u=a.m14*m+a.m24*f+a.m44,h;Sl(a),ne.get(e).origin[0]=ee.get(e).position[0],ne.get(e).origin[1]=ee.get(e).position[1],ne.get(e).origin[2]=ee.get(e).position[2],ne.get(e).direction[0]=p/u-ne.get(e).origin[0],ne.get(e).direction[1]=c/u-ne.get(e).origin[1],ne.get(e).direction[2]=l/u-ne.get(e).origin[2];let x=ne.get(e).direction,g=Math.hypot(x[0],x[1],x[2])||1;ne.get(e).direction[0]/=g,ne.get(e).direction[1]/=g,ne.get(e).direction[2]/=g;let y=ne.get(e).meshes;y.length=0;for(h of r)o?jt(h,aa,y):h.geometry&&h.visible&&h._appearance!==0&&y.push(h);return na(ne.get(e),y,v.get(e).uniformData?.[55])}function kl(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var te=new WeakMap;var Cl=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);L();function _l(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function El(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof d.Marker||n.options.interactive===!1||!(n instanceof d.Path)&&!n.options.interactive)&&o.push(...sa(a,t,i.meshes.values(),!1));return o.sort(_l),o[0]?.object._nativeSource||null}function ma(e,t,r,o){t.hovered!==o&&(t.hovered&&t.fireDOMEvent.call(e,r,t.out,[t.hovered]),t.hovered=o,o&&t.fireDOMEvent.call(e,r,t.over,[o]),e.getContainer().style.cursor=o?"pointer":"")}function zl(e,t,r,o){let i=r.target,n=i instanceof Element&&i.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");return n&&t.hovered&&(o===t.move||o===t.out)&&ma(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function Sm(e,t=e.type,r){let o=this,i=jr.get(o),n=i.fireDOMEvent,a=te.get(o);if(!v.get(a)||r||!Cl.has(t))return n.call(this,e,t,r);if(zl(o,i,e,t))return n.call(this,e,t,r);let s=El(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&ma(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function Al(e){let{map:t}=e,r=jr.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=d.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=Sm,r.restore=kl,jr.set(t,r),t._fireDOMEvent=Sm}r.states.add(e),e._nativeEventContext=r}L();function Ao(e){if(!(e?.type==="zoomend"&&this.source instanceof d.Polyline&&(!this.source.options.stroke||!(Number(this.source.options.weight)>0)))){if(e?.type==="zoomend"&&this.strokeCoordinates&&(!this.dirty||this.zoomOnly)){this.zoomOnly=!0,this.dirty=!0,E(this.backend);return}e?.type==="terrainchange"&&this.marker&&this.source.update(),De(this)}}function fa(){this.viewDirty=!0,O.get(this.backend)&&E(this.backend)}function Rl(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),jr.delete(r))}function _i(){let e=this;if(e.disposed)return;e.disposed=!0;let{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",Ao,e),r.off("zoomend terrainchange",Ao,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",fa,e),Rl(e);let m,f,p,c,l;for([m,f]of e.methods)f.own?Object.defineProperty(t,m,f.own):delete t[m];for(p of i.values())Ie(o,p);i.clear();for(c of n.values())j(o,c.texture);n.clear();for(l of a)l.removeEventListener("load",yi),l.removeEventListener("error",xi),gn(l,e);mo.delete(o),o.remove()}function Ol(){this.ready.resolve()}function Dl({error:e}){this.ready.reject(e)}function Il({error:e}){this.source.fire("error",{error:e})}async function Gl(e){let{source:t,map:r}=e,o=e.backend=ra({source:{type:"vector"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.images=new Set,rr.get(r)||rr.set(r,0),so.get(r)||so.set(r,0),e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=rr.get(r)+1,rr.set(r,e.order),e.marker=t instanceof d.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",Ao,e),r.on("zoomend terrainchange",Ao,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",fa,e),Al(e);let n,a,s;for(n in Pm)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=Pm[n]);let m=e.ready=Promise.withResolvers();o.once("ready",Ol,e),o.once("error",Dl,e),o.on("error",Il,e),De(e),o.addTo(r);try{await m.promise}catch(f){throw _i.call(e),f}if(!Bo(e))return t;mo.set(o,e);try{ea(e)}catch(f){throw _i.call(e),f}return E(e.backend),t}function Ul(e){ue.get(e.source)===e&&ue.set(e.source,null),e.backend&&_i.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function Nl(e){return ue.get(e.source)!==e?e.source:Gl(e)}function qe(e,t){e.fire("error",{error:t})}function pa(e,t){if(ue.get(e))return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r={source:e,map:t,hidden:new Set};ue.set(e,r),ta(r),e.once("remove",Ul.bind(null,r)),re.set(e,Promise.resolve().then(Nl.bind(null,r))),re.get(e).catch(qe.bind(null,e))}var ca=[1,0,1,0];L();function ce(e){return new d.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}$();Z();J();function la(e,t){let r=k(e)*B,o=_(e)*B;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function ze(e,t,r=!1,o=!1,i=0){let n=e.getSize(),a=n.x/2,s=n.y/2,m=n.y*1.5,f=ce(t);if(!m)return f;let[p,c,l,u]=la(e,ca),h=f.x-a,x=f.y-s;if(r){let S=n.y*e.options.pitchMaxDistance,T=l*m+u*x,P=T*l>0?(x*(m-l*i)+m*u*i)/T:-S;o&&(P=Math.max(-S,Math.min(S,P)));let R=h*(m-u*P-l*i)/m;return f.x=p*R+c*P+a,f.y=-c*R+p*P+s,f}let g=p*h-c*x,y=c*h+p*x,w=m/(m-u*y-l*i);return f.x=g*w+a,f.y=(l*y-u*i)*w+s,f}function Fl(e){return ze(this,ot(this,W.value.layerPointToContainerPoint.call(this,e)))}function Wl(e){return W.value.containerPointToLayerPoint.call(this,ot(this,ze(this,e,!0),!0))}function jl(){return W.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function $l(e,t){let r=this.getSize().divideBy(2),o=r.subtract(ze(this,r.subtract(ce(e)),!0));return W.value.panBy.call(this,o,t)}L();J();Z();function Vl(e,t,r){if(!_(this)&&!k(this))return W.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof d.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),m=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(m),t,{zoom:r})}var bt=Object.freeze([0,0]);J();Z();function Zl(e,t={}){if(!_(this)&&!k(this))return W.value.panInside.call(this,e,t);let r=ce(t.paddingTopLeft||t.padding||bt),o=this.getSize().subtract(ce(t.paddingBottomRight||t.padding||bt)),i=this.latLngToContainerPoint(e),n=r;if(n.x=Math.max(r.x,Math.min(o.x,i.x)),n.y=Math.max(r.y,Math.min(o.y,i.y)),n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}L();J();Z();L();function ur(e,t=bt,r=0){let o=ce(t).divideBy(2),i=e.getSize().subtract(o),n=new d.Bounds,a=o.x,s=o.y,m;for(m=0;m<4;m++)o.x=m%2?i.x:a,o.y=m<2?s:i.y,n.extend(ze(e,o,!0,!0,r));return n}function ql(e,t,r){if(!r||!this._loaded||!_(this)&&!k(this))return W.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=ur(this),n=this.project(e,t),a=new d.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}J();Z();function Hl(e,t){if(!t||!_(this)&&!k(this))return W.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(ze(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(ze(this,r.subtract(n.subtract(i))))}J();Z();L();ua();function km(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function da(e,t,r=Ro){t=t.getBounds?t.getBounds():t instanceof d.LatLngBounds?t:new d.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=ce(r.paddingTopLeft||r.padding||bt).subtract(i),s=i.subtract(ce(r.paddingBottomRight||r.padding||bt)),[m,f,p,c]=la(e,ca);if(p<0){let rv=a.y;a.y=-s.y,s.y=-rv}let l=e.getSize().y*e.options.pitchMaxDistance,u=km(a.y,Math.abs(p),n,c,l),h=km(s.y,Math.abs(p),n,c,l),x=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),g=1/0,y=-1/0,w=a.x*c/n,S=s.x*c/n,T=S-w,P=1/0,R=-1/0,Q=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],N,G,V,le,be;for(N=0;N<4;N++)G=Q[N],V=e.project(G,o).subtract(x),le=m*V.x-f*V.y,be=f*V.x+m*V.y,g=Math.min(g,be),y=Math.max(y,be),P=Math.min(P,le+w*be),R=Math.max(R,le+S*be);let at=Math.min((h-u)/(y-g),(s.x-a.x-T*u)/(R-P-T*g)),ke=e.getScaleZoom(at,o),gt=e.options.zoomSnap;if(gt&&(ke=Math.floor(Math.round(ke/(gt/100))/100)*gt),ke=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,ke)),!Number.isFinite(ke))return{center:t.getCenter(),zoom:ke};let Ve=e.getZoomScale(ke,o),hi=y*Ve-h,gi=g*Ve-u,an=Math.max(hi,T?(Ve*(R-P)-s.x+a.x)/T:hi),rm=(Math.min(gi,an)+gi)/2,_f=(Ve*(P+R)-a.x-s.x-(w+S)*rm)/2;return x.x+=(m*_f+f*rm)/Ve,x.y+=(-f*_f+m*rm)/Ve,{center:e.unproject(x,o),zoom:ke}}function Yl(e,t){return _(this)||k(this)?da(this,e,t):W.value._getBoundsCenterZoom.call(this,e,t)}L();J();Z();function Xl(e,t,r){if(!_(this)&&!k(this))return W.value.getBoundsZoom.call(this,e,t,r);if(!t)return da(this,e,{padding:ce(r||bt).divideBy(2)}).zoom;e=e instanceof d.LatLngBounds?e:new d.LatLngBounds(e);let o=ur(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function Jl(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(W.value.panBy.call(this,r,t),!0)}L();J();Z();function Kl(){if(!_(this)&&!k(this))return W.value.getBounds.call(this);let e=ur(this),t=new d.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=W.value.containerPointToLayerPoint.call(this,ot(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}var Ql=new WeakSet;var Cm=new WeakMap;dr();_m();function eu(){this.options.maxBounds&&this._panInsideMaxBounds()}var hr=new WeakMap;ha();La();J();Z();function ba(){let e=this,t=hr.get(e);if(!_(e)&&!k(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(ze(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function tu(){Do(this),He.get(this)?.remove(),hr.get(this)&&(hr.get(this).off("predrag",ba,this),hr.delete(this))}function ru(){let e=this.dragging?._draggable;e&&(hr.set(this,e),e.on("predrag",ba,this))}async function fd(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(md(),sd));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function Ye(){}function pd(){if(Ql.add(this),!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}Ne(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",ga),this.on("rotate pitch",eu,this),this.once("unload",tu,this),this.whenReady(ru,this),(this.options.rotate||this.options.trackContainerMutation)&&(Cm.set(this,fd(this)),Cm.get(this).catch(Ye))}L();function cd(e){e instanceof d.DivIcon||(e.options.crossOrigin||=!0);let t=Qe.value.setIcon.call(this,e);return this._map&&!(e instanceof d.DivIcon)&&pa(this,this._map),t}function ld(){let e=Qe.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}$();function $o(e,t,r){let o=te.get(e),i=o&&ie.get(o);if(!Me.get(e)||!i)return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos());let n=ye(e,r||e.layerPointToLatLng(t))??0,a=ye(e,e.getCenter())??0,s=se.get(e)?.zoom??e.getZoom(),m=(n-a)*e.options.crs.scale(s)/(tt*Math.cos(i.lat*B)),f=ot(e,W.value.layerPointToContainerPoint.call(e,t));return ze(e,f,!1,!1,m).subtract(e._getMapPanePos())}function ud(e){Qe.value._setPos.call(this,$o(this._map,e,this.getLatLng()));let t,r,o,i,n,a;for(t=0;t<2;t++)r=t?this._shadow:this._icon,o=t?"shadowAnchor":"iconAnchor",r&&(i=qn(this,1,0),n=this.options.icon.options,a=n[o]||n.iconAnchor,r.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",r.style.transform+=` rotate(${Math.atan2(i.y,i.x)}rad) scale(${this.options.scale})`)}function Tt(e=this){let t=ue.get(e);t?.backend&&!t.disposed&&De(t)}function dd(e){Qe.value._updateZIndex.call(this,e);let t=Fr.get(this)!==e;Fr.set(this,e),t&&Tt(this)}var Hr=new WeakMap;L();function hd(e){let t=this._marker._map,r=d.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);d.DomUtil.setPosition(this._marker._icon,o),Hr.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}L();J();Z();var Gi=new Map;var Vo={value:null};function gd(){Vo.value=null;let e=[...Gi];Gi.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function yd(e,t){Gi.set(e,t),Vo.value===null&&(Vo.value=requestAnimationFrame(gd)),e._panRequest=Vo.value}function xd(e){let t=this._marker,r=t._map;if(!_(r)&&!k(r))return Hr.get(this)._cameraOriginalAdjustPan.call(this,e);let o=d.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=ce(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=o;if(s.x=(Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,s.y=(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a,!s.x&&!s.y)return;let m=r._getMapPanePos();r.panBy(s,{animate:!1});let f=m.subtract(r._getMapPanePos());this._draggable._newPos._add(f),this._draggable._startPos._add(f),d.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),yd(this,e)}function vd(){if(!this.dragging||Hr.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;Hr.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=hd,e._adjustPan=xd,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function wd(){let e=Qe.value._initInteraction.call(this);return vd.call(this),e}function Ld(){let e=fn.value.call(this);return e.rotate=e.pitch=e.move=e.terrainchange=this._updatePosition,e}function bd(){let e=pn.value.call(this);return e.rotate=e.pitch=e.move=e.terrainchange=this._updatePosition,e}J();Z();function Md(){let e=this._map;if(!_(e)&&!k(e))return ln.value.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=ce(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(ce(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,m=t.bottom-r.top,f=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,m-i.y);if(!f&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=f,c.y-=p;let l=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(l)))}L();function Bd(){if(cn.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=$o(this._map,e,this._latlng).subtract(e);this._zoomAnimated?d.DomUtil.setPosition(this._container,d.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}L();function Td(e){un.value.call(this,e);let t=$o(this._map,e,this._latlng).subtract(e);d.DomUtil.setPosition(this._container,d.DomUtil.getPosition(this._container).add(t))}L();function Pd(){let e=hn.value.call(this);return e.rotate=e.pitch=d.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}L();Z();J();$();function Sd(e){let t=this._map,r=Me.get(t);if(!r&&!k(t)&&!_(t))return dn.value.call(this,e);let o=t.getBounds(),i=new d.Bounds(t.project(o.getNorthWest(),this._tileZoom),t.project(o.getSouthEast(),this._tileZoom)),n=te.get(t),a=n&&ie.get(n);if(!r||!a)return i;let s=1/0,m=-1/0,f,p;for([f,p]of r.terrainCache)!f.startsWith(`${this._tileZoom}/`)||!p.range||(s=Math.min(s,p.range[0]),m=Math.max(m,p.range[1]));if(!Number.isFinite(s)||!Number.isFinite(m))return i;let c=se.get(t)?.zoom??t.getZoom(),l=t.options.crs.scale(c)/(tt*Math.cos(a.lat*B)),u=ye(t,t.getCenter())??0,h,x,g,y,w;for(h=0;h<2;h++)for(g=ur(t,void 0,((h?m:s)-u)*l),x=0;x<2;x++)y=x?g.max:g.min,w=W.value.containerPointToLayerPoint.call(t,ot(t,y,!0)),i.extend(t.project(t.layerPointToLatLng(w),this._tileZoom));return i}W.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Map.prototype));d.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});d.Map.include({layerPointToContainerPoint:Fl,containerPointToLayerPoint:Wl,_getCenterLayerPoint:jl,panBy:$l,setZoomAround:Vl,panInside:Zl,_limitCenter:ql,_limitOffset:Hl,_getBoundsCenterZoom:Yl,getBoundsZoom:Xl,_tryAnimatedPan:Jl,getBounds:Kl});d.Map.addInitHook(pd);Qe.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Marker.prototype));d.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});d.Marker.include({setIcon:cd,getEvents:ld,_setPos:ud,_updateZIndex:dd,_initInteraction:wd});fn.value=d.Popup.prototype.getEvents;d.Popup.include({getEvents:Ld});pn.value=d.Tooltip.prototype.getEvents;d.Tooltip.include({getEvents:bd});cn.value=d.Popup.prototype._updatePosition;ln.value=d.Popup.prototype._adjustPan;d.Popup.include({_adjustPan:Md,_updatePosition:Bd});un.value=d.Tooltip.prototype._setPosition;d.Tooltip.include({_setPosition:Td});dn.value=d.GridLayer.prototype._getTiledPixelBounds;hn.value=d.GridLayer.prototype.getEvents;d.GridLayer.include({getEvents:Pd,_getTiledPixelBounds:Sd});L();var Zo=new WeakMap;var Ui=new WeakMap;var Ni=new WeakMap;L();ha();$();J();Z();function kd(e,t,r,o,i){let[n,a,s]=e,m=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return m>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/m,i.top=t.y/2-t.y*1.5*(-n*Math.sin(o)*Math.cos(r)+a*Math.sin(r)-s*Math.cos(o)*Math.cos(r))/m,i):null}function af(e,t,r,o,i,n,a){if(e.hidden=!0,!r||!t||t.altitude<=0)return;e.parentNode!==r&&r.append(e);let s=kd(t.direction,o,i,n,a);if(!s)return;let{left:m,top:f}=s;e.hidden=m<0||m>o.x||f<0||f>r.clientHeight||r.style.display==="none",e.style.left=`${m}px`,e.style.top=`${f}px`}function Zt({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=mt.get(e),a=He.get(e);n?e.getContainer().style.setProperty("--leaflet-sky-background",n.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let s=e.getSize(),m=_(e)*B,f=k(e)*B;af(r,n,a,s,m,f,i),af(o,n?.moon,a,s,m,f,i)}var Cd=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]];var sf=[0,0,0];function Za(e,t,r,o){o||=[],o.length=e.length;let i;for(i=0;i<e.length;i++)o[i]=e[i]+(t[i]-e[i])*r;return o}function mf(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function _d(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Cd,r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${mf(Za(n[1],i[1],a,sf))}, ${mf(Za(n[2],i[2],a,sf))})`,tint:Za(n[3],i[3],a)}}function qa(e,t,r){let o=e instanceof Date?Date.prototype.getTime.call(e):typeof e=="string"?Date.parse(e):new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");return o}$();function Ha(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*B-o,a=t*B,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),f=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/B+180+360)%360;return{altitude:s/B,azimuth:f,direction:[Math.sin(f*B)*Math.cos(s),Math.sin(s),-Math.cos(f*B)*Math.cos(s)]}}$();$();var Fi=Math.sin(23.4397*B);$();var Wi=Math.cos(23.4397*B);function Ed(e,t,r){let o=qa(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*B,n=(218.316+13.176396*o+6.289*Math.sin(i))*B,a=5.128*Math.sin((93.272+13.22935*o)*B)*B,s=Math.cos(a)*Math.cos(n),m=Math.cos(a)*Math.sin(n)*Wi-Math.sin(a)*Fi,f=Math.cos(a)*Math.sin(n)*Fi+Math.sin(a)*Wi;return Ha(o,t,r,Math.atan2(m,s),Math.asin(f))}$();function zd(e,t,r){let i=qa(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*B,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*B,s=Math.asin(Math.sin(a)*Fi),m=Math.atan2(Math.sin(a)*Wi,Math.cos(a));return Ha(i,t,r,m,s)}function Yr(e){let t=te.get(e);t&&E(t)}function br(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let m=r.getCenter(),f=zd(t.time,m.lat,m.lng);mt.set(r,f),Object.assign(f,_d(f.altitude)),f.moon=Ed(t.time,m.lat,m.lng),a.textContent=f.altitude<=0?"Night \xB7 no direct sunlight":f.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${f.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Zt(e),Yr(r)}catch(s){mt.delete(r),Zt(e),Yr(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function Ad(e){e.control.live=!0,br(e)}function Rd(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),mt.delete(r),Zt(e),Yr(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),br(e)}function Od(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=d.DomUtil.create("div","sunlight-sun"),o=d.DomUtil.create("div","sunlight-moon");r.style.cssText=t+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",o.style.cssText=t+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",r.setAttribute("role","img"),r.setAttribute("aria-label","Sun"),o.setAttribute("role","img"),o.setAttribute("aria-label","Moon");let i=d.DomUtil.create("div","sunlight-control");i.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let n=document.createElement("input");n.type="date",n.style.cssText="width:100%;box-sizing:border-box;",n.setAttribute("aria-label","Solar date (UTC)");let a=document.createElement("input");a.type="range",a.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",a.min="0",a.max="1439",a.step="1",a.setAttribute("aria-label","Time of day (UTC)");let s=document.createElement("output");s.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",s.setAttribute("aria-live","off");let m=document.createElement("button");m.type="button",m.textContent="Now";let f=document.createElement("div");f.className="sunlight-time",f.style.cssText="display:flex;justify-content:space-between;align-items:center;",f.append(s,m);let p=document.createElement("div");p.className="sunlight-status",p.style.marginTop="5px",p.setAttribute("role","status");let c=document.createElement("small");c.style.color="#555",i.append(n,a,f,p,c);let l={control:null,map:e,originalSky:"",container:i,sunDisc:r,moonDisc:o,date:n,slider:a,output:s,status:p,projection:{left:0,top:0}};return l.update=br.bind(null,l),l.updateSky=Zt.bind(null,l),m.onclick=Ad.bind(null,l),n.onchange=a.oninput=Rd.bind(null,l),d.DomEvent.disableClickPropagation(i),d.DomEvent.disableScrollPropagation(i),l}function Dd(e){e.control.live&&br(e)}function Id(e,t){let r=Ni.get(t);if(r?.control&&r.control!==e)throw e._map=null,e.layer._map===t&&t.removeLayer(e.layer),new Error("Only one Time control can be active per map");return r||(r=Od(t),Ni.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),Zo.set(t,e),Ui.set(e,r),r.update(),r.timer=setInterval(Dd,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}L();L();function Gd(e,t,r){let o=e.closest("label");if(r.classList.contains("layer-count"))e.hasAttribute("aria-label")||e.setAttribute("aria-label",o.textContent.trim()),r.id=`leaflet-layer-count-${d.Util.stamp(t)}`,e.setAttribute("aria-describedby",r.id),o.append(r);else if(r.classList.contains("traffic-status")){let i=o.nextElementSibling;i?.classList.contains("traffic-status-group")||(i=d.DomUtil.create("div","traffic-status-group"),i.style.cssText="display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;",i.setAttribute("role","group"),i.setAttribute("aria-label","Traffic counts"),o.after(i)),i.append(r)}else o.after(r)}function Ud(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===d.Util.stamp(t)||i instanceof d.LayerGroup&&i.hasLayer(t))return Gd(o,t,r),!0;return!1}function Ya(e){let t=Ud(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var Xa=[];function Nd(){let e=Xa.shift();e?.map.hasLayer(e.layer)&&Ya(e)}function Ja(){Xa.push(this),queueMicrotask(Nd)}function Fd(){this.map.off("layeradd layerremove",Ja,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function qo(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",Ja,o),e.once("remove",Fd,o),Ya(o)}var Pt=new WeakMap;L();function Wd(e){return Pt.get(this).addTo(e)}L();function jd(){return d.Control.prototype.remove.call(Pt.get(this))}function $d(e){d.Util.setOptions(this,e),this.live=!0,this.layer=new d.Layer,Pt.set(this.layer,this),A.set(this.layer,"time")}function Vd(e){return Id(this,e)}L();function ff(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),e.style.background=t?"":"#fff",e.style.padding=t?"2px 0 6px 20px":"8px",e.style.margin=t?"0":""}function Zd(e){d.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?qo(this.layer,t,ff.bind(null,t)):ff(t,!1),this}L();function qd(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):d.Control.prototype.remove.call(this)}function Hd(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Ni.get(t);clearInterval(r),Zo.delete(t),t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),mt.delete(t),Zt(e),o.remove(),i.remove(),Yr(t),n===e&&(n.control=null)}function Yd(){let e=Ui.get(this);e&&(Hd(e),Ui.delete(this))}d.Control.Time=d.Control.extend({options:{position:"bottomright"},initialize:$d,onAdd:Vd,onRemove:Yd,addTo:Zd,remove:qd});L();L();var qt=new WeakMap;var Ka=new WeakMap;L();var we=new WeakMap;var Y=new WeakMap;var Mr=new WeakMap;var Br=new WeakMap;var X=new WeakMap;var Xe=new WeakMap;var We=new WeakMap;var Tr=new WeakMap;var ae=new WeakMap;L();var Qa=new WeakMap;var ji=new WeakMap;var St=new WeakSet;var pf=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var cf=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var lf=["minLon","minLat","maxLon","maxLat"];function Xd(e){let t=e.byteLength>=127?new DataView(e):null;if(!t||t.getUint32(0,!0)!==1767132496||t.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<pf.length;o++)r[pf[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<cf.length;o++)r[cf[o]]=t.getUint8(96+o);for(o=0;o<lf.length;o++)r[lf[o]]=t.getInt32(102+o*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}var Ho=new WeakMap;async function Yo(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(ae.get(e),{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(Ho.get(e)&&n!==Ho.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&Ho.set(e,n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}function Xr(e){if(!St.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return Xr(e.options.archive);let t=ji.get(e);return t||(t=Yo(e,0,127).then(Xd),ji.set(e,t)),t}var ut=new WeakMap;var kt=new WeakMap;$();function es(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of Y.get(e).values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}function Jd(e){let{backend:t,area:r}=e;if(!e.positions.length){r.mesh=null,r.buildings=0,r.skipped=e.skipped,r.done=!0;return}let o=v.get(t).device,i=e.preparedGeometry,n={position:{size:3,data:i.positions},normal:{size:3,data:i.normals},color:{size:3,data:i.colors}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:i.uvs});let a,s;for(a in n)s=n[a],s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let m={device:o,bounds:i.bounds,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...Ee(),device:o,geometry:m,program:Ge(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:t.options.roofTexture,wallTexture:t.options.wallTexture,nightLight:!!t.options.nightLight,alphaMode:t.options.nightLight?"BLEND":void 0,doubleSided:!!t.options.nightLight}),id:vt.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,q(r.mesh,M.get(t)),E(t)}var Kd=new TextDecoder;function Qd(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s,m;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),m=t,t=r,r=m);return o}var eh={bytes:null,cursor:0};function Xo(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function th(e){let t=eh,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=Xo(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,m;for(a=0;a<o;a++){if(n+=Xo(t),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i[a]={tileId:n,runLength:0,length:0,offset:0}}for(s of i)s.runLength=Xo(t);for(s of i)if(s.length=Xo(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=Xo(t),!m&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=m?m-1:i[a-1].offset+i[a-1].length}if(t.cursor!==r.length)throw new Error("Trailing PMTiles directory data");return i}finally{t.bytes=null,t.cursor=0}}async function ts(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);let r=new Blob([e]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function rh(e,t,r,o){return th(await ts(await Yo(e,t,r),o))}async function oh(e,t,r,o){let i=Br.get(e),n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,rh(e,t,r,o)));let a=i.get(n);try{return await a}catch(s){throw i.get(n)===a&&i.delete(n),s}}function ih(e,t){let r=0,o=e.length-1,i;for(;r<=o;)i=r+o>>1,e[i].tileId<=t?r=i+1:o=i-1;return e[o]}async function nh(e,t,r,o,i){if(o-r.tileId>=r.runLength)return;if(r.offset+r.length>t.tileDataLength)throw new Error("PMTiles tile outside data section");let n=await ts(await Yo(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function ah(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,m=-1,f,p,c,l;for(f=0;f<4;f++){if(i===a||i===s||i===m)throw new Error("Cyclic PMTiles directory");if(f===0?a=i:f===1?s=i:f===2&&(m=i),p=await oh(e,i,n,t.internalCompression),o?.throwIfAborted(),c=ih(p,r),!c)return;if(c.runLength)return l=await nh(e,t,c,r,o),l;if(c.offset+c.length>t.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");i=t.leafDirectoryOffset+c.offset,n=c.length}throw new Error("PMTiles directory depth exceeds four levels")}async function Jr(e,t,r,o,i){if(!St.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return Jr(e.options.archive,t,r,o,i);let n=Qd(t,r,o);i?.throwIfAborted();let a=await Xr(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return ah(e,a,n,i)}async function sh(e,t){if(X.get(e)){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=new URL(i,document.baseURI),a=await fetch(n,{signal:t.request.signal});if(!a.ok)throw new Error(`Unable to load GeoJSON: HTTP ${a.status}`);return a.json()}let r=await Jr(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(Kd.decode(r.data)):{type:"FeatureCollection",features:[]}}$();function mh(e,t,r){let o=r.options.crs,i=o.project(I.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(I.get(e).lat*B),jobs:[],featureFaces:[],skipped:0}}var rs=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function fh(e,t){if(t.type==="abort")e.reject(e.signal.reason);else if(t.type==="error")e.reject(new Error(`Geometry worker failed: ${t.message}`));else if(t.type==="messageerror")e.reject(new Error("Unable to receive geometry worker buffers"));else if(t.data?.error){let r=new Error(t.data.error.message);r.name=t.data.error.name,e.reject(r)}else e.resolve(t.data)}function ph(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=fh.bind(null,e),e.worker.addEventListener("message",e.onEvent),e.worker.addEventListener("error",e.onEvent),e.worker.addEventListener("messageerror",e.onEvent),e.signal.addEventListener("abort",e.onEvent,{once:!0}),e.signal.aborted){r(e.signal.reason);return}e.worker.postMessage(e.input)}var uf=new WeakMap;function ch(e){e.closed=!0;let t;for(t of e.entries)t.closed=!0,t.worker.terminate(),t.task&&t.task.reject(new DOMException("Map removed","AbortError"));e.entries.clear(),e.idle.length=0}function os(e,t){if(typeof Worker>"u")throw new Error("Web Workers are required to prepare source geometry");let r=e,o,i;if(globalThis.location){let a=new URL(e,location.href);(a.protocol==="https:"||a.protocol==="http:")&&a.origin!==location.origin&&(o=URL.createObjectURL(new Blob([`import ${JSON.stringify(a.href)};`],{type:"text/javascript"})),r=o)}try{i=new Worker(r,{type:"module"})}finally{!i&&o&&URL.revokeObjectURL(o)}let n={url:e,pool:t,worker:i,blobUrl:o};return t&&t.entries.add(n),n}function lh(e,t){let r=e&&uf.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},uf.set(e,r),e.once("unload",ch.bind(null,r)));let o,i;if(r){if(r.closed)throw new DOMException("Map removed","AbortError");for(i=0;i<r.idle.length;i++)if(r.idle[i].url===t)return o=r.idle[i],r.idle.splice(i,1),o;o=r.idle.pop(),o&&(o.closed=!0,o.worker.terminate(),r.entries.delete(o))}return os(t,r)}async function Jo(e,t,r,o=new AbortController().signal){o.throwIfAborted();let i=lh(e,t||rs),{worker:n,pool:a}=i,s={worker:n,signal:o,input:r};i.task=s;let m=!1;try{let f=await new Promise(ph.bind(null,s));return m=!0,f}finally{n.removeEventListener("message",s.onEvent),n.removeEventListener("error",s.onEvent),n.removeEventListener("messageerror",s.onEvent),o.removeEventListener("abort",s.onEvent),i.task=null,m&&a&&!a.closed&&!o.aborted?a.idle.push(i):(i.closed||n.terminate(),a&&a.entries.delete(i)),i.blobUrl&&(URL.revokeObjectURL(i.blobUrl),i.blobUrl=null)}}async function uh(e,t){try{let r=await Jo(e.map||e.backend._map,e.backend.options.workerUrl,{jobs:e.jobs,nightLight:!!e.backend.options.nightLight},t),o;for(o=0;o<r.ranges.length;o++)Object.assign(e.featureFaces[o],r.ranges[o]);e.positions=r.positions,e.uvs=r.uvs,e.lights=r.lights,e.preparedGeometry=r}finally{e.jobs=null}}function dh(e,t){let r=e?.geometry,o=r?.type==="Point";if(t&&!o)throw new Error("Night lights require Point geometry");if(r?.type!=="Polygon"&&r?.type!=="MultiPolygon"&&!o)throw new Error("Unsupported GeoJSON geometry");let i=o?r.coordinates:r.type==="Polygon"?r.coordinates[0]?.[0]:r.coordinates[0]?.[0]?.[0];if(!Number.isFinite(i?.[0])||!Number.isFinite(i?.[1]))throw new Error("Invalid GeoJSON coordinates");return i}function hh(e,t){let r=e.options.style(t);if(r===null)return null;if(!r||typeof r!="object")throw new Error("style must return an extrusion style or null");let{top:o,bottom:i=0}=r;if(!Number.isFinite(o)||!Number.isFinite(i)||i<0||o<=i)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");return r}L();function gh(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,m=new d.LatLng(r,t),f=i.project(m),p=ye(s,m),c=M.get(o);return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(c.position[1])?p-c.position[1]:0}}L();function yh(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],m=M.get(r),f,p,c,l,u,h;for(f=0;f<t.length-1;f++){if(p=t[f][0],c=t[f][1],!Number.isFinite(p)||!Number.isFinite(c))throw new Error("Invalid GeoJSON coordinates");l=new d.LatLng(c,p),u=o.project(l),h=ye(a,l),s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(h)&&Number.isFinite(m.position[1])?h-m.position[1]:0})}return s}function xh(e,t){let r=t.type==="Polygon"?[t.coordinates]:t.type==="MultiPolygon"?t.coordinates:[],o=[],i,n,a;for(i of r){if(!i.length)throw new Error("Empty GeoJSON polygon");a=[];for(n of i)a.push(yh(e,n));o.push(a)}return o}function vh(e,t,r,o,i,n){let a=t.geometry,s=xh(e,a),m=a.type==="Point"?gh(e,r,o):null,f=e.backend.options.nightLight,p=m?wt(i.color??(f?void 0:5210683)):n,c=m&&!f?wt(i.trunkColor??7491898):null;e.jobs.push({point:m,polygons:s,baseColor:{r:n.r,g:n.g,b:n.b},support:t.properties?.cod_ouvrag||`${r},${o}`,style:{top:i.top,bottom:i.bottom??0,color:{r:p.r,g:p.g,b:p.b},trunkColor:c?{r:c.r,g:c.g,b:c.b}:void 0,trunkRadius:i.trunkRadius,crownRadius:i.crownRadius,crownBottom:i.crownBottom,crownShape:i.crownShape,poleRadius:i.poleRadius,lightRadius:i.lightRadius,lightFlux:i.lightFlux}})}L();function wh(e,t,r,o){if(!t)return!0;let i=e.project(new d.LatLng(o,r),t.z);return Math.floor(i.x/256)===t.x&&Math.floor(i.y/256)===t.y}function Lh(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=dh(t,r.options.nightLight),s=t.geometry,m=a[0],f=a[1];if(!wh(i,n,m,f))return;let p=hh(r,t);if(p===null){e.skipped++;return}let{color:c=14267276}=p,l=wt(c);vh(e,t,m,f,p,l),e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:l})}async function bh(e,t,r){let o=performance.now()+4,i;for(i of r){if(t.request.signal.aborted)return;if(performance.now()>=o){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;o=performance.now()+4}Lh(e,i)}}async function Mh(e,t,r){try{if(await new Promise(requestAnimationFrame),await se.get(r),t.request.signal.aborted)return;let o=await sh(e,t);if(t.request.signal.aborted)return;if(o?.type!=="FeatureCollection"||!Array.isArray(o.features))throw new Error("Invalid GeoJSON response");if(X.get(e)&&typeof e.options.style!="function")throw new Error("style must be a function");if(e.options.worker===!1)throw new Error("worker: false is no longer supported; GeoJSON geometry requires Web Workers");let i=mh(e,t,r);if(await bh(i,t,o.features),t.request.signal.aborted||(await uh(i,t.request.signal),t.request.signal.aborted))return;Jd(i)}catch(o){t.request.signal.aborted||(t.error=o.message,e.fire("error",{error:o}))}finally{Xe.set(e,Xe.get(e)-1),$i(e,r)}}function is(e,t){return e.distance-t.distance}function Bh(e,t){let r=[],o,i,n;for(o of e)for(i of Y.get(o).values())i.started||i.request.signal.aborted||(n=i.coords&&t.project(t.getCenter(),i.coords.z).divideBy(256),r.push({layer:o,area:i,distance:n?Math.hypot(i.coords.x+.5-n.x,i.coords.y+.5-n.y)/2**i.coords.z:0}));return r.sort(is),r}function $i(e,t=e._map){let r=t&&te.get(t);if(!r)return;let o=[],i,n,a;for(i of F.get(r))Number.isFinite(Xe.get(i))&&Y.get(i)&&(ae.get(i)||X.get(i))&&o.push(i);let s=Bh(o,t),m=0;for(i of o)m+=Xe.get(i);for({layer:a,area:n}of s){if(m>=4)break;Xe.get(a)>=2||(n.started=!0,Xe.set(a,Xe.get(a)+1),m++,Mh(a,n,t))}for(i of o)es(i)}var nt=new WeakMap;var Se=new WeakMap;function Ct(e,t){t?.model&&(t=null),!(nt.get(e)?.mesh===t?.mesh&&nt.get(e)?.vertexStart===t?.vertexStart)&&(nt.get(e)&&(nt.get(e).mesh.highlight=null),nt.set(e,t),t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),E(e))}var Ae=new WeakMap;var Pr=new WeakMap;var Re=new WeakMap;function _t(e,t,r){let o=Re.get(e);if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=Ae.get(e).getBoundingClientRect(),s=r.clientX-a.left,m=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${m+o.offsetHeight+16>a.height?m-o.offsetHeight-12:m+12}px`}else o.hidden=!0;let i=O.get(e),n;if(i){let a=!1;for(n of F.get(i))if(Re.get(n)&&!Re.get(n).hidden){a=!0;break}a?(Pr.get(i)===void 0&&Pr.set(i,Ae.get(e).style.cursor),Ae.get(e).style.cursor="pointer"):Pr.get(i)!==void 0&&(Ae.get(e).style.cursor=Pr.get(i),Pr.delete(i))}}function Kr(e,t){t.request.abort();let r;if(t.mesh){nt.get(e)?.mesh===t.mesh&&(Ct(e,null),Se.set(e,null),_t(e,null)),q(t.mesh,null),E(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Th(e,t){return e.distance-t.distance}function Qr(e){if(!e._map||!O.get(e))return;if(X.get(e)){Y.get(e).has("geojson")||Y.get(e).set("geojson",{request:new AbortController}),$i(e);return}if(!U.get(e))return;let t=U.get(e).minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([U.get(e).maxLat,U.get(e).minLon],t).divideBy(256).floor(),s=e._map.project([U.get(e).minLat,U.get(e).maxLon],t).divideBy(256).floor(),m=new Map,f,p,c,l,u;for(f=Math.max(0,i.x-1,a.x);f<=Math.min(2**t-1,n.x+1,s.x);f++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)m.set(`${f}/${p}`,{z:t,x:f,y:p});for([c,l]of Y.get(e))m.has(c)||(Kr(e,l),Y.get(e).delete(c));let h=[];for([c,u]of m)u.distance=Math.hypot(u.x+.5-r.x,u.y+.5-r.y)/2**t,h.push(u);h.sort(Th);for(u of h)c=`${u.x}/${u.y}`,Y.get(e).has(c)||Y.get(e).set(c,{coords:u,request:new AbortController});$i(e)}function Ko(e){if(!M.get(e)||!I.get(e))return;kt.get(e)==null&&kt.set(e,M.get(e).position[1]);let t=me.get(e._map),r=t&&nr(t,I.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;M.get(e).position[1]=kt.get(e)+(r??0)+o}function Ph(e,t){e.attributes.index?.data instanceof Uint8Array&&(e.attributes.index.data=new Uint16Array(e.attributes.index.data));let r,o,i;for(r in e.attributes)o=e.attributes[r],o.size||=1,o.count=o.data.length/o.size,o.indexFormat=o.data instanceof Uint32Array?"uint32":"uint16",i=o.buffer,o.buffer=t.createBuffer({size:Math.max(4,o.data.byteLength),usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(o.buffer,0,o.data),i?.destroy();e.device=t,e.drawRange.count=e.attributes.index?.count||e.attributes.position.count}function Sh(e,t){let r,o;for(r in e)r!=="baseTexture"&&r!=="metalTexture"&&r!=="emissiveTexture"&&r!=="occlusionTexture"||(o=e[r],!(!o||o.device===t)&&(o.device=t,o.texture=t.createTexture({size:[o.image.width,o.image.height],format:o.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=t.createSampler(o.samplerOptions),o.uploaded=null))}function kh(e,t){let r=O.get(t),o;if(e.geometry&&e.geometry.device!==v.get(r).device){let i=e.geometry,n=e.program._layerMaterial,a=v.get(r).device;Ph(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Sh(n,a),e.program.pipelineCache.clear(),e.program=Ge(t,n),e.device=a}e.texture&&e.texture.device!==v.get(r).device&&(o=e.texture,o.device=v.get(r).device,o.texture=v.get(r).device.createTexture({size:[e.texture.image.width,e.texture.image.height],format:e.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=v.get(r).device.createSampler(o.samplerOptions),o.uploaded=null)}var Qo=new WeakMap;function Ch(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function Sr(e,t,r){throw Ch(r),ut.get(t).reject(e),te.delete(r),e}async function _h(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){Sr(o,e,t)}return r||Sr(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function Eh(e,t,r){try{return await e.requestDevice()}catch(o){Sr(o,t,r)}}function zh(e){let t=Qo.get(e.currentTarget),r=te.get(t);if(v.get(r)?.device!==e.currentTarget||!F.get(r))return;let o;for(o of F.get(r))o.fire("error",{error:e.error})}function Ah([e,t]){let r=Qo.get(t),o=te.get(r);if(!o||v.get(o)?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of F.get(o))n.fire("error",{error:i})}function Rh(){return{position:[0,0,0],up:[0,1,0],target:[0,0,0],x:[0,0,0],y:[0,0,0],z:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],viewTransform:new DOMMatrix,projectionTransform:new DOMMatrix,projectionViewTransform:new DOMMatrix,fov:45,aspect:1,near:.1,far:1e4}}var ei=new Float32Array(20);ei[0]=ei[5]=ei[10]=ei[15]=1;function Oh(e,t){let r=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),o=v.get(e).device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i=v.get(e).device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),n=v.get(e).device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});v.get(e).sunlight={layout:r,buffer:o,sampler:i,lights:n,size:0},v.get(e).device.queue.writeBuffer(o,0,ei),In(e,1);let a=document.createElement("canvas");a.width=1,a.height=1,v.get(e).roofFallbackTexture={device:t,texture:t.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:a,format:"rgba8unorm",srgb:!1,uploaded:null}}var eo=new WeakMap;var ns=[];function Dh(){let e=ns.shift();eo.set(e,!1),!(O.get(e)!==e||!v.get(e))&&(e._map._animatingZoom?E(e):lr(e))}function Vi(){let e=this;eo.get(e)||(eo.set(e,!0),ns.push(e),queueMicrotask(Dh))}var ti=new WeakMap;function Zi(){ti.set(this,null)}var as=[];function Ih(){let e=as.shift();O.get(e)===e&&v.get(e)&&lr(e)}function qi(e){let t=this._map;e&&!Ze.get(this)&&(Ze.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),as.push(this),queueMicrotask(Ih)}function Hi(){let e=this,t;if(de.get(e))for(t of de.get(e).keys())t.finish();de.set(e,null),Ze.set(e,null),se.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),xn(e._map),ti.set(e,null),E(e)}function Gh(e,t,r){ir.set(e,null),r.className="leaflet-3d",r.style.cssText="position:absolute;top:0;left:0;z-index:1;pointer-events:none",r.setAttribute("role","img"),r.setAttribute("aria-label",e.options.ariaLabel??"3D scene"),t.getPane("mapPane").before(r),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Vi,e),t.on("zoomstart",Zi,e),t.on("zoomanim",qi,e),t.on("zoomend",Hi,e)}async function Uh(e,t){let r=document.createElement("canvas");navigator.gpu||Sr(new Error("Layer3D requires WebGPU"),e,t);let o=await _h(e,t),i=await Eh(o,e,t);Qo.set(i,t),i.addEventListener("uncapturederror",zh),Promise.all([i.lost,Promise.resolve(i)]).then(Ah);let n=r.getContext("webgpu");n||(i.destroy(),Sr(new Error("Unable to create a WebGPU canvas context"),e,t));let a=navigator.gpu.getPreferredCanvasFormat();n.configure({device:i,format:a,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),O.set(e,e),F.set(e,new Set),ie.set(e,I.get(e)),oe.set(e,Ee()),ee.set(e,Rh()),v.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),Oh(e,i),Gh(e,t,r)}async function ri(e,t){let r=te.get(t);ut.get(r)&&await ut.get(r).promise,r||(r=e,ut.set(e,Promise.withResolvers()),ut.get(e).promise.catch(Ye),te.set(t,r),await Uh(e,t),ut.get(e).resolve(),ut.delete(r),lr(r),te.set(t,r));let o=t.options.crs.project(ie.get(r)),i=t.options.crs.project(I.get(e)),n=Math.cos(ie.get(r).lat*B);kt.get(e)==null&&kt.set(e,M.get(e).position[1]),M.get(e).position[0]=(i.x-o.x)*n,M.get(e).position[1]=kt.get(e),M.get(e).position[2]=-(i.y-o.y)*n,Ko(e),M.get(e).scale.fill(n/Math.cos(I.get(e).lat*B)),O.set(e,r),v.set(e,v.get(r)),oe.set(e,oe.get(r)),ee.set(e,ee.get(r)),F.get(r).add(e),q(M.get(e),oe.get(r)),jt(M.get(e),kh,e),E(r),(U.get(e)&&A.get(e)!=="raster"||X.get(e))&&Qr(e)}var je=new WeakMap;$();L();function Nh(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,h,x,g,y,w;for(o=0;o<(t?.length||e.length/3);o+=3)for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=e[n*3]-e[i*3],m=e[n*3+1]-e[i*3+1],f=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],l=e[a*3+2]-e[i*3+2],h=m*l-f*c,x=f*p-s*l,g=s*c-m*p,u=0;u<3;u++)y=u===0?i:u===1?n:a,r[y*3]+=h,r[y*3+1]+=x,r[y*3+2]+=g;for(o=0;o<r.length;o+=3)for(w=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=w;return r}function df(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)df(r,t)}function oi(e,t){if(!je.get(e))return;let r=[];df(je.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,h,x,g,y,w,S,T,P,R;if(!Be.get(t)||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),Ce(n));return}Te(M.get(e));let Q=e._map,N=Q.options.crs,G=N.project(ie.get(O.get(e))),V=Math.cos(ie.get(O.get(e)).lat*B),le=N.scale(ge.get(t));for(o of r){for(n=o.geometry,m=n.attributes.position,n._terrainBasePositions||=m.data.slice(),f=n.attributes.normal,n._terrainBaseNormals||=f.data.slice(),m.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),l=0;l<m.data.length;l+=3)u=m.data[l],h=m.data[l+1],x=m.data[l+2],g=p[1]*u+p[5]*h+p[9]*x+p[13],y=Math.max(0,Math.min(1,1-(g-M.get(e).position[1])/8)),y&&(w=p[0]*u+p[4]*h+p[8]*x+p[12],S=p[2]*u+p[6]*h+p[10]*x+p[14],T=N.transformation.transform(new d.Point(G.x+w/V,G.y-S/V),le),P=nr(t,T),Number.isFinite(P)&&(R=(P-g)*y,m.data[l]+=c[4]*R,m.data[l+1]+=c[5]*R,m.data[l+2]+=c[6]*R));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set(Nh(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),Ce(n)}E(e)}function Fh(e){return{addressModeU:e?.wrapS===33071?"clamp-to-edge":e?.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e?.wrapT===33071?"clamp-to-edge":e?.wrapT===33648?"mirror-repeat":"repeat",magFilter:e?.magFilter===9728?"nearest":"linear",minFilter:e?.minFilter===9728||e?.minFilter===9984||e?.minFilter===9986?"nearest":"linear"}}function Yi(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=v.get(o).device,m=`${t.index}:${r}`;if(!a.has(m)){let f=i.textures[t.index],p=i.samplers?.[f.sampler],c=n[f.source],l=r?"rgba8unorm-srgb":"rgba8unorm",u=Fh(p);a.set(m,{device:s,texture:s.createTexture({size:[c.width,c.height],format:l,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(u),samplerOptions:u,format:l,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(m)}function Wh(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness;return{color:o?.baseColorFactor?o.baseColorFactor.slice(0,3):[1,1,1],opacity:o?.baseColorFactor?.[3]??1,metallic:o?.metallicFactor??1,roughness:o?.roughnessFactor??1,baseTexture:Yi(e,o?.baseColorTexture,!0),metalTexture:Yi(e,o?.metallicRoughnessTexture),emissiveTexture:Yi(e,t.emissiveTexture,!0),occlusionTexture:Yi(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function jh(e,t,r){let o={backend:e,description:t,images:r,textures:new Map,materials:[],active:new Set,resources:[]},i;for(i of t.materials||sr)o.materials.push(Wh(o,i));return o}var $h=[0,0,0,1];var Vh=[1,1,1];var Zh=[0,0,0];function qh(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||$h,[n,a,s]=e.scale||Vh;return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||Zh,1]}function Hh(e,t,r){let o=e.materials[t.material]||{color:[1,1,1],metallic:1};if((o.baseTexture||o.metalTexture||o.emissiveTexture||o.occlusionTexture)&&!r.uv)throw new Error("Textured model mesh requires UV coordinates");let i=Ge(e.backend,o);e.resources.push(i);let n=v.get(e.backend).device,a,s;for([a,s]of Object.entries(r))s.size||=1,s.count=s.data.length/s.size,s.indexFormat=s.data instanceof Uint32Array?"uint32":"uint16",s.buffer=n.createBuffer({size:Math.max(4,s.data.byteLength),usage:a==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),n.queue.writeBuffer(s.buffer,0,s.data);let m={device:n,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(m),{device:n,geometry:m,program:i}}function hf(e,t){let{backend:r,description:o,active:i}=e;if(i.has(t))throw new Error("Cyclic glTF nodes");let n=o.nodes[t];if(!n)throw new Error("Invalid glTF node");i.add(t);let a={...Ee(),name:n.name};a.matrix=qh(n);let s,m,f,p,c;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)m=structuredClone(s.preparedAttributes),f=Hh(e,s,m),p={...Ee(),device:f.device,geometry:f.geometry,program:f.program,fadeDuration:250,id:vt.value++,renderOrder:0},p.name=o.meshes[n.mesh].name,p.extras=n.extras||{},q(p,a);for(c of n.children||sr)q(hf(e,c),a);return i.delete(t),a}function Yh(e){let t,r;for(t of e.resources)if(t.attributes)for(r of Object.values(t.attributes))r.buffer.destroy();else t.pipelineCache.clear()}function Xh(e,t){let r=[],o;try{for(o of t.nodes)r.push(hf(e,o))}catch(i){throw Yh(e),i}return r}function Jh(e){let t=je.get(e);if(e.options.rotation){let[r,o=r,i=r]=e.options.rotation;t.rotation[0]=r,t.rotation[1]=o,t.rotation[2]=i}if(e.options.scale){let[r,o=r,i=r]=e.options.scale;t.scale[0]=r,t.scale[1]=o,t.scale[2]=i}}async function Kh(e){await we.get(e).promise;let t=new URL(We.get(e),document.baseURI).href,{description:r,images:o}=await Jo(e._map,e.options.workerUrl,{type:"model",url:t});await we.get(e).promise,await se.get(e._map);let i=jh(e,r,o),n=r.scenes?.[r.scene||0];if(!n)throw new Error("Missing glTF scene");let a=Xh(i,n),s={...Ee(),id:t,extras:r.extras||{}};if(!a.length)throw new Error("Expected a glTF model with a non-empty scene");let m;for(m of a)q(m,s);je.set(e,s),Jh(e),q(je.get(e),M.get(e)),oi(e,me.get(e._map))}async function Qh(e){try{return M.set(e,Ee()),ne.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(ae.get(e)||X.get(e))&&(Qa.set(e,M.get(e)),ae.get(e)&&U.set(e,await Xr(e))),e._map&&(await ri(e,e._map),we.get(e).resolve()),We.get(e)&&await Kh(e),O.get(e)&&E(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}function eg(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${We.get(e)?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function tg(e,t,r,o){let i=Mr.get(e),n=We.get(e),a=je.get(e);n&&(t=a?1:0);let s=r||(n?!a:!U.get(e)&&!X.get(e)),m=t.toLocaleString("en-US"),f=o?"Error":`${m}${s?"\u2026":""}`,p=eg(e,m,r,o);i.textContent!==f&&(i.textContent=f),i.title!==p&&(i.title=p),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function gf(e){let t=e.target,r=Mr.get(t);if(!t._map)return;e.type==="add"&&qo(t,r);let o=0,i=0,n=e.error,a;if(Number.isFinite(e.loaded))o=e.loaded,i=e.pending??0,n||=e.errors?.[0];else for(a of Y.get(t).values())o+=a.buildings??0,!a.done&&!a.error&&i++,n||=a.error;tg(t,o,i,n)}function Et(e,t=Eo){Tr.set(e,!0),d.Util.setOptions(e,{ariaLabel:"3D scene",...t}),A.set(e,"3d");let r=!X.get(e)&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(We.set(e,r?e.options.url:null),ae.set(e,e.options.url&&!r&&!X.get(e)?new URL(e.options.url,document.baseURI).href:null),Br.set(e,new Map),e.options.center&&I.set(e,new d.LatLng(e.options.center[0],e.options.center[1])),Y.set(e,new Map),Xe.set(e,0),ae.get(e)||X.get(e)||r){let o=d.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",Mr.set(e,o),e.on("add error",gf),e.on("ready progress",d.Util.throttle(gf,250,e))}we.set(e,Promise.withResolvers()),re.set(e,Promise.resolve().then(Qh.bind(null,e))),re.get(e).catch(Ye)}function rg(){this.keys.clear()}var Xi={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};L();Oi();dr();J();Z();function og(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.dragX=e.clientX,this.dragY=e.clientY,this.dragging=!0,t.getContainer().setPointerCapture(e.pointerId)}else this.dragging&&e.type==="pointermove"?(Ne(t,Math.max(20,Math.min(85,_(t)-(e.clientY-this.dragY)*.2)),k(t)-(e.clientX-this.dragX)*.25),this.dragX=e.clientX,this.dragY=e.clientY):this.dragging=!1}var Ji=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];$();function zt(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=I.get(t),a=M.get(t),s=i.project(n),m=Math.cos(n.lat*B),f=i.project(r.latlng),p=ye(o,r.latlng)||0;return e[0]=(f.x-s.x)*m,e[1]=p+(r.height??0)-a.position[1],e[2]=-(f.y-s.y)*m,e}function ss(){let[e,t,r]=zt.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,m,f,p;for(a=0;a<Ji.length;a++)[,s,m,f]=Ji[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+m,p.position[2]=r-s*n,p.rotation[0]=f*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;E(this.layer)}function ig(){this.meshes&&ss.call(this)}function ms(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,d.DomEvent.off(document,"keydown keyup",this.onKey),d.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)for(t of this.meshes)Ie(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){d.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),Vt(e,this.saved.pitch),this.saved=null}}function ng(e){if(e.type==="keyup"&&e.code==="Space"&&this.keys.delete("Space"),!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}!Xi[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}$();L();var ag=["dragging","keyboard","doubleClickZoom","boxZoom"];J();Z();Oi();function C(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}var Ht=[.16,.2,.32];var yf=[.75,.2,.15];var dt=[.85,.64,.5];var Yt=[.08,.07,.06];var fs={body:[[C(-.17,.17,-.1,.1),.82,.95,Ht],[C(-.19,.19,-.11,.11),.95,1.44,yf],[C(-.05,.05,-.05,.05),1.44,1.5,dt],[C(-.1,.1,-.11,.1),1.5,1.72,dt],[C(-.105,.105,-.06,.115),1.58,1.77,Yt],[C(-.105,.105,-.115,-.06),1.7,1.77,Yt]],leg:[[C(-.07,.07,-.07,.07),-.82,0,Ht],[C(-.07,.07,-.17,.07),-.9,-.82,Yt]],arm:[[C(-.05,.05,-.05,.05),-.55,0,yf],[C(-.045,.045,-.045,.045),-.66,-.55,dt]]};function Ki(e,t,r,o,i,n,a){let s=i[0]-o[0],m=i[1]-o[1],f=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],l=n[2]-o[2],u=m*l-f*c,h=f*p-s*l,x=s*c-m*p,g=Math.hypot(u,h,x),y,w;for(y=0;y<3;y++)w=y===0?o:y===1?i:n,e.push(...w),t.push(u/g,h/g,x/g),r.push(...a)}function ii(e){let t=[],r=[],o=[],i=[],n=[],a,s,m,f,p,c,l,u,h;for([a,s,m,f,p=a]of e){i.length=n.length=0;for([c,l]of a)i.push([c,s,l]);for([c,l]of p)n.push([c,m,l]);for(u=0;u<a.length;u++)h=(u+1)%a.length,Ki(t,r,o,i[u],i[h],n[h],f),Ki(t,r,o,i[u],n[h],n[u],f);for(u=1;u<a.length-1;u++)Ki(t,r,o,n[0],n[u],n[u+1],f),Ki(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function sg(e){return this.keys.has("Space")?(this.verticalSpeed=6,this.state.height+=this.verticalSpeed*e,!0):!this.verticalSpeed&&!this.state.height?!1:(this.state.height=Math.max(0,this.state.height+this.verticalSpeed*e-9.81*e*e/2),this.verticalSpeed=this.state.height>0?this.verticalSpeed-9.81*e:0,!0)}L();var xf=new WeakMap;function mg(e,t,r){let o,i,n;for(o=Math.floor(Math.min(t[0],t[3],t[6])/8);o<=Math.floor(Math.max(t[0],t[3],t[6])/8);o++)for(i=Math.floor(Math.min(t[2],t[5],t[8])/8);i<=Math.floor(Math.max(t[2],t[5],t[8])/8);i++)n=o+","+i,e.has(n)||e.set(n,[]),e.get(n).push(r)}function ps(e){let t=xf.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:o,index:i,normal:n,uv:a,instanceOffset:s}=e.geometry.attributes,m=oa(o,i),f=m*(s?.count??1),p=[],c=[],l=new Map,u=[0,0,0],h=[0,0,0],x=[0,0,0],g=[],y,w,S,T,P,R,Q,N,G,V,le,be,at,ke,gt,Ve=-1/0;for(y=0;y<f;y+=3)w=i?i.data[y%m]:y%m,!(e.program.nightLight&&a&&a.data[w*2]<=2)&&(ia(e,y,u,h,x),g[0]=r[0]*u[0]+r[4]*u[1]+r[8]*u[2]+r[12],g[1]=r[1]*u[0]+r[5]*u[1]+r[9]*u[2]+r[13],g[2]=r[2]*u[0]+r[6]*u[1]+r[10]*u[2]+r[14],g[3]=r[0]*h[0]+r[4]*h[1]+r[8]*h[2]+r[12],g[4]=r[1]*h[0]+r[5]*h[1]+r[9]*h[2]+r[13],g[5]=r[2]*h[0]+r[6]*h[1]+r[10]*h[2]+r[14],g[6]=r[0]*x[0]+r[4]*x[1]+r[8]*x[2]+r[12],g[7]=r[1]*x[0]+r[5]*x[1]+r[9]*x[2]+r[13],g[8]=r[2]*x[0]+r[6]*x[1]+r[10]*x[2]+r[14],T=g[3]-g[0],P=g[4]-g[1],R=g[5]-g[2],Q=g[6]-g[0],N=g[7]-g[1],G=g[8]-g[2],V=P*G-R*N,le=T*N-P*Q,be=R*Q-T*G,at=Math.hypot(V,be,le),!(!at||Math.abs(be)>.9*at)&&(n&&(S=w*3,(r[0]*n.data[S]+r[4]*n.data[S+1]+r[8]*n.data[S+2])*V+(r[2]*n.data[S]+r[6]*n.data[S+1]+r[10]*n.data[S+2])*le<0&&(V=-V,le=-le)),ke=Math.hypot(V,le),gt=c.length/2,p.push(...g),Ve=Math.max(Ve,g[0],g[3],g[6]),c.push(V/ke,le/ke),mg(l,g,gt)));return t={tri:Float32Array.from(p),nrm:Float32Array.from(c),cells:l,maxX:Ve,origin:[r[12],r[13],r[14]]},xf.set(e.geometry,t),t}function cs(e,t,r,o,i,n,a){let s=t*9,m=e[s+3]-e[s],f=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],l=e[s+7]-e[s+1],u=e[s+8]-e[s+2],h=-a*l,x=a*c-n*u,g=n*l,y=m*h+f*x+p*g;if(Math.abs(y)<1e-9)return-1;let w=r-e[s],S=o-e[s+1],T=i-e[s+2],P=(w*h+S*x+T*g)/y;if(P<0||P>1)return-1;let R=S*p-T*f,Q=T*m-w*p,N=w*f-S*m,G=(n*R+a*N)/y;return G<0||P+G>1?-1:(c*R+l*Q+u*N)/y}function fg(e,t,r,o,i,n,a,s){let m,f,p,c;for(m=Math.floor(t/8);m<=a;m++)if(f=e.cells.get(`${m},${s}`),!!f)for(p of f)i.has(p)||(i.add(p),c=cs(e.tri,p,t,r,o,1,0),c>1e-4&&n.push(c))}function pg(e){let t,r,o;for(t=1;t<e.length;t++){for(o=e[t],r=t-1;r>=0&&e[r]>o;)e[r+1]=e[r--];e[r+1]=o}let i=0,n=-1/0;for(o of e)o-n>1e-4&&i++,n=o;return i}function vf(e,t,r,o,i,n){let a=e.geometry;if(!e.visible||!a?.attributes?.position?.data||e.program?.depthTest===!1)return!1;a.bounds||Ce(a);let s=a.bounds,m=e.worldMatrix,f=s.center,p=m[0]*f[0]+m[4]*f[1]+m[8]*f[2]+m[12],c=m[1]*f[0]+m[5]*f[1]+m[9]*f[2]+m[13],l=m[2]*f[0]+m[6]*f[1]+m[10]*f[2]+m[14],u=s.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));if(Math.hypot(p-t,c-r,l-o)>u)return!1;let h=ps(e),x=Math.floor(h.maxX/8);if(t>=h.maxX)return!1;let g=Math.floor(o/8),y=n;return y.length=0,i.clear(),fg(h,t,r,o,i,y,x,g),pg(y)%2===1}function cg(e,t,r,o,i,n){o<1e-6?(e.normal[0]=-i,e.normal[1]=-n):(e.normal[0]=t/o,e.normal[1]=r/o)}function ls(e,t,r,o,i,n,a,s){let m=Lt.get(e);if(!m?.mesh||!m.trips.length)return!1;let f=m.collisionBounds;if(!f){f=m.collisionBounds={radius:0,minY:1/0,maxY:-1/0};let V,le,be,at;for(V=0;V<m.template.position.length;V+=3)le=m.template.position[V],be=m.template.position[V+1],at=m.template.position[V+2],f.radius=Math.max(f.radius,Math.hypot(le,at)),f.minY=Math.min(f.minY,be),f.maxY=Math.max(f.maxY,be)}let p=M.get(e),c=m.position||={},l=Math.max(p.scale[0],p.scale[1],p.scale[2]),u=f.radius*l+.35,h,x,g,y,w,S,T,P,R,Q,N,G;for(h of m.trips)if({x:N,y:R,z:G}=zo(m,h,c),R=p.position[1]+(R+f.minY)*p.scale[1],Q=p.position[1]+(c.y+f.maxY)*p.scale[1],!(R>r+1.7*l||Q<r+.2*l)&&(N=p.position[0]+N*p.scale[0],G=p.position[2]+G*p.scale[2],x=(N-t)*i+(G-o)*n,g=Math.max(0,Math.min(a,x)),y=t+g*i-N,w=o+g*n-G,S=y*y+w*w,!(S>=u*u))){if(a===0){s.found=!0,P=Math.hypot(t-N,o-G),s.normal[0]=P?(t-N)/P:0,s.normal[1]=P?(o-G)/P:0;continue}T=Math.max(0,x-Math.sqrt(u*u-S)),!(T>a||T>=s.best)&&(s.best=T,s.found=!0,P=Math.hypot(t+T*i-N,o+T*n-G),cg(s,t+T*i-N,o+T*n-G,P,i,n))}return s.found}function wf(e){let{layer:t,local:r,hitData:o}=e,i=O.get(t);if(!i||!F.get(i))return!1;Te(oe.get(t));let n=M.get(t),a=zt.call(e,r),s=n.position[0]+a[0]*n.scale[0],m=n.position[1]+a[1]*n.scale[1],f=n.position[2]+a[2]*n.scale[2],p=F.get(i),c,l,u,h;for(c of p)if(!(c===t||A.get(c)==="terrain")){if(A.get(c)==="traffic"){if(o.best=0,o.found=!1,ls(c,s,m,f,0,0,0,o))return!0;continue}for(h=o.nodes,h.length=0,M.get(c)&&h.push(M.get(c));h.length;)if(l=h.pop(),!!l.visible){if(l.geometry&&(vf(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||vf(l,s,m+1.35*n.scale[1],f,o.seen,o.intersections)))return!0;for(u of l.children)h.push(u)}}return!1}function us(){if(!this.saved||!wf(this))return!1;let e=this.layer._map,t=this.state.latlng,r=this.state.height,o,i,n;for(o=.5;o<=20;o+=.5)for(i=0;i<Math.PI*2;i+=Math.PI/4)if(n=new d.LatLng(t.lat+Math.cos(i)*o/111320,t.lng+Math.sin(i)*o/(111320*Math.cos(t.lat*Math.PI/180))),this.state.latlng=n,this.state.height=0,!wf(this))return this.verticalSpeed=0,e.setView(n,e.getZoom(),{animate:!1}),!0;return this.state.latlng=t,this.state.height=r,!1}function ds(e){return Math.atan2(Math.sin(e),Math.cos(e))}function lg(e,t){return e===t||qt.get(e)==="terrain"||qt.get(e)==="traffic"}function ug(e){let t=ne.get(this.layer),r=zt.call(this,this.local),o=M.get(this.layer),i=o.position[0]+r[0]*o.scale[0],n=o.position[1]+r[1]*o.scale[1],a=o.position[2]+r[2]*o.scale[2];if(n>e||this.verticalSpeed>0)return;Te(oe.get(this.layer)),t.origin[0]=i,t.origin[1]=e+.01,t.origin[2]=a,t.direction[0]=0,t.direction[1]=-1,t.direction[2]=0,t.meshes.length=0;let s,m;for(s of F.get(O.get(this.layer)))lg(s,this.layer)||A.get(s)==="raster"||s.options.nightLight||jt(M.get(s),aa,t.meshes);for(m of na(t,t.meshes)){if(m.point[1]<n-.001)break;this.state.height+=(m.point[1]-n)/o.scale[1],this.verticalSpeed=0;break}t.meshes.length=0}L();$();function dg(e,t,r,o,i,n){let{dx:a,dz:s,seen:m}=r,f,p,c;for(f of e)if(!(m.has(f)||a*t.nrm[f*2]+s*t.nrm[f*2+1]>=0))for(m.add(f),p=.4;p<2;p+=1.1)c=cs(t.tri,f,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[f*2],r.normal[1]=t.nrm[f*2+1])}function hg(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||Ce(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:m,dz:f,reach:p}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+p)return;let c=ps(e),l=n-r[12]+c.origin[0],u=a-r[13]+c.origin[1],h=s-r[14]+c.origin[2];t.seen.clear();let g,y,w;for(g=Math.floor(Math.min(l,l+m*p)/8);g<=Math.floor(Math.max(l,l+m*p)/8);g++)for(y=Math.floor(Math.min(h,h+f*p)/8);y<=Math.floor(Math.max(h,h+f*p)/8);y++)w=c.cells.get(g+","+y),w&&dg(w,c,t,l,u,h)}function gg(e,t,r,o,i,n,a,s){Te(oe.get(e)),s.x=t,s.y=r,s.z=o,s.dx=i,s.dz=n,s.reach=a,s.best=a,s.found=!1;let m;for(m of F.get(O.get(e)))if(!(m===e||A.get(m)==="terrain")){if(A.get(m)==="traffic"){ls(m,t,r,o,i,n,a,s);continue}jt(M.get(m),hg,s)}return s.found?s.normal:null}function Lf(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&gg(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function yg(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=M.get(this.layer),s=Math.sin(this.state.heading)*r,m=Math.cos(this.state.heading)*r,f=zt.call(this,this.local),p;for(p=0;p<f.length;p++)f[p]=n[p]+a[p]*f[p];let c=Lf.call(this,s,m,f);if(c){let l=s*c[0]-m*c[1];s-=l*c[0],m+=l*c[1],Lf.call(this,s,m,f)&&(s=m=0)}this.state.latlng=new d.LatLng(o+m/111320,i+s/(111320*Math.cos(o*B))),this.state.phase+=Math.hypot(s,m)/1.6*Math.PI}po();$();Z();dr();J();function xg(e,t,r){let o=this.layer._map;if(e||t){let n=k(o)*B,a=ds(-this.state.heading-n);Math.abs(a)>.001&&Ne(o,_(o),(n+a*Math.min(1,r*4))*et),o.setView(this.state.latlng,o.getZoom(),{animate:!1})}let i=e?.9:0;return Math.abs(this.swing-i)>.001?(this.swing+=(i-this.swing)*Math.min(1,r*10),!0):!1}function vg(e,t,r,o,i,n){o&&(e.state.heading=ds(e.state.heading+o*2.5*i),n=!0),r&&(yg.call(e,r,i),n=!0),n&&ug.call(e,t),xg.call(e,r,o,i)&&(n=!0),n&&ss.call(e)}function wg(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!v.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,us.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of Ji)this.meshes.push(pr(t,ii(fs[i])));o=!0}let a=M.get(t).position[1]+zt.call(this,this.local)[1]*M.get(t).scale[1];sg.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=Xi[n]?.[0]||0,m+=Xi[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),vg(this,a,s,m,r,o)}function hs(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter(),this.state.height=this.verticalSpeed=0;let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*tt*Math.cos(this.state.latlng.lat*B)/256)),o;this.saved={zoom:e.getZoom(),pitch:_(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of ag)e[o]?.enabled()&&this.saved.handlers.push(o);for(o of this.saved.handlers)e[o].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-k(e)*B,e.setView(this.state.latlng,r,{animate:!1}),Vt(e,75),us.call(this),d.DomEvent.on(document,"keydown keyup",this.onKey),d.DomEvent.on(window,"blur",this.onBlur),d.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.nextClearanceCheck=0,this.frame=requestAnimationFrame(this.step)}function Lg(){this.saved?ms.call(this):hs.call(this)}function bg(e,{speed:t,distance:r,...o}){let i=new d.Layer;qt.set(i,"walk"),Et(i,o);let n=new Set,a=d.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=d.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let m=d.DomUtil.create("small","",a);m.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",m.textContent="W/S: run \xB7 A/D: turn \xB7 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",d.DomEvent.disableClickPropagation(a);let f={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:m,meshes:null,frame:null,last:void 0,nextClearanceCheck:0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker={latlng:null,heading:0,phase:0,height:0}};Ka.set(i,f.state),f.step=wg.bind(f),f.onKey=ng.bind(f),f.onBlur=rg.bind(f),f.onPointer=og.bind(f),f.onTerrain=ig.bind(f),f.start=hs.bind(f),f.stop=ms.bind(f),f.toggle=Lg.bind(f),e._walk=f,d.DomEvent.on(s,"click",f.toggle)}function Mg(e){d.Util.setOptions(this,e),bg(this,this.options)}function Bg(e){let t=Ut.get(e);if(t?.control&&t.control!==this)throw this._map=null,new Error("Only one Walk control can be active per map");return t||(t={control:null,hitData:{x:0,y:0,z:0,dx:0,dz:0,reach:0,best:0,found:!1,seen:new Set,intersections:[],nodes:[],normal:[0,0]},local:[0,0,0]},Ut.set(e,t)),t.control=this,t.local.fill(0),t.hitData.seen.clear(),t.hitData.normal.fill(0),this._walk.hitData=t.hitData,this._walk.local=t.local,this._walk.layer.addTo(e),this._walk.container}function Tg(e){let t=Ut.get(e);t?.control===this&&(this._walk.stop(),this._walk.layer.remove(),t.control=null,t.hitData.seen.clear(),this._walk.hitData=null,this._walk.local=null)}d.Control.Walk=d.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:Mg,onAdd:Bg,onRemove:Tg});var to=new WeakMap;var kr=new WeakMap;L();function Pg(){to.get(this).off(kr.get(this),this),to.set(this,null),kr.set(this,null)}var Cr=new WeakMap;L();function gs(e,t){let r=je.get(e);if(!M.get(e)||!ee.get(e))return null;let o,i,n,a,s,m,f;for(o of sa(e,t,M.get(e).children,!!r)){if(r){for(i=o.object;i&&i!==r;)i=i.parent;if(i===r)return{id:r.id,properties:r.extras,model:r,mesh:o.object,point:o.point}}if(n=o.object.extras?.featureFaces,!!n)for(a=0,s=n.length-1;a<=s;)if(m=a+s>>1,f=n[m],o.faceIndex<f.faceStart)s=m-1;else if(o.faceIndex>=f.faceEnd)a=m+1;else return{...f,mesh:o.object,point:o.point}}return null}function ni(e){Se.set(e,null),Ct(e,null),_t(e,null),e.fire("featurehover",{feature:null})}function kg(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){Se.get(e)&&ni(e);return}Se.set(e,gs(e,t)),Ct(e,Se.get(e)),_t(e,Se.get(e),t),e.fire("featurehover",{feature:Se.get(e),originalEvent:t})}function Cg(e){kg(this,e)}function _g(e,t){let r=gs(e,t);Se.set(e,r),Ct(e,r),_t(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Eg(e){_g(this,e)}function zg(){ni(this)}async function Ag(e,t){try{await ri(e,t),we.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function Qi(e,t){if(!I.get(e)){let r=t.getCenter();I.set(e,new d.LatLng(r.lat,r.lng))}(ae.get(e)||X.get(e)||e.options.tooltip||We.get(e))&&(Ae.set(e,t.getContainer()),Cr.get(e)||Cr.set(e,{mousemove:Cg,click:Eg,mouseleave:zg}),e.options.tooltip&&(Re.set(e,d.DomUtil.create("div","leaflet-3d-tooltip",Ae.get(e))),Re.get(e).hidden=!0,Re.get(e).setAttribute("role","tooltip"),Re.get(e).setAttribute("aria-live","polite"),Re.get(e).style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),d.DomEvent.on(Ae.get(e),Cr.get(e),e)),M.get(e)&&Ag(e,t)}var Xt=new WeakMap;var Je=new WeakMap;var Jt=new WeakMap;$();var ys={x:0,y:0};var Oe=new WeakMap;var he=new WeakMap;var At=new WeakMap;var en={size:[null,null],format:"r32float",usage:null};var xs={texture:null};var bf={bytesPerRow:null};var vs=[null,null];function Rg(e,t,r,o){let i,n,a;for(i=0;i<256;i++)for(n=0;n<256;n++)a=t[i*256+n],!(!Number.isFinite(a)||a<=-1e3)&&(e.elevations[r+i*o*256+n]=a,e.low=Math.min(e.low,a),e.high=Math.max(e.high,a))}function Og(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,n={elevations:new Float32Array(r*o*65536).fill(-1e9),low:1/0,high:-1/0},a,s,m,f,p,c;for([a,s]of e)m=a.split("/"),f=Number(m[0]),p=Number(m[1]),c=(p-t.min.y)*256*r*256+(f-t.min.x)*256,Rg(n,s,c,r);return n}function Dg(e,t){let r=v.get(e).device;if(he.get(e)?.device===r)return he.get(e);let o=Xt.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=Og(rt.get(e),o);return Oe.get(e)&&j(e,Oe.get(e).texture),Oe.set(e,{texture:r.createTexture((en.size[0]=i*256,en.size[1]=n*256,en.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,en)),low:Number.isFinite(s)?s:Je.get(e),high:Number.isFinite(m)?m:Je.get(e)}),r.queue.writeTexture((xs.texture=Oe.get(e).texture,xs),a,(bf.bytesPerRow=i*1024,bf),(vs[0]=i*256,vs[1]=n*256,vs)),xs.texture=null,At.set(e,new Map),he.set(e,Ge(e,{baseTexture:t,unlit:!0,terrain:Oe.get(e),alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided})),he.get(e)}var ws={size:null,usage:null};function Ig(e){let t=(e+1)**2,r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t*2),n=new Uint16Array(e*e*6),a,s,m,f,p,c,l=0,u=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[l*3]=s/e,r[l*3+2]=a/e,o[l*3+1]=1,i[l*2]=s/e,i[l*2+1]=a/e,l++,a<e&&s<e&&(m=a*(e+1)+s,f=m+1,p=m+e+1,c=p+1,n[u++]=m,n[u++]=p,n[u++]=f,n[u++]=f,n[u++]=p,n[u++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function Gg(e,t){let r=v.get(e).device,o=At.get(e).get(t);if(!o){o=Ig(t);let i,n;for([i,n]of Object.entries(o))n.size||=1,n.count=n.data.length/n.size,n.indexFormat="uint16",n.buffer=r.createBuffer((ws.size=Math.max(4,n.data.byteLength),ws.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,ws)),r.queue.writeBuffer(n.buffer,0,n.data);At.get(e).set(t,o)}return o}function Ug(e,t,r,o){let i=Je.get(e),n=Math.min(Oe.get(e).low,i)-i,a=Math.max(Oe.get(e).high,i)-i;return{device:v.get(e).device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,n,0],max:[1,a,1],center:[.5,(n+a)/2,.5],radius:Math.hypot(r,a-n,o)/2/Math.max(r,1,o)}}}async function Ng(e,t,r,o){if(!await Jt.get(e)||!e._map||me.get(e._map)!==e||pe.get(t)!==e||o.request.signal.aborted||!D.get(t).has(`${r.z}/${r.x}/${r.y}`)||D.get(e).has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-ge.get(e)))),a=e._map,s=a.options.crs,m=s.project(I.get(e)),f=Math.cos(I.get(e).lat*B),p=s.scale(r.z),c=2**(ge.get(e)-r.z),l=ys;l.x=r.x*256,l.y=r.y*256;let u=s.transformation.untransform(l,p);l.x=(r.x+1)*256,l.y=(r.y+1)*256;let h=s.transformation.untransform(l,p),x=v.get(e).device,g=o.texture,y=Dg(e,g),w=Gg(e,n),S=Je.get(e),T=(h.x-u.x)*f,P=-(h.y-u.y)*f,R=Ug(e,w,T,P),Q={position:[(u.x-m.x)*f,0,-(u.y-m.y)*f],rotation:[0,0,0],scale:[T,1,P],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:x,geometry:R,program:y,texture:g,terrain:[r.x*256*c-Xt.get(e).min.x*256,r.y*256*c-Xt.get(e).min.y*256,256*c,S],tile:o,opacity:t.options.opacity??1,id:vt.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,q(Q,M.get(e)),E(e),D.get(e).set(o,Q)}async function Ls(e,t,r){if(pe.get(e)&&r.done&&!r.request.signal.aborted&&D.get(e).get(`${t.z}/${t.x}/${t.y}`)===r)try{await Ng(pe.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}function ai(e,t){if(!D.get(e)||pe.get(e)===t)return;let r;for(r of D.get(e).values())pe.get(e)&&Lo(pe.get(e),r),r.mesh&&(r.mesh.visible=!0,q(r.mesh,M.get(e)));if(pe.set(e,t||null),t)for(r of D.get(e).values())r.done&&Ls(e,r.coords,r)}async function Fg(e,t,r){try{await r,we.get(e).resolve(),ai(e,me.get(t))}catch(o){e.fire("error",{error:o})}}var Wg=new Map;var jg=new Map;function $g(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var tn=[null];var Rt=new WeakMap;$();var rn={size:[null,null],format:"rgba8unorm",usage:null};var Vg={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var bs={size:null,usage:null};var Zg=[0,0,0,1,0,0,0,0,1,1,0,1];var qg=[0,1,0,0,1,0,0,1,0,0,1,0];var Hg=[0,0,1,0,0,1,1,1];var Yg=[0,2,1,1,2,3];function Xg(e){let t={position:{size:3,data:new Float32Array(Zg)},normal:{size:3,data:new Float32Array(qg)},uv:{size:2,data:new Float32Array(Hg)},index:{data:new Uint16Array(Yg)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((bs.size=o.data.byteLength,bs.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,bs)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Jg(e,t){let r=v.get(e).device,o={device:r,texture:r.createTexture((rn.size[0]=t.image.width,rn.size[1]=t.image.height,rn.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,rn)),sampler:r.createSampler(Vg),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Nr,n=uo,a=ho;i.source=t.image,i.flipY=!1,n.texture=o.texture,a[0]=t.image.width,a[1]=t.image.height,r.queue.copyExternalImageToTexture(i,n,a),i.source=null,n.texture=null,o.uploaded=t.image,he.get(e)||he.set(e,Ge(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),Rt.get(e)||Rt.set(e,Xg(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(I.get(e)),p=Math.cos(I.get(e).lat*B),c=m.scale(s.z),l=ys;l.x=s.x*256,l.y=s.y*256;let u=m.transformation.untransform(l,c);l.x=(s.x+1)*256,l.y=(s.y+1)*256;let h=m.transformation.untransform(l,c),x=(h.x-u.x)*p,g=-(h.y-u.y)*p;t.texture=o,t.mesh={position:[(u.x-f.x)*p,0,-(u.y-f.y)*p],rotation:[0,0,0],scale:[x,1,g],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:Rt.get(e),program:he.get(e),texture:o,opacity:e.options.opacity,id:vt.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},q(t.mesh,M.get(e))}async function Kg(e,t){try{await re.get(e);let r=await Jr(e.options.archive,t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted){r?.image?.close();return}if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{if(r.image)t.image=r.image;else{tn[0]=r.data;let o=new Blob(tn);tn[0]=null,t.image=await createImageBitmap(o)}}catch{throw tn[0]=null,new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}Jg(e,t),t.loadedAt=performance.now(),t.done=!0,_e.set(e,(_e.get(e)||0)+1),Ls(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),E(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,_e.set(e,(_e.get(e)||0)+1),e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{fe.set(e,fe.get(e)-1),e._map&&(Ms(e),Mo(e),fe.get(e)||e.fire("load"),E(e))}}function Qg(e,t){t.started=!0;let r=fe.get(e)===0;return fe.set(e,fe.get(e)+1),e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),Kg(e,t)}function Ms(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of D.get(e).values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort($g);for({tile:i}of o){if(fe.get(e)>=4)break;Qg(e,i)}}function ey(e,t){let r=D.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&bo(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var _r=[0,0];var Er=[0,0];function ty(e,t,r){let o=e.getBounds(),i=e.project(o.getNorthWest(),r).divideBy(256).floor(),n=e.project(o.getSouthEast(),r).divideBy(256).floor();_r[0]=t.maxLat,_r[1]=t.minLon,Er[0]=t.minLat,Er[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(_r,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(Er,r).divideBy(256).floor(),m=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,m.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,m.x+6),minY:Math.max(0,i.y,a?.y??0,m.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,m.y+6)}}function Ts(e){let t=e._map;if(!t||!O.get(e)||!U.get(e))return;let r=Math.max(U.get(e).minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));ar.set(e,r);let o=ty(t,U.get(e),r),i=Wg;i.clear();let n,a,s,m,f;for(n=o.minX;n<=o.maxX;n++)for(a=o.minY;a<=o.maxY;a++)i.set(`${r}/${n}/${a}`,{z:r,x:n,y:a});or.set(e,new Set(i.keys()));let p=jg;p.clear();let c=Math.max(U.get(e).minZoom??0,r-2),l=2**(r-c);if(c<r)for([s,m]of i)D.get(e).get(s)?.done||(f={z:c,x:Math.floor(m.x/l),y:Math.floor(m.y/l)},p.set(`${f.z}/${f.x}/${f.y}`,f));let u=new Map(p);for([s,m]of i)u.set(s,m);i.clear(),p.clear(),ey(e,u),Ms(e),Mo(e)}async function ry(e,t,r){try{await Promise.all([r,re.get(e)]),e._map===t&&t.hasLayer(e)&&Ts(e)}catch(o){e.fire("error",{error:o})}}function oy(e,t){I.get(e)||I.set(e,t.getCenter());let r=ri(e,t);Fg(e,t,r),ry(e,t,r)}var Ps=new WeakMap;var Ss=new WeakMap;var si=new WeakMap;var zr=new WeakMap;var ro=new WeakMap;var ks=new WeakMap;async function iy(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await Jr(r,n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);rt.get(t).set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function ny(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}L();function ay(e,t){let r=e._map;ge.set(e,t.maxZoom),_r[0]=t.maxLat,_r[1]=t.minLon;let o=r.project(_r,ge.get(e)).divideBy(256).floor();Er[0]=t.minLat,Er[1]=t.maxLon;let i=r.project(Er,ge.get(e)).divideBy(256).floor();Xt.set(e,new d.Bounds(o,i));let n=[],a=r.project(r.getCenter(),ge.get(e)).divideBy(256),s,m;for(s=o.x;s<=i.x;s++)for(m=o.y;m<=i.y;m++)n.push({z:ge.get(e),x:s,y:m,distance:Math.hypot(s+.5-a.x,m+.5-a.y)});return n.sort(is),n}var oo=new WeakMap;$();L();function sy([e,t,r],o,i,n,a){let s=o.project(new d.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function my(e,t){let r=[],o=0,i,n,a;for(i of e){for(n=[],a=0;a<i.length;a++)n.push({x:t[o+a][0],y:t[o+a][1]});r.push(n),o+=i.length}return r}function fy(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,m,f,p,c,l,u,h,x;for(m of r){f=[];for(p of m)f.push(t[p]);o.push(f)}for(c of t)i=Math.min(i,c[0]),n=Math.min(n,c[1]),a=Math.max(a,c[0]),s=Math.max(s,c[1]);let g={triangles:o,min:[i,n],max:[a,s]};for(l=Math.floor(g.min[0]/64);l<=Math.floor(g.max[0]/64);l++)for(u=Math.floor(g.min[1]/64);u<=Math.floor(g.max[1]/64);u++)h=`${l}/${u}`,x=ft.get(e).get(h),x||ft.get(e).set(h,x=[]),x.push(g)}function py(e,t,r){let{position:o,normal:i,color:n}=e,a,s,m,f,p,c,l,u,h;for([a,s,m]of r)for(f=t[a],p=t[s],c=t[m],(p[2]-f[2])*(c[0]-f[0])-(p[0]-f[0])*(c[2]-f[2])<0&&(l=s,s=m,m=l),u=0;u<6;u++)l=u===0||u===3?a:u===1||u===5?s:m,h=t[l],o.push(h[0],h[1]-(u>=3?1.2:0),h[2]),i.push(0,u>=3?-1:1,0),n.push(.6,.58,.54)}function cy(e,t,r){let{position:o,normal:i,color:n}=e,a=Math.hypot(r[0]-t[0],r[2]-t[2])||1,s=(r[2]-t[2])/a,m=-(r[0]-t[0])/a,f,p;for(f=0;f<6;f++)p=f===0||f===3||f===5?t:r,o.push(p[0],p[1]-(f===2||f>=4?1.2:0),p[2]),i.push(s,0,m),n.push(.6,.58,.54)}function ly(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)cy(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function uy(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:m}=e,f=[],p,c,l,u,h,x,g,y,w,S,T;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let P=[],R=[];for(p of f)for([l,u,h]of p)x=o.project([u,l],i),P.push([x.x,x.y,h]);for(p of f)for(g of p)R.push(sy(g,n,a,s,m));try{y=my(f,P),[w,...S]=y,T=Qn(w,S)}catch{return}fy(r,P,T),py(e,R,T),ly(e,R,f)}function dy(e,t){let r=e._map,o=r.options.crs,i=ge.get(e),n=o.project(I.get(e)),a=Math.cos(I.get(e).lat*B),s=M.get(e).position[1],m=[],f=[],p=[];ft.set(e,new Map);let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:m,normal:f,color:p},l,u,h;for({geometry:l}of t.features)if(!(l.type!=="Polygon"&&l.type!=="MultiPolygon"))for(u=l.coordinates,h=0;h<(l.type==="Polygon"?1:u.length);h++)uy(c,l.type==="Polygon"?u:u[h]);m.length&&oo.set(e,pr(e,{position:m,normal:f,color:p}))}function hy(e,t,r){Be.set(e,!0),Je.set(e,nr(e,I.get(e))??0);let o;for(o of Object.values(t._layers))Ko(o),oi(o,e);r&&dy(e,r),t.fire("terrainchange"),E(e),e.fire("terrainready")}async function Cs(e){if(zr.get(e)||!e._map)return;zr.set(e,!0),Be.set(e,!1);let t=new AbortController;si.set(e,t);let r;try{if(!ro.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=ra({source:{type:"raster",url:ro.get(e),archive:e.options.archive,asset:e.options.asset,workerUrl:e.options.workerUrl}});ks.set(o,e._map),Ss.set(e,o),await re.get(o);let i=U.get(o);if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=ay(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},m=[];for(r=0;r<Math.min(4,a.length);r++)m.push(iy(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(ny);return t.signal.aborted||e._map!==n?void 0:(hy(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{zr.set(e,!1)}}function gy(){Cs(this.backend).then(this.resolve,this.reject)}function yy(e){A.get(e)==="raster"&&ai(e,this)}function xy(e,t){if(Me.get(t)||me.get(t)&&me.get(t)!==e)throw new Error("Only one terrain layer can be active per map");if(Ps.get(e)){Me.set(t,{layer:e,map:t,terrainCache:new Map,terrainController:new AbortController}),Qi(e,t),t.fire("terrainchange");return}if(me.set(t,e),Qi(e,t),M.get(e))Jt.set(e,Cs(e));else{let r=Promise.withResolvers();Jt.set(e,r.promise),e.once("ready",gy,{backend:e,...r})}t.eachLayer(yy,e),t.fire("terrainchange")}var _s=[];function vy(){_s.shift()?.fire("load")}function wy(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(_s.push(this),queueMicrotask(vy))}function Ly(e,t){switch(A.get(e)){case"3d":return Qi(e,t);case"raster":return oy(e,t);case"terrain":return xy(e,t);case"image":return wy.call(e,t);case"time":return Wd.call(e,t)}}function by(e){if(!e._map)return;let t;for(t of Y.get(e).values())Kr(e,t);Y.get(e).clear(),Qr(e)}function My(e){let t={};return ae.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=Qr.bind(null,e)),(X.get(e)||ae.get(e))&&(t.terrainchange=by.bind(null,e)),t}function By(e){let t=Ts.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}function Ty(){return{}}L();function Py(e){return!Tr.get(e)&&(e instanceof d.GridLayer||e instanceof d.Polyline||e instanceof d.CircleMarker||e instanceof d.Marker&&!(e.options.icon instanceof d.DivIcon)||e instanceof d.ImageOverlay&&!(e instanceof d.VideoOverlay)&&!(e instanceof d.SVGOverlay))}function Sy(e){let t=Py(this);t&&((this instanceof d.GridLayer||this instanceof d.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof d.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target;r.hasLayer(this)&&(A.get(this)?(this._map=r,this._zoomAnimated=r._zoomAnimated,A.get(this)!=="pending"&&A.get(this)!=="time"&&(kr.set(this,A.get(this)==="raster"?By(this):Tr.get(this)?My(this):Ty()),to.set(this,r),r.on(kr.get(this),this),this.once("remove",Pg,this)),Ly(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):Ir.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&pa(this,e.target))}L();var Es=[];var zs={value:Promise.resolve()};function ky(e,t){X.set(e,!0),Et(e,t)}function Cy(e){return e.data===void 0&&(e.tileJSON!==void 0||typeof e.url=="string"&&/\{[zxy]\}|%7B[zxy]%7D/i.test(e.url))}L();var Le=new WeakMap;async function _y(e){let t=new URL(e.tileJSON,document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`TileJSON: HTTP ${r.status}`);let o=await r.json();if(!o||!Array.isArray(o.tiles)||!o.tiles.length||typeof o.tiles[0]!="string")throw new Error("TileJSON requires a tile URL template");return{...e,url:new URL(o.tiles[0],t).href,minNativeZoom:e.minNativeZoom??o.minzoom,maxNativeZoom:e.maxNativeZoom??o.maxzoom,attribution:e.attribution??o.attribution}}function Ey(e){let t="",r=!1,o=!1,i=0,n="";for(i=0;i<e.length;i++)n=e[i],!(!r&&n===","&&/^\s*[\]}]/.test(e.slice(i+1)))&&(t+=n,o?o=!1:r&&n==="\\"?o=!0:n==='"'&&(r=!r));return t}function zy(e,t){if(t.quoted)return t.escaped?(t.escaped=!1,e==="'"?e:"\\"+e):e==="\\"?(t.escaped=!0,""):e===t.quoted?(t.quoted="",'"'):e==='"'?'\\"':e;if(e==='"'||e==="'")return t.quoted=e,'"'}function Ay(e,t,r){if(r==="/"){for(;t<e.length&&e[t]!==`
3
+ `;)t++;return t}let o=e.indexOf("*/",t+2);if(o<0)throw new Error("Unterminated style comment");return o+1}function Ry(e){let t="",r=0,o="",i="",n,a={quoted:"",escaped:!1};for(r=0;r<e.length;r++){if(o=e[r],i=e[r+1],n=zy(o,a),n!==void 0){t+=n;continue}o==="/"&&(i==="/"||i==="*")?(r=Ay(e,r,i),t+=i==="/"?`
4
+ `:" "):t+=o}return t}function Oy(e){let t=0,r=null;if(!Array.isArray(e))throw new Error("Invalid vector style layers");for(t=0;t<e.length;t++)if(r=e[t],!r||typeof r.id!="string"||typeof r.type!="string")throw new Error("Invalid vector style layers")}function Dy(e){let t=/^\s*(?:const|let|var)\s+otm_layers\s*=\s*/.exec(e);t&&(e=e.slice(t[0].length));let r=Ey(Ry(e).trim().replace(/;$/,"")),o=JSON.parse(r),i=o.layers??o;return Oy(i),i}async function Iy(e){if(typeof e=="string"){let r=await fetch(e);if(!r.ok)throw new Error(`Vector style: HTTP ${r.status}`);e=Dy(await r.text())}else e=e?.layers??e;if(!Array.isArray(e))throw new Error("Invalid vector style layers");let t;for(t of e)if(!t||typeof t.id!="string"||typeof t.type!="string")throw new Error("Invalid vector style layers");return e}function Gy(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||t<e||r<t||r>24)throw new Error("Invalid vector tile zoom range")}async function Uy(e){if(!e||typeof e!="object")throw new TypeError("Vector tiles require source options");e.tileJSON&&(e=await _y(e));let{url:t,style:r,minNativeZoom:o=0,maxNativeZoom:i=14,maxZoom:n=19}=e,a;typeof t=="string"&&(t=t.replaceAll(/%7B([zxy])%7D/gi,"{$1}"));for(a of["{z}","{x}","{y}"])if(typeof t!="string"||!t.includes(a))throw new Error("Vector tiles require an XYZ URL template");return Gy(o,i,n),r=await Iy(r),{...e,url:t,style:r,minNativeZoom:o,maxNativeZoom:i,maxZoom:n}}async function Ny(e){let t=await fetch(`${e}.json`);if(!t.ok)throw new Error(`Sprite ${e}.json: HTTP ${t.status}`);return{url:`${e}.png`,index:await t.json()}}var As="move zoom rotate pitch resize viewreset";function Fy(e,t,r,o,i){let n=0;if(e==="all"){for(n=0;n<t.length;n++)if(!z(t[n],r,o,i))return!1;return!0}if(e==="any"){for(n=0;n<t.length;n++)if(z(t[n],r,o,i))return!0;return!1}throw new Error(`Unsupported vector style expression: ${e}`)}function Wy(e,t,r,o,i){let n=0,a=null;if(e==="coalesce"){for(n=0;n<t.length;n++)if(a=z(t[n],r,o),a!=null)return a;return null}if(e==="case"){for(n=0;n<t.length-1;n+=2)if(z(t[n],r,o))return z(t[n+1],r,o);return z(t[t.length-1],r,o)}throw new Error(`Unsupported vector style expression: ${e}`)}function Ar(e,t,r,o){return o&&typeof e=="string"?t[e]:z(e,t,r)}function jy(e,t,r,o,i){let n=Ar(t[0],r,o,i),a=z(t[1],r,o);switch(e){case"==":return n===a;case"!=":return n!==a;case"<=":return n<=a;case">=":return n>=a;case"<":return n<a;case">":return n>a;default:throw new Error(`Unsupported vector style expression: ${e}`)}}var Mf={black:[0,0,0,1],white:[255,255,255,1],gray:[128,128,128,1],blue:[0,0,255,1],red:[255,0,0,1],green:[0,128,0,1]};function $y(e){let t=/^rgba?\(([^)]+)\)$/.exec(e);if(t){let r=t[1].split(","),o=0,i=!0;for(o=0;o<r.length;o++)r[o]=Number(r[o]);for(r.length===3&&r.push(1),o=0;o<r.length;o++)Number.isFinite(r[o])||(i=!1);if(r.length===4&&i)return r}throw new Error(`Unsupported interpolated style color: ${e}`)}function Vy(e){let t=0,r=0;e.length===4&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);let o=[];for(t=1;t<6;t+=2)r=parseInt(e.slice(t,t+2),16),o.push(r);return o.push(1),o}function Rr(e){return Object.hasOwn(Mf,e)?Mf[e]:/^#[0-9a-f]{3}$/i.test(e)||/^#[0-9a-f]{6}$/i.test(e)?Vy(e):$y(e)}function Zy(e,t,r){let o=z(e[1],t,r),i=e[0][0]==="exponential"?e[0][1]:1,n=0,a=0,s=0,m=0,f=null,p=null,c=0,l="";if(o<=e[2])return z(e[3],t,r);for(n=4;n<e.length;n+=2)if(!(o>e[n])){if(a=e[n-2],s=e[n],m=i===1?(o-a)/(s-a):(i**(o-a)-1)/(i**(s-a)-1),f=z(e[n-1],t,r),p=z(e[n+1],t,r),typeof f=="number"&&typeof p=="number")return f+(p-f)*m;for(f=Rr(f),p=Rr(p),c=0;c<3;c++)c&&(l+=","),l+=Math.round(f[c]+(p[c]-f[c])*m);return`rgba(${l},${f[3]+(p[3]-f[3])*m})`}return z(e.at(-1),t,r)}function Bf(e,t,r,o){let i=0,n=null;for(i=t;i<r;i++)if(n=e[i],n===o||n!==n&&o!==o)return!0;return!1}function Rs(e,t,r,o,i){let n=null;if(e==="!in")return n=Ar(t[0],r,o,i),!Bf(t,1,t.length,n);if(i)return n=Ar(t[0],r,o,!0),Bf(t,1,t.length,n);let a=z(t[1],r,o);return n=Ar(t[0],r,o,!1),a.includes(n)}function qy(e,t,r,o,i){if(e==="in")return Rs(e,t,r,o,i);if(e==="interpolate")return Zy(t,r,o);throw new Error(`Unsupported vector style expression: ${e}`)}function Hy(e,t,r,o){let i=0,n=0;if(e==="+"){for(i=0;i<t.length;i++)n+=z(t[i],r,o);return n}if(e==="-")return t.length===1?-z(t[0],r,o):z(t[0],r,o)-z(t[1],r,o);throw new Error(`Unsupported vector style expression: ${e}`)}function Yy(e,t,r){let o=z(e[0],t,r),i=0,n=!1;for(i=1;i<e.length-1;i+=2)if(Array.isArray(e[i])?n=e[i].includes(o):n=e[i]===o,n)return z(e[i+1],t,r);return z(e[e.length-1],t,r)}function Xy(e,t,r,o,i){if(e==="!")return!z(t[0],r,o,i);if(e==="!=")return Ar(t[0],r,o,i)!==z(t[1],r,o);if(e==="!in")return Rs(e,t,r,o,i);throw new Error(`Unsupported vector style expression: ${e}`)}function Jy(e,t,r,o){switch(e){case"literal":return t[0];case"get":return r[t[0]];case"has":return Object.hasOwn(r,t[0]);case"zoom":return o;default:throw new Error(`Unsupported vector style expression: ${e}`)}}function Ky(e,t,r){let o=z(e[0],t,r),i=e[1],n=0;for(n=2;n<e.length&&!(o<e[n]);n+=2)i=e[n+1];return z(i,t,r)}function Qy(e,t,r,o){if(e==="to-boolean")return!!z(t[0],r,o);if(e==="to-number"){let i=0,n=0;for(i=0;i<t.length;i++)if(n=Number(z(t[i],r,o)),Number.isFinite(n))return n;throw new Error("Invalid numeric style expression")}throw new Error(`Unsupported vector style expression: ${e}`)}function z(e,t,r,o=!1){if(!Array.isArray(e))return e;let i=e[0],n=e.slice(1),a=String(i);if(/^(?:literal|get|has|zoom)$/.test(a))return Jy(i,n,t,r);switch(a[0]){case"a":return Fy(i,n,t,r,o);case"!":return Xy(i,n,t,r,o);case"=":case"<":case">":return jy(i,n,t,r,o);case"i":return qy(i,n,t,r,o);case"t":return Qy(i,n,t,r,o);case"c":return Wy(i,n,t,r,o);case"m":return Yy(n,t,r);case"s":return Ky(n,t,r);default:return Hy(i,n,t,r)}}function Ke(e){return e._map.getZoom()+(Le.get(e).styleZoomOffset??0)}function ex(){clearTimeout(this.timer),this.changedAt=performance.now(),this.timer=setTimeout(this.update.bind(this),180)}$();function Os(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),Tt(e),e}function on(e,t,r){if(!r.along)return;let o=e.latLngToContainerPoint(r.along[0]),i=e.latLngToContainerPoint(r.along[1]),n=Math.atan2(i.y-o.y,i.x-o.x)/B;n>90?n-=180:n<-90&&(n+=180),t.options.rotation!==n*B&&Os(t,n*B)}function tx(){let e;for(e of this.labels.values())e._mvtLabel&&on(this._map,e,e._mvtLabel)}var mi=new WeakMap;function fi(e){let t=mi.get(e);t?.blobUrl&&(URL.revokeObjectURL(t.blobUrl),t.blobUrl=null)}function rx({data:e}){fi(this);let t=this.waiting.get(e.id);t&&(this.waiting.delete(e.id),e.error?t.reject(new Error(e.error)):t.resolve(e))}function ox(e){fi(this);let t=new Error(`Worker MVT: ${e.message}`),r;for(r of this.waiting.values())r.reject(t);this.waiting.clear(),qe(this,t)}function ix(e){let{style:t,pane:r}=Le.get(this),o,i;for([o]of t.entries())(e.getPane(`${r}-${o}`)||e.createPane(`${r}-${o}`)).style.zIndex=200+o;for(i of t)if(i.type==="background"){e.getContainer().style.background=z(i.paint["background-color"],{},Ke(this));break}this.session={},this.tiles=new Map,this.labels=new Map,this.waiting=new Map,this.retiring=new Set,this.inflight=0,this.sequence=0,this.changedAt=0,this.paintZoom=null;let n=os(this.options.workerUrl||rs);mi.set(this,n),this.worker=n.worker,this.worker.onmessage=rx.bind(this),this.worker.onerror=ox.bind(this),this.refresh=ex.bind(this),this.rotateLabels=tx.bind(this),e.on(As,this.refresh),e.on("move rotate pitch",this.rotateLabels),this.update()}function nx(e){e.off(As,this.refresh),e.off("move rotate pitch",this.rotateLabels),clearTimeout(this.timer),this.session=null,this.worker.terminate(),fi(this),mi.delete(this);let t,r,o,i;for(t of this.waiting.values())t.reject(new DOMException("Layer removed","AbortError"));this.waiting.clear();for(r of this.tiles.values())r.controller.abort(),r.group?.remove();for(o of this.retiring)o.remove();for(i of this.labels.values())i.remove();this.tiles.clear(),this.labels.clear(),this.retiring.clear()}function ax(){if(!this.session)return;let{minNativeZoom:e,maxNativeZoom:t}=Le.get(this),r=Math.max(e,Math.min(t,Math.floor(Ke(this)))),o=this._map.getBounds(),i=2**r,n=this._map.project(o.getNorthWest(),r).divideBy(256),a=this._map.project(o.getSouthEast(),r).divideBy(256),s,m,f,p;for(s of this.tiles.values())s.needed=!1;for(m=Math.floor(n.x);m<=Math.floor(a.x);m++)for(f=Math.max(0,Math.floor(n.y));f<=Math.min(i-1,Math.floor(a.y));f++)p=`${r}/${m}/${f}`,s=this.tiles.get(p),s||(s={key:p,coords:{z:r,x:m,y:f},controller:new AbortController},this.tiles.set(p,s)),s.needed=!0;this.prune(),this.pump(),this.updatePaint().catch(qe.bind(null,this)),this.updateLabels().catch(qe.bind(null,this))}function Or(e,t,r,o,i){return e[t]===void 0?r:z(e[t],o,i)}function sx(e,t,r){let o=Rr(Or(e,"fill-color","#000",t,r)),i=Or(e,"fill-outline-color",null,t,r),n=i===null?null:Rr(i),a=Or(e,"fill-opacity",1,t,r)*o[3],s={r:o[0]/255,g:o[1]/255,b:o[2]/255},m=n?{r:n[0]/255,g:n[1]/255,b:n[2]/255}:null;return{fillColor:s,fillOpacity:a,color:m,weight:.5}}function mx(e,t,r,o){if(!e)return;let i=e,n=0,a="";if(typeof e[0]!="number"&&(i=z(e,r,o)),!Array.isArray(i))throw new TypeError("Style dash array must be an array");for(n=0;n<i.length;n++)n&&(a+=" "),a+=i[n]*t;return a}function fx(e,t,r,o){let i=Or(t,"line-width",1,r,o),n=Rr(Or(t,"line-color","#000",r,o)),a=Or(t,"line-opacity",1,r,o)*n[3],s=mx(t["line-dasharray"],i,r,o),m=e.layout?.["line-cap"]||"butt",f=e.layout?.["line-join"]||"miter";return{color:{r:n[0]/255,g:n[1]/255,b:n[2]/255},opacity:a,weight:i,dashArray:s,lineCap:m,lineJoin:f}}function px(e,t,r){let o=e.paint||{};return e.type==="fill"?sx(o,t,r):fx(e,o,t,r)}function Ds(e,t,r){return r>=(e.minzoom??0)&&r<(e.maxzoom??1/0)&&e.layout?.visibility!=="none"&&(!e.filter||z(e.filter,t,r,!0))}function Is(e,t){let r=px(e.entry,e.properties,t);return Ds(e.entry,e.properties,t)||(r.opacity=0,r.fillOpacity=0),r}function cx(e,t){let r=Is(e,t),{layer:o}=e;e.kind==="line"?r.dashArray!==o.options.dashArray?o.setStyle(r):o.setStyle({color:r.color,opacity:r.opacity,weight:r.weight}):(JSON.stringify(r.fillColor)!==JSON.stringify(o.options.fillColor)||r.fillOpacity!==o.options.fillOpacity)&&o.setStyle({fillColor:r.fillColor,fillOpacity:r.fillOpacity})}function io(e,t){return e.session===t&&performance.now()-(e.changedAt||0)>=180}function ht(e=0){let t=Promise.withResolvers();return setTimeout(t.resolve,e),t.promise}async function lx(){let e=Ke(this),t=this.session;if(this.paintZoom===e)return;let r=this.paintRevision=(this.paintRevision||0)+1,o=0,i,n;for(i of this.tiles.values())if(i.rendered)for(n of i.rendered){if(!io(this,t)||this.paintRevision!==r||Ke(this)!==e)return;cx(n,e),++o%32===0&&await ht()}this.paintZoom=e}function ux(e,t){return e.priority-t.priority}function dx(e){let t=[],r,o;for(r of e.tiles.values())if(!(!r.needed||!r.labelCandidates))for(o of r.labelCandidates)t.push(o);return t.sort(ux)}function hx(e,t,r){let o=e._map,i=Ke(e);if(!Ds(t.entry,t.properties,i)||(t.size=z(t.entry.layout?.["text-size"]??12,t.properties,i),!(t.size>0))||t.icon&&!Le.get(e).spriteSheet?.index[t.icon]||(t.color=z(t.entry.paint?.["text-color"]??"#000",t.properties,i),t.halo=z(t.entry.paint?.["text-halo-color"]??"#fff",t.properties,i),t.haloWidth=z(t.entry.paint?.["text-halo-width"]??0,t.properties,i),t.along&&t.pixelBase*2**o.getZoom()<t.text.length*t.size*.6))return null;let n=o.latLngToContainerPoint(t.latlng);if(n.x<0||n.y<0||n.x>r.x||n.y>r.y)return null;let a=t.text.length*t.size*.65+16,s=[],m,f;for(m=Math.floor((n.x-a/2)/32);m<=Math.floor((n.x+a/2)/32);m++)for(f=Math.floor((n.y-t.size)/24);f<=Math.floor((n.y+t.size)/24);f++)s.push(`${m}:${f}`);return s}function gx(e,t){let r;for(r of e)if(t.has(r))return!1;for(r of e)t.add(r);return!0}L();L();L();function yx(e,t){let{x:r,y:o,width:i,height:n}=t.index[e.icon],[a,s]=e.iconOffset;return new d.DivIcon({className:"",html:`<div style="width:${i}px;height:${n}px;background:url(${t.url}) -${r}px -${o}px"></div>`,iconSize:[i,n],iconAnchor:[i/2-a,n/2-s]})}function xx(e){let t=Math.floor(19.23076923076923),r=[],o="",i;for(i of e.split(" "))o&&Array.from(`${o} ${i}`).length>t?(r.push(o),o=i):o=o?`${o} ${i}`:i;return r.push(o),r}function Tf(e,t){if(e.icon)return yx(e,t);let r=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=e.along?[e.text]:xx(e.text),i=0,n,a,s,m;for(n of o)i=Math.max(i,Array.from(n).length);let f=Math.max(40,i*e.size*.65+12),p=e.size*1.2,c=o.length*p+12;r.setAttribute("width",f),r.setAttribute("height",c);let l={x:f/2,"text-anchor":"middle","font-family":"sans-serif","font-size":e.size,fill:e.color,stroke:e.halo,"stroke-width":e.haloWidth*2,"paint-order":"stroke"};for(m=0;m<o.length;m++){s=document.createElementNS(r.namespaceURI,"text");for(a of Object.keys(l))s.setAttribute(a,l[a]);s.setAttribute("y",c/2+(m-(o.length-1)/2)*p+e.size*.35),s.textContent=o[m],r.append(s)}return new d.Icon({iconUrl:`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(r))}`,iconSize:[f,c],iconAnchor:[f/2,c/2]})}function Gs({error:e}){qe(this,e)}function vx(e,t,r){let o=JSON.stringify([t.size,t.color,t.halo,t.haloWidth,t.icon]),i=Le.get(e).spriteSheet,n=e.labels.get(r);if(n){if(n._mvtLabel=t,n._mvtLabelStyle===o)return on(e._map,n,t),!1;n.setIcon(Tf(t,i))}else{let{pane:a}=Le.get(e);n=new d.Marker(t.latlng,{icon:Tf(t,i),pane:`${a}-${t.order}`,title:t.text,alt:t.text,interactive:!1,keyboard:!1,rotateWithView:!1}).on("error",Gs,e).addTo(e._map),e.labels.set(r,n)}return n._mvtLabelStyle=o,n._mvtLabel=t,on(e._map,n,t),!0}async function wx(){let e=this.session,t=this.labelRevision=(this.labelRevision||0)+1;this.labelsReady=!1;let r=dx(this),o=this._map.getSize(),i=new Set,n=new Set,a=0,s,m,f,p;for(s of r){if(++a%128===0&&await ht(),!io(this,e)||this.labelRevision!==t)return;f=hx(this,s,o),!(!f||!s.allowOverlap&&!gx(f,i))&&(m=`${s.text}${s.icon||""}:${s.latlng.join(":")}`,n.add(m),vx(this,s,m)&&await ht())}for([m,p]of this.labels){if(!io(this,e)||this.labelRevision!==t)return;n.has(m)||(p.remove(),this.labels.delete(m),await ht())}this.labelsReady=!0}function Lx(e,t){let r=e.z-t.z;return r>=0?e.x>>r===t.x&&e.y>>r===t.y:t.x>>-r===e.x&&t.y>>-r===e.y}function bx(e,t){let r;for(r of e.tiles.values())if(r.needed&&!r.group&&Lx(r.coords,t.coords))return!0;return!1}function Mx(){let e,t;for([t,e]of this.tiles)e.needed||e.group&&bx(this,e)||(e.controller.abort(),this.tiles.delete(t),e.group&&this.retire(e.group).catch(qe.bind(null,this)))}async function Bx(e){let t=this.session;this.retiring.add(e);let r=0,o;for(o of e.getLayers()){if(this.session!==t)return;e.removeLayer(o),++r%8===0&&await ht()}e.remove(),this.retiring.delete(e)}function Tx(e,t){return e.distance-t.distance}function Px(){if(!this.session)return;let e=this._map.getCenter(),t=[],r,o;for(r of this.tiles.values())!r.needed||r.started||(o=this._map.project(e,r.coords.z).divideBy(256),r.distance=(r.coords.x-o.x)**2+(r.coords.y-o.y)**2,t.push(r));t.sort(Tx);for(r of t){if(this.inflight>=4)break;r.started=!0,this.inflight++,this.load(r)}}L();L();function Sx(e,t,r,o){let{pane:i}=Le.get(e),a={...Is(o,Ke(e)),pane:`${i}-${o.order}`,interactive:!1,smoothFactor:0},s=o.kind==="fill"?new d.Polygon(o.paths,{...a,stroke:!1,triangulated:!0}):new d.Polyline(o.paths,a);s.on("error",Gs,e),t.rendered.push({layer:s,kind:o.kind,entry:o.entry,properties:o.properties}),r.addLayer(s)}async function kx(e,t,r,o,i){let n,a=performance.now();for(n of o){for(;!io(e,i)&&e.session===i&&!t.controller.signal.aborted;)await ht(50);if(t.controller.signal.aborted||e.session!==i)return!1;Sx(e,t,r,n),performance.now()-a>8&&(await ht(),a=performance.now())}return!0}async function Cx(e){let{coords:t,controller:r}=e,o=this.session,{url:i,style:n,sourceId:a,maxZoom:s,maxNativeZoom:m}=Le.get(this),f=2**t.z,p=(t.x%f+f)%f,c;try{let l=d.Util.template(i,{z:t.z,x:p,y:t.y}),u=await fetch(l,{signal:r.signal});if(!u.ok)throw new Error(`Tile ${e.key}: HTTP ${u.status}`);let h=await u.arrayBuffer();if(r.signal.aborted)return;let x=++this.sequence,g=Promise.withResolvers();this.waiting.set(x,g),this.worker.postMessage({type:"vector",id:x,buffer:h,coords:t,style:n,source:a,maxZoom:s,zoom:Ke(this),mapZoom:t.z>=m?s:this._map.getZoom()},[h]);let y=await g.promise;if(r.signal.aborted||this.session!==o)return;if(c=new d.LayerGroup().addTo(this._map),e.rendered=[],!await kx(this,e,c,y.batches,o)){c.remove();return}e.group=c,e.labelCandidates=y.labels,this.fire("tileload",{coords:t,group:c}),this.prune(),this.refresh()}catch(l){c?.remove(),!r.signal.aborted&&this.session===o&&this.fire("error",{error:l})}finally{this.session===o&&(this.inflight--,this.pump())}}async function _x(e,t){let r=await Uy(t);typeof r.sprite=="string"&&(r.spriteSheet=await Ny(r.sprite));let{url:o,tileJSON:i,style:n,sourceId:a,minNativeZoom:s,maxNativeZoom:m,maxZoom:f,...p}=r;return d.Util.setOptions(e,p),r.pane=`mvt-${d.Util.stamp(e)}`,Le.set(e,r),Object.assign(e,{onAdd:ix,onRemove:nx,update:ax,updatePaint:lx,updateLabels:wx,prune:Mx,retire:Bx,pump:Px,load:Cx}),e}function Ex(e){let t=e._map;return t?.removeLayer(e),A.delete(e),t?.addLayer(e),e.fire("ready"),e}function Us(e,t){throw e.fire("error",{error:t}),t}function zx(e,t){A.set(e,"pending");let r=_x(e,t).then(Ex.bind(null,e)).catch(Us.bind(null,e));re.set(e,r),r.catch(Ye)}L();async function Ax(e,t){let r=await Xr(t);return e.options.archive=t,U.set(e,r),e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function Rx(e){let t,r;for(t of D.get(e).values())bo(e,t);if(he.get(e)?.pipelineCache.clear(),he.set(e,null),Rt.get(e)){for(r of Object.values(Rt.get(e).attributes))j(e,r.buffer);Rt.set(e,null)}}var Dr=new WeakMap;var pi=new WeakMap;var Ns={_3d:Tr,_added:we,_areas:Y,_bridgeMesh:oo,_bridges:ft,_cameraZIndexOffset:Fr,_countStatus:Mr,_cursor:Pr,_dem:Oe,_directories:Br,_etag:Ho,_fadeFrame:Dr,_fadeVersion:pi,_frame:st,_geojson:X,_header:ji,_inflight:Xe,_layers:F,_loadingTiles:fe,_nativeGPU:ue,_pointerEvents:Cr,_pruneAfter:Nt,_pruneVersion:Ti,_pruneWanted:Pi,_queued:eo,_rasterGeometry:Rt,_rasterProgram:he,_rasterTiles:D,_rasterVersion:_e,_rendererReady:ut,_roofRaster:K,_roofRasters:Li,_sceneOrigin:ie,_shadowMeshes:Gt,_shared:O,_size:ir,_terrain3D:pe,_terrainArchive:Ss,_terrainBaseY:kt,_terrainBounds:Xt,_terrainController:si,_terrainGrids:At,_terrainLoading:zr,_terrainOriginElevation:Je,_terrainPromise:Jt,_terrainReady:Be,_terrainRequest:Un,_terrainTiles:rt,_terrainZoom:ge,_tileZoom:ar,_tooltip:Re,_type:qt,_visibleMeshes:Ur,_wantedRasterTiles:or,_zoomLevel:ti,_zoomTransitions:de,_zoomView:Ze,camera:ee,container:Ae,control:Pt,eventMap:to,events:kr,group:Qa,header:U,highlightedFeature:nt,hoveredFeature:Se,kind:A,location:I,model:je,modelUrl:We,raycaster:ne,ready:re,renderer:v,root:M,scene:oe,terrainSource:ro,url:ae,walker:Ka};L();var Ox=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];var Dx=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function Ix(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.colorTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function Gx(e,t){if(K.get(e)&&j(e,K.get(e).texture.texture),K.set(e,null),de.get(e)){let i;for(i of de.get(e).keys())i.play()}de.set(e,null),Ze.set(e,null),se.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=v.get(e);r.canvas.remove(),Ix(r,e),te.delete(t);let o;for(o of Dx)Ns[o].delete(e)}function no(e,t){we.set(e,Promise.withResolvers()),Ae.get(e)&&(ni(e),d.DomEvent.off(Ae.get(e),Cr.get(e),e),Ae.set(e,null));let r,o,i,n;for(r of Y.get(e).values())Kr(e,r);Y.get(e).clear(),Re.get(e)?.remove(),Re.set(e,null),(ae.get(e)||X.get(e))&&es(e,!1);let a=O.get(e);if(a){if(q(M.get(e),null),F.get(a).delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",Vi,e),t.off("zoomstart",Zi,e),t.off("zoomanim",qi,e),t.off("zoomend",Hi,e),Gn(e),F.get(e).size){let s=F.get(e).values().next().value;for(o of Ox)n=Ns[o],n.set(s,n.get(e)),n.delete(e);for(i of F.get(s))O.set(i,s);te.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Vi,s),t.on("zoomstart",Zi,s),t.on("zoomanim",qi,s),t.on("zoomend",Hi,s),E(s)}else Gx(e,t);else E(a);O.set(e,null),v.set(e,null),oe.set(e,null),ee.set(e,null)}}function Ux(e,t){Rx(e),pe.set(e,null),no(e,t)}L();function Fs(e,t){A.set(e,"raster"),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},d.Util.setOptions(e,t),M.set(e,Ee()),Y.set(e,new Map),D.set(e,new Map),fe.set(e,0),we.set(e,Promise.withResolvers()),ae.set(e,new URL(t.url,document.baseURI).href),Br.set(e,new Map),re.set(e,Promise.resolve(e.options.archive||e).then(Ax.bind(null,e)).catch(Us.bind(null,e)))}var Nx=Object.freeze([]);function Fx(e){A.get(e)==="raster"&&ai(e,null)}function Wx(e,t){let r=Me.get(t);if(r?.layer===e){Me.delete(t),r.terrainController.abort(),r.terrainCache.clear(),t.fire("terrainchange"),no(e,t);return}si.get(e)?.abort(),zr.set(e,!1),Be.set(e,!1),t.eachLayer(Fx);let o,i,n,a;for(o of D.get(e).keys())Lo(e,o);me.get(t)===e&&me.delete(t);for(i of Object.values(t._layers))oi(i,null),Ko(i);t.fire("terrainchange"),rt.get(e).clear(),Je.set(e,0),Jt.set(e,null),he.get(e)&&he.get(e).pipelineCache.clear(),he.set(e,null),Oe.get(e)&&j(e,Oe.get(e).texture),Oe.set(e,null);for(n of At.get(e)?.values()||Nx)for(a of Object.values(n))j(e,a.buffer);At.set(e,null),ft.set(e,null),Ie(e,oo.get(e)),oo.set(e,null),no(e,t)}function jx(e,t){if(t.getTile!==void 0&&typeof t.getTile!="function")throw new Error("Streamed terrain requires a getTile function");let r=t.url,o={...t};delete o.url,Et(e,o),ro.set(e,r),rt.set(e,new Map),D.set(e,new Map),Be.set(e,!1),t.getTile&&Ps.set(e,!0),A.set(e,"terrain")}L();var Ws=Object.freeze({});var Kt=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];function $x(e){let t=Kt[e%Kt.length];return[[C(-.045,.045,-.85,-.25),.02,.62,Yt],[C(-.045,.045,.25,.85),.02,.62,Yt],[C(-.06,.06,-.5,.5),.4,.65,t],[C(-.32,.32,-.58,-.5),.95,1.02,Yt],[C(-.1,.1,.15,.4),.85,.92,Yt],[C(-.18,.18,-.12,.28),1,1.5,t],[C(-.11,.11,-.22,0),1.5,1.72,dt],[C(-.13,.13,-.23,.01),1.72,1.8,t],[C(-.25,-.15,-.5,-.05),1,1.25,dt],[C(.15,.25,-.5,-.05),1,1.25,dt],[C(-.2,-.08,0,.32),.3,1,Ht],[C(.08,.2,-.25,.07),.3,1,Ht]]}function Vx(e){let t=fs.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Kt[e%Kt.length]],t.push([C(-.16,-.02,-.07,.07),.08,.9,Ht],[C(.02,.16,-.07,.07),.08,.9,Ht],[C(-.3,-.2,-.05,.05),.76,1.42,dt],[C(.2,.3,-.05,.05),.76,1.42,dt]),t}function ci(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}var ao=[.12,.15,.18];var Ot=[.92,.93,.92];var li=[.05,.05,.05];var js=[1.9,1.85,1.7];var $s=[1.7,.06,.05];function ui(e,t,r){let o=e-t/2,i=e+t/2;return[[C(-1.25,1.25,o,i),.45,1.25,r],[C(-1.2,1.2,o+.15,i-.15),1.25,2.65,ao],[C(-1.25,1.25,o,i),2.65,3.1,Ot],[C(-1.15,-.85,o+1,o+2),0,.7,li],[C(.85,1.15,i-2,i-1),0,.7,li],[C(-.9,.9,o-.03,o),.8,1.05,js],[C(-.9,.9,i,i+.03),.8,1.05,$s]]}function Zx(e,t){return ui(0,12,ci(t))}function qx(e,t){let r=ci(t),o=[],i;for(i=0;i<5;i++)o.push(...ui((i-2)*6.5,6,r));return o}function Hx(e,t){let r=ci(t),o=[],i;for(i=0;i<5;i++)o.push(...ui((i-2)*15,14,r));return o}function Qt(e,t,r,o,...i){return[[C(e,t,r,o),...i],[C(-t,-e,r,o),...i]]}function Yx(e){let t=Kt[e%Kt.length];return[...Qt(.7,.92,-1.68,-1.02,0,.64,li),...Qt(.7,.92,1.02,1.68,0,.64,li),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[C(-.84,.84,-.75,1.6),.82,1.38,ao,C(-.7,.7,-.05,1.3)],[C(-.71,.71,-.06,1.31),1.38,1.46,t],...Qt(.38,.8,-2.3,-2.16,.56,.76,js),[C(-.78,.78,2.16,2.3),.6,.76,$s]]}var Pf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function Xx(){let e=[],t;for(t=0;t<12;t++)e.push(...Qt(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function Jx(){return[[Pf,0,.8,[.1,.16,.26]],[Pf,.8,1.4,Ot],[C(-5,5,-18,26),1.4,3.7,ao,C(-4.6,4.6,-17.4,25.6)],...Qt(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[C(-4.8,4.8,-17.8,25.8),3.7,3.9,Ot],...Xx(),...Qt(4.65,4.8,-13.6,25.8,3.9,4.8,Ot),[C(-4.8,4.8,25.65,25.8),3.9,4.8,Ot],[C(-2.2,2.2,-17.6,-14),3.9,4.7,Ot],[C(-2.2,2.2,-17.6,-14),4.7,5.5,ao],[C(-2.5,2.5,-18,-13.6),5.5,5.7,Ot],[C(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[C(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[C(-.1,.1,-15.9,-15.7),5.7,6.6,Ot],[C(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var Kx={bicycle:{side:.4,model:$x},pedestrian:{side:.3,model:Vx},bus:{side:1.5,model:Zx},tram:{side:0,model:qx},metro:{side:0,model:Hx},car:{side:1.8,model:Yx,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:Jx,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var Qx=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function e0({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
3
5
  `:""}Departure ${e.departure} ${e.timetable.timeZone}`),e.description&&(r+=`${r?`
4
- `:""}${e.description}`),t.textContent=r,t}function Ms(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),Zo(e.layer,e.status),e.update()}function py(e){dt.set(e.layer,e),e.ready&&Ms(e)}function $t(e,t){t&&(Je.get(e.layer)?.mesh===t&&(Mt(e.layer,null),be.set(e.layer,null),bt(e.layer,null)),_e(e.layer,t))}function bs(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function cy(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),$t(e,e.mesh),$t(e,e.route),e.mesh=e.route=null,dt.delete(e.layer),bs(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function ly(e){e.ready=!0,e.layer._map&&Ms(e)}function Ls(e){let t=Xo.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function uy(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}var ti=new Map;function sf(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function dy(e,t){return e-t}function hy(e,{timeZone:t,duration:r,services:o}){let i=e instanceof Date?e:new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=ti.get(t);n||(n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),ti.size>=32&&ti.delete(ti.keys().next().value),ti.set(t,n));let a={},s,m,f,p,c,l,u;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let d=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,y=((Math.floor(Date.UTC(a.year,a.month-1,a.day)/864e5)+4)%7+7)%7,g=[];for({from:m,to:f,every:p=1/0,months:c,weekdays:l}of o)if(!(c?.includes(a.month)===!1||l?.includes(y)===!1))for(u=sf(m);u<=sf(f);u+=p)g.push(u);g.sort(dy);let x=[];for(u of g)d>=u&&d<u+r&&x.push({id:`${a.year}-${a.month}-${a.day}-${u}`,departure:`${String(Math.floor(u/60)).padStart(2,"0")}:${String(u%60).padStart(2,"0")}`,progress:(d-u)/r});return x}function gy(e,t,r){let o=[],i,n,a,s,m,f,p,c;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(m of hy(e,a))o.push({id:`${i}-${m.id}`,lane:n,distance:m.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:m.departure}});else for(f=e/1e3*r,p=n.offsets||=uy(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+f)%n.length,speed:r,properties:n.properties});return o}function Bs(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var yy=Object.freeze({unlit:!0});function xy(e,t,r,o,i,n,a,s,m,f,p,c,l,u){let d=o[0]+n*f,y=o[1]+a*f,g=o[2]+(i[2]-o[2])*f+.4,x=o[0]+n*p,v=o[1]+a*p,P=o[2]+(i[2]-o[2])*p+.4,B;for(B=0;B<6;B++)B===0||B===3?e.push(d-s,g,y-m):B===1?e.push(d+s,g,y+m):B===5?e.push(x-s,P,v-m):e.push(x+s,P,v+m),t.push(0,1,0),r.push(c,l,u)}function vy(e,t,r,o,i,n,a,s,m){let f=o[n-1],p=o[n],c=p[0]-f[0],l=p[1]-f[1],u=i[n]-i[n-1];if(!u)return;let d=-l/u*2.5,y=c/u*2.5,g,x,v;for(g=Math.floor(i[n-1]/30)*30;g<i[n];g+=30)x=Math.max(0,(g-i[n-1])/u),v=Math.min(1,(g+18-i[n-1])/u),!(v<=x)&&xy(e,t,r,f,p,c,l,d,y,x,v,a,s,m)}function wy(e){let t=[],r=[],o=[],i,n,a,s,m,f,p,c,l;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,m=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,f=m===null?.08:(m>>16&255)/255,p=m===null?.7:(m>>8&255)/255,c=m===null?.85:(m&255)/255,l=1;l<i.length;l++)vy(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function Ts(e,t,r,o,i=0){let n=er(e.layer,t,o,i);return n.extras.featureFaces=r,n}function My(e){e.route=Ts(e,wy(e.lanes),[],yy)}function Ps(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let m=[];for(i of e.lanes)for([n,a,s]of i.points)m.push(n-t,s,a-t,n+t,s+r,a+t);let f={attributes:{position:{data:m}}};Be(f),e.mesh.geometry.bounds=f.bounds}function by(e){let{trips:t,model:r,vertices:o}=e;if($t(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,m;for(a=0;a<t.length;a++){s=t[a];for(m of ei(r(a,s.properties)).color)i.push(m);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let f=i.length/3;e.mesh=Ts(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,ys,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,Ps(e)}function Ui(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function Ly(e,t){let r,o,i,n=0;for(r of e.lanes)n+=r.points.length;let a=new Float32Array(n*4),s=0;for(r of e.lanes)for(r.start=s/4,o=0;o<r.points.length;o++)i=r.points[o],a[s++]=i[0],a[s++]=i[1],a[s++]=i[2],a[s++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=Ui(t,a),e.lanesDirty=!1}function By(e){let{device:t}=w.get(e.layer);if(e.gpu?.device!==t){bs(e);let c=new Float32Array(e.template.position.length+e.template.normal.length);c.set(e.template.position),c.set(e.template.normal,e.template.position.length),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:Ui(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&Ly(e,t);let n=new Float32Array(e.trips.length*4),a=new Uint32Array(n.buffer);for(r=0;r<e.trips.length;r++)o=e.trips[r],a[r*4]=o.lane.start,a[r*4+1]=o.lane.points.length,n[r*4+2]=o.distance,n[r*4+3]=o.speed,e.mesh.extras.featureFaces[r].properties=o.properties;e.gpu.vehicles?.size>=n.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=Ui(t,n));let{position:s,normal:m}=e.mesh.geometry.attributes,f=[],p;for(i=0;i<6;i++)p=i===0?e.gpu.params:i===1?e.gpu.template:i===2?e.gpu.points:i===3?e.gpu.vehicles:i===4?s.buffer:m.buffer,f.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:f})}function Ty(e,t){return t?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:`${e.vehicle}: loading\u2026`:`${e.vehicle}: select a valid simulation date`}function Py(e,t,r,o){let i;try{o?e.trips=gy(t,e.lanes,e.velocity):e.trips.length=0,i=Ty(e,o)}catch(f){Bs(e,f);return}e.rebasedAt=r,e.nextCheck=r+1e3;let n="",a;for(a of e.trips)n+=`${n?",":""}${a.id}`;let s=e.outline&&!e.route&&e.lanes.length,m=n!==e.tripsKey||!!s;return s&&My(e),n!==e.tripsKey&&(by(e),e.tripsKey=n),e.mesh&&By(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function Cy(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function Sy(e){e.litAt=performance.now();let t=[],r=e.position||={},o,i,n,a,s,m,f,p,c,l;for(o of e.trips){({x:i,y:n,z:a,dx:s,dz:m}=yo(e,o,r));for(l of e.lights)[f,p,c]=l.position,t.push({...l,position:[i-f*m-c*s,n+p,a+f*s-c*m]})}e.mesh.extras.lights=t}function Ey(e,t,r){e.mesh&&(Cy(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&Sy(e))}function ky(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!w.get(e.layer)){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=Ls(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=Py(e,r,o,i),n===void 0)||(Ey(e,o,t),(e.mesh||n)&&_(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function _y(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}var Iy=Object.freeze([]);function zy({features:e=Iy}){let t=[],r,o,i,n,a,s,m,f;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,f=0;f<(i?i.length:1);f++){n=i?i[f]:r.coordinates,a=[];for([s,m]of n)a.push([m,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}X();b();function Ay(e){let t=ae.get(e);return ve.get(t)&&t}function Cs(e){let{layer:t,lanes:r}=e,o=Ay(t._map),i=L.get(t).position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??ct(t._map,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function Oy(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(D.get(t)),n=Math.cos(D.get(t).lat*C),a,s,m,f,p;for(a of r){a.points=[];for([s,m]of a.latlngs)f=o.project(new h.LatLng(s,m)),a.points.push([(f.x-i.x)*n,-(f.y-i.y)*n,0]);for(a.lengths=[0],p=1;p<a.points.length;p++)a.lengths.push(a.lengths[p-1]+Math.hypot(a.points[p][0]-a.points[p-1][0],a.points[p][1]-a.points[p-1][1]));a.length=a.lengths.at(-1)}Cs(e),$t(e,e.route),e.route=null,e.tripsKey=null}function Dy(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=zy(r),Oy(e),e.frame||e.tick()}}function Gy(e,t,r){!t.aborted&&r.name!=="AbortError"&&Bs(e,r)}function Ry(e){let{time:t}=Ls(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;_y(e,t,r).then(Dy.bind(null,e,r),Gy.bind(null,e,r))}function Uy(e,t){t?.layer&&!Pt.get(t.layer)?.time||(cancelAnimationFrame(e.frame),Ry(e),e.tick())}function Fy(e){e.lanes.length&&(Cs(e),$t(e,e.route),e.route=null,e.mesh&&Ps(e),e.frame||e.tick())}function Ny(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=ys){let{model:s,lights:m,side:f}=sy[r];o??=f,Lt(e,{tooltip:fy,nightLight:!!m,...a});let p=h.DomUtil.create("small","traffic-status");p.style.cssText="flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;",p.title=r,p.textContent=`${r}: loading\u2026`;let c=ei(s(0)),l=c.position.length,u=l/3,d=new ArrayBuffer(16),y=new Float32Array(d),g=new Uint32Array(d),x={layer:e,url:t,model:s,lights:m,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:l,vertices:u,params:d,paramFloats:y,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};x.shader=my,x.tick=ky.bind(null,x),x.update=Uy.bind(null,x),x.terrain=Fy.bind(null,x),dt.set(e,x),e.on("ready",ly.bind(null,x)),e.on("add",py.bind(null,x)),e.on("remove",cy.bind(null,x))}b();b();b();function jy(){this.keys.clear()}var Fi={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};b();da();or();H();W();function Wy(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.dragX=e.clientX,this.dragY=e.clientY,this.dragging=!0,t.getContainer().setPointerCapture(e.pointerId)}else this.dragging&&e.type==="pointermove"?(ze(t,Math.max(20,Math.min(85,k(t)-(e.clientY-this.dragY)*.2)),S(t)-(e.clientX-this.dragX)*.25),this.dragX=e.clientX,this.dragY=e.clientY):this.dragging=!1}var Ni=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];X();function St(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=D.get(t),a=L.get(t),s=i.project(n),m=Math.cos(n.lat*C),f=i.project(r.latlng),p=ct(o,r.latlng)||0;return e[0]=(f.x-s.x)*m,e[1]=p+(r.height??0)-a.position[1],e[2]=-(f.y-s.y)*m,e}function Ss(){let[e,t,r]=St.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,m,f,p;for(a=0;a<Ni.length;a++)[,s,m,f]=Ni[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+m,p.position[2]=r-s*n,p.rotation[0]=f*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;_(this.layer)}function Zy(){this.meshes&&Ss.call(this)}function Es(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,h.DomEvent.off(document,"keydown keyup",this.onKey),h.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)for(t of this.meshes)_e(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){h.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),kr(e,this.saved.pitch),this.saved=null}}function $y(e){if(e.type==="keyup"&&e.code==="Space"&&this.keys.delete("Space"),!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}!Fi[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}X();b();var Vy=["dragging","keyboard","doubleClickZoom","boxZoom"];H();W();da();function ks(e){return Math.atan2(Math.sin(e),Math.cos(e))}function qy(e,t){return e===t||Ut.get(e)==="terrain"||Ut.get(e)==="traffic"}function Hy(e){let t=te.get(this.layer),r=St.call(this,this.local),o=L.get(this.layer),i=o.position[0]+r[0]*o.scale[0],n=o.position[1]+r[1]*o.scale[1],a=o.position[2]+r[2]*o.scale[2];if(n>e||this.verticalSpeed>0)return;we(ee.get(this.layer)),t.origin[0]=i,t.origin[1]=e+.01,t.origin[2]=a,t.direction[0]=0,t.direction[1]=-1,t.direction[2]=0,t.meshes.length=0;let s,m;for(s of U.get(z.get(this.layer)))qy(s,this.layer)||I.get(s)==="raster"||s.options.nightLight||At(L.get(s),jn,t.meshes);for(m of Nn(t,t.meshes)){if(m.point[1]<n-.001)break;this.state.height+=(m.point[1]-n)/o.scale[1],this.verticalSpeed=0;break}t.meshes.length=0}b();X();var mf=new WeakMap;function Yy(e,t,r){let o,i,n;for(o=Math.floor(Math.min(t[0],t[3],t[6])/8);o<=Math.floor(Math.max(t[0],t[3],t[6])/8);o++)for(i=Math.floor(Math.min(t[2],t[5],t[8])/8);i<=Math.floor(Math.max(t[2],t[5],t[8])/8);i++)n=o+","+i,e.has(n)||e.set(n,[]),e.get(n).push(r)}function _s(e){let t=mf.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:{data:o},index:i,normal:n,uv:a,instanceOffset:s}=e.geometry.attributes,m=i?i.count:o.length/3,f=m*(s?.count??1),p=[],c=[],l=new Map,u=[0,0,0],d=[0,0,0],y=[0,0,0],g=[],x,v,P,B,T,O,K,G,N,J,pe,ye,Qe,Le,ft,Ge=-1/0;for(x=0;x<f;x+=3)v=i?i.data[x%m]:x%m,!(e.program.nightLight&&a&&a.data[v*2]<=2)&&(Fn(e,x,u,d,y),g[0]=r[0]*u[0]+r[4]*u[1]+r[8]*u[2]+r[12],g[1]=r[1]*u[0]+r[5]*u[1]+r[9]*u[2]+r[13],g[2]=r[2]*u[0]+r[6]*u[1]+r[10]*u[2]+r[14],g[3]=r[0]*d[0]+r[4]*d[1]+r[8]*d[2]+r[12],g[4]=r[1]*d[0]+r[5]*d[1]+r[9]*d[2]+r[13],g[5]=r[2]*d[0]+r[6]*d[1]+r[10]*d[2]+r[14],g[6]=r[0]*y[0]+r[4]*y[1]+r[8]*y[2]+r[12],g[7]=r[1]*y[0]+r[5]*y[1]+r[9]*y[2]+r[13],g[8]=r[2]*y[0]+r[6]*y[1]+r[10]*y[2]+r[14],B=g[3]-g[0],T=g[4]-g[1],O=g[5]-g[2],K=g[6]-g[0],G=g[7]-g[1],N=g[8]-g[2],J=T*N-O*G,pe=B*G-T*K,ye=O*K-B*N,Qe=Math.hypot(J,ye,pe),!(!Qe||Math.abs(ye)>.9*Qe)&&(n&&(P=v*3,(r[0]*n.data[P]+r[4]*n.data[P+1]+r[8]*n.data[P+2])*J+(r[2]*n.data[P]+r[6]*n.data[P+1]+r[10]*n.data[P+2])*pe<0&&(J=-J,pe=-pe)),Le=Math.hypot(J,pe),ft=c.length/2,p.push(...g),Ge=Math.max(Ge,g[0],g[3],g[6]),c.push(J/Le,pe/Le),Yy(l,g,ft)));return t={tri:Float32Array.from(p),nrm:Float32Array.from(c),cells:l,maxX:Ge,origin:[r[12],r[13],r[14]]},mf.set(e.geometry,t),t}function Is(e,t,r,o,i,n,a){let s=t*9,m=e[s+3]-e[s],f=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],l=e[s+7]-e[s+1],u=e[s+8]-e[s+2],d=-a*l,y=a*c-n*u,g=n*l,x=m*d+f*y+p*g;if(Math.abs(x)<1e-9)return-1;let v=r-e[s],P=o-e[s+1],B=i-e[s+2],T=(v*d+P*y+B*g)/x;if(T<0||T>1)return-1;let O=P*p-B*f,K=B*m-v*p,G=v*f-P*m,N=(n*O+a*G)/x;return N<0||T+N>1?-1:(c*O+l*K+u*G)/x}function Xy(e,t,r,o,i,n){let{dx:a,dz:s,seen:m}=r,f,p,c;for(f of e)if(!(m.has(f)||a*t.nrm[f*2]+s*t.nrm[f*2+1]>=0))for(m.add(f),p=.4;p<2;p+=1.1)c=Is(t.tri,f,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[f*2],r.normal[1]=t.nrm[f*2+1])}function Ky(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||Be(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:m,dz:f,reach:p}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+p)return;let c=_s(e),l=n-r[12]+c.origin[0],u=a-r[13]+c.origin[1],d=s-r[14]+c.origin[2];t.seen.clear();let g,x,v;for(g=Math.floor(Math.min(l,l+m*p)/8);g<=Math.floor(Math.max(l,l+m*p)/8);g++)for(x=Math.floor(Math.min(d,d+f*p)/8);x<=Math.floor(Math.max(d,d+f*p)/8);x++)v=c.cells.get(g+","+x),v&&Xy(v,c,t,l,u,d)}function zs(e,t,r,o,i,n,a,s){let m=dt.get(e);if(!m?.mesh||!m.trips.length)return!1;let f=m.collisionBounds;if(!f){f=m.collisionBounds={radius:0,minY:1/0,maxY:-1/0};let J,pe,ye,Qe;for(J=0;J<m.template.position.length;J+=3)pe=m.template.position[J],ye=m.template.position[J+1],Qe=m.template.position[J+2],f.radius=Math.max(f.radius,Math.hypot(pe,Qe)),f.minY=Math.min(f.minY,ye),f.maxY=Math.max(f.maxY,ye)}let p=L.get(e),c=m.position||={},l=Math.max(p.scale[0],p.scale[1],p.scale[2]),u=f.radius*l+.35,d,y,g,x,v,P,B,T,O,K,G,N;for(d of m.trips)if({x:G,y:O,z:N}=yo(m,d,c),O=p.position[1]+(O+f.minY)*p.scale[1],K=p.position[1]+(c.y+f.maxY)*p.scale[1],!(O>r+1.7*l||K<r+.2*l)&&(G=p.position[0]+G*p.scale[0],N=p.position[2]+N*p.scale[2],y=(G-t)*i+(N-o)*n,g=Math.max(0,Math.min(a,y)),x=t+g*i-G,v=o+g*n-N,P=x*x+v*v,!(P>=u*u))){if(a===0){s.found=!0,T=Math.hypot(t-G,o-N),s.normal[0]=T?(t-G)/T:0,s.normal[1]=T?(o-N)/T:0;continue}B=Math.max(0,y-Math.sqrt(u*u-P)),!(B>a||B>=s.best)&&(s.best=B,s.found=!0,T=Math.hypot(t+B*i-G,o+B*n-N),T<1e-6?(s.normal[0]=-i,s.normal[1]=-n):(s.normal[0]=(t+B*i-G)/T,s.normal[1]=(o+B*n-N)/T))}return s.found}function Jy(e,t,r,o,i,n,a,s){we(ee.get(e)),s.x=t,s.y=r,s.z=o,s.dx=i,s.dz=n,s.reach=a,s.best=a,s.found=!1;let m;for(m of U.get(z.get(e)))if(!(m===e||I.get(m)==="terrain")){if(I.get(m)==="traffic"){zs(m,t,r,o,i,n,a,s);continue}At(L.get(m),Ky,s)}return s.found?s.normal:null}function ff(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&Jy(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function Qy(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=L.get(this.layer),s=Math.sin(this.state.heading)*r,m=Math.cos(this.state.heading)*r,f=St.call(this,this.local),p;for(p=0;p<f.length;p++)f[p]=n[p]+a[p]*f[p];let c=ff.call(this,s,m,f);if(c){let l=s*c[0]-m*c[1];s-=l*c[0],m+=l*c[1],ff.call(this,s,m,f)&&(s=m=0)}this.state.latlng=new h.LatLng(o+m/111320,i+s/(111320*Math.cos(o*C))),this.state.phase+=Math.hypot(s,m)/1.6*Math.PI}function ex(e){return this.keys.has("Space")?(this.verticalSpeed=6,this.state.height+=this.verticalSpeed*e,!0):!this.verticalSpeed&&!this.state.height?!1:(this.state.height=Math.max(0,this.state.height+this.verticalSpeed*e-9.81*e*e/2),this.verticalSpeed=this.state.height>0?this.verticalSpeed-9.81*e:0,!0)}qr();X();W();or();H();function tx(e,t,r){let o=this.layer._map;if(e||t){let n=S(o)*C,a=ks(-this.state.heading-n);Math.abs(a)>.001&&ze(o,k(o),(n+a*Math.min(1,r*4))*He),o.setView(this.state.latlng,o.getZoom(),{animate:!1})}let i=e?.9:0;return Math.abs(this.swing-i)>.001?(this.swing+=(i-this.swing)*Math.min(1,r*10),!0):!1}b();function pf(e,t,r,o,i,n){let a=e.geometry;if(!e.visible||!a?.attributes?.position?.data||e.program?.depthTest===!1)return!1;a.bounds||Be(a);let s=a.bounds,m=e.worldMatrix,f=s.center,p=m[0]*f[0]+m[4]*f[1]+m[8]*f[2]+m[12],c=m[1]*f[0]+m[5]*f[1]+m[9]*f[2]+m[13],l=m[2]*f[0]+m[6]*f[1]+m[10]*f[2]+m[14],u=s.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));if(Math.hypot(p-t,c-r,l-o)>u)return!1;let d=_s(e),y=Math.floor(d.maxX/8);if(t>=d.maxX)return!1;let g=Math.floor(o/8),x=n;x.length=0,i.clear();let v,P,B,T;for(v=Math.floor(t/8);v<=y;v++)if(P=d.cells.get(`${v},${g}`),!!P)for(B of P)i.has(B)||(i.add(B),T=Is(d.tri,B,t,r,o,1,0),T>1e-4&&x.push(T));for(v=1;v<x.length;v++){T=x[v];let G=v-1;for(;G>=0&&x[G]>T;)x[G+1]=x[G--];x[G+1]=T}let O=0,K=-1/0;for(T of x)T-K>1e-4&&O++,K=T;return O%2===1}function cf(e){let{layer:t,local:r,hitData:o}=e,i=z.get(t);if(!i||!U.get(i))return!1;we(ee.get(t));let n=L.get(t),a=St.call(e,r),s=n.position[0]+a[0]*n.scale[0],m=n.position[1]+a[1]*n.scale[1],f=n.position[2]+a[2]*n.scale[2],p=U.get(i),c,l,u;for(c of p){if(c===t||I.get(c)==="terrain")continue;if(I.get(c)==="traffic"){if(o.best=0,o.found=!1,zs(c,s,m,f,0,0,0,o))return!0;continue}let d=o.nodes;for(d.length=0,L.get(c)&&d.push(L.get(c));d.length;)if(l=d.pop(),!!l.visible){if(l.geometry&&(pf(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||pf(l,s,m+1.35*n.scale[1],f,o.seen,o.intersections)))return!0;for(u of l.children)d.push(u)}}return!1}function As(){if(!this.saved||!cf(this))return!1;let e=this.layer._map,t=this.state.latlng,r=this.state.height,o,i,n;for(o=.5;o<=20;o+=.5)for(i=0;i<Math.PI*2;i+=Math.PI/4)if(n=new h.LatLng(t.lat+Math.cos(i)*o/111320,t.lng+Math.sin(i)*o/(111320*Math.cos(t.lat*Math.PI/180))),this.state.latlng=n,this.state.height=0,!cf(this))return this.verticalSpeed=0,e.setView(n,e.getZoom(),{animate:!1}),!0;return this.state.latlng=t,this.state.height=r,!1}function rx(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!w.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,As.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of Ni)this.meshes.push(er(t,ei(xs[i])));o=!0}let a=L.get(t).position[1]+St.call(this,this.local)[1]*L.get(t).scale[1];ex.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=Fi[n]?.[0]||0,m+=Fi[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),m&&(this.state.heading=ks(this.state.heading+m*2.5*r),o=!0),s&&(Qy.call(this,s,r),o=!0),o&&Hy.call(this,a),tx.call(this,s,m,r)&&(o=!0),o&&Ss.call(this)}function Os(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter(),this.state.height=this.verticalSpeed=0;let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*Xt*Math.cos(this.state.latlng.lat*C)/256)),o;this.saved={zoom:e.getZoom(),pitch:k(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Vy)e[o]?.enabled()&&this.saved.handlers.push(o);for(o of this.saved.handlers)e[o].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-S(e)*C,e.setView(this.state.latlng,r,{animate:!1}),kr(e,75),As.call(this),h.DomEvent.on(document,"keydown keyup",this.onKey),h.DomEvent.on(window,"blur",this.onBlur),h.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.nextClearanceCheck=0,this.frame=requestAnimationFrame(this.step)}function ox(){this.saved?Es.call(this):Os.call(this)}function ix(e,{speed:t,distance:r,...o}){let i=new h.Layer;Ut.set(i,"walk"),Lt(i,o);let n=new Set,a=h.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=h.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let m=h.DomUtil.create("small","",a);m.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",m.textContent="W/S: run \xB7 A/D: turn \xB7 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",h.DomEvent.disableClickPropagation(a);let f={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:m,meshes:null,frame:null,last:void 0,nextClearanceCheck:0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker={latlng:null,heading:0,phase:0,height:0}};ms.set(i,f.state),f.step=rx.bind(f),f.onKey=$y.bind(f),f.onBlur=jy.bind(f),f.onPointer=Wy.bind(f),f.onTerrain=Zy.bind(f),f.start=Os.bind(f),f.stop=Es.bind(f),f.toggle=ox.bind(f),e._walk=f,h.DomEvent.on(s,"click",f.toggle)}function nx(e){h.Util.setOptions(this,e),ix(this,this.options)}function ax(e){let t=It.get(e);if(t?.control&&t.control!==this)throw this._map=null,new Error("Only one Walk control can be active per map");return t||(t={control:null,hitData:{x:0,y:0,z:0,dx:0,dz:0,reach:0,best:0,found:!1,seen:new Set,intersections:[],nodes:[],normal:[0,0]},local:[0,0,0]},It.set(e,t)),t.control=this,t.local.fill(0),t.hitData.seen.clear(),t.hitData.normal.fill(0),this._walk.hitData=t.hitData,this._walk.local=t.local,this._walk.layer.addTo(e),this._walk.container}function sx(e){let t=It.get(e);t?.control===this&&(this._walk.stop(),this._walk.layer.remove(),t.control=null,t.hitData.seen.clear(),this._walk.hitData=null,this._walk.local=null)}h.Control.Walk=h.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:nx,onAdd:ax,onRemove:sx});b();var Ds=new WeakMap;var Gs=new WeakMap;var Rs=new WeakMap;function mx(){return{}}function fx(e){return this._project(),this._parts=this._rings,Ds.get(this).call(this,e)}function px(){return this._project(),Gs.get(this).call(this)}function cx(){Rs.get(this).call(this),this._container.remove()}var Vt=new Map;var Et={value:null};function lx(e){Vt.delete(e),xr.set(e,null),!Vt.size&&Et.value!==null&&(cancelAnimationFrame(Et.value),Et.value=null)}function ux(){Et.value=null;let e=[...Vt],t,r;for([t,r]of e)Vt.get(t)===r&&(Vt.delete(t),xr.set(t,null),Us.call(t))}function dx(e){Vo.set(e,(Vo.get(e)||0)+1),Vt.set(e,Vo.get(e)),Et.value===null&&(Et.value=requestAnimationFrame(ux)),xr.set(e,Et.value)}function Us(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i,n;for(i in this._tiles)Object.hasOwn(this._tiles,i)&&(n=this._tiles[i],!(!n.current||!n.loaded)&&(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?r=!0:n.active||(this._onOpaqueTile(n),n.active=!0,o=!0)));o&&!this._noPrune&&this._pruneTiles(),xt(this),lx(e),r&&dx(e)}var Fs=[];function hx(){Fs.shift()?.fire("load")}function gx(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(Fs.push(this),queueMicrotask(hx))}function yx(){return xt(this),this}function xx(){this instanceof h.Polyline||this instanceof h.CircleMarker?(this.beforeAdd=this._updateBounds=at,this.redraw=yx,I.set(this,"path"),this instanceof h.Polyline&&(Ds.set(this,this.closestLayerPoint),this.closestLayerPoint=fx),this instanceof h.Circle&&(Gs.set(this,this.getBounds),this.getBounds=px)):this instanceof h.GridLayer?(Rs.set(this,this._initContainer),this._initContainer=cx,this._updateOpacity=Us):this instanceof h.ImageOverlay&&!(this instanceof h.VideoOverlay)&&!(this instanceof h.SVGOverlay)&&(I.set(this,"image"),this._reset=xt)}b();function vx(){jr.get(this).off(yr.get(this),this),jr.set(this,null),yr.set(this,null)}function wx(e,t){switch(I.get(e)){case"3d":return us(e,t);case"raster":return rg(e,t);case"terrain":return zg(e,t);case"image":return gx.call(e,t);case"time":return $g.call(e,t)}}function Mx(e){if(!e._map)return;let t;for(t of V.get(e).values())Rr(e,t);V.get(e).clear(),Ur(e)}function bx(e){let t={};return oe.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=Ur.bind(null,e)),(q.get(e)||oe.get(e))&&(t.terrainchange=Mx.bind(null,e)),t}b();function Lx(e){return!cr.get(e)&&(e instanceof h.GridLayer||e instanceof h.Polyline||e instanceof h.CircleMarker||e instanceof h.Marker&&!(e.options.icon instanceof h.DivIcon)||e instanceof h.ImageOverlay&&!(e instanceof h.VideoOverlay)&&!(e instanceof h.SVGOverlay))}function Bx(e){let t=Lx(this);t&&((this instanceof h.GridLayer||this instanceof h.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof h.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target;r.hasLayer(this)&&(I.get(this)?(this._map=r,this._zoomAnimated=r._zoomAnimated,I.get(this)!=="pending"&&I.get(this)!=="time"&&(yr.set(this,I.get(this)==="raster"?Kh(this):cr.get(this)?bx(this):mx()),jr.set(this,r),r.on(yr.get(this),this),this.once("remove",vx,this)),wx(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):br.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&qn(this,e.target))}b();var Ns=[];var js={value:Promise.resolve()};function Tx(e,t){q.set(e,!0),Lt(e,t)}function Px(e,t,r){if(!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||r>32e6||!Number.isSafeInteger(t+r)||e.size!==void 0&&t+r>e.size)throw new Error("Invalid COG byte range")}function Cx(e,t,r,o){if(!t||Number(t[1])!==r||Number(t[2])!==r+o-1||!Number.isSafeInteger(Number(t[3]))||Number(t[3])<r+o||(e.containerSize??e.size)!==void 0&&(e.containerSize??e.size)!==Number(t[3]))throw new Error("Invalid COG range response")}function Sx(e){return e.status!==200||Number(e.headers.get("Content-Length"))>32e6}function Ex(e,t,r,o){let i=t.headers.get("ETag");if(e.etag&&e.etag!==i)throw new Error("COG changed; recreate the layer");i&&(e.etag=i);let n=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(t.headers.get("Content-Range")||"");if(t.status===206)Cx(e,n,r,o),e.baseOffset===void 0&&(e.size=Number(n[3]));else if(Sx(t))throw new Error("COG server must support byte ranges for files over 32 MB")}async function kx(e,t){let r=e.body.getReader(),o=[],i=0,n;try{for(;!(n=await r.read()).done;){if(i+=n.value.byteLength,i>(e.status===206?t:32e6))throw await r.cancel(),new Error("Oversized COG response");o.push(n.value)}}finally{r.releaseLock()}let a=new Uint8Array(i),s=0,m;for(m of o)a.set(m,s),s+=m.length;return a}async function $e(e,t,r,o){if(o?.throwIfAborted(),Px(e,t,r),e.full)return e.full.slice(t,t+r);let i=(e.baseOffset||0)+t,n=await fetch(e.url,{headers:{Range:`bytes=${i}-${i+r-1}`},signal:o});if(!n.ok)throw new Error(`Unable to read COG: HTTP ${n.status}`);Ex(e,n,i,r);let a=await kx(n,r);if(n.status===200){if(e.baseOffset===void 0)e.size=a.byteLength;else if(a.byteLength!==e.containerSize)throw new Error("Truncated PMTiles COG container");e.full=e.baseOffset===void 0?a.buffer:a.slice(e.baseOffset,e.baseOffset+e.size)}let s=n.status===200?e.full.slice(t,t+r):a.buffer;if(s.byteLength!==r)throw new Error("Truncated COG byte range");return s}var _x=[256,257,258,259,262,277,284,317,322,323,324,325,339,33550,33922,34735];async function Ix(e,t,r,o,i){let n=t.getUint16(r*12+2,i),a=n===3?2:n===4?4:n===12?8:0,s=t.getUint32(r*12+4,i);if(!a||!s||s>1048576)throw new Error(`Unsupported COG tag ${o}`);let m=a*s<=4?new DataView(t.buffer,r*12+8,4):new DataView(await $e(e,t.getUint32(r*12+8,i),a*s)),f=[],p;for(p=0;p<s;p++)f.push(n===3?m.getUint16(p*a,i):n===4?m.getUint32(p*a,i):m.getFloat64(p*a,i));return f}async function zx(e,t){let r=e.little,o=new DataView(await $e(e,t,2)).getUint16(0,r);if(!o||o>128)throw new Error("Invalid COG directory size");let i=new DataView(await $e(e,t+2,o*12+4)),n=new Map,a,s;for(a=0;a<o;a++){if(s=i.getUint16(a*12,r),s===42113)throw new Error("COG nodata tags are not supported; export complete tiles");if(s===34264)throw new Error("COG affine transformation matrices are not supported");if(_x.includes(s)){if(n.has(s))throw new Error("Duplicate COG tag");n.set(s,await Ix(e,i,a,s,r))}}return{tags:n,next:i.getUint32(o*12,r)}}function Ax(e,t,r){return!!t&&!!r&&t%256===0&&r%256===0&&e.get(322)?.[0]===256&&e.get(323)?.[0]===256&&(e.get(259)?.[0]===1||e.get(259)?.[0]===8)&&(e.get(284)?.[0]??1)===1&&(e.get(317)?.[0]??1)===1}function Ox(e,t,r,o,i,n,a){return i?e.get(262)?.[0]===1:(t===3||t===4)&&r?.length===t&&n&&a&&e.get(262)?.[0]===2}function Dx(e){let t=e.get(256)?.[0],r=e.get(257)?.[0],o=e.get(277)?.[0]??1,i=e.get(258),n=e.get(339)||[1],a=!0,s=!0,m=!0,f;for(f of i||[])a&&=f===8;for(f of n)s&&=f===1,m&&=f===3;let p=o===1&&i?.length===1&&i[0]===32&&m;if(!Ax(e,t,r)||!Ox(e,o,i,n,p,a,s))throw new Error("Unsupported COG profile: expected tiled 256px RGB(A) Uint8 or Float32, DEFLATE without predictor");return{width:t,height:r,samples:o,elevation:p}}function Gx(e){let t=!1,r=!1,o;if(e)for(o=4;o<e.length;o+=4)e[o+1]!==0||e[o+2]!==1||(e[o]===3072&&e[o+3]===3857&&(t=!0),e[o]===1025&&e[o+3]===1&&(r=!0));return t&&r}function lf(e){let t;for(t of e||[])if(!Number.isFinite(t))return!1;return!0}function Rx(e,t,r){return!!e&&e[0]===1&&e.length===4+e[3]*4&&!!t&&t.length===3&&lf(t)&&t[0]>0&&Math.abs(t[0]-t[1])<=1e-8&&!!r&&r.length===6&&lf(r)&&r[0]===0&&r[1]===0}function Ux(e,t,r,o){let i=e.get(34735),n=e.get(33550),a=e.get(33922);if(!Rx(i,n,a)||!Gx(i))throw new Error("COG must use north-up EPSG:3857 PixelIsArea georeferencing");return{width:t,height:r,resolution:n[0],left:a[3],top:a[4],elevation:o}}function Fx(e,t,r,o,i,n,a){return o>=0&&o<=24&&Math.abs(20037508342789244e-9*2/(256*2**o)-a)<=a*1e-7&&(!r.elevation||Number.isInteger(i)&&Number.isInteger(n))&&Math.abs(t.width/r.width-t.height/r.height)<=1e-7&&r.elevation===t.elevation&&i>=0&&n>=0&&i+r.width/256<=2**o&&n+r.height/256<=2**o&&!e.levels.has(o)&&!(t.elevation&&e.levels.size)}function Nx(e,t){if(t.offsets?.length!==t.columns*t.rows||t.lengths?.length!==t.offsets.length)throw new Error("Invalid COG tile offsets or lengths");let r;for(r=0;r<t.offsets.length;r++)if(!t.offsets[r]||!t.lengths[r]||t.lengths[r]>1048576||t.offsets[r]+t.lengths[r]>e.size)throw new Error("Invalid COG tile offsets or lengths")}function jx(e,t,r){let o=t.tags,i=Dx(o);r.base||(r.base=Ux(o,i.width,i.height,i.elevation));let n=r.base,a=n.resolution*n.width/i.width,s=Math.round(Math.log2(20037508342789244e-9*2/(256*a))),m=20037508342789244e-9*2/2**s,f=(n.left+20037508342789244e-9)/m,p=(20037508342789244e-9-n.top)/m;if(Math.abs(f-Math.round(f))<1e-6&&(f=Math.round(f)),Math.abs(p-Math.round(p))<1e-6&&(p=Math.round(p)),!Fx(e,n,i,s,f,p,a))throw new Error("COG levels must align with the Web Mercator XYZ tile grid");let c={x:f,y:p,columns:i.width/256,rows:i.height/256,samples:i.samples,elevation:i.elevation,compression:o.get(259)[0],offsets:o.get(324),lengths:o.get(325)};Nx(e,c),e.levels.set(s,c),r.minZoom=Math.min(r.minZoom,s),r.maxZoom=Math.max(r.maxZoom,s)}async function Wx(e,t){let r={base:null,minZoom:1/0,maxZoom:-1/0},o=new Set,i;for(;t;){if(o.has(t)||o.size>=24)throw new Error("Cyclic or excessive COG directories");o.add(t),i=await zx(e,t),jx(e,i,r),t=i.next}if(!r.base)throw new Error("COG has no image directory");if(e.levels.size!==r.maxZoom-r.minZoom+1)throw new Error("COG overview zooms must be contiguous");return{base:r.base,minZoom:r.minZoom,maxZoom:r.maxZoom}}async function Zx(e,t,r){if(r===1){if(e.byteLength!==t)throw new Error("Invalid uncompressed COG tile size");return e}let i=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")).getReader(),n=new Uint8Array(t),a=0,s;try{for(;!(s=await i.read()).done;){if(a+s.value.length>t)throw await i.cancel(),new Error("Oversized decoded COG tile");n.set(s.value,a),a+=s.value.length}}finally{i.releaseLock()}if(a!==t)throw new Error("Truncated decoded COG tile");return n.buffer}async function Ws(e,t,r,o,i){let n=o*t.columns+r;return Zx(await $e(e,t.offsets[n],t.lengths[n],i),256*256*(t.elevation?4:t.samples),t.compression)}async function $x(e,t,r,o,i){let n=await Ws(e,t,r-t.x,o-t.y,i);i?.throwIfAborted();let a=new DataView(n),s=new Float32Array(256*256),m,f;for(m=0;m<s.length;m++){if(f=a.getFloat32(m*4,e.little),!Number.isFinite(f)||f<-12e3||f>1e4)throw new Error("Invalid or missing COG elevation sample");s[m]=f}return{data:s.buffer}}async function Vx(e,t,r,o,i){let n=new OffscreenCanvas(256,256),a=n.getContext("2d");if(!a)throw new Error("Unable to create COG tile canvas");let s=(r-t.x)*256,m=(o-t.y)*256,f,p,c,l,u,d,y;for(p=Math.max(0,Math.floor(m/256));p<Math.min(t.rows,Math.ceil(m/256+1));p++)for(f=Math.max(0,Math.floor(s/256));f<Math.min(t.columns,Math.ceil(s/256+1));f++){for(c=new Uint8Array(await Ws(e,t,f,p,i)),i?.throwIfAborted(),l=new Uint8ClampedArray(256*256*4),u=0,d=0;u<c.length;u+=t.samples,d+=4)l[d]=c[u],l[d+1]=c[u+1],l[d+2]=c[u+2],l[d+3]=t.samples===4?c[u+3]:255;y=await createImageBitmap(new ImageData(l,256,256)),a.drawImage(y,f*256-s,p*256-m),y.close()}let g=n.transferToImageBitmap();return i?.aborted&&(g.close(),i.throwIfAborted()),{image:g}}function qx(e,t,r){return Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(r)&&e>=0&&e<=24&&t>=0&&r>=0&&t<2**e&&r<2**e}async function Hx(e,t,r,o,i){if(i?.throwIfAborted(),!qx(t,r,o))throw new Error("Invalid COG tile coordinates");let n=e.levels.get(t);if(!(!n||r+1<=n.x||o+1<=n.y||r>=n.x+n.columns||o>=n.y+n.rows))return n.elevation?$x(e,n,r,o,i):Vx(e,n,r,o,i)}function Yx(e){return e.header}function Xx(e,t){if(t.tileType!==0||t.tileCompression!==1||!Number.isSafeInteger(t.jsonMetadataOffset)||!Number.isSafeInteger(t.jsonMetadataLength)||t.jsonMetadataLength<=0||t.jsonMetadataLength>1048576||!Number.isSafeInteger(t.tileDataOffset)||!Number.isSafeInteger(t.tileDataLength)||t.tileDataOffset<127||t.tileDataOffset+t.tileDataLength>e.size)throw new Error("Invalid PMTiles COG asset container")}async function Kx(e,t,r){let o=JSON.parse(new TextDecoder().decode(await Go(await $e(e,t.jsonMetadataOffset,t.jsonMetadataLength),t.internalCompression))),i=o.cog_assets||{},n=Object.hasOwn(i,r)?o.cog_assets[r]:null;if(o.format!=="cog-assets-v1"||!n||!Number.isSafeInteger(n.offset)||!Number.isSafeInteger(n.length)||n.offset<0||n.length<8||n.offset+n.length>t.tileDataLength)throw new Error(`Invalid or missing PMTiles COG asset: ${r}`);return n}async function Jx(e,t){let r={url:e},o=Aa(await $e(r,0,127));Xx(r,o);let i=await Kx(r,o,t),n=o.tileDataOffset+i.offset;return{url:e,baseOffset:n,size:i.length,containerSize:r.size,etag:r.etag,full:r.full?.slice(n,n+i.length)}}async function Qx(e,t){let r=t===void 0?{url:e}:await Jx(e,t);r.levels=new Map;let o=new DataView(await $e(r,0,8)),i=o.getUint16(0);if(i!==18761&&i!==19789)throw new Error("Invalid TIFF byte order");if(r.little=i===18761,o.getUint16(2,r.little)!==42)throw new Error("Expected classic TIFF (BigTIFF is not supported)");let{base:n,minZoom:a,maxZoom:s}=await Wx(r,o.getUint32(4,r.little)),m=20037508342789244e-9,f=n.left+n.resolution/2,p=n.left+(n.width-.5)*n.resolution,c=n.top-n.resolution/2,l=n.top-(n.height-.5)*n.resolution;return r.header={minZoom:a,maxZoom:s,tileType:n.elevation?0:2,minLon:f/m*180,maxLon:p/m*180,minLat:Math.atan(Math.sinh(l/m*Math.PI))*180/Math.PI,maxLat:Math.atan(Math.sinh(c/m*Math.PI))*180/Math.PI},{getHeader:Yx.bind(null,r),getZxy:Hx.bind(null,r)}}function e0(e,t){ps(e,{ariaLabel:"COG raster",...t,archive:t.archive||Qx(new URL(t.url,document.baseURI).href,t.asset)})}function t0(e){switch(e){case"geojson":return Tx;case"pmtiles":return ps;case"cog":return e0;case"terrain":return Ag;case"traffic":return Ny;default:return null}}function r0(){let e=Ns.shift();return e.initialize=t0(e.type),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function o0(e){let{layer:t,ready:r}=e;if(e.error)return Vn(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),I.delete(t),e.initialize(t,e.settings),o?.addLayer(t),re.get(t)===r?t:re.get(t)}catch(o){throw t.fire("error",{error:o}),o}}function i0(e=go){if(vt.has(this)||vt.add(this),Object.getPrototypeOf(this)!==h.Layer.prototype||!e?.source){if(br.value.initialize)return br.value.initialize.apply(this,arguments);h.Util.setOptions(this,e);return}let{source:{type:t=e.source.data?.type==="FeatureCollection"?"geojson":/\.pmtiles(?:[?#]|$)/i.test(e.source.url)?"pmtiles":/\.tiff?(?:[?#]|$)/i.test(e.source.url)?"cog":"3d",...r},...o}=e,i={...r,...o};if(h.Util.setOptions(this,o),Ut.set(this,t),t==="3d"){Lt(this,i);return}I.set(this,"pending");let n={layer:this,type:t,settings:i,ready:null};Ns.push(n),js.value=js.value.catch(at).then(r0);let a=js.value.then(o0);re.set(this,a),n.ready=a,a.catch(at)}b();function n0(e,t){switch(I.get(e)){case"3d":return Yo(e,t);case"raster":return fg(e,t);case"terrain":return lg(e,t);case"time":return Vg.call(e,t)}}function a0(e){let t=h.Util.stamp(e);return this._layers[t]?I.get(e)?(this._loaded&&n0(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):Wi.value.call(this,e):this}H();function s0(){return k(this)}W();function m0(){return S(this)}function f0(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),xt(e),e}function p0(e){return f0(this,e)}function c0(){vt.has(this)||vt.add(this);let e=this._initHooksCalled;ji.value.call(this),e||xx.call(this)}br.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Layer.prototype));ji.value=h.Layer.prototype.callInitHooks;h.Layer.include({initialize:i0,_layerAdd:Bx,callInitHooks:c0});Wi.value=h.Map.prototype.removeLayer;h.Map.include({removeLayer:a0,getPitch:s0,getBearing:m0});h.Marker.include({setRotation:p0});})();
6
+ `:""}${e.description}`),t.textContent=r,t}function Vs(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),qo(e.layer,e.status),e.update()}function t0(e){Lt.set(e.layer,e),e.ready&&Vs(e)}function er(e,t){t&&(nt.get(e.layer)?.mesh===t&&(Ct(e.layer,null),Se.set(e.layer,null),_t(e.layer,null)),Ie(e.layer,t))}function Zs(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function r0(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),er(e,e.mesh),er(e,e.route),e.mesh=e.route=null,Lt.delete(e.layer),Zs(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function o0(e){e.ready=!0,e.layer._map&&Vs(e)}function qs(e){let t=Zo.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function i0(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}var di=new Map;function kf(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function n0(e,t){return e-t}function a0(e,{timeZone:t,duration:r,services:o}){let i=e instanceof Date?e:new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=di.get(t);n||(n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),di.size>=32&&di.delete(di.keys().next().value),di.set(t,n));let a={},s,m,f,p,c,l,u;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let h=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,x=((Math.floor(Date.UTC(a.year,a.month-1,a.day)/864e5)+4)%7+7)%7,g=[];for({from:m,to:f,every:p=1/0,months:c,weekdays:l}of o)if(!(c?.includes(a.month)===!1||l?.includes(x)===!1))for(u=kf(m);u<=kf(f);u+=p)g.push(u);g.sort(n0);let y=[];for(u of g)h>=u&&h<u+r&&y.push({id:`${a.year}-${a.month}-${a.day}-${u}`,departure:`${String(Math.floor(u/60)).padStart(2,"0")}:${String(u%60).padStart(2,"0")}`,progress:(h-u)/r});return y}function s0(e,t,r){let o=[],i,n,a,s,m,f,p,c;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(m of a0(e,a))o.push({id:`${i}-${m.id}`,lane:n,distance:m.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:m.departure}});else for(f=e/1e3*r,p=n.offsets||=i0(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+f)%n.length,speed:r,properties:n.properties});return o}function Hs(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var m0=Object.freeze({unlit:!0});function f0(e,t,r,o,i,n,a,s,m,f,p,c,l,u){let h=o[0]+n*f,x=o[1]+a*f,g=o[2]+(i[2]-o[2])*f+.4,y=o[0]+n*p,w=o[1]+a*p,S=o[2]+(i[2]-o[2])*p+.4,T;for(T=0;T<6;T++)T===0||T===3?e.push(h-s,g,x-m):T===1?e.push(h+s,g,x+m):T===5?e.push(y-s,S,w-m):e.push(y+s,S,w+m),t.push(0,1,0),r.push(c,l,u)}function p0(e,t,r,o,i,n,a,s,m){let f=o[n-1],p=o[n],c=p[0]-f[0],l=p[1]-f[1],u=i[n]-i[n-1];if(!u)return;let h=-l/u*2.5,x=c/u*2.5,g,y,w;for(g=Math.floor(i[n-1]/30)*30;g<i[n];g+=30)y=Math.max(0,(g-i[n-1])/u),w=Math.min(1,(g+18-i[n-1])/u),!(w<=y)&&f0(e,t,r,f,p,c,l,h,x,y,w,a,s,m)}function c0(e){let t=[],r=[],o=[],i,n,a,s,m,f,p,c,l;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,m=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,f=m===null?.08:(m>>16&255)/255,p=m===null?.7:(m>>8&255)/255,c=m===null?.85:(m&255)/255,l=1;l<i.length;l++)p0(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function Ys(e,t,r,o,i=0){let n=pr(e.layer,t,o,i);return n.extras.featureFaces=r,n}function l0(e){e.route=Ys(e,c0(e.lanes),[],m0)}function Xs(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let m=[];for(i of e.lanes)for([n,a,s]of i.points)m.push(n-t,s,a-t,n+t,s+r,a+t);let f={attributes:{position:{data:m}}};Ce(f),e.mesh.geometry.bounds=f.bounds}function u0(e){let{trips:t,model:r,vertices:o}=e;if(er(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,m;for(a=0;a<t.length;a++){s=t[a];for(m of ii(r(a,s.properties)).color)i.push(m);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let f=i.length/3;e.mesh=Ys(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,Ws,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,Xs(e)}function nn(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function d0(e,t){let r,o,i,n=0;for(r of e.lanes)n+=r.points.length;let a=new Float32Array(n*4),s=0;for(r of e.lanes)for(r.start=s/4,o=0;o<r.points.length;o++)i=r.points[o],a[s++]=i[0],a[s++]=i[1],a[s++]=i[2],a[s++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=nn(t,a),e.lanesDirty=!1}function h0(e){let{device:t}=v.get(e.layer);if(e.gpu?.device!==t){Zs(e);let c=new Float32Array(e.template.position.length+e.template.normal.length);c.set(e.template.position),c.set(e.template.normal,e.template.position.length),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:nn(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&d0(e,t);let n=new Float32Array(e.trips.length*4),a=new Uint32Array(n.buffer);for(r=0;r<e.trips.length;r++)o=e.trips[r],a[r*4]=o.lane.start,a[r*4+1]=o.lane.points.length,n[r*4+2]=o.distance,n[r*4+3]=o.speed,e.mesh.extras.featureFaces[r].properties=o.properties;e.gpu.vehicles?.size>=n.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=nn(t,n));let{position:s,normal:m}=e.mesh.geometry.attributes,f=[],p;for(i=0;i<6;i++)p=i===0?e.gpu.params:i===1?e.gpu.template:i===2?e.gpu.points:i===3?e.gpu.vehicles:i===4?s.buffer:m.buffer,f.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:f})}function g0(e,t){return t?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:`${e.vehicle}: loading\u2026`:`${e.vehicle}: select a valid simulation date`}function y0(e,t,r,o){let i;try{o?e.trips=s0(t,e.lanes,e.velocity):e.trips.length=0,i=g0(e,o)}catch(f){Hs(e,f);return}e.rebasedAt=r,e.nextCheck=r+1e3;let n="",a;for(a of e.trips)n+=`${n?",":""}${a.id}`;let s=e.outline&&!e.route&&e.lanes.length,m=n!==e.tripsKey||!!s;return s&&l0(e),n!==e.tripsKey&&(u0(e),e.tripsKey=n),e.mesh&&h0(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function x0(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function v0(e){e.litAt=performance.now();let t=[],r=e.position||={},o,i,n,a,s,m,f,p,c,l;for(o of e.trips){({x:i,y:n,z:a,dx:s,dz:m}=zo(e,o,r));for(l of e.lights)[f,p,c]=l.position,t.push({...l,position:[i-f*m-c*s,n+p,a+f*s-c*m]})}e.mesh.extras.lights=t}function w0(e,t,r){e.mesh&&(x0(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&v0(e))}function L0(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!v.get(e.layer)){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=qs(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=y0(e,r,o,i),n===void 0)||(w0(e,o,t),(e.mesh||n)&&E(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function b0(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}var M0=Object.freeze([]);function B0({features:e=M0}){let t=[],r,o,i,n,a,s,m,f;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,f=0;f<(i?i.length:1);f++){n=i?i[f]:r.coordinates,a=[];for([s,m]of n)a.push([m,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}$();L();function T0(e){let t=me.get(e);return Be.get(t)&&t}function Js(e){let{layer:t,lanes:r}=e,o=T0(t._map),i=M.get(t).position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??ye(t._map,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function P0(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(I.get(t)),n=Math.cos(I.get(t).lat*B),a,s,m,f,p;for(a of r){a.points=[];for([s,m]of a.latlngs)f=o.project(new d.LatLng(s,m)),a.points.push([(f.x-i.x)*n,-(f.y-i.y)*n,0]);for(a.lengths=[0],p=1;p<a.points.length;p++)a.lengths.push(a.lengths[p-1]+Math.hypot(a.points[p][0]-a.points[p-1][0],a.points[p][1]-a.points[p-1][1]));a.length=a.lengths.at(-1)}Js(e),er(e,e.route),e.route=null,e.tripsKey=null}function S0(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=B0(r),P0(e),e.frame||e.tick()}}function k0(e,t,r){!t.aborted&&r.name!=="AbortError"&&Hs(e,r)}function C0(e){let{time:t}=qs(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;b0(e,t,r).then(S0.bind(null,e,r),k0.bind(null,e,r))}function _0(e,t){t?.layer&&!Pt.get(t.layer)?.time||(cancelAnimationFrame(e.frame),C0(e),e.tick())}function E0(e){e.lanes.length&&(Js(e),er(e,e.route),e.route=null,e.mesh&&Xs(e),e.frame||e.tick())}function z0(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=Ws){let{model:s,lights:m,side:f}=Kx[r];o??=f,Et(e,{tooltip:e0,nightLight:!!m,...a});let p=d.DomUtil.create("small","traffic-status");p.style.cssText="flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;",p.title=r,p.textContent=`${r}: loading\u2026`;let c=ii(s(0)),l=c.position.length,u=l/3,h=new ArrayBuffer(16),x=new Float32Array(h),g=new Uint32Array(h),y={layer:e,url:t,model:s,lights:m,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:l,vertices:u,params:h,paramFloats:x,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};y.shader=Qx,y.tick=L0.bind(null,y),y.update=_0.bind(null,y),y.terrain=E0.bind(null,y),Lt.set(e,y),e.on("ready",o0.bind(null,y)),e.on("add",t0.bind(null,y)),e.on("remove",r0.bind(null,y))}function A0(e){return e.header}function Cf(e,t,r,o,i){return Jo(e.layer._map||ks.get(e.layer),e.workerUrl,{type:"cog",url:e.url,asset:e.asset,z:t,x:r,y:o},i)}async function R0(e,t){let r={layer:e,url:new URL(t.url,document.baseURI).href,asset:t.asset,workerUrl:t.workerUrl},o=await Cf(r);return{getHeader:A0.bind(null,{header:o}),getZxy:Cf.bind(null,r)}}function O0(e,t){Fs(e,{ariaLabel:"COG raster",...t,archive:t.archive||R0(e,t)})}function D0(e,t={}){switch(e){case"raster":return t.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(t.url)?O0:Fs;case"terrain":return jx;case"traffic":return z0;default:return null}}function I0(){let e=Es.shift();return e.initialize=D0(e.type,e.settings),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function G0(e){let{layer:t,ready:r}=e;if(e.error)return qe(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),A.delete(t),e.initialize(t,e.settings),o?.addLayer(t),re.get(t)===r?t:re.get(t)}catch(o){throw t.fire("error",{error:o}),o}}function U0(e=Eo){if(St.has(this)||St.add(this),Object.getPrototypeOf(this)!==d.Layer.prototype||!e?.source){if(Ir.value.initialize)return Ir.value.initialize.apply(this,arguments);d.Util.setOptions(this,e);return}let{source:{type:t=/\.pmtiles(?:[?#]|$)|\.tiff?(?:[?#]|$)/i.test(e.source.url)?"raster":"vector",...r},...o}=e,i={...r,...o};if(d.Util.setOptions(this,o),qt.set(this,t),t==="vector"){Cy(i)?zx(this,i):i.data!==void 0||i.url&&!/\.(?:pmtiles|glb|gltf)(?:[?#]|$)/i.test(i.url)?ky(this,i):Et(this,i);return}A.set(this,"pending");let n={layer:this,type:t,settings:i,ready:null};Es.push(n),zs.value=zs.value.catch(Ye).then(I0);let a=zs.value.then(G0);re.set(this,a),n.ready=a,a.catch(Ye)}L();function N0(e,t){switch(A.get(e)){case"3d":return no(e,t);case"raster":return Ux(e,t);case"terrain":return Wx(e,t);case"time":return jd.call(e,t)}}function F0(e){let t=d.Util.stamp(e);return this._layers[t]?A.get(e)?(this._loaded&&N0(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):mn.value.call(this,e):this}J();function W0(){return _(this)}Z();function j0(){return k(this)}Oi();function $0(e,t){return Vt(this,e,t)}Fo();function V0(e,t){return lt(this,e,t)}function Z0(e){return Os(this,e)}L();var Ks=new WeakMap;var Qs=new WeakMap;var em=new WeakMap;function q0(e){return this._project(),this._parts=this._rings,Ks.get(this).call(this,e)}function H0(){return this._project(),Qs.get(this).call(this)}function Y0(){em.get(this).call(this),this._container.remove()}var tr=new Map;var Dt={value:null};function X0(e){tr.delete(e),Dr.set(e,null),!tr.size&&Dt.value!==null&&(cancelAnimationFrame(Dt.value),Dt.value=null)}function J0(){Dt.value=null;let e=[...tr],t,r;for([t,r]of e)tr.get(t)===r&&(tr.delete(t),Dr.set(t,null),tm.call(t))}function K0(e){pi.set(e,(pi.get(e)||0)+1),tr.set(e,pi.get(e)),Dt.value===null&&(Dt.value=requestAnimationFrame(J0)),Dr.set(e,Dt.value)}function tm(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i,n;for(i in this._tiles)Object.hasOwn(this._tiles,i)&&(n=this._tiles[i],!(!n.current||!n.loaded)&&(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?r=!0:n.active||(this._onOpaqueTile(n),n.active=!0,o=!0)));o&&!this._noPrune&&this._pruneTiles(),Tt(this),X0(e),r&&K0(e)}function Q0(){return Tt(this),this}function ev(){this instanceof d.Polyline||this instanceof d.CircleMarker?(this.beforeAdd=this._updateBounds=Ye,this.redraw=Q0,A.set(this,"path"),this instanceof d.Polyline&&(Ks.set(this,this.closestLayerPoint),this.closestLayerPoint=q0),this instanceof d.Circle&&(Qs.set(this,this.getBounds),this.getBounds=H0)):this instanceof d.GridLayer?(em.set(this,this._initContainer),this._initContainer=Y0,this._updateOpacity=tm):this instanceof d.ImageOverlay&&!(this instanceof d.VideoOverlay)&&!(this instanceof d.SVGOverlay)&&(A.set(this,"image"),this._reset=Tt)}function tv(){St.has(this)||St.add(this);let e=this._initHooksCalled;sn.value.call(this),e||ev.call(this)}Ir.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Layer.prototype));sn.value=d.Layer.prototype.callInitHooks;d.Layer.include({initialize:U0,_layerAdd:Sy,callInitHooks:tv});mn.value=d.Map.prototype.removeLayer;d.Map.include({removeLayer:F0,getPitch:W0,getBearing:j0,setPitch:$0,setBearing:V0});d.Marker.include({setRotation:Z0});})();
5
7
  //# sourceMappingURL=leaflet-city-mapper.js.map